From: Michael Tremer Date: Wed, 12 Apr 2017 09:47:47 +0000 (+0200) Subject: glibc: Update to 2.25 X-Git-Tag: v2.19-core112~150 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6b9f806e95f6bedaf27f7b8b62e59cf0e21b02d5;p=ipfire-2.x.git glibc: Update to 2.25 Signed-off-by: Michael Tremer --- diff --git a/lfs/glibc b/lfs/glibc index c0af6fc06c..d850a503c5 100644 --- a/lfs/glibc +++ b/lfs/glibc @@ -24,11 +24,10 @@ include Config -VER = 2.12-2-gc4ccff1 -PORTS_VER = 2.12.1 +VER = 2.25 THISAPP = glibc-$(VER) -DL_FILE = $(THISAPP).tar.bz2 +DL_FILE = $(THISAPP).tar.gz DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) @@ -40,8 +39,6 @@ ifeq "$(ROOT)" "" --build=$(BUILDTARGET) \ --prefix=/usr \ --libexecdir=/usr/lib/glibc - EXTRA_MAKE = - EXTRA_INSTALL = else TARGET = $(DIR_INFO)/$(THISAPP)-tools EXTRA_CONFIG = \ @@ -50,23 +47,18 @@ else --prefix=/tools \ --with-headers=/tools/include \ libc_cv_forced_unwind=yes \ - libc_cv_ctors_header=yes \ - libc_cv_c_cleanup=yes \ - CC=/tools/bin/$(CROSSTARGET)-gcc - EXTRA_MAKE = - EXTRA_INSTALL = + libc_cv_c_cleanup=yes endif -# Enable some extra optimization for the glibc code. -CFLAGS = -O3 -DNDEBUG -fasynchronous-unwind-tables -fPIC -DPIC \ - -DNO_CTORS_DTORS_SECTIONS +# Enable some extra optimization for the glibc code +CFLAGS = -O3 -DNDEBUG -fasynchronous-unwind-tables -fPIC -DPIC ifeq "$(MACHINE)" "i586" CFLAGS += -march=i586 -mtune=generic -mno-tls-direct-seg-refs endif -ifeq "$(MACHINE_TYPE)" "arm" - # Disable hardware FP for ARM. +# Disable hardware FP for armv5tel +ifeq "$(MACHINE)" "armv5tel" EXTRA_CONFIG += \ --without-fp endif @@ -74,11 +66,12 @@ endif # Add some general configuration flags EXTRA_CONFIG += \ --disable-profile \ - --enable-kernel=2.6.0 \ + --enable-kernel=3.2 \ --enable-add-ons \ --without-selinux \ --enable-experimental-malloc \ - --enable-bind-now + --enable-bind-now \ + --enable-stack-protector=strong ############################################################################### # Top-level Rules @@ -88,14 +81,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 450958ad3d3b5a432b356376904c96b0 - -# ARM needs glibc-ports -ifeq "$(MACHINE_TYPE)" "arm" - objects += glibc-ports-$(PORTS_VER).tar.bz2 - glibc-ports-$(PORTS_VER).tar.bz2 = $(DL_FROM)/glibc-ports-$(PORTS_VER).tar.bz2 - glibc-ports-$(PORTS_VER).tar.bz2_MD5 = cb01ab976180e98287cef5079e35359e -endif +$(DL_FILE)_MD5 = 0c9f827298841dbf3bff3060f3d7f19c install : $(TARGET) @@ -124,252 +110,9 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) $(DIR_SRC)/glibc-build && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE) + @rm -rf $(DIR_APP) $(DIR_SRC)/glibc-build && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) @mkdir $(DIR_SRC)/glibc-build -ifeq "$(MACHINE_TYPE)" "arm" - cd $(DIR_APP) && tar jxf $(DIR_DL)/glibc-ports-$(PORTS_VER).tar.bz2 - cd $(DIR_APP) && mv -v glibc-ports-$(PORTS_VER) ports - - # http://sourceware.org/bugzilla/show_bug.cgi?id=12354 - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-cfi-entry-not-closed.patch -endif - - # Apply all patches. - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-aliasing.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-fedora.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-getlogin-r.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-localedata.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-recvmmsg.patch - - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh587360.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh582738.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh593396.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh593686.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh607461.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh621959.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh607010.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh630801.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh631011.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh641128.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh642584.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh643822.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh645672.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh580498.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh615090.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh623187.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh646954.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh647448.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh615701.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh652661.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh656530.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh656014.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh661982.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh601686.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh676076.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh667974.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh625893.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh681054.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh689471.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh692177.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh692838.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh703480.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh705465.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh703481.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh694386.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh676591.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh711987.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh695595.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh695963.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh713134.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh714823.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh718057.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh688980.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh712248.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh731042.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh730379.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh700507.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh699724.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh736346.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh737778.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh738665.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh738763.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh739184.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh711927.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh688720.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh726517.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh752122.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh739971.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh751750.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh740506.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh757888.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh750531.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh749188.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh767746.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh767693.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh740506-2.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh696472.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh771342.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh657572.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh767693-2.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh782585.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh784402.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh697421.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh785984.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh767146.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh766513.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh789209.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh788959.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh789189.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh789238.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh794817.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh797094-1.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh797094-2.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh789238-2.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh795498.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh794817-2.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh804689.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh809602.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh808337.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh788959-2.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh808545.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh833717.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh823909.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh826149.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh841787.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh809726.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh806404.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh832516.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh830127.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh832694.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh843673.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh847932.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh837918.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh849203.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh849651.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh827362.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh837695.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh804686.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh848082.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh846342.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh852445.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh861167.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh863453.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh864322.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh929388.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh919562.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh886968.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh966775.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh834386.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh834386-2.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh862094.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh851470.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh868808.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh552960.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh663641.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh663641-2.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh848748.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh952422.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh663641-3.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh916986.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh970776.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh966778.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh863384.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh629823.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh629823-2.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh947882.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh905874.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh929302.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh928318.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh905575.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh988931.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh970090.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1008310.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1022022.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1043557.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1039988.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh995972.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh981942.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1032628.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1027101.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1025933.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh845218.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1044628.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1085273.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1074342.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1085289.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1082379.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1074353.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1019916.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1028285.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1099025.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1087833.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1027261.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh905941.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1054846.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1111460.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1099025-2.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1133810-1.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1133810-2.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1138769.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1171296.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1172044.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1154563.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1125307.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1176907.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1183534.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1159167.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1023306.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1085312.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1091915.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh859965.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1124204.patch -ifneq "$(MACHINE_TYPE)" "arm" - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh978098.patch -endif - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1144019.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1053178.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1144132.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1116050.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1116050-1.patch -ifneq "$(MACHINE_TYPE)" "arm" - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh867679.patch -endif - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1088301.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1195453-avx512.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1066724.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1209376.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1207236.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1217186.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1256812.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1256812-2.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1256812-3.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1256812-4.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1256890.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1256891.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1291270.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1296031.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1296031-0.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1299319-0.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1299319-1.patch - - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-resolv-stack_chk_fail.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-remove-ctors-dtors-output-sections.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-test-installation.pl-nss_test1.patch - - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-test-installation.pl-libgcc_s.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-2.12-accept-make-versions-4.0-and-greater.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-mq_open.patch - - # Fixes: - # 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" cd $(DIR_APP) && sed -i 's|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=/lib/ld-linux.so.3 -o|' \ @@ -389,21 +132,10 @@ endif 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 + cd $(DIR_SRC)/glibc-build && make install ifeq "$(ROOT)" "" # Creating the locales diff --git a/src/patches/glibc-2.12-accept-make-versions-4.0-and-greater.patch b/src/patches/glibc-2.12-accept-make-versions-4.0-and-greater.patch deleted file mode 100644 index 7faf857faf..0000000000 --- a/src/patches/glibc-2.12-accept-make-versions-4.0-and-greater.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 28d708c44bc47b56f6551ff285f78edcf61c208a Mon Sep 17 00:00:00 2001 -From: Marc-Antoine Perennou -Date: Thu, 31 Oct 2013 12:37:50 +1000 -Subject: Accept make versions 4.0 and greater - - -diff --git a/configure b/configure -index f382138..5e61abd 100755 ---- a/configure -+++ b/configure -@@ -4761,7 +4761,7 @@ $as_echo_n "checking version of $MAKE... " >&6; } - ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'` - case $ac_prog_version in - '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; -- 3.79* | 3.[89]*) -+ 3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*) - ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; - *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; - -diff --git a/configure.in b/configure.in -index 49b70fd..6da8efd 100644 ---- a/configure.in -+++ b/configure.in -@@ -984,7 +984,7 @@ AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v, - critic_missing="$critic_missing gcc") - AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version, - [GNU Make[^0-9]*\([0-9][0-9.]*\)], -- [3.79* | 3.[89]*], critic_missing="$critic_missing make") -+ [3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make") - - AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version, - [GNU gettext.* \([0-9]*\.[0-9.]*\)], --- -cgit v0.10.2 - diff --git a/src/patches/glibc-cfi-entry-not-closed.patch b/src/patches/glibc-cfi-entry-not-closed.patch deleted file mode 100644 index 02cfe8fa67..0000000000 --- a/src/patches/glibc-cfi-entry-not-closed.patch +++ /dev/null @@ -1,23 +0,0 @@ ---- glibc-2.12.2/ports/sysdeps/unix/sysv/linux/arm/sigrestorer.S 2011-09-08 22:22:41.000000000 +0400 -+++ glibc-2.12.2/ports/sysdeps/unix/sysv/linux/arm/sigrestorer.S 2011-09-08 21:44:49.000000000 +0400 -@@ -18,16 +18,20 @@ - - #include - -+ .text -+ - /* If no SA_RESTORER function was specified by the application we use - one of these. This avoids the need for the kernel to synthesise a return - instruction on the stack, which would involve expensive cache flushes. */ - - ENTRY(__default_sa_restorer) - swi SYS_ify(sigreturn) -+PSEUDO_END (__default_sa_restorer) - - #ifdef __NR_rt_sigreturn - - ENTRY(__default_rt_sa_restorer) - swi SYS_ify(rt_sigreturn) -+PSEUDO_END (__default_rt_sa_restorer) - - #endif diff --git a/src/patches/glibc-remove-ctors-dtors-output-sections.patch b/src/patches/glibc-remove-ctors-dtors-output-sections.patch deleted file mode 100644 index 91155c9afb..0000000000 --- a/src/patches/glibc-remove-ctors-dtors-output-sections.patch +++ /dev/null @@ -1,150 +0,0 @@ -From 4a531bb0b3b582cb693de9f76d2d97d970f9a5d5 Mon Sep 17 00:00:00 2001 -From: H.J. Lu -Date: Fri, 24 Dec 2010 20:14:37 -0500 -Subject: [PATCH] Remove `.ctors' and `.dtors' output sections - ---- - config.h.in | 3 + - configure.in | 2 + - elf/sofini.c | 2 + - elf/soinit.c | 2 + - sysdeps/i386/init-first.c | 2 + - sysdeps/mach/hurd/i386/init-first.c | 2 +- - sysdeps/mach/hurd/powerpc/init-first.c | 2 +- - sysdeps/sh/init-first.c | 2 + - sysdeps/unix/sysv/linux/init-first.c | 2 +- - 9 files changed, 16 insertions(+), 3 deletions(-) - -diff --git a/config.h.in b/config.h.in -index 18bf01a..9e797eb 100644 ---- a/config.h.in -+++ b/config.h.in -@@ -201,6 +201,9 @@ - /* Define if multi-arch DSOs should be generated. */ - #undef USE_MULTIARCH - -+/* Define if `.ctors' and `.dtors' sections shouldn't be used. */ -+#undef NO_CTORS_DTORS_SECTIONS -+ - /* - */ - -diff --git a/configure.in b/configure.in -index d8cd5f1..ad25b9b 100644 ---- a/configure.in -+++ b/configure.in -@@ -1497,6 +1497,8 @@ EOF - rm -f conftest*]) - if test $libc_cv_initfini_array != yes; then - AC_MSG_ERROR([Need linker with .init_array/.fini_array support.]) -+ elif AC_TRY_COMMAND([${CC-cc} -Wl,--verbose 2>&1|grep SORT_BY_INIT_PRIORITY 1>&AS_MESSAGE_LOG_FD]); then -+ AC_DEFINE(NO_CTORS_DTORS_SECTIONS) - fi - - AC_CACHE_CHECK(for libunwind-support in compiler, -diff --git a/elf/sofini.c b/elf/sofini.c -index 5e06f0c..13e74b7 100644 ---- a/elf/sofini.c -+++ b/elf/sofini.c -@@ -1,12 +1,14 @@ - /* Finalizer module for ELF shared C library. This provides terminating - null pointer words in the `.ctors' and `.dtors' sections. */ - -+#ifndef NO_CTORS_DTORS_SECTIONS - static void (*const __CTOR_END__[1]) (void) - __attribute__ ((used, section (".ctors"))) - = { 0 }; - static void (*const __DTOR_END__[1]) (void) - __attribute__ ((used, section (".dtors"))) - = { 0 }; -+#endif - - /* Terminate the frame unwind info section with a 4byte 0 as a sentinel; - this would be the 'length' field in a real FDE. */ -diff --git a/elf/soinit.c b/elf/soinit.c -index 6fecbb5..1db676a 100644 ---- a/elf/soinit.c -+++ b/elf/soinit.c -@@ -3,6 +3,7 @@ - the `.ctors' and `.dtors' sections so the lists are terminated, and - calling those lists of functions. */ - -+#ifndef NO_CTORS_DTORS_SECTIONS - #include - #include - -@@ -40,3 +41,4 @@ __libc_fini (void) - - void (*_fini_ptr) (void) __attribute__ ((section (".fini_array"))) - = &__libc_fini; -+#endif -diff --git a/sysdeps/i386/init-first.c b/sysdeps/i386/init-first.c -index c6355a8..2af042f 100644 ---- a/sysdeps/i386/init-first.c -+++ b/sysdeps/i386/init-first.c -@@ -59,7 +59,9 @@ _init (int argc, ...) - { - init (&argc); - -+#ifndef NO_CTORS_DTORS_SECTIONS - __libc_global_ctors (); -+#endif - } - #endif - -diff --git a/sysdeps/mach/hurd/i386/init-first.c b/sysdeps/mach/hurd/i386/init-first.c -index f9a7a58..60823bd 100644 ---- a/sysdeps/mach/hurd/i386/init-first.c -+++ b/sysdeps/mach/hurd/i386/init-first.c -@@ -92,7 +92,7 @@ posixland_init (int argc, char **argv, char **envp) - __getopt_clean_environment (envp); - #endif - --#ifdef SHARED -+#if defined SHARED && !defined NO_CTORS_DTORS_SECTIONS - __libc_global_ctors (); - #endif - } -diff --git a/sysdeps/mach/hurd/powerpc/init-first.c b/sysdeps/mach/hurd/powerpc/init-first.c -index 20fa1d4..21b5054 100644 ---- a/sysdeps/mach/hurd/powerpc/init-first.c -+++ b/sysdeps/mach/hurd/powerpc/init-first.c -@@ -82,7 +82,7 @@ posixland_init (int argc, char **argv, char **envp) - __getopt_clean_environment (__environ); - #endif - --#ifdef SHARED -+#if defined SHARED && !defined NO_CTORS_DTORS_SECTIONS - __libc_global_ctors (); - #endif - } -diff --git a/sysdeps/sh/init-first.c b/sysdeps/sh/init-first.c -index d816625..1f3a821 100644 ---- a/sysdeps/sh/init-first.c -+++ b/sysdeps/sh/init-first.c -@@ -59,7 +59,9 @@ _init (int argc, ...) - { - init (&argc); - -+#ifndef NO_CTORS_DTORS_SECTIONS - __libc_global_ctors (); -+#endif - } - #endif - -diff --git a/sysdeps/unix/sysv/linux/init-first.c b/sysdeps/unix/sysv/linux/init-first.c -index 7b2333d..a60212f 100644 ---- a/sysdeps/unix/sysv/linux/init-first.c -+++ b/sysdeps/unix/sysv/linux/init-first.c -@@ -93,7 +93,7 @@ _init (int argc, char **argv, char **envp) - __getopt_clean_environment (envp); - #endif - --#ifdef SHARED -+#if defined SHARED && !defined NO_CTORS_DTORS_SECTIONS - __libc_global_ctors (); - #endif - } --- -1.7.3.4 - diff --git a/src/patches/glibc-resolv-stack_chk_fail.patch b/src/patches/glibc-resolv-stack_chk_fail.patch deleted file mode 100644 index 00bb710abb..0000000000 --- a/src/patches/glibc-resolv-stack_chk_fail.patch +++ /dev/null @@ -1,35 +0,0 @@ -From e057a1b5930ec538c2b8abbba700a436ef2c81d5 Mon Sep 17 00:00:00 2001 -From: Joseph Myers -Date: Wed, 21 Sep 2011 13:27:50 -0700 -Subject: [PATCH] Link libresolv.so with ld.so for __stack_chk_guard. - ---- - resolv/Makefile | 8 +++++++- - 1 files changed, 7 insertions(+), 1 deletions(-) - -diff --git a/resolv/Makefile b/resolv/Makefile -index ec3788f..b4287de 100644 ---- a/resolv/Makefile -+++ b/resolv/Makefile -@@ -1,4 +1,5 @@ --# Copyright (C) 1994-2001,2003,2004,2007,2008 Free Software Foundation, Inc. -+# Copyright (C) 1994-2001,2003,2004,2007,2008,2011 -+# Free Software Foundation, Inc. - # This file is part of the GNU C Library. - - # The GNU C Library is free software; you can redistribute it and/or -@@ -88,6 +89,11 @@ CFLAGS-res_hconf.c = -fexceptions - # This ensures they will load libc.so for needed symbols if loaded by - # a statically-linked program that hasn't already loaded it. - $(objpfx)libresolv.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a -+# Some hosts need '__stack_chk_guard', so pull in the definition from -+# ld.so if required. -+ifeq (yesyes,$(have-ssp)$(elf)) -+LDLIBS-resolv.so += $(as-needed) $(elfobjdir)/ld.so $(no-as-needed) -+endif - - # The DNS NSS modules needs the resolver. - $(objpfx)libnss_dns.so: $(objpfx)libresolv.so $(common-objpfx)libc.so \ --- -1.7.3.4 - diff --git a/src/patches/glibc-test-installation.pl-libgcc_s.patch b/src/patches/glibc-test-installation.pl-libgcc_s.patch deleted file mode 100644 index 2221353398..0000000000 --- a/src/patches/glibc-test-installation.pl-libgcc_s.patch +++ /dev/null @@ -1,88 +0,0 @@ -diff -Naur glibc-2.12-2-gc4ccff1.org/nptl/sysdeps/pthread/unwind-forcedunwind.c glibc-2.12-2-gc4ccff1/nptl/sysdeps/pthread/unwind-forcedunwind.c -index db56428..495f4b7 100644 ---- glibc-2.12-2-gc4ccff1.org/nptl/sysdeps/pthread/unwind-forcedunwind.c -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/pthread/unwind-forcedunwind.c -@@ -22,7 +22,7 @@ - #include - #include - #include --#include -+#include - - static void *libgcc_s_handle; - static void (*libgcc_s_resume) (struct _Unwind_Exception *exc); -diff -Naur glibc-2.12-2-gc4ccff1.org/scripts/test-installation.pl glibc-2.12-2-gc4ccff1/scripts/test-installation.pl -index 25a919b..3f409ab 100755 ---- glibc-2.12-2-gc4ccff1.org/scripts/test-installation.pl -+++ glibc-2.12-2-gc4ccff1/scripts/test-installation.pl -@@ -106,9 +106,10 @@ while () { - # - libnss1_* from glibc-compat add-on - # - libthread_db since it contains unresolved references - # - it's just a test NSS module -+ # - We don't provide the libgcc so we don't test it - if ($name ne "nss_ldap" && $name ne "db1" - && !($name =~/^nss1_/) && $name ne "thread_db" -- && $name ne "nss_test1") { -+ && $name ne "nss_test1" && $name ne "libgcc_s") { - $link_libs .= " -l$name"; - $versions{$name} = $version; - } -diff -Naur glibc-2.12-2-gc4ccff1.org/shlib-versions glibc-2.12-2-gc4ccff1/shlib-versions -index d3e8407..ac98e49 100644 ---- glibc-2.12-2-gc4ccff1.org/shlib-versions -+++ glibc-2.12-2-gc4ccff1/shlib-versions -@@ -138,3 +138,7 @@ sparc64.*-.*-.* libBrokenLocale=1 GLIBC_2.2 - - # The asynchronous name lookup library. - .*-.*-.* libanl=1 -+ -+# This defines the libgcc soname version this glibc is to load for -+# asynchronous cancellation to work correctly. -+.*-.*-.* libgcc_s=1 -diff -Naur glibc-2.12-2-gc4ccff1.org/sysdeps/generic/framestate.c glibc-2.12-2-gc4ccff1/sysdeps/generic/framestate.c -index 80375bb..edc3539 100644 ---- glibc-2.12-2-gc4ccff1.org/sysdeps/generic/framestate.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/generic/framestate.c -@@ -1,5 +1,5 @@ - /* __frame_state_for unwinder helper function wrapper. -- Copyright (C) 2001, 2003 Free Software Foundation, Inc. -+ Copyright (C) 2001-2012 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2001. - -@@ -24,7 +24,7 @@ - #define __frame_state_for fallback_frame_state_for - #include - #undef __frame_state_for --#include -+#include - - typedef struct frame_state * (*framesf)(void *pc, struct frame_state *); - struct frame_state *__frame_state_for (void *pc, -diff -Naur glibc-2.12-2-gc4ccff1.org/sysdeps/generic/libgcc_s.h glibc-2.12-2-gc4ccff1.org/sysdeps/generic/libgcc_s.h -deleted file mode 100644 -index e74a103..0000000 ---- glibc-2.12-2-gc4ccff1.org/sysdeps/generic/libgcc_s.h -+++ /dev/null -@@ -1,2 +0,0 @@ --/* Name of libgcc_s library provided by gcc. */ --#define LIBGCC_S_SO "libgcc_s.so.1" -diff -Naur glibc-2.12-2-gc4ccff1.org/sysdeps/gnu/unwind-resume.c glibc-2.12-2-gc4ccff1/sysdeps/gnu/unwind-resume.c -index f8ff0c4..dab4370 100644 ---- glibc-2.12-2-gc4ccff1.org/sysdeps/gnu/unwind-resume.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/gnu/unwind-resume.c -@@ -1,4 +1,4 @@ --/* Copyright (C) 2003 Free Software Foundation, Inc. -+/* Copyright (C) 2003-2012 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek . - -@@ -22,7 +22,7 @@ - #include - #include - #include --#include -+#include - - static void *libgcc_s_handle; - static void (*libgcc_s_resume) (struct _Unwind_Exception *exc); diff --git a/src/patches/glibc-test-installation.pl-nss_test1.patch b/src/patches/glibc-test-installation.pl-nss_test1.patch deleted file mode 100644 index 8881d94986..0000000000 --- a/src/patches/glibc-test-installation.pl-nss_test1.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 9191c04a7e19fffbea0a08523e579cd8e55142df Mon Sep 17 00:00:00 2001 -From: Ulrich Drepper -Date: Sat, 23 Jul 2011 15:28:31 -0400 -Subject: [PATCH] Adjust test for correct installation - -diff --git a/scripts/test-installation.pl b/scripts/test-installation.pl -index 90cd9d7..25a919b 100755 ---- a/scripts/test-installation.pl -+++ b/scripts/test-installation.pl -@@ -1,5 +1,5 @@ - #! /usr/bin/perl -w --# Copyright (C) 1997, 1998, 1999, 2004 Free Software Foundation, Inc. -+# Copyright (C) 1997, 1998, 1999, 2004, 2011 Free Software Foundation, Inc. - # This file is part of the GNU C Library. - # Contributed by Andreas Jaeger , 1997. - -@@ -105,8 +105,10 @@ while () { - # - libdb1 since it conflicts with libdb - # - libnss1_* from glibc-compat add-on - # - libthread_db since it contains unresolved references -+ # - it's just a test NSS module - if ($name ne "nss_ldap" && $name ne "db1" -- && !($name =~/^nss1_/) && $name ne "thread_db") { -+ && !($name =~/^nss1_/) && $name ne "thread_db" -+ && $name ne "nss_test1") { - $link_libs .= " -l$name"; - $versions{$name} = $version; - } --- -1.7.3.4 - diff --git a/src/patches/glibc/glibc-aliasing.patch b/src/patches/glibc/glibc-aliasing.patch deleted file mode 100644 index 016a4d4962..0000000000 --- a/src/patches/glibc/glibc-aliasing.patch +++ /dev/null @@ -1,87 +0,0 @@ -Index: glibc-2.12-2-gc4ccff1/elf/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/Makefile -+++ glibc-2.12-2-gc4ccff1/elf/Makefile -@@ -129,6 +129,7 @@ include ../Makeconfig - ifeq ($(unwind-find-fde),yes) - routines += unwind-dw2-fde-glibc - shared-only-routines += unwind-dw2-fde-glibc -+CFLAGS-unwind-dw2-fde-glibc.c += -fno-strict-aliasing - endif - - before-compile = $(objpfx)trusted-dirs.h -Index: glibc-2.12-2-gc4ccff1/inet/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/inet/Makefile -+++ glibc-2.12-2-gc4ccff1/inet/Makefile -@@ -57,6 +57,8 @@ tests := htontest test_ifindex tst-ntoa - - include ../Rules - -+CFLAGS-tst-inet6_rth.c += -fno-strict-aliasing -+ - ifeq ($(have-thread-library),yes) - - CFLAGS-gethstbyad_r.c = -DUSE_NSCD=1 -fexceptions -Index: glibc-2.12-2-gc4ccff1/nis/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nis/Makefile -+++ glibc-2.12-2-gc4ccff1/nis/Makefile -@@ -69,6 +69,8 @@ libnss_nisplus-inhibit-o = $(filter-out - - include ../Rules - -+CFLAGS-nis_findserv.c += -fno-strict-aliasing -+CFLAGS-ypclnt.c += -fno-strict-aliasing - - $(objpfx)libnss_compat.so: $(objpfx)libnsl.so$(libnsl.so-version) - $(objpfx)libnss_nis.so: $(objpfx)libnsl.so$(libnsl.so-version) \ -Index: glibc-2.12-2-gc4ccff1/nss/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nss/Makefile -+++ glibc-2.12-2-gc4ccff1/nss/Makefile -@@ -74,6 +74,7 @@ endif - - include ../Rules - -+CFLAGS-files-hosts.c += -fno-strict-aliasing - - ifeq (yes,$(build-static-nss)) - $(objpfx)getent: $(objpfx)libnss_files.a -Index: glibc-2.12-2-gc4ccff1/resolv/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/resolv/Makefile -+++ glibc-2.12-2-gc4ccff1/resolv/Makefile -@@ -77,6 +77,7 @@ CPPFLAGS += -Dgethostbyname=res_gethostb - -Dgetnetbyaddr=res_getnetbyaddr - - CFLAGS-res_hconf.c = -fexceptions -+CFLAGS-res_send.c += -fno-strict-aliasing - - # The BIND code elicits some harmless warnings. - +cflags += -Wno-strict-prototypes -Wno-write-strings -Index: glibc-2.12-2-gc4ccff1/sunrpc/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sunrpc/Makefile -+++ glibc-2.12-2-gc4ccff1/sunrpc/Makefile -@@ -129,6 +129,10 @@ CFLAGS-openchild.c = -fexceptions - - CPPFLAGS += -D_RPC_THREAD_SAFE_ - -+CFLAGS-clnt_tcp.c += -fno-strict-aliasing -+CFLAGS-clnt_udp.c += -fno-strict-aliasing -+CFLAGS-clnt_unix.c += -fno-strict-aliasing -+ - include ../Rules - - $(objpfx)rpcgen: $(addprefix $(objpfx),$(rpcgen-objs)) \ -Index: glibc-2.12-2-gc4ccff1/sysdeps/powerpc/powerpc64/elf/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/powerpc/powerpc64/elf/Makefile -+++ glibc-2.12-2-gc4ccff1/sysdeps/powerpc/powerpc64/elf/Makefile -@@ -9,3 +9,5 @@ CFLAGS-rtld-mempcpy.os = $(no-special-re - CFLAGS-rtld-memmove.os = $(no-special-regs) - CFLAGS-rtld-memchr.os = $(no-special-regs) - CFLAGS-rtld-strnlen.os = $(no-special-regs) -+ -+CFLAGS-gmon-start.c += -fno-strict-aliasing diff --git a/src/patches/glibc/glibc-fedora.patch b/src/patches/glibc/glibc-fedora.patch deleted file mode 100644 index 5a7fce94dd..0000000000 --- a/src/patches/glibc/glibc-fedora.patch +++ /dev/null @@ -1,2106 +0,0 @@ ---- glibc-2.12-2-gc4ccff1/ChangeLog -+++ glibc-2.12-1/ChangeLog -@@ -241,6 +241,12 @@ - - * Makerules (libc-abis): Fix search for libc-abis in add-ons. - -+2010-04-06 Ulrich Drepper -+ -+ * sysdeps/posix/getaddrinfo.c (default_scopes): Assign global -+ scope to RFC 1918 addresses. -+ * posix/gai.conf: Document difference from RFC 3484. -+ - 2010-04-05 Thomas Schwinge - - * sysdeps/gnu/unwind-resume.c: New, moved from nptl/sysdeps/pthread/. -@@ -995,6 +1001,19 @@ - * sysdeps/x86_64/fpu/fegetenv.c: Likewise - * sysdeps/s390/fpu/fegetenv.c: Likewise. Remove unused headers. - -+2009-10-27 Aurelien Jarno -+ -+ [BZ #10855] -+ * locale/programs/locarchive.c: use MMAP_SHARED to reserve memory -+ used later with MMAP_FIXED | MMAP_SHARED to cope with different -+ alignment restrictions. -+ -+2010-02-08 Andreas Schwab -+ -+ [BZ #11155] -+ * sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c: Include i386 -+ version. -+ - 2010-02-05 H.J. Lu - - [BZ #11230] -@@ -2938,6 +2957,11 @@ d2009-10-30 Ulrich Drepper -+ -+ * Makeconfig (ASFLAGS): Append $(sysdep-ASFLAGS). -+ * sysdeps/i386/Makefile (sysdep-ASFLAGS): Add -U__i686. -+ - 2009-07-21 Ulrich Drepper - - * sysdeps/x86_64/multiarch/strstr.c: Minor cleanups. Remove -@@ -3203,6 +3227,11 @@ d2009-10-30 Ulrich Drepper -+ -+ * timezone/zic.c (stringzone): Don't try to generate a POSIX TZ -+ string when the timezone ends in DST. -+ - 2009-06-26 Ulrich Drepper - - * resolv/resolv.h: Define RES_SNGLKUPREOP. -@@ -11896,6 +11925,10 @@ d2009-10-30 Ulrich Drepper -+ -+ * locale/programs/locarchive.c (add_alias, insert_name): Remove static. -+ - 2007-04-16 Ulrich Drepper - - [BZ #4364] -@@ -13153,6 +13186,15 @@ d2009-10-30 Ulrich Drepper -+ -+ * sysdeps/unix/sysv/linux/netlinkaccess.h: Include linux/if_addr.h -+ if IFA_MAX is not defined. -+ (IFA_RTA, IFA_PAYLOAD, IFLA_RTA, IFLA_PAYLOAD): Define if not -+ defined. -+ * sysdeps/unix/sysv/linux/check_pf.c: Include netlinkaccess.h -+ instead of asm/types.h, linux/netlink.h and linux/rtnetlink.h. -+ - 2006-12-09 Ulrich Drepper - - [BZ #3632] ---- glibc-2.12-2-gc4ccff1/ChangeLog.15 -+++ glibc-2.12-1/ChangeLog.15 -@@ -477,6 +477,14 @@ - - 2004-11-26 Jakub Jelinek - -+ * posix/Makefile (generated: Add getconf.speclist. -+ ($(inst_libexecdir)/getconf): Use getconf.speclist instead of -+ getconf output. -+ ($(objpfx)getconf.speclist): New rule. -+ * posix/getconf.speclist.h: New file. -+ -+2004-11-26 Jakub Jelinek -+ - * sysdeps/generic/unsecvars.h (UNSECURE_ENVVARS): Add GETCONF_DIR. - - 2004-11-26 Kaz Kojima -@@ -1103,6 +1111,13 @@ - * sysdeps/generic/tempname.c (__path_search): Add missing argument - TRY_TMPDIR. - -+2004-11-02 Jakub Jelinek -+ -+ * include/features.h (__USE_FORTIFY_LEVEL): Also set for Red Hat -+ GCC 3.4.x-RH >= 3.4.2-8. -+ * debug/tst-chk1.c (do_test): Deal with GCC 3.4.x-RH not -+ being able to recognize subobjects. -+ - 2004-10-31 Mariusz Mazur - - * sysdeps/unix/sysv/linux/alpha/setregid.c: New file. -@@ -1443,6 +1458,11 @@ - * sysdeps/generic/readonly-area.c (__readonly_str): Renamed to ... - (__readonly_area): ... this. - -+2004-10-19 Jakub Jelinek -+ -+ * include/features.h (__USE_FORTIFY_LEVEL): Enable even with -+ Red Hat gcc4 4.0.0 and above. -+ - 2004-10-18 Jakub Jelinek - - * sysdeps/generic/strcpy_chk.c (__strcpy_chk): Speed up by checking -@@ -3182,6 +3202,23 @@ - before return type. - * locale/localename.c (__current_locale_name): Likewise. - -+2004-08-31 Jakub Jelinek -+ -+ * elf/ldconfig.c (parse_conf): Add prefix argument, prepend it -+ before arguments to add_dir and pass to parse_conf_include. -+ (parse_conf_include): Add prefix argument, pass it down to -+ parse_conf. -+ (main): Call arch_startup. Adjust parse_conf caller. -+ Call add_arch_dirs. -+ * sysdeps/generic/dl-cache.h (arch_startup, add_arch_dirs): Define. -+ * sysdeps/unix/sysv/linux/i386/dl-cache.h: New file. -+ * sysdeps/unix/sysv/linux/ia64/dl-cache.h (EMUL_HACK, arch_startup, -+ add_arch_dirs): Define. -+ * sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed: Prepend -+ /emul/ia32-linux before the 32-bit ld.so pathname. -+ * sysdeps/unix/sysv/linux/ia64/dl-procinfo.c: New file. -+ * sysdeps/unix/sysv/linux/ia64/dl-procinfo.h: New file. -+ - 2004-08-30 Roland McGrath - - * scripts/extract-abilist.awk: If `lastversion' variable defined, omit ---- glibc-2.12-2-gc4ccff1/ChangeLog.16 -+++ glibc-2.12-1/ChangeLog.16 -@@ -2042,6 +2042,9 @@ - (__MATHDECL_2): Use __REDIRECT_NTH instead of __REDIRECT - followed by __THROW. - -+ * sysdeps/unix/sysv/linux/futimesat.c (futimesat): If -+ file == NULL, use __futimes unconditionally. -+ - 2006-02-02 Ulrich Drepper - - * sysdeps/unix/sysv/linux/futimesat.c [__NR_futimesat] -@@ -2101,6 +2104,11 @@ - * sysdeps/ieee754/ldbl-128/s_llrintl.c (__llrintl): Fix a typo. - * sysdeps/s390/fpu/libm-test-ulps: Remove llrint ulps. - -+2006-01-30 Jakub Jelinek -+ -+ * include/bits/stdlib-ldbl.h: New file. -+ * include/bits/wchar-ldbl.h: New file. -+ - 2006-01-19 Thomas Schwinge - - * libio/genops.c: Include . -@@ -8922,6 +8930,12 @@ - * argp/argp-help.c (__argp_error): __asprintf -> vasprintf. - (__argp_failure): Likewise. - -+2005-08-08 Jakub Jelinek -+ -+ * sysdeps/unix/sysv/linux/dl-osinfo.h (_dl_setup_stack_chk_guard): -+ Shift marked &errno down on big-endian instead of up. -+ * elf/tst-stackguard1.c (do_test): Fix a typo. -+ - 2005-08-08 Ulrich Drepper - - * nscd/cache.c (cache_add): Commit hash table and header to disk. -@@ -9046,6 +9060,17 @@ - __syslog_chk. - * misc/Versions: Export __syslog_chk and __vsyslog_chk. - -+2005-07-29 Jakub Jelinek -+ -+ * sysdeps/unix/sysv/linux/dl-osinfo.h: Include errno.h, hp-timing.h, -+ endian.h. -+ (_dl_setup_stack_chk_guard): Even without -+ --enable-stackguard-randomization attempt to do some guard -+ randomization using hp-timing (if available) and kernel stack and -+ mmap randomization. -+ * elf/tst-stackguard1.c (do_test): Don't fail if the poor man's -+ randomization doesn't work well enough. -+ - 2005-07-28 Thomas Schwinge - - [BZ #1137] ---- glibc-2.12-2-gc4ccff1/Makeconfig -+++ glibc-2.12-1/Makeconfig -@@ -789,12 +789,12 @@ endif - # The assembler can generate debug information too. - ifndef ASFLAGS - ifeq ($(have-cpp-asm-debuginfo),yes) --ASFLAGS := $(filter -g% -fdebug-prefix-map=%,$(CFLAGS)) -+ASFLAGS = $(filter -g% -fdebug-prefix-map=%,$(CFLAGS)) - else --ASFLAGS := -+ASFLAGS = - endif - endif --ASFLAGS += $(ASFLAGS-config) $(asflags-cpu) -+ASFLAGS += $(ASFLAGS-config) $(asflags-cpu) $(sysdep-ASFLAGS) - - ifndef BUILD_CC - BUILD_CC = $(CC) ---- glibc-2.12-2-gc4ccff1/csu/Makefile -+++ glibc-2.12-1/csu/Makefile -@@ -93,7 +93,8 @@ omit-deps += $(crtstuff) - $(crtstuff:%=$(objpfx)%.o): %.o: %.S $(objpfx)defs.h - $(compile.S) -g0 $(ASFLAGS-.os) -o $@ - --CFLAGS-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time) -+CFLAGS-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time) \ -+ -fno-asynchronous-unwind-tables - - vpath initfini.c $(sysdirs) - ---- glibc-2.12-2-gc4ccff1/csu/elf-init.c -+++ glibc-2.12-1/csu/elf-init.c -@@ -63,6 +63,23 @@ extern void (*__init_array_end []) (int, - extern void (*__fini_array_start []) (void) attribute_hidden; - extern void (*__fini_array_end []) (void) attribute_hidden; - -+#if defined HAVE_VISIBILITY_ATTRIBUTE \ -+ && (defined SHARED || defined LIBC_NONSHARED) -+# define hidden_undef_2(x) #x -+# define hidden_undef_1(x) hidden_undef_2 (x) -+# define hidden_undef(x) \ -+ __asm (hidden_undef_1 (ASM_GLOBAL_DIRECTIVE) " " #x); \ -+ __asm (".hidden " #x); -+#else -+# define hidden_undef(x) -+#endif -+ -+hidden_undef (__preinit_array_start) -+hidden_undef (__preinit_array_end) -+hidden_undef (__init_array_start) -+hidden_undef (__init_array_end) -+hidden_undef (__fini_array_start) -+hidden_undef (__fini_array_end) - - /* These function symbols are provided for the .init/.fini section entry - points automagically by the linker. */ ---- glibc-2.12-2-gc4ccff1/debug/tst-chk1.c -+++ glibc-2.12-1/debug/tst-chk1.c -@@ -17,6 +17,9 @@ - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -+/* Hack: make sure GCC doesn't know __chk_fail () will not return. */ -+#define __noreturn__ -+ - #include - #include - #include -@@ -242,7 +245,7 @@ do_test (void) - if (memcmp (a.buf1, "aabcdabcjj", 10)) - FAIL (); - --#if __USE_FORTIFY_LEVEL < 2 -+#if __USE_FORTIFY_LEVEL < 2 || !__GNUC_PREREQ (4, 0) - /* The following tests are supposed to crash with -D_FORTIFY_SOURCE=2 - and sufficient GCC support, as the string operations overflow - from a.buf1 into a.buf2. */ -@@ -357,7 +360,7 @@ do_test (void) - memset (a.buf1 + 9, 'j', l0 + 2); - CHK_FAIL_END - --# if __USE_FORTIFY_LEVEL >= 2 -+# if __USE_FORTIFY_LEVEL >= 2 && __GNUC_PREREQ (4, 0) - # define O 0 - # else - # define O 1 ---- glibc-2.12-2-gc4ccff1/elf/ldconfig.c -+++ glibc-2.12-1/elf/ldconfig.c -@@ -1031,17 +1031,19 @@ search_dirs (void) - - - static void parse_conf_include (const char *config_file, unsigned int lineno, -- bool do_chroot, const char *pattern); -+ const char *prefix, bool do_chroot, -+ const char *pattern); - - /* Parse configuration file. */ - static void --parse_conf (const char *filename, bool do_chroot) -+parse_conf (const char *filename, const char *prefix, bool do_chroot) - { - FILE *file = NULL; - char *line = NULL; - const char *canon; - size_t len = 0; - unsigned int lineno; -+ size_t prefix_len = prefix ? strlen (prefix) : 0; - - if (do_chroot && opt_chroot) - { -@@ -1102,7 +1104,14 @@ parse_conf (const char *filename, bool d - cp += 8; - while ((dir = strsep (&cp, " \t")) != NULL) - if (dir[0] != '\0') -- parse_conf_include (filename, lineno, do_chroot, dir); -+ parse_conf_include (filename, lineno, prefix, do_chroot, dir); -+ } -+ else if (prefix != NULL) -+ { -+ size_t cp_len = strlen (cp); -+ char new_cp [prefix_len + cp_len + 1]; -+ memcpy (mempcpy (new_cp, prefix, prefix_len), cp, cp_len + 1); -+ add_dir (new_cp); - } - else if (!strncasecmp (cp, "hwcap", 5) && isblank (cp[5])) - { -@@ -1165,7 +1174,7 @@ parse_conf (const char *filename, bool d - config files to read. */ - static void - parse_conf_include (const char *config_file, unsigned int lineno, -- bool do_chroot, const char *pattern) -+ const char *prefix, bool do_chroot, const char *pattern) - { - if (opt_chroot && pattern[0] != '/') - error (EXIT_FAILURE, 0, -@@ -1197,7 +1206,7 @@ parse_conf_include (const char *config_f - { - case 0: - for (size_t i = 0; i < gl.gl_pathc; ++i) -- parse_conf (gl.gl_pathv[i], false); -+ parse_conf (gl.gl_pathv[i], prefix, false); - globfree64 (&gl); - break; - -@@ -1240,6 +1249,8 @@ main (int argc, char **argv) - /* Set the text message domain. */ - textdomain (_libc_intl_domainname); - -+ arch_startup (argc, argv); -+ - /* Parse and process arguments. */ - int remaining; - argp_parse (&argp, argc, argv, 0, &remaining, NULL); -@@ -1349,12 +1360,14 @@ main (int argc, char **argv) - - if (!opt_only_cline) - { -- parse_conf (config_file, true); -+ parse_conf (config_file, NULL, true); - - /* Always add the standard search paths. */ - add_system_dir (SLIBDIR); - if (strcmp (SLIBDIR, LIBDIR)) - add_system_dir (LIBDIR); -+ -+ add_arch_dirs (config_file); - } - - char *aux_cache_file = _PATH_LDCONFIG_AUX_CACHE; ---- glibc-2.12-2-gc4ccff1/elf/tst-stackguard1.c -+++ glibc-2.12-1/elf/tst-stackguard1.c -@@ -160,17 +160,21 @@ do_test (void) - the 16 runs, something is very wrong. */ - int ndifferences = 0; - int ndefaults = 0; -+ int npartlyrandomized = 0; - for (i = 0; i < N; ++i) - { - if (child_stack_chk_guards[i] != child_stack_chk_guards[i+1]) - ndifferences++; - else if (child_stack_chk_guards[i] == default_guard) - ndefaults++; -+ else if (*(char *) &child_stack_chk_guards[i] == 0) -+ npartlyrandomized++; - } - -- printf ("differences %d defaults %d\n", ndifferences, ndefaults); -+ printf ("differences %d defaults %d partly randomized %d\n", -+ ndifferences, ndefaults, npartlyrandomized); - -- if (ndifferences < N / 2 && ndefaults < N / 2) -+ if ((ndifferences + ndefaults + npartlyrandomized) < 3 * N / 4) - { - puts ("stack guard canaries are not randomized enough"); - puts ("nor equal to the default canary value"); ---- glibc-2.12-2-gc4ccff1/include/bits/stdlib-ldbl.h -+++ glibc-2.12-1/include/bits/stdlib-ldbl.h -@@ -0,0 +1 @@ -+#include ---- glibc-2.12-2-gc4ccff1/include/bits/wchar-ldbl.h -+++ glibc-2.12-1/include/bits/wchar-ldbl.h -@@ -0,0 +1 @@ -+#include ---- glibc-2.12-2-gc4ccff1/include/features.h -+++ glibc-2.12-1/include/features.h -@@ -308,8 +308,13 @@ - #endif - - #if defined _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0 \ -- && __GNUC_PREREQ (4, 1) && defined __OPTIMIZE__ && __OPTIMIZE__ > 0 --# if _FORTIFY_SOURCE > 1 -+ && defined __OPTIMIZE__ && __OPTIMIZE__ > 0 -+# if !__GNUC_PREREQ (4, 1) -+# ifdef __GNUC_RH_RELEASE__ -+# warning _FORTIFY_SOURCE supported only with GCC 4.1 and later -+# endif -+# define __USE_FORTIFY_LEVEL 0 -+# elif _FORTIFY_SOURCE > 1 - # define __USE_FORTIFY_LEVEL 2 - # else - # define __USE_FORTIFY_LEVEL 1 ---- glibc-2.12-2-gc4ccff1/intl/locale.alias -+++ glibc-2.12-1/intl/locale.alias -@@ -57,8 +57,6 @@ korean ko_KR.eucKR - korean.euc ko_KR.eucKR - ko_KR ko_KR.eucKR - lithuanian lt_LT.ISO-8859-13 --no_NO nb_NO.ISO-8859-1 --no_NO.ISO-8859-1 nb_NO.ISO-8859-1 - norwegian nb_NO.ISO-8859-1 - nynorsk nn_NO.ISO-8859-1 - polish pl_PL.ISO-8859-2 ---- glibc-2.12-2-gc4ccff1/libio/stdio.h -+++ glibc-2.12-1/libio/stdio.h -@@ -165,10 +165,12 @@ typedef _G_fpos64_t fpos64_t; - extern struct _IO_FILE *stdin; /* Standard input stream. */ - extern struct _IO_FILE *stdout; /* Standard output stream. */ - extern struct _IO_FILE *stderr; /* Standard error output stream. */ -+#ifdef __STDC__ - /* C89/C99 say they're macros. Make them happy. */ - #define stdin stdin - #define stdout stdout - #define stderr stderr -+#endif - - __BEGIN_NAMESPACE_STD - /* Remove file FILENAME. */ ---- glibc-2.12-2-gc4ccff1/locale/iso-4217.def -+++ glibc-2.12-1/locale/iso-4217.def -@@ -8,6 +8,7 @@ - * - * !!! The list has to be sorted !!! - */ -+DEFINE_INT_CURR("ADP") /* Andorran Peseta -> EUR */ - DEFINE_INT_CURR("AED") /* United Arab Emirates Dirham */ - DEFINE_INT_CURR("AFN") /* Afghanistan Afgani */ - DEFINE_INT_CURR("ALL") /* Albanian Lek */ -@@ -15,12 +16,14 @@ DEFINE_INT_CURR("AMD") /* Armenia Dram - DEFINE_INT_CURR("ANG") /* Netherlands Antilles */ - DEFINE_INT_CURR("AOA") /* Angolan Kwanza */ - DEFINE_INT_CURR("ARS") /* Argentine Peso */ -+DEFINE_INT_CURR("ATS") /* Austrian Schilling -> EUR */ - DEFINE_INT_CURR("AUD") /* Australian Dollar */ - DEFINE_INT_CURR("AWG") /* Aruba Guilder */ - DEFINE_INT_CURR("AZM") /* Azerbaijan Manat */ - DEFINE_INT_CURR("BAM") /* Bosnian and Herzegovina Convertible Mark */ - DEFINE_INT_CURR("BBD") /* Barbados Dollar */ - DEFINE_INT_CURR("BDT") /* Bangladesh Taka */ -+DEFINE_INT_CURR("BEF") /* Belgian Franc -> EUR */ - DEFINE_INT_CURR("BGN") /* Bulgarian Lev */ - DEFINE_INT_CURR("BHD") /* Bahraini Dinar */ - DEFINE_INT_CURR("BIF") /* Burundi Franc */ -@@ -44,6 +47,7 @@ DEFINE_INT_CURR("CUP") /* Cuban Peso * - DEFINE_INT_CURR("CVE") /* Cape Verde Escudo */ - DEFINE_INT_CURR("CYP") /* Cypriot Pound */ - DEFINE_INT_CURR("CZK") /* Czech Koruna */ -+DEFINE_INT_CURR("DEM") /* German Mark -> EUR */ - DEFINE_INT_CURR("DJF") /* Djibouti Franc */ - DEFINE_INT_CURR("DKK") /* Danish Krone (Faroe Islands, Greenland) */ - DEFINE_INT_CURR("DOP") /* Dominican Republic */ -@@ -51,16 +55,20 @@ DEFINE_INT_CURR("DZD") /* Algerian Dina - DEFINE_INT_CURR("EEK") /* Estonian Kroon */ - DEFINE_INT_CURR("EGP") /* Egyptian Pound */ - DEFINE_INT_CURR("ERN") /* Eritrean Nakfa */ -+DEFINE_INT_CURR("ESP") /* Spanish Peseta -> EUR */ - DEFINE_INT_CURR("ETB") /* Ethiopian Birr */ - DEFINE_INT_CURR("EUR") /* European Union Euro */ -+DEFINE_INT_CURR("FIM") /* Finnish Markka -> EUR */ - DEFINE_INT_CURR("FJD") /* Fiji Dollar */ - DEFINE_INT_CURR("FKP") /* Falkland Islands Pound (Malvinas) */ -+DEFINE_INT_CURR("FRF") /* French Franc -> EUR */ - DEFINE_INT_CURR("GBP") /* British Pound */ - DEFINE_INT_CURR("GEL") /* Georgia Lari */ - DEFINE_INT_CURR("GHC") /* Ghana Cedi */ - DEFINE_INT_CURR("GIP") /* Gibraltar Pound */ - DEFINE_INT_CURR("GMD") /* Gambian Dalasi */ - DEFINE_INT_CURR("GNF") /* Guinea Franc */ -+DEFINE_INT_CURR("GRD") /* Greek Drachma -> EUR */ - DEFINE_INT_CURR("GTQ") /* Guatemala Quetzal */ - DEFINE_INT_CURR("GYD") /* Guyana Dollar */ - DEFINE_INT_CURR("HKD") /* Hong Kong Dollar */ -@@ -69,12 +77,14 @@ DEFINE_INT_CURR("HRK") /* Croatia Kuna - DEFINE_INT_CURR("HTG") /* Haiti Gourde */ - DEFINE_INT_CURR("HUF") /* Hungarian Forint */ - DEFINE_INT_CURR("IDR") /* Indonesia Rupiah */ -+DEFINE_INT_CURR("IEP") /* Irish Pound -> EUR */ - DEFINE_INT_CURR("ILS") /* Israeli Shekel */ - DEFINE_INT_CURR("IMP") /* Isle of Man Pounds */ - DEFINE_INT_CURR("INR") /* Indian Rupee (Bhutan) */ - DEFINE_INT_CURR("IQD") /* Iraqi Dinar */ - DEFINE_INT_CURR("IRR") /* Iranian Rial */ - DEFINE_INT_CURR("ISK") /* Iceland Krona */ -+DEFINE_INT_CURR("ITL") /* Italian Lira -> EUR */ - DEFINE_INT_CURR("JEP") /* Jersey Pound */ - DEFINE_INT_CURR("JMD") /* Jamaican Dollar */ - DEFINE_INT_CURR("JOD") /* Jordanian Dinar */ -@@ -94,6 +104,7 @@ DEFINE_INT_CURR("LKR") /* Sri Lankan Ru - DEFINE_INT_CURR("LRD") /* Liberian Dollar */ - DEFINE_INT_CURR("LSL") /* Lesotho Maloti */ - DEFINE_INT_CURR("LTL") /* Lithuanian Litas */ -+DEFINE_INT_CURR("LUF") /* Luxembourg Franc -> EUR */ - DEFINE_INT_CURR("LVL") /* Latvia Lat */ - DEFINE_INT_CURR("LYD") /* Libyan Arab Jamahiriya Dinar */ - DEFINE_INT_CURR("MAD") /* Moroccan Dirham */ -@@ -114,6 +125,7 @@ DEFINE_INT_CURR("MZM") /* Mozambique Me - DEFINE_INT_CURR("NAD") /* Namibia Dollar */ - DEFINE_INT_CURR("NGN") /* Nigeria Naira */ - DEFINE_INT_CURR("NIO") /* Nicaragua Cordoba Oro */ -+DEFINE_INT_CURR("NLG") /* Netherlands Guilder -> EUR */ - DEFINE_INT_CURR("NOK") /* Norwegian Krone */ - DEFINE_INT_CURR("NPR") /* Nepalese Rupee */ - DEFINE_INT_CURR("NZD") /* New Zealand Dollar */ -@@ -124,6 +136,7 @@ DEFINE_INT_CURR("PGK") /* Papau New Gui - DEFINE_INT_CURR("PHP") /* Philippines Peso */ - DEFINE_INT_CURR("PKR") /* Pakistan Rupee */ - DEFINE_INT_CURR("PLN") /* Polish Zloty */ -+DEFINE_INT_CURR("PTE") /* Portugese Escudo -> EUR */ - DEFINE_INT_CURR("PYG") /* Paraguay Guarani */ - DEFINE_INT_CURR("QAR") /* Qatar Rial */ - DEFINE_INT_CURR("ROL") /* Romanian Leu */ ---- glibc-2.12-2-gc4ccff1/locale/programs/locarchive.c -+++ glibc-2.12-1/locale/programs/locarchive.c -@@ -134,7 +134,7 @@ create_archive (const char *archivefname - size_t reserved = RESERVE_MMAP_SIZE; - int xflags = 0; - if (total < reserved -- && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_PRIVATE | MAP_ANON, -+ && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_SHARED | MAP_ANON, - -1, 0)) != MAP_FAILED)) - xflags = MAP_FIXED; - else -@@ -241,9 +241,9 @@ oldlocrecentcmp (const void *a, const vo - /* forward decls for below */ - static uint32_t add_locale (struct locarhandle *ah, const char *name, - locale_data_t data, bool replace); --static void add_alias (struct locarhandle *ah, const char *alias, -- bool replace, const char *oldname, -- uint32_t *locrec_offset_p); -+void add_alias (struct locarhandle *ah, const char *alias, -+ bool replace, const char *oldname, -+ uint32_t *locrec_offset_p); - - - static bool -@@ -396,7 +396,7 @@ enlarge_archive (struct locarhandle *ah, - size_t reserved = RESERVE_MMAP_SIZE; - int xflags = 0; - if (total < reserved -- && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_PRIVATE | MAP_ANON, -+ && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_SHARED | MAP_ANON, - -1, 0)) != MAP_FAILED)) - xflags = MAP_FIXED; - else -@@ -614,7 +614,7 @@ open_archive (struct locarhandle *ah, bo - int xflags = 0; - void *p; - if (st.st_size < reserved -- && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_PRIVATE | MAP_ANON, -+ && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_SHARED | MAP_ANON, - -1, 0)) != MAP_FAILED)) - xflags = MAP_FIXED; - else -@@ -649,7 +649,7 @@ close_archive (struct locarhandle *ah) - #include "../../intl/explodename.c" - #include "../../intl/l10nflist.c" - --static struct namehashent * -+struct namehashent * - insert_name (struct locarhandle *ah, - const char *name, size_t name_len, bool replace) - { -@@ -707,7 +707,7 @@ insert_name (struct locarhandle *ah, - return &namehashtab[idx]; - } - --static void -+void - add_alias (struct locarhandle *ah, const char *alias, bool replace, - const char *oldname, uint32_t *locrec_offset_p) - { ---- glibc-2.12-2-gc4ccff1/localedata/Makefile -+++ glibc-2.12-1/localedata/Makefile -@@ -227,6 +227,7 @@ $(INSTALL-SUPPORTED-LOCALES): install-lo - echo -n '...'; \ - input=`echo $$locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`; \ - $(LOCALEDEF) --alias-file=../intl/locale.alias \ -+ --no-archive \ - -i locales/$$input -c -f charmaps/$$charset \ - $(addprefix --prefix=,$(install_root)) $$locale; \ - echo ' done'; \ ---- glibc-2.12-2-gc4ccff1/localedata/SUPPORTED -+++ glibc-2.12-1/localedata/SUPPORTED -@@ -85,6 +85,7 @@ cy_GB.UTF-8/UTF-8 \ - cy_GB/ISO-8859-14 \ - da_DK.UTF-8/UTF-8 \ - da_DK/ISO-8859-1 \ -+da_DK.ISO-8859-15/ISO-8859-15 \ - de_AT.UTF-8/UTF-8 \ - de_AT/ISO-8859-1 \ - de_AT@euro/ISO-8859-15 \ -@@ -116,6 +117,7 @@ en_DK.UTF-8/UTF-8 \ - en_DK/ISO-8859-1 \ - en_GB.UTF-8/UTF-8 \ - en_GB/ISO-8859-1 \ -+en_GB.ISO-8859-15/ISO-8859-15 \ - en_HK.UTF-8/UTF-8 \ - en_HK/ISO-8859-1 \ - en_IE.UTF-8/UTF-8 \ -@@ -131,6 +133,7 @@ en_SG.UTF-8/UTF-8 \ - en_SG/ISO-8859-1 \ - en_US.UTF-8/UTF-8 \ - en_US/ISO-8859-1 \ -+en_US.ISO-8859-15/ISO-8859-15 \ - en_ZA.UTF-8/UTF-8 \ - en_ZA/ISO-8859-1 \ - en_ZW.UTF-8/UTF-8 \ -@@ -307,6 +310,8 @@ nl_NL/ISO-8859-1 \ - nl_NL@euro/ISO-8859-15 \ - nn_NO.UTF-8/UTF-8 \ - nn_NO/ISO-8859-1 \ -+no_NO.UTF-8/UTF-8 \ -+no_NO/ISO-8859-1 \ - nr_ZA/UTF-8 \ - nso_ZA/UTF-8 \ - oc_FR.UTF-8/UTF-8 \ -@@ -367,6 +372,7 @@ sv_FI/ISO-8859-1 \ - sv_FI@euro/ISO-8859-15 \ - sv_SE.UTF-8/UTF-8 \ - sv_SE/ISO-8859-1 \ -+sv_SE.ISO-8859-15/ISO-8859-15 \ - ta_IN/UTF-8 \ - te_IN/UTF-8 \ - tg_TJ.UTF-8/UTF-8 \ ---- glibc-2.12-2-gc4ccff1/localedata/locales/cy_GB -+++ glibc-2.12-1/localedata/locales/cy_GB -@@ -248,8 +248,11 @@ mon "" - d_fmt "" - t_fmt "" --am_pm "";"" --t_fmt_ampm "" -+am_pm "";"" -+t_fmt_ampm "" -+date_fmt "/ -+/ -+" - END LC_TIME - - LC_MESSAGES ---- glibc-2.12-2-gc4ccff1/localedata/locales/en_GB -+++ glibc-2.12-1/localedata/locales/en_GB -@@ -116,8 +116,8 @@ mon "" - d_fmt "" - t_fmt "" --am_pm "";"" --t_fmt_ampm "" -+am_pm "";"" -+t_fmt_ampm "" - date_fmt "/ - / - " ---- glibc-2.12-2-gc4ccff1/localedata/locales/no_NO -+++ glibc-2.12-1/localedata/locales/no_NO -@@ -0,0 +1,69 @@ -+escape_char / -+comment_char % -+ -+% Norwegian language locale for Norway -+% Source: Norsk Standardiseringsforbund -+% Address: University Library, -+% Drammensveien 41, N-9242 Oslo, Norge -+% Contact: Kolbjoern Aamboe -+% Tel: +47 - 22859109 -+% Fax: +47 - 22434497 -+% Email: kolbjorn.aambo@usit.uio.no -+% Language: no -+% Territory: NO -+% Revision: 4.3 -+% Date: 1996-10-15 -+% Application: general -+% Users: general -+% Repertoiremap: mnemonic.ds -+% Charset: ISO-8859-1 -+% Distribution and use is free, also -+% for commercial purposes. -+ -+LC_IDENTIFICATION -+copy "nb_NO" -+END LC_IDENTIFICATION -+ -+LC_COLLATE -+copy "nb_NO" -+END LC_COLLATE -+ -+LC_CTYPE -+copy "nb_NO" -+END LC_CTYPE -+ -+LC_MONETARY -+copy "nb_NO" -+END LC_MONETARY -+ -+LC_NUMERIC -+copy "nb_NO" -+END LC_NUMERIC -+ -+LC_TIME -+copy "nb_NO" -+END LC_TIME -+ -+LC_MESSAGES -+copy "nb_NO" -+END LC_MESSAGES -+ -+LC_PAPER -+copy "nb_NO" -+END LC_PAPER -+ -+LC_TELEPHONE -+copy "nb_NO" -+END LC_TELEPHONE -+ -+LC_MEASUREMENT -+copy "nb_NO" -+END LC_MEASUREMENT -+ -+LC_NAME -+copy "nb_NO" -+END LC_NAME -+ -+LC_ADDRESS -+copy "nb_NO" -+END LC_ADDRESS ---- glibc-2.12-2-gc4ccff1/localedata/locales/zh_TW -+++ glibc-2.12-1/localedata/locales/zh_TW -@@ -1,7 +1,7 @@ - comment_char % - escape_char / - % --% Chinese language locale for Taiwan R.O.C. -+% Chinese language locale for Taiwan - % charmap: BIG5-CP950 - % - % Original Author: -@@ -17,7 +17,7 @@ escape_char / - % Reference: http://wwwold.dkuug.dk/JTC1/SC22/WG20/docs/n690.pdf - - LC_IDENTIFICATION --title "Chinese locale for Taiwan R.O.C." -+title "Chinese locale for Taiwan" - source "" - address "" - contact "" -@@ -25,7 +25,7 @@ email "bug-glibc-locales@gnu.org" - tel "" - fax "" - language "Chinese" --territory "Taiwan R.O.C." -+territory "Taiwan" - revision "0.2" - date "2000-08-02" - % ---- glibc-2.12-2-gc4ccff1/malloc/mcheck.c -+++ glibc-2.12-1/malloc/mcheck.c -@@ -24,9 +24,25 @@ - # include - # include - # include -+# include - # include - #endif - -+#ifdef _LIBC -+extern __typeof (malloc) __libc_malloc; -+extern __typeof (free) __libc_free; -+extern __typeof (realloc) __libc_realloc; -+libc_hidden_proto (__libc_malloc) -+libc_hidden_proto (__libc_realloc) -+libc_hidden_proto (__libc_free) -+libc_hidden_proto (__libc_memalign) -+#else -+# define __libc_malloc(sz) malloc (sz) -+# define __libc_free(ptr) free (ptr) -+# define __libc_realloc(ptr, sz) realloc (ptr, sz) -+# define __libc_memalign(al, sz) memalign (al, sz) -+#endif -+ - /* Old hook values. */ - static void (*old_free_hook) (__ptr_t ptr, __const __ptr_t); - static __ptr_t (*old_malloc_hook) (__malloc_size_t size, const __ptr_t); -@@ -197,7 +213,7 @@ freehook (__ptr_t ptr, const __ptr_t cal - if (old_free_hook != NULL) - (*old_free_hook) (ptr, caller); - else -- free (ptr); -+ __libc_free (ptr); - __free_hook = freehook; - } - -@@ -214,7 +230,7 @@ mallochook (__malloc_size_t size, const - hdr = (struct hdr *) (*old_malloc_hook) (sizeof (struct hdr) + size + 1, - caller); - else -- hdr = (struct hdr *) malloc (sizeof (struct hdr) + size + 1); -+ hdr = (struct hdr *) __libc_malloc (sizeof (struct hdr) + size + 1); - __malloc_hook = mallochook; - if (hdr == NULL) - return NULL; -@@ -245,7 +261,7 @@ memalignhook (__malloc_size_t alignment, - if (old_memalign_hook != NULL) - block = (*old_memalign_hook) (alignment, slop + size + 1, caller); - else -- block = memalign (alignment, slop + size + 1); -+ block = __libc_memalign (alignment, slop + size + 1); - __memalign_hook = memalignhook; - if (block == NULL) - return NULL; -@@ -300,8 +316,8 @@ reallochook (__ptr_t ptr, __malloc_size_ - sizeof (struct hdr) + size + 1, - caller); - else -- hdr = (struct hdr *) realloc ((__ptr_t) hdr, -- sizeof (struct hdr) + size + 1); -+ hdr = (struct hdr *) __libc_realloc ((__ptr_t) hdr, -+ sizeof (struct hdr) + size + 1); - __free_hook = freehook; - __malloc_hook = mallochook; - __memalign_hook = memalignhook; -@@ -361,8 +377,8 @@ mcheck (func) - if (__malloc_initialized <= 0 && !mcheck_used) - { - /* We call malloc() once here to ensure it is initialized. */ -- void *p = malloc (0); -- free (p); -+ void *p = __libc_malloc (0); -+ __libc_free (p); - - old_free_hook = __free_hook; - __free_hook = freehook; ---- glibc-2.12-2-gc4ccff1/manual/libc.texinfo -+++ glibc-2.12-1/manual/libc.texinfo -@@ -5,7 +5,7 @@ - @c setchapternewpage odd - - @comment Tell install-info what to do. --@dircategory Software libraries -+@dircategory Libraries - @direntry - * Libc: (libc). C library. - @end direntry ---- glibc-2.12-2-gc4ccff1/misc/sys/cdefs.h -+++ glibc-2.12-1/misc/sys/cdefs.h -@@ -132,7 +132,10 @@ - #define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) - #define __bos0(ptr) __builtin_object_size (ptr, 0) - --#if __GNUC_PREREQ (4,3) -+#if __GNUC_PREREQ (4,3) \ -+ || (defined __GNUC_RH_RELEASE__ && __GNUC__ == 4 \ -+ && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 2 \ -+ && __GNUC_RH_RELEASE__ >= 31) - # define __warndecl(name, msg) \ - extern void name (void) __attribute__((__warning__ (msg))) - # define __warnattr(msg) __attribute__((__warning__ (msg))) -@@ -291,10 +294,16 @@ - - /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 - inline semantics, unless -fgnu89-inline is used. */ --#if !defined __cplusplus || __GNUC_PREREQ (4,3) -+#if !defined __cplusplus || __GNUC_PREREQ (4,3) \ -+ || (defined __GNUC_RH_RELEASE__ && __GNUC__ == 4 \ -+ && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 2 \ -+ && __GNUC_RH_RELEASE__ >= 31) - # if defined __GNUC_STDC_INLINE__ || defined __cplusplus - # define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) --# if __GNUC_PREREQ (4,3) -+# if __GNUC_PREREQ (4,3) \ -+ || (defined __GNUC_RH_RELEASE__ && __GNUC__ == 4 \ -+ && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 2 \ -+ && __GNUC_RH_RELEASE__ >= 31) - # define __extern_always_inline \ - extern __always_inline __attribute__ ((__gnu_inline__, __artificial__)) - # else -@@ -314,7 +323,10 @@ - - /* GCC 4.3 and above allow passing all anonymous arguments of an - __extern_always_inline function to some other vararg function. */ --#if __GNUC_PREREQ (4,3) -+#if __GNUC_PREREQ (4,3) \ -+ || (defined __GNUC_RH_RELEASE__ && __GNUC__ == 4 \ -+ && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 2 \ -+ && __GNUC_RH_RELEASE__ >= 31) - # define __va_arg_pack() __builtin_va_arg_pack () - # define __va_arg_pack_len() __builtin_va_arg_pack_len () - #endif ---- glibc-2.12-2-gc4ccff1/nis/nss -+++ glibc-2.12-1/nis/nss -@@ -25,7 +25,7 @@ - # memory with every getXXent() call. Otherwise each getXXent() call - # might result into a network communication with the server to get - # the next entry. --#SETENT_BATCH_READ=TRUE -+SETENT_BATCH_READ=TRUE - # - # ADJUNCT_AS_SHADOW - # If set to TRUE, the passwd routines in the NIS NSS module will not ---- glibc-2.12-2-gc4ccff1/nptl/ChangeLog -+++ glibc-2.12-1/nptl/ChangeLog -@@ -3884,6 +3884,15 @@ - Use __sigfillset. Document that sigfillset does the right thing wrt - to SIGSETXID. - -+2005-08-08 Jakub Jelinek -+ -+ * tst-stackguard1.c (do_test): Likewise. -+ -+2005-07-29 Jakub Jelinek -+ -+ * tst-stackguard1.c (do_test): Don't fail if the poor man's -+ randomization doesn't work well enough. -+ - 2005-07-11 Jakub Jelinek - - [BZ #1102] -@@ -4620,6 +4629,11 @@ - Move definition inside libpthread, libc, librt check. Provide - definition for rtld. - -+2004-09-02 Jakub Jelinek -+ -+ * pthread_cond_destroy.c (__pthread_cond_destroy): If there are -+ waiters, awake all waiters on the associated mutex. -+ - 2004-09-02 Ulrich Drepper - - * sysdeps/alpha/jmpbuf-unwind.h: Define __libc_unwind_longjmp. -@@ -6694,6 +6708,11 @@ - - * Makefile [$(build-shared) = yes] (tests): Depend on $(test-modules). - -+2003-07-22 Jakub Jelinek -+ -+ * descr.h: Don't include lowlevellock.h, pthreaddef.h and dl-sysdep.h -+ if __need_struct_pthread_size, instead define lll_lock_t. -+ - 2003-07-25 Jakub Jelinek - - * tst-cancel17.c (do_test): Check if aio_cancel failed. ---- glibc-2.12-2-gc4ccff1/nptl/Makefile -+++ glibc-2.12-1/nptl/Makefile -@@ -341,7 +341,8 @@ endif - extra-objs += $(crti-objs) $(crtn-objs) - omit-deps += crti crtn - --CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time) -+CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time) \ -+ -fno-asynchronous-unwind-tables - endif - - CFLAGS-flockfile.c = -D_IO_MTSAFE_IO -@@ -527,15 +528,19 @@ $(addprefix $(objpfx), \ - $(tests) $(xtests) $(test-srcs))): $(objpfx)libpthread.so \ - $(objpfx)libpthread_nonshared.a - $(objpfx)tst-unload: $(common-objpfx)dlfcn/libdl.so --# $(objpfx)../libc.so is used instead of $(common-objpfx)libc.so, -+# $(objpfx)linklibc.so is used instead of $(common-objpfx)libc.so, - # since otherwise libpthread.so comes before libc.so when linking. - $(addprefix $(objpfx), $(tests-reverse)): \ -- $(objpfx)../libc.so $(objpfx)libpthread.so \ -+ $(objpfx)linklibc.so $(objpfx)libpthread.so \ - $(objpfx)libpthread_nonshared.a - $(objpfx)../libc.so: $(common-objpfx)libc.so ; - $(addprefix $(objpfx),$(tests-static) $(xtests-static)): $(objpfx)libpthread.a - - $(objpfx)tst-atfork2.out: $(objpfx)tst-atfork2mod.so -+ -+$(objpfx)linklibc.so: $(common-objpfx)libc.so -+ ln -s ../libc.so $@ -+generated += libclink.so - else - $(addprefix $(objpfx),$(tests) $(test-srcs)): $(objpfx)libpthread.a - endif ---- glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h -+++ glibc-2.12-1/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h -@@ -189,4 +189,7 @@ - /* Typed memory objects are not available. */ - #define _POSIX_TYPED_MEMORY_OBJECTS -1 - -+/* Streams are not available. */ -+#define _XOPEN_STREAMS -1 -+ - #endif /* bits/posix_opt.h */ ---- glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/kernel-features.h -+++ glibc-2.12-1/nptl/sysdeps/unix/sysv/linux/kernel-features.h -@@ -0,0 +1,6 @@ -+#include_next -+ -+/* NPTL can always assume all clone thread flags work. */ -+#ifndef __ASSUME_CLONE_THREAD_FLAGS -+# define __ASSUME_CLONE_THREAD_FLAGS 1 -+#endif ---- glibc-2.12-2-gc4ccff1/nptl/tst-stackguard1.c -+++ glibc-2.12-1/nptl/tst-stackguard1.c -@@ -190,17 +190,21 @@ do_test (void) - the 16 runs, something is very wrong. */ - int ndifferences = 0; - int ndefaults = 0; -+ int npartlyrandomized = 0; - for (i = 0; i < N; ++i) - { - if (child_stack_chk_guards[i] != child_stack_chk_guards[i+1]) - ndifferences++; - else if (child_stack_chk_guards[i] == default_guard) - ndefaults++; -+ else if (*(char *) &child_stack_chk_guards[i] == 0) -+ npartlyrandomized++; - } - -- printf ("differences %d defaults %d\n", ndifferences, ndefaults); -+ printf ("differences %d defaults %d partly randomized %d\n", -+ ndifferences, ndefaults, npartlyrandomized); - -- if (ndifferences < N / 2 && ndefaults < N / 2) -+ if ((ndifferences + ndefaults + npartlyrandomized) < 3 * N / 4) - { - puts ("stack guard canaries are not randomized enough"); - puts ("nor equal to the default canary value"); ---- glibc-2.12-2-gc4ccff1/nscd/nscd.conf -+++ glibc-2.12-1/nscd/nscd.conf -@@ -33,7 +33,7 @@ - # logfile /var/log/nscd.log - # threads 4 - # max-threads 32 --# server-user nobody -+ server-user nscd - # stat-user somebody - debug-level 0 - # reload-count 5 ---- glibc-2.12-2-gc4ccff1/nscd/nscd.init -+++ glibc-2.12-1/nscd/nscd.init -@@ -9,6 +9,7 @@ - # slow naming services like NIS, NIS+, LDAP, or hesiod. - # processname: /usr/sbin/nscd - # config: /etc/nscd.conf -+# config: /etc/sysconfig/nscd - # - ### BEGIN INIT INFO - # Provides: nscd -@@ -28,20 +29,8 @@ - # Source function library. - . /etc/init.d/functions - --# nscd does not run on any kernel lower than 2.2.0 because of threading --# problems, so we require that in first place. --case $(uname -r) in -- 2.[2-9].*) -- # this is okay -- ;; -- [3-9]*) -- # these are of course also okay -- ;; -- *) -- #this is not -- exit 1 -- ;; --esac -+# Source an auxiliary options file if we have one, and pick up NSCD_OPTIONS. -+[ -r /etc/sysconfig/nscd ] && . /etc/sysconfig/nscd - - RETVAL=0 - prog=nscd -@@ -50,7 +39,7 @@ start () { - [ -d /var/run/nscd ] || mkdir /var/run/nscd - [ -d /var/db/nscd ] || mkdir /var/db/nscd - echo -n $"Starting $prog: " -- daemon /usr/sbin/nscd -+ daemon /usr/sbin/nscd $NSCD_OPTIONS - RETVAL=$? - echo - [ $RETVAL -eq 0 ] && touch /var/lock/subsys/nscd -@@ -83,7 +72,7 @@ restart() { - # See how we were called. - case "$1" in - start) -- start -+ [ -e /var/lock/subsys/nscd ] || start - RETVAL=$? - ;; - stop) -@@ -99,14 +88,17 @@ case "$1" in - RETVAL=$? - ;; - try-restart | condrestart) -- [ -e /var/lock/subsys/nscd ] && restart -+ [ ! -e /var/lock/subsys/nscd ] || restart - RETVAL=$? - ;; - force-reload | reload) - echo -n $"Reloading $prog: " -- killproc /usr/sbin/nscd -HUP -- RETVAL=$? -- echo -+ RETVAL=0 -+ /usr/sbin/nscd -i passwd || RETVAL=$? -+ /usr/sbin/nscd -i group || RETVAL=$? -+ /usr/sbin/nscd -i hosts || RETVAL=$? -+ /usr/sbin/nscd -i services || RETVAL=$? -+ echo - ;; - *) - echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}" ---- glibc-2.12-2-gc4ccff1/posix/Makefile -+++ glibc-2.12-1/posix/Makefile -@@ -305,15 +305,8 @@ $(inst_libexecdir)/getconf: $(inst_bindi - mv -f $@/$$spec.new $@/$$spec; \ - done < $(objpfx)getconf.speclist - --$(objpfx)getconf.speclist: $(objpfx)getconf --ifeq (no,$(cross-compiling)) -- LC_ALL=C GETCONF_DIR=/dev/null \ -- $(run-program-prefix) $< _POSIX_V7_WIDTH_RESTRICTED_ENVS > $@.new -- LC_ALL=C GETCONF_DIR=/dev/null \ -- $(run-program-prefix) $< _POSIX_V6_WIDTH_RESTRICTED_ENVS >> $@.new -- LC_ALL=C GETCONF_DIR=/dev/null \ -- $(run-program-prefix) $< _XBS5_WIDTH_RESTRICTED_ENVS >> $@.new --else -- > $@.new --endif -+$(objpfx)getconf.speclist: getconf.speclist.h -+ $(CC) -E $(CFLAGS) $(CPPFLAGS) $< \ -+ | sed -n -e '/START_OF_STRINGS/,$${/\(POSIX_V[67]\|_XBS5\)_/{s/^[^"]*"//;s/".*$$//;p}}' \ -+ > $@.new - mv -f $@.new $@ ---- glibc-2.12-2-gc4ccff1/posix/gai.conf -+++ glibc-2.12-1/posix/gai.conf -@@ -41,7 +41,7 @@ - # - # precedence - # Add another rule to the RFC 3484 precedence table. See section 2.1 --# and 10.3 in RFC 3484. The default is: -+# and 10.3 in RFC 3484. The RFC requires: - # - #precedence ::1/128 50 - #precedence ::/0 40 -@@ -58,7 +58,7 @@ - # Add another rule to the RFC 3484 scope table for IPv4 addresses. - # By default the scope IDs described in section 3.2 in RFC 3484 are - # used. Changing these defaults should hardly ever be necessary. --# The defaults are equivalent to: -+# The definitions in RFC 1918 are equivalent to: - # - #scopev4 ::ffff:169.254.0.0/112 2 - #scopev4 ::ffff:127.0.0.0/104 2 -@@ -75,3 +75,5 @@ - #scopev4 ::ffff:169.254.0.0/112 2 - #scopev4 ::ffff:127.0.0.0/104 2 - #scopev4 ::ffff:0.0.0.0/96 14 -+# -+# This is what the Red Hat setting currently uses. ---- glibc-2.12-2-gc4ccff1/posix/getconf.speclist.h -+++ glibc-2.12-1/posix/getconf.speclist.h -@@ -0,0 +1,39 @@ -+#include -+const char *START_OF_STRINGS = -+#if _POSIX_V7_ILP32_OFF32 == 1 -+"POSIX_V7_ILP32_OFF32" -+#endif -+#if _POSIX_V7_ILP32_OFFBIG == 1 -+"POSIX_V7_ILP32_OFFBIG" -+#endif -+#if _POSIX_V7_LP64_OFF64 == 1 -+"POSIX_V7_LP64_OFF64" -+#endif -+#if _POSIX_V7_LPBIG_OFFBIG == 1 -+"POSIX_V7_LPBIG_OFFBIG" -+#endif -+#if _POSIX_V6_ILP32_OFF32 == 1 -+"POSIX_V6_ILP32_OFF32" -+#endif -+#if _POSIX_V6_ILP32_OFFBIG == 1 -+"POSIX_V6_ILP32_OFFBIG" -+#endif -+#if _POSIX_V6_LP64_OFF64 == 1 -+"POSIX_V6_LP64_OFF64" -+#endif -+#if _POSIX_V6_LPBIG_OFFBIG == 1 -+"POSIX_V6_LPBIG_OFFBIG" -+#endif -+#if _XBS5_ILP32_OFF32 == 1 -+"XBS5_ILP32_OFF32" -+#endif -+#if _XBS5_ILP32_OFFBIG == 1 -+"XBS5_ILP32_OFFBIG" -+#endif -+#if _XBS5_LP64_OFF64 == 1 -+"XBS5_LP64_OFF64" -+#endif -+#if _XBS5_LPBIG_OFFBIG == 1 -+"XBS5_LPBIG_OFFBIG" -+#endif -+""; ---- glibc-2.12-2-gc4ccff1/streams/Makefile -+++ glibc-2.12-1/streams/Makefile -@@ -21,7 +21,7 @@ - # - subdir := streams - --headers = stropts.h sys/stropts.h bits/stropts.h bits/xtitypes.h -+#headers = stropts.h sys/stropts.h bits/stropts.h bits/xtitypes.h - routines = isastream getmsg getpmsg putmsg putpmsg fattach fdetach - - include ../Rules ---- glibc-2.12-2-gc4ccff1/sysdeps/generic/dl-cache.h -+++ glibc-2.12-1/sysdeps/generic/dl-cache.h -@@ -36,6 +36,14 @@ - # define add_system_dir(dir) add_dir (dir) - #endif - -+#ifndef arch_startup -+# define arch_startup(argc, argv) do { } while (0) -+#endif -+ -+#ifndef add_arch_dirs -+# define add_arch_dirs(config_file) do { } while (0) -+#endif -+ - #define CACHEMAGIC "ld.so-1.7.0" - - /* libc5 and glibc 2.0/2.1 use the same format. For glibc 2.2 another ---- glibc-2.12-2-gc4ccff1/sysdeps/i386/Makefile -+++ glibc-2.12-1/sysdeps/i386/Makefile -@@ -2,6 +2,8 @@ - # Every i386 port in use uses gas syntax (I think). - asm-CPPFLAGS += -DGAS_SYNTAX - -+sysdep-ASFLAGS += -U__i686 -+ - # The i386 `long double' is a distinct type we support. - long-double-fcts = yes - -@@ -64,6 +66,14 @@ endif - - ifneq (,$(filter -mno-tls-direct-seg-refs,$(CFLAGS))) - defines += -DNO_TLS_DIRECT_SEG_REFS -+else -+# .a libraries are not performance critical and so we -+# build them without direct TLS segment references -+# always. -+CPPFLAGS-.o += -DNO_TLS_DIRECT_SEG_REFS -+CFLAGS-.o += -mno-tls-direct-seg-refs -+CPPFLAGS-.oS += -DNO_TLS_DIRECT_SEG_REFS -+CFLAGS-.oS += -mno-tls-direct-seg-refs - endif - - ifeq ($(subdir),elf) ---- glibc-2.12-2-gc4ccff1/sysdeps/ia64/Makefile -+++ glibc-2.12-1/sysdeps/ia64/Makefile -@@ -12,8 +12,8 @@ elide-routines.os += hp-timing - - ifeq (yes,$(build-shared)) - # Compatibility --sysdep_routines += ia64libgcc --shared-only-routines += ia64libgcc -+sysdep_routines += libgcc-compat -+shared-only-routines += libgcc-compat - endif - endif - ---- glibc-2.12-2-gc4ccff1/sysdeps/ia64/ia64libgcc.S -+++ glibc-2.12-1/sysdeps/ia64/ia64libgcc.S -@@ -1,350 +0,0 @@ --/* From the Intel IA-64 Optimization Guide, choose the minimum latency -- alternative. */ -- --#include --#undef ret -- --#include -- --#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_2_6) -- --/* __divtf3 -- Compute a 80-bit IEEE double-extended quotient. -- farg0 holds the dividend. farg1 holds the divisor. */ -- --ENTRY(___divtf3) -- cmp.eq p7, p0 = r0, r0 -- frcpa.s0 f10, p6 = farg0, farg1 -- ;; --(p6) cmp.ne p7, p0 = r0, r0 -- .pred.rel.mutex p6, p7 --(p6) fnma.s1 f11 = farg1, f10, f1 --(p6) fma.s1 f12 = farg0, f10, f0 -- ;; --(p6) fma.s1 f13 = f11, f11, f0 --(p6) fma.s1 f14 = f11, f11, f11 -- ;; --(p6) fma.s1 f11 = f13, f13, f11 --(p6) fma.s1 f13 = f14, f10, f10 -- ;; --(p6) fma.s1 f10 = f13, f11, f10 --(p6) fnma.s1 f11 = farg1, f12, farg0 -- ;; --(p6) fma.s1 f11 = f11, f10, f12 --(p6) fnma.s1 f12 = farg1, f10, f1 -- ;; --(p6) fma.s1 f10 = f12, f10, f10 --(p6) fnma.s1 f12 = farg1, f11, farg0 -- ;; --(p6) fma.s0 fret0 = f12, f10, f11 --(p7) mov fret0 = f10 -- br.ret.sptk rp --END(___divtf3) -- .symver ___divtf3, __divtf3@GLIBC_2.2 -- --/* __divdf3 -- Compute a 64-bit IEEE double quotient. -- farg0 holds the dividend. farg1 holds the divisor. */ -- --ENTRY(___divdf3) -- cmp.eq p7, p0 = r0, r0 -- frcpa.s0 f10, p6 = farg0, farg1 -- ;; --(p6) cmp.ne p7, p0 = r0, r0 -- .pred.rel.mutex p6, p7 --(p6) fmpy.s1 f11 = farg0, f10 --(p6) fnma.s1 f12 = farg1, f10, f1 -- ;; --(p6) fma.s1 f11 = f12, f11, f11 --(p6) fmpy.s1 f13 = f12, f12 -- ;; --(p6) fma.s1 f10 = f12, f10, f10 --(p6) fma.s1 f11 = f13, f11, f11 -- ;; --(p6) fmpy.s1 f12 = f13, f13 --(p6) fma.s1 f10 = f13, f10, f10 -- ;; --(p6) fma.d.s1 f11 = f12, f11, f11 --(p6) fma.s1 f10 = f12, f10, f10 -- ;; --(p6) fnma.d.s1 f8 = farg1, f11, farg0 -- ;; --(p6) fma.d fret0 = f8, f10, f11 --(p7) mov fret0 = f10 -- br.ret.sptk rp -- ;; --END(___divdf3) -- .symver ___divdf3, __divdf3@GLIBC_2.2 -- --/* __divsf3 -- Compute a 32-bit IEEE float quotient. -- farg0 holds the dividend. farg1 holds the divisor. */ -- --ENTRY(___divsf3) -- cmp.eq p7, p0 = r0, r0 -- frcpa.s0 f10, p6 = farg0, farg1 -- ;; --(p6) cmp.ne p7, p0 = r0, r0 -- .pred.rel.mutex p6, p7 --(p6) fmpy.s1 f8 = farg0, f10 --(p6) fnma.s1 f9 = farg1, f10, f1 -- ;; --(p6) fma.s1 f8 = f9, f8, f8 --(p6) fmpy.s1 f9 = f9, f9 -- ;; --(p6) fma.s1 f8 = f9, f8, f8 --(p6) fmpy.s1 f9 = f9, f9 -- ;; --(p6) fma.d.s1 f10 = f9, f8, f8 -- ;; --(p6) fnorm.s.s0 fret0 = f10 --(p7) mov fret0 = f10 -- br.ret.sptk rp -- ;; --END(___divsf3) -- .symver ___divsf3, __divsf3@GLIBC_2.2 -- --/* __divdi3 -- Compute a 64-bit integer quotient. -- in0 holds the dividend. in1 holds the divisor. */ -- --ENTRY(___divdi3) -- .regstk 2,0,0,0 -- /* Transfer inputs to FP registers. */ -- setf.sig f8 = in0 -- setf.sig f9 = in1 -- ;; -- /* Convert the inputs to FP, so that they won't be treated as -- unsigned. */ -- fcvt.xf f8 = f8 -- fcvt.xf f9 = f9 -- ;; -- /* Compute the reciprocal approximation. */ -- frcpa.s1 f10, p6 = f8, f9 -- ;; -- /* 3 Newton-Raphson iterations. */ --(p6) fnma.s1 f11 = f9, f10, f1 --(p6) fmpy.s1 f12 = f8, f10 -- ;; --(p6) fmpy.s1 f13 = f11, f11 --(p6) fma.s1 f12 = f11, f12, f12 -- ;; --(p6) fma.s1 f10 = f11, f10, f10 --(p6) fma.s1 f11 = f13, f12, f12 -- ;; --(p6) fma.s1 f10 = f13, f10, f10 --(p6) fnma.s1 f12 = f9, f11, f8 -- ;; --(p6) fma.s1 f10 = f12, f10, f11 -- ;; -- /* Round quotient to an integer. */ -- fcvt.fx.trunc.s1 f10 = f10 -- ;; -- /* Transfer result to GP registers. */ -- getf.sig ret0 = f10 -- br.ret.sptk rp -- ;; --END(___divdi3) -- .symver ___divdi3, __divdi3@GLIBC_2.2 -- --/* __moddi3 -- Compute a 64-bit integer modulus. -- in0 holds the dividend (a). in1 holds the divisor (b). */ -- --ENTRY(___moddi3) -- .regstk 2,0,0,0 -- /* Transfer inputs to FP registers. */ -- setf.sig f14 = in0 -- setf.sig f9 = in1 -- ;; -- /* Convert the inputs to FP, so that they won't be treated as -- unsigned. */ -- fcvt.xf f8 = f14 -- fcvt.xf f9 = f9 -- ;; -- /* Compute the reciprocal approximation. */ -- frcpa.s1 f10, p6 = f8, f9 -- ;; -- /* 3 Newton-Raphson iterations. */ --(p6) fmpy.s1 f12 = f8, f10 --(p6) fnma.s1 f11 = f9, f10, f1 -- ;; --(p6) fma.s1 f12 = f11, f12, f12 --(p6) fmpy.s1 f13 = f11, f11 -- ;; --(p6) fma.s1 f10 = f11, f10, f10 --(p6) fma.s1 f11 = f13, f12, f12 -- ;; -- sub in1 = r0, in1 --(p6) fma.s1 f10 = f13, f10, f10 --(p6) fnma.s1 f12 = f9, f11, f8 -- ;; -- setf.sig f9 = in1 --(p6) fma.s1 f10 = f12, f10, f11 -- ;; -- fcvt.fx.trunc.s1 f10 = f10 -- ;; -- /* r = q * (-b) + a */ -- xma.l f10 = f10, f9, f14 -- ;; -- /* Transfer result to GP registers. */ -- getf.sig ret0 = f10 -- br.ret.sptk rp -- ;; --END(___moddi3) -- .symver ___moddi3, __moddi3@GLIBC_2.2 -- --/* __udivdi3 -- Compute a 64-bit unsigned integer quotient. -- in0 holds the dividend. in1 holds the divisor. */ -- --ENTRY(___udivdi3) -- .regstk 2,0,0,0 -- /* Transfer inputs to FP registers. */ -- setf.sig f8 = in0 -- setf.sig f9 = in1 -- ;; -- /* Convert the inputs to FP, to avoid FP software-assist faults. */ -- fcvt.xuf.s1 f8 = f8 -- fcvt.xuf.s1 f9 = f9 -- ;; -- /* Compute the reciprocal approximation. */ -- frcpa.s1 f10, p6 = f8, f9 -- ;; -- /* 3 Newton-Raphson iterations. */ --(p6) fnma.s1 f11 = f9, f10, f1 --(p6) fmpy.s1 f12 = f8, f10 -- ;; --(p6) fmpy.s1 f13 = f11, f11 --(p6) fma.s1 f12 = f11, f12, f12 -- ;; --(p6) fma.s1 f10 = f11, f10, f10 --(p6) fma.s1 f11 = f13, f12, f12 -- ;; --(p6) fma.s1 f10 = f13, f10, f10 --(p6) fnma.s1 f12 = f9, f11, f8 -- ;; --(p6) fma.s1 f10 = f12, f10, f11 -- ;; -- /* Round quotient to an unsigned integer. */ -- fcvt.fxu.trunc.s1 f10 = f10 -- ;; -- /* Transfer result to GP registers. */ -- getf.sig ret0 = f10 -- br.ret.sptk rp -- ;; --END(___udivdi3) -- .symver ___udivdi3, __udivdi3@GLIBC_2.2 -- --/* __umoddi3 -- Compute a 64-bit unsigned integer modulus. -- in0 holds the dividend (a). in1 holds the divisor (b). */ -- --ENTRY(___umoddi3) -- .regstk 2,0,0,0 -- /* Transfer inputs to FP registers. */ -- setf.sig f14 = in0 -- setf.sig f9 = in1 -- ;; -- /* Convert the inputs to FP, to avoid FP software assist faults. */ -- fcvt.xuf.s1 f8 = f14 -- fcvt.xuf.s1 f9 = f9 -- ;; -- /* Compute the reciprocal approximation. */ -- frcpa.s1 f10, p6 = f8, f9 -- ;; -- /* 3 Newton-Raphson iterations. */ --(p6) fmpy.s1 f12 = f8, f10 --(p6) fnma.s1 f11 = f9, f10, f1 -- ;; --(p6) fma.s1 f12 = f11, f12, f12 --(p6) fmpy.s1 f13 = f11, f11 -- ;; --(p6) fma.s1 f10 = f11, f10, f10 --(p6) fma.s1 f11 = f13, f12, f12 -- ;; -- sub in1 = r0, in1 --(p6) fma.s1 f10 = f13, f10, f10 --(p6) fnma.s1 f12 = f9, f11, f8 -- ;; -- setf.sig f9 = in1 --(p6) fma.s1 f10 = f12, f10, f11 -- ;; -- /* Round quotient to an unsigned integer. */ -- fcvt.fxu.trunc.s1 f10 = f10 -- ;; -- /* r = q * (-b) + a */ -- xma.l f10 = f10, f9, f14 -- ;; -- /* Transfer result to GP registers. */ -- getf.sig ret0 = f10 -- br.ret.sptk rp -- ;; --END(___umoddi3) -- .symver ___umoddi3, __umoddi3@GLIBC_2.2 -- --/* __multi3 -- Compute a 128-bit multiply of 128-bit multiplicands. -- in0/in1 holds one multiplicand (a), in2/in3 holds the other one (b). */ -- --ENTRY(___multi3) -- .regstk 4,0,0,0 -- setf.sig f6 = in1 -- movl r19 = 0xffffffff -- setf.sig f7 = in2 -- ;; -- and r14 = r19, in0 -- ;; -- setf.sig f10 = r14 -- and r14 = r19, in2 -- xmpy.l f9 = f6, f7 -- ;; -- setf.sig f6 = r14 -- shr.u r14 = in0, 32 -- ;; -- setf.sig f7 = r14 -- shr.u r14 = in2, 32 -- ;; -- setf.sig f8 = r14 -- xmpy.l f11 = f10, f6 -- xmpy.l f6 = f7, f6 -- ;; -- getf.sig r16 = f11 -- xmpy.l f7 = f7, f8 -- ;; -- shr.u r14 = r16, 32 -- and r16 = r19, r16 -- getf.sig r17 = f6 -- setf.sig f6 = in0 -- ;; -- setf.sig f11 = r14 -- getf.sig r21 = f7 -- setf.sig f7 = in3 -- ;; -- xma.l f11 = f10, f8, f11 -- xma.l f6 = f6, f7, f9 -- ;; -- getf.sig r18 = f11 -- ;; -- add r18 = r18, r17 -- ;; -- and r15 = r19, r18 -- cmp.ltu p7, p6 = r18, r17 -- ;; -- getf.sig r22 = f6 --(p7) adds r14 = 1, r19 -- ;; --(p7) add r21 = r21, r14 -- shr.u r14 = r18, 32 -- shl r15 = r15, 32 -- ;; -- add r20 = r21, r14 -- ;; -- add ret0 = r15, r16 -- add ret1 = r22, r20 -- br.ret.sptk rp -- ;; --END(___multi3) -- .symver ___multi3, __multi3@GLIBC_2.2 -- --#endif ---- glibc-2.12-2-gc4ccff1/sysdeps/ia64/libgcc-compat.c -+++ glibc-2.12-1/sysdeps/ia64/libgcc-compat.c -@@ -0,0 +1,84 @@ -+/* pre-.hidden libgcc compatibility -+ Copyright (C) 2002 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+ -+#include -+#include -+ -+#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_2_6) -+ -+typedef int int128_t __attribute__((__mode__(TI))); -+ -+extern long double __divtf3 (long double, long double) attribute_hidden; -+long double INTUSE (__divtf3) (long double x, long double y) -+{ -+ return __divtf3 (x, y); -+} -+symbol_version (INTUSE (__divtf3), __divtf3, GLIBC_2.2); -+ -+extern double __divdf3 (double, double) attribute_hidden; -+double INTUSE (__divdf3) (double x, double y) -+{ -+ return __divdf3 (x, y); -+} -+symbol_version (INTUSE (__divdf3), __divdf3, GLIBC_2.2); -+ -+extern float __divsf3 (float, float) attribute_hidden; -+float INTUSE (__divsf3) (float x, float y) -+{ -+ return __divsf3 (x, y); -+} -+symbol_version (INTUSE (__divsf3), __divsf3, GLIBC_2.2); -+ -+extern int64_t __divdi3 (int64_t, int64_t) attribute_hidden; -+int64_t INTUSE (__divdi3) (int64_t x, int64_t y) -+{ -+ return __divdi3 (x, y); -+} -+symbol_version (INTUSE (__divdi3), __divdi3, GLIBC_2.2); -+ -+extern int64_t __moddi3 (int64_t, int64_t) attribute_hidden; -+int64_t INTUSE (__moddi3) (int64_t x, int64_t y) -+{ -+ return __moddi3 (x, y); -+} -+symbol_version (INTUSE (__moddi3), __moddi3, GLIBC_2.2); -+ -+extern uint64_t __udivdi3 (uint64_t, uint64_t) attribute_hidden; -+uint64_t INTUSE (__udivdi3) (uint64_t x, uint64_t y) -+{ -+ return __udivdi3 (x, y); -+} -+symbol_version (INTUSE (__udivdi3), __udivdi3, GLIBC_2.2); -+ -+extern uint64_t __umoddi3 (uint64_t, uint64_t) attribute_hidden; -+uint64_t INTUSE (__umoddi3) (uint64_t x, uint64_t y) -+{ -+ return __umoddi3 (x, y); -+} -+symbol_version (INTUSE (__umoddi3), __umoddi3, GLIBC_2.2); -+ -+extern int128_t __multi3 (int128_t, int128_t) attribute_hidden; -+int128_t INTUSE (__multi3) (int128_t x, int128_t y) -+{ -+ return __multi3 (x, y); -+} -+symbol_version (INTUSE (__multi3), __multi3, GLIBC_2.2); -+ -+#endif ---- glibc-2.12-2-gc4ccff1/sysdeps/posix/getaddrinfo.c -+++ glibc-2.12-1/sysdeps/posix/getaddrinfo.c -@@ -1099,10 +1099,12 @@ static const struct scopeentry - /* Link-local addresses: scope 2. */ - { { { 169, 254, 0, 0 } }, htonl_c (0xffff0000), 2 }, - { { { 127, 0, 0, 0 } }, htonl_c (0xff000000), 2 }, -+#if 0 - /* Site-local addresses: scope 5. */ - { { { 10, 0, 0, 0 } }, htonl_c (0xff000000), 5 }, - { { { 172, 16, 0, 0 } }, htonl_c (0xfff00000), 5 }, - { { { 192, 168, 0, 0 } }, htonl_c (0xffff0000), 5 }, -+#endif - /* Default: scope 14. */ - { { { 0, 0, 0, 0 } }, htonl_c (0x00000000), 14 } - }; ---- glibc-2.12-2-gc4ccff1/sysdeps/powerpc/powerpc64/Makefile -+++ glibc-2.12-1/sysdeps/powerpc/powerpc64/Makefile -@@ -30,6 +30,7 @@ ifneq ($(elf),no) - # we use -fpic instead which is much better. - CFLAGS-initfini.s += -fpic -O1 - endif -+CFLAGS-libc-start.c += -fno-asynchronous-unwind-tables - endif - - ifeq ($(subdir),elf) ---- glibc-2.12-2-gc4ccff1/sysdeps/unix/nice.c -+++ glibc-2.12-1/sysdeps/unix/nice.c -@@ -42,7 +42,12 @@ nice (int incr) - __set_errno (save); - } - -- result = setpriority (PRIO_PROCESS, 0, prio + incr); -+ prio += incr; -+ if (prio < PRIO_MIN) -+ prio = PRIO_MIN; -+ else if (prio >= PRIO_MAX) -+ prio = PRIO_MAX - 1; -+ result = setpriority (PRIO_PROCESS, 0, prio); - if (result == -1) - { - if (errno == EACCES) ---- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/check_pf.c -+++ glibc-2.12-1/sysdeps/unix/sysv/linux/check_pf.c -@@ -27,13 +27,10 @@ - #include - #include - --#include --#include --#include -- - #include - #include - -+#include "netlinkaccess.h" - - #ifndef IFA_F_HOMEADDRESS - # define IFA_F_HOMEADDRESS 0 ---- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/dl-osinfo.h -+++ glibc-2.12-1/sysdeps/unix/sysv/linux/dl-osinfo.h -@@ -17,10 +17,13 @@ - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -+#include - #include - #include - #include - #include -+#include -+#include - - #ifndef MIN - # define MIN(a,b) (((a)<(b))?(a):(b)) -@@ -80,6 +83,32 @@ _dl_setup_stack_chk_guard (void *dl_rand - unsigned char *p = (unsigned char *) &ret; - p[sizeof (ret) - 1] = 255; - p[sizeof (ret) - 2] = '\n'; -+#ifdef HP_TIMING_NOW -+ hp_timing_t hpt; -+ HP_TIMING_NOW (hpt); -+ hpt = (hpt & 0xffff) << 8; -+ ret ^= hpt; -+#endif -+ uintptr_t stk; -+ /* Avoid GCC being too smart. */ -+ asm ("" : "=r" (stk) : "r" (p)); -+ stk &= 0x7ffff0; -+#if __BYTE_ORDER == __LITTLE_ENDIAN -+ stk <<= (__WORDSIZE - 23); -+#elif __WORDSIZE == 64 -+ stk <<= 31; -+#endif -+ ret ^= stk; -+ /* Avoid GCC being too smart. */ -+ p = (unsigned char *) &errno; -+ asm ("" : "=r" (stk) : "r" (p)); -+ stk &= 0x7fff00; -+#if __BYTE_ORDER == __LITTLE_ENDIAN -+ stk <<= (__WORDSIZE - 29); -+#else -+ stk >>= 8; -+#endif -+ ret ^= stk; - } - else - #endif ---- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/futimesat.c -+++ glibc-2.12-1/sysdeps/unix/sysv/linux/futimesat.c -@@ -37,14 +37,14 @@ futimesat (fd, file, tvp) - { - int result; - -+ if (file == NULL) -+ return __futimes (fd, tvp); -+ - #ifdef __NR_futimesat - # ifndef __ASSUME_ATFCTS - if (__have_atfcts >= 0) - # endif - { -- if (file == NULL) -- return __futimes (fd, tvp); -- - result = INLINE_SYSCALL (futimesat, 3, fd, file, tvp); - # ifndef __ASSUME_ATFCTS - if (result == -1 && errno == ENOSYS) -@@ -58,22 +58,7 @@ futimesat (fd, file, tvp) - #ifndef __ASSUME_ATFCTS - char *buf = NULL; - -- if (file == NULL) -- { -- static const char procfd[] = "/proc/self/fd/%d"; -- /* Buffer for the path name we are going to use. It consists of -- - the string /proc/self/fd/ -- - the file descriptor number. -- The final NUL is included in the sizeof. A bit of overhead -- due to the format elements compensates for possible negative -- numbers. */ -- size_t buflen = sizeof (procfd) + sizeof (int) * 3; -- buf = alloca (buflen); -- -- __snprintf (buf, buflen, procfd, fd); -- file = buf; -- } -- else if (fd != AT_FDCWD && file[0] != '/') -+ if (fd != AT_FDCWD && file[0] != '/') - { - size_t filelen = strlen (file); - if (__builtin_expect (filelen == 0, 0)) ---- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/i386/dl-cache.h -+++ glibc-2.12-1/sysdeps/unix/sysv/linux/i386/dl-cache.h -@@ -0,0 +1,59 @@ -+/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. -+ Copyright (C) 2004 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+static inline int -+is_ia64 (void) -+{ -+ unsigned int fl1, fl2; -+ -+ /* See if we can use cpuid. */ -+ __asm__ ("pushfl; pushfl; popl %0; movl %0,%1; xorl %2,%0;" -+ "pushl %0; popfl; pushfl; popl %0; popfl" -+ : "=&r" (fl1), "=&r" (fl2) -+ : "i" (0x00200000)); -+ if (((fl1 ^ fl2) & 0x00200000) == 0) -+ return 0; -+ -+ /* Host supports cpuid. See if cpuid gives capabilities, try -+ CPUID(0). Preserve %ebx and %ecx; cpuid insn clobbers these, we -+ don't need their CPUID values here, and %ebx may be the PIC -+ register. */ -+ __asm__ ("pushl %%ecx; pushl %%ebx; cpuid; popl %%ebx; popl %%ecx" -+ : "=a" (fl1) : "0" (0) : "edx", "cc"); -+ if (fl1 == 0) -+ return 0; -+ -+ /* Invoke CPUID(1), return %edx; caller can examine bits to -+ determine what's supported. */ -+ __asm__ ("pushl %%ecx; pushl %%ebx; cpuid; popl %%ebx; popl %%ecx" -+ : "=d" (fl2), "=a" (fl1) : "1" (1) : "cc"); -+ return (fl2 & (1 << 30)) != 0; -+} -+ -+#define arch_startup(argc, argv) \ -+ do { \ -+ /* On IA-64, try to execute 64-bit ldconfig if possible. \ -+ This is because the badly designed /emul/ia32-linux hack \ -+ will cause 32-bit ldconfig to do all sorts of weird things. */ \ -+ if (is_ia64 ()) \ -+ execv ("/emul/ia32-linux/../../sbin/ldconfig", \ -+ (char *const *) argv); \ -+ } while (0) -+ -+#include_next ---- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/ia64/dl-cache.h -+++ glibc-2.12-1/sysdeps/unix/sysv/linux/ia64/dl-cache.h -@@ -22,4 +22,31 @@ - #define _dl_cache_check_flags(flags) \ - ((flags) == _DL_CACHE_DEFAULT_ID) - -+#define EMUL_HACK "/emul/ia32-linux" -+ -+#define arch_startup(argc, argv) unlink (EMUL_HACK LD_SO_CACHE) -+ -+#define add_arch_dirs(config_file) \ -+ do { \ -+ int save_verbose = opt_verbose; \ -+ opt_verbose = 0; \ -+ \ -+ parse_conf (config_file, EMUL_HACK, true); \ -+ \ -+ /* Always add the standard search paths. */ \ -+ add_system_dir (EMUL_HACK SLIBDIR); \ -+ if (strcmp (SLIBDIR, LIBDIR)) \ -+ add_system_dir (EMUL_HACK LIBDIR); \ -+ \ -+ char emul_config_file[strlen (config_file) \ -+ + sizeof EMUL_HACK]; \ -+ strcpy (mempcpy (emul_config_file, EMUL_HACK, \ -+ strlen (EMUL_HACK)), config_file); \ -+ \ -+ if (! access (emul_config_file, R_OK)) \ -+ parse_conf (emul_config_file, EMUL_HACK, true); \ -+ \ -+ opt_verbose = save_verbose; \ -+ } while (0) -+ - #include_next ---- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/ia64/dl-procinfo.c -+++ glibc-2.12-1/sysdeps/unix/sysv/linux/ia64/dl-procinfo.c -@@ -0,0 +1,5 @@ -+#ifdef IS_IN_ldconfig -+#include -+#else -+#include -+#endif ---- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/ia64/dl-procinfo.h -+++ glibc-2.12-1/sysdeps/unix/sysv/linux/ia64/dl-procinfo.h -@@ -0,0 +1,5 @@ -+#ifdef IS_IN_ldconfig -+#include -+#else -+#include -+#endif ---- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed -+++ glibc-2.12-1/sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed -@@ -1 +1 @@ --s_^\(RTLDLIST=\)\([^ ]*\)-ia64\(\.so\.[0-9.]*\)[ ]*$_\1"\2-ia64\3 \2\3"_ -+s_^\(RTLDLIST=\)\([^ ]*\)-ia64\(\.so\.[0-9.]*\)[ ]*$_\1"\2-ia64\3 /emul/ia32-linux\2\3"_ ---- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/netlinkaccess.h -+++ glibc-2.12-1/sysdeps/unix/sysv/linux/netlinkaccess.h -@@ -25,6 +25,24 @@ - - #include - -+#ifndef IFA_MAX -+/* 2.6.19 kernel headers helpfully removed some macros and -+ moved lots of stuff into new headers, some of which aren't -+ included by linux/rtnetlink.h. */ -+#include -+#endif -+ -+#ifndef IFA_RTA -+# define IFA_RTA(r) \ -+ ((struct rtattr*) ((char*)(r) + NLMSG_ALIGN (sizeof (struct ifaddrmsg)))) -+# define IFA_PAYLOAD(n) NLMSG_PAYLOAD (n, sizeof (struct ifaddrmsg)) -+#endif -+ -+#ifndef IFLA_RTA -+# define IFLA_RTA(r) \ -+ ((struct rtattr*) ((char*)(r) + NLMSG_ALIGN (sizeof (struct ifinfomsg)))) -+# define IFLA_PAYLOAD(n) NLMSG_PAYLOAD (n, sizeof (struct ifinfomsg)) -+#endif - - struct netlink_res - { ---- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/paths.h -+++ glibc-2.12-1/sysdeps/unix/sysv/linux/paths.h -@@ -62,7 +62,7 @@ - #define _PATH_TTY "/dev/tty" - #define _PATH_UNIX "/boot/vmlinux" - #define _PATH_UTMP "/var/run/utmp" --#define _PATH_VI "/usr/bin/vi" -+#define _PATH_VI "/bin/vi" - #define _PATH_WTMP "/var/log/wtmp" - - /* Provide trailing slash, since mostly used for building pathnames. */ ---- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c -+++ glibc-2.12-1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c -@@ -1 +1 @@ --#include "../../fxstat.c" -+#include "../../i386/fxstat.c" ---- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/tcsetattr.c -+++ glibc-2.12-1/sysdeps/unix/sysv/linux/tcsetattr.c -@@ -49,6 +49,7 @@ tcsetattr (fd, optional_actions, termios - { - struct __kernel_termios k_termios; - unsigned long int cmd; -+ int retval; - - switch (optional_actions) - { -@@ -80,6 +81,35 @@ tcsetattr (fd, optional_actions, termios - memcpy (&k_termios.c_cc[0], &termios_p->c_cc[0], - __KERNEL_NCCS * sizeof (cc_t)); - -- return INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios); -+ retval = INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios); -+ -+ if (retval == 0 && cmd == TCSETS) -+ { -+ /* The Linux kernel has a bug which silently ignore the invalid -+ c_cflag on pty. We have to check it here. */ -+ int save = errno; -+ retval = INLINE_SYSCALL (ioctl, 3, fd, TCGETS, &k_termios); -+ if (retval) -+ { -+ /* We cannot verify if the setting is ok. We don't return -+ an error (?). */ -+ __set_errno (save); -+ retval = 0; -+ } -+ else if ((termios_p->c_cflag & (PARENB | CREAD)) -+ != (k_termios.c_cflag & (PARENB | CREAD)) -+ || ((termios_p->c_cflag & CSIZE) -+ && ((termios_p->c_cflag & CSIZE) -+ != (k_termios.c_cflag & CSIZE)))) -+ { -+ /* It looks like the Linux kernel silently changed the -+ PARENB/CREAD/CSIZE bits in c_cflag. Report it as an -+ error. */ -+ __set_errno (EINVAL); -+ retval = -1; -+ } -+ } -+ -+ return retval; - } - libc_hidden_def (tcsetattr) ---- glibc-2.12-2-gc4ccff1/timezone/zic.c -+++ glibc-2.12-1/timezone/zic.c -@@ -1921,7 +1921,7 @@ const int zonecount; - if (stdrp != NULL && stdrp->r_hiyear == 2037) - return; - } -- if (stdrp == NULL && zp->z_nrules != 0) -+ if (stdrp == NULL && (zp->z_nrules != 0 || zp->z_stdoff != 0)) - return; - abbrvar = (stdrp == NULL) ? "" : stdrp->r_abbrvar; - doabbr(result, zp->z_format, abbrvar, FALSE, TRUE); diff --git a/src/patches/glibc/glibc-getlogin-r.patch b/src/patches/glibc/glibc-getlogin-r.patch deleted file mode 100644 index 9181ce12c5..0000000000 --- a/src/patches/glibc/glibc-getlogin-r.patch +++ /dev/null @@ -1,36 +0,0 @@ -2010-05-05 Ulrich Drepper - - [BZ #11571] - * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): Handle - too small buffers according to the standard. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getlogin_r.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/getlogin_r.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getlogin_r.c -@@ -81,13 +81,22 @@ __getlogin_r_loginuid (name, namesize) - if (tpwd == NULL) - goto fail; - -- strncpy (name, pwd.pw_name, namesize - 1); -- name[namesize - 1] = '\0'; -+ int result = 0; -+ size_t needed = strlen (pwd.pw_name) + 1; -+ if (needed > namesize) -+ { -+ __set_errno (ERANGE); -+ result = ERANGE; -+ goto out; -+ } - -+ memcpy (name, pwd.pw_name, needed); -+ -+ out: - if (use_malloc) - free (buf); - -- return 0; -+ return result; - } - - diff --git a/src/patches/glibc/glibc-localedata.patch b/src/patches/glibc/glibc-localedata.patch deleted file mode 100644 index 15de7c6d64..0000000000 --- a/src/patches/glibc/glibc-localedata.patch +++ /dev/null @@ -1,18 +0,0 @@ -2010-05-04 Andreas Schwab - - * SUPPORTED (SUPPORTED-LOCALES): Fix name of tt_RU.UTF-8@iqtelif - locale. - -Index: glibc-2.12-2-gc4ccff1/localedata/SUPPORTED -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/SUPPORTED -+++ glibc-2.12-2-gc4ccff1/localedata/SUPPORTED -@@ -392,7 +392,7 @@ tr_TR.UTF-8/UTF-8 \ - tr_TR/ISO-8859-9 \ - ts_ZA/UTF-8 \ - tt_RU.UTF-8/UTF-8 \ --tt_RU@iqtelif.UTF-8/UTF-8 \ -+tt_RU.UTF-8@iqtelif/UTF-8 \ - ug_CN/UTF-8 \ - uk_UA.UTF-8/UTF-8 \ - uk_UA/KOI8-U \ diff --git a/src/patches/glibc/glibc-mq_open.patch b/src/patches/glibc/glibc-mq_open.patch deleted file mode 100644 index a7a0f11ede..0000000000 --- a/src/patches/glibc/glibc-mq_open.patch +++ /dev/null @@ -1,34 +0,0 @@ -From: https://sourceware.org/bugzilla/show_bug.cgi?id=12841 - ---- libc/rt/bits/mqueue2.h 2009-05-16 19:23:37.000000000 +0200 -+++ libc/rt/bits/mqueue2.h 2011-06-04 19:05:38.322333773 +0200 -@@ -1,5 +1,5 @@ - /* Checking macros for mq functions. -- Copyright (C) 2007 Free Software Foundation, Inc. -+ Copyright (C) 2007, 2011 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or -@@ -25,16 +25,18 @@ - parameter. */ - extern mqd_t mq_open (__const char *__name, int __oflag, ...) - __THROW __nonnull ((1)); --extern mqd_t __mq_open_2 (__const char *__name, int __oflag) __nonnull ((1)); --extern mqd_t __REDIRECT (__mq_open_alias, (__const char *__name, int __oflag, ...), -- mq_open) __nonnull ((1)); -+extern mqd_t __mq_open_2 (__const char *__name, int __oflag) -+ __THROW __nonnull ((1)); -+extern mqd_t __REDIRECT_NTH (__mq_open_alias, (__const char *__name, -+ int __oflag, ...), mq_open) -+ __nonnull ((1)); - __errordecl (__mq_open_wrong_number_of_args, - "mq_open can be called either with 2 or 4 arguments"); - __errordecl (__mq_open_missing_mode_and_attr, - "mq_open with O_CREAT in second argument needs 4 arguments"); - - __extern_always_inline mqd_t --mq_open (__const char *__name, int __oflag, ...) -+__NTH (mq_open (__const char *__name, int __oflag, ...)) - { - if (__va_arg_pack_len () != 0 && __va_arg_pack_len () != 2) - __mq_open_wrong_number_of_args (); diff --git a/src/patches/glibc/glibc-recvmmsg.patch b/src/patches/glibc/glibc-recvmmsg.patch deleted file mode 100644 index 9e3aa7ade8..0000000000 --- a/src/patches/glibc/glibc-recvmmsg.patch +++ /dev/null @@ -1,182 +0,0 @@ -2010-05-21 Andreas Schwab - - * sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Add recvmmsg - and internal_recvmmsg. - * sysdeps/unix/sysv/linux/recvmmsg.c: New file. - * sysdeps/unix/sysv/linux/internal_recvmmsg.S: New file. - * sysdeps/unix/sysv/linux/socketcall.h (SOCKOP_recvmmsg): Define. - * sysdeps/unix/sysv/linux/syscalls.list (recvmmsg): Remove. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/Makefile -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/Makefile -@@ -12,7 +12,7 @@ CFLAGS-malloc.c += -DMORECORE_CLEARS=2 - endif - - ifeq ($(subdir),socket) --sysdep_routines += internal_accept4 -+sysdep_routines += internal_accept4 recvmmsg internal_recvmmsg - endif - - ifeq ($(subdir),misc) -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/internal_recvmmsg.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/internal_recvmmsg.S -@@ -0,0 +1,14 @@ -+#include -+#include -+#if !defined __NR_recvmmsg && defined __NR_socketcall -+# define socket recvmmsg -+# ifdef __ASSUME_RECVMMSG -+# define __socket recvmmsg -+# else -+# define __socket __internal_recvmmsg -+# endif -+# define NARGS 5 -+# define NEED_CANCELLATION -+# define NO_WEAK_ALIAS -+# include -+#endif -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/kernel-features.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/kernel-features.h -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/kernel-features.h -@@ -547,3 +547,8 @@ - #if __LINUX_KERNEL_VERSION >= 0x020620 - # define __ASSUME_F_GETOWN_EX 1 - #endif -+ -+/* Support for the recvmmsg syscall was added in 2.6.33. */ -+#if __LINUX_KERNEL_VERSION >= 0x020621 -+# define __ASSUME_RECVMMSG 1 -+#endif -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/recvmmsg.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/recvmmsg.c -@@ -0,0 +1,100 @@ -+/* Copyright (C) 2010 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Contributed by Andreas Schwab , 2010. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#include -+#include -+ -+#include -+#include -+#include -+ -+ -+#ifdef __NR_recvmmsg -+int -+recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags, -+ const struct timespec *tmo) -+{ -+ if (SINGLE_THREAD_P) -+ return INLINE_SYSCALL (recvmmsg, 5, fd, vmessages, vlen, flags, tmo); -+ -+ int oldtype = LIBC_CANCEL_ASYNC (); -+ -+ int result = INLINE_SYSCALL (recvmmsg, 5, fd, vmessages, vlen, flags, tmo); -+ -+ LIBC_CANCEL_RESET (oldtype); -+ -+ return result; -+} -+#elif defined __NR_socketcall -+# ifndef __ASSUME_RECVMMSG -+extern int __internal_recvmmsg (int fd, struct mmsghdr *vmessages, -+ unsigned int vlen, int flags, -+ const struct timespec *tmo) -+ attribute_hidden; -+ -+static int have_recvmmsg; -+ -+int -+recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags, -+ const struct timespec *tmo) -+{ -+ if (__builtin_expect (have_recvmmsg >= 0, 1)) -+ { -+ int ret = __internal_recvmmsg (fd, vmessages, vlen, flags, tmo); -+ /* The kernel returns -EINVAL for unknown socket operations. -+ We need to convert that error to an ENOSYS error. */ -+ if (__builtin_expect (ret < 0, 0) -+ && have_recvmmsg == 0 -+ && errno == EINVAL) -+ { -+ /* Try another call, this time with an invalid file -+ descriptor and all other parameters cleared. This call -+ will not cause any harm and it will return -+ immediately. */ -+ ret = __internal_recvmmsg (-1, 0, 0, 0, 0); -+ if (errno == EINVAL) -+ { -+ have_recvmmsg = -1; -+ __set_errno (ENOSYS); -+ } -+ else -+ { -+ have_recvmmsg = 1; -+ __set_errno (EINVAL); -+ } -+ return -1; -+ } -+ return ret; -+ } -+ __set_errno (ENOSYS); -+ return -1; -+} -+# else -+/* When __ASSUME_RECVMMSG recvmmsg is defined in internal_recvmmsg.S. */ -+# endif -+#else -+int -+recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags, -+ const struct timespec *tmo) -+{ -+ __set_errno (ENOSYS); -+ return -1; -+} -+stub_warning (recvmmsg) -+#endif -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/socketcall.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/socketcall.h -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/socketcall.h -@@ -44,5 +44,6 @@ - #define SOCKOP_sendmsg 16 - #define SOCKOP_recvmsg 17 - #define SOCKOP_accept4 18 -+#define SOCKOP_recvmmsg 19 - - #endif /* sys/socketcall.h */ -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/syscalls.list -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/syscalls.list -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/syscalls.list -@@ -53,7 +53,6 @@ prctl EXTRA prctl i:iiiii __prctl prc - putpmsg - putpmsg i:ippii putpmsg - query_module EXTRA query_module i:sipip query_module - quotactl EXTRA quotactl i:isip quotactl --recvmmsg EXTRA recvmmsg Ci:ipiip recvmmsg - remap_file_pages - remap_file_pages i:piiii __remap_file_pages remap_file_pages - sched_getp - sched_getparam i:ip __sched_getparam sched_getparam - sched_gets - sched_getscheduler i:i __sched_getscheduler sched_getscheduler diff --git a/src/patches/glibc/glibc-rh1008310.patch b/src/patches/glibc/glibc-rh1008310.patch deleted file mode 100644 index 3658a9f31b..0000000000 --- a/src/patches/glibc/glibc-rh1008310.patch +++ /dev/null @@ -1,45 +0,0 @@ -diff -Nrup a/malloc/malloc.c b/malloc/malloc.c ---- a/malloc/malloc.c 2013-09-23 17:08:33.698331221 -0400 -+++ b/malloc/malloc.c 2013-09-23 21:04:25.901270645 -0400 -@@ -3879,6 +3879,13 @@ public_mEMALIGn(size_t alignment, size_t - /* Otherwise, ensure that it is at least a minimum chunk size */ - if (alignment < MINSIZE) alignment = MINSIZE; - -+ /* Check for overflow. */ -+ if (bytes > SIZE_MAX - alignment - MINSIZE) -+ { -+ __set_errno (ENOMEM); -+ return 0; -+ } -+ - arena_get(ar_ptr, bytes + alignment + MINSIZE); - if(!ar_ptr) - return 0; -@@ -3924,6 +3931,13 @@ public_vALLOc(size_t bytes) - - size_t pagesz = mp_.pagesize; - -+ /* Check for overflow. */ -+ if (bytes > SIZE_MAX - pagesz - MINSIZE) -+ { -+ __set_errno (ENOMEM); -+ return 0; -+ } -+ - __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t, - __const __malloc_ptr_t)) = - force_reg (__memalign_hook); -@@ -3975,6 +3989,13 @@ public_pVALLOc(size_t bytes) - size_t page_mask = mp_.pagesize - 1; - size_t rounded_bytes = (bytes + page_mask) & ~(page_mask); - -+ /* Check for overflow. */ -+ if (bytes > SIZE_MAX - 2*pagesz - MINSIZE) -+ { -+ __set_errno (ENOMEM); -+ return 0; -+ } -+ - __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t, - __const __malloc_ptr_t)) = - force_reg (__memalign_hook); diff --git a/src/patches/glibc/glibc-rh1019916.patch b/src/patches/glibc/glibc-rh1019916.patch deleted file mode 100644 index f67af90c4f..0000000000 --- a/src/patches/glibc/glibc-rh1019916.patch +++ /dev/null @@ -1,39 +0,0 @@ -commit 48b67d71ec677d1b3168e52a68b644784cead604 -Author: Andreas Schwab -Date: Wed Sep 14 12:12:25 2011 +0200 - - Also relocate in dependency order when doing symbol dependency testing - -diff --git a/elf/rtld.c b/elf/rtld.c -index 764140d..324d979 100644 ---- a/elf/rtld.c -+++ b/elf/rtld.c -@@ -2027,24 +2027,21 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", - { - /* We have to do symbol dependency testing. */ - struct relocate_args args; -- struct link_map *l; -+ unsigned int i; - - args.reloc_mode = GLRO(dl_lazy) ? RTLD_LAZY : 0; - -- l = main_map; -- while (l->l_next != NULL) -- l = l->l_next; -- do -+ i = main_map->l_searchlist.r_nlist; -+ while (i-- > 0) - { -+ struct link_map *l = main_map->l_initfini[i]; - if (l != &GL(dl_rtld_map) && ! l->l_faked) - { - args.l = l; - _dl_receive_error (print_unresolved, relocate_doit, - &args); - } -- l = l->l_prev; - } -- while (l != NULL); - - if ((GLRO(dl_debug_mask) & DL_DEBUG_PRELINK) - && rtld_multiple_ref) diff --git a/src/patches/glibc/glibc-rh1022022.patch b/src/patches/glibc/glibc-rh1022022.patch deleted file mode 100644 index 6d23bb1e1d..0000000000 --- a/src/patches/glibc/glibc-rh1022022.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c -index 81e928a..05883bd 100644 ---- a/sysdeps/posix/getaddrinfo.c -+++ b/sysdeps/posix/getaddrinfo.c -@@ -832,8 +832,13 @@ gaih_inet (const char *name, const struct gaih_service *service, - while (!no_more) - { - no_data = 0; -- nss_gethostbyname4_r fct4 -- = __nss_lookup_function (nip, "gethostbyname4_r"); -+ nss_gethostbyname4_r fct4 = NULL; -+ -+ /* gethostbyname4_r sends out parallel A and AAAA queries and -+ is thus only suitable for PF_UNSPEC. */ -+ if (req->ai_family == PF_UNSPEC) -+ fct4 = __nss_lookup_function (nip, "gethostbyname4_r"); -+ - if (fct4 != NULL) - { - int herrno; diff --git a/src/patches/glibc/glibc-rh1023306.patch b/src/patches/glibc/glibc-rh1023306.patch deleted file mode 100644 index 738052d8ea..0000000000 --- a/src/patches/glibc/glibc-rh1023306.patch +++ /dev/null @@ -1,64 +0,0 @@ -diff -pruN glibc-2.17-c758a686/nptl/Makefile glibc-2.17-c758a686.new/nptl/Makefile ---- glibc-2.17-c758a686/nptl/Makefile 2013-07-31 11:51:24.882747234 +0530 -+++ glibc-2.17-c758a686.new/nptl/Makefile 2013-07-31 11:58:55.964731526 +0530 -@@ -276,10 +276,7 @@ gen-as-const-headers = pthread-errnos.sy - LDFLAGS-tst-cond24 = -lrt - LDFLAGS-tst-cond25 = -lrt - --# The size is 1MB + 4KB. The extra 4KB has been added to prevent allocatestack --# from resizing the input size to avoid the 64K aliasing conflict on Intel --# processors. --DEFAULT_STACKSIZE=1052672 -+DEFAULT_STACKSIZE=1048576 - CFLAGS-tst-default-attr.c = -DDEFAULT_STACKSIZE=$(DEFAULT_STACKSIZE) - tst-default-attr-ENV = GLIBC_PTHREAD_STACKSIZE=$(DEFAULT_STACKSIZE) - -diff -pruN glibc-2.17-c758a686/nptl/tst-default-attr.c glibc-2.17-c758a686.new/nptl/tst-default-attr.c ---- glibc-2.17-c758a686/nptl/tst-default-attr.c 2013-07-31 11:51:24.885747234 +0530 -+++ glibc-2.17-c758a686.new/nptl/tst-default-attr.c 2013-07-31 12:18:10.016691337 +0530 -@@ -38,6 +38,7 @@ - - /* DEFAULT_STACKSIZE macro is defined in the Makefile. */ - static size_t stacksize = DEFAULT_STACKSIZE; -+long int pagesize; - - static int - verify_stacksize_result (pthread_attr_t *attr) -@@ -46,12 +47,20 @@ verify_stacksize_result (pthread_attr_t - - RETURN_IF_FAIL (pthread_attr_getstacksize, attr, &stack); - -- if (stacksize != stack) -+ /* pthread_create perturbs the stack size by a page if it aligns to 64K to -+ avoid the 64K aliasing conflict. We cannot simply add 4K to the size in -+ the Makefile because it breaks the test on powerpc since the page size -+ there is 64K, resulting in a resize in __pthread_initialize_minimal. -+ Hence, our check is to ensure that the stack size is not more than a page -+ more than the requested size. */ -+ if (stack < stacksize || stack > stacksize + pagesize) - { - printf ("failed to set default stacksize (%zu, %zu)\n", stacksize, stack); - return 1; - } - -+ printf ("Requested %zu and got %zu\n", stacksize, stack); -+ - return 0; - } - -@@ -101,6 +110,15 @@ run_threads (void) - static int - do_test (void) - { -+ pthread_attr_t attr; -+ -+ pagesize = sysconf (_SC_PAGESIZE); -+ if (pagesize < 0) -+ { -+ printf ("sysconf failed: %s\n", strerror (errno)); -+ return 1; -+ } -+ - RETURN_IF_FAIL (run_threads); - return 0; - } diff --git a/src/patches/glibc/glibc-rh1025933.patch b/src/patches/glibc/glibc-rh1025933.patch deleted file mode 100644 index 9dc98b99b2..0000000000 --- a/src/patches/glibc/glibc-rh1025933.patch +++ /dev/null @@ -1,287 +0,0 @@ -commit 0699f766b10c86912b75f35bef697106b70c1cf6 -Author: Carlos O'Donell -Date: Thu Apr 10 18:31:53 2014 -0400 - - nscd: Make SELinux checks dynamic. - - The SELinux team has indicated to me that glibc's SELinux checks - in nscd are not being carried out as they would expect the API - to be used today. They would like to move away from static header - defines for class and permissions and instead use dynamic checks - at runtime that provide an answer which is dependent on the runtime - status of SELinux i.e. more dynamic. - - The following patch is a minimal change that moves us forward in - this direction. - - It does the following: - - * Stop checking for SELinux headers that define NSCD__SHMEMHOST. - Check only for the presence or absence of the library. - - * Don't encode the specific SELinux permission constants into a - table at build time, and instead use the symbolic name for the - permission as expected. - - * Lookup the "What do we do if we don't know this permission?" - policy and use that if we find SELinux's policy is older than - the glibc policy e.g. we make a request for a permission that - SELinux doesn't know about. - - * Lastly, translate the class and permission and then make - the permission check. This is done every time we lookup - a permission, and this is the expected way to use the API. - SELinux will optimize this for us, and we expect the network - latencies to hide these extra library calls. - - Tested on x86, x86-64, and via Fedora Rawhide since November 2013. - - See: - https://sourceware.org/ml/libc-alpha/2014-04/msg00179.html - -diff --git a/configure b/configure -index abefcdb..8b0b222 100755 ---- a/configure -+++ b/configure -@@ -7774,64 +7774,10 @@ else - have_selinux=no - fi - -- # See if we have the SELinux header with the NSCD permissions in it. -- if test x$have_selinux = xyes ; then -- { $as_echo "$as_me:$LINENO: checking for NSCD Flask permissions in selinux/av_permissions.h" >&5 --$as_echo_n "checking for NSCD Flask permissions in selinux/av_permissions.h... " >&6; } -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include --int --main () --{ --#ifdef NSCD__SHMEMHOST -- return 0; -- #else -- #error NSCD__SHMEMHOST not defined -- #endif -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext --if { (ac_try="$ac_compile" --case "(($ac_try" in -- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -- *) ac_try_echo=$ac_try;; --esac --eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" --$as_echo "$ac_try_echo") >&5 -- (eval "$ac_compile") 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && { -- test -z "$ac_c_werror_flag" || -- test ! -s conftest.err -- } && test -s conftest.$ac_objext; then -- have_selinux=yes --else -- $as_echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- -- have_selinux=no --fi -- --rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -- { $as_echo "$as_me:$LINENO: result: $have_selinux" >&5 --$as_echo "$have_selinux" >&6; } -- fi -- - if test x$with_selinux = xyes ; then - if test x$have_selinux = xno ; then -- { { $as_echo "$as_me:$LINENO: error: SELinux explicitly required, but sufficiently recent SELinux library not found" >&5 --$as_echo "$as_me: error: SELinux explicitly required, but sufficiently recent SELinux library not found" >&2;} -+ { { $as_echo "$as_me:$LINENO: error: SELinux explicitly required, but SELinux library not found" >&5 -+$as_echo "$as_me: error: SELinux explicitly required, but SELinux library not found" >&2;} - { (exit 1); exit 1; }; } - fi - fi -diff --git a/configure.in b/configure.in -index 6291872..97a9591 100644 ---- a/configure.in -+++ b/configure.in -@@ -1945,22 +1945,9 @@ else - # See if we have the SELinux library - AC_CHECK_LIB(selinux, is_selinux_enabled, - have_selinux=yes, have_selinux=no) -- # See if we have the SELinux header with the NSCD permissions in it. -- if test x$have_selinux = xyes ; then -- AC_MSG_CHECKING([for NSCD Flask permissions in selinux/av_permissions.h]) -- AC_TRY_COMPILE([#include ], -- [#ifdef NSCD__SHMEMHOST -- return 0; -- #else -- #error NSCD__SHMEMHOST not defined -- #endif], -- have_selinux=yes, have_selinux=no) -- AC_MSG_RESULT($have_selinux) -- fi -- - if test x$with_selinux = xyes ; then - if test x$have_selinux = xno ; then -- AC_MSG_ERROR([SELinux explicitly required, but sufficiently recent SELinux library not found]) -+ AC_MSG_ERROR([SELinux explicitly required, but SELinux library not found]) - fi - fi - fi -diff --git a/nscd/selinux.c b/nscd/selinux.c -index 46b0ea9..9a8a5a8 100644 ---- a/nscd/selinux.c -+++ b/nscd/selinux.c -@@ -28,7 +28,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -44,35 +43,31 @@ - /* Global variable to tell if the kernel has SELinux support. */ - int selinux_enabled; - --/* Define mappings of access vector permissions to request types. */ --static const access_vector_t perms[LASTREQ] = -+/* Define mappings of request type to AVC permission name. */ -+static const char *perms[LASTREQ] = - { -- [GETPWBYNAME] = NSCD__GETPWD, -- [GETPWBYUID] = NSCD__GETPWD, -- [GETGRBYNAME] = NSCD__GETGRP, -- [GETGRBYGID] = NSCD__GETGRP, -- [GETHOSTBYNAME] = NSCD__GETHOST, -- [GETHOSTBYNAMEv6] = NSCD__GETHOST, -- [GETHOSTBYADDR] = NSCD__GETHOST, -- [GETHOSTBYADDRv6] = NSCD__GETHOST, -- [GETSTAT] = NSCD__GETSTAT, -- [SHUTDOWN] = NSCD__ADMIN, -- [INVALIDATE] = NSCD__ADMIN, -- [GETFDPW] = NSCD__SHMEMPWD, -- [GETFDGR] = NSCD__SHMEMGRP, -- [GETFDHST] = NSCD__SHMEMHOST, -- [GETAI] = NSCD__GETHOST, -- [INITGROUPS] = NSCD__GETGRP, --#ifdef NSCD__GETSERV -- [GETSERVBYNAME] = NSCD__GETSERV, -- [GETSERVBYPORT] = NSCD__GETSERV, -- [GETFDSERV] = NSCD__SHMEMSERV, --#endif --#ifdef NSCD__GETNETGRP -- [GETNETGRENT] = NSCD__GETNETGRP, -- [INNETGR] = NSCD__GETNETGRP, -- [GETFDNETGR] = NSCD__SHMEMNETGRP, --#endif -+ [GETPWBYNAME] = "getpwd", -+ [GETPWBYUID] = "getpwd", -+ [GETGRBYNAME] = "getgrp", -+ [GETGRBYGID] = "getgrp", -+ [GETHOSTBYNAME] = "gethost", -+ [GETHOSTBYNAMEv6] = "gethost", -+ [GETHOSTBYADDR] = "gethost", -+ [GETHOSTBYADDRv6] = "gethost", -+ [SHUTDOWN] = "admin", -+ [GETSTAT] = "getstat", -+ [INVALIDATE] = "admin", -+ [GETFDPW] = "shmempwd", -+ [GETFDGR] = "shmemgrp", -+ [GETFDHST] = "shmemhost", -+ [GETAI] = "gethost", -+ [INITGROUPS] = "getgrp", -+ [GETSERVBYNAME] = "getserv", -+ [GETSERVBYPORT] = "getserv", -+ [GETFDSERV] = "shmemserv", -+ [GETNETGRENT] = "getnetgrp", -+ [INNETGR] = "getnetgrp", -+ [GETFDNETGR] = "shmemnetgrp", - }; - - /* Store an entry ref to speed AVC decisions. */ -@@ -344,7 +339,16 @@ nscd_avc_init (void) - - - /* Check the permission from the caller (via getpeercon) to nscd. -- Returns 0 if access is allowed, 1 if denied, and -1 on error. */ -+ Returns 0 if access is allowed, 1 if denied, and -1 on error. -+ -+ The SELinux policy, enablement, and permission bits are all dynamic and the -+ caching done by glibc is not entirely correct. This nscd support should be -+ rewritten to use selinux_check_permission. A rewrite is risky though and -+ requires some refactoring. Currently we use symbolic mappings instead of -+ compile time constants (which SELinux upstream says are going away), and we -+ use security_deny_unknown to determine what to do if selinux-policy* doesn't -+ have a definition for the the permission or object class we are looking -+ up. */ - int - nscd_request_avc_has_perm (int fd, request_type req) - { -@@ -354,6 +358,33 @@ nscd_request_avc_has_perm (int fd, request_type req) - security_id_t ssid = NULL; - security_id_t tsid = NULL; - int rc = -1; -+ security_class_t sc_nscd; -+ access_vector_t perm; -+ int avc_deny_unknown; -+ -+ /* Check if SELinux denys or allows unknown object classes -+ and permissions. It is 0 if they are allowed, 1 if they -+ are not allowed and -1 on error. */ -+ if ((avc_deny_unknown = security_deny_unknown ()) == -1) -+ dbg_log (_("Error querying policy for undefined object classes " -+ "or permissions.")); -+ -+ /* Get the security class for nscd. If this fails we will likely be -+ unable to do anything unless avc_deny_unknown is 0. */ -+ sc_nscd = string_to_security_class ("nscd"); -+ if (perm == 0 && avc_deny_unknown == 1) -+ dbg_log (_("Error getting security class for nscd.")); -+ -+ /* Convert permission to AVC bits. */ -+ perm = string_to_av_perm (sc_nscd, perms[req]); -+ if (perm == 0 && avc_deny_unknown == 1) -+ dbg_log (_("Error translating permission name " -+ "\"%s\" to access vector bit."), perms[req]); -+ -+ /* If the nscd security class was not found or perms were not -+ found and AVC does not deny unknown values then allow it. */ -+ if ((sc_nscd == 0 || perm == 0) && avc_deny_unknown == 0) -+ return 0; - - if (getpeercon (fd, &scon) < 0) - { -@@ -372,15 +403,13 @@ nscd_request_avc_has_perm (int fd, request_type req) - goto out; - } - --#ifndef NSCD__GETSERV -- if (perms[req] == 0) -- { -- dbg_log (_("compile-time support for database policy missing")); -- goto out; -- } --#endif -- -- rc = avc_has_perm (ssid, tsid, SECCLASS_NSCD, perms[req], &aeref, NULL) < 0; -+ /* The SELinux API for avc_has_perm conflates access denied and error into -+ the return code -1, while nscd_request_avs_has_perm has distinct error -+ (-1) and denied (1) return codes. We map the avc_has_perm access denied or -+ error into an access denied at the nscd interface level (we do accurately -+ report error for the getpeercon, getcon, and avc_context_to_sid interfaces -+ used above). */ -+ rc = avc_has_perm (ssid, tsid, sc_nscd, perm, &aeref, NULL) < 0; - - out: - if (scon) diff --git a/src/patches/glibc/glibc-rh1027101.patch b/src/patches/glibc/glibc-rh1027101.patch deleted file mode 100644 index 7825682821..0000000000 --- a/src/patches/glibc/glibc-rh1027101.patch +++ /dev/null @@ -1,58 +0,0 @@ -commit 362b47fe09ca9a928d444c7e2f7992f7f61bfc3e -Author: Maxim Kuvyrkov -Date: Tue Dec 24 09:44:50 2013 +1300 - - Fix race in free() of fastbin chunk: BZ #15073 - - Perform sanity check only if we have_lock. Due to lockless nature of fastbins - we need to be careful derefencing pointers to fastbin entries (chunksize(old) - in this case) in multithreaded environments. - - The fix is to add have_lock to the if-condition checks. The rest of the patch - only makes code more readable. - - * malloc/malloc.c (_int_free): Perform sanity check only if we - have_lock. - -diff --git a/malloc/malloc.c b/malloc/malloc.c -index b1668b5..5e419ad 100644 ---- a/malloc/malloc.c -+++ b/malloc/malloc.c -@@ -3783,25 +3783,29 @@ _int_free(mstate av, mchunkptr p, int have_lock) - fb = &fastbin (av, idx); - - #ifdef ATOMIC_FASTBINS -- mchunkptr fd; -- mchunkptr old = *fb; -+ /* Atomically link P to its fastbin: P->FD = *FB; *FB = P; */ -+ mchunkptr old = *fb, old2; - unsigned int old_idx = ~0u; - do - { -- /* Another simple check: make sure the top of the bin is not the -- record we are going to add (i.e., double free). */ -+ /* Check that the top of the bin is not the record we are going to add -+ (i.e., double free). */ - if (__builtin_expect (old == p, 0)) - { - errstr = "double free or corruption (fasttop)"; - goto errout; - } -- if (old != NULL) -+ /* Check that size of fastbin chunk at the top is the same as -+ size of the chunk that we are adding. We can dereference OLD -+ only if we have the lock, otherwise it might have already been -+ deallocated. See use of OLD_IDX below for the actual check. */ -+ if (have_lock && old != NULL) - old_idx = fastbin_index(chunksize(old)); -- p->fd = fd = old; -+ p->fd = old2 = old; - } -- while ((old = catomic_compare_and_exchange_val_rel (fb, p, fd)) != fd); -+ while ((old = catomic_compare_and_exchange_val_rel (fb, p, old2)) != old2); - -- if (fd != NULL && __builtin_expect (old_idx != idx, 0)) -+ if (have_lock && old != NULL && __builtin_expect (old_idx != idx, 0)) - { - errstr = "invalid fastbin entry (free)"; - goto errout; diff --git a/src/patches/glibc/glibc-rh1027261.patch b/src/patches/glibc/glibc-rh1027261.patch deleted file mode 100644 index 8599cf02e2..0000000000 --- a/src/patches/glibc/glibc-rh1027261.patch +++ /dev/null @@ -1,28 +0,0 @@ -commit 4d653a59ffeae0f46f76a40230e2cfa9587b7e7e -Author: Siddhesh Poyarekar -Date: Fri May 30 22:43:52 2014 +0530 - - Add mmap usage in malloc_info output - - The current malloc_info xml output only has information about - allocations on the heap. Display information about number of mappings - and total mmapped size to this to complete the picture. - -diff -pruN a/malloc/malloc.c b/malloc/malloc.c ---- a/malloc/malloc.c 2014-06-02 07:35:22.573256155 +0530 -+++ b/malloc/malloc.c 2014-06-02 07:34:58.856257177 +0530 -@@ -6553,12 +6553,14 @@ malloc_info (int options, FILE *fp) - fprintf (fp, - "\n" - "\n" -+ "\n" - "\n" - "\n" - "\n" - "\n" - "\n", - total_nfastblocks, total_fastavail, total_nblocks, total_avail, -+ mp_.n_mmaps, mp_.mmapped_mem, - total_system, total_max_system, - total_aspace, total_aspace_mprotect); - diff --git a/src/patches/glibc/glibc-rh1028285.patch b/src/patches/glibc/glibc-rh1028285.patch deleted file mode 100644 index 3bf8c4f065..0000000000 --- a/src/patches/glibc/glibc-rh1028285.patch +++ /dev/null @@ -1,149 +0,0 @@ -From a5675717e35a02a3eba7e13701c6f9c0d7222e13 Mon Sep 17 00:00:00 2001 -From: Adhemerval Zanella -Date: Fri, 7 Jun 2013 14:50:23 -0500 -Subject: [PATCH 2/2] PowerPC: gettimeofday optimization by using IFUNC - -Backport of ef26eece6331a1f6d959818e37c438cc7ce68e53 from master. ---- - sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h | 10 ++++ - sysdeps/unix/sysv/linux/powerpc/gettimeofday.c | 49 +++++++++++++++------- - 2 files changed, 44 insertions(+), 15 deletions(-) - -commit 76a9b9986141b1a7d9fd290c349d27fcee780c7a -Author: Adhemerval Zanella -Date: Thu Nov 7 05:34:22 2013 -0600 - - PowerPC: Fix vDSO missing ODP entries - - This patch fixes the vDSO symbol used directed in IFUNC resolver where - they do not have an associated ODP entry leading to undefined behavior - in some cases. It adds an artificial OPD static entry to such cases - and set its TOC to non 0 to avoid triggering lazy resolutions. - -commit d98720e07f67fbeec00f9e1347840404240d3c48 -Author: Adhemerval Zanella -Date: Mon Jan 20 12:29:51 2014 -0600 - - PowerPC: Fix gettimeofday ifunc selection - - The IFUNC selector for gettimeofday runs before _libc_vdso_platform_setup where - __vdso_gettimeofday is set. The selector then sets __gettimeofday (the internal - version used within GLIBC) to use the system call version instead of the vDSO one. - This patch changes the check if vDSO is available to get its value directly - instead of rely on __vdso_gettimeofday. - - This patch changes it by getting the vDSO value directly. - - It fixes BZ#16431. - -diff -pruN a/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h b/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h ---- a/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h 2014-05-20 14:46:51.026871920 +0530 -+++ b/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h 2014-05-20 14:44:39.294877321 +0530 -@@ -33,6 +33,36 @@ extern void *__vdso_get_tbfreq; - - extern void *__vdso_getcpu; - -+#if defined(__PPC64__) || defined(__powerpc64__) -+/* The correct solution is for _dl_vdso_vsym to return the address of the OPD -+ for the kernel VDSO function. That address would then be stored in the -+ __vdso_* variables and returned as the result of the IFUNC resolver function. -+ Yet, the kernel does not contain any OPD entries for the VDSO functions -+ (incomplete implementation). However, PLT relocations for IFUNCs still expect -+ the address of an OPD to be returned from the IFUNC resolver function (since -+ PLT entries on PPC64 are just copies of OPDs). The solution for now is to -+ create an artificial static OPD for each VDSO function returned by a resolver -+ function. The TOC value is set to a non-zero value to avoid triggering lazy -+ symbol resolution via .glink0/.plt0 for a zero TOC (requires thread-safe PLT -+ sequences) when the dynamic linker isn't prepared for it e.g. RTLD_NOW. None -+ of the kernel VDSO routines use the TOC or AUX values so any non-zero value -+ will work. Note that function pointer comparisons will not use this artificial -+ static OPD since those are resolved via ADDR64 relocations and will point at -+ the non-IFUNC default OPD for the symbol. Lastly, because the IFUNC relocations -+ are processed immediately at startup the resolver functions and this code need -+ not be thread-safe, but if the caller writes to a PLT slot it must do so in a -+ thread-safe manner with all the required barriers. */ -+#define VDSO_IFUNC_RET(value) \ -+ ({ \ -+ static Elf64_FuncDesc vdso_opd = { .fd_toc = ~0x0 }; \ -+ vdso_opd.fd_func = (Elf64_Addr)value; \ -+ &vdso_opd; \ -+ }) -+ -+#else -+#define VDSO_IFUNC_RET(value) ((void *) (value)) -+#endif -+ - #endif - - #endif /* _LIBC_VDSO_H */ -diff -pruN a/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c b/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c ---- a/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c 2010-05-04 16:57:23.000000000 +0530 -+++ b/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c 2014-05-20 14:44:39.298877321 +0530 -@@ -16,27 +16,51 @@ - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - --#include --#include --#include - #include --#include --#include - --#undef __gettimeofday --#include -+#ifdef SHARED - --/* Get the current time of day and timezone information, -- putting it into *TV and *TZ. If TZ is NULL, *TZ is not filled. -- Returns 0 on success, -1 on errors. */ -- --int --__gettimeofday (tv, tz) -- struct timeval *tv; -- struct timezone *tz; -+# include -+# include -+# include -+ -+void *gettimeofday_ifunc (void) __asm__ ("__gettimeofday"); -+ -+static int -+__gettimeofday_syscall (struct timeval *tv, struct timezone *tz) -+{ -+ return INLINE_SYSCALL (gettimeofday, 2, tv, tz); -+} -+ -+void * -+gettimeofday_ifunc (void) -+{ -+ PREPARE_VERSION (linux2615, "LINUX_2.6.15", 123718565); -+ -+ /* If the vDSO is not available we fall back syscall. */ -+ void *vdso_gettimeofday = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2615); -+ return (vdso_gettimeofday ? VDSO_IFUNC_RET (vdso_gettimeofday) -+ : (void*)__gettimeofday_syscall); -+} -+asm (".type __gettimeofday, %gnu_indirect_function"); -+ -+/* This is doing "libc_hidden_def (__gettimeofday)" but the compiler won't -+ let us do it in C because it doesn't know we're defining __gettimeofday -+ here in this file. */ -+asm (".globl __GI___gettimeofday\n" -+ "__GI___gettimeofday = __gettimeofday"); -+ -+#else -+ -+# include -+# include -+ -+int -+__gettimeofday (struct timeval *tv, struct timezone *tz) - { -- return INLINE_VSYSCALL (gettimeofday, 2, CHECK_1 (tv), CHECK_1 (tz)); -+ return INLINE_SYSCALL (gettimeofday, 2, tv, tz); - } - -+#endif - INTDEF (__gettimeofday) - weak_alias (__gettimeofday, gettimeofday) diff --git a/src/patches/glibc/glibc-rh1032628.patch b/src/patches/glibc/glibc-rh1032628.patch deleted file mode 100644 index 6140c190d6..0000000000 --- a/src/patches/glibc/glibc-rh1032628.patch +++ /dev/null @@ -1,166 +0,0 @@ -commit 028478fa40d85a73b19638dbe3f83b1acebf370c -Author: Ulrich Drepper -Date: Thu Mar 10 12:51:33 2011 -0500 - - Fix copy relocations handling of unique objects. - - 2011-03-06 Ulrich Drepper - -and a part of: - -commit 33f85a3fb9fe432e0ebf6a3481bc2d5e29cb605f -Author: Ulrich Drepper -Date: Thu Mar 10 03:18:21 2011 -0500 - - Don't run tests checking xecutable stack when SELinux is enforcing. - -since the latter incorrectly had a bit of the former changes. - -Additionally, the test case needs -lstdc++ to build. - -diff --git a/elf/Makefile b/elf/Makefile -index c427679..56cb1b1 100644 ---- a/elf/Makefile -+++ b/elf/Makefile -@@ -201,7 +201,7 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \ - unload3 unload4 unload5 unload6 unload7 unload8 tst-global1 order2 \ - tst-audit1 tst-audit2 tst-audit9 \ - tst-stackguard1 tst-addr1 tst-thrlock \ -- tst-unique1 tst-unique2 -+ tst-unique1 tst-unique2 tst-unique3 - # reldep9 - test-srcs = tst-pathopt - tests-execstack-yes = tst-execstack tst-execstack-needed tst-execstack-prog -@@ -255,6 +255,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \ - order2mod1 order2mod2 order2mod3 order2mod4 \ - tst-unique1mod1 tst-unique1mod2 \ - tst-unique2mod1 tst-unique2mod2 \ -+ tst-unique3lib tst-unique3lib2 \ - tst-auditmod9a tst-auditmod9b - ifeq (yes,$(have-initfini-array)) - modules-names += tst-array2dep tst-array5dep -@@ -1178,6 +1179,11 @@ $(objpfx)tst-unique1.out: $(objpfx)tst-unique1mod1.so \ - $(objpfx)tst-unique2: $(libdl) $(objpfx)tst-unique2mod1.so - $(objpfx)tst-unique2.out: $(objpfx)tst-unique2mod2.so - -+LDLIBS-tst-unique3lib.so = -lstdc++ -+LDLIBS-tst-unique3lib2.so = -lstdc++ -+$(objpfx)tst-unique3: $(libdl) $(objpfx)tst-unique3lib.so -+$(objpfx)tst-unique3.out: $(objpfx)tst-unique3lib2.so -+ - ifeq (yes,$(config-cflags-avx)) - CFLAGS-tst-audit4.c += -mavx - CFLAGS-tst-auditmod4a.c += -mavx -diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c -index 78c8669..874a4bb 100644 ---- a/elf/dl-lookup.c -+++ b/elf/dl-lookup.c -@@ -364,8 +363,19 @@ do_lookup_x (const char *undef_name, uint_fast32_t new_hash, - if (entries[idx].hashval == new_hash - && strcmp (entries[idx].name, undef_name) == 0) - { -- result->s = entries[idx].sym; -- result->m = (struct link_map *) entries[idx].map; -+ if ((type_class & ELF_RTYPE_CLASS_COPY) != 0) -+ { -+ /* We possibly have to initialize the central -+ copy from the copy addressed through the -+ relocation. */ -+ result->s = sym; -+ result->m = (struct link_map *) map; -+ } -+ else -+ { -+ result->s = entries[idx].sym; -+ result->m = (struct link_map *) entries[idx].map; -+ } - __rtld_lock_unlock_recursive (tab->lock); - return 1; - } -diff --git a/elf/tst-unique3.cc b/elf/tst-unique3.cc -new file mode 100644 -index 0000000..b2c9593 ---- /dev/null -+++ b/elf/tst-unique3.cc -@@ -0,0 +1,23 @@ -+#include "tst-unique3.h" -+#include -+#include "../dlfcn/dlfcn.h" -+ -+int t = S::i; -+ -+int -+main (void) -+{ -+ std::printf ("%d %d\n", S::i, t); -+ int result = S::i++ != 1 || t != 1; -+ result |= in_lib (); -+ void *d = dlopen ("$ORIGIN/tst-unique3lib2.so", RTLD_LAZY); -+ int (*fp) (); -+ if (d == NULL || (fp = (int(*)()) dlsym (d, "in_lib2")) == NULL) -+ { -+ std::printf ("failed to get symbol in_lib2\n"); -+ return 1; -+ } -+ result |= fp (); -+ dlclose (d); -+ return result; -+} -diff --git a/elf/tst-unique3.h b/elf/tst-unique3.h -new file mode 100644 -index 0000000..716d236 ---- /dev/null -+++ b/elf/tst-unique3.h -@@ -0,0 +1,8 @@ -+// BZ 12510 -+template -+struct S -+{ -+ static int i; -+}; -+ -+extern int in_lib (void); -diff --git a/elf/tst-unique3lib.cc b/elf/tst-unique3lib.cc -new file mode 100644 -index 0000000..fa8e85a ---- /dev/null -+++ b/elf/tst-unique3lib.cc -@@ -0,0 +1,11 @@ -+#include -+#include "tst-unique3.h" -+template int S::i = 1; -+static int i = S::i; -+ -+int -+in_lib (void) -+{ -+ std::printf ("in_lib: %d %d\n", S::i, i); -+ return S::i++ != 2 || i != 1; -+} -diff --git a/elf/tst-unique3lib2.cc b/elf/tst-unique3lib2.cc -new file mode 100644 -index 0000000..17d817e ---- /dev/null -+++ b/elf/tst-unique3lib2.cc -@@ -0,0 +1,12 @@ -+#include -+#include "tst-unique3.h" -+ -+template int S::i; -+ -+extern "C" -+int -+in_lib2 () -+{ -+ std::printf ("in_lib2: %d\n", S::i); -+ return S::i != 3; -+} -diff --git a/include/bits/dlfcn.h b/include/bits/dlfcn.h -index cb4a5c2..c31a645 100644 ---- a/include/bits/dlfcn.h -+++ b/include/bits/dlfcn.h -@@ -1,4 +1,3 @@ - #include_next - --extern void _dl_mcount_wrapper_check (void *__selfpc); - libc_hidden_proto (_dl_mcount_wrapper_check) diff --git a/src/patches/glibc/glibc-rh1039988.patch b/src/patches/glibc/glibc-rh1039988.patch deleted file mode 100644 index 253b31133f..0000000000 --- a/src/patches/glibc/glibc-rh1039988.patch +++ /dev/null @@ -1,141 +0,0 @@ -commit 9a3c6a6ff602c88d7155139a7d7d0000b7b7e946 -Author: Siddhesh Poyarekar -Date: Thu Jan 2 10:05:27 2014 +0530 - - Fix return code from getent netgroup when the netgroup is not found (bz #16366) - - nscd incorrectly returns a success even when the netgroup in question - is not found and adds a positive result in the cache. this patch - fixes this behaviour by adding a negative lookup entry to cache and - returning an error when the netgroup is not found. - -diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c -index 50936ee..9fc1664 100644 ---- a/nscd/netgroupcache.c -+++ b/nscd/netgroupcache.c -@@ -65,6 +65,55 @@ struct dataset - char strdata[0]; - }; - -+/* Sends a notfound message and prepares a notfound dataset to write to the -+ cache. Returns true if there was enough memory to allocate the dataset and -+ returns the dataset in DATASETP, total bytes to write in TOTALP and the -+ timeout in TIMEOUTP. KEY_COPY is set to point to the copy of the key in the -+ dataset. */ -+static bool -+do_notfound (struct database_dyn *db, int fd, request_header *req, -+ const char *key, struct dataset **datasetp, ssize_t *totalp, -+ time_t *timeoutp, char **key_copy) -+{ -+ struct dataset *dataset; -+ ssize_t total; -+ time_t timeout; -+ bool cacheable = false; -+ -+ total = sizeof (notfound); -+ timeout = time (NULL) + db->negtimeout; -+ -+ if (fd != -1) -+ TEMP_FAILURE_RETRY (send (fd, ¬found, total, MSG_NOSIGNAL)); -+ -+ dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, 1); -+ /* If we cannot permanently store the result, so be it. */ -+ if (dataset != NULL) -+ { -+ dataset->head.allocsize = sizeof (struct dataset) + req->key_len; -+ dataset->head.recsize = total; -+ dataset->head.notfound = true; -+ dataset->head.nreloads = 0; -+ dataset->head.usable = true; -+ -+ /* Compute the timeout time. */ -+ timeout = dataset->head.timeout = time (NULL) + db->negtimeout; -+ dataset->head.ttl = db->negtimeout; -+ -+ /* This is the reply. */ -+ memcpy (&dataset->resp, ¬found, total); -+ -+ /* Copy the key data. */ -+ memcpy (dataset->strdata, key, req->key_len); -+ *key_copy = dataset->strdata; -+ -+ cacheable = true; -+ } -+ *timeoutp = timeout; -+ *totalp = total; -+ *datasetp = dataset; -+ return cacheable; -+} - - static time_t - addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, -@@ -84,6 +133,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - struct dataset *dataset; - bool cacheable = false; - ssize_t total; -+ bool found = false; - - char *key_copy = NULL; - struct __netgrent data; -@@ -103,35 +153,8 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - && __nss_database_lookup ("netgroup", NULL, NULL, &netgroup_database)) - { - /* No such service. */ -- total = sizeof (notfound); -- timeout = time (NULL) + db->negtimeout; -- -- if (fd != -1) -- TEMP_FAILURE_RETRY (send (fd, ¬found, total, MSG_NOSIGNAL)); -- -- dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, 1); -- /* If we cannot permanently store the result, so be it. */ -- if (dataset != NULL) -- { -- dataset->head.allocsize = sizeof (struct dataset) + req->key_len; -- dataset->head.recsize = total; -- dataset->head.notfound = true; -- dataset->head.nreloads = 0; -- dataset->head.usable = true; -- -- /* Compute the timeout time. */ -- timeout = dataset->head.timeout = time (NULL) + db->negtimeout; -- dataset->head.ttl = db->negtimeout; -- -- /* This is the reply. */ -- memcpy (&dataset->resp, ¬found, total); -- -- /* Copy the key data. */ -- memcpy (dataset->strdata, key, req->key_len); -- -- cacheable = true; -- } -- -+ cacheable = do_notfound (db, fd, req, key, &dataset, &total, &timeout, -+ &key_copy); - goto writeout; - } - -@@ -167,6 +190,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - - if (status == NSS_STATUS_SUCCESS) - { -+ found = true; - union - { - enum nss_status (*f) (struct __netgrent *, char *, size_t, -@@ -326,6 +350,15 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - } - } - -+ /* No results. Return a failure and write out a notfound record in the -+ cache. */ -+ if (!found) -+ { -+ cacheable = do_notfound (db, fd, req, key, &dataset, &total, &timeout, -+ &key_copy); -+ goto writeout; -+ } -+ - total = buffilled; - - /* Fill in the dataset. */ diff --git a/src/patches/glibc/glibc-rh1043557.patch b/src/patches/glibc/glibc-rh1043557.patch deleted file mode 100644 index affbe964cd..0000000000 --- a/src/patches/glibc/glibc-rh1043557.patch +++ /dev/null @@ -1,145 +0,0 @@ -commit af37a8a3496327a6e5617a2c76f17aa1e8db835e -Author: Siddhesh Poyarekar -Date: Mon Jan 27 11:32:44 2014 +0530 - - Avoid undefined behaviour in netgroupcache - - Using a buffer after it has been reallocated is undefined behaviour, - so get offsets of the triplets in the old buffer before reallocating - it. - -commit 5d41dadf31bc8a2f9c34c40d52a442d3794e405c -Author: Siddhesh Poyarekar -Date: Fri Jan 24 13:51:15 2014 +0530 - - Adjust pointers to triplets in netgroup query data (BZ #16474) - - The _nss_*_getnetgrent_r query populates the netgroup results in the - allocated buffer and then sets the result triplet to point to strings - in the buffer. This is a problem when the buffer is reallocated since - the pointers to the triplet strings are no longer valid. The pointers - need to be adjusted so that they now point to strings in the - reallocated buffer. - -commit 980cb5180e1b71224a57ca52b995c959b7148c09 -Author: Siddhesh Poyarekar -Date: Thu Jan 16 10:20:22 2014 +0530 - - Don't use alloca in addgetnetgrentX (BZ #16453) - - addgetnetgrentX has a buffer which is grown as per the needs of the - requested size either by using alloca or by falling back to malloc if - the size is larger than 1K. There are two problems with the alloca - bits: firstly, it doesn't really extend the buffer since it does not - use the return value of the extend_alloca macro, which is the location - of the reallocated buffer. Due to this the buffer does not actually - extend itself and hence a subsequent write may overwrite stuff on the - stack. - - The second problem is more subtle - the buffer growth on the stack is - discontinuous due to block scope local variables. Combine that with - the fact that unlike realloc, extend_alloca does not copy over old - content and you have a situation where the buffer just has garbage in - the space where it should have had data. - - This could have been fixed by adding code to copy over old data - whenever we call extend_alloca, but it seems unnecessarily - complicated. This code is not exactly a performance hotspot (it's - called when there is a cache miss, so factors like network lookup or - file reads will dominate over memory allocation/reallocation), so this - premature optimization is unnecessary. - - Thanks Brad Hubbard for his help with debugging - the problem. - -diff -pruN glibc-2.12-2-gc4ccff1/nscd/netgroupcache.c glibc-2.12-2-gc4ccff1.patched/nscd/netgroupcache.c ---- glibc-2.12-2-gc4ccff1/nscd/netgroupcache.c 2014-04-09 12:13:58.618582111 +0530 -+++ glibc-2.12-2-gc4ccff1.patched/nscd/netgroupcache.c 2014-04-09 12:07:21.486598665 +0530 -@@ -93,7 +93,6 @@ addgetnetgrentX (struct database_dyn *db - size_t buffilled = sizeof (*dataset); - char *buffer = NULL; - size_t nentries = 0; -- bool use_malloc = false; - size_t group_len = strlen (key) + 1; - union - { -@@ -138,7 +137,7 @@ addgetnetgrentX (struct database_dyn *db - } - - memset (&data, '\0', sizeof (data)); -- buffer = alloca (buflen); -+ buffer = xmalloc (buflen); - first_needed.elem.next = &first_needed.elem; - memcpy (first_needed.elem.name, key, group_len); - data.needed_groups = &first_needed.elem; -@@ -218,21 +217,24 @@ addgetnetgrentX (struct database_dyn *db - - if (buflen - req->key_len - bufused < needed) - { -- size_t newsize = MAX (2 * buflen, -- buflen + 2 * needed); -- if (use_malloc || newsize > 1024 * 1024) -- { -- buflen = newsize; -- char *newbuf = xrealloc (use_malloc -- ? buffer -- : NULL, -- buflen); -- -- buffer = newbuf; -- use_malloc = true; -- } -- else -- extend_alloca (buffer, buflen, newsize); -+ buflen += MAX (buflen, 2 * needed); -+ /* Save offset in the old buffer. We don't -+ bother with the NULL check here since -+ we'll do that later anyway. */ -+ size_t nhostdiff = nhost - buffer; -+ size_t nuserdiff = nuser - buffer; -+ size_t ndomaindiff = ndomain - buffer; -+ -+ char *newbuf = xrealloc (buffer, buflen); -+ /* Fix up the triplet pointers into the new -+ buffer. */ -+ nhost = (nhost ? newbuf + nhostdiff -+ : NULL); -+ nuser = (nuser ? newbuf + nuserdiff -+ : NULL); -+ ndomain = (ndomain ? newbuf + ndomaindiff -+ : NULL); -+ buffer = newbuf; - } - - nhost = memcpy (buffer + bufused, -@@ -299,18 +301,8 @@ addgetnetgrentX (struct database_dyn *db - } - else if (status == NSS_STATUS_UNAVAIL && e == ERANGE) - { -- size_t newsize = 2 * buflen; -- if (use_malloc || newsize > 1024 * 1024) -- { -- buflen = newsize; -- char *newbuf = xrealloc (use_malloc -- ? buffer : NULL, buflen); -- -- buffer = newbuf; -- use_malloc = true; -- } -- else -- extend_alloca (buffer, buflen, newsize); -+ buflen *= 2; -+ buffer = xrealloc (buffer, buflen); - } - } - -@@ -446,8 +438,7 @@ addgetnetgrentX (struct database_dyn *db - } - - out: -- if (use_malloc) -- free (buffer); -+ free (buffer); - - *resultp = dataset; - diff --git a/src/patches/glibc/glibc-rh1044628.patch b/src/patches/glibc/glibc-rh1044628.patch deleted file mode 100644 index e5ff3ca1b2..0000000000 --- a/src/patches/glibc/glibc-rh1044628.patch +++ /dev/null @@ -1,28 +0,0 @@ -commit cf26a0cb6a0bbaca46a01ddad6662e5e5159a32a -Author: Siddhesh Poyarekar -Date: Thu May 15 12:33:11 2014 +0530 - - Return EAI_AGAIN for AF_UNSPEC when herrno is TRY_AGAIN (BZ #16849) - - getaddrinfo correctly returns EAI_AGAIN for AF_INET and AF_INET6 - queries. For AF_UNSPEC however, an older change - (a682a1bf553b1efe4dbb03207fece5b719cec482) broke the check and due to - that the returned error was EAI_NONAME. - - This patch fixes the check so that a non-authoritative not-found is - returned as EAI_AGAIN to the user instead of EAI_NONAME. - -diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c -index 6258330..8f392b9 100644 ---- a/sysdeps/posix/getaddrinfo.c -+++ b/sysdeps/posix/getaddrinfo.c -@@ -867,8 +867,7 @@ gaih_inet (const char *name, const struct gaih_service *service, - if (status != NSS_STATUS_TRYAGAIN - || rc != ERANGE || herrno != NETDB_INTERNAL) - { -- if (status == NSS_STATUS_TRYAGAIN -- && herrno == TRY_AGAIN) -+ if (herrno == TRY_AGAIN) - no_data = EAI_AGAIN; - else - no_data = herrno == NO_DATA; diff --git a/src/patches/glibc/glibc-rh1053178.patch b/src/patches/glibc/glibc-rh1053178.patch deleted file mode 100644 index a662cfe46e..0000000000 --- a/src/patches/glibc/glibc-rh1053178.patch +++ /dev/null @@ -1,214 +0,0 @@ -# -# Based on the commit: -# -# commit 6c82a2f8d7c8e21e39237225c819f182ae438db3 -# Author: Carlos O'Donell -# Date: Fri Sep 6 01:02:30 2013 -0400 -# -# Coordinate IPv6 definitions for Linux and glibc -# -# This change synchronizes the glibc headers with the Linux kernel -# headers and arranges to coordinate the definition of structures -# already defined the Linux kernel UAPI headers. -# -# It is now safe to include glibc's netinet/in.h or Linux's linux/in6.h -# in any order in a userspace application and you will get the same -# ABI. The ABI is guaranteed by UAPI and glibc. -# -# 2013-09-05 Carlos O'Donell -# Cong Wang -# -# * sysdeps/unix/sysv/linux/bits/in.h -# [_UAPI_LINUX_IN6_H]: Define __USE_KERNEL_IPV6_DEFS. -# * inet/netinet/in.h: Move in_addr definition and bits/in.h inclusion -# before __USE_KERNEL_IPV6_DEFS uses. -# * inet/netinet/in.h [!__USE_KERNEL_IPV6_DEFS]: Define IPPROTO_MH, and -# IPPROTO_BEETPH. -# [__USE_KERNEL_IPV6_DEFS]: Don't define any of IPPROTO_*, in6_addr, -# sockaddr_in6, or ipv6_mreq. -# -diff -urN glibc-2.12-2-gc4ccff1/inet/netinet/in.h glibc-2.12-2-gc4ccff1.mod/inet/netinet/in.h ---- glibc-2.12-2-gc4ccff1/inet/netinet/in.h 2010-05-04 07:27:23.000000000 -0400 -+++ glibc-2.12-2-gc4ccff1.mod/inet/netinet/in.h 2015-02-18 13:06:56.436802873 -0500 -@@ -28,13 +28,21 @@ - - __BEGIN_DECLS - -+/* Internet address. */ -+typedef uint32_t in_addr_t; -+struct in_addr -+ { -+ in_addr_t s_addr; -+ }; -+ -+/* Get system-specific definitions. */ -+#include -+ - /* Standard well-defined IP protocols. */ - enum - { - IPPROTO_IP = 0, /* Dummy protocol for TCP. */ - #define IPPROTO_IP IPPROTO_IP -- IPPROTO_HOPOPTS = 0, /* IPv6 Hop-by-Hop options. */ --#define IPPROTO_HOPOPTS IPPROTO_HOPOPTS - IPPROTO_ICMP = 1, /* Internet Control Message Protocol. */ - #define IPPROTO_ICMP IPPROTO_ICMP - IPPROTO_IGMP = 2, /* Internet Group Management Protocol. */ -@@ -57,10 +65,6 @@ - #define IPPROTO_DCCP IPPROTO_DCCP - IPPROTO_IPV6 = 41, /* IPv6 header. */ - #define IPPROTO_IPV6 IPPROTO_IPV6 -- IPPROTO_ROUTING = 43, /* IPv6 routing header. */ --#define IPPROTO_ROUTING IPPROTO_ROUTING -- IPPROTO_FRAGMENT = 44, /* IPv6 fragmentation header. */ --#define IPPROTO_FRAGMENT IPPROTO_FRAGMENT - IPPROTO_RSVP = 46, /* Reservation Protocol. */ - #define IPPROTO_RSVP IPPROTO_RSVP - IPPROTO_GRE = 47, /* General Routing Encapsulation. */ -@@ -69,14 +73,10 @@ - #define IPPROTO_ESP IPPROTO_ESP - IPPROTO_AH = 51, /* authentication header. */ - #define IPPROTO_AH IPPROTO_AH -- IPPROTO_ICMPV6 = 58, /* ICMPv6. */ --#define IPPROTO_ICMPV6 IPPROTO_ICMPV6 -- IPPROTO_NONE = 59, /* IPv6 no next header. */ --#define IPPROTO_NONE IPPROTO_NONE -- IPPROTO_DSTOPTS = 60, /* IPv6 destination options. */ --#define IPPROTO_DSTOPTS IPPROTO_DSTOPTS - IPPROTO_MTP = 92, /* Multicast Transport Protocol. */ - #define IPPROTO_MTP IPPROTO_MTP -+ IPPROTO_BEETPH = 94, /* IP option pseudo header for BEET. */ -+#define IPPROTO_BEETPH IPPROTO_BEETPH - IPPROTO_ENCAP = 98, /* Encapsulation Header. */ - #define IPPROTO_ENCAP IPPROTO_ENCAP - IPPROTO_PIM = 103, /* Protocol Independent Multicast. */ -@@ -92,6 +92,28 @@ - IPPROTO_MAX - }; - -+/* If __USER_KERNEL_IPV6_DEFS is defined then the user has included the kernel -+ network headers first and we should use those ABI-identical definitions -+ instead of our own. */ -+#ifndef __USE_KERNEL_IPV6_DEFS -+enum -+ { -+ IPPROTO_HOPOPTS = 0, /* IPv6 Hop-by-Hop options. */ -+#define IPPROTO_HOPOPTS IPPROTO_HOPOPTS -+ IPPROTO_ROUTING = 43, /* IPv6 routing header. */ -+#define IPPROTO_ROUTING IPPROTO_ROUTING -+ IPPROTO_FRAGMENT = 44, /* IPv6 fragmentation header. */ -+#define IPPROTO_FRAGMENT IPPROTO_FRAGMENT -+ IPPROTO_ICMPV6 = 58, /* ICMPv6. */ -+#define IPPROTO_ICMPV6 IPPROTO_ICMPV6 -+ IPPROTO_NONE = 59, /* IPv6 no next header. */ -+#define IPPROTO_NONE IPPROTO_NONE -+ IPPROTO_DSTOPTS = 60, /* IPv6 destination options. */ -+#define IPPROTO_DSTOPTS IPPROTO_DSTOPTS -+ IPPROTO_MH = 135, /* IPv6 mobility header. */ -+#define IPPROTO_MH IPPROTO_MH -+ }; -+#endif /* !__USE_KERNEL_IPV6_DEFS */ - - /* Type to represent a port. */ - typedef uint16_t in_port_t; -@@ -136,15 +158,6 @@ - IPPORT_USERRESERVED = 5000 - }; - -- --/* Internet address. */ --typedef uint32_t in_addr_t; --struct in_addr -- { -- in_addr_t s_addr; -- }; -- -- - /* Definitions of the bits in an Internet address integer. - - On subnets, host and network parts are found according to -@@ -193,7 +206,7 @@ - #define INADDR_ALLRTRS_GROUP ((in_addr_t) 0xe0000002) /* 224.0.0.2 */ - #define INADDR_MAX_LOCAL_GROUP ((in_addr_t) 0xe00000ff) /* 224.0.0.255 */ - -- -+#ifndef __USE_KERNEL_IPV6_DEFS - /* IPv6 address */ - struct in6_addr - { -@@ -211,6 +224,7 @@ - # define s6_addr32 __in6_u.__u6_addr32 - #endif - }; -+#endif /* !__USE_KERNEL_IPV6_DEFS */ - - extern const struct in6_addr in6addr_any; /* :: */ - extern const struct in6_addr in6addr_loopback; /* ::1 */ -@@ -235,6 +249,7 @@ - sizeof (struct in_addr)]; - }; - -+#ifndef __USE_KERNEL_IPV6_DEFS - /* Ditto, for IPv6. */ - struct sockaddr_in6 - { -@@ -244,7 +259,7 @@ - struct in6_addr sin6_addr; /* IPv6 address */ - uint32_t sin6_scope_id; /* IPv6 scope-id */ - }; -- -+#endif /* !__USE_KERNEL_IPV6_DEFS */ - - #if defined __USE_MISC || defined __USE_GNU - /* IPv4 multicast request. */ -@@ -270,7 +285,7 @@ - }; - #endif - -- -+#ifndef __USE_KERNEL_IPV6_DEFS - /* Likewise, for IPv6. */ - struct ipv6_mreq - { -@@ -280,7 +295,7 @@ - /* local interface */ - unsigned int ipv6mr_interface; - }; -- -+#endif /* !__USE_KERNEL_IPV6_DEFS */ - - #if defined __USE_MISC || defined __USE_GNU - /* Multicast group request. */ -@@ -351,10 +366,6 @@ - * sizeof (struct sockaddr_storage))) - #endif - -- --/* Get system-specific definitions. */ --#include -- - /* Functions to convert between host and network byte order. - - Please note that these functions normally take `unsigned long int' or -diff -urN glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/bits/in.h glibc-2.12-2-gc4ccff1.mod/sysdeps/unix/sysv/linux/bits/in.h ---- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/bits/in.h 2015-02-18 13:04:15.547734092 -0500 -+++ glibc-2.12-2-gc4ccff1.mod/sysdeps/unix/sysv/linux/bits/in.h 2015-02-18 13:06:56.436802873 -0500 -@@ -22,6 +22,18 @@ - # error "Never use directly; include instead." - #endif - -+/* If the application has already included linux/in6.h from a linux-based -+ kernel then we will not define the IPv6 IPPROTO_* defines, in6_addr (nor the -+ defines), sockaddr_in6, or ipv6_mreq. The ABI used by the linux-kernel and -+ glibc match exactly. Neither the linux kernel nor glibc should break this -+ ABI without coordination. */ -+#ifdef _UAPI_LINUX_IN6_H -+/* This is not quite the same API since the kernel always defines s6_addr16 and -+ s6_addr32. This is not a violation of POSIX since POSIX says "at least the -+ following member" and that holds true. */ -+# define __USE_KERNEL_IPV6_DEFS -+#endif -+ - /* Options for use with `getsockopt' and `setsockopt' at the IP level. - The first word in the comment at the right is the data type used; - "bool" means a boolean value stored in an `int'. */ diff --git a/src/patches/glibc/glibc-rh1054846.patch b/src/patches/glibc/glibc-rh1054846.patch deleted file mode 100644 index 50b41096fe..0000000000 --- a/src/patches/glibc/glibc-rh1054846.patch +++ /dev/null @@ -1,57 +0,0 @@ -commit fbd6b5a4052316f7eb03c4617eebfaafc59dcc06 -Author: Siddhesh Poyarekar -Date: Thu Mar 27 07:15:22 2014 +0530 - - Fix nscd lookup for innetgr when netgroup has wildcards (BZ #16758) - - nscd works correctly when the request in innetgr is a wildcard, - i.e. when one or more of host, user or domain parameters is NULL. - However, it does not work when the the triplet in the netgroup - definition has a wildcard. This is easy to reproduce for a triplet - defined as follows: - - foonet (,foo,) - - Here, an innetgr call that looks like this: - - innetgr ("foonet", "foohost", "foo", NULL); - - should succeed and so should: - - innetgr ("foonet", NULL, "foo", "foodomain"); - - It does succeed with nscd disabled, but not with nscd enabled. This - fix adds this additional check for all three parts of the triplet so - that it gives the correct result. - - [BZ #16758] - * nscd/netgroupcache.c (addinnetgrX): Succeed if triplet has - blank values. - -diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c -index 5ba1e1f..5d15aa4 100644 ---- a/nscd/netgroupcache.c -+++ b/nscd/netgroupcache.c -@@ -560,15 +560,19 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req, - { - bool success = true; - -- if (host != NULL) -+ /* For the host, user and domain in each triplet, we assume success -+ if the value is blank because that is how the wildcard entry to -+ match anything is stored in the netgroup cache. */ -+ if (host != NULL && *triplets != '\0') - success = strcmp (host, triplets) == 0; - triplets = (const char *) rawmemchr (triplets, '\0') + 1; - -- if (success && user != NULL) -+ if (success && user != NULL && *triplets != '\0') - success = strcmp (user, triplets) == 0; - triplets = (const char *) rawmemchr (triplets, '\0') + 1; - -- if (success && (domain == NULL || strcmp (domain, triplets) == 0)) -+ if (success && (domain == NULL || *triplets == '\0' -+ || strcmp (domain, triplets) == 0)) - { - dataset->resp.result = 1; - break; diff --git a/src/patches/glibc/glibc-rh1066724.patch b/src/patches/glibc/glibc-rh1066724.patch deleted file mode 100644 index a03f1d10a3..0000000000 --- a/src/patches/glibc/glibc-rh1066724.patch +++ /dev/null @@ -1,620 +0,0 @@ -diff --git a/malloc/Makefile b/malloc/Makefile -index e7ec1ab..5330a3b 100644 ---- a/malloc/Makefile -+++ b/malloc/Makefile -@@ -27,7 +27,8 @@ all: - dist-headers := malloc.h - headers := $(dist-headers) obstack.h mcheck.h - tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \ -- tst-mallocstate tst-mcheck tst-mallocfork tst-trim1 -+ tst-mallocstate tst-mcheck tst-mallocfork tst-trim1 \ -+ tst-malloc-backtrace - test-srcs = tst-mtrace - - distribute = thread-m.h mtrace.pl mcheck-init.c stackinfo.h memusage.h \ -@@ -49,6 +50,9 @@ extra-libs-others = $(extra-libs) - libmemusage-routines = memusage - libmemusage-inhibit-o = $(filter-out .os,$(object-suffixes)) - -+$(objpfx)tst-malloc-backtrace: $(common-objpfx)nptl/libpthread.so \ -+ $(common-objpfx)nptl/libpthread_nonshared.a -+ - # These should be removed by `make clean'. - extra-objs = mcheck-init.o libmcheck.a - -diff --git a/malloc/arena.c b/malloc/arena.c -index 18bea2b..5180516 100644 ---- a/malloc/arena.c -+++ b/malloc/arena.c -@@ -123,7 +123,7 @@ int __malloc_initialized = -1; - - #ifdef PER_THREAD - #define arena_lock(ptr, size) do { \ -- if(ptr) \ -+ if(ptr && !arena_is_corrupt (ptr)) \ - (void)mutex_lock(&ptr->mutex); \ - else \ - ptr = arena_get2(ptr, (size), false); \ -@@ -1011,7 +1011,21 @@ reused_arena (bool retrying) - if (retrying && result == &main_arena) - result = result->next; - -- /* No arena available. Wait for the next in line. */ -+ /* Make sure that the arena we get is not corrupted. */ -+ mstate begin = result; -+ while (arena_is_corrupt (result)) -+ { -+ result = result->next; -+ if (result == begin) -+ break; -+ } -+ -+ /* We could not find any arena that was either not corrupted or not the one -+ we wanted to avoid. */ -+ if (result == begin) -+ return NULL; -+ -+ /* No arena available without contention. Wait for the next in line. */ - (void)mutex_lock(&result->mutex); - - out: -diff --git a/malloc/hooks.c b/malloc/hooks.c -index cc83d21..38d2542 100644 ---- a/malloc/hooks.c -+++ b/malloc/hooks.c -@@ -220,7 +220,8 @@ top_check() - return 0; - - mutex_unlock(&main_arena); -- malloc_printerr (check_action, "malloc: top chunk is corrupt", t); -+ malloc_printerr (check_action, "malloc: top chunk is corrupt", t, -+ &main_arena); - mutex_lock(&main_arena); - - /* Try to set up a new top chunk. */ -@@ -283,7 +284,7 @@ free_check(mem, caller) Void_t* mem; const Void_t *caller; - if(!p) { - (void)mutex_unlock(&main_arena.mutex); - -- malloc_printerr(check_action, "free(): invalid pointer", mem); -+ malloc_printerr(check_action, "free(): invalid pointer", mem, &main_arena); - return; - } - #if HAVE_MMAP -@@ -329,7 +330,8 @@ realloc_check(oldmem, bytes, caller) - const mchunkptr oldp = mem2chunk_check(oldmem, &magic_p); - (void)mutex_unlock(&main_arena.mutex); - if(!oldp) { -- malloc_printerr(check_action, "realloc(): invalid pointer", oldmem); -+ malloc_printerr(check_action, "realloc(): invalid pointer", oldmem, -+ &main_arena); - return malloc_check(bytes, NULL); - } - const INTERNAL_SIZE_T oldsize = chunksize(oldp); -diff --git a/malloc/malloc.c b/malloc/malloc.c -index 597c7b0..20ac534 100644 ---- a/malloc/malloc.c -+++ b/malloc/malloc.c -@@ -1633,7 +1633,7 @@ static size_t mUSABLe(Void_t*); - static void mSTATs(void); - static int mALLOPt(int, int); - static struct mallinfo mALLINFo(mstate); --static void malloc_printerr(int action, const char *str, void *ptr); -+static void malloc_printerr(int action, const char *str, void *ptr, mstate av); - - static Void_t* internal_function mem2mem_check(Void_t *p, size_t sz); - static int internal_function top_check(void); -@@ -2114,7 +2114,8 @@ typedef struct malloc_chunk* mbinptr; - BK = P->bk; \ - if (__builtin_expect (FD->bk != P || BK->fd != P, 0)) { \ - mutex_unlock(&(AV)->mutex); \ -- malloc_printerr (check_action, "corrupted double-linked list", P); \ -+ malloc_printerr (check_action, "corrupted double-linked list", P, \ -+ AV); \ - mutex_lock(&(AV)->mutex); \ - } else { \ - FD->bk = BK; \ -@@ -2344,6 +2345,15 @@ typedef struct malloc_chunk* mfastbinptr; - #define set_noncontiguous(M) ((M)->flags |= NONCONTIGUOUS_BIT) - #define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT) - -+/* ARENA_CORRUPTION_BIT is set if a memory corruption was detected on the -+ arena. Such an arena is no longer used to allocate chunks. Chunks -+ allocated in that arena before detecting corruption are not freed. */ -+ -+#define ARENA_CORRUPTION_BIT (4U) -+ -+#define arena_is_corrupt(A) (((A)->flags & ARENA_CORRUPTION_BIT)) -+#define set_arena_corrupt(A) ((A)->flags |= ARENA_CORRUPTION_BIT) -+ - /* - Set value of max_fast. - Use impossibly small value if 0. -@@ -3002,8 +3012,9 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av; - rather than expanding top. - */ - -- if ((unsigned long)(nb) >= (unsigned long)(mp_.mmap_threshold) && -- (mp_.n_mmaps < mp_.n_mmaps_max)) { -+ if (av == NULL -+ || ((unsigned long)(nb) >= (unsigned long)(mp_.mmap_threshold) && -+ (mp_.n_mmaps < mp_.n_mmaps_max))) { - - char* mm; /* return value from mmap call*/ - -@@ -3079,6 +3090,10 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av; - } - #endif - -+ /* There are no usable arenas and mmap also failed. */ -+ if (av == NULL) -+ return 0; -+ - /* Record incoming configuration of top */ - - old_top = av->top; -@@ -3260,7 +3275,7 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av; - else if (contiguous(av) && old_size && brk < old_end) { - /* Oops! Someone else killed our space.. Can't touch anything. */ - mutex_unlock(&av->mutex); -- malloc_printerr (3, "break adjusted to free malloc space", brk); -+ malloc_printerr (3, "break adjusted to free malloc space", brk, av); - mutex_lock(&av->mutex); - } - -@@ -3542,7 +3557,7 @@ munmap_chunk(p) mchunkptr p; - if (__builtin_expect (((block | total_size) & (mp_.pagesize - 1)) != 0, 0)) - { - malloc_printerr (check_action, "munmap_chunk(): invalid pointer", -- chunk2mem (p)); -+ chunk2mem (p), NULL); - return; - } - -@@ -3625,65 +3640,31 @@ public_mALLOc(size_t bytes) - if (__builtin_expect (hook != NULL, 0)) - return (*hook)(bytes, RETURN_ADDRESS (0)); - -- arena_lookup(ar_ptr); --#if 0 -- // XXX We need double-word CAS and fastbins must be extended to also -- // XXX hold a generation counter for each entry. -- if (ar_ptr) { -- INTERNAL_SIZE_T nb; /* normalized request size */ -- checked_request2size(bytes, nb); -- if (nb <= get_max_fast ()) { -- long int idx = fastbin_index(nb); -- mfastbinptr* fb = &fastbin (ar_ptr, idx); -- mchunkptr pp = *fb; -- mchunkptr v; -- do -- { -- v = pp; -- if (v == NULL) -- break; -- } -- while ((pp = catomic_compare_and_exchange_val_acq (fb, v->fd, v)) != v); -- if (v != 0) { -- if (__builtin_expect (fastbin_index (chunksize (v)) != idx, 0)) -- malloc_printerr (check_action, "malloc(): memory corruption (fast)", -- chunk2mem (v)); -- check_remalloced_chunk(ar_ptr, v, nb); -- void *p = chunk2mem(v); -- if (__builtin_expect (perturb_byte, 0)) -- alloc_perturb (p, bytes); -- return p; -- } -- } -- } --#endif -+ arena_get(ar_ptr, bytes); - -- arena_lock(ar_ptr, bytes); -- if(!ar_ptr) -- return 0; - victim = _int_malloc(ar_ptr, bytes); -- if(!victim) { -+ if(!victim && ar_ptr != NULL) { - /* Maybe the failure is due to running out of mmapped areas. */ - if(ar_ptr != &main_arena) { - (void)mutex_unlock(&ar_ptr->mutex); - ar_ptr = &main_arena; - (void)mutex_lock(&ar_ptr->mutex); - victim = _int_malloc(ar_ptr, bytes); -- (void)mutex_unlock(&ar_ptr->mutex); - } else { - #if USE_ARENAS - /* ... or sbrk() has failed and there is still a chance to mmap() */ - mstate prev = ar_ptr->next ? ar_ptr : 0; - (void)mutex_unlock(&ar_ptr->mutex); - ar_ptr = arena_get2(prev, bytes, true); -- if(ar_ptr) { -+ if(ar_ptr) - victim = _int_malloc(ar_ptr, bytes); -- (void)mutex_unlock(&ar_ptr->mutex); -- } - #endif - } -- } else -+ } -+ -+ if (ar_ptr != NULL) - (void)mutex_unlock(&ar_ptr->mutex); -+ - assert(!victim || chunk_is_mmapped(mem2chunk(victim)) || - ar_ptr == arena_for_chunk(mem2chunk(victim))); - return victim; -@@ -3773,6 +3754,11 @@ public_rEALLOc(Void_t* oldmem, size_t bytes) - /* its size */ - const INTERNAL_SIZE_T oldsize = chunksize(oldp); - -+ if (chunk_is_mmapped (oldp)) -+ ar_ptr = NULL; -+ else -+ ar_ptr = arena_for_chunk (oldp); -+ - /* Little security check which won't hurt performance: the - allocator never wrapps around at the end of the address space. - Therefore we can exclude some size values which might appear -@@ -3780,7 +3766,8 @@ public_rEALLOc(Void_t* oldmem, size_t bytes) - if (__builtin_expect ((uintptr_t) oldp > (uintptr_t) -oldsize, 0) - || __builtin_expect (misaligned_chunk (oldp), 0)) - { -- malloc_printerr (check_action, "realloc(): invalid pointer", oldmem); -+ malloc_printerr (check_action, "realloc(): invalid pointer", oldmem, -+ ar_ptr); - return NULL; - } - -@@ -3806,7 +3793,6 @@ public_rEALLOc(Void_t* oldmem, size_t bytes) - } - #endif - -- ar_ptr = arena_for_chunk(oldp); - #if THREAD_STATS - if(!mutex_trylock(&ar_ptr->mutex)) - ++(ar_ptr->stat_lock_direct); -@@ -3887,31 +3873,29 @@ public_mEMALIGn(size_t alignment, size_t bytes) - } - - arena_get(ar_ptr, bytes + alignment + MINSIZE); -- if(!ar_ptr) -- return 0; - p = _int_memalign(ar_ptr, alignment, bytes); -- if(!p) { -+ if(!p && ar_ptr != NULL) { - /* Maybe the failure is due to running out of mmapped areas. */ - if(ar_ptr != &main_arena) { - (void)mutex_unlock(&ar_ptr->mutex); - ar_ptr = &main_arena; - (void)mutex_lock(&ar_ptr->mutex); - p = _int_memalign(ar_ptr, alignment, bytes); -- (void)mutex_unlock(&ar_ptr->mutex); - } else { - #if USE_ARENAS - /* ... or sbrk() has failed and there is still a chance to mmap() */ - mstate prev = ar_ptr->next ? ar_ptr : 0; - (void)mutex_unlock(&ar_ptr->mutex); - ar_ptr = arena_get2(prev, bytes, true); -- if(ar_ptr) { -+ if(ar_ptr) - p = _int_memalign(ar_ptr, alignment, bytes); -- (void)mutex_unlock(&ar_ptr->mutex); -- } - #endif - } -- } else -+ } -+ -+ if (ar_ptr != NULL) - (void)mutex_unlock(&ar_ptr->mutex); -+ - assert(!p || chunk_is_mmapped(mem2chunk(p)) || - ar_ptr == arena_for_chunk(mem2chunk(p))); - return p; -@@ -3945,31 +3929,29 @@ public_vALLOc(size_t bytes) - return (*hook)(pagesz, bytes, RETURN_ADDRESS (0)); - - arena_get(ar_ptr, bytes + pagesz + MINSIZE); -- if(!ar_ptr) -- return 0; - p = _int_valloc(ar_ptr, bytes); -- if(!p) { -+ if(!p && ar_ptr != NULL) { - /* Maybe the failure is due to running out of mmapped areas. */ - if(ar_ptr != &main_arena) { - (void)mutex_unlock(&ar_ptr->mutex); - ar_ptr = &main_arena; - (void)mutex_lock(&ar_ptr->mutex); - p = _int_memalign(ar_ptr, pagesz, bytes); -- (void)mutex_unlock(&ar_ptr->mutex); - } else { - #if USE_ARENAS - /* ... or sbrk() has failed and there is still a chance to mmap() */ - mstate prev = ar_ptr->next ? ar_ptr : 0; - (void)mutex_unlock(&ar_ptr->mutex); - ar_ptr = arena_get2(prev, bytes, true); -- if(ar_ptr) { -+ if(ar_ptr) - p = _int_memalign(ar_ptr, pagesz, bytes); -- (void)mutex_unlock(&ar_ptr->mutex); -- } - #endif - } -- } else -+ } -+ -+ if (ar_ptr != NULL) - (void)mutex_unlock(&ar_ptr->mutex); -+ - assert(!p || chunk_is_mmapped(mem2chunk(p)) || - ar_ptr == arena_for_chunk(mem2chunk(p))); - -@@ -4004,28 +3986,28 @@ public_pVALLOc(size_t bytes) - - arena_get(ar_ptr, bytes + 2*pagesz + MINSIZE); - p = _int_pvalloc(ar_ptr, bytes); -- if(!p) { -+ if(!p && ar_ptr != NULL) { - /* Maybe the failure is due to running out of mmapped areas. */ - if(ar_ptr != &main_arena) { - (void)mutex_unlock(&ar_ptr->mutex); - ar_ptr = &main_arena; - (void)mutex_lock(&ar_ptr->mutex); - p = _int_memalign(ar_ptr, pagesz, rounded_bytes); -- (void)mutex_unlock(&ar_ptr->mutex); - } else { - #if USE_ARENAS - /* ... or sbrk() has failed and there is still a chance to mmap() */ - mstate prev = ar_ptr->next ? ar_ptr : 0; - (void)mutex_unlock(&ar_ptr->mutex); - ar_ptr = arena_get2(prev, bytes + 2*pagesz + MINSIZE, true); -- if(ar_ptr) { -+ if(ar_ptr) - p = _int_memalign(ar_ptr, pagesz, rounded_bytes); -- (void)mutex_unlock(&ar_ptr->mutex); -- } - #endif - } -- } else -+ } -+ -+ if (ar_ptr != NULL) - (void)mutex_unlock(&ar_ptr->mutex); -+ - assert(!p || chunk_is_mmapped(mem2chunk(p)) || - ar_ptr == arena_for_chunk(mem2chunk(p))); - -@@ -4072,55 +4054,65 @@ public_cALLOc(size_t n, size_t elem_size) - sz = bytes; - - arena_get(av, sz); -- if(!av) -- return 0; - -- /* Check if we hand out the top chunk, in which case there may be no -- need to clear. */ -+ if (av) -+ { -+ /* Check if we hand out the top chunk, in which case there may be no -+ need to clear. */ - #if MORECORE_CLEARS -- oldtop = top(av); -- oldtopsize = chunksize(top(av)); -+ oldtop = top(av); -+ oldtopsize = chunksize(top(av)); - #if MORECORE_CLEARS < 2 -- /* Only newly allocated memory is guaranteed to be cleared. */ -- if (av == &main_arena && -- oldtopsize < mp_.sbrk_base + av->max_system_mem - (char *)oldtop) -- oldtopsize = (mp_.sbrk_base + av->max_system_mem - (char *)oldtop); -+ /* Only newly allocated memory is guaranteed to be cleared. */ -+ if (av == &main_arena && -+ oldtopsize < mp_.sbrk_base + av->max_system_mem - (char *)oldtop) -+ oldtopsize = (mp_.sbrk_base + av->max_system_mem - (char *)oldtop); - #endif -- if (av != &main_arena) -+ if (av != &main_arena) -+ { -+ heap_info *heap = heap_for_ptr (oldtop); -+ if (oldtopsize < (char *) heap + heap->mprotect_size - (char *) oldtop) -+ oldtopsize = (char *) heap + heap->mprotect_size - (char *) oldtop; -+ } -+#endif -+ } -+ else - { -- heap_info *heap = heap_for_ptr (oldtop); -- if (oldtopsize < (char *) heap + heap->mprotect_size - (char *) oldtop) -- oldtopsize = (char *) heap + heap->mprotect_size - (char *) oldtop; -+ /* No usable arenas. */ -+ oldtop = 0; -+ oldtopsize = 0; - } --#endif - mem = _int_malloc(av, sz); - -- - assert(!mem || chunk_is_mmapped(mem2chunk(mem)) || - av == arena_for_chunk(mem2chunk(mem))); - -- if (mem == 0) { -+ if (mem == 0 && av != NULL) { - /* Maybe the failure is due to running out of mmapped areas. */ - if(av != &main_arena) { - (void)mutex_unlock(&av->mutex); - (void)mutex_lock(&main_arena.mutex); - mem = _int_malloc(&main_arena, sz); -- (void)mutex_unlock(&main_arena.mutex); - } else { - #if USE_ARENAS - /* ... or sbrk() has failed and there is still a chance to mmap() */ - mstate prev = av->next ? av : 0; - (void)mutex_unlock(&av->mutex); - av = arena_get2(prev, sz, true); -- if(av) { -+ if(av) - mem = _int_malloc(av, sz); -- (void)mutex_unlock(&av->mutex); -- } - #endif - } - if (mem == 0) return 0; -- } else -+ } -+ -+ if (av != NULL) - (void)mutex_unlock(&av->mutex); -+ -+ /* Allocation failed even after a retry. */ -+ if (mem == 0) -+ return 0; -+ - p = mem2chunk(mem); - - /* Two optional cases in which clearing not necessary */ -@@ -4175,6 +4167,8 @@ public_cALLOc(size_t n, size_t elem_size) - } - - #ifndef _LIBC -+/* XXX These functions are not patched to detect arena corruption because they -+ are not built in glibc. */ - - Void_t** - public_iCALLOc(size_t n, size_t elem_size, Void_t** chunks) -@@ -4309,6 +4303,16 @@ _int_malloc(mstate av, size_t bytes) - - checked_request2size(bytes, nb); - -+ /* There are no usable arenas. Fall back to sysmalloc to get a chunk from -+ mmap. */ -+ if (__glibc_unlikely (av == NULL)) -+ { -+ void *p = sYSMALLOc (nb, av); -+ if (p != NULL) -+ alloc_perturb (p, bytes); -+ return p; -+ } -+ - /* - If the size qualifies as a fastbin, first check corresponding bin. - This code is safe to execute even if av is not yet initialized, so we -@@ -4337,7 +4341,7 @@ _int_malloc(mstate av, size_t bytes) - errstr = "malloc(): memory corruption (fast)"; - errout: - mutex_unlock(&av->mutex); -- malloc_printerr (check_action, errstr, chunk2mem (victim)); -+ malloc_printerr (check_action, errstr, chunk2mem (victim), av); - mutex_lock(&av->mutex); - return NULL; - } -@@ -4429,7 +4433,7 @@ _int_malloc(mstate av, size_t bytes) - { - void *p = chunk2mem(victim); - mutex_unlock(&av->mutex); -- malloc_printerr (check_action, "malloc(): memory corruption", p); -+ malloc_printerr (check_action, "malloc(): memory corruption", p, av); - mutex_lock(&av->mutex); - } - size = chunksize(victim); -@@ -4829,7 +4833,7 @@ _int_free(mstate av, mchunkptr p) - if (have_lock || locked) - (void)mutex_unlock(&av->mutex); - #endif -- malloc_printerr (check_action, errstr, chunk2mem(p)); -+ malloc_printerr (check_action, errstr, chunk2mem(p), av); - #ifdef ATOMIC_FASTBINS - if (have_lock) - mutex_lock(&av->mutex); -@@ -5281,7 +5285,7 @@ _int_realloc(mstate av, mchunkptr oldp, INTERNAL_SIZE_T oldsize, - errstr = "realloc(): invalid old size"; - errout: - mutex_unlock(&av->mutex); -- malloc_printerr (check_action, errstr, chunk2mem(oldp)); -+ malloc_printerr (check_action, errstr, chunk2mem(oldp), av); - mutex_lock(&av->mutex); - return NULL; - } -@@ -5881,6 +5885,10 @@ static int mTRIm(mstate av, size_t pad) - static int mTRIm(av, pad) mstate av; size_t pad; - #endif - { -+ /* Don't touch corrupt arenas. */ -+ if (arena_is_corrupt (av)) -+ return 0; -+ - /* Ensure initialization/consolidation */ - malloc_consolidate (av); - -@@ -6320,8 +6328,14 @@ int mALLOPt(param_number, value) int param_number; int value; - extern char **__libc_argv attribute_hidden; - - static void --malloc_printerr(int action, const char *str, void *ptr) -+malloc_printerr(int action, const char *str, void *ptr, mstate ar_ptr) - { -+ /* Avoid using this arena in future. We do not attempt to synchronize this -+ with anything else because we minimally want to ensure that __libc_message -+ gets its resources safely without stumbling on the current corruption. */ -+ if (ar_ptr) -+ set_arena_corrupt (ar_ptr); -+ - if ((action & 5) == 5) - __libc_message (action & 2, "%s\n", str); - else if (action & 1) -diff --git a/malloc/tst-malloc-backtrace.c b/malloc/tst-malloc-backtrace.c -new file mode 100644 -index 0000000..796a42f ---- /dev/null -+++ b/malloc/tst-malloc-backtrace.c -@@ -0,0 +1,50 @@ -+/* Verify that backtrace does not deadlock on itself on memory corruption. -+ Copyright (C) 2015 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+ -+#include -+ -+#define SIZE 4096 -+ -+/* Wrap free with a function to prevent gcc from optimizing it out. */ -+static void -+__attribute__((noinline)) -+call_free (void *ptr) -+{ -+ free (ptr); -+ *(size_t *)(ptr - sizeof (size_t)) = 1; -+} -+ -+int -+do_test (void) -+{ -+ void *ptr1 = malloc (SIZE); -+ void *ptr2 = malloc (SIZE); -+ -+ call_free ((void *) ptr1); -+ ptr1 = malloc (SIZE); -+ -+ /* Not reached. The return statement is to put ptr2 into use so that gcc -+ doesn't optimize out that malloc call. */ -+ return (ptr1 == ptr2); -+} -+ -+#define TEST_FUNCTION do_test () -+#define EXPECTED_SIGNAL SIGABRT -+ -+#include "../test-skeleton.c" diff --git a/src/patches/glibc/glibc-rh1074342.patch b/src/patches/glibc/glibc-rh1074342.patch deleted file mode 100644 index 121127e6e5..0000000000 --- a/src/patches/glibc/glibc-rh1074342.patch +++ /dev/null @@ -1,26 +0,0 @@ -commit c44496df2f090a56d3bf75df930592dac6bba46f -Author: Siddhesh Poyarekar -Date: Wed Mar 12 17:27:22 2014 +0530 - - Provide correct buffer length to netgroup queries in nscd (BZ #16695) - - The buffer to query netgroup entries is allocated sufficient space for - the netgroup entries and the key to be appended at the end, but it - sends in an incorrect available length to the NSS netgroup query - functions, resulting in overflow of the buffer in some special cases. - The fix here is to factor in the key length when sending the available - buffer and buffer length to the query functions. - -diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c -index 426d3c5..5ba1e1f 100644 ---- a/nscd/netgroupcache.c -+++ b/nscd/netgroupcache.c -@@ -202,7 +202,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - { - int e; - status = getfct.f (&data, buffer + buffilled, -- buflen - buffilled, &e); -+ buflen - buffilled - req->key_len, &e); - if (status == NSS_STATUS_RETURN - || status == NSS_STATUS_NOTFOUND) - /* This was either the last one for this group or the diff --git a/src/patches/glibc/glibc-rh1074353.patch b/src/patches/glibc/glibc-rh1074353.patch deleted file mode 100644 index c8aa8b0d62..0000000000 --- a/src/patches/glibc/glibc-rh1074353.patch +++ /dev/null @@ -1,398 +0,0 @@ -commit bc8f194c8c29e46e8ee4034f06e46988dfff38f7 -Author: Siddhesh Poyarekar -Date: Wed Apr 30 12:00:39 2014 +0530 - - Initialize all of datahead structure in nscd (BZ #16791) - - The datahead structure has an unused padding field that remains - uninitialized. Valgrind prints out a warning for it on querying a - netgroups entry. This is harmless, but is a potential data leak since - it would result in writing out an uninitialized byte to the cache - file. Besides, this happens only when there is a cache miss, so we're - not adding computation to any fast path. - -commit 1cdeb2372ddecac0dfe0c132a033e9590ffa07d2 -Author: Siddhesh Poyarekar -Date: Wed Apr 30 11:57:09 2014 +0530 - - Consolidate code to initialize nscd dataset header - - This patch consolidates the code to initialize the header of a dataset - into a single set of functions (one for positive and another for - negative datasets) primarily to reduce repetition of code. The - secondary reason is to simplify Patch 2/2 which fixes the problem of - an uninitialized byte in the header by initializing an unused field in - the structure and hence preventing a possible data leak into the cache - file. - -diff --git a/nscd/aicache.c b/nscd/aicache.c -index 98d40a1..d7966bd 100644 ---- a/nscd/aicache.c -+++ b/nscd/aicache.c -@@ -383,17 +383,12 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req, - cp = family; - } - -- /* Fill in the rest of the dataset. */ -- dataset->head.allocsize = total + req->key_len; -- dataset->head.recsize = total - offsetof (struct dataset, resp); -- dataset->head.notfound = false; -- dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1); -- dataset->head.usable = true; -- -- /* Compute the timeout time. */ -- dataset->head.ttl = ttl == INT32_MAX ? db->postimeout : ttl; -- timeout = dataset->head.timeout = time (NULL) + dataset->head.ttl; -+ timeout = datahead_init_pos (&dataset->head, total + req->key_len, -+ total - offsetof (struct dataset, resp), -+ he == NULL ? 0 : dh->nreloads + 1, -+ ttl == INT32_MAX ? db->postimeout : ttl); - -+ /* Fill in the rest of the dataset. */ - dataset->resp.version = NSCD_VERSION; - dataset->resp.found = 1; - dataset->resp.naddrs = naddrs; -@@ -528,15 +523,9 @@ next_nip: - else if ((dataset = mempool_alloc (db, (sizeof (struct dataset) - + req->key_len), 1)) != NULL) - { -- dataset->head.allocsize = sizeof (struct dataset) + req->key_len; -- dataset->head.recsize = total; -- dataset->head.notfound = true; -- dataset->head.nreloads = 0; -- dataset->head.usable = true; -- -- /* Compute the timeout time. */ -- timeout = dataset->head.timeout = time (NULL) + db->negtimeout; -- dataset->head.ttl = db->negtimeout; -+ timeout = datahead_init_neg (&dataset->head, -+ sizeof (struct dataset) + req->key_len, -+ total, db->negtimeout); - - /* This is the reply. */ - memcpy (&dataset->resp, ¬found, total); -diff --git a/nscd/grpcache.c b/nscd/grpcache.c -index b5a33eb..df59fa7 100644 ---- a/nscd/grpcache.c -+++ b/nscd/grpcache.c -@@ -128,14 +128,10 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req, - } - else if ((dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, 1)) != NULL) - { -- dataset->head.allocsize = sizeof (struct dataset) + req->key_len; -- dataset->head.recsize = total; -- dataset->head.notfound = true; -- dataset->head.nreloads = 0; -- dataset->head.usable = true; -- -- /* Compute the timeout time. */ -- timeout = dataset->head.timeout = t + db->negtimeout; -+ timeout = datahead_init_neg (&dataset->head, -+ (sizeof (struct dataset) -+ + req->key_len), total, -+ db->negtimeout); - - /* This is the reply. */ - memcpy (&dataset->resp, ¬found, total); -@@ -232,14 +228,10 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req, - dataset_temporary = true; - } - -- dataset->head.allocsize = total + n; -- dataset->head.recsize = total - offsetof (struct dataset, resp); -- dataset->head.notfound = false; -- dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1); -- dataset->head.usable = true; -- -- /* Compute the timeout time. */ -- timeout = dataset->head.timeout = t + db->postimeout; -+ timeout = datahead_init_pos (&dataset->head, total + n, -+ total - offsetof (struct dataset, resp), -+ he == NULL ? 0 : dh->nreloads + 1, -+ db->postimeout); - - dataset->resp.version = NSCD_VERSION; - dataset->resp.found = 1; -diff --git a/nscd/hstcache.c b/nscd/hstcache.c -index a79b67a..d4f1ad2 100644 ---- a/nscd/hstcache.c -+++ b/nscd/hstcache.c -@@ -152,15 +152,11 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req, - else if ((dataset = mempool_alloc (db, (sizeof (struct dataset) - + req->key_len), 1)) != NULL) - { -- dataset->head.allocsize = sizeof (struct dataset) + req->key_len; -- dataset->head.recsize = total; -- dataset->head.notfound = true; -- dataset->head.nreloads = 0; -- dataset->head.usable = true; -- -- /* Compute the timeout time. */ -- dataset->head.ttl = ttl == INT32_MAX ? db->negtimeout : ttl; -- timeout = dataset->head.timeout = t + dataset->head.ttl; -+ timeout = datahead_init_neg (&dataset->head, -+ (sizeof (struct dataset) -+ + req->key_len), total, -+ (ttl == INT32_MAX -+ ? db->negtimeout : ttl)); - - /* This is the reply. */ - memcpy (&dataset->resp, resp, total); -@@ -257,15 +253,10 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req, - alloca_used = true; - } - -- dataset->head.allocsize = total + req->key_len; -- dataset->head.recsize = total - offsetof (struct dataset, resp); -- dataset->head.notfound = false; -- dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1); -- dataset->head.usable = true; -- -- /* Compute the timeout time. */ -- dataset->head.ttl = ttl == INT32_MAX ? db->postimeout : ttl; -- timeout = dataset->head.timeout = t + dataset->head.ttl; -+ timeout = datahead_init_pos (&dataset->head, total + req->key_len, -+ total - offsetof (struct dataset, resp), -+ he == NULL ? 0 : dh->nreloads + 1, -+ ttl == INT32_MAX ? db->postimeout : ttl); - - dataset->resp.version = NSCD_VERSION; - dataset->resp.found = 1; -diff --git a/nscd/initgrcache.c b/nscd/initgrcache.c -index 1bf9f0d..361319f 100644 ---- a/nscd/initgrcache.c -+++ b/nscd/initgrcache.c -@@ -213,14 +213,10 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req, - else if ((dataset = mempool_alloc (db, (sizeof (struct dataset) - + req->key_len), 1)) != NULL) - { -- dataset->head.allocsize = sizeof (struct dataset) + req->key_len; -- dataset->head.recsize = total; -- dataset->head.notfound = true; -- dataset->head.nreloads = 0; -- dataset->head.usable = true; -- -- /* Compute the timeout time. */ -- timeout = dataset->head.timeout = time (NULL) + db->negtimeout; -+ timeout = datahead_init_neg (&dataset->head, -+ (sizeof (struct dataset) -+ + req->key_len), total, -+ db->negtimeout); - - /* This is the reply. */ - memcpy (&dataset->resp, ¬found, total); -@@ -276,14 +272,10 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req, - alloca_used = true; - } - -- dataset->head.allocsize = total + req->key_len; -- dataset->head.recsize = total - offsetof (struct dataset, resp); -- dataset->head.notfound = false; -- dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1); -- dataset->head.usable = true; -- -- /* Compute the timeout time. */ -- timeout = dataset->head.timeout = time (NULL) + db->postimeout; -+ timeout = datahead_init_pos (&dataset->head, total + req->key_len, -+ total - offsetof (struct dataset, resp), -+ he == NULL ? 0 : dh->nreloads + 1, -+ db->postimeout); - - dataset->resp.version = NSCD_VERSION; - dataset->resp.found = 1; -diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c -index 820d823..b3d40e9 100644 ---- a/nscd/netgroupcache.c -+++ b/nscd/netgroupcache.c -@@ -90,15 +90,9 @@ do_notfound (struct database_dyn *db, int fd, request_header *req, - /* If we cannot permanently store the result, so be it. */ - if (dataset != NULL) - { -- dataset->head.allocsize = sizeof (struct dataset) + req->key_len; -- dataset->head.recsize = total; -- dataset->head.notfound = true; -- dataset->head.nreloads = 0; -- dataset->head.usable = true; -- -- /* Compute the timeout time. */ -- timeout = dataset->head.timeout = time (NULL) + db->negtimeout; -- dataset->head.ttl = db->negtimeout; -+ timeout = datahead_init_neg (&dataset->head, -+ sizeof (struct dataset) + req->key_len, -+ total, db->negtimeout); - - /* This is the reply. */ - memcpy (&dataset->resp, ¬found, total); -@@ -359,13 +353,10 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - - /* Fill in the dataset. */ - dataset = (struct dataset *) buffer; -- dataset->head.allocsize = total + req->key_len; -- dataset->head.recsize = total - offsetof (struct dataset, resp); -- dataset->head.notfound = false; -- dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1); -- dataset->head.usable = true; -- dataset->head.ttl = db->postimeout; -- timeout = dataset->head.timeout = time (NULL) + dataset->head.ttl; -+ timeout = datahead_init_pos (&dataset->head, total + req->key_len, -+ total - offsetof (struct dataset, resp), -+ he == NULL ? 0 : dh->nreloads + 1, -+ db->postimeout); - - dataset->resp.version = NSCD_VERSION; - dataset->resp.found = 1; -@@ -541,12 +532,12 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req, - dataset = &dataset_mem; - } - -- dataset->head.allocsize = sizeof (*dataset) + req->key_len; -- dataset->head.recsize = sizeof (innetgroup_response_header); -+ datahead_init_pos (&dataset->head, sizeof (*dataset) + req->key_len, -+ sizeof (innetgroup_response_header), -+ he == NULL ? 0 : dh->nreloads + 1, result->head.ttl); -+ /* Set the notfound status and timeout based on the result from -+ getnetgrent. */ - dataset->head.notfound = result->head.notfound; -- dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1); -- dataset->head.usable = true; -- dataset->head.ttl = result->head.ttl; - dataset->head.timeout = timeout; - - dataset->resp.version = NSCD_VERSION; -diff --git a/nscd/nscd-client.h b/nscd/nscd-client.h -index 98f77e7..ee16df6 100644 ---- a/nscd/nscd-client.h -+++ b/nscd/nscd-client.h -@@ -236,6 +236,48 @@ struct datahead - } data[0]; - }; - -+static inline time_t -+datahead_init_common (struct datahead *head, nscd_ssize_t allocsize, -+ nscd_ssize_t recsize, uint32_t ttl) -+{ -+ /* Initialize so that we don't write out junk in uninitialized data to the -+ cache. */ -+ memset (head, 0, sizeof (*head)); -+ -+ head->allocsize = allocsize; -+ head->recsize = recsize; -+ head->usable = true; -+ -+ head->ttl = ttl; -+ -+ /* Compute and return the timeout time. */ -+ return head->timeout = time (NULL) + ttl; -+} -+ -+static inline time_t -+datahead_init_pos (struct datahead *head, nscd_ssize_t allocsize, -+ nscd_ssize_t recsize, uint8_t nreloads, uint32_t ttl) -+{ -+ time_t ret = datahead_init_common (head, allocsize, recsize, ttl); -+ -+ head->notfound = false; -+ head->nreloads = nreloads; -+ -+ return ret; -+} -+ -+static inline time_t -+datahead_init_neg (struct datahead *head, nscd_ssize_t allocsize, -+ nscd_ssize_t recsize, uint32_t ttl) -+{ -+ time_t ret = datahead_init_common (head, allocsize, recsize, ttl); -+ -+ /* We don't need to touch nreloads here since it is set to our desired value -+ (0) when we clear the structure. */ -+ head->notfound = true; -+ -+ return ret; -+} - - /* Structure for one hash table entry. */ - struct hashentry -diff --git a/nscd/pwdcache.c b/nscd/pwdcache.c -index fa355c3..41c245b 100644 ---- a/nscd/pwdcache.c -+++ b/nscd/pwdcache.c -@@ -135,14 +135,10 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req, - else if ((dataset = mempool_alloc (db, (sizeof (struct dataset) - + req->key_len), 1)) != NULL) - { -- dataset->head.allocsize = sizeof (struct dataset) + req->key_len; -- dataset->head.recsize = total; -- dataset->head.notfound = true; -- dataset->head.nreloads = 0; -- dataset->head.usable = true; -- -- /* Compute the timeout time. */ -- timeout = dataset->head.timeout = t + db->negtimeout; -+ timeout = datahead_init_neg (&dataset->head, -+ (sizeof (struct dataset) -+ + req->key_len), total, -+ db->negtimeout); - - /* This is the reply. */ - memcpy (&dataset->resp, ¬found, total); -@@ -215,14 +211,10 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req, - alloca_used = true; - } - -- dataset->head.allocsize = total + n; -- dataset->head.recsize = total - offsetof (struct dataset, resp); -- dataset->head.notfound = false; -- dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1); -- dataset->head.usable = true; -- -- /* Compute the timeout time. */ -- timeout = dataset->head.timeout = t + db->postimeout; -+ timeout = datahead_init_pos (&dataset->head, total + n, -+ total - offsetof (struct dataset, resp), -+ he == NULL ? 0 : dh->nreloads + 1, -+ db->postimeout); - - dataset->resp.version = NSCD_VERSION; - dataset->resp.found = 1; -diff --git a/nscd/servicescache.c b/nscd/servicescache.c -index 12ce9b2..95bdcfe 100644 ---- a/nscd/servicescache.c -+++ b/nscd/servicescache.c -@@ -120,14 +120,10 @@ cache_addserv (struct database_dyn *db, int fd, request_header *req, - else if ((dataset = mempool_alloc (db, (sizeof (struct dataset) - + req->key_len), 1)) != NULL) - { -- dataset->head.allocsize = sizeof (struct dataset) + req->key_len; -- dataset->head.recsize = total; -- dataset->head.notfound = true; -- dataset->head.nreloads = 0; -- dataset->head.usable = true; -- -- /* Compute the timeout time. */ -- timeout = dataset->head.timeout = t + db->negtimeout; -+ timeout = datahead_init_neg (&dataset->head, -+ (sizeof (struct dataset) -+ + req->key_len), total, -+ db->negtimeout); - - /* This is the reply. */ - memcpy (&dataset->resp, ¬found, total); -@@ -207,14 +203,10 @@ cache_addserv (struct database_dyn *db, int fd, request_header *req, - alloca_used = true; - } - -- dataset->head.allocsize = total + req->key_len; -- dataset->head.recsize = total - offsetof (struct dataset, resp); -- dataset->head.notfound = false; -- dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1); -- dataset->head.usable = true; -- -- /* Compute the timeout time. */ -- timeout = dataset->head.timeout = t + db->postimeout; -+ timeout = datahead_init_pos (&dataset->head, total + req->key_len, -+ total - offsetof (struct dataset, resp), -+ he == NULL ? 0 : dh->nreloads + 1, -+ db->postimeout); - - dataset->resp.version = NSCD_VERSION; - dataset->resp.found = 1; diff --git a/src/patches/glibc/glibc-rh1082379.patch b/src/patches/glibc/glibc-rh1082379.patch deleted file mode 100644 index 60a0ece0da..0000000000 --- a/src/patches/glibc/glibc-rh1082379.patch +++ /dev/null @@ -1,63 +0,0 @@ -commit ea7d8b95e2fcb81f68b04ed7787a3dbda023991a -Author: Siddhesh Poyarekar -Date: Thu Mar 27 19:48:15 2014 +0530 - - Avoid overlapping addresses to stpcpy calls in nscd (BZ #16760) - - Calls to stpcpy from nscd netgroups code will have overlapping source - and destination when all three values in the returned triplet are - non-NULL and in the expected (host,user,domain) order. This is seen - in valgrind as: - - ==3181== Source and destination overlap in stpcpy(0x19973b48, 0x19973b48) - ==3181== at 0x4C2F30A: stpcpy (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) - ==3181== by 0x12567A: addgetnetgrentX (string3.h:111) - ==3181== by 0x12722D: addgetnetgrent (netgroupcache.c:665) - ==3181== by 0x11114C: nscd_run_worker (connections.c:1338) - ==3181== by 0x4E3C102: start_thread (pthread_create.c:309) - ==3181== by 0x59B81AC: clone (clone.S:111) - ==3181== - - Fix this by using memmove instead of stpcpy. - -diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c -index 5d15aa4..820d823 100644 ---- a/nscd/netgroupcache.c -+++ b/nscd/netgroupcache.c -@@ -216,6 +216,10 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - const char *nuser = data.val.triple.user; - const char *ndomain = data.val.triple.domain; - -+ size_t hostlen = strlen (nhost ?: "") + 1; -+ size_t userlen = strlen (nuser ?: "") + 1; -+ size_t domainlen = strlen (ndomain ?: "") + 1; -+ - if (nhost == NULL || nuser == NULL || ndomain == NULL - || nhost > nuser || nuser > ndomain) - { -@@ -233,9 +237,6 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - : last + strlen (last) + 1 - buffer); - - /* We have to make temporary copies. */ -- size_t hostlen = strlen (nhost ?: "") + 1; -- size_t userlen = strlen (nuser ?: "") + 1; -- size_t domainlen = strlen (ndomain ?: "") + 1; - size_t needed = hostlen + userlen + domainlen; - - if (buflen - req->key_len - bufused < needed) -@@ -269,9 +270,12 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - } - - char *wp = buffer + buffilled; -- wp = stpcpy (wp, nhost) + 1; -- wp = stpcpy (wp, nuser) + 1; -- wp = stpcpy (wp, ndomain) + 1; -+ wp = memmove (wp, nhost ?: "", hostlen); -+ wp += hostlen; -+ wp = memmove (wp, nuser ?: "", userlen); -+ wp += userlen; -+ wp = memmove (wp, ndomain ?: "", domainlen); -+ wp += domainlen; - buffilled = wp - buffer; - ++nentries; - } diff --git a/src/patches/glibc/glibc-rh1085273.patch b/src/patches/glibc/glibc-rh1085273.patch deleted file mode 100644 index ee0f2898e4..0000000000 --- a/src/patches/glibc/glibc-rh1085273.patch +++ /dev/null @@ -1,31 +0,0 @@ -commit d41242129ba693cdbc8db85b846fcaccf9f0b7c4 -Author: Siddhesh Poyarekar -Date: Thu Jan 2 10:03:12 2014 +0530 - - Fix infinite loop in nscd when netgroup is empty (bz #16365) - - Currently, when a user looks up a netgroup that does not have any - members, nscd goes into an infinite loop trying to find members in the - group. This is because it does not handle cases when getnetgrent - returns an NSS_STATUS_NOTFOUND (which is what it does on empty group). - Fixed to handle this in the same way as NSS_STATUS_RETURN, similar to - what getgrent does by itself. - -diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c -index baebdd7..50936ee 100644 ---- a/nscd/netgroupcache.c -+++ b/nscd/netgroupcache.c -@@ -180,9 +180,10 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - int e; - status = getfct.f (&data, buffer + buffilled, - buflen - buffilled, &e); -- if (status == NSS_STATUS_RETURN) -- /* This was the last one for this group. Look -- at next group if available. */ -+ if (status == NSS_STATUS_RETURN -+ || status == NSS_STATUS_NOTFOUND) -+ /* This was either the last one for this group or the -+ group was empty. Look at next group if available. */ - break; - if (status == NSS_STATUS_SUCCESS) - { diff --git a/src/patches/glibc/glibc-rh1085289.patch b/src/patches/glibc/glibc-rh1085289.patch deleted file mode 100644 index 9bd284ebf7..0000000000 --- a/src/patches/glibc/glibc-rh1085289.patch +++ /dev/null @@ -1,60 +0,0 @@ -commit dd3022d75e6fb8957843d6d84257a5d8457822d5 -Author: Siddhesh Poyarekar -Date: Thu Mar 27 19:49:51 2014 +0530 - - Return NULL for wildcard values in getnetgrent from nscd (BZ #16759) - - getnetgrent is supposed to return NULL for values that are wildcards - in the (host, user, domain) triplet. This works correctly with nscd - disabled, but with it enabled, it returns a blank ("") instead of a - NULL. This is easily seen with the output of `getent netgroup foonet` - for a netgroup foonet defined as follows in /etc/netgroup: - - foonet (,foo,) - - The output with nscd disabled is: - - foonet ( ,foo,) - - while with nscd enabled, it is: - - foonet (,foo,) - - The extra space with nscd disabled is due to the fact that `getent - netgroup` adds it if the return value from getnetgrent is NULL for - either host or user. - -diff --git a/inet/getnetgrent_r.c b/inet/getnetgrent_r.c -index 62cdfda..f6d064d 100644 ---- a/inet/getnetgrent_r.c -+++ b/inet/getnetgrent_r.c -@@ -235,6 +235,14 @@ endnetgrent (void) - libc_hidden_proto (internal_getnetgrent_r) - - -+static const char * -+get_nonempty_val (const char *in) -+{ -+ if (*in == '\0') -+ return NULL; -+ return in; -+} -+ - static enum nss_status - nscd_getnetgrent (struct __netgrent *datap, char *buffer, size_t buflen, - int *errnop) -@@ -243,11 +251,11 @@ nscd_getnetgrent (struct __netgrent *datap, char *buffer, size_t buflen, - return NSS_STATUS_UNAVAIL; - - datap->type = triple_val; -- datap->val.triple.host = datap->cursor; -+ datap->val.triple.host = get_nonempty_val (datap->cursor); - datap->cursor = (char *) __rawmemchr (datap->cursor, '\0') + 1; -- datap->val.triple.user = datap->cursor; -+ datap->val.triple.user = get_nonempty_val (datap->cursor); - datap->cursor = (char *) __rawmemchr (datap->cursor, '\0') + 1; -- datap->val.triple.domain = datap->cursor; -+ datap->val.triple.domain = get_nonempty_val (datap->cursor); - datap->cursor = (char *) __rawmemchr (datap->cursor, '\0') + 1; - - return NSS_STATUS_SUCCESS; diff --git a/src/patches/glibc/glibc-rh1085312.patch b/src/patches/glibc/glibc-rh1085312.patch deleted file mode 100644 index bafb303388..0000000000 --- a/src/patches/glibc/glibc-rh1085312.patch +++ /dev/null @@ -1,34 +0,0 @@ -commit 58b930ae216bfa98cd60212b954b07b9963d6d04 -Author: Siddhesh Poyarekar -Date: Wed Sep 10 21:51:50 2014 +0530 - - Return failure in getnetgrent only when all netgroups have been searched (#17363) - - The netgroups lookup code fails when one of the groups in the search - tree is empty. In such a case it only returns the leaves of the tree - after the blank netgroup. This is because the line parser returns a - NOTFOUND status when the netgroup exists but is empty. The - __getnetgrent_internal implementation needs to be fixed to try - remaining groups if the current group is entry. This patch implements - this fix. Tested on x86_64. - - [BZ #17363] - * inet/getnetgrent_r.c (__internal_getnetgrent_r): Try next - group if the current group is empty. - -diff --git a/inet/getnetgrent_r.c b/inet/getnetgrent_r.c -index f6d064d..e101537 100644 ---- a/inet/getnetgrent_r.c -+++ b/inet/getnetgrent_r.c -@@ -297,7 +297,10 @@ __internal_getnetgrent_r (char **hostp, char **userp, char **domainp, - { - status = (*fct) (datap, buffer, buflen, &errno); - -- if (status == NSS_STATUS_RETURN) -+ if (status == NSS_STATUS_RETURN -+ /* The service returned a NOTFOUND, but there are more groups that we -+ need to resolve before we give up. */ -+ || (status == NSS_STATUS_NOTFOUND && datap->needed_groups != NULL)) - { - /* This was the last one for this group. Look at next group - if available. */ diff --git a/src/patches/glibc/glibc-rh1087833.patch b/src/patches/glibc/glibc-rh1087833.patch deleted file mode 100644 index ca8f1f0470..0000000000 --- a/src/patches/glibc/glibc-rh1087833.patch +++ /dev/null @@ -1,65 +0,0 @@ -commit c3ec475c5dd16499aa040908e11d382c3ded9692 -Author: Siddhesh Poyarekar -Date: Mon May 26 11:40:08 2014 +0530 - - Use NSS_STATUS_TRYAGAIN to indicate insufficient buffer (BZ #16878) - - The netgroups nss modules in the glibc tree use NSS_STATUS_UNAVAIL - (with errno as ERANGE) when the supplied buffer does not have - sufficient space for the result. This is wrong, because the canonical - way to indicate insufficient buffer is to set the errno to ERANGE and - the status to NSS_STATUS_TRYAGAIN, as is used by all other modules. - - This fixes nscd behaviour when the nss_ldap module returns - NSS_STATUS_TRYAGAIN to indicate that a netgroup entry is too long to - fit into the supplied buffer. - -diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c -index b3d40e9..edab174 100644 ---- a/nscd/netgroupcache.c -+++ b/nscd/netgroupcache.c -@@ -197,11 +197,6 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - int e; - status = getfct.f (&data, buffer + buffilled, - buflen - buffilled - req->key_len, &e); -- if (status == NSS_STATUS_RETURN -- || status == NSS_STATUS_NOTFOUND) -- /* This was either the last one for this group or the -- group was empty. Look at next group if available. */ -- break; - if (status == NSS_STATUS_SUCCESS) - { - if (data.type == triple_val) -@@ -320,11 +315,18 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - } - } - } -- else if (status == NSS_STATUS_UNAVAIL && e == ERANGE) -+ else if (status == NSS_STATUS_TRYAGAIN && e == ERANGE) - { - buflen *= 2; - buffer = xrealloc (buffer, buflen); - } -+ else if (status == NSS_STATUS_RETURN -+ || status == NSS_STATUS_NOTFOUND -+ || status == NSS_STATUS_UNAVAIL) -+ /* This was either the last one for this group or the -+ group was empty or the NSS module had an internal -+ failure. Look at next group if available. */ -+ break; - } - - enum nss_status (*endfct) (struct __netgrent *); -diff --git a/nss/nss_files/files-netgrp.c b/nss/nss_files/files-netgrp.c -index 34eae4c..bc0b367 100644 ---- a/nss/nss_files/files-netgrp.c -+++ b/nss/nss_files/files-netgrp.c -@@ -252,7 +252,7 @@ _nss_netgroup_parseline (char **cursor, struct __netgrent *result, - if (cp - host > buflen) - { - *errnop = ERANGE; -- status = NSS_STATUS_UNAVAIL; -+ status = NSS_STATUS_TRYAGAIN; - } - else - { diff --git a/src/patches/glibc/glibc-rh1088301.patch b/src/patches/glibc/glibc-rh1088301.patch deleted file mode 100644 index d26eb14ec6..0000000000 --- a/src/patches/glibc/glibc-rh1088301.patch +++ /dev/null @@ -1,142 +0,0 @@ -diff --git a/resolv/arpa/nameser.h b/resolv/arpa/nameser.h -index fb8513b..372d5cd 100644 ---- a/resolv/arpa/nameser.h -+++ b/resolv/arpa/nameser.h -@@ -293,6 +293,9 @@ typedef enum __ns_type { - ns_t_sink = 40, /*%< Kitchen sink (experimentatl) */ - ns_t_opt = 41, /*%< EDNS0 option (meta-RR) */ - ns_t_apl = 42, /*%< Address prefix list (RFC3123) */ -+ ns_t_rrsig = 46, /*%< DNSSEC RRset Signature (RFC4034) */ -+ ns_t_nsec = 47, /*%< DNSSEC Next-Secure Record (RFC4034)*/ -+ ns_t_dnskey = 48, /*%< DNSSEC key record (RFC4034) */ - ns_t_tkey = 249, /*%< Transaction key */ - ns_t_tsig = 250, /*%< Transaction signature. */ - ns_t_ixfr = 251, /*%< Incremental zone transfer. */ -diff --git a/resolv/arpa/nameser_compat.h b/resolv/arpa/nameser_compat.h -index d59c9e4..284bff7 100644 ---- a/resolv/arpa/nameser_compat.h -+++ b/resolv/arpa/nameser_compat.h -@@ -164,6 +164,9 @@ typedef struct { - #define T_NAPTR ns_t_naptr - #define T_A6 ns_t_a6 - #define T_DNAME ns_t_dname -+#define T_RRSIG ns_t_rrsig -+#define T_NSEC ns_t_nsec -+#define T_DNSKEY ns_t_dnskey - #define T_TSIG ns_t_tsig - #define T_IXFR ns_t_ixfr - #define T_AXFR ns_t_axfr -diff --git a/resolv/gethnamaddr.c b/resolv/gethnamaddr.c -index a861a84..ae55fac 100644 ---- a/resolv/gethnamaddr.c -+++ b/resolv/gethnamaddr.c -@@ -331,23 +331,36 @@ getanswer (const querybuf *answer, int anslen, const char *qname, int qtype) - buflen -= n; - continue; - } -- if ((type == T_SIG) || (type == T_KEY) || (type == T_NXT)) { -- /* We don't support DNSSEC yet. For now, ignore -- * the record and send a low priority message -- * to syslog. -- */ -- syslog(LOG_DEBUG|LOG_AUTH, -+ if ((type == T_SIG) || (type == T_KEY) || (type == T_NXT) -+ || (type == T_RRSIG) || (type == T_NSEC) -+ || (type == T_DNSKEY)) { -+ /* We don't support DNSSEC responses yet, but we do -+ * allow setting the DO bit. If the DNS server sent us -+ * these records without us asking for it, ignore the -+ * record and send a low priority message to syslog. -+ */ -+ if ((_res.options & RES_USE_DNSSEC) == 0) { -+ syslog(LOG_DEBUG|LOG_AUTH, - "gethostby*.getanswer: asked for \"%s %s %s\", got type \"%s\"", -- qname, p_class(C_IN), p_type(qtype), -- p_type(type)); -+ qname, p_class(C_IN), p_type(qtype), -+ p_type(type)); -+ } - cp += n; - continue; - } - if (type != qtype) { -- syslog(LOG_NOTICE|LOG_AUTH, -+ /* Skip logging if we received a DNAME when we have set -+ * the DO bit. DNAME records are a convenient way to -+ * set up DNSSEC records and such setups can make this -+ * log message needlessly noisy. -+ */ -+ if (!((_res.options & RES_USE_DNSSEC) -+ && type == T_DNAME)) { -+ syslog(LOG_NOTICE|LOG_AUTH, - "gethostby*.getanswer: asked for \"%s %s %s\", got type \"%s\"", -- qname, p_class(C_IN), p_type(qtype), -- p_type(type)); -+ qname, p_class(C_IN), p_type(qtype), -+ p_type(type)); -+ } - cp += n; - continue; /* XXX - had_error++ ? */ - } -diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c -index f715ab0..510d388 100644 ---- a/resolv/nss_dns/dns-host.c -+++ b/resolv/nss_dns/dns-host.c -@@ -822,13 +822,20 @@ getanswer_r (const querybuf *answer, int anslen, const char *qname, int qtype, - } - if (__builtin_expect (type == T_SIG, 0) - || __builtin_expect (type == T_KEY, 0) -- || __builtin_expect (type == T_NXT, 0)) -+ || __builtin_expect (type == T_NXT, 0) -+ || __builtin_expect (type == T_RRSIG, 0) -+ || __builtin_expect (type == T_NSEC, 0) -+ || __builtin_expect (type == T_DNSKEY, 0)) - { -- /* We don't support DNSSEC yet. For now, ignore the record -- and send a low priority message to syslog. */ -- syslog (LOG_DEBUG | LOG_AUTH, -- "gethostby*.getanswer: asked for \"%s %s %s\", got type \"%s\"", -- qname, p_class (C_IN), p_type(qtype), p_type (type)); -+ /* We don't support DNSSEC responses yet, but we do allow setting the -+ DO bit. If the DNS server sent us these records without us asking -+ for it, ignore the record and send a low priority message to -+ syslog. */ -+ if ((_res.options & RES_USE_DNSSEC) == 0) -+ syslog (LOG_DEBUG | LOG_AUTH, -+ "gethostby*.getanswer: asked for \"%s %s %s\", " -+ "got type \"%s\"", -+ qname, p_class (C_IN), p_type(qtype), p_type (type)); - cp += n; - continue; - } -@@ -837,9 +844,14 @@ getanswer_r (const querybuf *answer, int anslen, const char *qname, int qtype, - have_to_map = 1; - else if (__builtin_expect (type != qtype, 0)) - { -- syslog (LOG_NOTICE | LOG_AUTH, -- "gethostby*.getanswer: asked for \"%s %s %s\", got type \"%s\"", -- qname, p_class (C_IN), p_type (qtype), p_type (type)); -+ /* Skip logging if we received a DNAME when we have set the DO bit. -+ DNAME records are a convenient way to set up DNSSEC records and -+ such setups can make this log message needlessly noisy. */ -+ if (!((_res.options & RES_USE_DNSSEC) && type == T_DNAME)) -+ syslog (LOG_NOTICE | LOG_AUTH, -+ "gethostby*.getanswer: asked for \"%s %s %s\", " -+ "got type \"%s\"", -+ qname, p_class (C_IN), p_type (qtype), p_type (type)); - cp += n; - continue; /* XXX - had_error++ ? */ - } -diff --git a/resolv/res_debug.c b/resolv/res_debug.c -index 7843439..4a49629 100644 ---- a/resolv/res_debug.c -+++ b/resolv/res_debug.c -@@ -450,6 +450,8 @@ const struct res_sym __p_type_syms[] = { - {ns_t_kx, "KX", "Key Exchange"}, - {ns_t_cert, "CERT", "Certificate"}, - {ns_t_any, "ANY", "\"any\""}, -+ /* TODO Add RRSIG, NSEC and DNSKEY once we actually do something with -+ them. */ - {0, NULL, NULL} - }; - libresolv_hidden_data_def (__p_type_syms) diff --git a/src/patches/glibc/glibc-rh1091915.patch b/src/patches/glibc/glibc-rh1091915.patch deleted file mode 100644 index d1af874dc2..0000000000 --- a/src/patches/glibc/glibc-rh1091915.patch +++ /dev/null @@ -1,40 +0,0 @@ -commit 3cb26316b45b23dc5cfecbafdc489b28c3a52029 -Author: Siddhesh Poyarekar -Date: Thu Jan 29 10:30:09 2015 +0530 - - Initialize nscd stats data [BZ #17892] - - The padding bytes in the statsdata struct are not initialized, due to - which valgrind throws a warning: - - ==11384== Memcheck, a memory error detector - ==11384== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al. - ==11384== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info - ==11384== Command: nscd -d - ==11384== - Fri 25 Apr 2014 10:34:53 AM CEST - 11384: handle_request: request received (Version = 2) from PID 11396 - Fri 25 Apr 2014 10:34:53 AM CEST - 11384: GETSTAT - ==11384== Thread 6: - ==11384== Syscall param socketcall.sendto(msg) points to uninitialised byte(s) - ==11384== at 0x4E4ACDC: send (in /lib64/libpthread-2.12.so) - ==11384== by 0x11AF6B: send_stats (in /usr/sbin/nscd) - ==11384== by 0x112F75: nscd_run_worker (in /usr/sbin/nscd) - ==11384== by 0x4E439D0: start_thread (in /lib64/libpthread-2.12.so) - ==11384== by 0x599AB6C: clone (in /lib64/libc-2.12.so) - ==11384== Address 0x15708395 is on thread 6's stack - - Fix the warning by initializing the structure. - -diff --git a/nscd/nscd_stat.c b/nscd/nscd_stat.c -index 0f1f3c0..7aaa21b 100644 ---- a/nscd/nscd_stat.c -+++ b/nscd/nscd_stat.c -@@ -94,6 +94,8 @@ send_stats (int fd, struct database_dyn dbs[lastdb]) - struct statdata data; - int cnt; - -+ memset (&data, 0, sizeof (data)); -+ - memcpy (data.version, compilation, sizeof (compilation)); - data.debug_level = debug_level; - data.runtime = time (NULL) - start_time; diff --git a/src/patches/glibc/glibc-rh1099025-2.patch b/src/patches/glibc/glibc-rh1099025-2.patch deleted file mode 100644 index 58fe121aa7..0000000000 --- a/src/patches/glibc/glibc-rh1099025-2.patch +++ /dev/null @@ -1,159 +0,0 @@ -commit d6c33fda03457ca8ca87a562fa2681af16ca4ea5 -Author: Roland McGrath -Date: Thu May 24 11:37:30 2012 -0700 - - Switch gettimeofday from INTUSE to libc_hidden_proto. - -diff --git a/include/sys/time.h b/include/sys/time.h -index d5de942..599e189 100644 ---- a/include/sys/time.h -+++ b/include/sys/time.h -@@ -4,9 +4,8 @@ - /* Now document the internal interfaces. */ - extern int __gettimeofday (struct timeval *__tv, - struct timezone *__tz); --extern int __gettimeofday_internal (struct timeval *__tv, -- struct timezone *__tz) -- attribute_hidden; -+libc_hidden_proto (__gettimeofday) -+libc_hidden_proto (gettimeofday) - extern int __settimeofday (__const struct timeval *__tv, - __const struct timezone *__tz) - attribute_hidden; -@@ -22,8 +21,4 @@ extern int __utimes (const char *__file, const struct timeval __tvp[2]) - attribute_hidden; - extern int __futimes (int fd, __const struct timeval tvp[2]) attribute_hidden; - --#ifndef NOT_IN_libc --# define __gettimeofday(tv, tz) INTUSE(__gettimeofday) (tv, tz) --#endif -- - #endif -diff --git a/sysdeps/mach/gettimeofday.c b/sysdeps/mach/gettimeofday.c -index 88dca8e..293a775 100644 ---- a/sysdeps/mach/gettimeofday.c -+++ b/sysdeps/mach/gettimeofday.c -@@ -20,8 +20,6 @@ - #include - #include - --#undef __gettimeofday -- - /* Get the current time of day and timezone information, - putting it into *TV and *TZ. If TZ is NULL, *TZ is not filled. - Returns 0 on success, -1 on errors. */ -@@ -42,6 +40,6 @@ __gettimeofday (tv, tz) - } - return 0; - } -- --INTDEF(__gettimeofday) -+libc_hidden_def (__gettimeofday) - weak_alias (__gettimeofday, gettimeofday) -+libc_hidden_weak (gettimeofday) -diff --git a/sysdeps/posix/gettimeofday.c b/sysdeps/posix/gettimeofday.c -index 31b3dd3..1108ff0 100644 ---- a/sysdeps/posix/gettimeofday.c -+++ b/sysdeps/posix/gettimeofday.c -@@ -19,8 +19,6 @@ - #include - #include - --#undef __gettimeofday -- - /* Get the current time of day and timezone information, - putting it into *TV and *TZ. If TZ is NULL, *TZ is not filled. - Returns 0 on success, -1 on errors. */ -@@ -66,6 +64,6 @@ __gettimeofday (tv, tz) - - return 0; - } -- --INTDEF(__gettimeofday) -+libc_hidden_def (__gettimeofday) - weak_alias (__gettimeofday, gettimeofday) -+libc_hidden_weak (gettimeofday) -diff --git a/sysdeps/unix/syscalls.list b/sysdeps/unix/syscalls.list -index 39c40ed..bd780f5 100644 ---- a/sysdeps/unix/common/syscalls.list -+++ b/sysdeps/unix/common/syscalls.list -@@ -5,7 +5,7 @@ getpid - getpid Ei: __getpid getpid - fchown - fchown i:iii __fchown fchown - ftruncate - ftruncate i:ii __ftruncate ftruncate - getrusage - getrusage i:ip __getrusage getrusage --gettimeofday - gettimeofday i:PP __gettimeofday gettimeofday __gettimeofday_internal -+gettimeofday - gettimeofday i:pP __gettimeofday gettimeofday - settimeofday - settimeofday i:PP __settimeofday settimeofday - setpgid - setpgrp i:ii __setpgid setpgid - setregid - setregid i:ii __setregid setregid -diff --git a/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c b/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c -index b2ef2da..7376135 100644 ---- a/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c -+++ b/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c -@@ -35,5 +35,6 @@ __gettimeofday (tv, tz) - } -- --#endif --INTDEF (__gettimeofday) -+libc_hidden_def (__gettimeofday) -+ -+#endif - weak_alias (__gettimeofday, gettimeofday) -+libc_hidden_weak (gettimeofday) -diff --git a/sysdeps/unix/sysv/linux/s390/gettimeofday.c b/sysdeps/unix/sysv/linux/s390/gettimeofday.c -index 63faef8..efbf1e8 100644 ---- a/sysdeps/unix/sysv/linux/s390/gettimeofday.c -+++ b/sysdeps/unix/sysv/linux/s390/gettimeofday.c -@@ -22,7 +22,6 @@ - #include - #include - --#undef __gettimeofday - #include - - /* Get the current time of day and timezone information, -@@ -36,6 +35,6 @@ __gettimeofday (tv, tz) - { - return INLINE_VSYSCALL (gettimeofday, 2, CHECK_1 (tv), CHECK_1 (tz)); - } -- --INTDEF (__gettimeofday) -+libc_hidden_def (__gettimeofday) - weak_alias (__gettimeofday, gettimeofday) -+libc_hidden_weak (gettimeofday) -diff --git a/time/gettimeofday.c b/time/gettimeofday.c -index cfe6549..7eb770c 100644 ---- a/time/gettimeofday.c -+++ b/time/gettimeofday.c -@@ -18,8 +18,6 @@ - #include - #include - --#undef __gettimeofday -- - /* Get the current time of day and timezone information, - putting it into *TV and *TZ. If TZ is NULL, *TZ is not filled. - Returns 0 on success, -1 on errors. */ -@@ -31,8 +29,9 @@ __gettimeofday (tv, tz) - __set_errno (ENOSYS); - return -1; - } --stub_warning (gettimeofday) -- --INTDEF(__gettimeofday) -+libc_hidden_def (__gettimeofday) - weak_alias (__gettimeofday, gettimeofday) -+libc_hidden_weak (gettimeofday) -+ -+stub_warning (gettimeofday) - #include ---- a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.S 2014-07-28 14:40:24.640144825 +0530 -+++ b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.S 2014-07-28 14:40:21.320120072 +0530 -@@ -45,5 +45,6 @@ - ret - PSEUDO_END(__gettimeofday) - --strong_alias (__gettimeofday, __gettimeofday_internal) -+libc_hidden_def (__gettimeofday) - weak_alias (__gettimeofday, gettimeofday) -+libc_hidden_weak (gettimeofday) diff --git a/src/patches/glibc/glibc-rh1099025.patch b/src/patches/glibc/glibc-rh1099025.patch deleted file mode 100644 index d075be86ef..0000000000 --- a/src/patches/glibc/glibc-rh1099025.patch +++ /dev/null @@ -1,47 +0,0 @@ -commit 736c304a1ab4cee36a2f3343f1698bc0abae4608 -Author: Adhemerval Zanella -Date: Thu Jan 16 06:53:18 2014 -0600 - - PowerPC: Fix ftime gettimeofday internal call returning bogus data - - This patches fixes BZ#16430 by setting a different symbol for internal - GLIBC calls that points to ifunc resolvers. For PPC32, if the symbol - is defined as hidden (which is the case for gettimeofday and time) the - compiler will create local branches (symbol@local) and linker will not - create PLT calls (required for IFUNC). This will leads to internal symbol - calling the IFUNC resolver instead of the resolved symbol. - For PPC64 this behavior does not occur because a call to a function in - another translation unit might use a different toc pointer thus requiring - a PLT call. - -diff --git a/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c b/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c -index 29a5e08..2085b68 100644 ---- a/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c -+++ b/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c -@@ -44,8 +44,24 @@ asm (".type __gettimeofday, %gnu_indirect_function"); - /* This is doing "libc_hidden_def (__gettimeofday)" but the compiler won't - let us do it in C because it doesn't know we're defining __gettimeofday - here in this file. */ --asm (".globl __GI___gettimeofday\n" -- "__GI___gettimeofday = __gettimeofday"); -+asm (".globl __GI___gettimeofday"); -+ -+/* __GI___gettimeofday is defined as hidden and for ppc32 it enables the -+ compiler make a local call (symbol@local) for internal GLIBC usage. It -+ means the PLT won't be used and the ifunc resolver will be called directly. -+ For ppc64 a call to a function in another translation unit might use a -+ different toc pointer thus disallowing direct branchess and making internal -+ ifuncs calls safe. */ -+#ifdef __powerpc64__ -+asm ("__GI___gettimeofday = __gettimeofday"); -+#else -+int -+__gettimeofday_vsyscall (struct timeval *tv, struct timezone *tz) -+{ -+ return INLINE_VSYSCALL (gettimeofday, 2, tv, tz); -+} -+asm ("__GI___gettimeofday = __gettimeofday_vsyscall"); -+#endif - - #else - diff --git a/src/patches/glibc/glibc-rh1111460.patch b/src/patches/glibc/glibc-rh1111460.patch deleted file mode 100644 index 1a4315d5bf..0000000000 --- a/src/patches/glibc/glibc-rh1111460.patch +++ /dev/null @@ -1,341 +0,0 @@ -commit 7cbcdb3699584db8913ca90f705d6337633ee10f -Author: Siddhesh Poyarekar -Date: Fri Oct 25 10:22:12 2013 +0530 - - Fix stack overflow due to large AF_INET6 requests - - Resolves #16072 (CVE-2013-4458). - - This patch fixes another stack overflow in getaddrinfo when it is - called with AF_INET6. The AF_UNSPEC case was fixed as CVE-2013-1914, - but the AF_INET6 case went undetected back then. - -commit 91ce40854d0b7f865cf5024ef95a8026b76096f3 -Author: Florian Weimer -Date: Fri Aug 16 09:38:52 2013 +0200 - - CVE-2013-4237, BZ #14699: Buffer overflow in readdir_r - - * sysdeps/posix/dirstream.h (struct __dirstream): Add errcode - member. - * sysdeps/posix/opendir.c (__alloc_dir): Initialize errcode - member. - * sysdeps/posix/rewinddir.c (rewinddir): Reset errcode member. - * sysdeps/posix/readdir_r.c (__READDIR_R): Enforce NAME_MAX limit. - Return delayed error code. Remove GETDENTS_64BIT_ALIGNED - conditional. - * sysdeps/unix/sysv/linux/wordsize-64/readdir_r.c: Do not define - GETDENTS_64BIT_ALIGNED. - * sysdeps/unix/sysv/linux/i386/readdir64_r.c: Likewise. - * manual/filesys.texi (Reading/Closing Directory): Document - ENAMETOOLONG return value of readdir_r. Recommend readdir more - strongly. - * manual/conf.texi (Limits for Files): Add portability note to - NAME_MAX, PATH_MAX. - (Pathconf): Add portability note for _PC_NAME_MAX, _PC_PATH_MAX. - -diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c -index e6ce4cf..8ff74b4 100644 ---- a/sysdeps/posix/getaddrinfo.c -+++ b/sysdeps/posix/getaddrinfo.c -@@ -197,7 +197,22 @@ gaih_inet_serv (const char *servicename, const struct gaih_typeproto *tp, - &rc, &herrno, NULL, &localcanon)); \ - if (rc != ERANGE || herrno != NETDB_INTERNAL) \ - break; \ -- tmpbuf = extend_alloca (tmpbuf, tmpbuflen, 2 * tmpbuflen); \ -+ if (!malloc_tmpbuf && __libc_use_alloca (alloca_used + 2 * tmpbuflen)) \ -+ tmpbuf = extend_alloca_account (tmpbuf, tmpbuflen, 2 * tmpbuflen, \ -+ alloca_used); \ -+ else \ -+ { \ -+ char *newp = realloc (malloc_tmpbuf ? tmpbuf : NULL, \ -+ 2 * tmpbuflen); \ -+ if (newp == NULL) \ -+ { \ -+ result = -EAI_MEMORY; \ -+ goto free_and_return; \ -+ } \ -+ tmpbuf = newp; \ -+ malloc_tmpbuf = true; \ -+ tmpbuflen = 2 * tmpbuflen; \ -+ } \ - } \ - if (status == NSS_STATUS_SUCCESS && rc == 0) \ - h = &th; \ -@@ -209,7 +224,8 @@ gaih_inet_serv (const char *servicename, const struct gaih_typeproto *tp, - { \ - __set_h_errno (herrno); \ - _res.options = old_res_options; \ -- return -EAI_SYSTEM; \ -+ result = -EAI_SYSTEM; \ -+ goto free_and_return; \ - } \ - if (herrno == TRY_AGAIN) \ - no_data = EAI_AGAIN; \ - -diff --git a/manual/conf.texi b/manual/conf.texi -index 7eb8b36..c720063 100644 ---- a/manual/conf.texi -+++ b/manual/conf.texi -@@ -1149,6 +1149,9 @@ typed ahead as input. @xref{I/O Queues}. - @comment POSIX.1 - @deftypevr Macro int NAME_MAX - The uniform system limit (if any) for the length of a file name component. -+ -+@strong{Portability Note:} On some systems, the GNU C Library defines -+@code{NAME_MAX}, but does not actually enforce this limit. - @end deftypevr - - @comment limits.h -@@ -1157,6 +1160,9 @@ including the terminating null character. - @deftypevr Macro int PATH_MAX - The uniform system limit (if any) for the length of an entire file name (that - is, the argument given to system calls such as @code{open}). -+ -+@strong{Portability Note:} The GNU C Library does not enforce this limit -+even if @code{PATH_MAX} is defined. - @end deftypevr - - @cindex limits, pipe buffer size -@@ -1476,6 +1482,9 @@ Inquire about the value of @code{POSIX_REC_MIN_XFER_SIZE}. - Inquire about the value of @code{POSIX_REC_XFER_ALIGN}. - @end table - -+@strong{Portability Note:} On some systems, the GNU C Library does not -+enforce @code{_PC_NAME_MAX} or @code{_PC_PATH_MAX} limits. -+ - @node Utility Limits - @section Utility Program Capacity Limits - -diff --git a/manual/filesys.texi b/manual/filesys.texi -index 1df9cf2..814c210 100644 ---- a/manual/filesys.texi -+++ b/manual/filesys.texi -@@ -444,9 +444,9 @@ symbols are declared in the header file @file{dirent.h}. - @comment POSIX.1 - @deftypefun {struct dirent *} readdir (DIR *@var{dirstream}) - This function reads the next entry from the directory. It normally --returns a pointer to a structure containing information about the file. --This structure is statically allocated and can be rewritten by a --subsequent call. -+returns a pointer to a structure containing information about the -+file. This structure is associated with the @var{dirstream} handle -+and can be rewritten by a subsequent call. - - @strong{Portability Note:} On some systems @code{readdir} may not - return entries for @file{.} and @file{..}, even though these are always -@@ -461,19 +461,61 @@ conditions are defined for this function: - The @var{dirstream} argument is not valid. - @end table - --@code{readdir} is not thread safe. Multiple threads using --@code{readdir} on the same @var{dirstream} may overwrite the return --value. Use @code{readdir_r} when this is critical. -+To distinguish between an end-of-directory condition or an error, you -+must set @code{errno} to zero before calling @code{readdir}. To avoid -+entering an infinite loop, you should stop reading from the directory -+after the first error. -+ -+In POSIX.1-2008, @code{readdir} is not thread-safe. In the GNU C Library -+implementation, it is safe to call @code{readdir} concurrently on -+different @var{dirstream}s, but multiple threads accessing the same -+@var{dirstream} result in undefined behavior. @code{readdir_r} is a -+fully thread-safe alternative, but suffers from poor portability (see -+below). It is recommended that you use @code{readdir}, with external -+locking if multiple threads access the same @var{dirstream}. - @end deftypefun - - @comment dirent.h - @comment GNU - @deftypefun int readdir_r (DIR *@var{dirstream}, struct dirent *@var{entry}, struct dirent **@var{result}) --This function is the reentrant version of @code{readdir}. Like --@code{readdir} it returns the next entry from the directory. But to --prevent conflicts between simultaneously running threads the result is --not stored in statically allocated memory. Instead the argument --@var{entry} points to a place to store the result. -+This function is a version of @code{readdir} which performs internal -+locking. Like @code{readdir} it returns the next entry from the -+directory. To prevent conflicts between simultaneously running -+threads the result is stored inside the @var{entry} object. -+ -+@strong{Portability Note:} It is recommended to use @code{readdir} -+instead of @code{readdir_r} for the following reasons: -+ -+@itemize @bullet -+@item -+On systems which do not define @code{NAME_MAX}, it may not be possible -+to use @code{readdir_r} safely because the caller does not specify the -+length of the buffer for the directory entry. -+ -+@item -+On some systems, @code{readdir_r} cannot read directory entries with -+very long names. If such a name is encountered, the GNU C Library -+implementation of @code{readdir_r} returns with an error code of -+@code{ENAMETOOLONG} after the final directory entry has been read. On -+other systems, @code{readdir_r} may return successfully, but the -+@code{d_name} member may not be NUL-terminated or may be truncated. -+ -+@item -+POSIX-1.2008 does not guarantee that @code{readdir} is thread-safe, -+even when access to the same @var{dirstream} is serialized. But in -+current implementations (including the GNU C Library), it is safe to call -+@code{readdir} concurrently on different @var{dirstream}s, so there is -+no need to use @code{readdir_r} in most multi-threaded programs. In -+the rare case that multiple threads need to read from the same -+@var{dirstream}, it is still better to use @code{readdir} and external -+synchronization. -+ -+@item -+It is expected that future versions of POSIX will obsolete -+@code{readdir_r} and mandate the level of thread safety for -+@code{readdir} which is provided by the GNU C Library and other -+implementations today. -+@end itemize - - Normally @code{readdir_r} returns zero and sets @code{*@var{result}} - to @var{entry}. If there are no more entries in the directory or an -@@ -481,15 +523,6 @@ error is detected, @code{readdir_r} sets @code{*@var{result}} to a - null pointer and returns a nonzero error code, also stored in - @code{errno}, as described for @code{readdir}. - --@strong{Portability Note:} On some systems @code{readdir_r} may not --return a NUL terminated string for the file name, even when there is no --@code{d_reclen} field in @code{struct dirent} and the file --name is the maximum allowed size. Modern systems all have the --@code{d_reclen} field, and on old systems multi-threading is not --critical. In any case there is no such problem with the @code{readdir} --function, so that even on systems without the @code{d_reclen} member one --could use multiple threads by using external locking. -- - It is also important to look at the definition of the @code{struct - dirent} type. Simply passing a pointer to an object of this type for - the second parameter of @code{readdir_r} might not be enough. Some -diff --git a/sysdeps/unix/dirstream.h b/sysdeps/unix/dirstream.h -index a7a074d..8e8570d 100644 ---- a/sysdeps/unix/dirstream.h -+++ b/sysdeps/unix/dirstream.h -@@ -39,6 +39,8 @@ struct __dirstream - - off_t filepos; /* Position of next entry to read. */ - -+ int errcode; /* Delayed error code. */ -+ - /* Directory block. */ - char data[0] __attribute__ ((aligned (__alignof__ (void*)))); - }; -diff --git a/sysdeps/unix/opendir.c b/sysdeps/unix/opendir.c -index ddfc3a7..fc05b0f 100644 ---- a/sysdeps/unix/opendir.c -+++ b/sysdeps/unix/opendir.c -@@ -231,6 +231,7 @@ __alloc_dir (int fd, bool close_fd, int flags, const struct stat64 *statp) - dirp->size = 0; - dirp->offset = 0; - dirp->filepos = 0; -+ dirp->errcode = 0; - - return dirp; - } -diff --git a/sysdeps/unix/readdir_r.c b/sysdeps/unix/readdir_r.c -index b5a8e2e..8ed5c3f 100644 ---- a/sysdeps/unix/readdir_r.c -+++ b/sysdeps/unix/readdir_r.c -@@ -40,6 +40,7 @@ __READDIR_R (DIR *dirp, DIRENT_TYPE *entry, DIRENT_TYPE **result) - DIRENT_TYPE *dp; - size_t reclen; - const int saved_errno = errno; -+ int ret; - - __libc_lock_lock (dirp->lock); - -@@ -70,10 +71,10 @@ __READDIR_R (DIR *dirp, DIRENT_TYPE *entry, DIRENT_TYPE **result) - bytes = 0; - __set_errno (saved_errno); - } -+ if (bytes < 0) -+ dirp->errcode = errno; - - dp = NULL; -- /* Reclen != 0 signals that an error occurred. */ -- reclen = bytes != 0; - break; - } - dirp->size = (size_t) bytes; -@@ -106,28 +107,46 @@ __READDIR_R (DIR *dirp, DIRENT_TYPE *entry, DIRENT_TYPE **result) - dirp->filepos += reclen; - #endif - -- /* Skip deleted files. */ -+#ifdef NAME_MAX -+ if (reclen > offsetof (DIRENT_TYPE, d_name) + NAME_MAX + 1) -+ { -+ /* The record is very long. It could still fit into the -+ caller-supplied buffer if we can skip padding at the -+ end. */ -+ size_t namelen = _D_EXACT_NAMLEN (dp); -+ if (namelen <= NAME_MAX) -+ reclen = offsetof (DIRENT_TYPE, d_name) + namelen + 1; -+ else -+ { -+ /* The name is too long. Ignore this file. */ -+ dirp->errcode = ENAMETOOLONG; -+ dp->d_ino = 0; -+ continue; -+ } -+ } -+#endif -+ -+ /* Skip deleted and ignored files. */ - } - while (dp->d_ino == 0); - - if (dp != NULL) - { --#ifdef GETDENTS_64BIT_ALIGNED -- /* The d_reclen value might include padding which is not part of -- the DIRENT_TYPE data structure. */ -- reclen = MIN (reclen, sizeof (DIRENT_TYPE)); --#endif - *result = memcpy (entry, dp, reclen); --#ifdef GETDENTS_64BIT_ALIGNED -+#ifdef _DIRENT_HAVE_D_RECLEN - entry->d_reclen = reclen; - #endif -+ ret = 0; - } - else -- *result = NULL; -+ { -+ *result = NULL; -+ ret = dirp->errcode; -+ } - - __libc_lock_unlock (dirp->lock); - -- return dp != NULL ? 0 : reclen ? errno : 0; -+ return ret; - } - - #ifdef __READDIR_R_ALIAS -diff --git a/sysdeps/unix/rewinddir.c b/sysdeps/unix/rewinddir.c -index 2935a8e..d4991ad 100644 ---- a/sysdeps/unix/rewinddir.c -+++ b/sysdeps/unix/rewinddir.c -@@ -33,5 +33,6 @@ rewinddir (dirp) - dirp->filepos = 0; - dirp->offset = 0; - dirp->size = 0; -+ dirp->errcode = 0; - __libc_lock_unlock (dirp->lock); - } -diff --git a/sysdeps/unix/sysv/linux/i386/readdir64_r.c b/sysdeps/unix/sysv/linux/i386/readdir64_r.c -index 8ebbcfd..a7d114e 100644 ---- a/sysdeps/unix/sysv/linux/i386/readdir64_r.c -+++ b/sysdeps/unix/sysv/linux/i386/readdir64_r.c -@@ -18,7 +18,6 @@ - #define __READDIR_R __readdir64_r - #define __GETDENTS __getdents64 - #define DIRENT_TYPE struct dirent64 --#define GETDENTS_64BIT_ALIGNED 1 - - #include - diff --git a/src/patches/glibc/glibc-rh1116050-1.patch b/src/patches/glibc/glibc-rh1116050-1.patch deleted file mode 100644 index 439cf6d0c2..0000000000 --- a/src/patches/glibc/glibc-rh1116050-1.patch +++ /dev/null @@ -1,57 +0,0 @@ -# -# In rhel-6.x the Makerules are not entirely as mature as they are -# in glibc 2.21 (from which the example link-libc-args is taken from). -# In rhel-6.x the applications are not built like their counterpart -# real applications, and because of that compiling DSOs that use TLS -# will fail with undefined references to __tls_get_addr which resides -# in ld.so and is never included in the link. This patch enhances -# only the build-module and build-module-asneeded targets to include -# a more fully and correct link line as the compiler driver would use -# when constructing an application or DSO. We do not adjust the link -# lines used to build lib* targets. -# -diff -urN glibc-2.12-2-gc4ccff1.orig/Makerules glibc-2.12-2-gc4ccff1/Makerules ---- glibc-2.12-2-gc4ccff1.orig/Makerules 2015-02-18 19:53:00.000000000 -0500 -+++ glibc-2.12-2-gc4ccff1/Makerules 2015-02-18 20:08:33.299000028 -0500 -@@ -443,6 +443,25 @@ - load-map-file = $(map-file:%=-Wl,--version-script=%) - endif - -+# Compiler arguments to use to link a shared object with libc and -+# ld.so. This is intended to be as similar as possible to a default -+# link with an installed libc. -+link-libc-args = -Wl,--start-group \ -+ $(libc-for-link) \ -+ $(common-objpfx)libc_nonshared.a \ -+ $(as-needed) $(elf-objpfx)ld.so $(no-as-needed) \ -+ -Wl,--end-group -+ -+# The corresponding shared libc to use. This may be modified for a -+# particular target. -+libc-for-link = $(common-objpfx)libc.so -+ -+# The corresponding dependencies. As these are used in dependencies, -+# not just commands, they cannot use target-specific variables so need -+# to name both possible libc.so objects. -+link-libc-deps = $(common-objpfx)libc.so $(common-objpfx)linkobj/libc.so \ -+ $(common-objpfx)libc_nonshared.a $(elf-objpfx)ld.so -+ - # Pattern rule to build a shared object from an archive of PIC objects. - # This must come after the installation rules so Make doesn't try to - # build shared libraries in place from the installed *_pic.a files. -@@ -557,12 +576,13 @@ - # not for shared objects - define build-module - $(build-module-helper) -o $@ -T $(common-objpfx)shlib.lds \ -- $(csu-objpfx)abi-note.o $(build-module-objlist) -+ $(csu-objpfx)abi-note.o $(build-module-objlist) $(link-libc-args) - endef - define build-module-asneeded - $(build-module-helper) -o $@ -T $(common-objpfx)shlib.lds \ - $(csu-objpfx)abi-note.o \ -- -Wl,--as-needed $(build-module-objlist) -Wl,--no-as-needed -+ -Wl,--as-needed $(build-module-objlist) -Wl,--no-as-needed \ -+ $(link-libc-args) - endef - else - ifneq (,$(findstring aix,$(config-os))) diff --git a/src/patches/glibc/glibc-rh1116050.patch b/src/patches/glibc/glibc-rh1116050.patch deleted file mode 100644 index 7631312d52..0000000000 --- a/src/patches/glibc/glibc-rh1116050.patch +++ /dev/null @@ -1,407 +0,0 @@ -# -# Based on this upstream commit: -# -# commit d8dd00805b8f3a011735d7a407097fb1c408d867 -# Author: H.J. Lu -# Date: Fri Nov 28 07:54:07 2014 -0800 -# -# Resize DTV if the current DTV isn't big enough -# -# This patch changes _dl_allocate_tls_init to resize DTV if the current DTV -# isn't big enough. Tested on X86-64, x32 and ia32. -# -# [BZ #13862] -# * elf/dl-tls.c: Include . -# (oom): Remove #ifdef SHARED/#endif. -# (_dl_static_dtv, _dl_initial_dtv): Moved before ... -# (_dl_resize_dtv): This. Extracted from _dl_update_slotinfo. -# (_dl_allocate_tls_init): Resize DTV if the current DTV isn't -# big enough. -# (_dl_update_slotinfo): Call _dl_resize_dtv to resize DTV. -# * nptl/Makefile (tests): Add tst-stack4. -# (modules-names): Add tst-stack4mod. -# ($(objpfx)tst-stack4): New. -# (tst-stack4mod.sos): Likewise. -# ($(objpfx)tst-stack4.out): Likewise. -# ($(tst-stack4mod.sos)): Likewise. -# (clean): Likewise. -# * nptl/tst-stack4.c: New file. -# * nptl/tst-stack4mod.c: Likewise. -# -diff -urN glibc-2.12-2-gc4ccff1/elf/dl-tls.c glibc-2.12-2-gc4ccff1.mod/elf/dl-tls.c ---- glibc-2.12-2-gc4ccff1/elf/dl-tls.c 2015-02-18 14:15:28.078461873 -0500 -+++ glibc-2.12-2-gc4ccff1.mod/elf/dl-tls.c 2015-02-18 14:38:37.630374771 -0500 -@@ -24,6 +24,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -35,14 +36,12 @@ - - - /* Out-of-memory handler. */ --#ifdef SHARED - static void - __attribute__ ((__noreturn__)) - oom (void) - { - _dl_fatal_printf ("cannot allocate memory for thread-local data: ABORT\n"); - } --#endif - - - size_t -@@ -392,6 +391,52 @@ - return result; - } - -+static dtv_t * -+_dl_resize_dtv (dtv_t *dtv) -+{ -+ /* Resize the dtv. */ -+ dtv_t *newp; -+ /* Load GL(dl_tls_max_dtv_idx) atomically since it may be written to by -+ other threads concurrently. -- We don't have the required atomic -+ infrastructure to load dl_tls_max_dtv_idx atomically, but on all the -+ architectures we care about it should load atomically. If this had -+ an atomic_load_acquire we would still be missing the releases for -+ the writes. */ -+ size_t newsize = GL(dl_tls_max_dtv_idx) + DTV_SURPLUS; -+ size_t oldsize = dtv[-1].counter; -+ -+#if SHARED -+ if (dtv == GL(dl_initial_dtv)) -+ { -+ /* This is the initial dtv that was either statically allocated in -+ __libc_setup_tls or allocated during rtld startup using the -+ dl-minimal.c malloc instead of the real malloc. We can't free -+ it, we have to abandon the old storage. */ -+ -+ newp = malloc ((2 + newsize) * sizeof (dtv_t)); -+ if (newp == NULL) -+ oom (); -+ memcpy (newp, &dtv[-1], (2 + oldsize) * sizeof (dtv_t)); -+ } -+ else -+#endif -+ { -+ newp = realloc (&dtv[-1], -+ (2 + newsize) * sizeof (dtv_t)); -+ if (newp == NULL) -+ oom (); -+ } -+ -+ newp[0].counter = newsize; -+ -+ /* Clear the newly allocated part. */ -+ memset (newp + 2 + oldsize, '\0', -+ (newsize - oldsize) * sizeof (dtv_t)); -+ -+ /* Return the generation counter. */ -+ return &newp[1]; -+} -+ - - void * - internal_function -@@ -406,6 +451,16 @@ - size_t total = 0; - size_t maxgen = 0; - -+ /* Check if the current dtv is big enough. */ -+ if (dtv[-1].counter < GL(dl_tls_max_dtv_idx)) -+ { -+ /* Resize the dtv. */ -+ dtv = _dl_resize_dtv (dtv); -+ -+ /* Install this new dtv in the thread data structures. */ -+ INSTALL_DTV (result, &dtv[-1]); -+ } -+ - /* We have to prepare the dtv for all currently loaded modules using - TLS. For those which are dynamically loaded we add the values - indicating deferred allocation. */ -@@ -637,41 +692,10 @@ - assert (total + cnt == modid); - if (dtv[-1].counter < modid) - { -- /* Reallocate the dtv. */ -- dtv_t *newp; -- size_t newsize = GL(dl_tls_max_dtv_idx) + DTV_SURPLUS; -- size_t oldsize = dtv[-1].counter; -- -- assert (map->l_tls_modid <= newsize); -- -- if (dtv == GL(dl_initial_dtv)) -- { -- /* This is the initial dtv that was allocated -- during rtld startup using the dl-minimal.c -- malloc instead of the real malloc. We can't -- free it, we have to abandon the old storage. */ -- -- newp = malloc ((2 + newsize) * sizeof (dtv_t)); -- if (newp == NULL) -- oom (); -- memcpy (newp, &dtv[-1], (2 + oldsize) * sizeof (dtv_t)); -- } -- else -- { -- newp = realloc (&dtv[-1], -- (2 + newsize) * sizeof (dtv_t)); -- if (newp == NULL) -- oom (); -- } -- -- newp[0].counter = newsize; -- -- /* Clear the newly allocated part. */ -- memset (newp + 2 + oldsize, '\0', -- (newsize - oldsize) * sizeof (dtv_t)); -+ /* Resize the dtv. */ -+ dtv = _dl_resize_dtv (dtv); - -- /* Point dtv to the generation counter. */ -- dtv = &newp[1]; -+ assert (modid <= dtv[-1].counter); - - /* Install this new dtv in the thread data - structures. */ -diff -urN glibc-2.12-2-gc4ccff1/nptl/Makefile glibc-2.12-2-gc4ccff1.mod/nptl/Makefile ---- glibc-2.12-2-gc4ccff1/nptl/Makefile 2015-02-18 14:15:28.073462028 -0500 -+++ glibc-2.12-2-gc4ccff1.mod/nptl/Makefile 2015-02-18 14:15:49.817786667 -0500 -@@ -245,7 +245,7 @@ - tst-exec1 tst-exec2 tst-exec3 tst-exec4 \ - tst-exit1 tst-exit2 tst-exit3 \ - tst-stdio1 tst-stdio2 \ -- tst-stack1 tst-stack2 tst-stack3 \ -+ tst-stack1 tst-stack2 tst-stack3 tst-stack4 \ - tst-unload \ - tst-dlsym1 \ - tst-sysconf \ -@@ -304,7 +304,7 @@ - - modules-names = tst-atfork2mod tst-tls3mod tst-tls4moda tst-tls4modb \ - tst-tls5mod tst-tls5moda tst-tls5modb tst-tls5modc \ -- tst-tls5modd tst-tls5mode tst-tls5modf \ -+ tst-tls5modd tst-tls5mode tst-tls5modf tst-stack4mod \ - tst-_res1mod1 tst-_res1mod2 tst-execstack-mod tst-fini1mod - extra-test-objs += $(addsuffix .os,$(strip $(modules-names))) tst-cleanup4aux.o - test-extras += $(modules-names) -@@ -459,6 +459,19 @@ - $(common-objpfx)malloc/mtrace $(objpfx)tst-stack3.mtrace > $@ - generated += tst-stack3-mem tst-stack3.mtrace - -+$(objpfx)tst-stack4: $(libdl) $(shared-thread-library) -+tst-stack4mod.sos=$(shell for i in 0 1 2 3 4 5 6 7 8 9 10 \ -+ 11 12 13 14 15 16 17 18 19; do \ -+ for j in 0 1 2 3 4 5 6 7 8 9 10 \ -+ 11 12 13 14 15 16 17 18 19; do \ -+ echo $(objpfx)tst-stack4mod-$$i-$$j.so; \ -+ done; done) -+$(objpfx)tst-stack4.out: $(tst-stack4mod.sos) -+$(tst-stack4mod.sos): $(objpfx)tst-stack4mod.so -+ cp -f $< $@ -+clean: -+ rm -f $(tst-stack4mod.sos) -+ - $(objpfx)tst-cleanup4: $(objpfx)tst-cleanup4aux.o $(shared-thread-library) - $(objpfx)tst-cleanupx4: $(objpfx)tst-cleanup4aux.o $(shared-thread-library) - -diff -urN glibc-2.12-2-gc4ccff1/nptl/tst-stack4.c glibc-2.12-2-gc4ccff1.mod/nptl/tst-stack4.c ---- glibc-2.12-2-gc4ccff1/nptl/tst-stack4.c 1969-12-31 19:00:00.000000000 -0500 -+++ glibc-2.12-2-gc4ccff1.mod/nptl/tst-stack4.c 2015-02-18 14:15:49.817786667 -0500 -@@ -0,0 +1,159 @@ -+/* Test DTV size oveflow when pthread_create reuses old DTV and TLS is -+ used by dlopened shared object. -+ Copyright (C) 2014 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+/* The choices of thread count, and file counts are arbitary. -+ The point is simply to run enough threads that an exiting -+ thread has it's stack reused by another thread at the same -+ time as new libraries have been loaded. */ -+#define DSO_SHARED_FILES 20 -+#define DSO_OPEN_THREADS 20 -+#define DSO_EXEC_THREADS 2 -+ -+/* Used to make sure that only one thread is calling dlopen and dlclose -+ at a time. */ -+pthread_mutex_t g_lock; -+ -+typedef void (*function) (void); -+ -+void * -+dso_invoke(void *dso_fun) -+{ -+ function *fun_vec = (function *) dso_fun; -+ int dso; -+ -+ for (dso = 0; dso < DSO_SHARED_FILES; dso++) -+ (*fun_vec[dso]) (); -+ -+ pthread_exit (NULL); -+} -+ -+void * -+dso_process (void * p) -+{ -+ void *handle[DSO_SHARED_FILES]; -+ function fun_vec[DSO_SHARED_FILES]; -+ char dso_path[DSO_SHARED_FILES][100]; -+ int dso; -+ uintptr_t t = (uintptr_t) p; -+ -+ /* Open DSOs and get a function. */ -+ for (dso = 0; dso < DSO_SHARED_FILES; dso++) -+ { -+ sprintf (dso_path[dso], "tst-stack4mod-%i-%i.so", t, dso); -+ -+ pthread_mutex_lock (&g_lock); -+ -+ handle[dso] = dlopen (dso_path[dso], RTLD_NOW); -+ assert (handle[dso]); -+ -+ fun_vec[dso] = (function) dlsym (handle[dso], "function"); -+ assert (fun_vec[dso]); -+ -+ pthread_mutex_unlock (&g_lock); -+ } -+ -+ /* Spawn workers. */ -+ pthread_t thread[DSO_EXEC_THREADS]; -+ int i, ret; -+ uintptr_t result = 0; -+ for (i = 0; i < DSO_EXEC_THREADS; i++) -+ { -+ pthread_mutex_lock (&g_lock); -+ ret = pthread_create (&thread[i], NULL, dso_invoke, (void *) fun_vec); -+ if (ret != 0) -+ { -+ printf ("pthread_create failed: %d\n", ret); -+ result = 1; -+ } -+ pthread_mutex_unlock (&g_lock); -+ } -+ -+ if (!result) -+ for (i = 0; i < DSO_EXEC_THREADS; i++) -+ { -+ ret = pthread_join (thread[i], NULL); -+ if (ret != 0) -+ { -+ printf ("pthread_join failed: %d\n", ret); -+ result = 1; -+ } -+ } -+ -+ /* Close all DSOs. */ -+ for (dso = 0; dso < DSO_SHARED_FILES; dso++) -+ { -+ pthread_mutex_lock (&g_lock); -+ dlclose (handle[dso]); -+ pthread_mutex_unlock (&g_lock); -+ } -+ -+ /* Exit. */ -+ pthread_exit ((void *) result); -+} -+ -+static int -+do_test (void) -+{ -+ pthread_t thread[DSO_OPEN_THREADS]; -+ int i,j; -+ int ret; -+ int result = 0; -+ -+ pthread_mutex_init (&g_lock, NULL); -+ -+ /* 100 is arbitrary here and is known to trigger PR 13862. */ -+ for (j = 0; j < 100; j++) -+ { -+ for (i = 0; i < DSO_OPEN_THREADS; i++) -+ { -+ ret = pthread_create (&thread[i], NULL, dso_process, -+ (void *) (uintptr_t) i); -+ if (ret != 0) -+ { -+ printf ("pthread_create failed: %d\n", ret); -+ result = 1; -+ } -+ } -+ -+ if (result) -+ break; -+ -+ for (i = 0; i < DSO_OPEN_THREADS; i++) -+ { -+ ret = pthread_join (thread[i], NULL); -+ if (ret != 0) -+ { -+ printf ("pthread_join failed: %d\n", ret); -+ result = 1; -+ } -+ } -+ } -+ -+ return result; -+} -+ -+#define TEST_FUNCTION do_test () -+#define TIMEOUT 100 -+#include "../test-skeleton.c" -diff -urN glibc-2.12-2-gc4ccff1/nptl/tst-stack4mod.c glibc-2.12-2-gc4ccff1.mod/nptl/tst-stack4mod.c ---- glibc-2.12-2-gc4ccff1/nptl/tst-stack4mod.c 1969-12-31 19:00:00.000000000 -0500 -+++ glibc-2.12-2-gc4ccff1.mod/nptl/tst-stack4mod.c 2015-02-18 14:15:49.817786667 -0500 -@@ -0,0 +1,28 @@ -+/* This tests DTV usage with TLS in dlopened shared object. -+ Copyright (C) 2014 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+/* 256 is arbitrary here and is known to trigger PR 13862. */ -+__thread int var[256] attribute_hidden = {0}; -+ -+void -+function (void) -+{ -+ int i; -+ for (i = 0; i < sizeof (var) / sizeof (int); i++) -+ var[i] = i; -+} diff --git a/src/patches/glibc/glibc-rh1124204.patch b/src/patches/glibc/glibc-rh1124204.patch deleted file mode 100644 index f14c4cb245..0000000000 --- a/src/patches/glibc/glibc-rh1124204.patch +++ /dev/null @@ -1,47 +0,0 @@ -# -# Derived from this upstream commit: -# -# commit 58a1335e76a553e1cf4edeebc27f16fc9b53d6e6 -# Author: Petr Baudis -# Date: Thu Mar 14 01:16:53 2013 +0100 -# -# Fix __times() handling of EFAULT when buf is NULL -# -# 2013-03-14 Petr Baudis -# -# * sysdeps/unix/sysv/linux/times.c (__times): On EFAULT, test -# for non-NULL pointer before the memory validity test. Pointed -# out by Holger Brunck . -# -diff --git a/sysdeps/unix/sysv/linux/times.c b/sysdeps/unix/sysv/linux/times.c -index f3b5f01..e59bb4e 100644 ---- a/sysdeps/unix/sysv/linux/times.c -+++ b/sysdeps/unix/sysv/linux/times.c -@@ -26,13 +26,14 @@ __times (struct tms *buf) - INTERNAL_SYSCALL_DECL (err); - clock_t ret = INTERNAL_SYSCALL (times, err, 1, buf); - if (INTERNAL_SYSCALL_ERROR_P (ret, err) -- && __builtin_expect (INTERNAL_SYSCALL_ERRNO (ret, err) == EFAULT, 0)) -+ && __builtin_expect (INTERNAL_SYSCALL_ERRNO (ret, err) == EFAULT, 0) -+ && buf) - { - /* This might be an error or not. For architectures which have - no separate return value and error indicators we cannot - distinguish a return value of -1 from an error. Do it the -- hard way. We crash applications which pass in an invalid BUF -- pointer. */ -+ hard way. We crash applications which pass in an invalid -+ non-NULL BUF pointer. Linux allows BUF to be NULL. */ - #define touch(v) \ - do { \ - clock_t temp = v; \ -@@ -44,7 +45,8 @@ __times (struct tms *buf) - touch (buf->tms_cutime); - touch (buf->tms_cstime); - -- /* If we come here the memory is valid and the kernel did not -+ /* If we come here the memory is valid (or BUF is NULL, which is -+ * a valid condition for the kernel syscall) and the kernel did not - return an EFAULT error. Return the value given by the kernel. */ - } - diff --git a/src/patches/glibc/glibc-rh1125307.patch b/src/patches/glibc/glibc-rh1125307.patch deleted file mode 100644 index 72ba01db2a..0000000000 --- a/src/patches/glibc/glibc-rh1125307.patch +++ /dev/null @@ -1,19 +0,0 @@ -commit a11892631d92f594c690d0d50a642b0d1aba58b8 -Author: Ondřej Bílka -Date: Wed May 7 14:08:57 2014 +0200 - - Fix typo in nscd/selinux.c - -diff --git a/nscd/selinux.c b/nscd/selinux.c -index 9a8a5a8..eaed6dd 100644 ---- a/nscd/selinux.c -+++ b/nscd/selinux.c -@@ -372,7 +372,7 @@ nscd_request_avc_has_perm (int fd, request_type req) - /* Get the security class for nscd. If this fails we will likely be - unable to do anything unless avc_deny_unknown is 0. */ - sc_nscd = string_to_security_class ("nscd"); -- if (perm == 0 && avc_deny_unknown == 1) -+ if (sc_nscd == 0 && avc_deny_unknown == 1) - dbg_log (_("Error getting security class for nscd.")); - - /* Convert permission to AVC bits. */ diff --git a/src/patches/glibc/glibc-rh1133810-1.patch b/src/patches/glibc/glibc-rh1133810-1.patch deleted file mode 100644 index 12b99499ff..0000000000 --- a/src/patches/glibc/glibc-rh1133810-1.patch +++ /dev/null @@ -1,199 +0,0 @@ -2014-08-21 Florian Weimer - - [BZ #17187] - * iconv/gconv_trans.c (struct known_trans, search_tree, lock, - trans_compare, open_translit, __gconv_translit_find): - Remove module loading code. - -diff --git a/iconv/gconv_trans.c b/iconv/gconv_trans.c -index 1e25854..d71c029 100644 ---- a/iconv/gconv_trans.c -+++ b/iconv/gconv_trans.c -@@ -238,181 +238,11 @@ __gconv_transliterate (struct __gconv_step *step, - return __GCONV_ILLEGAL_INPUT; - } - -- --/* Structure to represent results of found (or not) transliteration -- modules. */ --struct known_trans --{ -- /* This structure must remain the first member. */ -- struct trans_struct info; -- -- char *fname; -- void *handle; -- int open_count; --}; -- -- --/* Tree with results of previous calls to __gconv_translit_find. */ --static void *search_tree; -- --/* We modify global data. */ --__libc_lock_define_initialized (static, lock); -- -- --/* Compare two transliteration entries. */ --static int --trans_compare (const void *p1, const void *p2) --{ -- const struct known_trans *s1 = (const struct known_trans *) p1; -- const struct known_trans *s2 = (const struct known_trans *) p2; -- -- return strcmp (s1->info.name, s2->info.name); --} -- -- --/* Open (maybe reopen) the module named in the struct. Get the function -- and data structure pointers we need. */ --static int --open_translit (struct known_trans *trans) --{ -- __gconv_trans_query_fct queryfct; -- -- trans->handle = __libc_dlopen (trans->fname); -- if (trans->handle == NULL) -- /* Not available. */ -- return 1; -- -- /* Find the required symbol. */ -- queryfct = __libc_dlsym (trans->handle, "gconv_trans_context"); -- if (queryfct == NULL) -- { -- /* We cannot live with that. */ -- close_and_out: -- __libc_dlclose (trans->handle); -- trans->handle = NULL; -- return 1; -- } -- -- /* Get the context. */ -- if (queryfct (trans->info.name, &trans->info.csnames, &trans->info.ncsnames) -- != 0) -- goto close_and_out; -- -- /* Of course we also have to have the actual function. */ -- trans->info.trans_fct = __libc_dlsym (trans->handle, "gconv_trans"); -- if (trans->info.trans_fct == NULL) -- goto close_and_out; -- -- /* Now the optional functions. */ -- trans->info.trans_init_fct = -- __libc_dlsym (trans->handle, "gconv_trans_init"); -- trans->info.trans_context_fct = -- __libc_dlsym (trans->handle, "gconv_trans_context"); -- trans->info.trans_end_fct = -- __libc_dlsym (trans->handle, "gconv_trans_end"); -- -- trans->open_count = 1; -- -- return 0; --} -- -- - int - internal_function - __gconv_translit_find (struct trans_struct *trans) - { -- struct known_trans **found; -- const struct path_elem *runp; -- int res = 1; -- -- /* We have to have a name. */ -- assert (trans->name != NULL); -- -- /* Acquire the lock. */ -- __libc_lock_lock (lock); -- -- /* See whether we know this module already. */ -- found = __tfind (trans, &search_tree, trans_compare); -- if (found != NULL) -- { -- /* Is this module available? */ -- if ((*found)->handle != NULL) -- { -- /* Maybe we have to reopen the file. */ -- if ((*found)->handle != (void *) -1) -- /* The object is not unloaded. */ -- res = 0; -- else if (open_translit (*found) == 0) -- { -- /* Copy the data. */ -- *trans = (*found)->info; -- (*found)->open_count++; -- res = 0; -- } -- } -- } -- else -- { -- size_t name_len = strlen (trans->name) + 1; -- int need_so = 0; -- struct known_trans *newp; -- -- /* We have to continue looking for the module. */ -- if (__gconv_path_elem == NULL) -- __gconv_get_path (); -- -- /* See whether we have to append .so. */ -- if (name_len <= 4 || memcmp (&trans->name[name_len - 4], ".so", 3) != 0) -- need_so = 1; -- -- /* Create a new entry. */ -- newp = (struct known_trans *) malloc (sizeof (struct known_trans) -- + (__gconv_max_path_elem_len -- + name_len + 3) -- + name_len); -- if (newp != NULL) -- { -- char *cp; -- -- /* Clear the struct. */ -- memset (newp, '\0', sizeof (struct known_trans)); -- -- /* Store a copy of the module name. */ -- newp->info.name = cp = (char *) (newp + 1); -- cp = __mempcpy (cp, trans->name, name_len); -- -- newp->fname = cp; -- -- /* Search in all the directories. */ -- for (runp = __gconv_path_elem; runp->name != NULL; ++runp) -- { -- cp = __mempcpy (__stpcpy ((char *) newp->fname, runp->name), -- trans->name, name_len); -- if (need_so) -- memcpy (cp, ".so", sizeof (".so")); -- -- if (open_translit (newp) == 0) -- { -- /* We found a module. */ -- res = 0; -- break; -- } -- } -- -- if (res) -- newp->fname = NULL; -- -- /* In any case we'll add the entry to our search tree. */ -- if (__tsearch (newp, &search_tree, trans_compare) == NULL) -- { -- /* Yickes, this should not happen. Unload the object. */ -- res = 1; -- /* XXX unload here. */ -- } -- } -- } -- -- __libc_lock_unlock (lock); -- -- return res; -+ /* This function always fails. Transliteration module loading is -+ not implemented. */ -+ return 1; - } --- -1.9.3 - diff --git a/src/patches/glibc/glibc-rh1133810-2.patch b/src/patches/glibc/glibc-rh1133810-2.patch deleted file mode 100644 index 8148abbbce..0000000000 --- a/src/patches/glibc/glibc-rh1133810-2.patch +++ /dev/null @@ -1,625 +0,0 @@ -commit 585367266923156ac6fb789939a923641ba5aaf4 -Author: Florian Weimer -Date: Wed May 28 14:05:03 2014 +0200 - - manual: Update the locale documentation - -commit 4e8f95a0df7c2300b830ec12c0ae1e161bc8a8a3 -Author: Florian Weimer -Date: Mon May 12 15:24:12 2014 +0200 - - _nl_find_locale: Improve handling of crafted locale names [BZ #17137] - - Prevent directory traversal in locale-related environment variables - (CVE-2014-0475). - -commit d183645616b0533b3acee28f1a95570bffbdf50f -Author: Florian Weimer -Date: Wed May 28 14:41:52 2014 +0200 - - setlocale: Use the heap for the copy of the locale argument - - This avoids alloca calls with potentially large arguments. - -diff -pruN glibc-2.18/locale/findlocale.c glibc-2.18.patched/locale/findlocale.c ---- glibc-2.18/locale/findlocale.c 2013-08-11 04:22:55.000000000 +0530 -+++ glibc-2.18.patched/locale/findlocale.c 2014-08-26 16:14:50.403253778 +0530 -@@ -17,6 +17,7 @@ - 02111-1307 USA. */ - - #include -+#include - #include - #include - #include -@@ -57,6 +58,45 @@ struct loaded_l10nfile *_nl_locale_file_ - - const char _nl_default_locale_path[] attribute_hidden = LOCALEDIR; - -+/* Checks if the name is actually present, that is, not NULL and not -+ empty. */ -+static inline int -+name_present (const char *name) -+{ -+ return name != NULL && name[0] != '\0'; -+} -+ -+/* Checks that the locale name neither extremely long, nor contains a -+ ".." path component (to prevent directory traversal). */ -+static inline int -+valid_locale_name (const char *name) -+{ -+ /* Not set. */ -+ size_t namelen = strlen (name); -+ /* Name too long. The limit is arbitrary and prevents stack overflow -+ issues later. */ -+ if (__builtin_expect (namelen > 255, 0)) -+ return 0; -+ /* Directory traversal attempt. */ -+ static const char slashdot[4] = {'/', '.', '.', '/'}; -+ if (__builtin_expect (memmem (name, namelen, -+ slashdot, sizeof (slashdot)) != NULL, 0)) -+ return 0; -+ if (namelen == 2 && __builtin_expect (name[0] == '.' && name [1] == '.', 0)) -+ return 0; -+ if (namelen >= 3 -+ && __builtin_expect (((name[0] == '.' -+ && name[1] == '.' -+ && name[2] == '/') -+ || (name[namelen - 3] == '/' -+ && name[namelen - 2] == '.' -+ && name[namelen - 1] == '.')), 0)) -+ return 0; -+ /* If there is a slash in the name, it must start with one. */ -+ if (__builtin_expect (memchr (name, '/', namelen) != NULL, 0) && name[0] != '/') -+ return 0; -+ return 1; -+} - - struct __locale_data * - internal_function -@@ -65,7 +105,7 @@ _nl_find_locale (const char *locale_path - { - int mask; - /* Name of the locale for this category. */ -- char *loc_name; -+ char *loc_name = (char *) *name; - const char *language; - const char *modifier; - const char *territory; -@@ -73,31 +113,39 @@ _nl_find_locale (const char *locale_path - const char *normalized_codeset; - struct loaded_l10nfile *locale_file; - -- if ((*name)[0] == '\0') -+ if (loc_name[0] == '\0') - { - /* The user decides which locale to use by setting environment - variables. */ -- *name = getenv ("LC_ALL"); -- if (*name == NULL || (*name)[0] == '\0') -- *name = getenv (_nl_category_names.str -+ loc_name = getenv ("LC_ALL"); -+ if (!name_present (loc_name)) -+ loc_name = getenv (_nl_category_names.str - + _nl_category_name_idxs[category]); -- if (*name == NULL || (*name)[0] == '\0') -- *name = getenv ("LANG"); -+ if (!name_present (loc_name)) -+ loc_name = getenv ("LANG"); -+ if (!name_present (loc_name)) -+ loc_name = (char *) _nl_C_name; - } - -- if (*name == NULL || (*name)[0] == '\0' -- || (__builtin_expect (__libc_enable_secure, 0) -- && strchr (*name, '/') != NULL)) -- *name = (char *) _nl_C_name; -+ /* We used to fall back to the C locale if the name contains a slash -+ character '/', but we now check for directory traversal in -+ valid_locale_name, so this is no longer necessary. */ - -- if (__builtin_expect (strcmp (*name, _nl_C_name), 1) == 0 -- || __builtin_expect (strcmp (*name, _nl_POSIX_name), 1) == 0) -+ if (__builtin_expect (strcmp (loc_name, _nl_C_name), 1) == 0 -+ || __builtin_expect (strcmp (loc_name, _nl_POSIX_name), 1) == 0) - { - /* We need not load anything. The needed data is contained in - the library itself. */ - *name = (char *) _nl_C_name; - return _nl_C[category]; - } -+ else if (!valid_locale_name (loc_name)) -+ { -+ __set_errno (EINVAL); -+ return NULL; -+ } -+ -+ *name = loc_name; - - /* We really have to load some data. First we try the archive, - but only if there was no LOCPATH environment variable specified. */ -diff -pruN glibc-2.18/locale/setlocale.c glibc-2.18.patched/locale/setlocale.c ---- glibc-2.18/locale/setlocale.c 2013-08-11 04:22:55.000000000 +0530 -+++ glibc-2.18.patched/locale/setlocale.c 2014-08-26 16:14:50.401253764 +0530 -@@ -272,6 +272,8 @@ setlocale (int category, const char *loc - of entries of the form `CATEGORY=VALUE'. */ - const char *newnames[__LC_LAST]; - struct __locale_data *newdata[__LC_LAST]; -+ /* Copy of the locale argument, for in-place splitting. */ -+ char *locale_copy = NULL; - - /* Set all name pointers to the argument name. */ - for (category = 0; category < __LC_LAST; ++category) -@@ -281,7 +283,13 @@ setlocale (int category, const char *loc - if (__builtin_expect (strchr (locale, ';') != NULL, 0)) - { - /* This is a composite name. Make a copy and split it up. */ -- char *np = strdupa (locale); -+ locale_copy = strdup (locale); -+ if (__builtin_expect (locale_copy == NULL, 0)) -+ { -+ __libc_rwlock_unlock (__libc_setlocale_lock); -+ return NULL; -+ } -+ char *np = locale_copy; - char *cp; - int cnt; - -@@ -299,6 +307,7 @@ setlocale (int category, const char *loc - { - error_return: - __libc_rwlock_unlock (__libc_setlocale_lock); -+ free (locale_copy); - - /* Bogus category name. */ - ERROR_RETURN; -@@ -391,8 +400,9 @@ setlocale (int category, const char *loc - /* Critical section left. */ - __libc_rwlock_unlock (__libc_setlocale_lock); - -- /* Free the resources (the locale path variable). */ -+ /* Free the resources. */ - free (locale_path); -+ free (locale_copy); - - return composite; - } -diff -pruN glibc-2.18/localedata/Makefile glibc-2.18.patched/localedata/Makefile ---- glibc-2.18/localedata/Makefile 2014-08-26 16:15:22.656474571 +0530 -+++ glibc-2.18.patched/localedata/Makefile 2014-08-26 16:14:50.403253778 +0530 -@@ -77,7 +77,7 @@ locale_test_suite := tst_iswalnum tst_is - - tests = $(locale_test_suite) tst-digits tst-setlocale bug-iconv-trans \ - tst-leaks tst-mbswcs6 tst-xlocale1 tst-xlocale2 bug-usesetlocale \ -- tst-strfmon1 tst-sscanf tst-strptime -+ tst-strfmon1 tst-sscanf tst-strptime tst-setlocale3 - ifeq (yes,$(build-shared)) - ifneq (no,$(PERL)) - tests: $(objpfx)mtrace-tst-leaks -@@ -288,6 +288,7 @@ tst-strfmon1-ENV = $(TEST_MBWC_ENV) - tst-strptime-ENV = $(TEST_MBWC_ENV) - - tst-setlocale-ENV = LOCPATH=$(common-objpfx)localedata LC_ALL=ja_JP.EUC-JP -+tst-setlocale3-ENV = LOCPATH=$(common-objpfx)localedata - - bug-iconv-trans-ENV = LOCPATH=$(common-objpfx)localedata - -diff -pruN glibc-2.18/localedata/tst-setlocale3.c glibc-2.18.patched/localedata/tst-setlocale3.c ---- glibc-2.18/localedata/tst-setlocale3.c 1970-01-01 05:30:00.000000000 +0530 -+++ glibc-2.18.patched/localedata/tst-setlocale3.c 2014-08-26 16:14:50.403253778 +0530 -@@ -0,0 +1,203 @@ -+/* Regression test for setlocale invalid environment variable handling. -+ Copyright (C) 2014 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+ -+/* The result of setlocale may be overwritten by subsequent calls, so -+ this wrapper makes a copy. */ -+static char * -+setlocale_copy (int category, const char *locale) -+{ -+ const char *result = setlocale (category, locale); -+ if (result == NULL) -+ return NULL; -+ return strdup (result); -+} -+ -+static char *de_locale; -+ -+static void -+setlocale_fail (const char *envstring) -+{ -+ setenv ("LC_CTYPE", envstring, 1); -+ if (setlocale (LC_CTYPE, "") != NULL) -+ { -+ printf ("unexpected setlocale success for \"%s\" locale\n", envstring); -+ exit (1); -+ } -+ const char *newloc = setlocale (LC_CTYPE, NULL); -+ if (strcmp (newloc, de_locale) != 0) -+ { -+ printf ("failed setlocale call \"%s\" changed locale to \"%s\"\n", -+ envstring, newloc); -+ exit (1); -+ } -+} -+ -+static void -+setlocale_success (const char *envstring) -+{ -+ setenv ("LC_CTYPE", envstring, 1); -+ char *newloc = setlocale_copy (LC_CTYPE, ""); -+ if (newloc == NULL) -+ { -+ printf ("setlocale for \"%s\": %m\n", envstring); -+ exit (1); -+ } -+ if (strcmp (newloc, de_locale) == 0) -+ { -+ printf ("setlocale with LC_CTYPE=\"%s\" left locale at \"%s\"\n", -+ envstring, de_locale); -+ exit (1); -+ } -+ if (setlocale (LC_CTYPE, de_locale) == NULL) -+ { -+ printf ("restoring locale \"%s\" with LC_CTYPE=\"%s\": %m\n", -+ de_locale, envstring); -+ exit (1); -+ } -+ char *newloc2 = setlocale_copy (LC_CTYPE, newloc); -+ if (newloc2 == NULL) -+ { -+ printf ("restoring locale \"%s\" following \"%s\": %m\n", -+ newloc, envstring); -+ exit (1); -+ } -+ if (strcmp (newloc, newloc2) != 0) -+ { -+ printf ("representation of locale \"%s\" changed from \"%s\" to \"%s\"", -+ envstring, newloc, newloc2); -+ exit (1); -+ } -+ free (newloc); -+ free (newloc2); -+ -+ if (setlocale (LC_CTYPE, de_locale) == NULL) -+ { -+ printf ("restoring locale \"%s\" with LC_CTYPE=\"%s\": %m\n", -+ de_locale, envstring); -+ exit (1); -+ } -+} -+ -+/* Checks that a known-good locale still works if LC_ALL contains a -+ value which should be ignored. */ -+static void -+setlocale_ignore (const char *to_ignore) -+{ -+ const char *fr_locale = "fr_FR.UTF-8"; -+ setenv ("LC_CTYPE", fr_locale, 1); -+ char *expected_locale = setlocale_copy (LC_CTYPE, ""); -+ if (expected_locale == NULL) -+ { -+ printf ("setlocale with LC_CTYPE=\"%s\" failed: %m\n", fr_locale); -+ exit (1); -+ } -+ if (setlocale (LC_CTYPE, de_locale) == NULL) -+ { -+ printf ("failed to restore locale: %m\n"); -+ exit (1); -+ } -+ unsetenv ("LC_CTYPE"); -+ -+ setenv ("LC_ALL", to_ignore, 1); -+ setenv ("LC_CTYPE", fr_locale, 1); -+ const char *actual_locale = setlocale (LC_CTYPE, ""); -+ if (actual_locale == NULL) -+ { -+ printf ("setlocale with LC_ALL, LC_CTYPE=\"%s\" failed: %m\n", -+ fr_locale); -+ exit (1); -+ } -+ if (strcmp (actual_locale, expected_locale) != 0) -+ { -+ printf ("setlocale under LC_ALL failed: got \"%s\", expected \"%s\"\n", -+ actual_locale, expected_locale); -+ exit (1); -+ } -+ unsetenv ("LC_CTYPE"); -+ setlocale_success (fr_locale); -+ unsetenv ("LC_ALL"); -+ free (expected_locale); -+} -+ -+static int -+do_test (void) -+{ -+ /* The glibc test harness sets this environment variable -+ uncondionally. */ -+ unsetenv ("LC_ALL"); -+ -+ de_locale = setlocale_copy (LC_CTYPE, "de_DE.UTF-8"); -+ if (de_locale == NULL) -+ { -+ printf ("setlocale (LC_CTYPE, \"de_DE.UTF-8\"): %m\n"); -+ return 1; -+ } -+ setlocale_success ("C"); -+ setlocale_success ("en_US.UTF-8"); -+ setlocale_success ("/en_US.UTF-8"); -+ setlocale_success ("//en_US.UTF-8"); -+ setlocale_ignore (""); -+ -+ setlocale_fail ("does-not-exist"); -+ setlocale_fail ("/"); -+ setlocale_fail ("/../localedata/en_US.UTF-8"); -+ setlocale_fail ("en_US.UTF-8/"); -+ setlocale_fail ("en_US.UTF-8/.."); -+ setlocale_fail ("en_US.UTF-8/../en_US.UTF-8"); -+ setlocale_fail ("../localedata/en_US.UTF-8"); -+ { -+ size_t large_length = 1024; -+ char *large_name = malloc (large_length + 1); -+ if (large_name == NULL) -+ { -+ puts ("malloc failure"); -+ return 1; -+ } -+ memset (large_name, '/', large_length); -+ const char *suffix = "en_US.UTF-8"; -+ strcpy (large_name + large_length - strlen (suffix), suffix); -+ setlocale_fail (large_name); -+ free (large_name); -+ } -+ { -+ size_t huge_length = 64 * 1024 * 1024; -+ char *huge_name = malloc (huge_length + 1); -+ if (huge_name == NULL) -+ { -+ puts ("malloc failure"); -+ return 1; -+ } -+ memset (huge_name, 'X', huge_length); -+ huge_name[huge_length] = '\0'; -+ /* Construct a composite locale specification. */ -+ const char *prefix = "LC_CTYPE=de_DE.UTF-8;LC_TIME="; -+ memcpy (huge_name, prefix, strlen (prefix)); -+ setlocale_fail (huge_name); -+ free (huge_name); -+ } -+ -+ return 0; -+} -+ -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" -diff -pruN glibc-2.18/manual/locale.texi glibc-2.18.patched/manual/locale.texi ---- glibc-2.18/manual/locale.texi 2013-08-11 04:22:55.000000000 +0530 -+++ glibc-2.18.patched/manual/locale.texi 2014-08-26 16:14:50.404253785 +0530 -@@ -29,6 +29,7 @@ will follow the conventions preferred by - * Setting the Locale:: How a program specifies the locale - with library functions. - * Standard Locales:: Locale names available on all systems. -+* Locale Names:: Format of system-specific locale names. - * Locale Information:: How to access the information for the locale. - * Formatting Numbers:: A dedicated function to format numbers. - * Yes-or-No Questions:: Check a Response against the locale. -@@ -99,14 +100,16 @@ locale named @samp{espana-castellano} to - most of Spain. - - The set of locales supported depends on the operating system you are --using, and so do their names. We can't make any promises about what --locales will exist, except for one standard locale called @samp{C} or --@samp{POSIX}. Later we will describe how to construct locales. --@comment (@pxref{Building Locale Files}). -+using, and so do their names, except that the standard locale called -+@samp{C} or @samp{POSIX} always exist. @xref{Locale Names}. -+ -+In order to force the system to always use the default locale, the -+user can set the @code{LC_ALL} environment variable to @samp{C}. - - @cindex combining locales --A user also has the option of specifying different locales for different --purposes---in effect, choosing a mixture of multiple locales. -+A user also has the option of specifying different locales for -+different purposes---in effect, choosing a mixture of multiple -+locales. @xref{Locale Categories}. - - For example, the user might specify the locale @samp{espana-castellano} - for most purposes, but specify the locale @samp{usa-english} for -@@ -120,7 +123,7 @@ which locales apply. However, the user - for a particular subset of those purposes. - - @node Locale Categories, Setting the Locale, Choosing Locale, Locales --@section Categories of Activities that Locales Affect -+@section Locale Categories - @cindex categories for locales - @cindex locale categories - -@@ -128,7 +131,11 @@ The purposes that locales serve are grou - that a user or a program can choose the locale for each category - independently. Here is a table of categories; each name is both an - environment variable that a user can set, and a macro name that you can --use as an argument to @code{setlocale}. -+use as the first argument to @code{setlocale}. -+ -+The contents of the environment variable (or the string in the second -+argument to @code{setlocale}) has to be a valid locale name. -+@xref{Locale Names}. - - @vtable @code - @comment locale.h -@@ -172,7 +179,7 @@ for affirmative and negative responses. - @comment locale.h - @comment ISO - @item LC_ALL --This is not an environment variable; it is only a macro that you can use -+This is not a category; it is only a macro that you can use - with @code{setlocale} to set a single locale for all purposes. Setting - this environment variable overwrites all selections by the other - @code{LC_*} variables or @code{LANG}. -@@ -225,13 +232,7 @@ The symbols in this section are defined - @comment ISO - @deftypefun {char *} setlocale (int @var{category}, const char *@var{locale}) - The function @code{setlocale} sets the current locale for category --@var{category} to @var{locale}. A list of all the locales the system --provides can be created by running -- --@pindex locale --@smallexample -- locale -a --@end smallexample -+@var{category} to @var{locale}. - - If @var{category} is @code{LC_ALL}, this specifies the locale for all - purposes. The other possible values of @var{category} specify an -@@ -256,10 +257,9 @@ is passed in as @var{locale} parameter. - - When you read the current locale for category @code{LC_ALL}, the value - encodes the entire combination of selected locales for all categories. --In this case, the value is not just a single locale name. In fact, we --don't make any promises about what it looks like. But if you specify --the same ``locale name'' with @code{LC_ALL} in a subsequent call to --@code{setlocale}, it restores the same combination of locale selections. -+If you specify the same ``locale name'' with @code{LC_ALL} in a -+subsequent call to @code{setlocale}, it restores the same combination -+of locale selections. - - To be sure you can use the returned string encoding the currently selected - locale at a later time, you must make a copy of the string. It is not -@@ -275,6 +275,11 @@ for @var{category}. - If a nonempty string is given for @var{locale}, then the locale of that - name is used if possible. - -+The effective locale name (either the second argument to -+@code{setlocale}, or if the argument is an empty string, the name -+obtained from the process environment) must be valid locale name. -+@xref{Locale Names}. -+ - If you specify an invalid locale name, @code{setlocale} returns a null - pointer and leaves the current locale unchanged. - @end deftypefun -@@ -328,7 +323,7 @@ locale categories, and future versions o - portability, assume that any symbol beginning with @samp{LC_} might be - defined in @file{locale.h}. - --@node Standard Locales, Locale Information, Setting the Locale, Locales -+@node Standard Locales, Locale Names, Setting the Locale, Locales - @section Standard Locales - - The only locale names you can count on finding on all operating systems -@@ -362,7 +357,94 @@ with the environment, rather than trying - locale explicitly by name. Remember, different machines might have - different sets of locales installed. - --@node Locale Information, Formatting Numbers, Standard Locales, Locales -+@node Locale Names, Locale Information, Standard Locales, Locales -+@section Locale Names -+ -+The following command prints a list of locales supported by the -+system: -+ -+@pindex locale -+@smallexample -+ locale -a -+@end smallexample -+ -+@strong{Portability Note:} With the notable exception of the standard -+locale names @samp{C} and @samp{POSIX}, locale names are -+system-specific. -+ -+Most locale names follow XPG syntax and consist of up to four parts: -+ -+@smallexample -+@var{language}[_@var{territory}[.@var{codeset}]][@@@var{modifier}] -+@end smallexample -+ -+Beside the first part, all of them are allowed to be missing. If the -+full specified locale is not found, less specific ones are looked for. -+The various parts will be stripped off, in the following order: -+ -+@enumerate -+@item -+codeset -+@item -+normalized codeset -+@item -+territory -+@item -+modifier -+@end enumerate -+ -+For example, the locale name @samp{de_AT.iso885915@@euro} denotes a -+German-language locale for use in Austria, using the ISO-8859-15 -+(Latin-9) character set, and with the Euro as the currency symbol. -+ -+In addition to locale names which follow XPG syntax, systems may -+provide aliases such as @samp{german}. Both categories of names must -+not contain the slash character @samp{/}. -+ -+If the locale name starts with a slash @samp{/}, it is treated as a -+path relative to the configured locale directories; see @code{LOCPATH} -+below. The specified path must not contain a component @samp{..}, or -+the name is invalid, and @code{setlocale} will fail. -+ -+@strong{Portability Note:} POSIX suggests that if a locale name starts -+with a slash @samp{/}, it is resolved as an absolute path. However, -+the GNU C Library treats it as a relative path under the directories listed -+in @code{LOCPATH} (or the default locale directory if @code{LOCPATH} -+is unset). -+ -+Locale names which are longer than an implementation-defined limit are -+invalid and cause @code{setlocale} to fail. -+ -+As a special case, locale names used with @code{LC_ALL} can combine -+several locales, reflecting different locale settings for different -+categories. For example, you might want to use a U.S. locale with ISO -+A4 paper format, so you set @code{LANG} to @samp{en_US.UTF-8}, and -+@code{LC_PAPER} to @samp{de_DE.UTF-8}. In this case, the -+@code{LC_ALL}-style combined locale name is -+ -+@smallexample -+LC_CTYPE=en_US.UTF-8;LC_TIME=en_US.UTF-8;LC_PAPER=de_DE.UTF-8;@dots{} -+@end smallexample -+ -+followed by other category settings not shown here. -+ -+@vindex LOCPATH -+The path used for finding locale data can be set using the -+@code{LOCPATH} environment variable. This variable lists the -+directories in which to search for locale definitions, separated by a -+colon @samp{:}. -+ -+The default path for finding locale data is system specific. A typical -+value for the @code{LOCPATH} default is: -+ -+@smallexample -+/usr/share/locale -+@end smallexample -+ -+The value of @code{LOCPATH} is ignored by privileged programs for -+security reasons, and only the default directory is used. -+ -+@node Locale Information, Formatting Numbers, Locale Names, Locales - @section Accessing Locale Information - - There are several ways to access locale information. The simplest diff --git a/src/patches/glibc/glibc-rh1138769.patch b/src/patches/glibc/glibc-rh1138769.patch deleted file mode 100644 index 94a7d2a62d..0000000000 --- a/src/patches/glibc/glibc-rh1138769.patch +++ /dev/null @@ -1,45 +0,0 @@ -commit e35c53e397e7abbd41fedacdedcfa5af7b5c2c52 -Author: Siddhesh Poyarekar -Date: Tue Jul 8 16:40:24 2014 +0530 - - Check value at resplen2 if it is not NULL - - There was a typo in the previous patch due to which resplen2 was - checked for non-zero instead of the value at resplen2. Fix that and - improve the condition by checking resplen2 for non-NULL (instead of - answerp2) and also adding the check in a third place. - -diff --git a/resolv/res_query.c b/resolv/res_query.c -index 4e6612c..e4ee2a6 100644 ---- a/resolv/res_query.c -+++ b/resolv/res_query.c -@@ -384,7 +384,7 @@ __libc_res_nsearch(res_state statp, - answerp2, nanswerp2, resplen2); - if (ret > 0 || trailing_dot - /* If the second response is valid then we use that. */ -- || (ret == 0 && answerp2 != NULL && resplen2 > 0)) -+ || (ret == 0 && resplen2 != NULL && *resplen2 > 0)) - return (ret); - saved_herrno = h_errno; - tried_as_is++; -@@ -424,8 +424,8 @@ __libc_res_nsearch(res_state statp, - answer, anslen, answerp, - answerp2, nanswerp2, - resplen2); -- if (ret > 0 || (ret == 0 && answerp2 != NULL -- && resplen2 > 0)) -+ if (ret > 0 || (ret == 0 && resplen2 != NULL -+ && *resplen2 > 0)) - return (ret); - - if (answerp && *answerp != answer) { -@@ -494,7 +494,8 @@ __libc_res_nsearch(res_state statp, - ret = __libc_res_nquerydomain(statp, name, NULL, class, type, - answer, anslen, answerp, - answerp2, nanswerp2, resplen2); -- if (ret > 0) -+ if (ret > 0 || (ret == 0 && resplen2 != NULL -+ && *resplen2 > 0)) - return (ret); - } - diff --git a/src/patches/glibc/glibc-rh1144019.patch b/src/patches/glibc/glibc-rh1144019.patch deleted file mode 100644 index 1732de6492..0000000000 --- a/src/patches/glibc/glibc-rh1144019.patch +++ /dev/null @@ -1,27 +0,0 @@ -# -# Based on the following commit: -# -# commit f9d2d03254a58d92635a311a42253eeed5a40a47 -# Author: Andreas Schwab -# Date: Mon May 26 18:01:31 2014 +0200 -# -# Fix invalid file descriptor reuse while sending DNS query (BZ #15946) -# -# 2014-06-03 Andreas Schwab -# -# [BZ #15946] -# * resolv/res_send.c (send_dg): Reload file descriptor after -# calling reopen. -# -diff --git a/resolv/res_send.c b/resolv/res_send.c -index 3273d55..af42b8a 100644 ---- a/resolv/res_send.c -+++ b/resolv/res_send.c -@@ -1410,6 +1410,7 @@ send_dg(res_state statp, - retval = reopen (statp, terrno, ns); - if (retval <= 0) - return retval; -+ pfd[0].fd = EXT(statp).nssocks[ns]; - } - } - goto wait; diff --git a/src/patches/glibc/glibc-rh1144132.patch b/src/patches/glibc/glibc-rh1144132.patch deleted file mode 100644 index 4114b5897e..0000000000 --- a/src/patches/glibc/glibc-rh1144132.patch +++ /dev/null @@ -1,58 +0,0 @@ -# -# Based on this commit: -# -# commit 62058ce612ed3459501b4c4332e268edfe977f59 -# Author: Carlos O'Donell -# Date: Mon Sep 29 13:14:21 2014 -0400 -# -# Correctly size profiling reloc table (bug 17411) -# -# During auditing or profiling modes the dynamic loader -# builds a cache of the relocated PLT entries in order -# to reuse them when called again through the same PLT -# entry. This way the PLT entry is never completed and -# the call into the resolver always results in profiling -# or auditing code running. -# -# The problem is that the PLT relocation cache size -# is not computed correctly. The size of the cache -# should be "Size of a relocation result structure" -# x "Number of PLT-related relocations". Instead the -# code erroneously computes "Size of a relocation -# result" x "Number of bytes worth of PLT-related -# relocations". I can only assume this was a mistake -# in the understanding of the value of DT_PLTRELSZ -# which is the number of bytes of PLT-related relocs. -# We do have a DT_RELACOUNT entry, which is a count -# for dynamic relative relocs, but we have no -# DT_PLTRELCOUNT and thus we need to compute it. -# -# This patch corrects the computation of the size of the -# relocation table used by the glibc profiling code. -# -# For more details see: -# https://sourceware.org/ml/libc-alpha/2014-09/msg00513.html -# -# [BZ #17411] -# * elf/dl-reloc.c (_dl_relocate_object): Allocate correct amount for -# l_reloc_result. -# -diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c -index d2c6dac..97a7119 100644 ---- a/elf/dl-reloc.c -+++ b/elf/dl-reloc.c -@@ -279,8 +279,12 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[], - l->l_name); - } - -- l->l_reloc_result = calloc (sizeof (l->l_reloc_result[0]), -- l->l_info[DT_PLTRELSZ]->d_un.d_val); -+ size_t sizeofrel = l->l_info[DT_PLTREL]->d_un.d_val == DT_RELA -+ ? sizeof (ElfW(Rela)) -+ : sizeof (ElfW(Rel)); -+ size_t relcount = l->l_info[DT_PLTRELSZ]->d_un.d_val / sizeofrel; -+ l->l_reloc_result = calloc (sizeof (l->l_reloc_result[0]), relcount); -+ - if (l->l_reloc_result == NULL) - { - errstring = N_("\ diff --git a/src/patches/glibc/glibc-rh1154563.patch b/src/patches/glibc/glibc-rh1154563.patch deleted file mode 100644 index 22821b1f9f..0000000000 --- a/src/patches/glibc/glibc-rh1154563.patch +++ /dev/null @@ -1,333 +0,0 @@ -# -# This is a special patch for rhel-6 to fix recursive dlopen. -# It is likely the upstream patch will always be too risky for -# rhel-6 and will involve reorganizing the way in which recursive -# dlopen is allowed to operate and how the _r_debug and stap -# points are used by gdb for the recursive case. -# -# This fix changes the internal API to duplicate the ldconfig -# cache data. This means that at any point the cache can be -# unmapped without any consequences. The caller is responsible -# fore freeing the returned string. -# -# A regression test is added to verify the assertion for _r_debug -# is no longer triggered due to the recursive dlopen. The test to -# verify the fix in _dl_load_cache_lookup is not automated and -# has to be run by hand. -# -diff -urN glibc-2.12-2-gc4ccff1/elf/dl-cache.c glibc-2.12-2-gc4ccff1.mod/elf/dl-cache.c ---- glibc-2.12-2-gc4ccff1/elf/dl-cache.c 2010-05-04 07:27:23.000000000 -0400 -+++ glibc-2.12-2-gc4ccff1.mod/elf/dl-cache.c 2014-12-10 21:54:08.801985045 -0500 -@@ -175,9 +175,12 @@ - - - /* Look up NAME in ld.so.cache and return the file name stored there, -- or null if none is found. */ -- --const char * -+ or null if none is found. -+ The caller is responsible for freeing the returned string. The ld.so.cache -+ may be unmapped at any time by a completing recursive dlopen and -+ this function must take care that it does not return references to -+ any data in the mapping. */ -+char * - internal_function - _dl_load_cache_lookup (const char *name) - { -@@ -290,7 +293,17 @@ - && best != NULL) - _dl_debug_printf (" trying file=%s\n", best); - -- return best; -+ if (best == NULL) -+ return NULL; -+ -+ /* The double copy is *required* since malloc may be interposed -+ and call dlopen itself whose completion would unmap the data -+ we are accessing. Therefore we must make the copy of the -+ mapping data without using malloc. */ -+ char *temp; -+ temp = alloca (strlen (best) + 1); -+ strcpy (temp, best); -+ return strdup (temp); - } - - #ifndef MAP_COPY -diff -urN glibc-2.12-2-gc4ccff1/elf/dl-load.c glibc-2.12-2-gc4ccff1.mod/elf/dl-load.c ---- glibc-2.12-2-gc4ccff1/elf/dl-load.c 2014-12-10 11:03:17.966048404 -0500 -+++ glibc-2.12-2-gc4ccff1.mod/elf/dl-load.c 2014-12-10 21:47:29.319387538 -0500 -@@ -2126,7 +2126,7 @@ - { - /* Check the list of libraries in the file /etc/ld.so.cache, - for compatibility with Linux's ldconfig program. */ -- const char *cached = _dl_load_cache_lookup (name); -+ char *cached = _dl_load_cache_lookup (name); - - if (cached != NULL) - { -@@ -2156,6 +2156,7 @@ - if (memcmp (cached, dirp, system_dirs_len[cnt]) == 0) - { - /* The prefix matches. Don't use the entry. */ -+ free (cached); - cached = NULL; - break; - } -@@ -2172,14 +2173,9 @@ - &fb, loader ?: GL(dl_ns)[nsid]._ns_loaded, - LA_SER_CONFIG, &found_other_class, false); - if (__builtin_expect (fd != -1, 1)) -- { -- realname = local_strdup (cached); -- if (realname == NULL) -- { -- __close (fd); -- fd = -1; -- } -- } -+ realname = cached; -+ else -+ free (cached); - } - } - } -diff -urN glibc-2.12-2-gc4ccff1/elf/dl-open.c glibc-2.12-2-gc4ccff1.mod/elf/dl-open.c ---- glibc-2.12-2-gc4ccff1/elf/dl-open.c 2014-12-10 11:03:18.083048497 -0500 -+++ glibc-2.12-2-gc4ccff1.mod/elf/dl-open.c 2014-12-10 20:34:16.017503638 -0500 -@@ -220,7 +220,11 @@ - } - } - -- assert (_dl_debug_initialize (0, args->nsid)->r_state == RT_CONSISTENT); -+ /* One might be tempted to assert that we are RT_CONSISTENT at this point, but that -+ may not be true if this is a recursive call to dlopen. -+ TODO: Fix all of the debug state so we end up at RT_CONSISTENT only when the last -+ recursive dlopen completes. */ -+ _dl_debug_initialize (0, args->nsid); - - /* Load the named object. */ - struct link_map *new; -diff -urN glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h glibc-2.12-2-gc4ccff1.mod/sysdeps/generic/ldsodefs.h ---- glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h 2014-12-10 11:03:17.944048387 -0500 -+++ glibc-2.12-2-gc4ccff1.mod/sysdeps/generic/ldsodefs.h 2014-12-10 21:46:14.071344018 -0500 -@@ -996,8 +996,8 @@ - internal_function; - - /* Look up NAME in ld.so.cache and return the file name stored there, -- or null if none is found. */ --extern const char *_dl_load_cache_lookup (const char *name) -+ or null if none is found. Caller must free returned string. */ -+extern char *_dl_load_cache_lookup (const char *name) - internal_function; - - /* If the system does not support MAP_COPY we cannot leave the file open -diff -urN glibc-2.12-2-gc4ccff1/dlfcn/Makefile glibc-2.12-2-gc4ccff1.mod/dlfcn/Makefile ---- glibc-2.12-2-gc4ccff1/dlfcn/Makefile 2010-05-04 07:27:23.000000000 -0400 -+++ glibc-2.12-2-gc4ccff1.mod/dlfcn/Makefile 2014-12-11 16:58:55.719803063 -0500 -@@ -42,12 +42,12 @@ - ifeq (yes,$(build-shared)) - tests = glrefmain failtest tst-dladdr default errmsg1 tstcxaatexit \ - bug-dlopen1 bug-dlsym1 tst-dlinfo bug-atexit1 bug-atexit2 \ -- bug-atexit3 tstatexit -+ bug-atexit3 tstatexit tst-rec-dlopen - endif - modules-names = glreflib1 glreflib2 glreflib3 failtestmod defaultmod1 \ - defaultmod2 errmsg1mod modatexit modcxaatexit \ - bug-dlsym1-lib1 bug-dlsym1-lib2 bug-atexit1-lib \ -- bug-atexit2-lib bug-atexit3-lib -+ bug-atexit2-lib bug-atexit3-lib moddummy1 moddummy2 - - failtestmod.so-no-z-defs = yes - glreflib2.so-no-z-defs = yes -@@ -142,6 +142,8 @@ - $(objpfx)bug-atexit3-lib.so: $(common-objpfx)libc.so \ - $(common-objpfx)libc_nonshared.a - -+LDLIBS-tst-rec-dlopen = -ldl -+$(objpfx)tst-rec-dlopen: $(libdl) - - # Depend on libc.so so a DT_NEEDED is generated in the shared objects. - # This ensures they will load libc.so for needed symbols if loaded by -diff -urN glibc-2.12-2-gc4ccff1/dlfcn/moddummy1.c glibc-2.12-2-gc4ccff1.mod/dlfcn/moddummy1.c ---- glibc-2.12-2-gc4ccff1/dlfcn/moddummy1.c 1969-12-31 19:00:00.000000000 -0500 -+++ glibc-2.12-2-gc4ccff1.mod/dlfcn/moddummy1.c 2014-12-11 16:57:54.108797285 -0500 -@@ -0,0 +1,13 @@ -+/* Provide a dummy DSO for tst-recursive-dlopen to use. */ -+#include -+#include -+ -+int called_dummy1; -+ -+void -+dummy1 (void) -+{ -+ printf ("Called dummy1()\n"); -+ called_dummy1++; -+} -+ -diff -urN glibc-2.12-2-gc4ccff1/dlfcn/moddummy2.c glibc-2.12-2-gc4ccff1.mod/dlfcn/moddummy2.c ---- glibc-2.12-2-gc4ccff1/dlfcn/moddummy2.c 1969-12-31 19:00:00.000000000 -0500 -+++ glibc-2.12-2-gc4ccff1.mod/dlfcn/moddummy2.c 2014-12-11 16:57:54.108797285 -0500 -@@ -0,0 +1,13 @@ -+/* Provide a dummy DSO for tst-recursive-dlopen to use. */ -+#include -+#include -+ -+int called_dummy2; -+ -+void -+dummy2 (void) -+{ -+ printf ("Called dummy2()\n"); -+ called_dummy2++; -+} -+ -diff -urN glibc-2.12-2-gc4ccff1/dlfcn/tst-rec-dlopen.c glibc-2.12-2-gc4ccff1.mod/dlfcn/tst-rec-dlopen.c ---- glibc-2.12-2-gc4ccff1/dlfcn/tst-rec-dlopen.c 1969-12-31 19:00:00.000000000 -0500 -+++ glibc-2.12-2-gc4ccff1.mod/dlfcn/tst-rec-dlopen.c 2014-12-11 20:53:28.617848774 -0500 -@@ -0,0 +1,145 @@ -+/* Test recursive dlopen using malloc hooks. -+ Copyright (C) 1998-2014 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Contributed by Ulrich Drepper , 1998. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+ -+#define DSO "moddummy1.so" -+#define FUNC "dummy1" -+ -+#define DSO1 "moddummy2.so" -+#define FUNC1 "dummy2" -+ -+/* Prevent the compiler from moving the assignment to called_func -+ before (*func)() since the compiler doesn't know we might abort -+ or catch a SIGSEGV signal and it may move the store. */ -+volatile int called_func; -+ -+/* Prototype for my hook. */ -+void *custom_malloc_hook (size_t, const void *); -+ -+/* Pointer to old malloc hooks. */ -+void *(*old_malloc_hook) (size_t, const void *); -+ -+/* Call function func_name in DSO dso_name via dlopen. */ -+void -+call_func (const char *dso_name, const char *func_name) -+{ -+ int ret; -+ void *dso; -+ void (*func) (void); -+ char *err; -+ -+ /* Open the DSO. */ -+ dso = dlopen (dso_name, RTLD_NOW|RTLD_GLOBAL); -+ if (dso == NULL) -+ { -+ err = dlerror (); -+ fprintf (stderr, "%s\n", err); -+ exit (1); -+ } -+ /* Clear any errors. */ -+ dlerror (); -+ -+ /* Lookup func. */ -+ *(void **) (&func) = dlsym (dso, func_name); -+ if (func == NULL) -+ { -+ err = dlerror (); -+ if (err != NULL) -+ { -+ fprintf (stderr, "%s\n", err); -+ exit (1); -+ } -+ } -+ /* Call func. */ -+ (*func) (); -+ called_func = 1; -+ -+ /* Close the library and look for errors too. */ -+ ret = dlclose (dso); -+ if (ret != 0) -+ { -+ err = dlerror (); -+ fprintf (stderr, "%s\n", err); -+ exit (1); -+ } -+ -+} -+ -+/* Empty hook that does nothing. */ -+void * -+custom_malloc_hook (size_t size, const void *caller) -+{ -+ void *result; -+ /* Restore old hooks. */ -+ __malloc_hook = old_malloc_hook; -+ /* First call a function in another library via dlopen. */ -+ call_func (DSO1, FUNC1); -+ /* Called recursively. */ -+ result = malloc (size); -+ /* Restore new hooks. */ -+ __malloc_hook = custom_malloc_hook; -+ return result; -+} -+ -+static int -+do_test (void) -+{ -+ /* Save old hook. */ -+ old_malloc_hook = __malloc_hook; -+ /* Install new hook. */ -+ __malloc_hook = custom_malloc_hook; -+ -+ /* Bug 17702 fixes two things: -+ * A recursive dlopen unmapping the ld.so.cache. -+ * An assertion that _r_debug is RT_CONSISTENT at entry to dlopen. -+ We can only test the latter. Testing the former requires modifying -+ ld.so.conf to cache the dummy libraries, then running ldconfig, -+ then run the test. If you do all of that (and glibc's test -+ infrastructure doesn't support that yet) then the test will -+ SEGFAULT without the fix. If you don't do that, then the test -+ will abort because of the assert described in detail below. */ -+ call_func (DSO, FUNC); -+ -+ /* Restore old hook. */ -+ __malloc_hook = old_malloc_hook; -+ -+ /* The function dummy2() is called by the malloc hook. Check to -+ see that it was called. This ensures the second recursive -+ dlopen happened and we called the function in that library. -+ -+ Before the fix you either get a SIGSEGV when accessing mmap'd -+ ld.so.cache data or an assertion failure about _r_debug not -+ beint RT_CONSISTENT. We don't test for the SIGSEGV since it -+ would require finding moddummy1 or moddummy2 in the cache and -+ we don't have any infrastructure to test that, but the _r_debug -+ assertion triggers. */ -+ if (called_func > 0) -+ printf ("PASS: Function call_func() called more than once.\n"); -+ else -+ printf ("FAIL: Function call_func() not called.\n"); -+ -+ return 0; -+} -+ -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" diff --git a/src/patches/glibc/glibc-rh1159167.patch b/src/patches/glibc/glibc-rh1159167.patch deleted file mode 100644 index 59f4a6f41b..0000000000 --- a/src/patches/glibc/glibc-rh1159167.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/sunrpc/svc.c b/sunrpc/svc.c -index ccf0902..30c3a93 100644 ---- a/sunrpc/svc.c -+++ b/sunrpc/svc.c -@@ -97,8 +97,8 @@ xprt_register (SVCXPRT *xprt) - - if (xports == NULL) - { -- xports = (SVCXPRT **) malloc (_rpc_dtablesize () * sizeof (SVCXPRT *)); -- if (xports == NULL) /* Don´t add handle */ -+ xports = (SVCXPRT **) calloc (_rpc_dtablesize (), sizeof (SVCXPRT *)); -+ if (xports == NULL) /* Don't add handle */ - return; - } - diff --git a/src/patches/glibc/glibc-rh1171296.patch b/src/patches/glibc/glibc-rh1171296.patch deleted file mode 100644 index 1accbf3e7f..0000000000 --- a/src/patches/glibc/glibc-rh1171296.patch +++ /dev/null @@ -1,163 +0,0 @@ -# -# commit a39208bd7fb76c1b01c127b4c61f9bfd915bfe7c -# Author: Carlos O'Donell -# Date: Wed Nov 19 11:44:12 2014 -0500 -# -# CVE-2014-7817: wordexp fails to honour WRDE_NOCMD. -# -# The function wordexp() fails to properly handle the WRDE_NOCMD -# flag when processing arithmetic inputs in the form of "$((... ``))" -# where "..." can be anything valid. The backticks in the arithmetic -# epxression are evaluated by in a shell even if WRDE_NOCMD forbade -# command substitution. This allows an attacker to attempt to pass -# dangerous commands via constructs of the above form, and bypass -# the WRDE_NOCMD flag. This patch fixes this by checking for WRDE_NOCMD -# in exec_comm(), the only place that can execute a shell. All other -# checks for WRDE_NOCMD are superfluous and removed. -# -# We expand the testsuite and add 3 new regression tests of roughly -# the same form but with a couple of nested levels. -# -# On top of the 3 new tests we add fork validation to the WRDE_NOCMD -# testing. If any forks are detected during the execution of a wordexp() -# call with WRDE_NOCMD, the test is marked as failed. This is slightly -# heuristic since vfork might be used in the future, but it provides a -# higher level of assurance that no shells were executed as part of -# command substitution with WRDE_NOCMD in effect. In addition it doesn't -# require libpthread or libdl, instead we use the public implementation -# namespace function __register_atfork (already part of the public ABI -# for libpthread). -# -# Tested on x86_64 with no regressions. -# -diff --git a/posix/wordexp-test.c b/posix/wordexp-test.c -index 4957006..bdd65e4 100644 ---- a/posix/wordexp-test.c -+++ b/posix/wordexp-test.c -@@ -27,6 +27,25 @@ - - #define IFS " \n\t" - -+extern void *__dso_handle __attribute__ ((__weak__, __visibility__ ("hidden"))); -+extern int __register_atfork (void (*) (void), void (*) (void), void (*) (void), void *); -+ -+static int __app_register_atfork (void (*prepare) (void), void (*parent) (void), void (*child) (void)) -+{ -+ return __register_atfork (prepare, parent, child, -+ &__dso_handle == NULL ? NULL : __dso_handle); -+} -+ -+/* Number of forks seen. */ -+static int registered_forks; -+ -+/* For each fork increment the fork count. */ -+static void -+register_fork (void) -+{ -+ registered_forks++; -+} -+ - struct test_case_struct - { - int retval; -@@ -206,6 +225,12 @@ struct test_case_struct - { WRDE_SYNTAX, NULL, "$((2+))", 0, 0, { NULL, }, IFS }, - { WRDE_SYNTAX, NULL, "`", 0, 0, { NULL, }, IFS }, - { WRDE_SYNTAX, NULL, "$((010+4+))", 0, 0, { NULL }, IFS }, -+ /* Test for CVE-2014-7817. We test 3 combinations of command -+ substitution inside an arithmetic expression to make sure that -+ no commands are executed and error is returned. */ -+ { WRDE_CMDSUB, NULL, "$((`echo 1`))", WRDE_NOCMD, 0, { NULL, }, IFS }, -+ { WRDE_CMDSUB, NULL, "$((1+`echo 1`))", WRDE_NOCMD, 0, { NULL, }, IFS }, -+ { WRDE_CMDSUB, NULL, "$((1+$((`echo 1`))))", WRDE_NOCMD, 0, { NULL, }, IFS }, - - { -1, NULL, NULL, 0, 0, { NULL, }, IFS }, - }; -@@ -258,6 +283,15 @@ main (int argc, char *argv[]) - return -1; - } - -+ /* If we are not allowed to do command substitution, we install -+ fork handlers to verify that no forks happened. No forks should -+ happen at all if command substitution is disabled. */ -+ if (__app_register_atfork (register_fork, NULL, NULL) != 0) -+ { -+ printf ("Failed to register fork handler.\n"); -+ return -1; -+ } -+ - for (test = 0; test_case[test].retval != -1; test++) - if (testit (&test_case[test])) - ++fail; -@@ -367,6 +401,9 @@ testit (struct test_case_struct *tc) - - printf ("Test %d (%s): ", ++tests, tc->words); - -+ if (tc->flags & WRDE_NOCMD) -+ registered_forks = 0; -+ - if (tc->flags & WRDE_APPEND) - { - /* initial wordexp() call, to be appended to */ -@@ -378,6 +415,13 @@ testit (struct test_case_struct *tc) - } - retval = wordexp (tc->words, &we, tc->flags); - -+ if ((tc->flags & WRDE_NOCMD) -+ && (registered_forks > 0)) -+ { -+ printf ("FAILED fork called for WRDE_NOCMD\n"); -+ return 1; -+ } -+ - if (tc->flags & WRDE_DOOFFS) - start_offs = sav_we.we_offs; - -diff --git a/posix/wordexp.c b/posix/wordexp.c -index b6b65dd..26f3a26 100644 ---- a/posix/wordexp.c -+++ b/posix/wordexp.c -@@ -893,6 +893,10 @@ exec_comm (char *comm, char **word, size_t *word_length, size_t *max_length, - pid_t pid; - int noexec = 0; - -+ /* Do nothing if command substitution should not succeed. */ -+ if (flags & WRDE_NOCMD) -+ return WRDE_CMDSUB; -+ - /* Don't fork() unless necessary */ - if (!comm || !*comm) - return 0; -@@ -2082,9 +2086,6 @@ parse_dollars (char **word, size_t *word_length, size_t *max_length, - } - } - -- if (flags & WRDE_NOCMD) -- return WRDE_CMDSUB; -- - (*offset) += 2; - return parse_comm (word, word_length, max_length, words, offset, flags, - quoted? NULL : pwordexp, ifs, ifs_white); -@@ -2196,9 +2197,6 @@ parse_dquote (char **word, size_t *word_length, size_t *max_length, - break; - - case '`': -- if (flags & WRDE_NOCMD) -- return WRDE_CMDSUB; -- - ++(*offset); - error = parse_backtick (word, word_length, max_length, words, - offset, flags, NULL, NULL, NULL); -@@ -2357,12 +2355,6 @@ wordexp (const char *words, wordexp_t *pwordexp, int flags) - break; - - case '`': -- if (flags & WRDE_NOCMD) -- { -- error = WRDE_CMDSUB; -- goto do_error; -- } -- - ++words_offset; - error = parse_backtick (&word, &word_length, &max_length, words, - &words_offset, flags, pwordexp, ifs, diff --git a/src/patches/glibc/glibc-rh1172044.patch b/src/patches/glibc/glibc-rh1172044.patch deleted file mode 100644 index b1320a7378..0000000000 --- a/src/patches/glibc/glibc-rh1172044.patch +++ /dev/null @@ -1,154 +0,0 @@ -commit 41488498b6d9440ee66ab033808cce8323bba7ac -Author: Florian Weimer -Date: Wed Sep 3 19:45:43 2014 +0200 - - CVE-2014-6040: Crashes on invalid input in IBM gconv modules [BZ #17325] - - These changes are based on the fix for BZ #14134 in commit - 6e230d11837f3ae7b375ea69d7905f0d18eb79e5. - -diff --git a/iconvdata/Makefile b/iconvdata/Makefile -index 0a410a1..b6327d6 100644 ---- a/iconvdata/Makefile -+++ b/iconvdata/Makefile -@@ -297,6 +297,7 @@ $(objpfx)tst-iconv7.out: $(objpfx)gconv-modules \ - $(objpfx)iconv-test.out: run-iconv-test.sh $(objpfx)gconv-modules \ - $(addprefix $(objpfx),$(modules.so)) \ - $(common-objdir)/iconv/iconv_prog TESTS -+ iconv_modules="$(modules)" \ - $(SHELL) -e $< $(common-objdir) > $@ - - $(objpfx)tst-tables.out: tst-tables.sh $(objpfx)gconv-modules \ -diff --git a/iconvdata/ibm1364.c b/iconvdata/ibm1364.c -index 0b5484f..cf80993 100644 ---- a/iconvdata/ibm1364.c -+++ b/iconvdata/ibm1364.c -@@ -221,7 +221,8 @@ enum - ++rp2; \ - \ - uint32_t res; \ -- if (__builtin_expect (ch < rp2->start, 0) \ -+ if (__builtin_expect (rp2->start == 0xffff, 0) \ -+ || __builtin_expect (ch < rp2->start, 0) \ - || (res = DB_TO_UCS4[ch + rp2->idx], \ - __builtin_expect (res, L'\1') == L'\0' && ch != '\0')) \ - { \ -diff --git a/iconvdata/ibm932.c b/iconvdata/ibm932.c -index f5dca59..aa69d65 100644 ---- a/iconvdata/ibm932.c -+++ b/iconvdata/ibm932.c -@@ -74,11 +74,12 @@ - } \ - \ - ch = (ch * 0x100) + inptr[1]; \ -+ /* ch was less than 0xfd. */ \ -+ assert (ch < 0xfd00); \ - while (ch > rp2->end) \ - ++rp2; \ - \ -- if (__builtin_expect (rp2 == NULL, 0) \ -- || __builtin_expect (ch < rp2->start, 0) \ -+ if (__builtin_expect (ch < rp2->start, 0) \ - || (res = __ibm932db_to_ucs4[ch + rp2->idx], \ - __builtin_expect (res, '\1') == 0 && ch !=0)) \ - { \ -diff --git a/iconvdata/ibm933.c b/iconvdata/ibm933.c -index f46dfb5..461fb5e 100644 ---- a/iconvdata/ibm933.c -+++ b/iconvdata/ibm933.c -@@ -162,7 +162,7 @@ enum - while (ch > rp2->end) \ - ++rp2; \ - \ -- if (__builtin_expect (rp2 == NULL, 0) \ -+ if (__builtin_expect (rp2->start == 0xffff, 0) \ - || __builtin_expect (ch < rp2->start, 0) \ - || (res = __ibm933db_to_ucs4[ch + rp2->idx], \ - __builtin_expect (res, L'\1') == L'\0' && ch != '\0')) \ -diff --git a/iconvdata/ibm935.c b/iconvdata/ibm935.c -index a8e4e6c..132d816 100644 ---- a/iconvdata/ibm935.c -+++ b/iconvdata/ibm935.c -@@ -162,7 +162,7 @@ enum - while (ch > rp2->end) \ - ++rp2; \ - \ -- if (__builtin_expect (rp2 == NULL, 0) \ -+ if (__builtin_expect (rp2->start == 0xffff, 0) \ - || __builtin_expect (ch < rp2->start, 0) \ - || (res = __ibm935db_to_ucs4[ch + rp2->idx], \ - __builtin_expect (res, L'\1') == L'\0' && ch != '\0')) \ -diff --git a/iconvdata/ibm937.c b/iconvdata/ibm937.c -index 239be61..69b154d 100644 ---- a/iconvdata/ibm937.c -+++ b/iconvdata/ibm937.c -@@ -162,7 +162,7 @@ enum - while (ch > rp2->end) \ - ++rp2; \ - \ -- if (__builtin_expect (rp2 == NULL, 0) \ -+ if (__builtin_expect (rp2->start == 0xffff, 0) \ - || __builtin_expect (ch < rp2->start, 0) \ - || (res = __ibm937db_to_ucs4[ch + rp2->idx], \ - __builtin_expect (res, L'\1') == L'\0' && ch != '\0')) \ -diff --git a/iconvdata/ibm939.c b/iconvdata/ibm939.c -index 5d0db36..9936e2c 100644 ---- a/iconvdata/ibm939.c -+++ b/iconvdata/ibm939.c -@@ -162,7 +162,7 @@ enum - while (ch > rp2->end) \ - ++rp2; \ - \ -- if (__builtin_expect (rp2 == NULL, 0) \ -+ if (__builtin_expect (rp2->start == 0xffff, 0) \ - || __builtin_expect (ch < rp2->start, 0) \ - || (res = __ibm939db_to_ucs4[ch + rp2->idx], \ - __builtin_expect (res, L'\1') == L'\0' && ch != '\0')) \ -diff --git a/iconvdata/ibm943.c b/iconvdata/ibm943.c -index be0c14f..c5d5742 100644 ---- a/iconvdata/ibm943.c -+++ b/iconvdata/ibm943.c -@@ -75,11 +75,12 @@ - } \ - \ - ch = (ch * 0x100) + inptr[1]; \ -+ /* ch was less than 0xfd. */ \ -+ assert (ch < 0xfd00); \ - while (ch > rp2->end) \ - ++rp2; \ - \ -- if (__builtin_expect (rp2 == NULL, 0) \ -- || __builtin_expect (ch < rp2->start, 0) \ -+ if (__builtin_expect (ch < rp2->start, 0) \ - || (res = __ibm943db_to_ucs4[ch + rp2->idx], \ - __builtin_expect (res, '\1') == 0 && ch !=0)) \ - { \ -diff --git a/iconvdata/run-iconv-test.sh b/iconvdata/run-iconv-test.sh -index c98c929..5dfb69f 100755 ---- a/iconvdata/run-iconv-test.sh -+++ b/iconvdata/run-iconv-test.sh -@@ -184,6 +184,24 @@ while read utf8 from filename; do - - done < TESTS2 - -+# Check for crashes in decoders. -+printf '\016\377\377\377\377\377\377\377' > $temp1 -+for from in $iconv_modules ; do -+ echo $ac_n "test decoder $from $ac_c" -+ PROG=`eval echo $ICONV` -+ if $PROG < $temp1 >/dev/null 2>&1 ; then -+ : # fall through -+ else -+ status=$? -+ if test $status -gt 1 ; then -+ echo "/FAILED" -+ failed=1 -+ continue -+ fi -+ fi -+ echo "OK" -+done -+ - exit $failed - # Local Variables: - # mode:shell-script diff --git a/src/patches/glibc/glibc-rh1176907.patch b/src/patches/glibc/glibc-rh1176907.patch deleted file mode 100644 index 29cdacfc0f..0000000000 --- a/src/patches/glibc/glibc-rh1176907.patch +++ /dev/null @@ -1,22 +0,0 @@ -commit 7d81e8d6db95c112c297930a8f2f9617c305529a -Author: Florian Weimer -Date: Tue Dec 23 16:16:32 2014 +0100 - - iconvdata/run-iconv-test.sh: Actually test iconv modules - - Arjun Shankar noticed that this test case was not testing anything - because iconv was invoked without the required arguments. - -diff --git a/iconvdata/run-iconv-test.sh b/iconvdata/run-iconv-test.sh -index 5dfb69f..1d0bf52 100755 ---- a/iconvdata/run-iconv-test.sh -+++ b/iconvdata/run-iconv-test.sh -@@ -189,7 +189,7 @@ printf '\016\377\377\377\377\377\377\377' > $temp1 - for from in $iconv_modules ; do - echo $ac_n "test decoder $from $ac_c" - PROG=`eval echo $ICONV` -- if $PROG < $temp1 >/dev/null 2>&1 ; then -+ if $PROG -f $from -t UTF8 < $temp1 >/dev/null 2>&1 ; then - : # fall through - else - status=$? diff --git a/src/patches/glibc/glibc-rh1183534.patch b/src/patches/glibc/glibc-rh1183534.patch deleted file mode 100644 index eab7a3fa49..0000000000 --- a/src/patches/glibc/glibc-rh1183534.patch +++ /dev/null @@ -1,223 +0,0 @@ -commit d5dd6189d506068ed11c8bfa1e1e9bffde04decd -Author: Andreas Schwab -Date: Mon Jan 21 17:41:28 2013 +0100 - - Fix parsing of numeric hosts in gethostbyname_r - -diff --git a/nss/Makefile b/nss/Makefile -index 449a258..553eafa 100644 ---- a/nss/Makefile -+++ b/nss/Makefile -@@ -37,7 +37,7 @@ install-bin := getent makedb - others := getent - install-bin := getent - --tests = test-netdb tst-nss-test1 -+tests = test-netdb tst-nss-test1 test-digits-dots - xtests = bug-erange - - include ../Makeconfig -diff --git a/nss/digits_dots.c b/nss/digits_dots.c -index 2b86295..e007ef4 100644 ---- a/nss/digits_dots.c -+++ b/nss/digits_dots.c -@@ -46,7 +46,10 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, - { - if (h_errnop) - *h_errnop = NETDB_INTERNAL; -- *result = NULL; -+ if (buffer_size == NULL) -+ *status = NSS_STATUS_TRYAGAIN; -+ else -+ *result = NULL; - return -1; - } - -@@ -83,14 +86,16 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, - } - - size_needed = (sizeof (*host_addr) -- + sizeof (*h_addr_ptrs) + strlen (name) + 1); -+ + sizeof (*h_addr_ptrs) -+ + sizeof (*h_alias_ptr) + strlen (name) + 1); - - if (buffer_size == NULL) - { - if (buflen < size_needed) - { -+ *status = NSS_STATUS_TRYAGAIN; - if (h_errnop != NULL) -- *h_errnop = TRY_AGAIN; -+ *h_errnop = NETDB_INTERNAL; - __set_errno (ERANGE); - goto done; - } -@@ -109,7 +114,7 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, - *buffer_size = 0; - __set_errno (save); - if (h_errnop != NULL) -- *h_errnop = TRY_AGAIN; -+ *h_errnop = NETDB_INTERNAL; - *result = NULL; - goto done; - } -@@ -149,7 +154,9 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, - if (! ok) - { - *h_errnop = HOST_NOT_FOUND; -- if (buffer_size) -+ if (buffer_size == NULL) -+ *status = NSS_STATUS_NOTFOUND; -+ else - *result = NULL; - goto done; - } -@@ -190,7 +197,7 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, - if (buffer_size == NULL) - *status = NSS_STATUS_SUCCESS; - else -- *result = resbuf; -+ *result = resbuf; - goto done; - } - -@@ -201,15 +208,6 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, - - if ((isxdigit (name[0]) && strchr (name, ':') != NULL) || name[0] == ':') - { -- const char *cp; -- char *hostname; -- typedef unsigned char host_addr_t[16]; -- host_addr_t *host_addr; -- typedef char *host_addr_list_t[2]; -- host_addr_list_t *h_addr_ptrs; -- size_t size_needed; -- int addr_size; -- - switch (af) - { - default: -@@ -225,7 +223,10 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, - /* This is not possible. We cannot represent an IPv6 address - in an `struct in_addr' variable. */ - *h_errnop = HOST_NOT_FOUND; -- *result = NULL; -+ if (buffer_size == NULL) -+ *status = NSS_STATUS_NOTFOUND; -+ else -+ *result = NULL; - goto done; - - case AF_INET6: -@@ -233,42 +234,6 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, - break; - } - -- size_needed = (sizeof (*host_addr) -- + sizeof (*h_addr_ptrs) + strlen (name) + 1); -- -- if (buffer_size == NULL && buflen < size_needed) -- { -- if (h_errnop != NULL) -- *h_errnop = TRY_AGAIN; -- __set_errno (ERANGE); -- goto done; -- } -- else if (buffer_size != NULL && *buffer_size < size_needed) -- { -- char *new_buf; -- *buffer_size = size_needed; -- new_buf = realloc (*buffer, *buffer_size); -- -- if (new_buf == NULL) -- { -- save = errno; -- free (*buffer); -- __set_errno (save); -- *buffer = NULL; -- *buffer_size = 0; -- *result = NULL; -- goto done; -- } -- *buffer = new_buf; -- } -- -- memset (*buffer, '\0', size_needed); -- -- host_addr = (host_addr_t *) *buffer; -- h_addr_ptrs = (host_addr_list_t *) -- ((char *) host_addr + sizeof (*host_addr)); -- hostname = (char *) h_addr_ptrs + sizeof (*h_addr_ptrs); -- - for (cp = name;; ++cp) - { - if (!*cp) -@@ -281,7 +246,9 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, - if (inet_pton (AF_INET6, name, host_addr) <= 0) - { - *h_errnop = HOST_NOT_FOUND; -- if (buffer_size) -+ if (buffer_size == NULL) -+ *status = NSS_STATUS_NOTFOUND; -+ else - *result = NULL; - goto done; - } -diff --git a/nss/getXXbyYY_r.c b/nss/getXXbyYY_r.c -index 1067744..44d00f4 100644 ---- a/nss/getXXbyYY_r.c -+++ b/nss/getXXbyYY_r.c -@@ -179,6 +179,9 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer, - case -1: - return errno; - case 1: -+#ifdef NEED_H_ERRNO -+ any_service = true; -+#endif - goto done; - } - #endif -diff --git a/nss/test-digits-dots.c b/nss/test-digits-dots.c -new file mode 100644 -index 0000000..1efa344 ---- /dev/null -+++ b/nss/test-digits-dots.c -@@ -0,0 +1,38 @@ -+/* Copyright (C) 2013 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+/* Testcase for BZ #15014 */ -+ -+#include -+#include -+#include -+ -+static int -+do_test (void) -+{ -+ char buf[32]; -+ struct hostent *result = NULL; -+ struct hostent ret; -+ int h_err = 0; -+ int err; -+ -+ err = gethostbyname_r ("1.2.3.4", &ret, buf, sizeof (buf), &result, &h_err); -+ return err == ERANGE && h_err == NETDB_INTERNAL ? EXIT_SUCCESS : EXIT_FAILURE; -+} -+ -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" diff --git a/src/patches/glibc/glibc-rh1195453-avx512.patch b/src/patches/glibc/glibc-rh1195453-avx512.patch deleted file mode 100644 index 4c70e5e1e4..0000000000 --- a/src/patches/glibc/glibc-rh1195453-avx512.patch +++ /dev/null @@ -1,481 +0,0 @@ -# -# Based on AVX-512 support for glibc, but heavaily modified for rhel-6.7. -# Without assembler support we drop all of the configure checks and simply -# output using .byte directives the minimal AVX512 instructsion required -# by the loader. Likewise testing is also impossible, so instead we use -# the Intel emulator running in `-skx` (Skylake Xeon) emulation mode and -# verify that a pre-built set of tests passes. -# -# commit 6986b98a18490e76b16911d1c6b1ba013598d40d -# Author: Ulrich Drepper -# Date: Wed Jul 20 14:20:00 2011 -0400 -# -# Force :a_x86_64_ymm to be 16-byte aligned -# -# commit aa4de9cea5c07d43caeaca9722c2d417e9a2919c -# Author: H.J. Lu -# Date: Fri Mar 14 08:51:25 2014 -0700 -# -# Check AVX-512 assembler support first -# -# It checks AVX-512 assembler support first and sets libc_cv_cc_avx512 to -# $libc_cv_asm_avx512, instead of yes. GCC won't support AVX-512 if -# assembler doesn't support it. -# -# * sysdeps/x86_64/configure.ac: Check AVX-512 assembler support -# first. Disable AVX-512 GCC support if assembler doesn't support -# it. -# * sysdeps/x86_64/configure: Regenerated. -# -# commit 2d63a517e4084ec80403cd9f278690fa8b676cc4 -# Author: Igor Zamyatin -# Date: Thu Mar 13 11:10:22 2014 -0700 -# -# Save and restore AVX-512 zmm registers to x86-64 ld.so -# -# AVX-512 ISA adds 512-bit zmm registers. This patch updates -# _dl_runtime_profile to pass zmm registers to run-time audit. It also -# changes _dl_x86_64_save_sse and _dl_x86_64_restore_sse to upport zmm -# registers, which are called when only when RTLD_PREPARE_FOREIGN_CALL -# is used. Its performance impact is minimum. -# -# * config.h.in (HAVE_AVX512_SUPPORT): New #undef. -# (HAVE_AVX512_ASM_SUPPORT): Likewise. -# * sysdeps/x86_64/bits/link.h (La_x86_64_zmm): New. -# (La_x86_64_vector): Add zmm. -# * sysdeps/x86_64/Makefile (tests): Add tst-audit10. -# (modules-names): Add tst-auditmod10a and tst-auditmod10b. -# ($(objpfx)tst-audit10): New target. -# ($(objpfx)tst-audit10.out): Likewise. -# (tst-audit10-ENV): New. -# (AVX512-CFLAGS): Likewise. -# (CFLAGS-tst-audit10.c): Likewise. -# (CFLAGS-tst-auditmod10a.c): Likewise. -# (CFLAGS-tst-auditmod10b.c): Likewise. -# * sysdeps/x86_64/configure.ac: Set config-cflags-avx512, -# HAVE_AVX512_SUPPORT and HAVE_AVX512_ASM_SUPPORT. -# * sysdeps/x86_64/configure: Regenerated. -# * sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Add -# AVX-512 zmm register support. -# (_dl_x86_64_save_sse): Likewise. -# (_dl_x86_64_restore_sse): Likewise. -# * sysdeps/x86_64/dl-trampoline.h: Updated to support different -# size vector registers. -# * sysdeps/x86_64/link-defines.sym (YMM_SIZE): New. -# (ZMM_SIZE): Likewise. -# * sysdeps/x86_64/tst-audit10.c: New file. -# * sysdeps/x86_64/tst-auditmod10a.c: Likewise. -# * sysdeps/x86_64/tst-auditmod10b.c: Likewise. -# -# In addition adds: -# https://sourceware.org/ml/libc-alpha/2014-09/msg00228.html -# To extend zmm register checking. -# -diff -urN glibc-2.12-2-gc4ccff1/sysdeps/x86_64/bits/link.h glibc-2.12-2-gc4ccff1.mod/sysdeps/x86_64/bits/link.h ---- glibc-2.12-2-gc4ccff1/sysdeps/x86_64/bits/link.h 2010-05-04 07:27:23.000000000 -0400 -+++ glibc-2.12-2-gc4ccff1.mod/sysdeps/x86_64/bits/link.h 2015-03-03 23:03:25.041829238 -0500 -@@ -65,7 +65,10 @@ - /* Registers for entry into PLT on x86-64. */ - # if __GNUC_PREREQ (4,0) - typedef float La_x86_64_xmm __attribute__ ((__vector_size__ (16))); --typedef float La_x86_64_ymm __attribute__ ((__vector_size__ (32))); -+typedef float La_x86_64_ymm __attribute__ ((__vector_size__ (32), -+ __aligned__ (16))); -+typedef double La_x86_64_zmm __attribute__ ((__vector_size__ (64), -+ __aligned__ (16))); - # else - typedef float La_x86_64_xmm __attribute__ ((__mode__ (__V4SF__))); - # endif -@@ -74,9 +77,10 @@ - { - # if __GNUC_PREREQ (4,0) - La_x86_64_ymm ymm[2]; -+ La_x86_64_zmm zmm[1]; - # endif - La_x86_64_xmm xmm[4]; --} La_x86_64_vector __attribute__ ((aligned(16))); -+} La_x86_64_vector __attribute__ ((__aligned__(16))); - - typedef struct La_x86_64_regs - { -diff -urN glibc-2.12-2-gc4ccff1/sysdeps/x86_64/dl-trampoline.h glibc-2.12-2-gc4ccff1.mod/sysdeps/x86_64/dl-trampoline.h ---- glibc-2.12-2-gc4ccff1/sysdeps/x86_64/dl-trampoline.h 2015-03-03 23:03:05.109457627 -0500 -+++ glibc-2.12-2-gc4ccff1.mod/sysdeps/x86_64/dl-trampoline.h 2015-03-03 23:06:58.434101818 -0500 -@@ -20,14 +20,26 @@ - - #ifdef RESTORE_AVX - /* This is to support AVX audit modules. */ -- vmovdqu %ymm0, (LR_VECTOR_OFFSET)(%rsp) -- vmovdqu %ymm1, (LR_VECTOR_OFFSET + VECTOR_SIZE)(%rsp) -- vmovdqu %ymm2, (LR_VECTOR_OFFSET + VECTOR_SIZE*2)(%rsp) -- vmovdqu %ymm3, (LR_VECTOR_OFFSET + VECTOR_SIZE*3)(%rsp) -- vmovdqu %ymm4, (LR_VECTOR_OFFSET + VECTOR_SIZE*4)(%rsp) -- vmovdqu %ymm5, (LR_VECTOR_OFFSET + VECTOR_SIZE*5)(%rsp) -- vmovdqu %ymm6, (LR_VECTOR_OFFSET + VECTOR_SIZE*6)(%rsp) -- vmovdqu %ymm7, (LR_VECTOR_OFFSET + VECTOR_SIZE*7)(%rsp) -+# if HAVE_NO_AVX512_ASM_SUPPORT -+ /* Restore AVX-512 registers. Use .byte becaues we lack assembler support. */ -+ .byte 0x62,0xf1,0xfe,0x48,0x7f,0x44,0x24,0x03 # vmovdqu64 %zmm0,0xc0(%rsp) -+ .byte 0x62,0xf1,0xfe,0x48,0x7f,0x4c,0x24,0x04 # vmovdqu64 %zmm1,0x100(%rsp) -+ .byte 0x62,0xf1,0xfe,0x48,0x7f,0x54,0x24,0x05 # vmovdqu64 %zmm2,0x140(%rsp) -+ .byte 0x62,0xf1,0xfe,0x48,0x7f,0x5c,0x24,0x06 # vmovdqu64 %zmm3,0x180(%rsp) -+ .byte 0x62,0xf1,0xfe,0x48,0x7f,0x64,0x24,0x07 # vmovdqu64 %zmm4,0x1c0(%rsp) -+ .byte 0x62,0xf1,0xfe,0x48,0x7f,0x6c,0x24,0x08 # vmovdqu64 %zmm5,0x200(%rsp) -+ .byte 0x62,0xf1,0xfe,0x48,0x7f,0x74,0x24,0x09 # vmovdqu64 %zmm6,0x240(%rsp) -+ .byte 0x62,0xf1,0xfe,0x48,0x7f,0x7c,0x24,0x0a # vmovdqu64 %zmm7,0x280(%rsp) -+# else -+ VMOV %VEC(0), (LR_VECTOR_OFFSET)(%rsp) -+ VMOV %VEC(1), (LR_VECTOR_OFFSET + VECTOR_SIZE)(%rsp) -+ VMOV %VEC(2), (LR_VECTOR_OFFSET + VECTOR_SIZE*2)(%rsp) -+ VMOV %VEC(3), (LR_VECTOR_OFFSET + VECTOR_SIZE*3)(%rsp) -+ VMOV %VEC(4), (LR_VECTOR_OFFSET + VECTOR_SIZE*4)(%rsp) -+ VMOV %VEC(5), (LR_VECTOR_OFFSET + VECTOR_SIZE*5)(%rsp) -+ VMOV %VEC(6), (LR_VECTOR_OFFSET + VECTOR_SIZE*6)(%rsp) -+ VMOV %VEC(7), (LR_VECTOR_OFFSET + VECTOR_SIZE*7)(%rsp) -+# endif - - /* Save xmm0-xmm7 registers to detect if any of them are - changed by audit module. */ -@@ -73,7 +85,11 @@ - je 2f - vmovdqa %xmm0, (LR_VECTOR_OFFSET)(%rsp) - jmp 1f --2: vmovdqu (LR_VECTOR_OFFSET)(%rsp), %ymm0 -+# if HAVE_NO_AVX512_ASM_SUPPORT -+2: .byte 0x62,0xf1,0xfe,0x48,0x6f,0x44,0x24,0x03 # vmovdqu64 0xc0(%rsp),%zmm0 -+# else -+2: VMOV (LR_VECTOR_OFFSET)(%rsp), %VEC(0) -+# endif - vmovdqa %xmm0, (LR_XMM_OFFSET)(%rsp) - - 1: vpcmpeqq (LR_SIZE + XMM_SIZE)(%rsp), %xmm1, %xmm8 -@@ -82,7 +98,11 @@ - je 2f - vmovdqa %xmm1, (LR_VECTOR_OFFSET + VECTOR_SIZE)(%rsp) - jmp 1f --2: vmovdqu (LR_VECTOR_OFFSET + VECTOR_SIZE)(%rsp), %ymm1 -+# if HAVE_NO_AVX512_ASM_SUPPORT -+2: .byte 0x62,0xf1,0xfe,0x48,0x6f,0x4c,0x24,0x04 # vmovdqu64 0x100(%rsp),%zmm1 -+# else -+2: VMOV (LR_VECTOR_OFFSET + VECTOR_SIZE)(%rsp), %VEC(1) -+# endif - vmovdqa %xmm1, (LR_XMM_OFFSET + XMM_SIZE)(%rsp) - - 1: vpcmpeqq (LR_SIZE + XMM_SIZE*2)(%rsp), %xmm2, %xmm8 -@@ -91,7 +111,11 @@ - je 2f - vmovdqa %xmm2, (LR_VECTOR_OFFSET + VECTOR_SIZE*2)(%rsp) - jmp 1f --2: vmovdqu (LR_VECTOR_OFFSET + VECTOR_SIZE*2)(%rsp), %ymm2 -+# if HAVE_NO_AVX512_ASM_SUPPORT -+2: .byte 0x62,0xf1,0xfe,0x48,0x6f,0x54,0x24,0x05 # vmovdqu64 0x140(%rsp),%zmm2 -+# else -+2: VMOV (LR_VECTOR_OFFSET + VECTOR_SIZE*2)(%rsp), %VEC(2) -+# endif - vmovdqa %xmm2, (LR_XMM_OFFSET + XMM_SIZE*2)(%rsp) - - 1: vpcmpeqq (LR_SIZE + XMM_SIZE*3)(%rsp), %xmm3, %xmm8 -@@ -100,7 +124,11 @@ - je 2f - vmovdqa %xmm3, (LR_VECTOR_OFFSET + VECTOR_SIZE*3)(%rsp) - jmp 1f --2: vmovdqu (LR_VECTOR_OFFSET + VECTOR_SIZE*3)(%rsp), %ymm3 -+# if HAVE_NO_AVX512_ASM_SUPPORT -+2: .byte 0x62,0xf1,0xfe,0x48,0x6f,0x5c,0x24,0x06 # vmovdqu64 0x180(%rsp),%zmm3 -+# else -+2: VMOV (LR_VECTOR_OFFSET + VECTOR_SIZE*3)(%rsp), %VEC(3) -+# endif - vmovdqa %xmm3, (LR_XMM_OFFSET + XMM_SIZE*3)(%rsp) - - 1: vpcmpeqq (LR_SIZE + XMM_SIZE*4)(%rsp), %xmm4, %xmm8 -@@ -109,7 +137,11 @@ - je 2f - vmovdqa %xmm4, (LR_VECTOR_OFFSET + VECTOR_SIZE*4)(%rsp) - jmp 1f --2: vmovdqu (LR_VECTOR_OFFSET + VECTOR_SIZE*4)(%rsp), %ymm4 -+# if HAVE_NO_AVX512_ASM_SUPPORT -+2: .byte 0x62,0xf1,0xfe,0x48,0x6f,0x64,0x24,0x07 # vmovdqu64 0x1c0(%rsp),%zmm4 -+# else -+2: VMOV (LR_VECTOR_OFFSET + VECTOR_SIZE*4)(%rsp), %VEC(4) -+# endif - vmovdqa %xmm4, (LR_XMM_OFFSET + XMM_SIZE*4)(%rsp) - - 1: vpcmpeqq (LR_SIZE + XMM_SIZE*5)(%rsp), %xmm5, %xmm8 -@@ -118,7 +150,11 @@ - je 2f - vmovdqa %xmm5, (LR_VECTOR_OFFSET + VECTOR_SIZE*5)(%rsp) - jmp 1f --2: vmovdqu (LR_VECTOR_OFFSET + VECTOR_SIZE*5)(%rsp), %ymm5 -+# if HAVE_NO_AVX512_ASM_SUPPORT -+2: .byte 0x62,0xf1,0xfe,0x48,0x6f,0x6c,0x24,0x08 # vmovdqu64 0x200(%rsp),%zmm5 -+# else -+2: VMOV (LR_VECTOR_OFFSET + VECTOR_SIZE*5)(%rsp), %VEC(5) -+# endif - vmovdqa %xmm5, (LR_XMM_OFFSET + XMM_SIZE*5)(%rsp) - - 1: vpcmpeqq (LR_SIZE + XMM_SIZE*6)(%rsp), %xmm6, %xmm8 -@@ -127,7 +163,11 @@ - je 2f - vmovdqa %xmm6, (LR_VECTOR_OFFSET + VECTOR_SIZE*6)(%rsp) - jmp 1f --2: vmovdqu (LR_VECTOR_OFFSET + VECTOR_SIZE*6)(%rsp), %ymm6 -+# if HAVE_NO_AVX512_ASM_SUPPORT -+2: .byte 0x62,0xf1,0xfe,0x48,0x6f,0x74,0x24,0x09 # vmovdqu64 0x240(%rsp),%zmm6 -+# else -+2: VMOV (LR_VECTOR_OFFSET + VECTOR_SIZE*6)(%rsp), %VEC(6) -+# endif - vmovdqa %xmm6, (LR_XMM_OFFSET + XMM_SIZE*6)(%rsp) - - 1: vpcmpeqq (LR_SIZE + XMM_SIZE*7)(%rsp), %xmm7, %xmm8 -@@ -136,7 +176,11 @@ - je 2f - vmovdqa %xmm7, (LR_VECTOR_OFFSET + VECTOR_SIZE*7)(%rsp) - jmp 1f --2: vmovdqu (LR_VECTOR_OFFSET + VECTOR_SIZE*7)(%rsp), %ymm7 -+# if HAVE_NO_AVX512_ASM_SUPPORT -+2: .byte 0x62,0xf1,0xfe,0x48,0x6f,0x7c,0x24,0x0a # vmovdqu64 0x280(%rsp),%zmm7 -+# else -+2: VMOV (LR_VECTOR_OFFSET + VECTOR_SIZE*7)(%rsp), %VEC(7) -+# endif - vmovdqa %xmm7, (LR_XMM_OFFSET + XMM_SIZE*7)(%rsp) - - 1: -@@ -214,8 +258,13 @@ - - #ifdef RESTORE_AVX - /* This is to support AVX audit modules. */ -- vmovdqu %ymm0, LRV_VECTOR0_OFFSET(%rcx) -- vmovdqu %ymm1, LRV_VECTOR1_OFFSET(%rcx) -+# if HAVE_NO_AVX512_ASM_SUPPORT -+ .byte 0x62,0xf1,0xfe,0x48,0x7f,0x81,0x50,0x00,0x00,0x00 # vmovdqu64 %zmm0,0x50(%rcx) -+ .byte 0x62,0xf1,0xfe,0x48,0x7f,0x89,0x90,0x00,0x00,0x00 # vmovdqu64 %zmm1,0x90(%rcx) -+# else -+ VMOV %VEC(0), LRV_VECTOR0_OFFSET(%rcx) -+ VMOV %VEC(1), LRV_VECTOR1_OFFSET(%rcx) -+# endif - - /* Save xmm0/xmm1 registers to detect if they are changed - by audit module. */ -@@ -244,13 +293,21 @@ - vpmovmskb %xmm2, %esi - cmpl $0xffff, %esi - jne 1f -- vmovdqu LRV_VECTOR0_OFFSET(%rsp), %ymm0 -+# if HAVE_NO_AVX512_ASM_SUPPORT -+ .byte 0x62,0xf1,0xfe,0x48,0x6f,0x84,0x24,0x50,0x00,0x00,0x00 # vmovdqu64 0x50(%rsp),%zmm0 -+# else -+ VMOV LRV_VECTOR0_OFFSET(%rsp), %VEC(0) -+# endif - - 1: vpcmpeqq (LRV_SIZE + XMM_SIZE)(%rsp), %xmm1, %xmm2 - vpmovmskb %xmm2, %esi - cmpl $0xffff, %esi - jne 1f -- vmovdqu LRV_VECTOR1_OFFSET(%rsp), %ymm1 -+# if HAVE_NO_AVX512_ASM_SUPPORT -+ .byte 0x62,0xf1,0xfe,0x48,0x6f,0x8c,0x24,0x90,0x00,0x00,0x00 # vmovdqu64 0x90(%rsp),%zmm1 -+# else -+ VMOV LRV_VECTOR1_OFFSET(%rsp), %VEC(1) -+# endif - - 1: - #endif -diff -urN glibc-2.12-2-gc4ccff1/sysdeps/x86_64/dl-trampoline.S glibc-2.12-2-gc4ccff1.mod/sysdeps/x86_64/dl-trampoline.S ---- glibc-2.12-2-gc4ccff1/sysdeps/x86_64/dl-trampoline.S 2015-03-03 23:03:05.108457659 -0500 -+++ glibc-2.12-2-gc4ccff1.mod/sysdeps/x86_64/dl-trampoline.S 2015-03-03 23:07:31.799049953 -0500 -@@ -134,7 +134,7 @@ - .previous - - cmpl $0, L(have_avx)(%rip) -- jne 1f -+ jne L(defined) - movq %rbx, %r11 # Save rbx - movl $1, %eax - cpuid -@@ -143,18 +143,51 @@ - // AVX and XSAVE supported? - andl $((1 << 28) | (1 << 27)), %ecx - cmpl $((1 << 28) | (1 << 27)), %ecx -- jne 2f -+ jne 10f -+ // AVX512 supported in processor? -+ movq %rbx, %r11 # Save rbx -+ xorl %ecx, %ecx -+ mov $0x7, %eax -+ cpuid -+ andl $(1 << 16), %ebx - xorl %ecx, %ecx - // Get XFEATURE_ENABLED_MASK - xgetbv -- andl $0x6, %eax --2: subl $0x5, %eax -+ test %ebx, %ebx -+ movq %r11, %rbx # Restore rbx -+ je 20f -+ // Verify that XCR0[7:5] = '111b' and -+ // XCR0[2:1] = '11b' which means -+ // that zmm state is enabled -+ andl $0xe6, %eax -+ cmpl $0xe6, %eax -+ jne 20f -+ movl %eax, L(have_avx)(%rip) -+L(avx512): -+# define RESTORE_AVX -+# define HAVE_NO_AVX512_ASM_SUPPORT 1 -+# define VMOV vmovdqu64 -+# define VEC(i) zmm##i -+# define MORE_CODE -+# include "dl-trampoline.h" -+# undef VMOV -+# undef VEC -+# undef RESTORE_AVX -+# undef HAVE_NO_AVX512_ASM_SUPPORT -+20: andl $0x6, %eax -+10: subl $0x5, %eax - movl %eax, L(have_avx)(%rip) - cmpl $0, %eax - --1: js L(no_avx) -+L(defined): -+ js L(no_avx) -+ cmpl $0xe6, L(have_avx)(%rip) -+ je L(avx512) -+ - - # define RESTORE_AVX -+# define VMOV vmovdqu -+# define VEC(i) ymm##i - # define MORE_CODE - # include "dl-trampoline.h" - -@@ -178,7 +211,7 @@ - _dl_x86_64_save_sse: - # ifdef HAVE_AVX_SUPPORT - cmpl $0, L(have_avx)(%rip) -- jne 1f -+ jne L(defined_5) - movq %rbx, %r11 # Save rbx - movl $1, %eax - cpuid -@@ -187,21 +220,37 @@ - // AVX and XSAVE supported? - andl $((1 << 28) | (1 << 27)), %ecx - cmpl $((1 << 28) | (1 << 27)), %ecx -- jne 2f -+ jne 1f -+ // AVX512 supported in a processor? -+ movq %rbx, %r11 # Save rbx -+ xorl %ecx,%ecx -+ mov $0x7,%eax -+ cpuid -+ andl $(1 << 16), %ebx - xorl %ecx, %ecx - // Get XFEATURE_ENABLED_MASK - xgetbv -- andl $0x6, %eax -- cmpl $0x6, %eax -- // Nonzero if SSE and AVX state saving is enabled. -- sete %al --2: leal -1(%eax,%eax), %eax -+ test %ebx, %ebx -+ movq %r11, %rbx # Restore rbx -+ je 2f -+ // Verify that XCR0[7:5] = '111b' and -+ // XCR0[2:1] = '11b' which means -+ // that zmm state is enabled -+ andl $0xe6, %eax - movl %eax, L(have_avx)(%rip) -- cmpl $0, %eax -+ cmpl $0xe6, %eax -+ je L(avx512_5) - --1: js L(no_avx5) -+2: andl $0x6, %eax -+1: subl $0x5, %eax -+ movl %eax, L(have_avx)(%rip) -+ cmpl $0, %eax - --# define YMM_SIZE 32 -+L(defined_5): -+ js L(no_avx5) -+ cmpl $0xe6, L(have_avx)(%rip) -+ je L(avx512_5) -+ - vmovdqa %ymm0, %fs:RTLD_SAVESPACE_SSE+0*YMM_SIZE - vmovdqa %ymm1, %fs:RTLD_SAVESPACE_SSE+1*YMM_SIZE - vmovdqa %ymm2, %fs:RTLD_SAVESPACE_SSE+2*YMM_SIZE -@@ -211,6 +260,26 @@ - vmovdqa %ymm6, %fs:RTLD_SAVESPACE_SSE+6*YMM_SIZE - vmovdqa %ymm7, %fs:RTLD_SAVESPACE_SSE+7*YMM_SIZE - ret -+L(avx512_5): -+# Original instructions: -+# vmovdqu64 %zmm0, %fs:RTLD_SAVESPACE_SSE+0*ZMM_SIZE -+# vmovdqu64 %zmm1, %fs:RTLD_SAVESPACE_SSE+1*ZMM_SIZE -+# vmovdqu64 %zmm2, %fs:RTLD_SAVESPACE_SSE+2*ZMM_SIZE -+# vmovdqu64 %zmm3, %fs:RTLD_SAVESPACE_SSE+3*ZMM_SIZE -+# vmovdqu64 %zmm4, %fs:RTLD_SAVESPACE_SSE+4*ZMM_SIZE -+# vmovdqu64 %zmm5, %fs:RTLD_SAVESPACE_SSE+5*ZMM_SIZE -+# vmovdqu64 %zmm6, %fs:RTLD_SAVESPACE_SSE+6*ZMM_SIZE -+# vmovdqu64 %zmm7, %fs:RTLD_SAVESPACE_SSE+7*ZMM_SIZE -+# Assembled instructions: -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x7f,0x04,0x25,0x80,0x00,0x00,0x00 # vmovdqu64 %zmm0,%fs:0x80 -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x7f,0x0c,0x25,0xc0,0x00,0x00,0x00 # vmovdqu64 %zmm1,%fs:0xc0 -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x7f,0x14,0x25,0x00,0x01,0x00,0x00 # vmovdqu64 %zmm2,%fs:0x100 -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x7f,0x1c,0x25,0x40,0x01,0x00,0x00 # vmovdqu64 %zmm3,%fs:0x140 -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x7f,0x24,0x25,0x80,0x01,0x00,0x00 # vmovdqu64 %zmm4,%fs:0x180 -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x7f,0x2c,0x25,0xc0,0x01,0x00,0x00 # vmovdqu64 %zmm5,%fs:0x1c0 -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x7f,0x34,0x25,0x00,0x02,0x00,0x00 # vmovdqu64 %zmm6,%fs:0x200 -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x7f,0x3c,0x25,0x40,0x02,0x00,0x00 # vmovdqu64 %zmm7,%fs:0x240 -+ ret - L(no_avx5): - # endif - movdqa %xmm0, %fs:RTLD_SAVESPACE_SSE+0*XMM_SIZE -@@ -234,6 +303,8 @@ - # ifdef HAVE_AVX_SUPPORT - cmpl $0, L(have_avx)(%rip) - js L(no_avx6) -+ cmpl $0xe6, L(have_avx)(%rip) -+ je L(avx512_6) - - vmovdqa %fs:RTLD_SAVESPACE_SSE+0*YMM_SIZE, %ymm0 - vmovdqa %fs:RTLD_SAVESPACE_SSE+1*YMM_SIZE, %ymm1 -@@ -244,6 +315,26 @@ - vmovdqa %fs:RTLD_SAVESPACE_SSE+6*YMM_SIZE, %ymm6 - vmovdqa %fs:RTLD_SAVESPACE_SSE+7*YMM_SIZE, %ymm7 - ret -+L(avx512_6): -+# Original instructions: -+# vmovdqu64 %fs:RTLD_SAVESPACE_SSE+0*ZMM_SIZE, %zmm0 -+# vmovdqu64 %fs:RTLD_SAVESPACE_SSE+1*ZMM_SIZE, %zmm1 -+# vmovdqu64 %fs:RTLD_SAVESPACE_SSE+2*ZMM_SIZE, %zmm2 -+# vmovdqu64 %fs:RTLD_SAVESPACE_SSE+3*ZMM_SIZE, %zmm3 -+# vmovdqu64 %fs:RTLD_SAVESPACE_SSE+4*ZMM_SIZE, %zmm4 -+# vmovdqu64 %fs:RTLD_SAVESPACE_SSE+5*ZMM_SIZE, %zmm5 -+# vmovdqu64 %fs:RTLD_SAVESPACE_SSE+6*ZMM_SIZE, %zmm6 -+# vmovdqu64 %fs:RTLD_SAVESPACE_SSE+7*ZMM_SIZE, %zmm7 -+# Assembled instructions: -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x6f,0x04,0x25,0x80,0x00,0x00,0x00 # vmovdqu64 %fs:0x80,%zmm0 -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x6f,0x0c,0x25,0xc0,0x00,0x00,0x00 # vmovdqu64 %fs:0xc0,%zmm1 -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x6f,0x14,0x25,0x00,0x01,0x00,0x00 # vmovdqu64 %fs:0x100,%zmm2 -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x6f,0x1c,0x25,0x40,0x01,0x00,0x00 # vmovdqu64 %fs:0x140,%zmm3 -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x6f,0x24,0x25,0x80,0x01,0x00,0x00 # vmovdqu64 %fs:0x180,%zmm4 -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x6f,0x2c,0x25,0xc0,0x01,0x00,0x00 # vmovdqu64 %fs:0x1c0,%zmm5 -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x6f,0x34,0x25,0x00,0x02,0x00,0x00 # vmovdqu64 %fs:0x200,%zmm6 -+ .byte 0x64,0x62,0xf1,0xfe,0x48,0x6f,0x3c,0x25,0x40,0x02,0x00,0x00 # vmovdqu64 %fs:0x240,%zmm7 -+ ret - L(no_avx6): - # endif - movdqa %fs:RTLD_SAVESPACE_SSE+0*XMM_SIZE, %xmm0 -diff -urN glibc-2.12-2-gc4ccff1/sysdeps/x86_64/link-defines.sym glibc-2.12-2-gc4ccff1.mod/sysdeps/x86_64/link-defines.sym ---- glibc-2.12-2-gc4ccff1/sysdeps/x86_64/link-defines.sym 2010-05-04 07:27:23.000000000 -0400 -+++ glibc-2.12-2-gc4ccff1.mod/sysdeps/x86_64/link-defines.sym 2015-03-03 23:03:25.042829206 -0500 -@@ -4,6 +4,8 @@ - -- - VECTOR_SIZE sizeof (La_x86_64_vector) - XMM_SIZE sizeof (La_x86_64_xmm) -+YMM_SIZE sizeof (La_x86_64_ymm) -+ZMM_SIZE sizeof (La_x86_64_zmm) - - LR_SIZE sizeof (struct La_x86_64_regs) - LR_RDX_OFFSET offsetof (struct La_x86_64_regs, lr_rdx) diff --git a/src/patches/glibc/glibc-rh1207236.patch b/src/patches/glibc/glibc-rh1207236.patch deleted file mode 100644 index 5671fd87d5..0000000000 --- a/src/patches/glibc/glibc-rh1207236.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -pruN glibc-2.12-2-gc4ccff1/malloc/malloc.c glibc-2.12-2-gc4ccff1.new/malloc/malloc.c ---- glibc-2.12-2-gc4ccff1/malloc/malloc.c 2015-04-10 12:02:54.011106386 +0530 -+++ glibc-2.12-2-gc4ccff1.new/malloc/malloc.c 2015-04-10 12:02:35.867958292 +0530 -@@ -5850,7 +5850,7 @@ _int_valloc(av, bytes) mstate av; size_t - #endif - { - /* Ensure initialization/consolidation */ -- if (have_fastchunks(av)) malloc_consolidate(av); -+ if (av && have_fastchunks(av)) malloc_consolidate(av); - return _int_memalign(av, mp_.pagesize, bytes); - } - diff --git a/src/patches/glibc/glibc-rh1209376.patch b/src/patches/glibc/glibc-rh1209376.patch deleted file mode 100644 index 74393f0395..0000000000 --- a/src/patches/glibc/glibc-rh1209376.patch +++ /dev/null @@ -1,18 +0,0 @@ -@@ -, +, @@ - resolv/nss_dns/dns-host.c:getanswer_r. ---- - resolv/nss_dns/dns-host.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) ---- a/resolv/nss_dns/dns-host.c -+++ a/resolv/nss_dns/dns-host.c -@@ -615,7 +615,8 @@ getanswer_r (const querybuf *answer, int anslen, const char *qname, int qtype, - int have_to_map = 0; - uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct host_data); - buffer += pad; -- if (__builtin_expect (buflen < sizeof (struct host_data) + pad, 0)) -+ buflen = buflen > pad ? buflen - pad : 0; -+ if (__builtin_expect (buflen < sizeof (struct host_data), 0)) - { - /* The buffer is too small. */ - too_small: --- diff --git a/src/patches/glibc/glibc-rh1217186.patch b/src/patches/glibc/glibc-rh1217186.patch deleted file mode 100644 index 6c6c3934ef..0000000000 --- a/src/patches/glibc/glibc-rh1217186.patch +++ /dev/null @@ -1,65 +0,0 @@ -# -# Author: Carlos O'Donell -# Upstream status: Needs to go upstream (2015-05-07) -# -diff --git a/inet/rcmd.c b/inet/rcmd.c -index acacaa0..9f2443b 100644 ---- a/inet/rcmd.c -+++ b/inet/rcmd.c -@@ -803,29 +803,38 @@ __validuser2_sa(hostf, ra, ralen, luser, ruser, rhost) - *p = '\0'; /* terminate username (+host?) */ - - /* buf -> host(?) ; user -> username(?) */ -+ if (*buf == '\0') -+ break; -+ if (*user == '\0') -+ user = luser; -+ -+ /* First check the user part. This is an optimization, since -+ one should always check the host first in order to detect -+ negative host checks (which we check for later). */ -+ ucheck = __icheckuser (user, ruser); -+ -+ /* Either we found the user, or we didn't and this is a -+ negative host check. We must do the negative host lookup -+ in order to preserve the semantics of stopping on this line -+ before processing others. */ -+ if (ucheck != 0 || *buf == '-') { -+ -+ /* Next check host part */ -+ hcheck = __checkhost_sa (ra, ralen, buf, rhost); -+ -+ /* Negative '-host user(?)' match? */ -+ if (hcheck < 0) -+ break; - -- /* First check host part */ -- hcheck = __checkhost_sa (ra, ralen, buf, rhost); -- -- if (hcheck < 0) -- break; -- -- if (hcheck) { -- /* Then check user part */ -- if (! (*user)) -- user = luser; -- -- ucheck = __icheckuser (user, ruser); -- -- /* Positive 'host user' match? */ -- if (ucheck > 0) { -+ /* Positive 'host user' match? */ -+ if (hcheck > 0 && ucheck > 0) { - retval = 0; - break; - } - -- /* Negative 'host -user' match? */ -- if (ucheck < 0) -- break; -+ /* Negative 'host -user' match? */ -+ if (hcheck > 0 && ucheck < 0) -+ break; - - /* Neither, go on looking for match */ - } diff --git a/src/patches/glibc/glibc-rh1256812-2.patch b/src/patches/glibc/glibc-rh1256812-2.patch deleted file mode 100644 index 5596de7bd2..0000000000 --- a/src/patches/glibc/glibc-rh1256812-2.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -pruN glibc-2.12-2-gc4ccff1/malloc/malloc.c glibc-2.12-2-gc4ccff1.new/malloc/malloc.c ---- glibc-2.12-2-gc4ccff1/malloc/malloc.c 2015-07-28 22:28:22.517107147 +0530 -+++ glibc-2.12-2-gc4ccff1.new/malloc/malloc.c 2015-07-28 22:24:59.541394493 +0530 -@@ -4087,8 +4087,9 @@ public_cALLOc(size_t n, size_t elem_size - /* Maybe the failure is due to running out of mmapped areas. */ - if(av != &main_arena) { - (void)mutex_unlock(&av->mutex); -- (void)mutex_lock(&main_arena.mutex); -- mem = _int_malloc(&main_arena, sz); -+ av = &main_arena; -+ (void)mutex_lock(&av->mutex); -+ mem = _int_malloc(av, sz); - } else { - #if USE_ARENAS - /* ... or sbrk() has failed and there is still a chance to mmap() */ diff --git a/src/patches/glibc/glibc-rh1256812-3.patch b/src/patches/glibc/glibc-rh1256812-3.patch deleted file mode 100644 index e8fbb1b34a..0000000000 --- a/src/patches/glibc/glibc-rh1256812-3.patch +++ /dev/null @@ -1,138 +0,0 @@ -commit fdc0f374bcd2d0513569aa8d600f960e43e8af1d -Author: Ulrich Drepper -Date: Sun Oct 24 22:37:00 2010 -0400 - - Fix perturbing in malloc on free. - -commit e8349efd466cfedc0aa98be61d88ca8795c9e565 -Author: Ondřej Bílka -Date: Mon Dec 9 17:25:19 2013 +0100 - - Simplify perturb_byte logic. - -diff --git a/malloc/malloc.c b/malloc/malloc.c -index 4821deb..ac8c3f6 100644 ---- a/malloc/malloc.c -+++ b/malloc/malloc.c -@@ -1870,8 +1870,20 @@ static int check_action = DEFAULT_CHECK_ACTION; - - static int perturb_byte; - --#define alloc_perturb(p, n) memset (p, (perturb_byte ^ 0xff) & 0xff, n) --#define free_perturb(p, n) memset (p, perturb_byte & 0xff, n) -+static inline void -+alloc_perturb (char *p, size_t n) -+{ -+ if (__glibc_unlikely (perturb_byte)) -+ memset (p, perturb_byte ^ 0xff, n); -+} -+ -+static inline void -+free_perturb (char *p, size_t n) -+{ -+ if (__glibc_unlikely (perturb_byte)) -+ memset (p, perturb_byte, n); -+} -+ - - - /* ------------------- Support for multiple arenas -------------------- */ -@@ -3287,8 +3299,7 @@ _int_malloc(mstate av, size_t bytes) - #endif - check_remalloced_chunk(av, victim, nb); - void *p = chunk2mem(victim); -- if (__builtin_expect (perturb_byte, 0)) -- alloc_perturb (p, bytes); -+ alloc_perturb (p, bytes); - return p; - } - } -@@ -3323,8 +3334,7 @@ _int_malloc(mstate av, size_t bytes) - victim->size |= NON_MAIN_ARENA; - check_malloced_chunk(av, victim, nb); - void *p = chunk2mem(victim); -- if (__builtin_expect (perturb_byte, 0)) -- alloc_perturb (p, bytes); -+ alloc_perturb (p, bytes); - return p; - } - } -@@ -3403,8 +3413,7 @@ _int_malloc(mstate av, size_t bytes) - - check_malloced_chunk(av, victim, nb); - void *p = chunk2mem(victim); -- if (__builtin_expect (perturb_byte, 0)) -- alloc_perturb (p, bytes); -+ alloc_perturb (p, bytes); - return p; - } - -@@ -3420,8 +3429,7 @@ _int_malloc(mstate av, size_t bytes) - victim->size |= NON_MAIN_ARENA; - check_malloced_chunk(av, victim, nb); - void *p = chunk2mem(victim); -- if (__builtin_expect (perturb_byte, 0)) -- alloc_perturb (p, bytes); -+ alloc_perturb (p, bytes); - return p; - } - -@@ -3545,8 +3553,7 @@ _int_malloc(mstate av, size_t bytes) - } - check_malloced_chunk(av, victim, nb); - void *p = chunk2mem(victim); -- if (__builtin_expect (perturb_byte, 0)) -- alloc_perturb (p, bytes); -+ alloc_perturb (p, bytes); - return p; - } - } -@@ -3649,8 +3656,7 @@ _int_malloc(mstate av, size_t bytes) - } - check_malloced_chunk(av, victim, nb); - void *p = chunk2mem(victim); -- if (__builtin_expect (perturb_byte, 0)) -- alloc_perturb (p, bytes); -+ alloc_perturb (p, bytes); - return p; - } - } -@@ -3684,8 +3690,7 @@ _int_malloc(mstate av, size_t bytes) - - check_malloced_chunk(av, victim, nb); - void *p = chunk2mem(victim); -- if (__builtin_expect (perturb_byte, 0)) -- alloc_perturb (p, bytes); -+ alloc_perturb (p, bytes); - return p; - } - -@@ -3705,7 +3710,7 @@ _int_malloc(mstate av, size_t bytes) - */ - else { - void *p = sYSMALLOc(nb, av); -- if (p != NULL && __builtin_expect (perturb_byte, 0)) -+ if (p != NULL) - alloc_perturb (p, bytes); - return p; - } -@@ -3798,8 +3803,7 @@ _int_free(mstate av, mchunkptr p, int have_lock) - #endif - } - -- if (__builtin_expect (perturb_byte, 0)) -- free_perturb (chunk2mem(p), size - SIZE_SZ); -+ free_perturb (chunk2mem(p), size - 2 * SIZE_SZ); - - set_fastchunks(av); - unsigned int idx = fastbin_index(size); -@@ -3881,8 +3885,7 @@ _int_free(mstate av, mchunkptr p, int have_lock) - goto errout; - } - -- if (__builtin_expect (perturb_byte, 0)) -- free_perturb (chunk2mem(p), size - SIZE_SZ); -+ free_perturb (chunk2mem(p), size - 2 * SIZE_SZ); - - /* consolidate backward */ - if (!prev_inuse(p)) { diff --git a/src/patches/glibc/glibc-rh1256812-4.patch b/src/patches/glibc/glibc-rh1256812-4.patch deleted file mode 100644 index 1e497f3274..0000000000 --- a/src/patches/glibc/glibc-rh1256812-4.patch +++ /dev/null @@ -1,45 +0,0 @@ -commit 55765a349a96482207fbf927d3666a51878f973b -Author: Josef Bacik -Date: Wed Aug 19 14:06:56 2015 +0530 - - Don't fall back to mmap if the original arena is not corrupt - - The new logic to find an uncontended non-corrupt arena misses a case - where the current arena is contended, but is not corrupt. In the - degenerate case, this is the only arena. In both cases, the logic - falls back to using mmap despite there being an available arena. - - Attached patch by Josef Bacik makes sure that all arenas are indeed - corrupt before falling back to malloc. Verified on x86_64. - - * malloc/arena.c (reused_arena): return NULL only if all - arenas are corrupt. - -diff --git a/malloc/arena.c b/malloc/arena.c -index 21ecc5a1..0424273 100644 ---- a/malloc/arena.c -+++ b/malloc/arena.c -@@ -823,16 +823,21 @@ reused_arena (mstate avoid_arena) - - /* Make sure that the arena we get is not corrupted. */ - mstate begin = result; -+ bool looped = false; -+ - while (arena_is_corrupt (result)) - { - result = result->next; - if (result == begin) -- break; -+ { -+ looped = true; -+ break; -+ } - } - - /* We could not find any arena that was either not corrupted or not the one - we wanted to avoid. */ -- if (result == begin) -+ if (looped) - return NULL; - - /* No arena available without contention. Wait for the next in line. */ diff --git a/src/patches/glibc/glibc-rh1256812.patch b/src/patches/glibc/glibc-rh1256812.patch deleted file mode 100644 index 1eafcc17ba..0000000000 --- a/src/patches/glibc/glibc-rh1256812.patch +++ /dev/null @@ -1,56 +0,0 @@ -diff -pruN glibc-2.12-2-gc4ccff1/malloc/malloc.c glibc-2.12-2-gc4ccff1.v2/malloc/malloc.c ---- glibc-2.12-2-gc4ccff1/malloc/malloc.c 2015-07-24 19:29:37.679907396 +0530 -+++ glibc-2.12-2-gc4ccff1.v2/malloc/malloc.c 2015-07-24 18:59:59.928055174 +0530 -@@ -3737,8 +3737,7 @@ public_mALLOc(size_t bytes) - mstate prev = ar_ptr->next ? ar_ptr : 0; - (void)mutex_unlock(&ar_ptr->mutex); - ar_ptr = arena_get2(prev, bytes, true); -- if(ar_ptr) -- victim = _int_malloc(ar_ptr, bytes); -+ victim = _int_malloc(ar_ptr, bytes); - #endif - } - } -@@ -3968,8 +3967,7 @@ public_mEMALIGn(size_t alignment, size_t - mstate prev = ar_ptr->next ? ar_ptr : 0; - (void)mutex_unlock(&ar_ptr->mutex); - ar_ptr = arena_get2(prev, bytes, true); -- if(ar_ptr) -- p = _int_memalign(ar_ptr, alignment, bytes); -+ p = _int_memalign(ar_ptr, alignment, bytes); - #endif - } - } -@@ -4024,8 +4022,7 @@ public_vALLOc(size_t bytes) - mstate prev = ar_ptr->next ? ar_ptr : 0; - (void)mutex_unlock(&ar_ptr->mutex); - ar_ptr = arena_get2(prev, bytes, true); -- if(ar_ptr) -- p = _int_memalign(ar_ptr, pagesz, bytes); -+ p = _int_memalign(ar_ptr, pagesz, bytes); - #endif - } - } -@@ -4080,8 +4077,7 @@ public_pVALLOc(size_t bytes) - mstate prev = ar_ptr->next ? ar_ptr : 0; - (void)mutex_unlock(&ar_ptr->mutex); - ar_ptr = arena_get2(prev, bytes + 2*pagesz + MINSIZE, true); -- if(ar_ptr) -- p = _int_memalign(ar_ptr, pagesz, rounded_bytes); -+ p = _int_memalign(ar_ptr, pagesz, rounded_bytes); - #endif - } - } -@@ -4180,11 +4176,9 @@ public_cALLOc(size_t n, size_t elem_size - mstate prev = av->next ? av : 0; - (void)mutex_unlock(&av->mutex); - av = arena_get2(prev, sz, true); -- if(av) -- mem = _int_malloc(av, sz); -+ mem = _int_malloc(av, sz); - #endif - } -- if (mem == 0) return 0; - } - - if (av != NULL) diff --git a/src/patches/glibc/glibc-rh1256890.patch b/src/patches/glibc/glibc-rh1256890.patch deleted file mode 100644 index 4683dc40ce..0000000000 --- a/src/patches/glibc/glibc-rh1256890.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -pruN glibc-2.12-2-gc4ccff1/malloc/malloc.c glibc-2.12-2-gc4ccff1.new/malloc/malloc.c ---- glibc-2.12-2-gc4ccff1/malloc/malloc.c 2015-08-19 23:13:52.826205930 +0530 -+++ glibc-2.12-2-gc4ccff1.new/malloc/malloc.c 2015-08-19 23:13:40.021049289 +0530 -@@ -5867,7 +5867,7 @@ _int_pvalloc(av, bytes) mstate av, size_ - size_t pagesz; - - /* Ensure initialization/consolidation */ -- if (have_fastchunks(av)) malloc_consolidate(av); -+ if (av && have_fastchunks(av)) malloc_consolidate(av); - pagesz = mp_.pagesize; - return _int_memalign(av, pagesz, (bytes + pagesz - 1) & ~(pagesz - 1)); - } diff --git a/src/patches/glibc/glibc-rh1256891.patch b/src/patches/glibc/glibc-rh1256891.patch deleted file mode 100644 index 5364dba0a2..0000000000 --- a/src/patches/glibc/glibc-rh1256891.patch +++ /dev/null @@ -1,26 +0,0 @@ -commit 5c44738353ecaa1c81efca063ee8b55e092d7a43 -Author: Alexandre Oliva -Date: Wed Sep 5 15:43:04 2012 -0300 - - Don't change no_dyn_threshold on mallopt failure - - * malloc/malloc.c (__libc_mallopt) : Do not - change internal state upon failure. - -diff --git a/malloc/malloc.c b/malloc/malloc.c -index bd562df..c69e281 100644 ---- a/malloc/malloc.c -+++ b/malloc/malloc.c -@@ -4769,8 +4769,10 @@ int __libc_mallopt(int param_number, int value) - res = 0; - else - #endif -- mp_.mmap_threshold = value; -- mp_.no_dyn_threshold = 1; -+ { -+ mp_.mmap_threshold = value; -+ mp_.no_dyn_threshold = 1; -+ } - break; - - case M_MMAP_MAX: diff --git a/src/patches/glibc/glibc-rh1291270.patch b/src/patches/glibc/glibc-rh1291270.patch deleted file mode 100644 index 8d12d95e77..0000000000 --- a/src/patches/glibc/glibc-rh1291270.patch +++ /dev/null @@ -1,41 +0,0 @@ -Description: Allow loading more libraries with static TLS. -Author: Carlos O'Donell -Origin: PATCH -Bug-RHEL: #1291270 (rhel-6.7.z), #1198802 (rhel-6.8), #1202952 (rhel-7.2) -Bug-Fedora: #1124987 (F21) -Bug-Upstream: #17090, #17620, #17621, #17628 (2.22) -Upstream status: not-needed -# -# The correct fix for this is already upstream and involves -# changing the heuristics for DTV slot increases. In RHEL6 -# we take the conservative approach and provide a larger -# slot surplus. This matches what was done in Fedora 21 before -# we had the upstream fix: f8aeae347377f3dfa8cbadde057adf1827fb1d44. -# In RHEL7 we have the upstream fix. This is fixed upstream as of -# glibc 2.22. -# -Index: glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/generic/ldsodefs.h -+++ glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h -@@ -496,8 +496,18 @@ struct rtld_global - have to iterate beyond the first element in the slotinfo list. */ - #define TLS_SLOTINFO_SURPLUS (62) - --/* Number of additional slots in the dtv allocated. */ --#define DTV_SURPLUS (14) -+/* Number of additional allocated dtv slots. This was initially -+ 14, but problems with python, MESA, and X11's uses of static TLS meant -+ that most distributions were very close to this limit when they loaded -+ dynamically interpreted languages that used graphics. The simplest -+ solution was to roughly double the number of slots. The actual static -+ image space usage was relatively small, for example in MESA you -+ had only two dispatch pointers for a total of 16 bytes. If we hit up -+ against this limit again we should start a campaign with the -+ distributions to coordinate the usage of static TLS. Any user of this -+ resource is effectively coordinating a global resource since this -+ surplus is allocated for each thread at startup. */ -+#define DTV_SURPLUS (32) - - /* Initial dtv of the main thread, not allocated with normal malloc. */ - EXTERN void *_dl_initial_dtv; diff --git a/src/patches/glibc/glibc-rh1296031-0.patch b/src/patches/glibc/glibc-rh1296031-0.patch deleted file mode 100644 index d44e4911a8..0000000000 --- a/src/patches/glibc/glibc-rh1296031-0.patch +++ /dev/null @@ -1,465 +0,0 @@ -Sourceware bug 16574 - -commit d668061994a7486a3ba9c7d5e7882d85a2883707 -Author: Andreas Schwab -Date: Thu Feb 13 11:01:57 2014 +0100 - - Fix memory leak in _nss_dns_gethostbyname4_r with big DNS answer - -commit ab7ac0f2cf8731fe4c3f3aea6088a7c0127b5725 -Author: Ondřej Bílka -Date: Sun Feb 16 12:59:23 2014 +0100 - - Deduplicate resolv/nss_dns/dns-host.c - - In resolv/nss_dns/dns-host.c one of code path duplicated code after - that. We merge these paths. - -commit ab09bf616ad527b249aca5f2a4956fd526f0712f -Author: Andreas Schwab -Date: Tue Feb 18 10:57:25 2014 +0100 - - Properly fix memory leak in _nss_dns_gethostbyname4_r with big DNS answer - - Instead of trying to guess whether the second buffer needs to be freed - set a flag at the place it is allocated - -Index: glibc-2.12-2-gc4ccff1/include/resolv.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/include/resolv.h -+++ glibc-2.12-2-gc4ccff1/include/resolv.h -@@ -58,11 +58,11 @@ libc_hidden_proto (__res_randomid) - libc_hidden_proto (__res_state) - - int __libc_res_nquery (res_state, const char *, int, int, u_char *, int, -- u_char **, u_char **, int *, int *); -+ u_char **, u_char **, int *, int *, int *); - int __libc_res_nsearch (res_state, const char *, int, int, u_char *, int, -- u_char **, u_char **, int *, int *); -+ u_char **, u_char **, int *, int *, int *); - int __libc_res_nsend (res_state, const u_char *, int, const u_char *, int, -- u_char *, int, u_char **, u_char **, int *, int *) -+ u_char *, int, u_char **, u_char **, int *, int *, int *) - attribute_hidden; - - libresolv_hidden_proto (_sethtent) -Index: glibc-2.12-2-gc4ccff1/resolv/gethnamaddr.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/resolv/gethnamaddr.c -+++ glibc-2.12-2-gc4ccff1/resolv/gethnamaddr.c -@@ -634,7 +634,7 @@ gethostbyname2(name, af) - buf.buf = origbuf = (querybuf *) alloca (1024); - - if ((n = __libc_res_nsearch(&_res, name, C_IN, type, buf.buf->buf, 1024, -- &buf.ptr, NULL, NULL, NULL)) < 0) { -+ &buf.ptr, NULL, NULL, NULL, NULL)) < 0) { - if (buf.buf != origbuf) - free (buf.buf); - Dprintf("res_nsearch failed (%d)\n", n); -@@ -729,12 +729,12 @@ gethostbyaddr(addr, len, af) - buf.buf = orig_buf = (querybuf *) alloca (1024); - - n = __libc_res_nquery(&_res, qbuf, C_IN, T_PTR, buf.buf->buf, 1024, -- &buf.ptr, NULL, NULL, NULL); -+ &buf.ptr, NULL, NULL, NULL, NULL); - if (n < 0 && af == AF_INET6 && (_res.options & RES_NOIP6DOTINT) == 0) { - strcpy(qp, "ip6.int"); - n = __libc_res_nquery(&_res, qbuf, C_IN, T_PTR, buf.buf->buf, - buf.buf != orig_buf ? MAXPACKET : 1024, -- &buf.ptr, NULL, NULL, NULL); -+ &buf.ptr, NULL, NULL, NULL, NULL); - } - if (n < 0) { - if (buf.buf != orig_buf) -Index: glibc-2.12-2-gc4ccff1/resolv/nss_dns/dns-canon.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/resolv/nss_dns/dns-canon.c -+++ glibc-2.12-2-gc4ccff1/resolv/nss_dns/dns-canon.c -@@ -62,7 +62,7 @@ _nss_dns_getcanonname_r (const char *nam - { - int r = __libc_res_nquery (&_res, name, ns_c_in, qtypes[i], - buf, sizeof (buf), &ansp.ptr, NULL, NULL, -- NULL); -+ NULL, NULL); - if (r > 0) - { - /* We need to decode the response. Just one question record. -Index: glibc-2.12-2-gc4ccff1/resolv/nss_dns/dns-host.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/resolv/nss_dns/dns-host.c -+++ glibc-2.12-2-gc4ccff1/resolv/nss_dns/dns-host.c -@@ -191,7 +191,7 @@ _nss_dns_gethostbyname3_r (const char *n - host_buffer.buf = orig_host_buffer = (querybuf *) alloca (1024); - - n = __libc_res_nsearch (&_res, name, C_IN, type, host_buffer.buf->buf, -- 1024, &host_buffer.ptr, NULL, NULL, NULL); -+ 1024, &host_buffer.ptr, NULL, NULL, NULL, NULL); - if (n < 0) - { - switch (errno) -@@ -221,7 +221,7 @@ _nss_dns_gethostbyname3_r (const char *n - n = __libc_res_nsearch (&_res, name, C_IN, T_A, host_buffer.buf->buf, - host_buffer.buf != orig_host_buffer - ? MAXPACKET : 1024, &host_buffer.ptr, -- NULL, NULL, NULL); -+ NULL, NULL, NULL, NULL); - - if (n < 0) - { -@@ -304,13 +304,20 @@ _nss_dns_gethostbyname4_r (const char *n - u_char *ans2p = NULL; - int nans2p = 0; - int resplen2 = 0; -+ int ans2p_malloced = 0; - - int olderr = errno; - enum nss_status status; - int n = __libc_res_nsearch (&_res, name, C_IN, T_UNSPEC, - host_buffer.buf->buf, 2048, &host_buffer.ptr, -- &ans2p, &nans2p, &resplen2); -- if (n < 0) -+ &ans2p, &nans2p, &resplen2, &ans2p_malloced); -+ if (n >= 0) -+ { -+ status = gaih_getanswer (host_buffer.buf, n, (const querybuf *) ans2p, -+ resplen2, name, pat, buffer, buflen, -+ errnop, herrnop, ttlp); -+ } -+ else - { - if (errno == ESRCH) - { -@@ -325,16 +332,11 @@ _nss_dns_gethostbyname4_r (const char *n - *errnop = EAGAIN; - else - __set_errno (olderr); -- -- if (host_buffer.buf != orig_host_buffer) -- free (host_buffer.buf); -- -- return status; - } - -- status = gaih_getanswer(host_buffer.buf, n, (const querybuf *) ans2p, -- resplen2, name, pat, buffer, buflen, -- errnop, herrnop, ttlp); -+ /* Check whether ans2p was separately allocated. */ -+ if (ans2p_malloced) -+ free (ans2p); - - if (host_buffer.buf != orig_host_buffer) - free (host_buffer.buf); -@@ -444,7 +446,7 @@ _nss_dns_gethostbyaddr2_r (const void *a - strcpy (qp, "].ip6.arpa"); - n = __libc_res_nquery (&_res, qbuf, C_IN, T_PTR, - host_buffer.buf->buf, 1024, &host_buffer.ptr, -- NULL, NULL, NULL); -+ NULL, NULL, NULL, NULL); - if (n >= 0) - goto got_it_already; - } -@@ -465,14 +467,14 @@ _nss_dns_gethostbyaddr2_r (const void *a - } - - n = __libc_res_nquery (&_res, qbuf, C_IN, T_PTR, host_buffer.buf->buf, -- 1024, &host_buffer.ptr, NULL, NULL, NULL); -+ 1024, &host_buffer.ptr, NULL, NULL, NULL, NULL); - if (n < 0 && af == AF_INET6 && (_res.options & RES_NOIP6DOTINT) == 0) - { - strcpy (qp, "ip6.int"); - n = __libc_res_nquery (&_res, qbuf, C_IN, T_PTR, host_buffer.buf->buf, - host_buffer.buf != orig_host_buffer - ? MAXPACKET : 1024, &host_buffer.ptr, -- NULL, NULL, NULL); -+ NULL, NULL, NULL, NULL); - } - if (n < 0) - { -Index: glibc-2.12-2-gc4ccff1/resolv/nss_dns/dns-network.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/resolv/nss_dns/dns-network.c -+++ glibc-2.12-2-gc4ccff1/resolv/nss_dns/dns-network.c -@@ -130,7 +130,7 @@ _nss_dns_getnetbyname_r (const char *nam - net_buffer.buf = orig_net_buffer = (querybuf *) alloca (1024); - - anslen = __libc_res_nsearch (&_res, qbuf, C_IN, T_PTR, net_buffer.buf->buf, -- 1024, &net_buffer.ptr, NULL, NULL, NULL); -+ 1024, &net_buffer.ptr, NULL, NULL, NULL, NULL); - if (anslen < 0) - { - /* Nothing found. */ -@@ -206,7 +206,7 @@ _nss_dns_getnetbyaddr_r (uint32_t net, i - net_buffer.buf = orig_net_buffer = (querybuf *) alloca (1024); - - anslen = __libc_res_nquery (&_res, qbuf, C_IN, T_PTR, net_buffer.buf->buf, -- 1024, &net_buffer.ptr, NULL, NULL, NULL); -+ 1024, &net_buffer.ptr, NULL, NULL, NULL, NULL); - if (anslen < 0) - { - /* Nothing found. */ -Index: glibc-2.12-2-gc4ccff1/resolv/res_query.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/resolv/res_query.c -+++ glibc-2.12-2-gc4ccff1/resolv/res_query.c -@@ -98,7 +98,7 @@ static int - __libc_res_nquerydomain(res_state statp, const char *name, const char *domain, - int class, int type, u_char *answer, int anslen, - u_char **answerp, u_char **answerp2, int *nanswerp2, -- int *resplen2); -+ int *resplen2, int *answerp2_malloced); - - /* - * Formulate a normal query, send, and await answer. -@@ -119,7 +119,8 @@ __libc_res_nquery(res_state statp, - u_char **answerp, /* if buffer needs to be enlarged */ - u_char **answerp2, - int *nanswerp2, -- int *resplen2) -+ int *resplen2, -+ int *answerp2_malloced) - { - HEADER *hp = (HEADER *) answer; - HEADER *hp2; -@@ -224,7 +225,8 @@ __libc_res_nquery(res_state statp, - } - assert (answerp == NULL || (void *) *answerp == (void *) answer); - n = __libc_res_nsend(statp, query1, nquery1, query2, nquery2, answer, -- anslen, answerp, answerp2, nanswerp2, resplen2); -+ anslen, answerp, answerp2, nanswerp2, resplen2, -+ answerp2_malloced); - if (use_malloc) - free (buf); - if (n < 0) { -@@ -316,7 +318,7 @@ res_nquery(res_state statp, - int anslen) /* size of answer buffer */ - { - return __libc_res_nquery(statp, name, class, type, answer, anslen, -- NULL, NULL, NULL, NULL); -+ NULL, NULL, NULL, NULL, NULL); - } - libresolv_hidden_def (res_nquery) - -@@ -335,7 +337,8 @@ __libc_res_nsearch(res_state statp, - u_char **answerp, - u_char **answerp2, - int *nanswerp2, -- int *resplen2) -+ int *resplen2, -+ int *answerp2_malloced) - { - const char *cp, * const *domain; - HEADER *hp = (HEADER *) answer; -@@ -359,7 +362,7 @@ __libc_res_nsearch(res_state statp, - if (!dots && (cp = res_hostalias(statp, name, tmp, sizeof tmp))!= NULL) - return (__libc_res_nquery(statp, cp, class, type, answer, - anslen, answerp, answerp2, -- nanswerp2, resplen2)); -+ nanswerp2, resplen2, answerp2_malloced)); - - #ifdef DEBUG - if (statp->options & RES_DEBUG) -@@ -376,7 +379,8 @@ __libc_res_nsearch(res_state statp, - if (dots >= statp->ndots || trailing_dot) { - ret = __libc_res_nquerydomain(statp, name, NULL, class, type, - answer, anslen, answerp, -- answerp2, nanswerp2, resplen2); -+ answerp2, nanswerp2, resplen2, -+ answerp2_malloced); - if (ret > 0 || trailing_dot - /* If the second response is valid then we use that. */ - || (ret == 0 && resplen2 != NULL && *resplen2 > 0)) -@@ -387,12 +391,12 @@ __libc_res_nsearch(res_state statp, - answer = *answerp; - anslen = MAXPACKET; - } -- if (answerp2 -- && (*answerp2 < answer || *answerp2 >= answer + anslen)) -+ if (answerp2 && *answerp2_malloced) - { - free (*answerp2); - *nanswerp2 = 0; - *answerp2 = NULL; -+ *answerp2_malloced = 0; - } - } - -@@ -418,7 +422,7 @@ __libc_res_nsearch(res_state statp, - class, type, - answer, anslen, answerp, - answerp2, nanswerp2, -- resplen2); -+ resplen2, answerp2_malloced); - if (ret > 0 || (ret == 0 && resplen2 != NULL - && *resplen2 > 0)) - return (ret); -@@ -427,13 +431,12 @@ __libc_res_nsearch(res_state statp, - answer = *answerp; - anslen = MAXPACKET; - } -- if (answerp2 -- && (*answerp2 < answer -- || *answerp2 >= answer + anslen)) -+ if (answerp2 && *answerp2_malloced) - { - free (*answerp2); - *nanswerp2 = 0; - *answerp2 = NULL; -+ *answerp2_malloced = 0; - } - - /* -@@ -489,7 +492,8 @@ __libc_res_nsearch(res_state statp, - if (dots && !(tried_as_is || root_on_list)) { - ret = __libc_res_nquerydomain(statp, name, NULL, class, type, - answer, anslen, answerp, -- answerp2, nanswerp2, resplen2); -+ answerp2, nanswerp2, resplen2, -+ answerp2_malloced); - if (ret > 0 || (ret == 0 && resplen2 != NULL - && *resplen2 > 0)) - return (ret); -@@ -502,11 +506,12 @@ __libc_res_nsearch(res_state statp, - * else send back meaningless H_ERRNO, that being the one from - * the last DNSRCH we did. - */ -- if (answerp2 && (*answerp2 < answer || *answerp2 >= answer + anslen)) -+ if (answerp2 && *answerp2_malloced) - { - free (*answerp2); -- *nanswerp2 = NULL; -+ *nanswerp2 = 0; - *answerp2 = NULL; -+ *answerp2_malloced = 0; - } - if (saved_herrno != -1) - RES_SET_H_ERRNO(statp, saved_herrno); -@@ -526,7 +531,7 @@ res_nsearch(res_state statp, - int anslen) /* size of answer */ - { - return __libc_res_nsearch(statp, name, class, type, answer, -- anslen, NULL, NULL, NULL, NULL); -+ anslen, NULL, NULL, NULL, NULL, NULL); - } - libresolv_hidden_def (res_nsearch) - -@@ -544,7 +549,8 @@ __libc_res_nquerydomain(res_state statp, - u_char **answerp, - u_char **answerp2, - int *nanswerp2, -- int *resplen2) -+ int *resplen2, -+ int *answerp2_malloced) - { - char nbuf[MAXDNAME]; - const char *longname = nbuf; -@@ -582,7 +588,7 @@ __libc_res_nquerydomain(res_state statp, - } - return (__libc_res_nquery(statp, longname, class, type, answer, - anslen, answerp, answerp2, nanswerp2, -- resplen2)); -+ resplen2, answerp2_malloced)); - } - - int -@@ -594,7 +600,8 @@ res_nquerydomain(res_state statp, - int anslen) /* size of answer */ - { - return __libc_res_nquerydomain(statp, name, domain, class, type, -- answer, anslen, NULL, NULL, NULL, NULL); -+ answer, anslen, NULL, NULL, NULL, NULL, -+ NULL); - } - libresolv_hidden_def (res_nquerydomain) - -Index: glibc-2.12-2-gc4ccff1/resolv/res_send.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/resolv/res_send.c -+++ glibc-2.12-2-gc4ccff1/resolv/res_send.c -@@ -203,12 +203,12 @@ evNowTime(struct timespec *res) { - static int send_vc(res_state, const u_char *, int, - const u_char *, int, - u_char **, int *, int *, int, u_char **, -- u_char **, int *, int *); -+ u_char **, int *, int *, int *); - static int send_dg(res_state, const u_char *, int, - const u_char *, int, - u_char **, int *, int *, int, - int *, int *, u_char **, -- u_char **, int *, int *); -+ u_char **, int *, int *, int *); - #ifdef DEBUG - static void Aerror(const res_state, FILE *, const char *, int, - const struct sockaddr *); -@@ -360,7 +360,7 @@ int - __libc_res_nsend(res_state statp, const u_char *buf, int buflen, - const u_char *buf2, int buflen2, - u_char *ans, int anssiz, u_char **ansp, u_char **ansp2, -- int *nansp2, int *resplen2) -+ int *nansp2, int *resplen2, int *ansp2_malloced) - { - int gotsomewhere, terrno, try, v_circuit, resplen, ns, n; - -@@ -565,7 +565,8 @@ __libc_res_nsend(res_state statp, const - try = statp->retry; - n = send_vc(statp, buf, buflen, buf2, buflen2, - &ans, &anssiz, &terrno, -- ns, ansp, ansp2, nansp2, resplen2); -+ ns, ansp, ansp2, nansp2, resplen2, -+ ansp2_malloced); - if (n < 0) - return (-1); - if (n == 0 && (buf2 == NULL || *resplen2 == 0)) -@@ -575,7 +576,7 @@ __libc_res_nsend(res_state statp, const - n = send_dg(statp, buf, buflen, buf2, buflen2, - &ans, &anssiz, &terrno, - ns, &v_circuit, &gotsomewhere, ansp, -- ansp2, nansp2, resplen2); -+ ansp2, nansp2, resplen2, ansp2_malloced); - if (n < 0) - return (-1); - if (n == 0 && (buf2 == NULL || *resplen2 == 0)) -@@ -665,7 +666,7 @@ res_nsend(res_state statp, - const u_char *buf, int buflen, u_char *ans, int anssiz) - { - return __libc_res_nsend(statp, buf, buflen, NULL, 0, ans, anssiz, -- NULL, NULL, NULL, NULL); -+ NULL, NULL, NULL, NULL, NULL); - } - libresolv_hidden_def (res_nsend) - -@@ -747,7 +748,7 @@ send_vc(res_state statp, - const u_char *buf, int buflen, const u_char *buf2, int buflen2, - u_char **ansp, int *anssizp, - int *terrno, int ns, u_char **anscp, u_char **ansp2, int *anssizp2, -- int *resplen2) -+ int *resplen2, int *ansp2_malloced) - { - const HEADER *hp = (HEADER *) buf; - const HEADER *hp2 = (HEADER *) buf2; -@@ -896,6 +897,8 @@ send_vc(res_state statp, - } - *thisanssizp = MAXPACKET; - *thisansp = newp; -+ if (thisansp == ansp2) -+ *ansp2_malloced = 1; - anhp = (HEADER *) newp; - /* A uint16_t can't be larger than MAXPACKET - thus it's safe to allocate MAXPACKET but -@@ -1128,7 +1131,7 @@ send_dg(res_state statp, - const u_char *buf, int buflen, const u_char *buf2, int buflen2, - u_char **ansp, int *anssizp, - int *terrno, int ns, int *v_circuit, int *gotsomewhere, u_char **anscp, -- u_char **ansp2, int *anssizp2, int *resplen2) -+ u_char **ansp2, int *anssizp2, int *resplen2, int *ansp2_malloced) - { - const HEADER *hp = (HEADER *) buf; - const HEADER *hp2 = (HEADER *) buf2; -@@ -1289,6 +1292,8 @@ send_dg(res_state statp, - if (newp != NULL) { - *thisanssizp = MAXPACKET; - *thisansp = newp; -+ if (thisansp == ansp2) -+ *ansp2_malloced = 1; - } - } - /* We could end up with truncation if anscp was NULL diff --git a/src/patches/glibc/glibc-rh1296031.patch b/src/patches/glibc/glibc-rh1296031.patch deleted file mode 100644 index c430abba1f..0000000000 --- a/src/patches/glibc/glibc-rh1296031.patch +++ /dev/null @@ -1,544 +0,0 @@ -Index: glibc-2.12-2-gc4ccff1/resolv/nss_dns/dns-host.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/resolv/nss_dns/dns-host.c -+++ glibc-2.12-2-gc4ccff1/resolv/nss_dns/dns-host.c -@@ -1043,7 +1043,10 @@ gaih_getanswer_slice (const querybuf *an - int h_namelen = 0; - - if (ancount == 0) -- return NSS_STATUS_NOTFOUND; -+ { -+ *h_errnop = HOST_NOT_FOUND; -+ return NSS_STATUS_NOTFOUND; -+ } - - while (ancount-- > 0 && cp < end_of_message && had_error == 0) - { -@@ -1217,7 +1220,14 @@ gaih_getanswer_slice (const querybuf *an - /* Special case here: if the resolver sent a result but it only - contains a CNAME while we are looking for a T_A or T_AAAA record, - we fail with NOTFOUND instead of TRYAGAIN. */ -- return canon == NULL ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; -+ if (canon != NULL) -+ { -+ *h_errnop = HOST_NOT_FOUND; -+ return NSS_STATUS_NOTFOUND; -+ } -+ -+ *h_errnop = NETDB_INTERNAL; -+ return NSS_STATUS_TRYAGAIN; - } - - -@@ -1231,11 +1241,101 @@ gaih_getanswer (const querybuf *answer1, - - enum nss_status status = NSS_STATUS_NOTFOUND; - -+ /* Combining the NSS status of two distinct queries requires some -+ compromise and attention to symmetry (A or AAAA queries can be -+ returned in any order). What follows is a breakdown of how this -+ code is expected to work and why. We discuss only SUCCESS, -+ TRYAGAIN, NOTFOUND and UNAVAIL, since they are the only returns -+ that apply (though RETURN and MERGE exist). We make a distinction -+ between TRYAGAIN (recoverable) and TRYAGAIN' (not-recoverable). -+ A recoverable TRYAGAIN is almost always due to buffer size issues -+ and returns ERANGE in errno and the caller is expected to retry -+ with a larger buffer. -+ -+ Lastly, you may be tempted to make significant changes to the -+ conditions in this code to bring about symmetry between responses. -+ Please don't change anything without due consideration for -+ expected application behaviour. Some of the synthesized responses -+ aren't very well thought out and sometimes appear to imply that -+ IPv4 responses are always answer 1, and IPv6 responses are always -+ answer 2, but that's not true (see the implemetnation of send_dg -+ and send_vc to see response can arrive in any order, particlarly -+ for UDP). However, we expect it holds roughly enough of the time -+ that this code works, but certainly needs to be fixed to make this -+ a more robust implementation. -+ -+ ---------------------------------------------- -+ | Answer 1 Status / | Synthesized | Reason | -+ | Answer 2 Status | Status | | -+ |--------------------------------------------| -+ | SUCCESS/SUCCESS | SUCCESS | [1] | -+ | SUCCESS/TRYAGAIN | TRYAGAIN | [5] | -+ | SUCCESS/TRYAGAIN' | SUCCESS | [1] | -+ | SUCCESS/NOTFOUND | SUCCESS | [1] | -+ | SUCCESS/UNAVAIL | SUCCESS | [1] | -+ | TRYAGAIN/SUCCESS | TRYAGAIN | [2] | -+ | TRYAGAIN/TRYAGAIN | TRYAGAIN | [2] | -+ | TRYAGAIN/TRYAGAIN' | TRYAGAIN | [2] | -+ | TRYAGAIN/NOTFOUND | TRYAGAIN | [2] | -+ | TRYAGAIN/UNAVAIL | TRYAGAIN | [2] | -+ | TRYAGAIN'/SUCCESS | SUCCESS | [3] | -+ | TRYAGAIN'/TRYAGAIN | TRYAGAIN | [3] | -+ | TRYAGAIN'/TRYAGAIN' | TRYAGAIN' | [3] | -+ | TRYAGAIN'/NOTFOUND | TRYAGAIN' | [3] | -+ | TRYAGAIN'/UNAVAIL | UNAVAIL | [3] | -+ | NOTFOUND/SUCCESS | SUCCESS | [3] | -+ | NOTFOUND/TRYAGAIN | TRYAGAIN | [3] | -+ | NOTFOUND/TRYAGAIN' | TRYAGAIN' | [3] | -+ | NOTFOUND/NOTFOUND | NOTFOUND | [3] | -+ | NOTFOUND/UNAVAIL | UNAVAIL | [3] | -+ | UNAVAIL/SUCCESS | UNAVAIL | [4] | -+ | UNAVAIL/TRYAGAIN | UNAVAIL | [4] | -+ | UNAVAIL/TRYAGAIN' | UNAVAIL | [4] | -+ | UNAVAIL/NOTFOUND | UNAVAIL | [4] | -+ | UNAVAIL/UNAVAIL | UNAVAIL | [4] | -+ ---------------------------------------------- -+ -+ [1] If the first response is a success we return success. -+ This ignores the state of the second answer and in fact -+ incorrectly sets errno and h_errno to that of the second -+ answer. However because the response is a success we ignore -+ *errnop and *h_errnop (though that means you touched errno on -+ success). We are being conservative here and returning the -+ likely IPv4 response in the first answer as a success. -+ -+ [2] If the first response is a recoverable TRYAGAIN we return -+ that instead of looking at the second response. The -+ expectation here is that we have failed to get an IPv4 response -+ and should retry both queries. -+ -+ [3] If the first response was not a SUCCESS and the second -+ response is not NOTFOUND (had a SUCCESS, need to TRYAGAIN, -+ or failed entirely e.g. TRYAGAIN' and UNAVAIL) then use the -+ result from the second response, otherwise the first responses -+ status is used. Again we have some odd side-effects when the -+ second response is NOTFOUND because we overwrite *errnop and -+ *h_errnop that means that a first answer of NOTFOUND might see -+ its *errnop and *h_errnop values altered. Whether it matters -+ in practice that a first response NOTFOUND has the wrong -+ *errnop and *h_errnop is undecided. -+ -+ [4] If the first response is UNAVAIL we return that instead of -+ looking at the second response. The expectation here is that -+ it will have failed similarly e.g. configuration failure. -+ -+ [5] Testing this code is complicated by the fact that truncated -+ second response buffers might be returned as SUCCESS if the -+ first answer is a SUCCESS. To fix this we add symmetry to -+ TRYAGAIN with the second response. If the second response -+ is a recoverable error we now return TRYAGIN even if the first -+ response was SUCCESS. */ -+ - if (anslen1 > 0) - status = gaih_getanswer_slice(answer1, anslen1, qname, - &pat, &buffer, &buflen, - errnop, h_errnop, ttlp, - &first); -+ - if ((status == NSS_STATUS_SUCCESS || status == NSS_STATUS_NOTFOUND - || (status == NSS_STATUS_TRYAGAIN - && (*errnop != ERANGE || *h_errnop == NO_RECOVERY))) -@@ -1245,8 +1345,15 @@ gaih_getanswer (const querybuf *answer1, - &pat, &buffer, &buflen, - errnop, h_errnop, ttlp, - &first); -+ /* Use the second response status in some cases. */ - if (status != NSS_STATUS_SUCCESS && status2 != NSS_STATUS_NOTFOUND) - status = status2; -+ /* Do not return a truncated second response (unless it was -+ unavoidable e.g. unrecoverable TRYAGAIN). */ -+ if (status == NSS_STATUS_SUCCESS -+ && (status2 == NSS_STATUS_TRYAGAIN -+ && *errnop == ERANGE && *h_errnop != NO_RECOVERY)) -+ status = NSS_STATUS_TRYAGAIN; - } - - return status; -Index: glibc-2.12-2-gc4ccff1/resolv/res_send.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/resolv/res_send.c -+++ glibc-2.12-2-gc4ccff1/resolv/res_send.c -@@ -1,3 +1,20 @@ -+/* Copyright (C) 2016 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ - /* - * Copyright (c) 1985, 1989, 1993 - * The Regents of the University of California. All rights reserved. -@@ -360,6 +377,8 @@ __libc_res_nsend(res_state statp, const - #ifdef USE_HOOKS - if (__builtin_expect (statp->qhook || statp->rhook, 0)) { - if (anssiz < MAXPACKET && ansp) { -+ /* Always allocate MAXPACKET, callers expect -+ this specific size. */ - u_char *buf = malloc (MAXPACKET); - if (buf == NULL) - return (-1); -@@ -652,6 +671,77 @@ libresolv_hidden_def (res_nsend) - - /* Private */ - -+/* The send_vc function is responsible for sending a DNS query over TCP -+ to the nameserver numbered NS from the res_state STATP i.e. -+ EXT(statp).nssocks[ns]. The function supports sending both IPv4 and -+ IPv6 queries at the same serially on the same socket. -+ -+ Please note that for TCP there is no way to disable sending both -+ queries, unlike UDP, which honours RES_SNGLKUP and RES_SNGLKUPREOP -+ and sends the queries serially and waits for the result after each -+ sent query. This implemetnation should be corrected to honour these -+ options. -+ -+ Please also note that for TCP we send both queries over the same -+ socket one after another. This technically violates best practice -+ since the server is allowed to read the first query, respond, and -+ then close the socket (to service another client). If the server -+ does this, then the remaining second query in the socket data buffer -+ will cause the server to send the client an RST which will arrive -+ asynchronously and the client's OS will likely tear down the socket -+ receive buffer resulting in a potentially short read and lost -+ response data. This will force the client to retry the query again, -+ and this process may repeat until all servers and connection resets -+ are exhausted and then the query will fail. It's not known if this -+ happens with any frequency in real DNS server implementations. This -+ implementation should be corrected to use two sockets by default for -+ parallel queries. -+ -+ The query stored in BUF of BUFLEN length is sent first followed by -+ the query stored in BUF2 of BUFLEN2 length. Queries are sent -+ serially on the same socket. -+ -+ Answers to the query are stored firstly in *ANSP up to a max of -+ *ANSSIZP bytes. If more than *ANSSIZP bytes are needed and ANSCP -+ is non-NULL (to indicate that modifying the answer buffer is allowed) -+ then malloc is used to allocate a new response buffer and ANSCP and -+ ANSP will both point to the new buffer. If more than *ANSSIZP bytes -+ are needed but ANSCP is NULL, then as much of the response as -+ possible is read into the buffer, but the results will be truncated. -+ When truncation happens because of a small answer buffer the DNS -+ packets header feild TC will bet set to 1, indicating a truncated -+ message and the rest of the socket data will be read and discarded. -+ -+ Answers to the query are stored secondly in *ANSP2 up to a max of -+ *ANSSIZP2 bytes, with the actual response length stored in -+ *RESPLEN2. If more than *ANSSIZP bytes are needed and ANSP2 -+ is non-NULL (required for a second query) then malloc is used to -+ allocate a new response buffer, *ANSSIZP2 is set to the new buffer -+ size and *ANSP2_MALLOCED is set to 1. -+ -+ The ANSP2_MALLOCED argument will eventually be removed as the -+ change in buffer pointer can be used to detect the buffer has -+ changed and that the caller should use free on the new buffer. -+ -+ Note that the answers may arrive in any order from the server and -+ therefore the first and second answer buffers may not correspond to -+ the first and second queries. -+ -+ It is not supported to call this function with a non-NULL ANSP2 -+ but a NULL ANSCP. Put another way, you can call send_vc with a -+ single unmodifiable buffer or two modifiable buffers, but no other -+ combination is supported. -+ -+ It is the caller's responsibility to free the malloc allocated -+ buffers by detecting that the pointers have changed from their -+ original values i.e. *ANSCP or *ANSP2 has changed. -+ -+ If errors are encountered then *TERRNO is set to an appropriate -+ errno value and a zero result is returned for a recoverable error, -+ and a less-than zero result is returned for a non-recoverable error. -+ -+ If no errors are encountered then *TERRNO is left unmodified and -+ a the length of the first response in bytes is returned. */ - static int - send_vc(res_state statp, - const u_char *buf, int buflen, const u_char *buf2, int buflen2, -@@ -661,11 +751,7 @@ send_vc(res_state statp, - { - const HEADER *hp = (HEADER *) buf; - const HEADER *hp2 = (HEADER *) buf2; -- u_char *ans = *ansp; -- int orig_anssizp = *anssizp; -- // XXX REMOVE -- // int anssiz = *anssizp; -- HEADER *anhp = (HEADER *) ans; -+ HEADER *anhp = (HEADER *) *ansp; - struct sockaddr_in6 *nsap = EXT(statp).nsaddrs[ns]; - int truncating, connreset, resplen, n; - struct iovec iov[4]; -@@ -741,6 +827,8 @@ send_vc(res_state statp, - * Receive length & response - */ - int recvresp1 = 0; -+ /* Skip the second response if there is no second query. -+ To do that we mark the second response as received. */ - int recvresp2 = buf2 == NULL; - uint16_t rlen16; - read_len: -@@ -777,33 +865,14 @@ send_vc(res_state statp, - u_char **thisansp; - int *thisresplenp; - if ((recvresp1 | recvresp2) == 0 || buf2 == NULL) { -+ /* We have not received any responses -+ yet or we only have one response to -+ receive. */ - thisanssizp = anssizp; - thisansp = anscp ?: ansp; - assert (anscp != NULL || ansp2 == NULL); - thisresplenp = &resplen; - } else { -- if (*anssizp != MAXPACKET) { -- /* No buffer allocated for the first -- reply. We can try to use the rest -- of the user-provided buffer. */ --#ifdef _STRING_ARCH_unaligned -- *anssizp2 = orig_anssizp - resplen; -- *ansp2 = *ansp + resplen; --#else -- int aligned_resplen -- = ((resplen + __alignof__ (HEADER) - 1) -- & ~(__alignof__ (HEADER) - 1)); -- *anssizp2 = orig_anssizp - aligned_resplen; -- *ansp2 = *ansp + aligned_resplen; --#endif -- } else { -- /* The first reply did not fit into the -- user-provided buffer. Maybe the second -- answer will. */ -- *anssizp2 = orig_anssizp; -- *ansp2 = *ansp; -- } -- - thisanssizp = anssizp2; - thisansp = ansp2; - thisresplenp = resplen2; -@@ -811,10 +880,14 @@ send_vc(res_state statp, - anhp = (HEADER *) *thisansp; - - *thisresplenp = rlen; -- if (rlen > *thisanssizp) { -- /* Yes, we test ANSCP here. If we have two buffers -- both will be allocatable. */ -- if (__builtin_expect (anscp != NULL, 1)) { -+ /* Is the answer buffer too small? */ -+ if (*thisanssizp < rlen) { -+ /* If the current buffer is non-NULL and it's not -+ pointing at the static user-supplied buffer then -+ we can reallocate it. */ -+ if (thisansp != NULL && thisansp != ansp) { -+ /* Always allocate MAXPACKET, callers expect -+ this specific size. */ - u_char *newp = malloc (MAXPACKET); - if (newp == NULL) { - *terrno = ENOMEM; -@@ -824,6 +897,9 @@ send_vc(res_state statp, - *thisanssizp = MAXPACKET; - *thisansp = newp; - anhp = (HEADER *) newp; -+ /* A uint16_t can't be larger than MAXPACKET -+ thus it's safe to allocate MAXPACKET but -+ read RLEN bytes instead. */ - len = rlen; - } else { - Dprint(statp->options & RES_DEBUG, -@@ -987,6 +1063,66 @@ reopen (res_state statp, int *terrno, in - return 1; - } - -+/* The send_dg function is responsible for sending a DNS query over UDP -+ to the nameserver numbered NS from the res_state STATP i.e. -+ EXT(statp).nssocks[ns]. The function supports IPv4 and IPv6 queries -+ along with the ability to send the query in parallel for both stacks -+ (default) or serially (RES_SINGLKUP). It also supports serial lookup -+ with a close and reopen of the socket used to talk to the server -+ (RES_SNGLKUPREOP) to work around broken name servers. -+ -+ The query stored in BUF of BUFLEN length is sent first followed by -+ the query stored in BUF2 of BUFLEN2 length. Queries are sent -+ in parallel (default) or serially (RES_SINGLKUP or RES_SNGLKUPREOP). -+ -+ Answers to the query are stored firstly in *ANSP up to a max of -+ *ANSSIZP bytes. If more than *ANSSIZP bytes are needed and ANSCP -+ is non-NULL (to indicate that modifying the answer buffer is allowed) -+ then malloc is used to allocate a new response buffer and ANSCP and -+ ANSP will both point to the new buffer. If more than *ANSSIZP bytes -+ are needed but ANSCP is NULL, then as much of the response as -+ possible is read into the buffer, but the results will be truncated. -+ When truncation happens because of a small answer buffer the DNS -+ packets header feild TC will bet set to 1, indicating a truncated -+ message, while the rest of the UDP packet is discarded. -+ -+ Answers to the query are stored secondly in *ANSP2 up to a max of -+ *ANSSIZP2 bytes, with the actual response length stored in -+ *RESPLEN2. If more than *ANSSIZP bytes are needed and ANSP2 -+ is non-NULL (required for a second query) then malloc is used to -+ allocate a new response buffer, *ANSSIZP2 is set to the new buffer -+ size and *ANSP2_MALLOCED is set to 1. -+ -+ The ANSP2_MALLOCED argument will eventually be removed as the -+ change in buffer pointer can be used to detect the buffer has -+ changed and that the caller should use free on the new buffer. -+ -+ Note that the answers may arrive in any order from the server and -+ therefore the first and second answer buffers may not correspond to -+ the first and second queries. -+ -+ It is not supported to call this function with a non-NULL ANSP2 -+ but a NULL ANSCP. Put another way, you can call send_vc with a -+ single unmodifiable buffer or two modifiable buffers, but no other -+ combination is supported. -+ -+ It is the caller's responsibility to free the malloc allocated -+ buffers by detecting that the pointers have changed from their -+ original values i.e. *ANSCP or *ANSP2 has changed. -+ -+ If an answer is truncated because of UDP datagram DNS limits then -+ *V_CIRCUIT is set to 1 and the return value non-zero to indicate to -+ the caller to retry with TCP. The value *GOTSOMEWHERE is set to 1 -+ if any progress was made reading a response from the nameserver and -+ is used by the caller to distinguish between ECONNREFUSED and -+ ETIMEDOUT (the latter if *GOTSOMEWHERE is 1). -+ -+ If errors are encountered then *TERRNO is set to an appropriate -+ errno value and a zero result is returned for a recoverable error, -+ and a less-than zero result is returned for a non-recoverable error. -+ -+ If no errors are encountered then *TERRNO is left unmodified and -+ a the length of the first response in bytes is returned. */ - static int - send_dg(res_state statp, - const u_char *buf, int buflen, const u_char *buf2, int buflen2, -@@ -996,8 +1132,6 @@ send_dg(res_state statp, - { - const HEADER *hp = (HEADER *) buf; - const HEADER *hp2 = (HEADER *) buf2; -- u_char *ans = *ansp; -- int orig_anssizp = *anssizp; - struct timespec now, timeout, finish; - struct pollfd pfd[1]; - int ptimeout; -@@ -1029,6 +1163,8 @@ send_dg(res_state statp, - int need_recompute = 0; - int nwritten = 0; - int recvresp1 = 0; -+ /* Skip the second response if there is no second query. -+ To do that we mark the second response as received. */ - int recvresp2 = buf2 == NULL; - pfd[0].fd = EXT(statp).nssocks[ns]; - pfd[0].events = POLLOUT; -@@ -1125,50 +1261,52 @@ send_dg(res_state statp, - int *thisresplenp; - - if ((recvresp1 | recvresp2) == 0 || buf2 == NULL) { -+ /* We have not received any responses -+ yet or we only have one response to -+ receive. */ - thisanssizp = anssizp; - thisansp = anscp ?: ansp; - assert (anscp != NULL || ansp2 == NULL); - thisresplenp = &resplen; - } else { -- if (*anssizp != MAXPACKET) { -- /* No buffer allocated for the first -- reply. We can try to use the rest -- of the user-provided buffer. */ --#ifdef _STRING_ARCH_unaligned -- *anssizp2 = orig_anssizp - resplen; -- *ansp2 = *ansp + resplen; --#else -- int aligned_resplen -- = ((resplen + __alignof__ (HEADER) - 1) -- & ~(__alignof__ (HEADER) - 1)); -- *anssizp2 = orig_anssizp - aligned_resplen; -- *ansp2 = *ansp + aligned_resplen; --#endif -- } else { -- /* The first reply did not fit into the -- user-provided buffer. Maybe the second -- answer will. */ -- *anssizp2 = orig_anssizp; -- *ansp2 = *ansp; -- } -- - thisanssizp = anssizp2; - thisansp = ansp2; - thisresplenp = resplen2; - } - - if (*thisanssizp < MAXPACKET -- /* Yes, we test ANSCP here. If we have two buffers -- both will be allocatable. */ -- && anscp -+ /* If the current buffer is non-NULL and it's not -+ pointing at the static user-supplied buffer then -+ we can reallocate it. */ -+ && (thisansp != NULL && thisansp != ansp) -+ /* Is the size too small? */ - && (ioctl (pfd[0].fd, FIONREAD, thisresplenp) < 0 -- || *thisanssizp < *thisresplenp)) { -+ || *thisanssizp < *thisresplenp) -+ ) { -+ /* Always allocate MAXPACKET, callers expect -+ this specific size. */ - u_char *newp = malloc (MAXPACKET); - if (newp != NULL) { -- *anssizp = MAXPACKET; -- *thisansp = ans = newp; -+ *thisanssizp = MAXPACKET; -+ *thisansp = newp; - } - } -+ /* We could end up with truncation if anscp was NULL -+ (not allowed to change caller's buffer) and the -+ response buffer size is too small. This isn't a -+ reliable way to detect truncation because the ioctl -+ may be an inaccurate report of the UDP message size. -+ Therefore we use this only to issue debug output. -+ To do truncation accurately with UDP we need -+ MSG_TRUNC which is only available on Linux. We -+ can abstract out the Linux-specific feature in the -+ future to detect truncation. */ -+ if (__glibc_unlikely (*thisanssizp < *thisresplenp)) { -+ Dprint(statp->options & RES_DEBUG, -+ (stdout, ";; response may be truncated (UDP)\n") -+ ); -+ } -+ - HEADER *anhp = (HEADER *) *thisansp; - socklen_t fromlen = sizeof(struct sockaddr_in6); - assert (sizeof(from) <= fromlen); -Index: glibc-2.12-2-gc4ccff1/resolv/res_query.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/resolv/res_query.c -+++ glibc-2.12-2-gc4ccff1/resolv/res_query.c -@@ -391,6 +391,7 @@ __libc_res_nsearch(res_state statp, - && (*answerp2 < answer || *answerp2 >= answer + anslen)) - { - free (*answerp2); -+ *nanswerp2 = 0; - *answerp2 = NULL; - } - } -@@ -431,6 +432,7 @@ __libc_res_nsearch(res_state statp, - || *answerp2 >= answer + anslen)) - { - free (*answerp2); -+ *nanswerp2 = 0; - *answerp2 = NULL; - } - -@@ -503,6 +505,7 @@ __libc_res_nsearch(res_state statp, - if (answerp2 && (*answerp2 < answer || *answerp2 >= answer + anslen)) - { - free (*answerp2); -+ *nanswerp2 = NULL; - *answerp2 = NULL; - } - if (saved_herrno != -1) diff --git a/src/patches/glibc/glibc-rh1299319-0.patch b/src/patches/glibc/glibc-rh1299319-0.patch deleted file mode 100644 index f27eccd67d..0000000000 --- a/src/patches/glibc/glibc-rh1299319-0.patch +++ /dev/null @@ -1,61 +0,0 @@ -commit 2c1094bd700e63a8d7f547b3f5495bedb55c0a08 -Author: Ulrich Drepper -Date: Thu Dec 22 22:43:39 2011 -0500 - - Create internal threads with sufficient stack size - -Index: glibc-2.12-2-gc4ccff1/nptl/Versions -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/Versions -+++ glibc-2.12-2-gc4ccff1/nptl/Versions -@@ -255,6 +255,6 @@ libpthread { - GLIBC_PRIVATE { - __pthread_initialize_minimal; - __pthread_clock_gettime; __pthread_clock_settime; -- __pthread_unwind; -+ __pthread_unwind; __pthread_get_minstack; - } - } -Index: glibc-2.12-2-gc4ccff1/nptl/nptl-init.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/nptl-init.c -+++ glibc-2.12-2-gc4ccff1/nptl/nptl-init.c -@@ -507,3 +507,13 @@ __pthread_initialize_minimal_internal (i - } - strong_alias (__pthread_initialize_minimal_internal, - __pthread_initialize_minimal) -+ -+ -+size_t -+__pthread_get_minstack (const pthread_attr_t *attr) -+{ -+ struct pthread_attr *iattr = (struct pthread_attr *) attr; -+ -+ return (GLRO(dl_pagesize) + __static_tls_size + PTHREAD_STACK_MIN -+ + iattr->guardsize); -+} -Index: glibc-2.12-2-gc4ccff1/nptl/pthreadP.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/pthreadP.h -+++ glibc-2.12-2-gc4ccff1/nptl/pthreadP.h -@@ -397,6 +397,7 @@ weak_function; - - extern void __pthread_init_static_tls (struct link_map *) attribute_hidden; - -+extern size_t __pthread_get_minstack (const pthread_attr_t *attr); - - /* Namespace save aliases. */ - extern int __pthread_getschedparam (pthread_t thread_id, int *policy, -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/timer_routines.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/timer_routines.c -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/timer_routines.c -@@ -165,7 +165,7 @@ __start_helper_thread (void) - and should go away automatically when canceled. */ - pthread_attr_t attr; - (void) pthread_attr_init (&attr); -- (void) pthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN); -+ (void) pthread_attr_setstacksize (&attr, __pthread_get_minstack (&attr)); - - /* Block all signals in the helper thread but SIGSETXID. To do this - thoroughly we temporarily have to block all signals here. The diff --git a/src/patches/glibc/glibc-rh1299319-1.patch b/src/patches/glibc/glibc-rh1299319-1.patch deleted file mode 100644 index e6288a24c0..0000000000 --- a/src/patches/glibc/glibc-rh1299319-1.patch +++ /dev/null @@ -1,19 +0,0 @@ -commit 232872379ee82cd040a52a48cbbae65a249b5765 -Author: Adhemerval Zanella -Date: Sun Jan 8 19:56:52 2012 -0500 - - Use __pthread_get_minstack for AIO helper thread - -diff --git a/nptl/sysdeps/unix/sysv/linux/aio_misc.h b/nptl/sysdeps/unix/sysv/linux/aio_misc.h -index 406d96e..8011c3e 100644 ---- a/nptl/sysdeps/unix/sysv/linux/aio_misc.h -+++ b/nptl/sysdeps/unix/sysv/linux/aio_misc.h -@@ -47,7 +47,7 @@ __aio_create_helper_thread (pthread_t *threadp, void *(*tf) (void *), - pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); - - /* The helper thread needs only very little resources. */ -- (void) pthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN); -+ (void) pthread_attr_setstacksize (&attr, __pthread_get_minstack (&attr)); - - /* Block all signals in the helper thread. To do this thoroughly we - temporarily have to block all signals here. */ diff --git a/src/patches/glibc/glibc-rh552960.patch b/src/patches/glibc/glibc-rh552960.patch deleted file mode 100644 index 41eccb7d42..0000000000 --- a/src/patches/glibc/glibc-rh552960.patch +++ /dev/null @@ -1,1213 +0,0 @@ -diff -pruN glibc-2.12-2-gc4ccff1/nptl/Makefile glibc-2.12-2-gc4ccff1.fixed/nptl/Makefile ---- glibc-2.12-2-gc4ccff1/nptl/Makefile 2013-07-09 10:18:22.267421846 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/Makefile 2013-07-09 10:16:22.043427519 +0530 -@@ -207,7 +207,8 @@ tests = tst-typesizes \ - tst-cond1 tst-cond2 tst-cond3 tst-cond4 tst-cond5 tst-cond6 tst-cond7 \ - tst-cond8 tst-cond9 tst-cond10 tst-cond11 tst-cond12 tst-cond13 \ - tst-cond14 tst-cond15 tst-cond16 tst-cond17 tst-cond18 tst-cond19 \ -- tst-cond20 tst-cond21 tst-cond22 tst-cond23 \ -+ tst-cond20 tst-cond21 tst-cond22 tst-cond23 tst-cond24 tst-cond25 \ -+ tst-cond-except \ - tst-robust1 tst-robust2 tst-robust3 tst-robust4 tst-robust5 \ - tst-robust6 tst-robust7 tst-robust8 tst-robust9 \ - tst-robustpi1 tst-robustpi2 tst-robustpi3 tst-robustpi4 tst-robustpi5 \ -@@ -275,6 +276,8 @@ gen-as-const-headers = pthread-errnos.sy - - LDFLAGS-pthread.so = -Wl,--enable-new-dtags,-z,nodelete,-z,initfirst - -+LDFLAGS-tst-cond24 = -lrt -+LDFLAGS-tst-cond25 = -lrt - - include ../Makeconfig - -diff -pruN glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S glibc-2.12-2-gc4ccff1.fixed/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S ---- glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S 2010-05-04 16:57:23.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S 2013-07-09 10:16:22.044427519 +0530 -@@ -203,9 +203,11 @@ __pthread_cond_timedwait: - 42: leal (%ebp), %esi - movl 28(%esp), %edx - addl $cond_futex, %ebx -+.Ladd_cond_futex_pi: - movl $SYS_futex, %eax - ENTER_KERNEL - subl $cond_futex, %ebx -+.Lsub_cond_futex_pi: - movl %eax, %esi - /* Set the pi-requeued flag only if the kernel has returned 0. The - kernel does not hold the mutex on ETIMEDOUT or any other error. */ -@@ -213,8 +215,23 @@ __pthread_cond_timedwait: - sete 24(%esp) - je 41f - -- /* Normal and PI futexes dont mix. Use normal futex functions only -- if the kernel does not support the PI futex functions. */ -+ /* When a futex syscall with FUTEX_WAIT_REQUEUE_PI returns -+ successfully, it has already locked the mutex for us and the -+ pi_flag (24(%esp)) is set to denote that fact. However, if another -+ thread changed the futex value before we entered the wait, the -+ syscall may return an EAGAIN and the mutex is not locked. We go -+ ahead with a success anyway since later we look at the pi_flag to -+ decide if we got the mutex or not. The sequence numbers then make -+ sure that only one of the threads actually wake up. We retry using -+ normal FUTEX_WAIT only if the kernel returned ENOSYS, since normal -+ and PI futexes don't mix. -+ -+ Note that we don't check for EAGAIN specifically; we assume that the -+ only other error the futex function could return is EAGAIN (barring -+ the ETIMEOUT of course, for the timeout case in futex) since -+ anything else would mean an error in our function. It is too -+ expensive to do that check for every call (which is quite common in -+ case of a large number of threads), so it has been skipped. */ - cmpl $-ENOSYS, %eax - jne 41f - xorl %ecx, %ecx -@@ -274,9 +291,24 @@ __pthread_cond_timedwait: - jne 9f - - 15: cmpl $-ETIMEDOUT, %esi -- jne 8b -+ je 28f - -- addl $1, wakeup_seq(%ebx) -+ /* We need to go back to futex_wait. If we're using requeue_pi, then -+ release the mutex we had acquired and go back. */ -+ movl 24(%esp), %edx -+ test %edx, %edx -+ jz 8b -+ -+ /* Adjust the mutex values first and then unlock it. The unlock -+ should always succeed or else the kernel did not lock the mutex -+ correctly. */ -+ movl dep_mutex(%ebx), %eax -+ call __pthread_mutex_cond_lock_adjust -+ xorl %edx, %edx -+ call __pthread_mutex_unlock_usercnt -+ jmp 8b -+ -+28: addl $1, wakeup_seq(%ebx) - adcl $0, wakeup_seq+4(%ebx) - addl $1, cond_futex(%ebx) - movl $ETIMEDOUT, %esi -@@ -644,10 +676,27 @@ __condvar_tw_cleanup: - movl $0x7fffffff, %edx - ENTER_KERNEL - -+ /* Lock the mutex only if we don't own it already. This only happens -+ in case of PI mutexes, if we got cancelled after a successful -+ return of the futex syscall and before disabling async -+ cancellation. */ - 5: movl 24+FRAME_SIZE(%esp), %eax -- call __pthread_mutex_cond_lock -+ movl MUTEX_KIND(%eax), %ebx -+ andl $(ROBUST_BIT|PI_BIT), %ebx -+ cmpl $PI_BIT, %ebx -+ jne 8f -+ -+ movl (%eax), %ebx -+ andl $TID_MASK, %ebx -+ cmpl %ebx, %gs:TID -+ jne 8f -+ /* We managed to get the lock. Fix it up before returning. */ -+ call __pthread_mutex_cond_lock_adjust -+ jmp 9f -+ -+8: call __pthread_mutex_cond_lock - -- movl %esi, (%esp) -+9: movl %esi, (%esp) - .LcallUR: - call _Unwind_Resume - hlt -@@ -665,7 +714,15 @@ __condvar_tw_cleanup: - .uleb128 .Lcstend-.Lcstbegin - .Lcstbegin: - .long .LcleanupSTART-.LSTARTCODE -- .long .Ladd_cond_futex-.LcleanupSTART -+ .long .Ladd_cond_futex_pi-.LcleanupSTART -+ .long __condvar_tw_cleanup-.LSTARTCODE -+ .uleb128 0 -+ .long .Ladd_cond_futex_pi-.LSTARTCODE -+ .long .Lsub_cond_futex_pi-.Ladd_cond_futex_pi -+ .long __condvar_tw_cleanup2-.LSTARTCODE -+ .uleb128 0 -+ .long .Lsub_cond_futex_pi-.LSTARTCODE -+ .long .Ladd_cond_futex-.Lsub_cond_futex_pi - .long __condvar_tw_cleanup-.LSTARTCODE - .uleb128 0 - .long .Ladd_cond_futex-.LSTARTCODE -diff -pruN glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S glibc-2.12-2-gc4ccff1.fixed/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S ---- glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 2010-05-04 16:57:23.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 2013-07-09 10:16:22.046427519 +0530 -@@ -138,17 +138,33 @@ __pthread_cond_wait: - movl %ebp, %edx - xorl %esi, %esi - addl $cond_futex, %ebx -+.Ladd_cond_futex_pi: - movl $SYS_futex, %eax - ENTER_KERNEL - subl $cond_futex, %ebx -+.Lsub_cond_futex_pi: - /* Set the pi-requeued flag only if the kernel has returned 0. The - kernel does not hold the mutex on error. */ - cmpl $0, %eax - sete 16(%esp) - je 19f - -- /* Normal and PI futexes dont mix. Use normal futex functions only -- if the kernel does not support the PI futex functions. */ -+ /* When a futex syscall with FUTEX_WAIT_REQUEUE_PI returns -+ successfully, it has already locked the mutex for us and the -+ pi_flag (16(%esp)) is set to denote that fact. However, if another -+ thread changed the futex value before we entered the wait, the -+ syscall may return an EAGAIN and the mutex is not locked. We go -+ ahead with a success anyway since later we look at the pi_flag to -+ decide if we got the mutex or not. The sequence numbers then make -+ sure that only one of the threads actually wake up. We retry using -+ normal FUTEX_WAIT only if the kernel returned ENOSYS, since normal -+ and PI futexes don't mix. -+ -+ Note that we don't check for EAGAIN specifically; we assume that the -+ only other error the futex function could return is EAGAIN since -+ anything else would mean an error in our function. It is too -+ expensive to do that check for every call (which is quite common in -+ case of a large number of threads), so it has been skipped. */ - cmpl $-ENOSYS, %eax - jne 19f - xorl %ecx, %ecx -@@ -198,12 +214,12 @@ __pthread_cond_wait: - cmpl 8(%esp), %edx - jne 7f - cmpl 4(%esp), %edi -- je 8b -+ je 22f - - 7: cmpl %ecx, %edx - jne 9f - cmp %eax, %edi -- je 8b -+ je 22f - - 9: addl $1, woken_seq(%ebx) - adcl $0, woken_seq+4(%ebx) -@@ -279,6 +295,22 @@ __pthread_cond_wait: - jmp 20b - - cfi_adjust_cfa_offset(-FRAME_SIZE); -+ -+ /* We need to go back to futex_wait. If we're using requeue_pi, then -+ release the mutex we had acquired and go back. */ -+22: movl 16(%esp), %edx -+ test %edx, %edx -+ jz 8b -+ -+ /* Adjust the mutex values first and then unlock it. The unlock -+ should always succeed or else the kernel did not lock the mutex -+ correctly. */ -+ movl dep_mutex(%ebx), %eax -+ call __pthread_mutex_cond_lock_adjust -+ xorl %edx, %edx -+ call __pthread_mutex_unlock_usercnt -+ jmp 8b -+ - /* Initial locking failed. */ - 1: - #if cond_lock == 0 -@@ -391,6 +423,7 @@ __pthread_cond_wait: - #endif - call __lll_unlock_wake - jmp 11b -+ - .size __pthread_cond_wait, .-__pthread_cond_wait - versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait, - GLIBC_2_3_2) -@@ -531,10 +564,27 @@ __condvar_w_cleanup: - movl $0x7fffffff, %edx - ENTER_KERNEL - -+ /* Lock the mutex only if we don't own it already. This only happens -+ in case of PI mutexes, if we got cancelled after a successful -+ return of the futex syscall and before disabling async -+ cancellation. */ - 5: movl 24+FRAME_SIZE(%esp), %eax -- call __pthread_mutex_cond_lock -+ movl MUTEX_KIND(%eax), %ebx -+ andl $(ROBUST_BIT|PI_BIT), %ebx -+ cmpl $PI_BIT, %ebx -+ jne 8f -+ -+ movl (%eax), %ebx -+ andl $TID_MASK, %ebx -+ cmpl %ebx, %gs:TID -+ jne 8f -+ /* We managed to get the lock. Fix it up before returning. */ -+ call __pthread_mutex_cond_lock_adjust -+ jmp 9f - -- movl %esi, (%esp) -+8: call __pthread_mutex_cond_lock -+ -+9: movl %esi, (%esp) - .LcallUR: - call _Unwind_Resume - hlt -@@ -552,7 +602,15 @@ __condvar_w_cleanup: - .uleb128 .Lcstend-.Lcstbegin - .Lcstbegin: - .long .LcleanupSTART-.LSTARTCODE -- .long .Ladd_cond_futex-.LcleanupSTART -+ .long .Ladd_cond_futex_pi-.LcleanupSTART -+ .long __condvar_w_cleanup-.LSTARTCODE -+ .uleb128 0 -+ .long .Ladd_cond_futex_pi-.LSTARTCODE -+ .long .Lsub_cond_futex_pi-.Ladd_cond_futex_pi -+ .long __condvar_w_cleanup2-.LSTARTCODE -+ .uleb128 0 -+ .long .Lsub_cond_futex_pi-.LSTARTCODE -+ .long .Ladd_cond_futex-.Lsub_cond_futex_pi - .long __condvar_w_cleanup-.LSTARTCODE - .uleb128 0 - .long .Ladd_cond_futex-.LSTARTCODE -diff -pruN glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym glibc-2.12-2-gc4ccff1.fixed/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym ---- glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym 2010-05-04 16:57:23.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym 2013-07-09 10:16:22.047427519 +0530 -@@ -6,3 +6,4 @@ MUTEX_KIND offsetof (pthread_mutex_t, __ - ROBUST_BIT PTHREAD_MUTEX_ROBUST_NORMAL_NP - PI_BIT PTHREAD_MUTEX_PRIO_INHERIT_NP - PS_BIT PTHREAD_MUTEX_PSHARED_BIT -+TID_MASK FUTEX_TID_MASK -diff -pruN glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S glibc-2.12-2-gc4ccff1.fixed/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S ---- glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S 2013-07-09 10:18:22.506421835 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S 2013-07-09 10:16:22.048427519 +0530 -@@ -104,6 +104,8 @@ __pthread_cond_timedwait: - movq %rsi, dep_mutex(%rdi) - - 22: -+ xorb %r15b, %r15b -+ - #ifndef __ASSUME_FUTEX_CLOCK_REALTIME - # ifdef PIC - cmpl $0, __have_futex_clock_realtime(%rip) -@@ -189,18 +191,39 @@ __pthread_cond_timedwait: - movl $SYS_futex, %eax - syscall - -- movl $1, %r15d -+ cmpl $0, %eax -+ sete %r15b -+ - #ifdef __ASSUME_REQUEUE_PI - jmp 62f - #else -- cmpq $-4095, %rax -- jnae 62f -+ je 62f -+ -+ /* When a futex syscall with FUTEX_WAIT_REQUEUE_PI returns -+ successfully, it has already locked the mutex for us and the -+ pi_flag (%r15b) is set to denote that fact. However, if another -+ thread changed the futex value before we entered the wait, the -+ syscall may return an EAGAIN and the mutex is not locked. We go -+ ahead with a success anyway since later we look at the pi_flag to -+ decide if we got the mutex or not. The sequence numbers then make -+ sure that only one of the threads actually wake up. We retry using -+ normal FUTEX_WAIT only if the kernel returned ENOSYS, since normal -+ and PI futexes don't mix. -+ -+ Note that we don't check for EAGAIN specifically; we assume that the -+ only other error the futex function could return is EAGAIN (barring -+ the ETIMEOUT of course, for the timeout case in futex) since -+ anything else would mean an error in our function. It is too -+ expensive to do that check for every call (which is quite common in -+ case of a large number of threads), so it has been skipped. */ -+ cmpl $-ENOSYS, %eax -+ jne 62f - - subq $cond_futex, %rdi - #endif - - 61: movl $(FUTEX_WAIT_BITSET|FUTEX_PRIVATE_FLAG), %esi --60: xorl %r15d, %r15d -+60: xorb %r15b, %r15b - xorl %eax, %eax - /* The following only works like this because we only support - two clocks, represented using a single bit. */ -@@ -247,7 +270,23 @@ __pthread_cond_timedwait: - ja 39f - - 45: cmpq $-ETIMEDOUT, %r14 -- jne 38b -+ je 99f -+ -+ /* We need to go back to futex_wait. If we're using requeue_pi, then -+ release the mutex we had acquired and go back. */ -+ test %r15b, %r15b -+ jz 38b -+ -+ /* Adjust the mutex values first and then unlock it. The unlock -+ should always succeed or else the kernel did not lock the -+ mutex correctly. */ -+ movq %r8, %rdi -+ callq __pthread_mutex_cond_lock_adjust -+ xorl %esi, %esi -+ callq __pthread_mutex_unlock_usercnt -+ /* Reload cond_var. */ -+ movq 8(%rsp), %rdi -+ jmp 38b - - 99: incq wakeup_seq(%rdi) - incl cond_futex(%rdi) -@@ -297,7 +336,7 @@ __pthread_cond_timedwait: - /* If requeue_pi is used the kernel performs the locking of the - mutex. */ - 41: movq 16(%rsp), %rdi -- testl %r15d, %r15d -+ testb %r15b, %r15b - jnz 64f - - callq __pthread_mutex_cond_lock -@@ -405,8 +444,6 @@ __pthread_cond_timedwait: - - #ifndef __ASSUME_FUTEX_CLOCK_REALTIME - .Lreltmo: -- xorl %r15d, %r15d -- - /* Get internal lock. */ - movl $1, %esi - xorl %eax, %eax -@@ -765,10 +802,27 @@ __condvar_cleanup2: - movl $SYS_futex, %eax - syscall - -+ /* Lock the mutex only if we don't own it already. This only happens -+ in case of PI mutexes, if we got cancelled after a successful -+ return of the futex syscall and before disabling async -+ cancellation. */ - 5: movq 16(%rsp), %rdi -- callq __pthread_mutex_cond_lock -+ movl MUTEX_KIND(%rdi), %eax -+ andl $(ROBUST_BIT|PI_BIT), %eax -+ cmpl $PI_BIT, %eax -+ jne 7f -+ -+ movl (%rdi), %eax -+ andl $TID_MASK, %eax -+ cmpl %eax, %fs:TID -+ jne 7f -+ /* We managed to get the lock. Fix it up before returning. */ -+ callq __pthread_mutex_cond_lock_adjust -+ jmp 8f -+ -+7: callq __pthread_mutex_cond_lock - -- movq 24(%rsp), %rdi -+8: movq 24(%rsp), %rdi - movq FRAME_SIZE(%rsp), %r15 - movq FRAME_SIZE+8(%rsp), %r14 - movq FRAME_SIZE+16(%rsp), %r13 -diff -pruN glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S glibc-2.12-2-gc4ccff1.fixed/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S ---- glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 2013-07-09 10:18:22.507421834 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 2013-07-09 10:16:22.048427519 +0530 -@@ -23,6 +23,7 @@ - #include - #include - #include -+#include - - #include - -@@ -137,12 +138,32 @@ __pthread_cond_wait: - movl $SYS_futex, %eax - syscall - -- movl $1, %r8d -+ cmpl $0, %eax -+ sete %r8b -+ - #ifdef __ASSUME_REQUEUE_PI - jmp 62f - #else -- cmpq $-4095, %rax -- jnae 62f -+ je 62f -+ -+ /* When a futex syscall with FUTEX_WAIT_REQUEUE_PI returns -+ successfully, it has already locked the mutex for us and the -+ pi_flag (%r8b) is set to denote that fact. However, if another -+ thread changed the futex value before we entered the wait, the -+ syscall may return an EAGAIN and the mutex is not locked. We go -+ ahead with a success anyway since later we look at the pi_flag to -+ decide if we got the mutex or not. The sequence numbers then make -+ sure that only one of the threads actually wake up. We retry using -+ normal FUTEX_WAIT only if the kernel returned ENOSYS, since normal -+ and PI futexes don't mix. -+ -+ Note that we don't check for EAGAIN specifically; we assume that the -+ only other error the futex function could return is EAGAIN since -+ anything else would mean an error in our function. It is too -+ expensive to do that check for every call (which is quite common in -+ case of a large number of threads), so it has been skipped. */ -+ cmpl $-ENOSYS, %eax -+ jne 62f - - # ifndef __ASSUME_PRIVATE_FUTEX - movl $FUTEX_WAIT, %esi -@@ -155,7 +176,7 @@ __pthread_cond_wait: - #else - orl %fs:PRIVATE_FUTEX, %esi - #endif --60: xorl %r8d, %r8d -+60: xorb %r8b, %r8b - movl $SYS_futex, %eax - syscall - -@@ -185,10 +206,10 @@ __pthread_cond_wait: - jne 16f - - cmpq 24(%rsp), %r9 -- jbe 8b -+ jbe 19f - - cmpq %rax, %r9 -- jna 8b -+ jna 19f - - incq woken_seq(%rdi) - -@@ -230,7 +251,7 @@ __pthread_cond_wait: - /* If requeue_pi is used the kernel performs the locking of the - mutex. */ - 11: movq 16(%rsp), %rdi -- testl %r8d, %r8d -+ testb %r8b, %r8b - jnz 18f - - callq __pthread_mutex_cond_lock -@@ -247,6 +268,23 @@ __pthread_cond_wait: - xorl %eax, %eax - jmp 14b - -+ /* We need to go back to futex_wait. If we're using requeue_pi, then -+ release the mutex we had acquired and go back. */ -+19: testb %r8b, %r8b -+ jz 8b -+ -+ /* Adjust the mutex values first and then unlock it. The unlock -+ should always succeed or else the kernel did not lock the mutex -+ correctly. */ -+ movq 16(%rsp), %rdi -+ callq __pthread_mutex_cond_lock_adjust -+ movq %rdi, %r8 -+ xorl %esi, %esi -+ callq __pthread_mutex_unlock_usercnt -+ /* Reload cond_var. */ -+ movq 8(%rsp), %rdi -+ jmp 8b -+ - /* Initial locking failed. */ - 1: - #if cond_lock != 0 -@@ -324,6 +362,7 @@ __pthread_cond_wait: - - 13: movq %r10, %rax - jmp 14b -+ - .size __pthread_cond_wait, .-__pthread_cond_wait - versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait, - GLIBC_2_3_2) -@@ -454,10 +493,28 @@ __condvar_cleanup1: - movl $SYS_futex, %eax - syscall - -+ /* Lock the mutex only if we don't own it already. This only happens -+ in case of PI mutexes, if we got cancelled after a successful -+ return of the futex syscall and before disabling async -+ cancellation. */ - 5: movq 16(%rsp), %rdi -- callq __pthread_mutex_cond_lock -+ movl MUTEX_KIND(%rdi), %eax -+ andl $(ROBUST_BIT|PI_BIT), %eax -+ cmpl $PI_BIT, %eax -+ jne 7f -+ -+ movl (%rdi), %eax -+ andl $TID_MASK, %eax -+ cmpl %eax, %fs:TID -+ jne 7f -+ /* We managed to get the lock. Fix it up before returning. */ -+ callq __pthread_mutex_cond_lock_adjust -+ jmp 8f -+ - -- movq 24(%rsp), %rdi -+7: callq __pthread_mutex_cond_lock -+ -+8: movq 24(%rsp), %rdi - .LcallUR: - call _Unwind_Resume@PLT - hlt -@@ -476,11 +533,11 @@ __condvar_cleanup1: - .uleb128 .LcleanupSTART-.LSTARTCODE - .uleb128 .LcleanupEND-.LcleanupSTART - .uleb128 __condvar_cleanup1-.LSTARTCODE -- .uleb128 0 -+ .uleb128 0 - .uleb128 .LcallUR-.LSTARTCODE - .uleb128 .LENDCODE-.LcallUR - .uleb128 0 -- .uleb128 0 -+ .uleb128 0 - .Lcstend: - - -diff -pruN glibc-2.12-2-gc4ccff1/nptl/tst-cond24.c glibc-2.12-2-gc4ccff1.fixed/nptl/tst-cond24.c ---- glibc-2.12-2-gc4ccff1/nptl/tst-cond24.c 1970-01-01 05:30:00.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/tst-cond24.c 2013-07-09 10:19:10.008419593 +0530 -@@ -0,0 +1,249 @@ -+/* Verify that condition variables synchronized by PI mutexes don't hang. -+ Copyright (C) 2012-2013 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#define THREADS_NUM 5 -+#define MAXITER 50000 -+ -+static pthread_mutex_t mutex; -+static pthread_mutexattr_t mutex_attr; -+static pthread_cond_t cond; -+static pthread_t threads[THREADS_NUM]; -+static int pending = 0; -+ -+typedef void * (*threadfunc) (void *); -+ -+void * -+thread_fun_timed (void *arg) -+{ -+ int *ret = arg; -+ int rv, i; -+ -+ printf ("Started thread_fun_timed[%d]\n", *ret); -+ -+ for (i = 0; i < MAXITER / THREADS_NUM; i++) -+ { -+ rv = pthread_mutex_lock (&mutex); -+ if (rv) -+ { -+ printf ("pthread_mutex_lock: %s(%d)\n", strerror (rv), rv); -+ *ret = 1; -+ goto out; -+ } -+ -+ while (!pending) -+ { -+ struct timespec ts; -+ clock_gettime(CLOCK_REALTIME, &ts); -+ ts.tv_sec += 20; -+ rv = pthread_cond_timedwait (&cond, &mutex, &ts); -+ -+ /* There should be no timeout either. */ -+ if (rv) -+ { -+ printf ("pthread_cond_wait: %s(%d)\n", strerror (rv), rv); -+ *ret = 1; -+ goto out; -+ } -+ } -+ -+ pending--; -+ -+ rv = pthread_mutex_unlock (&mutex); -+ if (rv) -+ { -+ printf ("pthread_mutex_unlock: %s(%d)\n", strerror (rv), rv); -+ *ret = 1; -+ goto out; -+ } -+ } -+ -+ *ret = 0; -+ -+out: -+ return ret; -+} -+ -+void * -+thread_fun (void *arg) -+{ -+ int *ret = arg; -+ int rv, i; -+ -+ printf ("Started thread_fun[%d]\n", *ret); -+ -+ for (i = 0; i < MAXITER / THREADS_NUM; i++) -+ { -+ rv = pthread_mutex_lock (&mutex); -+ if (rv) -+ { -+ printf ("pthread_mutex_lock: %s(%d)\n", strerror (rv), rv); -+ *ret = 1; -+ goto out; -+ } -+ -+ while (!pending) -+ { -+ rv = pthread_cond_wait (&cond, &mutex); -+ -+ if (rv) -+ { -+ printf ("pthread_cond_wait: %s(%d)\n", strerror (rv), rv); -+ *ret = 1; -+ goto out; -+ } -+ } -+ -+ pending--; -+ -+ rv = pthread_mutex_unlock (&mutex); -+ if (rv) -+ { -+ printf ("pthread_mutex_unlock: %s(%d)\n", strerror (rv), rv); -+ *ret = 1; -+ goto out; -+ } -+ } -+ -+ *ret = 0; -+ -+out: -+ return ret; -+} -+ -+static int -+do_test_wait (threadfunc f) -+{ -+ int i; -+ int rv; -+ int counter = 0; -+ int retval[THREADS_NUM]; -+ -+ puts ("Starting test"); -+ -+ rv = pthread_mutexattr_init (&mutex_attr); -+ if (rv) -+ { -+ printf ("pthread_mutexattr_init: %s(%d)\n", strerror (rv), rv); -+ return 1; -+ } -+ -+ rv = pthread_mutexattr_setprotocol (&mutex_attr, PTHREAD_PRIO_INHERIT); -+ if (rv) -+ { -+ printf ("pthread_mutexattr_setprotocol: %s(%d)\n", strerror (rv), rv); -+ return 1; -+ } -+ -+ rv = pthread_mutex_init (&mutex, &mutex_attr); -+ if (rv) -+ { -+ printf ("pthread_mutex_init: %s(%d)\n", strerror (rv), rv); -+ return 1; -+ } -+ -+ rv = pthread_cond_init (&cond, NULL); -+ if (rv) -+ { -+ printf ("pthread_cond_init: %s(%d)\n", strerror (rv), rv); -+ return 1; -+ } -+ -+ for (i = 0; i < THREADS_NUM; i++) -+ { -+ retval[i] = i; -+ rv = pthread_create (&threads[i], NULL, f, &retval[i]); -+ if (rv) -+ { -+ printf ("pthread_create: %s(%d)\n", strerror (rv), rv); -+ return 1; -+ } -+ } -+ -+ for (; counter < MAXITER; counter++) -+ { -+ rv = pthread_mutex_lock (&mutex); -+ if (rv) -+ { -+ printf ("pthread_mutex_lock: %s(%d)\n", strerror (rv), rv); -+ return 1; -+ } -+ -+ if (!(counter % 100)) -+ printf ("counter: %d\n", counter); -+ pending += 1; -+ -+ rv = pthread_cond_signal (&cond); -+ if (rv) -+ { -+ printf ("pthread_cond_signal: %s(%d)\n", strerror (rv), rv); -+ return 1; -+ } -+ -+ rv = pthread_mutex_unlock (&mutex); -+ if (rv) -+ { -+ printf ("pthread_mutex_unlock: %s(%d)\n", strerror (rv), rv); -+ return 1; -+ } -+ } -+ -+ for (i = 0; i < THREADS_NUM; i++) -+ { -+ void *ret; -+ rv = pthread_join (threads[i], &ret); -+ if (rv) -+ { -+ printf ("pthread_join: %s(%d)\n", strerror (rv), rv); -+ return 1; -+ } -+ if (ret && *(int *)ret) -+ { -+ printf ("Thread %d returned with an error\n", i); -+ return 1; -+ } -+ } -+ -+ return 0; -+} -+ -+static int -+do_test (void) -+{ -+ puts ("Testing pthread_cond_wait"); -+ int ret = do_test_wait (thread_fun); -+ if (ret) -+ return ret; -+ -+ puts ("Testing pthread_cond_timedwait"); -+ return do_test_wait (thread_fun_timed); -+} -+ -+#define TIMEOUT 20 -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" -diff -pruN glibc-2.12-2-gc4ccff1/nptl/tst-cond25.c glibc-2.12-2-gc4ccff1.fixed/nptl/tst-cond25.c ---- glibc-2.12-2-gc4ccff1/nptl/tst-cond25.c 1970-01-01 05:30:00.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/tst-cond25.c 2013-07-09 10:19:15.472419335 +0530 -@@ -0,0 +1,281 @@ -+/* Verify that condition variables synchronized by PI mutexes don't hang on -+ on cancellation. -+ Copyright (C) 2012-2013 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#define NUM 5 -+#define ITERS 10000 -+#define COUNT 100 -+ -+typedef void *(*thr_func) (void *); -+ -+pthread_mutex_t mutex; -+pthread_cond_t cond; -+ -+void cleanup (void *u) -+{ -+ /* pthread_cond_wait should always return with the mutex locked. */ -+ if (pthread_mutex_unlock (&mutex)) -+ abort (); -+} -+ -+void * -+signaller (void *u) -+{ -+ int i, ret = 0; -+ void *tret = NULL; -+ -+ for (i = 0; i < ITERS; i++) -+ { -+ if ((ret = pthread_mutex_lock (&mutex)) != 0) -+ { -+ tret = (void *)1; -+ printf ("signaller:mutex_lock failed: %s\n", strerror (ret)); -+ goto out; -+ } -+ if ((ret = pthread_cond_signal (&cond)) != 0) -+ { -+ tret = (void *)1; -+ printf ("signaller:signal failed: %s\n", strerror (ret)); -+ goto unlock_out; -+ } -+ if ((ret = pthread_mutex_unlock (&mutex)) != 0) -+ { -+ tret = (void *)1; -+ printf ("signaller:mutex_unlock failed: %s\n", strerror (ret)); -+ goto out; -+ } -+ pthread_testcancel (); -+ } -+ -+out: -+ return tret; -+ -+unlock_out: -+ if ((ret = pthread_mutex_unlock (&mutex)) != 0) -+ printf ("signaller:mutex_unlock[2] failed: %s\n", strerror (ret)); -+ goto out; -+} -+ -+void * -+waiter (void *u) -+{ -+ int i, ret = 0; -+ void *tret = NULL; -+ int seq = (uintptr_t) u; -+ -+ for (i = 0; i < ITERS / NUM; i++) -+ { -+ if ((ret = pthread_mutex_lock (&mutex)) != 0) -+ { -+ tret = (void *) (uintptr_t) 1; -+ printf ("waiter[%u]:mutex_lock failed: %s\n", seq, strerror (ret)); -+ goto out; -+ } -+ pthread_cleanup_push (cleanup, NULL); -+ -+ if ((ret = pthread_cond_wait (&cond, &mutex)) != 0) -+ { -+ tret = (void *) (uintptr_t) 1; -+ printf ("waiter[%u]:wait failed: %s\n", seq, strerror (ret)); -+ goto unlock_out; -+ } -+ -+ if ((ret = pthread_mutex_unlock (&mutex)) != 0) -+ { -+ tret = (void *) (uintptr_t) 1; -+ printf ("waiter[%u]:mutex_unlock failed: %s\n", seq, strerror (ret)); -+ goto out; -+ } -+ pthread_cleanup_pop (0); -+ } -+ -+out: -+ puts ("waiter tests done"); -+ return tret; -+ -+unlock_out: -+ if ((ret = pthread_mutex_unlock (&mutex)) != 0) -+ printf ("waiter:mutex_unlock[2] failed: %s\n", strerror (ret)); -+ goto out; -+} -+ -+void * -+timed_waiter (void *u) -+{ -+ int i, ret; -+ void *tret = NULL; -+ int seq = (uintptr_t) u; -+ -+ for (i = 0; i < ITERS / NUM; i++) -+ { -+ struct timespec ts; -+ -+ if ((ret = clock_gettime(CLOCK_REALTIME, &ts)) != 0) -+ { -+ tret = (void *) (uintptr_t) 1; -+ printf ("%u:clock_gettime failed: %s\n", seq, strerror (errno)); -+ goto out; -+ } -+ ts.tv_sec += 20; -+ -+ if ((ret = pthread_mutex_lock (&mutex)) != 0) -+ { -+ tret = (void *) (uintptr_t) 1; -+ printf ("waiter[%u]:mutex_lock failed: %s\n", seq, strerror (ret)); -+ goto out; -+ } -+ pthread_cleanup_push (cleanup, NULL); -+ -+ /* We should not time out either. */ -+ if ((ret = pthread_cond_timedwait (&cond, &mutex, &ts)) != 0) -+ { -+ tret = (void *) (uintptr_t) 1; -+ printf ("waiter[%u]:timedwait failed: %s\n", seq, strerror (ret)); -+ goto unlock_out; -+ } -+ if ((ret = pthread_mutex_unlock (&mutex)) != 0) -+ { -+ tret = (void *) (uintptr_t) 1; -+ printf ("waiter[%u]:mutex_unlock failed: %s\n", seq, strerror (ret)); -+ goto out; -+ } -+ pthread_cleanup_pop (0); -+ } -+ -+out: -+ puts ("timed_waiter tests done"); -+ return tret; -+ -+unlock_out: -+ if ((ret = pthread_mutex_unlock (&mutex)) != 0) -+ printf ("waiter[%u]:mutex_unlock[2] failed: %s\n", seq, strerror (ret)); -+ goto out; -+} -+ -+int -+do_test_wait (thr_func f) -+{ -+ pthread_t w[NUM]; -+ pthread_t s; -+ pthread_mutexattr_t attr; -+ int i, j, ret = 0; -+ void *thr_ret; -+ -+ for (i = 0; i < COUNT; i++) -+ { -+ if ((ret = pthread_mutexattr_init (&attr)) != 0) -+ { -+ printf ("mutexattr_init failed: %s\n", strerror (ret)); -+ goto out; -+ } -+ -+ if ((ret = pthread_mutexattr_setprotocol (&attr, -+ PTHREAD_PRIO_INHERIT)) != 0) -+ { -+ printf ("mutexattr_setprotocol failed: %s\n", strerror (ret)); -+ goto out; -+ } -+ -+ if ((ret = pthread_cond_init (&cond, NULL)) != 0) -+ { -+ printf ("cond_init failed: %s\n", strerror (ret)); -+ goto out; -+ } -+ -+ if ((ret = pthread_mutex_init (&mutex, &attr)) != 0) -+ { -+ printf ("mutex_init failed: %s\n", strerror (ret)); -+ goto out; -+ } -+ -+ for (j = 0; j < NUM; j++) -+ if ((ret = pthread_create (&w[j], NULL, -+ f, (void *) (uintptr_t) j)) != 0) -+ { -+ printf ("waiter[%d]: create failed: %s\n", j, strerror (ret)); -+ goto out; -+ } -+ -+ if ((ret = pthread_create (&s, NULL, signaller, NULL)) != 0) -+ { -+ printf ("signaller: create failed: %s\n", strerror (ret)); -+ goto out; -+ } -+ -+ for (j = 0; j < NUM; j++) -+ { -+ pthread_cancel (w[j]); -+ -+ if ((ret = pthread_join (w[j], &thr_ret)) != 0) -+ { -+ printf ("waiter[%d]: join failed: %s\n", j, strerror (ret)); -+ goto out; -+ } -+ -+ if (thr_ret != NULL && thr_ret != PTHREAD_CANCELED) -+ { -+ ret = 1; -+ goto out; -+ } -+ } -+ -+ /* The signalling thread could have ended before it was cancelled. */ -+ pthread_cancel (s); -+ -+ if ((ret = pthread_join (s, &thr_ret)) != 0) -+ { -+ printf ("signaller: join failed: %s\n", strerror (ret)); -+ goto out; -+ } -+ -+ if (thr_ret != NULL && thr_ret != PTHREAD_CANCELED) -+ { -+ ret = 1; -+ goto out; -+ } -+ } -+ -+out: -+ return ret; -+} -+ -+int -+do_test (int argc, char **argv) -+{ -+ int ret = do_test_wait (waiter); -+ -+ if (ret) -+ return ret; -+ -+ return do_test_wait (timed_waiter); -+} -+ -+#define TIMEOUT 5 -+#include "../test-skeleton.c" -diff -pruN glibc-2.12-2-gc4ccff1/nptl/tst-cond-except.c glibc-2.12-2-gc4ccff1.fixed/nptl/tst-cond-except.c ---- glibc-2.12-2-gc4ccff1/nptl/tst-cond-except.c 1970-01-01 05:30:00.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/tst-cond-except.c 2013-07-09 10:19:01.334420002 +0530 -@@ -0,0 +1,110 @@ -+/* Verify that exception table for pthread_cond_wait is correct. -+ Copyright (C) 2012-2013 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+pthread_mutex_t mutex; -+pthread_cond_t cond; -+ -+#define CHECK_RETURN_VAL_OR_FAIL(ret,str) \ -+ ({ if ((ret) != 0) \ -+ { \ -+ printf ("%s failed: %s\n", (str), strerror (ret)); \ -+ ret = 1; \ -+ goto out; \ -+ } \ -+ }) -+ -+ -+void -+clean (void *arg) -+{ -+ puts ("clean: Unlocking mutex..."); -+ pthread_mutex_unlock ((pthread_mutex_t *) arg); -+ puts ("clean: Mutex unlocked..."); -+} -+ -+void * -+thr (void *arg) -+{ -+ int ret = 0; -+ pthread_mutexattr_t mutexAttr; -+ ret = pthread_mutexattr_init (&mutexAttr); -+ CHECK_RETURN_VAL_OR_FAIL (ret, "pthread_mutexattr_init"); -+ -+ ret = pthread_mutexattr_setprotocol (&mutexAttr, PTHREAD_PRIO_INHERIT); -+ CHECK_RETURN_VAL_OR_FAIL (ret, "pthread_mutexattr_setprotocol"); -+ -+ ret = pthread_mutex_init (&mutex, &mutexAttr); -+ CHECK_RETURN_VAL_OR_FAIL (ret, "pthread_mutex_init"); -+ -+ ret = pthread_cond_init (&cond, 0); -+ CHECK_RETURN_VAL_OR_FAIL (ret, "pthread_cond_init"); -+ -+ puts ("th: Init done, entering wait..."); -+ -+ pthread_cleanup_push (clean, (void *) &mutex); -+ ret = pthread_mutex_lock (&mutex); -+ CHECK_RETURN_VAL_OR_FAIL (ret, "pthread_mutex_lock"); -+ while (1) -+ { -+ ret = pthread_cond_wait (&cond, &mutex); -+ CHECK_RETURN_VAL_OR_FAIL (ret, "pthread_cond_wait"); -+ } -+ pthread_cleanup_pop (1); -+ -+out: -+ return (void *) (uintptr_t) ret; -+} -+ -+int -+do_test (void) -+{ -+ pthread_t thread; -+ int ret = 0; -+ void *thr_ret = 0; -+ ret = pthread_create (&thread, 0, thr, &thr_ret); -+ CHECK_RETURN_VAL_OR_FAIL (ret, "pthread_create"); -+ -+ puts ("main: Thread created, waiting a bit..."); -+ sleep (2); -+ -+ puts ("main: Cancelling thread..."); -+ ret = pthread_cancel (thread); -+ CHECK_RETURN_VAL_OR_FAIL (ret, "pthread_cancel"); -+ -+ puts ("main: Joining th..."); -+ ret = pthread_join (thread, NULL); -+ CHECK_RETURN_VAL_OR_FAIL (ret, "pthread_join"); -+ -+ if (thr_ret != NULL) -+ return 1; -+ -+ puts ("main: Joined thread, done!"); -+ -+out: -+ return ret; -+} -+ -+#define TEST_FUNCTION do_test () -+#define TIMEOUT 5 -+#include "../test-skeleton.c" diff --git a/src/patches/glibc/glibc-rh580498.patch b/src/patches/glibc/glibc-rh580498.patch deleted file mode 100644 index 05b673a9f9..0000000000 --- a/src/patches/glibc/glibc-rh580498.patch +++ /dev/null @@ -1,296 +0,0 @@ -2010-07-03 Ulrich Drepper - - * tst-abstime.c (do_test): Some more cleanups - -2010-07-02 Ulrich Drepper - - * tst-abstime.c: Correct testing and add test for sem_timedwait. - -2010-07-01 Andreas Schwab - Ulrich Drepper - - * Makefile (tests): Add tst-abstime. - * tst-abstime.c: New file. - * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S - (__lll_timedlock_wait): Check for timestamp before the Epoch. - * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S - (__lll_timedlock_wait): Likewise. - * sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S - (__lll_robust_timedlock_wait): Likewise. - * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S - (__pthread_cond_timedwait): Likewise. - * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S - (pthread_rwlock_timedrdlock): Likewise. - * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S - (pthread_rwlock_timedwrlock): Likewise. - * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S (sem_timedwait): - Likewise. - -Index: glibc-2.12-2-gc4ccff1/nptl/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/Makefile -+++ glibc-2.12-2-gc4ccff1/nptl/Makefile -@@ -256,6 +256,7 @@ tests = tst-typesizes \ - tst-sched1 \ - tst-backtrace1 \ - tst-oddstacklimit \ -+ tst-abstime \ - tst-vfork1 tst-vfork2 tst-vfork1x tst-vfork2x \ - tst-getpid1 tst-getpid2 tst-getpid3 \ - tst-initializers1 $(patsubst %,tst-initializers1-%,c89 gnu89 c99 gnu99) -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S -@@ -188,6 +188,9 @@ __lll_timedlock_wait: - je .Lreltmo - # endif - -+ cmpl $0, (%edx) -+ js 8f -+ - movl %ecx, %ebx - movl %esi, %ecx - movl %edx, %esi -@@ -223,6 +226,9 @@ __lll_timedlock_wait: - cfi_restore(%ebp) - ret - -+8: movl $ETIMEDOUT, %eax -+ jmp 7b -+ - # ifndef __ASSUME_FUTEX_CLOCK_REALTIME - .Lreltmo: - /* Check for a valid timeout value. */ -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S -@@ -169,9 +169,13 @@ __lll_timedlock_wait: - je .Lreltmo - # endif - -+ cmpq $0, (%rdx) -+ js 5f -+ - pushq %r9 - cfi_adjust_cfa_offset(8) - cfi_rel_offset(%r9, 0) -+ - movq %rdx, %r10 - movl $0xffffffff, %r9d - LOAD_FUTEX_WAIT_ABS (%esi) -@@ -202,6 +206,9 @@ __lll_timedlock_wait: - cfi_restore(%r9) - retq - -+5: movl $ETIMEDOUT, %eax -+ retq -+ - # ifndef __ASSUME_FUTEX_CLOCK_REALTIME - .Lreltmo: - /* Check for a valid timeout value. */ -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S -@@ -125,6 +125,9 @@ __lll_robust_timedlock_wait: - je .Lreltmo - # endif - -+ cmpq $0, (%rdx) -+ js 7f -+ - pushq %r9 - cfi_adjust_cfa_offset(8) - cfi_rel_offset(%r9, 0) -@@ -180,6 +183,9 @@ __lll_robust_timedlock_wait: - cfi_adjust_cfa_offset(-8) - cfi_restore(%r9) - -+7: movl $ETIMEDOUT, %eax -+ retq -+ - - # ifndef __ASSUME_FUTEX_CLOCK_REALTIME - .Lreltmo: -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S -@@ -144,6 +144,10 @@ __pthread_cond_timedwait: - movq %r9, 24(%rsp) - movl %edx, 4(%rsp) - -+ cmpq $0, (%r13) -+ movq $-ETIMEDOUT, %r14 -+ js 36f -+ - 38: movl cond_futex(%rdi), %r12d - - /* Unlock. */ -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S -@@ -102,6 +102,9 @@ pthread_rwlock_timedrdlock: - je .Lreltmo - #endif - -+ cmpq $0, (%r13) -+ js 16f /* Time is already up. */ -+ - movl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT_BITSET|FUTEX_CLOCK_REALTIME, %esi - xorl PSHARED(%r12), %esi - movq %r13, %r10 -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S -@@ -99,6 +99,9 @@ pthread_rwlock_timedwrlock: - je .Lreltmo - #endif - -+ cmpq $0, (%r13) -+ js 16f /* Time is already up. */ -+ - movl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT_BITSET|FUTEX_CLOCK_REALTIME, %esi - xorl PSHARED(%r12), %esi - movq %r13, %r10 -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S -@@ -77,6 +77,9 @@ sem_timedwait: - je .Lreltmo - #endif - -+ cmpq $0, (%rsi) -+ js 16f -+ - /* This push is only needed to store the sem_t pointer for the - exception handler. */ - pushq %rdi -@@ -169,6 +172,19 @@ sem_timedwait: - - retq - -+16: -+#if USE___THREAD -+ movq errno@gottpoff(%rip), %rdx -+ movl $ETIMEDOUT, %fs:(%rdx) -+#else -+ callq __errno_location@plt -+ movl $ETIMEDOUT, (%rax) -+#endif -+ -+ orl $-1, %eax -+ -+ retq -+ - #ifndef __ASSUME_FUTEX_CLOCK_REALTIME - .Lreltmo: - pushq %r12 -Index: glibc-2.12-2-gc4ccff1/nptl/tst-abstime.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/nptl/tst-abstime.c -@@ -0,0 +1,98 @@ -+/* Copyright (C) 2010 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Contributed by Andreas Schwab , 2010. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#include -+#include -+#include -+#include -+ -+static pthread_cond_t c = PTHREAD_COND_INITIALIZER; -+static pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER; -+static pthread_mutex_t m2 = PTHREAD_MUTEX_INITIALIZER; -+static pthread_rwlock_t rw1 = PTHREAD_RWLOCK_INITIALIZER; -+static pthread_rwlock_t rw2 = PTHREAD_RWLOCK_INITIALIZER; -+static sem_t sem; -+ -+static void * -+th (void *arg) -+{ -+ long int res = 0; -+ int r; -+ struct timespec t = { -2, 0 }; -+ -+ r = pthread_mutex_timedlock (&m1, &t); -+ if (r != ETIMEDOUT) -+ { -+ puts ("pthread_mutex_timedlock did not return ETIMEDOUT"); -+ res = 1; -+ } -+ r = pthread_rwlock_timedrdlock (&rw1, &t); -+ if (r != ETIMEDOUT) -+ { -+ puts ("pthread_rwlock_timedrdlock did not return ETIMEDOUT"); -+ res = 1; -+ } -+ r = pthread_rwlock_timedwrlock (&rw2, &t); -+ if (r != ETIMEDOUT) -+ { -+ puts ("pthread_rwlock_timedwrlock did not return ETIMEDOUT"); -+ res = 1; -+ } -+ return (void *) res; -+} -+ -+static int -+do_test (void) -+{ -+ int res = 0; -+ int r; -+ struct timespec t = { -2, 0 }; -+ pthread_t pth; -+ -+ sem_init (&sem, 0, 0); -+ r = sem_timedwait (&sem, &t); -+ if (r != -1 || errno != ETIMEDOUT) -+ { -+ puts ("sem_timedwait did not fail with ETIMEDOUT"); -+ res = 1; -+ } -+ -+ pthread_mutex_lock (&m1); -+ pthread_rwlock_wrlock (&rw1); -+ pthread_rwlock_rdlock (&rw2); -+ pthread_mutex_lock (&m2); -+ if (pthread_create (&pth, 0, th, 0) != 0) -+ { -+ puts ("cannot create thread"); -+ return 1; -+ } -+ r = pthread_cond_timedwait (&c, &m2, &t); -+ if (r != ETIMEDOUT) -+ { -+ puts ("pthread_cond_timedwait did not return ETIMEDOUT"); -+ res = 1; -+ } -+ void *thres; -+ pthread_join (pth, &thres); -+ return res | (thres != NULL); -+} -+ -+ -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" diff --git a/src/patches/glibc/glibc-rh582738.patch b/src/patches/glibc/glibc-rh582738.patch deleted file mode 100644 index 40f7b80ffe..0000000000 --- a/src/patches/glibc/glibc-rh582738.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: glibc-2.11-382-g1cdb215/nscd/nscd.init -=================================================================== ---- glibc-2.11-382-g1cdb215.orig/nscd/nscd.init -+++ glibc-2.11-382-g1cdb215/nscd/nscd.init -@@ -76,7 +76,7 @@ case "$1" in - RETVAL=$? - ;; - stop) -- stop -+ [ ! -e /var/lock/subsys/nscd ] || stop - RETVAL=$? - ;; - status) diff --git a/src/patches/glibc/glibc-rh587360.patch b/src/patches/glibc/glibc-rh587360.patch deleted file mode 100644 index 07b62e60b4..0000000000 --- a/src/patches/glibc/glibc-rh587360.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: glibc-2.11-382-g1cdb215/posix/regexec.c -=================================================================== ---- glibc-2.11-382-g1cdb215.orig/posix/regexec.c -+++ glibc-2.11-382-g1cdb215/posix/regexec.c -@@ -4031,7 +4031,7 @@ find_collation_sequence_value (const uns - /* Skip the collation sequence value. */ - idx += sizeof (uint32_t); - /* Skip the wide char sequence of the collating element. */ -- idx = idx + sizeof (uint32_t) * (extra[idx] + 1); -+ idx = idx + sizeof (uint32_t) * (*(int32_t *) (extra + idx) + 1); - /* If we found the entry, return the sequence value. */ - if (found) - return *(uint32_t *) (extra + idx); diff --git a/src/patches/glibc/glibc-rh593396.patch b/src/patches/glibc/glibc-rh593396.patch deleted file mode 100644 index b907a364df..0000000000 --- a/src/patches/glibc/glibc-rh593396.patch +++ /dev/null @@ -1,42 +0,0 @@ -2010-05-06 Ulrich Drepper - - * malloc/malloc.c (_int_free): Possible race in the most recently - added check. Only act on the data if no current modification - happened. - -Index: glibc-2.12-2-gc4ccff1/malloc/malloc.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/malloc/malloc.c -+++ glibc-2.12-2-gc4ccff1/malloc/malloc.c -@@ -4859,6 +4859,7 @@ _int_free(mstate av, mchunkptr p) - #ifdef ATOMIC_FASTBINS - mchunkptr fd; - mchunkptr old = *fb; -+ unsigned int old_idx = ~0u; - do - { - /* Another simple check: make sure the top of the bin is not the -@@ -4868,15 +4869,17 @@ _int_free(mstate av, mchunkptr p) - errstr = "double free or corruption (fasttop)"; - goto errout; - } -- if (old != NULL -- && __builtin_expect (fastbin_index(chunksize(old)) != idx, 0)) -- { -- errstr = "invalid fastbin entry (free)"; -- goto errout; -- } -+ if (old != NULL) -+ old_idx = fastbin_index(chunksize(old)); - p->fd = fd = old; - } - while ((old = catomic_compare_and_exchange_val_rel (fb, p, fd)) != fd); -+ -+ if (fd != NULL && __builtin_expect (old_idx != idx, 0)) -+ { -+ errstr = "invalid fastbin entry (free)"; -+ goto errout; -+ } - #else - /* Another simple check: make sure the top of the bin is not the - record we are going to add (i.e., double free). */ diff --git a/src/patches/glibc/glibc-rh593686.patch b/src/patches/glibc/glibc-rh593686.patch deleted file mode 100644 index 3eceb6829c..0000000000 --- a/src/patches/glibc/glibc-rh593686.patch +++ /dev/null @@ -1,179 +0,0 @@ -2010-05-26 Andreas Schwab - - * elf/Makefile: Add rules to build and run unload8 test. - * elf/unload8.c: New file. - * elf/unload8mod1.c: New file. - * elf/unload8mod1x.c: New file. - * elf/unload8mod2.c: New file. - * elf/unload8mod3.c: New file. - - * elf/dl-close.c (_dl_close_worker): Reset private search list if - it wasn't used. - -Index: glibc-2.12-2-gc4ccff1/elf/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/Makefile -+++ glibc-2.12-2-gc4ccff1/elf/Makefile -@@ -89,6 +89,7 @@ distribute := rtld-Rules \ - unload4mod1.c unload4mod2.c unload4mod3.c unload4mod4.c \ - unload6mod1.c unload6mod2.c unload6mod3.c \ - unload7mod1.c unload7mod2.c \ -+ unload8mod1.c unload8mod1x.c unload8mod2.c unload8mod3.c \ - tst-audit1.c tst-audit2.c tst-audit3.c tst-audit4.c \ - tst-auditmod1.c tst-auditmod3a.c tst-auditmod3b.c \ - tst-auditmod4a.c tst-auditmod4b.c \ -@@ -196,7 +197,7 @@ tests += loadtest restest1 preloadtest l - tst-align tst-align2 $(tests-execstack-$(have-z-execstack)) \ - tst-dlmodcount tst-dlopenrpath tst-deep1 \ - tst-dlmopen1 tst-dlmopen2 tst-dlmopen3 \ -- unload3 unload4 unload5 unload6 unload7 tst-global1 order2 \ -+ unload3 unload4 unload5 unload6 unload7 unload8 tst-global1 order2 \ - tst-audit1 tst-audit2 \ - tst-stackguard1 tst-addr1 tst-thrlock \ - tst-unique1 tst-unique2 -@@ -247,6 +248,7 @@ modules-names = testobj1 testobj2 testob - unload4mod1 unload4mod2 unload4mod3 unload4mod4 \ - unload6mod1 unload6mod2 unload6mod3 \ - unload7mod1 unload7mod2 \ -+ unload8mod1 unload8mod1x unload8mod2 unload8mod3 \ - order2mod1 order2mod2 order2mod3 order2mod4 \ - tst-unique1mod1 tst-unique1mod2 \ - tst-unique2mod1 tst-unique2mod2 -@@ -522,6 +524,9 @@ $(objpfx)unload6mod2.so: $(libdl) - $(objpfx)unload6mod3.so: $(libdl) - $(objpfx)unload7mod1.so: $(libdl) - $(objpfx)unload7mod2.so: $(objpfx)unload7mod1.so -+$(objpfx)unload8mod1.so: $(objpfx)unload8mod2.so -+$(objpfx)unload8mod2.so: $(objpfx)unload8mod3.so -+$(objpfx)unload8mod3.so: $(libdl) - - LDFLAGS-tst-tlsmod5.so = -nostdlib - LDFLAGS-tst-tlsmod6.so = -nostdlib -@@ -823,6 +828,9 @@ $(objpfx)unload7: $(libdl) - $(objpfx)unload7.out: $(objpfx)unload7mod1.so $(objpfx)unload7mod2.so - unload7-ENV = MALLOC_PERTURB_=85 - -+$(objpfx)unload8: $(libdl) -+$(objpfx)unload8.out: $(objpfx)unload8mod1.so $(objpfx)unload8mod1x.so -+ - ifdef libdl - $(objpfx)tst-tls9-static: $(common-objpfx)dlfcn/libdl.a - $(objpfx)tst-tls9-static.out: $(objpfx)tst-tlsmod5.so $(objpfx)tst-tlsmod6.so -Index: glibc-2.12-2-gc4ccff1/elf/dl-close.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-close.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-close.c -@@ -421,6 +421,13 @@ _dl_close_worker (struct link_map *map) - - imap->l_scope_max = new_size; - } -+ else if (new_list != NULL) -+ { -+ /* We didn't change the scope array, so reset the search -+ list. */ -+ imap->l_searchlist.r_list = NULL; -+ imap->l_searchlist.r_nlist = 0; -+ } - - /* The loader is gone, so mark the object as not having one. - Note: l_idx != IDX_STILL_USED -> object will be removed. */ -Index: glibc-2.12-2-gc4ccff1/elf/unload8.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/elf/unload8.c -@@ -0,0 +1,33 @@ -+#include -+#include -+ -+int -+main (void) -+{ -+ void *h = dlopen ("$ORIGIN/unload8mod1.so", RTLD_LAZY); -+ if (h == NULL) -+ { -+ puts ("dlopen unload8mod1.so failed"); -+ return 1; -+ } -+ -+ void *h2 = dlopen ("$ORIGIN/unload8mod1x.so", RTLD_LAZY); -+ if (h2 == NULL) -+ { -+ puts ("dlopen unload8mod1x.so failed"); -+ return 1; -+ } -+ dlclose (h2); -+ -+ int (*mod1) (void) = dlsym (h, "mod1"); -+ if (mod1 == NULL) -+ { -+ puts ("dlsym failed"); -+ return 1; -+ } -+ -+ mod1 (); -+ dlclose (h); -+ -+ return 0; -+} -Index: glibc-2.12-2-gc4ccff1/elf/unload8mod1.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/elf/unload8mod1.c -@@ -0,0 +1,7 @@ -+extern void mod2 (void); -+ -+void -+mod1 (void) -+{ -+ mod2 (); -+} -Index: glibc-2.12-2-gc4ccff1/elf/unload8mod1x.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/elf/unload8mod1x.c -@@ -0,0 +1 @@ -+int mod1x; -Index: glibc-2.12-2-gc4ccff1/elf/unload8mod2.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/elf/unload8mod2.c -@@ -0,0 +1,7 @@ -+extern void mod3 (void); -+ -+void -+mod2 (void) -+{ -+ mod3 (); -+} -Index: glibc-2.12-2-gc4ccff1/elf/unload8mod3.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/elf/unload8mod3.c -@@ -0,0 +1,27 @@ -+#include -+#include -+#include -+ -+void -+mod3_fini2 (void) -+{ -+} -+ -+void -+mod3_fini (void) -+{ -+ mod3_fini2 (); -+} -+ -+void -+mod3 (void) -+{ -+ void *h = dlopen ("$ORIGIN/unload8mod2.so", RTLD_LAZY); -+ if (h == NULL) -+ { -+ puts ("dlopen unload8mod2.so failed"); -+ exit (1); -+ } -+ -+ atexit (mod3_fini); -+} diff --git a/src/patches/glibc/glibc-rh601686.patch b/src/patches/glibc/glibc-rh601686.patch deleted file mode 100644 index 01e42dce4f..0000000000 --- a/src/patches/glibc/glibc-rh601686.patch +++ /dev/null @@ -1,4640 +0,0 @@ -2010-11-09 H.J. Lu - - [BZ #12205] - * string/test-strncasecmp.c (check_result): New function. - (do_one_test): Use it. - (check1): New function. - (test_main): Use it. - * sysdeps/i386/i686/multiarch/strcmp.S (nibble_ashr_use_sse4_2_exit): - Support strcasecmp and strncasecmp. - -2010-10-03 Ulrich Drepper - - [BZ #12077] - * sysdeps/x86_64/strcmp.S: Fix handling of remaining bytes in buffer - for strncmp and strncasecmp. - * string/stratcliff.c: Add tests for strcmp and strncmp. - * wcsmbs/wcsatcliff.c: Adjust for stratcliff change. - -2010-09-20 Ulrich Drepper - - * sysdeps/x86_64/strcmp.S: Fix another type in strncasecmp limit - detection. - -2010-08-19 Ulrich Drepper - - * sysdeps/x86_64/multiarch/strcmp.S: Fix two typos in strncasecmp - handling. - -2010-08-15 Ulrich Drepper - - * sysdeps/x86_64/strcmp.S: Use correct register for fourth parameter - of strncasecmp_l. - * sysdeps/multiarch/strcmp.S: Likewise. - -2010-08-14 Ulrich Drepper - - * sysdeps/x86_64/Makefile [subdir=string] (sysdep_routines): Add - strncase_l-nonascii. - * sysdeps/x86_64/multiarch/Makefile [subdir=string] (sysdep_routines): - Add strncase_l-ssse3. - * sysdeps/x86_64/multiarch/strcmp.S: Prepare for use as strncasecmp. - * sysdeps/x86_64/strcmp.S: Likewise. - * sysdeps/x86_64/multiarch/strncase_l-ssse3.S: New file. - * sysdeps/x86_64/multiarch/strncase_l.S: New file. - * sysdeps/x86_64/strncase.S: New file. - * sysdeps/x86_64/strncase_l-nonascii.c: New file. - * sysdeps/x86_64/strncase_l.S: New file. - * string/Makefile (strop-tests): Add strncasecmp. - * string/test-strncasecmp.c: New file. - - * sysdeps/x86_64/strcasecmp_l-nonascii.c: Add prototype to avoid - warning. - - * sysdeps/x86_64/strcmp.S: Move definition of NO_NOLOCALE_ALIAS to... - * sysdeps/x86_64/multiarch/strcasecmp_l-ssse3.S: ... here. - -2010-07-31 Ulrich Drepper - - * sysdeps/x86_64/multiarch/Makefile [subdir=string] (sysdep_routines): - Add strcasecmp_l-ssse3. - * sysdeps/x86_64/multiarch/strcmp.S: Add support to compile for - strcasecmp. - * sysdeps/x86_64/strcmp.S: Allow more flexible compiling of strcasecmp. - * sysdeps/x86_64/multiarch/strcasecmp_l.S: New file. - * sysdeps/x86_64/multiarch/strcasecmp_l-ssse3.S: New file. - -2010-07-30 Ulrich Drepper - - * sysdeps/x86_64/multiarch/strcmp.S: Pretty printing. - - * string/Makefile (strop-tests): Add strcasecmp. - * sysdeps/x86_64/Makefile [subdir=string] (sysdep_routines): Add - strcasecmp_l-nonascii. - (gen-as-const-headers): Add locale-defines.sym. - * sysdeps/x86_64/strcmp.S: Add support for strcasecmp implementation. - * sysdeps/x86_64/strcasecmp.S: New file. - * sysdeps/x86_64/strcasecmp_l.S: New file. - * sysdeps/x86_64/strcasecmp_l-nonascii.c: New file. - * sysdeps/x86_64/locale-defines.sym: New file. - * string/test-strcasecmp.c: New file. - - * string/test-strcasestr.c: Test both ends of the range of characters. - * sysdeps/x86_64/multiarch/strstr.c: Fix UCHIGH definition. - -2010-07-26 Ulrich Drepper - - * string/test-strnlen.c: New file. - * string/Makefile (strop-tests): Add strnlen. - * string/tester.c (test_strnlen): Add a few more test cases. - * string/tst-strlen.c: Better error reporting. - - * sysdeps/x86_64/strnlen.S: New file. - -2010-07-24 Ulrich Drepper - - * sysdeps/x86_64/multiarch/strstr.c (__m128i_strloadu_tolower): Use - lower-latency instructions. - -2010-07-23 Ulrich Drepper - - * string/test-strcasestr.c: New file. - * string/test-strstr.c: New file. - * string/Makefile (strop-tests): Add strstr and strcasestr. - * string/str-two-way.h: Don't undefine MAX. - * string/strcasestr.c: Don't define alias if NO_ALIAS is defined. - -2010-07-21 Andreas Schwab - - * sysdeps/i386/i686/multiarch/Makefile (sysdep_routines): Add - strcasestr-nonascii. - (CFLAGS-strcasestr-nonascii.c): Define. - * sysdeps/i386/i686/multiarch/strcasestr-nonascii.c: New file. - * sysdeps/x86_64/multiarch/strcasestr-nonascii.c (STRSTR_SSE42): - Remove unused attribute. - -2010-07-16 Ulrich Drepper - - * sysdeps/x86_64/multiarch/strstr.c: Rewrite to avoid indirect function - call in strcasestr. - * sysdeps/x86_64/multiarch/strcasestr.c: Declare - __strcasestr_sse42_nonascii. - * sysdeps/x86_64/multiarch/Makefile: Add rules to build - strcasestr-nonascii.c. - * sysdeps/x86_64/multiarch/strcasestr-nonascii.c: New file. - -Index: glibc-2.12-2-gc4ccff1/string/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/string/Makefile -+++ glibc-2.12-2-gc4ccff1/string/Makefile -@@ -48,7 +48,8 @@ o-objects.ob := memcpy.o memset.o memchr - - strop-tests := memchr memcmp memcpy memmove mempcpy memset memccpy \ - stpcpy stpncpy strcat strchr strcmp strcpy strcspn \ -- strlen strncmp strncpy strpbrk strrchr strspn memmem -+ strlen strncmp strncpy strpbrk strrchr strspn memmem \ -+ strstr strcasestr strnlen strcasecmp strncasecmp - tests := tester inl-tester noinl-tester testcopy test-ffs \ - tst-strlen stratcliff tst-svc tst-inlcall \ - bug-strncat1 bug-strspn1 bug-strpbrk1 tst-bswap \ -Index: glibc-2.12-2-gc4ccff1/string/str-two-way.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/string/str-two-way.h -+++ glibc-2.12-2-gc4ccff1/string/str-two-way.h -@@ -426,5 +426,4 @@ two_way_long_needle (const unsigned char - #undef AVAILABLE - #undef CANON_ELEMENT - #undef CMP_FUNC --#undef MAX - #undef RETURN_TYPE -Index: glibc-2.12-2-gc4ccff1/string/stratcliff.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/string/stratcliff.c -+++ glibc-2.12-2-gc4ccff1/string/stratcliff.c -@@ -47,6 +47,8 @@ - # define MEMCPY memcpy - # define MEMPCPY mempcpy - # define MEMCHR memchr -+# define STRCMP strcmp -+# define STRNCMP strncmp - #endif - - -@@ -277,7 +279,74 @@ do_test (void) - - adr[inner] = L('T'); - } -- } -+ } -+ -+ /* strcmp/wcscmp tests */ -+ for (outer = 1; outer < 32; ++outer) -+ for (middle = 0; middle < 16; ++middle) -+ { -+ MEMSET (adr + middle, L('T'), 256); -+ adr[256] = L('\0'); -+ MEMSET (dest + nchars - outer, L('T'), outer - 1); -+ dest[nchars - 1] = L('\0'); -+ -+ if (STRCMP (adr + middle, dest + nchars - outer) <= 0) -+ { -+ printf ("%s 1 flunked for outer = %d, middle = %d\n", -+ STRINGIFY (STRCMP), outer, middle); -+ result = 1; -+ } -+ -+ if (STRCMP (dest + nchars - outer, adr + middle) >= 0) -+ { -+ printf ("%s 2 flunked for outer = %d, middle = %d\n", -+ STRINGIFY (STRCMP), outer, middle); -+ result = 1; -+ } -+ } -+ -+ /* strncmp/wcsncmp tests */ -+ for (outer = 1; outer < 32; ++outer) -+ for (middle = 0; middle < 16; ++middle) -+ { -+ MEMSET (adr + middle, L('T'), 256); -+ adr[256] = L('\0'); -+ MEMSET (dest + nchars - outer, L('T'), outer - 1); -+ dest[nchars - 1] = L('U'); -+ -+ for (inner = 0; inner < outer; ++inner) -+ { -+ if (STRNCMP (adr + middle, dest + nchars - outer, inner) != 0) -+ { -+ printf ("%s 1 flunked for outer = %d, middle = %d, " -+ "inner = %d\n", -+ STRINGIFY (STRNCMP), outer, middle, inner); -+ result = 1; -+ } -+ -+ if (STRNCMP (dest + nchars - outer, adr + middle, inner) != 0) -+ { -+ printf ("%s 2 flunked for outer = %d, middle = %d, " -+ "inner = %d\n", -+ STRINGIFY (STRNCMP), outer, middle, inner); -+ result = 1; -+ } -+ } -+ -+ if (STRNCMP (adr + middle, dest + nchars - outer, outer) >= 0) -+ { -+ printf ("%s 1 flunked for outer = %d, middle = %d, full\n", -+ STRINGIFY (STRNCMP), outer, middle); -+ result = 1; -+ } -+ -+ if (STRNCMP (dest + nchars - outer, adr + middle, outer) <= 0) -+ { -+ printf ("%s 2 flunked for outer = %d, middle = %d, full\n", -+ STRINGIFY (STRNCMP), outer, middle); -+ result = 1; -+ } -+ } - - /* strncpy/wcsncpy tests */ - adr[nchars - 1] = L('T'); -Index: glibc-2.12-2-gc4ccff1/string/strcasestr.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/string/strcasestr.c -+++ glibc-2.12-2-gc4ccff1/string/strcasestr.c -@@ -103,4 +103,6 @@ STRCASESTR (const char *haystack_start, - - #undef LONG_NEEDLE_THRESHOLD - -+#ifndef NO_ALIAS - weak_alias (__strcasestr, strcasestr) -+#endif -Index: glibc-2.12-2-gc4ccff1/string/test-strcasecmp.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/string/test-strcasecmp.c -@@ -0,0 +1,276 @@ -+/* Test and measure strcasecmp functions. -+ Copyright (C) 1999, 2002, 2003, 2005, 2010 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Written by Jakub Jelinek , 1999. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#include -+#define TEST_MAIN -+#include "test-string.h" -+ -+typedef int (*proto_t) (const char *, const char *); -+static int simple_strcasecmp (const char *, const char *); -+static int stupid_strcasecmp (const char *, const char *); -+ -+IMPL (stupid_strcasecmp, 0) -+IMPL (simple_strcasecmp, 0) -+IMPL (strcasecmp, 1) -+ -+static int -+simple_strcasecmp (const char *s1, const char *s2) -+{ -+ int ret; -+ -+ while ((ret = ((unsigned char) tolower (*s1) -+ - (unsigned char) tolower (*s2))) == 0 -+ && *s1++) -+ ++s2; -+ return ret; -+} -+ -+static int -+stupid_strcasecmp (const char *s1, const char *s2) -+{ -+ size_t ns1 = strlen (s1) + 1, ns2 = strlen (s2) + 1; -+ size_t n = ns1 < ns2 ? ns1 : ns2; -+ int ret = 0; -+ -+ while (n--) -+ { -+ if ((ret = ((unsigned char) tolower (*s1) -+ - (unsigned char) tolower (*s2))) != 0) -+ break; -+ ++s1; -+ ++s2; -+ } -+ return ret; -+} -+ -+static void -+do_one_test (impl_t *impl, const char *s1, const char *s2, int exp_result) -+{ -+ int result = CALL (impl, s1, s2); -+ if ((exp_result == 0 && result != 0) -+ || (exp_result < 0 && result >= 0) -+ || (exp_result > 0 && result <= 0)) -+ { -+ error (0, 0, "Wrong result in function %s %d %d", impl->name, -+ result, exp_result); -+ ret = 1; -+ return; -+ } -+ -+ if (HP_TIMING_AVAIL) -+ { -+ hp_timing_t start __attribute ((unused)); -+ hp_timing_t stop __attribute ((unused)); -+ hp_timing_t best_time = ~ (hp_timing_t) 0; -+ size_t i; -+ -+ for (i = 0; i < 32; ++i) -+ { -+ HP_TIMING_NOW (start); -+ CALL (impl, s1, s2); -+ HP_TIMING_NOW (stop); -+ HP_TIMING_BEST (best_time, start, stop); -+ } -+ -+ printf ("\t%zd", (size_t) best_time); -+ } -+} -+ -+static void -+do_test (size_t align1, size_t align2, size_t len, int max_char, -+ int exp_result) -+{ -+ size_t i; -+ char *s1, *s2; -+ -+ if (len == 0) -+ return; -+ -+ align1 &= 7; -+ if (align1 + len + 1 >= page_size) -+ return; -+ -+ align2 &= 7; -+ if (align2 + len + 1 >= page_size) -+ return; -+ -+ s1 = (char *) (buf1 + align1); -+ s2 = (char *) (buf2 + align2); -+ -+ for (i = 0; i < len; i++) -+ { -+ s1[i] = toupper (1 + 23 * i % max_char); -+ s2[i] = tolower (s1[i]); -+ } -+ -+ s1[len] = s2[len] = 0; -+ s1[len + 1] = 23; -+ s2[len + 1] = 24 + exp_result; -+ if ((s2[len - 1] == 'z' && exp_result == -1) -+ || (s2[len - 1] == 'a' && exp_result == 1)) -+ s1[len - 1] += exp_result; -+ else -+ s2[len - 1] -= exp_result; -+ -+ if (HP_TIMING_AVAIL) -+ printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2); -+ -+ FOR_EACH_IMPL (impl, 0) -+ do_one_test (impl, s1, s2, exp_result); -+ -+ if (HP_TIMING_AVAIL) -+ putchar ('\n'); -+} -+ -+static void -+do_random_tests (void) -+{ -+ size_t i, j, n, align1, align2, pos, len1, len2; -+ int result; -+ long r; -+ unsigned char *p1 = buf1 + page_size - 512; -+ unsigned char *p2 = buf2 + page_size - 512; -+ -+ for (n = 0; n < ITERATIONS; n++) -+ { -+ align1 = random () & 31; -+ if (random () & 1) -+ align2 = random () & 31; -+ else -+ align2 = align1 + (random () & 24); -+ pos = random () & 511; -+ j = align1 > align2 ? align1 : align2; -+ if (pos + j >= 511) -+ pos = 510 - j - (random () & 7); -+ len1 = random () & 511; -+ if (pos >= len1 && (random () & 1)) -+ len1 = pos + (random () & 7); -+ if (len1 + j >= 512) -+ len1 = 511 - j - (random () & 7); -+ if (pos >= len1) -+ len2 = len1; -+ else -+ len2 = len1 + (len1 != 511 - j ? random () % (511 - j - len1) : 0); -+ j = (pos > len2 ? pos : len2) + align1 + 64; -+ if (j > 512) -+ j = 512; -+ for (i = 0; i < j; ++i) -+ { -+ p1[i] = tolower (random () & 255); -+ if (i < len1 + align1 && !p1[i]) -+ { -+ p1[i] = tolower (random () & 255); -+ if (!p1[i]) -+ p1[i] = tolower (1 + (random () & 127)); -+ } -+ } -+ for (i = 0; i < j; ++i) -+ { -+ p2[i] = toupper (random () & 255); -+ if (i < len2 + align2 && !p2[i]) -+ { -+ p2[i] = toupper (random () & 255); -+ if (!p2[i]) -+ toupper (p2[i] = 1 + (random () & 127)); -+ } -+ } -+ -+ result = 0; -+ memcpy (p2 + align2, p1 + align1, pos); -+ if (pos < len1) -+ { -+ if (tolower (p2[align2 + pos]) == p1[align1 + pos]) -+ { -+ p2[align2 + pos] = toupper (random () & 255); -+ if (tolower (p2[align2 + pos]) == p1[align1 + pos]) -+ p2[align2 + pos] = toupper (p1[align1 + pos] -+ + 3 + (random () & 127)); -+ } -+ -+ if (p1[align1 + pos] < tolower (p2[align2 + pos])) -+ result = -1; -+ else -+ result = 1; -+ } -+ p1[len1 + align1] = 0; -+ p2[len2 + align2] = 0; -+ -+ FOR_EACH_IMPL (impl, 1) -+ { -+ r = CALL (impl, (char *) (p1 + align1), (char *) (p2 + align2)); -+ /* Test whether on 64-bit architectures where ABI requires -+ callee to promote has the promotion been done. */ -+ asm ("" : "=g" (r) : "0" (r)); -+ if ((r == 0 && result) -+ || (r < 0 && result >= 0) -+ || (r > 0 && result <= 0)) -+ { -+ error (0, 0, "Iteration %zd - wrong result in function %s (%zd, %zd, %zd, %zd, %zd) %ld != %d, p1 %p p2 %p", -+ n, impl->name, align1, align2, len1, len2, pos, r, result, p1, p2); -+ ret = 1; -+ } -+ } -+ } -+} -+ -+int -+test_main (void) -+{ -+ size_t i; -+ -+ test_init (); -+ -+ printf ("%23s", ""); -+ FOR_EACH_IMPL (impl, 0) -+ printf ("\t%s", impl->name); -+ putchar ('\n'); -+ -+ for (i = 1; i < 16; ++i) -+ { -+ do_test (i, i, i, 127, 0); -+ do_test (i, i, i, 127, 1); -+ do_test (i, i, i, 127, -1); -+ } -+ -+ for (i = 1; i < 10; ++i) -+ { -+ do_test (0, 0, 2 << i, 127, 0); -+ do_test (0, 0, 2 << i, 254, 0); -+ do_test (0, 0, 2 << i, 127, 1); -+ do_test (0, 0, 2 << i, 254, 1); -+ do_test (0, 0, 2 << i, 127, -1); -+ do_test (0, 0, 2 << i, 254, -1); -+ } -+ -+ for (i = 1; i < 8; ++i) -+ { -+ do_test (i, 2 * i, 8 << i, 127, 0); -+ do_test (2 * i, i, 8 << i, 254, 0); -+ do_test (i, 2 * i, 8 << i, 127, 1); -+ do_test (2 * i, i, 8 << i, 254, 1); -+ do_test (i, 2 * i, 8 << i, 127, -1); -+ do_test (2 * i, i, 8 << i, 254, -1); -+ } -+ -+ do_random_tests (); -+ return ret; -+} -+ -+#include "../test-skeleton.c" -Index: glibc-2.12-2-gc4ccff1/string/test-strcasestr.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/string/test-strcasestr.c -@@ -0,0 +1,197 @@ -+/* Test and measure strcasestr functions. -+ Copyright (C) 2010 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Written by Ulrich Drepper , 2010. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#define TEST_MAIN -+#include "test-string.h" -+ -+ -+#define STRCASESTR simple_strcasestr -+#define NO_ALIAS -+#define __strncasecmp strncasecmp -+#include "strcasestr.c" -+ -+ -+static char * -+stupid_strcasestr (const char *s1, const char *s2) -+{ -+ ssize_t s1len = strlen (s1); -+ ssize_t s2len = strlen (s2); -+ -+ if (s2len > s1len) -+ return NULL; -+ -+ for (ssize_t i = 0; i <= s1len - s2len; ++i) -+ { -+ size_t j; -+ for (j = 0; j < s2len; ++j) -+ if (tolower (s1[i + j]) != tolower (s2[j])) -+ break; -+ if (j == s2len) -+ return (char *) s1 + i; -+ } -+ -+ return NULL; -+} -+ -+ -+typedef char *(*proto_t) (const char *, const char *); -+ -+IMPL (stupid_strcasestr, 0) -+IMPL (simple_strcasestr, 0) -+IMPL (strcasestr, 1) -+ -+ -+static void -+do_one_test (impl_t *impl, const char *s1, const char *s2, char *exp_result) -+{ -+ char *result = CALL (impl, s1, s2); -+ if (result != exp_result) -+ { -+ error (0, 0, "Wrong result in function %s %s %s", impl->name, -+ result, exp_result); -+ ret = 1; -+ return; -+ } -+ -+ if (HP_TIMING_AVAIL) -+ { -+ hp_timing_t start __attribute ((unused)); -+ hp_timing_t stop __attribute ((unused)); -+ hp_timing_t best_time = ~(hp_timing_t) 0; -+ size_t i; -+ -+ for (i = 0; i < 32; ++i) -+ { -+ HP_TIMING_NOW (start); -+ CALL (impl, s1, s2); -+ HP_TIMING_NOW (stop); -+ HP_TIMING_BEST (best_time, start, stop); -+ } -+ -+ printf ("\t%zd", (size_t) best_time); -+ } -+} -+ -+ -+static void -+do_test (size_t align1, size_t align2, size_t len1, size_t len2, -+ int fail) -+{ -+ char *s1 = (char *) (buf1 + align1); -+ char *s2 = (char *) (buf2 + align2); -+ -+ static const char d[] = "1234567890abcxyz"; -+#define dl (sizeof (d) - 1) -+ char *ss2 = s2; -+ for (size_t l = len2; l > 0; l = l > dl ? l - dl : 0) -+ { -+ size_t t = l > dl ? dl : l; -+ ss2 = mempcpy (ss2, d, t); -+ } -+ s2[len2] = '\0'; -+ -+ if (fail) -+ { -+ char *ss1 = s1; -+ for (size_t l = len1; l > 0; l = l > dl ? l - dl : 0) -+ { -+ size_t t = l > dl ? dl : l; -+ memcpy (ss1, d, t); -+ ++ss1[len2 > 7 ? 7 : len2 - 1]; -+ ss1 += t; -+ } -+ } -+ else -+ { -+ memset (s1, '0', len1); -+ for (size_t i = 0; i < len2; ++i) -+ s1[len1 - len2 + i] = toupper (s2[i]); -+ } -+ s1[len1] = '\0'; -+ -+ if (HP_TIMING_AVAIL) -+ printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:", -+ len1, len2, align1, align2, fail ? "fail" : "found"); -+ -+ FOR_EACH_IMPL (impl, 0) -+ do_one_test (impl, s1, s2, fail ? NULL : s1 + len1 - len2); -+ -+ if (HP_TIMING_AVAIL) -+ putchar ('\n'); -+} -+ -+ -+static int -+test_main (void) -+{ -+ test_init (); -+ -+ printf ("%23s", ""); -+ FOR_EACH_IMPL (impl, 0) -+ printf ("\t%s", impl->name); -+ putchar ('\n'); -+ -+ for (size_t klen = 2; klen < 32; ++klen) -+ for (size_t hlen = 2 * klen; hlen < 16 * klen; hlen += klen) -+ { -+ do_test (0, 0, hlen, klen, 0); -+ do_test (0, 0, hlen, klen, 1); -+ do_test (0, 3, hlen, klen, 0); -+ do_test (0, 3, hlen, klen, 1); -+ do_test (0, 9, hlen, klen, 0); -+ do_test (0, 9, hlen, klen, 1); -+ do_test (0, 15, hlen, klen, 0); -+ do_test (0, 15, hlen, klen, 1); -+ -+ do_test (3, 0, hlen, klen, 0); -+ do_test (3, 0, hlen, klen, 1); -+ do_test (3, 3, hlen, klen, 0); -+ do_test (3, 3, hlen, klen, 1); -+ do_test (3, 9, hlen, klen, 0); -+ do_test (3, 9, hlen, klen, 1); -+ do_test (3, 15, hlen, klen, 0); -+ do_test (3, 15, hlen, klen, 1); -+ -+ do_test (9, 0, hlen, klen, 0); -+ do_test (9, 0, hlen, klen, 1); -+ do_test (9, 3, hlen, klen, 0); -+ do_test (9, 3, hlen, klen, 1); -+ do_test (9, 9, hlen, klen, 0); -+ do_test (9, 9, hlen, klen, 1); -+ do_test (9, 15, hlen, klen, 0); -+ do_test (9, 15, hlen, klen, 1); -+ -+ do_test (15, 0, hlen, klen, 0); -+ do_test (15, 0, hlen, klen, 1); -+ do_test (15, 3, hlen, klen, 0); -+ do_test (15, 3, hlen, klen, 1); -+ do_test (15, 9, hlen, klen, 0); -+ do_test (15, 9, hlen, klen, 1); -+ do_test (15, 15, hlen, klen, 0); -+ do_test (15, 15, hlen, klen, 1); -+ } -+ -+ do_test (0, 0, page_size - 1, 16, 0); -+ do_test (0, 0, page_size - 1, 16, 1); -+ -+ return ret; -+} -+ -+#include "../test-skeleton.c" -Index: glibc-2.12-2-gc4ccff1/string/test-strncasecmp.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/string/test-strncasecmp.c -@@ -0,0 +1,349 @@ -+/* Test and measure strncasecmp functions. -+ Copyright (C) 1999, 2002, 2003, 2005, 2010 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Written by Jakub Jelinek , 1999. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#include -+#define TEST_MAIN -+#include "test-string.h" -+ -+typedef int (*proto_t) (const char *, const char *, size_t); -+static int simple_strncasecmp (const char *, const char *, size_t); -+static int stupid_strncasecmp (const char *, const char *, size_t); -+ -+IMPL (stupid_strncasecmp, 0) -+IMPL (simple_strncasecmp, 0) -+IMPL (strncasecmp, 1) -+ -+static int -+simple_strncasecmp (const char *s1, const char *s2, size_t n) -+{ -+ int ret; -+ -+ if (n == 0) -+ return 0; -+ -+ while ((ret = ((unsigned char) tolower (*s1) -+ - (unsigned char) tolower (*s2))) == 0 -+ && *s1++) -+ { -+ if (--n == 0) -+ return 0; -+ ++s2; -+ } -+ return ret; -+} -+ -+static int -+stupid_strncasecmp (const char *s1, const char *s2, size_t max) -+{ -+ size_t ns1 = strlen (s1) + 1; -+ size_t ns2 = strlen (s2) + 1; -+ size_t n = ns1 < ns2 ? ns1 : ns2; -+ if (n > max) -+ n = max; -+ int ret = 0; -+ -+ while (n--) -+ { -+ if ((ret = ((unsigned char) tolower (*s1) -+ - (unsigned char) tolower (*s2))) != 0) -+ break; -+ ++s1; -+ ++s2; -+ } -+ return ret; -+} -+ -+static int -+check_result (impl_t *impl, const char *s1, const char *s2, size_t n, -+ int exp_result) -+{ -+ int result = CALL (impl, s1, s2, n); -+ if ((exp_result == 0 && result != 0) -+ || (exp_result < 0 && result >= 0) -+ || (exp_result > 0 && result <= 0)) -+ { -+ error (0, 0, "Wrong result in function %s %d %d", impl->name, -+ result, exp_result); -+ ret = 1; -+ return -1; -+ } -+ -+ return 0; -+} -+ -+static void -+do_one_test (impl_t *impl, const char *s1, const char *s2, size_t n, -+ int exp_result) -+{ -+ if (check_result (impl, s1, s2, n, exp_result) < 0) -+ return; -+ -+ if (HP_TIMING_AVAIL) -+ { -+ hp_timing_t start __attribute ((unused)); -+ hp_timing_t stop __attribute ((unused)); -+ hp_timing_t best_time = ~ (hp_timing_t) 0; -+ size_t i; -+ -+ for (i = 0; i < 32; ++i) -+ { -+ HP_TIMING_NOW (start); -+ CALL (impl, s1, s2, n); -+ HP_TIMING_NOW (stop); -+ HP_TIMING_BEST (best_time, start, stop); -+ } -+ -+ printf ("\t%zd", (size_t) best_time); -+ } -+} -+ -+static void -+do_test (size_t align1, size_t align2, size_t n, size_t len, int max_char, -+ int exp_result) -+{ -+ size_t i; -+ char *s1, *s2; -+ -+ if (len == 0) -+ return; -+ -+ align1 &= 7; -+ if (align1 + len + 1 >= page_size) -+ return; -+ -+ align2 &= 7; -+ if (align2 + len + 1 >= page_size) -+ return; -+ -+ s1 = (char *) (buf1 + align1); -+ s2 = (char *) (buf2 + align2); -+ -+ for (i = 0; i < len; i++) -+ { -+ s1[i] = toupper (1 + 23 * i % max_char); -+ s2[i] = tolower (s1[i]); -+ } -+ -+ s1[len] = s2[len] = 0; -+ s1[len + 1] = 23; -+ s2[len + 1] = 24 + exp_result; -+ if ((s2[len - 1] == 'z' && exp_result == -1) -+ || (s2[len - 1] == 'a' && exp_result == 1)) -+ s1[len - 1] += exp_result; -+ else -+ s2[len - 1] -= exp_result; -+ -+ if (HP_TIMING_AVAIL) -+ printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2); -+ -+ FOR_EACH_IMPL (impl, 0) -+ do_one_test (impl, s1, s2, n, exp_result); -+ -+ if (HP_TIMING_AVAIL) -+ putchar ('\n'); -+} -+ -+static void -+do_random_tests (void) -+{ -+ size_t i, j, n, align1, align2, pos, len1, len2; -+ int result; -+ long r; -+ unsigned char *p1 = buf1 + page_size - 512; -+ unsigned char *p2 = buf2 + page_size - 512; -+ -+ for (n = 0; n < ITERATIONS; n++) -+ { -+ align1 = random () & 31; -+ if (random () & 1) -+ align2 = random () & 31; -+ else -+ align2 = align1 + (random () & 24); -+ pos = random () & 511; -+ j = align1 > align2 ? align1 : align2; -+ if (pos + j >= 511) -+ pos = 510 - j - (random () & 7); -+ len1 = random () & 511; -+ if (pos >= len1 && (random () & 1)) -+ len1 = pos + (random () & 7); -+ if (len1 + j >= 512) -+ len1 = 511 - j - (random () & 7); -+ if (pos >= len1) -+ len2 = len1; -+ else -+ len2 = len1 + (len1 != 511 - j ? random () % (511 - j - len1) : 0); -+ j = (pos > len2 ? pos : len2) + align1 + 64; -+ if (j > 512) -+ j = 512; -+ for (i = 0; i < j; ++i) -+ { -+ p1[i] = tolower (random () & 255); -+ if (i < len1 + align1 && !p1[i]) -+ { -+ p1[i] = tolower (random () & 255); -+ if (!p1[i]) -+ p1[i] = tolower (1 + (random () & 127)); -+ } -+ } -+ for (i = 0; i < j; ++i) -+ { -+ p2[i] = toupper (random () & 255); -+ if (i < len2 + align2 && !p2[i]) -+ { -+ p2[i] = toupper (random () & 255); -+ if (!p2[i]) -+ toupper (p2[i] = 1 + (random () & 127)); -+ } -+ } -+ -+ result = 0; -+ memcpy (p2 + align2, p1 + align1, pos); -+ if (pos < len1) -+ { -+ if (tolower (p2[align2 + pos]) == p1[align1 + pos]) -+ { -+ p2[align2 + pos] = toupper (random () & 255); -+ if (tolower (p2[align2 + pos]) == p1[align1 + pos]) -+ p2[align2 + pos] = toupper (p1[align1 + pos] -+ + 3 + (random () & 127)); -+ } -+ -+ if (p1[align1 + pos] < tolower (p2[align2 + pos])) -+ result = -1; -+ else -+ result = 1; -+ } -+ p1[len1 + align1] = 0; -+ p2[len2 + align2] = 0; -+ -+ FOR_EACH_IMPL (impl, 1) -+ { -+ r = CALL (impl, (char *) (p1 + align1), (char *) (p2 + align2), -+ pos + 1 + (random () & 255)); -+ /* Test whether on 64-bit architectures where ABI requires -+ callee to promote has the promotion been done. */ -+ asm ("" : "=g" (r) : "0" (r)); -+ if ((r == 0 && result) -+ || (r < 0 && result >= 0) -+ || (r > 0 && result <= 0)) -+ { -+ error (0, 0, "Iteration %zd - wrong result in function %s (%zd, %zd, %zd, %zd, %zd) %ld != %d, p1 %p p2 %p", -+ n, impl->name, align1, align2, len1, len2, pos, r, result, p1, p2); -+ ret = 1; -+ } -+ } -+ } -+} -+ -+ -+static void -+check1 (void) -+{ -+ static char cp [4096+16] __attribute__ ((aligned(4096))); -+ static char gotrel[4096] __attribute__ ((aligned(4096))); -+ char *s1 = cp + 0xffa; -+ char *s2 = gotrel + 0xcbe; -+ int exp_result; -+ size_t n = 6; -+ -+ strcpy (s1, "gottpoff"); -+ strcpy (s2, "GOTPLT"); -+ -+ exp_result = simple_strncasecmp (s1, s2, n); -+ FOR_EACH_IMPL (impl, 0) -+ check_result (impl, s1, s2, n, exp_result); -+} -+ -+int -+test_main (void) -+{ -+ size_t i; -+ -+ test_init (); -+ -+ check1 (); -+ -+ printf ("%23s", ""); -+ FOR_EACH_IMPL (impl, 0) -+ printf ("\t%s", impl->name); -+ putchar ('\n'); -+ -+ for (i = 1; i < 16; ++i) -+ { -+ do_test (i, i, i - 1, i, 127, 0); -+ -+ do_test (i, i, i, i, 127, 0); -+ do_test (i, i, i, i, 127, 1); -+ do_test (i, i, i, i, 127, -1); -+ -+ do_test (i, i, i + 1, i, 127, 0); -+ do_test (i, i, i + 1, i, 127, 1); -+ do_test (i, i, i + 1, i, 127, -1); -+ } -+ -+ for (i = 1; i < 10; ++i) -+ { -+ do_test (0, 0, (2 << i) - 1, 2 << i, 127, 0); -+ do_test (0, 0, 2 << i, 2 << i, 254, 0); -+ do_test (0, 0, (2 << i) + 1, 2 << i, 127, 0); -+ -+ do_test (0, 0, (2 << i) + 1, 2 << i, 254, 0); -+ -+ do_test (0, 0, 2 << i, 2 << i, 127, 1); -+ do_test (0, 0, (2 << i) + 10, 2 << i, 127, 1); -+ -+ do_test (0, 0, 2 << i, 2 << i, 254, 1); -+ do_test (0, 0, (2 << i) + 10, 2 << i, 254, 1); -+ -+ do_test (0, 0, 2 << i, 2 << i, 127, -1); -+ do_test (0, 0, (2 << i) + 10, 2 << i, 127, -1); -+ -+ do_test (0, 0, 2 << i, 2 << i, 254, -1); -+ do_test (0, 0, (2 << i) + 10, 2 << i, 254, -1); -+ } -+ -+ for (i = 1; i < 8; ++i) -+ { -+ do_test (i, 2 * i, (8 << i) - 1, 8 << i, 127, 0); -+ do_test (i, 2 * i, 8 << i, 8 << i, 127, 0); -+ do_test (i, 2 * i, (8 << i) + 100, 8 << i, 127, 0); -+ -+ do_test (2 * i, i, (8 << i) - 1, 8 << i, 254, 0); -+ do_test (2 * i, i, 8 << i, 8 << i, 254, 0); -+ do_test (2 * i, i, (8 << i) + 100, 8 << i, 254, 0); -+ -+ do_test (i, 2 * i, 8 << i, 8 << i, 127, 1); -+ do_test (i, 2 * i, (8 << i) + 100, 8 << i, 127, 1); -+ -+ do_test (2 * i, i, 8 << i, 8 << i, 254, 1); -+ do_test (2 * i, i, (8 << i) + 100, 8 << i, 254, 1); -+ -+ do_test (i, 2 * i, 8 << i, 8 << i, 127, -1); -+ do_test (i, 2 * i, (8 << i) + 100, 8 << i, 127, -1); -+ -+ do_test (2 * i, i, 8 << i, 8 << i, 254, -1); -+ do_test (2 * i, i, (8 << i) + 100, 8 << i, 254, -1); -+ } -+ -+ do_random_tests (); -+ return ret; -+} -+ -+#include "../test-skeleton.c" -Index: glibc-2.12-2-gc4ccff1/string/test-strnlen.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/string/test-strnlen.c -@@ -0,0 +1,197 @@ -+/* Test and measure strlen functions. -+ Copyright (C) 1999, 2002, 2003, 2005, 2010 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Written by Jakub Jelinek , 1999. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#define TEST_MAIN -+#include "test-string.h" -+ -+typedef size_t (*proto_t) (const char *, size_t); -+size_t simple_strnlen (const char *, size_t); -+ -+IMPL (simple_strnlen, 0) -+IMPL (strnlen, 1) -+ -+size_t -+simple_strnlen (const char *s, size_t maxlen) -+{ -+ size_t i; -+ -+ for (i = 0; i < maxlen && s[i]; ++i); -+ return i; -+} -+ -+static void -+do_one_test (impl_t *impl, const char *s, size_t maxlen, size_t exp_len) -+{ -+ size_t len = CALL (impl, s, maxlen); -+ if (len != exp_len) -+ { -+ error (0, 0, "Wrong result in function %s %zd %zd", impl->name, -+ len, exp_len); -+ ret = 1; -+ return; -+ } -+ -+ if (HP_TIMING_AVAIL) -+ { -+ hp_timing_t start __attribute ((unused)); -+ hp_timing_t stop __attribute ((unused)); -+ hp_timing_t best_time = ~ (hp_timing_t) 0; -+ size_t i; -+ -+ for (i = 0; i < 32; ++i) -+ { -+ HP_TIMING_NOW (start); -+ CALL (impl, s, maxlen); -+ HP_TIMING_NOW (stop); -+ HP_TIMING_BEST (best_time, start, stop); -+ } -+ -+ printf ("\t%zd", (size_t) best_time); -+ } -+} -+ -+static void -+do_test (size_t align, size_t len, size_t maxlen, int max_char) -+{ -+ size_t i; -+ -+ align &= 7; -+ if (align + len >= page_size) -+ return; -+ -+ for (i = 0; i < len; ++i) -+ buf1[align + i] = 1 + 7 * i % max_char; -+ buf1[align + len] = 0; -+ -+ if (HP_TIMING_AVAIL) -+ printf ("Length %4zd, alignment %2zd:", len, align); -+ -+ FOR_EACH_IMPL (impl, 0) -+ do_one_test (impl, (char *) (buf1 + align), maxlen, MIN (len, maxlen)); -+ -+ if (HP_TIMING_AVAIL) -+ putchar ('\n'); -+} -+ -+static void -+do_random_tests (void) -+{ -+ size_t i, j, n, align, len; -+ unsigned char *p = buf1 + page_size - 512; -+ -+ for (n = 0; n < ITERATIONS; n++) -+ { -+ align = random () & 15; -+ len = random () & 511; -+ if (len + align > 510) -+ len = 511 - align - (random () & 7); -+ j = len + align + 64; -+ if (j > 512) -+ j = 512; -+ -+ for (i = 0; i < j; i++) -+ { -+ if (i == len + align) -+ p[i] = 0; -+ else -+ { -+ p[i] = random () & 255; -+ if (i >= align && i < len + align && !p[i]) -+ p[i] = (random () & 127) + 1; -+ } -+ } -+ -+ FOR_EACH_IMPL (impl, 1) -+ { -+ if (len > 0 -+ && CALL (impl, (char *) (p + align), len - 1) != len - 1) -+ { -+ error (0, 0, "Iteration %zd (limited) - wrong result in function %s (%zd) %zd != %zd, p %p", -+ n, impl->name, align, -+ CALL (impl, (char *) (p + align), len - 1), len - 1, p); -+ ret = 1; -+ } -+ if (CALL (impl, (char *) (p + align), len) != len) -+ { -+ error (0, 0, "Iteration %zd (exact) - wrong result in function %s (%zd) %zd != %zd, p %p", -+ n, impl->name, align, -+ CALL (impl, (char *) (p + align), len), len, p); -+ ret = 1; -+ } -+ if (CALL (impl, (char *) (p + align), len + 1) != len) -+ { -+ error (0, 0, "Iteration %zd (long) - wrong result in function %s (%zd) %zd != %zd, p %p", -+ n, impl->name, align, -+ CALL (impl, (char *) (p + align), len + 1), len, p); -+ ret = 1; -+ } -+ } -+ } -+} -+ -+int -+test_main (void) -+{ -+ size_t i; -+ -+ test_init (); -+ -+ printf ("%20s", ""); -+ FOR_EACH_IMPL (impl, 0) -+ printf ("\t%s", impl->name); -+ putchar ('\n'); -+ -+ for (i = 1; i < 8; ++i) -+ { -+ do_test (0, i, i - 1, 127); -+ do_test (0, i, i, 127); -+ do_test (0, i, i + 1, 127); -+ } -+ -+ for (i = 1; i < 8; ++i) -+ { -+ do_test (i, i, i - 1, 127); -+ do_test (i, i, i, 127); -+ do_test (i, i, i + 1, 127); -+ } -+ -+ for (i = 2; i <= 10; ++i) -+ { -+ do_test (0, 1 << i, 5000, 127); -+ do_test (1, 1 << i, 5000, 127); -+ } -+ -+ for (i = 1; i < 8; ++i) -+ do_test (0, i, 5000, 255); -+ -+ for (i = 1; i < 8; ++i) -+ do_test (i, i, 5000, 255); -+ -+ for (i = 2; i <= 10; ++i) -+ { -+ do_test (0, 1 << i, 5000, 255); -+ do_test (1, 1 << i, 5000, 255); -+ } -+ -+ do_random_tests (); -+ return ret; -+} -+ -+#include "../test-skeleton.c" -Index: glibc-2.12-2-gc4ccff1/string/test-strstr.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/string/test-strstr.c -@@ -0,0 +1,194 @@ -+/* Test and measure strstr functions. -+ Copyright (C) 2010 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Written by Ulrich Drepper , 2010. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#define TEST_MAIN -+#include "test-string.h" -+ -+ -+#define STRSTR simple_strstr -+#include "strstr.c" -+ -+ -+static char * -+stupid_strstr (const char *s1, const char *s2) -+{ -+ ssize_t s1len = strlen (s1); -+ ssize_t s2len = strlen (s2); -+ -+ if (s2len > s1len) -+ return NULL; -+ -+ for (ssize_t i = 0; i <= s1len - s2len; ++i) -+ { -+ size_t j; -+ for (j = 0; j < s2len; ++j) -+ if (s1[i + j] != s2[j]) -+ break; -+ if (j == s2len) -+ return (char *) s1 + i; -+ } -+ -+ return NULL; -+} -+ -+ -+typedef char *(*proto_t) (const char *, const char *); -+ -+IMPL (stupid_strstr, 0) -+IMPL (simple_strstr, 0) -+IMPL (strstr, 1) -+ -+ -+static void -+do_one_test (impl_t *impl, const char *s1, const char *s2, char *exp_result) -+{ -+ char *result = CALL (impl, s1, s2); -+ if (result != exp_result) -+ { -+ error (0, 0, "Wrong result in function %s %s %s", impl->name, -+ result, exp_result); -+ ret = 1; -+ return; -+ } -+ -+ if (HP_TIMING_AVAIL) -+ { -+ hp_timing_t start __attribute ((unused)); -+ hp_timing_t stop __attribute ((unused)); -+ hp_timing_t best_time = ~(hp_timing_t) 0; -+ size_t i; -+ -+ for (i = 0; i < 32; ++i) -+ { -+ HP_TIMING_NOW (start); -+ CALL (impl, s1, s2); -+ HP_TIMING_NOW (stop); -+ HP_TIMING_BEST (best_time, start, stop); -+ } -+ -+ printf ("\t%zd", (size_t) best_time); -+ } -+} -+ -+ -+static void -+do_test (size_t align1, size_t align2, size_t len1, size_t len2, -+ int fail) -+{ -+ char *s1 = (char *) (buf1 + align1); -+ char *s2 = (char *) (buf2 + align2); -+ -+ static const char d[] = "1234567890abcdef"; -+#define dl (sizeof (d) - 1) -+ char *ss2 = s2; -+ for (size_t l = len2; l > 0; l = l > dl ? l - dl : 0) -+ { -+ size_t t = l > dl ? dl : l; -+ ss2 = mempcpy (ss2, d, t); -+ } -+ s2[len2] = '\0'; -+ -+ if (fail) -+ { -+ char *ss1 = s1; -+ for (size_t l = len1; l > 0; l = l > dl ? l - dl : 0) -+ { -+ size_t t = l > dl ? dl : l; -+ memcpy (ss1, d, t); -+ ++ss1[len2 > 7 ? 7 : len2 - 1]; -+ ss1 += t; -+ } -+ } -+ else -+ { -+ memset (s1, '0', len1); -+ memcpy (s1 + len1 - len2, s2, len2); -+ } -+ s1[len1] = '\0'; -+ -+ if (HP_TIMING_AVAIL) -+ printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:", -+ len1, len2, align1, align2, fail ? "fail" : "found"); -+ -+ FOR_EACH_IMPL (impl, 0) -+ do_one_test (impl, s1, s2, fail ? NULL : s1 + len1 - len2); -+ -+ if (HP_TIMING_AVAIL) -+ putchar ('\n'); -+} -+ -+ -+static int -+test_main (void) -+{ -+ test_init (); -+ -+ printf ("%23s", ""); -+ FOR_EACH_IMPL (impl, 0) -+ printf ("\t%s", impl->name); -+ putchar ('\n'); -+ -+ for (size_t klen = 2; klen < 32; ++klen) -+ for (size_t hlen = 2 * klen; hlen < 16 * klen; hlen += klen) -+ { -+ do_test (0, 0, hlen, klen, 0); -+ do_test (0, 0, hlen, klen, 1); -+ do_test (0, 3, hlen, klen, 0); -+ do_test (0, 3, hlen, klen, 1); -+ do_test (0, 9, hlen, klen, 0); -+ do_test (0, 9, hlen, klen, 1); -+ do_test (0, 15, hlen, klen, 0); -+ do_test (0, 15, hlen, klen, 1); -+ -+ do_test (3, 0, hlen, klen, 0); -+ do_test (3, 0, hlen, klen, 1); -+ do_test (3, 3, hlen, klen, 0); -+ do_test (3, 3, hlen, klen, 1); -+ do_test (3, 9, hlen, klen, 0); -+ do_test (3, 9, hlen, klen, 1); -+ do_test (3, 15, hlen, klen, 0); -+ do_test (3, 15, hlen, klen, 1); -+ -+ do_test (9, 0, hlen, klen, 0); -+ do_test (9, 0, hlen, klen, 1); -+ do_test (9, 3, hlen, klen, 0); -+ do_test (9, 3, hlen, klen, 1); -+ do_test (9, 9, hlen, klen, 0); -+ do_test (9, 9, hlen, klen, 1); -+ do_test (9, 15, hlen, klen, 0); -+ do_test (9, 15, hlen, klen, 1); -+ -+ do_test (15, 0, hlen, klen, 0); -+ do_test (15, 0, hlen, klen, 1); -+ do_test (15, 3, hlen, klen, 0); -+ do_test (15, 3, hlen, klen, 1); -+ do_test (15, 9, hlen, klen, 0); -+ do_test (15, 9, hlen, klen, 1); -+ do_test (15, 15, hlen, klen, 0); -+ do_test (15, 15, hlen, klen, 1); -+ } -+ -+ do_test (0, 0, page_size - 1, 16, 0); -+ do_test (0, 0, page_size - 1, 16, 1); -+ -+ return ret; -+} -+ -+#include "../test-skeleton.c" -Index: glibc-2.12-2-gc4ccff1/string/tester.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/string/tester.c -+++ glibc-2.12-2-gc4ccff1/string/tester.c -@@ -441,20 +441,21 @@ test_strnlen (void) - check (strnlen ("", 10) == 0, 1); /* Empty. */ - check (strnlen ("a", 10) == 1, 2); /* Single char. */ - check (strnlen ("abcd", 10) == 4, 3); /* Multiple chars. */ -- check (strnlen ("foo", (size_t)-1) == 3, 4); /* limits of n. */ -+ check (strnlen ("foo", (size_t) -1) == 3, 4); /* limits of n. */ -+ check (strnlen ("abcd", 0) == 0, 5); /* Restricted. */ -+ check (strnlen ("abcd", 1) == 1, 6); /* Restricted. */ -+ check (strnlen ("abcd", 2) == 2, 7); /* Restricted. */ -+ check (strnlen ("abcd", 3) == 3, 8); /* Restricted. */ -+ check (strnlen ("abcd", 4) == 4, 9); /* Restricted. */ - -- { -- char buf[4096]; -- int i; -- char *p; -- for (i=0; i < 0x100; i++) -- { -- p = (char *) ((unsigned long int)(buf + 0xff) & ~0xff) + i; -- strcpy (p, "OK"); -- strcpy (p+3, "BAD/WRONG"); -- check (strnlen (p, 100) == 2, 5+i); -- } -- } -+ char buf[4096]; -+ for (int i = 0; i < 0x100; ++i) -+ { -+ char *p = (char *) ((unsigned long int)(buf + 0xff) & ~0xff) + i; -+ strcpy (p, "OK"); -+ strcpy (p + 3, "BAD/WRONG"); -+ check (strnlen (p, 100) == 2, 10 + i); -+ } - } - - static void -Index: glibc-2.12-2-gc4ccff1/string/tst-strlen.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/string/tst-strlen.c -+++ glibc-2.12-2-gc4ccff1/string/tst-strlen.c -@@ -31,11 +31,21 @@ main(int argc, char *argv[]) - buf[words * 4 + 3] = (last & 8) != 0 ? 'e' : '\0'; - buf[words * 4 + 4] = '\0'; - -- if (strlen (buf) != words * 4 + lens[last] -- || strnlen (buf, -1) != words * 4 + lens[last]) -+ if (strlen (buf) != words * 4 + lens[last]) - { -- printf ("failed for base=%Zu, words=%Zu, and last=%Zu\n", -- base, words, last); -+ printf ("\ -+strlen failed for base=%Zu, words=%Zu, and last=%Zu (is %zd, expected %zd)\n", -+ base, words, last, -+ strlen (buf), words * 4 + lens[last]); -+ return 1; -+ } -+ -+ if (strnlen (buf, -1) != words * 4 + lens[last]) -+ { -+ printf ("\ -+strnlen failed for base=%Zu, words=%Zu, and last=%Zu (is %zd, expected %zd)\n", -+ base, words, last, -+ strnlen (buf, -1), words * 4 + lens[last]); - return 1; - } - } -Index: glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/i386/i686/multiarch/Makefile -+++ glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/Makefile -@@ -9,7 +9,7 @@ sysdep_routines += bzero-sse2 memset-sse - memmove-ssse3-rep bcopy-ssse3 bcopy-ssse3-rep \ - memset-sse2-rep bzero-sse2-rep strcmp-ssse3 \ - strcmp-sse4 strncmp-c strncmp-ssse3 strncmp-sse4 \ -- memcmp-ssse3 memcmp-sse4 -+ memcmp-ssse3 memcmp-sse4 strcasestr-nonascii - ifeq (yes,$(config-cflags-sse4)) - sysdep_routines += strcspn-c strpbrk-c strspn-c strstr-c strcasestr-c - CFLAGS-strcspn-c.c += -msse4 -@@ -17,6 +17,7 @@ CFLAGS-strpbrk-c.c += -msse4 - CFLAGS-strspn-c.c += -msse4 - CFLAGS-strstr.c += -msse4 - CFLAGS-strcasestr.c += -msse4 -+CFLAGS-strcasestr-nonascii.c += -msse4 - endif - endif - -Index: glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strcasestr-nonascii.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strcasestr-nonascii.c -@@ -0,0 +1,2 @@ -+#include -+#include -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/Makefile -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/Makefile -@@ -12,7 +12,8 @@ sysdep_routines += _mcount - endif - - ifeq ($(subdir),string) --sysdep_routines += cacheinfo -+sysdep_routines += cacheinfo strcasecmp_l-nonascii strncase_l-nonascii -+gen-as-const-headers += locale-defines.sym - endif - - ifeq ($(subdir),elf) -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/locale-defines.sym -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/locale-defines.sym -@@ -0,0 +1,11 @@ -+#include -+#include -+#include -+ -+-- -+ -+LOCALE_T___LOCALES offsetof (struct __locale_struct, __locales) -+LC_CTYPE -+_NL_CTYPE_NONASCII_CASE -+LOCALE_DATA_VALUES offsetof (struct __locale_data, values) -+SIZEOF_VALUES sizeof (((struct __locale_data *) 0)->values[0]) -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/Makefile -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/Makefile -@@ -5,7 +5,9 @@ endif - - ifeq ($(subdir),string) - sysdep_routines += stpncpy-c strncpy-c strcmp-ssse3 strncmp-ssse3 \ -- strend-sse4 memcmp-sse4 -+ strend-sse4 memcmp-sse4 \ -+ strcasestr-nonascii strcasecmp_l-ssse3 \ -+ strncase_l-ssse3 - ifeq (yes,$(config-cflags-sse4)) - sysdep_routines += strcspn-c strpbrk-c strspn-c strstr-c strcasestr-c - CFLAGS-strcspn-c.c += -msse4 -@@ -13,5 +15,6 @@ CFLAGS-strpbrk-c.c += -msse4 - CFLAGS-strspn-c.c += -msse4 - CFLAGS-strstr.c += -msse4 - CFLAGS-strcasestr.c += -msse4 -+CFLAGS-strcasestr-nonascii.c += -msse4 - endif - endif -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasecmp_l-ssse3.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasecmp_l-ssse3.S -@@ -0,0 +1,6 @@ -+#define USE_SSSE3 1 -+#define USE_AS_STRCASECMP_L -+#define NO_NOLOCALE_ALIAS -+#define STRCMP __strcasecmp_l_ssse3 -+#define __strcasecmp __strcasecmp_ssse3 -+#include "../strcmp.S" -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasecmp_l.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasecmp_l.S -@@ -0,0 +1,6 @@ -+#define STRCMP __strcasecmp_l -+#define USE_AS_STRCASECMP_L -+#include "strcmp.S" -+ -+weak_alias (__strcasecmp_l, strcasecmp_l) -+libc_hidden_def (strcasecmp_l) -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasestr-nonascii.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasestr-nonascii.c -@@ -0,0 +1,50 @@ -+/* strstr with SSE4.2 intrinsics -+ Copyright (C) 2010 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+# include -+ -+ -+/* Similar to __m128i_strloadu. Convert to lower case for none-POSIX/C -+ locale. */ -+static inline __m128i -+__m128i_strloadu_tolower (const unsigned char *p) -+{ -+ union -+ { -+ char b[16]; -+ __m128i x; -+ } u; -+ -+ for (int i = 0; i < 16; ++i) -+ if (p[i] == 0) -+ { -+ u.b[i] = 0; -+ break; -+ } -+ else -+ u.b[i] = tolower (p[i]); -+ -+ return u.x; -+} -+ -+ -+#define STRCASESTR_NONASCII -+#define USE_AS_STRCASESTR -+#define STRSTR_SSE42 __strcasestr_sse42_nonascii -+#include "strstr.c" -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasestr.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/strcasestr.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasestr.c -@@ -1,3 +1,7 @@ -+extern char *__strcasestr_sse42_nonascii (const unsigned char *s1, -+ const unsigned char *s2) -+ attribute_hidden; -+ - #define USE_AS_STRCASESTR - #define STRSTR_SSE42 __strcasestr_sse42 - #include "strstr.c" -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcmp.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/strcmp.S -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcmp.S -@@ -24,7 +24,7 @@ - #ifdef USE_AS_STRNCMP - /* Since the counter, %r11, is unsigned, we branch to strcmp_exitz - if the new counter > the old one or is 0. */ --#define UPDATE_STRNCMP_COUNTER \ -+# define UPDATE_STRNCMP_COUNTER \ - /* calculate left number to compare */ \ - lea -16(%rcx, %r11), %r9; \ - cmp %r9, %r11; \ -@@ -33,23 +33,50 @@ - je LABEL(strcmp_exitz_sse4_2); \ - mov %r9, %r11 - --#define STRCMP_SSE42 __strncmp_sse42 --#define STRCMP_SSSE3 __strncmp_ssse3 --#define STRCMP_SSE2 __strncmp_sse2 --#define __GI_STRCMP __GI_strncmp -+# define STRCMP_SSE42 __strncmp_sse42 -+# define STRCMP_SSSE3 __strncmp_ssse3 -+# define STRCMP_SSE2 __strncmp_sse2 -+# define __GI_STRCMP __GI_strncmp -+#elif defined USE_AS_STRCASECMP_L -+# include "locale-defines.h" -+ -+# define UPDATE_STRNCMP_COUNTER -+ -+# define STRCMP_SSE42 __strcasecmp_l_sse42 -+# define STRCMP_SSSE3 __strcasecmp_l_ssse3 -+# define STRCMP_SSE2 __strcasecmp_l_sse2 -+# define __GI_STRCMP __GI___strcasecmp_l -+#elif defined USE_AS_STRNCASECMP_L -+# include "locale-defines.h" -+ -+/* Since the counter, %r11, is unsigned, we branch to strcmp_exitz -+ if the new counter > the old one or is 0. */ -+# define UPDATE_STRNCMP_COUNTER \ -+ /* calculate left number to compare */ \ -+ lea -16(%rcx, %r11), %r9; \ -+ cmp %r9, %r11; \ -+ jb LABEL(strcmp_exitz_sse4_2); \ -+ test %r9, %r9; \ -+ je LABEL(strcmp_exitz_sse4_2); \ -+ mov %r9, %r11 -+ -+# define STRCMP_SSE42 __strncasecmp_l_sse42 -+# define STRCMP_SSSE3 __strncasecmp_l_ssse3 -+# define STRCMP_SSE2 __strncasecmp_l_sse2 -+# define __GI_STRCMP __GI___strncasecmp_l - #else --#define UPDATE_STRNCMP_COUNTER --#ifndef STRCMP --#define STRCMP strcmp --#define STRCMP_SSE42 __strcmp_sse42 --#define STRCMP_SSSE3 __strcmp_ssse3 --#define STRCMP_SSE2 __strcmp_sse2 --#define __GI_STRCMP __GI_strcmp --#endif -+# define UPDATE_STRNCMP_COUNTER -+# ifndef STRCMP -+# define STRCMP strcmp -+# define STRCMP_SSE42 __strcmp_sse42 -+# define STRCMP_SSSE3 __strcmp_ssse3 -+# define STRCMP_SSE2 __strcmp_sse2 -+# define __GI_STRCMP __GI_strcmp -+# endif - #endif - - #ifndef LABEL --#define LABEL(l) L(l) -+# define LABEL(l) L(l) - #endif - - /* Define multiple versions only for the definition in libc. Don't -@@ -73,6 +100,43 @@ ENTRY(STRCMP) - 2: ret - END(STRCMP) - -+# ifdef USE_AS_STRCASECMP_L -+ENTRY(__strcasecmp) -+ .type __strcasecmp, @gnu_indirect_function -+ cmpl $0, __cpu_features+KIND_OFFSET(%rip) -+ jne 1f -+ call __init_cpu_features -+1: -+ leaq __strcasecmp_sse42(%rip), %rax -+ testl $bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip) -+ jnz 2f -+ leaq __strcasecmp_ssse3(%rip), %rax -+ testl $bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip) -+ jnz 2f -+ leaq __strcasecmp_sse2(%rip), %rax -+2: ret -+END(__strcasecmp) -+weak_alias (__strcasecmp, strcasecmp) -+# endif -+# ifdef USE_AS_STRNCASECMP_L -+ENTRY(__strncasecmp) -+ .type __strncasecmp, @gnu_indirect_function -+ cmpl $0, __cpu_features+KIND_OFFSET(%rip) -+ jne 1f -+ call __init_cpu_features -+1: -+ leaq __strncasecmp_sse42(%rip), %rax -+ testl $bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip) -+ jnz 2f -+ leaq __strncasecmp_ssse3(%rip), %rax -+ testl $bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip) -+ jnz 2f -+ leaq __strncasecmp_sse2(%rip), %rax -+2: ret -+END(__strncasecmp) -+weak_alias (__strncasecmp, strncasecmp) -+# endif -+ - /* We use 0x1a: - _SIDD_SBYTE_OPS - | _SIDD_CMP_EQUAL_EACH -@@ -101,8 +165,31 @@ END(STRCMP) - - /* Put all SSE 4.2 functions together. */ - .section .text.sse4.2,"ax",@progbits -- .align 16 -+ .align 16 - .type STRCMP_SSE42, @function -+# ifdef USE_AS_STRCASECMP_L -+ENTRY (__strcasecmp_sse42) -+ movq __libc_tsd_LOCALE@gottpoff(%rip),%rax -+ movq %fs:(%rax),%rdx -+ -+ // XXX 5 byte should be before the function -+ /* 5-byte NOP. */ -+ .byte 0x0f,0x1f,0x44,0x00,0x00 -+END (__strcasecmp_sse42) -+ /* FALLTHROUGH to strcasecmp_l. */ -+# endif -+# ifdef USE_AS_STRNCASECMP_L -+ENTRY (__strncasecmp_sse42) -+ movq __libc_tsd_LOCALE@gottpoff(%rip),%rax -+ movq %fs:(%rax),%rcx -+ -+ // XXX 5 byte should be before the function -+ /* 5-byte NOP. */ -+ .byte 0x0f,0x1f,0x44,0x00,0x00 -+END (__strncasecmp_sse42) -+ /* FALLTHROUGH to strncasecmp_l. */ -+# endif -+ - STRCMP_SSE42: - cfi_startproc - CALL_MCOUNT -@@ -110,24 +197,87 @@ STRCMP_SSE42: - /* - * This implementation uses SSE to compare up to 16 bytes at a time. - */ --#ifdef USE_AS_STRNCMP -+# ifdef USE_AS_STRCASECMP_L -+ /* We have to fall back on the C implementation for locales -+ with encodings not matching ASCII for single bytes. */ -+# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 -+ movq LOCALE_T___LOCALES+LC_CTYPE*8(%rdx), %rax -+# else -+ movq (%rdx), %rax -+# endif -+ testl $0, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax) -+ jne __strcasecmp_l_nonascii -+# endif -+# ifdef USE_AS_STRNCASECMP_L -+ /* We have to fall back on the C implementation for locales -+ with encodings not matching ASCII for single bytes. */ -+# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 -+ movq LOCALE_T___LOCALES+LC_CTYPE*8(%rcx), %rax -+# else -+ movq (%rcx), %rax -+# endif -+ testl $0, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax) -+ jne __strncasecmp_l_nonascii -+# endif -+ -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - test %rdx, %rdx - je LABEL(strcmp_exitz_sse4_2) - cmp $1, %rdx - je LABEL(Byte0_sse4_2) - mov %rdx, %r11 --#endif -+# endif - mov %esi, %ecx - mov %edi, %eax - /* Use 64bit AND here to avoid long NOP padding. */ - and $0x3f, %rcx /* rsi alignment in cache line */ - and $0x3f, %rax /* rdi alignment in cache line */ -+# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -+ .section .rodata.cst16,"aM",@progbits,16 -+ .align 16 -+.Lbelowupper_sse4: -+ .quad 0x4040404040404040 -+ .quad 0x4040404040404040 -+.Ltopupper_sse4: -+ .quad 0x5b5b5b5b5b5b5b5b -+ .quad 0x5b5b5b5b5b5b5b5b -+.Ltouppermask_sse4: -+ .quad 0x2020202020202020 -+ .quad 0x2020202020202020 -+ .previous -+ movdqa .Lbelowupper_sse4(%rip), %xmm4 -+# define UCLOW_reg %xmm4 -+ movdqa .Ltopupper_sse4(%rip), %xmm5 -+# define UCHIGH_reg %xmm5 -+ movdqa .Ltouppermask_sse4(%rip), %xmm6 -+# define LCQWORD_reg %xmm6 -+# endif - cmp $0x30, %ecx - ja LABEL(crosscache_sse4_2)/* rsi: 16-byte load will cross cache line */ - cmp $0x30, %eax - ja LABEL(crosscache_sse4_2)/* rdi: 16-byte load will cross cache line */ - movdqu (%rdi), %xmm1 - movdqu (%rsi), %xmm2 -+# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -+# define TOLOWER(reg1, reg2) \ -+ movdqa reg1, %xmm7; \ -+ movdqa UCHIGH_reg, %xmm8; \ -+ movdqa reg2, %xmm9; \ -+ movdqa UCHIGH_reg, %xmm10; \ -+ pcmpgtb UCLOW_reg, %xmm7; \ -+ pcmpgtb reg1, %xmm8; \ -+ pcmpgtb UCLOW_reg, %xmm9; \ -+ pcmpgtb reg2, %xmm10; \ -+ pand %xmm8, %xmm7; \ -+ pand %xmm10, %xmm9; \ -+ pand LCQWORD_reg, %xmm7; \ -+ pand LCQWORD_reg, %xmm9; \ -+ por %xmm7, reg1; \ -+ por %xmm9, reg2 -+ TOLOWER (%xmm1, %xmm2) -+# else -+# define TOLOWER(reg1, reg2) -+# endif - pxor %xmm0, %xmm0 /* clear %xmm0 for null char checks */ - pcmpeqb %xmm1, %xmm0 /* Any null chars? */ - pcmpeqb %xmm2, %xmm1 /* compare first 16 bytes for equality */ -@@ -135,10 +285,10 @@ STRCMP_SSE42: - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 16 bytes are same, edx == 0xffff */ - jnz LABEL(less16bytes_sse4_2)/* If not, find different value or null char */ --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2)/* finish comparision */ --#endif -+# endif - add $16, %rsi /* prepare to search next 16 bytes */ - add $16, %rdi /* prepare to search next 16 bytes */ - -@@ -180,7 +330,13 @@ LABEL(ashr_0_sse4_2): - movdqa (%rsi), %xmm1 - pxor %xmm0, %xmm0 /* clear %xmm0 for null char check */ - pcmpeqb %xmm1, %xmm0 /* Any null chars? */ -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpeqb (%rdi), %xmm1 /* compare 16 bytes for equality */ -+# else -+ movdqa (%rdi), %xmm2 -+ TOLOWER (%xmm1, %xmm2) -+ pcmpeqb %xmm2, %xmm1 /* compare 16 bytes for equality */ -+# endif - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %r9d - shr %cl, %edx /* adjust 0xffff for offset */ -@@ -204,44 +360,60 @@ LABEL(ashr_0_sse4_2): - .p2align 4 - LABEL(ashr_0_use_sse4_2): - movdqa (%rdi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - lea 16(%rdx), %rdx - jbe LABEL(ashr_0_use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - movdqa (%rdi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - lea 16(%rdx), %rdx - jbe LABEL(ashr_0_use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - jmp LABEL(ashr_0_use_sse4_2) - - - .p2align 4 - LABEL(ashr_0_use_sse4_2_exit): - jnc LABEL(strcmp_exitz_sse4_2) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub %rcx, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - lea -16(%rdx, %rcx), %rcx - movzbl (%rdi, %rcx), %eax - movzbl (%rsi, %rcx), %edx -+# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -+ leaq _nl_C_LC_CTYPE_tolower+128*4(%rip), %rcx -+ movl (%rcx,%rax,4), %eax -+ movl (%rcx,%rdx,4), %edx -+# endif - sub %edx, %eax - ret - - - -- - /* - * The following cases will be handled by ashr_1 -- * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case -+ * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(15) n -15 0(15 +(n-15) - n) ashr_1 - */ - .p2align 4 -@@ -251,6 +423,7 @@ LABEL(ashr_1_sse4_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 /* Any null chars? */ - pslldq $15, %xmm2 /* shift first string to align with second */ -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 /* compare 16 bytes for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %r9d -@@ -281,12 +454,18 @@ LABEL(loop_ashr_1_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $1, -16(%rdi, %rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - add $16, %rdx - add $16, %r10 -@@ -294,12 +473,18 @@ LABEL(loop_ashr_1_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $1, -16(%rdi, %rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add $16, %rdx - jmp LABEL(loop_ashr_1_use_sse4_2) - -@@ -309,10 +494,10 @@ LABEL(nibble_ashr_1_use_sse4_2): - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $1, %xmm0 - pcmpistri $0x3a,%xmm0, %xmm0 --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_use_sse4_2_exit) --#endif -+# endif - cmp $14, %ecx - ja LABEL(loop_ashr_1_use_sse4_2) - -@@ -320,7 +505,7 @@ LABEL(nibble_ashr_1_use_sse4_2): - - /* - * The following cases will be handled by ashr_2 -- * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case -+ * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(14~15) n -14 1(15 +(n-14) - n) ashr_2 - */ - .p2align 4 -@@ -330,6 +515,7 @@ LABEL(ashr_2_sse4_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $14, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -360,12 +546,18 @@ LABEL(loop_ashr_2_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $2, -16(%rdi, %rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - add $16, %rdx - add $16, %r10 -@@ -373,12 +565,18 @@ LABEL(loop_ashr_2_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $2, -16(%rdi, %rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add $16, %rdx - jmp LABEL(loop_ashr_2_use_sse4_2) - -@@ -388,10 +586,10 @@ LABEL(nibble_ashr_2_use_sse4_2): - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $2, %xmm0 - pcmpistri $0x3a,%xmm0, %xmm0 --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_use_sse4_2_exit) --#endif -+# endif - cmp $13, %ecx - ja LABEL(loop_ashr_2_use_sse4_2) - -@@ -409,6 +607,7 @@ LABEL(ashr_3_sse4_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $13, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -439,12 +638,18 @@ LABEL(loop_ashr_3_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $3, -16(%rdi, %rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - add $16, %rdx - add $16, %r10 -@@ -452,12 +657,18 @@ LABEL(loop_ashr_3_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $3, -16(%rdi, %rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add $16, %rdx - jmp LABEL(loop_ashr_3_use_sse4_2) - -@@ -467,10 +678,10 @@ LABEL(nibble_ashr_3_use_sse4_2): - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $3, %xmm0 - pcmpistri $0x3a,%xmm0, %xmm0 --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_use_sse4_2_exit) --#endif -+# endif - cmp $12, %ecx - ja LABEL(loop_ashr_3_use_sse4_2) - -@@ -488,6 +699,7 @@ LABEL(ashr_4_sse4_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $12, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -519,12 +731,18 @@ LABEL(loop_ashr_4_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $4, -16(%rdi, %rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - add $16, %rdx - add $16, %r10 -@@ -532,12 +750,18 @@ LABEL(loop_ashr_4_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $4, -16(%rdi, %rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add $16, %rdx - jmp LABEL(loop_ashr_4_use_sse4_2) - -@@ -547,10 +771,10 @@ LABEL(nibble_ashr_4_use_sse4_2): - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $4, %xmm0 - pcmpistri $0x3a,%xmm0, %xmm0 --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_use_sse4_2_exit) --#endif -+# endif - cmp $11, %ecx - ja LABEL(loop_ashr_4_use_sse4_2) - -@@ -559,7 +783,7 @@ LABEL(nibble_ashr_4_use_sse4_2): - /* - * The following cases will be handled by ashr_5 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case -- * n(11~15) n - 11 4(15 +(n-11) - n) ashr_5 -+ * n(11~15) n - 11 4(15 +(n-11) - n) ashr_5 - */ - .p2align 4 - LABEL(ashr_5_sse4_2): -@@ -568,6 +792,7 @@ LABEL(ashr_5_sse4_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $11, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -599,12 +824,18 @@ LABEL(loop_ashr_5_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $5, -16(%rdi, %rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - add $16, %rdx - add $16, %r10 -@@ -613,12 +844,18 @@ LABEL(loop_ashr_5_use_sse4_2): - movdqa (%rdi, %rdx), %xmm0 - - palignr $5, -16(%rdi, %rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add $16, %rdx - jmp LABEL(loop_ashr_5_use_sse4_2) - -@@ -628,10 +865,10 @@ LABEL(nibble_ashr_5_use_sse4_2): - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $5, %xmm0 - pcmpistri $0x3a,%xmm0, %xmm0 --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_use_sse4_2_exit) --#endif -+# endif - cmp $10, %ecx - ja LABEL(loop_ashr_5_use_sse4_2) - -@@ -640,7 +877,7 @@ LABEL(nibble_ashr_5_use_sse4_2): - /* - * The following cases will be handled by ashr_6 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case -- * n(10~15) n - 10 5(15 +(n-10) - n) ashr_6 -+ * n(10~15) n - 10 5(15 +(n-10) - n) ashr_6 - */ - .p2align 4 - LABEL(ashr_6_sse4_2): -@@ -649,6 +886,7 @@ LABEL(ashr_6_sse4_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $10, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -680,12 +918,18 @@ LABEL(loop_ashr_6_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $6, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - add $16, %rdx - add $16, %r10 -@@ -693,12 +937,18 @@ LABEL(loop_ashr_6_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $6, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add $16, %rdx - jmp LABEL(loop_ashr_6_use_sse4_2) - -@@ -708,10 +958,10 @@ LABEL(nibble_ashr_6_use_sse4_2): - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $6, %xmm0 - pcmpistri $0x3a,%xmm0, %xmm0 --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_use_sse4_2_exit) --#endif -+# endif - cmp $9, %ecx - ja LABEL(loop_ashr_6_use_sse4_2) - -@@ -720,7 +970,7 @@ LABEL(nibble_ashr_6_use_sse4_2): - /* - * The following cases will be handled by ashr_7 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case -- * n(9~15) n - 9 6(15 +(n - 9) - n) ashr_7 -+ * n(9~15) n - 9 6(15 +(n - 9) - n) ashr_7 - */ - .p2align 4 - LABEL(ashr_7_sse4_2): -@@ -729,6 +979,7 @@ LABEL(ashr_7_sse4_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $9, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -760,12 +1011,18 @@ LABEL(loop_ashr_7_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $7, -16(%rdi, %rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - add $16, %rdx - add $16, %r10 -@@ -773,12 +1030,18 @@ LABEL(loop_ashr_7_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $7, -16(%rdi, %rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add $16, %rdx - jmp LABEL(loop_ashr_7_use_sse4_2) - -@@ -788,10 +1051,10 @@ LABEL(nibble_ashr_7_use_sse4_2): - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $7, %xmm0 - pcmpistri $0x3a,%xmm0, %xmm0 --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_use_sse4_2_exit) --#endif -+# endif - cmp $8, %ecx - ja LABEL(loop_ashr_7_use_sse4_2) - -@@ -800,7 +1063,7 @@ LABEL(nibble_ashr_7_use_sse4_2): - /* - * The following cases will be handled by ashr_8 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case -- * n(8~15) n - 8 7(15 +(n - 8) - n) ashr_8 -+ * n(8~15) n - 8 7(15 +(n - 8) - n) ashr_8 - */ - .p2align 4 - LABEL(ashr_8_sse4_2): -@@ -809,6 +1072,7 @@ LABEL(ashr_8_sse4_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $8, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -840,12 +1104,18 @@ LABEL(loop_ashr_8_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $8, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - add $16, %rdx - add $16, %r10 -@@ -853,12 +1123,18 @@ LABEL(loop_ashr_8_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $8, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add $16, %rdx - jmp LABEL(loop_ashr_8_use_sse4_2) - -@@ -868,10 +1144,10 @@ LABEL(nibble_ashr_8_use_sse4_2): - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $8, %xmm0 - pcmpistri $0x3a,%xmm0, %xmm0 --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_use_sse4_2_exit) --#endif -+# endif - cmp $7, %ecx - ja LABEL(loop_ashr_8_use_sse4_2) - -@@ -880,7 +1156,7 @@ LABEL(nibble_ashr_8_use_sse4_2): - /* - * The following cases will be handled by ashr_9 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case -- * n(7~15) n - 7 8(15 +(n - 7) - n) ashr_9 -+ * n(7~15) n - 7 8(15 +(n - 7) - n) ashr_9 - */ - .p2align 4 - LABEL(ashr_9_sse4_2): -@@ -889,6 +1165,7 @@ LABEL(ashr_9_sse4_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $7, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -921,12 +1198,18 @@ LABEL(loop_ashr_9_use_sse4_2): - movdqa (%rdi, %rdx), %xmm0 - - palignr $9, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - add $16, %rdx - add $16, %r10 -@@ -934,12 +1217,18 @@ LABEL(loop_ashr_9_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $9, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add $16, %rdx - jmp LABEL(loop_ashr_9_use_sse4_2) - -@@ -949,10 +1238,10 @@ LABEL(nibble_ashr_9_use_sse4_2): - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $9, %xmm0 - pcmpistri $0x3a,%xmm0, %xmm0 --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_use_sse4_2_exit) --#endif -+# endif - cmp $6, %ecx - ja LABEL(loop_ashr_9_use_sse4_2) - -@@ -961,7 +1250,7 @@ LABEL(nibble_ashr_9_use_sse4_2): - /* - * The following cases will be handled by ashr_10 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case -- * n(6~15) n - 6 9(15 +(n - 6) - n) ashr_10 -+ * n(6~15) n - 6 9(15 +(n - 6) - n) ashr_10 - */ - .p2align 4 - LABEL(ashr_10_sse4_2): -@@ -970,6 +1259,7 @@ LABEL(ashr_10_sse4_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $6, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -1001,12 +1291,18 @@ LABEL(loop_ashr_10_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $10, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - add $16, %rdx - add $16, %r10 -@@ -1014,12 +1310,18 @@ LABEL(loop_ashr_10_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $10, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add $16, %rdx - jmp LABEL(loop_ashr_10_use_sse4_2) - -@@ -1029,10 +1331,10 @@ LABEL(nibble_ashr_10_use_sse4_2): - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $10, %xmm0 - pcmpistri $0x3a,%xmm0, %xmm0 --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_use_sse4_2_exit) --#endif -+# endif - cmp $5, %ecx - ja LABEL(loop_ashr_10_use_sse4_2) - -@@ -1041,7 +1343,7 @@ LABEL(nibble_ashr_10_use_sse4_2): - /* - * The following cases will be handled by ashr_11 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case -- * n(5~15) n - 5 10(15 +(n - 5) - n) ashr_11 -+ * n(5~15) n - 5 10(15 +(n - 5) - n) ashr_11 - */ - .p2align 4 - LABEL(ashr_11_sse4_2): -@@ -1050,6 +1352,7 @@ LABEL(ashr_11_sse4_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $5, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -1081,12 +1384,18 @@ LABEL(loop_ashr_11_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $11, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - add $16, %rdx - add $16, %r10 -@@ -1094,12 +1403,18 @@ LABEL(loop_ashr_11_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $11, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add $16, %rdx - jmp LABEL(loop_ashr_11_use_sse4_2) - -@@ -1109,10 +1424,10 @@ LABEL(nibble_ashr_11_use_sse4_2): - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $11, %xmm0 - pcmpistri $0x3a,%xmm0, %xmm0 --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_use_sse4_2_exit) --#endif -+# endif - cmp $4, %ecx - ja LABEL(loop_ashr_11_use_sse4_2) - -@@ -1121,7 +1436,7 @@ LABEL(nibble_ashr_11_use_sse4_2): - /* - * The following cases will be handled by ashr_12 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case -- * n(4~15) n - 4 11(15 +(n - 4) - n) ashr_12 -+ * n(4~15) n - 4 11(15 +(n - 4) - n) ashr_12 - */ - .p2align 4 - LABEL(ashr_12_sse4_2): -@@ -1130,6 +1445,7 @@ LABEL(ashr_12_sse4_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $4, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -1161,12 +1477,18 @@ LABEL(loop_ashr_12_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $12, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - add $16, %rdx - add $16, %r10 -@@ -1174,12 +1496,18 @@ LABEL(loop_ashr_12_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $12, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add $16, %rdx - jmp LABEL(loop_ashr_12_use_sse4_2) - -@@ -1189,10 +1517,10 @@ LABEL(nibble_ashr_12_use_sse4_2): - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $12, %xmm0 - pcmpistri $0x3a,%xmm0, %xmm0 --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_use_sse4_2_exit) --#endif -+# endif - cmp $3, %ecx - ja LABEL(loop_ashr_12_use_sse4_2) - -@@ -1201,7 +1529,7 @@ LABEL(nibble_ashr_12_use_sse4_2): - /* - * The following cases will be handled by ashr_13 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case -- * n(3~15) n - 3 12(15 +(n - 3) - n) ashr_13 -+ * n(3~15) n - 3 12(15 +(n - 3) - n) ashr_13 - */ - .p2align 4 - LABEL(ashr_13_sse4_2): -@@ -1210,6 +1538,7 @@ LABEL(ashr_13_sse4_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $3, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -1242,12 +1571,18 @@ LABEL(loop_ashr_13_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $13, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - add $16, %rdx - add $16, %r10 -@@ -1255,12 +1590,18 @@ LABEL(loop_ashr_13_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $13, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add $16, %rdx - jmp LABEL(loop_ashr_13_use_sse4_2) - -@@ -1270,10 +1611,10 @@ LABEL(nibble_ashr_13_use_sse4_2): - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $13, %xmm0 - pcmpistri $0x3a,%xmm0, %xmm0 --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_use_sse4_2_exit) --#endif -+# endif - cmp $2, %ecx - ja LABEL(loop_ashr_13_use_sse4_2) - -@@ -1282,7 +1623,7 @@ LABEL(nibble_ashr_13_use_sse4_2): - /* - * The following cases will be handled by ashr_14 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case -- * n(2~15) n - 2 13(15 +(n - 2) - n) ashr_14 -+ * n(2~15) n - 2 13(15 +(n - 2) - n) ashr_14 - */ - .p2align 4 - LABEL(ashr_14_sse4_2): -@@ -1291,6 +1632,7 @@ LABEL(ashr_14_sse4_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $2, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -1323,12 +1665,18 @@ LABEL(loop_ashr_14_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $14, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - add $16, %rdx - add $16, %r10 -@@ -1336,12 +1684,18 @@ LABEL(loop_ashr_14_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $14, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add $16, %rdx - jmp LABEL(loop_ashr_14_use_sse4_2) - -@@ -1351,10 +1705,10 @@ LABEL(nibble_ashr_14_use_sse4_2): - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $14, %xmm0 - pcmpistri $0x3a,%xmm0, %xmm0 --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_use_sse4_2_exit) --#endif -+# endif - cmp $1, %ecx - ja LABEL(loop_ashr_14_use_sse4_2) - -@@ -1363,7 +1717,7 @@ LABEL(nibble_ashr_14_use_sse4_2): - /* - * The following cases will be handled by ashr_15 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case -- * n(1~15) n - 1 14(15 +(n - 1) - n) ashr_15 -+ * n(1~15) n - 1 14(15 +(n - 1) - n) ashr_15 - */ - .p2align 4 - LABEL(ashr_15_sse4_2): -@@ -1372,6 +1726,7 @@ LABEL(ashr_15_sse4_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $1, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -1406,12 +1761,18 @@ LABEL(loop_ashr_15_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $15, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - - add $16, %rdx - add $16, %r10 -@@ -1419,12 +1780,18 @@ LABEL(loop_ashr_15_use_sse4_2): - - movdqa (%rdi, %rdx), %xmm0 - palignr $15, -16(%rdi, %rdx), %xmm0 -- pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -+ pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - jbe LABEL(use_sse4_2_exit) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add $16, %rdx - jmp LABEL(loop_ashr_15_use_sse4_2) - -@@ -1434,22 +1801,28 @@ LABEL(nibble_ashr_15_use_sse4_2): - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $15, %xmm0 - pcmpistri $0x3a,%xmm0, %xmm0 --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_use_sse4_2_exit) --#endif -+# endif - cmp $0, %ecx - ja LABEL(loop_ashr_15_use_sse4_2) - - LABEL(nibble_ashr_use_sse4_2_exit): -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -+# else -+ movdqa (%rsi,%rdx), %xmm1 -+ TOLOWER (%xmm0, %xmm1) -+ pcmpistri $0x1a, %xmm1, %xmm0 -+# endif - .p2align 4 - LABEL(use_sse4_2_exit): - jnc LABEL(strcmp_exitz_sse4_2) --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub %rcx, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - add %rcx, %rdx - lea -16(%rdi, %r9), %rdi - movzbl (%rdi, %rdx), %eax -@@ -1458,6 +1831,12 @@ LABEL(use_sse4_2_exit): - jz LABEL(use_sse4_2_ret_sse4_2) - xchg %eax, %edx - LABEL(use_sse4_2_ret_sse4_2): -+# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -+ leaq _nl_C_LC_CTYPE_tolower+128*4(%rip), %rcx -+ movl (%rcx,%rdx,4), %edx -+ movl (%rcx,%rax,4), %eax -+# endif -+ - sub %edx, %eax - ret - -@@ -1473,13 +1852,19 @@ LABEL(ret_sse4_2): - LABEL(less16bytes_sse4_2): - bsf %rdx, %rdx /* find and store bit index in %rdx */ - --#ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub %rdx, %r11 - jbe LABEL(strcmp_exitz_sse4_2) --#endif -+# endif - movzbl (%rsi, %rdx), %ecx - movzbl (%rdi, %rdx), %eax - -+# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -+ leaq _nl_C_LC_CTYPE_tolower+128*4(%rip), %rdx -+ movl (%rdx,%rcx,4), %ecx -+ movl (%rdx,%rax,4), %eax -+# endif -+ - sub %ecx, %eax - ret - -@@ -1488,15 +1873,27 @@ LABEL(strcmp_exitz_sse4_2): - ret - - .p2align 4 -+ // XXX Same as code above - LABEL(Byte0_sse4_2): - movzx (%rsi), %ecx - movzx (%rdi), %eax - -+# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -+ leaq _nl_C_LC_CTYPE_tolower+128*4(%rip), %rdx -+ movl (%rdx,%rcx,4), %ecx -+ movl (%rdx,%rax,4), %eax -+# endif -+ - sub %ecx, %eax - ret - cfi_endproc - .size STRCMP_SSE42, .-STRCMP_SSE42 - -+# undef UCLOW_reg -+# undef UCHIGH_reg -+# undef LCQWORD_reg -+# undef TOLOWER -+ - /* Put all SSE 4.2 functions together. */ - .section .rodata.sse4.2,"a",@progbits - .p2align 3 -@@ -1528,6 +1925,27 @@ LABEL(unaligned_table_sse4_2): - # undef END - # define END(name) \ - cfi_endproc; .size STRCMP_SSE2, .-STRCMP_SSE2 -+ -+# ifdef USE_AS_STRCASECMP_L -+# define ENTRY2(name) \ -+ .type __strcasecmp_sse2, @function; \ -+ .align 16; \ -+ __strcasecmp_sse2: cfi_startproc; \ -+ CALL_MCOUNT -+# define END2(name) \ -+ cfi_endproc; .size __strcasecmp_sse2, .-__strcasecmp_sse2 -+# endif -+ -+# ifdef USE_AS_STRNCASECMP_L -+# define ENTRY2(name) \ -+ .type __strncasecmp_sse2, @function; \ -+ .align 16; \ -+ __strncasecmp_sse2: cfi_startproc; \ -+ CALL_MCOUNT -+# define END2(name) \ -+ cfi_endproc; .size __strncasecmp_sse2, .-__strncasecmp_sse2 -+# endif -+ - # undef libc_hidden_builtin_def - /* It doesn't make sense to send libc-internal strcmp calls through a PLT. - The speedup we get from using SSE4.2 instruction is likely eaten away -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strncase_l-ssse3.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strncase_l-ssse3.S -@@ -0,0 +1,6 @@ -+#define USE_SSSE3 1 -+#define USE_AS_STRNCASECMP_L -+#define NO_NOLOCALE_ALIAS -+#define STRCMP __strncasecmp_l_ssse3 -+#define __strncasecmp __strncasecmp_ssse3 -+#include "../strcmp.S" -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strncase_l.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strncase_l.S -@@ -0,0 +1,6 @@ -+#define STRCMP __strncasecmp_l -+#define USE_AS_STRNCASECMP_L -+#include "strcmp.S" -+ -+weak_alias (__strncasecmp_l, strncasecmp_l) -+libc_hidden_def (strncasecmp_l) -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strstr.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/strstr.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strstr.c -@@ -67,10 +67,10 @@ - - case ECX CFlag ZFlag SFlag - 3 X 1 0 0/1 -- 4a 0 1 0 0 -- 4b 0 1 0 1 -- 4c 0 < X 1 0 0/1 -- 5 16 0 1 0 -+ 4a 0 1 0 0 -+ 4b 0 1 0 1 -+ 4c 0 < X 1 0 0/1 -+ 5 16 0 1 0 - - 3. An initial ordered-comparison fragment match, we fix up to do - subsequent string comparison -@@ -147,8 +147,7 @@ __m128i_shift_right (__m128i value, int - If EOS occurs within less than 16B before 4KB boundary, we don't - cross to next page. */ - --static __m128i --__attribute__ ((section (".text.sse4.2"))) -+static inline __m128i - __m128i_strloadu (const unsigned char * p) - { - int offset = ((size_t) p & (16 - 1)); -@@ -164,59 +163,36 @@ __m128i_strloadu (const unsigned char * - return _mm_loadu_si128 ((__m128i *) p); - } - --#ifdef USE_AS_STRCASESTR -+#if defined USE_AS_STRCASESTR && !defined STRCASESTR_NONASCII - - /* Similar to __m128i_strloadu. Convert to lower case for POSIX/C - locale. */ -- --static __m128i --__attribute__ ((section (".text.sse4.2"))) --__m128i_strloadu_tolower_posix (const unsigned char * p) -+static inline __m128i -+__m128i_strloadu_tolower (const unsigned char *p, __m128i rangeuc, -+ __m128i u2ldelta) - { - __m128i frag = __m128i_strloadu (p); - -- /* Convert frag to lower case for POSIX/C locale. */ -- __m128i rangeuc = _mm_set_epi64x (0x0, 0x5a41); -- __m128i u2ldelta = _mm_set1_epi64x (0xe0e0e0e0e0e0e0e0); -- __m128i mask1 = _mm_cmpistrm (rangeuc, frag, 0x44); -- __m128i mask2 = _mm_blendv_epi8 (u2ldelta, frag, mask1); -- mask2 = _mm_sub_epi8 (mask2, u2ldelta); -- return _mm_blendv_epi8 (frag, mask2, mask1); -+#define UCLOW 0x4040404040404040ULL -+#define UCHIGH 0x5b5b5b5b5b5b5b5bULL -+#define LCQWORD 0x2020202020202020ULL -+ /* Compare if 'Z' > bytes. Inverted way to get a mask for byte <= 'Z'. */ -+ __m128i r2 = _mm_cmpgt_epi8 (_mm_set1_epi64x (UCHIGH), frag); -+ /* Compare if bytes are > 'A' - 1. */ -+ __m128i r1 = _mm_cmpgt_epi8 (frag, _mm_set1_epi64x (UCLOW)); -+ /* Mask byte == ff if byte(r2) <= 'Z' and byte(r1) > 'A' - 1. */ -+ __m128i mask = _mm_and_si128 (r2, r1); -+ /* Apply lowercase bit 6 mask for above mask bytes == ff. */ -+ return _mm_or_si128 (frag, _mm_and_si128 (mask, _mm_set1_epi64x (LCQWORD))); - } - --/* Similar to __m128i_strloadu. Convert to lower case for none-POSIX/C -- locale. */ -- --static __m128i --__attribute__ ((section (".text.sse4.2"))) --__m128i_strloadu_tolower (const unsigned char * p) --{ -- union -- { -- char b[16]; -- __m128i x; -- } u; -- -- for (int i = 0; i < 16; i++) -- if (p[i] == 0) -- { -- u.b[i] = 0; -- break; -- } -- else -- u.b[i] = tolower (p[i]); -- -- return u.x; --} - #endif - - /* Calculate Knuth-Morris-Pratt string searching algorithm (or KMP - algorithm) overlap for a fully populated 16B vector. - Input parameter: 1st 16Byte loaded from the reference string of a - strstr function. -- We don't use KMP algorithm if reference string is less than 16B. -- */ -- -+ We don't use KMP algorithm if reference string is less than 16B. */ - static int - __inline__ __attribute__ ((__always_inline__,)) - KMP16Bovrlap (__m128i s2) -@@ -236,7 +212,7 @@ KMP16Bovrlap (__m128i s2) - return 1; - else if (!k1) - { -- /* There are al least two ditinct char in s2. If byte 0 and 1 are -+ /* There are al least two distinct chars in s2. If byte 0 and 1 are - idential and the distinct value lies farther down, we can deduce - the next byte offset to restart full compare is least no earlier - than byte 3. */ -@@ -256,23 +232,30 @@ STRSTR_SSE42 (const unsigned char *s1, c - #define p1 s1 - const unsigned char *p2 = s2; - -- if (p2[0] == '\0') -+#ifndef STRCASESTR_NONASCII -+ if (__builtin_expect (p2[0] == '\0', 0)) - return (char *) p1; - -- if (p1[0] == '\0') -+ if (__builtin_expect (p1[0] == '\0', 0)) - return NULL; - - /* Check if p1 length is 1 byte long. */ -- if (p1[1] == '\0') -+ if (__builtin_expect (p1[1] == '\0', 0)) - return p2[1] == '\0' && CMPBYTE (p1[0], p2[0]) ? (char *) p1 : NULL; -+#endif - - #ifdef USE_AS_STRCASESTR -- __m128i (*strloadu) (const unsigned char *); -- -- if (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_NONASCII_CASE) == 0) -- strloadu = __m128i_strloadu_tolower_posix; -- else -- strloadu = __m128i_strloadu_tolower; -+# ifndef STRCASESTR_NONASCII -+ if (__builtin_expect (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_NONASCII_CASE) -+ != 0, 0)) -+ return __strcasestr_sse42_nonascii (s1, s2); -+ -+ const __m128i rangeuc = _mm_set_epi64x (0x0, 0x5a41); -+ const __m128i u2ldelta = _mm_set1_epi64x (0xe0e0e0e0e0e0e0e0); -+# define strloadu(p) __m128i_strloadu_tolower (p, rangeuc, u2ldelta) -+# else -+# define strloadu __m128i_strloadu_tolower -+# endif - #else - # define strloadu __m128i_strloadu - #endif -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcasecmp.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcasecmp.S -@@ -0,0 +1 @@ -+/* In strcasecmp_l.S. */ -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcasecmp_l-nonascii.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcasecmp_l-nonascii.c -@@ -0,0 +1,8 @@ -+#include -+ -+extern int __strcasecmp_l_nonascii (__const char *__s1, __const char *__s2, -+ __locale_t __loc); -+ -+#define __strcasecmp_l __strcasecmp_l_nonascii -+#define USE_IN_EXTENDED_LOCALE_MODEL 1 -+#include -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcasecmp_l.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcasecmp_l.S -@@ -0,0 +1,6 @@ -+#define STRCMP __strcasecmp_l -+#define USE_AS_STRCASECMP_L -+#include "strcmp.S" -+ -+weak_alias (__strcasecmp_l, strcasecmp_l) -+libc_hidden_def (strcasecmp_l) -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcmp.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/strcmp.S -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcmp.S -@@ -51,6 +51,31 @@ - je LABEL(strcmp_exitz); \ - mov %r9, %r11 - -+#elif defined USE_AS_STRCASECMP_L -+# include "locale-defines.h" -+ -+/* No support for strcasecmp outside libc so far since it is not needed. */ -+# ifdef NOT_IN_lib -+# error "strcasecmp_l not implemented so far" -+# endif -+ -+# define UPDATE_STRNCMP_COUNTER -+#elif defined USE_AS_STRNCASECMP_L -+# include "locale-defines.h" -+ -+/* No support for strncasecmp outside libc so far since it is not needed. */ -+# ifdef NOT_IN_lib -+# error "strncasecmp_l not implemented so far" -+# endif -+ -+# define UPDATE_STRNCMP_COUNTER \ -+ /* calculate left number to compare */ \ -+ lea -16(%rcx, %r11), %r9; \ -+ cmp %r9, %r11; \ -+ jb LABEL(strcmp_exitz); \ -+ test %r9, %r9; \ -+ je LABEL(strcmp_exitz); \ -+ mov %r9, %r11 - #else - # define UPDATE_STRNCMP_COUNTER - # ifndef STRCMP -@@ -64,6 +89,46 @@ - .section .text.ssse3,"ax",@progbits - #endif - -+#ifdef USE_AS_STRCASECMP_L -+# ifndef ENTRY2 -+# define ENTRY2(name) ENTRY (name) -+# define END2(name) END (name) -+# endif -+ -+ENTRY2 (__strcasecmp) -+ movq __libc_tsd_LOCALE@gottpoff(%rip),%rax -+ movq %fs:(%rax),%rdx -+ -+ // XXX 5 byte should be before the function -+ /* 5-byte NOP. */ -+ .byte 0x0f,0x1f,0x44,0x00,0x00 -+END2 (__strcasecmp) -+# ifndef NO_NOLOCALE_ALIAS -+weak_alias (__strcasecmp, strcasecmp) -+libc_hidden_def (__strcasecmp) -+# endif -+ /* FALLTHROUGH to strcasecmp_l. */ -+#elif defined USE_AS_STRNCASECMP_L -+# ifndef ENTRY2 -+# define ENTRY2(name) ENTRY (name) -+# define END2(name) END (name) -+# endif -+ -+ENTRY2 (__strncasecmp) -+ movq __libc_tsd_LOCALE@gottpoff(%rip),%rax -+ movq %fs:(%rax),%rcx -+ -+ // XXX 5 byte should be before the function -+ /* 5-byte NOP. */ -+ .byte 0x0f,0x1f,0x44,0x00,0x00 -+END2 (__strncasecmp) -+# ifndef NO_NOLOCALE_ALIAS -+weak_alias (__strncasecmp, strncasecmp) -+libc_hidden_def (__strncasecmp) -+# endif -+ /* FALLTHROUGH to strncasecmp_l. */ -+#endif -+ - ENTRY (BP_SYM (STRCMP)) - #ifdef NOT_IN_libc - /* Simple version since we can't use SSE registers in ld.so. */ -@@ -84,10 +149,32 @@ L(neq): movl $1, %eax - ret - END (BP_SYM (STRCMP)) - #else /* NOT_IN_libc */ -+# ifdef USE_AS_STRCASECMP_L -+ /* We have to fall back on the C implementation for locales -+ with encodings not matching ASCII for single bytes. */ -+# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 -+ movq LOCALE_T___LOCALES+LC_CTYPE*8(%rdx), %rax -+# else -+ movq (%rdx), %rax -+# endif -+ testl $0, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax) -+ jne __strcasecmp_l_nonascii -+# elif defined USE_AS_STRNCASECMP_L -+ /* We have to fall back on the C implementation for locales -+ with encodings not matching ASCII for single bytes. */ -+# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 -+ movq LOCALE_T___LOCALES+LC_CTYPE*8(%rcx), %rax -+# else -+ movq (%rcx), %rax -+# endif -+ testl $0, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax) -+ jne __strncasecmp_l_nonascii -+# endif -+ - /* - * This implementation uses SSE to compare up to 16 bytes at a time. - */ --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - test %rdx, %rdx - je LABEL(strcmp_exitz) - cmp $1, %rdx -@@ -99,6 +186,26 @@ END (BP_SYM (STRCMP)) - /* Use 64bit AND here to avoid long NOP padding. */ - and $0x3f, %rcx /* rsi alignment in cache line */ - and $0x3f, %rax /* rdi alignment in cache line */ -+# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -+ .section .rodata.cst16,"aM",@progbits,16 -+ .align 16 -+.Lbelowupper: -+ .quad 0x4040404040404040 -+ .quad 0x4040404040404040 -+.Ltopupper: -+ .quad 0x5b5b5b5b5b5b5b5b -+ .quad 0x5b5b5b5b5b5b5b5b -+.Ltouppermask: -+ .quad 0x2020202020202020 -+ .quad 0x2020202020202020 -+ .previous -+ movdqa .Lbelowupper(%rip), %xmm5 -+# define UCLOW_reg %xmm5 -+ movdqa .Ltopupper(%rip), %xmm6 -+# define UCHIGH_reg %xmm6 -+ movdqa .Ltouppermask(%rip), %xmm7 -+# define LCQWORD_reg %xmm7 -+# endif - cmp $0x30, %ecx - ja LABEL(crosscache) /* rsi: 16-byte load will cross cache line */ - cmp $0x30, %eax -@@ -107,6 +214,26 @@ END (BP_SYM (STRCMP)) - movlpd (%rsi), %xmm2 - movhpd 8(%rdi), %xmm1 - movhpd 8(%rsi), %xmm2 -+# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -+# define TOLOWER(reg1, reg2) \ -+ movdqa reg1, %xmm8; \ -+ movdqa UCHIGH_reg, %xmm9; \ -+ movdqa reg2, %xmm10; \ -+ movdqa UCHIGH_reg, %xmm11; \ -+ pcmpgtb UCLOW_reg, %xmm8; \ -+ pcmpgtb reg1, %xmm9; \ -+ pcmpgtb UCLOW_reg, %xmm10; \ -+ pcmpgtb reg2, %xmm11; \ -+ pand %xmm9, %xmm8; \ -+ pand %xmm11, %xmm10; \ -+ pand LCQWORD_reg, %xmm8; \ -+ pand LCQWORD_reg, %xmm10; \ -+ por %xmm8, reg1; \ -+ por %xmm10, reg2 -+ TOLOWER (%xmm1, %xmm2) -+# else -+# define TOLOWER(reg1, reg2) -+# endif - pxor %xmm0, %xmm0 /* clear %xmm0 for null char checks */ - pcmpeqb %xmm1, %xmm0 /* Any null chars? */ - pcmpeqb %xmm2, %xmm1 /* compare first 16 bytes for equality */ -@@ -114,7 +241,7 @@ END (BP_SYM (STRCMP)) - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 16 bytes are same, edx == 0xffff */ - jnz LABEL(less16bytes) /* If not, find different value or null char */ --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) /* finish comparision */ - # endif -@@ -159,7 +286,13 @@ LABEL(ashr_0): - movdqa (%rsi), %xmm1 - pxor %xmm0, %xmm0 /* clear %xmm0 for null char check */ - pcmpeqb %xmm1, %xmm0 /* Any null chars? */ -+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpeqb (%rdi), %xmm1 /* compare 16 bytes for equality */ -+# else -+ movdqa (%rdi), %xmm2 -+ TOLOWER (%xmm1, %xmm2) -+ pcmpeqb %xmm2, %xmm1 /* compare 16 bytes for equality */ -+# endif - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %r9d - shr %cl, %edx /* adjust 0xffff for offset */ -@@ -183,6 +316,7 @@ LABEL(ashr_0): - LABEL(loop_ashr_0): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -191,13 +325,14 @@ LABEL(loop_ashr_0): - sub $0xffff, %edx - jnz LABEL(exit) /* mismatch or null char seen */ - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif - add $16, %rcx - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -205,7 +340,7 @@ LABEL(loop_ashr_0): - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -214,7 +349,7 @@ LABEL(loop_ashr_0): - - /* - * The following cases will be handled by ashr_1 -- * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case -+ * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(15) n -15 0(15 +(n-15) - n) ashr_1 - */ - .p2align 4 -@@ -224,6 +359,7 @@ LABEL(ashr_1): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 /* Any null chars? */ - pslldq $15, %xmm2 /* shift first string to align with second */ -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 /* compare 16 bytes for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %r9d -@@ -263,6 +399,7 @@ LABEL(gobble_ashr_1): - # else - palignr $1, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -271,7 +408,7 @@ LABEL(gobble_ashr_1): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -292,6 +429,7 @@ LABEL(gobble_ashr_1): - # else - palignr $1, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -300,7 +438,7 @@ LABEL(gobble_ashr_1): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -319,8 +457,8 @@ LABEL(nibble_ashr_1): - test $0xfffe, %edx - jnz LABEL(ashr_1_exittail) /* find null char*/ - --# ifdef USE_AS_STRNCMP -- cmp $14, %r11 -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L -+ cmp $15, %r11 - jbe LABEL(ashr_1_exittail) - # endif - -@@ -351,6 +489,7 @@ LABEL(ashr_2): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $14, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -390,6 +529,7 @@ LABEL(gobble_ashr_2): - # else - palignr $2, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -398,7 +538,7 @@ LABEL(gobble_ashr_2): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -420,6 +560,7 @@ LABEL(gobble_ashr_2): - # else - palignr $2, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -428,7 +569,7 @@ LABEL(gobble_ashr_2): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -444,8 +585,8 @@ LABEL(nibble_ashr_2): - test $0xfffc, %edx - jnz LABEL(ashr_2_exittail) - --# ifdef USE_AS_STRNCMP -- cmp $13, %r11 -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L -+ cmp $14, %r11 - jbe LABEL(ashr_2_exittail) - # endif - -@@ -472,6 +613,7 @@ LABEL(ashr_3): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $13, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -512,6 +654,7 @@ LABEL(gobble_ashr_3): - # else - palignr $3, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -520,7 +663,7 @@ LABEL(gobble_ashr_3): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -542,6 +685,7 @@ LABEL(gobble_ashr_3): - # else - palignr $3, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -550,7 +694,7 @@ LABEL(gobble_ashr_3): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -566,8 +710,8 @@ LABEL(nibble_ashr_3): - test $0xfff8, %edx - jnz LABEL(ashr_3_exittail) - --# ifdef USE_AS_STRNCMP -- cmp $12, %r11 -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L -+ cmp $13, %r11 - jbe LABEL(ashr_3_exittail) - # endif - -@@ -594,6 +738,7 @@ LABEL(ashr_4): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $12, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -634,6 +779,7 @@ LABEL(gobble_ashr_4): - # else - palignr $4, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -642,7 +788,7 @@ LABEL(gobble_ashr_4): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -664,6 +810,7 @@ LABEL(gobble_ashr_4): - # else - palignr $4, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -672,7 +819,7 @@ LABEL(gobble_ashr_4): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -688,8 +835,8 @@ LABEL(nibble_ashr_4): - test $0xfff0, %edx - jnz LABEL(ashr_4_exittail) - --# ifdef USE_AS_STRNCMP -- cmp $11, %r11 -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L -+ cmp $12, %r11 - jbe LABEL(ashr_4_exittail) - # endif - -@@ -716,6 +863,7 @@ LABEL(ashr_5): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $11, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -756,6 +904,7 @@ LABEL(gobble_ashr_5): - # else - palignr $5, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -764,7 +913,7 @@ LABEL(gobble_ashr_5): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -786,6 +935,7 @@ LABEL(gobble_ashr_5): - # else - palignr $5, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -794,7 +944,7 @@ LABEL(gobble_ashr_5): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -810,8 +960,8 @@ LABEL(nibble_ashr_5): - test $0xffe0, %edx - jnz LABEL(ashr_5_exittail) - --# ifdef USE_AS_STRNCMP -- cmp $10, %r11 -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L -+ cmp $11, %r11 - jbe LABEL(ashr_5_exittail) - # endif - -@@ -838,6 +988,7 @@ LABEL(ashr_6): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $10, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -878,6 +1029,7 @@ LABEL(gobble_ashr_6): - # else - palignr $6, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -886,7 +1038,7 @@ LABEL(gobble_ashr_6): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -908,6 +1060,7 @@ LABEL(gobble_ashr_6): - # else - palignr $6, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -916,7 +1069,7 @@ LABEL(gobble_ashr_6): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -932,8 +1085,8 @@ LABEL(nibble_ashr_6): - test $0xffc0, %edx - jnz LABEL(ashr_6_exittail) - --# ifdef USE_AS_STRNCMP -- cmp $9, %r11 -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L -+ cmp $10, %r11 - jbe LABEL(ashr_6_exittail) - # endif - -@@ -960,6 +1113,7 @@ LABEL(ashr_7): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $9, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -1000,6 +1154,7 @@ LABEL(gobble_ashr_7): - # else - palignr $7, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1008,7 +1163,7 @@ LABEL(gobble_ashr_7): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1030,6 +1185,7 @@ LABEL(gobble_ashr_7): - # else - palignr $7, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1038,7 +1194,7 @@ LABEL(gobble_ashr_7): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1054,8 +1210,8 @@ LABEL(nibble_ashr_7): - test $0xff80, %edx - jnz LABEL(ashr_7_exittail) - --# ifdef USE_AS_STRNCMP -- cmp $8, %r11 -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L -+ cmp $9, %r11 - jbe LABEL(ashr_7_exittail) - # endif - -@@ -1082,6 +1238,7 @@ LABEL(ashr_8): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $8, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -1122,6 +1279,7 @@ LABEL(gobble_ashr_8): - # else - palignr $8, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1130,7 +1288,7 @@ LABEL(gobble_ashr_8): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1152,6 +1310,7 @@ LABEL(gobble_ashr_8): - # else - palignr $8, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1160,7 +1319,7 @@ LABEL(gobble_ashr_8): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1176,8 +1335,8 @@ LABEL(nibble_ashr_8): - test $0xff00, %edx - jnz LABEL(ashr_8_exittail) - --# ifdef USE_AS_STRNCMP -- cmp $7, %r11 -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L -+ cmp $8, %r11 - jbe LABEL(ashr_8_exittail) - # endif - -@@ -1204,6 +1363,7 @@ LABEL(ashr_9): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $7, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -1244,6 +1404,7 @@ LABEL(gobble_ashr_9): - # else - palignr $9, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1252,7 +1413,7 @@ LABEL(gobble_ashr_9): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1274,6 +1435,7 @@ LABEL(gobble_ashr_9): - # else - palignr $9, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1282,7 +1444,7 @@ LABEL(gobble_ashr_9): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1298,8 +1460,8 @@ LABEL(nibble_ashr_9): - test $0xfe00, %edx - jnz LABEL(ashr_9_exittail) - --# ifdef USE_AS_STRNCMP -- cmp $6, %r11 -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L -+ cmp $7, %r11 - jbe LABEL(ashr_9_exittail) - # endif - -@@ -1326,6 +1488,7 @@ LABEL(ashr_10): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $6, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -1366,6 +1529,7 @@ LABEL(gobble_ashr_10): - # else - palignr $10, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1374,7 +1538,7 @@ LABEL(gobble_ashr_10): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1396,6 +1560,7 @@ LABEL(gobble_ashr_10): - # else - palignr $10, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1404,7 +1569,7 @@ LABEL(gobble_ashr_10): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1420,8 +1585,8 @@ LABEL(nibble_ashr_10): - test $0xfc00, %edx - jnz LABEL(ashr_10_exittail) - --# ifdef USE_AS_STRNCMP -- cmp $5, %r11 -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L -+ cmp $6, %r11 - jbe LABEL(ashr_10_exittail) - # endif - -@@ -1448,6 +1613,7 @@ LABEL(ashr_11): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $5, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -1488,6 +1654,7 @@ LABEL(gobble_ashr_11): - # else - palignr $11, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1496,7 +1663,7 @@ LABEL(gobble_ashr_11): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1518,6 +1685,7 @@ LABEL(gobble_ashr_11): - # else - palignr $11, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1526,7 +1694,7 @@ LABEL(gobble_ashr_11): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1542,8 +1710,8 @@ LABEL(nibble_ashr_11): - test $0xf800, %edx - jnz LABEL(ashr_11_exittail) - --# ifdef USE_AS_STRNCMP -- cmp $4, %r11 -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L -+ cmp $5, %r11 - jbe LABEL(ashr_11_exittail) - # endif - -@@ -1570,6 +1738,7 @@ LABEL(ashr_12): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $4, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -1610,6 +1779,7 @@ LABEL(gobble_ashr_12): - # else - palignr $12, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1618,7 +1788,7 @@ LABEL(gobble_ashr_12): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1640,6 +1810,7 @@ LABEL(gobble_ashr_12): - # else - palignr $12, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1648,7 +1819,7 @@ LABEL(gobble_ashr_12): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1664,8 +1835,8 @@ LABEL(nibble_ashr_12): - test $0xf000, %edx - jnz LABEL(ashr_12_exittail) - --# ifdef USE_AS_STRNCMP -- cmp $3, %r11 -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L -+ cmp $4, %r11 - jbe LABEL(ashr_12_exittail) - # endif - -@@ -1692,6 +1863,7 @@ LABEL(ashr_13): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $3, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -1732,6 +1904,7 @@ LABEL(gobble_ashr_13): - # else - palignr $13, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1740,7 +1913,7 @@ LABEL(gobble_ashr_13): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1762,6 +1935,7 @@ LABEL(gobble_ashr_13): - # else - palignr $13, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1770,7 +1944,7 @@ LABEL(gobble_ashr_13): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1786,8 +1960,8 @@ LABEL(nibble_ashr_13): - test $0xe000, %edx - jnz LABEL(ashr_13_exittail) - --# ifdef USE_AS_STRNCMP -- cmp $2, %r11 -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L -+ cmp $3, %r11 - jbe LABEL(ashr_13_exittail) - # endif - -@@ -1814,6 +1988,7 @@ LABEL(ashr_14): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $2, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -1854,6 +2029,7 @@ LABEL(gobble_ashr_14): - # else - palignr $14, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1862,7 +2038,7 @@ LABEL(gobble_ashr_14): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1884,6 +2060,7 @@ LABEL(gobble_ashr_14): - # else - palignr $14, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1892,7 +2069,7 @@ LABEL(gobble_ashr_14): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP | defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -1908,8 +2085,8 @@ LABEL(nibble_ashr_14): - test $0xc000, %edx - jnz LABEL(ashr_14_exittail) - --# ifdef USE_AS_STRNCMP -- cmp $1, %r11 -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L -+ cmp $2, %r11 - jbe LABEL(ashr_14_exittail) - # endif - -@@ -1936,6 +2113,7 @@ LABEL(ashr_15): - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $1, %xmm2 -+ TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d -@@ -1978,6 +2156,7 @@ LABEL(gobble_ashr_15): - # else - palignr $15, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -1986,7 +2165,7 @@ LABEL(gobble_ashr_15): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -2008,6 +2187,7 @@ LABEL(gobble_ashr_15): - # else - palignr $15, %xmm3, %xmm2 /* merge into one 16byte value */ - # endif -+ TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -@@ -2016,7 +2196,7 @@ LABEL(gobble_ashr_15): - sub $0xffff, %edx - jnz LABEL(exit) - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) - # endif -@@ -2032,9 +2212,9 @@ LABEL(nibble_ashr_15): - test $0x8000, %edx - jnz LABEL(ashr_15_exittail) - --# ifdef USE_AS_STRNCMP -- test %r11, %r11 -- je LABEL(ashr_15_exittail) -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L -+ cmpq $1, %r11 -+ jbe LABEL(ashr_15_exittail) - # endif - - pxor %xmm0, %xmm0 -@@ -2049,6 +2229,7 @@ LABEL(ashr_15_exittail): - - .p2align 4 - LABEL(aftertail): -+ TOLOWER (%xmm1, %xmm3) - pcmpeqb %xmm3, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx -@@ -2069,13 +2250,19 @@ LABEL(ret): - LABEL(less16bytes): - bsf %rdx, %rdx /* find and store bit index in %rdx */ - --# ifdef USE_AS_STRNCMP -+# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub %rdx, %r11 - jbe LABEL(strcmp_exitz) - # endif - movzbl (%rsi, %rdx), %ecx - movzbl (%rdi, %rdx), %eax - -+# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -+ leaq _nl_C_LC_CTYPE_tolower+128*4(%rip), %rdx -+ movl (%rdx,%rcx,4), %ecx -+ movl (%rdx,%rax,4), %eax -+# endif -+ - sub %ecx, %eax - ret - -@@ -2088,6 +2275,12 @@ LABEL(Byte0): - movzx (%rsi), %ecx - movzx (%rdi), %eax - -+# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -+ leaq _nl_C_LC_CTYPE_tolower+128*4(%rip), %rdx -+ movl (%rdx,%rcx,4), %ecx -+ movl (%rdx,%rax,4), %eax -+# endif -+ - sub %ecx, %eax - ret - END (BP_SYM (STRCMP)) -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strncase.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strncase.S -@@ -0,0 +1 @@ -+/* In strncase_l.S. */ -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strncase_l-nonascii.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strncase_l-nonascii.c -@@ -0,0 +1,8 @@ -+#include -+ -+extern int __strncasecmp_l_nonascii (__const char *__s1, __const char *__s2, -+ size_t __n, __locale_t __loc); -+ -+#define __strncasecmp_l __strncasecmp_l_nonascii -+#define USE_IN_EXTENDED_LOCALE_MODEL 1 -+#include -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strncase_l.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strncase_l.S -@@ -0,0 +1,6 @@ -+#define STRCMP __strncasecmp_l -+#define USE_AS_STRNCASECMP_L -+#include "strcmp.S" -+ -+weak_alias (__strncasecmp_l, strncasecmp_l) -+libc_hidden_def (strncasecmp_l) -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strnlen.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strnlen.S -@@ -0,0 +1,64 @@ -+/* strnlen(str,maxlen) -- determine the length of the string STR up to MAXLEN. -+ Copyright (C) 2010 Free Software Foundation, Inc. -+ Contributed by Ulrich Drepper . -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#include -+ -+ -+ .text -+ENTRY(__strnlen) -+ movq %rsi, %rax -+ testq %rsi, %rsi -+ jz 3f -+ pxor %xmm2, %xmm2 -+ movq %rdi, %rcx -+ movq %rdi, %r8 -+ movq $16, %r9 -+ andq $~15, %rdi -+ movdqa %xmm2, %xmm1 -+ pcmpeqb (%rdi), %xmm2 -+ orl $0xffffffff, %r10d -+ subq %rdi, %rcx -+ shll %cl, %r10d -+ subq %rcx, %r9 -+ pmovmskb %xmm2, %edx -+ andl %r10d, %edx -+ jnz 1f -+ subq %r9, %rsi -+ jbe 3f -+ -+2: movdqa 16(%rdi), %xmm0 -+ leaq 16(%rdi), %rdi -+ pcmpeqb %xmm1, %xmm0 -+ pmovmskb %xmm0, %edx -+ testl %edx, %edx -+ jnz 1f -+ subq $16, %rsi -+ jnbe 2b -+3: ret -+ -+1: subq %r8, %rdi -+ bsfl %edx, %edx -+ addq %rdi, %rdx -+ cmpq %rdx, %rax -+ cmovnbq %rdx, %rax -+ ret -+END(__strnlen) -+weak_alias (__strnlen, strnlen) -+libc_hidden_def (strnlen) -Index: glibc-2.12-2-gc4ccff1/wcsmbs/wcsatcliff.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/wcsmbs/wcsatcliff.c -+++ glibc-2.12-2-gc4ccff1/wcsmbs/wcsatcliff.c -@@ -16,6 +16,8 @@ - #define MEMCPY wmemcpy - #define MEMPCPY wmempcpy - #define MEMCHR wmemchr -+#define STRCMP wcscmp -+#define STRNCMP wcsncmp - - - #include "../string/stratcliff.c" diff --git a/src/patches/glibc/glibc-rh607010.patch b/src/patches/glibc/glibc-rh607010.patch deleted file mode 100644 index 6952dad851..0000000000 --- a/src/patches/glibc/glibc-rh607010.patch +++ /dev/null @@ -1,26 +0,0 @@ -2010-09-07 H.J. Lu - - * sysdeps/x86_64/cacheinfo.c (init_cacheinfo): Round cache sizes - up to multiple of 256 bytes. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/cacheinfo.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/cacheinfo.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/cacheinfo.c -@@ -661,12 +661,16 @@ init_cacheinfo (void) - - if (data > 0) - { -+ /* Round data cache size up to multiple of 256 bytes. */ -+ data = (data + 255) & ~255L; - __x86_64_data_cache_size_half = data / 2; - __x86_64_data_cache_size = data; - } - - if (shared > 0) - { -+ /* Round shared cache size up to multiple of 256 bytes. */ -+ shared = (shared + 255) & ~255L; - __x86_64_shared_cache_size_half = shared / 2; - __x86_64_shared_cache_size = shared; - } diff --git a/src/patches/glibc/glibc-rh607461.patch b/src/patches/glibc/glibc-rh607461.patch deleted file mode 100644 index 79fc72cb6a..0000000000 --- a/src/patches/glibc/glibc-rh607461.patch +++ /dev/null @@ -1,22 +0,0 @@ -Index: glibc-2.12-2-gc4ccff1/nptl/allocatestack.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/allocatestack.c -+++ glibc-2.12-2-gc4ccff1/nptl/allocatestack.c -@@ -994,7 +994,16 @@ setxid_mark_thread (struct xid_command * - - /* If the thread is exiting right now, ignore it. */ - if ((ch & EXITING_BITMASK) != 0) -- return; -+ { -+ /* Release the futex if there is no other setxid in -+ progress. */ -+ if ((ch & SETXID_BITMASK) == 0) -+ { -+ t->setxid_futex = 1; -+ lll_futex_wake (&t->setxid_futex, 1, LLL_PRIVATE); -+ } -+ return; -+ } - } - while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling, - ch | SETXID_BITMASK, ch)); diff --git a/src/patches/glibc/glibc-rh615090.patch b/src/patches/glibc/glibc-rh615090.patch deleted file mode 100644 index e6c00f05b3..0000000000 --- a/src/patches/glibc/glibc-rh615090.patch +++ /dev/null @@ -1,21 +0,0 @@ -2010-07-27 Andreas Schwab - - * manual/memory.texi (Malloc Tunable Parameters): Document - M_PERTURB. - -Index: glibc-2.12-2-gc4ccff1/manual/memory.texi -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/manual/memory.texi -+++ glibc-2.12-2-gc4ccff1/manual/memory.texi -@@ -702,6 +702,11 @@ be allocated via @code{mmap}. - @item M_MMAP_MAX - The maximum number of chunks to allocate with @code{mmap}. Setting this - to zero disables all use of @code{mmap}. -+@item M_PERTURB -+If non-zero, memory blocks are filled with values depending on some -+low order bits of this parameter when they are allocated (except when -+allocated by @code{calloc}) and freed. This can be used to debug the -+use of uninitialized or freed heap memory. - @end table - - @end deftypefun diff --git a/src/patches/glibc/glibc-rh615701.patch b/src/patches/glibc/glibc-rh615701.patch deleted file mode 100644 index 283e3feb14..0000000000 --- a/src/patches/glibc/glibc-rh615701.patch +++ /dev/null @@ -1,23 +0,0 @@ -2010-07-20 Roland McGrath - - * elf/dl-sysdep.c (_dl_important_hwcaps): Add dsocaps mask to - dl_hwcap_mask as well as dl_hwcap. Without this, dsocaps matching in - ld.so.cache was broken. With it, there is no way to disable dsocaps - like LD_HWCAP_MASK can disable hwcaps. - -Index: glibc-2.12-2-gc4ccff1/elf/dl-sysdep.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-sysdep.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-sysdep.c -@@ -425,6 +425,11 @@ _dl_important_hwcaps (const char *platfo - { - const ElfW(Word) mask = ((const ElfW(Word) *) dsocaps)[-1]; - GLRO(dl_hwcap) |= (uint64_t) mask << _DL_FIRST_EXTRA; -+ /* Note that we add the dsocaps to the set already chosen by the -+ LD_HWCAP_MASK environment variable (or default HWCAP_IMPORTANT). -+ So there is no way to request ignoring an OS-supplied dsocap -+ string and bit like you can ignore an OS-supplied HWCAP bit. */ -+ GLRO(dl_hwcap_mask) |= (uint64_t) mask << _DL_FIRST_EXTRA; - size_t len; - for (const char *p = dsocaps; p < dsocaps + dsocapslen; p += len + 1) - { diff --git a/src/patches/glibc/glibc-rh621959.patch b/src/patches/glibc/glibc-rh621959.patch deleted file mode 100644 index 315521f665..0000000000 --- a/src/patches/glibc/glibc-rh621959.patch +++ /dev/null @@ -1,120 +0,0 @@ -2010-08-06 Ulrich Drepper - - * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): - Also fail if tpwd after pwuid call is NULL. - -2010-06-21 Andreas Schwab - - * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): - Restore proper fallback handling. - -2010-06-19 Ulrich Drepper - - * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): Handle - OOM in getpwuid_r correctly. Return error number when the caller - should return, otherwise -1. - (getlogin_r): Adjust to return also for result of __getlogin_r_loginuid - call returning > 0 value. - * sysdeps/unix/sysv/linux/getlogin.c (getlogin): Likewise. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getlogin.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/getlogin.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getlogin.c -@@ -32,8 +32,9 @@ - char * - getlogin (void) - { -- if (__getlogin_r_loginuid (name, sizeof (name)) == 0) -- return name; -+ int res = __getlogin_r_loginuid (name, sizeof (name)); -+ if (res >= 0) -+ return res == 0 ? name : NULL; - - return getlogin_fd0 (); - } -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getlogin_r.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/getlogin_r.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getlogin_r.c -@@ -27,6 +27,10 @@ static int getlogin_r_fd0 (char *name, s - #undef getlogin_r - - -+/* Try to determine login name from /proc/self/loginuid and return 0 -+ if successful. If /proc/self/loginuid cannot be read return -1. -+ Otherwise return the error number. */ -+ - int - attribute_hidden - __getlogin_r_loginuid (name, namesize) -@@ -35,7 +39,7 @@ __getlogin_r_loginuid (name, namesize) - { - int fd = open_not_cancel_2 ("/proc/self/loginuid", O_RDONLY); - if (fd == -1) -- return 1; -+ return -1; - - /* We are reading a 32-bit number. 12 bytes are enough for the text - representation. If not, something is wrong. */ -@@ -51,37 +55,38 @@ __getlogin_r_loginuid (name, namesize) - || (uidbuf[n] = '\0', - uid = strtoul (uidbuf, &endp, 10), - endp == uidbuf || *endp != '\0')) -- return 1; -+ return -1; - - size_t buflen = 1024; - char *buf = alloca (buflen); - bool use_malloc = false; - struct passwd pwd; - struct passwd *tpwd; -+ int result = 0; - int res; - -- while ((res = __getpwuid_r (uid, &pwd, buf, buflen, &tpwd)) != 0) -+ while ((res = __getpwuid_r (uid, &pwd, buf, buflen, &tpwd)) == ERANGE) - if (__libc_use_alloca (2 * buflen)) -- extend_alloca (buf, buflen, 2 * buflen); -+ buf = extend_alloca (buf, buflen, 2 * buflen); - else - { - buflen *= 2; - char *newp = realloc (use_malloc ? buf : NULL, buflen); - if (newp == NULL) - { -- fail: -- if (use_malloc) -- free (buf); -- return 1; -+ result = ENOMEM; -+ goto out; - } - buf = newp; - use_malloc = true; - } - -- if (tpwd == NULL) -- goto fail; -+ if (res != 0 || tpwd == NULL) -+ { -+ result = -1; -+ goto out; -+ } - -- int result = 0; - size_t needed = strlen (pwd.pw_name) + 1; - if (needed > namesize) - { -@@ -109,8 +114,9 @@ getlogin_r (name, namesize) - char *name; - size_t namesize; - { -- if (__getlogin_r_loginuid (name, namesize) == 0) -- return 0; -+ int res = __getlogin_r_loginuid (name, namesize); -+ if (res >= 0) -+ return res; - - return getlogin_r_fd0 (name, namesize); - } diff --git a/src/patches/glibc/glibc-rh623187.patch b/src/patches/glibc/glibc-rh623187.patch deleted file mode 100644 index 596fdd6bc0..0000000000 --- a/src/patches/glibc/glibc-rh623187.patch +++ /dev/null @@ -1,18 +0,0 @@ -2010-08-10 Dinakar Guniguntala - Stefan Hajnoczi - - * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: If - FUTEX_WAKE_OP fails make sure to call FUTEX_WAKE instead. - -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S -@@ -163,7 +163,6 @@ __pthread_cond_signal: - #endif - orl $FUTEX_WAKE, %ecx - -- xorl $(FUTEX_WAKE ^ FUTEX_WAKE_OP), %ecx - movl $SYS_futex, %eax - /* %edx should be 1 already from $FUTEX_WAKE_OP syscall. - movl $1, %edx */ diff --git a/src/patches/glibc/glibc-rh625893.patch b/src/patches/glibc/glibc-rh625893.patch deleted file mode 100644 index 5337a425c4..0000000000 --- a/src/patches/glibc/glibc-rh625893.patch +++ /dev/null @@ -1,79 +0,0 @@ -2010-08-12 Andreas Schwab - - [BZ #11904] - * locale/programs/locale.c (print_assignment): New function. - (show_locale_vars): Use it. - -Index: glibc-2.12-2-gc4ccff1/locale/programs/locale.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/locale/programs/locale.c -+++ glibc-2.12-2-gc4ccff1/locale/programs/locale.c -@@ -762,6 +762,29 @@ write_charmaps (void) - twalk (all_data, print_names); - } - -+/* Print a properly quoted assignment of NAME with VAL, using double -+ quotes iff DQUOTE is true. */ -+static void -+print_assignment (const char *name, const char *val, bool dquote) -+{ -+ printf ("%s=", name); -+ if (dquote) -+ putchar ('"'); -+ while (*val != '\0') -+ { -+ size_t segment -+ = strcspn (val, dquote ? "$`\"\\" : "~|&;<>()$`\\\"' \t\n"); -+ printf ("%.*s", (int) segment, val); -+ val += segment; -+ if (*val == '\0') -+ break; -+ putchar ('\\'); -+ putchar (*val++); -+ } -+ if (dquote) -+ putchar ('"'); -+ putchar ('\n'); -+} - - /* We have to show the contents of the environments determining the - locale. */ -@@ -769,7 +792,7 @@ static void - show_locale_vars (void) - { - size_t cat_no; -- const char *lcall = getenv ("LC_ALL"); -+ const char *lcall = getenv ("LC_ALL") ? : ""; - const char *lang = getenv ("LANG") ? : ""; - - auto void get_source (const char *name); -@@ -778,15 +801,15 @@ show_locale_vars (void) - { - char *val = getenv (name); - -- if ((lcall ?: "")[0] != '\0' || val == NULL) -- printf ("%s=\"%s\"\n", name, -- (lcall ?: "")[0] ? lcall : (lang ?: "")[0] ? lang : "POSIX"); -+ if (lcall[0] != '\0' || val == NULL) -+ print_assignment (name, lcall[0] ? lcall : lang[0] ? lang : "POSIX", -+ true); - else -- printf ("%s=%s\n", name, val); -+ print_assignment (name, val, false); - } - - /* LANG has to be the first value. */ -- printf ("LANG=%s\n", lang); -+ print_assignment ("LANG", lang, false); - - /* Now all categories in an unspecified order. */ - for (cat_no = 0; cat_no < NCATEGORIES; ++cat_no) -@@ -794,7 +817,7 @@ show_locale_vars (void) - get_source (category[cat_no].name); - - /* The last is the LC_ALL value. */ -- printf ("LC_ALL=%s\n", lcall ? : ""); -+ print_assignment ("LC_ALL", lcall, false); - } - - diff --git a/src/patches/glibc/glibc-rh629823-2.patch b/src/patches/glibc/glibc-rh629823-2.patch deleted file mode 100644 index d3e4f45f45..0000000000 --- a/src/patches/glibc/glibc-rh629823-2.patch +++ /dev/null @@ -1,95 +0,0 @@ -commit 50fd745b4dec07e8e213cf2703b5cabcfa128225 -Author: Andreas Schwab -Date: Mon Jun 10 14:39:09 2013 +0200 - - Fix handling of netgroup cache in nscd - -diff --git a/nscd/connections.c b/nscd/connections.c -index 7099215..69e3e7d 100644 ---- a/nscd/connections.c -+++ b/nscd/connections.c -@@ -1779,7 +1779,7 @@ nscd_run_worker (void *p) - else - { - /* Get the key. */ -- char keybuf[MAXKEYLEN]; -+ char keybuf[MAXKEYLEN + 1]; - - if (__builtin_expect (TEMP_FAILURE_RETRY (read (fd, keybuf, - req.key_len)) -@@ -1791,6 +1791,7 @@ nscd_run_worker (void *p) - strerror_r (errno, buf, sizeof (buf))); - goto close_and_out; - } -+ keybuf[req.key_len] = '\0'; - - if (__builtin_expect (debug_level, 0) > 0) - { -diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c -index 2d6c5aa..dd06ce4 100644 ---- a/nscd/netgroupcache.c -+++ b/nscd/netgroupcache.c -@@ -192,18 +192,26 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - const char *nuser = data.val.triple.user; - const char *ndomain = data.val.triple.domain; - -- if (data.val.triple.host > data.val.triple.user -- || data.val.triple.user > data.val.triple.domain) -+ if (nhost == NULL || nuser == NULL || ndomain == NULL -+ || nhost > nuser || nuser > ndomain) - { -- const char *last = MAX (nhost, -- MAX (nuser, ndomain)); -- size_t bufused = (last + strlen (last) + 1 -- - buffer); -+ const char *last = nhost; -+ if (last == NULL -+ || (nuser != NULL && nuser > last)) -+ last = nuser; -+ if (last == NULL -+ || (ndomain != NULL && ndomain > last)) -+ last = ndomain; -+ -+ size_t bufused -+ = (last == NULL -+ ? buffilled -+ : last + strlen (last) + 1 - buffer); - - /* We have to make temporary copies. */ -- size_t hostlen = strlen (nhost) + 1; -- size_t userlen = strlen (nuser) + 1; -- size_t domainlen = strlen (ndomain) + 1; -+ size_t hostlen = strlen (nhost ?: "") + 1; -+ size_t userlen = strlen (nuser ?: "") + 1; -+ size_t domainlen = strlen (ndomain ?: "") + 1; - size_t needed = hostlen + userlen + domainlen; - - if (buflen - req->key_len - bufused < needed) -@@ -226,11 +234,11 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - } - - nhost = memcpy (buffer + bufused, -- nhost, hostlen); -+ nhost ?: "", hostlen); - nuser = memcpy ((char *) nhost + hostlen, -- nuser, userlen); -+ nuser ?: "", userlen); - ndomain = memcpy ((char *) nuser + userlen, -- ndomain, domainlen); -+ ndomain ?: "", domainlen); - } - - char *wp = buffer + buffilled; -diff --git a/nscd/nscd_netgroup.c b/nscd/nscd_netgroup.c -index cac4ebf..acb2c81 100644 ---- a/nscd/nscd_netgroup.c -+++ b/nscd/nscd_netgroup.c -@@ -48,7 +48,7 @@ __nscd_setnetgrent (const char *group, struct __netgrent *datap) - { - int gc_cycle; - int nretries = 0; -- size_t group_len = strlen (group); -+ size_t group_len = strlen (group) + 1; - - /* If the mapping is available, try to search there instead of - communicating with the nscd. */ diff --git a/src/patches/glibc/glibc-rh629823.patch b/src/patches/glibc/glibc-rh629823.patch deleted file mode 100644 index 6315246f23..0000000000 --- a/src/patches/glibc/glibc-rh629823.patch +++ /dev/null @@ -1,1954 +0,0 @@ -diff -Nrup a/grp/initgroups.c b/grp/initgroups.c ---- a/grp/initgroups.c 2012-08-06 15:07:48.935060494 -0600 -+++ b/grp/initgroups.c 2012-08-23 14:19:49.370442142 -0600 -@@ -1,4 +1,4 @@ --/* Copyright (C) 1989,91,93,1996-2005,2006,2008 Free Software Foundation, Inc. -+/* Copyright (C) 1989,91,93,1996-2006,2008,2010 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or -@@ -58,7 +58,8 @@ internal_getgrouplist (const char *user, - if (__nss_not_use_nscd_group > 0 - && ++__nss_not_use_nscd_group > NSS_NSCD_RETRY) - __nss_not_use_nscd_group = 0; -- if (!__nss_not_use_nscd_group) -+ if (!__nss_not_use_nscd_group -+ && !__nss_database_custom[NSS_DBSIDX_group]) - { - int n = __nscd_getgrouplist (user, group, size, groupsp, limit); - if (n >= 0) -diff -Nrup a/inet/getnetgrent_r.c b/inet/getnetgrent_r.c ---- a/inet/getnetgrent_r.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/inet/getnetgrent_r.c 2012-08-06 15:10:05.865520055 -0600 -@@ -28,6 +28,7 @@ - #include "netgroup.h" - #include "nsswitch.h" - #include -+#include - - - /* Protect above variable against multiple uses at the same time. */ -@@ -101,7 +102,7 @@ endnetgrent_hook (struct __netgrent *dat - { - enum nss_status (*endfct) (struct __netgrent *); - -- if (datap->nip == NULL) -+ if (datap->nip == NULL || datap->nip == (service_user *) -1l) - return; - - endfct = __nss_lookup_function (datap->nip, "endnetgrent"); -@@ -189,8 +190,21 @@ setnetgrent (const char *group) - - __libc_lock_lock (lock); - -+ if (__nss_not_use_nscd_netgroup > 0 -+ && ++__nss_not_use_nscd_netgroup > NSS_NSCD_RETRY) -+ __nss_not_use_nscd_netgroup = 0; -+ -+ if (!__nss_not_use_nscd_netgroup -+ && !__nss_database_custom[NSS_DBSIDX_netgroup]) -+ { -+ result = __nscd_setnetgrent (group, &dataset); -+ if (result >= 0) -+ goto out; -+ } -+ - result = internal_setnetgrent (group, &dataset); - -+ out: - __libc_lock_unlock (lock); - - return result; -@@ -226,6 +240,26 @@ int internal_getnetgrent_r (char **hostp - char *buffer, size_t buflen, int *errnop); - libc_hidden_proto (internal_getnetgrent_r) - -+ -+static enum nss_status -+nscd_getnetgrent (struct __netgrent *datap, char *buffer, size_t buflen, -+ int *errnop) -+{ -+ if (datap->cursor >= datap->data + datap->data_size) -+ return NSS_STATUS_UNAVAIL; -+ -+ datap->type = triple_val; -+ datap->val.triple.host = datap->cursor; -+ datap->cursor = (char *) __rawmemchr (datap->cursor, '\0') + 1; -+ datap->val.triple.user = datap->cursor; -+ datap->cursor = (char *) __rawmemchr (datap->cursor, '\0') + 1; -+ datap->val.triple.domain = datap->cursor; -+ datap->cursor = (char *) __rawmemchr (datap->cursor, '\0') + 1; -+ -+ return NSS_STATUS_SUCCESS; -+} -+ -+ - int - internal_getnetgrent_r (char **hostp, char **userp, char **domainp, - struct __netgrent *datap, -@@ -239,9 +273,18 @@ internal_getnetgrent_r (char **hostp, ch - /* Run through available functions, starting with the same function last - run. We will repeat each function as long as it succeeds, and then go - on to the next service action. */ -- int no_more = (datap->nip == NULL -- || (fct = __nss_lookup_function (datap->nip, "getnetgrent_r")) -- == NULL); -+ int no_more = datap->nip == NULL; -+ if (! no_more) -+ { -+ if (datap->nip == (service_user *) -1l) -+ fct = nscd_getnetgrent; -+ else -+ { -+ fct = __nss_lookup_function (datap->nip, "getnetgrent_r"); -+ no_more = fct == NULL; -+ } -+ } -+ - while (! no_more) - { - status = (*fct) (datap, buffer, buflen, &errno); -@@ -337,6 +380,18 @@ int - innetgr (const char *netgroup, const char *host, const char *user, - const char *domain) - { -+ if (__nss_not_use_nscd_netgroup > 0 -+ && ++__nss_not_use_nscd_netgroup > NSS_NSCD_RETRY) -+ __nss_not_use_nscd_netgroup = 0; -+ -+ if (!__nss_not_use_nscd_netgroup -+ && !__nss_database_custom[NSS_DBSIDX_netgroup]) -+ { -+ int result = __nscd_innetgr (netgroup, host, user, domain); -+ if (result >= 0) -+ return result; -+ } -+ - union - { - int (*f) (const char *, struct __netgrent *); -@@ -444,7 +499,7 @@ innetgr (const char *netgroup, const cha - entry.needed_groups = tmp->next; - tmp->next = entry.known_groups; - entry.known_groups = tmp; -- current_group = entry.known_groups->name; -+ current_group = tmp->name; - continue; - } - -diff -Nrup a/nscd/Makefile b/nscd/Makefile ---- a/nscd/Makefile 2010-05-04 05:27:23.000000000 -0600 -+++ b/nscd/Makefile 2012-08-06 15:08:19.045941627 -0600 -@@ -22,7 +22,7 @@ - subdir := nscd - - routines := nscd_getpw_r nscd_getgr_r nscd_gethst_r nscd_getai \ -- nscd_initgroups nscd_getserv_r -+ nscd_initgroups nscd_getserv_r nscd_netgroup - aux := nscd_helper - - include ../Makeconfig -@@ -34,7 +34,8 @@ nscd-modules := nscd connections pwdcach - getgrnam_r getgrgid_r hstcache gethstbyad_r gethstbynm3_r \ - getsrvbynm_r getsrvbypt_r servicescache \ - dbg_log nscd_conf nscd_stat cache mem nscd_setup_thread \ -- xmalloc xstrdup aicache initgrcache gai res_hconf -+ xmalloc xstrdup aicache initgrcache gai res_hconf \ -+ netgroupcache - - ifeq ($(have-thread-library),yes) - -@@ -122,6 +123,7 @@ CFLAGS-servicescache.c += $(nscd-cflags) - CFLAGS-getsrvbynm_r.c += $(nscd-cflags) - CFLAGS-getsrvbypt_r.c += $(nscd-cflags) - CFLAGS-res_hconf.c += $(nscd-cflags) -+CFLAGS-netgroupcache.c += $(nscd-cflags) - - ifeq (yesyes,$(have-fpie)$(build-shared)) - relro-LDFLAGS += -Wl,-z,now -diff -Nrup a/nscd/cache.c b/nscd/cache.c ---- a/nscd/cache.c 2012-08-06 15:07:48.973060344 -0600 -+++ b/nscd/cache.c 2012-08-06 15:08:19.046941626 -0600 -@@ -60,7 +60,9 @@ static time_t (*const readdfcts[LASTREQ] - [GETAI] = readdhstai, - [INITGROUPS] = readdinitgroups, - [GETSERVBYNAME] = readdservbyname, -- [GETSERVBYPORT] = readdservbyport -+ [GETSERVBYPORT] = readdservbyport, -+ [GETNETGRENT] = readdgetnetgrent, -+ [INNETGR] = readdinnetgr - }; - - -@@ -70,7 +72,7 @@ static time_t (*const readdfcts[LASTREQ] - - This function must be called with the read-lock held. */ - struct datahead * --cache_search (request_type type, void *key, size_t len, -+cache_search (request_type type, const void *key, size_t len, - struct database_dyn *table, uid_t owner) - { - unsigned long int hash = __nis_hash (key, len) % table->head->module; -diff -Nrup a/nscd/connections.c b/nscd/connections.c ---- a/nscd/connections.c 2012-08-06 15:07:49.076059937 -0600 -+++ b/nscd/connections.c 2012-08-21 21:36:10.210358578 -0600 -@@ -57,11 +57,6 @@ - #endif - - --/* Wrapper functions with error checking for standard functions. */ --extern void *xmalloc (size_t n); --extern void *xcalloc (size_t n, size_t s); --extern void *xrealloc (void *o, size_t n); -- - /* Support to run nscd as an unprivileged user */ - const char *server_user; - static uid_t server_uid; -@@ -100,7 +95,10 @@ const char *const serv2str[LASTREQ] = - [INITGROUPS] = "INITGROUPS", - [GETSERVBYNAME] = "GETSERVBYNAME", - [GETSERVBYPORT] = "GETSERVBYPORT", -- [GETFDSERV] = "GETFDSERV" -+ [GETFDSERV] = "GETFDSERV", -+ [GETNETGRENT] = "GETNETGRENT", -+ [INNETGR] = "INNETGR", -+ [GETFDNETGR] = "GETFDNETGR" - }; - - /* The control data structures for the services. */ -@@ -189,6 +187,27 @@ struct database_dyn dbs[lastdb] = - .wr_fd = -1, - .ro_fd = -1, - .mmap_used = false -+ }, -+ [netgrdb] = { -+ .lock = PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP, -+ .prune_lock = PTHREAD_MUTEX_INITIALIZER, -+ .prune_run_lock = PTHREAD_MUTEX_INITIALIZER, -+ .enabled = 0, -+ .check_file = 1, -+ .persistent = 0, -+ .propagate = 0, /* Not used. */ -+ .shared = 0, -+ .max_db_size = DEFAULT_MAX_DB_SIZE, -+ .suggested_module = DEFAULT_SUGGESTED_MODULE, -+ .reset_res = 0, -+ .filename = "/etc/netgroup", -+ .db_filename = _PATH_NSCD_NETGROUP_DB, -+ .disabled_iov = &netgroup_iov_disabled, -+ .postimeout = 28800, -+ .negtimeout = 20, -+ .wr_fd = -1, -+ .ro_fd = -1, -+ .mmap_used = false - } - }; - -@@ -218,7 +237,10 @@ static struct - [INITGROUPS] = { true, &dbs[grpdb] }, - [GETSERVBYNAME] = { true, &dbs[servdb] }, - [GETSERVBYPORT] = { true, &dbs[servdb] }, -- [GETFDSERV] = { false, &dbs[servdb] } -+ [GETFDSERV] = { false, &dbs[servdb] }, -+ [GETNETGRENT] = { true, &dbs[netgrdb] }, -+ [INNETGR] = { true, &dbs[netgrdb] }, -+ [GETFDNETGR] = { false, &dbs[netgrdb] } - }; - - -@@ -366,7 +388,8 @@ check_use (const char *data, nscd_ssize_ - static int - verify_persistent_db (void *mem, struct database_pers_head *readhead, int dbnr) - { -- assert (dbnr == pwddb || dbnr == grpdb || dbnr == hstdb || dbnr == servdb); -+ assert (dbnr == pwddb || dbnr == grpdb || dbnr == hstdb || dbnr == servdb -+ || dbnr == netgrdb); - - time_t now = time (NULL); - -@@ -1241,6 +1264,14 @@ request from '%s' [%ld] not handled due - addservbyport (db, fd, req, key, uid); - break; - -+ case GETNETGRENT: -+ addgetnetgrent (db, fd, req, key, uid); -+ break; -+ -+ case INNETGR: -+ addinnetgr (db, fd, req, key, uid); -+ break; -+ - case GETSTAT: - case SHUTDOWN: - case INVALIDATE: -@@ -1287,6 +1318,7 @@ request from '%s' [%ld] not handled due - case GETFDGR: - case GETFDHST: - case GETFDSERV: -+ case GETFDNETGR: - #ifdef SCM_RIGHTS - send_ro_fd (reqinfo[req->type].db, key, fd); - #endif -diff -Nrup a/nscd/netgroupcache.c b/nscd/netgroupcache.c ---- a/nscd/netgroupcache.c 1969-12-31 17:00:00.000000000 -0700 -+++ b/nscd/netgroupcache.c 2012-08-24 11:38:05.118254176 -0600 -@@ -0,0 +1,667 @@ -+/* Cache handling for netgroup lookup. -+ Copyright (C) 2011 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Contributed by Ulrich Drepper , 2011. -+ -+ 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; 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 "../inet/netgroup.h" -+#include "nscd.h" -+#include "dbg_log.h" -+#ifdef HAVE_SENDFILE -+# include -+#endif -+ -+ -+/* This is the standard reply in case the service is disabled. */ -+static const netgroup_response_header disabled = -+{ -+ .version = NSCD_VERSION, -+ .found = -1, -+ .nresults = 0, -+ .result_len = 0 -+}; -+ -+/* This is the struct describing how to write this record. */ -+const struct iovec netgroup_iov_disabled = -+{ -+ .iov_base = (void *) &disabled, -+ .iov_len = sizeof (disabled) -+}; -+ -+ -+/* This is the standard reply in case we haven't found the dataset. */ -+static const netgroup_response_header notfound = -+{ -+ .version = NSCD_VERSION, -+ .found = 0, -+ .nresults = 0, -+ .result_len = 0 -+}; -+ -+ -+struct dataset -+{ -+ struct datahead head; -+ netgroup_response_header resp; -+ char strdata[0]; -+}; -+ -+ -+static time_t -+addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, -+ const char *key, uid_t uid, struct hashentry *he, -+ struct datahead *dh, struct dataset **resultp) -+{ -+ if (__builtin_expect (debug_level > 0, 0)) -+ { -+ if (he == NULL) -+ dbg_log (_("Haven't found \"%s\" in netgroup cache!"), key); -+ else -+ dbg_log (_("Reloading \"%s\" in netgroup cache!"), key); -+ } -+ -+ static service_user *netgroup_database; -+ time_t timeout; -+ struct dataset *dataset; -+ bool cacheable = false; -+ ssize_t total; -+ -+ char *key_copy = NULL; -+ struct __netgrent data; -+ size_t buflen = MAX (1024, sizeof (*dataset) + req->key_len); -+ size_t buffilled = sizeof (*dataset); -+ char *buffer = NULL; -+ size_t nentries = 0; -+ bool use_malloc = false; -+ size_t group_len = strlen (key) + 1; -+ union -+ { -+ struct name_list elem; -+ char mem[sizeof (struct name_list) + group_len]; -+ } first_needed; -+ -+ if (netgroup_database == NULL -+ && __nss_database_lookup ("netgroup", NULL, NULL, &netgroup_database)) -+ { -+ /* No such service. */ -+ total = sizeof (notfound); -+ timeout = time (NULL) + db->negtimeout; -+ -+ if (fd != -1) -+ TEMP_FAILURE_RETRY (send (fd, ¬found, total, MSG_NOSIGNAL)); -+ -+ dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, 1); -+ /* If we cannot permanently store the result, so be it. */ -+ if (dataset != NULL) -+ { -+ dataset->head.allocsize = sizeof (struct dataset) + req->key_len; -+ dataset->head.recsize = total; -+ dataset->head.notfound = true; -+ dataset->head.nreloads = 0; -+ dataset->head.usable = true; -+ -+ /* Compute the timeout time. */ -+ timeout = dataset->head.timeout = time (NULL) + db->negtimeout; -+ dataset->head.ttl = db->negtimeout; -+ -+ /* This is the reply. */ -+ memcpy (&dataset->resp, ¬found, total); -+ -+ /* Copy the key data. */ -+ memcpy (dataset->strdata, key, req->key_len); -+ -+ cacheable = true; -+ } -+ -+ goto writeout; -+ } -+ -+ memset (&data, '\0', sizeof (data)); -+ buffer = alloca (buflen); -+ first_needed.elem.next = &first_needed.elem; -+ memcpy (first_needed.elem.name, key, group_len); -+ data.needed_groups = &first_needed.elem; -+ -+ while (data.needed_groups != NULL) -+ { -+ /* Add the next group to the list of those which are known. */ -+ struct name_list *this_group = data.needed_groups->next; -+ if (this_group == data.needed_groups) -+ data.needed_groups = NULL; -+ else -+ data.needed_groups->next = this_group->next; -+ this_group->next = data.known_groups; -+ data.known_groups = this_group; -+ -+ union -+ { -+ enum nss_status (*f) (const char *, struct __netgrent *); -+ void *ptr; -+ } setfct; -+ -+ service_user *nip = netgroup_database; -+ int no_more = __nss_lookup (&nip, "setnetgrent", NULL, &setfct.ptr); -+ while (!no_more) -+ { -+ enum nss_status status -+ = DL_CALL_FCT (*setfct.f, (data.known_groups->name, &data)); -+ -+ if (status == NSS_STATUS_SUCCESS) -+ { -+ union -+ { -+ enum nss_status (*f) (struct __netgrent *, char *, size_t, -+ int *); -+ void *ptr; -+ } getfct; -+ getfct.ptr = __nss_lookup_function (nip, "getnetgrent_r"); -+ if (getfct.f != NULL) -+ while (1) -+ { -+ int e; -+ status = getfct.f (&data, buffer + buffilled, -+ buflen - buffilled, &e); -+ if (status == NSS_STATUS_RETURN) -+ /* This was the last one for this group. Look -+ at next group if available. */ -+ break; -+ if (status == NSS_STATUS_SUCCESS) -+ { -+ if (data.type == triple_val) -+ { -+ const char *nhost = data.val.triple.host; -+ const char *nuser = data.val.triple.user; -+ const char *ndomain = data.val.triple.domain; -+ -+ if (data.val.triple.host > data.val.triple.user -+ || data.val.triple.user > data.val.triple.domain) -+ { -+ const char *last = MAX (nhost, -+ MAX (nuser, ndomain)); -+ size_t bufused = (last + strlen (last) + 1 -+ - buffer); -+ -+ /* We have to make temporary copies. */ -+ size_t hostlen = strlen (nhost) + 1; -+ size_t userlen = strlen (nuser) + 1; -+ size_t domainlen = strlen (ndomain) + 1; -+ size_t needed = hostlen + userlen + domainlen; -+ -+ if (buflen - req->key_len - bufused < needed) -+ { -+ size_t newsize = MAX (2 * buflen, -+ buflen + 2 * needed); -+ if (use_malloc || newsize > 1024 * 1024) -+ { -+ buflen = newsize; -+ char *newbuf = xrealloc (use_malloc -+ ? buffer -+ : NULL, -+ buflen); -+ -+ buffer = newbuf; -+ use_malloc = true; -+ } -+ else -+ extend_alloca (buffer, buflen, newsize); -+ } -+ -+ nhost = memcpy (buffer + bufused, -+ nhost, hostlen); -+ nuser = memcpy ((char *) nhost + hostlen, -+ nuser, userlen); -+ ndomain = memcpy ((char *) nuser + userlen, -+ ndomain, domainlen); -+ } -+ -+ char *wp = buffer + buffilled; -+ wp = stpcpy (wp, nhost) + 1; -+ wp = stpcpy (wp, nuser) + 1; -+ wp = stpcpy (wp, ndomain) + 1; -+ buffilled = wp - buffer; -+ ++nentries; -+ } -+ else -+ { -+ /* Check that the group has not been -+ requested before. */ -+ struct name_list *runp = data.needed_groups; -+ if (runp != NULL) -+ while (1) -+ { -+ if (strcmp (runp->name, data.val.group) == 0) -+ break; -+ -+ runp = runp->next; -+ if (runp == data.needed_groups) -+ { -+ runp = NULL; -+ break; -+ } -+ } -+ -+ if (runp == NULL) -+ { -+ runp = data.known_groups; -+ while (runp != NULL) -+ if (strcmp (runp->name, data.val.group) == 0) -+ break; -+ else -+ runp = runp->next; -+ } -+ -+ if (runp == NULL) -+ { -+ /* A new group is requested. */ -+ size_t namelen = strlen (data.val.group) + 1; -+ struct name_list *newg = alloca (sizeof (*newg) -+ + namelen); -+ memcpy (newg->name, data.val.group, namelen); -+ if (data.needed_groups == NULL) -+ data.needed_groups = newg->next = newg; -+ else -+ { -+ newg->next = data.needed_groups->next; -+ data.needed_groups->next = newg; -+ data.needed_groups = newg; -+ } -+ } -+ } -+ } -+ else if (status == NSS_STATUS_UNAVAIL && e == ERANGE) -+ { -+ size_t newsize = 2 * buflen; -+ if (use_malloc || newsize > 1024 * 1024) -+ { -+ buflen = newsize; -+ char *newbuf = xrealloc (use_malloc -+ ? buffer : NULL, buflen); -+ -+ buffer = newbuf; -+ use_malloc = true; -+ } -+ else -+ extend_alloca (buffer, buflen, newsize); -+ } -+ } -+ -+ enum nss_status (*endfct) (struct __netgrent *); -+ endfct = __nss_lookup_function (nip, "endnetgrent"); -+ if (endfct != NULL) -+ (void) DL_CALL_FCT (*endfct, (&data)); -+ -+ break; -+ } -+ -+ no_more = __nss_next2 (&nip, "setnetgrent", NULL, &setfct.ptr, -+ status, 0); -+ } -+ } -+ -+ total = buffilled; -+ -+ /* Fill in the dataset. */ -+ dataset = (struct dataset *) buffer; -+ dataset->head.allocsize = total + req->key_len; -+ dataset->head.recsize = total - offsetof (struct dataset, resp); -+ dataset->head.notfound = false; -+ dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1); -+ dataset->head.usable = true; -+ dataset->head.ttl = db->postimeout; -+ timeout = dataset->head.timeout = time (NULL) + dataset->head.ttl; -+ -+ dataset->resp.version = NSCD_VERSION; -+ dataset->resp.found = 1; -+ dataset->resp.nresults = nentries; -+ dataset->resp.result_len = buffilled - sizeof (*dataset); -+ -+ assert (buflen - buffilled >= req->key_len); -+ key_copy = memcpy (buffer + buffilled, key, req->key_len); -+ buffilled += req->key_len; -+ -+ /* Now we can determine whether on refill we have to create a new -+ record or not. */ -+ if (he != NULL) -+ { -+ assert (fd == -1); -+ -+ if (dataset->head.allocsize == dh->allocsize -+ && dataset->head.recsize == dh->recsize -+ && memcmp (&dataset->resp, dh->data, -+ dh->allocsize - offsetof (struct dataset, resp)) == 0) -+ { -+ /* The data has not changed. We will just bump the timeout -+ value. Note that the new record has been allocated on -+ the stack and need not be freed. */ -+ dh->timeout = dataset->head.timeout; -+ dh->ttl = dataset->head.ttl; -+ ++dh->nreloads; -+ dataset = (struct dataset *) dh; -+ -+ goto out; -+ } -+ } -+ -+ { -+ struct dataset *newp -+ = (struct dataset *) mempool_alloc (db, total + req->key_len, 1); -+ if (__builtin_expect (newp != NULL, 1)) -+ { -+ /* Adjust pointer into the memory block. */ -+ key_copy = (char *) newp + (key_copy - buffer); -+ -+ dataset = memcpy (newp, dataset, total + req->key_len); -+ cacheable = true; -+ -+ if (he != NULL) -+ /* Mark the old record as obsolete. */ -+ dh->usable = false; -+ } -+ } -+ -+ if (he == NULL && fd != -1) -+ { -+ /* We write the dataset before inserting it to the database -+ since while inserting this thread might block and so would -+ unnecessarily let the receiver wait. */ -+ writeout: -+#ifdef HAVE_SENDFILE -+ if (__builtin_expect (db->mmap_used, 1) && cacheable) -+ { -+ assert (db->wr_fd != -1); -+ assert ((char *) &dataset->resp > (char *) db->data); -+ assert ((char *) dataset - (char *) db->head + total -+ <= (sizeof (struct database_pers_head) -+ + db->head->module * sizeof (ref_t) -+ + db->head->data_size)); -+# ifndef __ASSUME_SENDFILE -+ ssize_t written = -+# endif -+ sendfileall (fd, db->wr_fd, (char *) &dataset->resp -+ - (char *) db->head, dataset->head.recsize); -+# ifndef __ASSUME_SENDFILE -+ if (written == -1 && errno == ENOSYS) -+ goto use_write; -+# endif -+ } -+ else -+#endif -+ { -+#if defined HAVE_SENDFILE && !defined __ASSUME_SENDFILE -+ use_write: -+#endif -+ writeall (fd, &dataset->resp, dataset->head.recsize); -+ } -+ } -+ -+ if (cacheable) -+ { -+ /* If necessary, we also propagate the data to disk. */ -+ if (db->persistent) -+ { -+ // XXX async OK? -+ uintptr_t pval = (uintptr_t) dataset & ~pagesize_m1; -+ msync ((void *) pval, -+ ((uintptr_t) dataset & pagesize_m1) + total + req->key_len, -+ MS_ASYNC); -+ } -+ -+ (void) cache_add (req->type, key_copy, req->key_len, &dataset->head, -+ true, db, uid, he == NULL); -+ -+ pthread_rwlock_unlock (&db->lock); -+ -+ /* Mark the old entry as obsolete. */ -+ if (dh != NULL) -+ dh->usable = false; -+ } -+ -+ out: -+ if (use_malloc) -+ free (buffer); -+ -+ *resultp = dataset; -+ -+ return timeout; -+} -+ -+ -+static time_t -+addinnetgrX (struct database_dyn *db, int fd, request_header *req, -+ char *key, uid_t uid, struct hashentry *he, -+ struct datahead *dh) -+{ -+ const char *group = key; -+ key = (char *) rawmemchr (key, '\0') + 1; -+ size_t group_len = key - group - 1; -+ const char *host = *key++ ? key : NULL; -+ if (host != NULL) -+ key = (char *) rawmemchr (key, '\0') + 1; -+ const char *user = *key++ ? key : NULL; -+ if (user != NULL) -+ key = (char *) rawmemchr (key, '\0') + 1; -+ const char *domain = *key++ ? key : NULL; -+ -+ if (__builtin_expect (debug_level > 0, 0)) -+ { -+ if (he == NULL) -+ dbg_log (_("Haven't found \"%s (%s,%s,%s)\" in netgroup cache!"), -+ group, host ?: "", user ?: "", domain ?: ""); -+ else -+ dbg_log (_("Reloading \"%s (%s,%s,%s)\" in netgroup cache!"), -+ group, host ?: "", user ?: "", domain ?: ""); -+ } -+ -+ struct dataset *result = (struct dataset *) cache_search (GETNETGRENT, -+ group, group_len, -+ db, uid); -+ time_t timeout; -+ if (result != NULL) -+ timeout = result->head.timeout; -+ else -+ { -+ request_header req_get = -+ { -+ .type = GETNETGRENT, -+ .key_len = group_len -+ }; -+ timeout = addgetnetgrentX (db, -1, &req_get, group, uid, NULL, NULL, -+ &result); -+ } -+ -+ struct indataset -+ { -+ struct datahead head; -+ innetgroup_response_header resp; -+ } *dataset -+ = (struct indataset *) mempool_alloc (db, -+ sizeof (*dataset) + req->key_len, -+ 1); -+ struct indataset dataset_mem; -+ bool cacheable = true; -+ if (__builtin_expect (dataset == NULL, 0)) -+ { -+ cacheable = false; -+ dataset = &dataset_mem; -+ } -+ -+ dataset->head.allocsize = sizeof (*dataset) + req->key_len; -+ dataset->head.recsize = sizeof (innetgroup_response_header); -+ dataset->head.notfound = result->head.notfound; -+ dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1); -+ dataset->head.usable = true; -+ dataset->head.ttl = result->head.ttl; -+ dataset->head.timeout = timeout; -+ -+ dataset->resp.version = NSCD_VERSION; -+ dataset->resp.found = result->resp.found; -+ /* Until we find a matching entry the result is 0. */ -+ dataset->resp.result = 0; -+ -+ char *key_copy = memcpy ((char *) (dataset + 1), group, req->key_len); -+ -+ if (dataset->resp.found) -+ { -+ const char *triplets = (const char *) (&result->resp + 1); -+ -+ for (nscd_ssize_t i = result->resp.nresults; i > 0; --i) -+ { -+ bool success = true; -+ -+ if (host != NULL) -+ success = strcmp (host, triplets) == 0; -+ triplets = (const char *) rawmemchr (triplets, '\0') + 1; -+ -+ if (success && user != NULL) -+ success = strcmp (user, triplets) == 0; -+ triplets = (const char *) rawmemchr (triplets, '\0') + 1; -+ -+ if (success && (domain == NULL || strcmp (domain, triplets) == 0)) -+ { -+ dataset->resp.result = 1; -+ break; -+ } -+ triplets = (const char *) rawmemchr (triplets, '\0') + 1; -+ } -+ } -+ -+ if (he != NULL && dh->data[0].innetgroupdata.result == dataset->resp.result) -+ { -+ /* The data has not changed. We will just bump the timeout -+ value. Note that the new record has been allocated on -+ the stack and need not be freed. */ -+ dh->timeout = timeout; -+ dh->ttl = dataset->head.ttl; -+ ++dh->nreloads; -+ return timeout; -+ } -+ -+ if (he == NULL) -+ { -+ /* We write the dataset before inserting it to the database -+ since while inserting this thread might block and so would -+ unnecessarily let the receiver wait. */ -+ assert (fd != -1); -+ -+#ifdef HAVE_SENDFILE -+ if (__builtin_expect (db->mmap_used, 1) && cacheable) -+ { -+ assert (db->wr_fd != -1); -+ assert ((char *) &dataset->resp > (char *) db->data); -+ assert ((char *) dataset - (char *) db->head + sizeof (*dataset) -+ <= (sizeof (struct database_pers_head) -+ + db->head->module * sizeof (ref_t) -+ + db->head->data_size)); -+# ifndef __ASSUME_SENDFILE -+ ssize_t written = -+# endif -+ sendfileall (fd, db->wr_fd, -+ (char *) &dataset->resp - (char *) db->head, -+ sizeof (innetgroup_response_header)); -+# ifndef __ASSUME_SENDFILE -+ if (written == -1 && errno == ENOSYS) -+ goto use_write; -+# endif -+ } -+ else -+# ifndef __ASSUME_SENDFILE -+ use_write: -+# endif -+#endif -+ writeall (fd, &dataset->resp, sizeof (innetgroup_response_header)); -+ } -+ -+ if (cacheable) -+ { -+ /* If necessary, we also propagate the data to disk. */ -+ if (db->persistent) -+ { -+ // XXX async OK? -+ uintptr_t pval = (uintptr_t) dataset & ~pagesize_m1; -+ msync ((void *) pval, -+ ((uintptr_t) dataset & pagesize_m1) + sizeof (*dataset) -+ + req->key_len, -+ MS_ASYNC); -+ } -+ -+ (void) cache_add (req->type, key_copy, req->key_len, &dataset->head, -+ true, db, uid, he == NULL); -+ -+ pthread_rwlock_unlock (&db->lock); -+ -+ /* Mark the old entry as obsolete. */ -+ if (dh != NULL) -+ dh->usable = false; -+ } -+ -+ return timeout; -+} -+ -+ -+void -+addgetnetgrent (struct database_dyn *db, int fd, request_header *req, -+ void *key, uid_t uid) -+{ -+ struct dataset *ignore; -+ -+ addgetnetgrentX (db, fd, req, key, uid, NULL, NULL, &ignore); -+} -+ -+ -+time_t -+readdgetnetgrent (struct database_dyn *db, struct hashentry *he, -+ struct datahead *dh) -+{ -+ request_header req = -+ { -+ .type = GETNETGRENT, -+ .key_len = he->len -+ }; -+ struct dataset *ignore; -+ -+ return addgetnetgrentX (db, -1, &req, db->data + he->key, he->owner, he, dh, -+ &ignore); -+} -+ -+ -+void -+addinnetgr (struct database_dyn *db, int fd, request_header *req, -+ void *key, uid_t uid) -+{ -+ addinnetgrX (db, fd, req, key, uid, NULL, NULL); -+} -+ -+ -+time_t -+readdinnetgr (struct database_dyn *db, struct hashentry *he, -+ struct datahead *dh) -+{ -+ request_header req = -+ { -+ .type = INNETGR, -+ .key_len = he->len -+ }; -+ -+ return addinnetgrX (db, -1, &req, db->data + he->key, he->owner, he, dh); -+} -diff -Nrup a/nscd/nscd-client.h b/nscd/nscd-client.h ---- a/nscd/nscd-client.h 2012-08-06 15:07:49.082059915 -0600 -+++ b/nscd/nscd-client.h 2012-08-06 15:08:19.090941456 -0600 -@@ -70,6 +70,9 @@ typedef enum - GETSERVBYNAME, - GETSERVBYPORT, - GETFDSERV, -+ GETNETGRENT, -+ INNETGR, -+ GETFDNETGR, - LASTREQ - } request_type; - -@@ -171,6 +174,24 @@ typedef struct - } serv_response_header; - - -+/* Structure send in reply to netgroup query. Note that this struct is -+ sent also if the service is disabled or there is no record found. */ -+typedef struct -+{ -+ int32_t version; -+ int32_t found; -+ nscd_ssize_t nresults; -+ nscd_ssize_t result_len; -+} netgroup_response_header; -+ -+typedef struct -+{ -+ int32_t version; -+ int32_t found; -+ int32_t result; -+} innetgroup_response_header; -+ -+ - /* Type for offsets in data part of database. */ - typedef uint32_t ref_t; - /* Value for invalid/no reference. */ -@@ -210,6 +231,8 @@ struct datahead - ai_response_header aidata; - initgr_response_header initgrdata; - serv_response_header servdata; -+ netgroup_response_header netgroupdata; -+ innetgroup_response_header innetgroupdata; - nscd_ssize_t align1; - nscd_time_t align2; - } data[0]; -diff -Nrup a/nscd/nscd.conf b/nscd/nscd.conf ---- a/nscd/nscd.conf 2012-08-06 15:07:48.553062002 -0600 -+++ b/nscd/nscd.conf 2012-08-06 15:08:19.091941452 -0600 -@@ -77,3 +77,12 @@ - persistent services yes - shared services yes - max-db-size services 33554432 -+ -+ enable-cache netgroup yes -+ positive-time-to-live netgroup 28800 -+ negative-time-to-live netgroup 20 -+ suggested-size netgroup 211 -+ check-files netgroup yes -+ persistent netgroup yes -+ shared netgroup yes -+ max-db-size netgroup 33554432 -diff -Nrup a/nscd/nscd.h b/nscd/nscd.h ---- a/nscd/nscd.h 2012-08-06 15:07:49.085059903 -0600 -+++ b/nscd/nscd.h 2012-08-06 15:08:19.093941443 -0600 -@@ -38,6 +38,7 @@ typedef enum - grpdb, - hstdb, - servdb, -+ netgrdb, - lastdb - } dbtype; - -@@ -107,6 +108,7 @@ struct database_dyn - #define _PATH_NSCD_GROUP_DB "/var/db/nscd/group" - #define _PATH_NSCD_HOSTS_DB "/var/db/nscd/hosts" - #define _PATH_NSCD_SERVICES_DB "/var/db/nscd/services" -+#define _PATH_NSCD_NETGROUP_DB "/var/db/nscd/netgroup" - - /* Path used when not using persistent storage. */ - #define _PATH_NSCD_XYZ_DB_TMP "/var/run/nscd/dbXXXXXX" -@@ -140,6 +142,7 @@ extern const struct iovec pwd_iov_disabl - extern const struct iovec grp_iov_disabled; - extern const struct iovec hst_iov_disabled; - extern const struct iovec serv_iov_disabled; -+extern const struct iovec netgroup_iov_disabled; - - - /* Initial number of threads to run. */ -@@ -185,6 +188,11 @@ extern gid_t old_gid; - - /* Prototypes for global functions. */ - -+/* Wrapper functions with error checking for standard functions. */ -+extern void *xmalloc (size_t n); -+extern void *xcalloc (size_t n, size_t s); -+extern void *xrealloc (void *o, size_t n); -+ - /* nscd.c */ - extern void termination_handler (int signum) __attribute__ ((__noreturn__)); - extern int nscd_open_socket (void); -@@ -203,8 +211,8 @@ extern void send_stats (int fd, struct d - extern int receive_print_stats (void) __attribute__ ((__noreturn__)); - - /* cache.c */ --extern struct datahead *cache_search (request_type, void *key, size_t len, -- struct database_dyn *table, -+extern struct datahead *cache_search (request_type, const void *key, -+ size_t len, struct database_dyn *table, - uid_t owner); - extern int cache_add (int type, const void *key, size_t len, - struct datahead *packet, bool first, -@@ -273,6 +281,16 @@ extern void addservbyport (struct databa - extern time_t readdservbyport (struct database_dyn *db, struct hashentry *he, - struct datahead *dh); - -+/* netgroupcache.c */ -+extern void addinnetgr (struct database_dyn *db, int fd, request_header *req, -+ void *key, uid_t uid); -+extern time_t readdinnetgr (struct database_dyn *db, struct hashentry *he, -+ struct datahead *dh); -+extern void addgetnetgrent (struct database_dyn *db, int fd, -+ request_header *req, void *key, uid_t uid); -+extern time_t readdgetnetgrent (struct database_dyn *db, struct hashentry *he, -+ struct datahead *dh); -+ - /* mem.c */ - extern void *mempool_alloc (struct database_dyn *db, size_t len, - int data_alloc); -diff -Nrup a/nscd/nscd_conf.c b/nscd/nscd_conf.c ---- a/nscd/nscd_conf.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/nscd/nscd_conf.c 2012-08-06 15:08:19.093941443 -0600 -@@ -43,7 +43,8 @@ const char *const dbnames[lastdb] = - [pwddb] = "passwd", - [grpdb] = "group", - [hstdb] = "hosts", -- [servdb] = "services" -+ [servdb] = "services", -+ [netgrdb] = "netgroup" - }; - - -diff -Nrup a/nscd/nscd_netgroup.c b/nscd/nscd_netgroup.c ---- a/nscd/nscd_netgroup.c 1969-12-31 17:00:00.000000000 -0700 -+++ b/nscd/nscd_netgroup.c 2012-08-06 15:08:19.094941439 -0600 -@@ -0,0 +1,290 @@ -+/* Copyright (C) 2011 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Contributed by Ulrich Drepper , 2011. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; 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 "nscd-client.h" -+#include "nscd_proto.h" -+ -+int __nss_not_use_nscd_netgroup; -+ -+ -+libc_locked_map_ptr (static, map_handle); -+/* Note that we only free the structure if necessary. The memory -+ mapping is not removed since it is not visible to the malloc -+ handling. */ -+libc_freeres_fn (pw_map_free) -+{ -+ if (map_handle.mapped != NO_MAPPING) -+ { -+ void *p = map_handle.mapped; -+ map_handle.mapped = NO_MAPPING; -+ free (p); -+ } -+} -+ -+ -+int -+__nscd_setnetgrent (const char *group, struct __netgrent *datap) -+{ -+ int gc_cycle; -+ int nretries = 0; -+ size_t group_len = strlen (group); -+ -+ /* If the mapping is available, try to search there instead of -+ communicating with the nscd. */ -+ struct mapped_database *mapped; -+ mapped = __nscd_get_map_ref (GETFDNETGR, "netgroup", &map_handle, &gc_cycle); -+ -+ retry:; -+ char *respdata = NULL; -+ int retval = -1; -+ netgroup_response_header netgroup_resp; -+ -+ if (mapped != NO_MAPPING) -+ { -+ struct datahead *found = __nscd_cache_search (GETNETGRENT, group, -+ group_len, mapped, -+ sizeof netgroup_resp); -+ if (found != NULL) -+ { -+ respdata = (char *) (&found->data[0].netgroupdata + 1); -+ netgroup_resp = found->data[0].netgroupdata; -+ /* Now check if we can trust pw_resp fields. If GC is -+ in progress, it can contain anything. */ -+ if (mapped->head->gc_cycle != gc_cycle) -+ { -+ retval = -2; -+ goto out; -+ } -+ } -+ } -+ -+ int sock = -1; -+ if (respdata == NULL) -+ { -+ sock = __nscd_open_socket (group, group_len, GETNETGRENT, -+ &netgroup_resp, sizeof (netgroup_resp)); -+ if (sock == -1) -+ { -+ /* nscd not running or wrong version. */ -+ __nss_not_use_nscd_netgroup = 1; -+ goto out; -+ } -+ } -+ -+ if (netgroup_resp.found == 1) -+ { -+ size_t datalen = netgroup_resp.result_len; -+ -+ /* If we do not have to read the data here it comes from the -+ mapped data and does not have to be freed. */ -+ if (respdata == NULL) -+ { -+ /* The data will come via the socket. */ -+ respdata = malloc (datalen); -+ if (respdata == NULL) -+ goto out_close; -+ -+ if ((size_t) __readall (sock, respdata, datalen) != datalen) -+ { -+ free (respdata); -+ goto out_close; -+ } -+ } -+ -+ datap->data = respdata; -+ datap->data_size = datalen; -+ datap->cursor = respdata; -+ datap->first = 1; -+ datap->nip = (service_user *) -1l; -+ datap->known_groups = NULL; -+ datap->needed_groups = NULL; -+ -+ retval = 1; -+ } -+ else -+ { -+ if (__builtin_expect (netgroup_resp.found == -1, 0)) -+ { -+ /* The daemon does not cache this database. */ -+ __nss_not_use_nscd_netgroup = 1; -+ goto out_close; -+ } -+ -+ /* Set errno to 0 to indicate no error, just no found record. */ -+ __set_errno (0); -+ /* Even though we have not found anything, the result is zero. */ -+ retval = 0; -+ } -+ -+ out_close: -+ if (sock != -1) -+ close_not_cancel_no_status (sock); -+ out: -+ if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) -+ { -+ /* When we come here this means there has been a GC cycle while we -+ were looking for the data. This means the data might have been -+ inconsistent. Retry if possible. */ -+ if ((gc_cycle & 1) != 0 || ++nretries == 5 || retval == -1) -+ { -+ /* nscd is just running gc now. Disable using the mapping. */ -+ if (atomic_decrement_val (&mapped->counter) == 0) -+ __nscd_unmap (mapped); -+ mapped = NO_MAPPING; -+ } -+ -+ if (retval != -1) -+ goto retry; -+ } -+ -+ return retval; -+} -+ -+ -+int -+__nscd_innetgr (const char *netgroup, const char *host, const char *user, -+ const char *domain) -+{ -+ size_t key_len = (strlen (netgroup) + strlen (host ?: "") -+ + strlen (user ?: "") + strlen (domain ?: "") + 7); -+ char *key; -+ bool use_alloca = __libc_use_alloca (key_len); -+ if (use_alloca) -+ key = alloca (key_len); -+ else -+ { -+ key = malloc (key_len); -+ if (key == NULL) -+ return -1; -+ } -+ char *wp = stpcpy (key, netgroup) + 1; -+ if (host != NULL) -+ { -+ *wp++ = '\1'; -+ wp = stpcpy (wp, host) + 1; -+ } -+ else -+ *wp++ = '\0'; -+ if (user != NULL) -+ { -+ *wp++ = '\1'; -+ wp = stpcpy (wp, user) + 1; -+ } -+ else -+ *wp++ = '\0'; -+ if (domain != NULL) -+ { -+ *wp++ = '\1'; -+ wp = stpcpy (wp, domain) + 1; -+ } -+ else -+ *wp++ = '\0'; -+ key_len = wp - key; -+ -+ /* If the mapping is available, try to search there instead of -+ communicating with the nscd. */ -+ int gc_cycle; -+ int nretries = 0; -+ struct mapped_database *mapped; -+ mapped = __nscd_get_map_ref (GETFDNETGR, "netgroup", &map_handle, &gc_cycle); -+ -+ retry:; -+ int retval = -1; -+ innetgroup_response_header innetgroup_resp; -+ int sock = -1; -+ -+ if (mapped != NO_MAPPING) -+ { -+ struct datahead *found = __nscd_cache_search (INNETGR, key, -+ key_len, mapped, -+ sizeof innetgroup_resp); -+ if (found != NULL) -+ { -+ innetgroup_resp = found->data[0].innetgroupdata; -+ /* Now check if we can trust pw_resp fields. If GC is -+ in progress, it can contain anything. */ -+ if (mapped->head->gc_cycle != gc_cycle) -+ { -+ retval = -2; -+ goto out; -+ } -+ -+ goto found_entry; -+ } -+ } -+ -+ sock = __nscd_open_socket (key, key_len, INNETGR, -+ &innetgroup_resp, sizeof (innetgroup_resp)); -+ if (sock == -1) -+ { -+ /* nscd not running or wrong version. */ -+ __nss_not_use_nscd_netgroup = 1; -+ goto out; -+ } -+ -+ found_entry: -+ if (innetgroup_resp.found == 1) -+ retval = innetgroup_resp.result; -+ else -+ { -+ if (__builtin_expect (innetgroup_resp.found == -1, 0)) -+ { -+ /* The daemon does not cache this database. */ -+ __nss_not_use_nscd_netgroup = 1; -+ goto out_close; -+ } -+ -+ /* Set errno to 0 to indicate no error, just no found record. */ -+ __set_errno (0); -+ /* Even though we have not found anything, the result is zero. */ -+ retval = 0; -+ } -+ -+ out_close: -+ if (sock != -1) -+ close_not_cancel_no_status (sock); -+ out: -+ if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0) -+ { -+ /* When we come here this means there has been a GC cycle while we -+ were looking for the data. This means the data might have been -+ inconsistent. Retry if possible. */ -+ if ((gc_cycle & 1) != 0 || ++nretries == 5 || retval == -1) -+ { -+ /* nscd is just running gc now. Disable using the mapping. */ -+ if (atomic_decrement_val (&mapped->counter) == 0) -+ __nscd_unmap (mapped); -+ mapped = NO_MAPPING; -+ } -+ -+ if (retval != -1) -+ goto retry; -+ } -+ -+ if (! use_alloca) -+ free (key); -+ -+ return retval; -+} -diff -Nrup a/nscd/nscd_proto.h b/nscd/nscd_proto.h ---- a/nscd/nscd_proto.h 2010-05-04 05:27:23.000000000 -0600 -+++ b/nscd/nscd_proto.h 2012-08-06 15:14:24.446648305 -0600 -@@ -1,4 +1,4 @@ --/* Copyright (C) 1998-2000, 2002, 2004, 2007 Free Software Foundation, Inc. -+/* Copyright (C) 1998-2000,2002,2004,2007,2011 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Thorsten Kukuk , 1998. - -@@ -36,6 +36,7 @@ extern int __nss_not_use_nscd_passwd att - extern int __nss_not_use_nscd_group attribute_hidden; - extern int __nss_not_use_nscd_hosts attribute_hidden; - extern int __nss_not_use_nscd_services attribute_hidden; -+extern int __nss_not_use_nscd_netgroup attribute_hidden; - - extern int __nscd_getpwnam_r (const char *name, struct passwd *resultbuf, - char *buffer, size_t buflen, -@@ -71,5 +72,9 @@ extern int __nscd_getservbyname_r (const - extern int __nscd_getservbyport_r (int port, const char *proto, - struct servent *result_buf, char *buf, - size_t buflen, struct servent **result); -+extern int __nscd_innetgr (const char *netgroup, const char *host, -+ const char *user, const char *domain); -+extern int __nscd_setnetgrent (const char *group, struct __netgrent *datap); -+ - - #endif /* _NSCD_PROTO_H */ -diff -Nrup a/nscd/selinux.c b/nscd/selinux.c ---- a/nscd/selinux.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/nscd/selinux.c 2012-08-06 15:08:19.096941431 -0600 -@@ -1,5 +1,5 @@ - /* SELinux access controls for nscd. -- Copyright (C) 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. -+ Copyright (C) 2004,2005,2006,2007,2009,2011 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Matthew Rickard , 2004. - -@@ -46,7 +46,7 @@ - int selinux_enabled; - - /* Define mappings of access vector permissions to request types. */ --static const int perms[LASTREQ] = -+static const access_vector_t perms[LASTREQ] = - { - [GETPWBYNAME] = NSCD__GETPWD, - [GETPWBYUID] = NSCD__GETPWD, -@@ -69,6 +69,11 @@ static const int perms[LASTREQ] = - [GETSERVBYPORT] = NSCD__GETSERV, - [GETFDSERV] = NSCD__SHMEMSERV, - #endif -+#ifdef NSCD__GETNETGRP -+ [GETNETGRENT] = NSCD__GETNETGRP, -+ [INNETGR] = NSCD__GETNETGRP, -+ [GETFDNETGR] = NSCD__SHMEMNETGRP, -+#endif - }; - - /* Store an entry ref to speed AVC decisions. */ -diff -Nrup a/nss/Makefile b/nss/Makefile ---- a/nss/Makefile 2012-08-06 15:07:48.938060482 -0600 -+++ b/nss/Makefile 2012-08-23 14:19:49.382442094 -0600 -@@ -1,4 +1,5 @@ --# Copyright (C) 1996-1998,2000-2002,2007,2009 Free Software Foundation, Inc. -+# Copyright (C) 1996-1998,2000-2002,2007,2009,2010 -+# Free Software Foundation, Inc. - # This file is part of the GNU C Library. - - # The GNU C Library is free software; you can redistribute it and/or -@@ -39,7 +40,7 @@ databases = proto service hosts network - others := getent - install-bin := getent - --tests = test-netdb -+tests = test-netdb tst-nss-test1 - xtests = bug-erange - - include ../Makeconfig -@@ -85,3 +86,14 @@ endif - # a statically-linked program that hasn't already loaded it. - $(services:%=$(objpfx)libnss_%.so): $(common-objpfx)libc.so \ - $(common-objpfx)libc_nonshared.a -+ -+ -+distribute += nss_test1.c -+ -+CFLAGS-nss_test1.c = -DNOT_IN_libc=1 -+$(objpfx)/libnss_test1.so: $(objpfx)nss_test1.os $(common-objpfx)libc.so \ -+ $(common-objpfx)libc_nonshared.a -+ $(build-module) -+$(objpfx)/libnss_test1.so$(libnss_test1.so-version): $(objpfx)/libnss_test1.so -+ $(make-link) -+$(objpfx)tst-nss-test1.out: $(objpfx)/libnss_test1.so$(libnss_test1.so-version) -diff -Nrup a/nss/Versions b/nss/Versions ---- a/nss/Versions 2012-08-06 15:07:48.939060479 -0600 -+++ b/nss/Versions 2012-08-06 15:08:19.096941431 -0600 -@@ -12,7 +12,7 @@ libc { - __nss_disable_nscd; __nss_lookup_function; _nss_files_parse_sgent; - - __nss_passwd_lookup2; __nss_group_lookup2; __nss_hosts_lookup2; -- __nss_services_lookup2; __nss_next2; -+ __nss_services_lookup2; __nss_next2; __nss_lookup; - } - } - -diff -Nrup a/nss/getXXbyYY_r.c b/nss/getXXbyYY_r.c ---- a/nss/getXXbyYY_r.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/nss/getXXbyYY_r.c 2012-08-23 14:19:49.403442011 -0600 -@@ -1,4 +1,4 @@ --/* Copyright (C) 1996-2004, 2006, 2007, 2009 Free Software Foundation, Inc. -+/* Copyright (C) 1996-2004,2006,2007,2009,2010 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - -@@ -87,6 +87,8 @@ - # define NOT_USENSCD_NAME ADD_NOT_NSCDUSE (DATABASE_NAME) - # define ADD_NOT_NSCDUSE(name) ADD_NOT_NSCDUSE1 (name) - # define ADD_NOT_NSCDUSE1(name) __nss_not_use_nscd_##name -+# define CONCAT2(arg1, arg2) CONCAT2_2 (arg1, arg2) -+# define CONCAT2_2(arg1, arg2) arg1##arg2 - #endif - - #define FUNCTION_NAME_STRING STRINGIZE (FUNCTION_NAME) -@@ -186,7 +188,8 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, L - if (NOT_USENSCD_NAME > 0 && ++NOT_USENSCD_NAME > NSS_NSCD_RETRY) - NOT_USENSCD_NAME = 0; - -- if (!NOT_USENSCD_NAME) -+ if (!NOT_USENSCD_NAME -+ && !__nss_database_custom[CONCAT2 (NSS_DBSIDX_, DATABASE_NAME)]) - { - nscd_status = NSCD_NAME (ADD_VARIABLES, resbuf, buffer, buflen, result - H_ERRNO_VAR); -diff -Nrup a/nss/getent.c b/nss/getent.c ---- a/nss/getent.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/nss/getent.c 2012-08-06 15:15:06.479427609 -0600 -@@ -466,7 +466,6 @@ static int - netgroup_keys (int number, char *key[]) - { - int result = 0; -- int i; - - if (number == 0) - { -@@ -474,18 +473,28 @@ netgroup_keys (int number, char *key[]) - return 3; - } - -- for (i = 0; i < number; ++i) -+ if (number == 4) - { -- if (!setnetgrent (key[i])) -+ char *host = strcmp (key[1], "*") == 0 ? NULL : key[1]; -+ char *user = strcmp (key[2], "*") == 0 ? NULL : key[2]; -+ char *domain = strcmp (key[3], "*") == 0 ? NULL : key[3]; -+ -+ printf ("%-21s (%s,%s,%s) = %d\n", -+ key[0], host ?: "", user ?: "", domain ?: "", -+ innetgr (key[0], host, user, domain)); -+ } -+ else if (number == 1) -+ { -+ if (!setnetgrent (key[0])) - result = 2; - else - { - char *p[3]; - -- printf ("%-21s", key[i]); -+ printf ("%-21s", key[0]); - - while (getnetgrent (p, p + 1, p + 2)) -- printf (" (%s, %s, %s)", p[0] ?: " ", p[1] ?: "", p[2] ?: ""); -+ printf (" (%s,%s,%s)", p[0] ?: " ", p[1] ?: "", p[2] ?: ""); - putchar_unlocked ('\n'); - } - } -diff -Nrup a/nss/nss_files/files-parse.c b/nss/nss_files/files-parse.c ---- a/nss/nss_files/files-parse.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/nss/nss_files/files-parse.c 2012-08-23 14:19:49.418441951 -0600 -@@ -1,5 +1,5 @@ - /* Common code for file-based database parsers in nss_files module. -- Copyright (C) 1996-2000, 2003, 2004, 2009 Free Software Foundation, Inc. -+ Copyright (C) 1996-2000,2003,2004,2009,2010 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or -@@ -29,7 +29,7 @@ - DATABASE -- string of the database file's name ("hosts", "passwd"). - - ENTDATA -- if defined, `struct ENTDATA' is used by the parser to store -- things pointed to by the resultant `struct STRUCTURE'. -+ things pointed to by the resultant `struct STRUCTURE'. - - NEED_H_ERRNO - defined iff an arg `int *herrnop' is used. - -@@ -229,7 +229,7 @@ strtou32 (const char *nptr, char **endpt - char **list = parse_list (&line, buf_start, buf_end, '\0', errnop); \ - if (list) \ - result->TRAILING_LIST_MEMBER = list; \ -- else \ -+ else \ - return -1; /* -1 indicates we ran out of space. */ \ - } - -diff -Nrup a/nss/nss_test1.c b/nss/nss_test1.c ---- a/nss/nss_test1.c 1969-12-31 17:00:00.000000000 -0700 -+++ b/nss/nss_test1.c 2012-08-23 14:19:49.418441951 -0600 -@@ -0,0 +1,154 @@ -+#include -+#include -+#include -+#include -+ -+ -+#define COPY_IF_ROOM(s) \ -+ ({ size_t len_ = strlen (s) + 1; \ -+ char *start_ = cp; \ -+ buflen - (cp - buffer) < len_ \ -+ ? NULL \ -+ : (cp = mempcpy (cp, s, len_), start_); }) -+ -+ -+/* Password handling. */ -+#include -+ -+static struct passwd pwd_data[] = -+ { -+#define PWD(u) \ -+ { .pw_name = (char *) "name" #u, .pw_passwd = (char *) "*", .pw_uid = u, \ -+ .pw_gid = 100, .pw_gecos = (char *) "*", .pw_dir = (char *) "*", \ -+ .pw_shell = (char *) "*" } -+ PWD (100), -+ PWD (30), -+ PWD (200), -+ PWD (60), -+ PWD (20000) -+ }; -+#define npwd_data (sizeof (pwd_data) / sizeof (pwd_data[0])) -+ -+static size_t pwd_iter; -+#define CURPWD pwd_data[pwd_iter] -+ -+static pthread_mutex_t pwd_lock = PTHREAD_MUTEX_INITIALIZER; -+ -+ -+enum nss_status -+_nss_test1_setpwent (int stayopen) -+{ -+ pwd_iter = 0; -+ return NSS_STATUS_SUCCESS; -+} -+ -+ -+enum nss_status -+_nss_test1_endpwent (void) -+{ -+ return NSS_STATUS_SUCCESS; -+} -+ -+ -+enum nss_status -+_nss_test1_getpwent_r (struct passwd *result, char *buffer, size_t buflen, -+ int *errnop) -+{ -+ char *cp = buffer; -+ int res = NSS_STATUS_SUCCESS; -+ -+ pthread_mutex_lock (&pwd_lock); -+ -+ if (pwd_iter >= npwd_data) -+ res = NSS_STATUS_NOTFOUND; -+ else -+ { -+ result->pw_name = COPY_IF_ROOM (CURPWD.pw_name); -+ result->pw_passwd = COPY_IF_ROOM (CURPWD.pw_passwd); -+ result->pw_uid = CURPWD.pw_uid; -+ result->pw_gid = CURPWD.pw_gid; -+ result->pw_gecos = COPY_IF_ROOM (CURPWD.pw_gecos); -+ result->pw_dir = COPY_IF_ROOM (CURPWD.pw_dir); -+ result->pw_shell = COPY_IF_ROOM (CURPWD.pw_shell); -+ -+ if (result->pw_name == NULL || result->pw_passwd == NULL -+ || result->pw_gecos == NULL || result->pw_dir == NULL -+ || result->pw_shell == NULL) -+ { -+ *errnop = ERANGE; -+ res = NSS_STATUS_TRYAGAIN; -+ } -+ -+ ++pwd_iter; -+ } -+ -+ pthread_mutex_unlock (&pwd_lock); -+ -+ return res; -+} -+ -+ -+enum nss_status -+_nss_test1_getpwuid_r (uid_t uid, struct passwd *result, char *buffer, -+ size_t buflen, int *errnop) -+{ -+ for (size_t idx = 0; idx < npwd_data; ++idx) -+ if (pwd_data[idx].pw_uid == uid) -+ { -+ char *cp = buffer; -+ int res = NSS_STATUS_SUCCESS; -+ -+ result->pw_name = COPY_IF_ROOM (pwd_data[idx].pw_name); -+ result->pw_passwd = COPY_IF_ROOM (pwd_data[idx].pw_passwd); -+ result->pw_uid = pwd_data[idx].pw_uid; -+ result->pw_gid = pwd_data[idx].pw_gid; -+ result->pw_gecos = COPY_IF_ROOM (pwd_data[idx].pw_gecos); -+ result->pw_dir = COPY_IF_ROOM (pwd_data[idx].pw_dir); -+ result->pw_shell = COPY_IF_ROOM (pwd_data[idx].pw_shell); -+ -+ if (result->pw_name == NULL || result->pw_passwd == NULL -+ || result->pw_gecos == NULL || result->pw_dir == NULL -+ || result->pw_shell == NULL) -+ { -+ *errnop = ERANGE; -+ res = NSS_STATUS_TRYAGAIN; -+ } -+ -+ return res; -+ } -+ -+ return NSS_STATUS_NOTFOUND; -+} -+ -+ -+enum nss_status -+_nss_test1_getpwnam_r (const char *name, struct passwd *result, char *buffer, -+ size_t buflen, int *errnop) -+{ -+ for (size_t idx = 0; idx < npwd_data; ++idx) -+ if (strcmp (pwd_data[idx].pw_name, name) == 0) -+ { -+ char *cp = buffer; -+ int res = NSS_STATUS_SUCCESS; -+ -+ result->pw_name = COPY_IF_ROOM (pwd_data[idx].pw_name); -+ result->pw_passwd = COPY_IF_ROOM (pwd_data[idx].pw_passwd); -+ result->pw_uid = pwd_data[idx].pw_uid; -+ result->pw_gid = pwd_data[idx].pw_gid; -+ result->pw_gecos = COPY_IF_ROOM (pwd_data[idx].pw_gecos); -+ result->pw_dir = COPY_IF_ROOM (pwd_data[idx].pw_dir); -+ result->pw_shell = COPY_IF_ROOM (pwd_data[idx].pw_shell); -+ -+ if (result->pw_name == NULL || result->pw_passwd == NULL -+ || result->pw_gecos == NULL || result->pw_dir == NULL -+ || result->pw_shell == NULL) -+ { -+ *errnop = ERANGE; -+ res = NSS_STATUS_TRYAGAIN; -+ } -+ -+ return res; -+ } -+ -+ return NSS_STATUS_NOTFOUND; -+} -diff -Nrup a/nss/nsswitch.c b/nss/nsswitch.c ---- a/nss/nsswitch.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/nss/nsswitch.c 2012-08-23 14:19:49.430441903 -0600 -@@ -1,4 +1,4 @@ --/* Copyright (C) 1996-1999, 2001-2007, 2009 Free Software Foundation, Inc. -+/* Copyright (C) 1996-1999,2001-2007,2009,2010 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - -@@ -71,6 +71,9 @@ static const struct - }; - #define ndatabases (sizeof (databases) / sizeof (databases[0])) - -+/* Flags whether custom rules for database is set. */ -+bool __nss_database_custom[NSS_DBSIDX_max]; -+ - - __libc_lock_define_initialized (static, lock) - -@@ -165,6 +168,7 @@ __nss_lookup (service_user **ni, const c - - return *fctp != NULL ? 0 : (*ni)->next == NULL ? 1 : -1; - } -+libc_hidden_def (__nss_lookup) - - - /* -1 == not found -@@ -265,6 +269,7 @@ __nss_configure_lookup (const char *dbna - - /* Install new rules. */ - *databases[cnt].dbp = new_db; -+ __nss_database_custom[cnt] = true; - - __libc_lock_unlock (lock); - -@@ -729,6 +734,7 @@ __nss_disable_nscd (void) - __nss_not_use_nscd_group = -1; - __nss_not_use_nscd_hosts = -1; - __nss_not_use_nscd_services = -1; -+ __nss_not_use_nscd_netgroup = -1; - } - - -diff -Nrup a/nss/nsswitch.h b/nss/nsswitch.h ---- a/nss/nsswitch.h 2010-05-04 05:27:23.000000000 -0600 -+++ b/nss/nsswitch.h 2012-08-23 14:19:49.431441899 -0600 -@@ -1,4 +1,4 @@ --/* Copyright (C) 1996-1999,2001,2002,2003,2004,2007 -+/* Copyright (C) 1996-1999,2001,2002,2003,2004,2007,2010 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - -@@ -28,6 +28,7 @@ - #include - #include - #include -+#include - - /* Actions performed after lookup finished. */ - typedef enum -@@ -96,6 +97,19 @@ typedef struct name_database - } name_database; - - -+/* Indices into DATABASES in nsswitch.c and __NSS_DATABASE_CUSTOM. */ -+enum -+ { -+#define DEFINE_DATABASE(arg) NSS_DBSIDX_##arg, -+#include "databases.def" -+#undef DEFINE_DATABASE -+ NSS_DBSIDX_max -+ }; -+ -+/* Flags whether custom rules for database is set. */ -+extern bool __nss_database_custom[NSS_DBSIDX_max]; -+ -+ - /* Interface functions for NSS. */ - - /* Get the data structure representing the specified database. -@@ -111,7 +125,8 @@ libc_hidden_proto (__nss_database_lookup - position is remembered in NI. The function returns a value < 0 if - an error occurred or no such function exists. */ - extern int __nss_lookup (service_user **ni, const char *fct_name, -- const char *fct2_name, void **fctp) attribute_hidden; -+ const char *fct2_name, void **fctp); -+libc_hidden_proto (__nss_lookup) - - /* Determine the next step in the lookup process according to the - result STATUS of the call to the last function returned by -diff -Nrup a/nss/tst-nss-test1.c b/nss/tst-nss-test1.c ---- a/nss/tst-nss-test1.c 1969-12-31 17:00:00.000000000 -0700 -+++ b/nss/tst-nss-test1.c 2012-08-23 14:19:49.432441895 -0600 -@@ -0,0 +1,72 @@ -+#include -+#include -+#include -+#include -+#include -+ -+ -+static int -+do_test (void) -+{ -+ int retval = 0; -+ -+ __nss_configure_lookup ("passwd", "test1"); -+ -+ static const unsigned int pwdids[] = { 100, 30, 200, 60, 20000 }; -+#define npwdids (sizeof (pwdids) / sizeof (pwdids[0])) -+ setpwent (); -+ -+ const unsigned int *np = pwdids; -+ for (struct passwd *p = getpwent (); p != NULL; ++np, p = getpwent ()) -+ if (p->pw_uid != *np || strncmp (p->pw_name, "name", 4) != 0 -+ || atol (p->pw_name + 4) != *np) -+ { -+ printf ("passwd entry %ju wrong (%s, %u)\n", -+ np - pwdids, p->pw_name, p->pw_uid); -+ retval = 1; -+ break; -+ } -+ -+ endpwent (); -+ -+ for (int i = npwdids - 1; i >= 0; --i) -+ { -+ char buf[30]; -+ snprintf (buf, sizeof (buf), "name%u", pwdids[i]); -+ -+ struct passwd *p = getpwnam (buf); -+ if (p == NULL || p->pw_uid != pwdids[i] || strcmp (buf, p->pw_name) != 0) -+ { -+ printf ("passwd entry \"%s\" wrong\n", buf); -+ retval = 1; -+ } -+ -+ p = getpwuid (pwdids[i]); -+ if (p == NULL || p->pw_uid != pwdids[i] || strcmp (buf, p->pw_name) != 0) -+ { -+ printf ("passwd entry %u wrong\n", pwdids[i]); -+ retval = 1; -+ } -+ -+ snprintf (buf, sizeof (buf), "name%u", pwdids[i] + 1); -+ -+ p = getpwnam (buf); -+ if (p != NULL) -+ { -+ printf ("passwd entry \"%s\" wrong\n", buf); -+ retval = 1; -+ } -+ -+ p = getpwuid (pwdids[i] + 1); -+ if (p != NULL) -+ { -+ printf ("passwd entry %u wrong\n", pwdids[i] + 1); -+ retval = 1; -+ } -+ } -+ -+ return retval; -+} -+ -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" -diff -Nrup a/shlib-versions b/shlib-versions ---- a/shlib-versions 2010-05-04 05:27:23.000000000 -0600 -+++ b/shlib-versions 2012-08-23 14:19:49.473441732 -0600 -@@ -114,6 +114,10 @@ alpha.*-.*-linux.* libresolv=2.1 - .*-.*-.* libnss_ldap=2 - .*-.*-.* libnss_hesiod=2 - -+# Tests for NSS. They must have the same NSS_SHLIB_REVISION number as -+# the rest. -+.*-.*-.* libnss_test1=2 -+ - # Version for libnsl with YP and NIS+ functions. - alpha.*-.*-linux.* libnsl=1.1 - .*-.*-.* libnsl=1 -diff -Nrup a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c ---- a/sysdeps/posix/getaddrinfo.c 2012-08-06 15:07:49.571057983 -0600 -+++ b/sysdeps/posix/getaddrinfo.c 2012-08-23 14:19:49.541441461 -0600 -@@ -669,7 +669,8 @@ gaih_inet (const char *name, const struc - && ++__nss_not_use_nscd_hosts > NSS_NSCD_RETRY) - __nss_not_use_nscd_hosts = 0; - -- if (!__nss_not_use_nscd_hosts) -+ if (!__nss_not_use_nscd_hosts -+ && !__nss_database_custom[NSS_DBSIDX_hosts]) - { - /* Try to use nscd. */ - struct nscd_ai_result *air = NULL; diff --git a/src/patches/glibc/glibc-rh630801.patch b/src/patches/glibc/glibc-rh630801.patch deleted file mode 100644 index 5bd3c66527..0000000000 --- a/src/patches/glibc/glibc-rh630801.patch +++ /dev/null @@ -1,29 +0,0 @@ -2010-05-26 H.J. Lu - - [BZ #11640] - * sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features): - Properly check family and model. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/init-arch.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c -@@ -62,15 +62,15 @@ __init_cpu_features (void) - unsigned int eax = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].eax; - unsigned int extended_family = (eax >> 20) & 0xff; - unsigned int extended_model = (eax >> 12) & 0xf0; -- if (__cpu_features.family == 0x0f) -+ if (family == 0x0f) - { - family += extended_family; - model += extended_model; - } -- else if (__cpu_features.family == 0x06) -+ else if (family == 0x06) - { - model += extended_model; -- switch (__cpu_features.model) -+ switch (model) - { - case 0x1a: - case 0x1e: diff --git a/src/patches/glibc/glibc-rh631011.patch b/src/patches/glibc/glibc-rh631011.patch deleted file mode 100644 index 42a1a56e47..0000000000 --- a/src/patches/glibc/glibc-rh631011.patch +++ /dev/null @@ -1,17 +0,0 @@ -2010-08-19 Andreas Schwab - - * sysdeps/i386/i686/multiarch/strspn.S [!SHARED]: Fix SSE4.2 check. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strspn.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/i386/i686/multiarch/strspn.S -+++ glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strspn.S -@@ -65,7 +65,7 @@ ENTRY(strspn) - jne 1f - call __init_cpu_features - 1: leal __strspn_ia32, %eax -- testl $index_SSE2, CPUID_OFFSET+index_SSE4_2+__cpu_features -+ testl $bit_SSE4_2, CPUID_OFFSET+index_SSE4_2+__cpu_features - jz 2f - leal __strspn_sse42, %eax - 2: ret diff --git a/src/patches/glibc/glibc-rh641128.patch b/src/patches/glibc/glibc-rh641128.patch deleted file mode 100644 index 52df4aee0c..0000000000 --- a/src/patches/glibc/glibc-rh641128.patch +++ /dev/null @@ -1,78 +0,0 @@ -2010-10-06 Ulrich Drepper - - * string/bug-strstr1.c: New file. - * string/Makefile: Add rules to build and run bug-strstr1. - -2010-10-05 Eric Blake - - [BZ #12092] - * string/str-two-way.h (two_way_long_needle): Always clear memory - when skipping input due to the shift table. - -Index: glibc-2.12-2-gc4ccff1/string/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/string/Makefile -+++ glibc-2.12-2-gc4ccff1/string/Makefile -@@ -54,7 +54,8 @@ tests := tester inl-tester noinl-tester - bug-strncat1 bug-strspn1 bug-strpbrk1 tst-bswap \ - tst-strtok tst-strxfrm bug-strcoll1 tst-strfry \ - bug-strtok1 $(addprefix test-,$(strop-tests)) \ -- bug-envz1 tst-strxfrm2 tst-endian tst-svc2 -+ bug-envz1 tst-strxfrm2 tst-endian tst-svc2 \ -+ bug-strstr1 - distribute := memcopy.h pagecopy.h tst-svc.expect test-string.h \ - str-two-way.h - -@@ -73,6 +74,7 @@ CFLAGS-tst-strlen.c = -fno-builtin - CFLAGS-stratcliff.c = -fno-builtin - CFLAGS-test-ffs.c = -fno-builtin - CFLAGS-tst-inlcall.c = -fno-builtin -+CFLAGS-bug-strstr1.c = -fno-builtin - - ifeq ($(cross-compiling),no) - tests: $(objpfx)tst-svc.out -Index: glibc-2.12-2-gc4ccff1/string/bug-strstr1.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/string/bug-strstr1.c -@@ -0,0 +1,26 @@ -+#include -+#include -+ -+int main (int argc, char** argv) -+{ -+ const char haystack[] = -+ "F_BD_CE_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_C3_88_20_EF_BF_BD_EF_BF_BD_EF_BF_BD_C3_A7_20_EF_BF_BD"; -+ -+ const char needle[] = -+ "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; -+ -+ const char* sub = strstr (haystack, needle); -+ -+ if (sub != NULL) -+ { -+ int j; -+ -+ fprintf (stderr, "BUG: expected NULL, got:\n%s\n%s\n", sub, needle); -+ for (j = 0; needle[j] != '\0'; ++j) -+ putchar (needle[j] == sub[j] ? ' ' : '^'); -+ puts (""); -+ return 1; -+ } -+ -+ return 0; -+} -Index: glibc-2.12-2-gc4ccff1/string/str-two-way.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/string/str-two-way.h -+++ glibc-2.12-2-gc4ccff1/string/str-two-way.h -@@ -350,8 +350,8 @@ two_way_long_needle (const unsigned char - a byte out of place, there can be no match until - after the mismatch. */ - shift = needle_len - period; -- memory = 0; - } -+ memory = 0; - j += shift; - continue; - } diff --git a/src/patches/glibc/glibc-rh642584.patch b/src/patches/glibc/glibc-rh642584.patch deleted file mode 100644 index 7fd390d3c7..0000000000 --- a/src/patches/glibc/glibc-rh642584.patch +++ /dev/null @@ -1,41 +0,0 @@ -2010-10-13 H.J. Lu - - [BZ #12113] - * sysdeps/x86_64/pthreaddef.h (TCB_ALIGNMENT): Changed to 32. - * sysdeps/x86_64/tls.h (TLS_TCB_ALIGN): Defined with alignment - of "struct pthread". - -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/x86_64/pthreaddef.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/x86_64/pthreaddef.h -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/x86_64/pthreaddef.h -@@ -27,8 +27,9 @@ - /* Minimal stack size after allocating thread descriptor and guard size. */ - #define MINIMAL_REST_STACK 2048 - --/* Alignment requirement for TCB. */ --#define TCB_ALIGNMENT 16 -+/* Alignment requirement for TCB. Need to store post-AVX vector registers -+ in the TCB and we want the storage to be aligned at 32-byte. */ -+#define TCB_ALIGNMENT 32 - - - /* Location of current stack frame. The frame pointer is not usable. */ -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/x86_64/tls.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/x86_64/tls.h -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/x86_64/tls.h -@@ -117,12 +117,7 @@ typedef struct - # define TLS_TCB_SIZE sizeof (struct pthread) - - /* Alignment requirements for the TCB. */ --//# define TLS_TCB_ALIGN __alignof__ (struct pthread) --// Normally the above would be correct But we have to store post-AVX --// vector registers in the TCB and we want the storage to be aligned. --// unfortunately there isn't yet a type for these values and hence no --// 32-byte alignment requirement. Make this explicit, for now. --# define TLS_TCB_ALIGN 32 -+# define TLS_TCB_ALIGN __alignof__ (struct pthread) - - /* The TCB can have any size and the memory following the address the - thread pointer points to is unspecified. Allocate the TCB there. */ diff --git a/src/patches/glibc/glibc-rh643822.patch b/src/patches/glibc/glibc-rh643822.patch deleted file mode 100644 index c32c1fea18..0000000000 --- a/src/patches/glibc/glibc-rh643822.patch +++ /dev/null @@ -1,64 +0,0 @@ -2010-12-09 Andreas Schwab - - * elf/dl-object.c (_dl_new_object): Ignore origin of privileged - program. - -2010-10-18 Andreas Schwab - - * elf/dl-open.c (dl_open_worker): Don't expand DST here, let - _dl_map_object do it. - -Index: glibc-2.12-2-gc4ccff1/elf/dl-object.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-object.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-object.c -@@ -214,6 +214,9 @@ _dl_new_object (char *realname, const ch - out: - new->l_origin = origin; - } -+ else if (INTUSE(__libc_enable_secure) && type == lt_executable) -+ /* The origin of a privileged program cannot be trusted. */ -+ new->l_origin = (char *) -1; - - return new; - } -Index: glibc-2.12-2-gc4ccff1/elf/dl-open.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-open.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-open.c -@@ -221,35 +221,6 @@ dl_open_worker (void *a) - - assert (_dl_debug_initialize (0, args->nsid)->r_state == RT_CONSISTENT); - -- /* Maybe we have to expand a DST. */ -- if (__builtin_expect (dst != NULL, 0)) -- { -- size_t len = strlen (file); -- -- /* Determine how much space we need. We have to allocate the -- memory locally. */ -- size_t required = DL_DST_REQUIRED (call_map, file, len, -- _dl_dst_count (dst, 0)); -- -- /* Get space for the new file name. */ -- char *new_file = (char *) alloca (required + 1); -- -- /* Generate the new file name. */ -- _dl_dst_substitute (call_map, file, new_file, 0); -- -- /* If the substitution failed don't try to load. */ -- if (*new_file == '\0') -- _dl_signal_error (0, "dlopen", NULL, -- N_("empty dynamic string token substitution")); -- -- /* Now we have a new file name. */ -- file = new_file; -- -- /* It does not matter whether call_map is set even if we -- computed it only because of the DST. Since the path contains -- a slash the value is not used. See dl-load.c. */ -- } -- - /* Load the named object. */ - struct link_map *new; - args->map = new = _dl_map_object (call_map, file, 0, lt_loaded, 0, diff --git a/src/patches/glibc/glibc-rh645672.patch b/src/patches/glibc/glibc-rh645672.patch deleted file mode 100644 index 644614ed6e..0000000000 --- a/src/patches/glibc/glibc-rh645672.patch +++ /dev/null @@ -1,215 +0,0 @@ -2010-10-22 Andreas Schwab - - * include/dlfcn.h (__RTLD_SECURE): Define. - * elf/dl-load.c (_dl_map_object): Remove preloaded parameter. Use - mode & __RTLD_SECURE instead. - (open_path): Remove preloaded parameter to secure. - * sysdeps/generic/ldsodefs.h (_dl_map_object): Adjust declaration. - * elf/dl-open.c (dl_open_worker): Adjust call to _dl_map_object. - * elf/dl-deps.c (openaux): Likewise. - * elf/rtld.c (struct map_args): Remove is_preloaded. - (map_doit): Don't use it. - (dl_main): Likewise. - (do_preload): Use __RTLD_SECURE instead of is_preloaded. - (dlmopen_doit): Add __RTLD_SECURE to mode bits. - -Index: glibc-2.12-2-gc4ccff1/elf/dl-deps.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-deps.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-deps.c -@@ -62,7 +62,7 @@ openaux (void *a) - { - struct openaux_args *args = (struct openaux_args *) a; - -- args->aux = _dl_map_object (args->map, args->name, 0, -+ args->aux = _dl_map_object (args->map, args->name, - (args->map->l_type == lt_executable - ? lt_library : args->map->l_type), - args->trace_mode, args->open_mode, -Index: glibc-2.12-2-gc4ccff1/elf/dl-load.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-load.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-load.c -@@ -1811,7 +1811,7 @@ open_verify (const char *name, struct fi - if MAY_FREE_DIRS is true. */ - - static int --open_path (const char *name, size_t namelen, int preloaded, -+open_path (const char *name, size_t namelen, int secure, - struct r_search_path_struct *sps, char **realname, - struct filebuf *fbp, struct link_map *loader, int whatcode, - bool *found_other_class) -@@ -1893,7 +1893,7 @@ open_path (const char *name, size_t name - /* Remember whether we found any existing directory. */ - here_any |= this_dir->status[cnt] != nonexisting; - -- if (fd != -1 && __builtin_expect (preloaded, 0) -+ if (fd != -1 && __builtin_expect (secure, 0) - && INTUSE(__libc_enable_secure)) - { - /* This is an extra security effort to make sure nobody can -@@ -1962,7 +1962,7 @@ open_path (const char *name, size_t name - - struct link_map * - internal_function --_dl_map_object (struct link_map *loader, const char *name, int preloaded, -+_dl_map_object (struct link_map *loader, const char *name, - int type, int trace_mode, int mode, Lmid_t nsid) - { - int fd; -@@ -2066,7 +2066,8 @@ _dl_map_object (struct link_map *loader, - for (l = loader; l; l = l->l_loader) - if (cache_rpath (l, &l->l_rpath_dirs, DT_RPATH, "RPATH")) - { -- fd = open_path (name, namelen, preloaded, &l->l_rpath_dirs, -+ fd = open_path (name, namelen, mode & __RTLD_SECURE, -+ &l->l_rpath_dirs, - &realname, &fb, loader, LA_SER_RUNPATH, - &found_other_class); - if (fd != -1) -@@ -2081,14 +2082,15 @@ _dl_map_object (struct link_map *loader, - && main_map != NULL && main_map->l_type != lt_loaded - && cache_rpath (main_map, &main_map->l_rpath_dirs, DT_RPATH, - "RPATH")) -- fd = open_path (name, namelen, preloaded, &main_map->l_rpath_dirs, -+ fd = open_path (name, namelen, mode & __RTLD_SECURE, -+ &main_map->l_rpath_dirs, - &realname, &fb, loader ?: main_map, LA_SER_RUNPATH, - &found_other_class); - } - - /* Try the LD_LIBRARY_PATH environment variable. */ - if (fd == -1 && env_path_list.dirs != (void *) -1) -- fd = open_path (name, namelen, preloaded, &env_path_list, -+ fd = open_path (name, namelen, mode & __RTLD_SECURE, &env_path_list, - &realname, &fb, - loader ?: GL(dl_ns)[LM_ID_BASE]._ns_loaded, - LA_SER_LIBPATH, &found_other_class); -@@ -2097,12 +2099,12 @@ _dl_map_object (struct link_map *loader, - if (fd == -1 && loader != NULL - && cache_rpath (loader, &loader->l_runpath_dirs, - DT_RUNPATH, "RUNPATH")) -- fd = open_path (name, namelen, preloaded, -+ fd = open_path (name, namelen, mode & __RTLD_SECURE, - &loader->l_runpath_dirs, &realname, &fb, loader, - LA_SER_RUNPATH, &found_other_class); - - if (fd == -1 -- && (__builtin_expect (! preloaded, 1) -+ && (__builtin_expect (! (mode & __RTLD_SECURE), 1) - || ! INTUSE(__libc_enable_secure))) - { - /* Check the list of libraries in the file /etc/ld.so.cache, -@@ -2168,7 +2170,7 @@ _dl_map_object (struct link_map *loader, - && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL - || __builtin_expect (!(l->l_flags_1 & DF_1_NODEFLIB), 1)) - && rtld_search_dirs.dirs != (void *) -1) -- fd = open_path (name, namelen, preloaded, &rtld_search_dirs, -+ fd = open_path (name, namelen, mode & __RTLD_SECURE, &rtld_search_dirs, - &realname, &fb, l, LA_SER_DEFAULT, &found_other_class); - - /* Add another newline when we are tracing the library loading. */ -Index: glibc-2.12-2-gc4ccff1/elf/dl-open.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-open.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-open.c -@@ -252,7 +252,7 @@ dl_open_worker (void *a) - - /* Load the named object. */ - struct link_map *new; -- args->map = new = _dl_map_object (call_map, file, 0, lt_loaded, 0, -+ args->map = new = _dl_map_object (call_map, file, lt_loaded, 0, - mode | __RTLD_CALLMAP, args->nsid); - - /* If the pointer returned is NULL this means the RTLD_NOLOAD flag is -Index: glibc-2.12-2-gc4ccff1/elf/rtld.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/rtld.c -+++ glibc-2.12-2-gc4ccff1/elf/rtld.c -@@ -589,7 +589,6 @@ struct map_args - /* Argument to map_doit. */ - char *str; - struct link_map *loader; -- int is_preloaded; - int mode; - /* Return value of map_doit. */ - struct link_map *map; -@@ -627,16 +626,17 @@ static void - map_doit (void *a) - { - struct map_args *args = (struct map_args *) a; -- args->map = _dl_map_object (args->loader, args->str, -- args->is_preloaded, lt_library, 0, args->mode, -- LM_ID_BASE); -+ args->map = _dl_map_object (args->loader, args->str, lt_library, 0, -+ args->mode, LM_ID_BASE); - } - - static void - dlmopen_doit (void *a) - { - struct dlmopen_args *args = (struct dlmopen_args *) a; -- args->map = _dl_open (args->fname, RTLD_LAZY | __RTLD_DLOPEN | __RTLD_AUDIT, -+ args->map = _dl_open (args->fname, -+ (RTLD_LAZY | __RTLD_DLOPEN | __RTLD_AUDIT -+ | __RTLD_SECURE), - dl_main, LM_ID_NEWLM, _dl_argc, INTUSE(_dl_argv), - __environ); - } -@@ -806,8 +806,7 @@ do_preload (char *fname, struct link_map - - args.str = fname; - args.loader = main_map; -- args.is_preloaded = 1; -- args.mode = 0; -+ args.mode = __RTLD_SECURE; - - unsigned int old_nloaded = GL(dl_ns)[LM_ID_BASE]._ns_nloaded; - -@@ -1054,7 +1053,6 @@ of this helper program; chances are you - - args.str = rtld_progname; - args.loader = NULL; -- args.is_preloaded = 0; - args.mode = __RTLD_OPENEXEC; - (void) _dl_catch_error (&objname, &err_str, &malloced, map_doit, - &args); -@@ -1066,7 +1064,7 @@ of this helper program; chances are you - else - { - HP_TIMING_NOW (start); -- _dl_map_object (NULL, rtld_progname, 0, lt_library, 0, -+ _dl_map_object (NULL, rtld_progname, lt_library, 0, - __RTLD_OPENEXEC, LM_ID_BASE); - HP_TIMING_NOW (stop); - -Index: glibc-2.12-2-gc4ccff1/include/dlfcn.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/include/dlfcn.h -+++ glibc-2.12-2-gc4ccff1/include/dlfcn.h -@@ -9,6 +9,7 @@ - #define __RTLD_OPENEXEC 0x20000000 - #define __RTLD_CALLMAP 0x10000000 - #define __RTLD_AUDIT 0x08000000 -+#define __RTLD_SECURE 0x04000000 /* Apply additional security checks. */ - - #define __LM_ID_CALLER -2 - -Index: glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/generic/ldsodefs.h -+++ glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h -@@ -824,11 +824,9 @@ extern void _dl_receive_error (receiver_ - - /* Open the shared object NAME and map in its segments. - LOADER's DT_RPATH is used in searching for NAME. -- If the object is already opened, returns its existing map. -- For preloaded shared objects PRELOADED is set to a non-zero -- value to allow additional security checks. */ -+ If the object is already opened, returns its existing map. */ - extern struct link_map *_dl_map_object (struct link_map *loader, -- const char *name, int preloaded, -+ const char *name, - int type, int trace_mode, int mode, - Lmid_t nsid) - internal_function attribute_hidden; diff --git a/src/patches/glibc/glibc-rh646954.patch b/src/patches/glibc/glibc-rh646954.patch deleted file mode 100644 index bbb959e5a0..0000000000 --- a/src/patches/glibc/glibc-rh646954.patch +++ /dev/null @@ -1,216 +0,0 @@ -2010-10-26 Ulrich Drepper - - * elf/rtld.c (dl_main): Move assertion after the point where rtld map - is added to the list. - -2010-10-20 Andreas Krebbel - Ulrich Drepper - - * elf/dl-object.c (_dl_new_object): Don't append the new object to - the global list here. Move code to... - (_dl_add_to_namespace_list): ...here. New function. - * elf/rtld.c (dl_main): Invoke _dl_add_to_namespace_list. - * sysdeps/generic/ldsodefs.h (_dl_add_to_namespace_list): Declare. - * elf/dl-load.c (lose): Don't remove the element from the list. - (_dl_map_object_from_fd): Invoke _dl_add_to_namespace_list. - (_dl_map_object): Likewise. - -Index: glibc-2.12-2-gc4ccff1/elf/dl-load.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-load.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-load.c -@@ -797,22 +797,7 @@ lose (int code, int fd, const char *name - /* The file might already be closed. */ - if (fd != -1) - (void) __close (fd); -- if (l != NULL) -- { -- /* We modify the list of loaded objects. */ -- __rtld_lock_lock_recursive (GL(dl_load_write_lock)); -- /* Remove the stillborn object from the list and free it. */ -- assert (l->l_next == NULL); -- if (l->l_prev == NULL) -- /* No other module loaded. This happens only in the static library, -- or in rtld under --verify. */ -- GL(dl_ns)[l->l_ns]._ns_loaded = NULL; -- else -- l->l_prev->l_next = NULL; -- --GL(dl_ns)[l->l_ns]._ns_nloaded; -- free (l); -- __rtld_lock_unlock_recursive (GL(dl_load_write_lock)); -- } -+ free (l); - free (realname); - - if (r != NULL) -@@ -897,6 +882,9 @@ _dl_map_object_from_fd (const char *name - never be unloaded. */ - __close (fd); - -+ /* Add the map for the mirrored object to the object list. */ -+ _dl_add_to_namespace_list (l, nsid); -+ - return l; - } - #endif -@@ -1491,6 +1479,9 @@ cannot enable executable stack as shared - add_name_to_object (l, ((const char *) D_PTR (l, l_info[DT_STRTAB]) - + l->l_info[DT_SONAME]->d_un.d_val)); - -+ /* Now that the object is fully initialized add it to the object list. */ -+ _dl_add_to_namespace_list (l, nsid); -+ - #ifdef SHARED - /* Auditing checkpoint: we have a new object. */ - if (__builtin_expect (GLRO(dl_naudit) > 0, 0) -@@ -2215,7 +2206,7 @@ _dl_map_object (struct link_map *loader, - have. */ - static const Elf_Symndx dummy_bucket = STN_UNDEF; - -- /* Enter the new object in the list of loaded objects. */ -+ /* Allocate a new object map. */ - if ((name_copy = local_strdup (name)) == NULL - || (l = _dl_new_object (name_copy, name, type, loader, - mode, nsid)) == NULL) -@@ -2233,6 +2224,9 @@ _dl_map_object (struct link_map *loader, - l->l_nbuckets = 1; - l->l_relocated = 1; - -+ /* Enter the object in the object list. */ -+ _dl_add_to_namespace_list (l, nsid); -+ - return l; - } - else if (found_other_class) -Index: glibc-2.12-2-gc4ccff1/elf/dl-object.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-object.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-object.c -@@ -26,16 +26,41 @@ - #include - - -+/* Add the new link_map NEW to the end of the namespace list. */ -+void -+internal_function -+_dl_add_to_namespace_list (struct link_map *new, Lmid_t nsid) -+{ -+ /* We modify the list of loaded objects. */ -+ __rtld_lock_lock_recursive (GL(dl_load_write_lock)); -+ -+ if (GL(dl_ns)[nsid]._ns_loaded != NULL) -+ { -+ struct link_map *l = GL(dl_ns)[nsid]._ns_loaded; -+ while (l->l_next != NULL) -+ l = l->l_next; -+ new->l_prev = l; -+ /* new->l_next = NULL; Would be necessary but we use calloc. */ -+ l->l_next = new; -+ } -+ else -+ GL(dl_ns)[nsid]._ns_loaded = new; -+ ++GL(dl_ns)[nsid]._ns_nloaded; -+ new->l_serial = GL(dl_load_adds); -+ ++GL(dl_load_adds); -+ -+ __rtld_lock_unlock_recursive (GL(dl_load_write_lock)); -+} -+ -+ - /* Allocate a `struct link_map' for a new object being loaded, - and enter it into the _dl_loaded list. */ -- - struct link_map * - internal_function - _dl_new_object (char *realname, const char *libname, int type, - struct link_map *loader, int mode, Lmid_t nsid) - { - struct link_map *l; -- int idx; - size_t libname_len = strlen (libname) + 1; - struct link_map *new; - struct libname_list *newname; -@@ -93,31 +118,12 @@ _dl_new_object (char *realname, const ch - new->l_scope = new->l_scope_mem; - new->l_scope_max = sizeof (new->l_scope_mem) / sizeof (new->l_scope_mem[0]); - -- /* We modify the list of loaded objects. */ -- __rtld_lock_lock_recursive (GL(dl_load_write_lock)); -- - /* Counter for the scopes we have to handle. */ -- idx = 0; -+ int idx = 0; - - if (GL(dl_ns)[nsid]._ns_loaded != NULL) -- { -- l = GL(dl_ns)[nsid]._ns_loaded; -- while (l->l_next != NULL) -- l = l->l_next; -- new->l_prev = l; -- /* new->l_next = NULL; Would be necessary but we use calloc. */ -- l->l_next = new; -- -- /* Add the global scope. */ -- new->l_scope[idx++] = &GL(dl_ns)[nsid]._ns_loaded->l_searchlist; -- } -- else -- GL(dl_ns)[nsid]._ns_loaded = new; -- ++GL(dl_ns)[nsid]._ns_nloaded; -- new->l_serial = GL(dl_load_adds); -- ++GL(dl_load_adds); -- -- __rtld_lock_unlock_recursive (GL(dl_load_write_lock)); -+ /* Add the global scope. */ -+ new->l_scope[idx++] = &GL(dl_ns)[nsid]._ns_loaded->l_searchlist; - - /* If we have no loader the new object acts as it. */ - if (loader == NULL) -Index: glibc-2.12-2-gc4ccff1/elf/rtld.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/rtld.c -+++ glibc-2.12-2-gc4ccff1/elf/rtld.c -@@ -1108,11 +1108,15 @@ of this helper program; chances are you - main_map = _dl_new_object ((char *) "", "", lt_executable, NULL, - __RTLD_OPENEXEC, LM_ID_BASE); - assert (main_map != NULL); -- assert (main_map == GL(dl_ns)[LM_ID_BASE]._ns_loaded); - main_map->l_phdr = phdr; - main_map->l_phnum = phnum; - main_map->l_entry = *user_entry; - -+ /* Even though the link map is not yet fully initialized we can add -+ it to the map list since there are no possible users running yet. */ -+ _dl_add_to_namespace_list (main_map, LM_ID_BASE); -+ assert (main_map == GL(dl_ns)[LM_ID_BASE]._ns_loaded); -+ - /* At this point we are in a bit of trouble. We would have to - fill in the values for l_dev and l_ino. But in general we - do not know where the file is. We also do not handle AT_EXECFD -@@ -1380,6 +1384,9 @@ of this helper program; chances are you - l->l_libname->name = memcpy (copy, dsoname, len); - } - -+ /* Add the vDSO to the object list. */ -+ _dl_add_to_namespace_list (l, LM_ID_BASE); -+ - /* Rearrange the list so this DSO appears after rtld_map. */ - assert (l->l_next == NULL); - assert (l->l_prev == main_map); -Index: glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/generic/ldsodefs.h -+++ glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h -@@ -891,8 +891,11 @@ extern lookup_t _dl_lookup_symbol_x (con - extern ElfW(Addr) _dl_symbol_value (struct link_map *map, const char *name) - internal_function; - --/* Allocate a `struct link_map' for a new object being loaded, -- and enter it into the _dl_main_map list. */ -+/* Add the new link_map NEW to the end of the namespace list. */ -+extern void _dl_add_to_namespace_list (struct link_map *new, Lmid_t nsid) -+ internal_function attribute_hidden; -+ -+/* Allocate a `struct link_map' for a new object being loaded. */ - extern struct link_map *_dl_new_object (char *realname, const char *libname, - int type, struct link_map *loader, - int mode, Lmid_t nsid) diff --git a/src/patches/glibc/glibc-rh647448.patch b/src/patches/glibc/glibc-rh647448.patch deleted file mode 100644 index ff5594560b..0000000000 --- a/src/patches/glibc/glibc-rh647448.patch +++ /dev/null @@ -1,58 +0,0 @@ -2010-10-25 Ulrich Drepper - - [BZ #12159] - * sysdeps/x86_64/multiarch/strchr.S: Fix propagation of search byte - into all bytes of SSE register. - Patch by Richard Li . - -Index: glibc-2.12-2-gc4ccff1/string/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/string/Makefile -+++ glibc-2.12-2-gc4ccff1/string/Makefile -@@ -55,7 +55,7 @@ tests := tester inl-tester noinl-tester - tst-strtok tst-strxfrm bug-strcoll1 tst-strfry \ - bug-strtok1 $(addprefix test-,$(strop-tests)) \ - bug-envz1 tst-strxfrm2 tst-endian tst-svc2 \ -- bug-strstr1 -+ bug-strstr1 bug-strchr1 - distribute := memcopy.h pagecopy.h tst-svc.expect test-string.h \ - str-two-way.h - -Index: glibc-2.12-2-gc4ccff1/string/bug-strchr1.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/string/bug-strchr1.c -@@ -0,0 +1,14 @@ -+#include -+#include -+ -+static int -+do_test (void) -+{ -+ char s[] __attribute__((aligned(16))) = "\xff"; -+ char *p = strchr (s, '\xfe'); -+ printf ("%p\n", p); -+ return p != NULL; -+} -+ -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strchr.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/strchr.S -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strchr.S -@@ -87,13 +87,13 @@ __strchr_sse42: - pxor %xmm2, %xmm2 - movd %esi, %xmm1 - movl %edi, %ecx -+ pshufb %xmm2, %xmm1 - andl $15, %ecx - movq %rdi, %r8 - je L(aligned_start) - - /* Handle unaligned string. */ - andq $-16, %r8 -- pshufb %xmm2, %xmm1 - movdqa (%r8), %xmm0 - pcmpeqb %xmm0, %xmm2 - pcmpeqb %xmm1, %xmm0 diff --git a/src/patches/glibc/glibc-rh652661.patch b/src/patches/glibc/glibc-rh652661.patch deleted file mode 100644 index 79a3212a7b..0000000000 --- a/src/patches/glibc/glibc-rh652661.patch +++ /dev/null @@ -1,21 +0,0 @@ -2010-05-20 Andreas Schwab - - * sysdeps/unix/sysv/linux/sys/timex.h: Use __REDIRECT_NTH. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/sys/timex.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/sys/timex.h -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/sys/timex.h -@@ -140,9 +140,9 @@ __BEGIN_DECLS - extern int __adjtimex (struct timex *__ntx) __THROW; - extern int adjtimex (struct timex *__ntx) __THROW; - --#if defined __GNUC__ && __GNUC__ >= 2 --extern int ntp_gettime (struct ntptimeval *__ntv) -- __asm__ ("ntp_gettimex") __THROW; -+#ifdef __REDIRECT_NTH -+extern int __REDIRECT_NTH (ntp_gettime, (struct ntptimeval *__ntv), -+ ntp_gettimex); - #else - extern int ntp_gettimex (struct ntptimeval *__ntv) __THROW; - # define ntp_gettime ntp_gettimex diff --git a/src/patches/glibc/glibc-rh656014.patch b/src/patches/glibc/glibc-rh656014.patch deleted file mode 100644 index 5ef68dcbf5..0000000000 --- a/src/patches/glibc/glibc-rh656014.patch +++ /dev/null @@ -1,45 +0,0 @@ -2010-11-24 Andreas Schwab - - * resolv/nss_dns/dns-host.c (getanswer_r): Don't handle ttl == 0 - specially. - (gaih_getanswer_slice): Likewise. - -Index: glibc-2.12-2-gc4ccff1/resolv/nss_dns/dns-host.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/resolv/nss_dns/dns-host.c -+++ glibc-2.12-2-gc4ccff1/resolv/nss_dns/dns-host.c -@@ -599,7 +599,6 @@ getanswer_r (const querybuf *answer, int - int (*name_ok) (const char *); - u_char packtmp[NS_MAXCDNAME]; - int have_to_map = 0; -- int32_t ttl = 0; - uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct host_data); - buffer += pad; - if (__builtin_expect (buflen < sizeof (struct host_data) + pad, 0)) -@@ -733,7 +732,7 @@ getanswer_r (const querybuf *answer, int - cp += INT16SZ; /* type */ - class = __ns_get16 (cp); - cp += INT16SZ; /* class */ -- ttl = __ns_get32 (cp); -+ int32_t ttl = __ns_get32 (cp); - cp += INT32SZ; /* TTL */ - n = __ns_get16 (cp); - cp += INT16SZ; /* len */ -@@ -907,7 +906,7 @@ getanswer_r (const querybuf *answer, int - { - register int nn; - -- if (ttlp != NULL && ttl != 0) -+ if (ttlp != NULL) - *ttlp = ttl; - if (canonp != NULL) - *canonp = bp; -@@ -1163,7 +1162,7 @@ gaih_getanswer_slice (const querybuf *an - - if (*firstp) - { -- if (ttl != 0 && ttlp != NULL) -+ if (ttlp != NULL) - *ttlp = ttl; - - (*pat)->name = canon ?: h_name; diff --git a/src/patches/glibc/glibc-rh656530.patch b/src/patches/glibc/glibc-rh656530.patch deleted file mode 100644 index f101430690..0000000000 --- a/src/patches/glibc/glibc-rh656530.patch +++ /dev/null @@ -1,21 +0,0 @@ -2010-11-10 Luis Machado - - * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c (__ieee754_sqrtl): Force - signed comparison. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c -@@ -73,9 +73,9 @@ long double __ieee754_sqrtl(long double - m = ((a.i[2] >> 20) & 0x7ff) - 54; - } - m += n; -- if (m > 0) -+ if ((int) m > 0) - a.i[2] = (a.i[2] & 0x800fffff) | (m << 20); -- else if (m <= -54) { -+ else if ((int) m <= -54) { - a.i[2] &= 0x80000000; - a.i[3] = 0; - } else { diff --git a/src/patches/glibc/glibc-rh657572.patch b/src/patches/glibc/glibc-rh657572.patch deleted file mode 100644 index a7201309d0..0000000000 --- a/src/patches/glibc/glibc-rh657572.patch +++ /dev/null @@ -1,141 +0,0 @@ -commit 42c5011242e48f846111237552d3bf3ca18c4885 -Author: Ulrich Drepper -Date: Fri Dec 23 09:51:10 2011 -0500 - - Various fixes to fi_FI - - 2011-12-23 Ulrich Drepper - - [BZ #12962] - * locales/fi_FI: Various fixups. - Patch by Marko Myllynen . - -diff --git a/localedata/locales/fi_FI b/localedata/locales/fi_FI -index acc9ce6..f51700c 100644 ---- a/localedata/locales/fi_FI -+++ b/localedata/locales/fi_FI -@@ -1,4 +1,4 @@ --escape_char / -+escape_char / - comment_char % - - % Finnish language locale for Finland -@@ -45,10 +45,10 @@ category "fi_FI:2000";LC_NUMERIC - category "fi_FI:2000";LC_MONETARY - category "fi_FI:2000";LC_MESSAGES - category "fi_FI:2000";LC_PAPER -+category "fi_FI:2000";LC_MEASUREMENT - category "fi_FI:2000";LC_NAME - category "fi_FI:2000";LC_ADDRESS - category "fi_FI:2000";LC_TELEPHONE -- - END LC_IDENTIFICATION - - LC_COLLATE -@@ -125,7 +125,6 @@ reorder-after - ;;;IGNORE - - reorder-end -- - END LC_COLLATE - - LC_CTYPE -@@ -146,12 +145,10 @@ positive_sign "" - negative_sign "" - int_frac_digits 2 - frac_digits 2 --% int_curr_symbol precedes --% curr_symbol succeeds - p_cs_precedes 0 --p_sep_by_space 2 -+p_sep_by_space 1 - n_cs_precedes 0 --n_sep_by_space 2 -+n_sep_by_space 1 - p_sign_posn 1 - n_sign_posn 1 - END LC_MONETARY -@@ -173,18 +170,18 @@ day "";/ - "";/ - "";/ - "" --abmon "";/ -- "";/ -+abmon "";/ -+ "";/ - "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ - "";/ -- "" -+ "" - mon "";/ - "";/ - "";/ -@@ -207,13 +204,14 @@ t_fmt_ampm "" - date_fmt "/ - / - " -+week 7;19971130;4 - first_weekday 2 % Monday - first_workday 2 % Monday - END LC_TIME - - LC_MESSAGES --yesexpr "" --noexpr "" -+yesexpr "" -+noexpr "" - END LC_MESSAGES - - LC_PAPER -@@ -222,6 +220,7 @@ width 210 - END LC_PAPER - - LC_TELEPHONE -+tel_dom_fmt "" - tel_int_fmt "/ - " - int_prefix "" -@@ -235,15 +234,25 @@ END LC_MEASUREMENT - LC_NAME - name_fmt "/ - " -+% Finnish equivalents for Mr/Mrs/Miss/Ms are herra/rouva/rouva/neiti -+% but they are practically never used, thus we don't define them here. - END LC_NAME - - LC_ADDRESS --postal_fmt "/ --/ --/ --/ -+postal_fmt "/ -+/ -+/ -+/ - " - country_ab2 "" - country_ab3 "" - country_num 246 -+country_name "" -+country_post "" -+country_car "" -+country_isbn 952 -+lang_name "" -+lang_ab "" -+lang_term "" -+lang_lib "" - END LC_ADDRESS diff --git a/src/patches/glibc/glibc-rh661982.patch b/src/patches/glibc/glibc-rh661982.patch deleted file mode 100644 index 60b840bb8f..0000000000 --- a/src/patches/glibc/glibc-rh661982.patch +++ /dev/null @@ -1,188 +0,0 @@ -2010-12-10 Andreas Schwab - - * wcsmbs/wchar.h (wcpcpy, wcpncpy): Only declare under - _GNU_SOURCE. - -2010-12-10 Andreas Schwab - - * wcsmbs/wchar.h (wcpcpy, wcpncpy): Add __restrict. - * wcsmbs/bits/wchar2.h (__wmemmove_chk_warn, wmemmove, wmemset): - Remove __restrict. - (wcscpy, __wcpcpy_chk, __wcpcpy_alias, wcpcpy, wcsncpy, wcpncpy) - (wcscat, wcsncat, __wcrtomb_chk, wcrtomb): Add __restrict. - -2010-12-09 Jakub Jelinek - - * string/bits/string3.h (memmove, bcopy): Remove __restrict. - -Index: glibc-2.12-2-gc4ccff1/string/bits/string3.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/string/bits/string3.h -+++ glibc-2.12-2-gc4ccff1/string/bits/string3.h -@@ -53,8 +53,7 @@ __NTH (memcpy (void *__restrict __dest, - } - - __extern_always_inline void * --__NTH (memmove (void *__restrict __dest, __const void *__restrict __src, -- size_t __len)) -+__NTH (memmove (void *__dest, __const void *__src, size_t __len)) - { - return __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest)); - } -@@ -88,8 +87,7 @@ __NTH (memset (void *__dest, int __ch, s - - #ifdef __USE_BSD - __extern_always_inline void --__NTH (bcopy (__const void *__restrict __src, void *__restrict __dest, -- size_t __len)) -+__NTH (bcopy (__const void *__src, void *__dest, size_t __len)) - { - (void) __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest)); - } -Index: glibc-2.12-2-gc4ccff1/wcsmbs/bits/wchar2.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/wcsmbs/bits/wchar2.h -+++ glibc-2.12-2-gc4ccff1/wcsmbs/bits/wchar2.h -@@ -60,15 +60,13 @@ extern wchar_t *__REDIRECT_NTH (__wmemmo - __const wchar_t *__s2, - size_t __n), wmemmove); - extern wchar_t *__REDIRECT_NTH (__wmemmove_chk_warn, -- (wchar_t *__restrict __s1, -- __const wchar_t *__restrict __s2, size_t __n, -- size_t __ns1), __wmemmove_chk) -+ (wchar_t *__s1, __const wchar_t *__s2, -+ size_t __n, size_t __ns1), __wmemmove_chk) - __warnattr ("wmemmove called with length bigger than size of destination " - "buffer"); - - __extern_always_inline wchar_t * --__NTH (wmemmove (wchar_t *__restrict __s1, __const wchar_t *__restrict __s2, -- size_t __n)) -+__NTH (wmemmove (wchar_t *__s1, __const wchar_t *__s2, size_t __n)) - { - if (__bos0 (__s1) != (size_t) -1) - { -@@ -129,7 +127,7 @@ extern wchar_t *__REDIRECT_NTH (__wmemse - "buffer"); - - __extern_always_inline wchar_t * --__NTH (wmemset (wchar_t *__restrict __s, wchar_t __c, size_t __n)) -+__NTH (wmemset (wchar_t *__s, wchar_t __c, size_t __n)) - { - if (__bos0 (__s) != (size_t) -1) - { -@@ -152,7 +150,7 @@ extern wchar_t *__REDIRECT_NTH (__wcscpy - __const wchar_t *__restrict __src), wcscpy); - - __extern_always_inline wchar_t * --__NTH (wcscpy (wchar_t *__dest, __const wchar_t *__src)) -+__NTH (wcscpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src)) - { - if (__bos (__dest) != (size_t) -1) - return __wcscpy_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t)); -@@ -160,14 +158,15 @@ __NTH (wcscpy (wchar_t *__dest, __const - } - - --extern wchar_t *__wcpcpy_chk (wchar_t *__dest, __const wchar_t *__src, -+extern wchar_t *__wcpcpy_chk (wchar_t *__restrict __dest, -+ __const wchar_t *__restrict __src, - size_t __destlen) __THROW; --extern wchar_t *__REDIRECT_NTH (__wcpcpy_alias, (wchar_t *__dest, -- __const wchar_t *__src), -- wcpcpy); -+extern wchar_t *__REDIRECT_NTH (__wcpcpy_alias, -+ (wchar_t *__restrict __dest, -+ __const wchar_t *__restrict __src), wcpcpy); - - __extern_always_inline wchar_t * --__NTH (wcpcpy (wchar_t *__dest, __const wchar_t *__src)) -+__NTH (wcpcpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src)) - { - if (__bos (__dest) != (size_t) -1) - return __wcpcpy_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t)); -@@ -190,7 +189,8 @@ extern wchar_t *__REDIRECT_NTH (__wcsncp - "buffer"); - - __extern_always_inline wchar_t * --__NTH (wcsncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n)) -+__NTH (wcsncpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src, -+ size_t __n)) - { - if (__bos (__dest) != (size_t) -1) - { -@@ -220,7 +220,8 @@ extern wchar_t *__REDIRECT_NTH (__wcpncp - "buffer"); - - __extern_always_inline wchar_t * --__NTH (wcpncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n)) -+__NTH (wcpncpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src, -+ size_t __n)) - { - if (__bos (__dest) != (size_t) -1) - { -@@ -243,7 +244,7 @@ extern wchar_t *__REDIRECT_NTH (__wcscat - __const wchar_t *__restrict __src), wcscat); - - __extern_always_inline wchar_t * --__NTH (wcscat (wchar_t *__dest, __const wchar_t *__src)) -+__NTH (wcscat (wchar_t *__restrict __dest, __const wchar_t *__restrict __src)) - { - if (__bos (__dest) != (size_t) -1) - return __wcscat_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t)); -@@ -260,7 +261,8 @@ extern wchar_t *__REDIRECT_NTH (__wcsnca - size_t __n), wcsncat); - - __extern_always_inline wchar_t * --__NTH (wcsncat (wchar_t *__dest, __const wchar_t *__src, size_t __n)) -+__NTH (wcsncat (wchar_t *__restrict __dest, __const wchar_t *__restrict __src, -+ size_t __n)) - { - if (__bos (__dest) != (size_t) -1) - return __wcsncat_chk (__dest, __src, __n, -@@ -428,14 +430,16 @@ fgetws_unlocked (wchar_t *__restrict __s - #endif - - --extern size_t __wcrtomb_chk (char *__s, wchar_t __wchar, mbstate_t *__p, -- size_t __buflen) __THROW __wur; -+extern size_t __wcrtomb_chk (char *__restrict __s, wchar_t __wchar, -+ mbstate_t *__restrict __p, -+ size_t __buflen) __THROW __wur; - extern size_t __REDIRECT_NTH (__wcrtomb_alias, - (char *__restrict __s, wchar_t __wchar, - mbstate_t *__restrict __ps), wcrtomb) __wur; - - __extern_always_inline __wur size_t --__NTH (wcrtomb (char *__s, wchar_t __wchar, mbstate_t *__ps)) -+__NTH (wcrtomb (char *__restrict __s, wchar_t __wchar, -+ mbstate_t *__restrict __ps)) - { - /* We would have to include to get a definition of MB_LEN_MAX. - But this would only disturb the namespace. So we define our own -Index: glibc-2.12-2-gc4ccff1/wcsmbs/wchar.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/wcsmbs/wchar.h -+++ glibc-2.12-2-gc4ccff1/wcsmbs/wchar.h -@@ -555,17 +555,17 @@ extern float wcstof_l (__const wchar_t * - extern long double wcstold_l (__const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, - __locale_t __loc) __THROW; --#endif /* GNU */ - - --#ifdef __USE_XOPEN2K8 - /* Copy SRC to DEST, returning the address of the terminating L'\0' in - DEST. */ --extern wchar_t *wcpcpy (wchar_t *__dest, __const wchar_t *__src) __THROW; -+extern wchar_t *wcpcpy (wchar_t *__restrict __dest, -+ __const wchar_t *__restrict __src) __THROW; - - /* Copy no more than N characters of SRC to DEST, returning the address of - the last character written into DEST. */ --extern wchar_t *wcpncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n) -+extern wchar_t *wcpncpy (wchar_t *__restrict __dest, -+ __const wchar_t *__restrict __src, size_t __n) - __THROW; - #endif /* use GNU */ - diff --git a/src/patches/glibc/glibc-rh663641-2.patch b/src/patches/glibc/glibc-rh663641-2.patch deleted file mode 100644 index 13c1bee4d2..0000000000 --- a/src/patches/glibc/glibc-rh663641-2.patch +++ /dev/null @@ -1,279 +0,0 @@ -diff -pruN glibc-2.12-2-gc4ccff1/csu/libc-start.c glibc-2.12-2-gc4ccff1.fixed/csu/libc-start.c ---- glibc-2.12-2-gc4ccff1/csu/libc-start.c 2010-05-04 16:57:23.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/csu/libc-start.c 2013-07-09 23:34:59.596859295 +0530 -@@ -33,7 +33,7 @@ extern int __libc_multiple_libcs; - #include - #ifndef SHARED - # include --extern void __pthread_initialize_minimal (void); -+extern void __pthread_initialize_minimal (int, char **, char **); - # ifndef THREAD_SET_STACK_GUARD - /* Only exported for architectures that don't store the stack guard canary - in thread local area. */ -@@ -143,7 +143,7 @@ LIBC_START_MAIN (int (*main) (int, char - /* Initialize the thread library at least a bit since the libgcc - functions are using thread functions if these are available and - we need to setup errno. */ -- __pthread_initialize_minimal (); -+ __pthread_initialize_minimal (argc, argv, __environ); - - /* Set up the stack checker's canary. */ - uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random); -diff -pruN glibc-2.12-2-gc4ccff1/csu/libc-tls.c glibc-2.12-2-gc4ccff1.fixed/csu/libc-tls.c ---- glibc-2.12-2-gc4ccff1/csu/libc-tls.c 2010-05-04 16:57:23.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/csu/libc-tls.c 2013-07-09 23:34:59.596859295 +0530 -@@ -244,7 +244,7 @@ _dl_tls_setup (void) - not used. */ - void - __attribute__ ((weak)) --__pthread_initialize_minimal (void) -+__pthread_initialize_minimal (int argc, char **argv, char **envp) - { - __libc_setup_tls (TLS_INIT_TCB_SIZE, TLS_INIT_TCB_ALIGN); - } -diff -pruN glibc-2.12-2-gc4ccff1/nptl/Makefile glibc-2.12-2-gc4ccff1.fixed/nptl/Makefile ---- glibc-2.12-2-gc4ccff1/nptl/Makefile 2013-07-09 23:35:21.692858252 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/Makefile 2013-07-09 23:34:59.597859295 +0530 -@@ -197,7 +197,7 @@ CFLAGS-pt-system.c = -fexceptions - - - tests = tst-typesizes \ -- tst-attr1 tst-attr2 tst-attr3 \ -+ tst-attr1 tst-attr2 tst-attr3 tst-default-attr \ - tst-mutex1 tst-mutex2 tst-mutex3 tst-mutex4 tst-mutex5 tst-mutex6 \ - tst-mutex7 tst-mutex8 tst-mutex9 tst-mutex5a tst-mutex7a \ - tst-mutexpi1 tst-mutexpi2 tst-mutexpi3 tst-mutexpi4 tst-mutexpi5 \ -@@ -279,6 +279,13 @@ LDFLAGS-pthread.so = -Wl,--enable-new-dt - LDFLAGS-tst-cond24 = -lrt - LDFLAGS-tst-cond25 = -lrt - -+# The size is 1MB + 4KB. The extra 4KB has been added to prevent allocatestack -+# from resizing the input size to avoid the 64K aliasing conflict on Intel -+# processors. -+DEFAULT_STACKSIZE=1052672 -+CFLAGS-tst-default-attr.c = -DDEFAULT_STACKSIZE=$(DEFAULT_STACKSIZE) -+tst-default-attr-ENV = GLIBC_PTHREAD_STACKSIZE=$(DEFAULT_STACKSIZE) -+ - include ../Makeconfig - - ifeq ($(have-forced-unwind),yes) -diff -pruN glibc-2.12-2-gc4ccff1/nptl/nptl-init.c glibc-2.12-2-gc4ccff1.fixed/nptl/nptl-init.c ---- glibc-2.12-2-gc4ccff1/nptl/nptl-init.c 2013-07-09 23:35:21.723858250 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/nptl-init.c 2013-07-09 23:36:35.070854789 +0530 -@@ -36,6 +36,7 @@ - #include - #include - #include -+#include - - - /* Size and alignment of static TLS block. */ -@@ -288,8 +289,28 @@ extern void **__libc_dl_error_tsd (void) - /* This can be set by the debugger before initialization is complete. */ - static bool __nptl_initial_report_events __attribute_used__; - -+/* Validate and set the default stacksize. */ -+static void -+set_default_stacksize (size_t stacksize) -+{ -+ if (stacksize < PTHREAD_STACK_MIN) -+ stacksize = PTHREAD_STACK_MIN; -+ -+ /* Make sure it meets the minimum size that allocate_stack -+ (allocatestack.c) will demand, which depends on the page size. */ -+ const uintptr_t pagesz = GLRO(dl_pagesize); -+ const size_t minstack = pagesz + __static_tls_size + MINIMAL_REST_STACK; -+ -+ if (stacksize < minstack) -+ stacksize = minstack; -+ -+ /* Round the resource limit up to page size. */ -+ stacksize = ALIGN_UP (stacksize, pagesz); -+ __default_pthread_attr.stacksize = stacksize; -+} -+ - void --__pthread_initialize_minimal_internal (void) -+__pthread_initialize_minimal_internal (int argc, char **argv, char **envp) - { - #ifndef SHARED - /* Unlike in the dynamically linked case the dynamic linker has not -@@ -413,29 +434,44 @@ __pthread_initialize_minimal_internal (v - - __static_tls_size = roundup (__static_tls_size, static_tls_align); - -- /* Determine the default allowed stack size. This is the size used -- in case the user does not specify one. */ -- struct rlimit limit; -- if (getrlimit (RLIMIT_STACK, &limit) != 0 -- || limit.rlim_cur == RLIM_INFINITY) -- /* The system limit is not usable. Use an architecture-specific -- default. */ -- limit.rlim_cur = ARCH_STACK_DEFAULT_SIZE; -- else if (limit.rlim_cur < PTHREAD_STACK_MIN) -- /* The system limit is unusably small. -- Use the minimal size acceptable. */ -- limit.rlim_cur = PTHREAD_STACK_MIN; -+ /* Initialize the environment. libc.so gets initialized after us due to a -+ circular dependency and hence __environ is not available otherwise. */ -+ __environ = envp; - -- /* Make sure it meets the minimum size that allocate_stack -- (allocatestack.c) will demand, which depends on the page size. */ -- const uintptr_t pagesz = __sysconf (_SC_PAGESIZE); -- const size_t minstack = pagesz + __static_tls_size + MINIMAL_REST_STACK; -- if (limit.rlim_cur < minstack) -- limit.rlim_cur = minstack; -+#ifndef SHARED -+ __libc_init_secure (); -+#endif - -- /* Round the resource limit up to page size. */ -- limit.rlim_cur = (limit.rlim_cur + pagesz - 1) & -pagesz; -- __default_pthread_attr.stacksize = limit.rlim_cur; -+ /* Get the default stack size from the environment variable if it is set and -+ is valid. */ -+ size_t stacksize = 0; -+ char *envval = __secure_getenv ("GLIBC_PTHREAD_STACKSIZE"); -+ -+ if (__builtin_expect (envval != NULL && envval[0] != '\0', 0)) -+ { -+ char *env_conv = envval; -+ size_t ret = strtoul (envval, &env_conv, 0); -+ -+ if (*env_conv == '\0' && env_conv != envval) -+ stacksize = ret; -+ } -+ -+ if (stacksize == 0) -+ { -+ /* Determine the default allowed stack size. */ -+ struct rlimit limit; -+ if (getrlimit (RLIMIT_STACK, &limit) != 0 -+ || limit.rlim_cur == RLIM_INFINITY) -+ /* The system limit is not usable. Use an architecture-specific -+ default. */ -+ stacksize = ARCH_STACK_DEFAULT_SIZE; -+ else -+ stacksize = limit.rlim_cur; -+ } -+ -+ /* Finally, set the default stack size. This size is used when the user does -+ not specify a stack size during thread creation. */ -+ set_default_stacksize (stacksize); - __default_pthread_attr.guardsize = GLRO (dl_pagesize); - - #ifdef SHARED -diff -pruN glibc-2.12-2-gc4ccff1/nptl/tst-default-attr.c glibc-2.12-2-gc4ccff1.fixed/nptl/tst-default-attr.c ---- glibc-2.12-2-gc4ccff1/nptl/tst-default-attr.c 1970-01-01 05:30:00.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/tst-default-attr.c 2013-07-09 23:34:59.598859295 +0530 -@@ -0,0 +1,109 @@ -+/* Verify that default stack size gets set correctly from the environment -+ variable. -+ -+ Copyright (C) 2013 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#define RETURN_IF_FAIL(f, ...) \ -+ ({ \ -+ int ret = f (__VA_ARGS__); \ -+ if (ret != 0) \ -+ { \ -+ printf ("%s:%d: %s returned %d (errno = %d)\n", __FILE__, __LINE__, \ -+ #f, ret, errno); \ -+ return ret; \ -+ } \ -+ }) -+ -+/* DEFAULT_STACKSIZE macro is defined in the Makefile. */ -+static size_t stacksize = DEFAULT_STACKSIZE; -+ -+static int -+verify_stacksize_result (pthread_attr_t *attr) -+{ -+ size_t stack; -+ -+ RETURN_IF_FAIL (pthread_attr_getstacksize, attr, &stack); -+ -+ if (stacksize != stack) -+ { -+ printf ("failed to set default stacksize (%zu, %zu)\n", stacksize, stack); -+ return 1; -+ } -+ -+ return 0; -+} -+ -+static void * -+thr (void *unused __attribute__ ((unused))) -+{ -+ pthread_attr_t attr; -+ int ret; -+ -+ memset (&attr, 0xab, sizeof attr); -+ /* To verify that the attributes actually got applied. */ -+ if ((ret = pthread_getattr_np (pthread_self (), &attr)) != 0) -+ { -+ printf ("pthread_getattr_np failed: %s\n", strerror (ret)); -+ goto out; -+ } -+ -+ ret = verify_stacksize_result (&attr); -+ -+out: -+ return (void *) (uintptr_t) ret; -+} -+ -+static int -+run_threads (void) -+{ -+ pthread_t t; -+ void *tret = NULL; -+ -+ /* Run twice to ensure that the attributes do not get overwritten in the -+ first run somehow. */ -+ for (int i = 0; i < 2; i++) -+ { -+ RETURN_IF_FAIL (pthread_create, &t, NULL, thr, NULL); -+ RETURN_IF_FAIL (pthread_join, t, &tret); -+ -+ if (tret != NULL) -+ { -+ puts ("Thread failed"); -+ return 1; -+ } -+ } -+ -+ return 0; -+} -+ -+static int -+do_test (void) -+{ -+ RETURN_IF_FAIL (run_threads); -+ return 0; -+} -+ -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" diff --git a/src/patches/glibc/glibc-rh663641-3.patch b/src/patches/glibc/glibc-rh663641-3.patch deleted file mode 100644 index 182fe99a63..0000000000 --- a/src/patches/glibc/glibc-rh663641-3.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff -pruN glibc-2.12-2-gc4ccff1/nptl/sysdeps/pthread/pt-initfini.c glibc-2.12-2-gc4ccff1.fixed/nptl/sysdeps/pthread/pt-initfini.c ---- glibc-2.12-2-gc4ccff1/nptl/sysdeps/pthread/pt-initfini.c 2010-05-04 16:57:23.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/sysdeps/pthread/pt-initfini.c 2013-07-22 21:52:03.519184065 +0530 -@@ -63,21 +63,21 @@ asm ("\n/*@TESTS_END*/"); - asm ("\n/*@_init_PROLOG_BEGINS*/"); - - static void --call_initialize_minimal (void) -+call_initialize_minimal (int argc, char **argv, char **envp) - { -- extern void __pthread_initialize_minimal_internal (void) -+ extern void __pthread_initialize_minimal_internal (int, char **, char **) - __attribute ((visibility ("hidden"))); - -- __pthread_initialize_minimal_internal (); -+ __pthread_initialize_minimal_internal (argc, argv, envp); - } - - SECTION (".init"); --extern void __attribute__ ((section (".init"))) _init (void); -+extern void __attribute__ ((section (".init"))) _init (int, char **, char **); - void --_init (void) -+_init (int argc, char **argv, char **envp) - { - /* The very first thing we must do is to set up the registers. */ -- call_initialize_minimal (); -+ call_initialize_minimal (argc, argv, envp); - - asm ("ALIGN"); - asm("END_INIT"); diff --git a/src/patches/glibc/glibc-rh663641.patch b/src/patches/glibc/glibc-rh663641.patch deleted file mode 100644 index e1ca4f1a46..0000000000 --- a/src/patches/glibc/glibc-rh663641.patch +++ /dev/null @@ -1,191 +0,0 @@ -diff -pruN glibc-2.12-2-gc4ccff1/include/libc-internal.h glibc-2.12-2-gc4ccff1.fixed/include/libc-internal.h ---- glibc-2.12-2-gc4ccff1/include/libc-internal.h 2010-05-04 16:57:23.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/include/libc-internal.h 2013-07-09 23:44:00.272833779 +0530 -@@ -34,4 +34,24 @@ extern void __libc_thread_freeres (void) - /* Define and initialize `__progname' et. al. */ - extern void __init_misc (int, char **, char **); - -+/* Align a value by rounding down to closest size. -+ e.g. Using size of 4096, we get this behavior: -+ {4095, 4096, 4097} = {0, 4096, 4096}. */ -+#define ALIGN_DOWN(base, size) ((base) & -((__typeof__ (base)) (size))) -+ -+/* Align a value by rounding up to closest size. -+ e.g. Using size of 4096, we get this behavior: -+ {4095, 4096, 4097} = {4096, 4096, 8192}. -+ -+ Note: The size argument has side effects (expanded multiple times). */ -+#define ALIGN_UP(base, size) ALIGN_DOWN ((base) + (size) - 1, (size)) -+ -+/* Same as ALIGN_DOWN(), but automatically casts when base is a pointer. */ -+#define PTR_ALIGN_DOWN(base, size) \ -+ ((__typeof__ (base)) ALIGN_DOWN ((uintptr_t) (base), (size))) -+ -+/* Same as ALIGN_UP(), but automatically casts when base is a pointer. */ -+#define PTR_ALIGN_UP(base, size) \ -+ ((__typeof__ (base)) ALIGN_UP ((uintptr_t) (base), (size))) -+ - #endif /* _LIBC_INTERNAL */ -diff -pruN glibc-2.12-2-gc4ccff1/nptl/allocatestack.c glibc-2.12-2-gc4ccff1.fixed/nptl/allocatestack.c ---- glibc-2.12-2-gc4ccff1/nptl/allocatestack.c 2013-07-09 23:43:09.427836179 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/allocatestack.c 2013-07-09 23:43:52.727834136 +0530 -@@ -351,7 +351,7 @@ allocate_stack (const struct pthread_att - - /* Get the stack size from the attribute if it is set. Otherwise we - use the default we determined at start time. */ -- size = attr->stacksize ?: __default_stacksize; -+ size = attr->stacksize ?: __default_pthread_attr.stacksize; - - /* Get memory for the stack. */ - if (__builtin_expect (attr->flags & ATTR_FLAG_STACKADDR, 0)) -diff -pruN glibc-2.12-2-gc4ccff1/nptl/nptl-init.c glibc-2.12-2-gc4ccff1.fixed/nptl/nptl-init.c ---- glibc-2.12-2-gc4ccff1/nptl/nptl-init.c 2013-07-09 23:43:09.553836173 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/nptl-init.c 2013-07-09 23:43:52.728834135 +0530 -@@ -435,7 +435,8 @@ __pthread_initialize_minimal_internal (v - - /* Round the resource limit up to page size. */ - limit.rlim_cur = (limit.rlim_cur + pagesz - 1) & -pagesz; -- __default_stacksize = limit.rlim_cur; -+ __default_pthread_attr.stacksize = limit.rlim_cur; -+ __default_pthread_attr.guardsize = GLRO (dl_pagesize); - - #ifdef SHARED - /* Transfer the old value from the dynamic linker's internal location. */ -diff -pruN glibc-2.12-2-gc4ccff1/nptl/pthread_attr_getstacksize.c glibc-2.12-2-gc4ccff1.fixed/nptl/pthread_attr_getstacksize.c ---- glibc-2.12-2-gc4ccff1/nptl/pthread_attr_getstacksize.c 2010-05-04 16:57:23.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/pthread_attr_getstacksize.c 2013-07-09 23:43:52.817834131 +0530 -@@ -33,7 +33,7 @@ __pthread_attr_getstacksize (attr, stack - - /* If the user has not set a stack size we return what the system - will use as the default. */ -- *stacksize = iattr->stacksize ?: __default_stacksize; -+ *stacksize = iattr->stacksize ?: __default_pthread_attr.stacksize; - - return 0; - } -diff -pruN glibc-2.12-2-gc4ccff1/nptl/pthread_barrier_init.c glibc-2.12-2-gc4ccff1.fixed/nptl/pthread_barrier_init.c ---- glibc-2.12-2-gc4ccff1/nptl/pthread_barrier_init.c 2010-05-04 16:57:23.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/pthread_barrier_init.c 2013-07-09 23:43:52.821834131 +0530 -@@ -23,7 +23,7 @@ - #include - - --static const struct pthread_barrierattr default_attr = -+static const struct pthread_barrierattr default_barrierattr = - { - .pshared = PTHREAD_PROCESS_PRIVATE - }; -@@ -43,7 +43,7 @@ pthread_barrier_init (barrier, attr, cou - const struct pthread_barrierattr *iattr - = (attr != NULL - ? iattr = (struct pthread_barrierattr *) attr -- : &default_attr); -+ : &default_barrierattr); - - if (iattr->pshared != PTHREAD_PROCESS_PRIVATE - && __builtin_expect (iattr->pshared != PTHREAD_PROCESS_SHARED, 0)) -diff -pruN glibc-2.12-2-gc4ccff1/nptl/pthread_create.c glibc-2.12-2-gc4ccff1.fixed/nptl/pthread_create.c ---- glibc-2.12-2-gc4ccff1/nptl/pthread_create.c 2013-07-09 23:43:09.542836173 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/pthread_create.c 2013-07-09 23:43:52.822834131 +0530 -@@ -425,15 +425,6 @@ start_thread (void *arg) - } - - --/* Default thread attributes for the case when the user does not -- provide any. */ --static const struct pthread_attr default_attr = -- { -- /* Just some value > 0 which gets rounded to the nearest page size. */ -- .guardsize = 1, -- }; -- -- - int - __pthread_create_2_1 (newthread, attr, start_routine, arg) - pthread_t *newthread; -@@ -447,7 +438,7 @@ __pthread_create_2_1 (newthread, attr, s - if (iattr == NULL) - /* Is this the best idea? On NUMA machines this could mean - accessing far-away memory. */ -- iattr = &default_attr; -+ iattr = &__default_pthread_attr; - - struct pthread *pd = NULL; - int err = ALLOCATE_STACK (iattr, &pd); -diff -pruN glibc-2.12-2-gc4ccff1/nptl/pthread_mutex_init.c glibc-2.12-2-gc4ccff1.fixed/nptl/pthread_mutex_init.c ---- glibc-2.12-2-gc4ccff1/nptl/pthread_mutex_init.c 2010-05-04 16:57:23.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/pthread_mutex_init.c 2013-07-09 23:43:52.822834131 +0530 -@@ -24,7 +24,7 @@ - #include - #include "pthreadP.h" - --static const struct pthread_mutexattr default_attr = -+static const struct pthread_mutexattr default_mutexattr = - { - /* Default is a normal mutex, not shared between processes. */ - .mutexkind = PTHREAD_MUTEX_NORMAL -@@ -45,7 +45,8 @@ __pthread_mutex_init (mutex, mutexattr) - - assert (sizeof (pthread_mutex_t) <= __SIZEOF_PTHREAD_MUTEX_T); - -- imutexattr = (const struct pthread_mutexattr *) mutexattr ?: &default_attr; -+ imutexattr = ((const struct pthread_mutexattr *) mutexattr -+ ?: &default_mutexattr); - - /* Sanity checks. */ - switch (__builtin_expect (imutexattr->mutexkind -diff -pruN glibc-2.12-2-gc4ccff1/nptl/pthreadP.h glibc-2.12-2-gc4ccff1.fixed/nptl/pthreadP.h ---- glibc-2.12-2-gc4ccff1/nptl/pthreadP.h 2013-07-09 23:43:09.553836173 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/pthreadP.h 2013-07-09 23:43:52.823834131 +0530 -@@ -148,8 +148,8 @@ enum - /* Internal variables. */ - - --/* Default stack size. */ --extern size_t __default_stacksize attribute_hidden; -+/* Default pthread attributes. */ -+extern struct pthread_attr __default_pthread_attr attribute_hidden; - - /* Size and alignment of static TLS block. */ - extern size_t __static_tls_size attribute_hidden; -diff -pruN glibc-2.12-2-gc4ccff1/nptl/pthread_rwlock_init.c glibc-2.12-2-gc4ccff1.fixed/nptl/pthread_rwlock_init.c ---- glibc-2.12-2-gc4ccff1/nptl/pthread_rwlock_init.c 2010-05-04 16:57:23.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/pthread_rwlock_init.c 2013-07-09 23:43:52.823834131 +0530 -@@ -21,7 +21,7 @@ - #include - - --static const struct pthread_rwlockattr default_attr = -+static const struct pthread_rwlockattr default_rwlockattr = - { - .lockkind = PTHREAD_RWLOCK_DEFAULT_NP, - .pshared = PTHREAD_PROCESS_PRIVATE -@@ -35,7 +35,7 @@ __pthread_rwlock_init (rwlock, attr) - { - const struct pthread_rwlockattr *iattr; - -- iattr = ((const struct pthread_rwlockattr *) attr) ?: &default_attr; -+ iattr = ((const struct pthread_rwlockattr *) attr) ?: &default_rwlockattr; - - memset (rwlock, '\0', sizeof (*rwlock)); - -diff -pruN glibc-2.12-2-gc4ccff1/nptl/vars.c glibc-2.12-2-gc4ccff1.fixed/nptl/vars.c ---- glibc-2.12-2-gc4ccff1/nptl/vars.c 2010-05-04 16:57:23.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/nptl/vars.c 2013-07-09 23:43:52.824834131 +0530 -@@ -21,13 +21,9 @@ - #include - #include - --/* Default stack size. */ --size_t __default_stacksize attribute_hidden --#ifdef SHARED --; --#else -- = PTHREAD_STACK_MIN; --#endif -+/* Default thread attributes for the case when the user does not -+ provide any. */ -+struct pthread_attr __default_pthread_attr attribute_hidden; - - /* Flag whether the machine is SMP or not. */ - int __is_smp attribute_hidden; diff --git a/src/patches/glibc/glibc-rh667974.patch b/src/patches/glibc/glibc-rh667974.patch deleted file mode 100644 index 48aacac8cf..0000000000 --- a/src/patches/glibc/glibc-rh667974.patch +++ /dev/null @@ -1,160 +0,0 @@ -2011-03-14 Andreas Schwab - - * elf/dl-load.c (is_dst): Remove parameter secure, all callers - changed. Don't check for isolated use. - (_dl_dst_substitute): Ignore rpath elements containing - non-isolated use of $ORIGIN when privileged. - - * elf/dl-load.c (_dl_dst_substitute): When skipping the first - rpath element also skip the following colon. - (expand_dynamic_string_token): Add is_path parameter and pass - down to DL_DST_REQUIRED and _dl_dst_substitute. - (decompose_rpath): Call expand_dynamic_string_token with - non-zero is_path. Ignore empty rpaths. - (_dl_map_object_from_fd): Call expand_dynamic_string_token - with zero is_path. - -Index: glibc-2.12-2-gc4ccff1/elf/dl-load.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-load.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-load.c -@@ -169,8 +169,7 @@ local_strdup (const char *s) - - - static size_t --is_dst (const char *start, const char *name, const char *str, -- int is_path, int secure) -+is_dst (const char *start, const char *name, const char *str, int is_path) - { - size_t len; - bool is_curly = false; -@@ -199,11 +198,6 @@ is_dst (const char *start, const char *n - && (!is_path || name[len] != ':')) - return 0; - -- if (__builtin_expect (secure, 0) -- && ((name[len] != '\0' && (!is_path || name[len] != ':')) -- || (name != start + 1 && (!is_path || name[-2] != ':')))) -- return 0; -- - return len; - } - -@@ -218,13 +212,10 @@ _dl_dst_count (const char *name, int is_ - { - size_t len; - -- /* $ORIGIN is not expanded for SUID/GUID programs (except if it -- is $ORIGIN alone) and it must always appear first in path. */ - ++name; -- if ((len = is_dst (start, name, "ORIGIN", is_path, -- INTUSE(__libc_enable_secure))) != 0 -- || (len = is_dst (start, name, "PLATFORM", is_path, 0)) != 0 -- || (len = is_dst (start, name, "LIB", is_path, 0)) != 0) -+ if ((len = is_dst (start, name, "ORIGIN", is_path)) != 0 -+ || (len = is_dst (start, name, "PLATFORM", is_path)) != 0 -+ || (len = is_dst (start, name, "LIB", is_path)) != 0) - ++cnt; - - name = strchr (name + len, '$'); -@@ -256,9 +247,16 @@ _dl_dst_substitute (struct link_map *l, - size_t len; - - ++name; -- if ((len = is_dst (start, name, "ORIGIN", is_path, -- INTUSE(__libc_enable_secure))) != 0) -+ if ((len = is_dst (start, name, "ORIGIN", is_path)) != 0) - { -+ /* $ORIGIN is not expanded for SUID/GUID programs -+ (except if it is $ORIGIN alone) and it must always -+ appear first in path. */ -+ if (__builtin_expect (INTUSE(__libc_enable_secure), 0) -+ && ((name[len] != '\0' && (!is_path || name[len] != ':')) -+ || (name != start + 1 && (!is_path || name[-2] != ':')))) -+ repl = (const char *) -1; -+ else - #ifndef SHARED - if (l == NULL) - repl = _dl_get_origin (); -@@ -266,9 +264,9 @@ _dl_dst_substitute (struct link_map *l, - #endif - repl = l->l_origin; - } -- else if ((len = is_dst (start, name, "PLATFORM", is_path, 0)) != 0) -+ else if ((len = is_dst (start, name, "PLATFORM", is_path)) != 0) - repl = GLRO(dl_platform); -- else if ((len = is_dst (start, name, "LIB", is_path, 0)) != 0) -+ else if ((len = is_dst (start, name, "LIB", is_path)) != 0) - repl = DL_DST_LIB; - - if (repl != NULL && repl != (const char *) -1) -@@ -284,6 +282,10 @@ _dl_dst_substitute (struct link_map *l, - name += len; - while (*name != '\0' && (!is_path || *name != ':')) - ++name; -+ /* Also skip following colon if this is the first rpath -+ element, but keep an empty element at the end. */ -+ if (wp == result && is_path && *name == ':' && name[1] != '\0') -+ ++name; - } - else - /* No DST we recognize. */ -@@ -310,7 +312,7 @@ _dl_dst_substitute (struct link_map *l, - belonging to the map is loaded. In this case the path element - containing $ORIGIN is left out. */ - static char * --expand_dynamic_string_token (struct link_map *l, const char *s) -+expand_dynamic_string_token (struct link_map *l, const char *s, int is_path) - { - /* We make two runs over the string. First we determine how large the - resulting string is and then we copy it over. Since this is no -@@ -321,7 +323,7 @@ expand_dynamic_string_token (struct link - char *result; - - /* Determine the number of DST elements. */ -- cnt = DL_DST_COUNT (s, 1); -+ cnt = DL_DST_COUNT (s, is_path); - - /* If we do not have to replace anything simply copy the string. */ - if (__builtin_expect (cnt, 0) == 0) -@@ -335,7 +337,7 @@ expand_dynamic_string_token (struct link - if (result == NULL) - return NULL; - -- return _dl_dst_substitute (l, s, result, 1); -+ return _dl_dst_substitute (l, s, result, is_path); - } - - -@@ -551,13 +553,21 @@ decompose_rpath (struct r_search_path_st - - /* Make a writable copy. At the same time expand possible dynamic - string tokens. */ -- copy = expand_dynamic_string_token (l, rpath); -+ copy = expand_dynamic_string_token (l, rpath, 1); - if (copy == NULL) - { - errstring = N_("cannot create RUNPATH/RPATH copy"); - goto signal_error; - } - -+ /* Ignore empty rpaths. */ -+ if (*copy == 0) -+ { -+ free (copy); -+ sps->dirs = (char *) -1; -+ return false; -+ } -+ - /* Count the number of necessary elements in the result array. */ - nelems = 0; - for (cp = copy; *cp != '\0'; ++cp) -@@ -2176,7 +2186,7 @@ _dl_map_object (struct link_map *loader, - { - /* The path may contain dynamic string tokens. */ - realname = (loader -- ? expand_dynamic_string_token (loader, name) -+ ? expand_dynamic_string_token (loader, name, 0) - : local_strdup (name)); - if (realname == NULL) - fd = -1; diff --git a/src/patches/glibc/glibc-rh676076.patch b/src/patches/glibc/glibc-rh676076.patch deleted file mode 100644 index c5aa2d4302..0000000000 --- a/src/patches/glibc/glibc-rh676076.patch +++ /dev/null @@ -1,714 +0,0 @@ -2011-03-02 Harsha Jagasia - Ulrich Drepper - - * sysdeps/x86_64/memset.S: After aligning destination, code - branches to different locations depending on the value of - misalignment, when multiarch is enabled. Fix this. - -2011-03-02 Harsha Jagasia - - * sysdeps/x86_64/cacheinfo.c (init_cacheinfo): - Set _x86_64_preferred_memory_instruction for AMD processsors. - * sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features): - Set bit_Prefer_SSE_for_memop for AMD processors. - -2010-11-07 H.J. Lu - - * sysdeps/x86_64/memset.S: Check USE_MULTIARCH and USE_SSE2 for - IFUNC support. - * sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add - memset-x86-64. - * sysdeps/x86_64/multiarch/bzero.S: New file. - * sysdeps/x86_64/multiarch/cacheinfo.c: New file. - * sysdeps/x86_64/multiarch/memset-x86-64.S: New file. - * sysdeps/x86_64/multiarch/memset.S: New file. - * sysdeps/x86_64/multiarch/memset_chk.S: New file. - * sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features): - Set bit_Prefer_SSE_for_memop for Intel processors. - * sysdeps/x86_64/multiarch/init-arch.h (bit_Prefer_SSE_for_memop): - Define. - (index_Prefer_SSE_for_memop): Define. - (HAS_PREFER_SSE_FOR_MEMOP): Define. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/cacheinfo.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/cacheinfo.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/cacheinfo.c -@@ -613,6 +613,25 @@ init_cacheinfo (void) - long int core = handle_amd (_SC_LEVEL2_CACHE_SIZE); - shared = handle_amd (_SC_LEVEL3_CACHE_SIZE); - -+#ifndef DISABLE_PREFERRED_MEMORY_INSTRUCTION -+# ifdef USE_MULTIARCH -+ eax = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].eax; -+ ebx = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].ebx; -+ ecx = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx; -+ edx = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].edx; -+# else -+ __cpuid (1, eax, ebx, ecx, edx); -+# endif -+ -+ /* AMD prefers SSSE3 instructions for memory/string routines -+ if they are avaiable, otherwise it prefers integer -+ instructions. */ -+ if ((ecx & 0x200)) -+ __x86_64_preferred_memory_instruction = 3; -+ else -+ __x86_64_preferred_memory_instruction = 0; -+#endif -+ - /* Get maximum extended function. */ - __cpuid (0x80000000, max_cpuid_ex, ebx, ecx, edx); - -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/memset.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/memset.S -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/memset.S -@@ -24,7 +24,7 @@ - #define __STOS_UPPER_BOUNDARY $65536 - - .text --#ifndef NOT_IN_libc -+#if !defined NOT_IN_libc && !defined USE_MULTIARCH - ENTRY(__bzero) - mov %rsi,%rdx /* Adjust parameter. */ - xorl %esi,%esi /* Fill with 0s. */ -@@ -34,10 +34,10 @@ weak_alias (__bzero, bzero) - #endif - - #if defined PIC && !defined NOT_IN_libc --ENTRY (__memset_chk) -+ENTRY_CHK (__memset_chk) - cmpq %rdx, %rcx - jb HIDDEN_JUMPTARGET (__chk_fail) --END (__memset_chk) -+END_CHK (__memset_chk) - #endif - ENTRY (memset) - L(memset_entry): -@@ -591,157 +591,15 @@ L(A6Q1): mov %dx,-0xe(%rdi) - L(A7Q0): mov %dl,-0x7(%rdi) - L(A6Q0): mov %dx,-0x6(%rdi) - mov %edx,-0x4(%rdi) -- jmp L(aligned_now) -- -- .balign 16 --L(aligned_now): -- -- cmpl $0x1,__x86_64_preferred_memory_instruction(%rip) -- jg L(SSE_pre) -- --L(8byte_move_try): -- cmpq __STOS_LOWER_BOUNDARY,%r8 -- jae L(8byte_stos_try) -- -- .balign 16 --L(8byte_move): -- movq %r8,%rcx -- shrq $7,%rcx -- jz L(8byte_move_skip) -- -- .p2align 4 -- --L(8byte_move_loop): -- decq %rcx -- -- movq %rdx, (%rdi) -- movq %rdx, 8 (%rdi) -- movq %rdx, 16 (%rdi) -- movq %rdx, 24 (%rdi) -- movq %rdx, 32 (%rdi) -- movq %rdx, 40 (%rdi) -- movq %rdx, 48 (%rdi) -- movq %rdx, 56 (%rdi) -- movq %rdx, 64 (%rdi) -- movq %rdx, 72 (%rdi) -- movq %rdx, 80 (%rdi) -- movq %rdx, 88 (%rdi) -- movq %rdx, 96 (%rdi) -- movq %rdx, 104 (%rdi) -- movq %rdx, 112 (%rdi) -- movq %rdx, 120 (%rdi) -- -- leaq 128 (%rdi),%rdi -- -- jnz L(8byte_move_loop) -- --L(8byte_move_skip): -- andl $127,%r8d -- lea (%rdi,%r8,1),%rdi -- --#ifndef PIC -- lea L(setPxQx)(%rip),%r11 -- jmpq *(%r11,%r8,8) # old scheme remained for nonPIC --#else -- lea L(Got0)(%rip),%r11 -- lea L(setPxQx)(%rip),%rcx -- movswq (%rcx,%r8,2),%rcx -- lea (%rcx,%r11,1),%r11 -- jmpq *%r11 --#endif -- -- .balign 16 --L(8byte_stos_try): -- mov __x86_64_shared_cache_size(%rip),%r9d // ck largest cache size -- cmpq %r8,%r9 // calculate the lesser of remaining -- cmovaq %r8,%r9 // bytes and largest cache size -- jbe L(8byte_stos) -- --L(8byte_move_reuse_try): -- cmp __STOS_UPPER_BOUNDARY,%r8 -- jae L(8byte_move) -- -- .balign 16 --L(8byte_stos): -- movq %r9,%rcx -- andq $-8,%r9 -- -- shrq $3,%rcx -- jz L(8byte_stos_skip) -- -- xchgq %rax,%rdx -- -- rep -- stosq -- -- xchgq %rax,%rdx -- --L(8byte_stos_skip): -- subq %r9,%r8 -- ja L(8byte_nt_move) -- -- andl $7,%r8d -- lea (%rdi,%r8,1),%rdi --#ifndef PIC -- lea L(setPxQx)(%rip),%r11 -- jmpq *(%r11,%r8,8) # old scheme remained for nonPIC --#else -- lea L(Got0)(%rip),%r11 -- lea L(setPxQx)(%rip),%rcx -- movswq (%rcx,%r8,2),%rcx -- lea (%rcx,%r11,1),%r11 -- jmpq *%r11 --#endif - -- .balign 16 --L(8byte_nt_move): -- movq %r8,%rcx -- shrq $7,%rcx -- jz L(8byte_nt_move_skip) -- -- .balign 16 --L(8byte_nt_move_loop): -- decq %rcx -- -- movntiq %rdx, (%rdi) -- movntiq %rdx, 8 (%rdi) -- movntiq %rdx, 16 (%rdi) -- movntiq %rdx, 24 (%rdi) -- movntiq %rdx, 32 (%rdi) -- movntiq %rdx, 40 (%rdi) -- movntiq %rdx, 48 (%rdi) -- movntiq %rdx, 56 (%rdi) -- movntiq %rdx, 64 (%rdi) -- movntiq %rdx, 72 (%rdi) -- movntiq %rdx, 80 (%rdi) -- movntiq %rdx, 88 (%rdi) -- movntiq %rdx, 96 (%rdi) -- movntiq %rdx, 104 (%rdi) -- movntiq %rdx, 112 (%rdi) -- movntiq %rdx, 120 (%rdi) -- -- leaq 128 (%rdi),%rdi -- -- jnz L(8byte_nt_move_loop) -- -- sfence -- --L(8byte_nt_move_skip): -- andl $127,%r8d -+#ifndef USE_MULTIARCH -+ jmp L(aligned_now) - -- lea (%rdi,%r8,1),%rdi --#ifndef PIC -- lea L(setPxQx)(%rip),%r11 -- jmpq *(%r11,%r8,8) # old scheme remained for nonPIC -+L(SSE_pre): - #else -- lea L(Got0)(%rip),%r11 -- lea L(setPxQx)(%rip),%rcx -- movswq (%rcx,%r8,2),%rcx -- lea (%rcx,%r11,1),%r11 -- jmpq *%r11 -+L(aligned_now): - #endif -- --L(SSE_pre): -+#if !defined USE_MULTIARCH || defined USE_SSE2 - # fill RegXMM0 with the pattern - movd %rdx,%xmm0 - punpcklqdq %xmm0,%xmm0 -@@ -1342,11 +1200,162 @@ L(SSExDx): - .short L(SSE15QB)-L(SSE0Q0) - #endif - .popsection -+#endif /* !defined USE_MULTIARCH || defined USE_SSE2 */ -+ -+ .balign 16 -+#ifndef USE_MULTIARCH -+L(aligned_now): -+ -+ cmpl $0x1,__x86_64_preferred_memory_instruction(%rip) -+ jg L(SSE_pre) -+#endif /* USE_MULTIARCH */ -+ -+L(8byte_move_try): -+ cmpq __STOS_LOWER_BOUNDARY,%r8 -+ jae L(8byte_stos_try) -+ -+ .balign 16 -+L(8byte_move): -+ movq %r8,%rcx -+ shrq $7,%rcx -+ jz L(8byte_move_skip) -+ -+ .p2align 4 -+ -+L(8byte_move_loop): -+ decq %rcx -+ -+ movq %rdx, (%rdi) -+ movq %rdx, 8 (%rdi) -+ movq %rdx, 16 (%rdi) -+ movq %rdx, 24 (%rdi) -+ movq %rdx, 32 (%rdi) -+ movq %rdx, 40 (%rdi) -+ movq %rdx, 48 (%rdi) -+ movq %rdx, 56 (%rdi) -+ movq %rdx, 64 (%rdi) -+ movq %rdx, 72 (%rdi) -+ movq %rdx, 80 (%rdi) -+ movq %rdx, 88 (%rdi) -+ movq %rdx, 96 (%rdi) -+ movq %rdx, 104 (%rdi) -+ movq %rdx, 112 (%rdi) -+ movq %rdx, 120 (%rdi) -+ -+ leaq 128 (%rdi),%rdi -+ -+ jnz L(8byte_move_loop) -+ -+L(8byte_move_skip): -+ andl $127,%r8d -+ lea (%rdi,%r8,1),%rdi -+ -+#ifndef PIC -+ lea L(setPxQx)(%rip),%r11 -+ jmpq *(%r11,%r8,8) # old scheme remained for nonPIC -+#else -+ lea L(Got0)(%rip),%r11 -+ lea L(setPxQx)(%rip),%rcx -+ movswq (%rcx,%r8,2),%rcx -+ lea (%rcx,%r11,1),%r11 -+ jmpq *%r11 -+#endif -+ -+ .balign 16 -+L(8byte_stos_try): -+ mov __x86_64_shared_cache_size(%rip),%r9d // ck largest cache size -+ cmpq %r8,%r9 // calculate the lesser of remaining -+ cmovaq %r8,%r9 // bytes and largest cache size -+ jbe L(8byte_stos) -+ -+L(8byte_move_reuse_try): -+ cmp __STOS_UPPER_BOUNDARY,%r8 -+ jae L(8byte_move) -+ -+ .balign 16 -+L(8byte_stos): -+ movq %r9,%rcx -+ andq $-8,%r9 -+ -+ shrq $3,%rcx -+ jz L(8byte_stos_skip) -+ -+ xchgq %rax,%rdx -+ -+ rep -+ stosq -+ -+ xchgq %rax,%rdx -+ -+L(8byte_stos_skip): -+ subq %r9,%r8 -+ ja L(8byte_nt_move) -+ -+ andl $7,%r8d -+ lea (%rdi,%r8,1),%rdi -+#ifndef PIC -+ lea L(setPxQx)(%rip),%r11 -+ jmpq *(%r11,%r8,8) # old scheme remained for nonPIC -+#else -+ lea L(Got0)(%rip),%r11 -+ lea L(setPxQx)(%rip),%rcx -+ movswq (%rcx,%r8,2),%rcx -+ lea (%rcx,%r11,1),%r11 -+ jmpq *%r11 -+#endif -+ -+ .balign 16 -+L(8byte_nt_move): -+ movq %r8,%rcx -+ shrq $7,%rcx -+ jz L(8byte_nt_move_skip) -+ -+ .balign 16 -+L(8byte_nt_move_loop): -+ decq %rcx -+ -+ movntiq %rdx, (%rdi) -+ movntiq %rdx, 8 (%rdi) -+ movntiq %rdx, 16 (%rdi) -+ movntiq %rdx, 24 (%rdi) -+ movntiq %rdx, 32 (%rdi) -+ movntiq %rdx, 40 (%rdi) -+ movntiq %rdx, 48 (%rdi) -+ movntiq %rdx, 56 (%rdi) -+ movntiq %rdx, 64 (%rdi) -+ movntiq %rdx, 72 (%rdi) -+ movntiq %rdx, 80 (%rdi) -+ movntiq %rdx, 88 (%rdi) -+ movntiq %rdx, 96 (%rdi) -+ movntiq %rdx, 104 (%rdi) -+ movntiq %rdx, 112 (%rdi) -+ movntiq %rdx, 120 (%rdi) -+ -+ leaq 128 (%rdi),%rdi -+ -+ jnz L(8byte_nt_move_loop) -+ -+ sfence -+ -+L(8byte_nt_move_skip): -+ andl $127,%r8d -+ -+ lea (%rdi,%r8,1),%rdi -+#ifndef PIC -+ lea L(setPxQx)(%rip),%r11 -+ jmpq *(%r11,%r8,8) # old scheme remained for nonPIC -+#else -+ lea L(Got0)(%rip),%r11 -+ lea L(setPxQx)(%rip),%rcx -+ movswq (%rcx,%r8,2),%rcx -+ lea (%rcx,%r11,1),%r11 -+ jmpq *%r11 -+#endif - - END (memset) - libc_hidden_builtin_def (memset) - --#if defined PIC && !defined NOT_IN_libc -+#if defined PIC && !defined NOT_IN_libc && !defined USE_MULTIARCH - strong_alias (__memset_chk, __memset_zero_constant_len_parameter) - .section .gnu.warning.__memset_zero_constant_len_parameter - .string "memset used with constant zero length parameter; this could be due to transposed parameters" -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/Makefile -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/Makefile -@@ -7,7 +7,8 @@ ifeq ($(subdir),string) - sysdep_routines += stpncpy-c strncpy-c strcmp-ssse3 strncmp-ssse3 \ - strend-sse4 memcmp-sse4 \ - strcasestr-nonascii strcasecmp_l-ssse3 \ -- strncase_l-ssse3 -+ strncase_l-ssse3 \ -+ memset-x86-64 - ifeq (yes,$(config-cflags-sse4)) - sysdep_routines += strcspn-c strpbrk-c strspn-c strstr-c strcasestr-c - CFLAGS-strcspn-c.c += -msse4 -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/bzero.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/bzero.S -@@ -0,0 +1,56 @@ -+/* Multiple versions of bzero -+ Copyright (C) 2010 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#include -+#include -+ -+ .text -+ENTRY(__bzero) -+ .type __bzero, @gnu_indirect_function -+ cmpl $0, __cpu_features+KIND_OFFSET(%rip) -+ jne 1f -+ call __init_cpu_features -+1: leaq __bzero_x86_64(%rip), %rax -+ testl $bit_Prefer_SSE_for_memop, __cpu_features+FEATURE_OFFSET+index_Prefer_SSE_for_memop(%rip) -+ jz 2f -+ leaq __bzero_sse2(%rip), %rax -+2: ret -+END(__bzero) -+ -+ .type __bzero_sse2, @function -+__bzero_sse2: -+ cfi_startproc -+ CALL_MCOUNT -+ mov %rsi,%rdx /* Adjust parameter. */ -+ xorl %esi,%esi /* Fill with 0s. */ -+ jmp __memset_sse2 -+ cfi_endproc -+ .size __bzero_sse2, .-__bzero_sse2 -+ -+ .type __bzero_x86_64, @function -+__bzero_x86_64: -+ cfi_startproc -+ CALL_MCOUNT -+ mov %rsi,%rdx /* Adjust parameter. */ -+ xorl %esi,%esi /* Fill with 0s. */ -+ jmp __memset_x86_64 -+ cfi_endproc -+ .size __bzero_x86_64, .-__bzero_x86_64 -+ -+weak_alias (__bzero, bzero) -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/cacheinfo.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/cacheinfo.c -@@ -0,0 +1,2 @@ -+#define DISABLE_PREFERRED_MEMORY_INSTRUCTION -+#include "../cacheinfo.c" -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/init-arch.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c -@@ -59,6 +59,11 @@ __init_cpu_features (void) - - get_common_indeces (&family, &model); - -+ /* Intel processors prefer SSE instruction for memory/string -+ routines if they are avaiable. */ -+ __cpu_features.feature[index_Prefer_SSE_for_memop] -+ |= bit_Prefer_SSE_for_memop; -+ - unsigned int eax = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].eax; - unsigned int extended_family = (eax >> 20) & 0xff; - unsigned int extended_model = (eax >> 12) & 0xf0; -@@ -92,6 +97,14 @@ __init_cpu_features (void) - kind = arch_kind_amd; - - get_common_indeces (&family, &model); -+ -+ unsigned int ecx = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx; -+ -+ /* AMD processors prefer SSE instructions for memory/string routines -+ if they are available, otherwise they prefer integer instructions. */ -+ if ((ecx & 0x200)) -+ __cpu_features.feature[index_Prefer_SSE_for_memop] -+ |= bit_Prefer_SSE_for_memop; - } - else - kind = arch_kind_other; -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/init-arch.h -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.h -@@ -16,7 +16,8 @@ - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - --#define bit_Fast_Rep_String (1 << 0) -+#define bit_Fast_Rep_String (1 << 0) -+#define bit_Prefer_SSE_for_memop (1 << 3) - - #ifdef __ASSEMBLER__ - -@@ -33,6 +34,7 @@ - # define index_SSE4_2 COMMON_CPUID_INDEX_1*CPUID_SIZE+CPUID_ECX_OFFSET - - #define index_Fast_Rep_String FEATURE_INDEX_1*FEATURE_SIZE -+# define index_Prefer_SSE_for_memop FEATURE_INDEX_1*FEATURE_SIZE - - #else /* __ASSEMBLER__ */ - -@@ -103,5 +105,12 @@ extern const struct cpu_features *__get_ - # define HAS_FMA HAS_CPU_FEATURE (COMMON_CPUID_INDEX_1, ecx, 12) - - # define index_Fast_Rep_String FEATURE_INDEX_1 -+# define index_Prefer_SSE_for_memop FEATURE_INDEX_1 -+ -+#define HAS_ARCH_FEATURE(idx, bit) \ -+ ((__get_cpu_features ()->feature[idx] & (bit)) != 0) -+ -+#define HAS_PREFER_SSE_FOR_MEMOP \ -+ HAS_ARCH_FEATURE (index_Prefer_SSE_for_memop, bit_Prefer_SSE_for_memop) - - #endif /* __ASSEMBLER__ */ -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/memset-x86-64.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/memset-x86-64.S -@@ -0,0 +1,18 @@ -+#include -+ -+#ifndef NOT_IN_libc -+# undef ENTRY_CHK -+# define ENTRY_CHK(name) \ -+ .type __memset_chk_x86_64, @function; \ -+ .globl __memset_chk_x86_64; \ -+ .p2align 4; \ -+ __memset_chk_x86_64: cfi_startproc; \ -+ CALL_MCOUNT -+# undef END_CHK -+# define END_CHK(name) \ -+ cfi_endproc; .size __memset_chk_x86_64, .-__memset_chk_x86_64 -+ -+# define libc_hidden_builtin_def(name) -+# define memset __memset_x86_64 -+# include "../memset.S" -+#endif -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/memset.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/memset.S -@@ -0,0 +1,74 @@ -+/* Multiple versions of memset -+ Copyright (C) 2010 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#include -+#include -+ -+/* Define multiple versions only for the definition in lib. */ -+#ifndef NOT_IN_libc -+ENTRY(memset) -+ .type memset, @gnu_indirect_function -+ cmpl $0, __cpu_features+KIND_OFFSET(%rip) -+ jne 1f -+ call __init_cpu_features -+1: leaq __memset_x86_64(%rip), %rax -+ testl $bit_Prefer_SSE_for_memop, __cpu_features+FEATURE_OFFSET+index_Prefer_SSE_for_memop(%rip) -+ jz 2f -+ leaq __memset_sse2(%rip), %rax -+2: ret -+END(memset) -+ -+# define USE_SSE2 1 -+ -+# undef ENTRY -+# define ENTRY(name) \ -+ .type __memset_sse2, @function; \ -+ .globl __memset_sse2; \ -+ .p2align 4; \ -+ __memset_sse2: cfi_startproc; \ -+ CALL_MCOUNT -+# undef END -+# define END(name) \ -+ cfi_endproc; .size __memset_sse2, .-__memset_sse2 -+ -+# undef ENTRY_CHK -+# define ENTRY_CHK(name) \ -+ .type __memset_chk_sse2, @function; \ -+ .globl __memset_chk_sse2; \ -+ .p2align 4; \ -+ __memset_chk_sse2: cfi_startproc; \ -+ CALL_MCOUNT -+# undef END_CHK -+# define END_CHK(name) \ -+ cfi_endproc; .size __memset_chk_sse2, .-__memset_chk_sse2 -+ -+# ifdef SHARED -+# undef libc_hidden_builtin_def -+/* It doesn't make sense to send libc-internal memset calls through a PLT. -+ The speedup we get from using GPR instruction is likely eaten away -+ by the indirect call in the PLT. */ -+# define libc_hidden_builtin_def(name) \ -+ .globl __GI_memset; __GI_memset = __memset_sse2 -+# endif -+ -+# undef strong_alias -+# define strong_alias(original, alias) -+#endif -+ -+#include "../memset.S" -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/memset_chk.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/memset_chk.S -@@ -0,0 +1,44 @@ -+/* Multiple versions of __memset_chk -+ Copyright (C) 2010 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#include -+#include -+ -+/* Define multiple versions only for the definition in lib. */ -+#ifndef NOT_IN_libc -+# ifdef SHARED -+ENTRY(__memset_chk) -+ .type __memset_chk, @gnu_indirect_function -+ cmpl $0, __cpu_features+KIND_OFFSET(%rip) -+ jne 1f -+ call __init_cpu_features -+1: leaq __memset_chk_x86_64(%rip), %rax -+ testl $bit_Prefer_SSE_for_memop, __cpu_features+FEATURE_OFFSET+index_Prefer_SSE_for_memop(%rip) -+ jz 2f -+ leaq __memset_chk_sse2(%rip), %rax -+2: ret -+END(__memset_chk) -+ -+strong_alias (__memset_chk, __memset_zero_constant_len_parameter) -+ .section .gnu.warning.__memset_zero_constant_len_parameter -+ .string "memset used with constant zero length parameter; this could be due to transposed parameters" -+# else -+# include "../memset_chk.S" -+# endif -+#endif diff --git a/src/patches/glibc/glibc-rh676591.patch b/src/patches/glibc/glibc-rh676591.patch deleted file mode 100644 index fd6df1e42b..0000000000 --- a/src/patches/glibc/glibc-rh676591.patch +++ /dev/null @@ -1,352 +0,0 @@ -2011-05-15 Ulrich Drepper - - [BZ #11901] - * include/stdlib.h: Move include protection to the right place. - Define abort_msg_s. Declare __abort_msg with it. - * stdlib/abort.c (__abort_msg): Adjust type. - * assert/assert.c (__assert_fail_base): New function. Majority - of code from __assert_fail. Allocate memory for __abort_msg with - mmap. - (__assert_fail): Now call __assert_fail_base. - * assert/assert-perr.c: Remove bulk of implementation. Use - __assert_fail_base. - * include/assert.hL Declare __assert_fail_base. - * sysdeps/posix/libc_fatal.c: Allocate memory for __abort_msg with - mmap. - * sysdeps/unix/sysv/linux/libc_fatal.c: Likewise. - -Index: glibc-2.12-2-gc4ccff1/assert/assert-perr.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/assert/assert-perr.c -+++ glibc-2.12-2-gc4ccff1/assert/assert-perr.c -@@ -17,66 +17,23 @@ - 02111-1307 USA. */ - - #include --#include - #include --#include --#include - #include --#include --#include - - --extern const char *__progname; -- --#ifdef USE_IN_LIBIO --# include --# include --# define fflush(s) INTUSE(_IO_fflush) (s) --#endif -- - /* This function, when passed an error number, a filename, and a line - number, prints a message on the standard error stream of the form: -- a.c:10: foobar: Unexpected error: Computer bought the farm -+ a.c:10: foobar: Unexpected error: Computer bought the farm - It then aborts program execution via a call to `abort'. */ -- --#ifdef FATAL_PREPARE_INCLUDE --# include FATAL_PREPARE_INCLUDE --#endif -- - void - __assert_perror_fail (int errnum, - const char *file, unsigned int line, - const char *function) - { - char errbuf[1024]; -- char *buf; -- --#ifdef FATAL_PREPARE -- FATAL_PREPARE; --#endif -- -- if (__asprintf (&buf, _("%s%s%s:%u: %s%sUnexpected error: %s.\n"), -- __progname, __progname[0] ? ": " : "", -- file, line, -- function ? function : "", function ? ": " : "", -- __strerror_r (errnum, errbuf, sizeof errbuf)) >= 0) -- { -- /* Print the message. */ -- (void) __fxprintf (NULL, "%s", buf); -- (void) fflush (stderr); -- -- /* We have to free the old buffer since the application might -- catch the SIGABRT signal. */ -- char *old = atomic_exchange_acq (&__abort_msg, buf); -- free (old); -- } -- else -- { -- /* At least print a minimal message. */ -- static const char errstr[] = "Unexpected error.\n"; -- __libc_write (STDERR_FILENO, errstr, sizeof (errstr) - 1); -- } - -- abort (); -+ char *e = __strerror_r (errnum, errbuf, sizeof errbuf); -+ __assert_fail_base (_("%s%s%s:%u: %s%sUnexpected error: %s.\n"), -+ e, file, line, function); - } - libc_hidden_def (__assert_perror_fail) -Index: glibc-2.12-2-gc4ccff1/assert/assert.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/assert/assert.c -+++ glibc-2.12-2-gc4ccff1/assert/assert.c -@@ -19,11 +19,13 @@ - - #include - #include -+#include - #include - #include - #include - #include - #include -+#include - - - extern const char *__progname; -@@ -45,31 +47,44 @@ extern const char *__progname; - #endif - - --#undef __assert_fail - void --__assert_fail (const char *assertion, const char *file, unsigned int line, -- const char *function) -+__assert_fail_base (const char *fmt, const char *assertion, const char *file, -+ unsigned int line, const char *function) - { -- char *buf; -+ char *str; - - #ifdef FATAL_PREPARE - FATAL_PREPARE; - #endif - -- if (__asprintf (&buf, _("%s%s%s:%u: %s%sAssertion `%s' failed.\n"), -+ int total; -+ if (__asprintf (&str, fmt, - __progname, __progname[0] ? ": " : "", - file, line, - function ? function : "", function ? ": " : "", -- assertion) >= 0) -+ assertion, &total) >= 0) - { - /* Print the message. */ -- (void) __fxprintf (NULL, "%s", buf); -+ (void) __fxprintf (NULL, "%s", str); - (void) fflush (stderr); - -- /* We have to free the old buffer since the application might -- catch the SIGABRT signal. */ -- char *old = atomic_exchange_acq (&__abort_msg, buf); -- free (old); -+ total = (total + 1 + GLRO(dl_pagesize) - 1) & ~(GLRO(dl_pagesize) - 1); -+ struct abort_msg_s *buf = __mmap (NULL, total, PROT_READ | PROT_WRITE, -+ MAP_ANON | MAP_PRIVATE, -1, 0); -+ if (__builtin_expect (buf != MAP_FAILED, 1)) -+ { -+ buf->size = total; -+ strcpy (buf->msg, str); -+ -+ /* We have to free the old buffer since the application might -+ catch the SIGABRT signal. */ -+ struct abort_msg_s *old = atomic_exchange_acq (&__abort_msg, buf); -+ -+ if (old != NULL) -+ __munmap (old, old->size); -+ } -+ -+ free (str); - } - else - { -@@ -80,4 +95,14 @@ __assert_fail (const char *assertion, co - - abort (); - } -+ -+ -+#undef __assert_fail -+void -+__assert_fail (const char *assertion, const char *file, unsigned int line, -+ const char *function) -+{ -+ __assert_fail_base (_("%s%s%s:%u: %s%sAssertion `%s' failed.\n%n"), -+ assertion, file, line, function); -+} - hidden_def(__assert_fail) -Index: glibc-2.12-2-gc4ccff1/include/assert.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/include/assert.h -+++ glibc-2.12-2-gc4ccff1/include/assert.h -@@ -13,6 +13,12 @@ extern void __assert_perror_fail (int __ - __const char *__function) - __THROW __attribute__ ((__noreturn__)); - -+/* The real implementation of the two functions above. */ -+extern void __assert_fail_base (const char *fmt, const char *assertion, -+ const char *file, unsigned int line, -+ const char *function) -+ __THROW __attribute__ ((__noreturn__)); -+ - #if !defined NOT_IN_libc || defined IS_IN_rtld - hidden_proto (__assert_fail) - hidden_proto (__assert_perror_fail) -Index: glibc-2.12-2-gc4ccff1/include/stdlib.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/include/stdlib.h -+++ glibc-2.12-2-gc4ccff1/include/stdlib.h -@@ -223,16 +223,21 @@ extern int __qfcvt_r (long double __valu - # define __cxa_atexit(func, arg, d) INTUSE(__cxa_atexit) (func, arg, d) - # endif - --#endif -- - extern void *__default_morecore (ptrdiff_t) __THROW; - libc_hidden_proto (__default_morecore) - --extern char *__abort_msg; -+struct abort_msg_s -+{ -+ unsigned int size; -+ char msg[0]; -+}; -+extern struct abort_msg_s *__abort_msg; - libc_hidden_proto (__abort_msg) - - __END_DECLS - -+#endif -+ - #undef __Need_M_And_C - - #endif /* include/stdlib.h */ -Index: glibc-2.12-2-gc4ccff1/stdlib/abort.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/stdlib/abort.c -+++ glibc-2.12-2-gc4ccff1/stdlib/abort.c -@@ -37,7 +37,7 @@ - #endif - - /* Exported variable to locate abort message in core files etc. */ --char *__abort_msg __attribute__ ((nocommon)); -+struct abort_msg_s *__abort_msg __attribute__ ((nocommon)); - libc_hidden_def (__abort_msg) - - /* We must avoid to run in circles. Therefore we remember how far we -Index: glibc-2.12-2-gc4ccff1/sysdeps/posix/libc_fatal.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/posix/libc_fatal.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/posix/libc_fatal.c -@@ -20,6 +20,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -125,18 +126,28 @@ __libc_message (int do_abort, const char - if (TEMP_FAILURE_RETRY (__writev (fd, iov, nlist)) == total) - written = true; - -- char *buf = do_abort ? malloc (total + 1) : NULL; -- if (buf != NULL) -+ if (do_abort) - { -- char *wp = buf; -- for (int cnt = 0; cnt < nlist; ++cnt) -- wp = mempcpy (wp, iov[cnt].iov_base, iov[cnt].iov_len); -- *wp = '\0'; -- -- /* We have to free the old buffer since the application might -- catch the SIGABRT signal. */ -- char *old = atomic_exchange_acq (&__abort_msg, buf); -- free (old); -+ total = ((total + 1 + GLRO(dl_pagesize) - 1) -+ & ~(GLRO(dl_pagesize) - 1)); -+ struct abort_msg_s *buf = __mmap (NULL, total, -+ PROT_READ | PROT_WRITE, -+ MAP_ANON | MAP_PRIVATE, -1, 0); -+ if (buf != MAP_FAILED) -+ { -+ buf->size = total; -+ char *wp = buf->msg; -+ for (int cnt = 0; cnt < nlist; ++cnt) -+ wp = mempcpy (wp, iov[cnt].iov_base, iov[cnt].iov_len); -+ *wp = '\0'; -+ -+ /* We have to free the old buffer since the application might -+ catch the SIGABRT signal. */ -+ struct abort_msg_s *old = atomic_exchange_acq (&__abort_msg, -+ buf); -+ if (old != NULL) -+ __munmap (old, old->size); -+ } - } - } - -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/libc_fatal.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/libc_fatal.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/libc_fatal.c -@@ -20,6 +20,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -28,6 +29,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -134,18 +136,28 @@ __libc_message (int do_abort, const char - if (cnt == total) - written = true; - -- char *buf = do_abort ? malloc (total + 1) : NULL; -- if (buf != NULL) -+ if (do_abort) - { -- char *wp = buf; -- for (int cnt = 0; cnt < nlist; ++cnt) -- wp = mempcpy (wp, iov[cnt].iov_base, iov[cnt].iov_len); -- *wp = '\0'; -- -- /* We have to free the old buffer since the application might -- catch the SIGABRT signal. */ -- char *old = atomic_exchange_acq (&__abort_msg, buf); -- free (old); -+ total = ((total + 1 + GLRO(dl_pagesize) - 1) -+ & ~(GLRO(dl_pagesize) - 1)); -+ struct abort_msg_s *buf = __mmap (NULL, total, -+ PROT_READ | PROT_WRITE, -+ MAP_ANON | MAP_PRIVATE, -1, 0); -+ if (__builtin_expect (buf != MAP_FAILED, 1)) -+ { -+ buf->size = total; -+ char *wp = buf->msg; -+ for (int cnt = 0; cnt < nlist; ++cnt) -+ wp = mempcpy (wp, iov[cnt].iov_base, iov[cnt].iov_len); -+ *wp = '\0'; -+ -+ /* We have to free the old buffer since the application might -+ catch the SIGABRT signal. */ -+ struct abort_msg_s *old = atomic_exchange_acq (&__abort_msg, -+ buf); -+ if (old != NULL) -+ __munmap (old, old->size); -+ } - } - } - diff --git a/src/patches/glibc/glibc-rh681054.patch b/src/patches/glibc/glibc-rh681054.patch deleted file mode 100644 index 27b7361830..0000000000 --- a/src/patches/glibc/glibc-rh681054.patch +++ /dev/null @@ -1,514 +0,0 @@ -2011-03-18 Ulrich Drepper - - * posix/fnmatch.c (fnmatch): Check size of pattern in wide - character representation. - Partly based on a patch by Tomas Hoger . - -2010-11-11 Andreas Schwab - - * posix/fnmatch_loop.c (NEW_PATTERN): Fix use of alloca. - * posix/Makefile (tests): Add $(objpfx)tst-fnmatch-mem. - (tst-fnmatch-ENV): Set MALLOC_TRACE. - ($(objpfx)tst-fnmatch-mem): New rule. - (generated): Add tst-fnmatch-mem and tst-fnmatch.mtrace. - * posix/tst-fnmatch.c (main): Call mtrace. - -2010-08-09 Ulrich Drepper - - [BZ #11883] - * posix/fnmatch.c: Keep track of alloca use and fall back on malloc. - * posix/fnmatch_loop.c: Likewise. - -Index: glibc-2.12-2-gc4ccff1/posix/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/posix/Makefile -+++ glibc-2.12-2-gc4ccff1/posix/Makefile -@@ -114,7 +114,8 @@ generated := $(addprefix wordexp-test-re - tst-rxspencer-mem tst-rxspencer.mtrace tst-getconf.out \ - tst-pcre-mem tst-pcre.mtrace tst-boost-mem tst-boost.mtrace \ - bug-ga2.mtrace bug-ga2-mem bug-glob2.mtrace bug-glob2-mem \ -- tst-vfork3-mem tst-vfork3.mtrace getconf.speclist -+ tst-vfork3-mem tst-vfork3.mtrace getconf.speclist \ -+ tst-fnmatch-mem tst-fnmatch.mtrace - - include ../Rules - -@@ -226,7 +227,7 @@ ifeq (no,$(cross-compiling)) - tests: $(objpfx)bug-regex2-mem $(objpfx)bug-regex14-mem \ - $(objpfx)bug-regex21-mem $(objpfx)tst-rxspencer-mem \ - $(objpfx)tst-pcre-mem $(objpfx)tst-boost-mem $(objpfx)tst-getconf.out \ -- $(objpfx)bug-glob2-mem $(objpfx)tst-vfork3-mem -+ $(objpfx)bug-glob2-mem $(objpfx)tst-vfork3-mem $(objpfx)tst-fnmatch-mem - xtests: $(objpfx)bug-ga2-mem - endif - -@@ -238,6 +239,11 @@ annexc-CFLAGS = -O - $(objpfx)annexc: annexc.c - $(native-compile) - -+tst-fnmatch-ENV += MALLOC_TRACE=$(objpfx)tst-fnmatch.mtrace -+ -+$(objpfx)tst-fnmatch-mem: $(objpfx)tst-fnmatch.out -+ $(common-objpfx)malloc/mtrace $(objpfx)tst-fnmatch.mtrace > $@ -+ - bug-regex2-ENV = MALLOC_TRACE=$(objpfx)bug-regex2.mtrace - - $(objpfx)bug-regex2-mem: $(objpfx)bug-regex2.out -Index: glibc-2.12-2-gc4ccff1/posix/fnmatch.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/posix/fnmatch.c -+++ glibc-2.12-2-gc4ccff1/posix/fnmatch.c -@@ -41,6 +41,12 @@ - # include - #endif - -+#ifdef _LIBC -+# include -+#else -+# define alloca_account(size., var) alloca (size) -+#endif -+ - /* For platform which support the ISO C amendement 1 functionality we - support user defined character classes. */ - #if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) -@@ -330,8 +336,11 @@ fnmatch (pattern, string, flags) - mbstate_t ps; - size_t n; - const char *p; -+ wchar_t *wpattern_malloc = NULL; - wchar_t *wpattern; -+ wchar_t *wstring_malloc = NULL; - wchar_t *wstring; -+ size_t alloca_used = 0; - - /* Convert the strings into wide characters. */ - memset (&ps, '\0', sizeof (ps)); -@@ -343,7 +352,8 @@ fnmatch (pattern, string, flags) - #endif - if (__builtin_expect (n < 1024, 1)) - { -- wpattern = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t)); -+ wpattern = (wchar_t *) alloca_account ((n + 1) * sizeof (wchar_t), -+ alloca_used); - n = mbsrtowcs (wpattern, &p, n + 1, &ps); - if (__builtin_expect (n == (size_t) -1, 0)) - /* Something wrong. -@@ -365,8 +375,16 @@ fnmatch (pattern, string, flags) - XXX Do we have to set `errno' to something which mbsrtows hasn't - already done? */ - return -1; -- wpattern = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t)); -+ if (__builtin_expect (n >= (size_t) -1 / sizeof (wchar_t), 0)) -+ { -+ __set_errno (ENOMEM); -+ return -2; -+ } -+ wpattern_malloc = wpattern -+ = (wchar_t *) malloc ((n + 1) * sizeof (wchar_t)); - assert (mbsinit (&ps)); -+ if (wpattern == NULL) -+ return -2; - (void) mbsrtowcs (wpattern, &pattern, n + 1, &ps); - } - -@@ -379,13 +397,18 @@ fnmatch (pattern, string, flags) - p = string; - if (__builtin_expect (n < 1024, 1)) - { -- wstring = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t)); -+ wstring = (wchar_t *) alloca_account ((n + 1) * sizeof (wchar_t), -+ alloca_used); - n = mbsrtowcs (wstring, &p, n + 1, &ps); - if (__builtin_expect (n == (size_t) -1, 0)) -- /* Something wrong. -- XXX Do we have to set `errno' to something which mbsrtows hasn't -- already done? */ -- return -1; -+ { -+ /* Something wrong. -+ XXX Do we have to set `errno' to something which -+ mbsrtows hasn't already done? */ -+ free_return: -+ free (wpattern_malloc); -+ return -1; -+ } - if (p) - { - memset (&ps, '\0', sizeof (ps)); -@@ -400,19 +423,38 @@ fnmatch (pattern, string, flags) - /* Something wrong. - XXX Do we have to set `errno' to something which mbsrtows hasn't - already done? */ -- return -1; -- wstring = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t)); -+ goto free_return; -+ if (__builtin_expect (n >= (size_t) -1 / sizeof (wchar_t), 0)) -+ { -+ free (wpattern_malloc); -+ __set_errno (ENOMEM); -+ return -2; -+ } -+ -+ wstring_malloc = wstring -+ = (wchar_t *) malloc ((n + 1) * sizeof (wchar_t)); -+ if (wstring == NULL) -+ { -+ free (wpattern_malloc); -+ return -2; -+ } - assert (mbsinit (&ps)); - (void) mbsrtowcs (wstring, &string, n + 1, &ps); - } - -- return internal_fnwmatch (wpattern, wstring, wstring + n, -- flags & FNM_PERIOD, flags, NULL); -+ int res = internal_fnwmatch (wpattern, wstring, wstring + n, -+ flags & FNM_PERIOD, flags, NULL, -+ alloca_used); -+ -+ free (wstring_malloc); -+ free (wpattern_malloc); -+ -+ return res; - } - # endif /* mbstate_t and mbsrtowcs or _LIBC. */ - - return internal_fnmatch (pattern, string, string + strlen (string), -- flags & FNM_PERIOD, flags, NULL); -+ flags & FNM_PERIOD, flags, NULL, 0); - } - - # ifdef _LIBC -Index: glibc-2.12-2-gc4ccff1/posix/fnmatch_loop.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/posix/fnmatch_loop.c -+++ glibc-2.12-2-gc4ccff1/posix/fnmatch_loop.c -@@ -28,22 +28,24 @@ struct STRUCT - it matches, nonzero if not. */ - static int FCT (const CHAR *pattern, const CHAR *string, - const CHAR *string_end, int no_leading_period, int flags, -- struct STRUCT *ends) -+ struct STRUCT *ends, size_t alloca_used) - internal_function; - static int EXT (INT opt, const CHAR *pattern, const CHAR *string, -- const CHAR *string_end, int no_leading_period, int flags) -+ const CHAR *string_end, int no_leading_period, int flags, -+ size_t alloca_used) - internal_function; - static const CHAR *END (const CHAR *patternp) internal_function; - - static int - internal_function --FCT (pattern, string, string_end, no_leading_period, flags, ends) -+FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used) - const CHAR *pattern; - const CHAR *string; - const CHAR *string_end; - int no_leading_period; - int flags; - struct STRUCT *ends; -+ size_t alloca_used; - { - register const CHAR *p = pattern, *n = string; - register UCHAR c; -@@ -67,10 +69,8 @@ FCT (pattern, string, string_end, no_lea - case L('?'): - if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') - { -- int res; -- -- res = EXT (c, p, n, string_end, no_leading_period, -- flags); -+ int res = EXT (c, p, n, string_end, no_leading_period, -+ flags, alloca_used); - if (res != -1) - return res; - } -@@ -99,10 +99,8 @@ FCT (pattern, string, string_end, no_lea - case L('*'): - if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') - { -- int res; -- -- res = EXT (c, p, n, string_end, no_leading_period, -- flags); -+ int res = EXT (c, p, n, string_end, no_leading_period, -+ flags, alloca_used); - if (res != -1) - return res; - } -@@ -191,7 +189,7 @@ FCT (pattern, string, string_end, no_lea - - for (--p; n < endp; ++n, no_leading_period = 0) - if (FCT (p, n, string_end, no_leading_period, flags2, -- &end) == 0) -+ &end, alloca_used) == 0) - goto found; - } - else if (c == L('/') && (flags & FNM_FILE_NAME)) -@@ -200,7 +198,7 @@ FCT (pattern, string, string_end, no_lea - ++n; - if (n < string_end && *n == L('/') - && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags, -- NULL) == 0)) -+ NULL, alloca_used) == 0)) - return 0; - } - else -@@ -214,7 +212,7 @@ FCT (pattern, string, string_end, no_lea - for (--p; n < endp; ++n, no_leading_period = 0) - if (FOLD ((UCHAR) *n) == c - && (FCT (p, n, string_end, no_leading_period, flags2, -- &end) == 0)) -+ &end, alloca_used) == 0)) - { - found: - if (end.pattern == NULL) -@@ -749,7 +747,7 @@ FCT (pattern, string, string_end, no_lea - _NL_COLLATE_SYMB_EXTRAMB); - - /* Locate the character in the hashing -- table. */ -+ table. */ - hash = elem_hash (str, c1); - - idx = 0; -@@ -971,9 +969,8 @@ FCT (pattern, string, string_end, no_lea - case L('!'): - if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') - { -- int res; -- -- res = EXT (c, p, n, string_end, no_leading_period, flags); -+ int res = EXT (c, p, n, string_end, no_leading_period, flags, -+ alloca_used); - if (res != -1) - return res; - } -@@ -1052,26 +1049,32 @@ END (const CHAR *pattern) - static int - internal_function - EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, -- int no_leading_period, int flags) -+ int no_leading_period, int flags, size_t alloca_used) - { - const CHAR *startp; - int level; - struct patternlist - { - struct patternlist *next; -+ CHAR malloced; - CHAR str[0]; - } *list = NULL; - struct patternlist **lastp = &list; - size_t pattern_len = STRLEN (pattern); -+ int any_malloced = 0; - const CHAR *p; - const CHAR *rs; -+ int retval = 0; - - /* Parse the pattern. Store the individual parts in the list. */ - level = 0; - for (startp = p = pattern + 1; level >= 0; ++p) - if (*p == L('\0')) -- /* This is an invalid pattern. */ -- return -1; -+ { -+ /* This is an invalid pattern. */ -+ retval = -1; -+ goto out; -+ } - else if (*p == L('[')) - { - /* Handle brackets special. */ -@@ -1088,8 +1091,11 @@ EXT (INT opt, const CHAR *pattern, const - /* Skip over all characters of the list. */ - while (*p != L(']')) - if (*p++ == L('\0')) -- /* This is no valid pattern. */ -- return -1; -+ { -+ /* This is no valid pattern. */ -+ retval = -1; -+ goto out; -+ } - } - else if ((*p == L('?') || *p == L('*') || *p == L('+') || *p == L('@') - || *p == L('!')) && p[1] == L('(')) -@@ -1102,15 +1108,25 @@ EXT (INT opt, const CHAR *pattern, const - /* This means we found the end of the pattern. */ - #define NEW_PATTERN \ - struct patternlist *newp; \ -- \ -- if (opt == L('?') || opt == L('@')) \ -- newp = alloca (sizeof (struct patternlist) \ -- + (pattern_len * sizeof (CHAR))); \ -+ size_t slen = (opt == L('?') || opt == L('@') \ -+ ? pattern_len : (p - startp + 1)); \ -+ slen = sizeof (struct patternlist) + (slen * sizeof (CHAR)); \ -+ int malloced = ! __libc_use_alloca (alloca_used + slen); \ -+ if (__builtin_expect (malloced, 0)) \ -+ { \ -+ newp = malloc (slen); \ -+ if (newp == NULL) \ -+ { \ -+ retval = -2; \ -+ goto out; \ -+ } \ -+ any_malloced = 1; \ -+ } \ - else \ -- newp = alloca (sizeof (struct patternlist) \ -- + ((p - startp + 1) * sizeof (CHAR))); \ -- *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L('\0'); \ -+ newp = alloca_account (slen, alloca_used); \ - newp->next = NULL; \ -+ newp->malloced = malloced; \ -+ *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L('\0'); \ - *lastp = newp; \ - lastp = &newp->next - NEW_PATTERN; -@@ -1131,8 +1147,9 @@ EXT (INT opt, const CHAR *pattern, const - switch (opt) - { - case L('*'): -- if (FCT (p, string, string_end, no_leading_period, flags, NULL) == 0) -- return 0; -+ if (FCT (p, string, string_end, no_leading_period, flags, NULL, -+ alloca_used) == 0) -+ goto success; - /* FALLTHROUGH */ - - case L('+'): -@@ -1143,7 +1160,7 @@ EXT (INT opt, const CHAR *pattern, const - current pattern. */ - if (FCT (list->str, string, rs, no_leading_period, - flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD, -- NULL) == 0 -+ NULL, alloca_used) == 0 - /* This was successful. Now match the rest with the rest - of the pattern. */ - && (FCT (p, rs, string_end, -@@ -1151,7 +1168,7 @@ EXT (INT opt, const CHAR *pattern, const - ? no_leading_period - : rs[-1] == '/' && NO_LEADING_PERIOD (flags) ? 1 : 0, - flags & FNM_FILE_NAME -- ? flags : flags & ~FNM_PERIOD, NULL) == 0 -+ ? flags : flags & ~FNM_PERIOD, NULL, alloca_used) == 0 - /* This didn't work. Try the whole pattern. */ - || (rs != string - && FCT (pattern - 1, rs, string_end, -@@ -1160,18 +1177,21 @@ EXT (INT opt, const CHAR *pattern, const - : (rs[-1] == '/' && NO_LEADING_PERIOD (flags) - ? 1 : 0), - flags & FNM_FILE_NAME -- ? flags : flags & ~FNM_PERIOD, NULL) == 0))) -+ ? flags : flags & ~FNM_PERIOD, NULL, -+ alloca_used) == 0))) - /* It worked. Signal success. */ -- return 0; -+ goto success; - } - while ((list = list->next) != NULL); - - /* None of the patterns lead to a match. */ -- return FNM_NOMATCH; -+ retval = FNM_NOMATCH; -+ break; - - case L('?'): -- if (FCT (p, string, string_end, no_leading_period, flags, NULL) == 0) -- return 0; -+ if (FCT (p, string, string_end, no_leading_period, flags, NULL, -+ alloca_used) == 0) -+ goto success; - /* FALLTHROUGH */ - - case L('@'): -@@ -1183,13 +1203,14 @@ EXT (INT opt, const CHAR *pattern, const - if (FCT (STRCAT (list->str, p), string, string_end, - no_leading_period, - flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD, -- NULL) == 0) -+ NULL, alloca_used) == 0) - /* It worked. Signal success. */ -- return 0; -+ goto success; - while ((list = list->next) != NULL); - - /* None of the patterns lead to a match. */ -- return FNM_NOMATCH; -+ retval = FNM_NOMATCH; -+ break; - - case L('!'): - for (rs = string; rs <= string_end; ++rs) -@@ -1199,7 +1220,7 @@ EXT (INT opt, const CHAR *pattern, const - for (runp = list; runp != NULL; runp = runp->next) - if (FCT (runp->str, string, rs, no_leading_period, - flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD, -- NULL) == 0) -+ NULL, alloca_used) == 0) - break; - - /* If none of the patterns matched see whether the rest does. */ -@@ -1209,21 +1230,34 @@ EXT (INT opt, const CHAR *pattern, const - ? no_leading_period - : rs[-1] == '/' && NO_LEADING_PERIOD (flags) ? 1 : 0, - flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD, -- NULL) == 0)) -+ NULL, alloca_used) == 0)) - /* This is successful. */ -- return 0; -+ goto success; - } - - /* None of the patterns together with the rest of the pattern - lead to a match. */ -- return FNM_NOMATCH; -+ retval = FNM_NOMATCH; -+ break; - - default: - assert (! "Invalid extended matching operator"); -+ retval = -1; - break; - } - -- return -1; -+ success: -+ out: -+ if (any_malloced) -+ while (list != NULL) -+ { -+ struct patternlist *old = list; -+ list = list->next; -+ if (old->malloced) -+ free (old); -+ } -+ -+ return retval; - } - - -Index: glibc-2.12-2-gc4ccff1/posix/tst-fnmatch.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/posix/tst-fnmatch.c -+++ glibc-2.12-2-gc4ccff1/posix/tst-fnmatch.c -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include - - - static char *next_input (char **line, int first, int last); -@@ -46,6 +47,8 @@ main (void) - size_t escpatternlen = 0; - int nr = 0; - -+ mtrace (); -+ - /* Read lines from stdin with the following format: - - locale input-string match-string flags result diff --git a/src/patches/glibc/glibc-rh688720.patch b/src/patches/glibc/glibc-rh688720.patch deleted file mode 100644 index 0c86f25407..0000000000 --- a/src/patches/glibc/glibc-rh688720.patch +++ /dev/null @@ -1,1638 +0,0 @@ -2011-11-11 Ulrich Drepper - - [BZ #13147] - * locales/de_AT: Use de_DE for LC_NUMERIC. - * locales/es_BO: Use es_ES for LC_MESSAGES and LC_NUMERIC. - * locales/es_CL: Likewise. - * locales/es_CO: Likewise. - * locales/es_DO: Likewise. - * locales/es_EC: Likewise. - * locales/es_GT: Likewise. - * locales/es_HN: Likewise. - * locales/es_MX: Likewise. - * locales/es_NI: Likewise. - * locales/es_PA: Likewise. - * locales/es_PE: Likewise. - * locales/es_PR: Likewise. - * locales/es_PY: Likewise. - * locales/es_SV: Likewise. - * locales/es_UY: Likewise. - * locales/es_VE: Likewise. - * locales/es_ES: Fix LC_NUMERIC. - * locales/es_CR: Use es_ES for LC_MESSAGES. - * locales/fr_BE: Actually use grouping in LC_NUMERIC. - * locales/fr_CA: Use fr_FR for LC_MESSAGES and LC_NUMERIC. - * locales/fr_CH: Use de_CH for LC_NUMERIC. - * locales/fr_LU: Use same grouping in LC_NUMERIC as in LC_MONETARY. - -2010-05-17 Andreas Schwab - - * locales/es_CR (LC_ADDRESS): Fix character names in lang_ab. - -Index: glibc-2.12-2-gc4ccff1/localedata/locales/de_AT -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/de_AT -+++ glibc-2.12-2-gc4ccff1/localedata/locales/de_AT -@@ -78,41 +78,39 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "de_DE" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_BO -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_BO -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_BO -@@ -56,8 +56,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -79,41 +78,39 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_CL -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_CL -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_CL -@@ -56,8 +56,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -79,41 +78,39 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_CO -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_CO -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_CO -@@ -56,8 +56,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -79,41 +78,39 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_CR -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_CR -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_CR -@@ -47,8 +47,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -79,34 +78,34 @@ END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -@@ -157,7 +156,7 @@ country_post "" - country_car "" - country_isbn "9930,9977,9968" - lang_name "" --lang_ab "<0065><0073>" -+lang_ab "" - lang_term "" - country_ab2 "" - country_ab3 "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_DO -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_DO -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_DO -@@ -56,8 +56,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -79,41 +78,39 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_EC -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_EC -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_EC -@@ -56,8 +56,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -79,41 +78,39 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_ES -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_ES -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_ES -@@ -85,40 +85,40 @@ END LC_MONETARY - - LC_NUMERIC - decimal_point "" --thousands_sep "" --grouping 0;0 -+thousands_sep "" -+grouping 3;3 - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_GT -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_GT -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_GT -@@ -55,8 +55,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -78,9 +77,7 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_HN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_HN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_HN -@@ -56,8 +56,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -79,41 +78,39 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_MX -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_MX -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_MX -@@ -56,8 +56,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -79,41 +78,39 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_NI -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_NI -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_NI -@@ -47,8 +47,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -70,9 +69,7 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_PA -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_PA -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_PA -@@ -56,8 +56,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -79,41 +78,39 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_PE -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_PE -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_PE -@@ -56,8 +56,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -79,41 +78,39 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_PR -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_PR -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_PR -@@ -47,8 +47,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -70,41 +69,39 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_PY -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_PY -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_PY -@@ -56,8 +56,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -79,41 +78,39 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_SV -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_SV -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_SV -@@ -56,8 +56,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -79,9 +78,7 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_UY -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_UY -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_UY -@@ -56,8 +56,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -79,41 +78,39 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_VE -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_VE -+++ glibc-2.12-2-gc4ccff1/localedata/locales/es_VE -@@ -56,8 +56,7 @@ copy "es_ES" - END LC_CTYPE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "es_ES" - END LC_MESSAGES - - LC_MONETARY -@@ -79,41 +78,39 @@ n_sign_posn 1 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "es_ES" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/fr_BE -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/fr_BE -+++ glibc-2.12-2-gc4ccff1/localedata/locales/fr_BE -@@ -79,7 +79,7 @@ END LC_MONETARY - LC_NUMERIC - decimal_point "" - thousands_sep "" --grouping 0;0 -+grouping 3;3 - END LC_NUMERIC - - LC_TIME -Index: glibc-2.12-2-gc4ccff1/localedata/locales/fr_CA -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/fr_CA -+++ glibc-2.12-2-gc4ccff1/localedata/locales/fr_CA -@@ -55,8 +55,7 @@ copy "en_CA" - END LC_COLLATE - - LC_MESSAGES --yesexpr "" --noexpr "" -+copy "fr_FR" - END LC_MESSAGES - - LC_MONETARY -@@ -78,41 +77,39 @@ n_sign_posn 0 - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "fr_FR" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/fr_CH -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/fr_CH -+++ glibc-2.12-2-gc4ccff1/localedata/locales/fr_CH -@@ -64,41 +64,39 @@ copy "de_CH" - END LC_MONETARY - - LC_NUMERIC --decimal_point "" --thousands_sep "" --grouping 0;0 -+copy "de_CH" - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" -Index: glibc-2.12-2-gc4ccff1/localedata/locales/fr_LU -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/fr_LU -+++ glibc-2.12-2-gc4ccff1/localedata/locales/fr_LU -@@ -78,40 +78,40 @@ END LC_MONETARY - - LC_NUMERIC - decimal_point "" --thousands_sep "" --grouping 0;0 -+thousands_sep "" -+grouping 3;3 - END LC_NUMERIC - - LC_TIME - abday "";"";/ -- "";"";/ -- "";"";/ -- "" -+ "";"";/ -+ "";"";/ -+ "" - day "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"" -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"" - mon "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "";/ -- "" -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "";/ -+ "" - d_t_fmt "" - d_fmt "" - t_fmt "" diff --git a/src/patches/glibc/glibc-rh688980.patch b/src/patches/glibc/glibc-rh688980.patch deleted file mode 100644 index ce989264fa..0000000000 --- a/src/patches/glibc/glibc-rh688980.patch +++ /dev/null @@ -1,20 +0,0 @@ -2011-05-11 Ulrich Drepper - - [BZ #12625] - * misc/mntent_r.c (addmntent): Flush the stream after the output - -Index: glibc-2.12-2-gc4ccff1/misc/mntent_r.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/misc/mntent_r.c -+++ glibc-2.12-2-gc4ccff1/misc/mntent_r.c -@@ -263,8 +263,8 @@ __addmntent (FILE *stream, const struct - mntcopy.mnt_type, - mntcopy.mnt_opts, - mntcopy.mnt_freq, -- mntcopy.mnt_passno) -- < 0 ? 1 : 0); -+ mntcopy.mnt_passno) < 0 -+ || fflush (stream) != 0); - } - weak_alias (__addmntent, addmntent) - diff --git a/src/patches/glibc/glibc-rh689471.patch b/src/patches/glibc/glibc-rh689471.patch deleted file mode 100644 index 4c7fc8a7f2..0000000000 --- a/src/patches/glibc/glibc-rh689471.patch +++ /dev/null @@ -1,333 +0,0 @@ -2011-03-20 H.J. Lu - - [BZ #12597] - * string/test-strncmp.c (do_page_test): New function. - (check2): Likewise. - (test_main): Call check2. - * sysdeps/x86_64/multiarch/strcmp.S: Properly cross page boundary. - -Index: glibc-2.12-2-gc4ccff1/string/test-strncmp.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/string/test-strncmp.c -+++ glibc-2.12-2-gc4ccff1/string/test-strncmp.c -@@ -200,6 +200,27 @@ do_test (size_t align1, size_t align2, s - } - - static void -+do_page_test (size_t offset1, size_t offset2, char *s2) -+{ -+ char *s1; -+ int exp_result; -+ -+ if (offset1 >= page_size || offset2 >= page_size) -+ return; -+ -+ s1 = (char *) (buf1 + offset1); -+ s2 += offset2; -+ -+ exp_result= *s1; -+ -+ FOR_EACH_IMPL (impl, 0) -+ { -+ check_result (impl, s1, s2, page_size, -exp_result); -+ check_result (impl, s2, s1, page_size, exp_result); -+ } -+} -+ -+static void - do_random_tests (void) - { - size_t i, j, n, align1, align2, pos, len1, len2, size; -@@ -312,6 +333,25 @@ check1 (void) - } - } - -+static void -+check2 (void) -+{ -+ size_t i; -+ char *s1, *s2; -+ -+ s1 = (char *) buf1; -+ for (i = 0; i < page_size - 1; i++) -+ s1[i] = 23; -+ s1[i] = 0; -+ -+ s2 = strdup (s1); -+ -+ for (i = 0; i < 64; ++i) -+ do_page_test (3990 + i, 2635, s2); -+ -+ free (s2); -+} -+ - int - test_main (void) - { -@@ -320,6 +360,7 @@ test_main (void) - test_init (); - - check1 (); -+ check2 (); - - printf ("%23s", ""); - FOR_EACH_IMPL (impl, 0) -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcmp.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/strcmp.S -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcmp.S -@@ -452,6 +452,7 @@ LABEL(loop_ashr_1_use_sse4_2): - add $16, %r10 - jg LABEL(nibble_ashr_1_use_sse4_2) - -+LABEL(nibble_ashr_1_use_sse4_2_restart): - movdqa (%rdi, %rdx), %xmm0 - palignr $1, -16(%rdi, %rdx), %xmm0 - # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -@@ -499,7 +500,7 @@ LABEL(nibble_ashr_1_use_sse4_2): - jae LABEL(nibble_ashr_use_sse4_2_exit) - # endif - cmp $14, %ecx -- ja LABEL(loop_ashr_1_use_sse4_2) -+ ja LABEL(nibble_ashr_1_use_sse4_2_restart) - - jmp LABEL(nibble_ashr_use_sse4_2_exit) - -@@ -544,6 +545,7 @@ LABEL(loop_ashr_2_use_sse4_2): - add $16, %r10 - jg LABEL(nibble_ashr_2_use_sse4_2) - -+LABEL(nibble_ashr_2_use_sse4_2_restart): - movdqa (%rdi, %rdx), %xmm0 - palignr $2, -16(%rdi, %rdx), %xmm0 - # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -@@ -591,7 +593,7 @@ LABEL(nibble_ashr_2_use_sse4_2): - jae LABEL(nibble_ashr_use_sse4_2_exit) - # endif - cmp $13, %ecx -- ja LABEL(loop_ashr_2_use_sse4_2) -+ ja LABEL(nibble_ashr_2_use_sse4_2_restart) - - jmp LABEL(nibble_ashr_use_sse4_2_exit) - -@@ -636,6 +638,7 @@ LABEL(loop_ashr_3_use_sse4_2): - add $16, %r10 - jg LABEL(nibble_ashr_3_use_sse4_2) - -+LABEL(nibble_ashr_3_use_sse4_2_restart): - movdqa (%rdi, %rdx), %xmm0 - palignr $3, -16(%rdi, %rdx), %xmm0 - # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -@@ -683,7 +686,7 @@ LABEL(nibble_ashr_3_use_sse4_2): - jae LABEL(nibble_ashr_use_sse4_2_exit) - # endif - cmp $12, %ecx -- ja LABEL(loop_ashr_3_use_sse4_2) -+ ja LABEL(nibble_ashr_3_use_sse4_2_restart) - - jmp LABEL(nibble_ashr_use_sse4_2_exit) - -@@ -729,6 +732,7 @@ LABEL(loop_ashr_4_use_sse4_2): - add $16, %r10 - jg LABEL(nibble_ashr_4_use_sse4_2) - -+LABEL(nibble_ashr_4_use_sse4_2_restart): - movdqa (%rdi, %rdx), %xmm0 - palignr $4, -16(%rdi, %rdx), %xmm0 - # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -@@ -776,7 +780,7 @@ LABEL(nibble_ashr_4_use_sse4_2): - jae LABEL(nibble_ashr_use_sse4_2_exit) - # endif - cmp $11, %ecx -- ja LABEL(loop_ashr_4_use_sse4_2) -+ ja LABEL(nibble_ashr_4_use_sse4_2_restart) - - jmp LABEL(nibble_ashr_use_sse4_2_exit) - -@@ -822,6 +826,7 @@ LABEL(loop_ashr_5_use_sse4_2): - add $16, %r10 - jg LABEL(nibble_ashr_5_use_sse4_2) - -+LABEL(nibble_ashr_5_use_sse4_2_restart): - movdqa (%rdi, %rdx), %xmm0 - palignr $5, -16(%rdi, %rdx), %xmm0 - # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -@@ -870,7 +875,7 @@ LABEL(nibble_ashr_5_use_sse4_2): - jae LABEL(nibble_ashr_use_sse4_2_exit) - # endif - cmp $10, %ecx -- ja LABEL(loop_ashr_5_use_sse4_2) -+ ja LABEL(nibble_ashr_5_use_sse4_2_restart) - - jmp LABEL(nibble_ashr_use_sse4_2_exit) - -@@ -916,6 +921,7 @@ LABEL(loop_ashr_6_use_sse4_2): - add $16, %r10 - jg LABEL(nibble_ashr_6_use_sse4_2) - -+LABEL(nibble_ashr_6_use_sse4_2_restart): - movdqa (%rdi, %rdx), %xmm0 - palignr $6, -16(%rdi, %rdx), %xmm0 - # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -@@ -963,7 +969,7 @@ LABEL(nibble_ashr_6_use_sse4_2): - jae LABEL(nibble_ashr_use_sse4_2_exit) - # endif - cmp $9, %ecx -- ja LABEL(loop_ashr_6_use_sse4_2) -+ ja LABEL(nibble_ashr_6_use_sse4_2_restart) - - jmp LABEL(nibble_ashr_use_sse4_2_exit) - -@@ -1009,6 +1015,7 @@ LABEL(loop_ashr_7_use_sse4_2): - add $16, %r10 - jg LABEL(nibble_ashr_7_use_sse4_2) - -+LABEL(nibble_ashr_7_use_sse4_2_restart): - movdqa (%rdi, %rdx), %xmm0 - palignr $7, -16(%rdi, %rdx), %xmm0 - # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -@@ -1056,7 +1063,7 @@ LABEL(nibble_ashr_7_use_sse4_2): - jae LABEL(nibble_ashr_use_sse4_2_exit) - # endif - cmp $8, %ecx -- ja LABEL(loop_ashr_7_use_sse4_2) -+ ja LABEL(nibble_ashr_7_use_sse4_2_restart) - - jmp LABEL(nibble_ashr_use_sse4_2_exit) - -@@ -1102,6 +1109,7 @@ LABEL(loop_ashr_8_use_sse4_2): - add $16, %r10 - jg LABEL(nibble_ashr_8_use_sse4_2) - -+LABEL(nibble_ashr_8_use_sse4_2_restart): - movdqa (%rdi, %rdx), %xmm0 - palignr $8, -16(%rdi, %rdx), %xmm0 - # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -@@ -1149,7 +1157,7 @@ LABEL(nibble_ashr_8_use_sse4_2): - jae LABEL(nibble_ashr_use_sse4_2_exit) - # endif - cmp $7, %ecx -- ja LABEL(loop_ashr_8_use_sse4_2) -+ ja LABEL(nibble_ashr_8_use_sse4_2_restart) - - jmp LABEL(nibble_ashr_use_sse4_2_exit) - -@@ -1195,6 +1203,7 @@ LABEL(loop_ashr_9_use_sse4_2): - add $16, %r10 - jg LABEL(nibble_ashr_9_use_sse4_2) - -+LABEL(nibble_ashr_9_use_sse4_2_restart): - movdqa (%rdi, %rdx), %xmm0 - - palignr $9, -16(%rdi, %rdx), %xmm0 -@@ -1243,7 +1252,7 @@ LABEL(nibble_ashr_9_use_sse4_2): - jae LABEL(nibble_ashr_use_sse4_2_exit) - # endif - cmp $6, %ecx -- ja LABEL(loop_ashr_9_use_sse4_2) -+ ja LABEL(nibble_ashr_9_use_sse4_2_restart) - - jmp LABEL(nibble_ashr_use_sse4_2_exit) - -@@ -1289,6 +1298,7 @@ LABEL(loop_ashr_10_use_sse4_2): - add $16, %r10 - jg LABEL(nibble_ashr_10_use_sse4_2) - -+LABEL(nibble_ashr_10_use_sse4_2_restart): - movdqa (%rdi, %rdx), %xmm0 - palignr $10, -16(%rdi, %rdx), %xmm0 - # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -@@ -1336,7 +1346,7 @@ LABEL(nibble_ashr_10_use_sse4_2): - jae LABEL(nibble_ashr_use_sse4_2_exit) - # endif - cmp $5, %ecx -- ja LABEL(loop_ashr_10_use_sse4_2) -+ ja LABEL(nibble_ashr_10_use_sse4_2_restart) - - jmp LABEL(nibble_ashr_use_sse4_2_exit) - -@@ -1382,6 +1392,7 @@ LABEL(loop_ashr_11_use_sse4_2): - add $16, %r10 - jg LABEL(nibble_ashr_11_use_sse4_2) - -+LABEL(nibble_ashr_11_use_sse4_2_restart): - movdqa (%rdi, %rdx), %xmm0 - palignr $11, -16(%rdi, %rdx), %xmm0 - # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -@@ -1429,7 +1440,7 @@ LABEL(nibble_ashr_11_use_sse4_2): - jae LABEL(nibble_ashr_use_sse4_2_exit) - # endif - cmp $4, %ecx -- ja LABEL(loop_ashr_11_use_sse4_2) -+ ja LABEL(nibble_ashr_11_use_sse4_2_restart) - - jmp LABEL(nibble_ashr_use_sse4_2_exit) - -@@ -1475,6 +1486,7 @@ LABEL(loop_ashr_12_use_sse4_2): - add $16, %r10 - jg LABEL(nibble_ashr_12_use_sse4_2) - -+LABEL(nibble_ashr_12_use_sse4_2_restart): - movdqa (%rdi, %rdx), %xmm0 - palignr $12, -16(%rdi, %rdx), %xmm0 - # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -@@ -1522,7 +1534,7 @@ LABEL(nibble_ashr_12_use_sse4_2): - jae LABEL(nibble_ashr_use_sse4_2_exit) - # endif - cmp $3, %ecx -- ja LABEL(loop_ashr_12_use_sse4_2) -+ ja LABEL(nibble_ashr_12_use_sse4_2_restart) - - jmp LABEL(nibble_ashr_use_sse4_2_exit) - -@@ -1569,6 +1581,7 @@ LABEL(loop_ashr_13_use_sse4_2): - add $16, %r10 - jg LABEL(nibble_ashr_13_use_sse4_2) - -+LABEL(nibble_ashr_13_use_sse4_2_restart): - movdqa (%rdi, %rdx), %xmm0 - palignr $13, -16(%rdi, %rdx), %xmm0 - # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -@@ -1616,7 +1629,7 @@ LABEL(nibble_ashr_13_use_sse4_2): - jae LABEL(nibble_ashr_use_sse4_2_exit) - # endif - cmp $2, %ecx -- ja LABEL(loop_ashr_13_use_sse4_2) -+ ja LABEL(nibble_ashr_13_use_sse4_2_restart) - - jmp LABEL(nibble_ashr_use_sse4_2_exit) - -@@ -1663,6 +1676,7 @@ LABEL(loop_ashr_14_use_sse4_2): - add $16, %r10 - jg LABEL(nibble_ashr_14_use_sse4_2) - -+LABEL(nibble_ashr_14_use_sse4_2_restart): - movdqa (%rdi, %rdx), %xmm0 - palignr $14, -16(%rdi, %rdx), %xmm0 - # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -@@ -1710,7 +1724,7 @@ LABEL(nibble_ashr_14_use_sse4_2): - jae LABEL(nibble_ashr_use_sse4_2_exit) - # endif - cmp $1, %ecx -- ja LABEL(loop_ashr_14_use_sse4_2) -+ ja LABEL(nibble_ashr_14_use_sse4_2_restart) - - jmp LABEL(nibble_ashr_use_sse4_2_exit) - -@@ -1759,6 +1773,7 @@ LABEL(loop_ashr_15_use_sse4_2): - add $16, %r10 - jg LABEL(nibble_ashr_15_use_sse4_2) - -+LABEL(nibble_ashr_15_use_sse4_2_restart): - movdqa (%rdi, %rdx), %xmm0 - palignr $15, -16(%rdi, %rdx), %xmm0 - # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L -@@ -1806,7 +1821,7 @@ LABEL(nibble_ashr_15_use_sse4_2): - jae LABEL(nibble_ashr_use_sse4_2_exit) - # endif - cmp $0, %ecx -- ja LABEL(loop_ashr_15_use_sse4_2) -+ ja LABEL(nibble_ashr_15_use_sse4_2_restart) - - LABEL(nibble_ashr_use_sse4_2_exit): - # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L diff --git a/src/patches/glibc/glibc-rh692177.patch b/src/patches/glibc/glibc-rh692177.patch deleted file mode 100644 index 1036769bf5..0000000000 --- a/src/patches/glibc/glibc-rh692177.patch +++ /dev/null @@ -1,137 +0,0 @@ -2011-03-22 Ulrich Drepper - - * sysdeps/unix/sysv/linux/i386/sysconf.c (intel_check_word): Increment - round counter. - * sysdeps/x86_64/cacheinfo.c (intel_check_word): Likewise. - -2011-03-20 Ulrich Drepper - - [BZ #12587] - * sysdeps/unix/sysv/linux/i386/sysconf.c (intel_check_word): - Handle cache information in CPU leaf 4. - * sysdeps/x86_64/cacheinfo.c (intel_check_word): Likewise. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/i386/sysconf.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/i386/sysconf.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/i386/sysconf.c -@@ -186,6 +186,57 @@ intel_check_word (int name, unsigned int - /* No need to look further. */ - break; - } -+ else if (byte == 0xff) -+ { -+ /* CPUID leaf 0x4 contains all the information. We need to -+ iterate over it. */ -+ unsigned int eax; -+ unsigned int ebx; -+ unsigned int ecx; -+ unsigned int edx; -+ -+ unsigned int round = 0; -+ while (1) -+ { -+ asm volatile ("xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1" -+ : "=a" (eax), "=r" (ebx), "=c" (ecx), "=d" (edx) -+ : "0" (4), "2" (round)); -+ -+ enum { null = 0, data = 1, inst = 2, uni = 3 } type = eax & 0x1f; -+ if (type == null) -+ /* That was the end. */ -+ break; -+ -+ unsigned int level = (eax >> 5) & 0x7; -+ -+ if ((level == 1 && type == data -+ && folded_rel_name == M(_SC_LEVEL1_DCACHE_SIZE)) -+ || (level == 1 && type == inst -+ && folded_rel_name == M(_SC_LEVEL1_ICACHE_SIZE)) -+ || (level == 2 && folded_rel_name == M(_SC_LEVEL2_CACHE_SIZE)) -+ || (level == 3 && folded_rel_name == M(_SC_LEVEL3_CACHE_SIZE)) -+ || (level == 4 && folded_rel_name == M(_SC_LEVEL4_CACHE_SIZE))) -+ { -+ unsigned int offset = M(name) - folded_rel_name; -+ -+ if (offset == 0) -+ /* Cache size. */ -+ return (((ebx >> 22) + 1) -+ * (((ebx >> 12) & 0x3ff) + 1) -+ * ((ebx & 0xfff) + 1) -+ * (ecx + 1)); -+ if (offset == 1) -+ return (ebx >> 22) + 1; -+ -+ assert (offset == 2); -+ return (ebx & 0xfff) + 1; -+ } -+ -+ ++round; -+ } -+ /* There is no other cache information anywhere else. */ -+ break; -+ } - else - { - if (byte == 0x49 && folded_rel_name == M(_SC_LEVEL3_CACHE_SIZE)) -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/cacheinfo.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/cacheinfo.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/cacheinfo.c -@@ -181,6 +181,57 @@ intel_check_word (int name, unsigned int - /* No need to look further. */ - break; - } -+ else if (byte == 0xff) -+ { -+ /* CPUID leaf 0x4 contains all the information. We need to -+ iterate over it. */ -+ unsigned int eax; -+ unsigned int ebx; -+ unsigned int ecx; -+ unsigned int edx; -+ -+ unsigned int round = 0; -+ while (1) -+ { -+ asm volatile ("xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1" -+ : "=a" (eax), "=r" (ebx), "=c" (ecx), "=d" (edx) -+ : "0" (4), "2" (round)); -+ -+ enum { null = 0, data = 1, inst = 2, uni = 3 } type = eax & 0x1f; -+ if (type == null) -+ /* That was the end. */ -+ break; -+ -+ unsigned int level = (eax >> 5) & 0x7; -+ -+ if ((level == 1 && type == data -+ && folded_rel_name == M(_SC_LEVEL1_DCACHE_SIZE)) -+ || (level == 1 && type == inst -+ && folded_rel_name == M(_SC_LEVEL1_ICACHE_SIZE)) -+ || (level == 2 && folded_rel_name == M(_SC_LEVEL2_CACHE_SIZE)) -+ || (level == 3 && folded_rel_name == M(_SC_LEVEL3_CACHE_SIZE)) -+ || (level == 4 && folded_rel_name == M(_SC_LEVEL4_CACHE_SIZE))) -+ { -+ unsigned int offset = M(name) - folded_rel_name; -+ -+ if (offset == 0) -+ /* Cache size. */ -+ return (((ebx >> 22) + 1) -+ * (((ebx >> 12) & 0x3ff) + 1) -+ * ((ebx & 0xfff) + 1) -+ * (ecx + 1)); -+ if (offset == 1) -+ return (ebx >> 22) + 1; -+ -+ assert (offset == 2); -+ return (ebx & 0xfff) + 1; -+ } -+ -+ ++round; -+ } -+ /* There is no other cache information anywhere else. */ -+ break; -+ } - else - { - if (byte == 0x49 && folded_rel_name == M(_SC_LEVEL3_CACHE_SIZE)) diff --git a/src/patches/glibc/glibc-rh692838.patch b/src/patches/glibc/glibc-rh692838.patch deleted file mode 100644 index aa2adf14f2..0000000000 --- a/src/patches/glibc/glibc-rh692838.patch +++ /dev/null @@ -1,6165 +0,0 @@ -2011-05-09 Ulrich Drepper - - [BZ #12541] - * locales/ar_IN: Update currency_symbol. - * locales/as_IN: Likewise. - * locales/bn_IN: Likewise. - * locales/en_IN: Likewise. - * locales/gu_IN: Likewise. - * locales/hi_IN: Likewise. - * locales/kn_IN: Likewise. - * locales/kok_IN: Likewise. - * locales/ks_IN: Likewise. - * locales/ml_IN: Likewise. - * locales/mr_IN: Likewise. - * locales/or_IN: Likewise. - * locales/pa_IN: Likewise. - * locales/sa_IN: Likewise. - * locales/sd_IN: Likewise. - * locales/ta_IN: Likewise. - * locales/te_IN: Likewise. - Patch by pravin.d.s@gmail.com. - -2011-05-09 Ulrich Drepper - - [BZ #12711] - * locale/C-translit.h.in: Add entry for U20B9. - Patch by pravin.d.s@gmail.com. - -Index: glibc-2.12-2-gc4ccff1/locale/C-translit.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/locale/C-translit.h -+++ glibc-2.12-2-gc4ccff1/locale/C-translit.h -@@ -1,4 +1,4 @@ --#define NTRANSLIT 1353 -+#define NTRANSLIT 1354 - static const uint32_t translit_from_idx[] = - { - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, -@@ -113,7 +113,7 @@ static const uint32_t translit_from_idx[ - 2616, 2618, 2620, 2622, 2624, 2626, 2628, 2630, 2632, 2634, 2636, 2638, - 2640, 2642, 2644, 2646, 2648, 2650, 2652, 2654, 2656, 2658, 2660, 2662, - 2664, 2666, 2668, 2670, 2672, 2674, 2676, 2678, 2680, 2682, 2684, 2686, -- 2688, 2690, 2692, 2694, 2696, 2698, 2700, 2702, 2704 -+ 2688, 2690, 2692, 2694, 2696, 2698, 2700, 2702, 2704, 2706 - }; - static const wchar_t translit_from_tbl[] = - L"\x00a0" L"\0" L"\x00a9" L"\0" L"\x00ab" L"\0" L"\x00ad" L"\0" L"\x00ae" -@@ -134,334 +134,334 @@ static const wchar_t translit_from_tbl[] - L"\0" L"\x2035" L"\0" L"\x2036" L"\0" L"\x2037" L"\0" L"\x2039" L"\0" - L"\x203a" L"\0" L"\x203c" L"\0" L"\x2044" L"\0" L"\x2047" L"\0" L"\x2048" - L"\0" L"\x2049" L"\0" L"\x205f" L"\0" L"\x2060" L"\0" L"\x2061" L"\0" -- L"\x2062" L"\0" L"\x2063" L"\0" L"\x20a8" L"\0" L"\x20ac" L"\0" L"\x2100" -- L"\0" L"\x2101" L"\0" L"\x2102" L"\0" L"\x2105" L"\0" L"\x2106" L"\0" -- L"\x210a" L"\0" L"\x210b" L"\0" L"\x210c" L"\0" L"\x210d" L"\0" L"\x210e" -- L"\0" L"\x2110" L"\0" L"\x2111" L"\0" L"\x2112" L"\0" L"\x2113" L"\0" -- L"\x2115" L"\0" L"\x2116" L"\0" L"\x2119" L"\0" L"\x211a" L"\0" L"\x211b" -- L"\0" L"\x211c" L"\0" L"\x211d" L"\0" L"\x2121" L"\0" L"\x2122" L"\0" -- L"\x2124" L"\0" L"\x2126" L"\0" L"\x2128" L"\0" L"\x212c" L"\0" L"\x212d" -- L"\0" L"\x212e" L"\0" L"\x212f" L"\0" L"\x2130" L"\0" L"\x2131" L"\0" -- L"\x2133" L"\0" L"\x2134" L"\0" L"\x2139" L"\0" L"\x2145" L"\0" L"\x2146" -- L"\0" L"\x2147" L"\0" L"\x2148" L"\0" L"\x2149" L"\0" L"\x2153" L"\0" -- L"\x2154" L"\0" L"\x2155" L"\0" L"\x2156" L"\0" L"\x2157" L"\0" L"\x2158" -- L"\0" L"\x2159" L"\0" L"\x215a" L"\0" L"\x215b" L"\0" L"\x215c" L"\0" -- L"\x215d" L"\0" L"\x215e" L"\0" L"\x215f" L"\0" L"\x2160" L"\0" L"\x2161" -- L"\0" L"\x2162" L"\0" L"\x2163" L"\0" L"\x2164" L"\0" L"\x2165" L"\0" -- L"\x2166" L"\0" L"\x2167" L"\0" L"\x2168" L"\0" L"\x2169" L"\0" L"\x216a" -- L"\0" L"\x216b" L"\0" L"\x216c" L"\0" L"\x216d" L"\0" L"\x216e" L"\0" -- L"\x216f" L"\0" L"\x2170" L"\0" L"\x2171" L"\0" L"\x2172" L"\0" L"\x2173" -- L"\0" L"\x2174" L"\0" L"\x2175" L"\0" L"\x2176" L"\0" L"\x2177" L"\0" -- L"\x2178" L"\0" L"\x2179" L"\0" L"\x217a" L"\0" L"\x217b" L"\0" L"\x217c" -- L"\0" L"\x217d" L"\0" L"\x217e" L"\0" L"\x217f" L"\0" L"\x2190" L"\0" -- L"\x2192" L"\0" L"\x2194" L"\0" L"\x21d0" L"\0" L"\x21d2" L"\0" L"\x21d4" -- L"\0" L"\x2212" L"\0" L"\x2215" L"\0" L"\x2216" L"\0" L"\x2217" L"\0" -- L"\x2223" L"\0" L"\x2236" L"\0" L"\x223c" L"\0" L"\x2264" L"\0" L"\x2265" -- L"\0" L"\x226a" L"\0" L"\x226b" L"\0" L"\x22d8" L"\0" L"\x22d9" L"\0" -- L"\x2400" L"\0" L"\x2401" L"\0" L"\x2402" L"\0" L"\x2403" L"\0" L"\x2404" -- L"\0" L"\x2405" L"\0" L"\x2406" L"\0" L"\x2407" L"\0" L"\x2408" L"\0" -- L"\x2409" L"\0" L"\x240a" L"\0" L"\x240b" L"\0" L"\x240c" L"\0" L"\x240d" -- L"\0" L"\x240e" L"\0" L"\x240f" L"\0" L"\x2410" L"\0" L"\x2411" L"\0" -- L"\x2412" L"\0" L"\x2413" L"\0" L"\x2414" L"\0" L"\x2415" L"\0" L"\x2416" -- L"\0" L"\x2417" L"\0" L"\x2418" L"\0" L"\x2419" L"\0" L"\x241a" L"\0" -- L"\x241b" L"\0" L"\x241c" L"\0" L"\x241d" L"\0" L"\x241e" L"\0" L"\x241f" -- L"\0" L"\x2420" L"\0" L"\x2421" L"\0" L"\x2423" L"\0" L"\x2424" L"\0" -- L"\x2460" L"\0" L"\x2461" L"\0" L"\x2462" L"\0" L"\x2463" L"\0" L"\x2464" -- L"\0" L"\x2465" L"\0" L"\x2466" L"\0" L"\x2467" L"\0" L"\x2468" L"\0" -- L"\x2469" L"\0" L"\x246a" L"\0" L"\x246b" L"\0" L"\x246c" L"\0" L"\x246d" -- L"\0" L"\x246e" L"\0" L"\x246f" L"\0" L"\x2470" L"\0" L"\x2471" L"\0" -- L"\x2472" L"\0" L"\x2473" L"\0" L"\x2474" L"\0" L"\x2475" L"\0" L"\x2476" -- L"\0" L"\x2477" L"\0" L"\x2478" L"\0" L"\x2479" L"\0" L"\x247a" L"\0" -- L"\x247b" L"\0" L"\x247c" L"\0" L"\x247d" L"\0" L"\x247e" L"\0" L"\x247f" -- L"\0" L"\x2480" L"\0" L"\x2481" L"\0" L"\x2482" L"\0" L"\x2483" L"\0" -- L"\x2484" L"\0" L"\x2485" L"\0" L"\x2486" L"\0" L"\x2487" L"\0" L"\x2488" -- L"\0" L"\x2489" L"\0" L"\x248a" L"\0" L"\x248b" L"\0" L"\x248c" L"\0" -- L"\x248d" L"\0" L"\x248e" L"\0" L"\x248f" L"\0" L"\x2490" L"\0" L"\x2491" -- L"\0" L"\x2492" L"\0" L"\x2493" L"\0" L"\x2494" L"\0" L"\x2495" L"\0" -- L"\x2496" L"\0" L"\x2497" L"\0" L"\x2498" L"\0" L"\x2499" L"\0" L"\x249a" -- L"\0" L"\x249b" L"\0" L"\x249c" L"\0" L"\x249d" L"\0" L"\x249e" L"\0" -- L"\x249f" L"\0" L"\x24a0" L"\0" L"\x24a1" L"\0" L"\x24a2" L"\0" L"\x24a3" -- L"\0" L"\x24a4" L"\0" L"\x24a5" L"\0" L"\x24a6" L"\0" L"\x24a7" L"\0" -- L"\x24a8" L"\0" L"\x24a9" L"\0" L"\x24aa" L"\0" L"\x24ab" L"\0" L"\x24ac" -- L"\0" L"\x24ad" L"\0" L"\x24ae" L"\0" L"\x24af" L"\0" L"\x24b0" L"\0" -- L"\x24b1" L"\0" L"\x24b2" L"\0" L"\x24b3" L"\0" L"\x24b4" L"\0" L"\x24b5" -- L"\0" L"\x24b6" L"\0" L"\x24b7" L"\0" L"\x24b8" L"\0" L"\x24b9" L"\0" -- L"\x24ba" L"\0" L"\x24bb" L"\0" L"\x24bc" L"\0" L"\x24bd" L"\0" L"\x24be" -- L"\0" L"\x24bf" L"\0" L"\x24c0" L"\0" L"\x24c1" L"\0" L"\x24c2" L"\0" -- L"\x24c3" L"\0" L"\x24c4" L"\0" L"\x24c5" L"\0" L"\x24c6" L"\0" L"\x24c7" -- L"\0" L"\x24c8" L"\0" L"\x24c9" L"\0" L"\x24ca" L"\0" L"\x24cb" L"\0" -- L"\x24cc" L"\0" L"\x24cd" L"\0" L"\x24ce" L"\0" L"\x24cf" L"\0" L"\x24d0" -- L"\0" L"\x24d1" L"\0" L"\x24d2" L"\0" L"\x24d3" L"\0" L"\x24d4" L"\0" -- L"\x24d5" L"\0" L"\x24d6" L"\0" L"\x24d7" L"\0" L"\x24d8" L"\0" L"\x24d9" -- L"\0" L"\x24da" L"\0" L"\x24db" L"\0" L"\x24dc" L"\0" L"\x24dd" L"\0" -- L"\x24de" L"\0" L"\x24df" L"\0" L"\x24e0" L"\0" L"\x24e1" L"\0" L"\x24e2" -- L"\0" L"\x24e3" L"\0" L"\x24e4" L"\0" L"\x24e5" L"\0" L"\x24e6" L"\0" -- L"\x24e7" L"\0" L"\x24e8" L"\0" L"\x24e9" L"\0" L"\x24ea" L"\0" L"\x2500" -- L"\0" L"\x2502" L"\0" L"\x250c" L"\0" L"\x2510" L"\0" L"\x2514" L"\0" -- L"\x2518" L"\0" L"\x251c" L"\0" L"\x2524" L"\0" L"\x252c" L"\0" L"\x2534" -- L"\0" L"\x253c" L"\0" L"\x25e6" L"\0" L"\x2a74" L"\0" L"\x2a75" L"\0" -- L"\x2a76" L"\0" L"\x3000" L"\0" L"\x30a0" L"\0" L"\x3251" L"\0" L"\x3252" -- L"\0" L"\x3253" L"\0" L"\x3254" L"\0" L"\x3255" L"\0" L"\x3256" L"\0" -- L"\x3257" L"\0" L"\x3258" L"\0" L"\x3259" L"\0" L"\x325a" L"\0" L"\x325b" -- L"\0" L"\x325c" L"\0" L"\x325d" L"\0" L"\x325e" L"\0" L"\x325f" L"\0" -- L"\x32b1" L"\0" L"\x32b2" L"\0" L"\x32b3" L"\0" L"\x32b4" L"\0" L"\x32b5" -- L"\0" L"\x32b6" L"\0" L"\x32b7" L"\0" L"\x32b8" L"\0" L"\x32b9" L"\0" -- L"\x32ba" L"\0" L"\x32bb" L"\0" L"\x32bc" L"\0" L"\x32bd" L"\0" L"\x32be" -- L"\0" L"\x32bf" L"\0" L"\x3371" L"\0" L"\x3372" L"\0" L"\x3373" L"\0" -- L"\x3374" L"\0" L"\x3375" L"\0" L"\x3376" L"\0" L"\x3380" L"\0" L"\x3381" -- L"\0" L"\x3382" L"\0" L"\x3383" L"\0" L"\x3384" L"\0" L"\x3385" L"\0" -- L"\x3386" L"\0" L"\x3387" L"\0" L"\x3388" L"\0" L"\x3389" L"\0" L"\x338a" -- L"\0" L"\x338b" L"\0" L"\x338c" L"\0" L"\x338d" L"\0" L"\x338e" L"\0" -- L"\x338f" L"\0" L"\x3390" L"\0" L"\x3391" L"\0" L"\x3392" L"\0" L"\x3393" -- L"\0" L"\x3394" L"\0" L"\x3395" L"\0" L"\x3396" L"\0" L"\x3397" L"\0" -- L"\x3398" L"\0" L"\x3399" L"\0" L"\x339a" L"\0" L"\x339b" L"\0" L"\x339c" -- L"\0" L"\x339d" L"\0" L"\x339e" L"\0" L"\x339f" L"\0" L"\x33a0" L"\0" -- L"\x33a1" L"\0" L"\x33a2" L"\0" L"\x33a3" L"\0" L"\x33a4" L"\0" L"\x33a5" -- L"\0" L"\x33a6" L"\0" L"\x33a7" L"\0" L"\x33a8" L"\0" L"\x33a9" L"\0" -- L"\x33aa" L"\0" L"\x33ab" L"\0" L"\x33ac" L"\0" L"\x33ad" L"\0" L"\x33ae" -- L"\0" L"\x33af" L"\0" L"\x33b0" L"\0" L"\x33b1" L"\0" L"\x33b2" L"\0" -- L"\x33b3" L"\0" L"\x33b4" L"\0" L"\x33b5" L"\0" L"\x33b6" L"\0" L"\x33b7" -- L"\0" L"\x33b8" L"\0" L"\x33b9" L"\0" L"\x33ba" L"\0" L"\x33bb" L"\0" -- L"\x33bc" L"\0" L"\x33bd" L"\0" L"\x33be" L"\0" L"\x33bf" L"\0" L"\x33c2" -- L"\0" L"\x33c3" L"\0" L"\x33c4" L"\0" L"\x33c5" L"\0" L"\x33c6" L"\0" -- L"\x33c7" L"\0" L"\x33c8" L"\0" L"\x33c9" L"\0" L"\x33ca" L"\0" L"\x33cb" -- L"\0" L"\x33cc" L"\0" L"\x33cd" L"\0" L"\x33ce" L"\0" L"\x33cf" L"\0" -- L"\x33d0" L"\0" L"\x33d1" L"\0" L"\x33d2" L"\0" L"\x33d3" L"\0" L"\x33d4" -- L"\0" L"\x33d5" L"\0" L"\x33d6" L"\0" L"\x33d7" L"\0" L"\x33d8" L"\0" -- L"\x33d9" L"\0" L"\x33da" L"\0" L"\x33db" L"\0" L"\x33dc" L"\0" L"\x33dd" -- L"\0" L"\xfb00" L"\0" L"\xfb01" L"\0" L"\xfb02" L"\0" L"\xfb03" L"\0" -- L"\xfb04" L"\0" L"\xfb06" L"\0" L"\xfb29" L"\0" L"\xfe00" L"\0" L"\xfe01" -- L"\0" L"\xfe02" L"\0" L"\xfe03" L"\0" L"\xfe04" L"\0" L"\xfe05" L"\0" -- L"\xfe06" L"\0" L"\xfe07" L"\0" L"\xfe08" L"\0" L"\xfe09" L"\0" L"\xfe0a" -- L"\0" L"\xfe0b" L"\0" L"\xfe0c" L"\0" L"\xfe0d" L"\0" L"\xfe0e" L"\0" -- L"\xfe0f" L"\0" L"\xfe4d" L"\0" L"\xfe4e" L"\0" L"\xfe4f" L"\0" L"\xfe50" -- L"\0" L"\xfe52" L"\0" L"\xfe54" L"\0" L"\xfe55" L"\0" L"\xfe56" L"\0" -- L"\xfe57" L"\0" L"\xfe59" L"\0" L"\xfe5a" L"\0" L"\xfe5b" L"\0" L"\xfe5c" -- L"\0" L"\xfe5f" L"\0" L"\xfe60" L"\0" L"\xfe61" L"\0" L"\xfe62" L"\0" -- L"\xfe63" L"\0" L"\xfe64" L"\0" L"\xfe65" L"\0" L"\xfe66" L"\0" L"\xfe68" -- L"\0" L"\xfe69" L"\0" L"\xfe6a" L"\0" L"\xfe6b" L"\0" L"\xfeff" L"\0" -- L"\xff01" L"\0" L"\xff02" L"\0" L"\xff03" L"\0" L"\xff04" L"\0" L"\xff05" -- L"\0" L"\xff06" L"\0" L"\xff07" L"\0" L"\xff08" L"\0" L"\xff09" L"\0" -- L"\xff0a" L"\0" L"\xff0b" L"\0" L"\xff0c" L"\0" L"\xff0d" L"\0" L"\xff0e" -- L"\0" L"\xff0f" L"\0" L"\xff10" L"\0" L"\xff11" L"\0" L"\xff12" L"\0" -- L"\xff13" L"\0" L"\xff14" L"\0" L"\xff15" L"\0" L"\xff16" L"\0" L"\xff17" -- L"\0" L"\xff18" L"\0" L"\xff19" L"\0" L"\xff1a" L"\0" L"\xff1b" L"\0" -- L"\xff1c" L"\0" L"\xff1d" L"\0" L"\xff1e" L"\0" L"\xff1f" L"\0" L"\xff20" -- L"\0" L"\xff21" L"\0" L"\xff22" L"\0" L"\xff23" L"\0" L"\xff24" L"\0" -- L"\xff25" L"\0" L"\xff26" L"\0" L"\xff27" L"\0" L"\xff28" L"\0" L"\xff29" -- L"\0" L"\xff2a" L"\0" L"\xff2b" L"\0" L"\xff2c" L"\0" L"\xff2d" L"\0" -- L"\xff2e" L"\0" L"\xff2f" L"\0" L"\xff30" L"\0" L"\xff31" L"\0" L"\xff32" -- L"\0" L"\xff33" L"\0" L"\xff34" L"\0" L"\xff35" L"\0" L"\xff36" L"\0" -- L"\xff37" L"\0" L"\xff38" L"\0" L"\xff39" L"\0" L"\xff3a" L"\0" L"\xff3b" -- L"\0" L"\xff3c" L"\0" L"\xff3d" L"\0" L"\xff3e" L"\0" L"\xff3f" L"\0" -- L"\xff40" L"\0" L"\xff41" L"\0" L"\xff42" L"\0" L"\xff43" L"\0" L"\xff44" -- L"\0" L"\xff45" L"\0" L"\xff46" L"\0" L"\xff47" L"\0" L"\xff48" L"\0" -- L"\xff49" L"\0" L"\xff4a" L"\0" L"\xff4b" L"\0" L"\xff4c" L"\0" L"\xff4d" -- L"\0" L"\xff4e" L"\0" L"\xff4f" L"\0" L"\xff50" L"\0" L"\xff51" L"\0" -- L"\xff52" L"\0" L"\xff53" L"\0" L"\xff54" L"\0" L"\xff55" L"\0" L"\xff56" -- L"\0" L"\xff57" L"\0" L"\xff58" L"\0" L"\xff59" L"\0" L"\xff5a" L"\0" -- L"\xff5b" L"\0" L"\xff5c" L"\0" L"\xff5d" L"\0" L"\xff5e" L"\0" -- L"\x0001d400" L"\0" L"\x0001d401" L"\0" L"\x0001d402" L"\0" L"\x0001d403" -- L"\0" L"\x0001d404" L"\0" L"\x0001d405" L"\0" L"\x0001d406" L"\0" -- L"\x0001d407" L"\0" L"\x0001d408" L"\0" L"\x0001d409" L"\0" L"\x0001d40a" -- L"\0" L"\x0001d40b" L"\0" L"\x0001d40c" L"\0" L"\x0001d40d" L"\0" -- L"\x0001d40e" L"\0" L"\x0001d40f" L"\0" L"\x0001d410" L"\0" L"\x0001d411" -- L"\0" L"\x0001d412" L"\0" L"\x0001d413" L"\0" L"\x0001d414" L"\0" -- L"\x0001d415" L"\0" L"\x0001d416" L"\0" L"\x0001d417" L"\0" L"\x0001d418" -- L"\0" L"\x0001d419" L"\0" L"\x0001d41a" L"\0" L"\x0001d41b" L"\0" -- L"\x0001d41c" L"\0" L"\x0001d41d" L"\0" L"\x0001d41e" L"\0" L"\x0001d41f" -- L"\0" L"\x0001d420" L"\0" L"\x0001d421" L"\0" L"\x0001d422" L"\0" -- L"\x0001d423" L"\0" L"\x0001d424" L"\0" L"\x0001d425" L"\0" L"\x0001d426" -- L"\0" L"\x0001d427" L"\0" L"\x0001d428" L"\0" L"\x0001d429" L"\0" -- L"\x0001d42a" L"\0" L"\x0001d42b" L"\0" L"\x0001d42c" L"\0" L"\x0001d42d" -- L"\0" L"\x0001d42e" L"\0" L"\x0001d42f" L"\0" L"\x0001d430" L"\0" -- L"\x0001d431" L"\0" L"\x0001d432" L"\0" L"\x0001d433" L"\0" L"\x0001d434" -- L"\0" L"\x0001d435" L"\0" L"\x0001d436" L"\0" L"\x0001d437" L"\0" -- L"\x0001d438" L"\0" L"\x0001d439" L"\0" L"\x0001d43a" L"\0" L"\x0001d43b" -- L"\0" L"\x0001d43c" L"\0" L"\x0001d43d" L"\0" L"\x0001d43e" L"\0" -- L"\x0001d43f" L"\0" L"\x0001d440" L"\0" L"\x0001d441" L"\0" L"\x0001d442" -- L"\0" L"\x0001d443" L"\0" L"\x0001d444" L"\0" L"\x0001d445" L"\0" -- L"\x0001d446" L"\0" L"\x0001d447" L"\0" L"\x0001d448" L"\0" L"\x0001d449" -- L"\0" L"\x0001d44a" L"\0" L"\x0001d44b" L"\0" L"\x0001d44c" L"\0" -- L"\x0001d44d" L"\0" L"\x0001d44e" L"\0" L"\x0001d44f" L"\0" L"\x0001d450" -- L"\0" L"\x0001d451" L"\0" L"\x0001d452" L"\0" L"\x0001d453" L"\0" -- L"\x0001d454" L"\0" L"\x0001d456" L"\0" L"\x0001d457" L"\0" L"\x0001d458" -- L"\0" L"\x0001d459" L"\0" L"\x0001d45a" L"\0" L"\x0001d45b" L"\0" -- L"\x0001d45c" L"\0" L"\x0001d45d" L"\0" L"\x0001d45e" L"\0" L"\x0001d45f" -- L"\0" L"\x0001d460" L"\0" L"\x0001d461" L"\0" L"\x0001d462" L"\0" -- L"\x0001d463" L"\0" L"\x0001d464" L"\0" L"\x0001d465" L"\0" L"\x0001d466" -- L"\0" L"\x0001d467" L"\0" L"\x0001d468" L"\0" L"\x0001d469" L"\0" -- L"\x0001d46a" L"\0" L"\x0001d46b" L"\0" L"\x0001d46c" L"\0" L"\x0001d46d" -- L"\0" L"\x0001d46e" L"\0" L"\x0001d46f" L"\0" L"\x0001d470" L"\0" -- L"\x0001d471" L"\0" L"\x0001d472" L"\0" L"\x0001d473" L"\0" L"\x0001d474" -- L"\0" L"\x0001d475" L"\0" L"\x0001d476" L"\0" L"\x0001d477" L"\0" -- L"\x0001d478" L"\0" L"\x0001d479" L"\0" L"\x0001d47a" L"\0" L"\x0001d47b" -- L"\0" L"\x0001d47c" L"\0" L"\x0001d47d" L"\0" L"\x0001d47e" L"\0" -- L"\x0001d47f" L"\0" L"\x0001d480" L"\0" L"\x0001d481" L"\0" L"\x0001d482" -- L"\0" L"\x0001d483" L"\0" L"\x0001d484" L"\0" L"\x0001d485" L"\0" -- L"\x0001d486" L"\0" L"\x0001d487" L"\0" L"\x0001d488" L"\0" L"\x0001d489" -- L"\0" L"\x0001d48a" L"\0" L"\x0001d48b" L"\0" L"\x0001d48c" L"\0" -- L"\x0001d48d" L"\0" L"\x0001d48e" L"\0" L"\x0001d48f" L"\0" L"\x0001d490" -- L"\0" L"\x0001d491" L"\0" L"\x0001d492" L"\0" L"\x0001d493" L"\0" -- L"\x0001d494" L"\0" L"\x0001d495" L"\0" L"\x0001d496" L"\0" L"\x0001d497" -- L"\0" L"\x0001d498" L"\0" L"\x0001d499" L"\0" L"\x0001d49a" L"\0" -- L"\x0001d49b" L"\0" L"\x0001d49c" L"\0" L"\x0001d49e" L"\0" L"\x0001d49f" -- L"\0" L"\x0001d4a2" L"\0" L"\x0001d4a5" L"\0" L"\x0001d4a6" L"\0" -- L"\x0001d4a9" L"\0" L"\x0001d4aa" L"\0" L"\x0001d4ab" L"\0" L"\x0001d4ac" -- L"\0" L"\x0001d4ae" L"\0" L"\x0001d4af" L"\0" L"\x0001d4b0" L"\0" -- L"\x0001d4b1" L"\0" L"\x0001d4b2" L"\0" L"\x0001d4b3" L"\0" L"\x0001d4b4" -- L"\0" L"\x0001d4b5" L"\0" L"\x0001d4b6" L"\0" L"\x0001d4b7" L"\0" -- L"\x0001d4b8" L"\0" L"\x0001d4b9" L"\0" L"\x0001d4bb" L"\0" L"\x0001d4bd" -- L"\0" L"\x0001d4be" L"\0" L"\x0001d4bf" L"\0" L"\x0001d4c0" L"\0" -- L"\x0001d4c2" L"\0" L"\x0001d4c3" L"\0" L"\x0001d4c5" L"\0" L"\x0001d4c6" -- L"\0" L"\x0001d4c7" L"\0" L"\x0001d4c8" L"\0" L"\x0001d4c9" L"\0" -- L"\x0001d4ca" L"\0" L"\x0001d4cb" L"\0" L"\x0001d4cc" L"\0" L"\x0001d4cd" -- L"\0" L"\x0001d4ce" L"\0" L"\x0001d4cf" L"\0" L"\x0001d4d0" L"\0" -- L"\x0001d4d1" L"\0" L"\x0001d4d2" L"\0" L"\x0001d4d3" L"\0" L"\x0001d4d4" -- L"\0" L"\x0001d4d5" L"\0" L"\x0001d4d6" L"\0" L"\x0001d4d7" L"\0" -- L"\x0001d4d8" L"\0" L"\x0001d4d9" L"\0" L"\x0001d4da" L"\0" L"\x0001d4db" -- L"\0" L"\x0001d4dc" L"\0" L"\x0001d4dd" L"\0" L"\x0001d4de" L"\0" -- L"\x0001d4df" L"\0" L"\x0001d4e0" L"\0" L"\x0001d4e1" L"\0" L"\x0001d4e2" -- L"\0" L"\x0001d4e3" L"\0" L"\x0001d4e4" L"\0" L"\x0001d4e5" L"\0" -- L"\x0001d4e6" L"\0" L"\x0001d4e7" L"\0" L"\x0001d4e8" L"\0" L"\x0001d4e9" -- L"\0" L"\x0001d4ea" L"\0" L"\x0001d4eb" L"\0" L"\x0001d4ec" L"\0" -- L"\x0001d4ed" L"\0" L"\x0001d4ee" L"\0" L"\x0001d4ef" L"\0" L"\x0001d4f0" -- L"\0" L"\x0001d4f1" L"\0" L"\x0001d4f2" L"\0" L"\x0001d4f3" L"\0" -- L"\x0001d4f4" L"\0" L"\x0001d4f5" L"\0" L"\x0001d4f6" L"\0" L"\x0001d4f7" -- L"\0" L"\x0001d4f8" L"\0" L"\x0001d4f9" L"\0" L"\x0001d4fa" L"\0" -- L"\x0001d4fb" L"\0" L"\x0001d4fc" L"\0" L"\x0001d4fd" L"\0" L"\x0001d4fe" -- L"\0" L"\x0001d4ff" L"\0" L"\x0001d500" L"\0" L"\x0001d501" L"\0" -- L"\x0001d502" L"\0" L"\x0001d503" L"\0" L"\x0001d504" L"\0" L"\x0001d505" -- L"\0" L"\x0001d507" L"\0" L"\x0001d508" L"\0" L"\x0001d509" L"\0" -- L"\x0001d50a" L"\0" L"\x0001d50d" L"\0" L"\x0001d50e" L"\0" L"\x0001d50f" -- L"\0" L"\x0001d510" L"\0" L"\x0001d511" L"\0" L"\x0001d512" L"\0" -- L"\x0001d513" L"\0" L"\x0001d514" L"\0" L"\x0001d516" L"\0" L"\x0001d517" -- L"\0" L"\x0001d518" L"\0" L"\x0001d519" L"\0" L"\x0001d51a" L"\0" -- L"\x0001d51b" L"\0" L"\x0001d51c" L"\0" L"\x0001d51e" L"\0" L"\x0001d51f" -- L"\0" L"\x0001d520" L"\0" L"\x0001d521" L"\0" L"\x0001d522" L"\0" -- L"\x0001d523" L"\0" L"\x0001d524" L"\0" L"\x0001d525" L"\0" L"\x0001d526" -- L"\0" L"\x0001d527" L"\0" L"\x0001d528" L"\0" L"\x0001d529" L"\0" -- L"\x0001d52a" L"\0" L"\x0001d52b" L"\0" L"\x0001d52c" L"\0" L"\x0001d52d" -- L"\0" L"\x0001d52e" L"\0" L"\x0001d52f" L"\0" L"\x0001d530" L"\0" -- L"\x0001d531" L"\0" L"\x0001d532" L"\0" L"\x0001d533" L"\0" L"\x0001d534" -- L"\0" L"\x0001d535" L"\0" L"\x0001d536" L"\0" L"\x0001d537" L"\0" -- L"\x0001d538" L"\0" L"\x0001d539" L"\0" L"\x0001d53b" L"\0" L"\x0001d53c" -- L"\0" L"\x0001d53d" L"\0" L"\x0001d53e" L"\0" L"\x0001d540" L"\0" -- L"\x0001d541" L"\0" L"\x0001d542" L"\0" L"\x0001d543" L"\0" L"\x0001d544" -- L"\0" L"\x0001d546" L"\0" L"\x0001d54a" L"\0" L"\x0001d54b" L"\0" -- L"\x0001d54c" L"\0" L"\x0001d54d" L"\0" L"\x0001d54e" L"\0" L"\x0001d54f" -- L"\0" L"\x0001d550" L"\0" L"\x0001d552" L"\0" L"\x0001d553" L"\0" -- L"\x0001d554" L"\0" L"\x0001d555" L"\0" L"\x0001d556" L"\0" L"\x0001d557" -- L"\0" L"\x0001d558" L"\0" L"\x0001d559" L"\0" L"\x0001d55a" L"\0" -- L"\x0001d55b" L"\0" L"\x0001d55c" L"\0" L"\x0001d55d" L"\0" L"\x0001d55e" -- L"\0" L"\x0001d55f" L"\0" L"\x0001d560" L"\0" L"\x0001d561" L"\0" -- L"\x0001d562" L"\0" L"\x0001d563" L"\0" L"\x0001d564" L"\0" L"\x0001d565" -- L"\0" L"\x0001d566" L"\0" L"\x0001d567" L"\0" L"\x0001d568" L"\0" -- L"\x0001d569" L"\0" L"\x0001d56a" L"\0" L"\x0001d56b" L"\0" L"\x0001d56c" -- L"\0" L"\x0001d56d" L"\0" L"\x0001d56e" L"\0" L"\x0001d56f" L"\0" -- L"\x0001d570" L"\0" L"\x0001d571" L"\0" L"\x0001d572" L"\0" L"\x0001d573" -- L"\0" L"\x0001d574" L"\0" L"\x0001d575" L"\0" L"\x0001d576" L"\0" -- L"\x0001d577" L"\0" L"\x0001d578" L"\0" L"\x0001d579" L"\0" L"\x0001d57a" -- L"\0" L"\x0001d57b" L"\0" L"\x0001d57c" L"\0" L"\x0001d57d" L"\0" -- L"\x0001d57e" L"\0" L"\x0001d57f" L"\0" L"\x0001d580" L"\0" L"\x0001d581" -- L"\0" L"\x0001d582" L"\0" L"\x0001d583" L"\0" L"\x0001d584" L"\0" -- L"\x0001d585" L"\0" L"\x0001d586" L"\0" L"\x0001d587" L"\0" L"\x0001d588" -- L"\0" L"\x0001d589" L"\0" L"\x0001d58a" L"\0" L"\x0001d58b" L"\0" -- L"\x0001d58c" L"\0" L"\x0001d58d" L"\0" L"\x0001d58e" L"\0" L"\x0001d58f" -- L"\0" L"\x0001d590" L"\0" L"\x0001d591" L"\0" L"\x0001d592" L"\0" -- L"\x0001d593" L"\0" L"\x0001d594" L"\0" L"\x0001d595" L"\0" L"\x0001d596" -- L"\0" L"\x0001d597" L"\0" L"\x0001d598" L"\0" L"\x0001d599" L"\0" -- L"\x0001d59a" L"\0" L"\x0001d59b" L"\0" L"\x0001d59c" L"\0" L"\x0001d59d" -- L"\0" L"\x0001d59e" L"\0" L"\x0001d59f" L"\0" L"\x0001d5a0" L"\0" -- L"\x0001d5a1" L"\0" L"\x0001d5a2" L"\0" L"\x0001d5a3" L"\0" L"\x0001d5a4" -- L"\0" L"\x0001d5a5" L"\0" L"\x0001d5a6" L"\0" L"\x0001d5a7" L"\0" -- L"\x0001d5a8" L"\0" L"\x0001d5a9" L"\0" L"\x0001d5aa" L"\0" L"\x0001d5ab" -- L"\0" L"\x0001d5ac" L"\0" L"\x0001d5ad" L"\0" L"\x0001d5ae" L"\0" -- L"\x0001d5af" L"\0" L"\x0001d5b0" L"\0" L"\x0001d5b1" L"\0" L"\x0001d5b2" -- L"\0" L"\x0001d5b3" L"\0" L"\x0001d5b4" L"\0" L"\x0001d5b5" L"\0" -- L"\x0001d5b6" L"\0" L"\x0001d5b7" L"\0" L"\x0001d5b8" L"\0" L"\x0001d5b9" -- L"\0" L"\x0001d5ba" L"\0" L"\x0001d5bb" L"\0" L"\x0001d5bc" L"\0" -- L"\x0001d5bd" L"\0" L"\x0001d5be" L"\0" L"\x0001d5bf" L"\0" L"\x0001d5c0" -- L"\0" L"\x0001d5c1" L"\0" L"\x0001d5c2" L"\0" L"\x0001d5c3" L"\0" -- L"\x0001d5c4" L"\0" L"\x0001d5c5" L"\0" L"\x0001d5c6" L"\0" L"\x0001d5c7" -- L"\0" L"\x0001d5c8" L"\0" L"\x0001d5c9" L"\0" L"\x0001d5ca" L"\0" -- L"\x0001d5cb" L"\0" L"\x0001d5cc" L"\0" L"\x0001d5cd" L"\0" L"\x0001d5ce" -- L"\0" L"\x0001d5cf" L"\0" L"\x0001d5d0" L"\0" L"\x0001d5d1" L"\0" -- L"\x0001d5d2" L"\0" L"\x0001d5d3" L"\0" L"\x0001d5d4" L"\0" L"\x0001d5d5" -- L"\0" L"\x0001d5d6" L"\0" L"\x0001d5d7" L"\0" L"\x0001d5d8" L"\0" -- L"\x0001d5d9" L"\0" L"\x0001d5da" L"\0" L"\x0001d5db" L"\0" L"\x0001d5dc" -- L"\0" L"\x0001d5dd" L"\0" L"\x0001d5de" L"\0" L"\x0001d5df" L"\0" -- L"\x0001d5e0" L"\0" L"\x0001d5e1" L"\0" L"\x0001d5e2" L"\0" L"\x0001d5e3" -- L"\0" L"\x0001d5e4" L"\0" L"\x0001d5e5" L"\0" L"\x0001d5e6" L"\0" -- L"\x0001d5e7" L"\0" L"\x0001d5e8" L"\0" L"\x0001d5e9" L"\0" L"\x0001d5ea" -- L"\0" L"\x0001d5eb" L"\0" L"\x0001d5ec" L"\0" L"\x0001d5ed" L"\0" -- L"\x0001d5ee" L"\0" L"\x0001d5ef" L"\0" L"\x0001d5f0" L"\0" L"\x0001d5f1" -- L"\0" L"\x0001d5f2" L"\0" L"\x0001d5f3" L"\0" L"\x0001d5f4" L"\0" -- L"\x0001d5f5" L"\0" L"\x0001d5f6" L"\0" L"\x0001d5f7" L"\0" L"\x0001d5f8" -- L"\0" L"\x0001d5f9" L"\0" L"\x0001d5fa" L"\0" L"\x0001d5fb" L"\0" -- L"\x0001d5fc" L"\0" L"\x0001d5fd" L"\0" L"\x0001d5fe" L"\0" L"\x0001d5ff" -- L"\0" L"\x0001d600" L"\0" L"\x0001d601" L"\0" L"\x0001d602" L"\0" -- L"\x0001d603" L"\0" L"\x0001d604" L"\0" L"\x0001d605" L"\0" L"\x0001d606" -- L"\0" L"\x0001d607" L"\0" L"\x0001d608" L"\0" L"\x0001d609" L"\0" -- L"\x0001d60a" L"\0" L"\x0001d60b" L"\0" L"\x0001d60c" L"\0" L"\x0001d60d" -- L"\0" L"\x0001d60e" L"\0" L"\x0001d60f" L"\0" L"\x0001d610" L"\0" -- L"\x0001d611" L"\0" L"\x0001d612" L"\0" L"\x0001d613" L"\0" L"\x0001d614" -- L"\0" L"\x0001d615" L"\0" L"\x0001d616" L"\0" L"\x0001d617" L"\0" -- L"\x0001d618" L"\0" L"\x0001d619" L"\0" L"\x0001d61a" L"\0" L"\x0001d61b" -- L"\0" L"\x0001d61c" L"\0" L"\x0001d61d" L"\0" L"\x0001d61e" L"\0" -- L"\x0001d61f" L"\0" L"\x0001d620" L"\0" L"\x0001d621" L"\0" L"\x0001d622" -- L"\0" L"\x0001d623" L"\0" L"\x0001d624" L"\0" L"\x0001d625" L"\0" -- L"\x0001d626" L"\0" L"\x0001d627" L"\0" L"\x0001d628" L"\0" L"\x0001d629" -- L"\0" L"\x0001d62a" L"\0" L"\x0001d62b" L"\0" L"\x0001d62c" L"\0" -- L"\x0001d62d" L"\0" L"\x0001d62e" L"\0" L"\x0001d62f" L"\0" L"\x0001d630" -- L"\0" L"\x0001d631" L"\0" L"\x0001d632" L"\0" L"\x0001d633" L"\0" -- L"\x0001d634" L"\0" L"\x0001d635" L"\0" L"\x0001d636" L"\0" L"\x0001d637" -- L"\0" L"\x0001d638" L"\0" L"\x0001d639" L"\0" L"\x0001d63a" L"\0" -- L"\x0001d63b" L"\0" L"\x0001d63c" L"\0" L"\x0001d63d" L"\0" L"\x0001d63e" -- L"\0" L"\x0001d63f" L"\0" L"\x0001d640" L"\0" L"\x0001d641" L"\0" -- L"\x0001d642" L"\0" L"\x0001d643" L"\0" L"\x0001d644" L"\0" L"\x0001d645" -- L"\0" L"\x0001d646" L"\0" L"\x0001d647" L"\0" L"\x0001d648" L"\0" -- L"\x0001d649" L"\0" L"\x0001d64a" L"\0" L"\x0001d64b" L"\0" L"\x0001d64c" -- L"\0" L"\x0001d64d" L"\0" L"\x0001d64e" L"\0" L"\x0001d64f" L"\0" -- L"\x0001d650" L"\0" L"\x0001d651" L"\0" L"\x0001d652" L"\0" L"\x0001d653" -- L"\0" L"\x0001d654" L"\0" L"\x0001d655" L"\0" L"\x0001d656" L"\0" -- L"\x0001d657" L"\0" L"\x0001d658" L"\0" L"\x0001d659" L"\0" L"\x0001d65a" -- L"\0" L"\x0001d65b" L"\0" L"\x0001d65c" L"\0" L"\x0001d65d" L"\0" -- L"\x0001d65e" L"\0" L"\x0001d65f" L"\0" L"\x0001d660" L"\0" L"\x0001d661" -- L"\0" L"\x0001d662" L"\0" L"\x0001d663" L"\0" L"\x0001d664" L"\0" -- L"\x0001d665" L"\0" L"\x0001d666" L"\0" L"\x0001d667" L"\0" L"\x0001d668" -- L"\0" L"\x0001d669" L"\0" L"\x0001d66a" L"\0" L"\x0001d66b" L"\0" -- L"\x0001d66c" L"\0" L"\x0001d66d" L"\0" L"\x0001d66e" L"\0" L"\x0001d66f" -- L"\0" L"\x0001d670" L"\0" L"\x0001d671" L"\0" L"\x0001d672" L"\0" -- L"\x0001d673" L"\0" L"\x0001d674" L"\0" L"\x0001d675" L"\0" L"\x0001d676" -- L"\0" L"\x0001d677" L"\0" L"\x0001d678" L"\0" L"\x0001d679" L"\0" -- L"\x0001d67a" L"\0" L"\x0001d67b" L"\0" L"\x0001d67c" L"\0" L"\x0001d67d" -- L"\0" L"\x0001d67e" L"\0" L"\x0001d67f" L"\0" L"\x0001d680" L"\0" -- L"\x0001d681" L"\0" L"\x0001d682" L"\0" L"\x0001d683" L"\0" L"\x0001d684" -- L"\0" L"\x0001d685" L"\0" L"\x0001d686" L"\0" L"\x0001d687" L"\0" -- L"\x0001d688" L"\0" L"\x0001d689" L"\0" L"\x0001d68a" L"\0" L"\x0001d68b" -- L"\0" L"\x0001d68c" L"\0" L"\x0001d68d" L"\0" L"\x0001d68e" L"\0" -- L"\x0001d68f" L"\0" L"\x0001d690" L"\0" L"\x0001d691" L"\0" L"\x0001d692" -- L"\0" L"\x0001d693" L"\0" L"\x0001d694" L"\0" L"\x0001d695" L"\0" -- L"\x0001d696" L"\0" L"\x0001d697" L"\0" L"\x0001d698" L"\0" L"\x0001d699" -- L"\0" L"\x0001d69a" L"\0" L"\x0001d69b" L"\0" L"\x0001d69c" L"\0" -- L"\x0001d69d" L"\0" L"\x0001d69e" L"\0" L"\x0001d69f" L"\0" L"\x0001d6a0" -- L"\0" L"\x0001d6a1" L"\0" L"\x0001d6a2" L"\0" L"\x0001d6a3" L"\0" -- L"\x0001d7ce" L"\0" L"\x0001d7cf" L"\0" L"\x0001d7d0" L"\0" L"\x0001d7d1" -- L"\0" L"\x0001d7d2" L"\0" L"\x0001d7d3" L"\0" L"\x0001d7d4" L"\0" -- L"\x0001d7d5" L"\0" L"\x0001d7d6" L"\0" L"\x0001d7d7" L"\0" L"\x0001d7d8" -- L"\0" L"\x0001d7d9" L"\0" L"\x0001d7da" L"\0" L"\x0001d7db" L"\0" -- L"\x0001d7dc" L"\0" L"\x0001d7dd" L"\0" L"\x0001d7de" L"\0" L"\x0001d7df" -- L"\0" L"\x0001d7e0" L"\0" L"\x0001d7e1" L"\0" L"\x0001d7e2" L"\0" -- L"\x0001d7e3" L"\0" L"\x0001d7e4" L"\0" L"\x0001d7e5" L"\0" L"\x0001d7e6" -- L"\0" L"\x0001d7e7" L"\0" L"\x0001d7e8" L"\0" L"\x0001d7e9" L"\0" -- L"\x0001d7ea" L"\0" L"\x0001d7eb" L"\0" L"\x0001d7ec" L"\0" L"\x0001d7ed" -- L"\0" L"\x0001d7ee" L"\0" L"\x0001d7ef" L"\0" L"\x0001d7f0" L"\0" -- L"\x0001d7f1" L"\0" L"\x0001d7f2" L"\0" L"\x0001d7f3" L"\0" L"\x0001d7f4" -- L"\0" L"\x0001d7f5" L"\0" L"\x0001d7f6" L"\0" L"\x0001d7f7" L"\0" -- L"\x0001d7f8" L"\0" L"\x0001d7f9" L"\0" L"\x0001d7fa" L"\0" L"\x0001d7fb" -- L"\0" L"\x0001d7fc" L"\0" L"\x0001d7fd" L"\0" L"\x0001d7fe" L"\0" -- L"\x0001d7ff"; -+ L"\x2062" L"\0" L"\x2063" L"\0" L"\x20a8" L"\0" L"\x20ac" L"\0" L"\x20b9" -+ L"\0" L"\x2100" L"\0" L"\x2101" L"\0" L"\x2102" L"\0" L"\x2105" L"\0" -+ L"\x2106" L"\0" L"\x210a" L"\0" L"\x210b" L"\0" L"\x210c" L"\0" L"\x210d" -+ L"\0" L"\x210e" L"\0" L"\x2110" L"\0" L"\x2111" L"\0" L"\x2112" L"\0" -+ L"\x2113" L"\0" L"\x2115" L"\0" L"\x2116" L"\0" L"\x2119" L"\0" L"\x211a" -+ L"\0" L"\x211b" L"\0" L"\x211c" L"\0" L"\x211d" L"\0" L"\x2121" L"\0" -+ L"\x2122" L"\0" L"\x2124" L"\0" L"\x2126" L"\0" L"\x2128" L"\0" L"\x212c" -+ L"\0" L"\x212d" L"\0" L"\x212e" L"\0" L"\x212f" L"\0" L"\x2130" L"\0" -+ L"\x2131" L"\0" L"\x2133" L"\0" L"\x2134" L"\0" L"\x2139" L"\0" L"\x2145" -+ L"\0" L"\x2146" L"\0" L"\x2147" L"\0" L"\x2148" L"\0" L"\x2149" L"\0" -+ L"\x2153" L"\0" L"\x2154" L"\0" L"\x2155" L"\0" L"\x2156" L"\0" L"\x2157" -+ L"\0" L"\x2158" L"\0" L"\x2159" L"\0" L"\x215a" L"\0" L"\x215b" L"\0" -+ L"\x215c" L"\0" L"\x215d" L"\0" L"\x215e" L"\0" L"\x215f" L"\0" L"\x2160" -+ L"\0" L"\x2161" L"\0" L"\x2162" L"\0" L"\x2163" L"\0" L"\x2164" L"\0" -+ L"\x2165" L"\0" L"\x2166" L"\0" L"\x2167" L"\0" L"\x2168" L"\0" L"\x2169" -+ L"\0" L"\x216a" L"\0" L"\x216b" L"\0" L"\x216c" L"\0" L"\x216d" L"\0" -+ L"\x216e" L"\0" L"\x216f" L"\0" L"\x2170" L"\0" L"\x2171" L"\0" L"\x2172" -+ L"\0" L"\x2173" L"\0" L"\x2174" L"\0" L"\x2175" L"\0" L"\x2176" L"\0" -+ L"\x2177" L"\0" L"\x2178" L"\0" L"\x2179" L"\0" L"\x217a" L"\0" L"\x217b" -+ L"\0" L"\x217c" L"\0" L"\x217d" L"\0" L"\x217e" L"\0" L"\x217f" L"\0" -+ L"\x2190" L"\0" L"\x2192" L"\0" L"\x2194" L"\0" L"\x21d0" L"\0" L"\x21d2" -+ L"\0" L"\x21d4" L"\0" L"\x2212" L"\0" L"\x2215" L"\0" L"\x2216" L"\0" -+ L"\x2217" L"\0" L"\x2223" L"\0" L"\x2236" L"\0" L"\x223c" L"\0" L"\x2264" -+ L"\0" L"\x2265" L"\0" L"\x226a" L"\0" L"\x226b" L"\0" L"\x22d8" L"\0" -+ L"\x22d9" L"\0" L"\x2400" L"\0" L"\x2401" L"\0" L"\x2402" L"\0" L"\x2403" -+ L"\0" L"\x2404" L"\0" L"\x2405" L"\0" L"\x2406" L"\0" L"\x2407" L"\0" -+ L"\x2408" L"\0" L"\x2409" L"\0" L"\x240a" L"\0" L"\x240b" L"\0" L"\x240c" -+ L"\0" L"\x240d" L"\0" L"\x240e" L"\0" L"\x240f" L"\0" L"\x2410" L"\0" -+ L"\x2411" L"\0" L"\x2412" L"\0" L"\x2413" L"\0" L"\x2414" L"\0" L"\x2415" -+ L"\0" L"\x2416" L"\0" L"\x2417" L"\0" L"\x2418" L"\0" L"\x2419" L"\0" -+ L"\x241a" L"\0" L"\x241b" L"\0" L"\x241c" L"\0" L"\x241d" L"\0" L"\x241e" -+ L"\0" L"\x241f" L"\0" L"\x2420" L"\0" L"\x2421" L"\0" L"\x2423" L"\0" -+ L"\x2424" L"\0" L"\x2460" L"\0" L"\x2461" L"\0" L"\x2462" L"\0" L"\x2463" -+ L"\0" L"\x2464" L"\0" L"\x2465" L"\0" L"\x2466" L"\0" L"\x2467" L"\0" -+ L"\x2468" L"\0" L"\x2469" L"\0" L"\x246a" L"\0" L"\x246b" L"\0" L"\x246c" -+ L"\0" L"\x246d" L"\0" L"\x246e" L"\0" L"\x246f" L"\0" L"\x2470" L"\0" -+ L"\x2471" L"\0" L"\x2472" L"\0" L"\x2473" L"\0" L"\x2474" L"\0" L"\x2475" -+ L"\0" L"\x2476" L"\0" L"\x2477" L"\0" L"\x2478" L"\0" L"\x2479" L"\0" -+ L"\x247a" L"\0" L"\x247b" L"\0" L"\x247c" L"\0" L"\x247d" L"\0" L"\x247e" -+ L"\0" L"\x247f" L"\0" L"\x2480" L"\0" L"\x2481" L"\0" L"\x2482" L"\0" -+ L"\x2483" L"\0" L"\x2484" L"\0" L"\x2485" L"\0" L"\x2486" L"\0" L"\x2487" -+ L"\0" L"\x2488" L"\0" L"\x2489" L"\0" L"\x248a" L"\0" L"\x248b" L"\0" -+ L"\x248c" L"\0" L"\x248d" L"\0" L"\x248e" L"\0" L"\x248f" L"\0" L"\x2490" -+ L"\0" L"\x2491" L"\0" L"\x2492" L"\0" L"\x2493" L"\0" L"\x2494" L"\0" -+ L"\x2495" L"\0" L"\x2496" L"\0" L"\x2497" L"\0" L"\x2498" L"\0" L"\x2499" -+ L"\0" L"\x249a" L"\0" L"\x249b" L"\0" L"\x249c" L"\0" L"\x249d" L"\0" -+ L"\x249e" L"\0" L"\x249f" L"\0" L"\x24a0" L"\0" L"\x24a1" L"\0" L"\x24a2" -+ L"\0" L"\x24a3" L"\0" L"\x24a4" L"\0" L"\x24a5" L"\0" L"\x24a6" L"\0" -+ L"\x24a7" L"\0" L"\x24a8" L"\0" L"\x24a9" L"\0" L"\x24aa" L"\0" L"\x24ab" -+ L"\0" L"\x24ac" L"\0" L"\x24ad" L"\0" L"\x24ae" L"\0" L"\x24af" L"\0" -+ L"\x24b0" L"\0" L"\x24b1" L"\0" L"\x24b2" L"\0" L"\x24b3" L"\0" L"\x24b4" -+ L"\0" L"\x24b5" L"\0" L"\x24b6" L"\0" L"\x24b7" L"\0" L"\x24b8" L"\0" -+ L"\x24b9" L"\0" L"\x24ba" L"\0" L"\x24bb" L"\0" L"\x24bc" L"\0" L"\x24bd" -+ L"\0" L"\x24be" L"\0" L"\x24bf" L"\0" L"\x24c0" L"\0" L"\x24c1" L"\0" -+ L"\x24c2" L"\0" L"\x24c3" L"\0" L"\x24c4" L"\0" L"\x24c5" L"\0" L"\x24c6" -+ L"\0" L"\x24c7" L"\0" L"\x24c8" L"\0" L"\x24c9" L"\0" L"\x24ca" L"\0" -+ L"\x24cb" L"\0" L"\x24cc" L"\0" L"\x24cd" L"\0" L"\x24ce" L"\0" L"\x24cf" -+ L"\0" L"\x24d0" L"\0" L"\x24d1" L"\0" L"\x24d2" L"\0" L"\x24d3" L"\0" -+ L"\x24d4" L"\0" L"\x24d5" L"\0" L"\x24d6" L"\0" L"\x24d7" L"\0" L"\x24d8" -+ L"\0" L"\x24d9" L"\0" L"\x24da" L"\0" L"\x24db" L"\0" L"\x24dc" L"\0" -+ L"\x24dd" L"\0" L"\x24de" L"\0" L"\x24df" L"\0" L"\x24e0" L"\0" L"\x24e1" -+ L"\0" L"\x24e2" L"\0" L"\x24e3" L"\0" L"\x24e4" L"\0" L"\x24e5" L"\0" -+ L"\x24e6" L"\0" L"\x24e7" L"\0" L"\x24e8" L"\0" L"\x24e9" L"\0" L"\x24ea" -+ L"\0" L"\x2500" L"\0" L"\x2502" L"\0" L"\x250c" L"\0" L"\x2510" L"\0" -+ L"\x2514" L"\0" L"\x2518" L"\0" L"\x251c" L"\0" L"\x2524" L"\0" L"\x252c" -+ L"\0" L"\x2534" L"\0" L"\x253c" L"\0" L"\x25e6" L"\0" L"\x2a74" L"\0" -+ L"\x2a75" L"\0" L"\x2a76" L"\0" L"\x3000" L"\0" L"\x30a0" L"\0" L"\x3251" -+ L"\0" L"\x3252" L"\0" L"\x3253" L"\0" L"\x3254" L"\0" L"\x3255" L"\0" -+ L"\x3256" L"\0" L"\x3257" L"\0" L"\x3258" L"\0" L"\x3259" L"\0" L"\x325a" -+ L"\0" L"\x325b" L"\0" L"\x325c" L"\0" L"\x325d" L"\0" L"\x325e" L"\0" -+ L"\x325f" L"\0" L"\x32b1" L"\0" L"\x32b2" L"\0" L"\x32b3" L"\0" L"\x32b4" -+ L"\0" L"\x32b5" L"\0" L"\x32b6" L"\0" L"\x32b7" L"\0" L"\x32b8" L"\0" -+ L"\x32b9" L"\0" L"\x32ba" L"\0" L"\x32bb" L"\0" L"\x32bc" L"\0" L"\x32bd" -+ L"\0" L"\x32be" L"\0" L"\x32bf" L"\0" L"\x3371" L"\0" L"\x3372" L"\0" -+ L"\x3373" L"\0" L"\x3374" L"\0" L"\x3375" L"\0" L"\x3376" L"\0" L"\x3380" -+ L"\0" L"\x3381" L"\0" L"\x3382" L"\0" L"\x3383" L"\0" L"\x3384" L"\0" -+ L"\x3385" L"\0" L"\x3386" L"\0" L"\x3387" L"\0" L"\x3388" L"\0" L"\x3389" -+ L"\0" L"\x338a" L"\0" L"\x338b" L"\0" L"\x338c" L"\0" L"\x338d" L"\0" -+ L"\x338e" L"\0" L"\x338f" L"\0" L"\x3390" L"\0" L"\x3391" L"\0" L"\x3392" -+ L"\0" L"\x3393" L"\0" L"\x3394" L"\0" L"\x3395" L"\0" L"\x3396" L"\0" -+ L"\x3397" L"\0" L"\x3398" L"\0" L"\x3399" L"\0" L"\x339a" L"\0" L"\x339b" -+ L"\0" L"\x339c" L"\0" L"\x339d" L"\0" L"\x339e" L"\0" L"\x339f" L"\0" -+ L"\x33a0" L"\0" L"\x33a1" L"\0" L"\x33a2" L"\0" L"\x33a3" L"\0" L"\x33a4" -+ L"\0" L"\x33a5" L"\0" L"\x33a6" L"\0" L"\x33a7" L"\0" L"\x33a8" L"\0" -+ L"\x33a9" L"\0" L"\x33aa" L"\0" L"\x33ab" L"\0" L"\x33ac" L"\0" L"\x33ad" -+ L"\0" L"\x33ae" L"\0" L"\x33af" L"\0" L"\x33b0" L"\0" L"\x33b1" L"\0" -+ L"\x33b2" L"\0" L"\x33b3" L"\0" L"\x33b4" L"\0" L"\x33b5" L"\0" L"\x33b6" -+ L"\0" L"\x33b7" L"\0" L"\x33b8" L"\0" L"\x33b9" L"\0" L"\x33ba" L"\0" -+ L"\x33bb" L"\0" L"\x33bc" L"\0" L"\x33bd" L"\0" L"\x33be" L"\0" L"\x33bf" -+ L"\0" L"\x33c2" L"\0" L"\x33c3" L"\0" L"\x33c4" L"\0" L"\x33c5" L"\0" -+ L"\x33c6" L"\0" L"\x33c7" L"\0" L"\x33c8" L"\0" L"\x33c9" L"\0" L"\x33ca" -+ L"\0" L"\x33cb" L"\0" L"\x33cc" L"\0" L"\x33cd" L"\0" L"\x33ce" L"\0" -+ L"\x33cf" L"\0" L"\x33d0" L"\0" L"\x33d1" L"\0" L"\x33d2" L"\0" L"\x33d3" -+ L"\0" L"\x33d4" L"\0" L"\x33d5" L"\0" L"\x33d6" L"\0" L"\x33d7" L"\0" -+ L"\x33d8" L"\0" L"\x33d9" L"\0" L"\x33da" L"\0" L"\x33db" L"\0" L"\x33dc" -+ L"\0" L"\x33dd" L"\0" L"\xfb00" L"\0" L"\xfb01" L"\0" L"\xfb02" L"\0" -+ L"\xfb03" L"\0" L"\xfb04" L"\0" L"\xfb06" L"\0" L"\xfb29" L"\0" L"\xfe00" -+ L"\0" L"\xfe01" L"\0" L"\xfe02" L"\0" L"\xfe03" L"\0" L"\xfe04" L"\0" -+ L"\xfe05" L"\0" L"\xfe06" L"\0" L"\xfe07" L"\0" L"\xfe08" L"\0" L"\xfe09" -+ L"\0" L"\xfe0a" L"\0" L"\xfe0b" L"\0" L"\xfe0c" L"\0" L"\xfe0d" L"\0" -+ L"\xfe0e" L"\0" L"\xfe0f" L"\0" L"\xfe4d" L"\0" L"\xfe4e" L"\0" L"\xfe4f" -+ L"\0" L"\xfe50" L"\0" L"\xfe52" L"\0" L"\xfe54" L"\0" L"\xfe55" L"\0" -+ L"\xfe56" L"\0" L"\xfe57" L"\0" L"\xfe59" L"\0" L"\xfe5a" L"\0" L"\xfe5b" -+ L"\0" L"\xfe5c" L"\0" L"\xfe5f" L"\0" L"\xfe60" L"\0" L"\xfe61" L"\0" -+ L"\xfe62" L"\0" L"\xfe63" L"\0" L"\xfe64" L"\0" L"\xfe65" L"\0" L"\xfe66" -+ L"\0" L"\xfe68" L"\0" L"\xfe69" L"\0" L"\xfe6a" L"\0" L"\xfe6b" L"\0" -+ L"\xfeff" L"\0" L"\xff01" L"\0" L"\xff02" L"\0" L"\xff03" L"\0" L"\xff04" -+ L"\0" L"\xff05" L"\0" L"\xff06" L"\0" L"\xff07" L"\0" L"\xff08" L"\0" -+ L"\xff09" L"\0" L"\xff0a" L"\0" L"\xff0b" L"\0" L"\xff0c" L"\0" L"\xff0d" -+ L"\0" L"\xff0e" L"\0" L"\xff0f" L"\0" L"\xff10" L"\0" L"\xff11" L"\0" -+ L"\xff12" L"\0" L"\xff13" L"\0" L"\xff14" L"\0" L"\xff15" L"\0" L"\xff16" -+ L"\0" L"\xff17" L"\0" L"\xff18" L"\0" L"\xff19" L"\0" L"\xff1a" L"\0" -+ L"\xff1b" L"\0" L"\xff1c" L"\0" L"\xff1d" L"\0" L"\xff1e" L"\0" L"\xff1f" -+ L"\0" L"\xff20" L"\0" L"\xff21" L"\0" L"\xff22" L"\0" L"\xff23" L"\0" -+ L"\xff24" L"\0" L"\xff25" L"\0" L"\xff26" L"\0" L"\xff27" L"\0" L"\xff28" -+ L"\0" L"\xff29" L"\0" L"\xff2a" L"\0" L"\xff2b" L"\0" L"\xff2c" L"\0" -+ L"\xff2d" L"\0" L"\xff2e" L"\0" L"\xff2f" L"\0" L"\xff30" L"\0" L"\xff31" -+ L"\0" L"\xff32" L"\0" L"\xff33" L"\0" L"\xff34" L"\0" L"\xff35" L"\0" -+ L"\xff36" L"\0" L"\xff37" L"\0" L"\xff38" L"\0" L"\xff39" L"\0" L"\xff3a" -+ L"\0" L"\xff3b" L"\0" L"\xff3c" L"\0" L"\xff3d" L"\0" L"\xff3e" L"\0" -+ L"\xff3f" L"\0" L"\xff40" L"\0" L"\xff41" L"\0" L"\xff42" L"\0" L"\xff43" -+ L"\0" L"\xff44" L"\0" L"\xff45" L"\0" L"\xff46" L"\0" L"\xff47" L"\0" -+ L"\xff48" L"\0" L"\xff49" L"\0" L"\xff4a" L"\0" L"\xff4b" L"\0" L"\xff4c" -+ L"\0" L"\xff4d" L"\0" L"\xff4e" L"\0" L"\xff4f" L"\0" L"\xff50" L"\0" -+ L"\xff51" L"\0" L"\xff52" L"\0" L"\xff53" L"\0" L"\xff54" L"\0" L"\xff55" -+ L"\0" L"\xff56" L"\0" L"\xff57" L"\0" L"\xff58" L"\0" L"\xff59" L"\0" -+ L"\xff5a" L"\0" L"\xff5b" L"\0" L"\xff5c" L"\0" L"\xff5d" L"\0" L"\xff5e" -+ L"\0" L"\x0001d400" L"\0" L"\x0001d401" L"\0" L"\x0001d402" L"\0" -+ L"\x0001d403" L"\0" L"\x0001d404" L"\0" L"\x0001d405" L"\0" L"\x0001d406" -+ L"\0" L"\x0001d407" L"\0" L"\x0001d408" L"\0" L"\x0001d409" L"\0" -+ L"\x0001d40a" L"\0" L"\x0001d40b" L"\0" L"\x0001d40c" L"\0" L"\x0001d40d" -+ L"\0" L"\x0001d40e" L"\0" L"\x0001d40f" L"\0" L"\x0001d410" L"\0" -+ L"\x0001d411" L"\0" L"\x0001d412" L"\0" L"\x0001d413" L"\0" L"\x0001d414" -+ L"\0" L"\x0001d415" L"\0" L"\x0001d416" L"\0" L"\x0001d417" L"\0" -+ L"\x0001d418" L"\0" L"\x0001d419" L"\0" L"\x0001d41a" L"\0" L"\x0001d41b" -+ L"\0" L"\x0001d41c" L"\0" L"\x0001d41d" L"\0" L"\x0001d41e" L"\0" -+ L"\x0001d41f" L"\0" L"\x0001d420" L"\0" L"\x0001d421" L"\0" L"\x0001d422" -+ L"\0" L"\x0001d423" L"\0" L"\x0001d424" L"\0" L"\x0001d425" L"\0" -+ L"\x0001d426" L"\0" L"\x0001d427" L"\0" L"\x0001d428" L"\0" L"\x0001d429" -+ L"\0" L"\x0001d42a" L"\0" L"\x0001d42b" L"\0" L"\x0001d42c" L"\0" -+ L"\x0001d42d" L"\0" L"\x0001d42e" L"\0" L"\x0001d42f" L"\0" L"\x0001d430" -+ L"\0" L"\x0001d431" L"\0" L"\x0001d432" L"\0" L"\x0001d433" L"\0" -+ L"\x0001d434" L"\0" L"\x0001d435" L"\0" L"\x0001d436" L"\0" L"\x0001d437" -+ L"\0" L"\x0001d438" L"\0" L"\x0001d439" L"\0" L"\x0001d43a" L"\0" -+ L"\x0001d43b" L"\0" L"\x0001d43c" L"\0" L"\x0001d43d" L"\0" L"\x0001d43e" -+ L"\0" L"\x0001d43f" L"\0" L"\x0001d440" L"\0" L"\x0001d441" L"\0" -+ L"\x0001d442" L"\0" L"\x0001d443" L"\0" L"\x0001d444" L"\0" L"\x0001d445" -+ L"\0" L"\x0001d446" L"\0" L"\x0001d447" L"\0" L"\x0001d448" L"\0" -+ L"\x0001d449" L"\0" L"\x0001d44a" L"\0" L"\x0001d44b" L"\0" L"\x0001d44c" -+ L"\0" L"\x0001d44d" L"\0" L"\x0001d44e" L"\0" L"\x0001d44f" L"\0" -+ L"\x0001d450" L"\0" L"\x0001d451" L"\0" L"\x0001d452" L"\0" L"\x0001d453" -+ L"\0" L"\x0001d454" L"\0" L"\x0001d456" L"\0" L"\x0001d457" L"\0" -+ L"\x0001d458" L"\0" L"\x0001d459" L"\0" L"\x0001d45a" L"\0" L"\x0001d45b" -+ L"\0" L"\x0001d45c" L"\0" L"\x0001d45d" L"\0" L"\x0001d45e" L"\0" -+ L"\x0001d45f" L"\0" L"\x0001d460" L"\0" L"\x0001d461" L"\0" L"\x0001d462" -+ L"\0" L"\x0001d463" L"\0" L"\x0001d464" L"\0" L"\x0001d465" L"\0" -+ L"\x0001d466" L"\0" L"\x0001d467" L"\0" L"\x0001d468" L"\0" L"\x0001d469" -+ L"\0" L"\x0001d46a" L"\0" L"\x0001d46b" L"\0" L"\x0001d46c" L"\0" -+ L"\x0001d46d" L"\0" L"\x0001d46e" L"\0" L"\x0001d46f" L"\0" L"\x0001d470" -+ L"\0" L"\x0001d471" L"\0" L"\x0001d472" L"\0" L"\x0001d473" L"\0" -+ L"\x0001d474" L"\0" L"\x0001d475" L"\0" L"\x0001d476" L"\0" L"\x0001d477" -+ L"\0" L"\x0001d478" L"\0" L"\x0001d479" L"\0" L"\x0001d47a" L"\0" -+ L"\x0001d47b" L"\0" L"\x0001d47c" L"\0" L"\x0001d47d" L"\0" L"\x0001d47e" -+ L"\0" L"\x0001d47f" L"\0" L"\x0001d480" L"\0" L"\x0001d481" L"\0" -+ L"\x0001d482" L"\0" L"\x0001d483" L"\0" L"\x0001d484" L"\0" L"\x0001d485" -+ L"\0" L"\x0001d486" L"\0" L"\x0001d487" L"\0" L"\x0001d488" L"\0" -+ L"\x0001d489" L"\0" L"\x0001d48a" L"\0" L"\x0001d48b" L"\0" L"\x0001d48c" -+ L"\0" L"\x0001d48d" L"\0" L"\x0001d48e" L"\0" L"\x0001d48f" L"\0" -+ L"\x0001d490" L"\0" L"\x0001d491" L"\0" L"\x0001d492" L"\0" L"\x0001d493" -+ L"\0" L"\x0001d494" L"\0" L"\x0001d495" L"\0" L"\x0001d496" L"\0" -+ L"\x0001d497" L"\0" L"\x0001d498" L"\0" L"\x0001d499" L"\0" L"\x0001d49a" -+ L"\0" L"\x0001d49b" L"\0" L"\x0001d49c" L"\0" L"\x0001d49e" L"\0" -+ L"\x0001d49f" L"\0" L"\x0001d4a2" L"\0" L"\x0001d4a5" L"\0" L"\x0001d4a6" -+ L"\0" L"\x0001d4a9" L"\0" L"\x0001d4aa" L"\0" L"\x0001d4ab" L"\0" -+ L"\x0001d4ac" L"\0" L"\x0001d4ae" L"\0" L"\x0001d4af" L"\0" L"\x0001d4b0" -+ L"\0" L"\x0001d4b1" L"\0" L"\x0001d4b2" L"\0" L"\x0001d4b3" L"\0" -+ L"\x0001d4b4" L"\0" L"\x0001d4b5" L"\0" L"\x0001d4b6" L"\0" L"\x0001d4b7" -+ L"\0" L"\x0001d4b8" L"\0" L"\x0001d4b9" L"\0" L"\x0001d4bb" L"\0" -+ L"\x0001d4bd" L"\0" L"\x0001d4be" L"\0" L"\x0001d4bf" L"\0" L"\x0001d4c0" -+ L"\0" L"\x0001d4c2" L"\0" L"\x0001d4c3" L"\0" L"\x0001d4c5" L"\0" -+ L"\x0001d4c6" L"\0" L"\x0001d4c7" L"\0" L"\x0001d4c8" L"\0" L"\x0001d4c9" -+ L"\0" L"\x0001d4ca" L"\0" L"\x0001d4cb" L"\0" L"\x0001d4cc" L"\0" -+ L"\x0001d4cd" L"\0" L"\x0001d4ce" L"\0" L"\x0001d4cf" L"\0" L"\x0001d4d0" -+ L"\0" L"\x0001d4d1" L"\0" L"\x0001d4d2" L"\0" L"\x0001d4d3" L"\0" -+ L"\x0001d4d4" L"\0" L"\x0001d4d5" L"\0" L"\x0001d4d6" L"\0" L"\x0001d4d7" -+ L"\0" L"\x0001d4d8" L"\0" L"\x0001d4d9" L"\0" L"\x0001d4da" L"\0" -+ L"\x0001d4db" L"\0" L"\x0001d4dc" L"\0" L"\x0001d4dd" L"\0" L"\x0001d4de" -+ L"\0" L"\x0001d4df" L"\0" L"\x0001d4e0" L"\0" L"\x0001d4e1" L"\0" -+ L"\x0001d4e2" L"\0" L"\x0001d4e3" L"\0" L"\x0001d4e4" L"\0" L"\x0001d4e5" -+ L"\0" L"\x0001d4e6" L"\0" L"\x0001d4e7" L"\0" L"\x0001d4e8" L"\0" -+ L"\x0001d4e9" L"\0" L"\x0001d4ea" L"\0" L"\x0001d4eb" L"\0" L"\x0001d4ec" -+ L"\0" L"\x0001d4ed" L"\0" L"\x0001d4ee" L"\0" L"\x0001d4ef" L"\0" -+ L"\x0001d4f0" L"\0" L"\x0001d4f1" L"\0" L"\x0001d4f2" L"\0" L"\x0001d4f3" -+ L"\0" L"\x0001d4f4" L"\0" L"\x0001d4f5" L"\0" L"\x0001d4f6" L"\0" -+ L"\x0001d4f7" L"\0" L"\x0001d4f8" L"\0" L"\x0001d4f9" L"\0" L"\x0001d4fa" -+ L"\0" L"\x0001d4fb" L"\0" L"\x0001d4fc" L"\0" L"\x0001d4fd" L"\0" -+ L"\x0001d4fe" L"\0" L"\x0001d4ff" L"\0" L"\x0001d500" L"\0" L"\x0001d501" -+ L"\0" L"\x0001d502" L"\0" L"\x0001d503" L"\0" L"\x0001d504" L"\0" -+ L"\x0001d505" L"\0" L"\x0001d507" L"\0" L"\x0001d508" L"\0" L"\x0001d509" -+ L"\0" L"\x0001d50a" L"\0" L"\x0001d50d" L"\0" L"\x0001d50e" L"\0" -+ L"\x0001d50f" L"\0" L"\x0001d510" L"\0" L"\x0001d511" L"\0" L"\x0001d512" -+ L"\0" L"\x0001d513" L"\0" L"\x0001d514" L"\0" L"\x0001d516" L"\0" -+ L"\x0001d517" L"\0" L"\x0001d518" L"\0" L"\x0001d519" L"\0" L"\x0001d51a" -+ L"\0" L"\x0001d51b" L"\0" L"\x0001d51c" L"\0" L"\x0001d51e" L"\0" -+ L"\x0001d51f" L"\0" L"\x0001d520" L"\0" L"\x0001d521" L"\0" L"\x0001d522" -+ L"\0" L"\x0001d523" L"\0" L"\x0001d524" L"\0" L"\x0001d525" L"\0" -+ L"\x0001d526" L"\0" L"\x0001d527" L"\0" L"\x0001d528" L"\0" L"\x0001d529" -+ L"\0" L"\x0001d52a" L"\0" L"\x0001d52b" L"\0" L"\x0001d52c" L"\0" -+ L"\x0001d52d" L"\0" L"\x0001d52e" L"\0" L"\x0001d52f" L"\0" L"\x0001d530" -+ L"\0" L"\x0001d531" L"\0" L"\x0001d532" L"\0" L"\x0001d533" L"\0" -+ L"\x0001d534" L"\0" L"\x0001d535" L"\0" L"\x0001d536" L"\0" L"\x0001d537" -+ L"\0" L"\x0001d538" L"\0" L"\x0001d539" L"\0" L"\x0001d53b" L"\0" -+ L"\x0001d53c" L"\0" L"\x0001d53d" L"\0" L"\x0001d53e" L"\0" L"\x0001d540" -+ L"\0" L"\x0001d541" L"\0" L"\x0001d542" L"\0" L"\x0001d543" L"\0" -+ L"\x0001d544" L"\0" L"\x0001d546" L"\0" L"\x0001d54a" L"\0" L"\x0001d54b" -+ L"\0" L"\x0001d54c" L"\0" L"\x0001d54d" L"\0" L"\x0001d54e" L"\0" -+ L"\x0001d54f" L"\0" L"\x0001d550" L"\0" L"\x0001d552" L"\0" L"\x0001d553" -+ L"\0" L"\x0001d554" L"\0" L"\x0001d555" L"\0" L"\x0001d556" L"\0" -+ L"\x0001d557" L"\0" L"\x0001d558" L"\0" L"\x0001d559" L"\0" L"\x0001d55a" -+ L"\0" L"\x0001d55b" L"\0" L"\x0001d55c" L"\0" L"\x0001d55d" L"\0" -+ L"\x0001d55e" L"\0" L"\x0001d55f" L"\0" L"\x0001d560" L"\0" L"\x0001d561" -+ L"\0" L"\x0001d562" L"\0" L"\x0001d563" L"\0" L"\x0001d564" L"\0" -+ L"\x0001d565" L"\0" L"\x0001d566" L"\0" L"\x0001d567" L"\0" L"\x0001d568" -+ L"\0" L"\x0001d569" L"\0" L"\x0001d56a" L"\0" L"\x0001d56b" L"\0" -+ L"\x0001d56c" L"\0" L"\x0001d56d" L"\0" L"\x0001d56e" L"\0" L"\x0001d56f" -+ L"\0" L"\x0001d570" L"\0" L"\x0001d571" L"\0" L"\x0001d572" L"\0" -+ L"\x0001d573" L"\0" L"\x0001d574" L"\0" L"\x0001d575" L"\0" L"\x0001d576" -+ L"\0" L"\x0001d577" L"\0" L"\x0001d578" L"\0" L"\x0001d579" L"\0" -+ L"\x0001d57a" L"\0" L"\x0001d57b" L"\0" L"\x0001d57c" L"\0" L"\x0001d57d" -+ L"\0" L"\x0001d57e" L"\0" L"\x0001d57f" L"\0" L"\x0001d580" L"\0" -+ L"\x0001d581" L"\0" L"\x0001d582" L"\0" L"\x0001d583" L"\0" L"\x0001d584" -+ L"\0" L"\x0001d585" L"\0" L"\x0001d586" L"\0" L"\x0001d587" L"\0" -+ L"\x0001d588" L"\0" L"\x0001d589" L"\0" L"\x0001d58a" L"\0" L"\x0001d58b" -+ L"\0" L"\x0001d58c" L"\0" L"\x0001d58d" L"\0" L"\x0001d58e" L"\0" -+ L"\x0001d58f" L"\0" L"\x0001d590" L"\0" L"\x0001d591" L"\0" L"\x0001d592" -+ L"\0" L"\x0001d593" L"\0" L"\x0001d594" L"\0" L"\x0001d595" L"\0" -+ L"\x0001d596" L"\0" L"\x0001d597" L"\0" L"\x0001d598" L"\0" L"\x0001d599" -+ L"\0" L"\x0001d59a" L"\0" L"\x0001d59b" L"\0" L"\x0001d59c" L"\0" -+ L"\x0001d59d" L"\0" L"\x0001d59e" L"\0" L"\x0001d59f" L"\0" L"\x0001d5a0" -+ L"\0" L"\x0001d5a1" L"\0" L"\x0001d5a2" L"\0" L"\x0001d5a3" L"\0" -+ L"\x0001d5a4" L"\0" L"\x0001d5a5" L"\0" L"\x0001d5a6" L"\0" L"\x0001d5a7" -+ L"\0" L"\x0001d5a8" L"\0" L"\x0001d5a9" L"\0" L"\x0001d5aa" L"\0" -+ L"\x0001d5ab" L"\0" L"\x0001d5ac" L"\0" L"\x0001d5ad" L"\0" L"\x0001d5ae" -+ L"\0" L"\x0001d5af" L"\0" L"\x0001d5b0" L"\0" L"\x0001d5b1" L"\0" -+ L"\x0001d5b2" L"\0" L"\x0001d5b3" L"\0" L"\x0001d5b4" L"\0" L"\x0001d5b5" -+ L"\0" L"\x0001d5b6" L"\0" L"\x0001d5b7" L"\0" L"\x0001d5b8" L"\0" -+ L"\x0001d5b9" L"\0" L"\x0001d5ba" L"\0" L"\x0001d5bb" L"\0" L"\x0001d5bc" -+ L"\0" L"\x0001d5bd" L"\0" L"\x0001d5be" L"\0" L"\x0001d5bf" L"\0" -+ L"\x0001d5c0" L"\0" L"\x0001d5c1" L"\0" L"\x0001d5c2" L"\0" L"\x0001d5c3" -+ L"\0" L"\x0001d5c4" L"\0" L"\x0001d5c5" L"\0" L"\x0001d5c6" L"\0" -+ L"\x0001d5c7" L"\0" L"\x0001d5c8" L"\0" L"\x0001d5c9" L"\0" L"\x0001d5ca" -+ L"\0" L"\x0001d5cb" L"\0" L"\x0001d5cc" L"\0" L"\x0001d5cd" L"\0" -+ L"\x0001d5ce" L"\0" L"\x0001d5cf" L"\0" L"\x0001d5d0" L"\0" L"\x0001d5d1" -+ L"\0" L"\x0001d5d2" L"\0" L"\x0001d5d3" L"\0" L"\x0001d5d4" L"\0" -+ L"\x0001d5d5" L"\0" L"\x0001d5d6" L"\0" L"\x0001d5d7" L"\0" L"\x0001d5d8" -+ L"\0" L"\x0001d5d9" L"\0" L"\x0001d5da" L"\0" L"\x0001d5db" L"\0" -+ L"\x0001d5dc" L"\0" L"\x0001d5dd" L"\0" L"\x0001d5de" L"\0" L"\x0001d5df" -+ L"\0" L"\x0001d5e0" L"\0" L"\x0001d5e1" L"\0" L"\x0001d5e2" L"\0" -+ L"\x0001d5e3" L"\0" L"\x0001d5e4" L"\0" L"\x0001d5e5" L"\0" L"\x0001d5e6" -+ L"\0" L"\x0001d5e7" L"\0" L"\x0001d5e8" L"\0" L"\x0001d5e9" L"\0" -+ L"\x0001d5ea" L"\0" L"\x0001d5eb" L"\0" L"\x0001d5ec" L"\0" L"\x0001d5ed" -+ L"\0" L"\x0001d5ee" L"\0" L"\x0001d5ef" L"\0" L"\x0001d5f0" L"\0" -+ L"\x0001d5f1" L"\0" L"\x0001d5f2" L"\0" L"\x0001d5f3" L"\0" L"\x0001d5f4" -+ L"\0" L"\x0001d5f5" L"\0" L"\x0001d5f6" L"\0" L"\x0001d5f7" L"\0" -+ L"\x0001d5f8" L"\0" L"\x0001d5f9" L"\0" L"\x0001d5fa" L"\0" L"\x0001d5fb" -+ L"\0" L"\x0001d5fc" L"\0" L"\x0001d5fd" L"\0" L"\x0001d5fe" L"\0" -+ L"\x0001d5ff" L"\0" L"\x0001d600" L"\0" L"\x0001d601" L"\0" L"\x0001d602" -+ L"\0" L"\x0001d603" L"\0" L"\x0001d604" L"\0" L"\x0001d605" L"\0" -+ L"\x0001d606" L"\0" L"\x0001d607" L"\0" L"\x0001d608" L"\0" L"\x0001d609" -+ L"\0" L"\x0001d60a" L"\0" L"\x0001d60b" L"\0" L"\x0001d60c" L"\0" -+ L"\x0001d60d" L"\0" L"\x0001d60e" L"\0" L"\x0001d60f" L"\0" L"\x0001d610" -+ L"\0" L"\x0001d611" L"\0" L"\x0001d612" L"\0" L"\x0001d613" L"\0" -+ L"\x0001d614" L"\0" L"\x0001d615" L"\0" L"\x0001d616" L"\0" L"\x0001d617" -+ L"\0" L"\x0001d618" L"\0" L"\x0001d619" L"\0" L"\x0001d61a" L"\0" -+ L"\x0001d61b" L"\0" L"\x0001d61c" L"\0" L"\x0001d61d" L"\0" L"\x0001d61e" -+ L"\0" L"\x0001d61f" L"\0" L"\x0001d620" L"\0" L"\x0001d621" L"\0" -+ L"\x0001d622" L"\0" L"\x0001d623" L"\0" L"\x0001d624" L"\0" L"\x0001d625" -+ L"\0" L"\x0001d626" L"\0" L"\x0001d627" L"\0" L"\x0001d628" L"\0" -+ L"\x0001d629" L"\0" L"\x0001d62a" L"\0" L"\x0001d62b" L"\0" L"\x0001d62c" -+ L"\0" L"\x0001d62d" L"\0" L"\x0001d62e" L"\0" L"\x0001d62f" L"\0" -+ L"\x0001d630" L"\0" L"\x0001d631" L"\0" L"\x0001d632" L"\0" L"\x0001d633" -+ L"\0" L"\x0001d634" L"\0" L"\x0001d635" L"\0" L"\x0001d636" L"\0" -+ L"\x0001d637" L"\0" L"\x0001d638" L"\0" L"\x0001d639" L"\0" L"\x0001d63a" -+ L"\0" L"\x0001d63b" L"\0" L"\x0001d63c" L"\0" L"\x0001d63d" L"\0" -+ L"\x0001d63e" L"\0" L"\x0001d63f" L"\0" L"\x0001d640" L"\0" L"\x0001d641" -+ L"\0" L"\x0001d642" L"\0" L"\x0001d643" L"\0" L"\x0001d644" L"\0" -+ L"\x0001d645" L"\0" L"\x0001d646" L"\0" L"\x0001d647" L"\0" L"\x0001d648" -+ L"\0" L"\x0001d649" L"\0" L"\x0001d64a" L"\0" L"\x0001d64b" L"\0" -+ L"\x0001d64c" L"\0" L"\x0001d64d" L"\0" L"\x0001d64e" L"\0" L"\x0001d64f" -+ L"\0" L"\x0001d650" L"\0" L"\x0001d651" L"\0" L"\x0001d652" L"\0" -+ L"\x0001d653" L"\0" L"\x0001d654" L"\0" L"\x0001d655" L"\0" L"\x0001d656" -+ L"\0" L"\x0001d657" L"\0" L"\x0001d658" L"\0" L"\x0001d659" L"\0" -+ L"\x0001d65a" L"\0" L"\x0001d65b" L"\0" L"\x0001d65c" L"\0" L"\x0001d65d" -+ L"\0" L"\x0001d65e" L"\0" L"\x0001d65f" L"\0" L"\x0001d660" L"\0" -+ L"\x0001d661" L"\0" L"\x0001d662" L"\0" L"\x0001d663" L"\0" L"\x0001d664" -+ L"\0" L"\x0001d665" L"\0" L"\x0001d666" L"\0" L"\x0001d667" L"\0" -+ L"\x0001d668" L"\0" L"\x0001d669" L"\0" L"\x0001d66a" L"\0" L"\x0001d66b" -+ L"\0" L"\x0001d66c" L"\0" L"\x0001d66d" L"\0" L"\x0001d66e" L"\0" -+ L"\x0001d66f" L"\0" L"\x0001d670" L"\0" L"\x0001d671" L"\0" L"\x0001d672" -+ L"\0" L"\x0001d673" L"\0" L"\x0001d674" L"\0" L"\x0001d675" L"\0" -+ L"\x0001d676" L"\0" L"\x0001d677" L"\0" L"\x0001d678" L"\0" L"\x0001d679" -+ L"\0" L"\x0001d67a" L"\0" L"\x0001d67b" L"\0" L"\x0001d67c" L"\0" -+ L"\x0001d67d" L"\0" L"\x0001d67e" L"\0" L"\x0001d67f" L"\0" L"\x0001d680" -+ L"\0" L"\x0001d681" L"\0" L"\x0001d682" L"\0" L"\x0001d683" L"\0" -+ L"\x0001d684" L"\0" L"\x0001d685" L"\0" L"\x0001d686" L"\0" L"\x0001d687" -+ L"\0" L"\x0001d688" L"\0" L"\x0001d689" L"\0" L"\x0001d68a" L"\0" -+ L"\x0001d68b" L"\0" L"\x0001d68c" L"\0" L"\x0001d68d" L"\0" L"\x0001d68e" -+ L"\0" L"\x0001d68f" L"\0" L"\x0001d690" L"\0" L"\x0001d691" L"\0" -+ L"\x0001d692" L"\0" L"\x0001d693" L"\0" L"\x0001d694" L"\0" L"\x0001d695" -+ L"\0" L"\x0001d696" L"\0" L"\x0001d697" L"\0" L"\x0001d698" L"\0" -+ L"\x0001d699" L"\0" L"\x0001d69a" L"\0" L"\x0001d69b" L"\0" L"\x0001d69c" -+ L"\0" L"\x0001d69d" L"\0" L"\x0001d69e" L"\0" L"\x0001d69f" L"\0" -+ L"\x0001d6a0" L"\0" L"\x0001d6a1" L"\0" L"\x0001d6a2" L"\0" L"\x0001d6a3" -+ L"\0" L"\x0001d7ce" L"\0" L"\x0001d7cf" L"\0" L"\x0001d7d0" L"\0" -+ L"\x0001d7d1" L"\0" L"\x0001d7d2" L"\0" L"\x0001d7d3" L"\0" L"\x0001d7d4" -+ L"\0" L"\x0001d7d5" L"\0" L"\x0001d7d6" L"\0" L"\x0001d7d7" L"\0" -+ L"\x0001d7d8" L"\0" L"\x0001d7d9" L"\0" L"\x0001d7da" L"\0" L"\x0001d7db" -+ L"\0" L"\x0001d7dc" L"\0" L"\x0001d7dd" L"\0" L"\x0001d7de" L"\0" -+ L"\x0001d7df" L"\0" L"\x0001d7e0" L"\0" L"\x0001d7e1" L"\0" L"\x0001d7e2" -+ L"\0" L"\x0001d7e3" L"\0" L"\x0001d7e4" L"\0" L"\x0001d7e5" L"\0" -+ L"\x0001d7e6" L"\0" L"\x0001d7e7" L"\0" L"\x0001d7e8" L"\0" L"\x0001d7e9" -+ L"\0" L"\x0001d7ea" L"\0" L"\x0001d7eb" L"\0" L"\x0001d7ec" L"\0" -+ L"\x0001d7ed" L"\0" L"\x0001d7ee" L"\0" L"\x0001d7ef" L"\0" L"\x0001d7f0" -+ L"\0" L"\x0001d7f1" L"\0" L"\x0001d7f2" L"\0" L"\x0001d7f3" L"\0" -+ L"\x0001d7f4" L"\0" L"\x0001d7f5" L"\0" L"\x0001d7f6" L"\0" L"\x0001d7f7" -+ L"\0" L"\x0001d7f8" L"\0" L"\x0001d7f9" L"\0" L"\x0001d7fa" L"\0" -+ L"\x0001d7fb" L"\0" L"\x0001d7fc" L"\0" L"\x0001d7fd" L"\0" L"\x0001d7fe" -+ L"\0" L"\x0001d7ff"; - static const uint32_t translit_to_idx[] = - { - 0, 3, 8, 12, 15, 20, 23, 26, 30, 37, 44, 51, -@@ -471,22 +471,22 @@ static const uint32_t translit_to_idx[] - 180, 183, 186, 189, 192, 196, 199, 202, 205, 208, 211, 214, - 217, 221, 224, 227, 230, 233, 237, 242, 245, 248, 252, 257, - 260, 263, 267, 270, 274, 278, 282, 285, 287, 289, 291, 293, -- 297, 302, 307, 312, 315, 320, 325, 328, 331, 334, 337, 340, -- 343, 346, 349, 352, 355, 359, 362, 365, 368, 371, 374, 379, -- 385, 388, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, -- 423, 426, 429, 432, 435, 438, 445, 452, 459, 466, 473, 480, -- 487, 494, 501, 508, 515, 522, 527, 530, 534, 539, 543, 546, -- 550, 555, 561, 565, 568, 572, 577, 580, 583, 586, 589, 592, -- 596, 601, 605, 608, 612, 617, 623, 627, 630, 634, 639, 642, -- 645, 648, 651, 655, 659, 664, 668, 672, 677, 680, 683, 686, -- 689, 692, 695, 698, 702, 706, 710, 714, 719, 724, 729, 734, -- 739, 744, 749, 754, 759, 764, 768, 772, 776, 780, 784, 788, -- 792, 796, 801, 806, 811, 816, 821, 826, 831, 836, 841, 845, -- 850, 855, 859, 863, 867, 871, 875, 880, 883, 887, 892, 897, -- 902, 907, 912, 917, 922, 927, 932, 938, 944, 950, 956, 962, -- 968, 974, 980, 986, 992, 998, 1003, 1008, 1013, 1018, 1023, 1028, -- 1033, 1038, 1043, 1049, 1055, 1061, 1067, 1073, 1079, 1085, 1091, 1097, -- 1103, 1109, 1113, 1117, 1121, 1125, 1129, 1133, 1137, 1141, 1145, 1150, -+ 297, 302, 307, 312, 317, 320, 325, 330, 333, 336, 339, 342, -+ 345, 348, 351, 354, 357, 360, 364, 367, 370, 373, 376, 379, -+ 384, 390, 393, 398, 401, 404, 407, 410, 413, 416, 419, 422, -+ 425, 428, 431, 434, 437, 440, 443, 450, 457, 464, 471, 478, -+ 485, 492, 499, 506, 513, 520, 527, 532, 535, 539, 544, 548, -+ 551, 555, 560, 566, 570, 573, 577, 582, 585, 588, 591, 594, -+ 597, 601, 606, 610, 613, 617, 622, 628, 632, 635, 639, 644, -+ 647, 650, 653, 656, 660, 664, 669, 673, 677, 682, 685, 688, -+ 691, 694, 697, 700, 703, 707, 711, 715, 719, 724, 729, 734, -+ 739, 744, 749, 754, 759, 764, 769, 773, 777, 781, 785, 789, -+ 793, 797, 801, 806, 811, 816, 821, 826, 831, 836, 841, 846, -+ 850, 855, 860, 864, 868, 872, 876, 880, 885, 888, 892, 897, -+ 902, 907, 912, 917, 922, 927, 932, 937, 943, 949, 955, 961, -+ 967, 973, 979, 985, 991, 997, 1003, 1008, 1013, 1018, 1023, 1028, -+ 1033, 1038, 1043, 1048, 1054, 1060, 1066, 1072, 1078, 1084, 1090, 1096, -+ 1102, 1108, 1114, 1118, 1122, 1126, 1130, 1134, 1138, 1142, 1146, 1150, - 1155, 1160, 1165, 1170, 1175, 1180, 1185, 1190, 1195, 1200, 1205, 1210, - 1215, 1220, 1225, 1230, 1235, 1240, 1245, 1250, 1255, 1260, 1265, 1270, - 1275, 1280, 1285, 1290, 1295, 1300, 1305, 1310, 1315, 1320, 1325, 1330, -@@ -494,89 +494,89 @@ static const uint32_t translit_to_idx[] - 1395, 1400, 1405, 1410, 1415, 1420, 1425, 1430, 1435, 1440, 1445, 1450, - 1455, 1460, 1465, 1470, 1475, 1480, 1485, 1490, 1495, 1500, 1505, 1510, - 1515, 1520, 1525, 1530, 1535, 1540, 1545, 1550, 1555, 1560, 1565, 1570, -- 1575, 1580, 1585, 1590, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1616, -- 1619, 1622, 1625, 1628, 1631, 1636, 1640, 1645, 1648, 1651, 1657, 1663, -- 1669, 1675, 1681, 1687, 1693, 1699, 1705, 1711, 1717, 1723, 1729, 1735, -- 1741, 1747, 1753, 1759, 1765, 1771, 1777, 1783, 1789, 1795, 1801, 1807, -- 1813, 1819, 1825, 1831, 1836, 1840, 1844, 1849, 1853, 1857, 1861, 1865, -- 1869, 1873, 1877, 1881, 1885, 1889, 1894, 1900, 1904, 1908, 1912, 1916, -- 1920, 1924, 1928, 1933, 1938, 1943, 1948, 1952, 1956, 1960, 1964, 1968, -- 1972, 1976, 1980, 1984, 1988, 1994, 2000, 2005, 2011, 2017, 2023, 2028, -- 2034, 2039, 2046, 2050, 2055, 2060, 2065, 2070, 2077, 2086, 2090, 2094, -- 2098, 2102, 2106, 2110, 2114, 2118, 2122, 2126, 2130, 2134, 2138, 2142, -- 2146, 2150, 2156, 2160, 2164, 2168, 2174, 2179, 2183, 2187, 2191, 2195, -- 2199, 2203, 2207, 2211, 2215, 2219, 2224, 2228, 2232, 2237, 2242, 2246, -- 2252, 2257, 2261, 2265, 2269, 2273, 2277, 2281, 2285, 2290, 2295, 2299, -- 2302, 2304, 2306, 2308, 2310, 2312, 2314, 2316, 2318, 2320, 2322, 2324, -- 2326, 2328, 2330, 2332, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355, -- 2358, 2361, 2364, 2367, 2370, 2373, 2376, 2379, 2382, 2385, 2388, 2391, -- 2394, 2397, 2400, 2403, 2406, 2409, 2411, 2414, 2417, 2420, 2423, 2426, -- 2429, 2432, 2435, 2438, 2441, 2444, 2447, 2450, 2453, 2456, 2459, 2462, -- 2465, 2468, 2471, 2474, 2477, 2480, 2483, 2486, 2489, 2492, 2495, 2498, -- 2501, 2504, 2507, 2510, 2513, 2516, 2519, 2522, 2525, 2528, 2531, 2534, -- 2537, 2540, 2543, 2546, 2549, 2552, 2555, 2558, 2561, 2564, 2567, 2570, -- 2573, 2576, 2579, 2582, 2585, 2588, 2591, 2594, 2597, 2600, 2603, 2606, -- 2609, 2612, 2615, 2618, 2621, 2624, 2627, 2630, 2633, 2636, 2639, 2642, -- 2645, 2648, 2651, 2654, 2657, 2660, 2663, 2666, 2669, 2672, 2675, 2678, -- 2681, 2684, 2687, 2690, 2693, 2696, 2699, 2702, 2705, 2708, 2711, 2714, -- 2717, 2720, 2723, 2726, 2729, 2732, 2735, 2738, 2741, 2744, 2747, 2750, -- 2753, 2756, 2759, 2762, 2765, 2768, 2771, 2774, 2777, 2780, 2783, 2786, -- 2789, 2792, 2795, 2798, 2801, 2804, 2807, 2810, 2813, 2816, 2819, 2822, -- 2825, 2828, 2831, 2834, 2837, 2840, 2843, 2846, 2849, 2852, 2855, 2858, -- 2861, 2864, 2867, 2870, 2873, 2876, 2879, 2882, 2885, 2888, 2891, 2894, -- 2897, 2900, 2903, 2906, 2909, 2912, 2915, 2918, 2921, 2924, 2927, 2930, -- 2933, 2936, 2939, 2942, 2945, 2948, 2951, 2954, 2957, 2960, 2963, 2966, -- 2969, 2972, 2975, 2978, 2981, 2984, 2987, 2990, 2993, 2996, 2999, 3002, -- 3005, 3008, 3011, 3014, 3017, 3020, 3023, 3026, 3029, 3032, 3035, 3038, -- 3041, 3044, 3047, 3050, 3053, 3056, 3059, 3062, 3065, 3068, 3071, 3074, -- 3077, 3080, 3083, 3086, 3089, 3092, 3095, 3098, 3101, 3104, 3107, 3110, -- 3113, 3116, 3119, 3122, 3125, 3128, 3131, 3134, 3137, 3140, 3143, 3146, -- 3149, 3152, 3155, 3158, 3161, 3164, 3167, 3170, 3173, 3176, 3179, 3182, -- 3185, 3188, 3191, 3194, 3197, 3200, 3203, 3206, 3209, 3212, 3215, 3218, -- 3221, 3224, 3227, 3230, 3233, 3236, 3239, 3242, 3245, 3248, 3251, 3254, -- 3257, 3260, 3263, 3266, 3269, 3272, 3275, 3278, 3281, 3284, 3287, 3290, -- 3293, 3296, 3299, 3302, 3305, 3308, 3311, 3314, 3317, 3320, 3323, 3326, -- 3329, 3332, 3335, 3338, 3341, 3344, 3347, 3350, 3353, 3356, 3359, 3362, -- 3365, 3368, 3371, 3374, 3377, 3380, 3383, 3386, 3389, 3392, 3395, 3398, -- 3401, 3404, 3407, 3410, 3413, 3416, 3419, 3422, 3425, 3428, 3431, 3434, -- 3437, 3440, 3443, 3446, 3449, 3452, 3455, 3458, 3461, 3464, 3467, 3470, -- 3473, 3476, 3479, 3482, 3485, 3488, 3491, 3494, 3497, 3500, 3503, 3506, -- 3509, 3512, 3515, 3518, 3521, 3524, 3527, 3530, 3533, 3536, 3539, 3542, -- 3545, 3548, 3551, 3554, 3557, 3560, 3563, 3566, 3569, 3572, 3575, 3578, -- 3581, 3584, 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, 3611, 3614, -- 3617, 3620, 3623, 3626, 3629, 3632, 3635, 3638, 3641, 3644, 3647, 3650, -- 3653, 3656, 3659, 3662, 3665, 3668, 3671, 3674, 3677, 3680, 3683, 3686, -- 3689, 3692, 3695, 3698, 3701, 3704, 3707, 3710, 3713, 3716, 3719, 3722, -- 3725, 3728, 3731, 3734, 3737, 3740, 3743, 3746, 3749, 3752, 3755, 3758, -- 3761, 3764, 3767, 3770, 3773, 3776, 3779, 3782, 3785, 3788, 3791, 3794, -- 3797, 3800, 3803, 3806, 3809, 3812, 3815, 3818, 3821, 3824, 3827, 3830, -- 3833, 3836, 3839, 3842, 3845, 3848, 3851, 3854, 3857, 3860, 3863, 3866, -- 3869, 3872, 3875, 3878, 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, -- 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, 3929, 3932, 3935, 3938, -- 3941, 3944, 3947, 3950, 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, -- 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, 4001, 4004, 4007, 4010, -- 4013, 4016, 4019, 4022, 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4046, -- 4049, 4052, 4055, 4058, 4061, 4064, 4067, 4070, 4073, 4076, 4079, 4082, -- 4085, 4088, 4091, 4094, 4097, 4100, 4103, 4106, 4109, 4112, 4115, 4118, -- 4121, 4124, 4127, 4130, 4133, 4136, 4139, 4142, 4145, 4148, 4151, 4154, -- 4157, 4160, 4163, 4166, 4169, 4172, 4175, 4178, 4181, 4184, 4187, 4190, -- 4193, 4196, 4199, 4202, 4205, 4208, 4211, 4214, 4217, 4220, 4223, 4226, -- 4229, 4232, 4235, 4238, 4241, 4244, 4247, 4250, 4253, 4256, 4259, 4262, -- 4265, 4268, 4271, 4274, 4277, 4280, 4283, 4286, 4289, 4292, 4295, 4298, -- 4301, 4304, 4307, 4310, 4313, 4316, 4319, 4322, 4325, 4328, 4331, 4334, -- 4337, 4340, 4343, 4346, 4349, 4352, 4355, 4358, 4361, 4364, 4367, 4370, -- 4373, 4376, 4379, 4382, 4385, 4388, 4391, 4394, 4397, 4400, 4403, 4406, -- 4409, 4412, 4415, 4418, 4421, 4424, 4427, 4430, 4433, 4436, 4439, 4442, -- 4445, 4448, 4451, 4454, 4457, 4460, 4463, 4466, 4469, 4472, 4475, 4478, -- 4481, 4484, 4487, 4490, 4493, 4496, 4499, 4502, 4505, 4508, 4511, 4514, -- 4517, 4520, 4523, 4526, 4529, 4532, 4535, 4538, 4541, 4544, 4547, 4550, -- 4553, 4556, 4559, 4562, 4565, 4568, 4571, 4574, 4577, 4580, 4583, 4586, -- 4589, 4592, 4595, 4598, 4601, 4604, 4607, 4610, 4613, 4616, 4619, 4622, -- 4625, 4628, 4631, 4634, 4637, 4640, 4643, 4646, 4649, 4652, 4655, 4658, -- 4661, 4664, 4667, 4670, 4673, 4676, 4679, 4682, 4685, 4688, 4691, 4694, -- 4697, 4700, 4703, 4706, 4709, 4712, 4715, 4718, 4721, 4724, 4727, 4730, -- 4733, 4736, 4739, 4742, 4745, 4748, 4751, 4754, 4757, 4760, 4763, 4766, -- 4769, 4772, 4775, 4778, 4781, 4784, 4787, 4790, 4793 -+ 1575, 1580, 1585, 1590, 1595, 1600, 1603, 1606, 1609, 1612, 1615, 1618, -+ 1621, 1624, 1627, 1630, 1633, 1636, 1641, 1645, 1650, 1653, 1656, 1662, -+ 1668, 1674, 1680, 1686, 1692, 1698, 1704, 1710, 1716, 1722, 1728, 1734, -+ 1740, 1746, 1752, 1758, 1764, 1770, 1776, 1782, 1788, 1794, 1800, 1806, -+ 1812, 1818, 1824, 1830, 1836, 1841, 1845, 1849, 1854, 1858, 1862, 1866, -+ 1870, 1874, 1878, 1882, 1886, 1890, 1894, 1899, 1905, 1909, 1913, 1917, -+ 1921, 1925, 1929, 1933, 1938, 1943, 1948, 1953, 1957, 1961, 1965, 1969, -+ 1973, 1977, 1981, 1985, 1989, 1993, 1999, 2005, 2010, 2016, 2022, 2028, -+ 2033, 2039, 2044, 2051, 2055, 2060, 2065, 2070, 2075, 2082, 2091, 2095, -+ 2099, 2103, 2107, 2111, 2115, 2119, 2123, 2127, 2131, 2135, 2139, 2143, -+ 2147, 2151, 2155, 2161, 2165, 2169, 2173, 2179, 2184, 2188, 2192, 2196, -+ 2200, 2204, 2208, 2212, 2216, 2220, 2224, 2229, 2233, 2237, 2242, 2247, -+ 2251, 2257, 2262, 2266, 2270, 2274, 2278, 2282, 2286, 2290, 2295, 2300, -+ 2304, 2307, 2309, 2311, 2313, 2315, 2317, 2319, 2321, 2323, 2325, 2327, -+ 2329, 2331, 2333, 2335, 2337, 2339, 2342, 2345, 2348, 2351, 2354, 2357, -+ 2360, 2363, 2366, 2369, 2372, 2375, 2378, 2381, 2384, 2387, 2390, 2393, -+ 2396, 2399, 2402, 2405, 2408, 2411, 2414, 2416, 2419, 2422, 2425, 2428, -+ 2431, 2434, 2437, 2440, 2443, 2446, 2449, 2452, 2455, 2458, 2461, 2464, -+ 2467, 2470, 2473, 2476, 2479, 2482, 2485, 2488, 2491, 2494, 2497, 2500, -+ 2503, 2506, 2509, 2512, 2515, 2518, 2521, 2524, 2527, 2530, 2533, 2536, -+ 2539, 2542, 2545, 2548, 2551, 2554, 2557, 2560, 2563, 2566, 2569, 2572, -+ 2575, 2578, 2581, 2584, 2587, 2590, 2593, 2596, 2599, 2602, 2605, 2608, -+ 2611, 2614, 2617, 2620, 2623, 2626, 2629, 2632, 2635, 2638, 2641, 2644, -+ 2647, 2650, 2653, 2656, 2659, 2662, 2665, 2668, 2671, 2674, 2677, 2680, -+ 2683, 2686, 2689, 2692, 2695, 2698, 2701, 2704, 2707, 2710, 2713, 2716, -+ 2719, 2722, 2725, 2728, 2731, 2734, 2737, 2740, 2743, 2746, 2749, 2752, -+ 2755, 2758, 2761, 2764, 2767, 2770, 2773, 2776, 2779, 2782, 2785, 2788, -+ 2791, 2794, 2797, 2800, 2803, 2806, 2809, 2812, 2815, 2818, 2821, 2824, -+ 2827, 2830, 2833, 2836, 2839, 2842, 2845, 2848, 2851, 2854, 2857, 2860, -+ 2863, 2866, 2869, 2872, 2875, 2878, 2881, 2884, 2887, 2890, 2893, 2896, -+ 2899, 2902, 2905, 2908, 2911, 2914, 2917, 2920, 2923, 2926, 2929, 2932, -+ 2935, 2938, 2941, 2944, 2947, 2950, 2953, 2956, 2959, 2962, 2965, 2968, -+ 2971, 2974, 2977, 2980, 2983, 2986, 2989, 2992, 2995, 2998, 3001, 3004, -+ 3007, 3010, 3013, 3016, 3019, 3022, 3025, 3028, 3031, 3034, 3037, 3040, -+ 3043, 3046, 3049, 3052, 3055, 3058, 3061, 3064, 3067, 3070, 3073, 3076, -+ 3079, 3082, 3085, 3088, 3091, 3094, 3097, 3100, 3103, 3106, 3109, 3112, -+ 3115, 3118, 3121, 3124, 3127, 3130, 3133, 3136, 3139, 3142, 3145, 3148, -+ 3151, 3154, 3157, 3160, 3163, 3166, 3169, 3172, 3175, 3178, 3181, 3184, -+ 3187, 3190, 3193, 3196, 3199, 3202, 3205, 3208, 3211, 3214, 3217, 3220, -+ 3223, 3226, 3229, 3232, 3235, 3238, 3241, 3244, 3247, 3250, 3253, 3256, -+ 3259, 3262, 3265, 3268, 3271, 3274, 3277, 3280, 3283, 3286, 3289, 3292, -+ 3295, 3298, 3301, 3304, 3307, 3310, 3313, 3316, 3319, 3322, 3325, 3328, -+ 3331, 3334, 3337, 3340, 3343, 3346, 3349, 3352, 3355, 3358, 3361, 3364, -+ 3367, 3370, 3373, 3376, 3379, 3382, 3385, 3388, 3391, 3394, 3397, 3400, -+ 3403, 3406, 3409, 3412, 3415, 3418, 3421, 3424, 3427, 3430, 3433, 3436, -+ 3439, 3442, 3445, 3448, 3451, 3454, 3457, 3460, 3463, 3466, 3469, 3472, -+ 3475, 3478, 3481, 3484, 3487, 3490, 3493, 3496, 3499, 3502, 3505, 3508, -+ 3511, 3514, 3517, 3520, 3523, 3526, 3529, 3532, 3535, 3538, 3541, 3544, -+ 3547, 3550, 3553, 3556, 3559, 3562, 3565, 3568, 3571, 3574, 3577, 3580, -+ 3583, 3586, 3589, 3592, 3595, 3598, 3601, 3604, 3607, 3610, 3613, 3616, -+ 3619, 3622, 3625, 3628, 3631, 3634, 3637, 3640, 3643, 3646, 3649, 3652, -+ 3655, 3658, 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, 3685, 3688, -+ 3691, 3694, 3697, 3700, 3703, 3706, 3709, 3712, 3715, 3718, 3721, 3724, -+ 3727, 3730, 3733, 3736, 3739, 3742, 3745, 3748, 3751, 3754, 3757, 3760, -+ 3763, 3766, 3769, 3772, 3775, 3778, 3781, 3784, 3787, 3790, 3793, 3796, -+ 3799, 3802, 3805, 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, 3832, -+ 3835, 3838, 3841, 3844, 3847, 3850, 3853, 3856, 3859, 3862, 3865, 3868, -+ 3871, 3874, 3877, 3880, 3883, 3886, 3889, 3892, 3895, 3898, 3901, 3904, -+ 3907, 3910, 3913, 3916, 3919, 3922, 3925, 3928, 3931, 3934, 3937, 3940, -+ 3943, 3946, 3949, 3952, 3955, 3958, 3961, 3964, 3967, 3970, 3973, 3976, -+ 3979, 3982, 3985, 3988, 3991, 3994, 3997, 4000, 4003, 4006, 4009, 4012, -+ 4015, 4018, 4021, 4024, 4027, 4030, 4033, 4036, 4039, 4042, 4045, 4048, -+ 4051, 4054, 4057, 4060, 4063, 4066, 4069, 4072, 4075, 4078, 4081, 4084, -+ 4087, 4090, 4093, 4096, 4099, 4102, 4105, 4108, 4111, 4114, 4117, 4120, -+ 4123, 4126, 4129, 4132, 4135, 4138, 4141, 4144, 4147, 4150, 4153, 4156, -+ 4159, 4162, 4165, 4168, 4171, 4174, 4177, 4180, 4183, 4186, 4189, 4192, -+ 4195, 4198, 4201, 4204, 4207, 4210, 4213, 4216, 4219, 4222, 4225, 4228, -+ 4231, 4234, 4237, 4240, 4243, 4246, 4249, 4252, 4255, 4258, 4261, 4264, -+ 4267, 4270, 4273, 4276, 4279, 4282, 4285, 4288, 4291, 4294, 4297, 4300, -+ 4303, 4306, 4309, 4312, 4315, 4318, 4321, 4324, 4327, 4330, 4333, 4336, -+ 4339, 4342, 4345, 4348, 4351, 4354, 4357, 4360, 4363, 4366, 4369, 4372, -+ 4375, 4378, 4381, 4384, 4387, 4390, 4393, 4396, 4399, 4402, 4405, 4408, -+ 4411, 4414, 4417, 4420, 4423, 4426, 4429, 4432, 4435, 4438, 4441, 4444, -+ 4447, 4450, 4453, 4456, 4459, 4462, 4465, 4468, 4471, 4474, 4477, 4480, -+ 4483, 4486, 4489, 4492, 4495, 4498, 4501, 4504, 4507, 4510, 4513, 4516, -+ 4519, 4522, 4525, 4528, 4531, 4534, 4537, 4540, 4543, 4546, 4549, 4552, -+ 4555, 4558, 4561, 4564, 4567, 4570, 4573, 4576, 4579, 4582, 4585, 4588, -+ 4591, 4594, 4597, 4600, 4603, 4606, 4609, 4612, 4615, 4618, 4621, 4624, -+ 4627, 4630, 4633, 4636, 4639, 4642, 4645, 4648, 4651, 4654, 4657, 4660, -+ 4663, 4666, 4669, 4672, 4675, 4678, 4681, 4684, 4687, 4690, 4693, 4696, -+ 4699, 4702, 4705, 4708, 4711, 4714, 4717, 4720, 4723, 4726, 4729, 4732, -+ 4735, 4738, 4741, 4744, 4747, 4750, 4753, 4756, 4759, 4762, 4765, 4768, -+ 4771, 4774, 4777, 4780, 4783, 4786, 4789, 4792, 4795, 4798 - }; - static const wchar_t translit_to_tbl[] = - L" \0" L"\0" L"(C)\0" L"\0" L"<<\0" L"\0" L"-\0" L"\0" L"(R)\0" L"\0" L"u\0" -@@ -594,73 +594,73 @@ static const wchar_t translit_to_tbl[] = - L"\0" L"..\0" L"\0" L"...\0" L"\0" L" \0" L"\0" L"`\0" L"\0" L"``\0" L"\0" - L"```\0" L"\0" L"<\0" L"\0" L">\0" L"\0" L"!!\0" L"\0" L"/\0" L"\0" L"??\0" - L"\0" L"?!\0" L"\0" L"!?\0" L"\0" L" \0" L"\0" L"\0" L"\0" L"\0" L"\0" L"\0" -- L"\0" L"\0" L"\0" L"Rs\0" L"\0" L"EUR\0" L"\0" L"a/c\0" L"\0" L"a/s\0" L"\0" -- L"C\0" L"\0" L"c/o\0" L"\0" L"c/u\0" L"\0" L"g\0" L"\0" L"H\0" L"\0" L"H\0" -- L"\0" L"H\0" L"\0" L"h\0" L"\0" L"I\0" L"\0" L"I\0" L"\0" L"L\0" L"\0" -- L"l\0" L"\0" L"N\0" L"\0" L"No\0" L"\0" L"P\0" L"\0" L"Q\0" L"\0" L"R\0" -- L"\0" L"R\0" L"\0" L"R\0" L"\0" L"TEL\0" L"\0" L"(TM)\0" L"\0" L"Z\0" L"\0" -- L"Ohm\0" L"\0" L"Z\0" L"\0" L"B\0" L"\0" L"C\0" L"\0" L"e\0" L"\0" L"e\0" -- L"\0" L"E\0" L"\0" L"F\0" L"\0" L"M\0" L"\0" L"o\0" L"\0" L"i\0" L"\0" -- L"D\0" L"\0" L"d\0" L"\0" L"e\0" L"\0" L"i\0" L"\0" L"j\0" L"\0" L" 1/3 \0" -- L"\0" L" 2/3 \0" L"\0" L" 1/5 \0" L"\0" L" 2/5 \0" L"\0" L" 3/5 \0" L"\0" -- L" 4/5 \0" L"\0" L" 1/6 \0" L"\0" L" 5/6 \0" L"\0" L" 1/8 \0" L"\0" -- L" 3/8 \0" L"\0" L" 5/8 \0" L"\0" L" 7/8 \0" L"\0" L" 1/\0" L"\0" L"I\0" -- L"\0" L"II\0" L"\0" L"III\0" L"\0" L"IV\0" L"\0" L"V\0" L"\0" L"VI\0" L"\0" -- L"VII\0" L"\0" L"VIII\0" L"\0" L"IX\0" L"\0" L"X\0" L"\0" L"XI\0" L"\0" -- L"XII\0" L"\0" L"L\0" L"\0" L"C\0" L"\0" L"D\0" L"\0" L"M\0" L"\0" L"i\0" -- L"\0" L"ii\0" L"\0" L"iii\0" L"\0" L"iv\0" L"\0" L"v\0" L"\0" L"vi\0" L"\0" -- L"vii\0" L"\0" L"viii\0" L"\0" L"ix\0" L"\0" L"x\0" L"\0" L"xi\0" L"\0" -- L"xii\0" L"\0" L"l\0" L"\0" L"c\0" L"\0" L"d\0" L"\0" L"m\0" L"\0" L"<-\0" -- L"\0" L"->\0" L"\0" L"<->\0" L"\0" L"<=\0" L"\0" L"=>\0" L"\0" L"<=>\0" -- L"\0" L"-\0" L"\0" L"/\0" L"\0" L"\\\0" L"\0" L"*\0" L"\0" L"|\0" L"\0" -- L":\0" L"\0" L"~\0" L"\0" L"<=\0" L"\0" L">=\0" L"\0" L"<<\0" L"\0" L">>\0" -- L"\0" L"<<<\0" L"\0" L">>>\0" L"\0" L"NUL\0" L"\0" L"SOH\0" L"\0" L"STX\0" -- L"\0" L"ETX\0" L"\0" L"EOT\0" L"\0" L"ENQ\0" L"\0" L"ACK\0" L"\0" L"BEL\0" -- L"\0" L"BS\0" L"\0" L"HT\0" L"\0" L"LF\0" L"\0" L"VT\0" L"\0" L"FF\0" L"\0" -- L"CR\0" L"\0" L"SO\0" L"\0" L"SI\0" L"\0" L"DLE\0" L"\0" L"DC1\0" L"\0" -- L"DC2\0" L"\0" L"DC3\0" L"\0" L"DC4\0" L"\0" L"NAK\0" L"\0" L"SYN\0" L"\0" -- L"ETB\0" L"\0" L"CAN\0" L"\0" L"EM\0" L"\0" L"SUB\0" L"\0" L"ESC\0" L"\0" -- L"FS\0" L"\0" L"GS\0" L"\0" L"RS\0" L"\0" L"US\0" L"\0" L"SP\0" L"\0" -- L"DEL\0" L"\0" L"_\0" L"\0" L"NL\0" L"\0" L"(1)\0" L"\0" L"(2)\0" L"\0" -- L"(3)\0" L"\0" L"(4)\0" L"\0" L"(5)\0" L"\0" L"(6)\0" L"\0" L"(7)\0" L"\0" -- L"(8)\0" L"\0" L"(9)\0" L"\0" L"(10)\0" L"\0" L"(11)\0" L"\0" L"(12)\0" -- L"\0" L"(13)\0" L"\0" L"(14)\0" L"\0" L"(15)\0" L"\0" L"(16)\0" L"\0" -- L"(17)\0" L"\0" L"(18)\0" L"\0" L"(19)\0" L"\0" L"(20)\0" L"\0" L"(1)\0" -- L"\0" L"(2)\0" L"\0" L"(3)\0" L"\0" L"(4)\0" L"\0" L"(5)\0" L"\0" L"(6)\0" -- L"\0" L"(7)\0" L"\0" L"(8)\0" L"\0" L"(9)\0" L"\0" L"(10)\0" L"\0" L"(11)\0" -- L"\0" L"(12)\0" L"\0" L"(13)\0" L"\0" L"(14)\0" L"\0" L"(15)\0" L"\0" -- L"(16)\0" L"\0" L"(17)\0" L"\0" L"(18)\0" L"\0" L"(19)\0" L"\0" L"(20)\0" -- L"\0" L"1.\0" L"\0" L"2.\0" L"\0" L"3.\0" L"\0" L"4.\0" L"\0" L"5.\0" L"\0" -- L"6.\0" L"\0" L"7.\0" L"\0" L"8.\0" L"\0" L"9.\0" L"\0" L"10.\0" L"\0" -- L"11.\0" L"\0" L"12.\0" L"\0" L"13.\0" L"\0" L"14.\0" L"\0" L"15.\0" L"\0" -- L"16.\0" L"\0" L"17.\0" L"\0" L"18.\0" L"\0" L"19.\0" L"\0" L"20.\0" L"\0" -- L"(a)\0" L"\0" L"(b)\0" L"\0" L"(c)\0" L"\0" L"(d)\0" L"\0" L"(e)\0" L"\0" -- L"(f)\0" L"\0" L"(g)\0" L"\0" L"(h)\0" L"\0" L"(i)\0" L"\0" L"(j)\0" L"\0" -- L"(k)\0" L"\0" L"(l)\0" L"\0" L"(m)\0" L"\0" L"(n)\0" L"\0" L"(o)\0" L"\0" -- L"(p)\0" L"\0" L"(q)\0" L"\0" L"(r)\0" L"\0" L"(s)\0" L"\0" L"(t)\0" L"\0" -- L"(u)\0" L"\0" L"(v)\0" L"\0" L"(w)\0" L"\0" L"(x)\0" L"\0" L"(y)\0" L"\0" -- L"(z)\0" L"\0" L"(A)\0" L"\0" L"(B)\0" L"\0" L"(C)\0" L"\0" L"(D)\0" L"\0" -- L"(E)\0" L"\0" L"(F)\0" L"\0" L"(G)\0" L"\0" L"(H)\0" L"\0" L"(I)\0" L"\0" -- L"(J)\0" L"\0" L"(K)\0" L"\0" L"(L)\0" L"\0" L"(M)\0" L"\0" L"(N)\0" L"\0" -- L"(O)\0" L"\0" L"(P)\0" L"\0" L"(Q)\0" L"\0" L"(R)\0" L"\0" L"(S)\0" L"\0" -- L"(T)\0" L"\0" L"(U)\0" L"\0" L"(V)\0" L"\0" L"(W)\0" L"\0" L"(X)\0" L"\0" -- L"(Y)\0" L"\0" L"(Z)\0" L"\0" L"(a)\0" L"\0" L"(b)\0" L"\0" L"(c)\0" L"\0" -- L"(d)\0" L"\0" L"(e)\0" L"\0" L"(f)\0" L"\0" L"(g)\0" L"\0" L"(h)\0" L"\0" -- L"(i)\0" L"\0" L"(j)\0" L"\0" L"(k)\0" L"\0" L"(l)\0" L"\0" L"(m)\0" L"\0" -- L"(n)\0" L"\0" L"(o)\0" L"\0" L"(p)\0" L"\0" L"(q)\0" L"\0" L"(r)\0" L"\0" -- L"(s)\0" L"\0" L"(t)\0" L"\0" L"(u)\0" L"\0" L"(v)\0" L"\0" L"(w)\0" L"\0" -- L"(x)\0" L"\0" L"(y)\0" L"\0" L"(z)\0" L"\0" L"(0)\0" L"\0" L"-\0" L"\0" -- L"|\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" -- L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"o\0" L"\0" -- L"::=\0" L"\0" L"==\0" L"\0" L"===\0" L"\0" L" \0" L"\0" L"=\0" L"\0" -- L"(21)\0" L"\0" L"(22)\0" L"\0" L"(23)\0" L"\0" L"(24)\0" L"\0" L"(25)\0" -- L"\0" L"(26)\0" L"\0" L"(27)\0" L"\0" L"(28)\0" L"\0" L"(29)\0" L"\0" -- L"(30)\0" L"\0" L"(31)\0" L"\0" L"(32)\0" L"\0" L"(33)\0" L"\0" L"(34)\0" -- L"\0" L"(35)\0" L"\0" L"(36)\0" L"\0" L"(37)\0" L"\0" L"(38)\0" L"\0" -- L"(39)\0" L"\0" L"(40)\0" L"\0" L"(41)\0" L"\0" L"(42)\0" L"\0" L"(43)\0" -- L"\0" L"(44)\0" L"\0" L"(45)\0" L"\0" L"(46)\0" L"\0" L"(47)\0" L"\0" -- L"(48)\0" L"\0" L"(49)\0" L"\0" L"(50)\0" L"\0" L"hPa\0" L"\0" L"da\0" L"\0" -- L"AU\0" L"\0" L"bar\0" L"\0" L"oV\0" L"\0" L"pc\0" L"\0" L"pA\0" L"\0" -+ L"\0" L"\0" L"\0" L"Rs\0" L"\0" L"EUR\0" L"\0" L"INR\0" L"\0" L"a/c\0" L"\0" -+ L"a/s\0" L"\0" L"C\0" L"\0" L"c/o\0" L"\0" L"c/u\0" L"\0" L"g\0" L"\0" -+ L"H\0" L"\0" L"H\0" L"\0" L"H\0" L"\0" L"h\0" L"\0" L"I\0" L"\0" L"I\0" -+ L"\0" L"L\0" L"\0" L"l\0" L"\0" L"N\0" L"\0" L"No\0" L"\0" L"P\0" L"\0" -+ L"Q\0" L"\0" L"R\0" L"\0" L"R\0" L"\0" L"R\0" L"\0" L"TEL\0" L"\0" L"(TM)\0" -+ L"\0" L"Z\0" L"\0" L"Ohm\0" L"\0" L"Z\0" L"\0" L"B\0" L"\0" L"C\0" L"\0" -+ L"e\0" L"\0" L"e\0" L"\0" L"E\0" L"\0" L"F\0" L"\0" L"M\0" L"\0" L"o\0" -+ L"\0" L"i\0" L"\0" L"D\0" L"\0" L"d\0" L"\0" L"e\0" L"\0" L"i\0" L"\0" -+ L"j\0" L"\0" L" 1/3 \0" L"\0" L" 2/3 \0" L"\0" L" 1/5 \0" L"\0" L" 2/5 \0" -+ L"\0" L" 3/5 \0" L"\0" L" 4/5 \0" L"\0" L" 1/6 \0" L"\0" L" 5/6 \0" L"\0" -+ L" 1/8 \0" L"\0" L" 3/8 \0" L"\0" L" 5/8 \0" L"\0" L" 7/8 \0" L"\0" L" 1/\0" -+ L"\0" L"I\0" L"\0" L"II\0" L"\0" L"III\0" L"\0" L"IV\0" L"\0" L"V\0" L"\0" -+ L"VI\0" L"\0" L"VII\0" L"\0" L"VIII\0" L"\0" L"IX\0" L"\0" L"X\0" L"\0" -+ L"XI\0" L"\0" L"XII\0" L"\0" L"L\0" L"\0" L"C\0" L"\0" L"D\0" L"\0" L"M\0" -+ L"\0" L"i\0" L"\0" L"ii\0" L"\0" L"iii\0" L"\0" L"iv\0" L"\0" L"v\0" L"\0" -+ L"vi\0" L"\0" L"vii\0" L"\0" L"viii\0" L"\0" L"ix\0" L"\0" L"x\0" L"\0" -+ L"xi\0" L"\0" L"xii\0" L"\0" L"l\0" L"\0" L"c\0" L"\0" L"d\0" L"\0" L"m\0" -+ L"\0" L"<-\0" L"\0" L"->\0" L"\0" L"<->\0" L"\0" L"<=\0" L"\0" L"=>\0" L"\0" -+ L"<=>\0" L"\0" L"-\0" L"\0" L"/\0" L"\0" L"\\\0" L"\0" L"*\0" L"\0" L"|\0" -+ L"\0" L":\0" L"\0" L"~\0" L"\0" L"<=\0" L"\0" L">=\0" L"\0" L"<<\0" L"\0" -+ L">>\0" L"\0" L"<<<\0" L"\0" L">>>\0" L"\0" L"NUL\0" L"\0" L"SOH\0" L"\0" -+ L"STX\0" L"\0" L"ETX\0" L"\0" L"EOT\0" L"\0" L"ENQ\0" L"\0" L"ACK\0" L"\0" -+ L"BEL\0" L"\0" L"BS\0" L"\0" L"HT\0" L"\0" L"LF\0" L"\0" L"VT\0" L"\0" -+ L"FF\0" L"\0" L"CR\0" L"\0" L"SO\0" L"\0" L"SI\0" L"\0" L"DLE\0" L"\0" -+ L"DC1\0" L"\0" L"DC2\0" L"\0" L"DC3\0" L"\0" L"DC4\0" L"\0" L"NAK\0" L"\0" -+ L"SYN\0" L"\0" L"ETB\0" L"\0" L"CAN\0" L"\0" L"EM\0" L"\0" L"SUB\0" L"\0" -+ L"ESC\0" L"\0" L"FS\0" L"\0" L"GS\0" L"\0" L"RS\0" L"\0" L"US\0" L"\0" -+ L"SP\0" L"\0" L"DEL\0" L"\0" L"_\0" L"\0" L"NL\0" L"\0" L"(1)\0" L"\0" -+ L"(2)\0" L"\0" L"(3)\0" L"\0" L"(4)\0" L"\0" L"(5)\0" L"\0" L"(6)\0" L"\0" -+ L"(7)\0" L"\0" L"(8)\0" L"\0" L"(9)\0" L"\0" L"(10)\0" L"\0" L"(11)\0" L"\0" -+ L"(12)\0" L"\0" L"(13)\0" L"\0" L"(14)\0" L"\0" L"(15)\0" L"\0" L"(16)\0" -+ L"\0" L"(17)\0" L"\0" L"(18)\0" L"\0" L"(19)\0" L"\0" L"(20)\0" L"\0" -+ L"(1)\0" L"\0" L"(2)\0" L"\0" L"(3)\0" L"\0" L"(4)\0" L"\0" L"(5)\0" L"\0" -+ L"(6)\0" L"\0" L"(7)\0" L"\0" L"(8)\0" L"\0" L"(9)\0" L"\0" L"(10)\0" L"\0" -+ L"(11)\0" L"\0" L"(12)\0" L"\0" L"(13)\0" L"\0" L"(14)\0" L"\0" L"(15)\0" -+ L"\0" L"(16)\0" L"\0" L"(17)\0" L"\0" L"(18)\0" L"\0" L"(19)\0" L"\0" -+ L"(20)\0" L"\0" L"1.\0" L"\0" L"2.\0" L"\0" L"3.\0" L"\0" L"4.\0" L"\0" -+ L"5.\0" L"\0" L"6.\0" L"\0" L"7.\0" L"\0" L"8.\0" L"\0" L"9.\0" L"\0" -+ L"10.\0" L"\0" L"11.\0" L"\0" L"12.\0" L"\0" L"13.\0" L"\0" L"14.\0" L"\0" -+ L"15.\0" L"\0" L"16.\0" L"\0" L"17.\0" L"\0" L"18.\0" L"\0" L"19.\0" L"\0" -+ L"20.\0" L"\0" L"(a)\0" L"\0" L"(b)\0" L"\0" L"(c)\0" L"\0" L"(d)\0" L"\0" -+ L"(e)\0" L"\0" L"(f)\0" L"\0" L"(g)\0" L"\0" L"(h)\0" L"\0" L"(i)\0" L"\0" -+ L"(j)\0" L"\0" L"(k)\0" L"\0" L"(l)\0" L"\0" L"(m)\0" L"\0" L"(n)\0" L"\0" -+ L"(o)\0" L"\0" L"(p)\0" L"\0" L"(q)\0" L"\0" L"(r)\0" L"\0" L"(s)\0" L"\0" -+ L"(t)\0" L"\0" L"(u)\0" L"\0" L"(v)\0" L"\0" L"(w)\0" L"\0" L"(x)\0" L"\0" -+ L"(y)\0" L"\0" L"(z)\0" L"\0" L"(A)\0" L"\0" L"(B)\0" L"\0" L"(C)\0" L"\0" -+ L"(D)\0" L"\0" L"(E)\0" L"\0" L"(F)\0" L"\0" L"(G)\0" L"\0" L"(H)\0" L"\0" -+ L"(I)\0" L"\0" L"(J)\0" L"\0" L"(K)\0" L"\0" L"(L)\0" L"\0" L"(M)\0" L"\0" -+ L"(N)\0" L"\0" L"(O)\0" L"\0" L"(P)\0" L"\0" L"(Q)\0" L"\0" L"(R)\0" L"\0" -+ L"(S)\0" L"\0" L"(T)\0" L"\0" L"(U)\0" L"\0" L"(V)\0" L"\0" L"(W)\0" L"\0" -+ L"(X)\0" L"\0" L"(Y)\0" L"\0" L"(Z)\0" L"\0" L"(a)\0" L"\0" L"(b)\0" L"\0" -+ L"(c)\0" L"\0" L"(d)\0" L"\0" L"(e)\0" L"\0" L"(f)\0" L"\0" L"(g)\0" L"\0" -+ L"(h)\0" L"\0" L"(i)\0" L"\0" L"(j)\0" L"\0" L"(k)\0" L"\0" L"(l)\0" L"\0" -+ L"(m)\0" L"\0" L"(n)\0" L"\0" L"(o)\0" L"\0" L"(p)\0" L"\0" L"(q)\0" L"\0" -+ L"(r)\0" L"\0" L"(s)\0" L"\0" L"(t)\0" L"\0" L"(u)\0" L"\0" L"(v)\0" L"\0" -+ L"(w)\0" L"\0" L"(x)\0" L"\0" L"(y)\0" L"\0" L"(z)\0" L"\0" L"(0)\0" L"\0" -+ L"-\0" L"\0" L"|\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" -+ L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" -+ L"o\0" L"\0" L"::=\0" L"\0" L"==\0" L"\0" L"===\0" L"\0" L" \0" L"\0" L"=\0" -+ L"\0" L"(21)\0" L"\0" L"(22)\0" L"\0" L"(23)\0" L"\0" L"(24)\0" L"\0" -+ L"(25)\0" L"\0" L"(26)\0" L"\0" L"(27)\0" L"\0" L"(28)\0" L"\0" L"(29)\0" -+ L"\0" L"(30)\0" L"\0" L"(31)\0" L"\0" L"(32)\0" L"\0" L"(33)\0" L"\0" -+ L"(34)\0" L"\0" L"(35)\0" L"\0" L"(36)\0" L"\0" L"(37)\0" L"\0" L"(38)\0" -+ L"\0" L"(39)\0" L"\0" L"(40)\0" L"\0" L"(41)\0" L"\0" L"(42)\0" L"\0" -+ L"(43)\0" L"\0" L"(44)\0" L"\0" L"(45)\0" L"\0" L"(46)\0" L"\0" L"(47)\0" -+ L"\0" L"(48)\0" L"\0" L"(49)\0" L"\0" L"(50)\0" L"\0" L"hPa\0" L"\0" L"da\0" -+ L"\0" L"AU\0" L"\0" L"bar\0" L"\0" L"oV\0" L"\0" L"pc\0" L"\0" L"pA\0" L"\0" - L"nA\0" L"\0" L"uA\0" L"\0" L"mA\0" L"\0" L"kA\0" L"\0" L"KB\0" L"\0" - L"MB\0" L"\0" L"GB\0" L"\0" L"cal\0" L"\0" L"kcal\0" L"\0" L"pF\0" L"\0" - L"nF\0" L"\0" L"uF\0" L"\0" L"ug\0" L"\0" L"mg\0" L"\0" L"kg\0" L"\0" -Index: glibc-2.12-2-gc4ccff1/locale/C-translit.h.in -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/locale/C-translit.h.in -+++ glibc-2.12-2-gc4ccff1/locale/C-translit.h.in -@@ -105,6 +105,7 @@ - "\x2063" "" /* INVISIBLE SEPARATOR */ - "\x20a8" "Rs" /* RUPEE SIGN */ - "\x20ac" "EUR" /* EURO SIGN */ -+"\x20b9" "INR" /* INDIAN RUPEE SIGN */ - "\x2100" "a/c" /* ACCOUNT OF */ - "\x2101" "a/s" /* ADDRESSED TO THE SUBJECT */ - "\x2102" "C" /* DOUBLE-STRUCK CAPITAL C */ -Index: glibc-2.12-2-gc4ccff1/localedata/charmaps/UTF-8 -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/charmaps/UTF-8 -+++ glibc-2.12-2-gc4ccff1/localedata/charmaps/UTF-8 -@@ -1312,6 +1312,10 @@ CHARMAP - /xd4/xa1 CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK - /xd4/xa2 CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK - /xd4/xa3 CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK -+ /xd4/xa4 CYRILLIC CAPITAL LETTER PE WITH DESCENDER -+ /xd4/xa5 CYRILLIC SMALL LETTER PE WITH DESCENDER -+ /xd4/xa6 CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER -+ /xd4/xa7 CYRILLIC SMALL LETTER SHHA WITH DESCENDER - /xd4/xb1 ARMENIAN CAPITAL LETTER AYB - /xd4/xb2 ARMENIAN CAPITAL LETTER BEN - /xd4/xb3 ARMENIAN CAPITAL LETTER GIM -@@ -1513,6 +1517,7 @@ CHARMAP - /xd8/x9b ARABIC SEMICOLON - /xd8/x9e ARABIC TRIPLE DOT PUNCTUATION MARK - /xd8/x9f ARABIC QUESTION MARK -+ /xd8/xa0 ARABIC LETTER KASHMIRI YEH - /xd8/xa1 ARABIC LETTER HAMZA - /xd8/xa2 ARABIC LETTER ALEF WITH MADDA ABOVE - /xd8/xa3 ARABIC LETTER ALEF WITH HAMZA ABOVE -@@ -1575,6 +1580,7 @@ CHARMAP - /xd9/x9c ARABIC VOWEL SIGN DOT BELOW - /xd9/x9d ARABIC REVERSED DAMMA - /xd9/x9e ARABIC FATHA WITH TWO DOTS -+ /xd9/x9f ARABIC WAVY HAMZA BELOW - /xd9/xa0 ARABIC-INDIC DIGIT ZERO - /xd9/xa1 ARABIC-INDIC DIGIT ONE - /xd9/xa2 ARABIC-INDIC DIGIT TWO -@@ -1969,6 +1975,97 @@ CHARMAP - /xdf/xb8 NKO COMMA - /xdf/xb9 NKO EXCLAMATION MARK - /xdf/xba NKO LAJANYALAN -+ /xe0/xa0/x80 SAMARITAN LETTER ALAF -+ /xe0/xa0/x81 SAMARITAN LETTER BIT -+ /xe0/xa0/x82 SAMARITAN LETTER GAMAN -+ /xe0/xa0/x83 SAMARITAN LETTER DALAT -+ /xe0/xa0/x84 SAMARITAN LETTER IY -+ /xe0/xa0/x85 SAMARITAN LETTER BAA -+ /xe0/xa0/x86 SAMARITAN LETTER ZEN -+ /xe0/xa0/x87 SAMARITAN LETTER IT -+ /xe0/xa0/x88 SAMARITAN LETTER TIT -+ /xe0/xa0/x89 SAMARITAN LETTER YUT -+ /xe0/xa0/x8a SAMARITAN LETTER KAAF -+ /xe0/xa0/x8b SAMARITAN LETTER LABAT -+ /xe0/xa0/x8c SAMARITAN LETTER MIM -+ /xe0/xa0/x8d SAMARITAN LETTER NUN -+ /xe0/xa0/x8e SAMARITAN LETTER SINGAAT -+ /xe0/xa0/x8f SAMARITAN LETTER IN -+ /xe0/xa0/x90 SAMARITAN LETTER FI -+ /xe0/xa0/x91 SAMARITAN LETTER TSAADIY -+ /xe0/xa0/x92 SAMARITAN LETTER QUF -+ /xe0/xa0/x93 SAMARITAN LETTER RISH -+ /xe0/xa0/x94 SAMARITAN LETTER SHAN -+ /xe0/xa0/x95 SAMARITAN LETTER TAAF -+ /xe0/xa0/x96 SAMARITAN MARK IN -+ /xe0/xa0/x97 SAMARITAN MARK IN-ALAF -+ /xe0/xa0/x98 SAMARITAN MARK OCCLUSION -+ /xe0/xa0/x99 SAMARITAN MARK DAGESH -+ /xe0/xa0/x9a SAMARITAN MODIFIER LETTER EPENTHETIC YUT -+ /xe0/xa0/x9b SAMARITAN MARK EPENTHETIC YUT -+ /xe0/xa0/x9c SAMARITAN VOWEL SIGN LONG E -+ /xe0/xa0/x9d SAMARITAN VOWEL SIGN E -+ /xe0/xa0/x9e SAMARITAN VOWEL SIGN OVERLONG AA -+ /xe0/xa0/x9f SAMARITAN VOWEL SIGN LONG AA -+ /xe0/xa0/xa0 SAMARITAN VOWEL SIGN AA -+ /xe0/xa0/xa1 SAMARITAN VOWEL SIGN OVERLONG A -+ /xe0/xa0/xa2 SAMARITAN VOWEL SIGN LONG A -+ /xe0/xa0/xa3 SAMARITAN VOWEL SIGN A -+ /xe0/xa0/xa4 SAMARITAN MODIFIER LETTER SHORT A -+ /xe0/xa0/xa5 SAMARITAN VOWEL SIGN SHORT A -+ /xe0/xa0/xa6 SAMARITAN VOWEL SIGN LONG U -+ /xe0/xa0/xa7 SAMARITAN VOWEL SIGN U -+ /xe0/xa0/xa8 SAMARITAN MODIFIER LETTER I -+ /xe0/xa0/xa9 SAMARITAN VOWEL SIGN LONG I -+ /xe0/xa0/xaa SAMARITAN VOWEL SIGN I -+ /xe0/xa0/xab SAMARITAN VOWEL SIGN O -+ /xe0/xa0/xac SAMARITAN VOWEL SIGN SUKUN -+ /xe0/xa0/xad SAMARITAN MARK NEQUDAA -+ /xe0/xa0/xb0 SAMARITAN PUNCTUATION NEQUDAA -+ /xe0/xa0/xb1 SAMARITAN PUNCTUATION AFSAAQ -+ /xe0/xa0/xb2 SAMARITAN PUNCTUATION ANGED -+ /xe0/xa0/xb3 SAMARITAN PUNCTUATION BAU -+ /xe0/xa0/xb4 SAMARITAN PUNCTUATION ATMAAU -+ /xe0/xa0/xb5 SAMARITAN PUNCTUATION SHIYYAALAA -+ /xe0/xa0/xb6 SAMARITAN ABBREVIATION MARK -+ /xe0/xa0/xb7 SAMARITAN PUNCTUATION MELODIC QITSA -+ /xe0/xa0/xb8 SAMARITAN PUNCTUATION ZIQAA -+ /xe0/xa0/xb9 SAMARITAN PUNCTUATION QITSA -+ /xe0/xa0/xba SAMARITAN PUNCTUATION ZAEF -+ /xe0/xa0/xbb SAMARITAN PUNCTUATION TURU -+ /xe0/xa0/xbc SAMARITAN PUNCTUATION ARKAANU -+ /xe0/xa0/xbd SAMARITAN PUNCTUATION SOF MASHFAAT -+ /xe0/xa0/xbe SAMARITAN PUNCTUATION ANNAAU -+ /xe0/xa1/x80 MANDAIC LETTER HALQA -+ /xe0/xa1/x81 MANDAIC LETTER AB -+ /xe0/xa1/x82 MANDAIC LETTER AG -+ /xe0/xa1/x83 MANDAIC LETTER AD -+ /xe0/xa1/x84 MANDAIC LETTER AH -+ /xe0/xa1/x85 MANDAIC LETTER USHENNA -+ /xe0/xa1/x86 MANDAIC LETTER AZ -+ /xe0/xa1/x87 MANDAIC LETTER IT -+ /xe0/xa1/x88 MANDAIC LETTER ATT -+ /xe0/xa1/x89 MANDAIC LETTER AKSA -+ /xe0/xa1/x8a MANDAIC LETTER AK -+ /xe0/xa1/x8b MANDAIC LETTER AL -+ /xe0/xa1/x8c MANDAIC LETTER AM -+ /xe0/xa1/x8d MANDAIC LETTER AN -+ /xe0/xa1/x8e MANDAIC LETTER AS -+ /xe0/xa1/x8f MANDAIC LETTER IN -+ /xe0/xa1/x90 MANDAIC LETTER AP -+ /xe0/xa1/x91 MANDAIC LETTER ASZ -+ /xe0/xa1/x92 MANDAIC LETTER AQ -+ /xe0/xa1/x93 MANDAIC LETTER AR -+ /xe0/xa1/x94 MANDAIC LETTER ASH -+ /xe0/xa1/x95 MANDAIC LETTER AT -+ /xe0/xa1/x96 MANDAIC LETTER DUSHENNA -+ /xe0/xa1/x97 MANDAIC LETTER KAD -+ /xe0/xa1/x98 MANDAIC LETTER AIN -+ /xe0/xa1/x99 MANDAIC AFFRICATION MARK -+ /xe0/xa1/x9a MANDAIC VOCALIZATION MARK -+ /xe0/xa1/x9b MANDAIC GEMINATION MARK -+ /xe0/xa1/x9e MANDAIC PUNCTUATION -+ /xe0/xa4/x80 DEVANAGARI SIGN INVERTED CANDRABINDU - /xe0/xa4/x81 DEVANAGARI SIGN CANDRABINDU - /xe0/xa4/x82 DEVANAGARI SIGN ANUSVARA - /xe0/xa4/x83 DEVANAGARI SIGN VISARGA -@@ -2026,6 +2123,8 @@ CHARMAP - /xe0/xa4/xb7 DEVANAGARI LETTER SSA - /xe0/xa4/xb8 DEVANAGARI LETTER SA - /xe0/xa4/xb9 DEVANAGARI LETTER HA -+ /xe0/xa4/xba DEVANAGARI VOWEL SIGN OE -+ /xe0/xa4/xbb DEVANAGARI VOWEL SIGN OOE - /xe0/xa4/xbc DEVANAGARI SIGN NUKTA - /xe0/xa4/xbd DEVANAGARI SIGN AVAGRAHA - /xe0/xa4/xbe DEVANAGARI VOWEL SIGN AA -@@ -2044,11 +2143,16 @@ CHARMAP - /xe0/xa5/x8b DEVANAGARI VOWEL SIGN O - /xe0/xa5/x8c DEVANAGARI VOWEL SIGN AU - /xe0/xa5/x8d DEVANAGARI SIGN VIRAMA -+ /xe0/xa5/x8e DEVANAGARI VOWEL SIGN PRISHTHAMATRA E -+ /xe0/xa5/x8f DEVANAGARI VOWEL SIGN AW - /xe0/xa5/x90 DEVANAGARI OM - /xe0/xa5/x91 DEVANAGARI STRESS SIGN UDATTA - /xe0/xa5/x92 DEVANAGARI STRESS SIGN ANUDATTA - /xe0/xa5/x93 DEVANAGARI GRAVE ACCENT - /xe0/xa5/x94 DEVANAGARI ACUTE ACCENT -+ /xe0/xa5/x95 DEVANAGARI VOWEL SIGN CANDRA LONG E -+ /xe0/xa5/x96 DEVANAGARI VOWEL SIGN UE -+ /xe0/xa5/x97 DEVANAGARI VOWEL SIGN UUE - /xe0/xa5/x98 DEVANAGARI LETTER QA - /xe0/xa5/x99 DEVANAGARI LETTER KHHA - /xe0/xa5/x9a DEVANAGARI LETTER GHHA -@@ -2076,6 +2180,13 @@ CHARMAP - /xe0/xa5/xb0 DEVANAGARI ABBREVIATION SIGN - /xe0/xa5/xb1 DEVANAGARI SIGN HIGH SPACING DOT - /xe0/xa5/xb2 DEVANAGARI LETTER CANDRA A -+ /xe0/xa5/xb3 DEVANAGARI LETTER OE -+ /xe0/xa5/xb4 DEVANAGARI LETTER OOE -+ /xe0/xa5/xb5 DEVANAGARI LETTER AW -+ /xe0/xa5/xb6 DEVANAGARI LETTER UE -+ /xe0/xa5/xb7 DEVANAGARI LETTER UUE -+ /xe0/xa5/xb9 DEVANAGARI LETTER ZHA -+ /xe0/xa5/xba DEVANAGARI LETTER HEAVY YA - /xe0/xa5/xbb DEVANAGARI LETTER GGA - /xe0/xa5/xbc DEVANAGARI LETTER JJA - /xe0/xa5/xbd DEVANAGARI LETTER GLOTTAL STOP -@@ -2172,6 +2283,7 @@ CHARMAP - /xe0/xa7/xb8 BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR - /xe0/xa7/xb9 BENGALI CURRENCY DENOMINATOR SIXTEEN - /xe0/xa7/xba BENGALI ISSHAR -+ /xe0/xa7/xbb BENGALI GANDA MARK - /xe0/xa8/x81 GURMUKHI SIGN ADAK BINDI - /xe0/xa8/x82 GURMUKHI SIGN BINDI - /xe0/xa8/x83 GURMUKHI SIGN VISARGA -@@ -2418,6 +2530,12 @@ CHARMAP - /xe0/xad/xaf ORIYA DIGIT NINE - /xe0/xad/xb0 ORIYA ISSHAR - /xe0/xad/xb1 ORIYA LETTER WA -+ /xe0/xad/xb2 ORIYA FRACTION ONE QUARTER -+ /xe0/xad/xb3 ORIYA FRACTION ONE HALF -+ /xe0/xad/xb4 ORIYA FRACTION THREE QUARTERS -+ /xe0/xad/xb5 ORIYA FRACTION ONE SIXTEENTH -+ /xe0/xad/xb6 ORIYA FRACTION ONE EIGHTH -+ /xe0/xad/xb7 ORIYA FRACTION THREE SIXTEENTHS - /xe0/xae/x82 TAMIL SIGN ANUSVARA - /xe0/xae/x83 TAMIL SIGN VISARGA - /xe0/xae/x85 TAMIL LETTER A -@@ -2705,6 +2823,7 @@ CHARMAP - /xe0/xb4/xa6 MALAYALAM LETTER DA - /xe0/xb4/xa7 MALAYALAM LETTER DHA - /xe0/xb4/xa8 MALAYALAM LETTER NA -+ /xe0/xb4/xa9 MALAYALAM LETTER NNNA - /xe0/xb4/xaa MALAYALAM LETTER PA - /xe0/xb4/xab MALAYALAM LETTER PHA - /xe0/xb4/xac MALAYALAM LETTER BA -@@ -2721,6 +2840,7 @@ CHARMAP - /xe0/xb4/xb7 MALAYALAM LETTER SSA - /xe0/xb4/xb8 MALAYALAM LETTER SA - /xe0/xb4/xb9 MALAYALAM LETTER HA -+ /xe0/xb4/xba MALAYALAM LETTER TTTA - /xe0/xb4/xbd MALAYALAM SIGN AVAGRAHA - /xe0/xb4/xbe MALAYALAM VOWEL SIGN AA - /xe0/xb4/xbf MALAYALAM VOWEL SIGN I -@@ -2736,6 +2856,7 @@ CHARMAP - /xe0/xb5/x8b MALAYALAM VOWEL SIGN OO - /xe0/xb5/x8c MALAYALAM VOWEL SIGN AU - /xe0/xb5/x8d MALAYALAM SIGN VIRAMA -+ /xe0/xb5/x8e MALAYALAM LETTER DOT REPH - /xe0/xb5/x97 MALAYALAM AU LENGTH MARK - /xe0/xb5/xa0 MALAYALAM LETTER VOCALIC RR - /xe0/xb5/xa1 MALAYALAM LETTER VOCALIC LL -@@ -3131,6 +3252,10 @@ CHARMAP - /xe0/xbe/x89 TIBETAN SIGN MCHU CAN - /xe0/xbe/x8a TIBETAN SIGN GRU CAN RGYINGS - /xe0/xbe/x8b TIBETAN SIGN GRU MED RGYINGS -+ /xe0/xbe/x8c TIBETAN SIGN INVERTED MCHU CAN -+ /xe0/xbe/x8d TIBETAN SUBJOINED SIGN LCE TSA CAN -+ /xe0/xbe/x8e TIBETAN SUBJOINED SIGN MCHU CAN -+ /xe0/xbe/x8f TIBETAN SUBJOINED SIGN INVERTED MCHU CAN - /xe0/xbe/x90 TIBETAN SUBJOINED LETTER KA - /xe0/xbe/x91 TIBETAN SUBJOINED LETTER KHA - /xe0/xbe/x92 TIBETAN SUBJOINED LETTER GA -@@ -3197,6 +3322,12 @@ CHARMAP - /xe0/xbf/x92 TIBETAN MARK NYIS TSHEG - /xe0/xbf/x93 TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA - /xe0/xbf/x94 TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA -+ /xe0/xbf/x95 RIGHT-FACING SVASTI SIGN -+ /xe0/xbf/x96 LEFT-FACING SVASTI SIGN -+ /xe0/xbf/x97 RIGHT-FACING SVASTI SIGN WITH DOTS -+ /xe0/xbf/x98 LEFT-FACING SVASTI SIGN WITH DOTS -+ /xe0/xbf/x99 TIBETAN MARK LEADING MCHAN RTAGS -+ /xe0/xbf/x9a TIBETAN MARK TRAILING MCHAN RTAGS - /xe1/x80/x80 MYANMAR LETTER KA - /xe1/x80/x81 MYANMAR LETTER KHA - /xe1/x80/x82 MYANMAR LETTER GA -@@ -3351,6 +3482,10 @@ CHARMAP - /xe1/x82/x97 MYANMAR SHAN DIGIT SEVEN - /xe1/x82/x98 MYANMAR SHAN DIGIT EIGHT - /xe1/x82/x99 MYANMAR SHAN DIGIT NINE -+ /xe1/x82/x9a MYANMAR SIGN KHAMTI TONE-1 -+ /xe1/x82/x9b MYANMAR SIGN KHAMTI TONE-3 -+ /xe1/x82/x9c MYANMAR VOWEL SIGN AITON A -+ /xe1/x82/x9d MYANMAR VOWEL SIGN AITON AI - /xe1/x82/x9e MYANMAR SYMBOL SHAN ONE - /xe1/x82/x9f MYANMAR SYMBOL SHAN EXCLAMATION - /xe1/x82/xa0 GEORGIAN CAPITAL LETTER AN -@@ -3526,6 +3661,11 @@ CHARMAP - /xe1/x85/x97 HANGUL CHOSEONG KAPYEOUNPHIEUPH - /xe1/x85/x98 HANGUL CHOSEONG SSANGHIEUH - /xe1/x85/x99 HANGUL CHOSEONG YEORINHIEUH -+ /xe1/x85/x9a HANGUL CHOSEONG KIYEOK-TIKEUT -+ /xe1/x85/x9b HANGUL CHOSEONG NIEUN-SIOS -+ /xe1/x85/x9c HANGUL CHOSEONG NIEUN-CIEUC -+ /xe1/x85/x9d HANGUL CHOSEONG NIEUN-HIEUH -+ /xe1/x85/x9e HANGUL CHOSEONG TIKEUT-RIEUL - /xe1/x85/x9f HANGUL CHOSEONG FILLER - /xe1/x85/xa0 HANGUL JUNGSEONG FILLER - /xe1/x85/xa1 HANGUL JUNGSEONG A -@@ -3594,6 +3734,11 @@ CHARMAP - /xe1/x86/xa0 HANGUL JUNGSEONG ARAEA-U - /xe1/x86/xa1 HANGUL JUNGSEONG ARAEA-I - /xe1/x86/xa2 HANGUL JUNGSEONG SSANGARAEA -+ /xe1/x86/xa3 HANGUL JUNGSEONG A-EU -+ /xe1/x86/xa4 HANGUL JUNGSEONG YA-U -+ /xe1/x86/xa5 HANGUL JUNGSEONG YEO-YA -+ /xe1/x86/xa6 HANGUL JUNGSEONG O-YA -+ /xe1/x86/xa7 HANGUL JUNGSEONG O-YAE - /xe1/x86/xa8 HANGUL JONGSEONG KIYEOK - /xe1/x86/xa9 HANGUL JONGSEONG SSANGKIYEOK - /xe1/x86/xaa HANGUL JONGSEONG KIYEOK-SIOS -@@ -3676,6 +3821,12 @@ CHARMAP - /xe1/x87/xb7 HANGUL JONGSEONG HIEUH-MIEUM - /xe1/x87/xb8 HANGUL JONGSEONG HIEUH-PIEUP - /xe1/x87/xb9 HANGUL JONGSEONG YEORINHIEUH -+ /xe1/x87/xba HANGUL JONGSEONG KIYEOK-NIEUN -+ /xe1/x87/xbb HANGUL JONGSEONG KIYEOK-PIEUP -+ /xe1/x87/xbc HANGUL JONGSEONG KIYEOK-CHIEUCH -+ /xe1/x87/xbd HANGUL JONGSEONG KIYEOK-KHIEUKH -+ /xe1/x87/xbe HANGUL JONGSEONG KIYEOK-HIEUH -+ /xe1/x87/xbf HANGUL JONGSEONG SSANGNIEUN - /xe1/x88/x80 ETHIOPIC SYLLABLE HA - /xe1/x88/x81 ETHIOPIC SYLLABLE HU - /xe1/x88/x82 ETHIOPIC SYLLABLE HI -@@ -4002,6 +4153,8 @@ CHARMAP - /xe1/x8d/x98 ETHIOPIC SYLLABLE RYA - /xe1/x8d/x99 ETHIOPIC SYLLABLE MYA - /xe1/x8d/x9a ETHIOPIC SYLLABLE FYA -+ /xe1/x8d/x9d ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK -+ /xe1/x8d/x9e ETHIOPIC COMBINING VOWEL LENGTH MARK - /xe1/x8d/x9f ETHIOPIC COMBINING GEMINATION MARK - /xe1/x8d/xa0 ETHIOPIC SECTION MARK - /xe1/x8d/xa1 ETHIOPIC WORDSPACE -@@ -4143,6 +4296,7 @@ CHARMAP - /xe1/x8f/xb2 CHEROKEE LETTER YO - /xe1/x8f/xb3 CHEROKEE LETTER YU - /xe1/x8f/xb4 CHEROKEE LETTER YV -+ /xe1/x90/x80 CANADIAN SYLLABICS HYPHEN - /xe1/x90/x81 CANADIAN SYLLABICS E - /xe1/x90/x82 CANADIAN SYLLABICS AAI - /xe1/x90/x83 CANADIAN SYLLABICS I -@@ -4773,6 +4927,15 @@ CHARMAP - /xe1/x99/xb4 CANADIAN SYLLABICS NNGOO - /xe1/x99/xb5 CANADIAN SYLLABICS NNGA - /xe1/x99/xb6 CANADIAN SYLLABICS NNGAA -+ /xe1/x99/xb7 CANADIAN SYLLABICS WOODS-CREE THWEE -+ /xe1/x99/xb8 CANADIAN SYLLABICS WOODS-CREE THWI -+ /xe1/x99/xb9 CANADIAN SYLLABICS WOODS-CREE THWII -+ /xe1/x99/xba CANADIAN SYLLABICS WOODS-CREE THWO -+ /xe1/x99/xbb CANADIAN SYLLABICS WOODS-CREE THWOO -+ /xe1/x99/xbc CANADIAN SYLLABICS WOODS-CREE THWA -+ /xe1/x99/xbd CANADIAN SYLLABICS WOODS-CREE THWAA -+ /xe1/x99/xbe CANADIAN SYLLABICS WOODS-CREE FINAL TH -+ /xe1/x99/xbf CANADIAN SYLLABICS BLACKFOOT W - /xe1/x9a/x80 OGHAM SPACE MARK - /xe1/x9a/x81 OGHAM LETTER BEITH - /xe1/x9a/x82 OGHAM LETTER LUIS -@@ -5234,6 +5397,76 @@ CHARMAP - /xe1/xa2/xa8 MONGOLIAN LETTER MANCHU ALI GALI BHA - /xe1/xa2/xa9 MONGOLIAN LETTER ALI GALI DAGALGA - /xe1/xa2/xaa MONGOLIAN LETTER MANCHU ALI GALI LHA -+ /xe1/xa2/xb0 CANADIAN SYLLABICS OY -+ /xe1/xa2/xb1 CANADIAN SYLLABICS AY -+ /xe1/xa2/xb2 CANADIAN SYLLABICS AAY -+ /xe1/xa2/xb3 CANADIAN SYLLABICS WAY -+ /xe1/xa2/xb4 CANADIAN SYLLABICS POY -+ /xe1/xa2/xb5 CANADIAN SYLLABICS PAY -+ /xe1/xa2/xb6 CANADIAN SYLLABICS PWOY -+ /xe1/xa2/xb7 CANADIAN SYLLABICS TAY -+ /xe1/xa2/xb8 CANADIAN SYLLABICS KAY -+ /xe1/xa2/xb9 CANADIAN SYLLABICS KWAY -+ /xe1/xa2/xba CANADIAN SYLLABICS MAY -+ /xe1/xa2/xbb CANADIAN SYLLABICS NOY -+ /xe1/xa2/xbc CANADIAN SYLLABICS NAY -+ /xe1/xa2/xbd CANADIAN SYLLABICS LAY -+ /xe1/xa2/xbe CANADIAN SYLLABICS SOY -+ /xe1/xa2/xbf CANADIAN SYLLABICS SAY -+ /xe1/xa3/x80 CANADIAN SYLLABICS SHOY -+ /xe1/xa3/x81 CANADIAN SYLLABICS SHAY -+ /xe1/xa3/x82 CANADIAN SYLLABICS SHWOY -+ /xe1/xa3/x83 CANADIAN SYLLABICS YOY -+ /xe1/xa3/x84 CANADIAN SYLLABICS YAY -+ /xe1/xa3/x85 CANADIAN SYLLABICS RAY -+ /xe1/xa3/x86 CANADIAN SYLLABICS NWI -+ /xe1/xa3/x87 CANADIAN SYLLABICS OJIBWAY NWI -+ /xe1/xa3/x88 CANADIAN SYLLABICS NWII -+ /xe1/xa3/x89 CANADIAN SYLLABICS OJIBWAY NWII -+ /xe1/xa3/x8a CANADIAN SYLLABICS NWO -+ /xe1/xa3/x8b CANADIAN SYLLABICS OJIBWAY NWO -+ /xe1/xa3/x8c CANADIAN SYLLABICS NWOO -+ /xe1/xa3/x8d CANADIAN SYLLABICS OJIBWAY NWOO -+ /xe1/xa3/x8e CANADIAN SYLLABICS RWEE -+ /xe1/xa3/x8f CANADIAN SYLLABICS RWI -+ /xe1/xa3/x90 CANADIAN SYLLABICS RWII -+ /xe1/xa3/x91 CANADIAN SYLLABICS RWO -+ /xe1/xa3/x92 CANADIAN SYLLABICS RWOO -+ /xe1/xa3/x93 CANADIAN SYLLABICS RWA -+ /xe1/xa3/x94 CANADIAN SYLLABICS OJIBWAY P -+ /xe1/xa3/x95 CANADIAN SYLLABICS OJIBWAY T -+ /xe1/xa3/x96 CANADIAN SYLLABICS OJIBWAY K -+ /xe1/xa3/x97 CANADIAN SYLLABICS OJIBWAY C -+ /xe1/xa3/x98 CANADIAN SYLLABICS OJIBWAY M -+ /xe1/xa3/x99 CANADIAN SYLLABICS OJIBWAY N -+ /xe1/xa3/x9a CANADIAN SYLLABICS OJIBWAY S -+ /xe1/xa3/x9b CANADIAN SYLLABICS OJIBWAY SH -+ /xe1/xa3/x9c CANADIAN SYLLABICS EASTERN W -+ /xe1/xa3/x9d CANADIAN SYLLABICS WESTERN W -+ /xe1/xa3/x9e CANADIAN SYLLABICS FINAL SMALL RING -+ /xe1/xa3/x9f CANADIAN SYLLABICS FINAL RAISED DOT -+ /xe1/xa3/xa0 CANADIAN SYLLABICS R-CREE RWE -+ /xe1/xa3/xa1 CANADIAN SYLLABICS WEST-CREE LOO -+ /xe1/xa3/xa2 CANADIAN SYLLABICS WEST-CREE LAA -+ /xe1/xa3/xa3 CANADIAN SYLLABICS THWE -+ /xe1/xa3/xa4 CANADIAN SYLLABICS THWA -+ /xe1/xa3/xa5 CANADIAN SYLLABICS TTHWE -+ /xe1/xa3/xa6 CANADIAN SYLLABICS TTHOO -+ /xe1/xa3/xa7 CANADIAN SYLLABICS TTHAA -+ /xe1/xa3/xa8 CANADIAN SYLLABICS TLHWE -+ /xe1/xa3/xa9 CANADIAN SYLLABICS TLHOO -+ /xe1/xa3/xaa CANADIAN SYLLABICS SAYISI SHWE -+ /xe1/xa3/xab CANADIAN SYLLABICS SAYISI SHOO -+ /xe1/xa3/xac CANADIAN SYLLABICS SAYISI HOO -+ /xe1/xa3/xad CANADIAN SYLLABICS CARRIER GWU -+ /xe1/xa3/xae CANADIAN SYLLABICS CARRIER DENE GEE -+ /xe1/xa3/xaf CANADIAN SYLLABICS CARRIER GAA -+ /xe1/xa3/xb0 CANADIAN SYLLABICS CARRIER GWA -+ /xe1/xa3/xb1 CANADIAN SYLLABICS SAYISI JUU -+ /xe1/xa3/xb2 CANADIAN SYLLABICS CARRIER JWA -+ /xe1/xa3/xb3 CANADIAN SYLLABICS BEAVER DENE L -+ /xe1/xa3/xb4 CANADIAN SYLLABICS BEAVER DENE R -+ /xe1/xa3/xb5 CANADIAN SYLLABICS CARRIER DENTAL S - /xe1/xa4/x80 LIMBU VOWEL-CARRIER LETTER - /xe1/xa4/x81 LIMBU LETTER KA - /xe1/xa4/x82 LIMBU LETTER KHA -@@ -5377,6 +5610,8 @@ CHARMAP - /xe1/xa6/xa7 NEW TAI LUE LETTER HIGH XVA - /xe1/xa6/xa8 NEW TAI LUE LETTER LOW KVA - /xe1/xa6/xa9 NEW TAI LUE LETTER LOW XVA -+ /xe1/xa6/xaa NEW TAI LUE LETTER HIGH SUA -+ /xe1/xa6/xab NEW TAI LUE LETTER LOW SUA - /xe1/xa6/xb0 NEW TAI LUE VOWEL SIGN VOWEL SHORTENER - /xe1/xa6/xb1 NEW TAI LUE VOWEL SIGN AA - /xe1/xa6/xb2 NEW TAI LUE VOWEL SIGN II -@@ -5413,6 +5648,7 @@ CHARMAP - /xe1/xa7/x97 NEW TAI LUE DIGIT SEVEN - /xe1/xa7/x98 NEW TAI LUE DIGIT EIGHT - /xe1/xa7/x99 NEW TAI LUE DIGIT NINE -+ /xe1/xa7/x9a NEW TAI LUE THAM DIGIT ONE - /xe1/xa7/x9e NEW TAI LUE SIGN LAE - /xe1/xa7/x9f NEW TAI LUE SIGN LAEV - /xe1/xa7/xa0 KHMER SYMBOL PATHAMASAT -@@ -5477,6 +5713,133 @@ CHARMAP - /xe1/xa8/x9b BUGINESE VOWEL SIGN AE - /xe1/xa8/x9e BUGINESE PALLAWA - /xe1/xa8/x9f BUGINESE END OF SECTION -+ /xe1/xa8/xa0 TAI THAM LETTER HIGH KA -+ /xe1/xa8/xa1 TAI THAM LETTER HIGH KHA -+ /xe1/xa8/xa2 TAI THAM LETTER HIGH KXA -+ /xe1/xa8/xa3 TAI THAM LETTER LOW KA -+ /xe1/xa8/xa4 TAI THAM LETTER LOW KXA -+ /xe1/xa8/xa5 TAI THAM LETTER LOW KHA -+ /xe1/xa8/xa6 TAI THAM LETTER NGA -+ /xe1/xa8/xa7 TAI THAM LETTER HIGH CA -+ /xe1/xa8/xa8 TAI THAM LETTER HIGH CHA -+ /xe1/xa8/xa9 TAI THAM LETTER LOW CA -+ /xe1/xa8/xaa TAI THAM LETTER LOW SA -+ /xe1/xa8/xab TAI THAM LETTER LOW CHA -+ /xe1/xa8/xac TAI THAM LETTER NYA -+ /xe1/xa8/xad TAI THAM LETTER RATA -+ /xe1/xa8/xae TAI THAM LETTER HIGH RATHA -+ /xe1/xa8/xaf TAI THAM LETTER DA -+ /xe1/xa8/xb0 TAI THAM LETTER LOW RATHA -+ /xe1/xa8/xb1 TAI THAM LETTER RANA -+ /xe1/xa8/xb2 TAI THAM LETTER HIGH TA -+ /xe1/xa8/xb3 TAI THAM LETTER HIGH THA -+ /xe1/xa8/xb4 TAI THAM LETTER LOW TA -+ /xe1/xa8/xb5 TAI THAM LETTER LOW THA -+ /xe1/xa8/xb6 TAI THAM LETTER NA -+ /xe1/xa8/xb7 TAI THAM LETTER BA -+ /xe1/xa8/xb8 TAI THAM LETTER HIGH PA -+ /xe1/xa8/xb9 TAI THAM LETTER HIGH PHA -+ /xe1/xa8/xba TAI THAM LETTER HIGH FA -+ /xe1/xa8/xbb TAI THAM LETTER LOW PA -+ /xe1/xa8/xbc TAI THAM LETTER LOW FA -+ /xe1/xa8/xbd TAI THAM LETTER LOW PHA -+ /xe1/xa8/xbe TAI THAM LETTER MA -+ /xe1/xa8/xbf TAI THAM LETTER LOW YA -+ /xe1/xa9/x80 TAI THAM LETTER HIGH YA -+ /xe1/xa9/x81 TAI THAM LETTER RA -+ /xe1/xa9/x82 TAI THAM LETTER RUE -+ /xe1/xa9/x83 TAI THAM LETTER LA -+ /xe1/xa9/x84 TAI THAM LETTER LUE -+ /xe1/xa9/x85 TAI THAM LETTER WA -+ /xe1/xa9/x86 TAI THAM LETTER HIGH SHA -+ /xe1/xa9/x87 TAI THAM LETTER HIGH SSA -+ /xe1/xa9/x88 TAI THAM LETTER HIGH SA -+ /xe1/xa9/x89 TAI THAM LETTER HIGH HA -+ /xe1/xa9/x8a TAI THAM LETTER LLA -+ /xe1/xa9/x8b TAI THAM LETTER A -+ /xe1/xa9/x8c TAI THAM LETTER LOW HA -+ /xe1/xa9/x8d TAI THAM LETTER I -+ /xe1/xa9/x8e TAI THAM LETTER II -+ /xe1/xa9/x8f TAI THAM LETTER U -+ /xe1/xa9/x90 TAI THAM LETTER UU -+ /xe1/xa9/x91 TAI THAM LETTER EE -+ /xe1/xa9/x92 TAI THAM LETTER OO -+ /xe1/xa9/x93 TAI THAM LETTER LAE -+ /xe1/xa9/x94 TAI THAM LETTER GREAT SA -+ /xe1/xa9/x95 TAI THAM CONSONANT SIGN MEDIAL RA -+ /xe1/xa9/x96 TAI THAM CONSONANT SIGN MEDIAL LA -+ /xe1/xa9/x97 TAI THAM CONSONANT SIGN LA TANG LAI -+ /xe1/xa9/x98 TAI THAM SIGN MAI KANG LAI -+ /xe1/xa9/x99 TAI THAM CONSONANT SIGN FINAL NGA -+ /xe1/xa9/x9a TAI THAM CONSONANT SIGN LOW PA -+ /xe1/xa9/x9b TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA -+ /xe1/xa9/x9c TAI THAM CONSONANT SIGN MA -+ /xe1/xa9/x9d TAI THAM CONSONANT SIGN BA -+ /xe1/xa9/x9e TAI THAM CONSONANT SIGN SA -+ /xe1/xa9/xa0 TAI THAM SIGN SAKOT -+ /xe1/xa9/xa1 TAI THAM VOWEL SIGN A -+ /xe1/xa9/xa2 TAI THAM VOWEL SIGN MAI SAT -+ /xe1/xa9/xa3 TAI THAM VOWEL SIGN AA -+ /xe1/xa9/xa4 TAI THAM VOWEL SIGN TALL AA -+ /xe1/xa9/xa5 TAI THAM VOWEL SIGN I -+ /xe1/xa9/xa6 TAI THAM VOWEL SIGN II -+ /xe1/xa9/xa7 TAI THAM VOWEL SIGN UE -+ /xe1/xa9/xa8 TAI THAM VOWEL SIGN UUE -+ /xe1/xa9/xa9 TAI THAM VOWEL SIGN U -+ /xe1/xa9/xaa TAI THAM VOWEL SIGN UU -+ /xe1/xa9/xab TAI THAM VOWEL SIGN O -+ /xe1/xa9/xac TAI THAM VOWEL SIGN OA BELOW -+ /xe1/xa9/xad TAI THAM VOWEL SIGN OY -+ /xe1/xa9/xae TAI THAM VOWEL SIGN E -+ /xe1/xa9/xaf TAI THAM VOWEL SIGN AE -+ /xe1/xa9/xb0 TAI THAM VOWEL SIGN OO -+ /xe1/xa9/xb1 TAI THAM VOWEL SIGN AI -+ /xe1/xa9/xb2 TAI THAM VOWEL SIGN THAM AI -+ /xe1/xa9/xb3 TAI THAM VOWEL SIGN OA ABOVE -+ /xe1/xa9/xb4 TAI THAM SIGN MAI KANG -+ /xe1/xa9/xb5 TAI THAM SIGN TONE-1 -+ /xe1/xa9/xb6 TAI THAM SIGN TONE-2 -+ /xe1/xa9/xb7 TAI THAM SIGN KHUEN TONE-3 -+ /xe1/xa9/xb8 TAI THAM SIGN KHUEN TONE-4 -+ /xe1/xa9/xb9 TAI THAM SIGN KHUEN TONE-5 -+ /xe1/xa9/xba TAI THAM SIGN RA HAAM -+ /xe1/xa9/xbb TAI THAM SIGN MAI SAM -+ /xe1/xa9/xbc TAI THAM SIGN KHUEN-LUE KARAN -+ /xe1/xa9/xbf TAI THAM COMBINING CRYPTOGRAMMIC DOT -+ /xe1/xaa/x80 TAI THAM HORA DIGIT ZERO -+ /xe1/xaa/x81 TAI THAM HORA DIGIT ONE -+ /xe1/xaa/x82 TAI THAM HORA DIGIT TWO -+ /xe1/xaa/x83 TAI THAM HORA DIGIT THREE -+ /xe1/xaa/x84 TAI THAM HORA DIGIT FOUR -+ /xe1/xaa/x85 TAI THAM HORA DIGIT FIVE -+ /xe1/xaa/x86 TAI THAM HORA DIGIT SIX -+ /xe1/xaa/x87 TAI THAM HORA DIGIT SEVEN -+ /xe1/xaa/x88 TAI THAM HORA DIGIT EIGHT -+ /xe1/xaa/x89 TAI THAM HORA DIGIT NINE -+ /xe1/xaa/x90 TAI THAM THAM DIGIT ZERO -+ /xe1/xaa/x91 TAI THAM THAM DIGIT ONE -+ /xe1/xaa/x92 TAI THAM THAM DIGIT TWO -+ /xe1/xaa/x93 TAI THAM THAM DIGIT THREE -+ /xe1/xaa/x94 TAI THAM THAM DIGIT FOUR -+ /xe1/xaa/x95 TAI THAM THAM DIGIT FIVE -+ /xe1/xaa/x96 TAI THAM THAM DIGIT SIX -+ /xe1/xaa/x97 TAI THAM THAM DIGIT SEVEN -+ /xe1/xaa/x98 TAI THAM THAM DIGIT EIGHT -+ /xe1/xaa/x99 TAI THAM THAM DIGIT NINE -+ /xe1/xaa/xa0 TAI THAM SIGN WIANG -+ /xe1/xaa/xa1 TAI THAM SIGN WIANGWAAK -+ /xe1/xaa/xa2 TAI THAM SIGN SAWAN -+ /xe1/xaa/xa3 TAI THAM SIGN KEOW -+ /xe1/xaa/xa4 TAI THAM SIGN HOY -+ /xe1/xaa/xa5 TAI THAM SIGN DOKMAI -+ /xe1/xaa/xa6 TAI THAM SIGN REVERSED ROTATED RANA -+ /xe1/xaa/xa7 TAI THAM SIGN MAI YAMOK -+ /xe1/xaa/xa8 TAI THAM SIGN KAAN -+ /xe1/xaa/xa9 TAI THAM SIGN KAANKUU -+ /xe1/xaa/xaa TAI THAM SIGN SATKAAN -+ /xe1/xaa/xab TAI THAM SIGN SATKAANKUU -+ /xe1/xaa/xac TAI THAM SIGN HANG -+ /xe1/xaa/xad TAI THAM SIGN CAANG - /xe1/xac/x80 BALINESE SIGN ULU RICEM - /xe1/xac/x81 BALINESE SIGN ULU CANDRA - /xe1/xac/x82 BALINESE SIGN CECEK -@@ -5653,6 +6016,62 @@ CHARMAP - /xe1/xae/xb7 SUNDANESE DIGIT SEVEN - /xe1/xae/xb8 SUNDANESE DIGIT EIGHT - /xe1/xae/xb9 SUNDANESE DIGIT NINE -+ /xe1/xaf/x80 BATAK LETTER A -+ /xe1/xaf/x81 BATAK LETTER SIMALUNGUN A -+ /xe1/xaf/x82 BATAK LETTER HA -+ /xe1/xaf/x83 BATAK LETTER SIMALUNGUN HA -+ /xe1/xaf/x84 BATAK LETTER MANDAILING HA -+ /xe1/xaf/x85 BATAK LETTER BA -+ /xe1/xaf/x86 BATAK LETTER KARO BA -+ /xe1/xaf/x87 BATAK LETTER PA -+ /xe1/xaf/x88 BATAK LETTER SIMALUNGUN PA -+ /xe1/xaf/x89 BATAK LETTER NA -+ /xe1/xaf/x8a BATAK LETTER MANDAILING NA -+ /xe1/xaf/x8b BATAK LETTER WA -+ /xe1/xaf/x8c BATAK LETTER SIMALUNGUN WA -+ /xe1/xaf/x8d BATAK LETTER PAKPAK WA -+ /xe1/xaf/x8e BATAK LETTER GA -+ /xe1/xaf/x8f BATAK LETTER SIMALUNGUN GA -+ /xe1/xaf/x90 BATAK LETTER JA -+ /xe1/xaf/x91 BATAK LETTER DA -+ /xe1/xaf/x92 BATAK LETTER RA -+ /xe1/xaf/x93 BATAK LETTER SIMALUNGUN RA -+ /xe1/xaf/x94 BATAK LETTER MA -+ /xe1/xaf/x95 BATAK LETTER SIMALUNGUN MA -+ /xe1/xaf/x96 BATAK LETTER SOUTHERN TA -+ /xe1/xaf/x97 BATAK LETTER NORTHERN TA -+ /xe1/xaf/x98 BATAK LETTER SA -+ /xe1/xaf/x99 BATAK LETTER SIMALUNGUN SA -+ /xe1/xaf/x9a BATAK LETTER MANDAILING SA -+ /xe1/xaf/x9b BATAK LETTER YA -+ /xe1/xaf/x9c BATAK LETTER SIMALUNGUN YA -+ /xe1/xaf/x9d BATAK LETTER NGA -+ /xe1/xaf/x9e BATAK LETTER LA -+ /xe1/xaf/x9f BATAK LETTER SIMALUNGUN LA -+ /xe1/xaf/xa0 BATAK LETTER NYA -+ /xe1/xaf/xa1 BATAK LETTER CA -+ /xe1/xaf/xa2 BATAK LETTER NDA -+ /xe1/xaf/xa3 BATAK LETTER MBA -+ /xe1/xaf/xa4 BATAK LETTER I -+ /xe1/xaf/xa5 BATAK LETTER U -+ /xe1/xaf/xa6 BATAK SIGN TOMPI -+ /xe1/xaf/xa7 BATAK VOWEL SIGN E -+ /xe1/xaf/xa8 BATAK VOWEL SIGN PAKPAK E -+ /xe1/xaf/xa9 BATAK VOWEL SIGN EE -+ /xe1/xaf/xaa BATAK VOWEL SIGN I -+ /xe1/xaf/xab BATAK VOWEL SIGN KARO I -+ /xe1/xaf/xac BATAK VOWEL SIGN O -+ /xe1/xaf/xad BATAK VOWEL SIGN KARO O -+ /xe1/xaf/xae BATAK VOWEL SIGN U -+ /xe1/xaf/xaf BATAK VOWEL SIGN U FOR SIMALUNGUN SA -+ /xe1/xaf/xb0 BATAK CONSONANT SIGN NG -+ /xe1/xaf/xb1 BATAK CONSONANT SIGN H -+ /xe1/xaf/xb2 BATAK PANGOLAT -+ /xe1/xaf/xb3 BATAK PANONGONAN -+ /xe1/xaf/xbc BATAK SYMBOL BINDU NA METEK -+ /xe1/xaf/xbd BATAK SYMBOL BINDU PINARBORAS -+ /xe1/xaf/xbe BATAK SYMBOL BINDU JUDUL -+ /xe1/xaf/xbf BATAK SYMBOL BINDU PANGOLAT - /xe1/xb0/x80 LEPCHA LETTER KA - /xe1/xb0/x81 LEPCHA LETTER KLA - /xe1/xb0/x82 LEPCHA LETTER KHA -@@ -5775,6 +6194,41 @@ CHARMAP - /xe1/xb1/xbd OL CHIKI AHAD - /xe1/xb1/xbe OL CHIKI PUNCTUATION MUCAAD - /xe1/xb1/xbf OL CHIKI PUNCTUATION DOUBLE MUCAAD -+ /xe1/xb3/x90 VEDIC TONE KARSHANA -+ /xe1/xb3/x91 VEDIC TONE SHARA -+ /xe1/xb3/x92 VEDIC TONE PRENKHA -+ /xe1/xb3/x93 VEDIC SIGN NIHSHVASA -+ /xe1/xb3/x94 VEDIC SIGN YAJURVEDIC MIDLINE SVARITA -+ /xe1/xb3/x95 VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA -+ /xe1/xb3/x96 VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA -+ /xe1/xb3/x97 VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA -+ /xe1/xb3/x98 VEDIC TONE CANDRA BELOW -+ /xe1/xb3/x99 VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER -+ /xe1/xb3/x9a VEDIC TONE DOUBLE SVARITA -+ /xe1/xb3/x9b VEDIC TONE TRIPLE SVARITA -+ /xe1/xb3/x9c VEDIC TONE KATHAKA ANUDATTA -+ /xe1/xb3/x9d VEDIC TONE DOT BELOW -+ /xe1/xb3/x9e VEDIC TONE TWO DOTS BELOW -+ /xe1/xb3/x9f VEDIC TONE THREE DOTS BELOW -+ /xe1/xb3/xa0 VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA -+ /xe1/xb3/xa1 VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA -+ /xe1/xb3/xa2 VEDIC SIGN VISARGA SVARITA -+ /xe1/xb3/xa3 VEDIC SIGN VISARGA UDATTA -+ /xe1/xb3/xa4 VEDIC SIGN REVERSED VISARGA UDATTA -+ /xe1/xb3/xa5 VEDIC SIGN VISARGA ANUDATTA -+ /xe1/xb3/xa6 VEDIC SIGN REVERSED VISARGA ANUDATTA -+ /xe1/xb3/xa7 VEDIC SIGN VISARGA UDATTA WITH TAIL -+ /xe1/xb3/xa8 VEDIC SIGN VISARGA ANUDATTA WITH TAIL -+ /xe1/xb3/xa9 VEDIC SIGN ANUSVARA ANTARGOMUKHA -+ /xe1/xb3/xaa VEDIC SIGN ANUSVARA BAHIRGOMUKHA -+ /xe1/xb3/xab VEDIC SIGN ANUSVARA VAMAGOMUKHA -+ /xe1/xb3/xac VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL -+ /xe1/xb3/xad VEDIC SIGN TIRYAK -+ /xe1/xb3/xae VEDIC SIGN HEXIFORM LONG ANUSVARA -+ /xe1/xb3/xaf VEDIC SIGN LONG ANUSVARA -+ /xe1/xb3/xb0 VEDIC SIGN RTHANG LONG ANUSVARA -+ /xe1/xb3/xb1 VEDIC SIGN ANUSVARA UBHAYATO MUKHA -+ /xe1/xb3/xb2 VEDIC SIGN ARDHAVISARGA - /xe1/xb4/x80 LATIN LETTER SMALL CAPITAL A - /xe1/xb4/x81 LATIN LETTER SMALL CAPITAL AE - /xe1/xb4/x82 LATIN SMALL LETTER TURNED AE -@@ -6006,6 +6460,8 @@ CHARMAP - /xe1/xb7/xa4 COMBINING LATIN SMALL LETTER S - /xe1/xb7/xa5 COMBINING LATIN SMALL LETTER LONG S - /xe1/xb7/xa6 COMBINING LATIN SMALL LETTER Z -+ /xe1/xb7/xbc COMBINING DOUBLE INVERTED BREVE BELOW -+ /xe1/xb7/xbd COMBINING ALMOST EQUAL TO BELOW - /xe1/xb7/xbe COMBINING LEFT ARROWHEAD ABOVE - /xe1/xb7/xbf COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW - /xe1/xb8/x80 LATIN CAPITAL LETTER A WITH RING BELOW -@@ -6638,6 +7094,14 @@ CHARMAP - /xe2/x82/x92 LATIN SUBSCRIPT SMALL LETTER O - /xe2/x82/x93 LATIN SUBSCRIPT SMALL LETTER X - /xe2/x82/x94 LATIN SUBSCRIPT SMALL LETTER SCHWA -+ /xe2/x82/x95 LATIN SUBSCRIPT SMALL LETTER H -+ /xe2/x82/x96 LATIN SUBSCRIPT SMALL LETTER K -+ /xe2/x82/x97 LATIN SUBSCRIPT SMALL LETTER L -+ /xe2/x82/x98 LATIN SUBSCRIPT SMALL LETTER M -+ /xe2/x82/x99 LATIN SUBSCRIPT SMALL LETTER N -+ /xe2/x82/x9a LATIN SUBSCRIPT SMALL LETTER P -+ /xe2/x82/x9b LATIN SUBSCRIPT SMALL LETTER S -+ /xe2/x82/x9c LATIN SUBSCRIPT SMALL LETTER T - /xe2/x82/xa0 EURO-CURRENCY SIGN - /xe2/x82/xa1 COLON SIGN - /xe2/x82/xa2 CRUZEIRO SIGN -@@ -6660,6 +7124,10 @@ CHARMAP - /xe2/x82/xb3 AUSTRAL SIGN - /xe2/x82/xb4 HRYVNIA SIGN - /xe2/x82/xb5 CEDI SIGN -+ /xe2/x82/xb6 LIVRE TOURNOIS SIGN -+ /xe2/x82/xb7 SPESMILO SIGN -+ /xe2/x82/xb8 TENGE SIGN -+ /xe2/x82/xb9 INDIAN RUPEE SIGN - /xe2/x83/x90 COMBINING LEFT HARPOON ABOVE - /xe2/x83/x91 COMBINING RIGHT HARPOON ABOVE - /xe2/x83/x92 COMBINING LONG VERTICAL LINE OVERLAY -@@ -6773,6 +7241,9 @@ CHARMAP - /xe2/x85/x8d AKTIESELSKAB - /xe2/x85/x8e TURNED SMALL F - /xe2/x85/x8f SYMBOL FOR SAMARITAN SOURCE -+ /xe2/x85/x90 VULGAR FRACTION ONE SEVENTH -+ /xe2/x85/x91 VULGAR FRACTION ONE NINTH -+ /xe2/x85/x92 VULGAR FRACTION ONE TENTH - /xe2/x85/x93 VULGAR FRACTION ONE THIRD - /xe2/x85/x94 VULGAR FRACTION TWO THIRDS - /xe2/x85/x95 VULGAR FRACTION ONE FIFTH -@@ -6827,6 +7298,7 @@ CHARMAP - /xe2/x86/x86 ROMAN NUMERAL FIFTY EARLY FORM - /xe2/x86/x87 ROMAN NUMERAL FIFTY THOUSAND - /xe2/x86/x88 ROMAN NUMERAL ONE HUNDRED THOUSAND -+ /xe2/x86/x89 VULGAR FRACTION ZERO THIRDS - /xe2/x86/x90 LEFTWARDS ARROW - /xe2/x86/x91 UPWARDS ARROW - /xe2/x86/x92 RIGHTWARDS ARROW -@@ -7427,6 +7899,18 @@ CHARMAP - /xe2/x8f/xa5 FLATNESS - /xe2/x8f/xa6 AC CURRENT - /xe2/x8f/xa7 ELECTRICAL INTERSECTION -+ /xe2/x8f/xa8 DECIMAL EXPONENT SYMBOL -+ /xe2/x8f/xa9 BLACK RIGHT-POINTING DOUBLE TRIANGLE -+ /xe2/x8f/xaa BLACK LEFT-POINTING DOUBLE TRIANGLE -+ /xe2/x8f/xab BLACK UP-POINTING DOUBLE TRIANGLE -+ /xe2/x8f/xac BLACK DOWN-POINTING DOUBLE TRIANGLE -+ /xe2/x8f/xad BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR -+ /xe2/x8f/xae BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR -+ /xe2/x8f/xaf BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR -+ /xe2/x8f/xb0 ALARM CLOCK -+ /xe2/x8f/xb1 STOPWATCH -+ /xe2/x8f/xb2 TIMER CLOCK -+ /xe2/x8f/xb3 HOURGLASS WITH FLOWING SAND - /xe2/x90/x80 SYMBOL FOR NULL - /xe2/x90/x81 SYMBOL FOR START OF HEADING - /xe2/x90/x82 SYMBOL FOR START OF TEXT -@@ -8051,6 +8535,8 @@ CHARMAP - /xe2/x9a/x9b ATOM SYMBOL - /xe2/x9a/x9c FLEUR-DE-LIS - /xe2/x9a/x9d OUTLINED WHITE STAR -+ /xe2/x9a/x9e THREE LINES CONVERGING RIGHT -+ /xe2/x9a/x9f THREE LINES CONVERGING LEFT - /xe2/x9a/xa0 WARNING SIGN - /xe2/x9a/xa1 HIGH VOLTAGE SIGN - /xe2/x9a/xa2 DOUBLED FEMALE SIGN -@@ -8080,18 +8566,84 @@ CHARMAP - /xe2/x9a/xba SEMISEXTILE - /xe2/x9a/xbb QUINCUNX - /xe2/x9a/xbc SESQUIQUADRATE -+ /xe2/x9a/xbd SOCCER BALL -+ /xe2/x9a/xbe BASEBALL -+ /xe2/x9a/xbf SQUARED KEY - /xe2/x9b/x80 WHITE DRAUGHTS MAN - /xe2/x9b/x81 WHITE DRAUGHTS KING - /xe2/x9b/x82 BLACK DRAUGHTS MAN - /xe2/x9b/x83 BLACK DRAUGHTS KING -+ /xe2/x9b/x84 SNOWMAN WITHOUT SNOW -+ /xe2/x9b/x85 SUN BEHIND CLOUD -+ /xe2/x9b/x86 RAIN -+ /xe2/x9b/x87 BLACK SNOWMAN -+ /xe2/x9b/x88 THUNDER CLOUD AND RAIN -+ /xe2/x9b/x89 TURNED WHITE SHOGI PIECE -+ /xe2/x9b/x8a TURNED BLACK SHOGI PIECE -+ /xe2/x9b/x8b WHITE DIAMOND IN SQUARE -+ /xe2/x9b/x8c CROSSING LANES -+ /xe2/x9b/x8d DISABLED CAR -+ /xe2/x9b/x8e OPHIUCHUS -+ /xe2/x9b/x8f PICK -+ /xe2/x9b/x90 CAR SLIDING -+ /xe2/x9b/x91 HELMET WITH WHITE CROSS -+ /xe2/x9b/x92 CIRCLED CROSSING LANES -+ /xe2/x9b/x93 CHAINS -+ /xe2/x9b/x94 NO ENTRY -+ /xe2/x9b/x95 ALTERNATE ONE-WAY LEFT WAY TRAFFIC -+ /xe2/x9b/x96 BLACK TWO-WAY LEFT WAY TRAFFIC -+ /xe2/x9b/x97 WHITE TWO-WAY LEFT WAY TRAFFIC -+ /xe2/x9b/x98 BLACK LEFT LANE MERGE -+ /xe2/x9b/x99 WHITE LEFT LANE MERGE -+ /xe2/x9b/x9a DRIVE SLOW SIGN -+ /xe2/x9b/x9b HEAVY WHITE DOWN-POINTING TRIANGLE -+ /xe2/x9b/x9c LEFT CLOSED ENTRY -+ /xe2/x9b/x9d SQUARED SALTIRE -+ /xe2/x9b/x9e FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE -+ /xe2/x9b/x9f BLACK TRUCK -+ /xe2/x9b/xa0 RESTRICTED LEFT ENTRY-1 -+ /xe2/x9b/xa1 RESTRICTED LEFT ENTRY-2 -+ /xe2/x9b/xa2 ASTRONOMICAL SYMBOL FOR URANUS -+ /xe2/x9b/xa3 HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE -+ /xe2/x9b/xa4 PENTAGRAM -+ /xe2/x9b/xa5 RIGHT-HANDED INTERLACED PENTAGRAM -+ /xe2/x9b/xa6 LEFT-HANDED INTERLACED PENTAGRAM -+ /xe2/x9b/xa7 INVERTED PENTAGRAM -+ /xe2/x9b/xa8 BLACK CROSS ON SHIELD -+ /xe2/x9b/xa9 SHINTO SHRINE -+ /xe2/x9b/xaa CHURCH -+ /xe2/x9b/xab CASTLE -+ /xe2/x9b/xac HISTORIC SITE -+ /xe2/x9b/xad GEAR WITHOUT HUB -+ /xe2/x9b/xae GEAR WITH HANDLES -+ /xe2/x9b/xaf MAP SYMBOL FOR LIGHTHOUSE -+ /xe2/x9b/xb0 MOUNTAIN -+ /xe2/x9b/xb1 UMBRELLA ON GROUND -+ /xe2/x9b/xb2 FOUNTAIN -+ /xe2/x9b/xb3 FLAG IN HOLE -+ /xe2/x9b/xb4 FERRY -+ /xe2/x9b/xb5 SAILBOAT -+ /xe2/x9b/xb6 SQUARE FOUR CORNERS -+ /xe2/x9b/xb7 SKIER -+ /xe2/x9b/xb8 ICE SKATE -+ /xe2/x9b/xb9 PERSON WITH BALL -+ /xe2/x9b/xba TENT -+ /xe2/x9b/xbb JAPANESE BANK SYMBOL -+ /xe2/x9b/xbc HEADSTONE GRAVEYARD SYMBOL -+ /xe2/x9b/xbd FUEL PUMP -+ /xe2/x9b/xbe CUP ON BLACK SQUARE -+ /xe2/x9b/xbf WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE - /xe2/x9c/x81 UPPER BLADE SCISSORS - /xe2/x9c/x82 BLACK SCISSORS - /xe2/x9c/x83 LOWER BLADE SCISSORS - /xe2/x9c/x84 WHITE SCISSORS -+ /xe2/x9c/x85 WHITE HEAVY CHECK MARK - /xe2/x9c/x86 TELEPHONE LOCATION SIGN - /xe2/x9c/x87 TAPE DRIVE - /xe2/x9c/x88 AIRPLANE - /xe2/x9c/x89 ENVELOPE -+ /xe2/x9c/x8a RAISED FIST -+ /xe2/x9c/x8b RAISED HAND - /xe2/x9c/x8c VICTORY HAND - /xe2/x9c/x8d WRITING HAND - /xe2/x9c/x8e LOWER RIGHT PENCIL -@@ -8120,6 +8672,7 @@ CHARMAP - /xe2/x9c/xa5 FOUR CLUB-SPOKED ASTERISK - /xe2/x9c/xa6 BLACK FOUR POINTED STAR - /xe2/x9c/xa7 WHITE FOUR POINTED STAR -+ /xe2/x9c/xa8 SPARKLES - /xe2/x9c/xa9 STRESS OUTLINED WHITE STAR - /xe2/x9c/xaa CIRCLED WHITE STAR - /xe2/x9c/xab OPEN CENTRE BLACK STAR -@@ -8155,12 +8708,18 @@ CHARMAP - /xe2/x9d/x89 BALLOON-SPOKED ASTERISK - /xe2/x9d/x8a EIGHT TEARDROP-SPOKED PROPELLER ASTERISK - /xe2/x9d/x8b HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK -+ /xe2/x9d/x8c CROSS MARK - /xe2/x9d/x8d SHADOWED WHITE CIRCLE -+ /xe2/x9d/x8e NEGATIVE SQUARED CROSS MARK - /xe2/x9d/x8f LOWER RIGHT DROP-SHADOWED WHITE SQUARE - /xe2/x9d/x90 UPPER RIGHT DROP-SHADOWED WHITE SQUARE - /xe2/x9d/x91 LOWER RIGHT SHADOWED WHITE SQUARE - /xe2/x9d/x92 UPPER RIGHT SHADOWED WHITE SQUARE -+ /xe2/x9d/x93 BLACK QUESTION MARK ORNAMENT -+ /xe2/x9d/x94 WHITE QUESTION MARK ORNAMENT -+ /xe2/x9d/x95 WHITE EXCLAMATION MARK ORNAMENT - /xe2/x9d/x96 BLACK DIAMOND MINUS WHITE X -+ /xe2/x9d/x97 HEAVY EXCLAMATION MARK SYMBOL - /xe2/x9d/x98 LIGHT VERTICAL BAR - /xe2/x9d/x99 MEDIUM VERTICAL BAR - /xe2/x9d/x9a HEAVY VERTICAL BAR -@@ -8168,6 +8727,8 @@ CHARMAP - /xe2/x9d/x9c HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT - /xe2/x9d/x9d HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT - /xe2/x9d/x9e HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT -+ /xe2/x9d/x9f HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT -+ /xe2/x9d/xa0 HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT - /xe2/x9d/xa1 CURVED STEM PARAGRAPH SIGN ORNAMENT - /xe2/x9d/xa2 HEAVY EXCLAMATION MARK ORNAMENT - /xe2/x9d/xa3 HEAVY HEART EXCLAMATION MARK ORNAMENT -@@ -8220,6 +8781,9 @@ CHARMAP - /xe2/x9e/x92 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE - /xe2/x9e/x93 DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN - /xe2/x9e/x94 HEAVY WIDE-HEADED RIGHTWARDS ARROW -+ /xe2/x9e/x95 HEAVY PLUS SIGN -+ /xe2/x9e/x96 HEAVY MINUS SIGN -+ /xe2/x9e/x97 HEAVY DIVISION SIGN - /xe2/x9e/x98 HEAVY SOUTH EAST ARROW - /xe2/x9e/x99 HEAVY RIGHTWARDS ARROW - /xe2/x9e/x9a HEAVY NORTH EAST ARROW -@@ -8244,6 +8808,7 @@ CHARMAP - /xe2/x9e/xad HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW - /xe2/x9e/xae HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW - /xe2/x9e/xaf NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW -+ /xe2/x9e/xb0 CURLY LOOP - /xe2/x9e/xb1 NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW - /xe2/x9e/xb2 CIRCLED HEAVY WHITE RIGHTWARDS ARROW - /xe2/x9e/xb3 WHITE-FEATHERED RIGHTWARDS ARROW -@@ -8258,6 +8823,7 @@ CHARMAP - /xe2/x9e/xbc WEDGE-TAILED RIGHTWARDS ARROW - /xe2/x9e/xbd HEAVY WEDGE-TAILED RIGHTWARDS ARROW - /xe2/x9e/xbe OPEN-OUTLINED RIGHTWARDS ARROW -+ /xe2/x9e/xbf DOUBLE CURLY LOOP - /xe2/x9f/x80 THREE DIMENSIONAL ANGLE - /xe2/x9f/x81 WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE - /xe2/x9f/x82 PERPENDICULAR -@@ -8270,6 +8836,8 @@ CHARMAP - /xe2/x9f/x89 SUPERSET PRECEDING SOLIDUS - /xe2/x9f/x8a VERTICAL BAR WITH HORIZONTAL STROKE - /xe2/x9f/x8c LONG DIVISION -+ /xe2/x9f/x8e SQUARED LOGICAL AND -+ /xe2/x9f/x8f SQUARED LOGICAL OR - /xe2/x9f/x90 WHITE DIAMOND WITH CENTRED DOT - /xe2/x9f/x91 AND WITH DOT - /xe2/x9f/x92 ELEMENT OF OPENING UPWARDS -@@ -9168,6 +9736,11 @@ CHARMAP - /xe2/xad/x92 WHITE SMALL STAR - /xe2/xad/x93 BLACK RIGHT-POINTING PENTAGON - /xe2/xad/x94 WHITE RIGHT-POINTING PENTAGON -+ /xe2/xad/x95 HEAVY LARGE CIRCLE -+ /xe2/xad/x96 HEAVY OVAL WITH OVAL INSIDE -+ /xe2/xad/x97 HEAVY CIRCLE WITH CIRCLE INSIDE -+ /xe2/xad/x98 HEAVY CIRCLE -+ /xe2/xad/x99 HEAVY CIRCLED SALTIRE - /xe2/xb0/x80 GLAGOLITIC CAPITAL LETTER AZU - /xe2/xb0/x81 GLAGOLITIC CAPITAL LETTER BUKY - /xe2/xb0/x82 GLAGOLITIC CAPITAL LETTER VEDE -@@ -9278,6 +9851,7 @@ CHARMAP - /xe2/xb1/xad LATIN CAPITAL LETTER ALPHA - /xe2/xb1/xae LATIN CAPITAL LETTER M WITH HOOK - /xe2/xb1/xaf LATIN CAPITAL LETTER TURNED A -+ /xe2/xb1/xb0 LATIN CAPITAL LETTER TURNED ALPHA - /xe2/xb1/xb1 LATIN SMALL LETTER V WITH RIGHT HOOK - /xe2/xb1/xb2 LATIN CAPITAL LETTER W WITH HOOK - /xe2/xb1/xb3 LATIN SMALL LETTER W WITH HOOK -@@ -9291,6 +9865,8 @@ CHARMAP - /xe2/xb1/xbb LATIN LETTER SMALL CAPITAL TURNED E - /xe2/xb1/xbc LATIN SUBSCRIPT SMALL LETTER J - /xe2/xb1/xbd MODIFIER LETTER CAPITAL V -+ /xe2/xb1/xbe LATIN CAPITAL LETTER S WITH SWASH TAIL -+ /xe2/xb1/xbf LATIN CAPITAL LETTER Z WITH SWASH TAIL - /xe2/xb2/x80 COPTIC CAPITAL LETTER ALFA - /xe2/xb2/x81 COPTIC SMALL LETTER ALFA - /xe2/xb2/x82 COPTIC CAPITAL LETTER VIDA -@@ -9398,6 +9974,13 @@ CHARMAP - /xe2/xb3/xa8 COPTIC SYMBOL TAU RO - /xe2/xb3/xa9 COPTIC SYMBOL KHI RO - /xe2/xb3/xaa COPTIC SYMBOL SHIMA SIMA -+ /xe2/xb3/xab COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI -+ /xe2/xb3/xac COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI -+ /xe2/xb3/xad COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA -+ /xe2/xb3/xae COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA -+ /xe2/xb3/xaf COPTIC COMBINING NI ABOVE -+ /xe2/xb3/xb0 COPTIC COMBINING SPIRITUS ASPER -+ /xe2/xb3/xb1 COPTIC COMBINING SPIRITUS LENIS - /xe2/xb3/xb9 COPTIC OLD NUBIAN FULL STOP - /xe2/xb3/xba COPTIC OLD NUBIAN DIRECT QUESTION MARK - /xe2/xb3/xbb COPTIC OLD NUBIAN INDIRECT QUESTION MARK -@@ -9498,6 +10081,8 @@ CHARMAP - /xe2/xb5/xa4 TIFINAGH LETTER TAWELLEMET YAZ - /xe2/xb5/xa5 TIFINAGH LETTER YAZZ - /xe2/xb5/xaf TIFINAGH MODIFIER LETTER LABIALIZATION MARK -+ /xe2/xb5/xb0 TIFINAGH SEPARATOR MARK -+ /xe2/xb5/xbf TIFINAGH CONSONANT JOINER - /xe2/xb6/x80 ETHIOPIC SYLLABLE LOA - /xe2/xb6/x81 ETHIOPIC SYLLABLE MOA - /xe2/xb6/x82 ETHIOPIC SYLLABLE ROA -@@ -9658,6 +10243,7 @@ CHARMAP - /xe2/xb8/xae REVERSED QUESTION MARK - /xe2/xb8/xaf VERTICAL TILDE - /xe2/xb8/xb0 RING POINT -+ /xe2/xb8/xb1 WORD SEPARATOR MIDDLE DOT - /xe2/xba/x80 CJK RADICAL REPEAT - /xe2/xba/x81 CJK RADICAL CLIFF - /xe2/xba/x82 CJK RADICAL SECOND ONE -@@ -10427,6 +11013,9 @@ CHARMAP - /xe3/x86/xb5 BOPOMOFO FINAL LETTER T - /xe3/x86/xb6 BOPOMOFO FINAL LETTER K - /xe3/x86/xb7 BOPOMOFO FINAL LETTER H -+ /xe3/x86/xb8 BOPOMOFO LETTER GH -+ /xe3/x86/xb9 BOPOMOFO LETTER LH -+ /xe3/x86/xba BOPOMOFO LETTER ZY - /xe3/x87/x80 CJK STROKE T - /xe3/x87/x81 CJK STROKE WG - /xe3/x87/x82 CJK STROKE XG -@@ -10546,6 +11135,18 @@ CHARMAP - /xe3/x89/x81 PARENTHESIZED IDEOGRAPH REST - /xe3/x89/x82 PARENTHESIZED IDEOGRAPH SELF - /xe3/x89/x83 PARENTHESIZED IDEOGRAPH REACH -+ /xe3/x89/x84 CIRCLED IDEOGRAPH QUESTION -+ /xe3/x89/x85 CIRCLED IDEOGRAPH KINDERGARTEN -+ /xe3/x89/x86 CIRCLED IDEOGRAPH SCHOOL -+ /xe3/x89/x87 CIRCLED IDEOGRAPH KOTO -+ /xe3/x89/x88 CIRCLED NUMBER TEN ON BLACK SQUARE -+ /xe3/x89/x89 CIRCLED NUMBER TWENTY ON BLACK SQUARE -+ /xe3/x89/x8a CIRCLED NUMBER THIRTY ON BLACK SQUARE -+ /xe3/x89/x8b CIRCLED NUMBER FORTY ON BLACK SQUARE -+ /xe3/x89/x8c CIRCLED NUMBER FIFTY ON BLACK SQUARE -+ /xe3/x89/x8d CIRCLED NUMBER SIXTY ON BLACK SQUARE -+ /xe3/x89/x8e CIRCLED NUMBER SEVENTY ON BLACK SQUARE -+ /xe3/x89/x8f CIRCLED NUMBER EIGHTY ON BLACK SQUARE - /xe3/x89/x90 PARTNERSHIP SIGN - /xe3/x89/x91 CIRCLED NUMBER TWENTY ONE - /xe3/x89/x92 CIRCLED NUMBER TWENTY TWO -@@ -12691,6 +13292,54 @@ CHARMAP - /xea/x93/x84 YI RADICAL ZZIET - /xea/x93/x85 YI RADICAL NBIE - /xea/x93/x86 YI RADICAL KE -+ /xea/x93/x90 LISU LETTER BA -+ /xea/x93/x91 LISU LETTER PA -+ /xea/x93/x92 LISU LETTER PHA -+ /xea/x93/x93 LISU LETTER DA -+ /xea/x93/x94 LISU LETTER TA -+ /xea/x93/x95 LISU LETTER THA -+ /xea/x93/x96 LISU LETTER GA -+ /xea/x93/x97 LISU LETTER KA -+ /xea/x93/x98 LISU LETTER KHA -+ /xea/x93/x99 LISU LETTER JA -+ /xea/x93/x9a LISU LETTER CA -+ /xea/x93/x9b LISU LETTER CHA -+ /xea/x93/x9c LISU LETTER DZA -+ /xea/x93/x9d LISU LETTER TSA -+ /xea/x93/x9e LISU LETTER TSHA -+ /xea/x93/x9f LISU LETTER MA -+ /xea/x93/xa0 LISU LETTER NA -+ /xea/x93/xa1 LISU LETTER LA -+ /xea/x93/xa2 LISU LETTER SA -+ /xea/x93/xa3 LISU LETTER ZHA -+ /xea/x93/xa4 LISU LETTER ZA -+ /xea/x93/xa5 LISU LETTER NGA -+ /xea/x93/xa6 LISU LETTER HA -+ /xea/x93/xa7 LISU LETTER XA -+ /xea/x93/xa8 LISU LETTER HHA -+ /xea/x93/xa9 LISU LETTER FA -+ /xea/x93/xaa LISU LETTER WA -+ /xea/x93/xab LISU LETTER SHA -+ /xea/x93/xac LISU LETTER YA -+ /xea/x93/xad LISU LETTER GHA -+ /xea/x93/xae LISU LETTER A -+ /xea/x93/xaf LISU LETTER AE -+ /xea/x93/xb0 LISU LETTER E -+ /xea/x93/xb1 LISU LETTER EU -+ /xea/x93/xb2 LISU LETTER I -+ /xea/x93/xb3 LISU LETTER O -+ /xea/x93/xb4 LISU LETTER U -+ /xea/x93/xb5 LISU LETTER UE -+ /xea/x93/xb6 LISU LETTER UH -+ /xea/x93/xb7 LISU LETTER OE -+ /xea/x93/xb8 LISU LETTER TONE MYA TI -+ /xea/x93/xb9 LISU LETTER TONE NA PO -+ /xea/x93/xba LISU LETTER TONE MYA CYA -+ /xea/x93/xbb LISU LETTER TONE MYA BO -+ /xea/x93/xbc LISU LETTER TONE MYA NA -+ /xea/x93/xbd LISU LETTER TONE MYA JEU -+ /xea/x93/xbe LISU PUNCTUATION COMMA -+ /xea/x93/xbf LISU PUNCTUATION FULL STOP - /xea/x94/x80 VAI SYLLABLE EE - /xea/x94/x81 VAI SYLLABLE EEN - /xea/x94/x82 VAI SYLLABLE HEE -@@ -13023,6 +13672,8 @@ CHARMAP - /xea/x99/x9d CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS - /xea/x99/x9e CYRILLIC CAPITAL LETTER YN - /xea/x99/x9f CYRILLIC SMALL LETTER YN -+ /xea/x99/xa0 CYRILLIC CAPITAL LETTER REVERSED TSE -+ /xea/x99/xa1 CYRILLIC SMALL LETTER REVERSED TSE - /xea/x99/xa2 CYRILLIC CAPITAL LETTER SOFT DE - /xea/x99/xa3 CYRILLIC SMALL LETTER SOFT DE - /xea/x99/xa4 CYRILLIC CAPITAL LETTER SOFT EL -@@ -13069,6 +13720,94 @@ CHARMAP - /xea/x9a/x95 CYRILLIC SMALL LETTER HWE - /xea/x9a/x96 CYRILLIC CAPITAL LETTER SHWE - /xea/x9a/x97 CYRILLIC SMALL LETTER SHWE -+ /xea/x9a/xa0 BAMUM LETTER A -+ /xea/x9a/xa1 BAMUM LETTER KA -+ /xea/x9a/xa2 BAMUM LETTER U -+ /xea/x9a/xa3 BAMUM LETTER KU -+ /xea/x9a/xa4 BAMUM LETTER EE -+ /xea/x9a/xa5 BAMUM LETTER REE -+ /xea/x9a/xa6 BAMUM LETTER TAE -+ /xea/x9a/xa7 BAMUM LETTER O -+ /xea/x9a/xa8 BAMUM LETTER NYI -+ /xea/x9a/xa9 BAMUM LETTER I -+ /xea/x9a/xaa BAMUM LETTER LA -+ /xea/x9a/xab BAMUM LETTER PA -+ /xea/x9a/xac BAMUM LETTER RII -+ /xea/x9a/xad BAMUM LETTER RIEE -+ /xea/x9a/xae BAMUM LETTER LEEEE -+ /xea/x9a/xaf BAMUM LETTER MEEEE -+ /xea/x9a/xb0 BAMUM LETTER TAA -+ /xea/x9a/xb1 BAMUM LETTER NDAA -+ /xea/x9a/xb2 BAMUM LETTER NJAEM -+ /xea/x9a/xb3 BAMUM LETTER M -+ /xea/x9a/xb4 BAMUM LETTER SUU -+ /xea/x9a/xb5 BAMUM LETTER MU -+ /xea/x9a/xb6 BAMUM LETTER SHII -+ /xea/x9a/xb7 BAMUM LETTER SI -+ /xea/x9a/xb8 BAMUM LETTER SHEUX -+ /xea/x9a/xb9 BAMUM LETTER SEUX -+ /xea/x9a/xba BAMUM LETTER KYEE -+ /xea/x9a/xbb BAMUM LETTER KET -+ /xea/x9a/xbc BAMUM LETTER NUAE -+ /xea/x9a/xbd BAMUM LETTER NU -+ /xea/x9a/xbe BAMUM LETTER NJUAE -+ /xea/x9a/xbf BAMUM LETTER YOQ -+ /xea/x9b/x80 BAMUM LETTER SHU -+ /xea/x9b/x81 BAMUM LETTER YUQ -+ /xea/x9b/x82 BAMUM LETTER YA -+ /xea/x9b/x83 BAMUM LETTER NSHA -+ /xea/x9b/x84 BAMUM LETTER KEUX -+ /xea/x9b/x85 BAMUM LETTER PEUX -+ /xea/x9b/x86 BAMUM LETTER NJEE -+ /xea/x9b/x87 BAMUM LETTER NTEE -+ /xea/x9b/x88 BAMUM LETTER PUE -+ /xea/x9b/x89 BAMUM LETTER WUE -+ /xea/x9b/x8a BAMUM LETTER PEE -+ /xea/x9b/x8b BAMUM LETTER FEE -+ /xea/x9b/x8c BAMUM LETTER RU -+ /xea/x9b/x8d BAMUM LETTER LU -+ /xea/x9b/x8e BAMUM LETTER MI -+ /xea/x9b/x8f BAMUM LETTER NI -+ /xea/x9b/x90 BAMUM LETTER REUX -+ /xea/x9b/x91 BAMUM LETTER RAE -+ /xea/x9b/x92 BAMUM LETTER KEN -+ /xea/x9b/x93 BAMUM LETTER NGKWAEN -+ /xea/x9b/x94 BAMUM LETTER NGGA -+ /xea/x9b/x95 BAMUM LETTER NGA -+ /xea/x9b/x96 BAMUM LETTER SHO -+ /xea/x9b/x97 BAMUM LETTER PUAE -+ /xea/x9b/x98 BAMUM LETTER FU -+ /xea/x9b/x99 BAMUM LETTER FOM -+ /xea/x9b/x9a BAMUM LETTER WA -+ /xea/x9b/x9b BAMUM LETTER NA -+ /xea/x9b/x9c BAMUM LETTER LI -+ /xea/x9b/x9d BAMUM LETTER PI -+ /xea/x9b/x9e BAMUM LETTER LOQ -+ /xea/x9b/x9f BAMUM LETTER KO -+ /xea/x9b/xa0 BAMUM LETTER MBEN -+ /xea/x9b/xa1 BAMUM LETTER REN -+ /xea/x9b/xa2 BAMUM LETTER MEN -+ /xea/x9b/xa3 BAMUM LETTER MA -+ /xea/x9b/xa4 BAMUM LETTER TI -+ /xea/x9b/xa5 BAMUM LETTER KI -+ /xea/x9b/xa6 BAMUM LETTER MO -+ /xea/x9b/xa7 BAMUM LETTER MBAA -+ /xea/x9b/xa8 BAMUM LETTER TET -+ /xea/x9b/xa9 BAMUM LETTER KPA -+ /xea/x9b/xaa BAMUM LETTER TEN -+ /xea/x9b/xab BAMUM LETTER NTUU -+ /xea/x9b/xac BAMUM LETTER SAMBA -+ /xea/x9b/xad BAMUM LETTER FAAMAE -+ /xea/x9b/xae BAMUM LETTER KOVUU -+ /xea/x9b/xaf BAMUM LETTER KOGHOM -+ /xea/x9b/xb0 BAMUM COMBINING MARK KOQNDON -+ /xea/x9b/xb1 BAMUM COMBINING MARK TUKWENTIS -+ /xea/x9b/xb2 BAMUM NJAEMLI -+ /xea/x9b/xb3 BAMUM FULL STOP -+ /xea/x9b/xb4 BAMUM COLON -+ /xea/x9b/xb5 BAMUM COMMA -+ /xea/x9b/xb6 BAMUM SEMICOLON -+ /xea/x9b/xb7 BAMUM QUESTION MARK - /xea/x9c/x80 MODIFIER LETTER CHINESE TONE YIN PING - /xea/x9c/x81 MODIFIER LETTER CHINESE TONE YANG PING - /xea/x9c/x82 MODIFIER LETTER CHINESE TONE YIN SHANG -@@ -13210,6 +13949,21 @@ CHARMAP - /xea/x9e/x8a MODIFIER LETTER SHORT EQUALS SIGN - /xea/x9e/x8b LATIN CAPITAL LETTER SALTILLO - /xea/x9e/x8c LATIN SMALL LETTER SALTILLO -+ /xea/x9e/x8d LATIN CAPITAL LETTER TURNED H -+ /xea/x9e/x8e LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT -+ /xea/x9e/x90 LATIN CAPITAL LETTER N WITH DESCENDER -+ /xea/x9e/x91 LATIN SMALL LETTER N WITH DESCENDER -+ /xea/x9e/xa0 LATIN CAPITAL LETTER G WITH OBLIQUE STROKE -+ /xea/x9e/xa1 LATIN SMALL LETTER G WITH OBLIQUE STROKE -+ /xea/x9e/xa2 LATIN CAPITAL LETTER K WITH OBLIQUE STROKE -+ /xea/x9e/xa3 LATIN SMALL LETTER K WITH OBLIQUE STROKE -+ /xea/x9e/xa4 LATIN CAPITAL LETTER N WITH OBLIQUE STROKE -+ /xea/x9e/xa5 LATIN SMALL LETTER N WITH OBLIQUE STROKE -+ /xea/x9e/xa6 LATIN CAPITAL LETTER R WITH OBLIQUE STROKE -+ /xea/x9e/xa7 LATIN SMALL LETTER R WITH OBLIQUE STROKE -+ /xea/x9e/xa8 LATIN CAPITAL LETTER S WITH OBLIQUE STROKE -+ /xea/x9e/xa9 LATIN SMALL LETTER S WITH OBLIQUE STROKE -+ /xea/x9f/xba LATIN LETTER SMALL CAPITAL TURNED M - /xea/x9f/xbb LATIN EPIGRAPHIC LETTER REVERSED F - /xea/x9f/xbc LATIN EPIGRAPHIC LETTER REVERSED P - /xea/x9f/xbd LATIN EPIGRAPHIC LETTER INVERTED M -@@ -13259,6 +14013,16 @@ CHARMAP - /xea/xa0/xa9 SYLOTI NAGRI POETRY MARK-2 - /xea/xa0/xaa SYLOTI NAGRI POETRY MARK-3 - /xea/xa0/xab SYLOTI NAGRI POETRY MARK-4 -+ /xea/xa0/xb0 NORTH INDIC FRACTION ONE QUARTER -+ /xea/xa0/xb1 NORTH INDIC FRACTION ONE HALF -+ /xea/xa0/xb2 NORTH INDIC FRACTION THREE QUARTERS -+ /xea/xa0/xb3 NORTH INDIC FRACTION ONE SIXTEENTH -+ /xea/xa0/xb4 NORTH INDIC FRACTION ONE EIGHTH -+ /xea/xa0/xb5 NORTH INDIC FRACTION THREE SIXTEENTHS -+ /xea/xa0/xb6 NORTH INDIC QUARTER MARK -+ /xea/xa0/xb7 NORTH INDIC PLACEHOLDER MARK -+ /xea/xa0/xb8 NORTH INDIC RUPEE MARK -+ /xea/xa0/xb9 NORTH INDIC QUANTITY MARK - /xea/xa1/x80 PHAGS-PA LETTER KA - /xea/xa1/x81 PHAGS-PA LETTER KHA - /xea/xa1/x82 PHAGS-PA LETTER GA -@@ -13396,6 +14160,34 @@ CHARMAP - /xea/xa3/x97 SAURASHTRA DIGIT SEVEN - /xea/xa3/x98 SAURASHTRA DIGIT EIGHT - /xea/xa3/x99 SAURASHTRA DIGIT NINE -+ /xea/xa3/xa0 COMBINING DEVANAGARI DIGIT ZERO -+ /xea/xa3/xa1 COMBINING DEVANAGARI DIGIT ONE -+ /xea/xa3/xa2 COMBINING DEVANAGARI DIGIT TWO -+ /xea/xa3/xa3 COMBINING DEVANAGARI DIGIT THREE -+ /xea/xa3/xa4 COMBINING DEVANAGARI DIGIT FOUR -+ /xea/xa3/xa5 COMBINING DEVANAGARI DIGIT FIVE -+ /xea/xa3/xa6 COMBINING DEVANAGARI DIGIT SIX -+ /xea/xa3/xa7 COMBINING DEVANAGARI DIGIT SEVEN -+ /xea/xa3/xa8 COMBINING DEVANAGARI DIGIT EIGHT -+ /xea/xa3/xa9 COMBINING DEVANAGARI DIGIT NINE -+ /xea/xa3/xaa COMBINING DEVANAGARI LETTER A -+ /xea/xa3/xab COMBINING DEVANAGARI LETTER U -+ /xea/xa3/xac COMBINING DEVANAGARI LETTER KA -+ /xea/xa3/xad COMBINING DEVANAGARI LETTER NA -+ /xea/xa3/xae COMBINING DEVANAGARI LETTER PA -+ /xea/xa3/xaf COMBINING DEVANAGARI LETTER RA -+ /xea/xa3/xb0 COMBINING DEVANAGARI LETTER VI -+ /xea/xa3/xb1 COMBINING DEVANAGARI SIGN AVAGRAHA -+ /xea/xa3/xb2 DEVANAGARI SIGN SPACING CANDRABINDU -+ /xea/xa3/xb3 DEVANAGARI SIGN CANDRABINDU VIRAMA -+ /xea/xa3/xb4 DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA -+ /xea/xa3/xb5 DEVANAGARI SIGN CANDRABINDU TWO -+ /xea/xa3/xb6 DEVANAGARI SIGN CANDRABINDU THREE -+ /xea/xa3/xb7 DEVANAGARI SIGN CANDRABINDU AVAGRAHA -+ /xea/xa3/xb8 DEVANAGARI SIGN PUSHPIKA -+ /xea/xa3/xb9 DEVANAGARI GAP FILLER -+ /xea/xa3/xba DEVANAGARI CARET -+ /xea/xa3/xbb DEVANAGARI HEADSTROKE - /xea/xa4/x80 KAYAH LI DIGIT ZERO - /xea/xa4/x81 KAYAH LI DIGIT ONE - /xea/xa4/x82 KAYAH LI DIGIT TWO -@@ -13481,6 +14273,126 @@ CHARMAP - /xea/xa5/x92 REJANG CONSONANT SIGN H - /xea/xa5/x93 REJANG VIRAMA - /xea/xa5/x9f REJANG SECTION MARK -+ /xea/xa5/xa0 HANGUL CHOSEONG TIKEUT-MIEUM -+ /xea/xa5/xa1 HANGUL CHOSEONG TIKEUT-PIEUP -+ /xea/xa5/xa2 HANGUL CHOSEONG TIKEUT-SIOS -+ /xea/xa5/xa3 HANGUL CHOSEONG TIKEUT-CIEUC -+ /xea/xa5/xa4 HANGUL CHOSEONG RIEUL-KIYEOK -+ /xea/xa5/xa5 HANGUL CHOSEONG RIEUL-SSANGKIYEOK -+ /xea/xa5/xa6 HANGUL CHOSEONG RIEUL-TIKEUT -+ /xea/xa5/xa7 HANGUL CHOSEONG RIEUL-SSANGTIKEUT -+ /xea/xa5/xa8 HANGUL CHOSEONG RIEUL-MIEUM -+ /xea/xa5/xa9 HANGUL CHOSEONG RIEUL-PIEUP -+ /xea/xa5/xaa HANGUL CHOSEONG RIEUL-SSANGPIEUP -+ /xea/xa5/xab HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP -+ /xea/xa5/xac HANGUL CHOSEONG RIEUL-SIOS -+ /xea/xa5/xad HANGUL CHOSEONG RIEUL-CIEUC -+ /xea/xa5/xae HANGUL CHOSEONG RIEUL-KHIEUKH -+ /xea/xa5/xaf HANGUL CHOSEONG MIEUM-KIYEOK -+ /xea/xa5/xb0 HANGUL CHOSEONG MIEUM-TIKEUT -+ /xea/xa5/xb1 HANGUL CHOSEONG MIEUM-SIOS -+ /xea/xa5/xb2 HANGUL CHOSEONG PIEUP-SIOS-THIEUTH -+ /xea/xa5/xb3 HANGUL CHOSEONG PIEUP-KHIEUKH -+ /xea/xa5/xb4 HANGUL CHOSEONG PIEUP-HIEUH -+ /xea/xa5/xb5 HANGUL CHOSEONG SSANGSIOS-PIEUP -+ /xea/xa5/xb6 HANGUL CHOSEONG IEUNG-RIEUL -+ /xea/xa5/xb7 HANGUL CHOSEONG IEUNG-HIEUH -+ /xea/xa5/xb8 HANGUL CHOSEONG SSANGCIEUC-HIEUH -+ /xea/xa5/xb9 HANGUL CHOSEONG SSANGTHIEUTH -+ /xea/xa5/xba HANGUL CHOSEONG PHIEUPH-HIEUH -+ /xea/xa5/xbb HANGUL CHOSEONG HIEUH-SIOS -+ /xea/xa5/xbc HANGUL CHOSEONG SSANGYEORINHIEUH -+ /xea/xa6/x80 JAVANESE SIGN PANYANGGA -+ /xea/xa6/x81 JAVANESE SIGN CECAK -+ /xea/xa6/x82 JAVANESE SIGN LAYAR -+ /xea/xa6/x83 JAVANESE SIGN WIGNYAN -+ /xea/xa6/x84 JAVANESE LETTER A -+ /xea/xa6/x85 JAVANESE LETTER I KAWI -+ /xea/xa6/x86 JAVANESE LETTER I -+ /xea/xa6/x87 JAVANESE LETTER II -+ /xea/xa6/x88 JAVANESE LETTER U -+ /xea/xa6/x89 JAVANESE LETTER PA CEREK -+ /xea/xa6/x8a JAVANESE LETTER NGA LELET -+ /xea/xa6/x8b JAVANESE LETTER NGA LELET RASWADI -+ /xea/xa6/x8c JAVANESE LETTER E -+ /xea/xa6/x8d JAVANESE LETTER AI -+ /xea/xa6/x8e JAVANESE LETTER O -+ /xea/xa6/x8f JAVANESE LETTER KA -+ /xea/xa6/x90 JAVANESE LETTER KA SASAK -+ /xea/xa6/x91 JAVANESE LETTER KA MURDA -+ /xea/xa6/x92 JAVANESE LETTER GA -+ /xea/xa6/x93 JAVANESE LETTER GA MURDA -+ /xea/xa6/x94 JAVANESE LETTER NGA -+ /xea/xa6/x95 JAVANESE LETTER CA -+ /xea/xa6/x96 JAVANESE LETTER CA MURDA -+ /xea/xa6/x97 JAVANESE LETTER JA -+ /xea/xa6/x98 JAVANESE LETTER NYA MURDA -+ /xea/xa6/x99 JAVANESE LETTER JA MAHAPRANA -+ /xea/xa6/x9a JAVANESE LETTER NYA -+ /xea/xa6/x9b JAVANESE LETTER TTA -+ /xea/xa6/x9c JAVANESE LETTER TTA MAHAPRANA -+ /xea/xa6/x9d JAVANESE LETTER DDA -+ /xea/xa6/x9e JAVANESE LETTER DDA MAHAPRANA -+ /xea/xa6/x9f JAVANESE LETTER NA MURDA -+ /xea/xa6/xa0 JAVANESE LETTER TA -+ /xea/xa6/xa1 JAVANESE LETTER TA MURDA -+ /xea/xa6/xa2 JAVANESE LETTER DA -+ /xea/xa6/xa3 JAVANESE LETTER DA MAHAPRANA -+ /xea/xa6/xa4 JAVANESE LETTER NA -+ /xea/xa6/xa5 JAVANESE LETTER PA -+ /xea/xa6/xa6 JAVANESE LETTER PA MURDA -+ /xea/xa6/xa7 JAVANESE LETTER BA -+ /xea/xa6/xa8 JAVANESE LETTER BA MURDA -+ /xea/xa6/xa9 JAVANESE LETTER MA -+ /xea/xa6/xaa JAVANESE LETTER YA -+ /xea/xa6/xab JAVANESE LETTER RA -+ /xea/xa6/xac JAVANESE LETTER RA AGUNG -+ /xea/xa6/xad JAVANESE LETTER LA -+ /xea/xa6/xae JAVANESE LETTER WA -+ /xea/xa6/xaf JAVANESE LETTER SA MURDA -+ /xea/xa6/xb0 JAVANESE LETTER SA MAHAPRANA -+ /xea/xa6/xb1 JAVANESE LETTER SA -+ /xea/xa6/xb2 JAVANESE LETTER HA -+ /xea/xa6/xb3 JAVANESE SIGN CECAK TELU -+ /xea/xa6/xb4 JAVANESE VOWEL SIGN TARUNG -+ /xea/xa6/xb5 JAVANESE VOWEL SIGN TOLONG -+ /xea/xa6/xb6 JAVANESE VOWEL SIGN WULU -+ /xea/xa6/xb7 JAVANESE VOWEL SIGN WULU MELIK -+ /xea/xa6/xb8 JAVANESE VOWEL SIGN SUKU -+ /xea/xa6/xb9 JAVANESE VOWEL SIGN SUKU MENDUT -+ /xea/xa6/xba JAVANESE VOWEL SIGN TALING -+ /xea/xa6/xbb JAVANESE VOWEL SIGN DIRGA MURE -+ /xea/xa6/xbc JAVANESE VOWEL SIGN PEPET -+ /xea/xa6/xbd JAVANESE CONSONANT SIGN KERET -+ /xea/xa6/xbe JAVANESE CONSONANT SIGN PENGKAL -+ /xea/xa6/xbf JAVANESE CONSONANT SIGN CAKRA -+ /xea/xa7/x80 JAVANESE PANGKON -+ /xea/xa7/x81 JAVANESE LEFT RERENGGAN -+ /xea/xa7/x82 JAVANESE RIGHT RERENGGAN -+ /xea/xa7/x83 JAVANESE PADA ANDAP -+ /xea/xa7/x84 JAVANESE PADA MADYA -+ /xea/xa7/x85 JAVANESE PADA LUHUR -+ /xea/xa7/x86 JAVANESE PADA WINDU -+ /xea/xa7/x87 JAVANESE PADA PANGKAT -+ /xea/xa7/x88 JAVANESE PADA LINGSA -+ /xea/xa7/x89 JAVANESE PADA LUNGSI -+ /xea/xa7/x8a JAVANESE PADA ADEG -+ /xea/xa7/x8b JAVANESE PADA ADEG ADEG -+ /xea/xa7/x8c JAVANESE PADA PISELEH -+ /xea/xa7/x8d JAVANESE TURNED PADA PISELEH -+ /xea/xa7/x8f JAVANESE PANGRANGKEP -+ /xea/xa7/x90 JAVANESE DIGIT ZERO -+ /xea/xa7/x91 JAVANESE DIGIT ONE -+ /xea/xa7/x92 JAVANESE DIGIT TWO -+ /xea/xa7/x93 JAVANESE DIGIT THREE -+ /xea/xa7/x94 JAVANESE DIGIT FOUR -+ /xea/xa7/x95 JAVANESE DIGIT FIVE -+ /xea/xa7/x96 JAVANESE DIGIT SIX -+ /xea/xa7/x97 JAVANESE DIGIT SEVEN -+ /xea/xa7/x98 JAVANESE DIGIT EIGHT -+ /xea/xa7/x99 JAVANESE DIGIT NINE -+ /xea/xa7/x9e JAVANESE PADA TIRTA TUMETES -+ /xea/xa7/x9f JAVANESE PADA ISEN-ISEN - /xea/xa8/x80 CHAM LETTER A - /xea/xa8/x81 CHAM LETTER I - /xea/xa8/x82 CHAM LETTER U -@@ -13564,6 +14476,194 @@ CHARMAP - /xea/xa9/x9d CHAM PUNCTUATION DANDA - /xea/xa9/x9e CHAM PUNCTUATION DOUBLE DANDA - /xea/xa9/x9f CHAM PUNCTUATION TRIPLE DANDA -+ /xea/xa9/xa0 MYANMAR LETTER KHAMTI GA -+ /xea/xa9/xa1 MYANMAR LETTER KHAMTI CA -+ /xea/xa9/xa2 MYANMAR LETTER KHAMTI CHA -+ /xea/xa9/xa3 MYANMAR LETTER KHAMTI JA -+ /xea/xa9/xa4 MYANMAR LETTER KHAMTI JHA -+ /xea/xa9/xa5 MYANMAR LETTER KHAMTI NYA -+ /xea/xa9/xa6 MYANMAR LETTER KHAMTI TTA -+ /xea/xa9/xa7 MYANMAR LETTER KHAMTI TTHA -+ /xea/xa9/xa8 MYANMAR LETTER KHAMTI DDA -+ /xea/xa9/xa9 MYANMAR LETTER KHAMTI DDHA -+ /xea/xa9/xaa MYANMAR LETTER KHAMTI DHA -+ /xea/xa9/xab MYANMAR LETTER KHAMTI NA -+ /xea/xa9/xac MYANMAR LETTER KHAMTI SA -+ /xea/xa9/xad MYANMAR LETTER KHAMTI HA -+ /xea/xa9/xae MYANMAR LETTER KHAMTI HHA -+ /xea/xa9/xaf MYANMAR LETTER KHAMTI FA -+ /xea/xa9/xb0 MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION -+ /xea/xa9/xb1 MYANMAR LETTER KHAMTI XA -+ /xea/xa9/xb2 MYANMAR LETTER KHAMTI ZA -+ /xea/xa9/xb3 MYANMAR LETTER KHAMTI RA -+ /xea/xa9/xb4 MYANMAR LOGOGRAM KHAMTI OAY -+ /xea/xa9/xb5 MYANMAR LOGOGRAM KHAMTI QN -+ /xea/xa9/xb6 MYANMAR LOGOGRAM KHAMTI HM -+ /xea/xa9/xb7 MYANMAR SYMBOL AITON EXCLAMATION -+ /xea/xa9/xb8 MYANMAR SYMBOL AITON ONE -+ /xea/xa9/xb9 MYANMAR SYMBOL AITON TWO -+ /xea/xa9/xba MYANMAR LETTER AITON RA -+ /xea/xa9/xbb MYANMAR SIGN PAO KAREN TONE -+ /xea/xaa/x80 TAI VIET LETTER LOW KO -+ /xea/xaa/x81 TAI VIET LETTER HIGH KO -+ /xea/xaa/x82 TAI VIET LETTER LOW KHO -+ /xea/xaa/x83 TAI VIET LETTER HIGH KHO -+ /xea/xaa/x84 TAI VIET LETTER LOW KHHO -+ /xea/xaa/x85 TAI VIET LETTER HIGH KHHO -+ /xea/xaa/x86 TAI VIET LETTER LOW GO -+ /xea/xaa/x87 TAI VIET LETTER HIGH GO -+ /xea/xaa/x88 TAI VIET LETTER LOW NGO -+ /xea/xaa/x89 TAI VIET LETTER HIGH NGO -+ /xea/xaa/x8a TAI VIET LETTER LOW CO -+ /xea/xaa/x8b TAI VIET LETTER HIGH CO -+ /xea/xaa/x8c TAI VIET LETTER LOW CHO -+ /xea/xaa/x8d TAI VIET LETTER HIGH CHO -+ /xea/xaa/x8e TAI VIET LETTER LOW SO -+ /xea/xaa/x8f TAI VIET LETTER HIGH SO -+ /xea/xaa/x90 TAI VIET LETTER LOW NYO -+ /xea/xaa/x91 TAI VIET LETTER HIGH NYO -+ /xea/xaa/x92 TAI VIET LETTER LOW DO -+ /xea/xaa/x93 TAI VIET LETTER HIGH DO -+ /xea/xaa/x94 TAI VIET LETTER LOW TO -+ /xea/xaa/x95 TAI VIET LETTER HIGH TO -+ /xea/xaa/x96 TAI VIET LETTER LOW THO -+ /xea/xaa/x97 TAI VIET LETTER HIGH THO -+ /xea/xaa/x98 TAI VIET LETTER LOW NO -+ /xea/xaa/x99 TAI VIET LETTER HIGH NO -+ /xea/xaa/x9a TAI VIET LETTER LOW BO -+ /xea/xaa/x9b TAI VIET LETTER HIGH BO -+ /xea/xaa/x9c TAI VIET LETTER LOW PO -+ /xea/xaa/x9d TAI VIET LETTER HIGH PO -+ /xea/xaa/x9e TAI VIET LETTER LOW PHO -+ /xea/xaa/x9f TAI VIET LETTER HIGH PHO -+ /xea/xaa/xa0 TAI VIET LETTER LOW FO -+ /xea/xaa/xa1 TAI VIET LETTER HIGH FO -+ /xea/xaa/xa2 TAI VIET LETTER LOW MO -+ /xea/xaa/xa3 TAI VIET LETTER HIGH MO -+ /xea/xaa/xa4 TAI VIET LETTER LOW YO -+ /xea/xaa/xa5 TAI VIET LETTER HIGH YO -+ /xea/xaa/xa6 TAI VIET LETTER LOW RO -+ /xea/xaa/xa7 TAI VIET LETTER HIGH RO -+ /xea/xaa/xa8 TAI VIET LETTER LOW LO -+ /xea/xaa/xa9 TAI VIET LETTER HIGH LO -+ /xea/xaa/xaa TAI VIET LETTER LOW VO -+ /xea/xaa/xab TAI VIET LETTER HIGH VO -+ /xea/xaa/xac TAI VIET LETTER LOW HO -+ /xea/xaa/xad TAI VIET LETTER HIGH HO -+ /xea/xaa/xae TAI VIET LETTER LOW O -+ /xea/xaa/xaf TAI VIET LETTER HIGH O -+ /xea/xaa/xb0 TAI VIET MAI KANG -+ /xea/xaa/xb1 TAI VIET VOWEL AA -+ /xea/xaa/xb2 TAI VIET VOWEL I -+ /xea/xaa/xb3 TAI VIET VOWEL UE -+ /xea/xaa/xb4 TAI VIET VOWEL U -+ /xea/xaa/xb5 TAI VIET VOWEL E -+ /xea/xaa/xb6 TAI VIET VOWEL O -+ /xea/xaa/xb7 TAI VIET MAI KHIT -+ /xea/xaa/xb8 TAI VIET VOWEL IA -+ /xea/xaa/xb9 TAI VIET VOWEL UEA -+ /xea/xaa/xba TAI VIET VOWEL UA -+ /xea/xaa/xbb TAI VIET VOWEL AUE -+ /xea/xaa/xbc TAI VIET VOWEL AY -+ /xea/xaa/xbd TAI VIET VOWEL AN -+ /xea/xaa/xbe TAI VIET VOWEL AM -+ /xea/xaa/xbf TAI VIET TONE MAI EK -+ /xea/xab/x80 TAI VIET TONE MAI NUENG -+ /xea/xab/x81 TAI VIET TONE MAI THO -+ /xea/xab/x82 TAI VIET TONE MAI SONG -+ /xea/xab/x9b TAI VIET SYMBOL KON -+ /xea/xab/x9c TAI VIET SYMBOL NUENG -+ /xea/xab/x9d TAI VIET SYMBOL SAM -+ /xea/xab/x9e TAI VIET SYMBOL HO HOI -+ /xea/xab/x9f TAI VIET SYMBOL KOI KOI -+ /xea/xac/x81 ETHIOPIC SYLLABLE TTHU -+ /xea/xac/x82 ETHIOPIC SYLLABLE TTHI -+ /xea/xac/x83 ETHIOPIC SYLLABLE TTHAA -+ /xea/xac/x84 ETHIOPIC SYLLABLE TTHEE -+ /xea/xac/x85 ETHIOPIC SYLLABLE TTHE -+ /xea/xac/x86 ETHIOPIC SYLLABLE TTHO -+ /xea/xac/x89 ETHIOPIC SYLLABLE DDHU -+ /xea/xac/x8a ETHIOPIC SYLLABLE DDHI -+ /xea/xac/x8b ETHIOPIC SYLLABLE DDHAA -+ /xea/xac/x8c ETHIOPIC SYLLABLE DDHEE -+ /xea/xac/x8d ETHIOPIC SYLLABLE DDHE -+ /xea/xac/x8e ETHIOPIC SYLLABLE DDHO -+ /xea/xac/x91 ETHIOPIC SYLLABLE DZU -+ /xea/xac/x92 ETHIOPIC SYLLABLE DZI -+ /xea/xac/x93 ETHIOPIC SYLLABLE DZAA -+ /xea/xac/x94 ETHIOPIC SYLLABLE DZEE -+ /xea/xac/x95 ETHIOPIC SYLLABLE DZE -+ /xea/xac/x96 ETHIOPIC SYLLABLE DZO -+ /xea/xac/xa0 ETHIOPIC SYLLABLE CCHHA -+ /xea/xac/xa1 ETHIOPIC SYLLABLE CCHHU -+ /xea/xac/xa2 ETHIOPIC SYLLABLE CCHHI -+ /xea/xac/xa3 ETHIOPIC SYLLABLE CCHHAA -+ /xea/xac/xa4 ETHIOPIC SYLLABLE CCHHEE -+ /xea/xac/xa5 ETHIOPIC SYLLABLE CCHHE -+ /xea/xac/xa6 ETHIOPIC SYLLABLE CCHHO -+ /xea/xac/xa8 ETHIOPIC SYLLABLE BBA -+ /xea/xac/xa9 ETHIOPIC SYLLABLE BBU -+ /xea/xac/xaa ETHIOPIC SYLLABLE BBI -+ /xea/xac/xab ETHIOPIC SYLLABLE BBAA -+ /xea/xac/xac ETHIOPIC SYLLABLE BBEE -+ /xea/xac/xad ETHIOPIC SYLLABLE BBE -+ /xea/xac/xae ETHIOPIC SYLLABLE BBO -+ /xea/xaf/x80 MEETEI MAYEK LETTER KOK -+ /xea/xaf/x81 MEETEI MAYEK LETTER SAM -+ /xea/xaf/x82 MEETEI MAYEK LETTER LAI -+ /xea/xaf/x83 MEETEI MAYEK LETTER MIT -+ /xea/xaf/x84 MEETEI MAYEK LETTER PA -+ /xea/xaf/x85 MEETEI MAYEK LETTER NA -+ /xea/xaf/x86 MEETEI MAYEK LETTER CHIL -+ /xea/xaf/x87 MEETEI MAYEK LETTER TIL -+ /xea/xaf/x88 MEETEI MAYEK LETTER KHOU -+ /xea/xaf/x89 MEETEI MAYEK LETTER NGOU -+ /xea/xaf/x8a MEETEI MAYEK LETTER THOU -+ /xea/xaf/x8b MEETEI MAYEK LETTER WAI -+ /xea/xaf/x8c MEETEI MAYEK LETTER YANG -+ /xea/xaf/x8d MEETEI MAYEK LETTER HUK -+ /xea/xaf/x8e MEETEI MAYEK LETTER UN -+ /xea/xaf/x8f MEETEI MAYEK LETTER I -+ /xea/xaf/x90 MEETEI MAYEK LETTER PHAM -+ /xea/xaf/x91 MEETEI MAYEK LETTER ATIYA -+ /xea/xaf/x92 MEETEI MAYEK LETTER GOK -+ /xea/xaf/x93 MEETEI MAYEK LETTER JHAM -+ /xea/xaf/x94 MEETEI MAYEK LETTER RAI -+ /xea/xaf/x95 MEETEI MAYEK LETTER BA -+ /xea/xaf/x96 MEETEI MAYEK LETTER JIL -+ /xea/xaf/x97 MEETEI MAYEK LETTER DIL -+ /xea/xaf/x98 MEETEI MAYEK LETTER GHOU -+ /xea/xaf/x99 MEETEI MAYEK LETTER DHOU -+ /xea/xaf/x9a MEETEI MAYEK LETTER BHAM -+ /xea/xaf/x9b MEETEI MAYEK LETTER KOK LONSUM -+ /xea/xaf/x9c MEETEI MAYEK LETTER LAI LONSUM -+ /xea/xaf/x9d MEETEI MAYEK LETTER MIT LONSUM -+ /xea/xaf/x9e MEETEI MAYEK LETTER PA LONSUM -+ /xea/xaf/x9f MEETEI MAYEK LETTER NA LONSUM -+ /xea/xaf/xa0 MEETEI MAYEK LETTER TIL LONSUM -+ /xea/xaf/xa1 MEETEI MAYEK LETTER NGOU LONSUM -+ /xea/xaf/xa2 MEETEI MAYEK LETTER I LONSUM -+ /xea/xaf/xa3 MEETEI MAYEK VOWEL SIGN ONAP -+ /xea/xaf/xa4 MEETEI MAYEK VOWEL SIGN INAP -+ /xea/xaf/xa5 MEETEI MAYEK VOWEL SIGN ANAP -+ /xea/xaf/xa6 MEETEI MAYEK VOWEL SIGN YENAP -+ /xea/xaf/xa7 MEETEI MAYEK VOWEL SIGN SOUNAP -+ /xea/xaf/xa8 MEETEI MAYEK VOWEL SIGN UNAP -+ /xea/xaf/xa9 MEETEI MAYEK VOWEL SIGN CHEINAP -+ /xea/xaf/xaa MEETEI MAYEK VOWEL SIGN NUNG -+ /xea/xaf/xab MEETEI MAYEK CHEIKHEI -+ /xea/xaf/xac MEETEI MAYEK LUM IYEK -+ /xea/xaf/xad MEETEI MAYEK APUN IYEK -+ /xea/xaf/xb0 MEETEI MAYEK DIGIT ZERO -+ /xea/xaf/xb1 MEETEI MAYEK DIGIT ONE -+ /xea/xaf/xb2 MEETEI MAYEK DIGIT TWO -+ /xea/xaf/xb3 MEETEI MAYEK DIGIT THREE -+ /xea/xaf/xb4 MEETEI MAYEK DIGIT FOUR -+ /xea/xaf/xb5 MEETEI MAYEK DIGIT FIVE -+ /xea/xaf/xb6 MEETEI MAYEK DIGIT SIX -+ /xea/xaf/xb7 MEETEI MAYEK DIGIT SEVEN -+ /xea/xaf/xb8 MEETEI MAYEK DIGIT EIGHT -+ /xea/xaf/xb9 MEETEI MAYEK DIGIT NINE - /xea/xb0/x80 HANGUL SYLLABLE GA - /xea/xb0/x81 HANGUL SYLLABLE GAG - /xea/xb0/x82 HANGUL SYLLABLE GAGG -@@ -24736,6 +25836,78 @@ CHARMAP - /xed/x9e/xa1 HANGUL SYLLABLE HIT - /xed/x9e/xa2 HANGUL SYLLABLE HIP - /xed/x9e/xa3 HANGUL SYLLABLE HIH -+ /xed/x9e/xb0 HANGUL JUNGSEONG O-YEO -+ /xed/x9e/xb1 HANGUL JUNGSEONG O-O-I -+ /xed/x9e/xb2 HANGUL JUNGSEONG YO-A -+ /xed/x9e/xb3 HANGUL JUNGSEONG YO-AE -+ /xed/x9e/xb4 HANGUL JUNGSEONG YO-EO -+ /xed/x9e/xb5 HANGUL JUNGSEONG U-YEO -+ /xed/x9e/xb6 HANGUL JUNGSEONG U-I-I -+ /xed/x9e/xb7 HANGUL JUNGSEONG YU-AE -+ /xed/x9e/xb8 HANGUL JUNGSEONG YU-O -+ /xed/x9e/xb9 HANGUL JUNGSEONG EU-A -+ /xed/x9e/xba HANGUL JUNGSEONG EU-EO -+ /xed/x9e/xbb HANGUL JUNGSEONG EU-E -+ /xed/x9e/xbc HANGUL JUNGSEONG EU-O -+ /xed/x9e/xbd HANGUL JUNGSEONG I-YA-O -+ /xed/x9e/xbe HANGUL JUNGSEONG I-YAE -+ /xed/x9e/xbf HANGUL JUNGSEONG I-YEO -+ /xed/x9f/x80 HANGUL JUNGSEONG I-YE -+ /xed/x9f/x81 HANGUL JUNGSEONG I-O-I -+ /xed/x9f/x82 HANGUL JUNGSEONG I-YO -+ /xed/x9f/x83 HANGUL JUNGSEONG I-YU -+ /xed/x9f/x84 HANGUL JUNGSEONG I-I -+ /xed/x9f/x85 HANGUL JUNGSEONG ARAEA-A -+ /xed/x9f/x86 HANGUL JUNGSEONG ARAEA-E -+ /xed/x9f/x8b HANGUL JONGSEONG NIEUN-RIEUL -+ /xed/x9f/x8c HANGUL JONGSEONG NIEUN-CHIEUCH -+ /xed/x9f/x8d HANGUL JONGSEONG SSANGTIKEUT -+ /xed/x9f/x8e HANGUL JONGSEONG SSANGTIKEUT-PIEUP -+ /xed/x9f/x8f HANGUL JONGSEONG TIKEUT-PIEUP -+ /xed/x9f/x90 HANGUL JONGSEONG TIKEUT-SIOS -+ /xed/x9f/x91 HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK -+ /xed/x9f/x92 HANGUL JONGSEONG TIKEUT-CIEUC -+ /xed/x9f/x93 HANGUL JONGSEONG TIKEUT-CHIEUCH -+ /xed/x9f/x94 HANGUL JONGSEONG TIKEUT-THIEUTH -+ /xed/x9f/x95 HANGUL JONGSEONG RIEUL-SSANGKIYEOK -+ /xed/x9f/x96 HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH -+ /xed/x9f/x97 HANGUL JONGSEONG SSANGRIEUL-KHIEUKH -+ /xed/x9f/x98 HANGUL JONGSEONG RIEUL-MIEUM-HIEUH -+ /xed/x9f/x99 HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT -+ /xed/x9f/x9a HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH -+ /xed/x9f/x9b HANGUL JONGSEONG RIEUL-YESIEUNG -+ /xed/x9f/x9c HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH -+ /xed/x9f/x9d HANGUL JONGSEONG KAPYEOUNRIEUL -+ /xed/x9f/x9e HANGUL JONGSEONG MIEUM-NIEUN -+ /xed/x9f/x9f HANGUL JONGSEONG MIEUM-SSANGNIEUN -+ /xed/x9f/xa0 HANGUL JONGSEONG SSANGMIEUM -+ /xed/x9f/xa1 HANGUL JONGSEONG MIEUM-PIEUP-SIOS -+ /xed/x9f/xa2 HANGUL JONGSEONG MIEUM-CIEUC -+ /xed/x9f/xa3 HANGUL JONGSEONG PIEUP-TIKEUT -+ /xed/x9f/xa4 HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH -+ /xed/x9f/xa5 HANGUL JONGSEONG PIEUP-MIEUM -+ /xed/x9f/xa6 HANGUL JONGSEONG SSANGPIEUP -+ /xed/x9f/xa7 HANGUL JONGSEONG PIEUP-SIOS-TIKEUT -+ /xed/x9f/xa8 HANGUL JONGSEONG PIEUP-CIEUC -+ /xed/x9f/xa9 HANGUL JONGSEONG PIEUP-CHIEUCH -+ /xed/x9f/xaa HANGUL JONGSEONG SIOS-MIEUM -+ /xed/x9f/xab HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP -+ /xed/x9f/xac HANGUL JONGSEONG SSANGSIOS-KIYEOK -+ /xed/x9f/xad HANGUL JONGSEONG SSANGSIOS-TIKEUT -+ /xed/x9f/xae HANGUL JONGSEONG SIOS-PANSIOS -+ /xed/x9f/xaf HANGUL JONGSEONG SIOS-CIEUC -+ /xed/x9f/xb0 HANGUL JONGSEONG SIOS-CHIEUCH -+ /xed/x9f/xb1 HANGUL JONGSEONG SIOS-THIEUTH -+ /xed/x9f/xb2 HANGUL JONGSEONG SIOS-HIEUH -+ /xed/x9f/xb3 HANGUL JONGSEONG PANSIOS-PIEUP -+ /xed/x9f/xb4 HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP -+ /xed/x9f/xb5 HANGUL JONGSEONG YESIEUNG-MIEUM -+ /xed/x9f/xb6 HANGUL JONGSEONG YESIEUNG-HIEUH -+ /xed/x9f/xb7 HANGUL JONGSEONG CIEUC-PIEUP -+ /xed/x9f/xb8 HANGUL JONGSEONG CIEUC-SSANGPIEUP -+ /xed/x9f/xb9 HANGUL JONGSEONG SSANGCIEUC -+ /xed/x9f/xba HANGUL JONGSEONG PHIEUPH-SIOS -+ /xed/x9f/xbb HANGUL JONGSEONG PHIEUPH-THIEUTH - % /xed/xa0/x80 - % /xed/xad/xbf - % /xed/xae/x80 -@@ -25203,6 +26375,9 @@ CHARMAP - /xef/xa9/xa8 CJK COMPATIBILITY IDEOGRAPH-FA68 - /xef/xa9/xa9 CJK COMPATIBILITY IDEOGRAPH-FA69 - /xef/xa9/xaa CJK COMPATIBILITY IDEOGRAPH-FA6A -+ /xef/xa9/xab CJK COMPATIBILITY IDEOGRAPH-FA6B -+ /xef/xa9/xac CJK COMPATIBILITY IDEOGRAPH-FA6C -+ /xef/xa9/xad CJK COMPATIBILITY IDEOGRAPH-FA6D - /xef/xa9/xb0 CJK COMPATIBILITY IDEOGRAPH-FA70 - /xef/xa9/xb1 CJK COMPATIBILITY IDEOGRAPH-FA71 - /xef/xa9/xb2 CJK COMPATIBILITY IDEOGRAPH-FA72 -@@ -25465,6 +26640,22 @@ CHARMAP - /xef/xae/xaf ARABIC LETTER YEH BARREE FINAL FORM - /xef/xae/xb0 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM - /xef/xae/xb1 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM -+ /xef/xae/xb2 ARABIC SYMBOL DOT ABOVE -+ /xef/xae/xb3 ARABIC SYMBOL DOT BELOW -+ /xef/xae/xb4 ARABIC SYMBOL TWO DOTS ABOVE -+ /xef/xae/xb5 ARABIC SYMBOL TWO DOTS BELOW -+ /xef/xae/xb6 ARABIC SYMBOL THREE DOTS ABOVE -+ /xef/xae/xb7 ARABIC SYMBOL THREE DOTS BELOW -+ /xef/xae/xb8 ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE -+ /xef/xae/xb9 ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW -+ /xef/xae/xba ARABIC SYMBOL FOUR DOTS ABOVE -+ /xef/xae/xbb ARABIC SYMBOL FOUR DOTS BELOW -+ /xef/xae/xbc ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW -+ /xef/xae/xbd ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE -+ /xef/xae/xbe ARABIC SYMBOL TWO DOTS VERTICALLY BELOW -+ /xef/xae/xbf ARABIC SYMBOL RING -+ /xef/xaf/x80 ARABIC SYMBOL SMALL TAH ABOVE -+ /xef/xaf/x81 ARABIC SYMBOL SMALL TAH BELOW - /xef/xaf/x93 ARABIC LETTER NG ISOLATED FORM - /xef/xaf/x94 ARABIC LETTER NG FINAL FORM - /xef/xaf/x95 ARABIC LETTER NG INITIAL FORM -@@ -27269,6 +28460,37 @@ CHARMAP - /xf0/x90/xa0/xb8 CYPRIOT SYLLABLE XE - /xf0/x90/xa0/xbc CYPRIOT SYLLABLE ZA - /xf0/x90/xa0/xbf CYPRIOT SYLLABLE ZO -+ /xf0/x90/xa1/x80 IMPERIAL ARAMAIC LETTER ALEPH -+ /xf0/x90/xa1/x81 IMPERIAL ARAMAIC LETTER BETH -+ /xf0/x90/xa1/x82 IMPERIAL ARAMAIC LETTER GIMEL -+ /xf0/x90/xa1/x83 IMPERIAL ARAMAIC LETTER DALETH -+ /xf0/x90/xa1/x84 IMPERIAL ARAMAIC LETTER HE -+ /xf0/x90/xa1/x85 IMPERIAL ARAMAIC LETTER WAW -+ /xf0/x90/xa1/x86 IMPERIAL ARAMAIC LETTER ZAYIN -+ /xf0/x90/xa1/x87 IMPERIAL ARAMAIC LETTER HETH -+ /xf0/x90/xa1/x88 IMPERIAL ARAMAIC LETTER TETH -+ /xf0/x90/xa1/x89 IMPERIAL ARAMAIC LETTER YODH -+ /xf0/x90/xa1/x8a IMPERIAL ARAMAIC LETTER KAPH -+ /xf0/x90/xa1/x8b IMPERIAL ARAMAIC LETTER LAMEDH -+ /xf0/x90/xa1/x8c IMPERIAL ARAMAIC LETTER MEM -+ /xf0/x90/xa1/x8d IMPERIAL ARAMAIC LETTER NUN -+ /xf0/x90/xa1/x8e IMPERIAL ARAMAIC LETTER SAMEKH -+ /xf0/x90/xa1/x8f IMPERIAL ARAMAIC LETTER AYIN -+ /xf0/x90/xa1/x90 IMPERIAL ARAMAIC LETTER PE -+ /xf0/x90/xa1/x91 IMPERIAL ARAMAIC LETTER SADHE -+ /xf0/x90/xa1/x92 IMPERIAL ARAMAIC LETTER QOPH -+ /xf0/x90/xa1/x93 IMPERIAL ARAMAIC LETTER RESH -+ /xf0/x90/xa1/x94 IMPERIAL ARAMAIC LETTER SHIN -+ /xf0/x90/xa1/x95 IMPERIAL ARAMAIC LETTER TAW -+ /xf0/x90/xa1/x97 IMPERIAL ARAMAIC SECTION SIGN -+ /xf0/x90/xa1/x98 IMPERIAL ARAMAIC NUMBER ONE -+ /xf0/x90/xa1/x99 IMPERIAL ARAMAIC NUMBER TWO -+ /xf0/x90/xa1/x9a IMPERIAL ARAMAIC NUMBER THREE -+ /xf0/x90/xa1/x9b IMPERIAL ARAMAIC NUMBER TEN -+ /xf0/x90/xa1/x9c IMPERIAL ARAMAIC NUMBER TWENTY -+ /xf0/x90/xa1/x9d IMPERIAL ARAMAIC NUMBER ONE HUNDRED -+ /xf0/x90/xa1/x9e IMPERIAL ARAMAIC NUMBER ONE THOUSAND -+ /xf0/x90/xa1/x9f IMPERIAL ARAMAIC NUMBER TEN THOUSAND - /xf0/x90/xa4/x80 PHOENICIAN LETTER ALF - /xf0/x90/xa4/x81 PHOENICIAN LETTER BET - /xf0/x90/xa4/x82 PHOENICIAN LETTER GAML -@@ -27295,6 +28517,8 @@ CHARMAP - /xf0/x90/xa4/x97 PHOENICIAN NUMBER TEN - /xf0/x90/xa4/x98 PHOENICIAN NUMBER TWENTY - /xf0/x90/xa4/x99 PHOENICIAN NUMBER ONE HUNDRED -+ /xf0/x90/xa4/x9a PHOENICIAN NUMBER TWO -+ /xf0/x90/xa4/x9b PHOENICIAN NUMBER THREE - /xf0/x90/xa4/x9f PHOENICIAN WORD SEPARATOR - /xf0/x90/xa4/xa0 LYDIAN LETTER A - /xf0/x90/xa4/xa1 LYDIAN LETTER B -@@ -27388,6 +28612,434 @@ CHARMAP - /xf0/x90/xa9/x96 KHAROSHTHI PUNCTUATION DANDA - /xf0/x90/xa9/x97 KHAROSHTHI PUNCTUATION DOUBLE DANDA - /xf0/x90/xa9/x98 KHAROSHTHI PUNCTUATION LINES -+ /xf0/x90/xa9/xa0 OLD SOUTH ARABIAN LETTER HE -+ /xf0/x90/xa9/xa1 OLD SOUTH ARABIAN LETTER LAMEDH -+ /xf0/x90/xa9/xa2 OLD SOUTH ARABIAN LETTER HETH -+ /xf0/x90/xa9/xa3 OLD SOUTH ARABIAN LETTER MEM -+ /xf0/x90/xa9/xa4 OLD SOUTH ARABIAN LETTER QOPH -+ /xf0/x90/xa9/xa5 OLD SOUTH ARABIAN LETTER WAW -+ /xf0/x90/xa9/xa6 OLD SOUTH ARABIAN LETTER SHIN -+ /xf0/x90/xa9/xa7 OLD SOUTH ARABIAN LETTER RESH -+ /xf0/x90/xa9/xa8 OLD SOUTH ARABIAN LETTER BETH -+ /xf0/x90/xa9/xa9 OLD SOUTH ARABIAN LETTER TAW -+ /xf0/x90/xa9/xaa OLD SOUTH ARABIAN LETTER SAT -+ /xf0/x90/xa9/xab OLD SOUTH ARABIAN LETTER KAPH -+ /xf0/x90/xa9/xac OLD SOUTH ARABIAN LETTER NUN -+ /xf0/x90/xa9/xad OLD SOUTH ARABIAN LETTER KHETH -+ /xf0/x90/xa9/xae OLD SOUTH ARABIAN LETTER SADHE -+ /xf0/x90/xa9/xaf OLD SOUTH ARABIAN LETTER SAMEKH -+ /xf0/x90/xa9/xb0 OLD SOUTH ARABIAN LETTER FE -+ /xf0/x90/xa9/xb1 OLD SOUTH ARABIAN LETTER ALEF -+ /xf0/x90/xa9/xb2 OLD SOUTH ARABIAN LETTER AYN -+ /xf0/x90/xa9/xb3 OLD SOUTH ARABIAN LETTER DHADHE -+ /xf0/x90/xa9/xb4 OLD SOUTH ARABIAN LETTER GIMEL -+ /xf0/x90/xa9/xb5 OLD SOUTH ARABIAN LETTER DALETH -+ /xf0/x90/xa9/xb6 OLD SOUTH ARABIAN LETTER GHAYN -+ /xf0/x90/xa9/xb7 OLD SOUTH ARABIAN LETTER TETH -+ /xf0/x90/xa9/xb8 OLD SOUTH ARABIAN LETTER ZAYN -+ /xf0/x90/xa9/xb9 OLD SOUTH ARABIAN LETTER DHALETH -+ /xf0/x90/xa9/xba OLD SOUTH ARABIAN LETTER YODH -+ /xf0/x90/xa9/xbb OLD SOUTH ARABIAN LETTER THAW -+ /xf0/x90/xa9/xbc OLD SOUTH ARABIAN LETTER THETH -+ /xf0/x90/xa9/xbd OLD SOUTH ARABIAN NUMBER ONE -+ /xf0/x90/xa9/xbe OLD SOUTH ARABIAN NUMBER FIFTY -+ /xf0/x90/xa9/xbf OLD SOUTH ARABIAN NUMERIC INDICATOR -+ /xf0/x90/xac/x80 AVESTAN LETTER A -+ /xf0/x90/xac/x81 AVESTAN LETTER AA -+ /xf0/x90/xac/x82 AVESTAN LETTER AO -+ /xf0/x90/xac/x83 AVESTAN LETTER AAO -+ /xf0/x90/xac/x84 AVESTAN LETTER AN -+ /xf0/x90/xac/x85 AVESTAN LETTER AAN -+ /xf0/x90/xac/x86 AVESTAN LETTER AE -+ /xf0/x90/xac/x87 AVESTAN LETTER AEE -+ /xf0/x90/xac/x88 AVESTAN LETTER E -+ /xf0/x90/xac/x89 AVESTAN LETTER EE -+ /xf0/x90/xac/x8a AVESTAN LETTER O -+ /xf0/x90/xac/x8b AVESTAN LETTER OO -+ /xf0/x90/xac/x8c AVESTAN LETTER I -+ /xf0/x90/xac/x8d AVESTAN LETTER II -+ /xf0/x90/xac/x8e AVESTAN LETTER U -+ /xf0/x90/xac/x8f AVESTAN LETTER UU -+ /xf0/x90/xac/x90 AVESTAN LETTER KE -+ /xf0/x90/xac/x91 AVESTAN LETTER XE -+ /xf0/x90/xac/x92 AVESTAN LETTER XYE -+ /xf0/x90/xac/x93 AVESTAN LETTER XVE -+ /xf0/x90/xac/x94 AVESTAN LETTER GE -+ /xf0/x90/xac/x95 AVESTAN LETTER GGE -+ /xf0/x90/xac/x96 AVESTAN LETTER GHE -+ /xf0/x90/xac/x97 AVESTAN LETTER CE -+ /xf0/x90/xac/x98 AVESTAN LETTER JE -+ /xf0/x90/xac/x99 AVESTAN LETTER TE -+ /xf0/x90/xac/x9a AVESTAN LETTER THE -+ /xf0/x90/xac/x9b AVESTAN LETTER DE -+ /xf0/x90/xac/x9c AVESTAN LETTER DHE -+ /xf0/x90/xac/x9d AVESTAN LETTER TTE -+ /xf0/x90/xac/x9e AVESTAN LETTER PE -+ /xf0/x90/xac/x9f AVESTAN LETTER FE -+ /xf0/x90/xac/xa0 AVESTAN LETTER BE -+ /xf0/x90/xac/xa1 AVESTAN LETTER BHE -+ /xf0/x90/xac/xa2 AVESTAN LETTER NGE -+ /xf0/x90/xac/xa3 AVESTAN LETTER NGYE -+ /xf0/x90/xac/xa4 AVESTAN LETTER NGVE -+ /xf0/x90/xac/xa5 AVESTAN LETTER NE -+ /xf0/x90/xac/xa6 AVESTAN LETTER NYE -+ /xf0/x90/xac/xa7 AVESTAN LETTER NNE -+ /xf0/x90/xac/xa8 AVESTAN LETTER ME -+ /xf0/x90/xac/xa9 AVESTAN LETTER HME -+ /xf0/x90/xac/xaa AVESTAN LETTER YYE -+ /xf0/x90/xac/xab AVESTAN LETTER YE -+ /xf0/x90/xac/xac AVESTAN LETTER VE -+ /xf0/x90/xac/xad AVESTAN LETTER RE -+ /xf0/x90/xac/xae AVESTAN LETTER LE -+ /xf0/x90/xac/xaf AVESTAN LETTER SE -+ /xf0/x90/xac/xb0 AVESTAN LETTER ZE -+ /xf0/x90/xac/xb1 AVESTAN LETTER SHE -+ /xf0/x90/xac/xb2 AVESTAN LETTER ZHE -+ /xf0/x90/xac/xb3 AVESTAN LETTER SHYE -+ /xf0/x90/xac/xb4 AVESTAN LETTER SSHE -+ /xf0/x90/xac/xb5 AVESTAN LETTER HE -+ /xf0/x90/xac/xb9 AVESTAN ABBREVIATION MARK -+ /xf0/x90/xac/xba TINY TWO DOTS OVER ONE DOT PUNCTUATION -+ /xf0/x90/xac/xbb SMALL TWO DOTS OVER ONE DOT PUNCTUATION -+ /xf0/x90/xac/xbc LARGE TWO DOTS OVER ONE DOT PUNCTUATION -+ /xf0/x90/xac/xbd LARGE ONE DOT OVER TWO DOTS PUNCTUATION -+ /xf0/x90/xac/xbe LARGE TWO RINGS OVER ONE RING PUNCTUATION -+ /xf0/x90/xac/xbf LARGE ONE RING OVER TWO RINGS PUNCTUATION -+ /xf0/x90/xad/x80 INSCRIPTIONAL PARTHIAN LETTER ALEPH -+ /xf0/x90/xad/x81 INSCRIPTIONAL PARTHIAN LETTER BETH -+ /xf0/x90/xad/x82 INSCRIPTIONAL PARTHIAN LETTER GIMEL -+ /xf0/x90/xad/x83 INSCRIPTIONAL PARTHIAN LETTER DALETH -+ /xf0/x90/xad/x84 INSCRIPTIONAL PARTHIAN LETTER HE -+ /xf0/x90/xad/x85 INSCRIPTIONAL PARTHIAN LETTER WAW -+ /xf0/x90/xad/x86 INSCRIPTIONAL PARTHIAN LETTER ZAYIN -+ /xf0/x90/xad/x87 INSCRIPTIONAL PARTHIAN LETTER HETH -+ /xf0/x90/xad/x88 INSCRIPTIONAL PARTHIAN LETTER TETH -+ /xf0/x90/xad/x89 INSCRIPTIONAL PARTHIAN LETTER YODH -+ /xf0/x90/xad/x8a INSCRIPTIONAL PARTHIAN LETTER KAPH -+ /xf0/x90/xad/x8b INSCRIPTIONAL PARTHIAN LETTER LAMEDH -+ /xf0/x90/xad/x8c INSCRIPTIONAL PARTHIAN LETTER MEM -+ /xf0/x90/xad/x8d INSCRIPTIONAL PARTHIAN LETTER NUN -+ /xf0/x90/xad/x8e INSCRIPTIONAL PARTHIAN LETTER SAMEKH -+ /xf0/x90/xad/x8f INSCRIPTIONAL PARTHIAN LETTER AYIN -+ /xf0/x90/xad/x90 INSCRIPTIONAL PARTHIAN LETTER PE -+ /xf0/x90/xad/x91 INSCRIPTIONAL PARTHIAN LETTER SADHE -+ /xf0/x90/xad/x92 INSCRIPTIONAL PARTHIAN LETTER QOPH -+ /xf0/x90/xad/x93 INSCRIPTIONAL PARTHIAN LETTER RESH -+ /xf0/x90/xad/x94 INSCRIPTIONAL PARTHIAN LETTER SHIN -+ /xf0/x90/xad/x95 INSCRIPTIONAL PARTHIAN LETTER TAW -+ /xf0/x90/xad/x98 INSCRIPTIONAL PARTHIAN NUMBER ONE -+ /xf0/x90/xad/x99 INSCRIPTIONAL PARTHIAN NUMBER TWO -+ /xf0/x90/xad/x9a INSCRIPTIONAL PARTHIAN NUMBER THREE -+ /xf0/x90/xad/x9b INSCRIPTIONAL PARTHIAN NUMBER FOUR -+ /xf0/x90/xad/x9c INSCRIPTIONAL PARTHIAN NUMBER TEN -+ /xf0/x90/xad/x9d INSCRIPTIONAL PARTHIAN NUMBER TWENTY -+ /xf0/x90/xad/x9e INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED -+ /xf0/x90/xad/x9f INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND -+ /xf0/x90/xad/xa0 INSCRIPTIONAL PAHLAVI LETTER ALEPH -+ /xf0/x90/xad/xa1 INSCRIPTIONAL PAHLAVI LETTER BETH -+ /xf0/x90/xad/xa2 INSCRIPTIONAL PAHLAVI LETTER GIMEL -+ /xf0/x90/xad/xa3 INSCRIPTIONAL PAHLAVI LETTER DALETH -+ /xf0/x90/xad/xa4 INSCRIPTIONAL PAHLAVI LETTER HE -+ /xf0/x90/xad/xa5 INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH -+ /xf0/x90/xad/xa6 INSCRIPTIONAL PAHLAVI LETTER ZAYIN -+ /xf0/x90/xad/xa7 INSCRIPTIONAL PAHLAVI LETTER HETH -+ /xf0/x90/xad/xa8 INSCRIPTIONAL PAHLAVI LETTER TETH -+ /xf0/x90/xad/xa9 INSCRIPTIONAL PAHLAVI LETTER YODH -+ /xf0/x90/xad/xaa INSCRIPTIONAL PAHLAVI LETTER KAPH -+ /xf0/x90/xad/xab INSCRIPTIONAL PAHLAVI LETTER LAMEDH -+ /xf0/x90/xad/xac INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH -+ /xf0/x90/xad/xad INSCRIPTIONAL PAHLAVI LETTER NUN -+ /xf0/x90/xad/xae INSCRIPTIONAL PAHLAVI LETTER SAMEKH -+ /xf0/x90/xad/xaf INSCRIPTIONAL PAHLAVI LETTER PE -+ /xf0/x90/xad/xb0 INSCRIPTIONAL PAHLAVI LETTER SADHE -+ /xf0/x90/xad/xb1 INSCRIPTIONAL PAHLAVI LETTER SHIN -+ /xf0/x90/xad/xb2 INSCRIPTIONAL PAHLAVI LETTER TAW -+ /xf0/x90/xad/xb8 INSCRIPTIONAL PAHLAVI NUMBER ONE -+ /xf0/x90/xad/xb9 INSCRIPTIONAL PAHLAVI NUMBER TWO -+ /xf0/x90/xad/xba INSCRIPTIONAL PAHLAVI NUMBER THREE -+ /xf0/x90/xad/xbb INSCRIPTIONAL PAHLAVI NUMBER FOUR -+ /xf0/x90/xad/xbc INSCRIPTIONAL PAHLAVI NUMBER TEN -+ /xf0/x90/xad/xbd INSCRIPTIONAL PAHLAVI NUMBER TWENTY -+ /xf0/x90/xad/xbe INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED -+ /xf0/x90/xad/xbf INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND -+ /xf0/x90/xb0/x80 OLD TURKIC LETTER ORKHON A -+ /xf0/x90/xb0/x81 OLD TURKIC LETTER YENISEI A -+ /xf0/x90/xb0/x82 OLD TURKIC LETTER YENISEI AE -+ /xf0/x90/xb0/x83 OLD TURKIC LETTER ORKHON I -+ /xf0/x90/xb0/x84 OLD TURKIC LETTER YENISEI I -+ /xf0/x90/xb0/x85 OLD TURKIC LETTER YENISEI E -+ /xf0/x90/xb0/x86 OLD TURKIC LETTER ORKHON O -+ /xf0/x90/xb0/x87 OLD TURKIC LETTER ORKHON OE -+ /xf0/x90/xb0/x88 OLD TURKIC LETTER YENISEI OE -+ /xf0/x90/xb0/x89 OLD TURKIC LETTER ORKHON AB -+ /xf0/x90/xb0/x8a OLD TURKIC LETTER YENISEI AB -+ /xf0/x90/xb0/x8b OLD TURKIC LETTER ORKHON AEB -+ /xf0/x90/xb0/x8c OLD TURKIC LETTER YENISEI AEB -+ /xf0/x90/xb0/x8d OLD TURKIC LETTER ORKHON AG -+ /xf0/x90/xb0/x8e OLD TURKIC LETTER YENISEI AG -+ /xf0/x90/xb0/x8f OLD TURKIC LETTER ORKHON AEG -+ /xf0/x90/xb0/x90 OLD TURKIC LETTER YENISEI AEG -+ /xf0/x90/xb0/x91 OLD TURKIC LETTER ORKHON AD -+ /xf0/x90/xb0/x92 OLD TURKIC LETTER YENISEI AD -+ /xf0/x90/xb0/x93 OLD TURKIC LETTER ORKHON AED -+ /xf0/x90/xb0/x94 OLD TURKIC LETTER ORKHON EZ -+ /xf0/x90/xb0/x95 OLD TURKIC LETTER YENISEI EZ -+ /xf0/x90/xb0/x96 OLD TURKIC LETTER ORKHON AY -+ /xf0/x90/xb0/x97 OLD TURKIC LETTER YENISEI AY -+ /xf0/x90/xb0/x98 OLD TURKIC LETTER ORKHON AEY -+ /xf0/x90/xb0/x99 OLD TURKIC LETTER YENISEI AEY -+ /xf0/x90/xb0/x9a OLD TURKIC LETTER ORKHON AEK -+ /xf0/x90/xb0/x9b OLD TURKIC LETTER YENISEI AEK -+ /xf0/x90/xb0/x9c OLD TURKIC LETTER ORKHON OEK -+ /xf0/x90/xb0/x9d OLD TURKIC LETTER YENISEI OEK -+ /xf0/x90/xb0/x9e OLD TURKIC LETTER ORKHON AL -+ /xf0/x90/xb0/x9f OLD TURKIC LETTER YENISEI AL -+ /xf0/x90/xb0/xa0 OLD TURKIC LETTER ORKHON AEL -+ /xf0/x90/xb0/xa1 OLD TURKIC LETTER ORKHON ELT -+ /xf0/x90/xb0/xa2 OLD TURKIC LETTER ORKHON EM -+ /xf0/x90/xb0/xa3 OLD TURKIC LETTER ORKHON AN -+ /xf0/x90/xb0/xa4 OLD TURKIC LETTER ORKHON AEN -+ /xf0/x90/xb0/xa5 OLD TURKIC LETTER YENISEI AEN -+ /xf0/x90/xb0/xa6 OLD TURKIC LETTER ORKHON ENT -+ /xf0/x90/xb0/xa7 OLD TURKIC LETTER YENISEI ENT -+ /xf0/x90/xb0/xa8 OLD TURKIC LETTER ORKHON ENC -+ /xf0/x90/xb0/xa9 OLD TURKIC LETTER YENISEI ENC -+ /xf0/x90/xb0/xaa OLD TURKIC LETTER ORKHON ENY -+ /xf0/x90/xb0/xab OLD TURKIC LETTER YENISEI ENY -+ /xf0/x90/xb0/xac OLD TURKIC LETTER YENISEI ANG -+ /xf0/x90/xb0/xad OLD TURKIC LETTER ORKHON ENG -+ /xf0/x90/xb0/xae OLD TURKIC LETTER YENISEI AENG -+ /xf0/x90/xb0/xaf OLD TURKIC LETTER ORKHON EP -+ /xf0/x90/xb0/xb0 OLD TURKIC LETTER ORKHON OP -+ /xf0/x90/xb0/xb1 OLD TURKIC LETTER ORKHON IC -+ /xf0/x90/xb0/xb2 OLD TURKIC LETTER ORKHON EC -+ /xf0/x90/xb0/xb3 OLD TURKIC LETTER YENISEI EC -+ /xf0/x90/xb0/xb4 OLD TURKIC LETTER ORKHON AQ -+ /xf0/x90/xb0/xb5 OLD TURKIC LETTER YENISEI AQ -+ /xf0/x90/xb0/xb6 OLD TURKIC LETTER ORKHON IQ -+ /xf0/x90/xb0/xb7 OLD TURKIC LETTER YENISEI IQ -+ /xf0/x90/xb0/xb8 OLD TURKIC LETTER ORKHON OQ -+ /xf0/x90/xb0/xb9 OLD TURKIC LETTER YENISEI OQ -+ /xf0/x90/xb0/xba OLD TURKIC LETTER ORKHON AR -+ /xf0/x90/xb0/xbb OLD TURKIC LETTER YENISEI AR -+ /xf0/x90/xb0/xbc OLD TURKIC LETTER ORKHON AER -+ /xf0/x90/xb0/xbd OLD TURKIC LETTER ORKHON AS -+ /xf0/x90/xb0/xbe OLD TURKIC LETTER ORKHON AES -+ /xf0/x90/xb0/xbf OLD TURKIC LETTER ORKHON ASH -+ /xf0/x90/xb1/x80 OLD TURKIC LETTER YENISEI ASH -+ /xf0/x90/xb1/x81 OLD TURKIC LETTER ORKHON ESH -+ /xf0/x90/xb1/x82 OLD TURKIC LETTER YENISEI ESH -+ /xf0/x90/xb1/x83 OLD TURKIC LETTER ORKHON AT -+ /xf0/x90/xb1/x84 OLD TURKIC LETTER YENISEI AT -+ /xf0/x90/xb1/x85 OLD TURKIC LETTER ORKHON AET -+ /xf0/x90/xb1/x86 OLD TURKIC LETTER YENISEI AET -+ /xf0/x90/xb1/x87 OLD TURKIC LETTER ORKHON OT -+ /xf0/x90/xb1/x88 OLD TURKIC LETTER ORKHON BASH -+ /xf0/x90/xb9/xa0 RUMI DIGIT ONE -+ /xf0/x90/xb9/xa1 RUMI DIGIT TWO -+ /xf0/x90/xb9/xa2 RUMI DIGIT THREE -+ /xf0/x90/xb9/xa3 RUMI DIGIT FOUR -+ /xf0/x90/xb9/xa4 RUMI DIGIT FIVE -+ /xf0/x90/xb9/xa5 RUMI DIGIT SIX -+ /xf0/x90/xb9/xa6 RUMI DIGIT SEVEN -+ /xf0/x90/xb9/xa7 RUMI DIGIT EIGHT -+ /xf0/x90/xb9/xa8 RUMI DIGIT NINE -+ /xf0/x90/xb9/xa9 RUMI NUMBER TEN -+ /xf0/x90/xb9/xaa RUMI NUMBER TWENTY -+ /xf0/x90/xb9/xab RUMI NUMBER THIRTY -+ /xf0/x90/xb9/xac RUMI NUMBER FORTY -+ /xf0/x90/xb9/xad RUMI NUMBER FIFTY -+ /xf0/x90/xb9/xae RUMI NUMBER SIXTY -+ /xf0/x90/xb9/xaf RUMI NUMBER SEVENTY -+ /xf0/x90/xb9/xb0 RUMI NUMBER EIGHTY -+ /xf0/x90/xb9/xb1 RUMI NUMBER NINETY -+ /xf0/x90/xb9/xb2 RUMI NUMBER ONE HUNDRED -+ /xf0/x90/xb9/xb3 RUMI NUMBER TWO HUNDRED -+ /xf0/x90/xb9/xb4 RUMI NUMBER THREE HUNDRED -+ /xf0/x90/xb9/xb5 RUMI NUMBER FOUR HUNDRED -+ /xf0/x90/xb9/xb6 RUMI NUMBER FIVE HUNDRED -+ /xf0/x90/xb9/xb7 RUMI NUMBER SIX HUNDRED -+ /xf0/x90/xb9/xb8 RUMI NUMBER SEVEN HUNDRED -+ /xf0/x90/xb9/xb9 RUMI NUMBER EIGHT HUNDRED -+ /xf0/x90/xb9/xba RUMI NUMBER NINE HUNDRED -+ /xf0/x90/xb9/xbb RUMI FRACTION ONE HALF -+ /xf0/x90/xb9/xbc RUMI FRACTION ONE QUARTER -+ /xf0/x90/xb9/xbd RUMI FRACTION ONE THIRD -+ /xf0/x90/xb9/xbe RUMI FRACTION TWO THIRDS -+ /xf0/x91/x80/x80 BRAHMI SIGN CANDRABINDU -+ /xf0/x91/x80/x81 BRAHMI SIGN ANUSVARA -+ /xf0/x91/x80/x82 BRAHMI SIGN VISARGA -+ /xf0/x91/x80/x83 BRAHMI SIGN JIHVAMULIYA -+ /xf0/x91/x80/x84 BRAHMI SIGN UPADHMANIYA -+ /xf0/x91/x80/x85 BRAHMI LETTER A -+ /xf0/x91/x80/x86 BRAHMI LETTER AA -+ /xf0/x91/x80/x87 BRAHMI LETTER I -+ /xf0/x91/x80/x88 BRAHMI LETTER II -+ /xf0/x91/x80/x89 BRAHMI LETTER U -+ /xf0/x91/x80/x8a BRAHMI LETTER UU -+ /xf0/x91/x80/x8b BRAHMI LETTER VOCALIC R -+ /xf0/x91/x80/x8c BRAHMI LETTER VOCALIC RR -+ /xf0/x91/x80/x8d BRAHMI LETTER VOCALIC L -+ /xf0/x91/x80/x8e BRAHMI LETTER VOCALIC LL -+ /xf0/x91/x80/x8f BRAHMI LETTER E -+ /xf0/x91/x80/x90 BRAHMI LETTER AI -+ /xf0/x91/x80/x91 BRAHMI LETTER O -+ /xf0/x91/x80/x92 BRAHMI LETTER AU -+ /xf0/x91/x80/x93 BRAHMI LETTER KA -+ /xf0/x91/x80/x94 BRAHMI LETTER KHA -+ /xf0/x91/x80/x95 BRAHMI LETTER GA -+ /xf0/x91/x80/x96 BRAHMI LETTER GHA -+ /xf0/x91/x80/x97 BRAHMI LETTER NGA -+ /xf0/x91/x80/x98 BRAHMI LETTER CA -+ /xf0/x91/x80/x99 BRAHMI LETTER CHA -+ /xf0/x91/x80/x9a BRAHMI LETTER JA -+ /xf0/x91/x80/x9b BRAHMI LETTER JHA -+ /xf0/x91/x80/x9c BRAHMI LETTER NYA -+ /xf0/x91/x80/x9d BRAHMI LETTER TTA -+ /xf0/x91/x80/x9e BRAHMI LETTER TTHA -+ /xf0/x91/x80/x9f BRAHMI LETTER DDA -+ /xf0/x91/x80/xa0 BRAHMI LETTER DDHA -+ /xf0/x91/x80/xa1 BRAHMI LETTER NNA -+ /xf0/x91/x80/xa2 BRAHMI LETTER TA -+ /xf0/x91/x80/xa3 BRAHMI LETTER THA -+ /xf0/x91/x80/xa4 BRAHMI LETTER DA -+ /xf0/x91/x80/xa5 BRAHMI LETTER DHA -+ /xf0/x91/x80/xa6 BRAHMI LETTER NA -+ /xf0/x91/x80/xa7 BRAHMI LETTER PA -+ /xf0/x91/x80/xa8 BRAHMI LETTER PHA -+ /xf0/x91/x80/xa9 BRAHMI LETTER BA -+ /xf0/x91/x80/xaa BRAHMI LETTER BHA -+ /xf0/x91/x80/xab BRAHMI LETTER MA -+ /xf0/x91/x80/xac BRAHMI LETTER YA -+ /xf0/x91/x80/xad BRAHMI LETTER RA -+ /xf0/x91/x80/xae BRAHMI LETTER LA -+ /xf0/x91/x80/xaf BRAHMI LETTER VA -+ /xf0/x91/x80/xb0 BRAHMI LETTER SHA -+ /xf0/x91/x80/xb1 BRAHMI LETTER SSA -+ /xf0/x91/x80/xb2 BRAHMI LETTER SA -+ /xf0/x91/x80/xb3 BRAHMI LETTER HA -+ /xf0/x91/x80/xb4 BRAHMI LETTER LLA -+ /xf0/x91/x80/xb5 BRAHMI LETTER OLD TAMIL LLLA -+ /xf0/x91/x80/xb6 BRAHMI LETTER OLD TAMIL RRA -+ /xf0/x91/x80/xb7 BRAHMI LETTER OLD TAMIL NNNA -+ /xf0/x91/x80/xb8 BRAHMI VOWEL SIGN AA -+ /xf0/x91/x80/xb9 BRAHMI VOWEL SIGN BHATTIPROLU AA -+ /xf0/x91/x80/xba BRAHMI VOWEL SIGN I -+ /xf0/x91/x80/xbb BRAHMI VOWEL SIGN II -+ /xf0/x91/x80/xbc BRAHMI VOWEL SIGN U -+ /xf0/x91/x80/xbd BRAHMI VOWEL SIGN UU -+ /xf0/x91/x80/xbe BRAHMI VOWEL SIGN VOCALIC R -+ /xf0/x91/x80/xbf BRAHMI VOWEL SIGN VOCALIC RR -+ /xf0/x91/x81/x80 BRAHMI VOWEL SIGN VOCALIC L -+ /xf0/x91/x81/x81 BRAHMI VOWEL SIGN VOCALIC LL -+ /xf0/x91/x81/x82 BRAHMI VOWEL SIGN E -+ /xf0/x91/x81/x83 BRAHMI VOWEL SIGN AI -+ /xf0/x91/x81/x84 BRAHMI VOWEL SIGN O -+ /xf0/x91/x81/x85 BRAHMI VOWEL SIGN AU -+ /xf0/x91/x81/x86 BRAHMI VIRAMA -+ /xf0/x91/x81/x87 BRAHMI DANDA -+ /xf0/x91/x81/x88 BRAHMI DOUBLE DANDA -+ /xf0/x91/x81/x89 BRAHMI PUNCTUATION DOT -+ /xf0/x91/x81/x8a BRAHMI PUNCTUATION DOUBLE DOT -+ /xf0/x91/x81/x8b BRAHMI PUNCTUATION LINE -+ /xf0/x91/x81/x8c BRAHMI PUNCTUATION CRESCENT BAR -+ /xf0/x91/x81/x8d BRAHMI PUNCTUATION LOTUS -+ /xf0/x91/x81/x92 BRAHMI NUMBER ONE -+ /xf0/x91/x81/x93 BRAHMI NUMBER TWO -+ /xf0/x91/x81/x94 BRAHMI NUMBER THREE -+ /xf0/x91/x81/x95 BRAHMI NUMBER FOUR -+ /xf0/x91/x81/x96 BRAHMI NUMBER FIVE -+ /xf0/x91/x81/x97 BRAHMI NUMBER SIX -+ /xf0/x91/x81/x98 BRAHMI NUMBER SEVEN -+ /xf0/x91/x81/x99 BRAHMI NUMBER EIGHT -+ /xf0/x91/x81/x9a BRAHMI NUMBER NINE -+ /xf0/x91/x81/x9b BRAHMI NUMBER TEN -+ /xf0/x91/x81/x9c BRAHMI NUMBER TWENTY -+ /xf0/x91/x81/x9d BRAHMI NUMBER THIRTY -+ /xf0/x91/x81/x9e BRAHMI NUMBER FORTY -+ /xf0/x91/x81/x9f BRAHMI NUMBER FIFTY -+ /xf0/x91/x81/xa0 BRAHMI NUMBER SIXTY -+ /xf0/x91/x81/xa1 BRAHMI NUMBER SEVENTY -+ /xf0/x91/x81/xa2 BRAHMI NUMBER EIGHTY -+ /xf0/x91/x81/xa3 BRAHMI NUMBER NINETY -+ /xf0/x91/x81/xa4 BRAHMI NUMBER ONE HUNDRED -+ /xf0/x91/x81/xa5 BRAHMI NUMBER ONE THOUSAND -+ /xf0/x91/x81/xa6 BRAHMI DIGIT ZERO -+ /xf0/x91/x81/xa7 BRAHMI DIGIT ONE -+ /xf0/x91/x81/xa8 BRAHMI DIGIT TWO -+ /xf0/x91/x81/xa9 BRAHMI DIGIT THREE -+ /xf0/x91/x81/xaa BRAHMI DIGIT FOUR -+ /xf0/x91/x81/xab BRAHMI DIGIT FIVE -+ /xf0/x91/x81/xac BRAHMI DIGIT SIX -+ /xf0/x91/x81/xad BRAHMI DIGIT SEVEN -+ /xf0/x91/x81/xae BRAHMI DIGIT EIGHT -+ /xf0/x91/x81/xaf BRAHMI DIGIT NINE -+ /xf0/x91/x82/x80 KAITHI SIGN CANDRABINDU -+ /xf0/x91/x82/x81 KAITHI SIGN ANUSVARA -+ /xf0/x91/x82/x82 KAITHI SIGN VISARGA -+ /xf0/x91/x82/x83 KAITHI LETTER A -+ /xf0/x91/x82/x84 KAITHI LETTER AA -+ /xf0/x91/x82/x85 KAITHI LETTER I -+ /xf0/x91/x82/x86 KAITHI LETTER II -+ /xf0/x91/x82/x87 KAITHI LETTER U -+ /xf0/x91/x82/x88 KAITHI LETTER UU -+ /xf0/x91/x82/x89 KAITHI LETTER E -+ /xf0/x91/x82/x8a KAITHI LETTER AI -+ /xf0/x91/x82/x8b KAITHI LETTER O -+ /xf0/x91/x82/x8c KAITHI LETTER AU -+ /xf0/x91/x82/x8d KAITHI LETTER KA -+ /xf0/x91/x82/x8e KAITHI LETTER KHA -+ /xf0/x91/x82/x8f KAITHI LETTER GA -+ /xf0/x91/x82/x90 KAITHI LETTER GHA -+ /xf0/x91/x82/x91 KAITHI LETTER NGA -+ /xf0/x91/x82/x92 KAITHI LETTER CA -+ /xf0/x91/x82/x93 KAITHI LETTER CHA -+ /xf0/x91/x82/x94 KAITHI LETTER JA -+ /xf0/x91/x82/x95 KAITHI LETTER JHA -+ /xf0/x91/x82/x96 KAITHI LETTER NYA -+ /xf0/x91/x82/x97 KAITHI LETTER TTA -+ /xf0/x91/x82/x98 KAITHI LETTER TTHA -+ /xf0/x91/x82/x99 KAITHI LETTER DDA -+ /xf0/x91/x82/x9a KAITHI LETTER DDDHA -+ /xf0/x91/x82/x9b KAITHI LETTER DDHA -+ /xf0/x91/x82/x9c KAITHI LETTER RHA -+ /xf0/x91/x82/x9d KAITHI LETTER NNA -+ /xf0/x91/x82/x9e KAITHI LETTER TA -+ /xf0/x91/x82/x9f KAITHI LETTER THA -+ /xf0/x91/x82/xa0 KAITHI LETTER DA -+ /xf0/x91/x82/xa1 KAITHI LETTER DHA -+ /xf0/x91/x82/xa2 KAITHI LETTER NA -+ /xf0/x91/x82/xa3 KAITHI LETTER PA -+ /xf0/x91/x82/xa4 KAITHI LETTER PHA -+ /xf0/x91/x82/xa5 KAITHI LETTER BA -+ /xf0/x91/x82/xa6 KAITHI LETTER BHA -+ /xf0/x91/x82/xa7 KAITHI LETTER MA -+ /xf0/x91/x82/xa8 KAITHI LETTER YA -+ /xf0/x91/x82/xa9 KAITHI LETTER RA -+ /xf0/x91/x82/xaa KAITHI LETTER LA -+ /xf0/x91/x82/xab KAITHI LETTER VA -+ /xf0/x91/x82/xac KAITHI LETTER SHA -+ /xf0/x91/x82/xad KAITHI LETTER SSA -+ /xf0/x91/x82/xae KAITHI LETTER SA -+ /xf0/x91/x82/xaf KAITHI LETTER HA -+ /xf0/x91/x82/xb0 KAITHI VOWEL SIGN AA -+ /xf0/x91/x82/xb1 KAITHI VOWEL SIGN I -+ /xf0/x91/x82/xb2 KAITHI VOWEL SIGN II -+ /xf0/x91/x82/xb3 KAITHI VOWEL SIGN U -+ /xf0/x91/x82/xb4 KAITHI VOWEL SIGN UU -+ /xf0/x91/x82/xb5 KAITHI VOWEL SIGN E -+ /xf0/x91/x82/xb6 KAITHI VOWEL SIGN AI -+ /xf0/x91/x82/xb7 KAITHI VOWEL SIGN O -+ /xf0/x91/x82/xb8 KAITHI VOWEL SIGN AU -+ /xf0/x91/x82/xb9 KAITHI SIGN VIRAMA -+ /xf0/x91/x82/xba KAITHI SIGN NUKTA -+ /xf0/x91/x82/xbb KAITHI ABBREVIATION SIGN -+ /xf0/x91/x82/xbc KAITHI ENUMERATION SIGN -+ /xf0/x91/x82/xbd KAITHI NUMBER SIGN -+ /xf0/x91/x82/xbe KAITHI SECTION MARK -+ /xf0/x91/x82/xbf KAITHI DOUBLE SECTION MARK -+ /xf0/x91/x83/x80 KAITHI DANDA -+ /xf0/x91/x83/x81 KAITHI DOUBLE DANDA - /xf0/x92/x80/x80 CUNEIFORM SIGN A - /xf0/x92/x80/x81 CUNEIFORM SIGN A TIMES A - /xf0/x92/x80/x82 CUNEIFORM SIGN A TIMES BAD -@@ -28370,6 +30022,1648 @@ CHARMAP - /xf0/x92/x91/xb1 CUNEIFORM PUNCTUATION SIGN VERTICAL COLON - /xf0/x92/x91/xb2 CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON - /xf0/x92/x91/xb3 CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON -+ /xf0/x93/x80/x80 EGYPTIAN HIEROGLYPH A001 -+ /xf0/x93/x80/x81 EGYPTIAN HIEROGLYPH A002 -+ /xf0/x93/x80/x82 EGYPTIAN HIEROGLYPH A003 -+ /xf0/x93/x80/x83 EGYPTIAN HIEROGLYPH A004 -+ /xf0/x93/x80/x84 EGYPTIAN HIEROGLYPH A005 -+ /xf0/x93/x80/x85 EGYPTIAN HIEROGLYPH A005A -+ /xf0/x93/x80/x86 EGYPTIAN HIEROGLYPH A006 -+ /xf0/x93/x80/x87 EGYPTIAN HIEROGLYPH A006A -+ /xf0/x93/x80/x88 EGYPTIAN HIEROGLYPH A006B -+ /xf0/x93/x80/x89 EGYPTIAN HIEROGLYPH A007 -+ /xf0/x93/x80/x8a EGYPTIAN HIEROGLYPH A008 -+ /xf0/x93/x80/x8b EGYPTIAN HIEROGLYPH A009 -+ /xf0/x93/x80/x8c EGYPTIAN HIEROGLYPH A010 -+ /xf0/x93/x80/x8d EGYPTIAN HIEROGLYPH A011 -+ /xf0/x93/x80/x8e EGYPTIAN HIEROGLYPH A012 -+ /xf0/x93/x80/x8f EGYPTIAN HIEROGLYPH A013 -+ /xf0/x93/x80/x90 EGYPTIAN HIEROGLYPH A014 -+ /xf0/x93/x80/x91 EGYPTIAN HIEROGLYPH A014A -+ /xf0/x93/x80/x92 EGYPTIAN HIEROGLYPH A015 -+ /xf0/x93/x80/x93 EGYPTIAN HIEROGLYPH A016 -+ /xf0/x93/x80/x94 EGYPTIAN HIEROGLYPH A017 -+ /xf0/x93/x80/x95 EGYPTIAN HIEROGLYPH A017A -+ /xf0/x93/x80/x96 EGYPTIAN HIEROGLYPH A018 -+ /xf0/x93/x80/x97 EGYPTIAN HIEROGLYPH A019 -+ /xf0/x93/x80/x98 EGYPTIAN HIEROGLYPH A020 -+ /xf0/x93/x80/x99 EGYPTIAN HIEROGLYPH A021 -+ /xf0/x93/x80/x9a EGYPTIAN HIEROGLYPH A022 -+ /xf0/x93/x80/x9b EGYPTIAN HIEROGLYPH A023 -+ /xf0/x93/x80/x9c EGYPTIAN HIEROGLYPH A024 -+ /xf0/x93/x80/x9d EGYPTIAN HIEROGLYPH A025 -+ /xf0/x93/x80/x9e EGYPTIAN HIEROGLYPH A026 -+ /xf0/x93/x80/x9f EGYPTIAN HIEROGLYPH A027 -+ /xf0/x93/x80/xa0 EGYPTIAN HIEROGLYPH A028 -+ /xf0/x93/x80/xa1 EGYPTIAN HIEROGLYPH A029 -+ /xf0/x93/x80/xa2 EGYPTIAN HIEROGLYPH A030 -+ /xf0/x93/x80/xa3 EGYPTIAN HIEROGLYPH A031 -+ /xf0/x93/x80/xa4 EGYPTIAN HIEROGLYPH A032 -+ /xf0/x93/x80/xa5 EGYPTIAN HIEROGLYPH A032A -+ /xf0/x93/x80/xa6 EGYPTIAN HIEROGLYPH A033 -+ /xf0/x93/x80/xa7 EGYPTIAN HIEROGLYPH A034 -+ /xf0/x93/x80/xa8 EGYPTIAN HIEROGLYPH A035 -+ /xf0/x93/x80/xa9 EGYPTIAN HIEROGLYPH A036 -+ /xf0/x93/x80/xaa EGYPTIAN HIEROGLYPH A037 -+ /xf0/x93/x80/xab EGYPTIAN HIEROGLYPH A038 -+ /xf0/x93/x80/xac EGYPTIAN HIEROGLYPH A039 -+ /xf0/x93/x80/xad EGYPTIAN HIEROGLYPH A040 -+ /xf0/x93/x80/xae EGYPTIAN HIEROGLYPH A040A -+ /xf0/x93/x80/xaf EGYPTIAN HIEROGLYPH A041 -+ /xf0/x93/x80/xb0 EGYPTIAN HIEROGLYPH A042 -+ /xf0/x93/x80/xb1 EGYPTIAN HIEROGLYPH A042A -+ /xf0/x93/x80/xb2 EGYPTIAN HIEROGLYPH A043 -+ /xf0/x93/x80/xb3 EGYPTIAN HIEROGLYPH A043A -+ /xf0/x93/x80/xb4 EGYPTIAN HIEROGLYPH A044 -+ /xf0/x93/x80/xb5 EGYPTIAN HIEROGLYPH A045 -+ /xf0/x93/x80/xb6 EGYPTIAN HIEROGLYPH A045A -+ /xf0/x93/x80/xb7 EGYPTIAN HIEROGLYPH A046 -+ /xf0/x93/x80/xb8 EGYPTIAN HIEROGLYPH A047 -+ /xf0/x93/x80/xb9 EGYPTIAN HIEROGLYPH A048 -+ /xf0/x93/x80/xba EGYPTIAN HIEROGLYPH A049 -+ /xf0/x93/x80/xbb EGYPTIAN HIEROGLYPH A050 -+ /xf0/x93/x80/xbc EGYPTIAN HIEROGLYPH A051 -+ /xf0/x93/x80/xbd EGYPTIAN HIEROGLYPH A052 -+ /xf0/x93/x80/xbe EGYPTIAN HIEROGLYPH A053 -+ /xf0/x93/x80/xbf EGYPTIAN HIEROGLYPH A054 -+ /xf0/x93/x81/x80 EGYPTIAN HIEROGLYPH A055 -+ /xf0/x93/x81/x81 EGYPTIAN HIEROGLYPH A056 -+ /xf0/x93/x81/x82 EGYPTIAN HIEROGLYPH A057 -+ /xf0/x93/x81/x83 EGYPTIAN HIEROGLYPH A058 -+ /xf0/x93/x81/x84 EGYPTIAN HIEROGLYPH A059 -+ /xf0/x93/x81/x85 EGYPTIAN HIEROGLYPH A060 -+ /xf0/x93/x81/x86 EGYPTIAN HIEROGLYPH A061 -+ /xf0/x93/x81/x87 EGYPTIAN HIEROGLYPH A062 -+ /xf0/x93/x81/x88 EGYPTIAN HIEROGLYPH A063 -+ /xf0/x93/x81/x89 EGYPTIAN HIEROGLYPH A064 -+ /xf0/x93/x81/x8a EGYPTIAN HIEROGLYPH A065 -+ /xf0/x93/x81/x8b EGYPTIAN HIEROGLYPH A066 -+ /xf0/x93/x81/x8c EGYPTIAN HIEROGLYPH A067 -+ /xf0/x93/x81/x8d EGYPTIAN HIEROGLYPH A068 -+ /xf0/x93/x81/x8e EGYPTIAN HIEROGLYPH A069 -+ /xf0/x93/x81/x8f EGYPTIAN HIEROGLYPH A070 -+ /xf0/x93/x81/x90 EGYPTIAN HIEROGLYPH B001 -+ /xf0/x93/x81/x91 EGYPTIAN HIEROGLYPH B002 -+ /xf0/x93/x81/x92 EGYPTIAN HIEROGLYPH B003 -+ /xf0/x93/x81/x93 EGYPTIAN HIEROGLYPH B004 -+ /xf0/x93/x81/x94 EGYPTIAN HIEROGLYPH B005 -+ /xf0/x93/x81/x95 EGYPTIAN HIEROGLYPH B005A -+ /xf0/x93/x81/x96 EGYPTIAN HIEROGLYPH B006 -+ /xf0/x93/x81/x97 EGYPTIAN HIEROGLYPH B007 -+ /xf0/x93/x81/x98 EGYPTIAN HIEROGLYPH B008 -+ /xf0/x93/x81/x99 EGYPTIAN HIEROGLYPH B009 -+ /xf0/x93/x81/x9a EGYPTIAN HIEROGLYPH C001 -+ /xf0/x93/x81/x9b EGYPTIAN HIEROGLYPH C002 -+ /xf0/x93/x81/x9c EGYPTIAN HIEROGLYPH C002A -+ /xf0/x93/x81/x9d EGYPTIAN HIEROGLYPH C002B -+ /xf0/x93/x81/x9e EGYPTIAN HIEROGLYPH C002C -+ /xf0/x93/x81/x9f EGYPTIAN HIEROGLYPH C003 -+ /xf0/x93/x81/xa0 EGYPTIAN HIEROGLYPH C004 -+ /xf0/x93/x81/xa1 EGYPTIAN HIEROGLYPH C005 -+ /xf0/x93/x81/xa2 EGYPTIAN HIEROGLYPH C006 -+ /xf0/x93/x81/xa3 EGYPTIAN HIEROGLYPH C007 -+ /xf0/x93/x81/xa4 EGYPTIAN HIEROGLYPH C008 -+ /xf0/x93/x81/xa5 EGYPTIAN HIEROGLYPH C009 -+ /xf0/x93/x81/xa6 EGYPTIAN HIEROGLYPH C010 -+ /xf0/x93/x81/xa7 EGYPTIAN HIEROGLYPH C010A -+ /xf0/x93/x81/xa8 EGYPTIAN HIEROGLYPH C011 -+ /xf0/x93/x81/xa9 EGYPTIAN HIEROGLYPH C012 -+ /xf0/x93/x81/xaa EGYPTIAN HIEROGLYPH C013 -+ /xf0/x93/x81/xab EGYPTIAN HIEROGLYPH C014 -+ /xf0/x93/x81/xac EGYPTIAN HIEROGLYPH C015 -+ /xf0/x93/x81/xad EGYPTIAN HIEROGLYPH C016 -+ /xf0/x93/x81/xae EGYPTIAN HIEROGLYPH C017 -+ /xf0/x93/x81/xaf EGYPTIAN HIEROGLYPH C018 -+ /xf0/x93/x81/xb0 EGYPTIAN HIEROGLYPH C019 -+ /xf0/x93/x81/xb1 EGYPTIAN HIEROGLYPH C020 -+ /xf0/x93/x81/xb2 EGYPTIAN HIEROGLYPH C021 -+ /xf0/x93/x81/xb3 EGYPTIAN HIEROGLYPH C022 -+ /xf0/x93/x81/xb4 EGYPTIAN HIEROGLYPH C023 -+ /xf0/x93/x81/xb5 EGYPTIAN HIEROGLYPH C024 -+ /xf0/x93/x81/xb6 EGYPTIAN HIEROGLYPH D001 -+ /xf0/x93/x81/xb7 EGYPTIAN HIEROGLYPH D002 -+ /xf0/x93/x81/xb8 EGYPTIAN HIEROGLYPH D003 -+ /xf0/x93/x81/xb9 EGYPTIAN HIEROGLYPH D004 -+ /xf0/x93/x81/xba EGYPTIAN HIEROGLYPH D005 -+ /xf0/x93/x81/xbb EGYPTIAN HIEROGLYPH D006 -+ /xf0/x93/x81/xbc EGYPTIAN HIEROGLYPH D007 -+ /xf0/x93/x81/xbd EGYPTIAN HIEROGLYPH D008 -+ /xf0/x93/x81/xbe EGYPTIAN HIEROGLYPH D008A -+ /xf0/x93/x81/xbf EGYPTIAN HIEROGLYPH D009 -+ /xf0/x93/x82/x80 EGYPTIAN HIEROGLYPH D010 -+ /xf0/x93/x82/x81 EGYPTIAN HIEROGLYPH D011 -+ /xf0/x93/x82/x82 EGYPTIAN HIEROGLYPH D012 -+ /xf0/x93/x82/x83 EGYPTIAN HIEROGLYPH D013 -+ /xf0/x93/x82/x84 EGYPTIAN HIEROGLYPH D014 -+ /xf0/x93/x82/x85 EGYPTIAN HIEROGLYPH D015 -+ /xf0/x93/x82/x86 EGYPTIAN HIEROGLYPH D016 -+ /xf0/x93/x82/x87 EGYPTIAN HIEROGLYPH D017 -+ /xf0/x93/x82/x88 EGYPTIAN HIEROGLYPH D018 -+ /xf0/x93/x82/x89 EGYPTIAN HIEROGLYPH D019 -+ /xf0/x93/x82/x8a EGYPTIAN HIEROGLYPH D020 -+ /xf0/x93/x82/x8b EGYPTIAN HIEROGLYPH D021 -+ /xf0/x93/x82/x8c EGYPTIAN HIEROGLYPH D022 -+ /xf0/x93/x82/x8d EGYPTIAN HIEROGLYPH D023 -+ /xf0/x93/x82/x8e EGYPTIAN HIEROGLYPH D024 -+ /xf0/x93/x82/x8f EGYPTIAN HIEROGLYPH D025 -+ /xf0/x93/x82/x90 EGYPTIAN HIEROGLYPH D026 -+ /xf0/x93/x82/x91 EGYPTIAN HIEROGLYPH D027 -+ /xf0/x93/x82/x92 EGYPTIAN HIEROGLYPH D027A -+ /xf0/x93/x82/x93 EGYPTIAN HIEROGLYPH D028 -+ /xf0/x93/x82/x94 EGYPTIAN HIEROGLYPH D029 -+ /xf0/x93/x82/x95 EGYPTIAN HIEROGLYPH D030 -+ /xf0/x93/x82/x96 EGYPTIAN HIEROGLYPH D031 -+ /xf0/x93/x82/x97 EGYPTIAN HIEROGLYPH D031A -+ /xf0/x93/x82/x98 EGYPTIAN HIEROGLYPH D032 -+ /xf0/x93/x82/x99 EGYPTIAN HIEROGLYPH D033 -+ /xf0/x93/x82/x9a EGYPTIAN HIEROGLYPH D034 -+ /xf0/x93/x82/x9b EGYPTIAN HIEROGLYPH D034A -+ /xf0/x93/x82/x9c EGYPTIAN HIEROGLYPH D035 -+ /xf0/x93/x82/x9d EGYPTIAN HIEROGLYPH D036 -+ /xf0/x93/x82/x9e EGYPTIAN HIEROGLYPH D037 -+ /xf0/x93/x82/x9f EGYPTIAN HIEROGLYPH D038 -+ /xf0/x93/x82/xa0 EGYPTIAN HIEROGLYPH D039 -+ /xf0/x93/x82/xa1 EGYPTIAN HIEROGLYPH D040 -+ /xf0/x93/x82/xa2 EGYPTIAN HIEROGLYPH D041 -+ /xf0/x93/x82/xa3 EGYPTIAN HIEROGLYPH D042 -+ /xf0/x93/x82/xa4 EGYPTIAN HIEROGLYPH D043 -+ /xf0/x93/x82/xa5 EGYPTIAN HIEROGLYPH D044 -+ /xf0/x93/x82/xa6 EGYPTIAN HIEROGLYPH D045 -+ /xf0/x93/x82/xa7 EGYPTIAN HIEROGLYPH D046 -+ /xf0/x93/x82/xa8 EGYPTIAN HIEROGLYPH D046A -+ /xf0/x93/x82/xa9 EGYPTIAN HIEROGLYPH D047 -+ /xf0/x93/x82/xaa EGYPTIAN HIEROGLYPH D048 -+ /xf0/x93/x82/xab EGYPTIAN HIEROGLYPH D048A -+ /xf0/x93/x82/xac EGYPTIAN HIEROGLYPH D049 -+ /xf0/x93/x82/xad EGYPTIAN HIEROGLYPH D050 -+ /xf0/x93/x82/xae EGYPTIAN HIEROGLYPH D050A -+ /xf0/x93/x82/xaf EGYPTIAN HIEROGLYPH D050B -+ /xf0/x93/x82/xb0 EGYPTIAN HIEROGLYPH D050C -+ /xf0/x93/x82/xb1 EGYPTIAN HIEROGLYPH D050D -+ /xf0/x93/x82/xb2 EGYPTIAN HIEROGLYPH D050E -+ /xf0/x93/x82/xb3 EGYPTIAN HIEROGLYPH D050F -+ /xf0/x93/x82/xb4 EGYPTIAN HIEROGLYPH D050G -+ /xf0/x93/x82/xb5 EGYPTIAN HIEROGLYPH D050H -+ /xf0/x93/x82/xb6 EGYPTIAN HIEROGLYPH D050I -+ /xf0/x93/x82/xb7 EGYPTIAN HIEROGLYPH D051 -+ /xf0/x93/x82/xb8 EGYPTIAN HIEROGLYPH D052 -+ /xf0/x93/x82/xb9 EGYPTIAN HIEROGLYPH D052A -+ /xf0/x93/x82/xba EGYPTIAN HIEROGLYPH D053 -+ /xf0/x93/x82/xbb EGYPTIAN HIEROGLYPH D054 -+ /xf0/x93/x82/xbc EGYPTIAN HIEROGLYPH D054A -+ /xf0/x93/x82/xbd EGYPTIAN HIEROGLYPH D055 -+ /xf0/x93/x82/xbe EGYPTIAN HIEROGLYPH D056 -+ /xf0/x93/x82/xbf EGYPTIAN HIEROGLYPH D057 -+ /xf0/x93/x83/x80 EGYPTIAN HIEROGLYPH D058 -+ /xf0/x93/x83/x81 EGYPTIAN HIEROGLYPH D059 -+ /xf0/x93/x83/x82 EGYPTIAN HIEROGLYPH D060 -+ /xf0/x93/x83/x83 EGYPTIAN HIEROGLYPH D061 -+ /xf0/x93/x83/x84 EGYPTIAN HIEROGLYPH D062 -+ /xf0/x93/x83/x85 EGYPTIAN HIEROGLYPH D063 -+ /xf0/x93/x83/x86 EGYPTIAN HIEROGLYPH D064 -+ /xf0/x93/x83/x87 EGYPTIAN HIEROGLYPH D065 -+ /xf0/x93/x83/x88 EGYPTIAN HIEROGLYPH D066 -+ /xf0/x93/x83/x89 EGYPTIAN HIEROGLYPH D067 -+ /xf0/x93/x83/x8a EGYPTIAN HIEROGLYPH D067A -+ /xf0/x93/x83/x8b EGYPTIAN HIEROGLYPH D067B -+ /xf0/x93/x83/x8c EGYPTIAN HIEROGLYPH D067C -+ /xf0/x93/x83/x8d EGYPTIAN HIEROGLYPH D067D -+ /xf0/x93/x83/x8e EGYPTIAN HIEROGLYPH D067E -+ /xf0/x93/x83/x8f EGYPTIAN HIEROGLYPH D067F -+ /xf0/x93/x83/x90 EGYPTIAN HIEROGLYPH D067G -+ /xf0/x93/x83/x91 EGYPTIAN HIEROGLYPH D067H -+ /xf0/x93/x83/x92 EGYPTIAN HIEROGLYPH E001 -+ /xf0/x93/x83/x93 EGYPTIAN HIEROGLYPH E002 -+ /xf0/x93/x83/x94 EGYPTIAN HIEROGLYPH E003 -+ /xf0/x93/x83/x95 EGYPTIAN HIEROGLYPH E004 -+ /xf0/x93/x83/x96 EGYPTIAN HIEROGLYPH E005 -+ /xf0/x93/x83/x97 EGYPTIAN HIEROGLYPH E006 -+ /xf0/x93/x83/x98 EGYPTIAN HIEROGLYPH E007 -+ /xf0/x93/x83/x99 EGYPTIAN HIEROGLYPH E008 -+ /xf0/x93/x83/x9a EGYPTIAN HIEROGLYPH E008A -+ /xf0/x93/x83/x9b EGYPTIAN HIEROGLYPH E009 -+ /xf0/x93/x83/x9c EGYPTIAN HIEROGLYPH E009A -+ /xf0/x93/x83/x9d EGYPTIAN HIEROGLYPH E010 -+ /xf0/x93/x83/x9e EGYPTIAN HIEROGLYPH E011 -+ /xf0/x93/x83/x9f EGYPTIAN HIEROGLYPH E012 -+ /xf0/x93/x83/xa0 EGYPTIAN HIEROGLYPH E013 -+ /xf0/x93/x83/xa1 EGYPTIAN HIEROGLYPH E014 -+ /xf0/x93/x83/xa2 EGYPTIAN HIEROGLYPH E015 -+ /xf0/x93/x83/xa3 EGYPTIAN HIEROGLYPH E016 -+ /xf0/x93/x83/xa4 EGYPTIAN HIEROGLYPH E016A -+ /xf0/x93/x83/xa5 EGYPTIAN HIEROGLYPH E017 -+ /xf0/x93/x83/xa6 EGYPTIAN HIEROGLYPH E017A -+ /xf0/x93/x83/xa7 EGYPTIAN HIEROGLYPH E018 -+ /xf0/x93/x83/xa8 EGYPTIAN HIEROGLYPH E019 -+ /xf0/x93/x83/xa9 EGYPTIAN HIEROGLYPH E020 -+ /xf0/x93/x83/xaa EGYPTIAN HIEROGLYPH E020A -+ /xf0/x93/x83/xab EGYPTIAN HIEROGLYPH E021 -+ /xf0/x93/x83/xac EGYPTIAN HIEROGLYPH E022 -+ /xf0/x93/x83/xad EGYPTIAN HIEROGLYPH E023 -+ /xf0/x93/x83/xae EGYPTIAN HIEROGLYPH E024 -+ /xf0/x93/x83/xaf EGYPTIAN HIEROGLYPH E025 -+ /xf0/x93/x83/xb0 EGYPTIAN HIEROGLYPH E026 -+ /xf0/x93/x83/xb1 EGYPTIAN HIEROGLYPH E027 -+ /xf0/x93/x83/xb2 EGYPTIAN HIEROGLYPH E028 -+ /xf0/x93/x83/xb3 EGYPTIAN HIEROGLYPH E028A -+ /xf0/x93/x83/xb4 EGYPTIAN HIEROGLYPH E029 -+ /xf0/x93/x83/xb5 EGYPTIAN HIEROGLYPH E030 -+ /xf0/x93/x83/xb6 EGYPTIAN HIEROGLYPH E031 -+ /xf0/x93/x83/xb7 EGYPTIAN HIEROGLYPH E032 -+ /xf0/x93/x83/xb8 EGYPTIAN HIEROGLYPH E033 -+ /xf0/x93/x83/xb9 EGYPTIAN HIEROGLYPH E034 -+ /xf0/x93/x83/xba EGYPTIAN HIEROGLYPH E034A -+ /xf0/x93/x83/xbb EGYPTIAN HIEROGLYPH E036 -+ /xf0/x93/x83/xbc EGYPTIAN HIEROGLYPH E037 -+ /xf0/x93/x83/xbd EGYPTIAN HIEROGLYPH E038 -+ /xf0/x93/x83/xbe EGYPTIAN HIEROGLYPH F001 -+ /xf0/x93/x83/xbf EGYPTIAN HIEROGLYPH F001A -+ /xf0/x93/x84/x80 EGYPTIAN HIEROGLYPH F002 -+ /xf0/x93/x84/x81 EGYPTIAN HIEROGLYPH F003 -+ /xf0/x93/x84/x82 EGYPTIAN HIEROGLYPH F004 -+ /xf0/x93/x84/x83 EGYPTIAN HIEROGLYPH F005 -+ /xf0/x93/x84/x84 EGYPTIAN HIEROGLYPH F006 -+ /xf0/x93/x84/x85 EGYPTIAN HIEROGLYPH F007 -+ /xf0/x93/x84/x86 EGYPTIAN HIEROGLYPH F008 -+ /xf0/x93/x84/x87 EGYPTIAN HIEROGLYPH F009 -+ /xf0/x93/x84/x88 EGYPTIAN HIEROGLYPH F010 -+ /xf0/x93/x84/x89 EGYPTIAN HIEROGLYPH F011 -+ /xf0/x93/x84/x8a EGYPTIAN HIEROGLYPH F012 -+ /xf0/x93/x84/x8b EGYPTIAN HIEROGLYPH F013 -+ /xf0/x93/x84/x8c EGYPTIAN HIEROGLYPH F013A -+ /xf0/x93/x84/x8d EGYPTIAN HIEROGLYPH F014 -+ /xf0/x93/x84/x8e EGYPTIAN HIEROGLYPH F015 -+ /xf0/x93/x84/x8f EGYPTIAN HIEROGLYPH F016 -+ /xf0/x93/x84/x90 EGYPTIAN HIEROGLYPH F017 -+ /xf0/x93/x84/x91 EGYPTIAN HIEROGLYPH F018 -+ /xf0/x93/x84/x92 EGYPTIAN HIEROGLYPH F019 -+ /xf0/x93/x84/x93 EGYPTIAN HIEROGLYPH F020 -+ /xf0/x93/x84/x94 EGYPTIAN HIEROGLYPH F021 -+ /xf0/x93/x84/x95 EGYPTIAN HIEROGLYPH F021A -+ /xf0/x93/x84/x96 EGYPTIAN HIEROGLYPH F022 -+ /xf0/x93/x84/x97 EGYPTIAN HIEROGLYPH F023 -+ /xf0/x93/x84/x98 EGYPTIAN HIEROGLYPH F024 -+ /xf0/x93/x84/x99 EGYPTIAN HIEROGLYPH F025 -+ /xf0/x93/x84/x9a EGYPTIAN HIEROGLYPH F026 -+ /xf0/x93/x84/x9b EGYPTIAN HIEROGLYPH F027 -+ /xf0/x93/x84/x9c EGYPTIAN HIEROGLYPH F028 -+ /xf0/x93/x84/x9d EGYPTIAN HIEROGLYPH F029 -+ /xf0/x93/x84/x9e EGYPTIAN HIEROGLYPH F030 -+ /xf0/x93/x84/x9f EGYPTIAN HIEROGLYPH F031 -+ /xf0/x93/x84/xa0 EGYPTIAN HIEROGLYPH F031A -+ /xf0/x93/x84/xa1 EGYPTIAN HIEROGLYPH F032 -+ /xf0/x93/x84/xa2 EGYPTIAN HIEROGLYPH F033 -+ /xf0/x93/x84/xa3 EGYPTIAN HIEROGLYPH F034 -+ /xf0/x93/x84/xa4 EGYPTIAN HIEROGLYPH F035 -+ /xf0/x93/x84/xa5 EGYPTIAN HIEROGLYPH F036 -+ /xf0/x93/x84/xa6 EGYPTIAN HIEROGLYPH F037 -+ /xf0/x93/x84/xa7 EGYPTIAN HIEROGLYPH F037A -+ /xf0/x93/x84/xa8 EGYPTIAN HIEROGLYPH F038 -+ /xf0/x93/x84/xa9 EGYPTIAN HIEROGLYPH F038A -+ /xf0/x93/x84/xaa EGYPTIAN HIEROGLYPH F039 -+ /xf0/x93/x84/xab EGYPTIAN HIEROGLYPH F040 -+ /xf0/x93/x84/xac EGYPTIAN HIEROGLYPH F041 -+ /xf0/x93/x84/xad EGYPTIAN HIEROGLYPH F042 -+ /xf0/x93/x84/xae EGYPTIAN HIEROGLYPH F043 -+ /xf0/x93/x84/xaf EGYPTIAN HIEROGLYPH F044 -+ /xf0/x93/x84/xb0 EGYPTIAN HIEROGLYPH F045 -+ /xf0/x93/x84/xb1 EGYPTIAN HIEROGLYPH F045A -+ /xf0/x93/x84/xb2 EGYPTIAN HIEROGLYPH F046 -+ /xf0/x93/x84/xb3 EGYPTIAN HIEROGLYPH F046A -+ /xf0/x93/x84/xb4 EGYPTIAN HIEROGLYPH F047 -+ /xf0/x93/x84/xb5 EGYPTIAN HIEROGLYPH F047A -+ /xf0/x93/x84/xb6 EGYPTIAN HIEROGLYPH F048 -+ /xf0/x93/x84/xb7 EGYPTIAN HIEROGLYPH F049 -+ /xf0/x93/x84/xb8 EGYPTIAN HIEROGLYPH F050 -+ /xf0/x93/x84/xb9 EGYPTIAN HIEROGLYPH F051 -+ /xf0/x93/x84/xba EGYPTIAN HIEROGLYPH F051A -+ /xf0/x93/x84/xbb EGYPTIAN HIEROGLYPH F051B -+ /xf0/x93/x84/xbc EGYPTIAN HIEROGLYPH F051C -+ /xf0/x93/x84/xbd EGYPTIAN HIEROGLYPH F052 -+ /xf0/x93/x84/xbe EGYPTIAN HIEROGLYPH F053 -+ /xf0/x93/x84/xbf EGYPTIAN HIEROGLYPH G001 -+ /xf0/x93/x85/x80 EGYPTIAN HIEROGLYPH G002 -+ /xf0/x93/x85/x81 EGYPTIAN HIEROGLYPH G003 -+ /xf0/x93/x85/x82 EGYPTIAN HIEROGLYPH G004 -+ /xf0/x93/x85/x83 EGYPTIAN HIEROGLYPH G005 -+ /xf0/x93/x85/x84 EGYPTIAN HIEROGLYPH G006 -+ /xf0/x93/x85/x85 EGYPTIAN HIEROGLYPH G006A -+ /xf0/x93/x85/x86 EGYPTIAN HIEROGLYPH G007 -+ /xf0/x93/x85/x87 EGYPTIAN HIEROGLYPH G007A -+ /xf0/x93/x85/x88 EGYPTIAN HIEROGLYPH G007B -+ /xf0/x93/x85/x89 EGYPTIAN HIEROGLYPH G008 -+ /xf0/x93/x85/x8a EGYPTIAN HIEROGLYPH G009 -+ /xf0/x93/x85/x8b EGYPTIAN HIEROGLYPH G010 -+ /xf0/x93/x85/x8c EGYPTIAN HIEROGLYPH G011 -+ /xf0/x93/x85/x8d EGYPTIAN HIEROGLYPH G011A -+ /xf0/x93/x85/x8e EGYPTIAN HIEROGLYPH G012 -+ /xf0/x93/x85/x8f EGYPTIAN HIEROGLYPH G013 -+ /xf0/x93/x85/x90 EGYPTIAN HIEROGLYPH G014 -+ /xf0/x93/x85/x91 EGYPTIAN HIEROGLYPH G015 -+ /xf0/x93/x85/x92 EGYPTIAN HIEROGLYPH G016 -+ /xf0/x93/x85/x93 EGYPTIAN HIEROGLYPH G017 -+ /xf0/x93/x85/x94 EGYPTIAN HIEROGLYPH G018 -+ /xf0/x93/x85/x95 EGYPTIAN HIEROGLYPH G019 -+ /xf0/x93/x85/x96 EGYPTIAN HIEROGLYPH G020 -+ /xf0/x93/x85/x97 EGYPTIAN HIEROGLYPH G020A -+ /xf0/x93/x85/x98 EGYPTIAN HIEROGLYPH G021 -+ /xf0/x93/x85/x99 EGYPTIAN HIEROGLYPH G022 -+ /xf0/x93/x85/x9a EGYPTIAN HIEROGLYPH G023 -+ /xf0/x93/x85/x9b EGYPTIAN HIEROGLYPH G024 -+ /xf0/x93/x85/x9c EGYPTIAN HIEROGLYPH G025 -+ /xf0/x93/x85/x9d EGYPTIAN HIEROGLYPH G026 -+ /xf0/x93/x85/x9e EGYPTIAN HIEROGLYPH G026A -+ /xf0/x93/x85/x9f EGYPTIAN HIEROGLYPH G027 -+ /xf0/x93/x85/xa0 EGYPTIAN HIEROGLYPH G028 -+ /xf0/x93/x85/xa1 EGYPTIAN HIEROGLYPH G029 -+ /xf0/x93/x85/xa2 EGYPTIAN HIEROGLYPH G030 -+ /xf0/x93/x85/xa3 EGYPTIAN HIEROGLYPH G031 -+ /xf0/x93/x85/xa4 EGYPTIAN HIEROGLYPH G032 -+ /xf0/x93/x85/xa5 EGYPTIAN HIEROGLYPH G033 -+ /xf0/x93/x85/xa6 EGYPTIAN HIEROGLYPH G034 -+ /xf0/x93/x85/xa7 EGYPTIAN HIEROGLYPH G035 -+ /xf0/x93/x85/xa8 EGYPTIAN HIEROGLYPH G036 -+ /xf0/x93/x85/xa9 EGYPTIAN HIEROGLYPH G036A -+ /xf0/x93/x85/xaa EGYPTIAN HIEROGLYPH G037 -+ /xf0/x93/x85/xab EGYPTIAN HIEROGLYPH G037A -+ /xf0/x93/x85/xac EGYPTIAN HIEROGLYPH G038 -+ /xf0/x93/x85/xad EGYPTIAN HIEROGLYPH G039 -+ /xf0/x93/x85/xae EGYPTIAN HIEROGLYPH G040 -+ /xf0/x93/x85/xaf EGYPTIAN HIEROGLYPH G041 -+ /xf0/x93/x85/xb0 EGYPTIAN HIEROGLYPH G042 -+ /xf0/x93/x85/xb1 EGYPTIAN HIEROGLYPH G043 -+ /xf0/x93/x85/xb2 EGYPTIAN HIEROGLYPH G043A -+ /xf0/x93/x85/xb3 EGYPTIAN HIEROGLYPH G044 -+ /xf0/x93/x85/xb4 EGYPTIAN HIEROGLYPH G045 -+ /xf0/x93/x85/xb5 EGYPTIAN HIEROGLYPH G045A -+ /xf0/x93/x85/xb6 EGYPTIAN HIEROGLYPH G046 -+ /xf0/x93/x85/xb7 EGYPTIAN HIEROGLYPH G047 -+ /xf0/x93/x85/xb8 EGYPTIAN HIEROGLYPH G048 -+ /xf0/x93/x85/xb9 EGYPTIAN HIEROGLYPH G049 -+ /xf0/x93/x85/xba EGYPTIAN HIEROGLYPH G050 -+ /xf0/x93/x85/xbb EGYPTIAN HIEROGLYPH G051 -+ /xf0/x93/x85/xbc EGYPTIAN HIEROGLYPH G052 -+ /xf0/x93/x85/xbd EGYPTIAN HIEROGLYPH G053 -+ /xf0/x93/x85/xbe EGYPTIAN HIEROGLYPH G054 -+ /xf0/x93/x85/xbf EGYPTIAN HIEROGLYPH H001 -+ /xf0/x93/x86/x80 EGYPTIAN HIEROGLYPH H002 -+ /xf0/x93/x86/x81 EGYPTIAN HIEROGLYPH H003 -+ /xf0/x93/x86/x82 EGYPTIAN HIEROGLYPH H004 -+ /xf0/x93/x86/x83 EGYPTIAN HIEROGLYPH H005 -+ /xf0/x93/x86/x84 EGYPTIAN HIEROGLYPH H006 -+ /xf0/x93/x86/x85 EGYPTIAN HIEROGLYPH H006A -+ /xf0/x93/x86/x86 EGYPTIAN HIEROGLYPH H007 -+ /xf0/x93/x86/x87 EGYPTIAN HIEROGLYPH H008 -+ /xf0/x93/x86/x88 EGYPTIAN HIEROGLYPH I001 -+ /xf0/x93/x86/x89 EGYPTIAN HIEROGLYPH I002 -+ /xf0/x93/x86/x8a EGYPTIAN HIEROGLYPH I003 -+ /xf0/x93/x86/x8b EGYPTIAN HIEROGLYPH I004 -+ /xf0/x93/x86/x8c EGYPTIAN HIEROGLYPH I005 -+ /xf0/x93/x86/x8d EGYPTIAN HIEROGLYPH I005A -+ /xf0/x93/x86/x8e EGYPTIAN HIEROGLYPH I006 -+ /xf0/x93/x86/x8f EGYPTIAN HIEROGLYPH I007 -+ /xf0/x93/x86/x90 EGYPTIAN HIEROGLYPH I008 -+ /xf0/x93/x86/x91 EGYPTIAN HIEROGLYPH I009 -+ /xf0/x93/x86/x92 EGYPTIAN HIEROGLYPH I009A -+ /xf0/x93/x86/x93 EGYPTIAN HIEROGLYPH I010 -+ /xf0/x93/x86/x94 EGYPTIAN HIEROGLYPH I010A -+ /xf0/x93/x86/x95 EGYPTIAN HIEROGLYPH I011 -+ /xf0/x93/x86/x96 EGYPTIAN HIEROGLYPH I011A -+ /xf0/x93/x86/x97 EGYPTIAN HIEROGLYPH I012 -+ /xf0/x93/x86/x98 EGYPTIAN HIEROGLYPH I013 -+ /xf0/x93/x86/x99 EGYPTIAN HIEROGLYPH I014 -+ /xf0/x93/x86/x9a EGYPTIAN HIEROGLYPH I015 -+ /xf0/x93/x86/x9b EGYPTIAN HIEROGLYPH K001 -+ /xf0/x93/x86/x9c EGYPTIAN HIEROGLYPH K002 -+ /xf0/x93/x86/x9d EGYPTIAN HIEROGLYPH K003 -+ /xf0/x93/x86/x9e EGYPTIAN HIEROGLYPH K004 -+ /xf0/x93/x86/x9f EGYPTIAN HIEROGLYPH K005 -+ /xf0/x93/x86/xa0 EGYPTIAN HIEROGLYPH K006 -+ /xf0/x93/x86/xa1 EGYPTIAN HIEROGLYPH K007 -+ /xf0/x93/x86/xa2 EGYPTIAN HIEROGLYPH K008 -+ /xf0/x93/x86/xa3 EGYPTIAN HIEROGLYPH L001 -+ /xf0/x93/x86/xa4 EGYPTIAN HIEROGLYPH L002 -+ /xf0/x93/x86/xa5 EGYPTIAN HIEROGLYPH L002A -+ /xf0/x93/x86/xa6 EGYPTIAN HIEROGLYPH L003 -+ /xf0/x93/x86/xa7 EGYPTIAN HIEROGLYPH L004 -+ /xf0/x93/x86/xa8 EGYPTIAN HIEROGLYPH L005 -+ /xf0/x93/x86/xa9 EGYPTIAN HIEROGLYPH L006 -+ /xf0/x93/x86/xaa EGYPTIAN HIEROGLYPH L006A -+ /xf0/x93/x86/xab EGYPTIAN HIEROGLYPH L007 -+ /xf0/x93/x86/xac EGYPTIAN HIEROGLYPH L008 -+ /xf0/x93/x86/xad EGYPTIAN HIEROGLYPH M001 -+ /xf0/x93/x86/xae EGYPTIAN HIEROGLYPH M001A -+ /xf0/x93/x86/xaf EGYPTIAN HIEROGLYPH M001B -+ /xf0/x93/x86/xb0 EGYPTIAN HIEROGLYPH M002 -+ /xf0/x93/x86/xb1 EGYPTIAN HIEROGLYPH M003 -+ /xf0/x93/x86/xb2 EGYPTIAN HIEROGLYPH M003A -+ /xf0/x93/x86/xb3 EGYPTIAN HIEROGLYPH M004 -+ /xf0/x93/x86/xb4 EGYPTIAN HIEROGLYPH M005 -+ /xf0/x93/x86/xb5 EGYPTIAN HIEROGLYPH M006 -+ /xf0/x93/x86/xb6 EGYPTIAN HIEROGLYPH M007 -+ /xf0/x93/x86/xb7 EGYPTIAN HIEROGLYPH M008 -+ /xf0/x93/x86/xb8 EGYPTIAN HIEROGLYPH M009 -+ /xf0/x93/x86/xb9 EGYPTIAN HIEROGLYPH M010 -+ /xf0/x93/x86/xba EGYPTIAN HIEROGLYPH M010A -+ /xf0/x93/x86/xbb EGYPTIAN HIEROGLYPH M011 -+ /xf0/x93/x86/xbc EGYPTIAN HIEROGLYPH M012 -+ /xf0/x93/x86/xbd EGYPTIAN HIEROGLYPH M012A -+ /xf0/x93/x86/xbe EGYPTIAN HIEROGLYPH M012B -+ /xf0/x93/x86/xbf EGYPTIAN HIEROGLYPH M012C -+ /xf0/x93/x87/x80 EGYPTIAN HIEROGLYPH M012D -+ /xf0/x93/x87/x81 EGYPTIAN HIEROGLYPH M012E -+ /xf0/x93/x87/x82 EGYPTIAN HIEROGLYPH M012F -+ /xf0/x93/x87/x83 EGYPTIAN HIEROGLYPH M012G -+ /xf0/x93/x87/x84 EGYPTIAN HIEROGLYPH M012H -+ /xf0/x93/x87/x85 EGYPTIAN HIEROGLYPH M013 -+ /xf0/x93/x87/x86 EGYPTIAN HIEROGLYPH M014 -+ /xf0/x93/x87/x87 EGYPTIAN HIEROGLYPH M015 -+ /xf0/x93/x87/x88 EGYPTIAN HIEROGLYPH M015A -+ /xf0/x93/x87/x89 EGYPTIAN HIEROGLYPH M016 -+ /xf0/x93/x87/x8a EGYPTIAN HIEROGLYPH M016A -+ /xf0/x93/x87/x8b EGYPTIAN HIEROGLYPH M017 -+ /xf0/x93/x87/x8c EGYPTIAN HIEROGLYPH M017A -+ /xf0/x93/x87/x8d EGYPTIAN HIEROGLYPH M018 -+ /xf0/x93/x87/x8e EGYPTIAN HIEROGLYPH M019 -+ /xf0/x93/x87/x8f EGYPTIAN HIEROGLYPH M020 -+ /xf0/x93/x87/x90 EGYPTIAN HIEROGLYPH M021 -+ /xf0/x93/x87/x91 EGYPTIAN HIEROGLYPH M022 -+ /xf0/x93/x87/x92 EGYPTIAN HIEROGLYPH M022A -+ /xf0/x93/x87/x93 EGYPTIAN HIEROGLYPH M023 -+ /xf0/x93/x87/x94 EGYPTIAN HIEROGLYPH M024 -+ /xf0/x93/x87/x95 EGYPTIAN HIEROGLYPH M024A -+ /xf0/x93/x87/x96 EGYPTIAN HIEROGLYPH M025 -+ /xf0/x93/x87/x97 EGYPTIAN HIEROGLYPH M026 -+ /xf0/x93/x87/x98 EGYPTIAN HIEROGLYPH M027 -+ /xf0/x93/x87/x99 EGYPTIAN HIEROGLYPH M028 -+ /xf0/x93/x87/x9a EGYPTIAN HIEROGLYPH M028A -+ /xf0/x93/x87/x9b EGYPTIAN HIEROGLYPH M029 -+ /xf0/x93/x87/x9c EGYPTIAN HIEROGLYPH M030 -+ /xf0/x93/x87/x9d EGYPTIAN HIEROGLYPH M031 -+ /xf0/x93/x87/x9e EGYPTIAN HIEROGLYPH M031A -+ /xf0/x93/x87/x9f EGYPTIAN HIEROGLYPH M032 -+ /xf0/x93/x87/xa0 EGYPTIAN HIEROGLYPH M033 -+ /xf0/x93/x87/xa1 EGYPTIAN HIEROGLYPH M033A -+ /xf0/x93/x87/xa2 EGYPTIAN HIEROGLYPH M033B -+ /xf0/x93/x87/xa3 EGYPTIAN HIEROGLYPH M034 -+ /xf0/x93/x87/xa4 EGYPTIAN HIEROGLYPH M035 -+ /xf0/x93/x87/xa5 EGYPTIAN HIEROGLYPH M036 -+ /xf0/x93/x87/xa6 EGYPTIAN HIEROGLYPH M037 -+ /xf0/x93/x87/xa7 EGYPTIAN HIEROGLYPH M038 -+ /xf0/x93/x87/xa8 EGYPTIAN HIEROGLYPH M039 -+ /xf0/x93/x87/xa9 EGYPTIAN HIEROGLYPH M040 -+ /xf0/x93/x87/xaa EGYPTIAN HIEROGLYPH M040A -+ /xf0/x93/x87/xab EGYPTIAN HIEROGLYPH M041 -+ /xf0/x93/x87/xac EGYPTIAN HIEROGLYPH M042 -+ /xf0/x93/x87/xad EGYPTIAN HIEROGLYPH M043 -+ /xf0/x93/x87/xae EGYPTIAN HIEROGLYPH M044 -+ /xf0/x93/x87/xaf EGYPTIAN HIEROGLYPH N001 -+ /xf0/x93/x87/xb0 EGYPTIAN HIEROGLYPH N002 -+ /xf0/x93/x87/xb1 EGYPTIAN HIEROGLYPH N003 -+ /xf0/x93/x87/xb2 EGYPTIAN HIEROGLYPH N004 -+ /xf0/x93/x87/xb3 EGYPTIAN HIEROGLYPH N005 -+ /xf0/x93/x87/xb4 EGYPTIAN HIEROGLYPH N006 -+ /xf0/x93/x87/xb5 EGYPTIAN HIEROGLYPH N007 -+ /xf0/x93/x87/xb6 EGYPTIAN HIEROGLYPH N008 -+ /xf0/x93/x87/xb7 EGYPTIAN HIEROGLYPH N009 -+ /xf0/x93/x87/xb8 EGYPTIAN HIEROGLYPH N010 -+ /xf0/x93/x87/xb9 EGYPTIAN HIEROGLYPH N011 -+ /xf0/x93/x87/xba EGYPTIAN HIEROGLYPH N012 -+ /xf0/x93/x87/xbb EGYPTIAN HIEROGLYPH N013 -+ /xf0/x93/x87/xbc EGYPTIAN HIEROGLYPH N014 -+ /xf0/x93/x87/xbd EGYPTIAN HIEROGLYPH N015 -+ /xf0/x93/x87/xbe EGYPTIAN HIEROGLYPH N016 -+ /xf0/x93/x87/xbf EGYPTIAN HIEROGLYPH N017 -+ /xf0/x93/x88/x80 EGYPTIAN HIEROGLYPH N018 -+ /xf0/x93/x88/x81 EGYPTIAN HIEROGLYPH N018A -+ /xf0/x93/x88/x82 EGYPTIAN HIEROGLYPH N018B -+ /xf0/x93/x88/x83 EGYPTIAN HIEROGLYPH N019 -+ /xf0/x93/x88/x84 EGYPTIAN HIEROGLYPH N020 -+ /xf0/x93/x88/x85 EGYPTIAN HIEROGLYPH N021 -+ /xf0/x93/x88/x86 EGYPTIAN HIEROGLYPH N022 -+ /xf0/x93/x88/x87 EGYPTIAN HIEROGLYPH N023 -+ /xf0/x93/x88/x88 EGYPTIAN HIEROGLYPH N024 -+ /xf0/x93/x88/x89 EGYPTIAN HIEROGLYPH N025 -+ /xf0/x93/x88/x8a EGYPTIAN HIEROGLYPH N025A -+ /xf0/x93/x88/x8b EGYPTIAN HIEROGLYPH N026 -+ /xf0/x93/x88/x8c EGYPTIAN HIEROGLYPH N027 -+ /xf0/x93/x88/x8d EGYPTIAN HIEROGLYPH N028 -+ /xf0/x93/x88/x8e EGYPTIAN HIEROGLYPH N029 -+ /xf0/x93/x88/x8f EGYPTIAN HIEROGLYPH N030 -+ /xf0/x93/x88/x90 EGYPTIAN HIEROGLYPH N031 -+ /xf0/x93/x88/x91 EGYPTIAN HIEROGLYPH N032 -+ /xf0/x93/x88/x92 EGYPTIAN HIEROGLYPH N033 -+ /xf0/x93/x88/x93 EGYPTIAN HIEROGLYPH N033A -+ /xf0/x93/x88/x94 EGYPTIAN HIEROGLYPH N034 -+ /xf0/x93/x88/x95 EGYPTIAN HIEROGLYPH N034A -+ /xf0/x93/x88/x96 EGYPTIAN HIEROGLYPH N035 -+ /xf0/x93/x88/x97 EGYPTIAN HIEROGLYPH N035A -+ /xf0/x93/x88/x98 EGYPTIAN HIEROGLYPH N036 -+ /xf0/x93/x88/x99 EGYPTIAN HIEROGLYPH N037 -+ /xf0/x93/x88/x9a EGYPTIAN HIEROGLYPH N037A -+ /xf0/x93/x88/x9b EGYPTIAN HIEROGLYPH N038 -+ /xf0/x93/x88/x9c EGYPTIAN HIEROGLYPH N039 -+ /xf0/x93/x88/x9d EGYPTIAN HIEROGLYPH N040 -+ /xf0/x93/x88/x9e EGYPTIAN HIEROGLYPH N041 -+ /xf0/x93/x88/x9f EGYPTIAN HIEROGLYPH N042 -+ /xf0/x93/x88/xa0 EGYPTIAN HIEROGLYPH NL001 -+ /xf0/x93/x88/xa1 EGYPTIAN HIEROGLYPH NL002 -+ /xf0/x93/x88/xa2 EGYPTIAN HIEROGLYPH NL003 -+ /xf0/x93/x88/xa3 EGYPTIAN HIEROGLYPH NL004 -+ /xf0/x93/x88/xa4 EGYPTIAN HIEROGLYPH NL005 -+ /xf0/x93/x88/xa5 EGYPTIAN HIEROGLYPH NL005A -+ /xf0/x93/x88/xa6 EGYPTIAN HIEROGLYPH NL006 -+ /xf0/x93/x88/xa7 EGYPTIAN HIEROGLYPH NL007 -+ /xf0/x93/x88/xa8 EGYPTIAN HIEROGLYPH NL008 -+ /xf0/x93/x88/xa9 EGYPTIAN HIEROGLYPH NL009 -+ /xf0/x93/x88/xaa EGYPTIAN HIEROGLYPH NL010 -+ /xf0/x93/x88/xab EGYPTIAN HIEROGLYPH NL011 -+ /xf0/x93/x88/xac EGYPTIAN HIEROGLYPH NL012 -+ /xf0/x93/x88/xad EGYPTIAN HIEROGLYPH NL013 -+ /xf0/x93/x88/xae EGYPTIAN HIEROGLYPH NL014 -+ /xf0/x93/x88/xaf EGYPTIAN HIEROGLYPH NL015 -+ /xf0/x93/x88/xb0 EGYPTIAN HIEROGLYPH NL016 -+ /xf0/x93/x88/xb1 EGYPTIAN HIEROGLYPH NL017 -+ /xf0/x93/x88/xb2 EGYPTIAN HIEROGLYPH NL017A -+ /xf0/x93/x88/xb3 EGYPTIAN HIEROGLYPH NL018 -+ /xf0/x93/x88/xb4 EGYPTIAN HIEROGLYPH NL019 -+ /xf0/x93/x88/xb5 EGYPTIAN HIEROGLYPH NL020 -+ /xf0/x93/x88/xb6 EGYPTIAN HIEROGLYPH NU001 -+ /xf0/x93/x88/xb7 EGYPTIAN HIEROGLYPH NU002 -+ /xf0/x93/x88/xb8 EGYPTIAN HIEROGLYPH NU003 -+ /xf0/x93/x88/xb9 EGYPTIAN HIEROGLYPH NU004 -+ /xf0/x93/x88/xba EGYPTIAN HIEROGLYPH NU005 -+ /xf0/x93/x88/xbb EGYPTIAN HIEROGLYPH NU006 -+ /xf0/x93/x88/xbc EGYPTIAN HIEROGLYPH NU007 -+ /xf0/x93/x88/xbd EGYPTIAN HIEROGLYPH NU008 -+ /xf0/x93/x88/xbe EGYPTIAN HIEROGLYPH NU009 -+ /xf0/x93/x88/xbf EGYPTIAN HIEROGLYPH NU010 -+ /xf0/x93/x89/x80 EGYPTIAN HIEROGLYPH NU010A -+ /xf0/x93/x89/x81 EGYPTIAN HIEROGLYPH NU011 -+ /xf0/x93/x89/x82 EGYPTIAN HIEROGLYPH NU011A -+ /xf0/x93/x89/x83 EGYPTIAN HIEROGLYPH NU012 -+ /xf0/x93/x89/x84 EGYPTIAN HIEROGLYPH NU013 -+ /xf0/x93/x89/x85 EGYPTIAN HIEROGLYPH NU014 -+ /xf0/x93/x89/x86 EGYPTIAN HIEROGLYPH NU015 -+ /xf0/x93/x89/x87 EGYPTIAN HIEROGLYPH NU016 -+ /xf0/x93/x89/x88 EGYPTIAN HIEROGLYPH NU017 -+ /xf0/x93/x89/x89 EGYPTIAN HIEROGLYPH NU018 -+ /xf0/x93/x89/x8a EGYPTIAN HIEROGLYPH NU018A -+ /xf0/x93/x89/x8b EGYPTIAN HIEROGLYPH NU019 -+ /xf0/x93/x89/x8c EGYPTIAN HIEROGLYPH NU020 -+ /xf0/x93/x89/x8d EGYPTIAN HIEROGLYPH NU021 -+ /xf0/x93/x89/x8e EGYPTIAN HIEROGLYPH NU022 -+ /xf0/x93/x89/x8f EGYPTIAN HIEROGLYPH NU022A -+ /xf0/x93/x89/x90 EGYPTIAN HIEROGLYPH O001 -+ /xf0/x93/x89/x91 EGYPTIAN HIEROGLYPH O001A -+ /xf0/x93/x89/x92 EGYPTIAN HIEROGLYPH O002 -+ /xf0/x93/x89/x93 EGYPTIAN HIEROGLYPH O003 -+ /xf0/x93/x89/x94 EGYPTIAN HIEROGLYPH O004 -+ /xf0/x93/x89/x95 EGYPTIAN HIEROGLYPH O005 -+ /xf0/x93/x89/x96 EGYPTIAN HIEROGLYPH O005A -+ /xf0/x93/x89/x97 EGYPTIAN HIEROGLYPH O006 -+ /xf0/x93/x89/x98 EGYPTIAN HIEROGLYPH O006A -+ /xf0/x93/x89/x99 EGYPTIAN HIEROGLYPH O006B -+ /xf0/x93/x89/x9a EGYPTIAN HIEROGLYPH O006C -+ /xf0/x93/x89/x9b EGYPTIAN HIEROGLYPH O006D -+ /xf0/x93/x89/x9c EGYPTIAN HIEROGLYPH O006E -+ /xf0/x93/x89/x9d EGYPTIAN HIEROGLYPH O006F -+ /xf0/x93/x89/x9e EGYPTIAN HIEROGLYPH O007 -+ /xf0/x93/x89/x9f EGYPTIAN HIEROGLYPH O008 -+ /xf0/x93/x89/xa0 EGYPTIAN HIEROGLYPH O009 -+ /xf0/x93/x89/xa1 EGYPTIAN HIEROGLYPH O010 -+ /xf0/x93/x89/xa2 EGYPTIAN HIEROGLYPH O010A -+ /xf0/x93/x89/xa3 EGYPTIAN HIEROGLYPH O010B -+ /xf0/x93/x89/xa4 EGYPTIAN HIEROGLYPH O010C -+ /xf0/x93/x89/xa5 EGYPTIAN HIEROGLYPH O011 -+ /xf0/x93/x89/xa6 EGYPTIAN HIEROGLYPH O012 -+ /xf0/x93/x89/xa7 EGYPTIAN HIEROGLYPH O013 -+ /xf0/x93/x89/xa8 EGYPTIAN HIEROGLYPH O014 -+ /xf0/x93/x89/xa9 EGYPTIAN HIEROGLYPH O015 -+ /xf0/x93/x89/xaa EGYPTIAN HIEROGLYPH O016 -+ /xf0/x93/x89/xab EGYPTIAN HIEROGLYPH O017 -+ /xf0/x93/x89/xac EGYPTIAN HIEROGLYPH O018 -+ /xf0/x93/x89/xad EGYPTIAN HIEROGLYPH O019 -+ /xf0/x93/x89/xae EGYPTIAN HIEROGLYPH O019A -+ /xf0/x93/x89/xaf EGYPTIAN HIEROGLYPH O020 -+ /xf0/x93/x89/xb0 EGYPTIAN HIEROGLYPH O020A -+ /xf0/x93/x89/xb1 EGYPTIAN HIEROGLYPH O021 -+ /xf0/x93/x89/xb2 EGYPTIAN HIEROGLYPH O022 -+ /xf0/x93/x89/xb3 EGYPTIAN HIEROGLYPH O023 -+ /xf0/x93/x89/xb4 EGYPTIAN HIEROGLYPH O024 -+ /xf0/x93/x89/xb5 EGYPTIAN HIEROGLYPH O024A -+ /xf0/x93/x89/xb6 EGYPTIAN HIEROGLYPH O025 -+ /xf0/x93/x89/xb7 EGYPTIAN HIEROGLYPH O025A -+ /xf0/x93/x89/xb8 EGYPTIAN HIEROGLYPH O026 -+ /xf0/x93/x89/xb9 EGYPTIAN HIEROGLYPH O027 -+ /xf0/x93/x89/xba EGYPTIAN HIEROGLYPH O028 -+ /xf0/x93/x89/xbb EGYPTIAN HIEROGLYPH O029 -+ /xf0/x93/x89/xbc EGYPTIAN HIEROGLYPH O029A -+ /xf0/x93/x89/xbd EGYPTIAN HIEROGLYPH O030 -+ /xf0/x93/x89/xbe EGYPTIAN HIEROGLYPH O030A -+ /xf0/x93/x89/xbf EGYPTIAN HIEROGLYPH O031 -+ /xf0/x93/x8a/x80 EGYPTIAN HIEROGLYPH O032 -+ /xf0/x93/x8a/x81 EGYPTIAN HIEROGLYPH O033 -+ /xf0/x93/x8a/x82 EGYPTIAN HIEROGLYPH O033A -+ /xf0/x93/x8a/x83 EGYPTIAN HIEROGLYPH O034 -+ /xf0/x93/x8a/x84 EGYPTIAN HIEROGLYPH O035 -+ /xf0/x93/x8a/x85 EGYPTIAN HIEROGLYPH O036 -+ /xf0/x93/x8a/x86 EGYPTIAN HIEROGLYPH O036A -+ /xf0/x93/x8a/x87 EGYPTIAN HIEROGLYPH O036B -+ /xf0/x93/x8a/x88 EGYPTIAN HIEROGLYPH O036C -+ /xf0/x93/x8a/x89 EGYPTIAN HIEROGLYPH O036D -+ /xf0/x93/x8a/x8a EGYPTIAN HIEROGLYPH O037 -+ /xf0/x93/x8a/x8b EGYPTIAN HIEROGLYPH O038 -+ /xf0/x93/x8a/x8c EGYPTIAN HIEROGLYPH O039 -+ /xf0/x93/x8a/x8d EGYPTIAN HIEROGLYPH O040 -+ /xf0/x93/x8a/x8e EGYPTIAN HIEROGLYPH O041 -+ /xf0/x93/x8a/x8f EGYPTIAN HIEROGLYPH O042 -+ /xf0/x93/x8a/x90 EGYPTIAN HIEROGLYPH O043 -+ /xf0/x93/x8a/x91 EGYPTIAN HIEROGLYPH O044 -+ /xf0/x93/x8a/x92 EGYPTIAN HIEROGLYPH O045 -+ /xf0/x93/x8a/x93 EGYPTIAN HIEROGLYPH O046 -+ /xf0/x93/x8a/x94 EGYPTIAN HIEROGLYPH O047 -+ /xf0/x93/x8a/x95 EGYPTIAN HIEROGLYPH O048 -+ /xf0/x93/x8a/x96 EGYPTIAN HIEROGLYPH O049 -+ /xf0/x93/x8a/x97 EGYPTIAN HIEROGLYPH O050 -+ /xf0/x93/x8a/x98 EGYPTIAN HIEROGLYPH O050A -+ /xf0/x93/x8a/x99 EGYPTIAN HIEROGLYPH O050B -+ /xf0/x93/x8a/x9a EGYPTIAN HIEROGLYPH O051 -+ /xf0/x93/x8a/x9b EGYPTIAN HIEROGLYPH P001 -+ /xf0/x93/x8a/x9c EGYPTIAN HIEROGLYPH P001A -+ /xf0/x93/x8a/x9d EGYPTIAN HIEROGLYPH P002 -+ /xf0/x93/x8a/x9e EGYPTIAN HIEROGLYPH P003 -+ /xf0/x93/x8a/x9f EGYPTIAN HIEROGLYPH P003A -+ /xf0/x93/x8a/xa0 EGYPTIAN HIEROGLYPH P004 -+ /xf0/x93/x8a/xa1 EGYPTIAN HIEROGLYPH P005 -+ /xf0/x93/x8a/xa2 EGYPTIAN HIEROGLYPH P006 -+ /xf0/x93/x8a/xa3 EGYPTIAN HIEROGLYPH P007 -+ /xf0/x93/x8a/xa4 EGYPTIAN HIEROGLYPH P008 -+ /xf0/x93/x8a/xa5 EGYPTIAN HIEROGLYPH P009 -+ /xf0/x93/x8a/xa6 EGYPTIAN HIEROGLYPH P010 -+ /xf0/x93/x8a/xa7 EGYPTIAN HIEROGLYPH P011 -+ /xf0/x93/x8a/xa8 EGYPTIAN HIEROGLYPH Q001 -+ /xf0/x93/x8a/xa9 EGYPTIAN HIEROGLYPH Q002 -+ /xf0/x93/x8a/xaa EGYPTIAN HIEROGLYPH Q003 -+ /xf0/x93/x8a/xab EGYPTIAN HIEROGLYPH Q004 -+ /xf0/x93/x8a/xac EGYPTIAN HIEROGLYPH Q005 -+ /xf0/x93/x8a/xad EGYPTIAN HIEROGLYPH Q006 -+ /xf0/x93/x8a/xae EGYPTIAN HIEROGLYPH Q007 -+ /xf0/x93/x8a/xaf EGYPTIAN HIEROGLYPH R001 -+ /xf0/x93/x8a/xb0 EGYPTIAN HIEROGLYPH R002 -+ /xf0/x93/x8a/xb1 EGYPTIAN HIEROGLYPH R002A -+ /xf0/x93/x8a/xb2 EGYPTIAN HIEROGLYPH R003 -+ /xf0/x93/x8a/xb3 EGYPTIAN HIEROGLYPH R003A -+ /xf0/x93/x8a/xb4 EGYPTIAN HIEROGLYPH R003B -+ /xf0/x93/x8a/xb5 EGYPTIAN HIEROGLYPH R004 -+ /xf0/x93/x8a/xb6 EGYPTIAN HIEROGLYPH R005 -+ /xf0/x93/x8a/xb7 EGYPTIAN HIEROGLYPH R006 -+ /xf0/x93/x8a/xb8 EGYPTIAN HIEROGLYPH R007 -+ /xf0/x93/x8a/xb9 EGYPTIAN HIEROGLYPH R008 -+ /xf0/x93/x8a/xba EGYPTIAN HIEROGLYPH R009 -+ /xf0/x93/x8a/xbb EGYPTIAN HIEROGLYPH R010 -+ /xf0/x93/x8a/xbc EGYPTIAN HIEROGLYPH R010A -+ /xf0/x93/x8a/xbd EGYPTIAN HIEROGLYPH R011 -+ /xf0/x93/x8a/xbe EGYPTIAN HIEROGLYPH R012 -+ /xf0/x93/x8a/xbf EGYPTIAN HIEROGLYPH R013 -+ /xf0/x93/x8b/x80 EGYPTIAN HIEROGLYPH R014 -+ /xf0/x93/x8b/x81 EGYPTIAN HIEROGLYPH R015 -+ /xf0/x93/x8b/x82 EGYPTIAN HIEROGLYPH R016 -+ /xf0/x93/x8b/x83 EGYPTIAN HIEROGLYPH R016A -+ /xf0/x93/x8b/x84 EGYPTIAN HIEROGLYPH R017 -+ /xf0/x93/x8b/x85 EGYPTIAN HIEROGLYPH R018 -+ /xf0/x93/x8b/x86 EGYPTIAN HIEROGLYPH R019 -+ /xf0/x93/x8b/x87 EGYPTIAN HIEROGLYPH R020 -+ /xf0/x93/x8b/x88 EGYPTIAN HIEROGLYPH R021 -+ /xf0/x93/x8b/x89 EGYPTIAN HIEROGLYPH R022 -+ /xf0/x93/x8b/x8a EGYPTIAN HIEROGLYPH R023 -+ /xf0/x93/x8b/x8b EGYPTIAN HIEROGLYPH R024 -+ /xf0/x93/x8b/x8c EGYPTIAN HIEROGLYPH R025 -+ /xf0/x93/x8b/x8d EGYPTIAN HIEROGLYPH R026 -+ /xf0/x93/x8b/x8e EGYPTIAN HIEROGLYPH R027 -+ /xf0/x93/x8b/x8f EGYPTIAN HIEROGLYPH R028 -+ /xf0/x93/x8b/x90 EGYPTIAN HIEROGLYPH R029 -+ /xf0/x93/x8b/x91 EGYPTIAN HIEROGLYPH S001 -+ /xf0/x93/x8b/x92 EGYPTIAN HIEROGLYPH S002 -+ /xf0/x93/x8b/x93 EGYPTIAN HIEROGLYPH S002A -+ /xf0/x93/x8b/x94 EGYPTIAN HIEROGLYPH S003 -+ /xf0/x93/x8b/x95 EGYPTIAN HIEROGLYPH S004 -+ /xf0/x93/x8b/x96 EGYPTIAN HIEROGLYPH S005 -+ /xf0/x93/x8b/x97 EGYPTIAN HIEROGLYPH S006 -+ /xf0/x93/x8b/x98 EGYPTIAN HIEROGLYPH S006A -+ /xf0/x93/x8b/x99 EGYPTIAN HIEROGLYPH S007 -+ /xf0/x93/x8b/x9a EGYPTIAN HIEROGLYPH S008 -+ /xf0/x93/x8b/x9b EGYPTIAN HIEROGLYPH S009 -+ /xf0/x93/x8b/x9c EGYPTIAN HIEROGLYPH S010 -+ /xf0/x93/x8b/x9d EGYPTIAN HIEROGLYPH S011 -+ /xf0/x93/x8b/x9e EGYPTIAN HIEROGLYPH S012 -+ /xf0/x93/x8b/x9f EGYPTIAN HIEROGLYPH S013 -+ /xf0/x93/x8b/xa0 EGYPTIAN HIEROGLYPH S014 -+ /xf0/x93/x8b/xa1 EGYPTIAN HIEROGLYPH S014A -+ /xf0/x93/x8b/xa2 EGYPTIAN HIEROGLYPH S014B -+ /xf0/x93/x8b/xa3 EGYPTIAN HIEROGLYPH S015 -+ /xf0/x93/x8b/xa4 EGYPTIAN HIEROGLYPH S016 -+ /xf0/x93/x8b/xa5 EGYPTIAN HIEROGLYPH S017 -+ /xf0/x93/x8b/xa6 EGYPTIAN HIEROGLYPH S017A -+ /xf0/x93/x8b/xa7 EGYPTIAN HIEROGLYPH S018 -+ /xf0/x93/x8b/xa8 EGYPTIAN HIEROGLYPH S019 -+ /xf0/x93/x8b/xa9 EGYPTIAN HIEROGLYPH S020 -+ /xf0/x93/x8b/xaa EGYPTIAN HIEROGLYPH S021 -+ /xf0/x93/x8b/xab EGYPTIAN HIEROGLYPH S022 -+ /xf0/x93/x8b/xac EGYPTIAN HIEROGLYPH S023 -+ /xf0/x93/x8b/xad EGYPTIAN HIEROGLYPH S024 -+ /xf0/x93/x8b/xae EGYPTIAN HIEROGLYPH S025 -+ /xf0/x93/x8b/xaf EGYPTIAN HIEROGLYPH S026 -+ /xf0/x93/x8b/xb0 EGYPTIAN HIEROGLYPH S026A -+ /xf0/x93/x8b/xb1 EGYPTIAN HIEROGLYPH S026B -+ /xf0/x93/x8b/xb2 EGYPTIAN HIEROGLYPH S027 -+ /xf0/x93/x8b/xb3 EGYPTIAN HIEROGLYPH S028 -+ /xf0/x93/x8b/xb4 EGYPTIAN HIEROGLYPH S029 -+ /xf0/x93/x8b/xb5 EGYPTIAN HIEROGLYPH S030 -+ /xf0/x93/x8b/xb6 EGYPTIAN HIEROGLYPH S031 -+ /xf0/x93/x8b/xb7 EGYPTIAN HIEROGLYPH S032 -+ /xf0/x93/x8b/xb8 EGYPTIAN HIEROGLYPH S033 -+ /xf0/x93/x8b/xb9 EGYPTIAN HIEROGLYPH S034 -+ /xf0/x93/x8b/xba EGYPTIAN HIEROGLYPH S035 -+ /xf0/x93/x8b/xbb EGYPTIAN HIEROGLYPH S035A -+ /xf0/x93/x8b/xbc EGYPTIAN HIEROGLYPH S036 -+ /xf0/x93/x8b/xbd EGYPTIAN HIEROGLYPH S037 -+ /xf0/x93/x8b/xbe EGYPTIAN HIEROGLYPH S038 -+ /xf0/x93/x8b/xbf EGYPTIAN HIEROGLYPH S039 -+ /xf0/x93/x8c/x80 EGYPTIAN HIEROGLYPH S040 -+ /xf0/x93/x8c/x81 EGYPTIAN HIEROGLYPH S041 -+ /xf0/x93/x8c/x82 EGYPTIAN HIEROGLYPH S042 -+ /xf0/x93/x8c/x83 EGYPTIAN HIEROGLYPH S043 -+ /xf0/x93/x8c/x84 EGYPTIAN HIEROGLYPH S044 -+ /xf0/x93/x8c/x85 EGYPTIAN HIEROGLYPH S045 -+ /xf0/x93/x8c/x86 EGYPTIAN HIEROGLYPH S046 -+ /xf0/x93/x8c/x87 EGYPTIAN HIEROGLYPH T001 -+ /xf0/x93/x8c/x88 EGYPTIAN HIEROGLYPH T002 -+ /xf0/x93/x8c/x89 EGYPTIAN HIEROGLYPH T003 -+ /xf0/x93/x8c/x8a EGYPTIAN HIEROGLYPH T003A -+ /xf0/x93/x8c/x8b EGYPTIAN HIEROGLYPH T004 -+ /xf0/x93/x8c/x8c EGYPTIAN HIEROGLYPH T005 -+ /xf0/x93/x8c/x8d EGYPTIAN HIEROGLYPH T006 -+ /xf0/x93/x8c/x8e EGYPTIAN HIEROGLYPH T007 -+ /xf0/x93/x8c/x8f EGYPTIAN HIEROGLYPH T007A -+ /xf0/x93/x8c/x90 EGYPTIAN HIEROGLYPH T008 -+ /xf0/x93/x8c/x91 EGYPTIAN HIEROGLYPH T008A -+ /xf0/x93/x8c/x92 EGYPTIAN HIEROGLYPH T009 -+ /xf0/x93/x8c/x93 EGYPTIAN HIEROGLYPH T009A -+ /xf0/x93/x8c/x94 EGYPTIAN HIEROGLYPH T010 -+ /xf0/x93/x8c/x95 EGYPTIAN HIEROGLYPH T011 -+ /xf0/x93/x8c/x96 EGYPTIAN HIEROGLYPH T011A -+ /xf0/x93/x8c/x97 EGYPTIAN HIEROGLYPH T012 -+ /xf0/x93/x8c/x98 EGYPTIAN HIEROGLYPH T013 -+ /xf0/x93/x8c/x99 EGYPTIAN HIEROGLYPH T014 -+ /xf0/x93/x8c/x9a EGYPTIAN HIEROGLYPH T015 -+ /xf0/x93/x8c/x9b EGYPTIAN HIEROGLYPH T016 -+ /xf0/x93/x8c/x9c EGYPTIAN HIEROGLYPH T016A -+ /xf0/x93/x8c/x9d EGYPTIAN HIEROGLYPH T017 -+ /xf0/x93/x8c/x9e EGYPTIAN HIEROGLYPH T018 -+ /xf0/x93/x8c/x9f EGYPTIAN HIEROGLYPH T019 -+ /xf0/x93/x8c/xa0 EGYPTIAN HIEROGLYPH T020 -+ /xf0/x93/x8c/xa1 EGYPTIAN HIEROGLYPH T021 -+ /xf0/x93/x8c/xa2 EGYPTIAN HIEROGLYPH T022 -+ /xf0/x93/x8c/xa3 EGYPTIAN HIEROGLYPH T023 -+ /xf0/x93/x8c/xa4 EGYPTIAN HIEROGLYPH T024 -+ /xf0/x93/x8c/xa5 EGYPTIAN HIEROGLYPH T025 -+ /xf0/x93/x8c/xa6 EGYPTIAN HIEROGLYPH T026 -+ /xf0/x93/x8c/xa7 EGYPTIAN HIEROGLYPH T027 -+ /xf0/x93/x8c/xa8 EGYPTIAN HIEROGLYPH T028 -+ /xf0/x93/x8c/xa9 EGYPTIAN HIEROGLYPH T029 -+ /xf0/x93/x8c/xaa EGYPTIAN HIEROGLYPH T030 -+ /xf0/x93/x8c/xab EGYPTIAN HIEROGLYPH T031 -+ /xf0/x93/x8c/xac EGYPTIAN HIEROGLYPH T032 -+ /xf0/x93/x8c/xad EGYPTIAN HIEROGLYPH T032A -+ /xf0/x93/x8c/xae EGYPTIAN HIEROGLYPH T033 -+ /xf0/x93/x8c/xaf EGYPTIAN HIEROGLYPH T033A -+ /xf0/x93/x8c/xb0 EGYPTIAN HIEROGLYPH T034 -+ /xf0/x93/x8c/xb1 EGYPTIAN HIEROGLYPH T035 -+ /xf0/x93/x8c/xb2 EGYPTIAN HIEROGLYPH T036 -+ /xf0/x93/x8c/xb3 EGYPTIAN HIEROGLYPH U001 -+ /xf0/x93/x8c/xb4 EGYPTIAN HIEROGLYPH U002 -+ /xf0/x93/x8c/xb5 EGYPTIAN HIEROGLYPH U003 -+ /xf0/x93/x8c/xb6 EGYPTIAN HIEROGLYPH U004 -+ /xf0/x93/x8c/xb7 EGYPTIAN HIEROGLYPH U005 -+ /xf0/x93/x8c/xb8 EGYPTIAN HIEROGLYPH U006 -+ /xf0/x93/x8c/xb9 EGYPTIAN HIEROGLYPH U006A -+ /xf0/x93/x8c/xba EGYPTIAN HIEROGLYPH U006B -+ /xf0/x93/x8c/xbb EGYPTIAN HIEROGLYPH U007 -+ /xf0/x93/x8c/xbc EGYPTIAN HIEROGLYPH U008 -+ /xf0/x93/x8c/xbd EGYPTIAN HIEROGLYPH U009 -+ /xf0/x93/x8c/xbe EGYPTIAN HIEROGLYPH U010 -+ /xf0/x93/x8c/xbf EGYPTIAN HIEROGLYPH U011 -+ /xf0/x93/x8d/x80 EGYPTIAN HIEROGLYPH U012 -+ /xf0/x93/x8d/x81 EGYPTIAN HIEROGLYPH U013 -+ /xf0/x93/x8d/x82 EGYPTIAN HIEROGLYPH U014 -+ /xf0/x93/x8d/x83 EGYPTIAN HIEROGLYPH U015 -+ /xf0/x93/x8d/x84 EGYPTIAN HIEROGLYPH U016 -+ /xf0/x93/x8d/x85 EGYPTIAN HIEROGLYPH U017 -+ /xf0/x93/x8d/x86 EGYPTIAN HIEROGLYPH U018 -+ /xf0/x93/x8d/x87 EGYPTIAN HIEROGLYPH U019 -+ /xf0/x93/x8d/x88 EGYPTIAN HIEROGLYPH U020 -+ /xf0/x93/x8d/x89 EGYPTIAN HIEROGLYPH U021 -+ /xf0/x93/x8d/x8a EGYPTIAN HIEROGLYPH U022 -+ /xf0/x93/x8d/x8b EGYPTIAN HIEROGLYPH U023 -+ /xf0/x93/x8d/x8c EGYPTIAN HIEROGLYPH U023A -+ /xf0/x93/x8d/x8d EGYPTIAN HIEROGLYPH U024 -+ /xf0/x93/x8d/x8e EGYPTIAN HIEROGLYPH U025 -+ /xf0/x93/x8d/x8f EGYPTIAN HIEROGLYPH U026 -+ /xf0/x93/x8d/x90 EGYPTIAN HIEROGLYPH U027 -+ /xf0/x93/x8d/x91 EGYPTIAN HIEROGLYPH U028 -+ /xf0/x93/x8d/x92 EGYPTIAN HIEROGLYPH U029 -+ /xf0/x93/x8d/x93 EGYPTIAN HIEROGLYPH U029A -+ /xf0/x93/x8d/x94 EGYPTIAN HIEROGLYPH U030 -+ /xf0/x93/x8d/x95 EGYPTIAN HIEROGLYPH U031 -+ /xf0/x93/x8d/x96 EGYPTIAN HIEROGLYPH U032 -+ /xf0/x93/x8d/x97 EGYPTIAN HIEROGLYPH U032A -+ /xf0/x93/x8d/x98 EGYPTIAN HIEROGLYPH U033 -+ /xf0/x93/x8d/x99 EGYPTIAN HIEROGLYPH U034 -+ /xf0/x93/x8d/x9a EGYPTIAN HIEROGLYPH U035 -+ /xf0/x93/x8d/x9b EGYPTIAN HIEROGLYPH U036 -+ /xf0/x93/x8d/x9c EGYPTIAN HIEROGLYPH U037 -+ /xf0/x93/x8d/x9d EGYPTIAN HIEROGLYPH U038 -+ /xf0/x93/x8d/x9e EGYPTIAN HIEROGLYPH U039 -+ /xf0/x93/x8d/x9f EGYPTIAN HIEROGLYPH U040 -+ /xf0/x93/x8d/xa0 EGYPTIAN HIEROGLYPH U041 -+ /xf0/x93/x8d/xa1 EGYPTIAN HIEROGLYPH U042 -+ /xf0/x93/x8d/xa2 EGYPTIAN HIEROGLYPH V001 -+ /xf0/x93/x8d/xa3 EGYPTIAN HIEROGLYPH V001A -+ /xf0/x93/x8d/xa4 EGYPTIAN HIEROGLYPH V001B -+ /xf0/x93/x8d/xa5 EGYPTIAN HIEROGLYPH V001C -+ /xf0/x93/x8d/xa6 EGYPTIAN HIEROGLYPH V001D -+ /xf0/x93/x8d/xa7 EGYPTIAN HIEROGLYPH V001E -+ /xf0/x93/x8d/xa8 EGYPTIAN HIEROGLYPH V001F -+ /xf0/x93/x8d/xa9 EGYPTIAN HIEROGLYPH V001G -+ /xf0/x93/x8d/xaa EGYPTIAN HIEROGLYPH V001H -+ /xf0/x93/x8d/xab EGYPTIAN HIEROGLYPH V001I -+ /xf0/x93/x8d/xac EGYPTIAN HIEROGLYPH V002 -+ /xf0/x93/x8d/xad EGYPTIAN HIEROGLYPH V002A -+ /xf0/x93/x8d/xae EGYPTIAN HIEROGLYPH V003 -+ /xf0/x93/x8d/xaf EGYPTIAN HIEROGLYPH V004 -+ /xf0/x93/x8d/xb0 EGYPTIAN HIEROGLYPH V005 -+ /xf0/x93/x8d/xb1 EGYPTIAN HIEROGLYPH V006 -+ /xf0/x93/x8d/xb2 EGYPTIAN HIEROGLYPH V007 -+ /xf0/x93/x8d/xb3 EGYPTIAN HIEROGLYPH V007A -+ /xf0/x93/x8d/xb4 EGYPTIAN HIEROGLYPH V007B -+ /xf0/x93/x8d/xb5 EGYPTIAN HIEROGLYPH V008 -+ /xf0/x93/x8d/xb6 EGYPTIAN HIEROGLYPH V009 -+ /xf0/x93/x8d/xb7 EGYPTIAN HIEROGLYPH V010 -+ /xf0/x93/x8d/xb8 EGYPTIAN HIEROGLYPH V011 -+ /xf0/x93/x8d/xb9 EGYPTIAN HIEROGLYPH V011A -+ /xf0/x93/x8d/xba EGYPTIAN HIEROGLYPH V011B -+ /xf0/x93/x8d/xbb EGYPTIAN HIEROGLYPH V011C -+ /xf0/x93/x8d/xbc EGYPTIAN HIEROGLYPH V012 -+ /xf0/x93/x8d/xbd EGYPTIAN HIEROGLYPH V012A -+ /xf0/x93/x8d/xbe EGYPTIAN HIEROGLYPH V012B -+ /xf0/x93/x8d/xbf EGYPTIAN HIEROGLYPH V013 -+ /xf0/x93/x8e/x80 EGYPTIAN HIEROGLYPH V014 -+ /xf0/x93/x8e/x81 EGYPTIAN HIEROGLYPH V015 -+ /xf0/x93/x8e/x82 EGYPTIAN HIEROGLYPH V016 -+ /xf0/x93/x8e/x83 EGYPTIAN HIEROGLYPH V017 -+ /xf0/x93/x8e/x84 EGYPTIAN HIEROGLYPH V018 -+ /xf0/x93/x8e/x85 EGYPTIAN HIEROGLYPH V019 -+ /xf0/x93/x8e/x86 EGYPTIAN HIEROGLYPH V020 -+ /xf0/x93/x8e/x87 EGYPTIAN HIEROGLYPH V020A -+ /xf0/x93/x8e/x88 EGYPTIAN HIEROGLYPH V020B -+ /xf0/x93/x8e/x89 EGYPTIAN HIEROGLYPH V020C -+ /xf0/x93/x8e/x8a EGYPTIAN HIEROGLYPH V020D -+ /xf0/x93/x8e/x8b EGYPTIAN HIEROGLYPH V020E -+ /xf0/x93/x8e/x8c EGYPTIAN HIEROGLYPH V020F -+ /xf0/x93/x8e/x8d EGYPTIAN HIEROGLYPH V020G -+ /xf0/x93/x8e/x8e EGYPTIAN HIEROGLYPH V020H -+ /xf0/x93/x8e/x8f EGYPTIAN HIEROGLYPH V020I -+ /xf0/x93/x8e/x90 EGYPTIAN HIEROGLYPH V020J -+ /xf0/x93/x8e/x91 EGYPTIAN HIEROGLYPH V020K -+ /xf0/x93/x8e/x92 EGYPTIAN HIEROGLYPH V020L -+ /xf0/x93/x8e/x93 EGYPTIAN HIEROGLYPH V021 -+ /xf0/x93/x8e/x94 EGYPTIAN HIEROGLYPH V022 -+ /xf0/x93/x8e/x95 EGYPTIAN HIEROGLYPH V023 -+ /xf0/x93/x8e/x96 EGYPTIAN HIEROGLYPH V023A -+ /xf0/x93/x8e/x97 EGYPTIAN HIEROGLYPH V024 -+ /xf0/x93/x8e/x98 EGYPTIAN HIEROGLYPH V025 -+ /xf0/x93/x8e/x99 EGYPTIAN HIEROGLYPH V026 -+ /xf0/x93/x8e/x9a EGYPTIAN HIEROGLYPH V027 -+ /xf0/x93/x8e/x9b EGYPTIAN HIEROGLYPH V028 -+ /xf0/x93/x8e/x9c EGYPTIAN HIEROGLYPH V028A -+ /xf0/x93/x8e/x9d EGYPTIAN HIEROGLYPH V029 -+ /xf0/x93/x8e/x9e EGYPTIAN HIEROGLYPH V029A -+ /xf0/x93/x8e/x9f EGYPTIAN HIEROGLYPH V030 -+ /xf0/x93/x8e/xa0 EGYPTIAN HIEROGLYPH V030A -+ /xf0/x93/x8e/xa1 EGYPTIAN HIEROGLYPH V031 -+ /xf0/x93/x8e/xa2 EGYPTIAN HIEROGLYPH V031A -+ /xf0/x93/x8e/xa3 EGYPTIAN HIEROGLYPH V032 -+ /xf0/x93/x8e/xa4 EGYPTIAN HIEROGLYPH V033 -+ /xf0/x93/x8e/xa5 EGYPTIAN HIEROGLYPH V033A -+ /xf0/x93/x8e/xa6 EGYPTIAN HIEROGLYPH V034 -+ /xf0/x93/x8e/xa7 EGYPTIAN HIEROGLYPH V035 -+ /xf0/x93/x8e/xa8 EGYPTIAN HIEROGLYPH V036 -+ /xf0/x93/x8e/xa9 EGYPTIAN HIEROGLYPH V037 -+ /xf0/x93/x8e/xaa EGYPTIAN HIEROGLYPH V037A -+ /xf0/x93/x8e/xab EGYPTIAN HIEROGLYPH V038 -+ /xf0/x93/x8e/xac EGYPTIAN HIEROGLYPH V039 -+ /xf0/x93/x8e/xad EGYPTIAN HIEROGLYPH V040 -+ /xf0/x93/x8e/xae EGYPTIAN HIEROGLYPH V040A -+ /xf0/x93/x8e/xaf EGYPTIAN HIEROGLYPH W001 -+ /xf0/x93/x8e/xb0 EGYPTIAN HIEROGLYPH W002 -+ /xf0/x93/x8e/xb1 EGYPTIAN HIEROGLYPH W003 -+ /xf0/x93/x8e/xb2 EGYPTIAN HIEROGLYPH W003A -+ /xf0/x93/x8e/xb3 EGYPTIAN HIEROGLYPH W004 -+ /xf0/x93/x8e/xb4 EGYPTIAN HIEROGLYPH W005 -+ /xf0/x93/x8e/xb5 EGYPTIAN HIEROGLYPH W006 -+ /xf0/x93/x8e/xb6 EGYPTIAN HIEROGLYPH W007 -+ /xf0/x93/x8e/xb7 EGYPTIAN HIEROGLYPH W008 -+ /xf0/x93/x8e/xb8 EGYPTIAN HIEROGLYPH W009 -+ /xf0/x93/x8e/xb9 EGYPTIAN HIEROGLYPH W009A -+ /xf0/x93/x8e/xba EGYPTIAN HIEROGLYPH W010 -+ /xf0/x93/x8e/xbb EGYPTIAN HIEROGLYPH W010A -+ /xf0/x93/x8e/xbc EGYPTIAN HIEROGLYPH W011 -+ /xf0/x93/x8e/xbd EGYPTIAN HIEROGLYPH W012 -+ /xf0/x93/x8e/xbe EGYPTIAN HIEROGLYPH W013 -+ /xf0/x93/x8e/xbf EGYPTIAN HIEROGLYPH W014 -+ /xf0/x93/x8f/x80 EGYPTIAN HIEROGLYPH W014A -+ /xf0/x93/x8f/x81 EGYPTIAN HIEROGLYPH W015 -+ /xf0/x93/x8f/x82 EGYPTIAN HIEROGLYPH W016 -+ /xf0/x93/x8f/x83 EGYPTIAN HIEROGLYPH W017 -+ /xf0/x93/x8f/x84 EGYPTIAN HIEROGLYPH W017A -+ /xf0/x93/x8f/x85 EGYPTIAN HIEROGLYPH W018 -+ /xf0/x93/x8f/x86 EGYPTIAN HIEROGLYPH W018A -+ /xf0/x93/x8f/x87 EGYPTIAN HIEROGLYPH W019 -+ /xf0/x93/x8f/x88 EGYPTIAN HIEROGLYPH W020 -+ /xf0/x93/x8f/x89 EGYPTIAN HIEROGLYPH W021 -+ /xf0/x93/x8f/x8a EGYPTIAN HIEROGLYPH W022 -+ /xf0/x93/x8f/x8b EGYPTIAN HIEROGLYPH W023 -+ /xf0/x93/x8f/x8c EGYPTIAN HIEROGLYPH W024 -+ /xf0/x93/x8f/x8d EGYPTIAN HIEROGLYPH W024A -+ /xf0/x93/x8f/x8e EGYPTIAN HIEROGLYPH W025 -+ /xf0/x93/x8f/x8f EGYPTIAN HIEROGLYPH X001 -+ /xf0/x93/x8f/x90 EGYPTIAN HIEROGLYPH X002 -+ /xf0/x93/x8f/x91 EGYPTIAN HIEROGLYPH X003 -+ /xf0/x93/x8f/x92 EGYPTIAN HIEROGLYPH X004 -+ /xf0/x93/x8f/x93 EGYPTIAN HIEROGLYPH X004A -+ /xf0/x93/x8f/x94 EGYPTIAN HIEROGLYPH X004B -+ /xf0/x93/x8f/x95 EGYPTIAN HIEROGLYPH X005 -+ /xf0/x93/x8f/x96 EGYPTIAN HIEROGLYPH X006 -+ /xf0/x93/x8f/x97 EGYPTIAN HIEROGLYPH X006A -+ /xf0/x93/x8f/x98 EGYPTIAN HIEROGLYPH X007 -+ /xf0/x93/x8f/x99 EGYPTIAN HIEROGLYPH X008 -+ /xf0/x93/x8f/x9a EGYPTIAN HIEROGLYPH X008A -+ /xf0/x93/x8f/x9b EGYPTIAN HIEROGLYPH Y001 -+ /xf0/x93/x8f/x9c EGYPTIAN HIEROGLYPH Y001A -+ /xf0/x93/x8f/x9d EGYPTIAN HIEROGLYPH Y002 -+ /xf0/x93/x8f/x9e EGYPTIAN HIEROGLYPH Y003 -+ /xf0/x93/x8f/x9f EGYPTIAN HIEROGLYPH Y004 -+ /xf0/x93/x8f/xa0 EGYPTIAN HIEROGLYPH Y005 -+ /xf0/x93/x8f/xa1 EGYPTIAN HIEROGLYPH Y006 -+ /xf0/x93/x8f/xa2 EGYPTIAN HIEROGLYPH Y007 -+ /xf0/x93/x8f/xa3 EGYPTIAN HIEROGLYPH Y008 -+ /xf0/x93/x8f/xa4 EGYPTIAN HIEROGLYPH Z001 -+ /xf0/x93/x8f/xa5 EGYPTIAN HIEROGLYPH Z002 -+ /xf0/x93/x8f/xa6 EGYPTIAN HIEROGLYPH Z002A -+ /xf0/x93/x8f/xa7 EGYPTIAN HIEROGLYPH Z002B -+ /xf0/x93/x8f/xa8 EGYPTIAN HIEROGLYPH Z002C -+ /xf0/x93/x8f/xa9 EGYPTIAN HIEROGLYPH Z002D -+ /xf0/x93/x8f/xaa EGYPTIAN HIEROGLYPH Z003 -+ /xf0/x93/x8f/xab EGYPTIAN HIEROGLYPH Z003A -+ /xf0/x93/x8f/xac EGYPTIAN HIEROGLYPH Z003B -+ /xf0/x93/x8f/xad EGYPTIAN HIEROGLYPH Z004 -+ /xf0/x93/x8f/xae EGYPTIAN HIEROGLYPH Z004A -+ /xf0/x93/x8f/xaf EGYPTIAN HIEROGLYPH Z005 -+ /xf0/x93/x8f/xb0 EGYPTIAN HIEROGLYPH Z005A -+ /xf0/x93/x8f/xb1 EGYPTIAN HIEROGLYPH Z006 -+ /xf0/x93/x8f/xb2 EGYPTIAN HIEROGLYPH Z007 -+ /xf0/x93/x8f/xb3 EGYPTIAN HIEROGLYPH Z008 -+ /xf0/x93/x8f/xb4 EGYPTIAN HIEROGLYPH Z009 -+ /xf0/x93/x8f/xb5 EGYPTIAN HIEROGLYPH Z010 -+ /xf0/x93/x8f/xb6 EGYPTIAN HIEROGLYPH Z011 -+ /xf0/x93/x8f/xb7 EGYPTIAN HIEROGLYPH Z012 -+ /xf0/x93/x8f/xb8 EGYPTIAN HIEROGLYPH Z013 -+ /xf0/x93/x8f/xb9 EGYPTIAN HIEROGLYPH Z014 -+ /xf0/x93/x8f/xba EGYPTIAN HIEROGLYPH Z015 -+ /xf0/x93/x8f/xbb EGYPTIAN HIEROGLYPH Z015A -+ /xf0/x93/x8f/xbc EGYPTIAN HIEROGLYPH Z015B -+ /xf0/x93/x8f/xbd EGYPTIAN HIEROGLYPH Z015C -+ /xf0/x93/x8f/xbe EGYPTIAN HIEROGLYPH Z015D -+ /xf0/x93/x8f/xbf EGYPTIAN HIEROGLYPH Z015E -+ /xf0/x93/x90/x80 EGYPTIAN HIEROGLYPH Z015F -+ /xf0/x93/x90/x81 EGYPTIAN HIEROGLYPH Z015G -+ /xf0/x93/x90/x82 EGYPTIAN HIEROGLYPH Z015H -+ /xf0/x93/x90/x83 EGYPTIAN HIEROGLYPH Z015I -+ /xf0/x93/x90/x84 EGYPTIAN HIEROGLYPH Z016 -+ /xf0/x93/x90/x85 EGYPTIAN HIEROGLYPH Z016A -+ /xf0/x93/x90/x86 EGYPTIAN HIEROGLYPH Z016B -+ /xf0/x93/x90/x87 EGYPTIAN HIEROGLYPH Z016C -+ /xf0/x93/x90/x88 EGYPTIAN HIEROGLYPH Z016D -+ /xf0/x93/x90/x89 EGYPTIAN HIEROGLYPH Z016E -+ /xf0/x93/x90/x8a EGYPTIAN HIEROGLYPH Z016F -+ /xf0/x93/x90/x8b EGYPTIAN HIEROGLYPH Z016G -+ /xf0/x93/x90/x8c EGYPTIAN HIEROGLYPH Z016H -+ /xf0/x93/x90/x8d EGYPTIAN HIEROGLYPH AA001 -+ /xf0/x93/x90/x8e EGYPTIAN HIEROGLYPH AA002 -+ /xf0/x93/x90/x8f EGYPTIAN HIEROGLYPH AA003 -+ /xf0/x93/x90/x90 EGYPTIAN HIEROGLYPH AA004 -+ /xf0/x93/x90/x91 EGYPTIAN HIEROGLYPH AA005 -+ /xf0/x93/x90/x92 EGYPTIAN HIEROGLYPH AA006 -+ /xf0/x93/x90/x93 EGYPTIAN HIEROGLYPH AA007 -+ /xf0/x93/x90/x94 EGYPTIAN HIEROGLYPH AA007A -+ /xf0/x93/x90/x95 EGYPTIAN HIEROGLYPH AA007B -+ /xf0/x93/x90/x96 EGYPTIAN HIEROGLYPH AA008 -+ /xf0/x93/x90/x97 EGYPTIAN HIEROGLYPH AA009 -+ /xf0/x93/x90/x98 EGYPTIAN HIEROGLYPH AA010 -+ /xf0/x93/x90/x99 EGYPTIAN HIEROGLYPH AA011 -+ /xf0/x93/x90/x9a EGYPTIAN HIEROGLYPH AA012 -+ /xf0/x93/x90/x9b EGYPTIAN HIEROGLYPH AA013 -+ /xf0/x93/x90/x9c EGYPTIAN HIEROGLYPH AA014 -+ /xf0/x93/x90/x9d EGYPTIAN HIEROGLYPH AA015 -+ /xf0/x93/x90/x9e EGYPTIAN HIEROGLYPH AA016 -+ /xf0/x93/x90/x9f EGYPTIAN HIEROGLYPH AA017 -+ /xf0/x93/x90/xa0 EGYPTIAN HIEROGLYPH AA018 -+ /xf0/x93/x90/xa1 EGYPTIAN HIEROGLYPH AA019 -+ /xf0/x93/x90/xa2 EGYPTIAN HIEROGLYPH AA020 -+ /xf0/x93/x90/xa3 EGYPTIAN HIEROGLYPH AA021 -+ /xf0/x93/x90/xa4 EGYPTIAN HIEROGLYPH AA022 -+ /xf0/x93/x90/xa5 EGYPTIAN HIEROGLYPH AA023 -+ /xf0/x93/x90/xa6 EGYPTIAN HIEROGLYPH AA024 -+ /xf0/x93/x90/xa7 EGYPTIAN HIEROGLYPH AA025 -+ /xf0/x93/x90/xa8 EGYPTIAN HIEROGLYPH AA026 -+ /xf0/x93/x90/xa9 EGYPTIAN HIEROGLYPH AA027 -+ /xf0/x93/x90/xaa EGYPTIAN HIEROGLYPH AA028 -+ /xf0/x93/x90/xab EGYPTIAN HIEROGLYPH AA029 -+ /xf0/x93/x90/xac EGYPTIAN HIEROGLYPH AA030 -+ /xf0/x93/x90/xad EGYPTIAN HIEROGLYPH AA031 -+ /xf0/x93/x90/xae EGYPTIAN HIEROGLYPH AA032 -+ /xf0/x96/xa0/x80 BAMUM LETTER PHASE-A NGKUE MFON -+ /xf0/x96/xa0/x81 BAMUM LETTER PHASE-A GBIEE FON -+ /xf0/x96/xa0/x82 BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE -+ /xf0/x96/xa0/x83 BAMUM LETTER PHASE-A PON MFON PIPAEMBA -+ /xf0/x96/xa0/x84 BAMUM LETTER PHASE-A NAA MFON -+ /xf0/x96/xa0/x85 BAMUM LETTER PHASE-A SHUENSHUET -+ /xf0/x96/xa0/x86 BAMUM LETTER PHASE-A TITA MFON -+ /xf0/x96/xa0/x87 BAMUM LETTER PHASE-A NZA MFON -+ /xf0/x96/xa0/x88 BAMUM LETTER PHASE-A SHINDA PA NJI -+ /xf0/x96/xa0/x89 BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE -+ /xf0/x96/xa0/x8a BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA -+ /xf0/x96/xa0/x8b BAMUM LETTER PHASE-A MAEMBGBIEE -+ /xf0/x96/xa0/x8c BAMUM LETTER PHASE-A TU MAEMBA -+ /xf0/x96/xa0/x8d BAMUM LETTER PHASE-A NGANGU -+ /xf0/x96/xa0/x8e BAMUM LETTER PHASE-A MAEMVEUX -+ /xf0/x96/xa0/x8f BAMUM LETTER PHASE-A MANSUAE -+ /xf0/x96/xa0/x90 BAMUM LETTER PHASE-A MVEUAENGAM -+ /xf0/x96/xa0/x91 BAMUM LETTER PHASE-A SEUNYAM -+ /xf0/x96/xa0/x92 BAMUM LETTER PHASE-A NTOQPEN -+ /xf0/x96/xa0/x93 BAMUM LETTER PHASE-A KEUKEUTNDA -+ /xf0/x96/xa0/x94 BAMUM LETTER PHASE-A NKINDI -+ /xf0/x96/xa0/x95 BAMUM LETTER PHASE-A SUU -+ /xf0/x96/xa0/x96 BAMUM LETTER PHASE-A NGKUENZEUM -+ /xf0/x96/xa0/x97 BAMUM LETTER PHASE-A LAPAQ -+ /xf0/x96/xa0/x98 BAMUM LETTER PHASE-A LET KUT -+ /xf0/x96/xa0/x99 BAMUM LETTER PHASE-A NTAP MFAA -+ /xf0/x96/xa0/x9a BAMUM LETTER PHASE-A MAEKEUP -+ /xf0/x96/xa0/x9b BAMUM LETTER PHASE-A PASHAE -+ /xf0/x96/xa0/x9c BAMUM LETTER PHASE-A GHEUAERAE -+ /xf0/x96/xa0/x9d BAMUM LETTER PHASE-A PAMSHAE -+ /xf0/x96/xa0/x9e BAMUM LETTER PHASE-A MON NGGEUAET -+ /xf0/x96/xa0/x9f BAMUM LETTER PHASE-A NZUN MEUT -+ /xf0/x96/xa0/xa0 BAMUM LETTER PHASE-A U YUQ NAE -+ /xf0/x96/xa0/xa1 BAMUM LETTER PHASE-A GHEUAEGHEUAE -+ /xf0/x96/xa0/xa2 BAMUM LETTER PHASE-A NTAP NTAA -+ /xf0/x96/xa0/xa3 BAMUM LETTER PHASE-A SISA -+ /xf0/x96/xa0/xa4 BAMUM LETTER PHASE-A MGBASA -+ /xf0/x96/xa0/xa5 BAMUM LETTER PHASE-A MEUNJOMNDEUQ -+ /xf0/x96/xa0/xa6 BAMUM LETTER PHASE-A MOOMPUQ -+ /xf0/x96/xa0/xa7 BAMUM LETTER PHASE-A KAFA -+ /xf0/x96/xa0/xa8 BAMUM LETTER PHASE-A PA LEERAEWA -+ /xf0/x96/xa0/xa9 BAMUM LETTER PHASE-A NDA LEERAEWA -+ /xf0/x96/xa0/xaa BAMUM LETTER PHASE-A PET -+ /xf0/x96/xa0/xab BAMUM LETTER PHASE-A MAEMKPEN -+ /xf0/x96/xa0/xac BAMUM LETTER PHASE-A NIKA -+ /xf0/x96/xa0/xad BAMUM LETTER PHASE-A PUP -+ /xf0/x96/xa0/xae BAMUM LETTER PHASE-A TUAEP -+ /xf0/x96/xa0/xaf BAMUM LETTER PHASE-A LUAEP -+ /xf0/x96/xa0/xb0 BAMUM LETTER PHASE-A SONJAM -+ /xf0/x96/xa0/xb1 BAMUM LETTER PHASE-A TEUTEUWEN -+ /xf0/x96/xa0/xb2 BAMUM LETTER PHASE-A MAENYI -+ /xf0/x96/xa0/xb3 BAMUM LETTER PHASE-A KET -+ /xf0/x96/xa0/xb4 BAMUM LETTER PHASE-A NDAANGGEUAET -+ /xf0/x96/xa0/xb5 BAMUM LETTER PHASE-A KUOQ -+ /xf0/x96/xa0/xb6 BAMUM LETTER PHASE-A MOOMEUT -+ /xf0/x96/xa0/xb7 BAMUM LETTER PHASE-A SHUM -+ /xf0/x96/xa0/xb8 BAMUM LETTER PHASE-A LOMMAE -+ /xf0/x96/xa0/xb9 BAMUM LETTER PHASE-A FIRI -+ /xf0/x96/xa0/xba BAMUM LETTER PHASE-A ROM -+ /xf0/x96/xa0/xbb BAMUM LETTER PHASE-A KPOQ -+ /xf0/x96/xa0/xbc BAMUM LETTER PHASE-A SOQ -+ /xf0/x96/xa0/xbd BAMUM LETTER PHASE-A MAP PIEET -+ /xf0/x96/xa0/xbe BAMUM LETTER PHASE-A SHIRAE -+ /xf0/x96/xa0/xbf BAMUM LETTER PHASE-A NTAP -+ /xf0/x96/xa1/x80 BAMUM LETTER PHASE-A SHOQ NSHUT YUM -+ /xf0/x96/xa1/x81 BAMUM LETTER PHASE-A NYIT MONGKEUAEQ -+ /xf0/x96/xa1/x82 BAMUM LETTER PHASE-A PAARAE -+ /xf0/x96/xa1/x83 BAMUM LETTER PHASE-A NKAARAE -+ /xf0/x96/xa1/x84 BAMUM LETTER PHASE-A UNKNOWN -+ /xf0/x96/xa1/x85 BAMUM LETTER PHASE-A NGGEN -+ /xf0/x96/xa1/x86 BAMUM LETTER PHASE-A MAESI -+ /xf0/x96/xa1/x87 BAMUM LETTER PHASE-A NJAM -+ /xf0/x96/xa1/x88 BAMUM LETTER PHASE-A MBANYI -+ /xf0/x96/xa1/x89 BAMUM LETTER PHASE-A NYET -+ /xf0/x96/xa1/x8a BAMUM LETTER PHASE-A TEUAEN -+ /xf0/x96/xa1/x8b BAMUM LETTER PHASE-A SOT -+ /xf0/x96/xa1/x8c BAMUM LETTER PHASE-A PAAM -+ /xf0/x96/xa1/x8d BAMUM LETTER PHASE-A NSHIEE -+ /xf0/x96/xa1/x8e BAMUM LETTER PHASE-A MAEM -+ /xf0/x96/xa1/x8f BAMUM LETTER PHASE-A NYI -+ /xf0/x96/xa1/x90 BAMUM LETTER PHASE-A KAQ -+ /xf0/x96/xa1/x91 BAMUM LETTER PHASE-A NSHA -+ /xf0/x96/xa1/x92 BAMUM LETTER PHASE-A VEE -+ /xf0/x96/xa1/x93 BAMUM LETTER PHASE-A LU -+ /xf0/x96/xa1/x94 BAMUM LETTER PHASE-A NEN -+ /xf0/x96/xa1/x95 BAMUM LETTER PHASE-A NAQ -+ /xf0/x96/xa1/x96 BAMUM LETTER PHASE-A MBAQ -+ /xf0/x96/xa1/x97 BAMUM LETTER PHASE-B NSHUET -+ /xf0/x96/xa1/x98 BAMUM LETTER PHASE-B TU MAEMGBIEE -+ /xf0/x96/xa1/x99 BAMUM LETTER PHASE-B SIEE -+ /xf0/x96/xa1/x9a BAMUM LETTER PHASE-B SET TU -+ /xf0/x96/xa1/x9b BAMUM LETTER PHASE-B LOM NTEUM -+ /xf0/x96/xa1/x9c BAMUM LETTER PHASE-B MBA MAELEE -+ /xf0/x96/xa1/x9d BAMUM LETTER PHASE-B KIEEM -+ /xf0/x96/xa1/x9e BAMUM LETTER PHASE-B YEURAE -+ /xf0/x96/xa1/x9f BAMUM LETTER PHASE-B MBAARAE -+ /xf0/x96/xa1/xa0 BAMUM LETTER PHASE-B KAM -+ /xf0/x96/xa1/xa1 BAMUM LETTER PHASE-B PEESHI -+ /xf0/x96/xa1/xa2 BAMUM LETTER PHASE-B YAFU LEERAEWA -+ /xf0/x96/xa1/xa3 BAMUM LETTER PHASE-B LAM NSHUT NYAM -+ /xf0/x96/xa1/xa4 BAMUM LETTER PHASE-B NTIEE SHEUOQ -+ /xf0/x96/xa1/xa5 BAMUM LETTER PHASE-B NDU NJAA -+ /xf0/x96/xa1/xa6 BAMUM LETTER PHASE-B GHEUGHEUAEM -+ /xf0/x96/xa1/xa7 BAMUM LETTER PHASE-B PIT -+ /xf0/x96/xa1/xa8 BAMUM LETTER PHASE-B TU NSIEE -+ /xf0/x96/xa1/xa9 BAMUM LETTER PHASE-B SHET NJAQ -+ /xf0/x96/xa1/xaa BAMUM LETTER PHASE-B SHEUAEQTU -+ /xf0/x96/xa1/xab BAMUM LETTER PHASE-B MFON TEUAEQ -+ /xf0/x96/xa1/xac BAMUM LETTER PHASE-B MBIT MBAAKET -+ /xf0/x96/xa1/xad BAMUM LETTER PHASE-B NYI NTEUM -+ /xf0/x96/xa1/xae BAMUM LETTER PHASE-B KEUPUQ -+ /xf0/x96/xa1/xaf BAMUM LETTER PHASE-B GHEUGHEN -+ /xf0/x96/xa1/xb0 BAMUM LETTER PHASE-B KEUYEUX -+ /xf0/x96/xa1/xb1 BAMUM LETTER PHASE-B LAANAE -+ /xf0/x96/xa1/xb2 BAMUM LETTER PHASE-B PARUM -+ /xf0/x96/xa1/xb3 BAMUM LETTER PHASE-B VEUM -+ /xf0/x96/xa1/xb4 BAMUM LETTER PHASE-B NGKINDI MVOP -+ /xf0/x96/xa1/xb5 BAMUM LETTER PHASE-B NGGEU MBU -+ /xf0/x96/xa1/xb6 BAMUM LETTER PHASE-B WUAET -+ /xf0/x96/xa1/xb7 BAMUM LETTER PHASE-B SAKEUAE -+ /xf0/x96/xa1/xb8 BAMUM LETTER PHASE-B TAAM -+ /xf0/x96/xa1/xb9 BAMUM LETTER PHASE-B MEUQ -+ /xf0/x96/xa1/xba BAMUM LETTER PHASE-B NGGUOQ -+ /xf0/x96/xa1/xbb BAMUM LETTER PHASE-B NGGUOQ LARGE -+ /xf0/x96/xa1/xbc BAMUM LETTER PHASE-B MFIYAQ -+ /xf0/x96/xa1/xbd BAMUM LETTER PHASE-B SUE -+ /xf0/x96/xa1/xbe BAMUM LETTER PHASE-B MBEURI -+ /xf0/x96/xa1/xbf BAMUM LETTER PHASE-B MONTIEEN -+ /xf0/x96/xa2/x80 BAMUM LETTER PHASE-B NYAEMAE -+ /xf0/x96/xa2/x81 BAMUM LETTER PHASE-B PUNGAAM -+ /xf0/x96/xa2/x82 BAMUM LETTER PHASE-B MEUT NGGEET -+ /xf0/x96/xa2/x83 BAMUM LETTER PHASE-B FEUX -+ /xf0/x96/xa2/x84 BAMUM LETTER PHASE-B MBUOQ -+ /xf0/x96/xa2/x85 BAMUM LETTER PHASE-B FEE -+ /xf0/x96/xa2/x86 BAMUM LETTER PHASE-B KEUAEM -+ /xf0/x96/xa2/x87 BAMUM LETTER PHASE-B MA NJEUAENA -+ /xf0/x96/xa2/x88 BAMUM LETTER PHASE-B MA NJUQA -+ /xf0/x96/xa2/x89 BAMUM LETTER PHASE-B LET -+ /xf0/x96/xa2/x8a BAMUM LETTER PHASE-B NGGAAM -+ /xf0/x96/xa2/x8b BAMUM LETTER PHASE-B NSEN -+ /xf0/x96/xa2/x8c BAMUM LETTER PHASE-B MA -+ /xf0/x96/xa2/x8d BAMUM LETTER PHASE-B KIQ -+ /xf0/x96/xa2/x8e BAMUM LETTER PHASE-B NGOM -+ /xf0/x96/xa2/x8f BAMUM LETTER PHASE-C NGKUE MAEMBA -+ /xf0/x96/xa2/x90 BAMUM LETTER PHASE-C NZA -+ /xf0/x96/xa2/x91 BAMUM LETTER PHASE-C YUM -+ /xf0/x96/xa2/x92 BAMUM LETTER PHASE-C WANGKUOQ -+ /xf0/x96/xa2/x93 BAMUM LETTER PHASE-C NGGEN -+ /xf0/x96/xa2/x94 BAMUM LETTER PHASE-C NDEUAEREE -+ /xf0/x96/xa2/x95 BAMUM LETTER PHASE-C NGKAQ -+ /xf0/x96/xa2/x96 BAMUM LETTER PHASE-C GHARAE -+ /xf0/x96/xa2/x97 BAMUM LETTER PHASE-C MBEEKEET -+ /xf0/x96/xa2/x98 BAMUM LETTER PHASE-C GBAYI -+ /xf0/x96/xa2/x99 BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN -+ /xf0/x96/xa2/x9a BAMUM LETTER PHASE-C NTU MBIT -+ /xf0/x96/xa2/x9b BAMUM LETTER PHASE-C MBEUM -+ /xf0/x96/xa2/x9c BAMUM LETTER PHASE-C PIRIEEN -+ /xf0/x96/xa2/x9d BAMUM LETTER PHASE-C NDOMBU -+ /xf0/x96/xa2/x9e BAMUM LETTER PHASE-C MBAA CABBAGE-TREE -+ /xf0/x96/xa2/x9f BAMUM LETTER PHASE-C KEUSHEUAEP -+ /xf0/x96/xa2/xa0 BAMUM LETTER PHASE-C GHAP -+ /xf0/x96/xa2/xa1 BAMUM LETTER PHASE-C KEUKAQ -+ /xf0/x96/xa2/xa2 BAMUM LETTER PHASE-C YU MUOMAE -+ /xf0/x96/xa2/xa3 BAMUM LETTER PHASE-C NZEUM -+ /xf0/x96/xa2/xa4 BAMUM LETTER PHASE-C MBUE -+ /xf0/x96/xa2/xa5 BAMUM LETTER PHASE-C NSEUAEN -+ /xf0/x96/xa2/xa6 BAMUM LETTER PHASE-C MBIT -+ /xf0/x96/xa2/xa7 BAMUM LETTER PHASE-C YEUQ -+ /xf0/x96/xa2/xa8 BAMUM LETTER PHASE-C KPARAQ -+ /xf0/x96/xa2/xa9 BAMUM LETTER PHASE-C KAA -+ /xf0/x96/xa2/xaa BAMUM LETTER PHASE-C SEUX -+ /xf0/x96/xa2/xab BAMUM LETTER PHASE-C NDIDA -+ /xf0/x96/xa2/xac BAMUM LETTER PHASE-C TAASHAE -+ /xf0/x96/xa2/xad BAMUM LETTER PHASE-C NJUEQ -+ /xf0/x96/xa2/xae BAMUM LETTER PHASE-C TITA YUE -+ /xf0/x96/xa2/xaf BAMUM LETTER PHASE-C SUAET -+ /xf0/x96/xa2/xb0 BAMUM LETTER PHASE-C NGGUAEN NYAM -+ /xf0/x96/xa2/xb1 BAMUM LETTER PHASE-C VEUX -+ /xf0/x96/xa2/xb2 BAMUM LETTER PHASE-C NANSANAQ -+ /xf0/x96/xa2/xb3 BAMUM LETTER PHASE-C MA KEUAERI -+ /xf0/x96/xa2/xb4 BAMUM LETTER PHASE-C NTAA -+ /xf0/x96/xa2/xb5 BAMUM LETTER PHASE-C NGGUON -+ /xf0/x96/xa2/xb6 BAMUM LETTER PHASE-C LAP -+ /xf0/x96/xa2/xb7 BAMUM LETTER PHASE-C MBIRIEEN -+ /xf0/x96/xa2/xb8 BAMUM LETTER PHASE-C MGBASAQ -+ /xf0/x96/xa2/xb9 BAMUM LETTER PHASE-C NTEUNGBA -+ /xf0/x96/xa2/xba BAMUM LETTER PHASE-C TEUTEUX -+ /xf0/x96/xa2/xbb BAMUM LETTER PHASE-C NGGUM -+ /xf0/x96/xa2/xbc BAMUM LETTER PHASE-C FUE -+ /xf0/x96/xa2/xbd BAMUM LETTER PHASE-C NDEUT -+ /xf0/x96/xa2/xbe BAMUM LETTER PHASE-C NSA -+ /xf0/x96/xa2/xbf BAMUM LETTER PHASE-C NSHAQ -+ /xf0/x96/xa3/x80 BAMUM LETTER PHASE-C BUNG -+ /xf0/x96/xa3/x81 BAMUM LETTER PHASE-C VEUAEPEN -+ /xf0/x96/xa3/x82 BAMUM LETTER PHASE-C MBERAE -+ /xf0/x96/xa3/x83 BAMUM LETTER PHASE-C RU -+ /xf0/x96/xa3/x84 BAMUM LETTER PHASE-C NJAEM -+ /xf0/x96/xa3/x85 BAMUM LETTER PHASE-C LAM -+ /xf0/x96/xa3/x86 BAMUM LETTER PHASE-C TITUAEP -+ /xf0/x96/xa3/x87 BAMUM LETTER PHASE-C NSUOT NGOM -+ /xf0/x96/xa3/x88 BAMUM LETTER PHASE-C NJEEEE -+ /xf0/x96/xa3/x89 BAMUM LETTER PHASE-C KET -+ /xf0/x96/xa3/x8a BAMUM LETTER PHASE-C NGGU -+ /xf0/x96/xa3/x8b BAMUM LETTER PHASE-C MAESI -+ /xf0/x96/xa3/x8c BAMUM LETTER PHASE-C MBUAEM -+ /xf0/x96/xa3/x8d BAMUM LETTER PHASE-C LU -+ /xf0/x96/xa3/x8e BAMUM LETTER PHASE-C KUT -+ /xf0/x96/xa3/x8f BAMUM LETTER PHASE-C NJAM -+ /xf0/x96/xa3/x90 BAMUM LETTER PHASE-C NGOM -+ /xf0/x96/xa3/x91 BAMUM LETTER PHASE-C WUP -+ /xf0/x96/xa3/x92 BAMUM LETTER PHASE-C NGGUEET -+ /xf0/x96/xa3/x93 BAMUM LETTER PHASE-C NSOM -+ /xf0/x96/xa3/x94 BAMUM LETTER PHASE-C NTEN -+ /xf0/x96/xa3/x95 BAMUM LETTER PHASE-C KUOP NKAARAE -+ /xf0/x96/xa3/x96 BAMUM LETTER PHASE-C NSUN -+ /xf0/x96/xa3/x97 BAMUM LETTER PHASE-C NDAM -+ /xf0/x96/xa3/x98 BAMUM LETTER PHASE-C MA NSIEE -+ /xf0/x96/xa3/x99 BAMUM LETTER PHASE-C YAA -+ /xf0/x96/xa3/x9a BAMUM LETTER PHASE-C NDAP -+ /xf0/x96/xa3/x9b BAMUM LETTER PHASE-C SHUEQ -+ /xf0/x96/xa3/x9c BAMUM LETTER PHASE-C SETFON -+ /xf0/x96/xa3/x9d BAMUM LETTER PHASE-C MBI -+ /xf0/x96/xa3/x9e BAMUM LETTER PHASE-C MAEMBA -+ /xf0/x96/xa3/x9f BAMUM LETTER PHASE-C MBANYI -+ /xf0/x96/xa3/xa0 BAMUM LETTER PHASE-C KEUSEUX -+ /xf0/x96/xa3/xa1 BAMUM LETTER PHASE-C MBEUX -+ /xf0/x96/xa3/xa2 BAMUM LETTER PHASE-C KEUM -+ /xf0/x96/xa3/xa3 BAMUM LETTER PHASE-C MBAA PICKET -+ /xf0/x96/xa3/xa4 BAMUM LETTER PHASE-C YUWOQ -+ /xf0/x96/xa3/xa5 BAMUM LETTER PHASE-C NJEUX -+ /xf0/x96/xa3/xa6 BAMUM LETTER PHASE-C MIEE -+ /xf0/x96/xa3/xa7 BAMUM LETTER PHASE-C MUAE -+ /xf0/x96/xa3/xa8 BAMUM LETTER PHASE-C SHIQ -+ /xf0/x96/xa3/xa9 BAMUM LETTER PHASE-C KEN LAW -+ /xf0/x96/xa3/xaa BAMUM LETTER PHASE-C KEN FATIGUE -+ /xf0/x96/xa3/xab BAMUM LETTER PHASE-C NGAQ -+ /xf0/x96/xa3/xac BAMUM LETTER PHASE-C NAQ -+ /xf0/x96/xa3/xad BAMUM LETTER PHASE-C LIQ -+ /xf0/x96/xa3/xae BAMUM LETTER PHASE-C PIN -+ /xf0/x96/xa3/xaf BAMUM LETTER PHASE-C PEN -+ /xf0/x96/xa3/xb0 BAMUM LETTER PHASE-C TET -+ /xf0/x96/xa3/xb1 BAMUM LETTER PHASE-D MBUO -+ /xf0/x96/xa3/xb2 BAMUM LETTER PHASE-D WAP -+ /xf0/x96/xa3/xb3 BAMUM LETTER PHASE-D NJI -+ /xf0/x96/xa3/xb4 BAMUM LETTER PHASE-D MFON -+ /xf0/x96/xa3/xb5 BAMUM LETTER PHASE-D NJIEE -+ /xf0/x96/xa3/xb6 BAMUM LETTER PHASE-D LIEE -+ /xf0/x96/xa3/xb7 BAMUM LETTER PHASE-D NJEUT -+ /xf0/x96/xa3/xb8 BAMUM LETTER PHASE-D NSHEE -+ /xf0/x96/xa3/xb9 BAMUM LETTER PHASE-D NGGAAMAE -+ /xf0/x96/xa3/xba BAMUM LETTER PHASE-D NYAM -+ /xf0/x96/xa3/xbb BAMUM LETTER PHASE-D WUAEN -+ /xf0/x96/xa3/xbc BAMUM LETTER PHASE-D NGKUN -+ /xf0/x96/xa3/xbd BAMUM LETTER PHASE-D SHEE -+ /xf0/x96/xa3/xbe BAMUM LETTER PHASE-D NGKAP -+ /xf0/x96/xa3/xbf BAMUM LETTER PHASE-D KEUAETMEUN -+ /xf0/x96/xa4/x80 BAMUM LETTER PHASE-D TEUT -+ /xf0/x96/xa4/x81 BAMUM LETTER PHASE-D SHEUAE -+ /xf0/x96/xa4/x82 BAMUM LETTER PHASE-D NJAP -+ /xf0/x96/xa4/x83 BAMUM LETTER PHASE-D SUE -+ /xf0/x96/xa4/x84 BAMUM LETTER PHASE-D KET -+ /xf0/x96/xa4/x85 BAMUM LETTER PHASE-D YAEMMAE -+ /xf0/x96/xa4/x86 BAMUM LETTER PHASE-D KUOM -+ /xf0/x96/xa4/x87 BAMUM LETTER PHASE-D SAP -+ /xf0/x96/xa4/x88 BAMUM LETTER PHASE-D MFEUT -+ /xf0/x96/xa4/x89 BAMUM LETTER PHASE-D NDEUX -+ /xf0/x96/xa4/x8a BAMUM LETTER PHASE-D MALEERI -+ /xf0/x96/xa4/x8b BAMUM LETTER PHASE-D MEUT -+ /xf0/x96/xa4/x8c BAMUM LETTER PHASE-D SEUAEQ -+ /xf0/x96/xa4/x8d BAMUM LETTER PHASE-D YEN -+ /xf0/x96/xa4/x8e BAMUM LETTER PHASE-D NJEUAEM -+ /xf0/x96/xa4/x8f BAMUM LETTER PHASE-D KEUOT MBUAE -+ /xf0/x96/xa4/x90 BAMUM LETTER PHASE-D NGKEURI -+ /xf0/x96/xa4/x91 BAMUM LETTER PHASE-D TU -+ /xf0/x96/xa4/x92 BAMUM LETTER PHASE-D GHAA -+ /xf0/x96/xa4/x93 BAMUM LETTER PHASE-D NGKYEE -+ /xf0/x96/xa4/x94 BAMUM LETTER PHASE-D FEUFEUAET -+ /xf0/x96/xa4/x95 BAMUM LETTER PHASE-D NDEE -+ /xf0/x96/xa4/x96 BAMUM LETTER PHASE-D MGBOFUM -+ /xf0/x96/xa4/x97 BAMUM LETTER PHASE-D LEUAEP -+ /xf0/x96/xa4/x98 BAMUM LETTER PHASE-D NDON -+ /xf0/x96/xa4/x99 BAMUM LETTER PHASE-D MONI -+ /xf0/x96/xa4/x9a BAMUM LETTER PHASE-D MGBEUN -+ /xf0/x96/xa4/x9b BAMUM LETTER PHASE-D PUUT -+ /xf0/x96/xa4/x9c BAMUM LETTER PHASE-D MGBIEE -+ /xf0/x96/xa4/x9d BAMUM LETTER PHASE-D MFO -+ /xf0/x96/xa4/x9e BAMUM LETTER PHASE-D LUM -+ /xf0/x96/xa4/x9f BAMUM LETTER PHASE-D NSIEEP -+ /xf0/x96/xa4/xa0 BAMUM LETTER PHASE-D MBAA -+ /xf0/x96/xa4/xa1 BAMUM LETTER PHASE-D KWAET -+ /xf0/x96/xa4/xa2 BAMUM LETTER PHASE-D NYET -+ /xf0/x96/xa4/xa3 BAMUM LETTER PHASE-D TEUAEN -+ /xf0/x96/xa4/xa4 BAMUM LETTER PHASE-D SOT -+ /xf0/x96/xa4/xa5 BAMUM LETTER PHASE-D YUWOQ -+ /xf0/x96/xa4/xa6 BAMUM LETTER PHASE-D KEUM -+ /xf0/x96/xa4/xa7 BAMUM LETTER PHASE-D RAEM -+ /xf0/x96/xa4/xa8 BAMUM LETTER PHASE-D TEEEE -+ /xf0/x96/xa4/xa9 BAMUM LETTER PHASE-D NGKEUAEQ -+ /xf0/x96/xa4/xaa BAMUM LETTER PHASE-D MFEUAE -+ /xf0/x96/xa4/xab BAMUM LETTER PHASE-D NSIEET -+ /xf0/x96/xa4/xac BAMUM LETTER PHASE-D KEUP -+ /xf0/x96/xa4/xad BAMUM LETTER PHASE-D PIP -+ /xf0/x96/xa4/xae BAMUM LETTER PHASE-D PEUTAE -+ /xf0/x96/xa4/xaf BAMUM LETTER PHASE-D NYUE -+ /xf0/x96/xa4/xb0 BAMUM LETTER PHASE-D LET -+ /xf0/x96/xa4/xb1 BAMUM LETTER PHASE-D NGGAAM -+ /xf0/x96/xa4/xb2 BAMUM LETTER PHASE-D MFIEE -+ /xf0/x96/xa4/xb3 BAMUM LETTER PHASE-D NGGWAEN -+ /xf0/x96/xa4/xb4 BAMUM LETTER PHASE-D YUOM -+ /xf0/x96/xa4/xb5 BAMUM LETTER PHASE-D PAP -+ /xf0/x96/xa4/xb6 BAMUM LETTER PHASE-D YUOP -+ /xf0/x96/xa4/xb7 BAMUM LETTER PHASE-D NDAM -+ /xf0/x96/xa4/xb8 BAMUM LETTER PHASE-D NTEUM -+ /xf0/x96/xa4/xb9 BAMUM LETTER PHASE-D SUAE -+ /xf0/x96/xa4/xba BAMUM LETTER PHASE-D KUN -+ /xf0/x96/xa4/xbb BAMUM LETTER PHASE-D NGGEUX -+ /xf0/x96/xa4/xbc BAMUM LETTER PHASE-D NGKIEE -+ /xf0/x96/xa4/xbd BAMUM LETTER PHASE-D TUOT -+ /xf0/x96/xa4/xbe BAMUM LETTER PHASE-D MEUN -+ /xf0/x96/xa4/xbf BAMUM LETTER PHASE-D KUQ -+ /xf0/x96/xa5/x80 BAMUM LETTER PHASE-D NSUM -+ /xf0/x96/xa5/x81 BAMUM LETTER PHASE-D TEUN -+ /xf0/x96/xa5/x82 BAMUM LETTER PHASE-D MAENJET -+ /xf0/x96/xa5/x83 BAMUM LETTER PHASE-D NGGAP -+ /xf0/x96/xa5/x84 BAMUM LETTER PHASE-D LEUM -+ /xf0/x96/xa5/x85 BAMUM LETTER PHASE-D NGGUOM -+ /xf0/x96/xa5/x86 BAMUM LETTER PHASE-D NSHUT -+ /xf0/x96/xa5/x87 BAMUM LETTER PHASE-D NJUEQ -+ /xf0/x96/xa5/x88 BAMUM LETTER PHASE-D GHEUAE -+ /xf0/x96/xa5/x89 BAMUM LETTER PHASE-D KU -+ /xf0/x96/xa5/x8a BAMUM LETTER PHASE-D REN OLD -+ /xf0/x96/xa5/x8b BAMUM LETTER PHASE-D TAE -+ /xf0/x96/xa5/x8c BAMUM LETTER PHASE-D TOQ -+ /xf0/x96/xa5/x8d BAMUM LETTER PHASE-D NYI -+ /xf0/x96/xa5/x8e BAMUM LETTER PHASE-D RII -+ /xf0/x96/xa5/x8f BAMUM LETTER PHASE-D LEEEE -+ /xf0/x96/xa5/x90 BAMUM LETTER PHASE-D MEEEE -+ /xf0/x96/xa5/x91 BAMUM LETTER PHASE-D M -+ /xf0/x96/xa5/x92 BAMUM LETTER PHASE-D SUU -+ /xf0/x96/xa5/x93 BAMUM LETTER PHASE-D MU -+ /xf0/x96/xa5/x94 BAMUM LETTER PHASE-D SHII -+ /xf0/x96/xa5/x95 BAMUM LETTER PHASE-D SHEUX -+ /xf0/x96/xa5/x96 BAMUM LETTER PHASE-D KYEE -+ /xf0/x96/xa5/x97 BAMUM LETTER PHASE-D NU -+ /xf0/x96/xa5/x98 BAMUM LETTER PHASE-D SHU -+ /xf0/x96/xa5/x99 BAMUM LETTER PHASE-D NTEE -+ /xf0/x96/xa5/x9a BAMUM LETTER PHASE-D PEE -+ /xf0/x96/xa5/x9b BAMUM LETTER PHASE-D NI -+ /xf0/x96/xa5/x9c BAMUM LETTER PHASE-D SHOQ -+ /xf0/x96/xa5/x9d BAMUM LETTER PHASE-D PUQ -+ /xf0/x96/xa5/x9e BAMUM LETTER PHASE-D MVOP -+ /xf0/x96/xa5/x9f BAMUM LETTER PHASE-D LOQ -+ /xf0/x96/xa5/xa0 BAMUM LETTER PHASE-D REN MUCH -+ /xf0/x96/xa5/xa1 BAMUM LETTER PHASE-D TI -+ /xf0/x96/xa5/xa2 BAMUM LETTER PHASE-D NTUU -+ /xf0/x96/xa5/xa3 BAMUM LETTER PHASE-D MBAA SEVEN -+ /xf0/x96/xa5/xa4 BAMUM LETTER PHASE-D SAQ -+ /xf0/x96/xa5/xa5 BAMUM LETTER PHASE-D FAA -+ /xf0/x96/xa5/xa6 BAMUM LETTER PHASE-E NDAP -+ /xf0/x96/xa5/xa7 BAMUM LETTER PHASE-E TOON -+ /xf0/x96/xa5/xa8 BAMUM LETTER PHASE-E MBEUM -+ /xf0/x96/xa5/xa9 BAMUM LETTER PHASE-E LAP -+ /xf0/x96/xa5/xaa BAMUM LETTER PHASE-E VOM -+ /xf0/x96/xa5/xab BAMUM LETTER PHASE-E LOON -+ /xf0/x96/xa5/xac BAMUM LETTER PHASE-E PAA -+ /xf0/x96/xa5/xad BAMUM LETTER PHASE-E SOM -+ /xf0/x96/xa5/xae BAMUM LETTER PHASE-E RAQ -+ /xf0/x96/xa5/xaf BAMUM LETTER PHASE-E NSHUOP -+ /xf0/x96/xa5/xb0 BAMUM LETTER PHASE-E NDUN -+ /xf0/x96/xa5/xb1 BAMUM LETTER PHASE-E PUAE -+ /xf0/x96/xa5/xb2 BAMUM LETTER PHASE-E TAM -+ /xf0/x96/xa5/xb3 BAMUM LETTER PHASE-E NGKA -+ /xf0/x96/xa5/xb4 BAMUM LETTER PHASE-E KPEUX -+ /xf0/x96/xa5/xb5 BAMUM LETTER PHASE-E WUO -+ /xf0/x96/xa5/xb6 BAMUM LETTER PHASE-E SEE -+ /xf0/x96/xa5/xb7 BAMUM LETTER PHASE-E NGGEUAET -+ /xf0/x96/xa5/xb8 BAMUM LETTER PHASE-E PAAM -+ /xf0/x96/xa5/xb9 BAMUM LETTER PHASE-E TOO -+ /xf0/x96/xa5/xba BAMUM LETTER PHASE-E KUOP -+ /xf0/x96/xa5/xbb BAMUM LETTER PHASE-E LOM -+ /xf0/x96/xa5/xbc BAMUM LETTER PHASE-E NSHIEE -+ /xf0/x96/xa5/xbd BAMUM LETTER PHASE-E NGOP -+ /xf0/x96/xa5/xbe BAMUM LETTER PHASE-E MAEM -+ /xf0/x96/xa5/xbf BAMUM LETTER PHASE-E NGKEUX -+ /xf0/x96/xa6/x80 BAMUM LETTER PHASE-E NGOQ -+ /xf0/x96/xa6/x81 BAMUM LETTER PHASE-E NSHUE -+ /xf0/x96/xa6/x82 BAMUM LETTER PHASE-E RIMGBA -+ /xf0/x96/xa6/x83 BAMUM LETTER PHASE-E NJEUX -+ /xf0/x96/xa6/x84 BAMUM LETTER PHASE-E PEEM -+ /xf0/x96/xa6/x85 BAMUM LETTER PHASE-E SAA -+ /xf0/x96/xa6/x86 BAMUM LETTER PHASE-E NGGURAE -+ /xf0/x96/xa6/x87 BAMUM LETTER PHASE-E MGBA -+ /xf0/x96/xa6/x88 BAMUM LETTER PHASE-E GHEUX -+ /xf0/x96/xa6/x89 BAMUM LETTER PHASE-E NGKEUAEM -+ /xf0/x96/xa6/x8a BAMUM LETTER PHASE-E NJAEMLI -+ /xf0/x96/xa6/x8b BAMUM LETTER PHASE-E MAP -+ /xf0/x96/xa6/x8c BAMUM LETTER PHASE-E LOOT -+ /xf0/x96/xa6/x8d BAMUM LETTER PHASE-E NGGEEEE -+ /xf0/x96/xa6/x8e BAMUM LETTER PHASE-E NDIQ -+ /xf0/x96/xa6/x8f BAMUM LETTER PHASE-E TAEN NTEUM -+ /xf0/x96/xa6/x90 BAMUM LETTER PHASE-E SET -+ /xf0/x96/xa6/x91 BAMUM LETTER PHASE-E PUM -+ /xf0/x96/xa6/x92 BAMUM LETTER PHASE-E NDAA SOFTNESS -+ /xf0/x96/xa6/x93 BAMUM LETTER PHASE-E NGGUAESHAE NYAM -+ /xf0/x96/xa6/x94 BAMUM LETTER PHASE-E YIEE -+ /xf0/x96/xa6/x95 BAMUM LETTER PHASE-E GHEUN -+ /xf0/x96/xa6/x96 BAMUM LETTER PHASE-E TUAE -+ /xf0/x96/xa6/x97 BAMUM LETTER PHASE-E YEUAE -+ /xf0/x96/xa6/x98 BAMUM LETTER PHASE-E PO -+ /xf0/x96/xa6/x99 BAMUM LETTER PHASE-E TUMAE -+ /xf0/x96/xa6/x9a BAMUM LETTER PHASE-E KEUAE -+ /xf0/x96/xa6/x9b BAMUM LETTER PHASE-E SUAEN -+ /xf0/x96/xa6/x9c BAMUM LETTER PHASE-E TEUAEQ -+ /xf0/x96/xa6/x9d BAMUM LETTER PHASE-E VEUAE -+ /xf0/x96/xa6/x9e BAMUM LETTER PHASE-E WEUX -+ /xf0/x96/xa6/x9f BAMUM LETTER PHASE-E LAAM -+ /xf0/x96/xa6/xa0 BAMUM LETTER PHASE-E PU -+ /xf0/x96/xa6/xa1 BAMUM LETTER PHASE-E TAAQ -+ /xf0/x96/xa6/xa2 BAMUM LETTER PHASE-E GHAAMAE -+ /xf0/x96/xa6/xa3 BAMUM LETTER PHASE-E NGEUREUT -+ /xf0/x96/xa6/xa4 BAMUM LETTER PHASE-E SHEUAEQ -+ /xf0/x96/xa6/xa5 BAMUM LETTER PHASE-E MGBEN -+ /xf0/x96/xa6/xa6 BAMUM LETTER PHASE-E MBEE -+ /xf0/x96/xa6/xa7 BAMUM LETTER PHASE-E NZAQ -+ /xf0/x96/xa6/xa8 BAMUM LETTER PHASE-E NKOM -+ /xf0/x96/xa6/xa9 BAMUM LETTER PHASE-E GBET -+ /xf0/x96/xa6/xaa BAMUM LETTER PHASE-E TUM -+ /xf0/x96/xa6/xab BAMUM LETTER PHASE-E KUET -+ /xf0/x96/xa6/xac BAMUM LETTER PHASE-E YAP -+ /xf0/x96/xa6/xad BAMUM LETTER PHASE-E NYI CLEAVER -+ /xf0/x96/xa6/xae BAMUM LETTER PHASE-E YIT -+ /xf0/x96/xa6/xaf BAMUM LETTER PHASE-E MFEUQ -+ /xf0/x96/xa6/xb0 BAMUM LETTER PHASE-E NDIAQ -+ /xf0/x96/xa6/xb1 BAMUM LETTER PHASE-E PIEEQ -+ /xf0/x96/xa6/xb2 BAMUM LETTER PHASE-E YUEQ -+ /xf0/x96/xa6/xb3 BAMUM LETTER PHASE-E LEUAEM -+ /xf0/x96/xa6/xb4 BAMUM LETTER PHASE-E FUE -+ /xf0/x96/xa6/xb5 BAMUM LETTER PHASE-E GBEUX -+ /xf0/x96/xa6/xb6 BAMUM LETTER PHASE-E NGKUP -+ /xf0/x96/xa6/xb7 BAMUM LETTER PHASE-E KET -+ /xf0/x96/xa6/xb8 BAMUM LETTER PHASE-E MAE -+ /xf0/x96/xa6/xb9 BAMUM LETTER PHASE-E NGKAAMI -+ /xf0/x96/xa6/xba BAMUM LETTER PHASE-E GHET -+ /xf0/x96/xa6/xbb BAMUM LETTER PHASE-E FA -+ /xf0/x96/xa6/xbc BAMUM LETTER PHASE-E NTUM -+ /xf0/x96/xa6/xbd BAMUM LETTER PHASE-E PEUT -+ /xf0/x96/xa6/xbe BAMUM LETTER PHASE-E YEUM -+ /xf0/x96/xa6/xbf BAMUM LETTER PHASE-E NGGEUAE -+ /xf0/x96/xa7/x80 BAMUM LETTER PHASE-E NYI BETWEEN -+ /xf0/x96/xa7/x81 BAMUM LETTER PHASE-E NZUQ -+ /xf0/x96/xa7/x82 BAMUM LETTER PHASE-E POON -+ /xf0/x96/xa7/x83 BAMUM LETTER PHASE-E MIEE -+ /xf0/x96/xa7/x84 BAMUM LETTER PHASE-E FUET -+ /xf0/x96/xa7/x85 BAMUM LETTER PHASE-E NAE -+ /xf0/x96/xa7/x86 BAMUM LETTER PHASE-E MUAE -+ /xf0/x96/xa7/x87 BAMUM LETTER PHASE-E GHEUAE -+ /xf0/x96/xa7/x88 BAMUM LETTER PHASE-E FU I -+ /xf0/x96/xa7/x89 BAMUM LETTER PHASE-E MVI -+ /xf0/x96/xa7/x8a BAMUM LETTER PHASE-E PUAQ -+ /xf0/x96/xa7/x8b BAMUM LETTER PHASE-E NGKUM -+ /xf0/x96/xa7/x8c BAMUM LETTER PHASE-E KUT -+ /xf0/x96/xa7/x8d BAMUM LETTER PHASE-E PIET -+ /xf0/x96/xa7/x8e BAMUM LETTER PHASE-E NTAP -+ /xf0/x96/xa7/x8f BAMUM LETTER PHASE-E YEUAET -+ /xf0/x96/xa7/x90 BAMUM LETTER PHASE-E NGGUP -+ /xf0/x96/xa7/x91 BAMUM LETTER PHASE-E PA PEOPLE -+ /xf0/x96/xa7/x92 BAMUM LETTER PHASE-E FU CALL -+ /xf0/x96/xa7/x93 BAMUM LETTER PHASE-E FOM -+ /xf0/x96/xa7/x94 BAMUM LETTER PHASE-E NJEE -+ /xf0/x96/xa7/x95 BAMUM LETTER PHASE-E A -+ /xf0/x96/xa7/x96 BAMUM LETTER PHASE-E TOQ -+ /xf0/x96/xa7/x97 BAMUM LETTER PHASE-E O -+ /xf0/x96/xa7/x98 BAMUM LETTER PHASE-E I -+ /xf0/x96/xa7/x99 BAMUM LETTER PHASE-E LAQ -+ /xf0/x96/xa7/x9a BAMUM LETTER PHASE-E PA PLURAL -+ /xf0/x96/xa7/x9b BAMUM LETTER PHASE-E TAA -+ /xf0/x96/xa7/x9c BAMUM LETTER PHASE-E TAQ -+ /xf0/x96/xa7/x9d BAMUM LETTER PHASE-E NDAA MY HOUSE -+ /xf0/x96/xa7/x9e BAMUM LETTER PHASE-E SHIQ -+ /xf0/x96/xa7/x9f BAMUM LETTER PHASE-E YEUX -+ /xf0/x96/xa7/xa0 BAMUM LETTER PHASE-E NGUAE -+ /xf0/x96/xa7/xa1 BAMUM LETTER PHASE-E YUAEN -+ /xf0/x96/xa7/xa2 BAMUM LETTER PHASE-E YOQ SWIMMING -+ /xf0/x96/xa7/xa3 BAMUM LETTER PHASE-E YOQ COVER -+ /xf0/x96/xa7/xa4 BAMUM LETTER PHASE-E YUQ -+ /xf0/x96/xa7/xa5 BAMUM LETTER PHASE-E YUN -+ /xf0/x96/xa7/xa6 BAMUM LETTER PHASE-E KEUX -+ /xf0/x96/xa7/xa7 BAMUM LETTER PHASE-E PEUX -+ /xf0/x96/xa7/xa8 BAMUM LETTER PHASE-E NJEE EPOCH -+ /xf0/x96/xa7/xa9 BAMUM LETTER PHASE-E PUE -+ /xf0/x96/xa7/xaa BAMUM LETTER PHASE-E WUE -+ /xf0/x96/xa7/xab BAMUM LETTER PHASE-E FEE -+ /xf0/x96/xa7/xac BAMUM LETTER PHASE-E VEE -+ /xf0/x96/xa7/xad BAMUM LETTER PHASE-E LU -+ /xf0/x96/xa7/xae BAMUM LETTER PHASE-E MI -+ /xf0/x96/xa7/xaf BAMUM LETTER PHASE-E REUX -+ /xf0/x96/xa7/xb0 BAMUM LETTER PHASE-E RAE -+ /xf0/x96/xa7/xb1 BAMUM LETTER PHASE-E NGUAET -+ /xf0/x96/xa7/xb2 BAMUM LETTER PHASE-E NGA -+ /xf0/x96/xa7/xb3 BAMUM LETTER PHASE-E SHO -+ /xf0/x96/xa7/xb4 BAMUM LETTER PHASE-E SHOQ -+ /xf0/x96/xa7/xb5 BAMUM LETTER PHASE-E FU REMEDY -+ /xf0/x96/xa7/xb6 BAMUM LETTER PHASE-E NA -+ /xf0/x96/xa7/xb7 BAMUM LETTER PHASE-E PI -+ /xf0/x96/xa7/xb8 BAMUM LETTER PHASE-E LOQ -+ /xf0/x96/xa7/xb9 BAMUM LETTER PHASE-E KO -+ /xf0/x96/xa7/xba BAMUM LETTER PHASE-E MEN -+ /xf0/x96/xa7/xbb BAMUM LETTER PHASE-E MA -+ /xf0/x96/xa7/xbc BAMUM LETTER PHASE-E MAQ -+ /xf0/x96/xa7/xbd BAMUM LETTER PHASE-E TEU -+ /xf0/x96/xa7/xbe BAMUM LETTER PHASE-E KI -+ /xf0/x96/xa7/xbf BAMUM LETTER PHASE-E MON -+ /xf0/x96/xa8/x80 BAMUM LETTER PHASE-E TEN -+ /xf0/x96/xa8/x81 BAMUM LETTER PHASE-E FAQ -+ /xf0/x96/xa8/x82 BAMUM LETTER PHASE-E GHOM -+ /xf0/x96/xa8/x83 BAMUM LETTER PHASE-F KA -+ /xf0/x96/xa8/x84 BAMUM LETTER PHASE-F U -+ /xf0/x96/xa8/x85 BAMUM LETTER PHASE-F KU -+ /xf0/x96/xa8/x86 BAMUM LETTER PHASE-F EE -+ /xf0/x96/xa8/x87 BAMUM LETTER PHASE-F REE -+ /xf0/x96/xa8/x88 BAMUM LETTER PHASE-F TAE -+ /xf0/x96/xa8/x89 BAMUM LETTER PHASE-F NYI -+ /xf0/x96/xa8/x8a BAMUM LETTER PHASE-F LA -+ /xf0/x96/xa8/x8b BAMUM LETTER PHASE-F RII -+ /xf0/x96/xa8/x8c BAMUM LETTER PHASE-F RIEE -+ /xf0/x96/xa8/x8d BAMUM LETTER PHASE-F MEEEE -+ /xf0/x96/xa8/x8e BAMUM LETTER PHASE-F TAA -+ /xf0/x96/xa8/x8f BAMUM LETTER PHASE-F NDAA -+ /xf0/x96/xa8/x90 BAMUM LETTER PHASE-F NJAEM -+ /xf0/x96/xa8/x91 BAMUM LETTER PHASE-F M -+ /xf0/x96/xa8/x92 BAMUM LETTER PHASE-F SUU -+ /xf0/x96/xa8/x93 BAMUM LETTER PHASE-F SHII -+ /xf0/x96/xa8/x94 BAMUM LETTER PHASE-F SI -+ /xf0/x96/xa8/x95 BAMUM LETTER PHASE-F SEUX -+ /xf0/x96/xa8/x96 BAMUM LETTER PHASE-F KYEE -+ /xf0/x96/xa8/x97 BAMUM LETTER PHASE-F KET -+ /xf0/x96/xa8/x98 BAMUM LETTER PHASE-F NUAE -+ /xf0/x96/xa8/x99 BAMUM LETTER PHASE-F NU -+ /xf0/x96/xa8/x9a BAMUM LETTER PHASE-F NJUAE -+ /xf0/x96/xa8/x9b BAMUM LETTER PHASE-F YOQ -+ /xf0/x96/xa8/x9c BAMUM LETTER PHASE-F SHU -+ /xf0/x96/xa8/x9d BAMUM LETTER PHASE-F YA -+ /xf0/x96/xa8/x9e BAMUM LETTER PHASE-F NSHA -+ /xf0/x96/xa8/x9f BAMUM LETTER PHASE-F PEUX -+ /xf0/x96/xa8/xa0 BAMUM LETTER PHASE-F NTEE -+ /xf0/x96/xa8/xa1 BAMUM LETTER PHASE-F WUE -+ /xf0/x96/xa8/xa2 BAMUM LETTER PHASE-F PEE -+ /xf0/x96/xa8/xa3 BAMUM LETTER PHASE-F RU -+ /xf0/x96/xa8/xa4 BAMUM LETTER PHASE-F NI -+ /xf0/x96/xa8/xa5 BAMUM LETTER PHASE-F REUX -+ /xf0/x96/xa8/xa6 BAMUM LETTER PHASE-F KEN -+ /xf0/x96/xa8/xa7 BAMUM LETTER PHASE-F NGKWAEN -+ /xf0/x96/xa8/xa8 BAMUM LETTER PHASE-F NGGA -+ /xf0/x96/xa8/xa9 BAMUM LETTER PHASE-F SHO -+ /xf0/x96/xa8/xaa BAMUM LETTER PHASE-F PUAE -+ /xf0/x96/xa8/xab BAMUM LETTER PHASE-F FOM -+ /xf0/x96/xa8/xac BAMUM LETTER PHASE-F WA -+ /xf0/x96/xa8/xad BAMUM LETTER PHASE-F LI -+ /xf0/x96/xa8/xae BAMUM LETTER PHASE-F LOQ -+ /xf0/x96/xa8/xaf BAMUM LETTER PHASE-F KO -+ /xf0/x96/xa8/xb0 BAMUM LETTER PHASE-F MBEN -+ /xf0/x96/xa8/xb1 BAMUM LETTER PHASE-F REN -+ /xf0/x96/xa8/xb2 BAMUM LETTER PHASE-F MA -+ /xf0/x96/xa8/xb3 BAMUM LETTER PHASE-F MO -+ /xf0/x96/xa8/xb4 BAMUM LETTER PHASE-F MBAA -+ /xf0/x96/xa8/xb5 BAMUM LETTER PHASE-F TET -+ /xf0/x96/xa8/xb6 BAMUM LETTER PHASE-F KPA -+ /xf0/x96/xa8/xb7 BAMUM LETTER PHASE-F SAMBA -+ /xf0/x96/xa8/xb8 BAMUM LETTER PHASE-F VUEQ -+ /xf0/x9b/x80/x80 KATAKANA LETTER ARCHAIC E -+ /xf0/x9b/x80/x81 HIRAGANA LETTER ARCHAIC YE - /xf0/x9d/x80/x80 BYZANTINE MUSICAL SYMBOL PSILI - /xf0/x9d/x80/x81 BYZANTINE MUSICAL SYMBOL DASEIA - /xf0/x9d/x80/x82 BYZANTINE MUSICAL SYMBOL PERISPOMENI -@@ -30151,6 +33445,1091 @@ CHARMAP - /xf0/x9f/x82/x91 DOMINO TILE VERTICAL-06-04 - /xf0/x9f/x82/x92 DOMINO TILE VERTICAL-06-05 - /xf0/x9f/x82/x93 DOMINO TILE VERTICAL-06-06 -+ /xf0/x9f/x82/xa0 PLAYING CARD BACK -+ /xf0/x9f/x82/xa1 PLAYING CARD ACE OF SPADES -+ /xf0/x9f/x82/xa2 PLAYING CARD TWO OF SPADES -+ /xf0/x9f/x82/xa3 PLAYING CARD THREE OF SPADES -+ /xf0/x9f/x82/xa4 PLAYING CARD FOUR OF SPADES -+ /xf0/x9f/x82/xa5 PLAYING CARD FIVE OF SPADES -+ /xf0/x9f/x82/xa6 PLAYING CARD SIX OF SPADES -+ /xf0/x9f/x82/xa7 PLAYING CARD SEVEN OF SPADES -+ /xf0/x9f/x82/xa8 PLAYING CARD EIGHT OF SPADES -+ /xf0/x9f/x82/xa9 PLAYING CARD NINE OF SPADES -+ /xf0/x9f/x82/xaa PLAYING CARD TEN OF SPADES -+ /xf0/x9f/x82/xab PLAYING CARD JACK OF SPADES -+ /xf0/x9f/x82/xac PLAYING CARD KNIGHT OF SPADES -+ /xf0/x9f/x82/xad PLAYING CARD QUEEN OF SPADES -+ /xf0/x9f/x82/xae PLAYING CARD KING OF SPADES -+ /xf0/x9f/x82/xb1 PLAYING CARD ACE OF HEARTS -+ /xf0/x9f/x82/xb2 PLAYING CARD TWO OF HEARTS -+ /xf0/x9f/x82/xb3 PLAYING CARD THREE OF HEARTS -+ /xf0/x9f/x82/xb4 PLAYING CARD FOUR OF HEARTS -+ /xf0/x9f/x82/xb5 PLAYING CARD FIVE OF HEARTS -+ /xf0/x9f/x82/xb6 PLAYING CARD SIX OF HEARTS -+ /xf0/x9f/x82/xb7 PLAYING CARD SEVEN OF HEARTS -+ /xf0/x9f/x82/xb8 PLAYING CARD EIGHT OF HEARTS -+ /xf0/x9f/x82/xb9 PLAYING CARD NINE OF HEARTS -+ /xf0/x9f/x82/xba PLAYING CARD TEN OF HEARTS -+ /xf0/x9f/x82/xbb PLAYING CARD JACK OF HEARTS -+ /xf0/x9f/x82/xbc PLAYING CARD KNIGHT OF HEARTS -+ /xf0/x9f/x82/xbd PLAYING CARD QUEEN OF HEARTS -+ /xf0/x9f/x82/xbe PLAYING CARD KING OF HEARTS -+ /xf0/x9f/x83/x81 PLAYING CARD ACE OF DIAMONDS -+ /xf0/x9f/x83/x82 PLAYING CARD TWO OF DIAMONDS -+ /xf0/x9f/x83/x83 PLAYING CARD THREE OF DIAMONDS -+ /xf0/x9f/x83/x84 PLAYING CARD FOUR OF DIAMONDS -+ /xf0/x9f/x83/x85 PLAYING CARD FIVE OF DIAMONDS -+ /xf0/x9f/x83/x86 PLAYING CARD SIX OF DIAMONDS -+ /xf0/x9f/x83/x87 PLAYING CARD SEVEN OF DIAMONDS -+ /xf0/x9f/x83/x88 PLAYING CARD EIGHT OF DIAMONDS -+ /xf0/x9f/x83/x89 PLAYING CARD NINE OF DIAMONDS -+ /xf0/x9f/x83/x8a PLAYING CARD TEN OF DIAMONDS -+ /xf0/x9f/x83/x8b PLAYING CARD JACK OF DIAMONDS -+ /xf0/x9f/x83/x8c PLAYING CARD KNIGHT OF DIAMONDS -+ /xf0/x9f/x83/x8d PLAYING CARD QUEEN OF DIAMONDS -+ /xf0/x9f/x83/x8e PLAYING CARD KING OF DIAMONDS -+ /xf0/x9f/x83/x8f PLAYING CARD BLACK JOKER -+ /xf0/x9f/x83/x91 PLAYING CARD ACE OF CLUBS -+ /xf0/x9f/x83/x92 PLAYING CARD TWO OF CLUBS -+ /xf0/x9f/x83/x93 PLAYING CARD THREE OF CLUBS -+ /xf0/x9f/x83/x94 PLAYING CARD FOUR OF CLUBS -+ /xf0/x9f/x83/x95 PLAYING CARD FIVE OF CLUBS -+ /xf0/x9f/x83/x96 PLAYING CARD SIX OF CLUBS -+ /xf0/x9f/x83/x97 PLAYING CARD SEVEN OF CLUBS -+ /xf0/x9f/x83/x98 PLAYING CARD EIGHT OF CLUBS -+ /xf0/x9f/x83/x99 PLAYING CARD NINE OF CLUBS -+ /xf0/x9f/x83/x9a PLAYING CARD TEN OF CLUBS -+ /xf0/x9f/x83/x9b PLAYING CARD JACK OF CLUBS -+ /xf0/x9f/x83/x9c PLAYING CARD KNIGHT OF CLUBS -+ /xf0/x9f/x83/x9d PLAYING CARD QUEEN OF CLUBS -+ /xf0/x9f/x83/x9e PLAYING CARD KING OF CLUBS -+ /xf0/x9f/x83/x9f PLAYING CARD WHITE JOKER -+ /xf0/x9f/x84/x80 DIGIT ZERO FULL STOP -+ /xf0/x9f/x84/x81 DIGIT ZERO COMMA -+ /xf0/x9f/x84/x82 DIGIT ONE COMMA -+ /xf0/x9f/x84/x83 DIGIT TWO COMMA -+ /xf0/x9f/x84/x84 DIGIT THREE COMMA -+ /xf0/x9f/x84/x85 DIGIT FOUR COMMA -+ /xf0/x9f/x84/x86 DIGIT FIVE COMMA -+ /xf0/x9f/x84/x87 DIGIT SIX COMMA -+ /xf0/x9f/x84/x88 DIGIT SEVEN COMMA -+ /xf0/x9f/x84/x89 DIGIT EIGHT COMMA -+ /xf0/x9f/x84/x8a DIGIT NINE COMMA -+ /xf0/x9f/x84/x90 PARENTHESIZED LATIN CAPITAL LETTER A -+ /xf0/x9f/x84/x91 PARENTHESIZED LATIN CAPITAL LETTER B -+ /xf0/x9f/x84/x92 PARENTHESIZED LATIN CAPITAL LETTER C -+ /xf0/x9f/x84/x93 PARENTHESIZED LATIN CAPITAL LETTER D -+ /xf0/x9f/x84/x94 PARENTHESIZED LATIN CAPITAL LETTER E -+ /xf0/x9f/x84/x95 PARENTHESIZED LATIN CAPITAL LETTER F -+ /xf0/x9f/x84/x96 PARENTHESIZED LATIN CAPITAL LETTER G -+ /xf0/x9f/x84/x97 PARENTHESIZED LATIN CAPITAL LETTER H -+ /xf0/x9f/x84/x98 PARENTHESIZED LATIN CAPITAL LETTER I -+ /xf0/x9f/x84/x99 PARENTHESIZED LATIN CAPITAL LETTER J -+ /xf0/x9f/x84/x9a PARENTHESIZED LATIN CAPITAL LETTER K -+ /xf0/x9f/x84/x9b PARENTHESIZED LATIN CAPITAL LETTER L -+ /xf0/x9f/x84/x9c PARENTHESIZED LATIN CAPITAL LETTER M -+ /xf0/x9f/x84/x9d PARENTHESIZED LATIN CAPITAL LETTER N -+ /xf0/x9f/x84/x9e PARENTHESIZED LATIN CAPITAL LETTER O -+ /xf0/x9f/x84/x9f PARENTHESIZED LATIN CAPITAL LETTER P -+ /xf0/x9f/x84/xa0 PARENTHESIZED LATIN CAPITAL LETTER Q -+ /xf0/x9f/x84/xa1 PARENTHESIZED LATIN CAPITAL LETTER R -+ /xf0/x9f/x84/xa2 PARENTHESIZED LATIN CAPITAL LETTER S -+ /xf0/x9f/x84/xa3 PARENTHESIZED LATIN CAPITAL LETTER T -+ /xf0/x9f/x84/xa4 PARENTHESIZED LATIN CAPITAL LETTER U -+ /xf0/x9f/x84/xa5 PARENTHESIZED LATIN CAPITAL LETTER V -+ /xf0/x9f/x84/xa6 PARENTHESIZED LATIN CAPITAL LETTER W -+ /xf0/x9f/x84/xa7 PARENTHESIZED LATIN CAPITAL LETTER X -+ /xf0/x9f/x84/xa8 PARENTHESIZED LATIN CAPITAL LETTER Y -+ /xf0/x9f/x84/xa9 PARENTHESIZED LATIN CAPITAL LETTER Z -+ /xf0/x9f/x84/xaa TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S -+ /xf0/x9f/x84/xab CIRCLED ITALIC LATIN CAPITAL LETTER C -+ /xf0/x9f/x84/xac CIRCLED ITALIC LATIN CAPITAL LETTER R -+ /xf0/x9f/x84/xad CIRCLED CD -+ /xf0/x9f/x84/xae CIRCLED WZ -+ /xf0/x9f/x84/xb0 SQUARED LATIN CAPITAL LETTER A -+ /xf0/x9f/x84/xb1 SQUARED LATIN CAPITAL LETTER B -+ /xf0/x9f/x84/xb2 SQUARED LATIN CAPITAL LETTER C -+ /xf0/x9f/x84/xb3 SQUARED LATIN CAPITAL LETTER D -+ /xf0/x9f/x84/xb4 SQUARED LATIN CAPITAL LETTER E -+ /xf0/x9f/x84/xb5 SQUARED LATIN CAPITAL LETTER F -+ /xf0/x9f/x84/xb6 SQUARED LATIN CAPITAL LETTER G -+ /xf0/x9f/x84/xb7 SQUARED LATIN CAPITAL LETTER H -+ /xf0/x9f/x84/xb8 SQUARED LATIN CAPITAL LETTER I -+ /xf0/x9f/x84/xb9 SQUARED LATIN CAPITAL LETTER J -+ /xf0/x9f/x84/xba SQUARED LATIN CAPITAL LETTER K -+ /xf0/x9f/x84/xbb SQUARED LATIN CAPITAL LETTER L -+ /xf0/x9f/x84/xbc SQUARED LATIN CAPITAL LETTER M -+ /xf0/x9f/x84/xbd SQUARED LATIN CAPITAL LETTER N -+ /xf0/x9f/x84/xbe SQUARED LATIN CAPITAL LETTER O -+ /xf0/x9f/x84/xbf SQUARED LATIN CAPITAL LETTER P -+ /xf0/x9f/x85/x80 SQUARED LATIN CAPITAL LETTER Q -+ /xf0/x9f/x85/x81 SQUARED LATIN CAPITAL LETTER R -+ /xf0/x9f/x85/x82 SQUARED LATIN CAPITAL LETTER S -+ /xf0/x9f/x85/x83 SQUARED LATIN CAPITAL LETTER T -+ /xf0/x9f/x85/x84 SQUARED LATIN CAPITAL LETTER U -+ /xf0/x9f/x85/x85 SQUARED LATIN CAPITAL LETTER V -+ /xf0/x9f/x85/x86 SQUARED LATIN CAPITAL LETTER W -+ /xf0/x9f/x85/x87 SQUARED LATIN CAPITAL LETTER X -+ /xf0/x9f/x85/x88 SQUARED LATIN CAPITAL LETTER Y -+ /xf0/x9f/x85/x89 SQUARED LATIN CAPITAL LETTER Z -+ /xf0/x9f/x85/x8a SQUARED HV -+ /xf0/x9f/x85/x8b SQUARED MV -+ /xf0/x9f/x85/x8c SQUARED SD -+ /xf0/x9f/x85/x8d SQUARED SS -+ /xf0/x9f/x85/x8e SQUARED PPV -+ /xf0/x9f/x85/x8f SQUARED WC -+ /xf0/x9f/x85/x90 NEGATIVE CIRCLED LATIN CAPITAL LETTER A -+ /xf0/x9f/x85/x91 NEGATIVE CIRCLED LATIN CAPITAL LETTER B -+ /xf0/x9f/x85/x92 NEGATIVE CIRCLED LATIN CAPITAL LETTER C -+ /xf0/x9f/x85/x93 NEGATIVE CIRCLED LATIN CAPITAL LETTER D -+ /xf0/x9f/x85/x94 NEGATIVE CIRCLED LATIN CAPITAL LETTER E -+ /xf0/x9f/x85/x95 NEGATIVE CIRCLED LATIN CAPITAL LETTER F -+ /xf0/x9f/x85/x96 NEGATIVE CIRCLED LATIN CAPITAL LETTER G -+ /xf0/x9f/x85/x97 NEGATIVE CIRCLED LATIN CAPITAL LETTER H -+ /xf0/x9f/x85/x98 NEGATIVE CIRCLED LATIN CAPITAL LETTER I -+ /xf0/x9f/x85/x99 NEGATIVE CIRCLED LATIN CAPITAL LETTER J -+ /xf0/x9f/x85/x9a NEGATIVE CIRCLED LATIN CAPITAL LETTER K -+ /xf0/x9f/x85/x9b NEGATIVE CIRCLED LATIN CAPITAL LETTER L -+ /xf0/x9f/x85/x9c NEGATIVE CIRCLED LATIN CAPITAL LETTER M -+ /xf0/x9f/x85/x9d NEGATIVE CIRCLED LATIN CAPITAL LETTER N -+ /xf0/x9f/x85/x9e NEGATIVE CIRCLED LATIN CAPITAL LETTER O -+ /xf0/x9f/x85/x9f NEGATIVE CIRCLED LATIN CAPITAL LETTER P -+ /xf0/x9f/x85/xa0 NEGATIVE CIRCLED LATIN CAPITAL LETTER Q -+ /xf0/x9f/x85/xa1 NEGATIVE CIRCLED LATIN CAPITAL LETTER R -+ /xf0/x9f/x85/xa2 NEGATIVE CIRCLED LATIN CAPITAL LETTER S -+ /xf0/x9f/x85/xa3 NEGATIVE CIRCLED LATIN CAPITAL LETTER T -+ /xf0/x9f/x85/xa4 NEGATIVE CIRCLED LATIN CAPITAL LETTER U -+ /xf0/x9f/x85/xa5 NEGATIVE CIRCLED LATIN CAPITAL LETTER V -+ /xf0/x9f/x85/xa6 NEGATIVE CIRCLED LATIN CAPITAL LETTER W -+ /xf0/x9f/x85/xa7 NEGATIVE CIRCLED LATIN CAPITAL LETTER X -+ /xf0/x9f/x85/xa8 NEGATIVE CIRCLED LATIN CAPITAL LETTER Y -+ /xf0/x9f/x85/xa9 NEGATIVE CIRCLED LATIN CAPITAL LETTER Z -+ /xf0/x9f/x85/xb0 NEGATIVE SQUARED LATIN CAPITAL LETTER A -+ /xf0/x9f/x85/xb1 NEGATIVE SQUARED LATIN CAPITAL LETTER B -+ /xf0/x9f/x85/xb2 NEGATIVE SQUARED LATIN CAPITAL LETTER C -+ /xf0/x9f/x85/xb3 NEGATIVE SQUARED LATIN CAPITAL LETTER D -+ /xf0/x9f/x85/xb4 NEGATIVE SQUARED LATIN CAPITAL LETTER E -+ /xf0/x9f/x85/xb5 NEGATIVE SQUARED LATIN CAPITAL LETTER F -+ /xf0/x9f/x85/xb6 NEGATIVE SQUARED LATIN CAPITAL LETTER G -+ /xf0/x9f/x85/xb7 NEGATIVE SQUARED LATIN CAPITAL LETTER H -+ /xf0/x9f/x85/xb8 NEGATIVE SQUARED LATIN CAPITAL LETTER I -+ /xf0/x9f/x85/xb9 NEGATIVE SQUARED LATIN CAPITAL LETTER J -+ /xf0/x9f/x85/xba NEGATIVE SQUARED LATIN CAPITAL LETTER K -+ /xf0/x9f/x85/xbb NEGATIVE SQUARED LATIN CAPITAL LETTER L -+ /xf0/x9f/x85/xbc NEGATIVE SQUARED LATIN CAPITAL LETTER M -+ /xf0/x9f/x85/xbd NEGATIVE SQUARED LATIN CAPITAL LETTER N -+ /xf0/x9f/x85/xbe NEGATIVE SQUARED LATIN CAPITAL LETTER O -+ /xf0/x9f/x85/xbf NEGATIVE SQUARED LATIN CAPITAL LETTER P -+ /xf0/x9f/x86/x80 NEGATIVE SQUARED LATIN CAPITAL LETTER Q -+ /xf0/x9f/x86/x81 NEGATIVE SQUARED LATIN CAPITAL LETTER R -+ /xf0/x9f/x86/x82 NEGATIVE SQUARED LATIN CAPITAL LETTER S -+ /xf0/x9f/x86/x83 NEGATIVE SQUARED LATIN CAPITAL LETTER T -+ /xf0/x9f/x86/x84 NEGATIVE SQUARED LATIN CAPITAL LETTER U -+ /xf0/x9f/x86/x85 NEGATIVE SQUARED LATIN CAPITAL LETTER V -+ /xf0/x9f/x86/x86 NEGATIVE SQUARED LATIN CAPITAL LETTER W -+ /xf0/x9f/x86/x87 NEGATIVE SQUARED LATIN CAPITAL LETTER X -+ /xf0/x9f/x86/x88 NEGATIVE SQUARED LATIN CAPITAL LETTER Y -+ /xf0/x9f/x86/x89 NEGATIVE SQUARED LATIN CAPITAL LETTER Z -+ /xf0/x9f/x86/x8a CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P -+ /xf0/x9f/x86/x8b NEGATIVE SQUARED IC -+ /xf0/x9f/x86/x8c NEGATIVE SQUARED PA -+ /xf0/x9f/x86/x8d NEGATIVE SQUARED SA -+ /xf0/x9f/x86/x8e NEGATIVE SQUARED AB -+ /xf0/x9f/x86/x8f NEGATIVE SQUARED WC -+ /xf0/x9f/x86/x90 SQUARE DJ -+ /xf0/x9f/x86/x91 SQUARED CL -+ /xf0/x9f/x86/x92 SQUARED COOL -+ /xf0/x9f/x86/x93 SQUARED FREE -+ /xf0/x9f/x86/x94 SQUARED ID -+ /xf0/x9f/x86/x95 SQUARED NEW -+ /xf0/x9f/x86/x96 SQUARED NG -+ /xf0/x9f/x86/x97 SQUARED OK -+ /xf0/x9f/x86/x98 SQUARED SOS -+ /xf0/x9f/x86/x99 SQUARED UP WITH EXCLAMATION MARK -+ /xf0/x9f/x86/x9a SQUARED VS -+ /xf0/x9f/x87/xa6 REGIONAL INDICATOR SYMBOL LETTER A -+ /xf0/x9f/x87/xa7 REGIONAL INDICATOR SYMBOL LETTER B -+ /xf0/x9f/x87/xa8 REGIONAL INDICATOR SYMBOL LETTER C -+ /xf0/x9f/x87/xa9 REGIONAL INDICATOR SYMBOL LETTER D -+ /xf0/x9f/x87/xaa REGIONAL INDICATOR SYMBOL LETTER E -+ /xf0/x9f/x87/xab REGIONAL INDICATOR SYMBOL LETTER F -+ /xf0/x9f/x87/xac REGIONAL INDICATOR SYMBOL LETTER G -+ /xf0/x9f/x87/xad REGIONAL INDICATOR SYMBOL LETTER H -+ /xf0/x9f/x87/xae REGIONAL INDICATOR SYMBOL LETTER I -+ /xf0/x9f/x87/xaf REGIONAL INDICATOR SYMBOL LETTER J -+ /xf0/x9f/x87/xb0 REGIONAL INDICATOR SYMBOL LETTER K -+ /xf0/x9f/x87/xb1 REGIONAL INDICATOR SYMBOL LETTER L -+ /xf0/x9f/x87/xb2 REGIONAL INDICATOR SYMBOL LETTER M -+ /xf0/x9f/x87/xb3 REGIONAL INDICATOR SYMBOL LETTER N -+ /xf0/x9f/x87/xb4 REGIONAL INDICATOR SYMBOL LETTER O -+ /xf0/x9f/x87/xb5 REGIONAL INDICATOR SYMBOL LETTER P -+ /xf0/x9f/x87/xb6 REGIONAL INDICATOR SYMBOL LETTER Q -+ /xf0/x9f/x87/xb7 REGIONAL INDICATOR SYMBOL LETTER R -+ /xf0/x9f/x87/xb8 REGIONAL INDICATOR SYMBOL LETTER S -+ /xf0/x9f/x87/xb9 REGIONAL INDICATOR SYMBOL LETTER T -+ /xf0/x9f/x87/xba REGIONAL INDICATOR SYMBOL LETTER U -+ /xf0/x9f/x87/xbb REGIONAL INDICATOR SYMBOL LETTER V -+ /xf0/x9f/x87/xbc REGIONAL INDICATOR SYMBOL LETTER W -+ /xf0/x9f/x87/xbd REGIONAL INDICATOR SYMBOL LETTER X -+ /xf0/x9f/x87/xbe REGIONAL INDICATOR SYMBOL LETTER Y -+ /xf0/x9f/x87/xbf REGIONAL INDICATOR SYMBOL LETTER Z -+ /xf0/x9f/x88/x80 SQUARE HIRAGANA HOKA -+ /xf0/x9f/x88/x81 SQUARED KATAKANA KOKO -+ /xf0/x9f/x88/x82 SQUARED KATAKANA SA -+ /xf0/x9f/x88/x90 SQUARED CJK UNIFIED IDEOGRAPH-624B -+ /xf0/x9f/x88/x91 SQUARED CJK UNIFIED IDEOGRAPH-5B57 -+ /xf0/x9f/x88/x92 SQUARED CJK UNIFIED IDEOGRAPH-53CC -+ /xf0/x9f/x88/x93 SQUARED KATAKANA DE -+ /xf0/x9f/x88/x94 SQUARED CJK UNIFIED IDEOGRAPH-4E8C -+ /xf0/x9f/x88/x95 SQUARED CJK UNIFIED IDEOGRAPH-591A -+ /xf0/x9f/x88/x96 SQUARED CJK UNIFIED IDEOGRAPH-89E3 -+ /xf0/x9f/x88/x97 SQUARED CJK UNIFIED IDEOGRAPH-5929 -+ /xf0/x9f/x88/x98 SQUARED CJK UNIFIED IDEOGRAPH-4EA4 -+ /xf0/x9f/x88/x99 SQUARED CJK UNIFIED IDEOGRAPH-6620 -+ /xf0/x9f/x88/x9a SQUARED CJK UNIFIED IDEOGRAPH-7121 -+ /xf0/x9f/x88/x9b SQUARED CJK UNIFIED IDEOGRAPH-6599 -+ /xf0/x9f/x88/x9c SQUARED CJK UNIFIED IDEOGRAPH-524D -+ /xf0/x9f/x88/x9d SQUARED CJK UNIFIED IDEOGRAPH-5F8C -+ /xf0/x9f/x88/x9e SQUARED CJK UNIFIED IDEOGRAPH-518D -+ /xf0/x9f/x88/x9f SQUARED CJK UNIFIED IDEOGRAPH-65B0 -+ /xf0/x9f/x88/xa0 SQUARED CJK UNIFIED IDEOGRAPH-521D -+ /xf0/x9f/x88/xa1 SQUARED CJK UNIFIED IDEOGRAPH-7D42 -+ /xf0/x9f/x88/xa2 SQUARED CJK UNIFIED IDEOGRAPH-751F -+ /xf0/x9f/x88/xa3 SQUARED CJK UNIFIED IDEOGRAPH-8CA9 -+ /xf0/x9f/x88/xa4 SQUARED CJK UNIFIED IDEOGRAPH-58F0 -+ /xf0/x9f/x88/xa5 SQUARED CJK UNIFIED IDEOGRAPH-5439 -+ /xf0/x9f/x88/xa6 SQUARED CJK UNIFIED IDEOGRAPH-6F14 -+ /xf0/x9f/x88/xa7 SQUARED CJK UNIFIED IDEOGRAPH-6295 -+ /xf0/x9f/x88/xa8 SQUARED CJK UNIFIED IDEOGRAPH-6355 -+ /xf0/x9f/x88/xa9 SQUARED CJK UNIFIED IDEOGRAPH-4E00 -+ /xf0/x9f/x88/xaa SQUARED CJK UNIFIED IDEOGRAPH-4E09 -+ /xf0/x9f/x88/xab SQUARED CJK UNIFIED IDEOGRAPH-904A -+ /xf0/x9f/x88/xac SQUARED CJK UNIFIED IDEOGRAPH-5DE6 -+ /xf0/x9f/x88/xad SQUARED CJK UNIFIED IDEOGRAPH-4E2D -+ /xf0/x9f/x88/xae SQUARED CJK UNIFIED IDEOGRAPH-53F3 -+ /xf0/x9f/x88/xaf SQUARED CJK UNIFIED IDEOGRAPH-6307 -+ /xf0/x9f/x88/xb0 SQUARED CJK UNIFIED IDEOGRAPH-8D70 -+ /xf0/x9f/x88/xb1 SQUARED CJK UNIFIED IDEOGRAPH-6253 -+ /xf0/x9f/x88/xb2 SQUARED CJK UNIFIED IDEOGRAPH-7981 -+ /xf0/x9f/x88/xb3 SQUARED CJK UNIFIED IDEOGRAPH-7A7A -+ /xf0/x9f/x88/xb4 SQUARED CJK UNIFIED IDEOGRAPH-5408 -+ /xf0/x9f/x88/xb5 SQUARED CJK UNIFIED IDEOGRAPH-6E80 -+ /xf0/x9f/x88/xb6 SQUARED CJK UNIFIED IDEOGRAPH-6709 -+ /xf0/x9f/x88/xb7 SQUARED CJK UNIFIED IDEOGRAPH-6708 -+ /xf0/x9f/x88/xb8 SQUARED CJK UNIFIED IDEOGRAPH-7533 -+ /xf0/x9f/x88/xb9 SQUARED CJK UNIFIED IDEOGRAPH-5272 -+ /xf0/x9f/x88/xba SQUARED CJK UNIFIED IDEOGRAPH-55B6 -+ /xf0/x9f/x89/x80 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C -+ /xf0/x9f/x89/x81 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 -+ /xf0/x9f/x89/x82 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C -+ /xf0/x9f/x89/x83 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 -+ /xf0/x9f/x89/x84 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 -+ /xf0/x9f/x89/x85 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 -+ /xf0/x9f/x89/x86 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 -+ /xf0/x9f/x89/x87 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD -+ /xf0/x9f/x89/x88 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 -+ /xf0/x9f/x89/x90 CIRCLED IDEOGRAPH ADVANTAGE -+ /xf0/x9f/x89/x91 CIRCLED IDEOGRAPH ACCEPT -+ /xf0/x9f/x8c/x80 CYCLONE -+ /xf0/x9f/x8c/x81 FOGGY -+ /xf0/x9f/x8c/x82 CLOSED UMBRELLA -+ /xf0/x9f/x8c/x83 NIGHT WITH STARS -+ /xf0/x9f/x8c/x84 SUNRISE OVER MOUNTAINS -+ /xf0/x9f/x8c/x85 SUNRISE -+ /xf0/x9f/x8c/x86 CITYSCAPE AT DUSK -+ /xf0/x9f/x8c/x87 SUNSET OVER BUILDINGS -+ /xf0/x9f/x8c/x88 RAINBOW -+ /xf0/x9f/x8c/x89 BRIDGE AT NIGHT -+ /xf0/x9f/x8c/x8a WATER WAVE -+ /xf0/x9f/x8c/x8b VOLCANO -+ /xf0/x9f/x8c/x8c MILKY WAY -+ /xf0/x9f/x8c/x8d EARTH GLOBE EUROPE-AFRICA -+ /xf0/x9f/x8c/x8e EARTH GLOBE AMERICAS -+ /xf0/x9f/x8c/x8f EARTH GLOBE ASIA-AUSTRALIA -+ /xf0/x9f/x8c/x90 GLOBE WITH MERIDIANS -+ /xf0/x9f/x8c/x91 NEW MOON SYMBOL -+ /xf0/x9f/x8c/x92 WAXING CRESCENT MOON SYMBOL -+ /xf0/x9f/x8c/x93 FIRST QUARTER MOON SYMBOL -+ /xf0/x9f/x8c/x94 WAXING GIBBOUS MOON SYMBOL -+ /xf0/x9f/x8c/x95 FULL MOON SYMBOL -+ /xf0/x9f/x8c/x96 WANING GIBBOUS MOON SYMBOL -+ /xf0/x9f/x8c/x97 LAST QUARTER MOON SYMBOL -+ /xf0/x9f/x8c/x98 WANING CRESCENT MOON SYMBOL -+ /xf0/x9f/x8c/x99 CRESCENT MOON -+ /xf0/x9f/x8c/x9a NEW MOON WITH FACE -+ /xf0/x9f/x8c/x9b FIRST QUARTER MOON WITH FACE -+ /xf0/x9f/x8c/x9c LAST QUARTER MOON WITH FACE -+ /xf0/x9f/x8c/x9d FULL MOON WITH FACE -+ /xf0/x9f/x8c/x9e SUN WITH FACE -+ /xf0/x9f/x8c/x9f GLOWING STAR -+ /xf0/x9f/x8c/xa0 SHOOTING STAR -+ /xf0/x9f/x8c/xb0 CHESTNUT -+ /xf0/x9f/x8c/xb1 SEEDLING -+ /xf0/x9f/x8c/xb2 EVERGREEN TREE -+ /xf0/x9f/x8c/xb3 DECIDUOUS TREE -+ /xf0/x9f/x8c/xb4 PALM TREE -+ /xf0/x9f/x8c/xb5 CACTUS -+ /xf0/x9f/x8c/xb7 TULIP -+ /xf0/x9f/x8c/xb8 CHERRY BLOSSOM -+ /xf0/x9f/x8c/xb9 ROSE -+ /xf0/x9f/x8c/xba HIBISCUS -+ /xf0/x9f/x8c/xbb SUNFLOWER -+ /xf0/x9f/x8c/xbc BLOSSOM -+ /xf0/x9f/x8c/xbd EAR OF MAIZE -+ /xf0/x9f/x8c/xbe EAR OF RICE -+ /xf0/x9f/x8c/xbf HERB -+ /xf0/x9f/x8d/x80 FOUR LEAF CLOVER -+ /xf0/x9f/x8d/x81 MAPLE LEAF -+ /xf0/x9f/x8d/x82 FALLEN LEAF -+ /xf0/x9f/x8d/x83 LEAF FLUTTERING IN WIND -+ /xf0/x9f/x8d/x84 MUSHROOM -+ /xf0/x9f/x8d/x85 TOMATO -+ /xf0/x9f/x8d/x86 AUBERGINE -+ /xf0/x9f/x8d/x87 GRAPES -+ /xf0/x9f/x8d/x88 MELON -+ /xf0/x9f/x8d/x89 WATERMELON -+ /xf0/x9f/x8d/x8a TANGERINE -+ /xf0/x9f/x8d/x8b LEMON -+ /xf0/x9f/x8d/x8c BANANA -+ /xf0/x9f/x8d/x8d PINEAPPLE -+ /xf0/x9f/x8d/x8e RED APPLE -+ /xf0/x9f/x8d/x8f GREEN APPLE -+ /xf0/x9f/x8d/x90 PEAR -+ /xf0/x9f/x8d/x91 PEACH -+ /xf0/x9f/x8d/x92 CHERRIES -+ /xf0/x9f/x8d/x93 STRAWBERRY -+ /xf0/x9f/x8d/x94 HAMBURGER -+ /xf0/x9f/x8d/x95 SLICE OF PIZZA -+ /xf0/x9f/x8d/x96 MEAT ON BONE -+ /xf0/x9f/x8d/x97 POULTRY LEG -+ /xf0/x9f/x8d/x98 RICE CRACKER -+ /xf0/x9f/x8d/x99 RICE BALL -+ /xf0/x9f/x8d/x9a COOKED RICE -+ /xf0/x9f/x8d/x9b CURRY AND RICE -+ /xf0/x9f/x8d/x9c STEAMING BOWL -+ /xf0/x9f/x8d/x9d SPAGHETTI -+ /xf0/x9f/x8d/x9e BREAD -+ /xf0/x9f/x8d/x9f FRENCH FRIES -+ /xf0/x9f/x8d/xa0 ROASTED SWEET POTATO -+ /xf0/x9f/x8d/xa1 DANGO -+ /xf0/x9f/x8d/xa2 ODEN -+ /xf0/x9f/x8d/xa3 SUSHI -+ /xf0/x9f/x8d/xa4 FRIED SHRIMP -+ /xf0/x9f/x8d/xa5 FISH CAKE WITH SWIRL DESIGN -+ /xf0/x9f/x8d/xa6 SOFT ICE CREAM -+ /xf0/x9f/x8d/xa7 SHAVED ICE -+ /xf0/x9f/x8d/xa8 ICE CREAM -+ /xf0/x9f/x8d/xa9 DOUGHNUT -+ /xf0/x9f/x8d/xaa COOKIE -+ /xf0/x9f/x8d/xab CHOCOLATE BAR -+ /xf0/x9f/x8d/xac CANDY -+ /xf0/x9f/x8d/xad LOLLIPOP -+ /xf0/x9f/x8d/xae CUSTARD -+ /xf0/x9f/x8d/xaf HONEY POT -+ /xf0/x9f/x8d/xb0 SHORTCAKE -+ /xf0/x9f/x8d/xb1 BENTO BOX -+ /xf0/x9f/x8d/xb2 POT OF FOOD -+ /xf0/x9f/x8d/xb3 COOKING -+ /xf0/x9f/x8d/xb4 FORK AND KNIFE -+ /xf0/x9f/x8d/xb5 TEACUP WITHOUT HANDLE -+ /xf0/x9f/x8d/xb6 SAKE BOTTLE AND CUP -+ /xf0/x9f/x8d/xb7 WINE GLASS -+ /xf0/x9f/x8d/xb8 COCKTAIL GLASS -+ /xf0/x9f/x8d/xb9 TROPICAL DRINK -+ /xf0/x9f/x8d/xba BEER MUG -+ /xf0/x9f/x8d/xbb CLINKING BEER MUGS -+ /xf0/x9f/x8d/xbc BABY BOTTLE -+ /xf0/x9f/x8e/x80 RIBBON -+ /xf0/x9f/x8e/x81 WRAPPED PRESENT -+ /xf0/x9f/x8e/x82 BIRTHDAY CAKE -+ /xf0/x9f/x8e/x83 JACK-O-LANTERN -+ /xf0/x9f/x8e/x84 CHRISTMAS TREE -+ /xf0/x9f/x8e/x85 FATHER CHRISTMAS -+ /xf0/x9f/x8e/x86 FIREWORKS -+ /xf0/x9f/x8e/x87 FIREWORK SPARKLER -+ /xf0/x9f/x8e/x88 BALLOON -+ /xf0/x9f/x8e/x89 PARTY POPPER -+ /xf0/x9f/x8e/x8a CONFETTI BALL -+ /xf0/x9f/x8e/x8b TANABATA TREE -+ /xf0/x9f/x8e/x8c CROSSED FLAGS -+ /xf0/x9f/x8e/x8d PINE DECORATION -+ /xf0/x9f/x8e/x8e JAPANESE DOLLS -+ /xf0/x9f/x8e/x8f CARP STREAMER -+ /xf0/x9f/x8e/x90 WIND CHIME -+ /xf0/x9f/x8e/x91 MOON VIEWING CEREMONY -+ /xf0/x9f/x8e/x92 SCHOOL SATCHEL -+ /xf0/x9f/x8e/x93 GRADUATION CAP -+ /xf0/x9f/x8e/xa0 CAROUSEL HORSE -+ /xf0/x9f/x8e/xa1 FERRIS WHEEL -+ /xf0/x9f/x8e/xa2 ROLLER COASTER -+ /xf0/x9f/x8e/xa3 FISHING POLE AND FISH -+ /xf0/x9f/x8e/xa4 MICROPHONE -+ /xf0/x9f/x8e/xa5 MOVIE CAMERA -+ /xf0/x9f/x8e/xa6 CINEMA -+ /xf0/x9f/x8e/xa7 HEADPHONE -+ /xf0/x9f/x8e/xa8 ARTIST PALETTE -+ /xf0/x9f/x8e/xa9 TOP HAT -+ /xf0/x9f/x8e/xaa CIRCUS TENT -+ /xf0/x9f/x8e/xab TICKET -+ /xf0/x9f/x8e/xac CLAPPER BOARD -+ /xf0/x9f/x8e/xad PERFORMING ARTS -+ /xf0/x9f/x8e/xae VIDEO GAME -+ /xf0/x9f/x8e/xaf DIRECT HIT -+ /xf0/x9f/x8e/xb0 SLOT MACHINE -+ /xf0/x9f/x8e/xb1 BILLIARDS -+ /xf0/x9f/x8e/xb2 GAME DIE -+ /xf0/x9f/x8e/xb3 BOWLING -+ /xf0/x9f/x8e/xb4 FLOWER PLAYING CARDS -+ /xf0/x9f/x8e/xb5 MUSICAL NOTE -+ /xf0/x9f/x8e/xb6 MULTIPLE MUSICAL NOTES -+ /xf0/x9f/x8e/xb7 SAXOPHONE -+ /xf0/x9f/x8e/xb8 GUITAR -+ /xf0/x9f/x8e/xb9 MUSICAL KEYBOARD -+ /xf0/x9f/x8e/xba TRUMPET -+ /xf0/x9f/x8e/xbb VIOLIN -+ /xf0/x9f/x8e/xbc MUSICAL SCORE -+ /xf0/x9f/x8e/xbd RUNNING SHIRT WITH SASH -+ /xf0/x9f/x8e/xbe TENNIS RACQUET AND BALL -+ /xf0/x9f/x8e/xbf SKI AND SKI BOOT -+ /xf0/x9f/x8f/x80 BASKETBALL AND HOOP -+ /xf0/x9f/x8f/x81 CHEQUERED FLAG -+ /xf0/x9f/x8f/x82 SNOWBOARDER -+ /xf0/x9f/x8f/x83 RUNNER -+ /xf0/x9f/x8f/x84 SURFER -+ /xf0/x9f/x8f/x86 TROPHY -+ /xf0/x9f/x8f/x87 HORSE RACING -+ /xf0/x9f/x8f/x88 AMERICAN FOOTBALL -+ /xf0/x9f/x8f/x89 RUGBY FOOTBALL -+ /xf0/x9f/x8f/x8a SWIMMER -+ /xf0/x9f/x8f/xa0 HOUSE BUILDING -+ /xf0/x9f/x8f/xa1 HOUSE WITH GARDEN -+ /xf0/x9f/x8f/xa2 OFFICE BUILDING -+ /xf0/x9f/x8f/xa3 JAPANESE POST OFFICE -+ /xf0/x9f/x8f/xa4 EUROPEAN POST OFFICE -+ /xf0/x9f/x8f/xa5 HOSPITAL -+ /xf0/x9f/x8f/xa6 BANK -+ /xf0/x9f/x8f/xa7 AUTOMATED TELLER MACHINE -+ /xf0/x9f/x8f/xa8 HOTEL -+ /xf0/x9f/x8f/xa9 LOVE HOTEL -+ /xf0/x9f/x8f/xaa CONVENIENCE STORE -+ /xf0/x9f/x8f/xab SCHOOL -+ /xf0/x9f/x8f/xac DEPARTMENT STORE -+ /xf0/x9f/x8f/xad FACTORY -+ /xf0/x9f/x8f/xae IZAKAYA LANTERN -+ /xf0/x9f/x8f/xaf JAPANESE CASTLE -+ /xf0/x9f/x8f/xb0 EUROPEAN CASTLE -+ /xf0/x9f/x90/x80 RAT -+ /xf0/x9f/x90/x81 MOUSE -+ /xf0/x9f/x90/x82 OX -+ /xf0/x9f/x90/x83 WATER BUFFALO -+ /xf0/x9f/x90/x84 COW -+ /xf0/x9f/x90/x85 TIGER -+ /xf0/x9f/x90/x86 LEOPARD -+ /xf0/x9f/x90/x87 RABBIT -+ /xf0/x9f/x90/x88 CAT -+ /xf0/x9f/x90/x89 DRAGON -+ /xf0/x9f/x90/x8a CROCODILE -+ /xf0/x9f/x90/x8b WHALE -+ /xf0/x9f/x90/x8c SNAIL -+ /xf0/x9f/x90/x8d SNAKE -+ /xf0/x9f/x90/x8e HORSE -+ /xf0/x9f/x90/x8f RAM -+ /xf0/x9f/x90/x90 GOAT -+ /xf0/x9f/x90/x91 SHEEP -+ /xf0/x9f/x90/x92 MONKEY -+ /xf0/x9f/x90/x93 ROOSTER -+ /xf0/x9f/x90/x94 CHICKEN -+ /xf0/x9f/x90/x95 DOG -+ /xf0/x9f/x90/x96 PIG -+ /xf0/x9f/x90/x97 BOAR -+ /xf0/x9f/x90/x98 ELEPHANT -+ /xf0/x9f/x90/x99 OCTOPUS -+ /xf0/x9f/x90/x9a SPIRAL SHELL -+ /xf0/x9f/x90/x9b BUG -+ /xf0/x9f/x90/x9c ANT -+ /xf0/x9f/x90/x9d HONEYBEE -+ /xf0/x9f/x90/x9e LADY BEETLE -+ /xf0/x9f/x90/x9f FISH -+ /xf0/x9f/x90/xa0 TROPICAL FISH -+ /xf0/x9f/x90/xa1 BLOWFISH -+ /xf0/x9f/x90/xa2 TURTLE -+ /xf0/x9f/x90/xa3 HATCHING CHICK -+ /xf0/x9f/x90/xa4 BABY CHICK -+ /xf0/x9f/x90/xa5 FRONT-FACING BABY CHICK -+ /xf0/x9f/x90/xa6 BIRD -+ /xf0/x9f/x90/xa7 PENGUIN -+ /xf0/x9f/x90/xa8 KOALA -+ /xf0/x9f/x90/xa9 POODLE -+ /xf0/x9f/x90/xaa DROMEDARY CAMEL -+ /xf0/x9f/x90/xab BACTRIAN CAMEL -+ /xf0/x9f/x90/xac DOLPHIN -+ /xf0/x9f/x90/xad MOUSE FACE -+ /xf0/x9f/x90/xae COW FACE -+ /xf0/x9f/x90/xaf TIGER FACE -+ /xf0/x9f/x90/xb0 RABBIT FACE -+ /xf0/x9f/x90/xb1 CAT FACE -+ /xf0/x9f/x90/xb2 DRAGON FACE -+ /xf0/x9f/x90/xb3 SPOUTING WHALE -+ /xf0/x9f/x90/xb4 HORSE FACE -+ /xf0/x9f/x90/xb5 MONKEY FACE -+ /xf0/x9f/x90/xb6 DOG FACE -+ /xf0/x9f/x90/xb7 PIG FACE -+ /xf0/x9f/x90/xb8 FROG FACE -+ /xf0/x9f/x90/xb9 HAMSTER FACE -+ /xf0/x9f/x90/xba WOLF FACE -+ /xf0/x9f/x90/xbb BEAR FACE -+ /xf0/x9f/x90/xbc PANDA FACE -+ /xf0/x9f/x90/xbd PIG NOSE -+ /xf0/x9f/x90/xbe PAW PRINTS -+ /xf0/x9f/x91/x80 EYES -+ /xf0/x9f/x91/x82 EAR -+ /xf0/x9f/x91/x83 NOSE -+ /xf0/x9f/x91/x84 MOUTH -+ /xf0/x9f/x91/x85 TONGUE -+ /xf0/x9f/x91/x86 WHITE UP POINTING BACKHAND INDEX -+ /xf0/x9f/x91/x87 WHITE DOWN POINTING BACKHAND INDEX -+ /xf0/x9f/x91/x88 WHITE LEFT POINTING BACKHAND INDEX -+ /xf0/x9f/x91/x89 WHITE RIGHT POINTING BACKHAND INDEX -+ /xf0/x9f/x91/x8a FISTED HAND SIGN -+ /xf0/x9f/x91/x8b WAVING HAND SIGN -+ /xf0/x9f/x91/x8c OK HAND SIGN -+ /xf0/x9f/x91/x8d THUMBS UP SIGN -+ /xf0/x9f/x91/x8e THUMBS DOWN SIGN -+ /xf0/x9f/x91/x8f CLAPPING HANDS SIGN -+ /xf0/x9f/x91/x90 OPEN HANDS SIGN -+ /xf0/x9f/x91/x91 CROWN -+ /xf0/x9f/x91/x92 WOMANS HAT -+ /xf0/x9f/x91/x93 EYEGLASSES -+ /xf0/x9f/x91/x94 NECKTIE -+ /xf0/x9f/x91/x95 T-SHIRT -+ /xf0/x9f/x91/x96 JEANS -+ /xf0/x9f/x91/x97 DRESS -+ /xf0/x9f/x91/x98 KIMONO -+ /xf0/x9f/x91/x99 BIKINI -+ /xf0/x9f/x91/x9a WOMANS CLOTHES -+ /xf0/x9f/x91/x9b PURSE -+ /xf0/x9f/x91/x9c HANDBAG -+ /xf0/x9f/x91/x9d POUCH -+ /xf0/x9f/x91/x9e MANS SHOE -+ /xf0/x9f/x91/x9f ATHLETIC SHOE -+ /xf0/x9f/x91/xa0 HIGH-HEELED SHOE -+ /xf0/x9f/x91/xa1 WOMANS SANDAL -+ /xf0/x9f/x91/xa2 WOMANS BOOTS -+ /xf0/x9f/x91/xa3 FOOTPRINTS -+ /xf0/x9f/x91/xa4 BUST IN SILHOUETTE -+ /xf0/x9f/x91/xa5 BUSTS IN SILHOUETTE -+ /xf0/x9f/x91/xa6 BOY -+ /xf0/x9f/x91/xa7 GIRL -+ /xf0/x9f/x91/xa8 MAN -+ /xf0/x9f/x91/xa9 WOMAN -+ /xf0/x9f/x91/xaa FAMILY -+ /xf0/x9f/x91/xab MAN AND WOMAN HOLDING HANDS -+ /xf0/x9f/x91/xac TWO MEN HOLDING HANDS -+ /xf0/x9f/x91/xad TWO WOMEN HOLDING HANDS -+ /xf0/x9f/x91/xae POLICE OFFICER -+ /xf0/x9f/x91/xaf WOMAN WITH BUNNY EARS -+ /xf0/x9f/x91/xb0 BRIDE WITH VEIL -+ /xf0/x9f/x91/xb1 PERSON WITH BLOND HAIR -+ /xf0/x9f/x91/xb2 MAN WITH GUA PI MAO -+ /xf0/x9f/x91/xb3 MAN WITH TURBAN -+ /xf0/x9f/x91/xb4 OLDER MAN -+ /xf0/x9f/x91/xb5 OLDER WOMAN -+ /xf0/x9f/x91/xb6 BABY -+ /xf0/x9f/x91/xb7 CONSTRUCTION WORKER -+ /xf0/x9f/x91/xb8 PRINCESS -+ /xf0/x9f/x91/xb9 JAPANESE OGRE -+ /xf0/x9f/x91/xba JAPANESE GOBLIN -+ /xf0/x9f/x91/xbb GHOST -+ /xf0/x9f/x91/xbc BABY ANGEL -+ /xf0/x9f/x91/xbd EXTRATERRESTRIAL ALIEN -+ /xf0/x9f/x91/xbe ALIEN MONSTER -+ /xf0/x9f/x91/xbf IMP -+ /xf0/x9f/x92/x80 SKULL -+ /xf0/x9f/x92/x81 INFORMATION DESK PERSON -+ /xf0/x9f/x92/x82 GUARDSMAN -+ /xf0/x9f/x92/x83 DANCER -+ /xf0/x9f/x92/x84 LIPSTICK -+ /xf0/x9f/x92/x85 NAIL POLISH -+ /xf0/x9f/x92/x86 FACE MASSAGE -+ /xf0/x9f/x92/x87 HAIRCUT -+ /xf0/x9f/x92/x88 BARBER POLE -+ /xf0/x9f/x92/x89 SYRINGE -+ /xf0/x9f/x92/x8a PILL -+ /xf0/x9f/x92/x8b KISS MARK -+ /xf0/x9f/x92/x8c LOVE LETTER -+ /xf0/x9f/x92/x8d RING -+ /xf0/x9f/x92/x8e GEM STONE -+ /xf0/x9f/x92/x8f KISS -+ /xf0/x9f/x92/x90 BOUQUET -+ /xf0/x9f/x92/x91 COUPLE WITH HEART -+ /xf0/x9f/x92/x92 WEDDING -+ /xf0/x9f/x92/x93 BEATING HEART -+ /xf0/x9f/x92/x94 BROKEN HEART -+ /xf0/x9f/x92/x95 TWO HEARTS -+ /xf0/x9f/x92/x96 SPARKLING HEART -+ /xf0/x9f/x92/x97 GROWING HEART -+ /xf0/x9f/x92/x98 HEART WITH ARROW -+ /xf0/x9f/x92/x99 BLUE HEART -+ /xf0/x9f/x92/x9a GREEN HEART -+ /xf0/x9f/x92/x9b YELLOW HEART -+ /xf0/x9f/x92/x9c PURPLE HEART -+ /xf0/x9f/x92/x9d HEART WITH RIBBON -+ /xf0/x9f/x92/x9e REVOLVING HEARTS -+ /xf0/x9f/x92/x9f HEART DECORATION -+ /xf0/x9f/x92/xa0 DIAMOND SHAPE WITH A DOT INSIDE -+ /xf0/x9f/x92/xa1 ELECTRIC LIGHT BULB -+ /xf0/x9f/x92/xa2 ANGER SYMBOL -+ /xf0/x9f/x92/xa3 BOMB -+ /xf0/x9f/x92/xa4 SLEEPING SYMBOL -+ /xf0/x9f/x92/xa5 COLLISION SYMBOL -+ /xf0/x9f/x92/xa6 SPLASHING SWEAT SYMBOL -+ /xf0/x9f/x92/xa7 DROPLET -+ /xf0/x9f/x92/xa8 DASH SYMBOL -+ /xf0/x9f/x92/xa9 PILE OF POO -+ /xf0/x9f/x92/xaa FLEXED BICEPS -+ /xf0/x9f/x92/xab DIZZY SYMBOL -+ /xf0/x9f/x92/xac SPEECH BALLOON -+ /xf0/x9f/x92/xad THOUGHT BALLOON -+ /xf0/x9f/x92/xae WHITE FLOWER -+ /xf0/x9f/x92/xaf HUNDRED POINTS SYMBOL -+ /xf0/x9f/x92/xb0 MONEY BAG -+ /xf0/x9f/x92/xb1 CURRENCY EXCHANGE -+ /xf0/x9f/x92/xb2 HEAVY DOLLAR SIGN -+ /xf0/x9f/x92/xb3 CREDIT CARD -+ /xf0/x9f/x92/xb4 BANKNOTE WITH YEN SIGN -+ /xf0/x9f/x92/xb5 BANKNOTE WITH DOLLAR SIGN -+ /xf0/x9f/x92/xb6 BANKNOTE WITH EURO SIGN -+ /xf0/x9f/x92/xb7 BANKNOTE WITH POUND SIGN -+ /xf0/x9f/x92/xb8 MONEY WITH WINGS -+ /xf0/x9f/x92/xb9 CHART WITH UPWARDS TREND AND YEN SIGN -+ /xf0/x9f/x92/xba SEAT -+ /xf0/x9f/x92/xbb PERSONAL COMPUTER -+ /xf0/x9f/x92/xbc BRIEFCASE -+ /xf0/x9f/x92/xbd MINIDISC -+ /xf0/x9f/x92/xbe FLOPPY DISK -+ /xf0/x9f/x92/xbf OPTICAL DISC -+ /xf0/x9f/x93/x80 DVD -+ /xf0/x9f/x93/x81 FILE FOLDER -+ /xf0/x9f/x93/x82 OPEN FILE FOLDER -+ /xf0/x9f/x93/x83 PAGE WITH CURL -+ /xf0/x9f/x93/x84 PAGE FACING UP -+ /xf0/x9f/x93/x85 CALENDAR -+ /xf0/x9f/x93/x86 TEAR-OFF CALENDAR -+ /xf0/x9f/x93/x87 CARD INDEX -+ /xf0/x9f/x93/x88 CHART WITH UPWARDS TREND -+ /xf0/x9f/x93/x89 CHART WITH DOWNWARDS TREND -+ /xf0/x9f/x93/x8a BAR CHART -+ /xf0/x9f/x93/x8b CLIPBOARD -+ /xf0/x9f/x93/x8c PUSHPIN -+ /xf0/x9f/x93/x8d ROUND PUSHPIN -+ /xf0/x9f/x93/x8e PAPERCLIP -+ /xf0/x9f/x93/x8f STRAIGHT RULER -+ /xf0/x9f/x93/x90 TRIANGULAR RULER -+ /xf0/x9f/x93/x91 BOOKMARK TABS -+ /xf0/x9f/x93/x92 LEDGER -+ /xf0/x9f/x93/x93 NOTEBOOK -+ /xf0/x9f/x93/x94 NOTEBOOK WITH DECORATIVE COVER -+ /xf0/x9f/x93/x95 CLOSED BOOK -+ /xf0/x9f/x93/x96 OPEN BOOK -+ /xf0/x9f/x93/x97 GREEN BOOK -+ /xf0/x9f/x93/x98 BLUE BOOK -+ /xf0/x9f/x93/x99 ORANGE BOOK -+ /xf0/x9f/x93/x9a BOOKS -+ /xf0/x9f/x93/x9b NAME BADGE -+ /xf0/x9f/x93/x9c SCROLL -+ /xf0/x9f/x93/x9d MEMO -+ /xf0/x9f/x93/x9e TELEPHONE RECEIVER -+ /xf0/x9f/x93/x9f PAGER -+ /xf0/x9f/x93/xa0 FAX MACHINE -+ /xf0/x9f/x93/xa1 SATELLITE ANTENNA -+ /xf0/x9f/x93/xa2 PUBLIC ADDRESS LOUDSPEAKER -+ /xf0/x9f/x93/xa3 CHEERING MEGAPHONE -+ /xf0/x9f/x93/xa4 OUTBOX TRAY -+ /xf0/x9f/x93/xa5 INBOX TRAY -+ /xf0/x9f/x93/xa6 PACKAGE -+ /xf0/x9f/x93/xa7 E-MAIL SYMBOL -+ /xf0/x9f/x93/xa8 INCOMING ENVELOPE -+ /xf0/x9f/x93/xa9 ENVELOPE WITH DOWNWARDS ARROW ABOVE -+ /xf0/x9f/x93/xaa CLOSED MAILBOX WITH LOWERED FLAG -+ /xf0/x9f/x93/xab CLOSED MAILBOX WITH RAISED FLAG -+ /xf0/x9f/x93/xac OPEN MAILBOX WITH RAISED FLAG -+ /xf0/x9f/x93/xad OPEN MAILBOX WITH LOWERED FLAG -+ /xf0/x9f/x93/xae POSTBOX -+ /xf0/x9f/x93/xaf POSTAL HORN -+ /xf0/x9f/x93/xb0 NEWSPAPER -+ /xf0/x9f/x93/xb1 MOBILE PHONE -+ /xf0/x9f/x93/xb2 MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT -+ /xf0/x9f/x93/xb3 VIBRATION MODE -+ /xf0/x9f/x93/xb4 MOBILE PHONE OFF -+ /xf0/x9f/x93/xb5 NO MOBILE PHONES -+ /xf0/x9f/x93/xb6 ANTENNA WITH BARS -+ /xf0/x9f/x93/xb7 CAMERA -+ /xf0/x9f/x93/xb9 VIDEO CAMERA -+ /xf0/x9f/x93/xba TELEVISION -+ /xf0/x9f/x93/xbb RADIO -+ /xf0/x9f/x93/xbc VIDEOCASSETTE -+ /xf0/x9f/x94/x80 TWISTED RIGHTWARDS ARROWS -+ /xf0/x9f/x94/x81 CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS -+ /xf0/x9f/x94/x82 CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY -+ /xf0/x9f/x94/x83 CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS -+ /xf0/x9f/x94/x84 ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS -+ /xf0/x9f/x94/x85 LOW BRIGHTNESS SYMBOL -+ /xf0/x9f/x94/x86 HIGH BRIGHTNESS SYMBOL -+ /xf0/x9f/x94/x87 SPEAKER WITH CANCELLATION STROKE -+ /xf0/x9f/x94/x88 SPEAKER -+ /xf0/x9f/x94/x89 SPEAKER WITH ONE SOUND WAVE -+ /xf0/x9f/x94/x8a SPEAKER WITH THREE SOUND WAVES -+ /xf0/x9f/x94/x8b BATTERY -+ /xf0/x9f/x94/x8c ELECTRIC PLUG -+ /xf0/x9f/x94/x8d LEFT-POINTING MAGNIFYING GLASS -+ /xf0/x9f/x94/x8e RIGHT-POINTING MAGNIFYING GLASS -+ /xf0/x9f/x94/x8f LOCK WITH INK PEN -+ /xf0/x9f/x94/x90 CLOSED LOCK WITH KEY -+ /xf0/x9f/x94/x91 KEY -+ /xf0/x9f/x94/x92 LOCK -+ /xf0/x9f/x94/x93 OPEN LOCK -+ /xf0/x9f/x94/x94 BELL -+ /xf0/x9f/x94/x95 BELL WITH CANCELLATION STROKE -+ /xf0/x9f/x94/x96 BOOKMARK -+ /xf0/x9f/x94/x97 LINK SYMBOL -+ /xf0/x9f/x94/x98 RADIO BUTTON -+ /xf0/x9f/x94/x99 BACK WITH LEFTWARDS ARROW ABOVE -+ /xf0/x9f/x94/x9a END WITH LEFTWARDS ARROW ABOVE -+ /xf0/x9f/x94/x9b ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE -+ /xf0/x9f/x94/x9c SOON WITH RIGHTWARDS ARROW ABOVE -+ /xf0/x9f/x94/x9d TOP WITH UPWARDS ARROW ABOVE -+ /xf0/x9f/x94/x9e NO ONE UNDER EIGHTEEN SYMBOL -+ /xf0/x9f/x94/x9f KEYCAP TEN -+ /xf0/x9f/x94/xa0 INPUT SYMBOL FOR LATIN CAPITAL LETTERS -+ /xf0/x9f/x94/xa1 INPUT SYMBOL FOR LATIN SMALL LETTERS -+ /xf0/x9f/x94/xa2 INPUT SYMBOL FOR NUMBERS -+ /xf0/x9f/x94/xa3 INPUT SYMBOL FOR SYMBOLS -+ /xf0/x9f/x94/xa4 INPUT SYMBOL FOR LATIN LETTERS -+ /xf0/x9f/x94/xa5 FIRE -+ /xf0/x9f/x94/xa6 ELECTRIC TORCH -+ /xf0/x9f/x94/xa7 WRENCH -+ /xf0/x9f/x94/xa8 HAMMER -+ /xf0/x9f/x94/xa9 NUT AND BOLT -+ /xf0/x9f/x94/xaa HOCHO -+ /xf0/x9f/x94/xab PISTOL -+ /xf0/x9f/x94/xac MICROSCOPE -+ /xf0/x9f/x94/xad TELESCOPE -+ /xf0/x9f/x94/xae CRYSTAL BALL -+ /xf0/x9f/x94/xaf SIX POINTED STAR WITH MIDDLE DOT -+ /xf0/x9f/x94/xb0 JAPANESE SYMBOL FOR BEGINNER -+ /xf0/x9f/x94/xb1 TRIDENT EMBLEM -+ /xf0/x9f/x94/xb2 BLACK SQUARE BUTTON -+ /xf0/x9f/x94/xb3 WHITE SQUARE BUTTON -+ /xf0/x9f/x94/xb4 LARGE RED CIRCLE -+ /xf0/x9f/x94/xb5 LARGE BLUE CIRCLE -+ /xf0/x9f/x94/xb6 LARGE ORANGE DIAMOND -+ /xf0/x9f/x94/xb7 LARGE BLUE DIAMOND -+ /xf0/x9f/x94/xb8 SMALL ORANGE DIAMOND -+ /xf0/x9f/x94/xb9 SMALL BLUE DIAMOND -+ /xf0/x9f/x94/xba UP-POINTING RED TRIANGLE -+ /xf0/x9f/x94/xbb DOWN-POINTING RED TRIANGLE -+ /xf0/x9f/x94/xbc UP-POINTING SMALL RED TRIANGLE -+ /xf0/x9f/x94/xbd DOWN-POINTING SMALL RED TRIANGLE -+ /xf0/x9f/x95/x90 CLOCK FACE ONE OCLOCK -+ /xf0/x9f/x95/x91 CLOCK FACE TWO OCLOCK -+ /xf0/x9f/x95/x92 CLOCK FACE THREE OCLOCK -+ /xf0/x9f/x95/x93 CLOCK FACE FOUR OCLOCK -+ /xf0/x9f/x95/x94 CLOCK FACE FIVE OCLOCK -+ /xf0/x9f/x95/x95 CLOCK FACE SIX OCLOCK -+ /xf0/x9f/x95/x96 CLOCK FACE SEVEN OCLOCK -+ /xf0/x9f/x95/x97 CLOCK FACE EIGHT OCLOCK -+ /xf0/x9f/x95/x98 CLOCK FACE NINE OCLOCK -+ /xf0/x9f/x95/x99 CLOCK FACE TEN OCLOCK -+ /xf0/x9f/x95/x9a CLOCK FACE ELEVEN OCLOCK -+ /xf0/x9f/x95/x9b CLOCK FACE TWELVE OCLOCK -+ /xf0/x9f/x95/x9c CLOCK FACE ONE-THIRTY -+ /xf0/x9f/x95/x9d CLOCK FACE TWO-THIRTY -+ /xf0/x9f/x95/x9e CLOCK FACE THREE-THIRTY -+ /xf0/x9f/x95/x9f CLOCK FACE FOUR-THIRTY -+ /xf0/x9f/x95/xa0 CLOCK FACE FIVE-THIRTY -+ /xf0/x9f/x95/xa1 CLOCK FACE SIX-THIRTY -+ /xf0/x9f/x95/xa2 CLOCK FACE SEVEN-THIRTY -+ /xf0/x9f/x95/xa3 CLOCK FACE EIGHT-THIRTY -+ /xf0/x9f/x95/xa4 CLOCK FACE NINE-THIRTY -+ /xf0/x9f/x95/xa5 CLOCK FACE TEN-THIRTY -+ /xf0/x9f/x95/xa6 CLOCK FACE ELEVEN-THIRTY -+ /xf0/x9f/x95/xa7 CLOCK FACE TWELVE-THIRTY -+ /xf0/x9f/x97/xbb MOUNT FUJI -+ /xf0/x9f/x97/xbc TOKYO TOWER -+ /xf0/x9f/x97/xbd STATUE OF LIBERTY -+ /xf0/x9f/x97/xbe SILHOUETTE OF JAPAN -+ /xf0/x9f/x97/xbf MOYAI -+ /xf0/x9f/x98/x81 GRINNING FACE WITH SMILING EYES -+ /xf0/x9f/x98/x82 FACE WITH TEARS OF JOY -+ /xf0/x9f/x98/x83 SMILING FACE WITH OPEN MOUTH -+ /xf0/x9f/x98/x84 SMILING FACE WITH OPEN MOUTH AND SMILING EYES -+ /xf0/x9f/x98/x85 SMILING FACE WITH OPEN MOUTH AND COLD SWEAT -+ /xf0/x9f/x98/x86 SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES -+ /xf0/x9f/x98/x87 SMILING FACE WITH HALO -+ /xf0/x9f/x98/x88 SMILING FACE WITH HORNS -+ /xf0/x9f/x98/x89 WINKING FACE -+ /xf0/x9f/x98/x8a SMILING FACE WITH SMILING EYES -+ /xf0/x9f/x98/x8b FACE SAVOURING DELICIOUS FOOD -+ /xf0/x9f/x98/x8c RELIEVED FACE -+ /xf0/x9f/x98/x8d SMILING FACE WITH HEART-SHAPED EYES -+ /xf0/x9f/x98/x8e SMILING FACE WITH SUNGLASSES -+ /xf0/x9f/x98/x8f SMIRKING FACE -+ /xf0/x9f/x98/x90 NEUTRAL FACE -+ /xf0/x9f/x98/x92 UNAMUSED FACE -+ /xf0/x9f/x98/x93 FACE WITH COLD SWEAT -+ /xf0/x9f/x98/x94 PENSIVE FACE -+ /xf0/x9f/x98/x96 CONFOUNDED FACE -+ /xf0/x9f/x98/x98 FACE THROWING A KISS -+ /xf0/x9f/x98/x9a KISSING FACE WITH CLOSED EYES -+ /xf0/x9f/x98/x9c FACE WITH STUCK-OUT TONGUE AND WINKING EYE -+ /xf0/x9f/x98/x9d FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES -+ /xf0/x9f/x98/x9e DISAPPOINTED FACE -+ /xf0/x9f/x98/xa0 ANGRY FACE -+ /xf0/x9f/x98/xa1 POUTING FACE -+ /xf0/x9f/x98/xa2 CRYING FACE -+ /xf0/x9f/x98/xa3 PERSEVERING FACE -+ /xf0/x9f/x98/xa4 FACE WITH LOOK OF TRIUMPH -+ /xf0/x9f/x98/xa5 DISAPPOINTED BUT RELIEVED FACE -+ /xf0/x9f/x98/xa8 FEARFUL FACE -+ /xf0/x9f/x98/xa9 WEARY FACE -+ /xf0/x9f/x98/xaa SLEEPY FACE -+ /xf0/x9f/x98/xab TIRED FACE -+ /xf0/x9f/x98/xad LOUDLY CRYING FACE -+ /xf0/x9f/x98/xb0 FACE WITH OPEN MOUTH AND COLD SWEAT -+ /xf0/x9f/x98/xb1 FACE SCREAMING IN FEAR -+ /xf0/x9f/x98/xb2 ASTONISHED FACE -+ /xf0/x9f/x98/xb3 FLUSHED FACE -+ /xf0/x9f/x98/xb5 DIZZY FACE -+ /xf0/x9f/x98/xb6 FACE WITHOUT MOUTH -+ /xf0/x9f/x98/xb7 FACE WITH MEDICAL MASK -+ /xf0/x9f/x98/xb8 GRINNING CAT FACE WITH SMILING EYES -+ /xf0/x9f/x98/xb9 CAT FACE WITH TEARS OF JOY -+ /xf0/x9f/x98/xba SMILING CAT FACE WITH OPEN MOUTH -+ /xf0/x9f/x98/xbb SMILING CAT FACE WITH HEART-SHAPED EYES -+ /xf0/x9f/x98/xbc CAT FACE WITH WRY SMILE -+ /xf0/x9f/x98/xbd KISSING CAT FACE WITH CLOSED EYES -+ /xf0/x9f/x98/xbe POUTING CAT FACE -+ /xf0/x9f/x98/xbf CRYING CAT FACE -+ /xf0/x9f/x99/x80 WEARY CAT FACE -+ /xf0/x9f/x99/x85 FACE WITH NO GOOD GESTURE -+ /xf0/x9f/x99/x86 FACE WITH OK GESTURE -+ /xf0/x9f/x99/x87 PERSON BOWING DEEPLY -+ /xf0/x9f/x99/x88 SEE-NO-EVIL MONKEY -+ /xf0/x9f/x99/x89 HEAR-NO-EVIL MONKEY -+ /xf0/x9f/x99/x8a SPEAK-NO-EVIL MONKEY -+ /xf0/x9f/x99/x8b HAPPY PERSON RAISING ONE HAND -+ /xf0/x9f/x99/x8c PERSON RAISING BOTH HANDS IN CELEBRATION -+ /xf0/x9f/x99/x8d PERSON FROWNING -+ /xf0/x9f/x99/x8e PERSON WITH POUTING FACE -+ /xf0/x9f/x99/x8f PERSON WITH FOLDED HANDS -+ /xf0/x9f/x9a/x80 ROCKET -+ /xf0/x9f/x9a/x81 HELICOPTER -+ /xf0/x9f/x9a/x82 STEAM LOCOMOTIVE -+ /xf0/x9f/x9a/x83 RAILWAY CAR -+ /xf0/x9f/x9a/x84 HIGH-SPEED TRAIN -+ /xf0/x9f/x9a/x85 HIGH-SPEED TRAIN WITH BULLET NOSE -+ /xf0/x9f/x9a/x86 TRAIN -+ /xf0/x9f/x9a/x87 METRO -+ /xf0/x9f/x9a/x88 LIGHT RAIL -+ /xf0/x9f/x9a/x89 STATION -+ /xf0/x9f/x9a/x8a TRAM -+ /xf0/x9f/x9a/x8b TRAM CAR -+ /xf0/x9f/x9a/x8c BUS -+ /xf0/x9f/x9a/x8d ONCOMING BUS -+ /xf0/x9f/x9a/x8e TROLLEYBUS -+ /xf0/x9f/x9a/x8f BUS STOP -+ /xf0/x9f/x9a/x90 MINIBUS -+ /xf0/x9f/x9a/x91 AMBULANCE -+ /xf0/x9f/x9a/x92 FIRE ENGINE -+ /xf0/x9f/x9a/x93 POLICE CAR -+ /xf0/x9f/x9a/x94 ONCOMING POLICE CAR -+ /xf0/x9f/x9a/x95 TAXI -+ /xf0/x9f/x9a/x96 ONCOMING TAXI -+ /xf0/x9f/x9a/x97 AUTOMOBILE -+ /xf0/x9f/x9a/x98 ONCOMING AUTOMOBILE -+ /xf0/x9f/x9a/x99 RECREATIONAL VEHICLE -+ /xf0/x9f/x9a/x9a DELIVERY TRUCK -+ /xf0/x9f/x9a/x9b ARTICULATED LORRY -+ /xf0/x9f/x9a/x9c TRACTOR -+ /xf0/x9f/x9a/x9d MONORAIL -+ /xf0/x9f/x9a/x9e MOUNTAIN RAILWAY -+ /xf0/x9f/x9a/x9f SUSPENSION RAILWAY -+ /xf0/x9f/x9a/xa0 MOUNTAIN CABLEWAY -+ /xf0/x9f/x9a/xa1 AERIAL TRAMWAY -+ /xf0/x9f/x9a/xa2 SHIP -+ /xf0/x9f/x9a/xa3 ROWBOAT -+ /xf0/x9f/x9a/xa4 SPEEDBOAT -+ /xf0/x9f/x9a/xa5 HORIZONTAL TRAFFIC LIGHT -+ /xf0/x9f/x9a/xa6 VERTICAL TRAFFIC LIGHT -+ /xf0/x9f/x9a/xa7 CONSTRUCTION SIGN -+ /xf0/x9f/x9a/xa8 POLICE CARS REVOLVING LIGHT -+ /xf0/x9f/x9a/xa9 TRIANGULAR FLAG ON POST -+ /xf0/x9f/x9a/xaa DOOR -+ /xf0/x9f/x9a/xab NO ENTRY SIGN -+ /xf0/x9f/x9a/xac SMOKING SYMBOL -+ /xf0/x9f/x9a/xad NO SMOKING SYMBOL -+ /xf0/x9f/x9a/xae PUT LITTER IN ITS PLACE SYMBOL -+ /xf0/x9f/x9a/xaf DO NOT LITTER SYMBOL -+ /xf0/x9f/x9a/xb0 POTABLE WATER SYMBOL -+ /xf0/x9f/x9a/xb1 NON-POTABLE WATER SYMBOL -+ /xf0/x9f/x9a/xb2 BICYCLE -+ /xf0/x9f/x9a/xb3 NO BICYCLES -+ /xf0/x9f/x9a/xb4 BICYCLIST -+ /xf0/x9f/x9a/xb5 MOUNTAIN BICYCLIST -+ /xf0/x9f/x9a/xb6 PEDESTRIAN -+ /xf0/x9f/x9a/xb7 NO PEDESTRIANS -+ /xf0/x9f/x9a/xb8 CHILDREN CROSSING -+ /xf0/x9f/x9a/xb9 MENS SYMBOL -+ /xf0/x9f/x9a/xba WOMENS SYMBOL -+ /xf0/x9f/x9a/xbb RESTROOM -+ /xf0/x9f/x9a/xbc BABY SYMBOL -+ /xf0/x9f/x9a/xbd TOILET -+ /xf0/x9f/x9a/xbe WATER CLOSET -+ /xf0/x9f/x9a/xbf SHOWER -+ /xf0/x9f/x9b/x80 BATH -+ /xf0/x9f/x9b/x81 BATHTUB -+ /xf0/x9f/x9b/x82 PASSPORT CONTROL -+ /xf0/x9f/x9b/x83 CUSTOMS -+ /xf0/x9f/x9b/x84 BAGGAGE CLAIM -+ /xf0/x9f/x9b/x85 LEFT LUGGAGE -+ /xf0/x9f/x9c/x80 ALCHEMICAL SYMBOL FOR QUINTESSENCE -+ /xf0/x9f/x9c/x81 ALCHEMICAL SYMBOL FOR AIR -+ /xf0/x9f/x9c/x82 ALCHEMICAL SYMBOL FOR FIRE -+ /xf0/x9f/x9c/x83 ALCHEMICAL SYMBOL FOR EARTH -+ /xf0/x9f/x9c/x84 ALCHEMICAL SYMBOL FOR WATER -+ /xf0/x9f/x9c/x85 ALCHEMICAL SYMBOL FOR AQUAFORTIS -+ /xf0/x9f/x9c/x86 ALCHEMICAL SYMBOL FOR AQUA REGIA -+ /xf0/x9f/x9c/x87 ALCHEMICAL SYMBOL FOR AQUA REGIA-2 -+ /xf0/x9f/x9c/x88 ALCHEMICAL SYMBOL FOR AQUA VITAE -+ /xf0/x9f/x9c/x89 ALCHEMICAL SYMBOL FOR AQUA VITAE-2 -+ /xf0/x9f/x9c/x8a ALCHEMICAL SYMBOL FOR VINEGAR -+ /xf0/x9f/x9c/x8b ALCHEMICAL SYMBOL FOR VINEGAR-2 -+ /xf0/x9f/x9c/x8c ALCHEMICAL SYMBOL FOR VINEGAR-3 -+ /xf0/x9f/x9c/x8d ALCHEMICAL SYMBOL FOR SULFUR -+ /xf0/x9f/x9c/x8e ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR -+ /xf0/x9f/x9c/x8f ALCHEMICAL SYMBOL FOR BLACK SULFUR -+ /xf0/x9f/x9c/x90 ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE -+ /xf0/x9f/x9c/x91 ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2 -+ /xf0/x9f/x9c/x92 ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3 -+ /xf0/x9f/x9c/x93 ALCHEMICAL SYMBOL FOR CINNABAR -+ /xf0/x9f/x9c/x94 ALCHEMICAL SYMBOL FOR SALT -+ /xf0/x9f/x9c/x95 ALCHEMICAL SYMBOL FOR NITRE -+ /xf0/x9f/x9c/x96 ALCHEMICAL SYMBOL FOR VITRIOL -+ /xf0/x9f/x9c/x97 ALCHEMICAL SYMBOL FOR VITRIOL-2 -+ /xf0/x9f/x9c/x98 ALCHEMICAL SYMBOL FOR ROCK SALT -+ /xf0/x9f/x9c/x99 ALCHEMICAL SYMBOL FOR ROCK SALT-2 -+ /xf0/x9f/x9c/x9a ALCHEMICAL SYMBOL FOR GOLD -+ /xf0/x9f/x9c/x9b ALCHEMICAL SYMBOL FOR SILVER -+ /xf0/x9f/x9c/x9c ALCHEMICAL SYMBOL FOR IRON ORE -+ /xf0/x9f/x9c/x9d ALCHEMICAL SYMBOL FOR IRON ORE-2 -+ /xf0/x9f/x9c/x9e ALCHEMICAL SYMBOL FOR CROCUS OF IRON -+ /xf0/x9f/x9c/x9f ALCHEMICAL SYMBOL FOR REGULUS OF IRON -+ /xf0/x9f/x9c/xa0 ALCHEMICAL SYMBOL FOR COPPER ORE -+ /xf0/x9f/x9c/xa1 ALCHEMICAL SYMBOL FOR IRON-COPPER ORE -+ /xf0/x9f/x9c/xa2 ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER -+ /xf0/x9f/x9c/xa3 ALCHEMICAL SYMBOL FOR CROCUS OF COPPER -+ /xf0/x9f/x9c/xa4 ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2 -+ /xf0/x9f/x9c/xa5 ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE -+ /xf0/x9f/x9c/xa6 ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE -+ /xf0/x9f/x9c/xa7 ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER -+ /xf0/x9f/x9c/xa8 ALCHEMICAL SYMBOL FOR VERDIGRIS -+ /xf0/x9f/x9c/xa9 ALCHEMICAL SYMBOL FOR TIN ORE -+ /xf0/x9f/x9c/xaa ALCHEMICAL SYMBOL FOR LEAD ORE -+ /xf0/x9f/x9c/xab ALCHEMICAL SYMBOL FOR ANTIMONY ORE -+ /xf0/x9f/x9c/xac ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY -+ /xf0/x9f/x9c/xad ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY -+ /xf0/x9f/x9c/xae ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY -+ /xf0/x9f/x9c/xaf ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY -+ /xf0/x9f/x9c/xb0 ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY -+ /xf0/x9f/x9c/xb1 ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2 -+ /xf0/x9f/x9c/xb2 ALCHEMICAL SYMBOL FOR REGULUS -+ /xf0/x9f/x9c/xb3 ALCHEMICAL SYMBOL FOR REGULUS-2 -+ /xf0/x9f/x9c/xb4 ALCHEMICAL SYMBOL FOR REGULUS-3 -+ /xf0/x9f/x9c/xb5 ALCHEMICAL SYMBOL FOR REGULUS-4 -+ /xf0/x9f/x9c/xb6 ALCHEMICAL SYMBOL FOR ALKALI -+ /xf0/x9f/x9c/xb7 ALCHEMICAL SYMBOL FOR ALKALI-2 -+ /xf0/x9f/x9c/xb8 ALCHEMICAL SYMBOL FOR MARCASITE -+ /xf0/x9f/x9c/xb9 ALCHEMICAL SYMBOL FOR SAL-AMMONIAC -+ /xf0/x9f/x9c/xba ALCHEMICAL SYMBOL FOR ARSENIC -+ /xf0/x9f/x9c/xbb ALCHEMICAL SYMBOL FOR REALGAR -+ /xf0/x9f/x9c/xbc ALCHEMICAL SYMBOL FOR REALGAR-2 -+ /xf0/x9f/x9c/xbd ALCHEMICAL SYMBOL FOR AURIPIGMENT -+ /xf0/x9f/x9c/xbe ALCHEMICAL SYMBOL FOR BISMUTH ORE -+ /xf0/x9f/x9c/xbf ALCHEMICAL SYMBOL FOR TARTAR -+ /xf0/x9f/x9d/x80 ALCHEMICAL SYMBOL FOR TARTAR-2 -+ /xf0/x9f/x9d/x81 ALCHEMICAL SYMBOL FOR QUICK LIME -+ /xf0/x9f/x9d/x82 ALCHEMICAL SYMBOL FOR BORAX -+ /xf0/x9f/x9d/x83 ALCHEMICAL SYMBOL FOR BORAX-2 -+ /xf0/x9f/x9d/x84 ALCHEMICAL SYMBOL FOR BORAX-3 -+ /xf0/x9f/x9d/x85 ALCHEMICAL SYMBOL FOR ALUM -+ /xf0/x9f/x9d/x86 ALCHEMICAL SYMBOL FOR OIL -+ /xf0/x9f/x9d/x87 ALCHEMICAL SYMBOL FOR SPIRIT -+ /xf0/x9f/x9d/x88 ALCHEMICAL SYMBOL FOR TINCTURE -+ /xf0/x9f/x9d/x89 ALCHEMICAL SYMBOL FOR GUM -+ /xf0/x9f/x9d/x8a ALCHEMICAL SYMBOL FOR WAX -+ /xf0/x9f/x9d/x8b ALCHEMICAL SYMBOL FOR POWDER -+ /xf0/x9f/x9d/x8c ALCHEMICAL SYMBOL FOR CALX -+ /xf0/x9f/x9c/xb7 ALCHEMICAL SYMBOL FOR ALKALI-2 -+ /xf0/x9f/x9c/xb8 ALCHEMICAL SYMBOL FOR MARCASITE -+ /xf0/x9f/x9c/xb9 ALCHEMICAL SYMBOL FOR SAL-AMMONIAC -+ /xf0/x9f/x9c/xba ALCHEMICAL SYMBOL FOR ARSENIC -+ /xf0/x9f/x9c/xbb ALCHEMICAL SYMBOL FOR REALGAR -+ /xf0/x9f/x9c/xbc ALCHEMICAL SYMBOL FOR REALGAR-2 -+ /xf0/x9f/x9c/xbd ALCHEMICAL SYMBOL FOR AURIPIGMENT -+ /xf0/x9f/x9c/xbe ALCHEMICAL SYMBOL FOR BISMUTH ORE -+ /xf0/x9f/x9c/xbf ALCHEMICAL SYMBOL FOR TARTAR -+ /xf0/x9f/x9d/x80 ALCHEMICAL SYMBOL FOR TARTAR-2 -+ /xf0/x9f/x9d/x81 ALCHEMICAL SYMBOL FOR QUICK LIME -+ /xf0/x9f/x9d/x82 ALCHEMICAL SYMBOL FOR BORAX -+ /xf0/x9f/x9d/x83 ALCHEMICAL SYMBOL FOR BORAX-2 -+ /xf0/x9f/x9d/x84 ALCHEMICAL SYMBOL FOR BORAX-3 -+ /xf0/x9f/x9d/x85 ALCHEMICAL SYMBOL FOR ALUM -+ /xf0/x9f/x9d/x86 ALCHEMICAL SYMBOL FOR OIL -+ /xf0/x9f/x9d/x87 ALCHEMICAL SYMBOL FOR SPIRIT -+ /xf0/x9f/x9d/x88 ALCHEMICAL SYMBOL FOR TINCTURE -+ /xf0/x9f/x9d/x89 ALCHEMICAL SYMBOL FOR GUM -+ /xf0/x9f/x9d/x8a ALCHEMICAL SYMBOL FOR WAX -+ /xf0/x9f/x9d/x8b ALCHEMICAL SYMBOL FOR POWDER -+ /xf0/x9f/x9d/x8c ALCHEMICAL SYMBOL FOR CALX -+ /xf0/x9f/x9d/x8d ALCHEMICAL SYMBOL FOR TUTTY -+ /xf0/x9f/x9d/x8e ALCHEMICAL SYMBOL FOR CAPUT MORTUUM -+ /xf0/x9f/x9d/x8f ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE -+ /xf0/x9f/x9d/x90 ALCHEMICAL SYMBOL FOR CADUCEUS -+ /xf0/x9f/x9d/x91 ALCHEMICAL SYMBOL FOR TRIDENT -+ /xf0/x9f/x9d/x92 ALCHEMICAL SYMBOL FOR STARRED TRIDENT -+ /xf0/x9f/x9d/x93 ALCHEMICAL SYMBOL FOR LODESTONE -+ /xf0/x9f/x9d/x94 ALCHEMICAL SYMBOL FOR SOAP -+ /xf0/x9f/x9d/x95 ALCHEMICAL SYMBOL FOR URINE -+ /xf0/x9f/x9d/x96 ALCHEMICAL SYMBOL FOR HORSE DUNG -+ /xf0/x9f/x9d/x97 ALCHEMICAL SYMBOL FOR ASHES -+ /xf0/x9f/x9d/x98 ALCHEMICAL SYMBOL FOR POT ASHES -+ /xf0/x9f/x9d/x99 ALCHEMICAL SYMBOL FOR BRICK -+ /xf0/x9f/x9d/x9a ALCHEMICAL SYMBOL FOR POWDERED BRICK -+ /xf0/x9f/x9d/x9b ALCHEMICAL SYMBOL FOR AMALGAM -+ /xf0/x9f/x9d/x9c ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM -+ /xf0/x9f/x9d/x9d ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2 -+ /xf0/x9f/x9d/x9e ALCHEMICAL SYMBOL FOR SUBLIMATION -+ /xf0/x9f/x9d/x9f ALCHEMICAL SYMBOL FOR PRECIPITATE -+ /xf0/x9f/x9d/xa0 ALCHEMICAL SYMBOL FOR DISTILL -+ /xf0/x9f/x9d/xa1 ALCHEMICAL SYMBOL FOR DISSOLVE -+ /xf0/x9f/x9d/xa2 ALCHEMICAL SYMBOL FOR DISSOLVE-2 -+ /xf0/x9f/x9d/xa3 ALCHEMICAL SYMBOL FOR PURIFY -+ /xf0/x9f/x9d/xa4 ALCHEMICAL SYMBOL FOR PUTREFACTION -+ /xf0/x9f/x9d/xa5 ALCHEMICAL SYMBOL FOR CRUCIBLE -+ /xf0/x9f/x9d/xa6 ALCHEMICAL SYMBOL FOR CRUCIBLE-2 -+ /xf0/x9f/x9d/xa7 ALCHEMICAL SYMBOL FOR CRUCIBLE-3 -+ /xf0/x9f/x9d/xa8 ALCHEMICAL SYMBOL FOR CRUCIBLE-4 -+ /xf0/x9f/x9d/xa9 ALCHEMICAL SYMBOL FOR CRUCIBLE-5 -+ /xf0/x9f/x9d/xaa ALCHEMICAL SYMBOL FOR ALEMBIC -+ /xf0/x9f/x9d/xab ALCHEMICAL SYMBOL FOR BATH OF MARY -+ /xf0/x9f/x9d/xac ALCHEMICAL SYMBOL FOR BATH OF VAPOURS -+ /xf0/x9f/x9d/xad ALCHEMICAL SYMBOL FOR RETORT -+ /xf0/x9f/x9d/xae ALCHEMICAL SYMBOL FOR HOUR -+ /xf0/x9f/x9d/xaf ALCHEMICAL SYMBOL FOR NIGHT -+ /xf0/x9f/x9d/xb0 ALCHEMICAL SYMBOL FOR DAY-NIGHT -+ /xf0/x9f/x9d/xb1 ALCHEMICAL SYMBOL FOR MONTH -+ /xf0/x9f/x9d/xb2 ALCHEMICAL SYMBOL FOR HALF DRAM -+ /xf0/x9f/x9d/xb3 ALCHEMICAL SYMBOL FOR HALF OUNCE - .. /xf0/xa0/x80/x80 - .. /xf0/xa0/x81/x80 - .. /xf0/xa0/x82/x80 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/ar_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/ar_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/ar_IN -@@ -52,7 +52,7 @@ LC_MONETARY - % for IBM Class for Unicode. - % - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3;2 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/as_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/as_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/as_IN -@@ -51,7 +51,7 @@ END LC_NUMERIC - %%%%%%%%%%%%% - LC_MONETARY - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3;2 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/bn_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/bn_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/bn_IN -@@ -53,7 +53,7 @@ LC_MONETARY - % for IBM Class for Unicode. - % - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 2;3 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/en_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/en_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/en_IN -@@ -52,7 +52,7 @@ LC_MONETARY - % for IBM Class for Unicode. - % - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3;2 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/gu_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/gu_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/gu_IN -@@ -71,7 +71,7 @@ LC_MONETARY - % for IBM Class for Unicode/Java - % - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/hi_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/hi_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/hi_IN -@@ -69,7 +69,7 @@ LC_MONETARY - % for IBM Class for Unicode/Java - % - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/kn_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/kn_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/kn_IN -@@ -71,8 +71,7 @@ LC_MONETARY - % for IBM Class for Unicode/Java - % - int_curr_symbol "" --% *** Change this to reflect Kannada , in Dev it is RA with VS U attached --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/kok_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/kok_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/kok_IN -@@ -49,7 +49,7 @@ LC_MONETARY - % for IBM Class for Unicode. - % - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/ks_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/ks_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/ks_IN -@@ -57,7 +57,7 @@ LC_MONETARY - % for IBM Class for Unicode. - % - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/ml_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/ml_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/ml_IN -@@ -69,7 +69,7 @@ LC_MONETARY - % for IBM Class for Unicode. - % - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3;2 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/mr_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/mr_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/mr_IN -@@ -70,7 +70,7 @@ LC_MONETARY - % for IBM Class for Unicode. - % - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/or_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/or_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/or_IN -@@ -607,7 +607,7 @@ END LC_NUMERIC - %%%%%%%%%%%%% - LC_MONETARY - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3;2 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/pa_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/pa_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/pa_IN -@@ -66,7 +66,7 @@ END LC_COLLATE - LC_MONETARY - % This is the POSIX Locale definition the LC_MONETARY category. - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/sa_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/sa_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/sa_IN -@@ -52,7 +52,7 @@ LC_MONETARY - % for IBM Class for Unicode/Java - % - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/sd_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/sd_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/sd_IN -@@ -57,7 +57,7 @@ LC_MONETARY - % for IBM Class for Unicode. - % - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/ta_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/ta_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/ta_IN -@@ -74,7 +74,7 @@ LC_MONETARY - % for IBM Class for Unicode. - % - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3;2 -Index: glibc-2.12-2-gc4ccff1/localedata/locales/te_IN -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/localedata/locales/te_IN -+++ glibc-2.12-2-gc4ccff1/localedata/locales/te_IN -@@ -73,7 +73,7 @@ LC_MONETARY - % for IBM Class for Unicode. - % - int_curr_symbol "" --currency_symbol "" -+currency_symbol "" - mon_decimal_point "" - mon_thousands_sep "" - mon_grouping 3;2 diff --git a/src/patches/glibc/glibc-rh694386.patch b/src/patches/glibc/glibc-rh694386.patch deleted file mode 100644 index 3932eb88ec..0000000000 --- a/src/patches/glibc/glibc-rh694386.patch +++ /dev/null @@ -1,86 +0,0 @@ -2011-03-28 Andreas Schwab - - * sysdeps/powerpc/powerpc32/power4/strncmp.S: Don't read past - differing bytes. - * sysdeps/powerpc/powerpc64/power4/strncmp.S: Likewise. - -diff --git a/sysdeps/powerpc/powerpc32/power4/strncmp.S b/sysdeps/powerpc/powerpc32/power4/strncmp.S -index fc0835e..f5d47af 100644 ---- a/sysdeps/powerpc/powerpc32/power4/strncmp.S -+++ b/sysdeps/powerpc/powerpc32/power4/strncmp.S -@@ -139,30 +139,31 @@ L(u1): - bdz L(u4) - cmpw rWORD1, rWORD2 - beq- cr1, L(u4) -+ bne- L(u4) - lbzu rWORD3, 1(rSTR1) - lbzu rWORD4, 1(rSTR2) -- bne- L(u4) - cmpwi cr1, rWORD3, 0 - bdz L(u3) - cmpw rWORD3, rWORD4 - beq- cr1, L(u3) -+ bne- L(u3) - lbzu rWORD1, 1(rSTR1) - lbzu rWORD2, 1(rSTR2) -- bne- L(u3) - cmpwi cr1, rWORD1, 0 - bdz L(u4) - cmpw rWORD1, rWORD2 - beq- cr1, L(u4) -+ bne- L(u4) - lbzu rWORD3, 1(rSTR1) - lbzu rWORD4, 1(rSTR2) -- bne- L(u4) - cmpwi cr1, rWORD3, 0 - bdz L(u3) - cmpw rWORD3, rWORD4 - beq- cr1, L(u3) -+ bne- L(u3) - lbzu rWORD1, 1(rSTR1) - lbzu rWORD2, 1(rSTR2) -- beq+ L(u1) -+ b L(u1) - - L(u3): sub rRTN, rWORD3, rWORD4 - blr -diff --git a/sysdeps/powerpc/powerpc64/power4/strncmp.S b/sysdeps/powerpc/powerpc64/power4/strncmp.S -index 7a1665d..94ae85b 100644 ---- a/sysdeps/powerpc/powerpc64/power4/strncmp.S -+++ b/sysdeps/powerpc/powerpc64/power4/strncmp.S -@@ -143,30 +143,31 @@ L(u1): - bdz L(u4) - cmpd rWORD1, rWORD2 - beq- cr1, L(u4) -+ bne- L(u4) - lbzu rWORD3, 1(rSTR1) - lbzu rWORD4, 1(rSTR2) -- bne- L(u4) - cmpdi cr1, rWORD3, 0 - bdz L(u3) - cmpd rWORD3, rWORD4 - beq- cr1, L(u3) -+ bne- L(u3) - lbzu rWORD1, 1(rSTR1) - lbzu rWORD2, 1(rSTR2) -- bne- L(u3) - cmpdi cr1, rWORD1, 0 - bdz L(u4) - cmpd rWORD1, rWORD2 - beq- cr1, L(u4) -+ bne- L(u4) - lbzu rWORD3, 1(rSTR1) - lbzu rWORD4, 1(rSTR2) -- bne- L(u4) - cmpdi cr1, rWORD3, 0 - bdz L(u3) - cmpd rWORD3, rWORD4 - beq- cr1, L(u3) -+ bne- L(u3) - lbzu rWORD1, 1(rSTR1) - lbzu rWORD2, 1(rSTR2) -- beq+ L(u1) -+ b L(u1) - - L(u3): sub rRTN, rWORD3, rWORD4 - blr diff --git a/src/patches/glibc/glibc-rh695595.patch b/src/patches/glibc/glibc-rh695595.patch deleted file mode 100644 index 0e6c72b169..0000000000 --- a/src/patches/glibc/glibc-rh695595.patch +++ /dev/null @@ -1,17 +0,0 @@ -2010-11-11 H.J. Lu - - * sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features): - Support Intel processor model 6 and model 0x2c. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/init-arch.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c -@@ -81,6 +81,7 @@ __init_cpu_features (void) - case 0x1e: - case 0x1f: - case 0x25: -+ case 0x2c: - case 0x2e: - case 0x2f: - /* Rep string instructions are fast on Intel Core i3, i5 diff --git a/src/patches/glibc/glibc-rh695963.patch b/src/patches/glibc/glibc-rh695963.patch deleted file mode 100644 index e8053dc3fd..0000000000 --- a/src/patches/glibc/glibc-rh695963.patch +++ /dev/null @@ -1,1284 +0,0 @@ -2010-08-27 Ulrich Drepper - - * sysdeps/x86_64/multiarch/strlen-no-bsf.S: Move to .text.slow section. - - * sysdeps/x86_64/strlen.S: Minimal code improvement. - -2010-08-26 H.J. Lu - - * sysdeps/x86_64/strlen.S: Unroll the loop. - * sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add - strlen-sse2 strlen-sse2-bsf. - * sysdeps/x86_64/multiarch/strlen.S ((strlen): Return - __strlen_no_bsf if bit_Slow_BSF is set. - (__strlen_sse42): Removed. - * sysdeps/x86_64/multiarch/strlen-no-bsf.S: New file. - * sysdeps/x86_64/multiarch/strlen-sse4.S: New file. - -2010-08-25 H.J. Lu - - * sysdeps/i386/i686/multiarch/Makefile (sysdep_routines): Add - strlen-sse2 strlen-sse2-bsf. - * sysdeps/i386/i686/multiarch/strlen.S (strlen): Return - __strlen_sse2_bsf if bit_Slow_BSF is unset. - (__strlen_sse2): Removed. - * sysdeps/i386/i686/multiarch/strlen-sse2-bsf.S: New file. - * sysdeps/i386/i686/multiarch/strlen-sse2.S: New file. - * sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features): Set - bit_Slow_BSF for Atom. - * sysdeps/x86_64/multiarch/init-arch.h (bit_Slow_BSF): Define. - (index_Slow_BSF): Define. - (HAS_SLOW_BSF): Define. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/i386/i686/multiarch/Makefile -+++ glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/Makefile -@@ -9,7 +9,8 @@ sysdep_routines += bzero-sse2 memset-sse - memmove-ssse3-rep bcopy-ssse3 bcopy-ssse3-rep \ - memset-sse2-rep bzero-sse2-rep strcmp-ssse3 \ - strcmp-sse4 strncmp-c strncmp-ssse3 strncmp-sse4 \ -- memcmp-ssse3 memcmp-sse4 strcasestr-nonascii -+ memcmp-ssse3 memcmp-sse4 strcasestr-nonascii \ -+ strlen-sse2 strlen-sse2-bsf - ifeq (yes,$(config-cflags-sse4)) - sysdep_routines += strcspn-c strpbrk-c strspn-c strstr-c strcasestr-c - CFLAGS-strcspn-c.c += -msse4 -Index: glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strlen-sse2-bsf.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strlen-sse2-bsf.S -@@ -0,0 +1,127 @@ -+/* strlen with SSE2 and BSF -+ Copyright (C) 2010 Free Software Foundation, Inc. -+ Contributed by Intel Corporation. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#if defined SHARED && !defined NOT_IN_libc -+ -+#include -+#include "asm-syntax.h" -+ -+#define CFI_PUSH(REG) \ -+ cfi_adjust_cfa_offset (4); \ -+ cfi_rel_offset (REG, 0) -+ -+#define CFI_POP(REG) \ -+ cfi_adjust_cfa_offset (-4); \ -+ cfi_restore (REG) -+ -+#define PUSH(REG) pushl REG; CFI_PUSH (REG) -+#define POP(REG) popl REG; CFI_POP (REG) -+#define PARMS 4 + 8 /* Preserve ESI and EDI. */ -+#define STR PARMS -+#define ENTRANCE PUSH (%esi); PUSH (%edi); cfi_remember_state -+#define RETURN POP (%edi); POP (%esi); ret; \ -+ cfi_restore_state; cfi_remember_state -+ -+ .text -+ENTRY ( __strlen_sse2_bsf) -+ ENTRANCE -+ mov STR(%esp), %edi -+ xor %eax, %eax -+ mov %edi, %ecx -+ and $0x3f, %ecx -+ pxor %xmm0, %xmm0 -+ cmp $0x30, %ecx -+ ja L(next) -+ movdqu (%edi), %xmm1 -+ pcmpeqb %xmm1, %xmm0 -+ pmovmskb %xmm0, %edx -+ test %edx, %edx -+ jnz L(exit_less16) -+ mov %edi, %eax -+ and $-16, %eax -+ jmp L(align16_start) -+L(next): -+ -+ mov %edi, %eax -+ and $-16, %eax -+ pcmpeqb (%eax), %xmm0 -+ mov $-1, %esi -+ sub %eax, %ecx -+ shl %cl, %esi -+ pmovmskb %xmm0, %edx -+ and %esi, %edx -+ jnz L(exit) -+L(align16_start): -+ pxor %xmm0, %xmm0 -+ pxor %xmm1, %xmm1 -+ pxor %xmm2, %xmm2 -+ pxor %xmm3, %xmm3 -+ .p2align 4 -+L(align16_loop): -+ pcmpeqb 16(%eax), %xmm0 -+ pmovmskb %xmm0, %edx -+ test %edx, %edx -+ jnz L(exit16) -+ -+ pcmpeqb 32(%eax), %xmm1 -+ pmovmskb %xmm1, %edx -+ test %edx, %edx -+ jnz L(exit32) -+ -+ pcmpeqb 48(%eax), %xmm2 -+ pmovmskb %xmm2, %edx -+ test %edx, %edx -+ jnz L(exit48) -+ -+ pcmpeqb 64(%eax), %xmm3 -+ pmovmskb %xmm3, %edx -+ lea 64(%eax), %eax -+ test %edx, %edx -+ jz L(align16_loop) -+L(exit): -+ sub %edi, %eax -+L(exit_less16): -+ bsf %edx, %edx -+ add %edx, %eax -+ RETURN -+L(exit16): -+ sub %edi, %eax -+ bsf %edx, %edx -+ add %edx, %eax -+ add $16, %eax -+ RETURN -+L(exit32): -+ sub %edi, %eax -+ bsf %edx, %edx -+ add %edx, %eax -+ add $32, %eax -+ RETURN -+L(exit48): -+ sub %edi, %eax -+ bsf %edx, %edx -+ add %edx, %eax -+ add $48, %eax -+ POP (%edi) -+ POP (%esi) -+ ret -+ -+END ( __strlen_sse2_bsf) -+ -+#endif -Index: glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strlen-sse2.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strlen-sse2.S -@@ -0,0 +1,347 @@ -+/* strlen with SSE2 -+ Copyright (C) 2010 Free Software Foundation, Inc. -+ Contributed by Intel Corporation. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#if defined SHARED && !defined NOT_IN_libc -+ -+#include -+#include "asm-syntax.h" -+ -+#define CFI_PUSH(REG) \ -+ cfi_adjust_cfa_offset (4); \ -+ cfi_rel_offset (REG, 0) -+ -+#define CFI_POP(REG) \ -+ cfi_adjust_cfa_offset (-4); \ -+ cfi_restore (REG) -+ -+#define PUSH(REG) pushl REG; CFI_PUSH (REG) -+#define POP(REG) popl REG; CFI_POP (REG) -+#define PARMS 4 -+#define STR PARMS -+#define ENTRANCE -+#define RETURN ret -+ -+ .text -+ENTRY (__strlen_sse2) -+ ENTRANCE -+ mov STR(%esp), %edx -+ xor %eax, %eax -+ cmpb $0, (%edx) -+ jz L(exit_tail0) -+ cmpb $0, 1(%edx) -+ jz L(exit_tail1) -+ cmpb $0, 2(%edx) -+ jz L(exit_tail2) -+ cmpb $0, 3(%edx) -+ jz L(exit_tail3) -+ cmpb $0, 4(%edx) -+ jz L(exit_tail4) -+ cmpb $0, 5(%edx) -+ jz L(exit_tail5) -+ cmpb $0, 6(%edx) -+ jz L(exit_tail6) -+ cmpb $0, 7(%edx) -+ jz L(exit_tail7) -+ cmpb $0, 8(%edx) -+ jz L(exit_tail8) -+ cmpb $0, 9(%edx) -+ jz L(exit_tail9) -+ cmpb $0, 10(%edx) -+ jz L(exit_tail10) -+ cmpb $0, 11(%edx) -+ jz L(exit_tail11) -+ cmpb $0, 12(%edx) -+ jz L(exit_tail12) -+ cmpb $0, 13(%edx) -+ jz L(exit_tail13) -+ cmpb $0, 14(%edx) -+ jz L(exit_tail14) -+ cmpb $0, 15(%edx) -+ jz L(exit_tail15) -+ pxor %xmm0, %xmm0 -+ mov %edx, %eax -+ mov %edx, %ecx -+ and $-16, %eax -+ add $16, %ecx -+ add $16, %eax -+ -+ pcmpeqb (%eax), %xmm0 -+ pmovmskb %xmm0, %edx -+ pxor %xmm1, %xmm1 -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ pcmpeqb (%eax), %xmm1 -+ pmovmskb %xmm1, %edx -+ pxor %xmm2, %xmm2 -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ -+ pcmpeqb (%eax), %xmm2 -+ pmovmskb %xmm2, %edx -+ pxor %xmm3, %xmm3 -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ pcmpeqb (%eax), %xmm3 -+ pmovmskb %xmm3, %edx -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ pcmpeqb (%eax), %xmm0 -+ pmovmskb %xmm0, %edx -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ pcmpeqb (%eax), %xmm1 -+ pmovmskb %xmm1, %edx -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ pcmpeqb (%eax), %xmm2 -+ pmovmskb %xmm2, %edx -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ pcmpeqb (%eax), %xmm3 -+ pmovmskb %xmm3, %edx -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ pcmpeqb (%eax), %xmm0 -+ pmovmskb %xmm0, %edx -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ pcmpeqb (%eax), %xmm1 -+ pmovmskb %xmm1, %edx -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ pcmpeqb (%eax), %xmm2 -+ pmovmskb %xmm2, %edx -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ pcmpeqb (%eax), %xmm3 -+ pmovmskb %xmm3, %edx -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ pcmpeqb (%eax), %xmm0 -+ pmovmskb %xmm0, %edx -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ pcmpeqb (%eax), %xmm1 -+ pmovmskb %xmm1, %edx -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ pcmpeqb (%eax), %xmm2 -+ pmovmskb %xmm2, %edx -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ pcmpeqb (%eax), %xmm3 -+ pmovmskb %xmm3, %edx -+ test %edx, %edx -+ lea 16(%eax), %eax -+ jnz L(exit) -+ -+ and $-0x40, %eax -+ PUSH (%esi) -+ PUSH (%edi) -+ PUSH (%ebx) -+ PUSH (%ebp) -+ xor %ebp, %ebp -+L(aligned_64): -+ pcmpeqb (%eax), %xmm0 -+ pcmpeqb 16(%eax), %xmm1 -+ pcmpeqb 32(%eax), %xmm2 -+ pcmpeqb 48(%eax), %xmm3 -+ pmovmskb %xmm0, %edx -+ pmovmskb %xmm1, %esi -+ pmovmskb %xmm2, %edi -+ pmovmskb %xmm3, %ebx -+ or %edx, %ebp -+ or %esi, %ebp -+ or %edi, %ebp -+ or %ebx, %ebp -+ lea 64(%eax), %eax -+ jz L(aligned_64) -+L(48leave): -+ test %edx, %edx -+ jnz L(aligned_64_exit_16) -+ test %esi, %esi -+ jnz L(aligned_64_exit_32) -+ test %edi, %edi -+ jnz L(aligned_64_exit_48) -+ mov %ebx, %edx -+ lea (%eax), %eax -+ jmp L(aligned_64_exit) -+L(aligned_64_exit_48): -+ lea -16(%eax), %eax -+ mov %edi, %edx -+ jmp L(aligned_64_exit) -+L(aligned_64_exit_32): -+ lea -32(%eax), %eax -+ mov %esi, %edx -+ jmp L(aligned_64_exit) -+L(aligned_64_exit_16): -+ lea -48(%eax), %eax -+L(aligned_64_exit): -+ POP (%ebp) -+ POP (%ebx) -+ POP (%edi) -+ POP (%esi) -+L(exit): -+ sub %ecx, %eax -+ test %dl, %dl -+ jz L(exit_high) -+ test $0x01, %dl -+ jnz L(exit_tail0) -+ -+ test $0x02, %dl -+ jnz L(exit_tail1) -+ -+ test $0x04, %dl -+ jnz L(exit_tail2) -+ -+ test $0x08, %dl -+ jnz L(exit_tail3) -+ -+ test $0x10, %dl -+ jnz L(exit_tail4) -+ -+ test $0x20, %dl -+ jnz L(exit_tail5) -+ -+ test $0x40, %dl -+ jnz L(exit_tail6) -+ add $7, %eax -+L(exit_tail0): -+ RETURN -+ -+L(exit_high): -+ add $8, %eax -+ test $0x01, %dh -+ jnz L(exit_tail0) -+ -+ test $0x02, %dh -+ jnz L(exit_tail1) -+ -+ test $0x04, %dh -+ jnz L(exit_tail2) -+ -+ test $0x08, %dh -+ jnz L(exit_tail3) -+ -+ test $0x10, %dh -+ jnz L(exit_tail4) -+ -+ test $0x20, %dh -+ jnz L(exit_tail5) -+ -+ test $0x40, %dh -+ jnz L(exit_tail6) -+ add $7, %eax -+ RETURN -+ -+ .p2align 4 -+L(exit_tail1): -+ add $1, %eax -+ RETURN -+ -+L(exit_tail2): -+ add $2, %eax -+ RETURN -+ -+L(exit_tail3): -+ add $3, %eax -+ RETURN -+ -+L(exit_tail4): -+ add $4, %eax -+ RETURN -+ -+L(exit_tail5): -+ add $5, %eax -+ RETURN -+ -+L(exit_tail6): -+ add $6, %eax -+ RETURN -+ -+L(exit_tail7): -+ add $7, %eax -+ RETURN -+ -+L(exit_tail8): -+ add $8, %eax -+ RETURN -+ -+L(exit_tail9): -+ add $9, %eax -+ RETURN -+ -+L(exit_tail10): -+ add $10, %eax -+ RETURN -+ -+L(exit_tail11): -+ add $11, %eax -+ RETURN -+ -+L(exit_tail12): -+ add $12, %eax -+ RETURN -+ -+L(exit_tail13): -+ add $13, %eax -+ RETURN -+ -+L(exit_tail14): -+ add $14, %eax -+ RETURN -+ -+L(exit_tail15): -+ add $15, %eax -+ ret -+ -+END (__strlen_sse2) -+ -+#endif -Index: glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strlen.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/i386/i686/multiarch/strlen.S -+++ glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strlen.S -@@ -48,6 +48,9 @@ ENTRY(strlen) - 1: leal __strlen_ia32@GOTOFF(%ebx), %eax - testl $bit_SSE2, CPUID_OFFSET+index_SSE2+__cpu_features@GOTOFF(%ebx) - jz 2f -+ leal __strlen_sse2_bsf@GOTOFF(%ebx), %eax -+ testl $bit_Slow_BSF, FEATURE_OFFSET+index_Slow_BSF+__cpu_features@GOTOFF(%ebx) -+ jz 2f - leal __strlen_sse2@GOTOFF(%ebx), %eax - 2: popl %ebx - cfi_adjust_cfa_offset (-4); -@@ -55,84 +58,6 @@ ENTRY(strlen) - ret - END(strlen) - --#define CFI_POP(REG) \ -- cfi_adjust_cfa_offset (-4); \ -- cfi_restore (REG) -- --#define RETURN popl %esi; CFI_POP (esi); ret -- -- .text --ENTRY (__strlen_sse2) --/* -- * This implementation uses SSE instructions to compare up to 16 bytes -- * at a time looking for the end of string (null char). -- */ -- pushl %esi -- cfi_adjust_cfa_offset (4) -- cfi_rel_offset (%esi, 0) -- mov 8(%esp), %eax -- mov %eax, %ecx -- pxor %xmm0, %xmm0 /* 16 null chars */ -- mov %eax, %esi -- and $15, %ecx -- jz 1f /* string is 16 byte aligned */ -- -- /* -- * Unaligned case. Round down to 16-byte boundary before comparing -- * 16 bytes for a null char. The code then compensates for any extra chars -- * preceding the start of the string. -- */ -- and $-16, %esi -- -- pcmpeqb (%esi), %xmm0 -- lea 16(%eax), %esi -- pmovmskb %xmm0, %edx -- -- shr %cl, %edx /* Compensate for bytes preceding the string */ -- test %edx, %edx -- jnz 2f -- sub %ecx, %esi /* no null, adjust to next 16-byte boundary */ -- pxor %xmm0, %xmm0 /* clear xmm0, may have been changed... */ -- -- .p2align 4 --1: /* 16 byte aligned */ -- pcmpeqb (%esi), %xmm0 /* look for null bytes */ -- pmovmskb %xmm0, %edx /* move each byte mask of %xmm0 to edx */ -- -- add $16, %esi /* prepare to search next 16 bytes */ -- test %edx, %edx /* if no null byte, %edx must be 0 */ -- jnz 2f /* found a null */ -- -- pcmpeqb (%esi), %xmm0 -- pmovmskb %xmm0, %edx -- add $16, %esi -- test %edx, %edx -- jnz 2f -- -- pcmpeqb (%esi), %xmm0 -- pmovmskb %xmm0, %edx -- add $16, %esi -- test %edx, %edx -- jnz 2f -- -- pcmpeqb (%esi), %xmm0 -- pmovmskb %xmm0, %edx -- add $16, %esi -- test %edx, %edx -- jz 1b -- --2: -- neg %eax -- lea -16(%eax, %esi), %eax /* calculate exact offset */ -- bsf %edx, %ecx /* Least significant 1 bit is index of null */ -- add %ecx, %eax -- popl %esi -- cfi_adjust_cfa_offset (-4) -- cfi_restore (%esi) -- ret -- --END (__strlen_sse2) -- - # undef ENTRY - # define ENTRY(name) \ - .type __strlen_ia32, @function; \ ---- a/sysdeps/x86_64/multiarch/Makefile 2012-03-01 10:43:30.060487726 -0700 -+++ b/sysdeps/x86_64/multiarch/Makefile 2012-03-01 10:45:57.894692115 -0700 -@@ -7,7 +7,7 @@ ifeq ($(subdir),string) - sysdep_routines += stpncpy-c strncpy-c strcmp-ssse3 strncmp-ssse3 \ - strend-sse4 memcmp-sse4 \ - strcasestr-nonascii strcasecmp_l-ssse3 \ -- strncase_l-ssse3 \ -+ strncase_l-ssse3 strlen-sse4 strlen-no-bsf \ - memset-x86-64 - ifeq (yes,$(config-cflags-sse4)) - sysdep_routines += strcspn-c strpbrk-c strspn-c strstr-c strcasestr-c -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/init-arch.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c -@@ -77,6 +77,12 @@ __init_cpu_features (void) - model += extended_model; - switch (model) - { -+ case 0x1c: -+ case 0x26: -+ /* BSF is slow on Atom. */ -+ __cpu_features.feature[index_Slow_BSF] |= bit_Slow_BSF; -+ break; -+ - case 0x1a: - case 0x1e: - case 0x1f: ---- a/sysdeps/x86_64/multiarch/init-arch.h 2012-03-01 10:43:30.061487720 -0700 -+++ b/sysdeps/x86_64/multiarch/init-arch.h 2012-03-01 10:48:13.371963005 -0700 -@@ -17,6 +17,7 @@ - 02111-1307 USA. */ - - #define bit_Fast_Rep_String (1 << 0) -+#define bit_Slow_BSF (1 << 2) - #define bit_Prefer_SSE_for_memop (1 << 3) - - #ifdef __ASSEMBLER__ -@@ -34,6 +35,7 @@ - # define index_SSE4_2 COMMON_CPUID_INDEX_1*CPUID_SIZE+CPUID_ECX_OFFSET - - #define index_Fast_Rep_String FEATURE_INDEX_1*FEATURE_SIZE -+# define index_Slow_BSF FEATURE_INDEX_1*FEATURE_SIZE - # define index_Prefer_SSE_for_memop FEATURE_INDEX_1*FEATURE_SIZE - - #else /* __ASSEMBLER__ */ -@@ -105,11 +107,15 @@ extern const struct cpu_features *__get_ - # define HAS_FMA HAS_CPU_FEATURE (COMMON_CPUID_INDEX_1, ecx, 12) - - # define index_Fast_Rep_String FEATURE_INDEX_1 -+# define index_Slow_BSF FEATURE_INDEX_1 - # define index_Prefer_SSE_for_memop FEATURE_INDEX_1 - - #define HAS_ARCH_FEATURE(idx, bit) \ - ((__get_cpu_features ()->feature[idx] & (bit)) != 0) - -+#define HAS_SLOW_BSF \ -+ HAS_ARCH_FEATURE (index_Slow_BSF, bit_Slow_BSF) -+ - #define HAS_PREFER_SSE_FOR_MEMOP \ - HAS_ARCH_FEATURE (index_Prefer_SSE_for_memop, bit_Prefer_SSE_for_memop) - -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strlen-no-bsf.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strlen-no-bsf.S -@@ -0,0 +1,309 @@ -+/* strlen without BSF -+ Copyright (C) 2010 Free Software Foundation, Inc. -+ Contributed by Intel Corporation. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#if defined SHARED && !defined NOT_IN_libc -+ -+#include -+ -+ .section .text.slow,"ax",@progbits -+ENTRY (__strlen_no_bsf) -+ xor %eax, %eax -+ cmpb $0, (%rdi) -+ jz L(exit_tail0) -+ cmpb $0, 1(%rdi) -+ jz L(exit_tail1) -+ cmpb $0, 2(%rdi) -+ jz L(exit_tail2) -+ cmpb $0, 3(%rdi) -+ jz L(exit_tail3) -+ cmpb $0, 4(%rdi) -+ jz L(exit_tail4) -+ cmpb $0, 5(%rdi) -+ jz L(exit_tail5) -+ cmpb $0, 6(%rdi) -+ jz L(exit_tail6) -+ cmpb $0, 7(%rdi) -+ jz L(exit_tail7) -+ cmpb $0, 8(%rdi) -+ jz L(exit_tail8) -+ cmpb $0, 9(%rdi) -+ jz L(exit_tail9) -+ cmpb $0, 10(%rdi) -+ jz L(exit_tail10) -+ cmpb $0, 11(%rdi) -+ jz L(exit_tail11) -+ cmpb $0, 12(%rdi) -+ jz L(exit_tail12) -+ cmpb $0, 13(%rdi) -+ jz L(exit_tail13) -+ cmpb $0, 14(%rdi) -+ jz L(exit_tail14) -+ cmpb $0, 15(%rdi) -+ jz L(exit_tail15) -+ pxor %xmm0, %xmm0 -+ mov %rdi, %rcx -+ mov %rdi, %rax -+ and $-16, %rax -+ add $16, %rax -+ add $16, %rcx -+ -+ pcmpeqb (%rax), %xmm0 -+ pmovmskb %xmm0, %edx -+ pxor %xmm1, %xmm1 -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ pcmpeqb (%rax), %xmm1 -+ pmovmskb %xmm1, %edx -+ pxor %xmm2, %xmm2 -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ -+ pcmpeqb (%rax), %xmm2 -+ pmovmskb %xmm2, %edx -+ pxor %xmm3, %xmm3 -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ pcmpeqb (%rax), %xmm3 -+ pmovmskb %xmm3, %edx -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ pcmpeqb (%rax), %xmm0 -+ pmovmskb %xmm0, %edx -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ pcmpeqb (%rax), %xmm1 -+ pmovmskb %xmm1, %edx -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ pcmpeqb (%rax), %xmm2 -+ pmovmskb %xmm2, %edx -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ pcmpeqb (%rax), %xmm3 -+ pmovmskb %xmm3, %edx -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ pcmpeqb (%rax), %xmm0 -+ pmovmskb %xmm0, %edx -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ pcmpeqb (%rax), %xmm1 -+ pmovmskb %xmm1, %edx -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ pcmpeqb (%rax), %xmm2 -+ pmovmskb %xmm2, %edx -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ pcmpeqb (%rax), %xmm3 -+ pmovmskb %xmm3, %edx -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ pcmpeqb (%rax), %xmm0 -+ pmovmskb %xmm0, %edx -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ pcmpeqb (%rax), %xmm1 -+ pmovmskb %xmm1, %edx -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ pcmpeqb (%rax), %xmm2 -+ pmovmskb %xmm2, %edx -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ pcmpeqb (%rax), %xmm3 -+ pmovmskb %xmm3, %edx -+ test %edx, %edx -+ lea 16(%rax), %rax -+ jnz L(exit) -+ -+ and $-0x40, %rax -+ xor %r8d, %r8d -+L(aligned_64): -+ pcmpeqb (%rax), %xmm0 -+ pcmpeqb 16(%rax), %xmm1 -+ pcmpeqb 32(%rax), %xmm2 -+ pcmpeqb 48(%rax), %xmm3 -+ pmovmskb %xmm0, %edx -+ pmovmskb %xmm1, %esi -+ pmovmskb %xmm2, %edi -+ pmovmskb %xmm3, %r9d -+ or %edx, %r8d -+ or %esi, %r8d -+ or %edi, %r8d -+ or %r9d, %r8d -+ lea 64(%rax), %rax -+ jz L(aligned_64) -+ -+ test %edx, %edx -+ jnz L(aligned_64_exit_16) -+ test %esi, %esi -+ jnz L(aligned_64_exit_32) -+ test %edi, %edi -+ jnz L(aligned_64_exit_48) -+L(aligned_64_exit_64): -+ mov %r9d, %edx -+ jmp L(aligned_64_exit) -+L(aligned_64_exit_48): -+ lea -16(%rax), %rax -+ mov %edi, %edx -+ jmp L(aligned_64_exit) -+L(aligned_64_exit_32): -+ lea -32(%rax), %rax -+ mov %esi, %edx -+ jmp L(aligned_64_exit) -+L(aligned_64_exit_16): -+ lea -48(%rax), %rax -+L(aligned_64_exit): -+L(exit): -+ sub %rcx, %rax -+ test %dl, %dl -+ jz L(exit_high) -+ test $0x01, %dl -+ jnz L(exit_tail0) -+ -+ test $0x02, %dl -+ jnz L(exit_tail1) -+ -+ test $0x04, %dl -+ jnz L(exit_tail2) -+ -+ test $0x08, %dl -+ jnz L(exit_tail3) -+ -+ test $0x10, %dl -+ jnz L(exit_tail4) -+ -+ test $0x20, %dl -+ jnz L(exit_tail5) -+ -+ test $0x40, %dl -+ jnz L(exit_tail6) -+ add $7, %eax -+L(exit_tail0): -+ ret -+ -+L(exit_high): -+ add $8, %eax -+ test $0x01, %dh -+ jnz L(exit_tail0) -+ -+ test $0x02, %dh -+ jnz L(exit_tail1) -+ -+ test $0x04, %dh -+ jnz L(exit_tail2) -+ -+ test $0x08, %dh -+ jnz L(exit_tail3) -+ -+ test $0x10, %dh -+ jnz L(exit_tail4) -+ -+ test $0x20, %dh -+ jnz L(exit_tail5) -+ -+ test $0x40, %dh -+ jnz L(exit_tail6) -+ add $7, %eax -+ ret -+ .p2align 4 -+L(exit_tail1): -+ add $1, %eax -+ ret -+ -+L(exit_tail2): -+ add $2, %eax -+ ret -+ -+L(exit_tail3): -+ add $3, %eax -+ ret -+ -+L(exit_tail4): -+ add $4, %eax -+ ret -+ -+L(exit_tail5): -+ add $5, %eax -+ ret -+L(exit_tail6): -+ add $6, %eax -+ ret -+L(exit_tail7): -+ add $7, %eax -+ ret -+L(exit_tail8): -+ add $8, %eax -+ ret -+L(exit_tail9): -+ add $9, %eax -+ ret -+L(exit_tail10): -+ add $10, %eax -+ ret -+L(exit_tail11): -+ add $11, %eax -+ ret -+L(exit_tail12): -+ add $12, %eax -+ ret -+L(exit_tail13): -+ add $13, %eax -+ ret -+L(exit_tail14): -+ add $14, %eax -+ ret -+L(exit_tail15): -+ add $15, %eax -+ ret -+END (__strlen_no_bsf) -+ -+#endif -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strlen-sse4.S -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strlen-sse4.S -@@ -0,0 +1,85 @@ -+/* strlen with SSE4 -+ Copyright (C) 2009, 2010 Free Software Foundation, Inc. -+ Contributed by Ulrich Drepper . -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#if defined SHARED && !defined NOT_IN_libc -+ -+#include -+ -+ .section .text.sse4.2,"ax",@progbits -+ENTRY (__strlen_sse42) -+ pxor %xmm1, %xmm1 -+ movl %edi, %ecx -+ movq %rdi, %r8 -+ andq $~15, %rdi -+ xor %edi, %ecx -+ pcmpeqb (%rdi), %xmm1 -+ pmovmskb %xmm1, %edx -+ shrl %cl, %edx -+ shll %cl, %edx -+ andl %edx, %edx -+ jnz L(less16bytes) -+ pxor %xmm1, %xmm1 -+ -+ .p2align 4 -+L(more64bytes_loop): -+ pcmpistri $0x08, 16(%rdi), %xmm1 -+ jz L(more32bytes) -+ -+ pcmpistri $0x08, 32(%rdi), %xmm1 -+ jz L(more48bytes) -+ -+ pcmpistri $0x08, 48(%rdi), %xmm1 -+ jz L(more64bytes) -+ -+ add $64, %rdi -+ pcmpistri $0x08, (%rdi), %xmm1 -+ jnz L(more64bytes_loop) -+ leaq (%rdi,%rcx), %rax -+ subq %r8, %rax -+ ret -+ -+ .p2align 4 -+L(more32bytes): -+ leaq 16(%rdi,%rcx, 1), %rax -+ subq %r8, %rax -+ ret -+ -+ .p2align 4 -+L(more48bytes): -+ leaq 32(%rdi,%rcx, 1), %rax -+ subq %r8, %rax -+ ret -+ -+ .p2align 4 -+L(more64bytes): -+ leaq 48(%rdi,%rcx, 1), %rax -+ subq %r8, %rax -+ ret -+ -+ .p2align 4 -+L(less16bytes): -+ subq %r8, %rdi -+ bsfl %edx, %eax -+ addq %rdi, %rax -+ ret -+ -+END (__strlen_sse42) -+ -+#endif -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strlen.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/strlen.S -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strlen.S -@@ -36,74 +36,12 @@ ENTRY(strlen) - testl $bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip) - jz 2f - leaq __strlen_sse42(%rip), %rax --2: ret --END(strlen) -- -- -- .section .text.sse4.2,"ax",@progbits -- .align 16 -- .type __strlen_sse42, @function --__strlen_sse42: -- cfi_startproc -- CALL_MCOUNT -- pxor %xmm1, %xmm1 -- movl %edi, %ecx -- movq %rdi, %r8 -- andq $~15, %rdi -- xor %edi, %ecx -- pcmpeqb (%rdi), %xmm1 -- pmovmskb %xmm1, %edx -- shrl %cl, %edx -- shll %cl, %edx -- andl %edx, %edx -- jnz L(less16bytes) -- pxor %xmm1, %xmm1 -- -- .p2align 4 --L(more64bytes_loop): -- pcmpistri $0x08, 16(%rdi), %xmm1 -- jz L(more32bytes) -- -- pcmpistri $0x08, 32(%rdi), %xmm1 -- jz L(more48bytes) -- -- pcmpistri $0x08, 48(%rdi), %xmm1 -- jz L(more64bytes) -- -- add $64, %rdi -- pcmpistri $0x08, (%rdi), %xmm1 -- jnz L(more64bytes_loop) -- leaq (%rdi,%rcx), %rax -- subq %r8, %rax -- ret -- -- .p2align 4 --L(more32bytes): -- leaq 16(%rdi,%rcx, 1), %rax -- subq %r8, %rax -- ret -- -- .p2align 4 --L(more48bytes): -- leaq 32(%rdi,%rcx, 1), %rax -- subq %r8, %rax -- ret -- -- .p2align 4 --L(more64bytes): -- leaq 48(%rdi,%rcx, 1), %rax -- subq %r8, %rax - ret -- -- .p2align 4 --L(less16bytes): -- subq %r8, %rdi -- bsfl %edx, %eax -- addq %rdi, %rax -- ret -- cfi_endproc -- .size __strlen_sse42, .-__strlen_sse42 -- -+2: testl $bit_Slow_BSF, __cpu_features+FEATURE_OFFSET+index_Slow_BSF(%rip) -+ jz 3f -+ leaq __strlen_no_bsf(%rip), %rax -+3: ret -+END(strlen) - - # undef ENTRY - # define ENTRY(name) \ -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strlen.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/strlen.S -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strlen.S -@@ -23,29 +23,80 @@ - - .text - ENTRY(strlen) -- pxor %xmm2, %xmm2 -- movq %rdi, %rcx -- movq %rdi, %r8 -- andq $~15, %rdi -- movdqa %xmm2, %xmm1 -- pcmpeqb (%rdi), %xmm2 -- orl $0xffffffff, %esi -- subq %rdi, %rcx -- shll %cl, %esi -- pmovmskb %xmm2, %edx -- andl %esi, %edx -- jnz 1f -- --2: movdqa 16(%rdi), %xmm0 -- leaq 16(%rdi), %rdi -+ xor %rax, %rax -+ mov %edi, %ecx -+ and $0x3f, %ecx -+ pxor %xmm0, %xmm0 -+ cmp $0x30, %ecx -+ ja L(next) -+ movdqu (%rdi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %edx -- testl %edx, %edx -- jz 2b -+ test %edx, %edx -+ jnz L(exit_less16) -+ mov %rdi, %rax -+ and $-16, %rax -+ jmp L(align16_start) -+L(next): -+ mov %rdi, %rax -+ and $-16, %rax -+ pcmpeqb (%rax), %xmm0 -+ mov $-1, %esi -+ sub %rax, %rcx -+ shl %cl, %esi -+ pmovmskb %xmm0, %edx -+ and %esi, %edx -+ jnz L(exit) -+L(align16_start): -+ pxor %xmm0, %xmm0 -+ pxor %xmm1, %xmm1 -+ pxor %xmm2, %xmm2 -+ pxor %xmm3, %xmm3 -+ .p2align 4 -+L(align16_loop): -+ pcmpeqb 16(%rax), %xmm0 -+ pmovmskb %xmm0, %edx -+ test %edx, %edx -+ jnz L(exit16) - --1: subq %r8, %rdi -- bsfl %edx, %eax -- addq %rdi, %rax -+ pcmpeqb 32(%rax), %xmm1 -+ pmovmskb %xmm1, %edx -+ test %edx, %edx -+ jnz L(exit32) -+ -+ pcmpeqb 48(%rax), %xmm2 -+ pmovmskb %xmm2, %edx -+ test %edx, %edx -+ jnz L(exit48) -+ -+ pcmpeqb 64(%rax), %xmm3 -+ pmovmskb %xmm3, %edx -+ lea 64(%rax), %rax -+ test %edx, %edx -+ jz L(align16_loop) -+L(exit): -+ sub %rdi, %rax -+L(exit_less16): -+ bsf %rdx, %rdx -+ add %rdx, %rax -+ ret -+ .p2align 4 -+L(exit16): -+ sub %rdi, %rax -+ bsf %rdx, %rdx -+ lea 16(%rdx,%rax), %rax -+ ret -+ .p2align 4 -+L(exit32): -+ sub %rdi, %rax -+ bsf %rdx, %rdx -+ lea 32(%rdx,%rax), %rax -+ ret -+ .p2align 4 -+L(exit48): -+ sub %rdi, %rax -+ bsf %rdx, %rdx -+ lea 48(%rdx,%rax), %rax - ret - END(strlen) - libc_hidden_builtin_def (strlen) diff --git a/src/patches/glibc/glibc-rh696472.patch b/src/patches/glibc/glibc-rh696472.patch deleted file mode 100644 index 9d30d38e94..0000000000 --- a/src/patches/glibc/glibc-rh696472.patch +++ /dev/null @@ -1,36 +0,0 @@ -commit 3d29045b5e8329d97693eda8d98f1d1e60b99c8f -Author: H.J. Lu -Date: Fri Jun 3 07:01:25 2011 -0400 - - Assume Intel Core i3/i5/i7 processor if AVX is available - -2011-06-02 H.J. Lu - - * sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features): - Assume Intel Core i3/i5/i7 processor if AVX is available. - -diff --git a/sysdeps/x86_64/multiarch/init-arch.c b/sysdeps/x86_64/multiarch/init-arch.c -index 34ec2df..809d105 100644 ---- a/sysdeps/x86_64/multiarch/init-arch.c -+++ b/sysdeps/x86_64/multiarch/init-arch.c -@@ -74,6 +74,7 @@ __init_cpu_features (void) - } - else if (family == 0x06) - { -+ ecx = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx; - model += extended_model; - switch (model) - { -@@ -83,6 +84,12 @@ __init_cpu_features (void) - __cpu_features.feature[index_Slow_BSF] |= bit_Slow_BSF; - break; - -+ default: -+ /* Unknown family 0x06 processors. Assuming this is one -+ of Core i3/i5/i7 processors if AVX is available. */ -+ if ((ecx & bit_AVX) == 0) -+ break; -+ - case 0x1a: - case 0x1e: - case 0x1f: diff --git a/src/patches/glibc/glibc-rh697421.patch b/src/patches/glibc/glibc-rh697421.patch deleted file mode 100644 index 961c8053ae..0000000000 --- a/src/patches/glibc/glibc-rh697421.patch +++ /dev/null @@ -1,10 +0,0 @@ -diff -rup a/iconvdata/gconv-modules b/iconvdata/gconv-modules ---- a/iconvdata/gconv-modules 2010-05-04 05:27:23.000000000 -0600 -+++ b/iconvdata/gconv-modules 2012-01-26 10:58:24.181895489 -0700 -@@ -1954,3 +1954,6 @@ alias HPGREEK8// HP-GREEK8// - alias OSF10010004// HP-GREEK8// - module HP-GREEK8// INTERNAL HP-GREEK8 1 - module INTERNAL HP-GREEK8// HP-GREEK8 1 -+ -+alias ISO-10646-UCS-2// UNICODE// -+alias ISO-10646-UCS-2// ISO-10646/UTF8/ diff --git a/src/patches/glibc/glibc-rh699724.patch b/src/patches/glibc/glibc-rh699724.patch deleted file mode 100644 index d25ce84233..0000000000 --- a/src/patches/glibc/glibc-rh699724.patch +++ /dev/null @@ -1,188 +0,0 @@ -2011-02-23 Andreas Schwab - - [BZ #12509] - * elf/dl-load.c (_dl_map_object_from_fd): Free realname before - returning unsuccessfully. - * elf/Makefile ($(objpfx)noload-mem): New rule. - (noload-ENV): Define. - (tests): Add $(objpfx)noload-mem. - * elf/noload.c: Include . - (main): Call mtrace. Close all opened handles. - -2010-09-27 Andreas Schwab - - * include/link.h (struct link_map): Add l_free_initfini. - * elf/dl-deps.c (_dl_map_object_deps): Set it when assigning - l_initfini. - * elf/rtld.c (dl_main): Clear it on all objects loaded on startup. - * elf/dl-libc.c (free_mem): Free l_initfini if l_free_initfini is - set. - -Index: glibc-2.12-2-gc4ccff1/elf/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/Makefile -+++ glibc-2.12-2-gc4ccff1/elf/Makefile -@@ -211,7 +211,7 @@ endif - ifeq (yesyes,$(have-fpie)$(build-shared)) - tests: $(objpfx)tst-pie1.out - endif --tests: $(objpfx)tst-leaks1-mem -+tests: $(objpfx)tst-leaks1-mem $(objpfx)noload-mem - tlsmod17a-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 - tlsmod18a-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 - modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \ -@@ -664,6 +664,10 @@ $(objpfx)noload: $(objpfx)testobj1.so $( - LDFLAGS-noload = -rdynamic - $(objpfx)noload.out: $(objpfx)testobj5.so - -+$(objpfx)noload-mem: $(objpfx)noload.out -+ $(common-objpfx)malloc/mtrace $(objpfx)noload.mtrace > $@ -+noload-ENV = MALLOC_TRACE=$(objpfx)noload.mtrace -+ - LDFLAGS-nodelete = -rdynamic - LDFLAGS-nodelmod1.so = -Wl,--enable-new-dtags,-z,nodelete - LDFLAGS-nodelmod4.so = -Wl,--enable-new-dtags,-z,nodelete -Index: glibc-2.12-2-gc4ccff1/elf/dl-deps.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-deps.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-deps.c -@@ -478,6 +478,7 @@ _dl_map_object_deps (struct link_map *ma - nneeded * sizeof needed[0]); - atomic_write_barrier (); - l->l_initfini = l_initfini; -+ l->l_free_initfini = 1; - } - - /* If we have no auxiliary objects just go on to the next map. */ -@@ -662,6 +663,7 @@ Filters not supported with LD_TRACE_PREL - l_initfini[nlist] = NULL; - atomic_write_barrier (); - map->l_initfini = l_initfini; -+ map->l_free_initfini = 1; - if (l_reldeps != NULL) - { - atomic_write_barrier (); -Index: glibc-2.12-2-gc4ccff1/elf/dl-libc.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-libc.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-libc.c -@@ -250,5 +250,9 @@ libc_freeres_fn (free_mem) - if (! old->dont_free) - free (old); - } -+ -+ /* Free the initfini dependency list. */ -+ if (l->l_free_initfini) -+ free (l->l_initfini); - } - } -Index: glibc-2.12-2-gc4ccff1/elf/dl-load.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-load.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-load.c -@@ -907,6 +907,7 @@ _dl_map_object_from_fd (const char *name - { - /* We are not supposed to load the object unless it is already - loaded. So return now. */ -+ free (realname); - __close (fd); - return NULL; - } -@@ -925,6 +926,7 @@ _dl_map_object_from_fd (const char *name - _dl_zerofd = _dl_sysdep_open_zero_fill (); - if (_dl_zerofd == -1) - { -+ free (realname); - __close (fd); - _dl_signal_error (errno, NULL, NULL, - N_("cannot open zero fill device")); -Index: glibc-2.12-2-gc4ccff1/elf/noload.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/noload.c -+++ glibc-2.12-2-gc4ccff1/elf/noload.c -@@ -1,20 +1,28 @@ - #include - #include -+#include - - int - main (void) - { - int result = 0; -+ void *p; -+ -+ mtrace (); - - /* First try to load an object which is a dependency. This should - succeed. */ -- if (dlopen ("testobj1.so", RTLD_LAZY | RTLD_NOLOAD) == NULL) -+ p = dlopen ("testobj1.so", RTLD_LAZY | RTLD_NOLOAD); -+ if (p == NULL) - { - printf ("cannot open \"testobj1.so\": %s\n", dlerror ()); - result = 1; - } - else -- puts ("loading \"testobj1.so\" succeeded, OK"); -+ { -+ puts ("loading \"testobj1.so\" succeeded, OK"); -+ dlclose (p); -+ } - - /* Now try loading an object which is not already loaded. */ - if (dlopen ("testobj5.so", RTLD_LAZY | RTLD_NOLOAD) != NULL) -@@ -25,8 +33,6 @@ main (void) - else - { - /* Load the object and run the same test again. */ -- void *p; -- - puts ("\"testobj5.so\" wasn't loaded and RTLD_NOLOAD prevented it, OK"); - - p = dlopen ("testobj5.so", RTLD_LAZY); -@@ -41,13 +47,17 @@ main (void) - { - puts ("loading \"testobj5.so\" succeeded, OK"); - -- if (dlopen ("testobj5.so", RTLD_LAZY | RTLD_NOLOAD) == NULL) -+ void *q = dlopen ("testobj5.so", RTLD_LAZY | RTLD_NOLOAD); -+ if (q == NULL) - { - printf ("cannot open \"testobj5.so\": %s\n", dlerror ()); - result = 1; - } - else -- puts ("loading \"testobj5.so\" with RTLD_NOLOAD succeeded, OK"); -+ { -+ puts ("loading \"testobj5.so\" with RTLD_NOLOAD succeeded, OK"); -+ dlclose (q); -+ } - - if (dlclose (p) != 0) - { -Index: glibc-2.12-2-gc4ccff1/elf/rtld.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/rtld.c -+++ glibc-2.12-2-gc4ccff1/elf/rtld.c -@@ -2249,6 +2249,7 @@ ERROR: ld.so: object '%s' cannot be load - lnp->dont_free = 1; - lnp = lnp->next; - } -+ l->l_free_initfini = 0; - - if (l != &GL(dl_rtld_map)) - _dl_relocate_object (l, l->l_scope, GLRO(dl_lazy) ? RTLD_LAZY : 0, -Index: glibc-2.12-2-gc4ccff1/include/link.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/include/link.h -+++ glibc-2.12-2-gc4ccff1/include/link.h -@@ -192,6 +192,9 @@ struct link_map - during LD_TRACE_PRELINKING=1 - contains any DT_SYMBOLIC - libraries. */ -+ unsigned int l_free_initfini:1; /* Nonzero if l_initfini can be -+ freed, ie. not allocated with -+ the dummy malloc in ld.so. */ - - /* Collected information about own RPATH directories. */ - struct r_search_path_struct l_rpath_dirs; diff --git a/src/patches/glibc/glibc-rh700507.patch b/src/patches/glibc/glibc-rh700507.patch deleted file mode 100644 index 0660431db0..0000000000 --- a/src/patches/glibc/glibc-rh700507.patch +++ /dev/null @@ -1,26 +0,0 @@ -Index: glibc-2.12-2-gc4ccff1/nscd/nscd.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nscd/nscd.c -+++ glibc-2.12-2-gc4ccff1/nscd/nscd.c -@@ -260,10 +260,6 @@ main (int argc, char **argv) - /* In foreground mode we are not paranoid. */ - paranoia = 0; - -- /* Start the SELinux AVC. */ -- if (selinux_enabled) -- nscd_avc_init (); -- - signal (SIGINT, termination_handler); - signal (SIGQUIT, termination_handler); - signal (SIGTERM, termination_handler); -@@ -278,6 +274,10 @@ main (int argc, char **argv) - /* Init databases. */ - nscd_init (); - -+ /* Start the SELinux AVC. */ -+ if (selinux_enabled) -+ nscd_avc_init (); -+ - /* Handle incoming requests */ - start_threads (); - diff --git a/src/patches/glibc/glibc-rh703480.patch b/src/patches/glibc/glibc-rh703480.patch deleted file mode 100644 index 742a79a37a..0000000000 --- a/src/patches/glibc/glibc-rh703480.patch +++ /dev/null @@ -1,68 +0,0 @@ -2011-01-15 Ulrich Drepper - - [BZ #6812] - * nscd/hstcache.c (tryagain): Define. - (cache_addhst): Return tryagain not notfound for temporary errors. - (addhstbyX): Also set h_errno to TRY_AGAIN when memory allocation - failed. - -Index: glibc-2.12-2-gc4ccff1/nscd/hstcache.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nscd/hstcache.c -+++ glibc-2.12-2-gc4ccff1/nscd/hstcache.c -@@ -77,6 +77,20 @@ static const hst_response_header notfoun - }; - - -+/* This is the standard reply in case there are temporary problems. */ -+static const hst_response_header tryagain = -+{ -+ .version = NSCD_VERSION, -+ .found = 0, -+ .h_name_len = 0, -+ .h_aliases_cnt = 0, -+ .h_addrtype = -1, -+ .h_length = -1, -+ .h_addr_list_cnt = 0, -+ .error = TRY_AGAIN -+}; -+ -+ - static void - cache_addhst (struct database_dyn *db, int fd, request_header *req, - const void *key, struct hostent *hst, uid_t owner, -@@ -111,11 +125,15 @@ cache_addhst (struct database_dyn *db, i - else - { - /* We have no data. This means we send the standard reply for this -- case. */ -+ case. Possibly this is only temporary. */ - ssize_t total = sizeof (notfound); -+ assert (sizeof (notfound) == sizeof (tryagain)); -+ -+ const hst_response_header *resp = (errval == EAGAIN -+ ? &tryagain : ¬found); - - if (fd != -1 && -- TEMP_FAILURE_RETRY (send (fd, ¬found, total, -+ TEMP_FAILURE_RETRY (send (fd, resp, total, - MSG_NOSIGNAL)) != total) - all_written = false; - -@@ -135,7 +153,7 @@ cache_addhst (struct database_dyn *db, i - ? db->negtimeout : ttl); - - /* This is the reply. */ -- memcpy (&dataset->resp, ¬found, total); -+ memcpy (&dataset->resp, resp, total); - - /* Copy the key data. */ - memcpy (dataset->strdata, key, req->key_len); -@@ -490,6 +508,7 @@ addhstbyX (struct database_dyn *db, int - /* We set the error to indicate this is (possibly) a - temporary error and that it does not mean the entry - is not available at all. */ -+ h_errno = TRY_AGAIN; - errval = EAGAIN; - break; - } diff --git a/src/patches/glibc/glibc-rh703481.patch b/src/patches/glibc/glibc-rh703481.patch deleted file mode 100644 index fdde4b5de3..0000000000 --- a/src/patches/glibc/glibc-rh703481.patch +++ /dev/null @@ -1,875 +0,0 @@ -2011-02-05 Ulrich Drepper - - * nscd/nscd-client.h: Define MAX_TIMEOUT_VALUE. - (struct datahead): Reuse 32 bits of the alignment for a TTL field. - * nscd/aicache.c (addhstaiX): Return timeout of added value. - (readdhstai): Return value of addhstaiX call. - * nscd/grpcache.c (cache_addgr): Return timeout of added value. - (addgrbyX): Return value returned by cache_addgr. - (readdgrbyname): Return value returned by addgrbyX. - (readdgrbygid): Likewise. - * nscd/pwdcache.c (cache_addpw): Return timeout of added value. - (addpwbyX): Return value returned by cache_addpw. - (readdpwbyname): Return value returned by addhstbyX. - (readdpwbyuid): Likewise. - * nscd/servicescache.c (cache_addserv): Return timeout of added value. - (addservbyX): Return value returned by cache_addserv. - (readdservbyname): Return value returned by addservbyX: - (readdservbyport): Likewise. - * nscd/hstcache.c (cache_addhst): Return timeout of added value. - (addhstbyX): Return value returned by cache_addhst. - (readdhstbyname): Return value returned by addhstbyX. - (readdhstbyaddr): Likewise. - (readdhstbynamev6): Likewise. - (readdhstbyaddrv6): Likewise. - * nscd/initgrcache.c (addinitgroupsX): Return timeout of added value. - (readdinitgroups): Return value returned by addinitgroupsX. - * nscd/cache.c (readdfcts): Change return value of functions to time_t. - (prune_cache): Keep track of timeout value of re-added entries. - * nscd/connections.c (nscd_run_prune): Use MAX_TIMEOUT_VALUE. - * nscd/nscd.h: Adjust prototypes of readd* functions. - -Index: glibc-2.12-2-gc4ccff1/nscd/aicache.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nscd/aicache.c -+++ glibc-2.12-2-gc4ccff1/nscd/aicache.c -@@ -58,7 +58,7 @@ static const ai_response_header notfound - }; - - --static void -+static time_t - addhstaiX (struct database_dyn *db, int fd, request_header *req, - void *key, uid_t uid, struct hashentry *const he, - struct datahead *dh) -@@ -119,6 +119,7 @@ addhstaiX (struct database_dyn *db, int - ssize_t total = 0; - char *key_copy = NULL; - bool alloca_used = false; -+ time_t timeout = MAX_TIMEOUT_VALUE; - - while (!no_more) - { -@@ -388,8 +389,8 @@ addhstaiX (struct database_dyn *db, int - dataset->head.usable = true; - - /* Compute the timeout time. */ -- dataset->head.timeout = time (NULL) + (ttl == INT32_MAX -- ? db->postimeout : ttl); -+ dataset->head.ttl = ttl == INT32_MAX ? db->postimeout : ttl; -+ timeout = dataset->head.timeout = time (NULL) + dataset->head.ttl; - - dataset->resp.version = NSCD_VERSION; - dataset->resp.found = 1; -@@ -421,6 +422,7 @@ addhstaiX (struct database_dyn *db, int - timeout value. Note that the new record has been - allocated on the stack and need not be freed. */ - dh->timeout = dataset->head.timeout; -+ dh->ttl = dataset->head.ttl; - ++dh->nreloads; - } - else -@@ -496,6 +498,9 @@ next_nip: - if (reload_count != UINT_MAX && dh->nreloads == reload_count) - /* Do not reset the value if we never not reload the record. */ - dh->nreloads = reload_count - 1; -+ -+ /* Reload with the same time-to-live value. */ -+ timeout = dh->timeout = time (NULL) + dh->ttl; - } - else - { -@@ -517,7 +522,8 @@ next_nip: - dataset->head.usable = true; - - /* Compute the timeout time. */ -- dataset->head.timeout = time (NULL) + db->negtimeout; -+ timeout = dataset->head.timeout = time (NULL) + db->negtimeout; -+ dataset->head.ttl = db->negtimeout; - - /* This is the reply. */ - memcpy (&dataset->resp, ¬found, total); -@@ -551,6 +557,8 @@ next_nip: - if (dh != NULL) - dh->usable = false; - } -+ -+ return timeout; - } - - -@@ -562,7 +570,7 @@ addhstai (struct database_dyn *db, int f - } - - --void -+time_t - readdhstai (struct database_dyn *db, struct hashentry *he, struct datahead *dh) - { - request_header req = -@@ -571,5 +579,5 @@ readdhstai (struct database_dyn *db, str - .key_len = he->len - }; - -- addhstaiX (db, -1, &req, db->data + he->key, he->owner, he, dh); -+ return addhstaiX (db, -1, &req, db->data + he->key, he->owner, he, dh); - } -Index: glibc-2.12-2-gc4ccff1/nscd/cache.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nscd/cache.c -+++ glibc-2.12-2-gc4ccff1/nscd/cache.c -@@ -45,9 +45,9 @@ extern void *xcalloc (size_t n, size_t s - unsigned int reload_count = DEFAULT_RELOAD_LIMIT; - - --static void (*const readdfcts[LASTREQ]) (struct database_dyn *, -- struct hashentry *, -- struct datahead *) = -+static time_t (*const readdfcts[LASTREQ]) (struct database_dyn *, -+ struct hashentry *, -+ struct datahead *) = - { - [GETPWBYNAME] = readdpwbyname, - [GETPWBYUID] = readdpwbyuid, -@@ -389,7 +389,8 @@ prune_cache (struct database_dyn *table, - assert (runp->type < LASTREQ - && readdfcts[runp->type] != NULL); - -- readdfcts[runp->type] (table, runp, dh); -+ time_t timeout = readdfcts[runp->type] (table, runp, dh); -+ next_timeout = MIN (next_timeout, timeout); - - /* If the entry has been replaced, we might need - cleanup. */ -Index: glibc-2.12-2-gc4ccff1/nscd/connections.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nscd/connections.c -+++ glibc-2.12-2-gc4ccff1/nscd/connections.c -@@ -1533,10 +1533,7 @@ nscd_run_prune (void *p) - pruning we want to know about it. Therefore set the - timeout to the maximum. It will be descreased when adding - new entries to the cache, if necessary. */ -- if (sizeof (time_t) == sizeof (long int)) -- dbs[my_number].wakeup_time = LONG_MAX; -- else -- dbs[my_number].wakeup_time = INT_MAX; -+ dbs[my_number].wakeup_time = MAX_TIMEOUT_VALUE; - - /* Unconditionally reset the flag. */ - time_t prune_now = dbs[my_number].clear_cache ? LONG_MAX : now; -Index: glibc-2.12-2-gc4ccff1/nscd/grpcache.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nscd/grpcache.c -+++ glibc-2.12-2-gc4ccff1/nscd/grpcache.c -@@ -71,7 +71,7 @@ static const gr_response_header notfound - }; - - --static void -+static time_t - cache_addgr (struct database_dyn *db, int fd, request_header *req, - const void *key, struct group *grp, uid_t owner, - struct hashentry *const he, struct datahead *dh, int errval) -@@ -91,6 +91,7 @@ cache_addgr (struct database_dyn *db, in - - assert (offsetof (struct dataset, resp) == offsetof (struct datahead, data)); - -+ time_t timeout = MAX_TIMEOUT_VALUE; - if (grp == NULL) - { - if (he != NULL && errval == EAGAIN) -@@ -102,6 +103,9 @@ cache_addgr (struct database_dyn *db, in - /* Do not reset the value if we never not reload the record. */ - dh->nreloads = reload_count - 1; - -+ /* Reload with the same time-to-live value. */ -+ timeout = dh->timeout = t + db->postimeout; -+ - written = total = 0; - } - else -@@ -125,7 +129,7 @@ cache_addgr (struct database_dyn *db, in - dataset->head.usable = true; - - /* Compute the timeout time. */ -- dataset->head.timeout = t + db->negtimeout; -+ timeout = dataset->head.timeout = t + db->negtimeout; - - /* This is the reply. */ - memcpy (&dataset->resp, ¬found, total); -@@ -217,7 +221,7 @@ cache_addgr (struct database_dyn *db, in - dataset->head.usable = true; - - /* Compute the timeout time. */ -- dataset->head.timeout = t + db->postimeout; -+ timeout = dataset->head.timeout = t + db->postimeout; - - dataset->resp.version = NSCD_VERSION; - dataset->resp.found = 1; -@@ -379,6 +383,8 @@ cache_addgr (struct database_dyn *db, in - dbg_log (_("short write in %s: %s"), __FUNCTION__, - strerror_r (errno, buf, sizeof (buf))); - } -+ -+ return timeout; - } - - -@@ -400,7 +406,7 @@ lookup (int type, union keytype key, str - } - - --static void -+static time_t - addgrbyX (struct database_dyn *db, int fd, request_header *req, - union keytype key, const char *keystr, uid_t uid, - struct hashentry *he, struct datahead *dh) -@@ -456,10 +462,12 @@ addgrbyX (struct database_dyn *db, int f - buffer = (char *) extend_alloca (buffer, buflen, 2 * buflen); - } - -- cache_addgr (db, fd, req, keystr, grp, uid, he, dh, errval); -+ time_t timeout = cache_addgr (db, fd, req, keystr, grp, uid, he, dh, errval); - - if (use_malloc) - free (buffer); -+ -+ return timeout; - } - - -@@ -473,7 +481,7 @@ addgrbyname (struct database_dyn *db, in - } - - --void -+time_t - readdgrbyname (struct database_dyn *db, struct hashentry *he, - struct datahead *dh) - { -@@ -484,7 +492,7 @@ readdgrbyname (struct database_dyn *db, - }; - union keytype u = { .v = db->data + he->key }; - -- addgrbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh); -+ return addgrbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh); - } - - -@@ -510,7 +518,7 @@ addgrbygid (struct database_dyn *db, int - } - - --void -+time_t - readdgrbygid (struct database_dyn *db, struct hashentry *he, - struct datahead *dh) - { -@@ -527,5 +535,5 @@ readdgrbygid (struct database_dyn *db, s - }; - union keytype u = { .g = gid }; - -- addgrbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh); -+ return addgrbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh); - } -Index: glibc-2.12-2-gc4ccff1/nscd/hstcache.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nscd/hstcache.c -+++ glibc-2.12-2-gc4ccff1/nscd/hstcache.c -@@ -91,7 +91,7 @@ static const hst_response_header tryagai - }; - - --static void -+static time_t - cache_addhst (struct database_dyn *db, int fd, request_header *req, - const void *key, struct hostent *hst, uid_t owner, - struct hashentry *const he, struct datahead *dh, int errval, -@@ -111,6 +111,7 @@ cache_addhst (struct database_dyn *db, i - - assert (offsetof (struct dataset, resp) == offsetof (struct datahead, data)); - -+ time_t timeout = MAX_TIMEOUT_VALUE; - if (hst == NULL) - { - if (he != NULL && errval == EAGAIN) -@@ -121,6 +122,9 @@ cache_addhst (struct database_dyn *db, i - if (reload_count != UINT_MAX) - /* Do not reset the value if we never not reload the record. */ - dh->nreloads = reload_count - 1; -+ -+ /* Reload with the same time-to-live value. */ -+ timeout = dh->timeout = t + dh->ttl; - } - else - { -@@ -149,8 +153,8 @@ cache_addhst (struct database_dyn *db, i - dataset->head.usable = true; - - /* Compute the timeout time. */ -- dataset->head.timeout = t + (ttl == INT32_MAX -- ? db->negtimeout : ttl); -+ dataset->head.ttl = ttl == INT32_MAX ? db->negtimeout : ttl; -+ timeout = dataset->head.timeout = t + dataset->head.ttl; - - /* This is the reply. */ - memcpy (&dataset->resp, resp, total); -@@ -214,7 +218,7 @@ cache_addhst (struct database_dyn *db, i - - if (h_addr_list_cnt == 0) - /* Invalid entry. */ -- return; -+ return MAX_TIMEOUT_VALUE; - - total += (sizeof (struct dataset) - + h_name_len -@@ -255,7 +259,8 @@ cache_addhst (struct database_dyn *db, i - dataset->head.usable = true; - - /* Compute the timeout time. */ -- dataset->head.timeout = t + (ttl == INT32_MAX ? db->postimeout : ttl); -+ dataset->head.ttl = ttl == INT32_MAX ? db->postimeout : ttl; -+ timeout = dataset->head.timeout = t + dataset->head.ttl; - - dataset->resp.version = NSCD_VERSION; - dataset->resp.found = 1; -@@ -312,6 +317,7 @@ cache_addhst (struct database_dyn *db, i - timeout value. Note that the new record has been - allocated on the stack and need not be freed. */ - assert (h_addr_list_cnt == 1); -+ dh->ttl = dataset->head.ttl; - dh->timeout = dataset->head.timeout; - ++dh->nreloads; - } -@@ -433,6 +439,8 @@ cache_addhst (struct database_dyn *db, i - dbg_log (_("short write in %s: %s"), __FUNCTION__, - strerror_r (errno, buf, sizeof (buf))); - } -+ -+ return timeout; - } - - -@@ -454,7 +462,7 @@ lookup (int type, void *key, struct host - } - - --static void -+static time_t - addhstbyX (struct database_dyn *db, int fd, request_header *req, - void *key, uid_t uid, struct hashentry *he, struct datahead *dh) - { -@@ -520,11 +528,13 @@ addhstbyX (struct database_dyn *db, int - buffer = (char *) extend_alloca (buffer, buflen, 2 * buflen); - } - -- cache_addhst (db, fd, req, key, hst, uid, he, dh, -- h_errno == TRY_AGAIN ? errval : 0, ttl); -+ time_t timeout = cache_addhst (db, fd, req, key, hst, uid, he, dh, -+ h_errno == TRY_AGAIN ? errval : 0, ttl); - - if (use_malloc) - free (buffer); -+ -+ return timeout; - } - - -@@ -536,7 +546,7 @@ addhstbyname (struct database_dyn *db, i - } - - --void -+time_t - readdhstbyname (struct database_dyn *db, struct hashentry *he, - struct datahead *dh) - { -@@ -546,7 +556,7 @@ readdhstbyname (struct database_dyn *db, - .key_len = he->len - }; - -- addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh); -+ return addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh); - } - - -@@ -558,7 +568,7 @@ addhstbyaddr (struct database_dyn *db, i - } - - --void -+time_t - readdhstbyaddr (struct database_dyn *db, struct hashentry *he, - struct datahead *dh) - { -@@ -568,7 +578,7 @@ readdhstbyaddr (struct database_dyn *db, - .key_len = he->len - }; - -- addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh); -+ return addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh); - } - - -@@ -580,7 +590,7 @@ addhstbynamev6 (struct database_dyn *db, - } - - --void -+time_t - readdhstbynamev6 (struct database_dyn *db, struct hashentry *he, - struct datahead *dh) - { -@@ -590,7 +600,7 @@ readdhstbynamev6 (struct database_dyn *d - .key_len = he->len - }; - -- addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh); -+ return addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh); - } - - -@@ -602,7 +612,7 @@ addhstbyaddrv6 (struct database_dyn *db, - } - - --void -+time_t - readdhstbyaddrv6 (struct database_dyn *db, struct hashentry *he, - struct datahead *dh) - { -@@ -612,5 +622,5 @@ readdhstbyaddrv6 (struct database_dyn *d - .key_len = he->len - }; - -- addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh); -+ return addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh); - } -Index: glibc-2.12-2-gc4ccff1/nscd/initgrcache.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nscd/initgrcache.c -+++ glibc-2.12-2-gc4ccff1/nscd/initgrcache.c -@@ -52,7 +52,7 @@ static const initgr_response_header notf - #include "../grp/compat-initgroups.c" - - --static void -+static time_t - addinitgroupsX (struct database_dyn *db, int fd, request_header *req, - void *key, uid_t uid, struct hashentry *const he, - struct datahead *dh) -@@ -174,7 +174,9 @@ addinitgroupsX (struct database_dyn *db, - - ssize_t total; - ssize_t written; -+ time_t timeout; - out: -+ timeout = MAX_TIMEOUT_VALUE; - if (!any_success) - { - /* Nothing found. Create a negative result record. */ -@@ -188,6 +190,9 @@ addinitgroupsX (struct database_dyn *db, - if (reload_count != UINT_MAX && dh->nreloads == reload_count) - /* Do not reset the value if we never not reload the record. */ - dh->nreloads = reload_count - 1; -+ -+ /* Reload with the same time-to-live value. */ -+ timeout = dh->timeout = time (NULL) + db->postimeout; - } - else - { -@@ -209,7 +214,7 @@ addinitgroupsX (struct database_dyn *db, - dataset->head.usable = true; - - /* Compute the timeout time. */ -- dataset->head.timeout = time (NULL) + db->negtimeout; -+ timeout = dataset->head.timeout = time (NULL) + db->negtimeout; - - /* This is the reply. */ - memcpy (&dataset->resp, ¬found, total); -@@ -273,7 +278,7 @@ addinitgroupsX (struct database_dyn *db, - dataset->head.usable = true; - - /* Compute the timeout time. */ -- dataset->head.timeout = time (NULL) + db->postimeout; -+ timeout = dataset->head.timeout = time (NULL) + db->postimeout; - - dataset->resp.version = NSCD_VERSION; - dataset->resp.found = 1; -@@ -401,6 +406,8 @@ addinitgroupsX (struct database_dyn *db, - dbg_log (_("short write in %s: %s"), __FUNCTION__, - strerror_r (errno, buf, sizeof (buf))); - } -+ -+ return timeout; - } - - -@@ -412,7 +419,7 @@ addinitgroups (struct database_dyn *db, - } - - --void -+time_t - readdinitgroups (struct database_dyn *db, struct hashentry *he, - struct datahead *dh) - { -@@ -422,5 +429,5 @@ readdinitgroups (struct database_dyn *db - .key_len = he->len - }; - -- addinitgroupsX (db, -1, &req, db->data + he->key, he->owner, he, dh); -+ return addinitgroupsX (db, -1, &req, db->data + he->key, he->owner, he, dh); - } -Index: glibc-2.12-2-gc4ccff1/nscd/nscd-client.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nscd/nscd-client.h -+++ glibc-2.12-2-gc4ccff1/nscd/nscd-client.h -@@ -179,6 +179,10 @@ typedef uint32_t ref_t; - /* Timestamp type. */ - typedef uint64_t nscd_time_t; - -+/* Maximum timestamp. */ -+#define MAX_TIMEOUT_VALUE \ -+ (sizeof (time_t) == sizeof (long int) ? LONG_MAX : INT_MAX) -+ - /* Alignment requirement of the beginning of the data region. */ - #define ALIGN 16 - -@@ -192,7 +196,8 @@ struct datahead - uint8_t notfound; /* Nonzero if data has not been found. */ - uint8_t nreloads; /* Reloads without use. */ - uint8_t usable; /* False if the entry must be ignored. */ -- uint64_t :40; /* Alignment. */ -+ uint8_t unused; /* Unused. */ -+ uint32_t ttl; /* TTL value used. */ - - /* We need to have the following element aligned for the response - header data types and their use in the 'struct dataset' types -Index: glibc-2.12-2-gc4ccff1/nscd/nscd.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nscd/nscd.h -+++ glibc-2.12-2-gc4ccff1/nscd/nscd.h -@@ -217,20 +217,20 @@ extern void addpwbyname (struct database - void *key, uid_t uid); - extern void addpwbyuid (struct database_dyn *db, int fd, request_header *req, - void *key, uid_t uid); --extern void readdpwbyname (struct database_dyn *db, struct hashentry *he, -- struct datahead *dh); --extern void readdpwbyuid (struct database_dyn *db, struct hashentry *he, -- struct datahead *dh); -+extern time_t readdpwbyname (struct database_dyn *db, struct hashentry *he, -+ struct datahead *dh); -+extern time_t readdpwbyuid (struct database_dyn *db, struct hashentry *he, -+ struct datahead *dh); - - /* grpcache.c */ - extern void addgrbyname (struct database_dyn *db, int fd, request_header *req, - void *key, uid_t uid); - extern void addgrbygid (struct database_dyn *db, int fd, request_header *req, - void *key, uid_t uid); --extern void readdgrbyname (struct database_dyn *db, struct hashentry *he, -- struct datahead *dh); --extern void readdgrbygid (struct database_dyn *db, struct hashentry *he, -- struct datahead *dh); -+extern time_t readdgrbyname (struct database_dyn *db, struct hashentry *he, -+ struct datahead *dh); -+extern time_t readdgrbygid (struct database_dyn *db, struct hashentry *he, -+ struct datahead *dh); - - /* hstcache.c */ - extern void addhstbyname (struct database_dyn *db, int fd, request_header *req, -@@ -241,37 +241,37 @@ extern void addhstbynamev6 (struct datab - request_header *req, void *key, uid_t uid); - extern void addhstbyaddrv6 (struct database_dyn *db, int fd, - request_header *req, void *key, uid_t uid); --extern void readdhstbyname (struct database_dyn *db, struct hashentry *he, -- struct datahead *dh); --extern void readdhstbyaddr (struct database_dyn *db, struct hashentry *he, -- struct datahead *dh); --extern void readdhstbynamev6 (struct database_dyn *db, struct hashentry *he, -+extern time_t readdhstbyname (struct database_dyn *db, struct hashentry *he, - struct datahead *dh); --extern void readdhstbyaddrv6 (struct database_dyn *db, struct hashentry *he, -+extern time_t readdhstbyaddr (struct database_dyn *db, struct hashentry *he, - struct datahead *dh); -+extern time_t readdhstbynamev6 (struct database_dyn *db, struct hashentry *he, -+ struct datahead *dh); -+extern time_t readdhstbyaddrv6 (struct database_dyn *db, struct hashentry *he, -+ struct datahead *dh); - - /* aicache.c */ - extern void addhstai (struct database_dyn *db, int fd, request_header *req, - void *key, uid_t uid); --extern void readdhstai (struct database_dyn *db, struct hashentry *he, -- struct datahead *dh); -+extern time_t readdhstai (struct database_dyn *db, struct hashentry *he, -+ struct datahead *dh); - - - /* initgrcache.c */ - extern void addinitgroups (struct database_dyn *db, int fd, - request_header *req, void *key, uid_t uid); --extern void readdinitgroups (struct database_dyn *db, struct hashentry *he, -- struct datahead *dh); -+extern time_t readdinitgroups (struct database_dyn *db, struct hashentry *he, -+ struct datahead *dh); - - /* servicecache.c */ - extern void addservbyname (struct database_dyn *db, int fd, - request_header *req, void *key, uid_t uid); --extern void readdservbyname (struct database_dyn *db, struct hashentry *he, -- struct datahead *dh); -+extern time_t readdservbyname (struct database_dyn *db, struct hashentry *he, -+ struct datahead *dh); - extern void addservbyport (struct database_dyn *db, int fd, - request_header *req, void *key, uid_t uid); --extern void readdservbyport (struct database_dyn *db, struct hashentry *he, -- struct datahead *dh); -+extern time_t readdservbyport (struct database_dyn *db, struct hashentry *he, -+ struct datahead *dh); - - /* mem.c */ - extern void *mempool_alloc (struct database_dyn *db, size_t len, -Index: glibc-2.12-2-gc4ccff1/nscd/pwdcache.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nscd/pwdcache.c -+++ glibc-2.12-2-gc4ccff1/nscd/pwdcache.c -@@ -77,7 +77,7 @@ static const pw_response_header notfound - }; - - --static void -+static time_t - cache_addpw (struct database_dyn *db, int fd, request_header *req, - const void *key, struct passwd *pwd, uid_t owner, - struct hashentry *const he, struct datahead *dh, int errval) -@@ -97,6 +97,7 @@ cache_addpw (struct database_dyn *db, in - - assert (offsetof (struct dataset, resp) == offsetof (struct datahead, data)); - -+ time_t timeout = MAX_TIMEOUT_VALUE; - if (pwd == NULL) - { - if (he != NULL && errval == EAGAIN) -@@ -108,6 +109,9 @@ cache_addpw (struct database_dyn *db, in - /* Do not reset the value if we never not reload the record. */ - dh->nreloads = reload_count - 1; - -+ /* Reload with the same time-to-live value. */ -+ timeout = dh->timeout = t + db->postimeout; -+ - written = total = 0; - } - else -@@ -132,7 +136,7 @@ cache_addpw (struct database_dyn *db, in - dataset->head.usable = true; - - /* Compute the timeout time. */ -- dataset->head.timeout = t + db->negtimeout; -+ timeout = dataset->head.timeout = t + db->negtimeout; - - /* This is the reply. */ - memcpy (&dataset->resp, ¬found, total); -@@ -212,7 +216,7 @@ cache_addpw (struct database_dyn *db, in - dataset->head.usable = true; - - /* Compute the timeout time. */ -- dataset->head.timeout = t + db->postimeout; -+ timeout = dataset->head.timeout = t + db->postimeout; - - dataset->resp.version = NSCD_VERSION; - dataset->resp.found = 1; -@@ -293,8 +297,8 @@ cache_addpw (struct database_dyn *db, in - assert ((char *) dataset - (char *) db->head - + total - <= (sizeof (struct database_pers_head) -- + db->head->module * sizeof (ref_t) -- + db->head->data_size)); -+ + db->head->module * sizeof (ref_t) -+ + db->head->data_size)); - written = sendfileall (fd, db->wr_fd, - (char *) &dataset->resp - - (char *) db->head, dataset->head.recsize ); -@@ -374,6 +378,8 @@ cache_addpw (struct database_dyn *db, in - dbg_log (_("short write in %s: %s"), __FUNCTION__, - strerror_r (errno, buf, sizeof (buf))); - } -+ -+ return timeout; - } - - -@@ -395,7 +401,7 @@ lookup (int type, union keytype key, str - } - - --static void -+static time_t - addpwbyX (struct database_dyn *db, int fd, request_header *req, - union keytype key, const char *keystr, uid_t c_uid, - struct hashentry *he, struct datahead *dh) -@@ -452,10 +458,13 @@ addpwbyX (struct database_dyn *db, int f - } - - /* Add the entry to the cache. */ -- cache_addpw (db, fd, req, keystr, pwd, c_uid, he, dh, errval); -+ time_t timeout = cache_addpw (db, fd, req, keystr, pwd, c_uid, he, dh, -+ errval); - - if (use_malloc) - free (buffer); -+ -+ return timeout; - } - - -@@ -469,7 +478,7 @@ addpwbyname (struct database_dyn *db, in - } - - --void -+time_t - readdpwbyname (struct database_dyn *db, struct hashentry *he, - struct datahead *dh) - { -@@ -480,7 +489,7 @@ readdpwbyname (struct database_dyn *db, - }; - union keytype u = { .v = db->data + he->key }; - -- addpwbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh); -+ return addpwbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh); - } - - -@@ -506,7 +515,7 @@ addpwbyuid (struct database_dyn *db, int - } - - --void -+time_t - readdpwbyuid (struct database_dyn *db, struct hashentry *he, - struct datahead *dh) - { -@@ -523,5 +532,5 @@ readdpwbyuid (struct database_dyn *db, s - }; - union keytype u = { .u = uid }; - -- addpwbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh); -+ return addpwbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh); - } -Index: glibc-2.12-2-gc4ccff1/nscd/servicescache.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nscd/servicescache.c -+++ glibc-2.12-2-gc4ccff1/nscd/servicescache.c -@@ -61,7 +61,7 @@ static const serv_response_header notfou - }; - - --static void -+static time_t - cache_addserv (struct database_dyn *db, int fd, request_header *req, - const void *key, struct servent *serv, uid_t owner, - struct hashentry *const he, struct datahead *dh, int errval) -@@ -81,6 +81,7 @@ cache_addserv (struct database_dyn *db, - - assert (offsetof (struct dataset, resp) == offsetof (struct datahead, data)); - -+ time_t timeout = MAX_TIMEOUT_VALUE; - if (serv == NULL) - { - if (he != NULL && errval == EAGAIN) -@@ -92,6 +93,9 @@ cache_addserv (struct database_dyn *db, - /* Do not reset the value if we never not reload the record. */ - dh->nreloads = reload_count - 1; - -+ /* Reload with the same time-to-live value. */ -+ timeout = dh->timeout = t + db->postimeout; -+ - written = total = 0; - } - else -@@ -115,7 +119,7 @@ cache_addserv (struct database_dyn *db, - dataset->head.usable = true; - - /* Compute the timeout time. */ -- dataset->head.timeout = t + db->negtimeout; -+ timeout = dataset->head.timeout = t + db->negtimeout; - - /* This is the reply. */ - memcpy (&dataset->resp, ¬found, total); -@@ -203,7 +207,7 @@ cache_addserv (struct database_dyn *db, - dataset->head.usable = true; - - /* Compute the timeout time. */ -- dataset->head.timeout = t + db->postimeout; -+ timeout = dataset->head.timeout = t + db->postimeout; - - dataset->resp.version = NSCD_VERSION; - dataset->resp.found = 1; -@@ -328,6 +332,8 @@ cache_addserv (struct database_dyn *db, - dbg_log (_("short write in %s: %s"), __FUNCTION__, - strerror_r (errno, buf, sizeof (buf))); - } -+ -+ return timeout; - } - - -@@ -354,7 +360,7 @@ lookup (int type, char *key, struct serv - } - - --static void -+static time_t - addservbyX (struct database_dyn *db, int fd, request_header *req, - char *key, uid_t uid, struct hashentry *he, struct datahead *dh) - { -@@ -409,10 +415,12 @@ addservbyX (struct database_dyn *db, int - buffer = (char *) extend_alloca (buffer, buflen, 2 * buflen); - } - -- cache_addserv (db, fd, req, key, serv, uid, he, dh, errval); -+ time_t timeout = cache_addserv (db, fd, req, key, serv, uid, he, dh, errval); - - if (use_malloc) - free (buffer); -+ -+ return timeout; - } - - -@@ -424,7 +432,7 @@ addservbyname (struct database_dyn *db, - } - - --void -+time_t - readdservbyname (struct database_dyn *db, struct hashentry *he, - struct datahead *dh) - { -@@ -434,7 +442,7 @@ readdservbyname (struct database_dyn *db - .key_len = he->len - }; - -- addservbyX (db, -1, &req, db->data + he->key, he->owner, he, dh); -+ return addservbyX (db, -1, &req, db->data + he->key, he->owner, he, dh); - } - - -@@ -446,7 +454,7 @@ addservbyport (struct database_dyn *db, - } - - --void -+time_t - readdservbyport (struct database_dyn *db, struct hashentry *he, - struct datahead *dh) - { -@@ -456,5 +464,5 @@ readdservbyport (struct database_dyn *db - .key_len = he->len - }; - -- addservbyX (db, -1, &req, db->data + he->key, he->owner, he, dh); -+ return addservbyX (db, -1, &req, db->data + he->key, he->owner, he, dh); - } diff --git a/src/patches/glibc/glibc-rh705465.patch b/src/patches/glibc/glibc-rh705465.patch deleted file mode 100644 index 63b971e7dc..0000000000 --- a/src/patches/glibc/glibc-rh705465.patch +++ /dev/null @@ -1,449 +0,0 @@ -2011-11-07 Andreas Schwab - - * nss/nss_files/files-initgroups.c (_nss_files_initgroups_dyn): - Fix size of allocated buffer. - -2011-05-10 Ulrich Drepper - - [BZ #11257] - * grp/initgroups.c (internal_getgrouplist): When we found the service - list through the initgroups entry in nsswitch.conf do not always - continue on a successful lookup. Don't always use the - __nss_group_data-ase value if it is set. - * nss/nsswitch.conf (initgroups): Change action for successful db - lookup to continue for compatibility. - -2011-05-06 Ulrich Drepper - - * nss/nss_files/files-initgroups.c (_nss_files_initgroups_dyn): Return - NSS_STATUS_NOTFOUND if no record was found. - -2011-04-29 Ulrich Drepper - - * grp/initgroups.c (internal_getgrouplist): Prefer initgroups setting - to groups setting in database lookup. - * nss/nsswitch.conf: Add initgroups entry. - -2011-04-21 Ulrich Drepper - - * nss/nss_files/files-initgroups.c (_nss_files_initgroups_dyn): Fix - problem in reallocation in last patch. - -2011-04-19 Ulrich Drepper - - * nss/nss_files/files-initgroups.c: New file. - * nss/Makefile (libnss_files-routines): Add files-initgroups. - * nss/Versions (libnss_files) [GLIBC_PRIVATE]: Export - _nss_files_initgroups_dyn. - -2011-01-13 Ulrich Drepper - - [BZ #10484] - * nss/nss_files/files-hosts.c (HOST_DB_LOOKUP): Handle overflows of - temporary buffer used to handle multi lookups locally. - * include/alloca.h: Add libc_hidden_proto for __libc_alloca_cutoff. - -2011-01-13 Ulrich Drepper - - [BZ #10484] - * Versions [libc] (GLIBC_PRIVATE): Export __libc_alloca_cutoff. - * alloca_cutoff.c: Add libc_hidden_def. - -Index: glibc-2.12-2-gc4ccff1/grp/initgroups.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/grp/initgroups.c -+++ glibc-2.12-2-gc4ccff1/grp/initgroups.c -@@ -43,6 +43,8 @@ extern int __nss_group_lookup (service_u - extern void *__nss_lookup_function (service_user *ni, const char *fct_name); - - extern service_user *__nss_group_database attribute_hidden; -+static service_user *initgroups_database; -+static bool use_initgroups_entry; - - - #include "compat-initgroups.c" -@@ -67,32 +69,41 @@ internal_getgrouplist (const char *user, - } - #endif - -- service_user *nip = NULL; -- initgroups_dyn_function fct; - enum nss_status status = NSS_STATUS_UNAVAIL; -- int no_more; -- /* Start is one, because we have the first group as parameter. */ -- long int start = 1; -+ int no_more = 0; - - /* Never store more than the starting *SIZE number of elements. */ - assert (*size > 0); - (*groupsp)[0] = group; -+ /* Start is one, because we have the first group as parameter. */ -+ long int start = 1; - -- if (__nss_group_database != NULL) -+ if (initgroups_database == NULL) - { -- no_more = 0; -- nip = __nss_group_database; -+ no_more = __nss_database_lookup ("initgroups", NULL, "", -+ &initgroups_database); -+ if (no_more == 0 && initgroups_database == NULL) -+ { -+ if (__nss_group_database == NULL) -+ no_more = __nss_database_lookup ("group", NULL, "compat files", -+ &__nss_group_database); -+ -+ initgroups_database = __nss_group_database; -+ } -+ else if (initgroups_database != NULL) -+ { -+ assert (no_more == 0); -+ use_initgroups_entry = true; -+ } - } -- else -- no_more = __nss_database_lookup ("group", NULL, -- "compat [NOTFOUND=return] files", &nip); - -+ service_user *nip = initgroups_database; - while (! no_more) - { - long int prev_start = start; - -- fct = __nss_lookup_function (nip, "initgroups_dyn"); -- -+ initgroups_dyn_function fct = __nss_lookup_function (nip, -+ "initgroups_dyn"); - if (fct == NULL) - status = compat_call (nip, user, group, &start, size, groupsp, - limit, &errno); -@@ -119,7 +130,13 @@ internal_getgrouplist (const char *user, - if (NSS_STATUS_TRYAGAIN > status || status > NSS_STATUS_RETURN) - __libc_fatal ("illegal status in internal_getgrouplist"); - -- if (status != NSS_STATUS_SUCCESS -+ /* For compatibility reason we will continue to look for more -+ entries using the next service even though data has already -+ been found if the nsswitch.conf file contained only a 'groups' -+ line and no 'initgroups' line. If the latter is available -+ we always respect the status. This means that the default -+ for successful lookups is to return. */ -+ if ((use_initgroups_entry || status != NSS_STATUS_SUCCESS) - && nss_next_action (nip, status) == NSS_ACTION_RETURN) - break; - -Index: glibc-2.12-2-gc4ccff1/include/alloca.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/include/alloca.h -+++ glibc-2.12-2-gc4ccff1/include/alloca.h -@@ -14,6 +14,7 @@ extern void *__alloca (size_t __size); - - extern int __libc_use_alloca (size_t size) __attribute__ ((const)); - extern int __libc_alloca_cutoff (size_t size) __attribute__ ((const)); -+libc_hidden_proto (__libc_alloca_cutoff) - - #define __MAX_ALLOCA_CUTOFF 65536 - -Index: glibc-2.12-2-gc4ccff1/nptl/Versions -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/Versions -+++ glibc-2.12-2-gc4ccff1/nptl/Versions -@@ -27,6 +27,7 @@ libc { - pthread_cond_broadcast; pthread_cond_timedwait; - } - GLIBC_PRIVATE { -+ __libc_alloca_cutoff; - # Internal libc interface to libpthread - __libc_dl_error_tsd; - } -Index: glibc-2.12-2-gc4ccff1/nptl/alloca_cutoff.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/alloca_cutoff.c -+++ glibc-2.12-2-gc4ccff1/nptl/alloca_cutoff.c -@@ -34,3 +34,4 @@ __libc_alloca_cutoff (size_t size) - assume the maximum available stack space. */ - ?: __MAX_ALLOCA_CUTOFF * 4)); - } -+libc_hidden_def (__libc_alloca_cutoff) -Index: glibc-2.12-2-gc4ccff1/nss/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nss/Makefile -+++ glibc-2.12-2-gc4ccff1/nss/Makefile -@@ -63,7 +63,7 @@ vpath %.c $(subdir-dirs) - - - libnss_files-routines := $(addprefix files-,$(databases)) \ -- files-have_o_cloexec -+ files-initgroups files-have_o_cloexec - distribute += files-XXX.c files-parse.c - - -Index: glibc-2.12-2-gc4ccff1/nss/Versions -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nss/Versions -+++ glibc-2.12-2-gc4ccff1/nss/Versions -@@ -95,5 +95,7 @@ libnss_files { - _nss_netgroup_parseline; - _nss_files_getpublickey; - _nss_files_getsecretkey; -+ -+ _nss_files_initgroups_dyn; - } - } -Index: glibc-2.12-2-gc4ccff1/nss/nss_files/files-hosts.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nss/nss_files/files-hosts.c -+++ glibc-2.12-2-gc4ccff1/nss/nss_files/files-hosts.c -@@ -129,19 +129,22 @@ _nss_files_get##name##_r (proto, - && _res_hconf.flags & HCONF_FLAG_MULTI) \ - { \ - /* We have to get all host entries from the file. */ \ -- const size_t tmp_buflen = MIN (buflen, 4096); \ -- char tmp_buffer[tmp_buflen] \ -+ size_t tmp_buflen = MIN (buflen, 4096); \ -+ char tmp_buffer_stack[tmp_buflen] \ - __attribute__ ((__aligned__ (__alignof__ (struct hostent_data))));\ -+ char *tmp_buffer = tmp_buffer_stack; \ - struct hostent tmp_result_buf; \ - int naddrs = 1; \ - int naliases = 0; \ - char *bufferend; \ -+ bool tmp_buffer_malloced = false; \ - \ - while (result->h_aliases[naliases] != NULL) \ - ++naliases; \ - \ - bufferend = (char *) &result->h_aliases[naliases + 1]; \ - \ -+ again: \ - while ((status = internal_getent (&tmp_result_buf, tmp_buffer, \ - tmp_buflen, errnop H_ERRNO_ARG \ - EXTRA_ARGS_VALUE)) \ -@@ -182,7 +185,7 @@ _nss_files_get##name##_r (proto, - } \ - /* If the real name is different add it also to the \ - aliases. This means that there is a duplication \ -- in the alias list but this is really the users \ -+ in the alias list but this is really the user's \ - problem. */ \ - if (strcmp (old_result->h_name, \ - tmp_result_buf.h_name) != 0) \ -@@ -204,7 +207,7 @@ _nss_files_get##name##_r (proto, - *errnop = ERANGE; \ - *herrnop = NETDB_INTERNAL; \ - status = NSS_STATUS_TRYAGAIN; \ -- break; \ -+ goto out; \ - } \ - \ - new_h_addr_list = \ -@@ -268,8 +271,54 @@ _nss_files_get##name##_r (proto, - } \ - } \ - \ -- if (status != NSS_STATUS_TRYAGAIN) \ -+ if (status == NSS_STATUS_TRYAGAIN) \ -+ { \ -+ size_t newsize = 2 * tmp_buflen; \ -+ if (tmp_buffer_malloced) \ -+ { \ -+ char *newp = realloc (tmp_buffer, newsize); \ -+ if (newp != NULL) \ -+ { \ -+ assert ((((uintptr_t) newp) \ -+ & (__alignof__ (struct hostent_data) - 1)) \ -+ == 0); \ -+ tmp_buffer = newp; \ -+ tmp_buflen = newsize; \ -+ goto again; \ -+ } \ -+ } \ -+ else if (!__libc_use_alloca (buflen + newsize)) \ -+ { \ -+ tmp_buffer = malloc (newsize); \ -+ if (tmp_buffer != NULL) \ -+ { \ -+ assert ((((uintptr_t) tmp_buffer) \ -+ & (__alignof__ (struct hostent_data) - 1)) \ -+ == 0); \ -+ tmp_buffer_malloced = true; \ -+ tmp_buflen = newsize; \ -+ goto again; \ -+ } \ -+ } \ -+ else \ -+ { \ -+ tmp_buffer \ -+ = extend_alloca (tmp_buffer, tmp_buflen, \ -+ newsize \ -+ + __alignof__ (struct hostent_data)); \ -+ tmp_buffer = (char *) (((uintptr_t) tmp_buffer \ -+ + __alignof__ (struct hostent_data) \ -+ - 1) \ -+ & ~(__alignof__ (struct hostent_data)\ -+ - 1)); \ -+ goto again; \ -+ } \ -+ } \ -+ else \ - status = NSS_STATUS_SUCCESS; \ -+ out: \ -+ if (tmp_buffer_malloced) \ -+ free (tmp_buffer); \ - } \ - \ - \ -Index: glibc-2.12-2-gc4ccff1/nss/nss_files/files-initgroups.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/nss/nss_files/files-initgroups.c -@@ -0,0 +1,137 @@ -+/* Initgroups handling in nss_files module. -+ Copyright (C) 2011 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; 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 -+ -+enum nss_status -+_nss_files_initgroups_dyn (const char *user, gid_t group, long int *start, -+ long int *size, gid_t **groupsp, long int limit, -+ int *errnop) -+{ -+ FILE *stream = fopen ("/etc/group", "re"); -+ if (stream == NULL) -+ { -+ *errnop = errno; -+ return *errnop == ENOMEM ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; -+ } -+ -+ /* No other thread using this stream. */ -+ __fsetlocking (stream, FSETLOCKING_BYCALLER); -+ -+ char *line = NULL; -+ size_t linelen = 0; -+ enum nss_status status = NSS_STATUS_SUCCESS; -+ bool any = false; -+ -+ size_t buflen = 1024; -+ void *buffer = alloca (buflen); -+ bool buffer_use_malloc = false; -+ -+ gid_t *groups = *groupsp; -+ -+ /* We have to iterate over the entire file. */ -+ while (!feof_unlocked (stream)) -+ { -+ ssize_t n = getline (&line, &linelen, stream); -+ if (n < 0) -+ { -+ if (! feof_unlocked (stream)) -+ status = ((*errnop = errno) == ENOMEM -+ ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL); -+ break; -+ } -+ -+ struct group grp; -+ int res; -+ while ((res = _nss_files_parse_grent (line, &grp, buffer, buflen, -+ errnop)) == -1) -+ { -+ size_t newbuflen = 2 * buflen; -+ if (buffer_use_malloc || ! __libc_use_alloca (buflen + newbuflen)) -+ { -+ void *newbuf = realloc (buffer_use_malloc ? buffer : NULL, -+ newbuflen); -+ if (newbuf == NULL) -+ { -+ *errnop = ENOMEM; -+ status = NSS_STATUS_TRYAGAIN; -+ goto out; -+ } -+ buffer = newbuf; -+ buflen = newbuflen; -+ buffer_use_malloc = true; -+ } -+ else -+ buffer = extend_alloca (buffer, buflen, newbuflen); -+ } -+ -+ if (res > 0 && grp.gr_gid != group) -+ for (char **m = grp.gr_mem; *m != NULL; ++m) -+ if (strcmp (*m, user) == 0) -+ { -+ /* Matches user. Insert this group. */ -+ if (*start == *size) -+ { -+ /* Need a bigger buffer. */ -+ if (limit > 0 && *size == limit) -+ /* We reached the maximum. */ -+ goto out; -+ -+ long int newsize; -+ if (limit <= 0) -+ newsize = 2 * *size; -+ else -+ newsize = MIN (limit, 2 * *size); -+ -+ gid_t *newgroups = realloc (groups, -+ newsize * sizeof (*groups)); -+ if (newgroups == NULL) -+ { -+ *errnop = ENOMEM; -+ status = NSS_STATUS_TRYAGAIN; -+ goto out; -+ } -+ *groupsp = groups = newgroups; -+ *size = newsize; -+ } -+ -+ groups[*start] = grp.gr_gid; -+ *start += 1; -+ any = true; -+ -+ break; -+ } -+ } -+ -+ out: -+ /* Free memory. */ -+ if (buffer_use_malloc) -+ free (buffer); -+ free (line); -+ -+ fclose (stream); -+ -+ return status == NSS_STATUS_SUCCESS && !any ? NSS_STATUS_NOTFOUND : status; -+} -Index: glibc-2.12-2-gc4ccff1/nss/nsswitch.conf -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nss/nsswitch.conf -+++ glibc-2.12-2-gc4ccff1/nss/nsswitch.conf -@@ -5,6 +5,7 @@ - - passwd: db files - group: db files -+initgroups: db [SUCCESS=continue] files - shadow: db files - gshadow: files - diff --git a/src/patches/glibc/glibc-rh711927.patch b/src/patches/glibc/glibc-rh711927.patch deleted file mode 100644 index 26949fe073..0000000000 --- a/src/patches/glibc/glibc-rh711927.patch +++ /dev/null @@ -1,503 +0,0 @@ -Index: glibc-2.12-2-gc4ccff1/config.h.in -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/config.h.in -+++ glibc-2.12-2-gc4ccff1/config.h.in -@@ -201,6 +201,9 @@ - /* Define if multi-arch DSOs should be generated. */ - #undef USE_MULTIARCH - -+/* Define if Systemtap probes should be defined. */ -+#undef USE_STAP_PROBE -+ - /* - */ - -Index: glibc-2.12-2-gc4ccff1/configure -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/configure -+++ glibc-2.12-2-gc4ccff1/configure -@@ -830,6 +830,7 @@ enable_all_warnings - enable_multi_arch - enable_experimental_malloc - enable_nss_crypt -+enable_systemtap - with_cpu - ' - ac_precious_vars='build_alias -@@ -1501,6 +1502,7 @@ Optional Features: - --enable-experimental-malloc - enable experimental malloc features - --enable-nss-crypt enable libcrypt to use nss -+ --enable-systemtap enable systemtap static probe points [default=no] - - Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] -@@ -3932,6 +3934,79 @@ else - fi - - -+# Check whether --enable-systemtap was given. -+if test "${enable_systemtap+set}" = set; then -+ enableval=$enable_systemtap; systemtap=$enableval -+else -+ systemtap=no -+fi -+ -+if test x$systemtap != xno; then -+ -+ { $as_echo "$as_me:$LINENO: checking for systemtap static probe support" >&5 -+$as_echo_n "checking for systemtap static probe support... " >&6; } -+if test "${libc_cv_sdt+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ old_CFLAGS="$CFLAGS" -+ CFLAGS="-std=gnu99 $CFLAGS" -+ cat >conftest.$ac_ext <<_ACEOF -+#include -+void foo (int i, void *p) -+{ -+ asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) "" -+ :: STAP_PROBE_ASM_OPERANDS (2, i, p)); -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ libc_cv_sdt=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ libc_cv_sdt=no -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ CFLAGS="$old_CFLAGS" -+fi -+{ $as_echo "$as_me:$LINENO: result: $libc_cv_sdt" >&5 -+$as_echo "$libc_cv_sdt" >&6; } -+ if test $libc_cv_sdt = yes; then -+ cat >>confdefs.h <<\_ACEOF -+#define USE_STAP_PROBE 1 -+_ACEOF -+ -+ else -+ { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 -+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -+{ { $as_echo "$as_me:$LINENO: error: systemtap support needs sys/sdt.h with asm support -+See \`config.log' for more details." >&5 -+$as_echo "$as_me: error: systemtap support needs sys/sdt.h with asm support -+See \`config.log' for more details." >&2;} -+ { (exit 1); exit 1; }; }; } -+ fi -+ -+fi -+ -+ - # The way shlib-versions is used to generate soversions.mk uses a - # fairly simplistic model for name recognition that can't distinguish - # i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os -Index: glibc-2.12-2-gc4ccff1/configure.in -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/configure.in -+++ glibc-2.12-2-gc4ccff1/configure.in -@@ -319,6 +319,29 @@ else - fi - AC_SUBST(libc_cv_nss_crypt) - -+AC_ARG_ENABLE([systemtap], -+ [AS_HELP_STRING([--enable-systemtap], -+ [enable systemtap static probe points @<:@default=no@:>@])], -+ [systemtap=$enableval], -+ [systemtap=no]) -+AS_IF([test x$systemtap != xno], [ -+ AC_CACHE_CHECK([for systemtap static probe support], libc_cv_sdt, [dnl -+ old_CFLAGS="$CFLAGS" -+ CFLAGS="-std=gnu99 $CFLAGS" -+ AC_COMPILE_IFELSE([#include -+void foo (int i, void *p) -+{ -+ asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) "" -+ :: STAP_PROBE_ASM_OPERANDS (2, i, p)); -+}], [libc_cv_sdt=yes], [libc_cv_sdt=no]) -+ CFLAGS="$old_CFLAGS"]) -+ if test $libc_cv_sdt = yes; then -+ AC_DEFINE([USE_STAP_PROBE]) -+ else -+ AC_MSG_FAILURE([systemtap support needs sys/sdt.h with asm support]) -+ fi -+]) -+ - # The way shlib-versions is used to generate soversions.mk uses a - # fairly simplistic model for name recognition that can't distinguish - # i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os -Index: glibc-2.12-2-gc4ccff1/elf/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/Makefile -+++ glibc-2.12-2-gc4ccff1/elf/Makefile -@@ -458,7 +458,8 @@ CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D' - CFLAGS-dl-cache.c = $(SYSCONF-FLAGS) - CFLAGS-cache.c = $(SYSCONF-FLAGS) - --CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),-DNOT_IN_libc=1 -DIS_IN_rtld=1) -+CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\ -+ -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld) - - test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(strip $(modules-names)))) - generated += $(addsuffix .so,$(strip $(modules-names))) -Index: glibc-2.12-2-gc4ccff1/elf/dl-close.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-close.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-close.c -@@ -32,6 +32,7 @@ - #include - #include - #include -+#include - - - /* Type of the constructor functions. */ -@@ -469,6 +470,7 @@ _dl_close_worker (struct link_map *map) - struct r_debug *r = _dl_debug_initialize (0, nsid); - r->r_state = RT_DELETE; - _dl_debug_state (); -+ LIBC_PROBE (rtld_unmap_start, 2, nsid, r); - - if (unload_global) - { -@@ -722,6 +724,7 @@ _dl_close_worker (struct link_map *map) - /* Notify the debugger those objects are finalized and gone. */ - r->r_state = RT_CONSISTENT; - _dl_debug_state (); -+ LIBC_PROBE (rtld_unmap_complete, 2, nsid, r); - - /* Recheck if we need to retry, release the lock. */ - out: -Index: glibc-2.12-2-gc4ccff1/elf/dl-load.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-load.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-load.c -@@ -36,6 +36,7 @@ - #include - #include - #include -+#include - - #include - -@@ -806,7 +807,7 @@ _dl_init_paths (const char *llp) - static void - __attribute__ ((noreturn, noinline)) - lose (int code, int fd, const char *name, char *realname, struct link_map *l, -- const char *msg, struct r_debug *r) -+ const char *msg, struct r_debug *r, Lmid_t nsid) - { - /* The file might already be closed. */ - if (fd != -1) -@@ -818,6 +819,7 @@ lose (int code, int fd, const char *name - { - r->r_state = RT_CONSISTENT; - _dl_debug_state (); -+ LIBC_PROBE (rtld_map_complete, 2, nsid, r); - } - - _dl_signal_error (code, name, NULL, msg); -@@ -856,7 +858,7 @@ _dl_map_object_from_fd (const char *name - errval = errno; - call_lose: - lose (errval, fd, name, realname, l, errstring, -- make_consistent ? r : NULL); -+ make_consistent ? r : NULL, nsid); - } - - /* Look again to see if the real name matched another already loaded. */ -@@ -963,6 +965,7 @@ _dl_map_object_from_fd (const char *name - linking has not been used before. */ - r->r_state = RT_ADD; - _dl_debug_state (); -+ LIBC_PROBE (rtld_map_start, 2, nsid, r); - make_consistent = true; - } - else -@@ -1656,7 +1659,7 @@ open_verify (const char *name, struct fi - name = strdupa (realname); - free (realname); - } -- lose (errval, fd, name, NULL, NULL, errstring, NULL); -+ lose (errval, fd, name, NULL, NULL, errstring, NULL, 0); - } - - /* See whether the ELF header is what we expect. */ -Index: glibc-2.12-2-gc4ccff1/elf/dl-open.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-open.c -+++ glibc-2.12-2-gc4ccff1/elf/dl-open.c -@@ -33,6 +33,7 @@ - #include - #include - #include -+#include - - #include - -@@ -297,6 +298,7 @@ dl_open_worker (void *a) - struct r_debug *r = _dl_debug_initialize (0, args->nsid); - r->r_state = RT_CONSISTENT; - _dl_debug_state (); -+ LIBC_PROBE (rtld_map_complete, 2, args->nsid, r); - - /* Only do lazy relocation if `LD_BIND_NOW' is not set. */ - int reloc_mode = mode & __RTLD_AUDIT; -@@ -309,10 +311,18 @@ dl_open_worker (void *a) - struct link_map *l = new; - while (l->l_next) - l = l->l_next; -+ int relocation_in_progress = 0; - while (1) - { - if (! l->l_real->l_relocated) - { -+ if (! relocation_in_progress) -+ { -+ /* Notify the debugger that relocations are about to happen. */ -+ LIBC_PROBE (rtld_reloc_start, 2, args->nsid, r); -+ relocation_in_progress = 1; -+ } -+ - #ifdef SHARED - if (__builtin_expect (GLRO(dl_profile) != NULL, 0)) - { -@@ -460,6 +470,10 @@ cannot load any more object with static - _dl_fatal_printf (N_("\ - TLS generation counter wrapped! Please report this.")); - -+ /* Notify the debugger all new objects have been relocated. */ -+ if (relocation_in_progress) -+ LIBC_PROBE (rtld_reloc_complete, 2, args->nsid, r); -+ - /* Run the initializer functions of new objects. */ - _dl_init (new, args->argc, args->argv, args->env); - -Index: glibc-2.12-2-gc4ccff1/elf/rtld-Rules -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/rtld-Rules -+++ glibc-2.12-2-gc4ccff1/elf/rtld-Rules -@@ -122,6 +122,6 @@ ifdef rtld-depfiles - endif - - # This here is the whole point of all the shenanigans. --rtld-CPPFLAGS := -DNOT_IN_libc=1 -DIS_IN_rtld=1 -+rtld-CPPFLAGS := -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld - - endif -Index: glibc-2.12-2-gc4ccff1/elf/rtld.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/rtld.c -+++ glibc-2.12-2-gc4ccff1/elf/rtld.c -@@ -40,6 +40,7 @@ - #include - #include - #include -+#include - - #include - -@@ -1656,6 +1657,7 @@ ERROR: ld.so: object '%s' cannot be load - /* We start adding objects. */ - r->r_state = RT_ADD; - _dl_debug_state (); -+ LIBC_PROBE (rtld_init_start, 2, LM_ID_BASE, r); - - /* Auditing checkpoint: we are ready to signal that the initial map - is being constructed. */ -@@ -2353,6 +2355,7 @@ ERROR: ld.so: object '%s' cannot be load - r = _dl_debug_initialize (0, LM_ID_BASE); - r->r_state = RT_CONSISTENT; - _dl_debug_state (); -+ LIBC_PROBE (rtld_init_complete, 2, LM_ID_BASE, r); - - #ifndef MAP_COPY - /* We must munmap() the cache file. */ -Index: glibc-2.12-2-gc4ccff1/extra-lib.mk -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/extra-lib.mk -+++ glibc-2.12-2-gc4ccff1/extra-lib.mk -@@ -101,4 +101,4 @@ ifneq (,$(cpp-srcs-left)) - include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) - endif - --CPPFLAGS-$(lib) := -DNOT_IN_libc=1 -DIS_IN_$(lib)=1 -+CPPFLAGS-$(lib) := -DNOT_IN_libc=1 -DIS_IN_$(lib)=1 -DIN_LIB=$(lib) -Index: glibc-2.12-2-gc4ccff1/include/stap-probe.h -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/include/stap-probe.h -@@ -0,0 +1,140 @@ -+/* Macros for defining Systemtap static probe points. -+ Copyright (C) 2011 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _STAP_PROBE_H -+#define _STAP_PROBE_H 1 -+ -+#ifdef USE_STAP_PROBE -+ -+# include -+ -+/* Our code uses one macro LIBC_PROBE (name, n, arg1, ..., argn). -+ -+ Without USE_STAP_PROBE, that does nothing but evaluates all -+ its arguments (to prevent bit rot, unlike e.g. assert). -+ -+ Systemtap's header defines the macros STAP_PROBE (provider, name) and -+ STAP_PROBEn (provider, name, arg1, ..., argn). For "provider" we paste -+ in the IN_LIB name (libc, libpthread, etc.) automagically. */ -+ -+# ifndef NOT_IN_libc -+# define IN_LIB libc -+# elif !defined IN_LIB -+/* This is intentionally defined with extra unquoted commas in it so -+ that macro substitution will bomb out when it is used. We don't -+ just use #error here, so that this header can be included by -+ other headers that use LIBC_PROBE inside their own macros. We -+ only want such headers to fail to compile if those macros are -+ actually used in a context where IN_LIB has not been defined. */ -+# define IN_LIB ,,,missing -DIN_LIB=... -- not extra-lib.mk?,,, -+# endif -+ -+# define LIBC_PROBE(name, n, ...) \ -+ LIBC_PROBE_1 (IN_LIB, name, n, ## __VA_ARGS__) -+ -+# define LIBC_PROBE_1(lib, name, n, ...) \ -+ STAP_PROBE##n (lib, name, ## __VA_ARGS__) -+ -+# define STAP_PROBE0 STAP_PROBE -+ -+# define LIBC_PROBE_ASM(name, template) \ -+ STAP_PROBE_ASM (IN_LIB, name, template) -+ -+# define LIBC_PROBE_ASM_OPERANDS STAP_PROBE_ASM_OPERANDS -+ -+#else /* Not USE_STAP_PROBE. */ -+ -+# ifndef __ASSEMBLER__ -+# define LIBC_PROBE(name, n, ...) DUMMY_PROBE##n (__VA_ARGS__) -+# else -+# define LIBC_PROBE(name, n, ...) /* Nothing. */ -+# endif -+ -+# define LIBC_PROBE_ASM(name, template) /* Nothing. */ -+# define LIBC_PROBE_ASM_OPERANDS(n, ...) /* Nothing. */ -+ -+/* This silliness lets us evaluate all the arguments for each arity -+ of probe. My kingdom for a real macro system. */ -+ -+# define DUMMY_PROBE0() do {} while (0) -+# define DUMMY_PROBE1(a1) do {} while ((void) (a1), 0) -+# define DUMMY_PROBE2(a1, a2) do {} while ((void) (a1), \ -+ (void) (a2), 0) -+# define DUMMY_PROBE3(a1, a2, a3) do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), 0) -+# define DUMMY_PROBE4(a1, a2, a3, a4) do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), \ -+ (void) (a4), 0) -+# define DUMMY_PROBE5(a1, a2, a3, a4, a5) \ -+ do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), \ -+ (void) (a4), \ -+ (void) (a5), 0) -+# define DUMMY_PROBE6(a1, a2, a3, a4, a5, a6) \ -+ do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), \ -+ (void) (a4), \ -+ (void) (a5), \ -+ (void) (a6), 0) -+# define DUMMY_PROBE7(a1, a2, a3, a4, a5, a6, a7) \ -+ do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), \ -+ (void) (a4), \ -+ (void) (a5), \ -+ (void) (a6), \ -+ (void) (a7), 0) -+# define DUMMY_PROBE8(a1, a2, a3, a4, a5, a6, a7, a8) \ -+ do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), \ -+ (void) (a4), \ -+ (void) (a5), \ -+ (void) (a6), \ -+ (void) (a7), \ -+ (void) (a8), 0) -+# define DUMMY_PROBE9(a1, a2, a3, a4, a5, a6, a7, a8, a9) \ -+ do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), \ -+ (void) (a4), \ -+ (void) (a5), \ -+ (void) (a6), \ -+ (void) (a7), \ -+ (void) (a8), \ -+ (void) (a9), 0) -+# define DUMMY_PROBE10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \ -+ do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), \ -+ (void) (a4), \ -+ (void) (a5), \ -+ (void) (a6), \ -+ (void) (a7), \ -+ (void) (a8), \ -+ (void) (a9), \ -+ (void) (a10), 0) -+ -+#endif /* USE_STAP_PROBE. */ -+ -+#endif /* stap-probe.h */ -Index: glibc-2.12-2-gc4ccff1/scripts/check-local-headers.sh -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/scripts/check-local-headers.sh -+++ glibc-2.12-2-gc4ccff1/scripts/check-local-headers.sh -@@ -31,6 +31,8 @@ fgrep -v "$includedir/asm" | - fgrep -v "$includedir/linux" | - fgrep -v "$includedir/selinux" | - fgrep -v "$includedir/sys/capability.h" | -+fgrep -v "$includedir/sys/sdt.h" | -+fgrep -v "$includedir/sys/sdt-config.h" | - fgrep -v "$includedir/gd" | - fgrep -v "$includedir/nss3"; then - # If we found a match something is wrong. diff --git a/src/patches/glibc/glibc-rh711987.patch b/src/patches/glibc/glibc-rh711987.patch deleted file mode 100644 index bd286e1aac..0000000000 --- a/src/patches/glibc/glibc-rh711987.patch +++ /dev/null @@ -1,136 +0,0 @@ -2010-08-11 Ulrich Drepper - - * sysdeps/unix/sysv/linux/bits/statfs.h (struct statfs): Add f_flags - field. - (struct statfs64): Likewise. - (_STATFS_F_FLAGS): Define. - * sysdeps/unix/sysv/linux/s390/bits/statfs.h: Likewise. - * sysdeps/unix/sysv/linux/internal_statvfs.c (__statvfs_getflags): - Don't define if __ASSUME_STATFS_F_FLAGS is defined. - (ST_VALID): Define locally. - (INTERNAL_STATVFS): If f_flags has ST_VALID set don't call - __statvfs_getflags, use the provided value. - * sysdeps/unix/sysv/linux/kernel-features.h: Define - __ASSUME_STATFS_F_FLAGS. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/bits/statfs.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/bits/statfs.h -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/bits/statfs.h -@@ -42,7 +42,8 @@ struct statfs - __fsid_t f_fsid; - __SWORD_TYPE f_namelen; - __SWORD_TYPE f_frsize; -- __SWORD_TYPE f_spare[5]; -+ __SWORD_TYPE f_flags; -+ __SWORD_TYPE f_spare[4]; - }; - - #ifdef __USE_LARGEFILE64 -@@ -58,10 +59,12 @@ struct statfs64 - __fsid_t f_fsid; - __SWORD_TYPE f_namelen; - __SWORD_TYPE f_frsize; -- __SWORD_TYPE f_spare[5]; -+ __SWORD_TYPE f_flags; -+ __SWORD_TYPE f_spare[4]; - }; - #endif - - /* Tell code we have these members. */ - #define _STATFS_F_NAMELEN - #define _STATFS_F_FRSIZE -+#define _STATFS_F_FLAGS -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/internal_statvfs.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/internal_statvfs.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/internal_statvfs.c -@@ -29,6 +29,11 @@ - #include - #include - #include "linux_fsinfo.h" -+#include "kernel-features.h" -+ -+ -+/* Special internal-only bit value. */ -+#define ST_VALID 0x0020 - - - #ifndef STATFS -@@ -37,6 +42,7 @@ - # define INTERNAL_STATVFS __internal_statvfs - - -+# ifndef __ASSUME_STATFS_F_FLAGS - int - __statvfs_getflags (const char *name, int fstype, struct stat64 *st) - { -@@ -200,6 +206,7 @@ __statvfs_getflags (const char *name, in - - return result; - } -+# endif - #else - extern int __statvfs_getflags (const char *name, int fstype, - struct stat64 *st); -@@ -240,9 +247,14 @@ INTERNAL_STATVFS (const char *name, stru - /* XXX I have no idea how to compute f_favail. Any idea??? */ - buf->f_favail = buf->f_ffree; - -- /* Determining the flags is tricky. We have to read /proc/mounts or -- the /etc/mtab file and search for the entry which matches the given -- file. The way we can test for matching filesystem is using the -- device number. */ -- buf->f_flag = __statvfs_getflags (name, fsbuf->f_type, st); -+#ifndef __ASSUME_STATFS_F_FLAGS -+ if ((fsbuf->f_flags & ST_VALID) == 0) -+ /* Determining the flags is tricky. We have to read /proc/mounts or -+ the /etc/mtab file and search for the entry which matches the given -+ file. The way we can test for matching filesystem is using the -+ device number. */ -+ buf->f_flag = __statvfs_getflags (name, fsbuf->f_type, st); -+ else -+#endif -+ buf->f_flag = fsbuf->f_flags ^ ST_VALID; - } -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/kernel-features.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/kernel-features.h -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/kernel-features.h -@@ -552,3 +552,8 @@ - #if __LINUX_KERNEL_VERSION >= 0x020621 - # define __ASSUME_RECVMMSG 1 - #endif -+ -+/* statfs fills in f_flags since 2.6.36. */ -+#if __LINUX_KERNEL_VERSION >= 0x020624 -+# define __ASSUME_STATFS_F_FLAGS 1 -+#endif -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/s390/bits/statfs.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/s390/bits/statfs.h -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/s390/bits/statfs.h -@@ -42,7 +42,8 @@ struct statfs - __fsid_t f_fsid; - int f_namelen; - int f_frsize; -- int f_spare[5]; -+ int f_flags; -+ int f_spare[4]; - }; - - #ifdef __USE_LARGEFILE64 -@@ -58,10 +59,12 @@ struct statfs64 - __fsid_t f_fsid; - int f_namelen; - int f_frsize; -- int f_spare[5]; -+ int f_flags; -+ int f_spare[4]; - }; - #endif - - /* Tell code we have this member. */ - #define _STATFS_F_NAMELEN - #define _STATFS_F_FRSIZE -+#define _STATFS_F_FLAGS diff --git a/src/patches/glibc/glibc-rh712248.patch b/src/patches/glibc/glibc-rh712248.patch deleted file mode 100644 index afadc6601b..0000000000 --- a/src/patches/glibc/glibc-rh712248.patch +++ /dev/null @@ -1,69 +0,0 @@ -2011-07-07 Ulrich Drepper - - [BZ #12868] - * sysdeps/unix/sysv/linux/linux_fsinfo.h: Define Lustre constants. - * sysdeps/unix/sysv/linux/internal_statvfs.c (__statvfs_getflags): - Handle Lustre. - * sysdeps/unix/sysv/linux/pathconf.c (__statfs_link_max): Likewise. - (__statfs_filesize_max): Likewise. - Patch mostly by Andreas Dilger . - -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/internal_statvfs.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/internal_statvfs.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/internal_statvfs.c -@@ -109,6 +109,9 @@ __statvfs_getflags (const char *name, in - case LOGFS_MAGIC_U32: - fsname = "logfs"; - break; -+ case LUSTRE_SUPER_MAGIC: -+ fsname = "lustre"; -+ break; - } - - FILE *mtab = __setmntent ("/proc/mounts", "r"); -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/linux_fsinfo.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/linux_fsinfo.h -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/linux_fsinfo.h -@@ -77,6 +77,9 @@ - /* Constant that identifies the `logfs´ filesystem. */ - #define LOGFS_MAGIC_U32 0xc97e8168u - -+/* Constant that identifies the `lustre' filesystem. */ -+#define LUSTRE_SUPER_MAGIC 0x0BD00BD0 -+ - /* Constants that identify the `minix2' filesystem. */ - #define MINIX2_SUPER_MAGIC 0x2468 - #define MINIX2_SUPER_MAGIC2 0x2478 -@@ -144,6 +147,8 @@ - /* Maximum link counts. */ - #define COH_LINK_MAX 10000 - #define EXT2_LINK_MAX 32000 -+#define EXT4_LINK_MAX 65000 -+#define LUSTRE_LINK_MAX EXT4_LINK_MAX - #define MINIX2_LINK_MAX 65530 - #define MINIX_LINK_MAX 250 - #define REISERFS_LINK_MAX 64535 -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/pathconf.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/pathconf.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/pathconf.c -@@ -104,6 +104,9 @@ __statfs_link_max (int result, const str - case XFS_SUPER_MAGIC: - return XFS_LINK_MAX; - -+ case LUSTRE_SUPER_MAGIC: -+ return LUSTRE_LINK_MAX; -+ - default: - return LINUX_LINK_MAX; - } -@@ -136,6 +139,7 @@ __statfs_filesize_max (int result, const - case UDF_SUPER_MAGIC: - case JFS_SUPER_MAGIC: - case VXFS_SUPER_MAGIC: -+ case LUSTRE_SUPER_MAGIC: - return 64; - - case MSDOS_SUPER_MAGIC: diff --git a/src/patches/glibc/glibc-rh713134.patch b/src/patches/glibc/glibc-rh713134.patch deleted file mode 100644 index dc979be300..0000000000 --- a/src/patches/glibc/glibc-rh713134.patch +++ /dev/null @@ -1,36 +0,0 @@ -2011-03-18 Andreas Schwab - - * elf/ldd.bash.in: Never run file directly. - -Index: glibc-2.12-2-gc4ccff1/elf/ldd.bash.in -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/ldd.bash.in -+++ glibc-2.12-2-gc4ccff1/elf/ldd.bash.in -@@ -167,18 +167,6 @@ warning: you do not have execution permi - fi - done - case $ret in -- 0) -- # If the program exits with exit code 5, it means the process has been -- # invoked with __libc_enable_secure. Fall back to running it through -- # the dynamic linker. -- try_trace "$file" -- rc=$? -- if [ $rc = 5 ]; then -- try_trace "$RTLD" "$file" -- rc=$? -- fi -- [ $rc = 0 ] || result=1 -- ;; - 1) - # This can be a non-ELF binary or no binary at all. - nonelf "$file" || { -@@ -186,7 +174,7 @@ warning: you do not have execution permi - result=1 - } - ;; -- 2) -+ 0|2) - try_trace "$RTLD" "$file" || result=1 - ;; - *) diff --git a/src/patches/glibc/glibc-rh714823.patch b/src/patches/glibc/glibc-rh714823.patch deleted file mode 100644 index 8bd121b999..0000000000 --- a/src/patches/glibc/glibc-rh714823.patch +++ /dev/null @@ -1,126 +0,0 @@ -2011-06-28 Andreas Schwab - - * sysdeps/posix/getaddrinfo.c (gaih_inet): Don't use gethostbyaddr - to determine canonical name. - -2011-06-22 Andreas Schwab - - * sysdeps/posix/getaddrinfo.c (gaih_inet): Fix last change. - -2011-06-21 Ulrich Drepper - - [BZ #12885] - * sysdeps/posix/getaddrinfo.c (gaih_inet): When looking up only IPv6 - addresses using gethostbyname4_r ignore IPv4 addresses. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/posix/getaddrinfo.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/posix/getaddrinfo.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/posix/getaddrinfo.c -@@ -512,10 +512,11 @@ gaih_inet (const char *name, const struc - - /* If we do not have to look for IPv4 and IPv6 together, use - the simple, old functions. */ -- if (req->ai_family == AF_INET -- || (req->ai_family == AF_INET6 -- && ((req->ai_flags & AI_V4MAPPED) == 0 -- || (req->ai_flags & AI_ALL) == 0))) -+ if ((req->ai_family == AF_INET -+ || (req->ai_family == AF_INET6 -+ && ((req->ai_flags & AI_V4MAPPED) == 0 -+ || (req->ai_flags & AI_ALL) == 0))) -+ && (req->ai_flags & AI_CANONNAME) == 0) - { - int family = req->ai_family; - size_t tmpbuflen = 512; -@@ -731,16 +732,44 @@ gaih_inet (const char *name, const struc - tmpbuflen, 2 * tmpbuflen); - } - -- no_inet6_data = no_data; -- - if (status == NSS_STATUS_SUCCESS) - { -+ assert (!no_data); -+ no_data = 1; -+ - if ((req->ai_flags & AI_CANONNAME) != 0 && canon == NULL) - canon = (*pat)->name; - - while (*pat != NULL) -- pat = &((*pat)->next); -+ { -+ if ((*pat)->family == AF_INET -+ && req->ai_family == AF_INET6 -+ && (req->ai_flags & AI_V4MAPPED) != 0) -+ { -+ uint32_t *pataddr = (*pat)->addr; -+ (*pat)->family = AF_INET6; -+ pataddr[3] = pataddr[0]; -+ pataddr[2] = htonl (0xffff); -+ pataddr[1] = 0; -+ pataddr[0] = 0; -+ pat = &((*pat)->next); -+ no_data = 0; -+ } -+ else if (req->ai_family == AF_UNSPEC -+ || (*pat)->family == req->ai_family) -+ { -+ pat = &((*pat)->next); -+ -+ no_data = 0; -+ if (req->ai_family == AF_INET6) -+ got_ipv6 = true; -+ } -+ else -+ *pat = ((*pat)->next); -+ } - } -+ -+ no_inet6_data = no_data; - } - else - { -@@ -905,39 +934,9 @@ gaih_inet (const char *name, const struc - { - if (canon == NULL) - { -- struct hostent *h = NULL; -- int herrno; -- struct hostent th; -- size_t tmpbuflen = 512; -- char *tmpbuf = NULL; -- -- do -- { -- tmpbuf = extend_alloca (tmpbuf, tmpbuflen, tmpbuflen * 2); -- rc = __gethostbyaddr_r (at2->addr, -- ((at2->family == AF_INET6) -- ? sizeof (struct in6_addr) -- : sizeof (struct in_addr)), -- at2->family, &th, tmpbuf, -- tmpbuflen, &h, &herrno); -- } -- while (rc == ERANGE && herrno == NETDB_INTERNAL); -- -- if (rc != 0 && herrno == NETDB_INTERNAL) -- { -- __set_h_errno (herrno); -- return -EAI_SYSTEM; -- } -- -- if (h != NULL) -- canon = h->h_name; -- else -- { -- assert (orig_name != NULL); -- /* If the canonical name cannot be determined, use -- the passed in string. */ -- canon = orig_name; -- } -+ /* If the canonical name cannot be determined, use -+ the passed in string. */ -+ canon = orig_name; - } - - #ifdef HAVE_LIBIDN diff --git a/src/patches/glibc/glibc-rh718057.patch b/src/patches/glibc/glibc-rh718057.patch deleted file mode 100644 index d331996721..0000000000 --- a/src/patches/glibc/glibc-rh718057.patch +++ /dev/null @@ -1,109 +0,0 @@ -2011-07-01 Andreas Schwab - - * nis/nss_compat/compat-pwd.c (getpwent_next_nss_netgr): Query NIS - domain only when needed. - -Index: glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-pwd.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nis/nss_compat/compat-pwd.c -+++ glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-pwd.c -@@ -360,7 +360,7 @@ getpwent_next_nss_netgr (const char *nam - char *group, char *buffer, size_t buflen, - int *errnop) - { -- char *curdomain, *host, *user, *domain, *p2; -+ char *curdomain = NULL, *host, *user, *domain, *p2; - int status; - size_t p2len; - -@@ -369,15 +369,7 @@ getpwent_next_nss_netgr (const char *nam - if (!nss_getpwnam_r) - return NSS_STATUS_UNAVAIL; - -- if (yp_get_default_domain (&curdomain) != YPERR_SUCCESS) -- { -- ent->netgroup = false; -- ent->first = false; -- give_pwd_free (&ent->pwd); -- return NSS_STATUS_UNAVAIL; -- } -- -- if (ent->first == true) -+ if (ent->first) - { - memset (&ent->netgrdata, 0, sizeof (struct __netgrent)); - __internal_setnetgrent (group, &ent->netgrdata); -@@ -403,8 +395,19 @@ getpwent_next_nss_netgr (const char *nam - if (user == NULL || user[0] == '-') - continue; - -- if (domain != NULL && strcmp (curdomain, domain) != 0) -- continue; -+ if (domain != NULL) -+ { -+ if (curdomain == NULL -+ && yp_get_default_domain (&curdomain) != YPERR_SUCCESS) -+ { -+ __internal_endnetgrent (&ent->netgrdata); -+ ent->netgroup = false; -+ give_pwd_free (&ent->pwd); -+ return NSS_STATUS_UNAVAIL; -+ } -+ if (strcmp (curdomain, domain) != 0) -+ continue; -+ } - - /* If name != NULL, we are called from getpwnam. */ - if (name != NULL) -Index: glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-spwd.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nis/nss_compat/compat-spwd.c -+++ glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-spwd.c -@@ -317,7 +317,7 @@ getspent_next_nss_netgr (const char *nam - char *group, char *buffer, size_t buflen, - int *errnop) - { -- char *curdomain, *host, *user, *domain, *p2; -+ char *curdomain = NULL, *host, *user, *domain, *p2; - size_t p2len; - - if (!nss_getspnam_r) -@@ -327,15 +327,7 @@ getspent_next_nss_netgr (const char *nam - if (ent->setent_status != NSS_STATUS_SUCCESS) - return ent->setent_status; - -- if (yp_get_default_domain (&curdomain) != YPERR_SUCCESS) -- { -- ent->netgroup = false; -- ent->first = false; -- give_spwd_free (&ent->pwd); -- return NSS_STATUS_UNAVAIL; -- } -- -- if (ent->first == true) -+ if (ent->first) - { - memset (&ent->netgrdata, 0, sizeof (struct __netgrent)); - __internal_setnetgrent (group, &ent->netgrdata); -@@ -362,8 +354,19 @@ getspent_next_nss_netgr (const char *nam - if (user == NULL || user[0] == '-') - continue; - -- if (domain != NULL && strcmp (curdomain, domain) != 0) -- continue; -+ if (domain != NULL) -+ { -+ if (curdomain == NULL -+ && yp_get_default_domain (&curdomain) != YPERR_SUCCESS) -+ { -+ __internal_endnetgrent (&ent->netgrdata); -+ ent->netgroup = false; -+ give_spwd_free (&ent->pwd); -+ return NSS_STATUS_UNAVAIL; -+ } -+ if (strcmp (curdomain, domain) != 0) -+ continue; -+ } - - /* If name != NULL, we are called from getpwnam */ - if (name != NULL) diff --git a/src/patches/glibc/glibc-rh726517.patch b/src/patches/glibc/glibc-rh726517.patch deleted file mode 100644 index 26addbfb77..0000000000 --- a/src/patches/glibc/glibc-rh726517.patch +++ /dev/null @@ -1,173 +0,0 @@ -Index: glibc-2.12-2-gc4ccff1/malloc/arena.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/malloc/arena.c -+++ glibc-2.12-2-gc4ccff1/malloc/arena.c -@@ -870,7 +870,7 @@ heap_trim(heap, pad) heap_info *heap; si - heap = prev_heap; - if(!prev_inuse(p)) { /* consolidate backward */ - p = prev_chunk(p); -- unlink(p, bck, fwd); -+ unlink(ar_ptr, p, bck, fwd); - } - assert(((unsigned long)((char*)p + new_size) & (pagesz-1)) == 0); - assert( ((char*)p + new_size) == ((char*)heap + heap->size) ); -Index: glibc-2.12-2-gc4ccff1/malloc/hooks.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/malloc/hooks.c -+++ glibc-2.12-2-gc4ccff1/malloc/hooks.c -@@ -219,7 +219,9 @@ top_check() - (char*)t + chunksize(t) == mp_.sbrk_base + main_arena.system_mem))) - return 0; - -+ mutex_unlock(&main_arena); - malloc_printerr (check_action, "malloc: top chunk is corrupt", t); -+ mutex_lock(&main_arena); - - /* Try to set up a new top chunk. */ - brk = MORECORE(0); -Index: glibc-2.12-2-gc4ccff1/malloc/malloc.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/malloc/malloc.c -+++ glibc-2.12-2-gc4ccff1/malloc/malloc.c -@@ -2109,12 +2109,14 @@ typedef struct malloc_chunk* mbinptr; - #define last(b) ((b)->bk) - - /* Take a chunk off a bin list */ --#define unlink(P, BK, FD) { \ -+#define unlink(AV, P, BK, FD) { \ - FD = P->fd; \ - BK = P->bk; \ -- if (__builtin_expect (FD->bk != P || BK->fd != P, 0)) \ -+ if (__builtin_expect (FD->bk != P || BK->fd != P, 0)) { \ -+ mutex_unlock(&(AV)->mutex); \ - malloc_printerr (check_action, "corrupted double-linked list", P); \ -- else { \ -+ mutex_lock(&(AV)->mutex); \ -+ } else { \ - FD->bk = BK; \ - BK->fd = FD; \ - if (!in_smallbin_range (P->size) \ -@@ -3257,7 +3259,9 @@ static Void_t* sYSMALLOc(nb, av) INTERNA - - else if (contiguous(av) && old_size && brk < old_end) { - /* Oops! Someone else killed our space.. Can't touch anything. */ -+ mutex_unlock(&av->mutex); - malloc_printerr (3, "break adjusted to free malloc space", brk); -+ mutex_lock(&av->mutex); - } - - /* -@@ -4305,7 +4309,9 @@ _int_malloc(mstate av, size_t bytes) - { - errstr = "malloc(): memory corruption (fast)"; - errout: -+ mutex_unlock(&av->mutex); - malloc_printerr (check_action, errstr, chunk2mem (victim)); -+ mutex_lock(&av->mutex); - return NULL; - } - #ifndef ATOMIC_FASTBINS -@@ -4393,8 +4399,12 @@ _int_malloc(mstate av, size_t bytes) - bck = victim->bk; - if (__builtin_expect (victim->size <= 2 * SIZE_SZ, 0) - || __builtin_expect (victim->size > av->system_mem, 0)) -- malloc_printerr (check_action, "malloc(): memory corruption", -- chunk2mem (victim)); -+ { -+ void *p = chunk2mem(victim); -+ mutex_unlock(&av->mutex); -+ malloc_printerr (check_action, "malloc(): memory corruption", p); -+ mutex_lock(&av->mutex); -+ } - size = chunksize(victim); - - /* -@@ -4535,7 +4545,7 @@ _int_malloc(mstate av, size_t bytes) - victim = victim->fd; - - remainder_size = size - nb; -- unlink(victim, bck, fwd); -+ unlink(av, victim, bck, fwd); - - /* Exhaust */ - if (remainder_size < MINSIZE) { -@@ -4633,7 +4643,7 @@ _int_malloc(mstate av, size_t bytes) - remainder_size = size - nb; - - /* unlink */ -- unlink(victim, bck, fwd); -+ unlink(av, victim, bck, fwd); - - /* Exhaust */ - if (remainder_size < MINSIZE) { -@@ -4789,10 +4799,14 @@ _int_free(mstate av, mchunkptr p) - errstr = "free(): invalid pointer"; - errout: - #ifdef ATOMIC_FASTBINS -- if (! have_lock && locked) -+ if (have_lock || locked) - (void)mutex_unlock(&av->mutex); - #endif - malloc_printerr (check_action, errstr, chunk2mem(p)); -+#ifdef ATOMIC_FASTBINS -+ if (have_lock) -+ mutex_lock(&av->mutex); -+#endif - return; - } - /* We know that each chunk is at least MINSIZE bytes in size. */ -@@ -4961,7 +4975,7 @@ _int_free(mstate av, mchunkptr p) - prevsize = p->prev_size; - size += prevsize; - p = chunk_at_offset(p, -((long) prevsize)); -- unlink(p, bck, fwd); -+ unlink(av, p, bck, fwd); - } - - if (nextchunk != av->top) { -@@ -4970,7 +4984,7 @@ _int_free(mstate av, mchunkptr p) - - /* consolidate forward */ - if (!nextinuse) { -- unlink(nextchunk, bck, fwd); -+ unlink(av, nextchunk, bck, fwd); - size += nextsize; - } else - clear_inuse_bit_at_offset(nextchunk, 0); -@@ -5158,7 +5172,7 @@ static void malloc_consolidate(av) mstat - prevsize = p->prev_size; - size += prevsize; - p = chunk_at_offset(p, -((long) prevsize)); -- unlink(p, bck, fwd); -+ unlink(av, p, bck, fwd); - } - - if (nextchunk != av->top) { -@@ -5166,7 +5180,7 @@ static void malloc_consolidate(av) mstat - - if (!nextinuse) { - size += nextsize; -- unlink(nextchunk, bck, fwd); -+ unlink(av, nextchunk, bck, fwd); - } else - clear_inuse_bit_at_offset(nextchunk, 0); - -@@ -5235,7 +5249,9 @@ _int_realloc(mstate av, mchunkptr oldp, - { - errstr = "realloc(): invalid old size"; - errout: -+ mutex_unlock(&av->mutex); - malloc_printerr (check_action, errstr, chunk2mem(oldp)); -+ mutex_lock(&av->mutex); - return NULL; - } - -@@ -5282,7 +5298,7 @@ _int_realloc(mstate av, mchunkptr oldp, - (unsigned long)(newsize = oldsize + nextsize) >= - (unsigned long)(nb)) { - newp = oldp; -- unlink(next, bck, fwd); -+ unlink(av, next, bck, fwd); - } - - /* allocate, copy, free */ diff --git a/src/patches/glibc/glibc-rh730379.patch b/src/patches/glibc/glibc-rh730379.patch deleted file mode 100644 index 45808afed5..0000000000 --- a/src/patches/glibc/glibc-rh730379.patch +++ /dev/null @@ -1,34 +0,0 @@ -2011-08-17 Ulrich Drepper - - * Makeconfig (override CFLAGS): Add library-specific CFLAGS. - * resolv/Makefile: Define CFLAGS-libresolv. - -Index: glibc-2.12-2-gc4ccff1/Makeconfig -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/Makeconfig -+++ glibc-2.12-2-gc4ccff1/Makeconfig -@@ -700,7 +700,9 @@ CPPFLAGS = $($(subdir)-CPPFLAGS) $(+incl - override CFLAGS = -std=gnu99 $(gnu89-inline-CFLAGS) \ - $(filter-out %frame-pointer,$(+cflags)) $(+gccwarn-c) \ - $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$( - - * sysdeps/unix/sysv/linux/x86_64/cancellation.S: Maintain aligned - stack. - * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise. - * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise. - -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S -@@ -71,7 +71,9 @@ ENTRY(__pthread_enable_asynccancel) - - 1: ret - --3: movq $TCB_PTHREAD_CANCELED, %fs:RESULT -+3: subq $8, %rsp -+ cfi_adjust_cfa_offset(8) -+ movq $TCB_PTHREAD_CANCELED, %fs:RESULT - lock - orl $TCB_EXITING_BITMASK, %fs:CANCELHANDLING - movq %fs:CLEANUP_JMP_BUF, %rdi -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S -@@ -63,9 +63,9 @@ __pthread_cond_timedwait: - cfi_adjust_cfa_offset(8) - cfi_rel_offset(%r15, 0) - #ifdef __ASSUME_FUTEX_CLOCK_REALTIME --# define FRAME_SIZE 32 -+# define FRAME_SIZE (32+8) - #else --# define FRAME_SIZE 48 -+# define FRAME_SIZE (48+8) - #endif - subq $FRAME_SIZE, %rsp - cfi_adjust_cfa_offset(FRAME_SIZE) -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S -@@ -45,7 +45,7 @@ __pthread_cond_wait: - cfi_lsda(DW_EH_PE_udata4, .LexceptSTART) - #endif - --#define FRAME_SIZE 32 -+#define FRAME_SIZE (32+8) - leaq -FRAME_SIZE(%rsp), %rsp - cfi_adjust_cfa_offset(FRAME_SIZE) - diff --git a/src/patches/glibc/glibc-rh736346.patch b/src/patches/glibc/glibc-rh736346.patch deleted file mode 100644 index 2dd3f8a8df..0000000000 --- a/src/patches/glibc/glibc-rh736346.patch +++ /dev/null @@ -1,116 +0,0 @@ -2011-01-14 Ulrich Drepper - - [BZ #10563] - * sysdeps/unix/sysv/linux/i386/setgroups.c: Use INLINE_SETXID_SYSCALL - to make the syscall. - * sysdeps/unix/sysv/linux/setgroups.c: New file. - -2011-01-14 Ulrich Drepper - - [BZ #10563] - * sysdeps/pthread/setxid.h (__SETXID_1): Add cast to assignment. - (__SETXID_2): Likewise. - (__SETXID_3): Likewise. - -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/pthread/setxid.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/pthread/setxid.h -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/pthread/setxid.h -@@ -20,11 +20,11 @@ - #include - - #define __SETXID_1(cmd, arg1) \ -- cmd.id[0] = arg1 -+ cmd.id[0] = (long int) arg1 - #define __SETXID_2(cmd, arg1, arg2) \ -- __SETXID_1 (cmd, arg1); cmd.id[1] = arg2 -+ __SETXID_1 (cmd, arg1); cmd.id[1] = (long int) arg2 - #define __SETXID_3(cmd, arg1, arg2, arg3) \ -- __SETXID_2 (cmd, arg1, arg2); cmd.id[2] = arg3 -+ __SETXID_2 (cmd, arg1, arg2); cmd.id[2] = (long int) arg3 - - #ifdef SINGLE_THREAD - # define INLINE_SETXID_SYSCALL(name, nr, args...) \ -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/i386/setgroups.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/i386/setgroups.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/i386/setgroups.c -@@ -25,6 +25,7 @@ - #include - #include - -+#include - #include - #include - -@@ -44,7 +45,7 @@ int - setgroups (size_t n, const gid_t *groups) - { - #if __ASSUME_32BITUIDS > 0 -- return INLINE_SYSCALL (setgroups32, 2, n, CHECK_N (groups, n)); -+ return INLINE_SETXID_SYSCALL (setgroups32, 2, n, CHECK_N (groups, n)); - #else - if (n > (size_t) __sysconf (_SC_NGROUPS_MAX)) - { -@@ -62,7 +63,8 @@ setgroups (size_t n, const gid_t *groups - int result; - int saved_errno = errno; - -- result = INLINE_SYSCALL (setgroups32, 2, n, CHECK_N (groups, n)); -+ result = INLINE_SETXID_SYSCALL (setgroups32, 2, n, -+ CHECK_N (groups, n)); - if (result == 0 || errno != ENOSYS) - return result; - -@@ -80,7 +82,8 @@ setgroups (size_t n, const gid_t *groups - } - } - -- return INLINE_SYSCALL (setgroups, 2, n, CHECK_N (kernel_groups, n)); -+ return INLINE_SETXID_SYSCALL (setgroups, 2, n, -+ CHECK_N (kernel_groups, n)); - } - #endif - } -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/setgroups.c -=================================================================== ---- /dev/null -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/setgroups.c -@@ -0,0 +1,37 @@ -+/* Copyright (C) 1997,1998,2000,2002,2004,2006,2011 -+ Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#include -+#include -+#include -+#include -+ -+ -+/* Set the group set for the current user to GROUPS (N of them). For -+ Linux we must convert the array of groups into the format that the -+ kernel expects. */ -+int -+setgroups (size_t n, const gid_t *groups) -+{ -+#ifdef __NR_setgroups32 -+# error "wrong setgroups.c file used" -+#endif -+ return INLINE_SETXID_SYSCALL (setgroups, 2, n, groups); -+} -+libc_hidden_def (setgroups) diff --git a/src/patches/glibc/glibc-rh737778.patch b/src/patches/glibc/glibc-rh737778.patch deleted file mode 100644 index 5d3c131ca4..0000000000 --- a/src/patches/glibc/glibc-rh737778.patch +++ /dev/null @@ -1,122 +0,0 @@ -2011-08-14 Roland McGrath - - * locale/Makefile (locale-CPPFLAGS): Renamed CPPFLAGS-locale-programs. - (locale-CPPFLAGS): New variable; put LOCALEDIR, LOCALE_ALIAS_PATH and - -Iprograms here. - (cppflags-iterator.mk sequence): Use locale-programs in place of nonlib. - (localedef-modules): Add localedef. - (locale-modules): Add locale. - -2011-08-13 Ulrich Drepper - - * intl/l10nflist.c (_nl_normalize_codeset): Make it compile outside - of libc. Make tolower call locale-independent. Optimize a bit by - using isdigit instead of isalnum. - * locale/Makefile (locale-CPPFLAGS): Add -DNOT_IN_libc. - -2011-08-11 Ulrich Drepper - - * intl/l10nflist.c (_nl_make_l10nflist): Use locale-independent - classification. - -Index: glibc-2.12-2-gc4ccff1/intl/l10nflist.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/intl/l10nflist.c -+++ glibc-2.12-2-gc4ccff1/intl/l10nflist.c -@@ -332,13 +332,18 @@ _nl_normalize_codeset (codeset, name_len - char *retval; - char *wp; - size_t cnt; -+#ifdef NOT_IN_libc -+ locale_t locale = newlocale (0, "C", NULL); -+#else -+# define locale _nl_C_locobj_ptr -+#endif - - for (cnt = 0; cnt < name_len; ++cnt) -- if (isalnum ((unsigned char) codeset[cnt])) -+ if (__isalnum_l ((unsigned char) codeset[cnt], locale)) - { - ++len; - -- if (isalpha ((unsigned char) codeset[cnt])) -+ if (! __isdigit_l ((unsigned char) codeset[cnt], locale)) - only_digit = 0; - } - -@@ -346,15 +351,14 @@ _nl_normalize_codeset (codeset, name_len - - if (retval != NULL) - { -+ wp = retval; - if (only_digit) -- wp = stpcpy (retval, "iso"); -- else -- wp = retval; -+ wp = stpcpy (wp, "iso"); - - for (cnt = 0; cnt < name_len; ++cnt) -- if (isalpha ((unsigned char) codeset[cnt])) -- *wp++ = tolower ((unsigned char) codeset[cnt]); -- else if (isdigit ((unsigned char) codeset[cnt])) -+ if (__isalpha_l ((unsigned char) codeset[cnt], locale)) -+ *wp++ = __tolower_l ((unsigned char) codeset[cnt], locale); -+ else if (__isdigit_l ((unsigned char) codeset[cnt], locale)) - *wp++ = codeset[cnt]; - - *wp = '\0'; -Index: glibc-2.12-2-gc4ccff1/locale/Makefile -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/locale/Makefile -+++ glibc-2.12-2-gc4ccff1/locale/Makefile -@@ -59,10 +59,11 @@ vpath %.c programs ../crypt - vpath %.h programs - vpath %.gperf programs - --localedef-modules := $(categories:%=ld-%) charmap linereader locfile \ -+localedef-modules := localedef $(categories:%=ld-%) \ -+ charmap linereader locfile \ - repertoire locarchive - localedef-aux := md5 --locale-modules := locale-spec -+locale-modules := locale locale-spec - lib-modules := charmap-dir simple-hash xmalloc xstrdup - - -@@ -90,22 +91,27 @@ endif - - localepath = "$(localedir):$(i18ndir)" - --locale-CPPFLAGS := -DLOCALE_PATH='$(localepath)' \ -- -DLOCALEDIR='"$(localedir)"' \ -- -DLOCALE_ALIAS_PATH='"$(msgcatdir)"' \ -- -DCHARMAP_PATH='"$(i18ndir)/charmaps"' \ -- -DREPERTOIREMAP_PATH='"$(i18ndir)/repertoiremaps"' \ -- -DLOCSRCDIR='"$(i18ndir)/locales"' -DHAVE_CONFIG_H \ -- -Iprograms -+# -Iprograms doesn't really belong here, but this gets it at the head -+# of the list instead of the tail, where CPPFLAGS-$(lib) gets added. -+# We need it before the standard -I's to see programs/config.h first. -+locale-CPPFLAGS = -DLOCALEDIR='"$(localedir)"' \ -+ -DLOCALE_ALIAS_PATH='"$(msgcatdir)"' \ -+ -Iprograms -+ -+CPPFLAGS-locale-programs = -DLOCALE_PATH='$(localepath)' \ -+ -DCHARMAP_PATH='"$(i18ndir)/charmaps"' \ -+ -DREPERTOIREMAP_PATH='"$(i18ndir)/repertoiremaps"' \ -+ -DLOCSRCDIR='"$(i18ndir)/locales"' \ -+ -DHAVE_CONFIG_H -DNOT_IN_libc - - CFLAGS-charmap.c = -Wno-write-strings -Wno-char-subscripts - CFLAGS-locfile.c = -Wno-write-strings -Wno-char-subscripts - CFLAGS-charmap-dir.c = -Wno-write-strings - --# This makes sure -DNOT_IN_libc is passed for all these modules. -+# This makes sure -DNOT_IN_libc et al are passed for all these modules. - cpp-srcs-left := $(addsuffix .c,$(localedef-modules) $(localedef-aux) \ - $(locale-modules) $(lib-modules)) --lib := nonlib -+lib := locale-programs - include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) - - # Depend on libc.so so a DT_NEEDED is generated in the shared objects. diff --git a/src/patches/glibc/glibc-rh738665.patch b/src/patches/glibc/glibc-rh738665.patch deleted file mode 100644 index 1eea554e8a..0000000000 --- a/src/patches/glibc/glibc-rh738665.patch +++ /dev/null @@ -1,149 +0,0 @@ -2011-09-15 Andreas Schwab - - * sysdeps/pthread/list.h: Define only list_t if __need_list_t is - defined. - (list_add): Add atomic_write_barrier. - * descr.h: Define __need_list_t before including . - * nptl-init.c: Include - * allocatestack.c: Likewise. - -2011-09-15 Andreas Schwab - - * thread_dbP.h: Include - -Index: glibc-2.12-2-gc4ccff1/nptl/allocatestack.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/allocatestack.c -+++ glibc-2.12-2-gc4ccff1/nptl/allocatestack.c -@@ -27,6 +27,7 @@ - #include - #include - #include -+#include - #include - #include - -Index: glibc-2.12-2-gc4ccff1/nptl/descr.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/descr.h -+++ glibc-2.12-2-gc4ccff1/nptl/descr.h -@@ -26,6 +26,7 @@ - #include - #include - #include -+#define __need_list_t - #include - #include - #include -Index: glibc-2.12-2-gc4ccff1/nptl/nptl-init.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/nptl-init.c -+++ glibc-2.12-2-gc4ccff1/nptl/nptl-init.c -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - #include - #include - #include -Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/pthread/list.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/pthread/list.h -+++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/pthread/list.h -@@ -18,27 +18,39 @@ - 02111-1307 USA. */ - - #ifndef _LIST_H --#define _LIST_H 1 -+ -+#ifndef __need_list_t -+# define _LIST_H 1 -+#endif - - /* The definitions of this file are adopted from those which can be - found in the Linux kernel headers to enable people familiar with - the latter find their way in these sources as well. */ - - -+#if defined __need_list_t || defined _LIST_H -+# ifndef __list_t_defined -+# define __list_t_defined - /* Basic type for the double-link list. */ - typedef struct list_head - { - struct list_head *next; - struct list_head *prev; - } list_t; -+# endif -+# undef __need_list_t -+#endif -+ -+#ifdef _LIST_H - -+# include - - /* Define a variable with the head and tail of the list. */ --#define LIST_HEAD(name) \ -+# define LIST_HEAD(name) \ - list_t name = { &(name), &(name) } - - /* Initialize a new list head. */ --#define INIT_LIST_HEAD(ptr) \ -+# define INIT_LIST_HEAD(ptr) \ - (ptr)->next = (ptr)->prev = (ptr) - - -@@ -49,6 +61,7 @@ list_add (list_t *newp, list_t *head) - newp->next = head->next; - newp->prev = head; - head->next->prev = newp; -+ atomic_write_barrier (); - head->next = newp; - } - -@@ -78,26 +91,28 @@ list_splice (list_t *add, list_t *head) - - - /* Get typed element from list at a given position. */ --#define list_entry(ptr, type, member) \ -+# define list_entry(ptr, type, member) \ - ((type *) ((char *) (ptr) - (unsigned long) (&((type *) 0)->member))) - - - - /* Iterate forward over the elements of the list. */ --#define list_for_each(pos, head) \ -+# define list_for_each(pos, head) \ - for (pos = (head)->next; pos != (head); pos = pos->next) - - - /* Iterate forward over the elements of the list. */ --#define list_for_each_prev(pos, head) \ -+# define list_for_each_prev(pos, head) \ - for (pos = (head)->prev; pos != (head); pos = pos->prev) - - - /* Iterate backwards over the elements list. The list elements can be - removed from the list while doing this. */ --#define list_for_each_prev_safe(pos, p, head) \ -+# define list_for_each_prev_safe(pos, p, head) \ - for (pos = (head)->prev, p = pos->prev; \ - pos != (head); \ - pos = p, p = pos->prev) - -+#endif /* _LIST_H */ -+ - #endif /* list.h */ -Index: glibc-2.12-2-gc4ccff1/nptl_db/thread_dbP.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nptl_db/thread_dbP.h -+++ glibc-2.12-2-gc4ccff1/nptl_db/thread_dbP.h -@@ -29,6 +29,7 @@ - #include "proc_service.h" - #include "thread_db.h" - #include "../nptl/pthreadP.h" /* This is for *_BITMASK only. */ -+#include - - /* Indeces for the symbol names. */ - enum diff --git a/src/patches/glibc/glibc-rh738763.patch b/src/patches/glibc/glibc-rh738763.patch deleted file mode 100644 index 728464d2a3..0000000000 --- a/src/patches/glibc/glibc-rh738763.patch +++ /dev/null @@ -1,17 +0,0 @@ -2011-09-15 Ulrich Drepper - - * sysdeps/unix/sysv/linux/bits/in.h (IP_MULTICAST_ALL): Define. - Patch mostly by Neil Horman . - -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/bits/in.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/bits/in.h -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/bits/in.h -@@ -70,6 +70,7 @@ - #define IP_XFRM_POLICY 17 - #define IP_PASSSEC 18 - #define IP_TRANSPARENT 19 -+#define IP_MULTICAST_ALL 49 /* bool */ - - /* TProxy original addresses */ - #define IP_ORIGDSTADDR 20 diff --git a/src/patches/glibc/glibc-rh739184.patch b/src/patches/glibc/glibc-rh739184.patch deleted file mode 100644 index cf122465af..0000000000 --- a/src/patches/glibc/glibc-rh739184.patch +++ /dev/null @@ -1,18 +0,0 @@ -2010-06-10 Andreas Schwab - - * sysdeps/unix/sysv/linux/getpagesize.c: Don't assume AT_PAGESIZE - is always available. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getpagesize.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/getpagesize.c -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getpagesize.c -@@ -28,7 +28,7 @@ - int - __getpagesize () - { --#ifdef __ASSUME_AT_PAGESIZE -+#if 0 && defined __ASSUME_AT_PAGESIZE - assert (GLRO(dl_pagesize) != 0); - return GLRO(dl_pagesize); - #else diff --git a/src/patches/glibc/glibc-rh739971.patch b/src/patches/glibc/glibc-rh739971.patch deleted file mode 100644 index 960c192dc0..0000000000 --- a/src/patches/glibc/glibc-rh739971.patch +++ /dev/null @@ -1,44 +0,0 @@ -commit 32c76b63be605d12314e0c6ac2bd702c883d1423 -Author: Andreas Schwab -Date: Mon Sep 26 17:49:14 2011 +0200 - - Correctly reparse group line after enlarging the buffer - -diff --git a/nss/nss_files/files-initgroups.c b/nss/nss_files/files-initgroups.c -index 113abf2..c343b35 100644 ---- a/nss/nss_files/files-initgroups.c -+++ b/nss/nss_files/files-initgroups.c -@@ -52,8 +52,10 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start, - gid_t *groups = *groupsp; - - /* We have to iterate over the entire file. */ -- while (!feof_unlocked (stream)) -+ while (1) - { -+ fpos_t pos; -+ fgetpos (stream, &pos); - ssize_t n = getline (&line, &linelen, stream); - if (n < 0) - { -@@ -64,9 +66,8 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start, - } - - struct group grp; -- int res; -- while ((res = _nss_files_parse_grent (line, &grp, buffer, buflen, -- errnop)) == -1) -+ int res = _nss_files_parse_grent (line, &grp, buffer, buflen, errnop); -+ if (res == -1) - { - size_t newbuflen = 2 * buflen; - if (buffer_use_malloc || ! __libc_use_alloca (buflen + newbuflen)) -@@ -85,6 +86,9 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start, - } - else - buffer = extend_alloca (buffer, buflen, newbuflen); -+ /* Reread current line, the parser has clobbered it. */ -+ fsetpos (stream, &pos); -+ continue; - } - - if (res > 0 && grp.gr_gid != group) diff --git a/src/patches/glibc/glibc-rh740506-2.patch b/src/patches/glibc/glibc-rh740506-2.patch deleted file mode 100644 index adefea04bb..0000000000 --- a/src/patches/glibc/glibc-rh740506-2.patch +++ /dev/null @@ -1,35 +0,0 @@ - * malloc/arena.c (arena_get2): Avoid unnecessarily - retrieving #cpus from /proc. - * malloc/malloc.c (mALLOPt): Clamp arena_test based on - the value of arena_max. - -diff --git a/malloc/arena.c b/malloc/arena.c -index cb8548b..00f1da5 100644 ---- a/malloc/arena.c -+++ b/malloc/arena.c -@@ -828,7 +828,7 @@ arena_get2(mstate a_tsd, size_t size) - { - if (mp_.arena_max != 0) - narenas_limit = mp_.arena_max; -- else -+ else if (narenas > mp_.arena_test) - { - int n = __get_nprocs (); - -diff --git a/malloc/malloc.c b/malloc/malloc.c -index 8608083..f8d32da 100644 ---- a/malloc/malloc.c -+++ b/malloc/malloc.c -@@ -6134,6 +6134,12 @@ int mALLOPt(param_number, value) int par - break; - #endif - } -+#ifdef PER_THREAD -+ /* Clamp ARENA_TEST from ARENA_MAX to avoid creating too many -+ arenas. */ -+ if (mp_.arena_max > 0 && mp_.arena_max <= mp_.arena_test) -+ mp_.arena_test = mp_.arena_max - 1; -+#endif - (void)mutex_unlock(&av->mutex); - return res; - } diff --git a/src/patches/glibc/glibc-rh740506.patch b/src/patches/glibc/glibc-rh740506.patch deleted file mode 100644 index 6c74ccf100..0000000000 --- a/src/patches/glibc/glibc-rh740506.patch +++ /dev/null @@ -1,132 +0,0 @@ -2011-11-14 Andreas Schwab - - * malloc/arena.c (arena_get2): Don't call reused_arena when - _int_new_arena failed. - -2011-11-10 Andreas Schwab - - * malloc/arena.c (_int_new_arena): Don't increment narenas. - (reused_arena): Don't check arena limit. - (arena_get2): Atomically check arena limit. - -diff --git a/malloc/arena.c b/malloc/arena.c -index 9114fd2..042cac8 100644 ---- a/malloc/arena.c -+++ b/malloc/arena.c -@@ -747,8 +747,6 @@ _int_new_arena(size_t size) - main_arena.next = a; - - #ifdef PER_THREAD -- ++narenas; -- - (void)mutex_unlock(&list_lock); - #endif - -@@ -786,30 +784,6 @@ get_free_list (void) - static mstate - reused_arena (void) - { -- if (narenas <= mp_.arena_test) -- return NULL; -- -- static int narenas_limit; -- if (narenas_limit == 0) -- { -- if (mp_.arena_max != 0) -- narenas_limit = mp_.arena_max; -- else -- { -- int n = __get_nprocs (); -- -- if (n >= 1) -- narenas_limit = NARENAS_FROM_NCORES (n); -- else -- /* We have no information about the system. Assume two -- cores. */ -- narenas_limit = NARENAS_FROM_NCORES (2); -- } -- } -- -- if (narenas < narenas_limit) -- return NULL; -- - mstate result; - static mstate next_to_use; - if (next_to_use == NULL) -@@ -844,10 +818,41 @@ arena_get2(mstate a_tsd, size_t size) - mstate a; - - #ifdef PER_THREAD -- if ((a = get_free_list ()) == NULL -- && (a = reused_arena ()) == NULL) -- /* Nothing immediately available, so generate a new arena. */ -- a = _int_new_arena(size); -+ static size_t narenas_limit; -+ -+ a = get_free_list (); -+ if (a == NULL) -+ { -+ /* Nothing immediately available, so generate a new arena. */ -+ if (narenas_limit == 0) -+ { -+ if (mp_.arena_max != 0) -+ narenas_limit = mp_.arena_max; -+ else -+ { -+ int n = __get_nprocs (); -+ -+ if (n >= 1) -+ narenas_limit = NARENAS_FROM_NCORES (n); -+ else -+ /* We have no information about the system. Assume two -+ cores. */ -+ narenas_limit = NARENAS_FROM_NCORES (2); -+ } -+ } -+ repeat:; -+ size_t n = narenas; -+ if (__builtin_expect (n <= mp_.arena_test || n < narenas_limit, 0)) -+ { -+ if (catomic_compare_and_exchange_bool_acq(&narenas, n + 1, n)) -+ goto repeat; -+ a = _int_new_arena (size); -+ if (__builtin_expect (a != NULL, 1)) -+ return a; -+ catomic_decrement(&narenas); -+ } -+ a = reused_arena (); -+ } - #else - if(!a_tsd) - a = a_tsd = &main_arena; - -commit a5fb313cb7b7e692fd4684916aaa98e03ec7e8b6 -Author: Andreas Schwab -Date: Mon Nov 14 11:41:52 2011 +0100 - - Don't call reused_arena when _int_new_arena failed - -diff --git a/malloc/arena.c b/malloc/arena.c -index 042cac8..cb8548b 100644 ---- a/malloc/arena.c -+++ b/malloc/arena.c -@@ -844,14 +844,14 @@ arena_get2(mstate a_tsd, size_t size) - size_t n = narenas; - if (__builtin_expect (n <= mp_.arena_test || n < narenas_limit, 0)) - { -- if (catomic_compare_and_exchange_bool_acq(&narenas, n + 1, n)) -+ if (catomic_compare_and_exchange_bool_acq (&narenas, n + 1, n)) - goto repeat; - a = _int_new_arena (size); -- if (__builtin_expect (a != NULL, 1)) -- return a; -- catomic_decrement(&narenas); -+ if (__builtin_expect (a == NULL, 0)) -+ catomic_decrement (&narenas); - } -- a = reused_arena (); -+ else -+ a = reused_arena (); - } - #else - if(!a_tsd) diff --git a/src/patches/glibc/glibc-rh749188.patch b/src/patches/glibc/glibc-rh749188.patch deleted file mode 100644 index 43157cd1a3..0000000000 --- a/src/patches/glibc/glibc-rh749188.patch +++ /dev/null @@ -1,32 +0,0 @@ -commit 0e8131bb32cf026c87baeacb7abf2a9bdbbc4953 -Author: Andreas Schwab -Date: Sun May 8 21:48:03 2011 -0400 - - Remove .UTF-8 suffix from locale names when it is the only supported codeset - -diff --git a/localedata/SUPPORTED b/localedata/SUPPORTED -index d665961..e952c17 100644 ---- a/localedata/SUPPORTED -+++ b/localedata/SUPPORTED -@@ -46,8 +46,8 @@ ar_TN.UTF-8/UTF-8 \ - ar_TN/ISO-8859-6 \ - ar_YE.UTF-8/UTF-8 \ - ar_YE/ISO-8859-6 \ --az_AZ.UTF-8/UTF-8 \ --as_IN.UTF-8/UTF-8 \ -+az_AZ/UTF-8 \ -+as_IN/UTF-8 \ - ast_ES.UTF-8/UTF-8 \ - ast_ES/ISO-8859-15 \ - be_BY.UTF-8/UTF-8 \ -@@ -385,8 +385,8 @@ tr_CY/ISO-8859-9 \ - tr_TR.UTF-8/UTF-8 \ - tr_TR/ISO-8859-9 \ - ts_ZA/UTF-8 \ --tt_RU.UTF-8/UTF-8 \ --tt_RU.UTF-8@iqtelif/UTF-8 \ -+tt_RU/UTF-8 \ -+tt_RU@iqtelif/UTF-8 \ - ug_CN/UTF-8 \ - uk_UA.UTF-8/UTF-8 \ - uk_UA/KOI8-U \ diff --git a/src/patches/glibc/glibc-rh750531.patch b/src/patches/glibc/glibc-rh750531.patch deleted file mode 100644 index a53e770ed1..0000000000 --- a/src/patches/glibc/glibc-rh750531.patch +++ /dev/null @@ -1,122 +0,0 @@ -commit 69da074d7adfab7b57004a0dea9403a928e310a5 -Author: Ulrich Drepper -Date: Wed Nov 10 02:38:35 2010 -0500 - - Fix warnings in __bswap_16. - -diff --git a/sysdeps/i386/bits/byteswap.h b/sysdeps/i386/bits/byteswap.h -index 1f3fc5e..c246ae8 100644 ---- a/sysdeps/i386/bits/byteswap.h -+++ b/sysdeps/i386/bits/byteswap.h -@@ -1,5 +1,5 @@ - /* Macros to swap the order of bytes in integer values. -- Copyright (C) 1997, 1998, 2000, 2002, 2003, 2006, 2007, 2008 -+ Copyright (C) 1997, 1998, 2000, 2002, 2003, 2006, 2007, 2008, 2010 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - -@@ -27,26 +27,27 @@ - - /* Swap bytes in 16 bit value. */ - #define __bswap_constant_16(x) \ -- ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) -+ ((unsigned short int) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))) - - #ifdef __GNUC__ - # if __GNUC__ >= 2 - # define __bswap_16(x) \ - (__extension__ \ -- ({ register unsigned short int __v, __x = (x); \ -+ ({ register unsigned short int __v, __x = (unsigned short int) (x); \ - if (__builtin_constant_p (__x)) \ - __v = __bswap_constant_16 (__x); \ - else \ - __asm__ ("rorw $8, %w0" \ - : "=r" (__v) \ -- : "0" (__x) \ -- : "cc"); \ -+ : "0" (__x) \ -+ : "cc"); \ - __v; })) - # else - /* This is better than nothing. */ - # define __bswap_16(x) \ - (__extension__ \ -- ({ register unsigned short int __x = (x); __bswap_constant_16 (__x); })) -+ ({ register unsigned short int __x = (unsigned short int) (x); \ -+ __bswap_constant_16 (__x); })) - # endif - #else - static __inline unsigned short int -@@ -122,7 +123,7 @@ __bswap_32 (unsigned int __bsx) - (__extension__ \ - ({ union { __extension__ unsigned long long int __ll; \ - unsigned long int __l[2]; } __w, __r; \ -- if (__builtin_constant_p (x)) \ -+ if (__builtin_constant_p (x)) \ - __r.__ll = __bswap_constant_64 (x); \ - else \ - { \ -diff --git a/sysdeps/x86_64/bits/byteswap.h b/sysdeps/x86_64/bits/byteswap.h -index 08b38e8..e350fb8 100644 ---- a/sysdeps/x86_64/bits/byteswap.h -+++ b/sysdeps/x86_64/bits/byteswap.h -@@ -1,5 +1,5 @@ - /* Macros to swap the order of bytes in integer values. -- Copyright (C) 1997, 1998, 2000, 2002, 2003, 2007, 2008 -+ Copyright (C) 1997, 1998, 2000, 2002, 2003, 2007, 2008, 2010 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - -@@ -29,12 +29,12 @@ - - /* Swap bytes in 16 bit value. */ - #define __bswap_constant_16(x) \ -- ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) -+ ((unsigned short int) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))) - - #if defined __GNUC__ && __GNUC__ >= 2 - # define __bswap_16(x) \ - (__extension__ \ -- ({ register unsigned short int __v, __x = (x); \ -+ ({ register unsigned short int __v, __x = (unsigned short int) (x); \ - if (__builtin_constant_p (__x)) \ - __v = __bswap_constant_16 (__x); \ - else \ -@@ -47,7 +47,8 @@ - /* This is better than nothing. */ - # define __bswap_16(x) \ - (__extension__ \ -- ({ register unsigned short int __x = (x); __bswap_constant_16 (__x); })) -+ ({ register unsigned short int __x = (unsigned short int) (x); \ -+ __bswap_constant_16 (__x); })) - #endif - - -@@ -120,16 +121,16 @@ - # define __bswap_64(x) \ - (__extension__ \ - ({ union { __extension__ unsigned long long int __ll; \ -- unsigned int __l[2]; } __w, __r; \ -- if (__builtin_constant_p (x)) \ -- __r.__ll = __bswap_constant_64 (x); \ -- else \ -- { \ -- __w.__ll = (x); \ -- __r.__l[0] = __bswap_32 (__w.__l[1]); \ -- __r.__l[1] = __bswap_32 (__w.__l[0]); \ -- } \ -- __r.__ll; })) -+ unsigned int __l[2]; } __w, __r; \ -+ if (__builtin_constant_p (x)) \ -+ __r.__ll = __bswap_constant_64 (x); \ -+ else \ -+ { \ -+ __w.__ll = (x); \ -+ __r.__l[0] = __bswap_32 (__w.__l[1]); \ -+ __r.__l[1] = __bswap_32 (__w.__l[0]); \ -+ } \ -+ __r.__ll; })) - # endif - #endif - diff --git a/src/patches/glibc/glibc-rh751750.patch b/src/patches/glibc/glibc-rh751750.patch deleted file mode 100644 index 6f9dd120de..0000000000 --- a/src/patches/glibc/glibc-rh751750.patch +++ /dev/null @@ -1,28 +0,0 @@ -commit 7583a88d1c7170caad26966bcea8bfc2c92093ba -Author: Andreas Schwab -Date: Mon Nov 7 15:07:31 2011 +0100 - - Fix locking in _IO_flush_all_lockp - -diff --git a/libio/genops.c b/libio/genops.c -index 5d21c42..bb40c34 100644 ---- a/libio/genops.c -+++ b/libio/genops.c -@@ -826,7 +826,7 @@ _IO_flush_all_lockp (int do_lock) - int last_stamp; - - #ifdef _IO_MTSAFE_IO -- _IO_cleanup_region_start_noarg (flush_cleanup); -+ __libc_cleanup_region_start (do_lock, flush_cleanup, 0); - if (do_lock) - _IO_lock_lock (list_all_lock); - #endif -@@ -866,7 +866,7 @@ _IO_flush_all_lockp (int do_lock) - #ifdef _IO_MTSAFE_IO - if (do_lock) - _IO_lock_unlock (list_all_lock); -- _IO_cleanup_region_end (0); -+ __libc_cleanup_region_end (0); - #endif - - return result; diff --git a/src/patches/glibc/glibc-rh752122.patch b/src/patches/glibc/glibc-rh752122.patch deleted file mode 100644 index 0176dc9a7e..0000000000 --- a/src/patches/glibc/glibc-rh752122.patch +++ /dev/null @@ -1,260 +0,0 @@ -2011-07-24 H.J. Lu - - * sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Simplify - AVX check. - -2011-08-20 Ulrich Drepper - - * sysdeps/x86_64/dl-trampoline.h: If MORE_CODE is defined, restore - the CFI state in the end. - * sysdeps/x86_64/dl-trampoline.S: Define MORE_CODE before first - inclusion of dl-trampoline.h. - Based on a patch by Jiri Olsa . - -2011-07-23 Ulrich Drepper - - * sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Fix one more - typo. - (_dl_x86_64_save_sse): Likewise. - -2011-07-22 Ulrich Drepper - - * sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Fix test for - OSXSAVE. - (_dl_x86_64_save_sse): Likewise. - -2011-07-21 Andreas Schwab - - * sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Fix last - change. - (_dl_x86_64_save_sse): Use correct AVX check. - -2011-07-20 Ulrich Drepper - - [BZ #13007] - * sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): More complete - check for AVX enablement so that we don't crash with old kernels and - new hardware. - * elf/tst-audit4.c: Add same checks here. - * elf/tst-audit6.c: Likewise. - -Index: glibc-2.12-2-gc4ccff1/elf/tst-audit4.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/tst-audit4.c -+++ glibc-2.12-2-gc4ccff1/elf/tst-audit4.c -@@ -6,16 +6,30 @@ - #include - #include - -+ -+static int -+avx_enabled (void) -+{ -+ unsigned int eax, ebx, ecx, edx; -+ -+ if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 -+ || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE)) -+ return 0; -+ -+ /* Check the OS has AVX and SSE saving enabled. */ -+ asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0)); -+ -+ return (eax & 6) == 6; -+} -+ -+ - extern __m256i audit_test (__m256i, __m256i, __m256i, __m256i, - __m256i, __m256i, __m256i, __m256i); - int - main (void) - { -- unsigned int eax, ebx, ecx, edx; -- - /* Run AVX test only if AVX is supported. */ -- if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) -- && (ecx & bit_AVX)) -+ if (avx_enabled ()) - { - __m256i ymm = _mm256_setzero_si256 (); - __m256i ret = audit_test (ymm, ymm, ymm, ymm, ymm, ymm, ymm, ymm); -Index: glibc-2.12-2-gc4ccff1/elf/tst-audit6.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/elf/tst-audit6.c -+++ glibc-2.12-2-gc4ccff1/elf/tst-audit6.c -@@ -8,14 +8,28 @@ - extern __m128i audit_test (__m128i, __m128i, __m128i, __m128i, - __m128i, __m128i, __m128i, __m128i); - --int --main (void) -+ -+static int -+avx_enabled (void) - { - unsigned int eax, ebx, ecx, edx; - -+ if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 -+ || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE)) -+ return 0; -+ -+ /* Check the OS has AVX and SSE saving enabled. */ -+ asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0)); -+ -+ return (eax & 6) == 6; -+} -+ -+ -+int -+main (void) -+{ - /* Run AVX test only if AVX is supported. */ -- if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) -- && (ecx & bit_AVX)) -+ if (avx_enabled ()) - { - __m128i xmm = _mm_setzero_si128 (); - __m128i ret = audit_test (xmm, xmm, xmm, xmm, xmm, xmm, xmm, xmm); -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/dl-trampoline.S -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/dl-trampoline.S -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/dl-trampoline.S -@@ -139,24 +139,31 @@ L(have_avx): - movl $1, %eax - cpuid - movq %r11,%rbx # Restore rbx -- movl $1, %eax -- testl $(1 << 28), %ecx -+ xorl %eax, %eax -+ // AVX and XSAVE supported? -+ andl $((1 << 28) | (1 << 27)), %ecx -+ cmpl $((1 << 28) | (1 << 27)), %ecx - jne 2f -- negl %eax --2: movl %eax, L(have_avx)(%rip) -+ xorl %ecx, %ecx -+ // Get XFEATURE_ENABLED_MASK -+ xgetbv -+ andl $0x6, %eax -+2: subl $0x5, %eax -+ movl %eax, L(have_avx)(%rip) - cmpl $0, %eax - - 1: js L(no_avx) - - # define RESTORE_AVX -+# define MORE_CODE - # include "dl-trampoline.h" - - .align 16 - L(no_avx): - # endif - --# undef RESTORE_AVX --# include "dl-trampoline.h" -+# undef RESTORE_AVX -+# include "dl-trampoline.h" - - cfi_endproc - .size _dl_runtime_profile, .-_dl_runtime_profile -@@ -176,11 +183,20 @@ _dl_x86_64_save_sse: - movl $1, %eax - cpuid - movq %r11,%rbx # Restore rbx -- movl $1, %eax -- testl $(1 << 28), %ecx -+ xorl %eax, %eax -+ // AVX and XSAVE supported? -+ andl $((1 << 28) | (1 << 27)), %ecx -+ cmpl $((1 << 28) | (1 << 27)), %ecx - jne 2f -- negl %eax --2: movl %eax, L(have_avx)(%rip) -+ xorl %ecx, %ecx -+ // Get XFEATURE_ENABLED_MASK -+ xgetbv -+ andl $0x6, %eax -+ cmpl $0x6, %eax -+ // Nonzero if SSE and AVX state saving is enabled. -+ sete %al -+2: leal -1(%eax,%eax), %eax -+ movl %eax, L(have_avx)(%rip) - cmpl $0, %eax - - 1: js L(no_avx5) -Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/dl-trampoline.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/dl-trampoline.h -+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/dl-trampoline.h -@@ -195,14 +195,14 @@ - _dl_call_pltexit. The La_x86_64_regs is being pointed by rsp now, - so we just need to allocate the sizeof(La_x86_64_retval) space on - the stack, since the alignment has already been taken care of. */ --# ifdef RESTORE_AVX -+#ifdef RESTORE_AVX - /* sizeof(La_x86_64_retval). Need extra space for 2 SSE - registers to detect if xmm0/xmm1 registers are changed - by audit module. */ - subq $(LRV_SIZE + XMM_SIZE*2), %rsp --# else -+#else - subq $LRV_SIZE, %rsp # sizeof(La_x86_64_retval) --# endif -+#endif - movq %rsp, %rcx # La_x86_64_retval argument to %rcx. - - /* Fill in the La_x86_64_retval structure. */ -@@ -212,7 +212,7 @@ - movaps %xmm0, LRV_XMM0_OFFSET(%rcx) - movaps %xmm1, LRV_XMM1_OFFSET(%rcx) - --# ifdef RESTORE_AVX -+#ifdef RESTORE_AVX - /* This is to support AVX audit modules. */ - vmovdqu %ymm0, LRV_VECTOR0_OFFSET(%rcx) - vmovdqu %ymm1, LRV_VECTOR1_OFFSET(%rcx) -@@ -221,14 +221,14 @@ - by audit module. */ - vmovdqa %xmm0, (LRV_SIZE)(%rcx) - vmovdqa %xmm1, (LRV_SIZE + XMM_SIZE)(%rcx) --# endif -+#endif - - fstpt LRV_ST0_OFFSET(%rcx) - fstpt LRV_ST1_OFFSET(%rcx) - - movq 24(%rbx), %rdx # La_x86_64_regs argument to %rdx. - movq 40(%rbx), %rsi # Copy args pushed by PLT in register. -- movq 32(%rbx), %rdi # %rdi: link_map, %rsi: reloc_index -+ movq 32(%rbx), %rdi # %rdi: link_map, %rsi: reloc_index - call _dl_call_pltexit - - /* Restore return registers. */ -@@ -238,7 +238,7 @@ - movaps LRV_XMM0_OFFSET(%rsp), %xmm0 - movaps LRV_XMM1_OFFSET(%rsp), %xmm1 - --# ifdef RESTORE_AVX -+#ifdef RESTORE_AVX - /* Check if xmm0/xmm1 registers are changed by audit module. */ - vpcmpeqq (LRV_SIZE)(%rsp), %xmm0, %xmm2 - vpmovmskb %xmm2, %esi -@@ -253,7 +253,7 @@ - vmovdqu LRV_VECTOR1_OFFSET(%rsp), %ymm1 - - 1: --# endif -+#endif - - fldt LRV_ST1_OFFSET(%rsp) - fldt LRV_ST0_OFFSET(%rsp) -@@ -267,3 +267,10 @@ - # (eats the reloc index and link_map) - cfi_adjust_cfa_offset(-48) - retq -+ -+#ifdef MORE_CODE -+ cfi_adjust_cfa_offset(48) -+ cfi_rel_offset(%rbx, 0) -+ cfi_def_cfa_register(%rbx) -+# undef MORE_CODE -+#endif diff --git a/src/patches/glibc/glibc-rh757888.patch b/src/patches/glibc/glibc-rh757888.patch deleted file mode 100644 index 721d4a481d..0000000000 --- a/src/patches/glibc/glibc-rh757888.patch +++ /dev/null @@ -1,225 +0,0 @@ -commit f3a6cc0a560a17f32a3e90d2f20501a53cab6058 -Author: Andreas Schwab -Date: Tue Nov 29 10:52:22 2011 +0100 - - Fix access after end of search string in regex matcher - -diff --git a/locale/weight.h b/locale/weight.h -index dc70a00..967e176 100644 ---- a/locale/weight.h -+++ b/locale/weight.h -@@ -1,4 +1,4 @@ --/* Copyright (C) 1996,1997,1998,1999,2000,2003,2004 Free Software Foundation, Inc. -+/* Copyright (C) 1996,1997,1998,1999,2000,2003,2004,2011 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Written by Ulrich Drepper, . - -@@ -20,7 +20,7 @@ - /* Find index of weight. */ - auto inline int32_t - __attribute ((always_inline)) --findidx (const unsigned char **cpp) -+findidx (const unsigned char **cpp, size_t len) - { - int_fast32_t i = table[*(*cpp)++]; - const unsigned char *cp; -@@ -34,6 +34,7 @@ findidx (const unsigned char **cpp) - Search for the correct one. */ - cp = &extra[-i]; - usrc = *cpp; -+ --len; - while (1) - { - size_t nhere; -@@ -56,7 +57,7 @@ findidx (const unsigned char **cpp) - already. */ - size_t cnt; - -- for (cnt = 0; cnt < nhere; ++cnt) -+ for (cnt = 0; cnt < nhere && cnt < len; ++cnt) - if (cp[cnt] != usrc[cnt]) - break; - -@@ -79,13 +80,13 @@ findidx (const unsigned char **cpp) - size_t cnt; - size_t offset = 0; - -- for (cnt = 0; cnt < nhere; ++cnt) -+ for (cnt = 0; cnt < nhere && cnt < len; ++cnt) - if (cp[cnt] != usrc[cnt]) - break; - - if (cnt != nhere) - { -- if (cp[cnt] > usrc[cnt]) -+ if (cnt == len || cp[cnt] > usrc[cnt]) - { - /* Cannot be in this range. */ - cp += 2 * nhere; -diff --git a/locale/weightwc.h b/locale/weightwc.h -index 9ea1126..7862091 100644 ---- a/locale/weightwc.h -+++ b/locale/weightwc.h -@@ -1,4 +1,4 @@ --/* Copyright (C) 1996-2001,2003,2004,2005,2007 Free Software Foundation, Inc. -+/* Copyright (C) 1996-2001,2003,2004,2005,2007,2011 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Written by Ulrich Drepper, . - -@@ -20,7 +20,7 @@ - /* Find index of weight. */ - auto inline int32_t - __attribute ((always_inline)) --findidx (const wint_t **cpp) -+findidx (const wint_t **cpp, size_t len) - { - wint_t ch = *(*cpp)++; - int32_t i = __collidx_table_lookup ((const char *) table, ch); -@@ -32,6 +32,7 @@ findidx (const wint_t **cpp) - /* Oh well, more than one sequence starting with this byte. - Search for the correct one. */ - const int32_t *cp = (const int32_t *) &extra[-i]; -+ --len; - while (1) - { - size_t nhere; -@@ -54,7 +55,7 @@ findidx (const wint_t **cpp) - already. */ - size_t cnt; - -- for (cnt = 0; cnt < nhere; ++cnt) -+ for (cnt = 0; cnt < nhere && cnt < len; ++cnt) - if (cp[cnt] != usrc[cnt]) - break; - -@@ -75,7 +76,7 @@ findidx (const wint_t **cpp) - size_t cnt; - size_t offset; - -- for (cnt = 0; cnt < nhere - 1; ++cnt) -+ for (cnt = 0; cnt < nhere - 1 && cnt < len; ++cnt) - if (cp[cnt] != usrc[cnt]) - break; - -diff --git a/posix/fnmatch_loop.c b/posix/fnmatch_loop.c -index 18a6667..72bd3ee 100644 ---- a/posix/fnmatch_loop.c -+++ b/posix/fnmatch_loop.c -@@ -412,7 +412,7 @@ FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used) - _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); - # endif - -- idx = findidx (&cp); -+ idx = findidx (&cp, 1); - if (idx != 0) - { - /* We found a table entry. Now see whether the -@@ -422,7 +422,7 @@ FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used) - int32_t idx2; - const UCHAR *np = (const UCHAR *) n; - -- idx2 = findidx (&np); -+ idx2 = findidx (&np, string_end - n); - if (idx2 != 0 - && (idx >> 24) == (idx2 >> 24) - && len == weights[idx2 & 0xffffff]) -diff --git a/posix/regcomp.c b/posix/regcomp.c -index b238c08..34ee845 100644 ---- a/posix/regcomp.c -+++ b/posix/regcomp.c -@@ -1,5 +1,5 @@ - /* Extended regular expression matching and search library. -- Copyright (C) 2002-2007,2009,2010 Free Software Foundation, Inc. -+ Copyright (C) 2002-2007,2009,2010,2011 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Isamu Hasegawa . - -@@ -3409,19 +3409,18 @@ build_equiv_class (bitset_t sbcset, const unsigned char *name) - _NL_COLLATE_EXTRAMB); - indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, - _NL_COLLATE_INDIRECTMB); -- idx1 = findidx (&cp); -- if (BE (idx1 == 0 || cp < name + strlen ((const char *) name), 0)) -+ idx1 = findidx (&cp, -1); -+ if (BE (idx1 == 0 || *cp != '\0', 0)) - /* This isn't a valid character. */ - return REG_ECOLLATE; - - /* Build single byte matcing table for this equivalence class. */ -- char_buf[1] = (unsigned char) '\0'; - len = weights[idx1 & 0xffffff]; - for (ch = 0; ch < SBC_MAX; ++ch) - { - char_buf[0] = ch; - cp = char_buf; -- idx2 = findidx (&cp); -+ idx2 = findidx (&cp, 1); - /* - idx2 = table[ch]; - */ - ---- a/posix/regex_internal.h 2011-11-30 12:47:02.706567482 -0700 -+++ a/posix/regex_internal.h 2011-11-30 12:47:32.969558337 -0700 -@@ -756,7 +756,7 @@ - indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, - _NL_COLLATE_INDIRECTMB); - p = pstr->mbs + idx; -- tmp = findidx (&p); -+ tmp = findidx (&p, pstr->len - idx); - return p - pstr->mbs - idx; - } - else -diff --git a/posix/regexec.c b/posix/regexec.c -index 9e0c565..3ea810b 100644 ---- a/posix/regexec.c -+++ b/posix/regexec.c -@@ -3924,7 +3924,7 @@ check_node_accept_bytes (const re_dfa_t *dfa, int node_idx, - _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); - indirect = (const int32_t *) - _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); -- int32_t idx = findidx (&cp); -+ int32_t idx = findidx (&cp, elem_len); - if (idx > 0) - for (i = 0; i < cset->nequiv_classes; ++i) - { -diff --git a/string/strcoll_l.c b/string/strcoll_l.c -index d8d1139..fb77d08 100644 ---- a/string/strcoll_l.c -+++ b/string/strcoll_l.c -@@ -1,4 +1,4 @@ --/* Copyright (C) 1995-1997,2002,2004,2007,2010 Free Software Foundation, Inc. -+/* Copyright (C) 1995-1997,2002,2004,2007,2010,2011 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Written by Ulrich Drepper , 1995. - -@@ -205,7 +205,7 @@ STRCOLL (s1, s2, l) - - while (*us1 != L('\0')) - { -- int32_t tmp = findidx (&us1); -+ int32_t tmp = findidx (&us1, -1); - rule1arr[idx1max] = tmp >> 24; - idx1arr[idx1max] = tmp & 0xffffff; - idx1cnt = idx1max++; -@@ -267,7 +267,7 @@ STRCOLL (s1, s2, l) - - while (*us2 != L('\0')) - { -- int32_t tmp = findidx (&us2); -+ int32_t tmp = findidx (&us2, -1); - rule2arr[idx2max] = tmp >> 24; - idx2arr[idx2max] = tmp & 0xffffff; - idx2cnt = idx2max++; -diff --git a/string/strxfrm_l.c b/string/strxfrm_l.c -index 220253c..b06556d 100644 ---- a/string/strxfrm_l.c -+++ b/string/strxfrm_l.c -@@ -176,7 +176,7 @@ STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n, __locale_t l) - idxmax = 0; - do - { -- int32_t tmp = findidx (&usrc); -+ int32_t tmp = findidx (&usrc, -1); - rulearr[idxmax] = tmp >> 24; - idxarr[idxmax] = tmp & 0xffffff; - diff --git a/src/patches/glibc/glibc-rh766513.patch b/src/patches/glibc/glibc-rh766513.patch deleted file mode 100644 index 3f629b4fcc..0000000000 --- a/src/patches/glibc/glibc-rh766513.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff -rup a/po/ja.po b/po/ja.po ---- a/po/ja.po 2010-05-04 05:27:23.000000000 -0600 -+++ b/po/ja.po 2012-02-07 12:21:03.023806370 -0700 -@@ -3549,8 +3549,8 @@ msgstr "%s: ÉÔÀµ¤Ê¥ª¥×¥·¥ç¥ó¤Ç¤¹ -- %c\n - - #: posix/getopt.c:945 posix/getopt.c:948 - #, c-format --msgid "%s: invalid option -- %c\n" --msgstr "%s: ¥ª¥×¥·¥ç¥ó¤¬°ã¤¤¤Þ¤¹ -- %c\n" -+msgid "%s: invalid option -- '%c'\n" -+msgstr "%s: ¥ª¥×¥·¥ç¥ó¤¬°ã¤¤¤Þ¤¹ -- '%c'\n" - - #: posix/getopt.c:1003 posix/getopt.c:1022 posix/getopt.c:1234 - #: posix/getopt.c:1255 diff --git a/src/patches/glibc/glibc-rh767146.patch b/src/patches/glibc/glibc-rh767146.patch deleted file mode 100644 index 82520620bc..0000000000 --- a/src/patches/glibc/glibc-rh767146.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff -rup a/elf/dl-load.c b/elf/dl-load.c ---- a/elf/dl-load.c 2012-02-03 10:59:58.917870716 -0700 -+++ b/elf/dl-load.c 2012-02-03 11:01:01.796580644 -0700 -@@ -1130,6 +1130,16 @@ _dl_map_object_from_fd (const char *name - = N_("ELF load command address/offset not properly aligned"); - goto call_lose; - } -+ if (__builtin_expect ((ph->p_offset + ph->p_filesz > st.st_size), 0)) -+ { -+ /* If the segment requires zeroing of part of its last -+ page, we'll crash when accessing the unmapped page. -+ There's still a possibility of a race, if the shared -+ object is truncated between the fxstat above and the -+ memset below. */ -+ errstring = N_("ELF load command past end of file"); -+ goto call_lose; -+ } - - c = &loadcmds[nloadcmds++]; - c->mapstart = ph->p_vaddr & ~(GLRO(dl_pagesize) - 1); -Only in b/elf: dl-load.c.orig diff --git a/src/patches/glibc/glibc-rh767693-2.patch b/src/patches/glibc/glibc-rh767693-2.patch deleted file mode 100644 index 4418ac6420..0000000000 --- a/src/patches/glibc/glibc-rh767693-2.patch +++ /dev/null @@ -1,79 +0,0 @@ -Index: glibc-2.5-20061008T1257/sunrpc/svc_tcp.c -=================================================================== ---- glibc-2.5-20061008T1257.orig/sunrpc/svc_tcp.c -+++ glibc-2.5-20061008T1257/sunrpc/svc_tcp.c -@@ -50,6 +50,7 @@ static char sccsid[] = "@(#)svc_tcp.c 1. - #include - #include - #include -+#include - - #ifdef USE_IN_LIBIO - # include -@@ -249,6 +250,11 @@ again: - { - if (errno == EINTR) - goto again; -+ if (errno == EMFILE) -+ { -+ struct timespec ts = { .tv_sec = 0, .tv_nsec = 50000000 }; -+ __nanosleep(&ts , NULL); -+ } - return FALSE; - } - /* -Index: glibc-2.5-20061008T1257/sunrpc/svc_udp.c -=================================================================== ---- glibc-2.5-20061008T1257.orig/sunrpc/svc_udp.c -+++ glibc-2.5-20061008T1257/sunrpc/svc_udp.c -@@ -46,6 +46,7 @@ static char sccsid[] = "@(#)svc_udp.c 1. - #include - #include - #include -+#include - - #ifdef IP_PKTINFO - #include -@@ -277,8 +278,16 @@ again: - (int) su->su_iosz, 0, - (struct sockaddr *) &(xprt->xp_raddr), &len); - xprt->xp_addrlen = len; -- if (rlen == -1 && errno == EINTR) -- goto again; -+ if (rlen == -1) -+ { -+ if (errno == EINTR) -+ goto again; -+ if (errno == EMFILE) -+ { -+ struct timespec ts = { .tv_sec = 0, .tv_nsec = 50000000 }; -+ __nanosleep(&ts , NULL); -+ } -+ } - if (rlen < 16) /* < 4 32-bit ints? */ - return FALSE; - xdrs->x_op = XDR_DECODE; -Index: glibc-2.5-20061008T1257/sunrpc/svc_unix.c -=================================================================== ---- glibc-2.5-20061008T1257.orig/sunrpc/svc_unix.c -+++ glibc-2.5-20061008T1257/sunrpc/svc_unix.c -@@ -48,6 +48,7 @@ - #include - #include - #include -+#include - - #ifdef USE_IN_LIBIO - # include -@@ -247,6 +248,11 @@ again: - { - if (errno == EINTR) - goto again; -+ if (errno == EMFILE) -+ { -+ struct timespec ts = { .tv_sec = 0, .tv_nsec = 50000000 }; -+ __nanosleep(&ts , NULL); -+ } - return FALSE; - } - /* diff --git a/src/patches/glibc/glibc-rh767693.patch b/src/patches/glibc/glibc-rh767693.patch deleted file mode 100644 index 8f76beb3d3..0000000000 --- a/src/patches/glibc/glibc-rh767693.patch +++ /dev/null @@ -1,89 +0,0 @@ -commit 97ac2654b2d831acaa18a2b018b0736245903fd2 -Author: Ulrich Drepper -Date: Sat Dec 17 20:18:42 2011 -0500 - - Check values from TZ file header - - - [BZ #13506] - * time/tzfile.c (__tzfile_read): Check values from file header. - -diff -ru a/time/tzfile.c b/time/tzfile.c ---- a/time/tzfile.c 2010-05-04 11:27:23.000000000 +0000 -+++ b/time/tzfile.c 2011-12-19 06:39:49.875358578 +0000 -@@ -19,6 +19,7 @@ - - #include - #include -+#include - #include - #include - #include -@@ -234,23 +235,58 @@ - goto read_again; - } - -+ if (__builtin_expect (num_transitions -+ > ((SIZE_MAX - (__alignof__ (struct ttinfo) - 1)) -+ / (sizeof (time_t) + 1)), 0)) -+ goto lose; - total_size = num_transitions * (sizeof (time_t) + 1); - total_size = ((total_size + __alignof__ (struct ttinfo) - 1) - & ~(__alignof__ (struct ttinfo) - 1)); - types_idx = total_size; -- total_size += num_types * sizeof (struct ttinfo) + chars; -+ if (__builtin_expect (num_types -+ > (SIZE_MAX - total_size) / sizeof (struct ttinfo), 0)) -+ goto lose; -+ total_size += num_types * sizeof (struct ttinfo); -+ if (__builtin_expect (chars > SIZE_MAX - total_size, 0)) -+ goto lose; -+ total_size += chars; -+ if (__builtin_expect (__alignof__ (struct leap) - 1 -+ > SIZE_MAX - total_size, 0)) -+ goto lose; - total_size = ((total_size + __alignof__ (struct leap) - 1) - & ~(__alignof__ (struct leap) - 1)); - leaps_idx = total_size; -+ if (__builtin_expect (num_leaps -+ > (SIZE_MAX - total_size) / sizeof (struct leap), 0)) -+ goto lose; - total_size += num_leaps * sizeof (struct leap); -- tzspec_len = (sizeof (time_t) == 8 && trans_width == 8 -- ? st.st_size - (ftello (f) -- + num_transitions * (8 + 1) -- + num_types * 6 -- + chars -- + num_leaps * 12 -- + num_isstd -- + num_isgmt) - 1 : 0); -+ tzspec_len = 0; -+ if (sizeof (time_t) == 8 && trans_width == 8) -+ { -+ off_t rem = st.st_size - ftello (f); -+ if (__builtin_expect (rem < 0 -+ || (size_t) rem < (num_transitions * (8 + 1) -+ + num_types * 6 -+ + chars), 0)) -+ goto lose; -+ tzspec_len = (size_t) rem - (num_transitions * (8 + 1) -+ + num_types * 6 -+ + chars); -+ if (__builtin_expect (num_leaps > SIZE_MAX / 12 -+ || tzspec_len < num_leaps * 12, 0)) -+ goto lose; -+ tzspec_len -= num_leaps * 12; -+ if (__builtin_expect (tzspec_len < num_isstd, 0)) -+ goto lose; -+ tzspec_len -= num_isstd; -+ if (__builtin_expect (tzspec_len == 0 || tzspec_len - 1 < num_isgmt, 0)) -+ goto lose; -+ tzspec_len -= num_isgmt + 1; -+ if (__builtin_expect (SIZE_MAX - total_size < tzspec_len, 0)) -+ goto lose; -+ } -+ if (__builtin_expect (SIZE_MAX - total_size - tzspec_len < extra, 0)) -+ goto lose; - - /* Allocate enough memory including the extra block requested by the - caller. */ diff --git a/src/patches/glibc/glibc-rh767746.patch b/src/patches/glibc/glibc-rh767746.patch deleted file mode 100644 index 58d96d8108..0000000000 --- a/src/patches/glibc/glibc-rh767746.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/nptl/pthread_create.c 2011-12-13 11:41:37.000000000 -0700 -+++ b/nptl/pthread_create.c 2011-12-14 10:03:13.000000000 -0700 -@@ -440,8 +440,9 @@ - int err = ALLOCATE_STACK (iattr, &pd); - if (__builtin_expect (err != 0, 0)) - /* Something went wrong. Maybe a parameter of the attributes is -- invalid or we could not allocate memory. */ -- return err; -+ invalid or we could not allocate memory. Note we have to -+ translate error codes. */ -+ return err == ENOMEM ? EAGAIN : err; - - - /* Initialize the TCB. All initializations with zero should be diff --git a/src/patches/glibc/glibc-rh771342.patch b/src/patches/glibc/glibc-rh771342.patch deleted file mode 100644 index 0a49b8c934..0000000000 --- a/src/patches/glibc/glibc-rh771342.patch +++ /dev/null @@ -1,155 +0,0 @@ -2011-06-30 Ulrich Drepper - - * nptl-init.c (__nptl_set_robust): New function. - (pthread_functions): Add reference. - * npthreadP.h: Declare __nptl_set_robust. - * sysdeps/pthread/pthread-functions.h (pthread_functions): Add - ptr_set_robust member. - * sysdeps/unix/sysv/linux/fork.c: Call set_robust_list syscall in - child if threads are used. - -diff -Nrup a/nptl/nptl-init.c b/nptl/nptl-init.c ---- a/nptl/nptl-init.c 2011-12-20 00:29:54.645538691 -0700 -+++ b/nptl/nptl-init.c 2012-01-03 10:18:38.977513783 -0700 -@@ -69,6 +69,13 @@ extern void __libc_setup_tls (size_t tcb - #endif - - #ifdef SHARED -+static -+#else -+extern -+#endif -+void __nptl_set_robust (struct pthread *); -+ -+#ifdef SHARED - static void nptl_freeres (void); - - -@@ -131,13 +138,25 @@ static const struct pthread_functions pt - .ptr__nptl_deallocate_tsd = __nptl_deallocate_tsd, - .ptr__nptl_setxid = __nptl_setxid, - /* For now only the stack cache needs to be freed. */ -- .ptr_freeres = nptl_freeres -+ .ptr_freeres = nptl_freeres, -+ .ptr_set_robust = __nptl_set_robust - }; - # define ptr_pthread_functions &pthread_functions - #else - # define ptr_pthread_functions NULL - #endif - -+#ifdef SHARED -+static -+#endif -+void -+__nptl_set_robust (struct pthread *self) -+{ -+ INTERNAL_SYSCALL_DECL (err); -+ INTERNAL_SYSCALL (set_robust_list, err, 2, &self->robust_head, -+ sizeof (struct robust_list_head)); -+} -+ - - #ifdef SHARED - /* This function is called indirectly from the freeres code in libc. */ -diff -Nrup a/nptl/pthreadP.h b/nptl/pthreadP.h ---- a/nptl/pthreadP.h 2010-05-04 05:27:23.000000000 -0600 -+++ b/nptl/pthreadP.h 2012-01-03 10:12:35.599269269 -0700 -@@ -555,17 +555,20 @@ extern void __pthread_cleanup_pop_restor - - /* Old cleanup interfaces, still used in libc.so. */ - extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer, -- void (*routine) (void *), void *arg); -+ void (*routine) (void *), void *arg); - extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer, -- int execute); -+ int execute); - extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer, -- void (*routine) (void *), void *arg); -+ void (*routine) (void *), void *arg); - extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer, -- int execute); -+ int execute); - - extern void __nptl_deallocate_tsd (void) attribute_hidden; - - extern int __nptl_setxid (struct xid_command *cmdp) attribute_hidden; -+#ifndef SHARED -+extern void __nptl_set_robust (struct pthread *self); -+#endif - - extern void __free_stacks (size_t limit) attribute_hidden; - -diff -Nrup a/nptl/sysdeps/pthread/pthread-functions.h b/nptl/sysdeps/pthread/pthread-functions.h ---- a/nptl/sysdeps/pthread/pthread-functions.h 2010-05-04 05:27:23.000000000 -0600 -+++ b/nptl/sysdeps/pthread/pthread-functions.h 2012-01-03 10:12:35.639269301 -0700 -@@ -97,6 +97,7 @@ struct pthread_functions - void (*ptr__nptl_deallocate_tsd) (void); - int (*ptr__nptl_setxid) (struct xid_command *); - void (*ptr_freeres) (void); -+ void (*ptr_set_robust) (struct pthread *); - }; - - /* Variable in libc.so. */ -diff -Nrup a/nptl/sysdeps/unix/sysv/linux/fork.c b/nptl/sysdeps/unix/sysv/linux/fork.c ---- a/nptl/sysdeps/unix/sysv/linux/fork.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/nptl/sysdeps/unix/sysv/linux/fork.c 2012-01-03 10:12:35.649269309 -0700 -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - - - unsigned long int *__fork_generation_pointer; -@@ -86,8 +87,8 @@ __libc_fork (void) - just go away. The unloading code works in the order of the - list. - -- While executing the registered handlers we are building a -- list of all the entries so that we can go backward later on. */ -+ While executing the registered handlers we are building a -+ list of all the entries so that we can go backward later on. */ - while (1) - { - /* Execute the handler if there is one. */ -@@ -154,6 +155,24 @@ __libc_fork (void) - GL(dl_cpuclock_offset) = now; - #endif - -+#ifdef __NR_set_robust_list -+ /* Initialize the robust mutex list which has been reset during -+ the fork. We do not check for errors since if it fails here -+ it failed at process start as well and noone could have used -+ robust mutexes. We also do not have to set -+ self->robust_head.futex_offset since we inherit the correct -+ value from the parent. */ -+# ifdef SHARED -+ if (__libc_pthread_functions.ptr_set_robust != NULL) -+ PTHFCT_CALL (ptr_set_robust, (self)); -+# else -+ extern __typeof (__nptl_set_robust) __nptl_set_robust -+ __attribute__((weak)); -+ if (__builtin_expect (__nptl_set_robust != NULL, 0)) -+ __nptl_set_robust (self); -+# endif -+#endif -+ - /* Reset the file list. These are recursive mutexes. */ - fresetlockfiles (); - -@@ -170,10 +189,10 @@ __libc_fork (void) - allp->handler->child_handler (); - - /* Note that we do not have to wake any possible waiter. -- This is the only thread in the new process. The count -- may have been bumped up by other threads doing a fork. -- We reset it to 1, to avoid waiting for non-existing -- thread(s) to release the count. */ -+ This is the only thread in the new process. The count -+ may have been bumped up by other threads doing a fork. -+ We reset it to 1, to avoid waiting for non-existing -+ thread(s) to release the count. */ - allp->handler->refcntr = 1; - - /* XXX We could at this point look through the object pool diff --git a/src/patches/glibc/glibc-rh782585.patch b/src/patches/glibc/glibc-rh782585.patch deleted file mode 100644 index a554d4bd8b..0000000000 --- a/src/patches/glibc/glibc-rh782585.patch +++ /dev/null @@ -1,329 +0,0 @@ -diff -rup a/elf/dl-close.c b/elf/dl-close.c ---- a/elf/dl-close.c 2012-01-19 12:59:42.759484350 -0700 -+++ b/elf/dl-close.c 2012-01-19 14:10:20.439263806 -0700 -@@ -223,7 +223,7 @@ _dl_close_worker (struct link_map *map) - } - - /* Sort the entries. */ -- _dl_sort_fini (ns->_ns_loaded, maps, nloaded, used, nsid); -+ _dl_sort_fini (maps, nloaded, used, nsid); - - /* Call all termination functions at once. */ - #ifdef SHARED -diff -rup a/elf/dl-deps.c b/elf/dl-deps.c ---- a/elf/dl-deps.c 2012-01-19 12:59:42.716484301 -0700 -+++ b/elf/dl-deps.c 2012-01-19 13:52:35.223720556 -0700 -@@ -614,51 +614,67 @@ Filters not supported with LD_TRACE_PREL - map->l_searchlist.r_list[i]->l_reserved = 0; - } - -- /* Now determine the order in which the initialization has to happen. */ -+ /* Sort the initializer list to take dependencies into account. The binary -+ itself will always be initialize last. */ - memcpy (l_initfini, map->l_searchlist.r_list, - nlist * sizeof (struct link_map *)); -- /* We can skip looking for the binary itself which is at the front -- of the search list. Look through the list backward so that circular -- dependencies are not changing the order. */ -- for (i = 1; i < nlist; ++i) -+ if (__builtin_expect (nlist > 1, 1)) - { -- struct link_map *l = map->l_searchlist.r_list[i]; -- unsigned int j; -- unsigned int k; -- -- /* Find the place in the initfini list where the map is currently -- located. */ -- for (j = 1; l_initfini[j] != l; ++j) -- ; -- -- /* Find all object for which the current one is a dependency and -- move the found object (if necessary) in front. */ -- for (k = j + 1; k < nlist; ++k) -+ /* We can skip looking for the binary itself which is at the front -+ of the search list. */ -+ i = 1; -+ unsigned int seen[nlist]; -+ memset (seen, 0, nlist * sizeof (seen[0])); -+ while (1) - { -- struct link_map **runp; -- -- runp = l_initfini[k]->l_initfini; -- if (runp != NULL) -+ /* Keep track of which object we looked at this round. */ -+ ++seen[i]; -+ struct link_map *thisp = l_initfini[i]; -+ -+ /* Find the last object in the list for which the current one is -+ a dependency and move the current object behind the object -+ with the dependency. */ -+ unsigned int k = nlist - 1; -+ while (k > i) - { -- while (*runp != NULL) -- if (__builtin_expect (*runp++ == l, 0)) -- { -- struct link_map *here = l_initfini[k]; -- -- /* Move it now. */ -- memmove (&l_initfini[j] + 1, &l_initfini[j], -- (k - j) * sizeof (struct link_map *)); -- l_initfini[j] = here; -- -- /* Don't insert further matches before the last -- entry moved to the front. */ -- ++j; -+ struct link_map **runp = l_initfini[k]->l_initfini; -+ if (runp != NULL) -+ /* Look through the dependencies of the object. */ -+ while (*runp != NULL) -+ if (__builtin_expect (*runp++ == thisp, 0)) -+ { -+ /* Move the current object to the back past the last -+ object with it as the dependency. */ -+ memmove (&l_initfini[i], &l_initfini[i + 1], -+ (k - i) * sizeof (l_initfini[0])); -+ l_initfini[k] = thisp; -+ -+ if (seen[i + 1] > nlist - i - 2) -+ { -+ ++i; -+ goto next_clear; -+ } -+ -+ unsigned int this_seen = seen[i]; -+ memmove (&seen[i], &seen[i + 1], -+ (k - i) * sizeof (seen[0])); -+ seen[k] = this_seen; -+ -+ goto next; -+ } - -- break; -- } -+ --k; - } -+ -+ if (++i == nlist) -+ break; -+ next_clear: -+ memset (&seen[i], 0, (nlist - i) * sizeof (seen[0])); -+ -+ next:; - } - } -+ - /* Terminate the list of dependencies. */ - l_initfini[nlist] = NULL; - atomic_write_barrier (); -diff -rup a/elf/dl-fini.c b/elf/dl-fini.c ---- a/elf/dl-fini.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/elf/dl-fini.c 2012-01-19 13:56:38.653842046 -0700 -@@ -1,5 +1,6 @@ - /* Call the termination functions of loaded shared objects. -- Copyright (C) 1995,96,1998-2002,2004-2005,2009 Free Software Foundation, Inc. -+ Copyright (C) 1995,96,1998-2002,2004-2005,2009,2011 -+ Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or -@@ -29,89 +30,100 @@ typedef void (*fini_t) (void); - - void - internal_function --_dl_sort_fini (struct link_map *l, struct link_map **maps, size_t nmaps, -- char *used, Lmid_t ns) -+_dl_sort_fini (struct link_map **maps, size_t nmaps, char *used, Lmid_t ns) - { -- if (ns == LM_ID_BASE) -- /* The main executable always comes first. */ -- l = l->l_next; -- -- for (; l != NULL; l = l->l_next) -- /* Do not handle ld.so in secondary namespaces and object which -- are not removed. */ -- if (l == l->l_real && l->l_idx != -1) -- { -- /* Find the place in the 'maps' array. */ -- unsigned int j; -- for (j = ns == LM_ID_BASE ? 1 : 0; maps[j] != l; ++j) -- assert (j < nmaps); -- -- /* Find all object for which the current one is a dependency -- and move the found object (if necessary) in front. */ -- for (unsigned int k = j + 1; k < nmaps; ++k) -- { -- struct link_map **runp = maps[k]->l_initfini; -- if (runp != NULL) -- { -- while (*runp != NULL) -- if (*runp == l) -- { -- struct link_map *here = maps[k]; -+ /* A list of one element need not be sorted. */ -+ if (nmaps == 1) -+ return; -+ -+ /* We can skip looking for the binary itself which is at the front -+ of the search list for the main namespace. */ -+ unsigned int i = ns == LM_ID_BASE; -+ unsigned int seen[nmaps]; -+ memset (seen, 0, nmaps * sizeof (seen[0])); -+ while (1) -+ { -+ /* Keep track of which object we looked at this round. */ -+ ++seen[i]; -+ struct link_map *thisp = maps[i]; -+ -+ /* Do not handle ld.so in secondary namespaces and object which -+ are not removed. */ -+ if (thisp != thisp->l_real || thisp->l_idx == -1) -+ goto skip; -+ -+ /* Find the last object in the list for which the current one is -+ a dependency and move the current object behind the object -+ with the dependency. */ -+ unsigned int k = nmaps - 1; -+ while (k > i) -+ { -+ struct link_map **runp = maps[k]->l_initfini; -+ if (runp != NULL) -+ /* Look through the dependencies of the object. */ -+ while (*runp != NULL) -+ if (__builtin_expect (*runp++ == thisp, 0)) -+ { -+ move: -+ /* Move the current object to the back past the last -+ object with it as the dependency. */ -+ memmove (&maps[i], &maps[i + 1], -+ (k - i) * sizeof (maps[0])); -+ maps[k] = thisp; - -- /* Move it now. */ -- memmove (&maps[j] + 1, -- &maps[j], (k - j) * sizeof (struct link_map *)); -- maps[j] = here; -+ if (used != NULL) -+ { -+ char here_used = used[i]; -+ memmove (&used[i], &used[i + 1], -+ (k - i) * sizeof (used[0])); -+ used[k] = here_used; -+ } - -- if (used != NULL) -- { -- char here_used = used[k]; -+ if (seen[i + 1] > nmaps - i - 2) -+ { -+ ++i; -+ goto next_clear; -+ } - -- memmove (&used[j] + 1, -- &used[j], (k - j) * sizeof (char)); -- used[j] = here_used; -- } -+ unsigned int this_seen = seen[i]; -+ memmove (&seen[i], &seen[i + 1], (k - i) * sizeof (seen[0])); -+ seen[k] = this_seen; - -- ++j; -+ goto next; -+ } - -- break; -- } -- else -- ++runp; -- } -- -- if (__builtin_expect (maps[k]->l_reldeps != NULL, 0)) -- { -- unsigned int m = maps[k]->l_reldeps->act; -- struct link_map **relmaps = &maps[k]->l_reldeps->list[0]; -+ if (__builtin_expect (maps[k]->l_reldeps != NULL, 0)) -+ { -+ unsigned int m = maps[k]->l_reldeps->act; -+ struct link_map **relmaps = &maps[k]->l_reldeps->list[0]; - -- while (m-- > 0) -+ /* Look through the relocation dependencies of the object. */ -+ while (m-- > 0) -+ if (__builtin_expect (relmaps[m] == thisp, 0)) - { -- if (relmaps[m] == l) -- { -- struct link_map *here = maps[k]; -- -- /* Move it now. */ -- memmove (&maps[j] + 1, -- &maps[j], -- (k - j) * sizeof (struct link_map *)); -- maps[j] = here; -- -- if (used != NULL) -- { -- char here_used = used[k]; -- -- memmove (&used[j] + 1, -- &used[j], (k - j) * sizeof (char)); -- used[j] = here_used; -- } -- -- break; -- } -+ /* If a cycle exists with a link time dependency, -+ preserve the latter. */ -+ struct link_map **runp = thisp->l_initfini; -+ if (runp != NULL) -+ while (*runp != NULL) -+ if (__builtin_expect (*runp++ == maps[k], 0)) -+ goto ignore; -+ goto move; - } -- } -- } -- } -+ ignore:; -+ } -+ -+ --k; -+ } -+ -+ skip: -+ if (++i == nmaps) -+ break; -+ next_clear: -+ memset (&seen[i], 0, (nmaps - i) * sizeof (seen[0])); -+ -+ next:; -+ } - } - - -@@ -196,9 +208,8 @@ _dl_fini (void) - assert (ns == LM_ID_BASE || i == nloaded || i == nloaded - 1); - nmaps = i; - -- if (nmaps != 0) -- /* Now we have to do the sorting. */ -- _dl_sort_fini (GL(dl_ns)[ns]._ns_loaded, maps, nmaps, NULL, ns); -+ /* Now we have to do the sorting. */ -+ _dl_sort_fini (maps, nmaps, NULL, ns); - - /* We do not rely on the linked list of loaded object anymore from - this point on. We have our own list here (maps). The various -diff -rup a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h ---- a/sysdeps/generic/ldsodefs.h 2012-01-19 12:59:42.446483997 -0700 -+++ b/sysdeps/generic/ldsodefs.h 2012-01-19 14:16:36.242453532 -0700 -@@ -947,7 +947,7 @@ extern void _dl_init (struct link_map *m - extern void _dl_fini (void) internal_function; - - /* Sort array MAPS according to dependencies of the contained objects. */ --extern void _dl_sort_fini (struct link_map *l, struct link_map **maps, -+extern void _dl_sort_fini (struct link_map **maps, - size_t nmaps, char *used, Lmid_t ns) - internal_function; - diff --git a/src/patches/glibc/glibc-rh784402.patch b/src/patches/glibc/glibc-rh784402.patch deleted file mode 100644 index d75773e523..0000000000 --- a/src/patches/glibc/glibc-rh784402.patch +++ /dev/null @@ -1,166 +0,0 @@ -commit 3e1aa84e7f9f38815f5db9cd7654b1a9497cf6e4 -Author: Ulrich Drepper -Date: Fri Jan 20 22:39:54 2012 -0500 - - Do not cache negative results in nscd if these are transient - -diff -rup a/nscd/aicache.c b/nscd/aicache.c ---- a/nscd/aicache.c 2012-01-24 20:32:58.906826425 -0700 -+++ b/nscd/aicache.c 2012-01-24 20:42:17.663968882 -0700 -@@ -511,9 +511,17 @@ next_nip: - if (fd != -1) - TEMP_FAILURE_RETRY (send (fd, ¬found, total, MSG_NOSIGNAL)); - -- dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, 1); -- /* If we cannot permanently store the result, so be it. */ -- if (dataset != NULL) -+ /* If we have a transient error or cannot permanently store the -+ result, so be it. */ -+ if (rc4 == EAGAIN || __builtin_expect (db->negtimeout == 0, 0)) -+ { -+ /* Mark the old entry as obsolete. */ -+ if (dh != NULL) -+ dh->usable = false; -+ dataset = NULL; -+ } -+ else if ((dataset = mempool_alloc (db, (sizeof (struct dataset) -+ + req->key_len), 1)) != NULL) - { - dataset->head.allocsize = sizeof (struct dataset) + req->key_len; - dataset->head.recsize = total; -diff -rup a/nscd/grpcache.c b/nscd/grpcache.c ---- a/nscd/grpcache.c 2012-01-24 20:32:58.910826427 -0700 -+++ b/nscd/grpcache.c 2012-01-24 20:42:17.666968883 -0700 -@@ -114,13 +114,21 @@ cache_addgr (struct database_dyn *db, in - case. */ - total = sizeof (notfound); - -- written = TEMP_FAILURE_RETRY (send (fd, ¬found, total, -- MSG_NOSIGNAL)); -+ if (fd != -1) -+ written = TEMP_FAILURE_RETRY (send (fd, ¬found, total, -+ MSG_NOSIGNAL)); -+ else -+ written = total; - -- dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, -- 1); -- /* If we cannot permanently store the result, so be it. */ -- if (dataset != NULL) -+ /* If we have a transient error or cannot permanently store -+ the result, so be it. */ -+ if (errno == EAGAIN || __builtin_expect (db->negtimeout == 0, 0)) -+ { -+ /* Mark the old entry as obsolete. */ -+ if (dh != NULL) -+ dh->usable = false; -+ } -+ else if ((dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, 1)) != NULL) - { - dataset->head.allocsize = sizeof (struct dataset) + req->key_len; - dataset->head.recsize = total; -diff -rup a/nscd/hstcache.c b/nscd/hstcache.c ---- a/nscd/hstcache.c 2012-01-24 20:32:58.911826427 -0700 -+++ b/nscd/hstcache.c 2012-01-24 20:42:17.668968883 -0700 -@@ -141,10 +141,16 @@ cache_addhst (struct database_dyn *db, i - MSG_NOSIGNAL)) != total) - all_written = false; - -- dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, -- 1); -- /* If we cannot permanently store the result, so be it. */ -- if (dataset != NULL) -+ /* If we have a transient error or cannot permanently store -+ the result, so be it. */ -+ if (errval == EAGAIN || __builtin_expect (db->negtimeout == 0, 0)) -+ { -+ /* Mark the old entry as obsolete. */ -+ if (dh != NULL) -+ dh->usable = false; -+ } -+ else if ((dataset = mempool_alloc (db, (sizeof (struct dataset) -+ + req->key_len), 1)) != NULL) - { - dataset->head.allocsize = sizeof (struct dataset) + req->key_len; - dataset->head.recsize = total; -diff -rup a/nscd/initgrcache.c b/nscd/initgrcache.c ---- a/nscd/initgrcache.c 2012-01-24 20:32:58.912826427 -0700 -+++ b/nscd/initgrcache.c 2012-01-24 20:42:17.671968883 -0700 -@@ -202,10 +202,16 @@ addinitgroupsX (struct database_dyn *db, - written = TEMP_FAILURE_RETRY (send (fd, ¬found, total, - MSG_NOSIGNAL)); - -- dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, -- 1); -- /* If we cannot permanently store the result, so be it. */ -- if (dataset != NULL) -+ /* If we have a transient error or cannot permanently store -+ the result, so be it. */ -+ if (all_tryagain || __builtin_expect (db->negtimeout == 0, 0)) -+ { -+ /* Mark the old entry as obsolete. */ -+ if (dh != NULL) -+ dh->usable = false; -+ } -+ else if ((dataset = mempool_alloc (db, (sizeof (struct dataset) -+ + req->key_len), 1)) != NULL) - { - dataset->head.allocsize = sizeof (struct dataset) + req->key_len; - dataset->head.recsize = total; -diff -rup a/nscd/pwdcache.c b/nscd/pwdcache.c ---- a/nscd/pwdcache.c 2012-01-24 20:32:58.914826427 -0700 -+++ b/nscd/pwdcache.c 2012-01-24 20:42:17.671968883 -0700 -@@ -124,10 +124,16 @@ cache_addpw (struct database_dyn *db, in - written = TEMP_FAILURE_RETRY (send (fd, ¬found, total, - MSG_NOSIGNAL)); - -- dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, -- 1); -- /* If we cannot permanently store the result, so be it. */ -- if (dataset != NULL) -+ /* If we have a transient error or cannot permanently store -+ the result, so be it. */ -+ if (errno == EAGAIN || __builtin_expect (db->negtimeout == 0, 0)) -+ { -+ /* Mark the old entry as obsolete. */ -+ if (dh != NULL) -+ dh->usable = false; -+ } -+ else if ((dataset = mempool_alloc (db, (sizeof (struct dataset) -+ + req->key_len), 1)) != NULL) - { - dataset->head.allocsize = sizeof (struct dataset) + req->key_len; - dataset->head.recsize = total; -diff -rup a/nscd/servicescache.c b/nscd/servicescache.c ---- a/nscd/servicescache.c 2012-01-24 20:32:58.915826427 -0700 -+++ b/nscd/servicescache.c 2012-01-24 20:42:17.672968884 -0700 -@@ -102,15 +102,22 @@ cache_addserv (struct database_dyn *db, - { - /* We have no data. This means we send the standard reply for this - case. */ -- total = sizeof (notfound); -+ written = total = sizeof (notfound); - -- written = TEMP_FAILURE_RETRY (send (fd, ¬found, total, -- MSG_NOSIGNAL)); -+ if (fd != -1) -+ written = TEMP_FAILURE_RETRY (send (fd, ¬found, total, -+ MSG_NOSIGNAL)); - -- dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, -- 1); -- /* If we cannot permanently store the result, so be it. */ -- if (dataset != NULL) -+ /* If we have a transient error or cannot permanently store -+ the result, so be it. */ -+ if (errval == EAGAIN || __builtin_expect (db->negtimeout == 0, 0)) -+ { -+ /* Mark the old entry as obsolete. */ -+ if (dh != NULL) -+ dh->usable = false; -+ } -+ else if ((dataset = mempool_alloc (db, (sizeof (struct dataset) -+ + req->key_len), 1)) != NULL) - { - dataset->head.allocsize = sizeof (struct dataset) + req->key_len; - dataset->head.recsize = total; diff --git a/src/patches/glibc/glibc-rh785984.patch b/src/patches/glibc/glibc-rh785984.patch deleted file mode 100644 index 80ba5e8458..0000000000 --- a/src/patches/glibc/glibc-rh785984.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff -rup a/localedata/locales/zh_CN b/localedata/locales/zh_CN ---- a/localedata/locales/zh_CN 2006-07-30 16:19:43.000000000 -0600 -+++ b/localedata/locales/zh_CN 2012-01-30 21:24:46.905115483 -0700 -@@ -108,11 +108,11 @@ day "";/ - "";/ - "" - --abmon "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -- "";"";/ -+abmon "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ -+ "";"";/ - "";"" - - mon "";"";"";/ diff --git a/src/patches/glibc/glibc-rh788959-2.patch b/src/patches/glibc/glibc-rh788959-2.patch deleted file mode 100644 index 1147af6860..0000000000 --- a/src/patches/glibc/glibc-rh788959-2.patch +++ /dev/null @@ -1,92 +0,0 @@ -Index: glibc-2.12-2-gc4ccff1/nscd/grpcache.c -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/nscd/grpcache.c -+++ glibc-2.12-2-gc4ccff1/nscd/grpcache.c -@@ -178,7 +178,8 @@ cache_addgr (struct database_dyn *db, in - char *cp; - const size_t key_len = strlen (key); - const size_t buf_len = 3 * sizeof (grp->gr_gid) + key_len + 1; -- char *buf = alloca (buf_len); -+ size_t alloca_used = 0; -+ char *buf = alloca_account (buf_len, alloca_used); - ssize_t n; - size_t cnt; - -@@ -190,7 +191,8 @@ cache_addgr (struct database_dyn *db, in - /* Determine the length of all members. */ - while (grp->gr_mem[gr_mem_cnt]) - ++gr_mem_cnt; -- gr_mem_len = (uint32_t *) alloca (gr_mem_cnt * sizeof (uint32_t)); -+ gr_mem_len = (uint32_t *) alloca_account (gr_mem_cnt * sizeof (uint32_t), -+ alloca_used); - for (gr_mem_cnt = 0; grp->gr_mem[gr_mem_cnt]; ++gr_mem_cnt) - { - gr_mem_len[gr_mem_cnt] = strlen (grp->gr_mem[gr_mem_cnt]) + 1; -@@ -205,10 +207,10 @@ cache_addgr (struct database_dyn *db, in - change. Allocate memory on the cache since it is likely - discarded anyway. If it turns out to be necessary to have a - new record we can still allocate real memory. */ -- bool alloca_used = false; -+ bool dataset_in_stack_or_freed = false; - dataset = NULL; - -- if (he == NULL) -+ if (he == NULL || ! __libc_use_alloca (alloca_used + total + n)) - dataset = (struct dataset *) mempool_alloc (db, total + n, 1); - - if (dataset == NULL) -@@ -216,10 +218,10 @@ cache_addgr (struct database_dyn *db, in - /* We cannot permanently add the result in the moment. But - we can provide the result as is. Store the data in some - temporary memory. */ -- dataset = (struct dataset *) alloca (total + n); -+ dataset = (struct dataset *) alloca_account (total + n, alloca_used); - - /* We cannot add this record to the permanent database. */ -- alloca_used = true; -+ dataset_in_stack_or_freed = true; - } - - dataset->head.allocsize = total + n; -@@ -273,6 +275,14 @@ cache_addgr (struct database_dyn *db, in - allocated on the stack and need not be freed. */ - dh->timeout = dataset->head.timeout; - ++dh->nreloads; -+ -+ /* If the new record was not allocated on the stack, then it must -+ be freed. Note that it can no longer be used. */ -+ if (! dataset_in_stack_or_freed) -+ { -+ free (dataset); -+ dataset_in_stack_or_freed = true; -+ } - } - else - { -@@ -288,7 +298,7 @@ cache_addgr (struct database_dyn *db, in - key_copy = (char *) newp + (key_copy - (char *) dataset); - - dataset = memcpy (newp, dataset, total + n); -- alloca_used = false; -+ dataset_in_stack_or_freed = false; - } - - /* Mark the old record as obsolete. */ -@@ -303,7 +313,7 @@ cache_addgr (struct database_dyn *db, in - assert (fd != -1); - - #ifdef HAVE_SENDFILE -- if (__builtin_expect (db->mmap_used, 1) && !alloca_used) -+ if (__builtin_expect (db->mmap_used, 1) && !dataset_in_stack_or_freed) - { - assert (db->wr_fd != -1); - assert ((char *) &dataset->resp > (char *) db->data); -@@ -330,7 +340,7 @@ cache_addgr (struct database_dyn *db, in - - /* Add the record to the database. But only if it has not been - stored on the stack. */ -- if (! alloca_used) -+ if (! dataset_in_stack_or_freed) - { - /* If necessary, we also propagate the data to disk. */ - if (db->persistent) diff --git a/src/patches/glibc/glibc-rh788959.patch b/src/patches/glibc/glibc-rh788959.patch deleted file mode 100644 index adc6c9947f..0000000000 --- a/src/patches/glibc/glibc-rh788959.patch +++ /dev/null @@ -1,130 +0,0 @@ -diff -pruN glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-initgroups.c glibc-2.12-2-gc4ccff1.patched/nis/nss_compat/compat-initgroups.c ---- glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-initgroups.c 2010-05-04 16:57:23.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.patched/nis/nss_compat/compat-initgroups.c 2012-02-21 11:11:19.877008465 +0530 -@@ -297,6 +297,8 @@ getgrent_next_nss (ent_t *ent, char *buf - if (nss_initgroups_dyn (user, group, &mystart, &mysize, &mygroups, - limit, errnop) == NSS_STATUS_SUCCESS) - { -+ status = NSS_STATUS_NOTFOUND; -+ - /* If there is no blacklist we can trust the underlying - initgroups implementation. */ - if (ent->blacklist.current <= 1) -@@ -309,6 +311,7 @@ getgrent_next_nss (ent_t *ent, char *buf - overwrite the pointer with one to a bigger buffer. */ - char *tmpbuf = buffer; - size_t tmplen = buflen; -+ bool use_malloc = false; - - for (int i = 0; i < mystart; i++) - { -@@ -316,21 +319,36 @@ getgrent_next_nss (ent_t *ent, char *buf - tmpbuf, tmplen, errnop)) - == NSS_STATUS_TRYAGAIN - && *errnop == ERANGE) -- if (tmpbuf == buffer) -- { -- tmplen *= 2; -- tmpbuf = __alloca (tmplen); -- } -- else -- tmpbuf = extend_alloca (tmpbuf, tmplen, 2 * tmplen); -+ { -+ if (__libc_use_alloca (tmplen * 2)) -+ { -+ if (tmpbuf == buffer) -+ { -+ tmplen *= 2; -+ tmpbuf = __alloca (tmplen); -+ } -+ else -+ tmpbuf = extend_alloca (tmpbuf, tmplen, tmplen * 2); -+ } -+ else -+ { -+ tmplen *= 2; -+ char *newbuf = realloc (use_malloc ? tmpbuf : NULL, tmplen); -+ -+ if (newbuf == NULL) -+ { -+ status = NSS_STATUS_TRYAGAIN; -+ goto done; -+ } -+ use_malloc = true; -+ tmpbuf = newbuf; -+ } -+ } - - if (__builtin_expect (status != NSS_STATUS_NOTFOUND, 1)) - { - if (__builtin_expect (status != NSS_STATUS_SUCCESS, 0)) -- { -- free (mygroups); -- return status; -- } -+ goto done; - - if (!in_blacklist (grpbuf.gr_name, - strlen (grpbuf.gr_name), ent) -@@ -348,11 +366,17 @@ getgrent_next_nss (ent_t *ent, char *buf - } - } - } -+ -+ status = NSS_STATUS_NOTFOUND; -+ -+ done: -+ if (use_malloc) -+ free (tmpbuf); - } - - free (mygroups); - -- return NSS_STATUS_NOTFOUND; -+ return status; - } - - free (mygroups); -@@ -506,6 +530,7 @@ _nss_compat_initgroups_dyn (const char * - char *tmpbuf; - enum nss_status status; - ent_t intern = { true, false, false, NULL, {NULL, 0, 0} }; -+ bool use_malloc = false; - - status = internal_setgrent (&intern); - if (status != NSS_STATUS_SUCCESS) -@@ -519,13 +544,32 @@ _nss_compat_initgroups_dyn (const char * - user, group, start, size, - groupsp, limit, errnop)) - == NSS_STATUS_TRYAGAIN && *errnop == ERANGE) -- tmpbuf = extend_alloca (tmpbuf, buflen, 2 * buflen); -+ if (__libc_use_alloca (buflen * 2)) -+ tmpbuf = extend_alloca (tmpbuf, buflen, 2 * buflen); -+ else -+ { -+ buflen *= 2; -+ char *newbuf = realloc (use_malloc ? tmpbuf : NULL, buflen); -+ if (newbuf == NULL) -+ { -+ status = NSS_STATUS_TRYAGAIN; -+ goto done; -+ } -+ use_malloc = true; -+ tmpbuf = newbuf; -+ } - } - while (status == NSS_STATUS_SUCCESS); - -+ status = NSS_STATUS_SUCCESS; -+ -+ done: -+ if (use_malloc) -+ free (tmpbuf); -+ - internal_endgrent (&intern); - -- return NSS_STATUS_SUCCESS; -+ return status; - } - - diff --git a/src/patches/glibc/glibc-rh789189.patch b/src/patches/glibc/glibc-rh789189.patch deleted file mode 100644 index fc0e2e0171..0000000000 --- a/src/patches/glibc/glibc-rh789189.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -rup a/resolv/res_init.c b/resolv/res_init.c ---- a/resolv/res_init.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/resolv/res_init.c 2012-02-10 10:20:24.923578396 -0700 -@@ -325,7 +325,7 @@ __res_vinit(res_state statp, int preinit - struct in6_addr a6; - char *el; - -- if ((el = strchr(cp, '\n')) != NULL) -+ if ((el = strpbrk(cp, " \t\n")) != NULL) - *el = '\0'; - if ((el = strchr(cp, SCOPE_DELIMITER)) != NULL) - *el = '\0'; diff --git a/src/patches/glibc/glibc-rh789209.patch b/src/patches/glibc/glibc-rh789209.patch deleted file mode 100644 index 3aea97ede4..0000000000 --- a/src/patches/glibc/glibc-rh789209.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -rup a/localedata/locales/uk_UA b/localedata/locales/uk_UA ---- a/localedata/locales/uk_UA 2010-05-04 05:27:23.000000000 -0600 -+++ b/localedata/locales/uk_UA 2012-02-10 09:59:16.934189715 -0700 -@@ -700,7 +700,7 @@ LC_MONETARY - % 200 hrv. - 200 hryven (money) - - % the local currency symbol --currency_symbol "" % hr (hryvnya) -+currency_symbol "" % hr (hryvnya) - - % This must be a 4-character string containing the international currency - % symbol as defined by the ISO 4217 standard (three characters) followed diff --git a/src/patches/glibc/glibc-rh789238-2.patch b/src/patches/glibc/glibc-rh789238-2.patch deleted file mode 100644 index 62b5492b15..0000000000 --- a/src/patches/glibc/glibc-rh789238-2.patch +++ /dev/null @@ -1,114 +0,0 @@ -diff -rup a/malloc/arena.c b/malloc/arena.c ---- a/malloc/arena.c 2012-03-02 10:22:47.025002715 -0700 -+++ b/malloc/arena.c 2012-03-02 10:27:47.442361529 -0700 -@@ -123,14 +123,14 @@ int __malloc_initialized = -1; - if(ptr) \ - (void)mutex_lock(&ptr->mutex); \ - else \ -- ptr = arena_get2(ptr, (size)); \ -+ ptr = arena_get2(ptr, (size), false); \ - } while(0) - #else - #define arena_lock(ptr, size) do { \ - if(ptr && !mutex_trylock(&ptr->mutex)) { \ - THREAD_STAT(++(ptr->stat_lock_direct)); \ - } else \ -- ptr = arena_get2(ptr, (size)); \ -+ ptr = arena_get2(ptr, (size), false); \ - } while(0) - #endif - -@@ -982,7 +982,7 @@ get_free_list (void) - - - static mstate --reused_arena (void) -+reused_arena (bool retrying) - { - mstate result; - static mstate next_to_use; -@@ -999,6 +999,15 @@ reused_arena (void) - } - while (result != next_to_use); - -+ /* If we are retrying due to a failure to allocate in the main -+ arena, don't wait for the main arena to become available, select -+ another. -+ -+ To really fix this right we would have to try the allocation -+ in every other arena, but that seems like severe overkill. */ -+ if (retrying && result == &main_arena) -+ result = result->next; -+ - /* No arena available. Wait for the next in line. */ - (void)mutex_lock(&result->mutex); - -@@ -1014,9 +1023,9 @@ reused_arena (void) - static mstate - internal_function - #if __STD_C --arena_get2(mstate a_tsd, size_t size) -+arena_get2(mstate a_tsd, size_t size, bool retrying) - #else --arena_get2(a_tsd, size) mstate a_tsd; size_t size; -+arena_get2(a_tsd, size, retrying) mstate a_tsd; size_t size; bool retrying - #endif - { - mstate a; -@@ -1055,7 +1064,7 @@ arena_get2(a_tsd, size) mstate a_tsd; si - catomic_decrement (&narenas); - } - else -- a = reused_arena (); -+ a = reused_arena (retrying); - } - #else - if(!a_tsd) -diff -rup a/malloc/malloc.c b/malloc/malloc.c ---- a/malloc/malloc.c 2012-03-02 10:22:47.061002519 -0700 -+++ b/malloc/malloc.c 2012-03-02 10:23:53.151643863 -0700 -@@ -3671,7 +3671,7 @@ public_mALLOc(size_t bytes) - /* ... or sbrk() has failed and there is still a chance to mmap() */ - mstate prev = ar_ptr->next ? ar_ptr : 0; - (void)mutex_unlock(&ar_ptr->mutex); -- ar_ptr = arena_get2(prev, bytes); -+ ar_ptr = arena_get2(prev, bytes, true); - if(ar_ptr) { - victim = _int_malloc(ar_ptr, bytes); - (void)mutex_unlock(&ar_ptr->mutex); -@@ -3892,7 +3892,7 @@ public_mEMALIGn(size_t alignment, size_t - /* ... or sbrk() has failed and there is still a chance to mmap() */ - mstate prev = ar_ptr->next ? ar_ptr : 0; - (void)mutex_unlock(&ar_ptr->mutex); -- ar_ptr = arena_get2(prev, bytes); -+ ar_ptr = arena_get2(prev, bytes, true); - if(ar_ptr) { - p = _int_memalign(ar_ptr, alignment, bytes); - (void)mutex_unlock(&ar_ptr->mutex); -@@ -3943,7 +3943,7 @@ public_vALLOc(size_t bytes) - /* ... or sbrk() has failed and there is still a chance to mmap() */ - mstate prev = ar_ptr->next ? ar_ptr : 0; - (void)mutex_unlock(&ar_ptr->mutex); -- ar_ptr = arena_get2(prev, bytes); -+ ar_ptr = arena_get2(prev, bytes, true); - if(ar_ptr) { - p = _int_memalign(ar_ptr, pagesz, bytes); - (void)mutex_unlock(&ar_ptr->mutex); -@@ -3992,7 +3992,7 @@ public_pVALLOc(size_t bytes) - /* ... or sbrk() has failed and there is still a chance to mmap() */ - mstate prev = ar_ptr->next ? ar_ptr : 0; - (void)mutex_unlock(&ar_ptr->mutex); -- ar_ptr = arena_get2(prev, bytes + 2*pagesz + MINSIZE); -+ ar_ptr = arena_get2(prev, bytes + 2*pagesz + MINSIZE, true); - if(ar_ptr) { - p = _int_memalign(ar_ptr, pagesz, rounded_bytes); - (void)mutex_unlock(&ar_ptr->mutex); -@@ -4086,7 +4086,7 @@ public_cALLOc(size_t n, size_t elem_size - /* ... or sbrk() has failed and there is still a chance to mmap() */ - mstate prev = av->next ? av : 0; - (void)mutex_unlock(&av->mutex); -- av = arena_get2(prev, sz); -+ av = arena_get2(prev, sz, true); - if(av) { - mem = _int_malloc(av, sz); - (void)mutex_unlock(&av->mutex); diff --git a/src/patches/glibc/glibc-rh789238.patch b/src/patches/glibc/glibc-rh789238.patch deleted file mode 100644 index f2c90e25ab..0000000000 --- a/src/patches/glibc/glibc-rh789238.patch +++ /dev/null @@ -1,119 +0,0 @@ -diff -rup a/malloc/malloc.c b/malloc/malloc.c ---- a/malloc/malloc.c 2012-02-13 21:46:11.678847531 -0700 -+++ b/malloc/malloc.c 2012-02-13 22:43:14.788431976 -0700 -@@ -3669,8 +3669,9 @@ public_mALLOc(size_t bytes) - } else { - #if USE_ARENAS - /* ... or sbrk() has failed and there is still a chance to mmap() */ -- ar_ptr = arena_get2(ar_ptr->next ? ar_ptr : 0, bytes); -- (void)mutex_unlock(&main_arena.mutex); -+ mstate prev = ar_ptr->next ? ar_ptr : 0; -+ (void)mutex_unlock(&ar_ptr->mutex); -+ ar_ptr = arena_get2(prev, bytes); - if(ar_ptr) { - victim = _int_malloc(ar_ptr, bytes); - (void)mutex_unlock(&ar_ptr->mutex); -@@ -3929,10 +3930,10 @@ public_vALLOc(size_t bytes) - if(!ar_ptr) - return 0; - p = _int_valloc(ar_ptr, bytes); -- (void)mutex_unlock(&ar_ptr->mutex); - if(!p) { - /* Maybe the failure is due to running out of mmapped areas. */ - if(ar_ptr != &main_arena) { -+ (void)mutex_unlock(&ar_ptr->mutex); - ar_ptr = &main_arena; - (void)mutex_lock(&ar_ptr->mutex); - p = _int_memalign(ar_ptr, pagesz, bytes); -@@ -3940,14 +3941,17 @@ public_vALLOc(size_t bytes) - } else { - #if USE_ARENAS - /* ... or sbrk() has failed and there is still a chance to mmap() */ -- ar_ptr = arena_get2(ar_ptr->next ? ar_ptr : 0, bytes); -+ mstate prev = ar_ptr->next ? ar_ptr : 0; -+ (void)mutex_unlock(&ar_ptr->mutex); -+ ar_ptr = arena_get2(prev, bytes); - if(ar_ptr) { - p = _int_memalign(ar_ptr, pagesz, bytes); - (void)mutex_unlock(&ar_ptr->mutex); - } - #endif - } -- } -+ } else -+ (void)mutex_unlock(&ar_ptr->mutex); - assert(!p || chunk_is_mmapped(mem2chunk(p)) || - ar_ptr == arena_for_chunk(mem2chunk(p))); - -@@ -3975,10 +3979,10 @@ public_pVALLOc(size_t bytes) - - arena_get(ar_ptr, bytes + 2*pagesz + MINSIZE); - p = _int_pvalloc(ar_ptr, bytes); -- (void)mutex_unlock(&ar_ptr->mutex); - if(!p) { - /* Maybe the failure is due to running out of mmapped areas. */ - if(ar_ptr != &main_arena) { -+ (void)mutex_unlock(&ar_ptr->mutex); - ar_ptr = &main_arena; - (void)mutex_lock(&ar_ptr->mutex); - p = _int_memalign(ar_ptr, pagesz, rounded_bytes); -@@ -3986,15 +3990,17 @@ public_pVALLOc(size_t bytes) - } else { - #if USE_ARENAS - /* ... or sbrk() has failed and there is still a chance to mmap() */ -- ar_ptr = arena_get2(ar_ptr->next ? ar_ptr : 0, -- bytes + 2*pagesz + MINSIZE); -+ mstate prev = ar_ptr->next ? ar_ptr : 0; -+ (void)mutex_unlock(&ar_ptr->mutex); -+ ar_ptr = arena_get2(prev, bytes + 2*pagesz + MINSIZE); - if(ar_ptr) { - p = _int_memalign(ar_ptr, pagesz, rounded_bytes); - (void)mutex_unlock(&ar_ptr->mutex); - } - #endif - } -- } -+ } else -+ (void)mutex_unlock(&ar_ptr->mutex); - assert(!p || chunk_is_mmapped(mem2chunk(p)) || - ar_ptr == arena_for_chunk(mem2chunk(p))); - -@@ -4064,8 +4070,6 @@ public_cALLOc(size_t n, size_t elem_size - #endif - mem = _int_malloc(av, sz); - -- /* Only clearing follows, so we can unlock early. */ -- (void)mutex_unlock(&av->mutex); - - assert(!mem || chunk_is_mmapped(mem2chunk(mem)) || - av == arena_for_chunk(mem2chunk(mem))); -@@ -4073,15 +4077,16 @@ public_cALLOc(size_t n, size_t elem_size - if (mem == 0) { - /* Maybe the failure is due to running out of mmapped areas. */ - if(av != &main_arena) { -+ (void)mutex_unlock(&av->mutex); - (void)mutex_lock(&main_arena.mutex); - mem = _int_malloc(&main_arena, sz); - (void)mutex_unlock(&main_arena.mutex); - } else { - #if USE_ARENAS - /* ... or sbrk() has failed and there is still a chance to mmap() */ -- (void)mutex_lock(&main_arena.mutex); -- av = arena_get2(av->next ? av : 0, sz); -- (void)mutex_unlock(&main_arena.mutex); -+ mstate prev = av->next ? av : 0; -+ (void)mutex_unlock(&av->mutex); -+ av = arena_get2(prev, sz); - if(av) { - mem = _int_malloc(av, sz); - (void)mutex_unlock(&av->mutex); -@@ -4089,7 +4094,8 @@ public_cALLOc(size_t n, size_t elem_size - #endif - } - if (mem == 0) return 0; -- } -+ } else -+ (void)mutex_unlock(&av->mutex); - p = mem2chunk(mem); - - /* Two optional cases in which clearing not necessary */ diff --git a/src/patches/glibc/glibc-rh794817-2.patch b/src/patches/glibc/glibc-rh794817-2.patch deleted file mode 100644 index 15774b43e3..0000000000 --- a/src/patches/glibc/glibc-rh794817-2.patch +++ /dev/null @@ -1,85 +0,0 @@ -diff -rup a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c ---- a/stdio-common/vfprintf.c 2012-03-05 09:43:14.705536167 -0700 -+++ b/stdio-common/vfprintf.c 2012-03-05 09:48:11.602890982 -0700 -@@ -822,7 +822,7 @@ vfprintf (FILE *s, const CHAR_T *format, - \ - if (function_done < 0) \ - { \ -- /* Error in print handler. */ \ -+ /* Error in print handler; up to handler to set errno. */ \ - done = -1; \ - goto all_done; \ - } \ -@@ -876,7 +876,7 @@ vfprintf (FILE *s, const CHAR_T *format, - \ - if (function_done < 0) \ - { \ -- /* Error in print handler. */ \ -+ /* Error in print handler; up to handler to set errno. */ \ - done = -1; \ - goto all_done; \ - } \ -@@ -1117,7 +1117,7 @@ vfprintf (FILE *s, const CHAR_T *format, - &mbstate); \ - if (len == (size_t) -1) \ - { \ -- /* Something went wron gduring the conversion. Bail out. */ \ -+ /* Something went wrong during the conversion. Bail out. */ \ - done = -1; \ - goto all_done; \ - } \ -@@ -1188,6 +1188,7 @@ vfprintf (FILE *s, const CHAR_T *format, - if (__mbsnrtowcs (ignore, &str2, strend - str2, \ - ignore_size, &ps) == (size_t) -1) \ - { \ -+ /* Conversion function has set errno. */ \ - done = -1; \ - goto all_done; \ - } \ -@@ -1599,6 +1600,7 @@ vfprintf (FILE *s, const CHAR_T *format, - if (spec == L_('\0')) - { - /* The format string ended before the specifier is complete. */ -+ __set_errno (EINVAL); - done = -1; - goto all_done; - } -@@ -1696,17 +1698,20 @@ do_positional: - - /* Determine the number of arguments the format string consumes. */ - nargs = MAX (nargs, max_ref_arg); -+ /* Calculate total size needed to represent a single argument across -+ all three argument-related arrays. */ - bytes_per_arg = sizeof (*args_value) + sizeof (*args_size) - + sizeof (*args_type); - - /* Check for potential integer overflow. */ -- if (nargs > SIZE_MAX / bytes_per_arg) -+ if (__builtin_expect (nargs > SIZE_MAX / bytes_per_arg, 0)) - { -+ __set_errno (ERANGE); - done = -1; - goto all_done; - } - -- /* Allocate memory for the argument descriptions. */ -+ /* Allocate memory for all three argument arrays. */ - if (__libc_use_alloca (nargs * bytes_per_arg)) - args_value = alloca (nargs * bytes_per_arg); - else -@@ -1937,6 +1942,7 @@ do_positional: - about # of chars. */ - if (function_done < 0) - { -+ /* Function has set errno. */ - done = -1; - goto all_done; - } -@@ -1971,6 +1977,7 @@ do_positional: - of chars. */ - if (function_done < 0) - { -+ /* Function has set errno. */ - done = -1; - goto all_done; - } diff --git a/src/patches/glibc/glibc-rh794817.patch b/src/patches/glibc/glibc-rh794817.patch deleted file mode 100644 index e21caaa635..0000000000 --- a/src/patches/glibc/glibc-rh794817.patch +++ /dev/null @@ -1,239 +0,0 @@ -From libc-alpha-return-25252-listarch-libc-alpha=sources dot redhat dot com at sourceware dot org Thu Feb 16 16:21:17 2012 -Return-Path: -Delivered-To: listarch-libc-alpha at sources dot redhat dot com -Received: (qmail 5187 invoked by alias); 16 Feb 2012 16:21:14 -0000 -Delivered-To: moderator for libc-alpha at sourceware dot org -Received: (qmail 2174 invoked by uid 22791); 16 Feb 2012 16:17:18 -0000 -X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 - tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,TW_TV,TW_VB,TW_VF,T_RP_MATCHES_RCVD -X-Spam-Check-By: sourceware.org -Date: Thu, 16 Feb 2012 08:16:13 -0800 -From: Kees Cook -To: "Ryan S dot Arnold" -Cc: libc-alpha at sourceware dot org, Paul Eggert , - Roland McGrath , - Andreas Schwab -Subject: Re: [PATCH] vfprintf: validate nargs and maybe allocate from heap -Message-ID: <20120216161613.GZ20420@outflux.net> -References: <20120206062537.GM4979@outflux.net> - <20120207000509 dot GP4989 at outflux dot net> - <20120210192457 dot GF20420 at outflux dot net> - - <20120214223048 dot GM20420 at outflux dot net> - - <20120214224543 dot GN20420 at outflux dot net> -MIME-Version: 1.0 -Content-Type: text/plain; charset=us-ascii -Content-Disposition: inline -In-Reply-To: <20120214224543 dot GN20420 at outflux dot net> -X-MIMEDefang-Filter: outflux$Revision: 1.316 $ -X-HELO: www.outflux.net -Mailing-List: contact libc-alpha-help at sourceware dot org; run by ezmlm -Precedence: bulk -List-Id: -List-Subscribe: -List-Archive: -List-Post: -List-Help: , -Sender: libc-alpha-owner at sourceware dot org -Delivered-To: mailing list libc-alpha at sourceware dot org - -The nargs value can overflow when doing allocations, allowing arbitrary -memory writes via format strings, bypassing _FORTIFY_SOURCE: -http://www.phrack.org/issues.html?issue=67&id=9 - -This checks for nargs overflow and possibly allocates from heap instead of -stack, and adds a regression test for the situation. - -I have FSF assignment via Google. (Sent from @outflux since that's how I'm -subscribed here, but CL shows @chromium.org as part of my Google work.) - -This version disables the useless test on non-32-bit platforms. - -2012-02-16 Kees Cook - - [BZ #13656] - * stdio-common/vfprintf.c (vfprintf): Check for nargs overflow and - possibly allocate from heap instead of stack. - * stdio-common/bug-vfprintf-nargs.c: New file. - * stdio-common/Makefile (tests): Add nargs overflow test. - - -diff -rup a/stdio-common/Makefile b/stdio-common/Makefile ---- a/stdio-common/Makefile 2010-05-04 05:27:23.000000000 -0600 -+++ b/stdio-common/Makefile 2012-02-20 21:57:52.983040992 -0700 -@@ -60,7 +60,7 @@ tests := tstscanf test_rdwr test-popen t - tst-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \ - tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a \ - bug19 bug19a tst-popen2 scanf13 scanf14 scanf15 bug20 bug21 bug22 \ -- scanf16 scanf17 tst-setvbuf1 -+ scanf16 scanf17 tst-setvbuf1 bug-vfprintf-nargs - - test-srcs = tst-unbputc tst-printf - -diff --git a/stdio-common/bug-vfprintf-nargs.c b/stdio-common/bug-vfprintf-nargs.c -new file mode 100644 -index 0000000..13c66c0 ---- /dev/null -+++ b/stdio-common/bug-vfprintf-nargs.c -@@ -0,0 +1,78 @@ -+/* Test for vfprintf nargs allocation overflow (BZ #13656). -+ Copyright (C) 2012 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Contributed by Kees Cook , 2012. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; 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 -+ -+static int -+format_failed (const char *fmt, const char *expected) -+{ -+ char output[80]; -+ -+ printf ("%s : ", fmt); -+ -+ memset (output, 0, sizeof output); -+ /* Having sprintf itself detect a failure is good. */ -+ if (sprintf (output, fmt, 1, 2, 3, "test") > 0 -+ && strcmp (output, expected) != 0) -+ { -+ printf ("FAIL (output '%s' != expected '%s')\n", output, expected); -+ return 1; -+ } -+ puts ("ok"); -+ return 0; -+} -+ -+static int -+do_test (void) -+{ -+ int rc = 0; -+ char buf[64]; -+ -+ /* Regular positionals work. */ -+ if (format_failed ("%1$d", "1") != 0) -+ rc = 1; -+ -+ /* Regular width positionals work. */ -+ if (format_failed ("%1$*2$d", " 1") != 0) -+ rc = 1; -+ -+ /* Positional arguments are constructed via read_int, so nargs can only -+ overflow on 32-bit systems. On 64-bit systems, it will attempt to -+ allocate a giant amount of memory and possibly crash, which is the -+ expected situation. Since the 64-bit behavior is arch-specific, only -+ test this on 32-bit systems. */ -+ if (sizeof (long int) == 4) -+ { -+ sprintf (buf, "%%1$d %%%" PRIdPTR "$d", UINT32_MAX / sizeof (int)); -+ if (format_failed (buf, "1 %$d") != 0) -+ rc = 1; -+ } -+ -+ return rc; -+} -+ -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" -diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c -index 863cd5d..022e72b 100644 ---- a/stdio-common/vfprintf.c -+++ b/stdio-common/vfprintf.c -@@ -235,6 +235,9 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) - 0 if unknown. */ - int readonly_format = 0; - -+ /* For the argument descriptions, which may be allocated on the heap. */ -+ void *args_malloced = NULL; -+ - /* This table maps a character into a number representing a - class. In each step there is a destination label for each - class. */ -@@ -1647,9 +1650,10 @@ do_positional: - determine the size of the array needed to store the argument - attributes. */ - size_t nargs = 0; -- int *args_type; -- union printf_arg *args_value = NULL; -+ size_t bytes_per_arg; -+ union printf_arg *args_value; - int *args_size; -+ int *args_type; - - /* Positional parameters refer to arguments directly. This could - also determine the maximum number of arguments. Track the -@@ -1698,13 +1702,33 @@ do_positional: - - /* Determine the number of arguments the format string consumes. */ - nargs = MAX (nargs, max_ref_arg); -+ bytes_per_arg = sizeof (*args_value) + sizeof (*args_size) -+ + sizeof (*args_type); -+ -+ /* Check for potential integer overflow. */ -+ if (nargs > SIZE_MAX / bytes_per_arg) -+ { -+ done = -1; -+ goto all_done; -+ } - - /* Allocate memory for the argument descriptions. */ -- args_type = alloca (nargs * sizeof (int)); -+ if (__libc_use_alloca (nargs * bytes_per_arg)) -+ args_value = alloca (nargs * bytes_per_arg); -+ else -+ { -+ args_value = args_malloced = malloc (nargs * bytes_per_arg); -+ if (args_value == NULL) -+ { -+ done = -1; -+ goto all_done; -+ } -+ } -+ -+ args_size = &args_value[nargs].pa_int; -+ args_type = &args_size[nargs]; - memset (args_type, s->_flags2 & _IO_FLAGS2_FORTIFY ? '\xff' : '\0', -- nargs * sizeof (int)); -- args_value = alloca (nargs * sizeof (union printf_arg)); -- args_size = alloca (nargs * sizeof (int)); -+ nargs * sizeof (*args_type)); - - /* XXX Could do sanity check here: If any element in ARGS_TYPE is - still zero after this loop, format is invalid. For now we -@@ -1973,8 +1997,8 @@ do_positional: - } - - all_done: -- if (__builtin_expect (workstart != NULL, 0)) -- free (workstart); -+ free (args_malloced); -+ free (workstart); - /* Unlock the stream. */ - _IO_funlockfile (s); - _IO_cleanup_region_end (0); --- -1.7.5.4 - --- -Kees Cook @outflux.net - diff --git a/src/patches/glibc/glibc-rh795498.patch b/src/patches/glibc/glibc-rh795498.patch deleted file mode 100644 index 729c5a4d7a..0000000000 --- a/src/patches/glibc/glibc-rh795498.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c -index 01369f6..44ad04d 100644 ---- a/resolv/nss_dns/dns-host.c -+++ b/resolv/nss_dns/dns-host.c -@@ -1219,7 +1219,7 @@ gaih_getanswer (const querybuf *answer1, int anslen1, const querybuf *answer2, - &first); - if ((status == NSS_STATUS_SUCCESS || status == NSS_STATUS_NOTFOUND - || (status == NSS_STATUS_TRYAGAIN -- && (errno != ERANGE || *h_errnop != NO_RECOVERY))) -+ && (*errnop != ERANGE || *h_errnop == NO_RECOVERY))) - && answer2 != NULL && anslen2 > 0) - { - enum nss_status status2 = gaih_getanswer_slice(answer2, anslen2, qname, diff --git a/src/patches/glibc/glibc-rh797094-1.patch b/src/patches/glibc/glibc-rh797094-1.patch deleted file mode 100644 index e98b9c03ef..0000000000 --- a/src/patches/glibc/glibc-rh797094-1.patch +++ /dev/null @@ -1,657 +0,0 @@ -diff -rup a/include/alloca.h b/include/alloca.h ---- a/include/alloca.h 2012-02-29 13:11:19.439693476 -0700 -+++ b/include/alloca.h 2012-02-29 13:11:49.832530623 -0700 -@@ -49,15 +49,24 @@ libc_hidden_proto (__libc_alloca_cutoff) - - #if defined stackinfo_get_sp && defined stackinfo_sub_sp - # define alloca_account(size, avar) \ -- ({ void *old__ = stackinfo_get_sp (); \ -- void *m__ = __alloca (size); \ -- avar += stackinfo_sub_sp (old__); \ -+ ({ void *old__ = stackinfo_get_sp (); \ -+ void *m__ = __alloca (size); \ -+ avar += stackinfo_sub_sp (old__); \ -+ m__; }) -+# define extend_alloca_account(buf, len, newlen, avar) \ -+ ({ void *old__ = stackinfo_get_sp (); \ -+ void *m__ = extend_alloca (buf, len, newlen); \ -+ avar += stackinfo_sub_sp (old__); \ - m__; }) - #else - # define alloca_account(size, avar) \ -- ({ size_t s__ = (size); \ -- avar += s__; \ -+ ({ size_t s__ = (size); \ -+ avar += s__; \ - __alloca (s__); }) -+# define extend_alloca_account(buf, len, newlen, avar) \ -+ ({ size_t s__ = (newlen); \ -+ avar += s__; \ -+ extend_alloca (buf, len, s__); }) - #endif - - #endif -diff -rup a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c ---- a/sysdeps/posix/getaddrinfo.c 2012-02-29 13:11:19.588692676 -0700 -+++ b/sysdeps/posix/getaddrinfo.c 2012-02-29 13:12:42.972245862 -0700 -@@ -278,6 +278,7 @@ gaih_inet (const char *name, const struc - bool got_ipv6 = false; - const char *canon = NULL; - const char *orig_name = name; -+ size_t alloca_used = 0; - - if (req->ai_protocol || req->ai_socktype) - { -@@ -310,7 +311,7 @@ gaih_inet (const char *name, const struc - if (tp->name[0]) - { - st = (struct gaih_servtuple *) -- __alloca (sizeof (struct gaih_servtuple)); -+ alloca_account (sizeof (struct gaih_servtuple), alloca_used); - - if ((rc = gaih_inet_serv (service->name, tp, req, st))) - return rc; -@@ -334,7 +335,8 @@ gaih_inet (const char *name, const struc - continue; - - newp = (struct gaih_servtuple *) -- __alloca (sizeof (struct gaih_servtuple)); -+ alloca_account (sizeof (struct gaih_servtuple), -+ alloca_used); - - if ((rc = gaih_inet_serv (service->name, tp, req, newp))) - { -@@ -362,7 +364,7 @@ gaih_inet (const char *name, const struc - - if (req->ai_socktype || req->ai_protocol) - { -- st = __alloca (sizeof (struct gaih_servtuple)); -+ st = alloca_account (sizeof (struct gaih_servtuple), alloca_used); - st->next = NULL; - st->socktype = tp->socktype; - st->protocol = ((tp->protoflag & GAI_PROTO_PROTOANY) -@@ -379,7 +381,8 @@ gaih_inet (const char *name, const struc - { - struct gaih_servtuple *newp; - -- newp = __alloca (sizeof (struct gaih_servtuple)); -+ newp = alloca_account (sizeof (struct gaih_servtuple), -+ alloca_used); - newp->next = NULL; - newp->socktype = tp->socktype; - newp->protocol = tp->protocol; -@@ -391,10 +394,17 @@ gaih_inet (const char *name, const struc - } - } - -+ bool malloc_name = false; -+ bool malloc_addrmem = false; -+ struct gaih_addrtuple *addrmem = NULL; -+ bool malloc_canonbuf = false; -+ char *canonbuf = NULL; -+ bool malloc_tmpbuf = false; -+ char *tmpbuf = NULL; -+ int result = 0; - if (name != NULL) - { -- at = __alloca (sizeof (struct gaih_addrtuple)); -- -+ at = alloca_account (sizeof (struct gaih_addrtuple), alloca_used); - at->family = AF_UNSPEC; - at->scopeid = 0; - at->next = NULL; -@@ -412,6 +422,7 @@ gaih_inet (const char *name, const struc - rc = __idna_to_ascii_lz (name, &p, idn_flags); - if (rc != IDNA_SUCCESS) - { -+ /* No need to jump to free_and_return here. */ - if (rc == IDNA_MALLOC_ERROR) - return -EAI_MEMORY; - if (rc == IDNA_DLOPEN_ERROR) -@@ -421,10 +432,7 @@ gaih_inet (const char *name, const struc - /* In case the output string is the same as the input string - no new string has been allocated. */ - if (p != name) -- { -- name = strdupa (p); -- free (p); -- } -+ malloc_name = true; - } - #endif - -@@ -441,23 +449,59 @@ gaih_inet (const char *name, const struc - at->family = AF_INET6; - } - else -- return -EAI_ADDRFAMILY; -+ { -+ result = -EAI_ADDRFAMILY; -+ goto free_and_return; -+ } - - if (req->ai_flags & AI_CANONNAME) - canon = name; - } - else if (at->family == AF_UNSPEC) - { -- char *namebuf = (char *) name; - char *scope_delim = strchr (name, SCOPE_DELIMITER); -+ int e; - -- if (__builtin_expect (scope_delim != NULL, 0)) -- { -- namebuf = alloca (scope_delim - name + 1); -- *((char *) __mempcpy (namebuf, name, scope_delim - name)) = '\0'; -- } -+ { -+ bool malloc_namebuf = false; -+ char *namebuf = (char *) name; -+ -+ if (__builtin_expect (scope_delim != NULL, 0)) -+ { -+ if (malloc_name) -+ *scope_delim = '\0'; -+ else -+ { -+ if (__libc_use_alloca (alloca_used -+ + scope_delim - name + 1)) -+ { -+ namebuf = alloca_account (scope_delim - name + 1, -+ alloca_used); -+ *((char *) __mempcpy (namebuf, name, -+ scope_delim - name)) = '\0'; -+ } -+ else -+ { -+ namebuf = strndup (name, scope_delim - name); -+ if (namebuf == NULL) -+ { -+ assert (!malloc_name); -+ return -EAI_MEMORY; -+ } -+ malloc_namebuf = true; -+ } -+ } -+ } - -- if (inet_pton (AF_INET6, namebuf, at->addr) > 0) -+ e = inet_pton (AF_INET6, namebuf, at->addr); -+ -+ if (malloc_namebuf) -+ free (namebuf); -+ else if (scope_delim != NULL && malloc_name) -+ /* Undo what we did above. */ -+ *scope_delim = SCOPE_DELIMITER; -+ } -+ if (e > 0) - { - if (req->ai_family == AF_UNSPEC || req->ai_family == AF_INET6) - at->family = AF_INET6; -@@ -468,7 +512,10 @@ gaih_inet (const char *name, const struc - at->family = AF_INET; - } - else -- return -EAI_ADDRFAMILY; -+ { -+ result = -EAI_ADDRFAMILY; -+ goto free_and_return; -+ } - - if (scope_delim != NULL) - { -@@ -490,7 +537,10 @@ gaih_inet (const char *name, const struc - at->scopeid = (uint32_t) strtoul (scope_delim + 1, &end, - 10); - if (*end != '\0') -- return GAIH_OKIFUNSPEC | -EAI_NONAME; -+ { -+ result = GAIH_OKIFUNSPEC | -EAI_NONAME; -+ goto free_and_return; -+ } - } - } - -@@ -520,59 +570,80 @@ gaih_inet (const char *name, const struc - { - int family = req->ai_family; - size_t tmpbuflen = 512; -- char *tmpbuf = alloca (tmpbuflen); -+ assert (tmpbuf == NULL); -+ tmpbuf = alloca_account (tmpbuflen, alloca_used); - int rc; - struct hostent th; - struct hostent *h; - int herrno; - -- simple_again: - while (1) - { -- rc = __gethostbyname2_r (name, family, &th, tmpbuf, -+ rc = __gethostbyname2_r (name, AF_INET, &th, tmpbuf, - tmpbuflen, &h, &herrno); - if (rc != ERANGE || herrno != NETDB_INTERNAL) - break; -- tmpbuf = extend_alloca (tmpbuf, tmpbuflen, 2 * tmpbuflen); -+ -+ if (!malloc_tmpbuf -+ && __libc_use_alloca (alloca_used + 2 * tmpbuflen)) -+ tmpbuf = extend_alloca_account (tmpbuf, tmpbuflen, -+ 2 * tmpbuflen, -+ alloca_used); -+ else -+ { -+ char *newp = realloc (malloc_tmpbuf ? tmpbuf : NULL, -+ 2 * tmpbuflen); -+ if (newp == NULL) -+ { -+ result = -EAI_MEMORY; -+ goto free_and_return; -+ } -+ tmpbuf = newp; -+ malloc_tmpbuf = true; -+ tmpbuflen = 2 * tmpbuflen; -+ } - } - - if (rc == 0) - { -- if (h == NULL) -+ if (h != NULL) - { -- if (req->ai_family == AF_INET6 -- && (req->ai_flags & AI_V4MAPPED) -- && family == AF_INET6) -+ int i; -+ /* We found data, count the number of addresses. */ -+ for (i = 0; h->h_addr_list[i]; ++i) -+ ; -+ if (i > 0 && *pat != NULL) -+ --i; -+ -+ if (__libc_use_alloca (alloca_used -+ + i * sizeof (struct gaih_addrtuple))) -+ addrmem = alloca_account (i * sizeof (struct gaih_addrtuple), -+ alloca_used); -+ else - { -- /* Try again, this time looking for IPv4 -- addresses. */ -- family = AF_INET; -- goto simple_again; -+ addrmem = malloc (i -+ * sizeof (struct gaih_addrtuple)); -+ if (addrmem == NULL) -+ { -+ result = -EAI_MEMORY; -+ goto free_and_return; - } -+ malloc_addrmem = true; - } -- else -- { -- /* We found data, now convert it into the list. */ -- for (int i = 0; h->h_addr_list[i]; ++i) -+ -+ /* Now convert it into the list. */ -+ struct gaih_addrtuple *addrfree = addrmem; -+ for (i = 0; h->h_addr_list[i]; ++i) - { - if (*pat == NULL) - { -- *pat = __alloca (sizeof (struct gaih_addrtuple)); -+ *pat = addrfree++; - (*pat)->scopeid = 0; - } - (*pat)->next = NULL; -- (*pat)->family = req->ai_family; -- if (family == req->ai_family) -+ (*pat)->family = AF_INET; - memcpy ((*pat)->addr, h->h_addr_list[i], - h->h_length); -- else -- { -- uint32_t *addr = (uint32_t *) (*pat)->addr; -- addr[3] = *(uint32_t *) h->h_addr_list[i]; -- addr[2] = htonl (0xffff); -- addr[1] = 0; -- addr[0] = 0; -- } - pat = &((*pat)->next); - } - } -@@ -582,15 +653,16 @@ gaih_inet (const char *name, const struc - if (herrno == NETDB_INTERNAL) - { - __set_h_errno (herrno); -- return -EAI_SYSTEM; -- } -- if (herrno == TRY_AGAIN) -- { -- return -EAI_AGAIN; -+ result = -EAI_SYSTEM; - } -+ else if (herrno == TRY_AGAIN) -+ result = -EAI_AGAIN; -+ else - /* We made requests but they turned out no data. - The name is known, though. */ -- return GAIH_OKIFUNSPEC | -EAI_NODATA; -+ result = GAIH_OKIFUNSPEC | -EAI_NODATA; -+ -+ goto free_and_return; - } - - goto process_list; -@@ -613,21 +685,56 @@ gaih_inet (const char *name, const struc - bool added_canon = (req->ai_flags & AI_CANONNAME) == 0; - char *addrs = air->addrs; - -+ if (__libc_use_alloca (alloca_used -+ + air->naddrs * sizeof (struct gaih_addrtuple))) -+ addrmem = alloca_account (air->naddrs -+ * sizeof (struct gaih_addrtuple), -+ alloca_used); -+ else -+ { -+ addrmem = malloc (air->naddrs -+ * sizeof (struct gaih_addrtuple)); -+ if (addrmem == NULL) -+ { -+ result = -EAI_MEMORY; -+ goto free_and_return; -+ } -+ malloc_addrmem = true; -+ } -+ -+ struct gaih_addrtuple *addrfree = addrmem; - for (int i = 0; i < air->naddrs; ++i) - { - socklen_t size = (air->family[i] == AF_INET - ? INADDRSZ : IN6ADDRSZ); - if (*pat == NULL) - { -- *pat = __alloca (sizeof (struct gaih_addrtuple)); -+ *pat = addrfree++; - (*pat)->scopeid = 0; - } - uint32_t *pataddr = (*pat)->addr; - (*pat)->next = NULL; - if (added_canon || air->canon == NULL) - (*pat)->name = NULL; -- else -- canon = (*pat)->name = strdupa (air->canon); -+ else if (canonbuf == NULL) -+ { -+ size_t canonlen = strlen (air->canon) + 1; -+ if ((req->ai_flags & AI_CANONIDN) != 0 -+ && __libc_use_alloca (alloca_used + canonlen)) -+ canonbuf = alloca_account (canonlen, alloca_used); -+ else -+ { -+ canonbuf = malloc (canonlen); -+ if (canonbuf == NULL) -+ { -+ result = -EAI_MEMORY; -+ goto free_and_return; -+ } -+ malloc_canonbuf = true; -+ } -+ canon = (*pat)->name = memcpy (canonbuf, air->canon, -+ canonlen); -+ } - - if (air->family[i] == AF_INET - && req->ai_family == AF_INET6 -@@ -657,20 +764,26 @@ gaih_inet (const char *name, const struc - free (air); - - if (at->family == AF_UNSPEC) -- return GAIH_OKIFUNSPEC | -EAI_NONAME; -+ { -+ result = GAIH_OKIFUNSPEC | -EAI_NONAME; -+ goto free_and_return; -+ } - - goto process_list; - } - else if (err == 0) - /* The database contains a negative entry. */ -- return 0; -+ goto free_and_return; - else if (__nss_not_use_nscd_hosts == 0) - { - if (herrno == NETDB_INTERNAL && errno == ENOMEM) -- return -EAI_MEMORY; -- if (herrno == TRY_AGAIN) -- return -EAI_AGAIN; -- return -EAI_SYSTEM; -+ result = -EAI_MEMORY; -+ else if (herrno == TRY_AGAIN) -+ result = -EAI_AGAIN; -+ else -+ result = -EAI_SYSTEM; -+ -+ goto free_and_return; - } - } - #endif -@@ -699,7 +812,19 @@ gaih_inet (const char *name, const struc - _res.options &= ~RES_USE_INET6; - - size_t tmpbuflen = 1024; -- char *tmpbuf = alloca (tmpbuflen); -+ malloc_tmpbuf = !__libc_use_alloca (alloca_used + tmpbuflen); -+ assert (tmpbuf == NULL); -+ if (!malloc_tmpbuf) -+ tmpbuf = alloca_account (tmpbuflen, alloca_used); -+ else -+ { -+ tmpbuf = malloc (tmpbuflen); -+ if (tmpbuf == NULL) -+ { -+ result = -EAI_MEMORY; -+ goto free_and_return; -+ } -+ } - - while (!no_more) - { -@@ -728,8 +853,25 @@ gaih_inet (const char *name, const struc - no_data = herrno == NO_DATA; - break; - } -- tmpbuf = extend_alloca (tmpbuf, -- tmpbuflen, 2 * tmpbuflen); -+ -+ if (!malloc_tmpbuf -+ && __libc_use_alloca (alloca_used + 2 * tmpbuflen)) -+ tmpbuf = extend_alloca_account (tmpbuf, tmpbuflen, -+ 2 * tmpbuflen, -+ alloca_used); -+ else -+ { -+ char *newp = realloc (malloc_tmpbuf ? tmpbuf : NULL, -+ 2 * tmpbuflen); -+ if (newp == NULL) -+ { -+ result = -EAI_MEMORY; -+ goto free_and_return; -+ } -+ tmpbuf = newp; -+ malloc_tmpbuf = true; -+ tmpbuflen = 2 * tmpbuflen; -+ } - } - - if (status == NSS_STATUS_SUCCESS) -@@ -832,18 +974,40 @@ gaih_inet (const char *name, const struc - if (cfct != NULL) - { - const size_t max_fqdn_len = 256; -- char *buf = alloca (max_fqdn_len); -+ if ((req->ai_flags & AI_CANONIDN) != 0 -+ && __libc_use_alloca (alloca_used -+ + max_fqdn_len)) -+ canonbuf = alloca_account (max_fqdn_len, -+ alloca_used); -+ else -+ { -+ canonbuf = malloc (max_fqdn_len); -+ if (canonbuf == NULL) -+ { -+ result = -EAI_MEMORY; -+ goto free_and_return; -+ } -+ malloc_canonbuf = true; -+ } - char *s; - - if (DL_CALL_FCT (cfct, (at->name ?: name, -- buf, max_fqdn_len, -+ canonbuf, -+ max_fqdn_len, - &s, &rc, &herrno)) - == NSS_STATUS_SUCCESS) - canon = s; - else -- /* Set to name now to avoid using -- gethostbyaddr. */ -- canon = name; -+ { -+ /* Set to name now to avoid using -+ gethostbyaddr. */ -+ if (malloc_canonbuf) -+ { -+ free (canonbuf); -+ malloc_canonbuf = false; -+ } -+ canon = name; -+ } - } - } - status = NSS_STATUS_SUCCESS; -@@ -878,22 +1042,27 @@ gaih_inet (const char *name, const struc - { - /* If both requests timed out report this. */ - if (no_data == EAI_AGAIN && no_inet6_data == EAI_AGAIN) -- return -EAI_AGAIN; -+ result = -EAI_AGAIN; -+ else -+ /* We made requests but they turned out no data. The name -+ is known, though. */ -+ result = GAIH_OKIFUNSPEC | -EAI_NODATA; - -- /* We made requests but they turned out no data. The name -- is known, though. */ -- return GAIH_OKIFUNSPEC | -EAI_NODATA; -+ goto free_and_return; - } - } - - process_list: - if (at->family == AF_UNSPEC) -- return GAIH_OKIFUNSPEC | -EAI_NONAME; -+ { -+ result = GAIH_OKIFUNSPEC | -EAI_NONAME; -+ goto free_and_return; -+ } - } - else - { - struct gaih_addrtuple *atr; -- atr = at = __alloca (sizeof (struct gaih_addrtuple)); -+ atr = at = alloca_account (sizeof (struct gaih_addrtuple), alloca_used); - memset (at, '\0', sizeof (struct gaih_addrtuple)); - - if (req->ai_family == AF_UNSPEC) -@@ -932,6 +1101,9 @@ gaih_inet (const char *name, const struc - /* Only the first entry gets the canonical name. */ - if (at2 == at && (req->ai_flags & AI_CANONNAME) != 0) - { -+ char *tmpbuf2 = NULL; -+ bool malloc_tmpbuf2 = false; -+ - if (canon == NULL) - { - /* If the canonical name cannot be determined, use -@@ -952,11 +1124,16 @@ gaih_inet (const char *name, const struc - int rc = __idna_to_unicode_lzlz (canon, &out, idn_flags); - if (rc != IDNA_SUCCESS) - { -+ if (malloc_tmpbuf2) -+ free (tmpbuf2); -+ - if (rc == IDNA_MALLOC_ERROR) -- return -EAI_MEMORY; -- if (rc == IDNA_DLOPEN_ERROR) -- return -EAI_SYSTEM; -- return -EAI_IDN_ENCODE; -+ result = -EAI_MEMORY; -+ else if (rc == IDNA_DLOPEN_ERROR) -+ result = -EAI_SYSTEM; -+ else -+ result = -EAI_IDN_ENCODE; -+ goto free_and_return; - } - /* In case the output string is the same as the input - string no new string has been allocated and we -@@ -970,10 +1147,25 @@ gaih_inet (const char *name, const struc - #ifdef HAVE_LIBIDN - make_copy: - #endif -- canon = strdup (canon); -- if (canon == NULL) -- return -EAI_MEMORY; -+ if (malloc_canonbuf) -+ /* We already allocated the string using malloc. */ -+ malloc_canonbuf = false; -+ else -+ { -+ canon = strdup (canon); -+ if (canon == NULL) -+ { -+ if (malloc_tmpbuf2) -+ free (tmpbuf2); -+ -+ result = -EAI_MEMORY; -+ goto free_and_return; -+ } -+ } - } -+ -+ if (malloc_tmpbuf2) -+ free (tmpbuf2); - } - - family = at2->family; -@@ -999,7 +1191,8 @@ gaih_inet (const char *name, const struc - if (ai == NULL) - { - free ((char *) canon); -- return -EAI_MEMORY; -+ result = -EAI_MEMORY; -+ goto free_and_return; - } - - ai->ai_flags = req->ai_flags; -@@ -1052,7 +1245,18 @@ gaih_inet (const char *name, const struc - at2 = at2->next; - } - } -- return 0; -+ -+ free_and_return: -+ if (malloc_name) -+ free ((char *) name); -+ if (malloc_addrmem) -+ free (addrmem); -+ if (malloc_canonbuf) -+ free (canonbuf); -+ if (malloc_tmpbuf) -+ free (tmpbuf); -+ -+ return result; - } - - diff --git a/src/patches/glibc/glibc-rh797094-2.patch b/src/patches/glibc/glibc-rh797094-2.patch deleted file mode 100644 index 5aa90840d6..0000000000 --- a/src/patches/glibc/glibc-rh797094-2.patch +++ /dev/null @@ -1,862 +0,0 @@ -From: Ulrich Drepper -Date: Mon, 23 May 2011 03:04:16 +0000 (-0400) -Subject: Add a few more alloca size checks -X-Git-Tag: glibc-2.14~41 -X-Git-Url: http://sourceware.org/git/?p=glibc.git;a=commitdiff_plain;h=f2962a71959fd254a7a223437ca4b63b9e81130c - -Add a few more alloca size checks ---- - - 2011-05-22 Ulrich Drepper - - [BZ #12671] - * nis/nss_nis/nis-alias.c (_nss_nis_getaliasbyname_r): Use malloc in - some situations. - * nscd/nscd_getserv_r.c (nscd_getserv_r): Likewise. - * posix/glob.c (glob_in_dir): Take additional parameter alloca_used. - add in in __libc_use_alloca calls. Adjust callers. - (glob): Use malloc in some situations. -diff --git a/nis/nss_nis/nis-alias.c b/nis/nss_nis/nis-alias.c -index 9286e36..cfe4097 100644 ---- a/nis/nss_nis/nis-alias.c -+++ b/nis/nss_nis/nis-alias.c -@@ -1,4 +1,4 @@ --/* Copyright (C) 1996-2002, 2003, 2006 Free Software Foundation, Inc. -+/* Copyright (C) 1996-2002, 2003, 2006, 2011 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Thorsten Kukuk , 1996. - -@@ -142,10 +142,10 @@ internal_nis_getaliasent_r (struct aliasent *alias, char *buffer, - int yperr; - - if (new_start) -- yperr = yp_first (domain, "mail.aliases", &outkey, &keylen, &result, -+ yperr = yp_first (domain, "mail.aliases", &outkey, &keylen, &result, - &len); - else -- yperr = yp_next (domain, "mail.aliases", oldkey, oldkeylen, &outkey, -+ yperr = yp_next (domain, "mail.aliases", oldkey, oldkeylen, &outkey, - &keylen, &result, &len); - - if (__builtin_expect (yperr != YPERR_SUCCESS, 0)) -@@ -153,20 +153,20 @@ internal_nis_getaliasent_r (struct aliasent *alias, char *buffer, - enum nss_status retval = yperr2nss (yperr); - - if (retval == NSS_STATUS_TRYAGAIN) -- *errnop = errno; -- return retval; -- } -+ *errnop = errno; -+ return retval; -+ } - - if (__builtin_expect ((size_t) (len + 1) > buflen, 0)) -- { -+ { - free (result); -- *errnop = ERANGE; -- return NSS_STATUS_TRYAGAIN; -- } -+ *errnop = ERANGE; -+ return NSS_STATUS_TRYAGAIN; -+ } - char *p = strncpy (buffer, result, len); - buffer[len] = '\0'; - while (isspace (*p)) -- ++p; -+ ++p; - free (result); - - parse_res = _nss_nis_parse_aliasent (outkey, p, alias, buffer, -@@ -213,13 +213,25 @@ _nss_nis_getaliasbyname_r (const char *name, struct aliasent *alias, - return NSS_STATUS_UNAVAIL; - } - -- size_t namlen = strlen (name); -- char name2[namlen + 1]; -- - char *domain; - if (__builtin_expect (yp_get_default_domain (&domain), 0)) - return NSS_STATUS_UNAVAIL; - -+ size_t namlen = strlen (name); -+ char *name2; -+ int use_alloca = __libc_use_alloca (namlen + 1); -+ if (use_alloca) -+ name2 = __alloca (namlen + 1); -+ else -+ { -+ name2 = malloc (namlen + 1); -+ if (name2 == NULL) -+ { -+ *errnop = ENOMEM; -+ return NSS_STATUS_TRYAGAIN; -+ } -+ } -+ - /* Convert name to lowercase. */ - size_t i; - for (i = 0; i < namlen; ++i) -@@ -230,6 +242,9 @@ _nss_nis_getaliasbyname_r (const char *name, struct aliasent *alias, - int len; - int yperr = yp_match (domain, "mail.aliases", name2, namlen, &result, &len); - -+ if (!use_alloca) -+ free (name2); -+ - if (__builtin_expect (yperr != YPERR_SUCCESS, 0)) - { - enum nss_status retval = yperr2nss (yperr); -diff --git a/nscd/nscd_getserv_r.c b/nscd/nscd_getserv_r.c -index dce4165..de96a57 100644 ---- a/nscd/nscd_getserv_r.c -+++ b/nscd/nscd_getserv_r.c -@@ -1,4 +1,4 @@ --/* Copyright (C) 2007, 2009 Free Software Foundation, Inc. -+/* Copyright (C) 2007, 2009, 2011 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2007. - -@@ -17,6 +17,7 @@ - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -+#include - #include - #include - #include -@@ -80,6 +81,7 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto, - { - int gc_cycle; - int nretries = 0; -+ size_t alloca_used = 0; - - /* If the mapping is available, try to search there instead of - communicating with the nscd. */ -@@ -88,13 +90,23 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto, - &gc_cycle); - size_t protolen = proto == NULL ? 0 : strlen (proto); - size_t keylen = critlen + 1 + protolen + 1; -- char *key = alloca (keylen); -+ int alloca_key = __libc_use_alloca (keylen); -+ char *key; -+ if (alloca_key) -+ key = alloca_account (keylen, alloca_used); -+ else -+ { -+ key = malloc (keylen); -+ if (key == NULL) -+ return -1; -+ } - memcpy (__mempcpy (__mempcpy (key, crit, critlen), - "/", 1), proto ?: "", protolen + 1); - - retry:; - const char *s_name = NULL; - const char *s_proto = NULL; -+ int alloca_aliases_len = 0; - const uint32_t *aliases_len = NULL; - const char *aliases_list = NULL; - int retval = -1; -@@ -136,8 +148,22 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto, - if (((uintptr_t) aliases_len & (__alignof__ (*aliases_len) - 1)) - != 0) - { -- uint32_t *tmp = alloca (serv_resp.s_aliases_cnt -- * sizeof (uint32_t)); -+ uint32_t *tmp; -+ alloca_aliases_len -+ = __libc_use_alloca (alloca_used -+ + (serv_resp.s_aliases_cnt -+ * sizeof (uint32_t))); -+ if (alloca_aliases_len) -+ tmp = __alloca (serv_resp.s_aliases_cnt * sizeof (uint32_t)); -+ else -+ { -+ tmp = malloc (serv_resp.s_aliases_cnt * sizeof (uint32_t)); -+ if (tmp == NULL) -+ { -+ retval = ENOMEM; -+ goto out; -+ } -+ } - aliases_len = memcpy (tmp, aliases_len, - serv_resp.s_aliases_cnt - * sizeof (uint32_t)); -@@ -217,8 +243,24 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto, - - if (serv_resp.s_aliases_cnt > 0) - { -- aliases_len = alloca (serv_resp.s_aliases_cnt -- * sizeof (uint32_t)); -+ assert (alloca_aliases_len == 0); -+ alloca_aliases_len -+ = __libc_use_alloca (alloca_used -+ + (serv_resp.s_aliases_cnt -+ * sizeof (uint32_t))); -+ if (alloca_aliases_len) -+ aliases_len = alloca (serv_resp.s_aliases_cnt -+ * sizeof (uint32_t)); -+ else -+ { -+ aliases_len = malloc (serv_resp.s_aliases_cnt -+ * sizeof (uint32_t)); -+ if (aliases_len == NULL) -+ { -+ retval = ENOMEM; -+ goto out_close; -+ } -+ } - vec[n].iov_base = (void *) aliases_len; - vec[n].iov_len = serv_resp.s_aliases_cnt * sizeof (uint32_t); - -@@ -329,5 +371,10 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto, - goto retry; - } - -+ if (!alloca_aliases_len) -+ free ((void *) aliases_len); -+ if (!alloca_key) -+ free (key); -+ - return retval; - } -diff --git a/posix/glob.c b/posix/glob.c -index 6df083a..79b6e50 100644 ---- a/posix/glob.c -+++ b/posix/glob.c -@@ -1,4 +1,4 @@ --/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 -+/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - -@@ -199,7 +199,7 @@ static const char *next_brace_sub (const char *begin, int flags) __THROW; - - static int glob_in_dir (const char *pattern, const char *directory, - int flags, int (*errfunc) (const char *, int), -- glob_t *pglob); -+ glob_t *pglob, size_t alloca_used); - extern int __glob_pattern_type (const char *pattern, int quote) - attribute_hidden; - -@@ -253,13 +253,18 @@ glob (pattern, flags, errfunc, pglob) - glob_t *pglob; - { - const char *filename; -- const char *dirname; -+ char *dirname = NULL; - size_t dirlen; - int status; - size_t oldcount; - int meta; - int dirname_modified; -+ int malloc_dirname = 0; - glob_t dirs; -+ int retval = 0; -+#ifdef _LIBC -+ size_t alloca_used = 0; -+#endif - - if (pattern == NULL || pglob == NULL || (flags & ~__GLOB_FLAGS) != 0) - { -@@ -308,20 +313,26 @@ glob (pattern, flags, errfunc, pglob) - const char *next; - const char *rest; - size_t rest_len; --#ifdef __GNUC__ -- char onealt[strlen (pattern) - 1]; --#else -- char *onealt = (char *) malloc (strlen (pattern) - 1); -- if (onealt == NULL) -+ char *onealt; -+ size_t pattern_len = strlen (pattern) - 1; -+#ifdef _LIBC -+ int alloca_onealt = __libc_use_alloca (alloca_used + pattern_len); -+ if (alloca_onealt) -+ onealt = alloca_account (pattern_len, alloca_used); -+ else -+#endif - { -- if (!(flags & GLOB_APPEND)) -+ onealt = (char *) malloc (pattern_len); -+ if (onealt == NULL) - { -- pglob->gl_pathc = 0; -- pglob->gl_pathv = NULL; -+ if (!(flags & GLOB_APPEND)) -+ { -+ pglob->gl_pathc = 0; -+ pglob->gl_pathv = NULL; -+ } -+ return GLOB_NOSPACE; - } -- return GLOB_NOSPACE; - } --#endif - - /* We know the prefix for all sub-patterns. */ - alt_start = mempcpy (onealt, pattern, begin - pattern); -@@ -332,9 +343,11 @@ glob (pattern, flags, errfunc, pglob) - if (next == NULL) - { - /* It is an illegal expression. */ --#ifndef __GNUC__ -- free (onealt); -+ illegal_brace: -+#ifdef _LIBC -+ if (__builtin_expect (!alloca_onealt, 0)) - #endif -+ free (onealt); - return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob); - } - -@@ -344,13 +357,8 @@ glob (pattern, flags, errfunc, pglob) - { - rest = next_brace_sub (rest + 1, flags); - if (rest == NULL) -- { -- /* It is an illegal expression. */ --#ifndef __GNUC__ -- free (onealt); --#endif -- return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob); -- } -+ /* It is an illegal expression. */ -+ goto illegal_brace; - } - /* Please note that we now can be sure the brace expression - is well-formed. */ -@@ -386,9 +394,10 @@ glob (pattern, flags, errfunc, pglob) - /* If we got an error, return it. */ - if (result && result != GLOB_NOMATCH) - { --#ifndef __GNUC__ -- free (onealt); -+#ifdef _LIBC -+ if (__builtin_expect (!alloca_onealt, 0)) - #endif -+ free (onealt); - if (!(flags & GLOB_APPEND)) - { - globfree (pglob); -@@ -406,9 +415,10 @@ glob (pattern, flags, errfunc, pglob) - assert (next != NULL); - } - --#ifndef __GNUC__ -- free (onealt); -+#ifdef _LIBC -+ if (__builtin_expect (!alloca_onealt, 0)) - #endif -+ free (onealt); - - if (pglob->gl_pathc != firstc) - /* We found some entries. */ -@@ -455,7 +465,7 @@ glob (pattern, flags, errfunc, pglob) - case is nothing but a notation for a directory. */ - if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && pattern[0] == '~') - { -- dirname = pattern; -+ dirname = (char *) pattern; - dirlen = strlen (pattern); - - /* Set FILENAME to NULL as a special flag. This is ugly but -@@ -473,9 +483,9 @@ glob (pattern, flags, errfunc, pglob) - - filename = pattern; - #ifdef _AMIGA -- dirname = ""; -+ dirname = (char *) ""; - #else -- dirname = "."; -+ dirname = (char *) "."; - #endif - dirlen = 0; - } -@@ -485,7 +495,7 @@ glob (pattern, flags, errfunc, pglob) - && (flags & GLOB_NOESCAPE) == 0)) - { - /* "/pattern" or "\\/pattern". */ -- dirname = "/"; -+ dirname = (char *) "/"; - dirlen = 1; - ++filename; - } -@@ -511,7 +521,17 @@ glob (pattern, flags, errfunc, pglob) - from "d:/", since "d:" and "d:/" are not the same.*/ - } - #endif -- newp = (char *) __alloca (dirlen + 1); -+#ifdef _LIBC -+ if (__libc_use_alloca (alloca_used + dirlen + 1)) -+ newp = alloca_account (dirlen + 1, alloca_used); -+ else -+#endif -+ { -+ newp = malloc (dirlen + 1); -+ if (newp == NULL) -+ return GLOB_NOSPACE; -+ malloc_dirname = 1; -+ } - *((char *) mempcpy (newp, pattern, dirlen)) = '\0'; - dirname = newp; - ++filename; -@@ -551,7 +571,8 @@ glob (pattern, flags, errfunc, pglob) - oldcount = pglob->gl_pathc + pglob->gl_offs; - goto no_matches; - } -- return val; -+ retval = val; -+ goto out; - } - } - -@@ -563,7 +584,8 @@ glob (pattern, flags, errfunc, pglob) - && (dirname[2] == '\0' || dirname[2] == '/'))) - { - /* Look up home directory. */ -- const char *home_dir = getenv ("HOME"); -+ char *home_dir = getenv ("HOME"); -+ int malloc_home_dir = 0; - # ifdef _AMIGA - if (home_dir == NULL || home_dir[0] == '\0') - home_dir = "SYS:"; -@@ -582,7 +604,7 @@ glob (pattern, flags, errfunc, pglob) - /* `sysconf' does not support _SC_LOGIN_NAME_MAX. Try - a moderate value. */ - buflen = 20; -- name = (char *) __alloca (buflen); -+ name = alloca_account (buflen, alloca_used); - - success = getlogin_r (name, buflen) == 0; - if (success) -@@ -592,6 +614,7 @@ glob (pattern, flags, errfunc, pglob) - long int pwbuflen = GETPW_R_SIZE_MAX (); - char *pwtmpbuf; - struct passwd pwbuf; -+ int malloc_pwtmpbuf = 0; - int save = errno; - - # ifndef _LIBC -@@ -600,7 +623,18 @@ glob (pattern, flags, errfunc, pglob) - Try a moderate value. */ - pwbuflen = 1024; - # endif -- pwtmpbuf = (char *) __alloca (pwbuflen); -+ if (__libc_use_alloca (alloca_used + pwbuflen)) -+ pwtmpbuf = alloca_account (pwbuflen, alloca_used); -+ else -+ { -+ pwtmpbuf = malloc (pwbuflen); -+ if (pwtmpbuf == NULL) -+ { -+ retval = GLOB_NOSPACE; -+ goto out; -+ } -+ malloc_pwtmpbuf = 1; -+ } - - while (getpwnam_r (name, &pwbuf, pwtmpbuf, pwbuflen, &p) - != 0) -@@ -610,46 +644,115 @@ glob (pattern, flags, errfunc, pglob) - p = NULL; - break; - } --# ifdef _LIBC -- pwtmpbuf = extend_alloca (pwtmpbuf, pwbuflen, -+ -+ if (!malloc_pwtmpbuf -+ && __libc_use_alloca (alloca_used -+ + 2 * pwbuflen)) -+ pwtmpbuf = extend_alloca_account (pwtmpbuf, pwbuflen, -+ 2 * pwbuflen, -+ alloca_used); -+ else -+ { -+ char *newp = realloc (malloc_pwtmpbuf -+ ? pwtmpbuf : NULL, - 2 * pwbuflen); --# else -- pwbuflen *= 2; -- pwtmpbuf = (char *) __alloca (pwbuflen); --# endif -+ if (newp == NULL) -+ { -+ if (__builtin_expect (malloc_pwtmpbuf, 0)) -+ free (pwtmpbuf); -+ retval = GLOB_NOSPACE; -+ goto out; -+ } -+ pwtmpbuf = newp; -+ pwbuflen = 2 * pwbuflen; -+ malloc_pwtmpbuf = 1; -+ } - __set_errno (save); - } - # else - p = getpwnam (name); - # endif - if (p != NULL) -- home_dir = p->pw_dir; -+ { -+ if (!malloc_pwtmpbuf) -+ home_dir = p->pw_dir; -+ else -+ { -+ size_t home_dir_len = strlen (p->pw_dir) + 1; -+ if (__libc_use_alloca (alloca_used + home_dir_len)) -+ home_dir = alloca_account (home_dir_len, -+ alloca_used); -+ else -+ { -+ home_dir = malloc (home_dir_len); -+ if (home_dir == NULL) -+ { -+ free (pwtmpbuf); -+ retval = GLOB_NOSPACE; -+ goto out; -+ } -+ malloc_home_dir = 1; -+ } -+ memcpy (home_dir, p->pw_dir, home_dir_len); -+ -+ free (pwtmpbuf); -+ } -+ } - } - } - if (home_dir == NULL || home_dir[0] == '\0') - { - if (flags & GLOB_TILDE_CHECK) -- return GLOB_NOMATCH; -+ { -+ if (__builtin_expect (malloc_home_dir, 0)) -+ free (home_dir); -+ retval = GLOB_NOMATCH; -+ goto out; -+ } - else -- home_dir = "~"; /* No luck. */ -+ home_dir = (char *) "~"; /* No luck. */ - } - # endif /* WINDOWS32 */ - # endif - /* Now construct the full directory. */ - if (dirname[1] == '\0') - { -+ if (__builtin_expect (malloc_dirname, 0)) -+ free (dirname); -+ - dirname = home_dir; - dirlen = strlen (dirname); -+ malloc_dirname = malloc_home_dir; - } - else - { - char *newp; - size_t home_len = strlen (home_dir); -- newp = (char *) __alloca (home_len + dirlen); -+ int use_alloca = __libc_use_alloca (alloca_used -+ + home_len + dirlen); -+ if (use_alloca) -+ newp = alloca_account (home_len + dirlen, alloca_used); -+ else -+ { -+ newp = malloc (home_len + dirlen); -+ if (newp == NULL) -+ { -+ if (__builtin_expect (malloc_home_dir, 0)) -+ free (home_dir); -+ retval = GLOB_NOSPACE; -+ goto out; -+ } -+ } -+ - mempcpy (mempcpy (newp, home_dir, home_len), - &dirname[1], dirlen); -+ -+ if (__builtin_expect (malloc_dirname, 0)) -+ free (dirname); -+ - dirname = newp; - dirlen += home_len - 1; -+ malloc_dirname = !use_alloca; - } - dirname_modified = 1; - } -@@ -657,7 +760,8 @@ glob (pattern, flags, errfunc, pglob) - else - { - char *end_name = strchr (dirname, '/'); -- const char *user_name; -+ char *user_name; -+ int malloc_user_name = 0; - const char *home_dir; - char *unescape = NULL; - -@@ -677,7 +781,18 @@ glob (pattern, flags, errfunc, pglob) - else - { - char *newp; -- newp = (char *) __alloca (end_name - dirname); -+ if (__libc_use_alloca (alloca_used + (end_name - dirname))) -+ newp = alloca_account (end_name - dirname, alloca_used); -+ else -+ { -+ newp = malloc (end_name - dirname); -+ if (newp == NULL) -+ { -+ retval = GLOB_NOSPACE; -+ goto out; -+ } -+ malloc_user_name = 1; -+ } - if (unescape != NULL) - { - char *p = mempcpy (newp, dirname + 1, -@@ -714,6 +829,7 @@ glob (pattern, flags, errfunc, pglob) - # if defined HAVE_GETPWNAM_R || defined _LIBC - long int buflen = GETPW_R_SIZE_MAX (); - char *pwtmpbuf; -+ int malloc_pwtmpbuf = 0; - struct passwd pwbuf; - int save = errno; - -@@ -723,7 +839,21 @@ glob (pattern, flags, errfunc, pglob) - moderate value. */ - buflen = 1024; - # endif -- pwtmpbuf = (char *) __alloca (buflen); -+ if (__libc_use_alloca (alloca_used + buflen)) -+ pwtmpbuf = alloca_account (buflen, alloca_used); -+ else -+ { -+ pwtmpbuf = malloc (buflen); -+ if (pwtmpbuf == NULL) -+ { -+ nomem_getpw: -+ if (__builtin_expect (malloc_user_name, 0)) -+ free (user_name); -+ retval = GLOB_NOSPACE; -+ goto out; -+ } -+ malloc_pwtmpbuf = 1; -+ } - - while (getpwnam_r (user_name, &pwbuf, pwtmpbuf, buflen, &p) != 0) - { -@@ -732,40 +862,77 @@ glob (pattern, flags, errfunc, pglob) - p = NULL; - break; - } --# ifdef _LIBC -- pwtmpbuf = extend_alloca (pwtmpbuf, buflen, 2 * buflen); --# else -- buflen *= 2; -- pwtmpbuf = __alloca (buflen); --# endif -+ if (!malloc_pwtmpbuf -+ && __libc_use_alloca (alloca_used + 2 * buflen)) -+ pwtmpbuf = extend_alloca_account (pwtmpbuf, buflen, -+ 2 * buflen, alloca_used); -+ else -+ { -+ char *newp = realloc (malloc_pwtmpbuf ? pwtmpbuf : NULL, -+ 2 * buflen); -+ if (newp == NULL) -+ { -+ if (__builtin_expect (malloc_pwtmpbuf, 0)) -+ free (pwtmpbuf); -+ goto nomem_getpw; -+ } -+ pwtmpbuf = newp; -+ malloc_pwtmpbuf = 1; -+ } - __set_errno (save); - } - # else - p = getpwnam (user_name); - # endif -+ -+ if (__builtin_expect (malloc_user_name, 0)) -+ free (user_name); -+ -+ /* If we found a home directory use this. */ - if (p != NULL) -- home_dir = p->pw_dir; -+ { -+ size_t home_len = strlen (p->pw_dir); -+ size_t rest_len = end_name == NULL ? 0 : strlen (end_name); -+ -+ if (__builtin_expect (malloc_dirname, 0)) -+ free (dirname); -+ malloc_dirname = 0; -+ -+ if (__libc_use_alloca (alloca_used + home_len + rest_len + 1)) -+ dirname = alloca_account (home_len + rest_len + 1, -+ alloca_used); -+ else -+ { -+ dirname = malloc (home_len + rest_len + 1); -+ if (dirname == NULL) -+ { -+ if (__builtin_expect (malloc_pwtmpbuf, 0)) -+ free (pwtmpbuf); -+ retval = GLOB_NOSPACE; -+ goto out; -+ } -+ malloc_dirname = 1; -+ } -+ *((char *) mempcpy (mempcpy (dirname, p->pw_dir, home_len), -+ end_name, rest_len)) = '\0'; -+ -+ dirlen = home_len + rest_len; -+ dirname_modified = 1; -+ -+ if (__builtin_expect (malloc_pwtmpbuf, 0)) -+ free (pwtmpbuf); -+ } - else -- home_dir = NULL; -+ { -+ if (__builtin_expect (malloc_pwtmpbuf, 0)) -+ free (pwtmpbuf); -+ -+ if (flags & GLOB_TILDE_CHECK) -+ /* We have to regard it as an error if we cannot find the -+ home directory. */ -+ return GLOB_NOMATCH; -+ } - } -- /* If we found a home directory use this. */ -- if (home_dir != NULL) -- { -- char *newp; -- size_t home_len = strlen (home_dir); -- size_t rest_len = end_name == NULL ? 0 : strlen (end_name); -- newp = (char *) __alloca (home_len + rest_len + 1); -- *((char *) mempcpy (mempcpy (newp, home_dir, home_len), -- end_name, rest_len)) = '\0'; -- dirname = newp; -- dirlen = home_len + rest_len; -- dirname_modified = 1; -- } -- else -- if (flags & GLOB_TILDE_CHECK) -- /* We have to regard it as an error if we cannot find the -- home directory. */ -- return GLOB_NOMATCH; - } - # endif /* Not Amiga && not WINDOWS32. */ - } -@@ -899,7 +1066,7 @@ glob (pattern, flags, errfunc, pglob) - status = glob_in_dir (filename, dirs.gl_pathv[i], - ((flags | GLOB_APPEND) - & ~(GLOB_NOCHECK | GLOB_NOMAGIC)), -- errfunc, pglob); -+ errfunc, pglob, alloca_used); - if (status == GLOB_NOMATCH) - /* No matches in this directory. Try the next. */ - continue; -@@ -1000,7 +1167,8 @@ glob (pattern, flags, errfunc, pglob) - } - if (dirname_modified) - flags &= ~(GLOB_NOCHECK | GLOB_NOMAGIC); -- status = glob_in_dir (filename, dirname, flags, errfunc, pglob); -+ status = glob_in_dir (filename, dirname, flags, errfunc, pglob, -+ alloca_used); - if (status != 0) - { - if (status == GLOB_NOMATCH && flags != orig_flags -@@ -1063,7 +1231,11 @@ glob (pattern, flags, errfunc, pglob) - sizeof (char *), collated_compare); - } - -- return 0; -+ out: -+ if (__builtin_expect (malloc_dirname, 0)) -+ free (dirname); -+ -+ return retval; - } - #if defined _LIBC && !defined glob - libc_hidden_def (glob) -@@ -1273,7 +1445,7 @@ link_exists2_p (const char *dir, size_t dirlen, const char *fname, - static int - glob_in_dir (const char *pattern, const char *directory, int flags, - int (*errfunc) (const char *, int), -- glob_t *pglob) -+ glob_t *pglob, size_t alloca_used) - { - size_t dirlen = strlen (directory); - void *stream = NULL; -@@ -1288,11 +1460,12 @@ glob_in_dir (const char *pattern, const char *directory, int flags, - struct globnames *names = &init_names; - struct globnames *names_alloca = &init_names; - size_t nfound = 0; -- size_t allocasize = sizeof (init_names); - size_t cur = 0; - int meta; - int save; - -+ alloca_used += sizeof (init_names); -+ - init_names.next = NULL; - init_names.count = INITIAL_COUNT; - -@@ -1308,20 +1481,36 @@ glob_in_dir (const char *pattern, const char *directory, int flags, - { - /* Since we use the normal file functions we can also use stat() - to verify the file is there. */ -- struct stat st; -- struct_stat64 st64; -+ union -+ { -+ struct stat st; -+ struct_stat64 st64; -+ } ust; - size_t patlen = strlen (pattern); -- char *fullname = (char *) __alloca (dirlen + 1 + patlen + 1); -+ int alloca_fullname = __libc_use_alloca (alloca_used -+ + dirlen + 1 + patlen + 1); -+ char *fullname; -+ if (alloca_fullname) -+ fullname = alloca_account (dirlen + 1 + patlen + 1, alloca_used); -+ else -+ { -+ fullname = malloc (dirlen + 1 + patlen + 1); -+ if (fullname == NULL) -+ return GLOB_NOSPACE; -+ } - - mempcpy (mempcpy (mempcpy (fullname, directory, dirlen), - "/", 1), - pattern, patlen + 1); - if ((__builtin_expect (flags & GLOB_ALTDIRFUNC, 0) -- ? (*pglob->gl_stat) (fullname, &st) -- : __stat64 (fullname, &st64)) == 0) -+ ? (*pglob->gl_stat) (fullname, &ust.st) -+ : __stat64 (fullname, &ust.st64)) == 0) - /* We found this file to be existing. Now tell the rest - of the function to copy this name into the result. */ - flags |= GLOB_NOCHECK; -+ -+ if (__builtin_expect (!alloca_fullname, 0)) -+ free (fullname); - } - else - { -@@ -1409,9 +1598,9 @@ glob_in_dir (const char *pattern, const char *directory, int flags, - size_t size = (sizeof (struct globnames) - + ((count - INITIAL_COUNT) - * sizeof (char *))); -- allocasize += size; -- if (__libc_use_alloca (allocasize)) -- newnames = names_alloca = __alloca (size); -+ if (__libc_use_alloca (alloca_used + size)) -+ newnames = names_alloca -+ = alloca_account (size, alloca_used); - else if ((newnames = malloc (size)) - == NULL) - goto memory_error; diff --git a/src/patches/glibc/glibc-rh804686.patch b/src/patches/glibc/glibc-rh804686.patch deleted file mode 100644 index 292cd84301..0000000000 --- a/src/patches/glibc/glibc-rh804686.patch +++ /dev/null @@ -1,87 +0,0 @@ ---- a/resolv/res_query.c 2010-05-04 05:27:23.000000000 -0600 -+++ a/resolv/res_query.c 2012-08-03 13:43:10.761506047 -0600 -@@ -122,6 +122,7 @@ __libc_res_nquery(res_state statp, - int *resplen2) - { - HEADER *hp = (HEADER *) answer; -+ HEADER *hp2; - int n, use_malloc = 0; - u_int oflags = statp->_flags; - -@@ -239,26 +240,25 @@ __libc_res_nquery(res_state statp, - /* __libc_res_nsend might have reallocated the buffer. */ - hp = (HEADER *) *answerp; - -- /* We simplify the following tests by assigning HP to HP2. It -- is easy to verify that this is the same as ignoring all -- tests of HP2. */ -- HEADER *hp2 = answerp2 ? (HEADER *) *answerp2 : hp; -- -- if (n < (int) sizeof (HEADER) && answerp2 != NULL -- && *resplen2 > (int) sizeof (HEADER)) -+ /* We simplify the following tests by assigning HP to HP2 or -+ vice versa. It is easy to verify that this is the same as -+ ignoring all tests of HP or HP2. */ -+ if (answerp2 == NULL || *resplen2 < (int) sizeof (HEADER)) - { -- /* Special case of partial answer. */ -- assert (hp != hp2); -- hp = hp2; -+ hp2 = hp; - } -- else if (answerp2 != NULL && *resplen2 < (int) sizeof (HEADER) -- && n > (int) sizeof (HEADER)) -+ else - { -- /* Special case of partial answer. */ -- assert (hp != hp2); -- hp2 = hp; -+ hp2 = (HEADER *) *answerp2; -+ if (n < (int) sizeof (HEADER)) -+ { -+ hp = hp2; -+ } - } - -+ /* Make sure both hp and hp2 are defined */ -+ assert((hp != NULL) && (hp2 != NULL)); -+ - if ((hp->rcode != NOERROR || ntohs(hp->ancount) == 0) - && (hp2->rcode != NOERROR || ntohs(hp2->ancount) == 0)) { - #ifdef DEBUG ---- a/resolv/res_send.c 2012-08-03 13:31:26.622168278 -0600 -+++ a/resolv/res_send.c 2012-08-03 13:43:11.881501862 -0600 -@@ -549,7 +549,7 @@ __libc_res_nsend(res_state statp, const - ns, ansp, ansp2, nansp2, resplen2); - if (n < 0) - return (-1); -- if (n == 0) -+ if (n == 0 && (buf2 == NULL || *resplen2 == 0)) - goto next_ns; - } else { - /* Use datagrams. */ -@@ -559,7 +559,7 @@ __libc_res_nsend(res_state statp, const - ansp2, nansp2, resplen2); - if (n < 0) - return (-1); -- if (n == 0) -+ if (n == 0 && (buf2 == NULL || *resplen2 == 0)) - goto next_ns; - if (v_circuit) - // XXX Check whether both requests failed or -@@ -1275,10 +1275,14 @@ send_dg(res_state statp, - (*thisresplenp > *thisanssizp) - ? *thisanssizp : *thisresplenp); - -- if (recvresp1 || (buf2 != NULL && recvresp2)) -+ if (recvresp1 || (buf2 != NULL && recvresp2)) { -+ *resplen2 = 0; - return resplen; -+ } - if (buf2 != NULL) - { -+ /* No data from the first reply. */ -+ resplen = 0; - /* We are waiting for a possible second reply. */ - if (hp->id == anhp->id) - recvresp1 = 1; diff --git a/src/patches/glibc/glibc-rh804689.patch b/src/patches/glibc/glibc-rh804689.patch deleted file mode 100644 index a96a33f700..0000000000 --- a/src/patches/glibc/glibc-rh804689.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff -rup a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c ---- a/sysdeps/posix/getaddrinfo.c 2012-03-20 21:31:14.177358937 -0600 -+++ b/sysdeps/posix/getaddrinfo.c 2012-03-21 09:13:17.198290683 -0600 -@@ -560,15 +563,11 @@ gaih_inet (const char *name, const struc - int no_more; - int old_res_options; - -- /* If we do not have to look for IPv4 and IPv6 together, use -- the simple, old functions. */ -- if ((req->ai_family == AF_INET -- || (req->ai_family == AF_INET6 -- && ((req->ai_flags & AI_V4MAPPED) == 0 -- || (req->ai_flags & AI_ALL) == 0))) -- && (req->ai_flags & AI_CANONNAME) == 0) -+ /* If we do not have to look for IPv6 addresses, use -+ the simple, old functions, which do not support -+ IPv6 scope ids. */ -+ if (req->ai_family == AF_INET) - { -- int family = req->ai_family; - size_t tmpbuflen = 512; - assert (tmpbuf == NULL); - tmpbuf = alloca_account (tmpbuflen, alloca_used); diff --git a/src/patches/glibc/glibc-rh806404.patch b/src/patches/glibc/glibc-rh806404.patch deleted file mode 100644 index b78b903b73..0000000000 --- a/src/patches/glibc/glibc-rh806404.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -rup a/nss/getnssent.c b/nss/getnssent.c ---- a/nss/getnssent.c 2004-12-13 14:48:34.000000000 -0700 -+++ b/nss/getnssent.c 2012-03-23 13:46:54.639095121 -0600 -@@ -33,7 +33,7 @@ __nss_getent (getent_r_function func, vo - *buffer = malloc (*buffer_size); - } - -- while (buffer != NULL -+ while (*buffer != NULL - && func (resbuf, *buffer, *buffer_size, &result, h_errnop) == ERANGE - && (h_errnop == NULL || *h_errnop == NETDB_INTERNAL)) - { diff --git a/src/patches/glibc/glibc-rh808337.patch b/src/patches/glibc/glibc-rh808337.patch deleted file mode 100644 index bc20cbc26e..0000000000 --- a/src/patches/glibc/glibc-rh808337.patch +++ /dev/null @@ -1,21 +0,0 @@ -commit 6a5ee1029b3966c5ae9adaaa881e255b2880f511 -Author: Ulrich Drepper -Date: Sun Mar 6 00:01:50 2011 -0500 - - Fix loading first object along a path when tracing. - -diff --git a/elf/dl-load.c b/elf/dl-load.c -index 1ad16a0..f866066 100644 ---- a/elf/dl-load.c -+++ b/elf/dl-load.c -@@ -2111,7 +2111,9 @@ _dl_map_object (struct link_map *loader, const char *name, - { - #ifdef SHARED - // XXX Correct to unconditionally default to namespace 0? -- l = loader ?: GL(dl_ns)[LM_ID_BASE]._ns_loaded; -+ l = (loader -+ ?: GL(dl_ns)[LM_ID_BASE]._ns_loaded -+ ?: &GL(dl_rtld_map)); - #else - l = loader; - #endif diff --git a/src/patches/glibc/glibc-rh808545.patch b/src/patches/glibc/glibc-rh808545.patch deleted file mode 100644 index 9a2cae332c..0000000000 --- a/src/patches/glibc/glibc-rh808545.patch +++ /dev/null @@ -1,44 +0,0 @@ -diff -rup a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c ---- a/resolv/nss_dns/dns-host.c 2012-04-18 11:17:31.527539744 -0600 -+++ b/resolv/nss_dns/dns-host.c 2012-04-18 11:21:45.441394159 -0600 -@@ -745,6 +745,10 @@ getanswer_r (const querybuf *answer, int - - if ((qtype == T_A || qtype == T_AAAA) && type == T_CNAME) - { -+ /* A CNAME could also have a TTL entry. */ -+ if (ttlp != NULL && ttl < *ttlp) -+ *ttlp = ttl; -+ - if (ap >= &host_data->aliases[MAX_NR_ALIASES - 1]) - continue; - n = dn_expand (answer->buf, end_of_message, cp, tbuf, sizeof tbuf); -@@ -906,7 +910,7 @@ getanswer_r (const querybuf *answer, int - { - register int nn; - -- if (ttlp != NULL) -+ if (ttlp != NULL && ttl < *ttlp) - *ttlp = ttl; - if (canonp != NULL) - *canonp = bp; -@@ -1082,6 +1086,11 @@ gaih_getanswer_slice (const querybuf *an - if (type == T_CNAME) - { - char tbuf[MAXDNAME]; -+ -+ /* A CNAME could also have a TTL entry. */ -+ if (ttlp != NULL && ttl < *ttlp) -+ *ttlp = ttl; -+ - n = dn_expand (answer->buf, end_of_message, cp, tbuf, sizeof tbuf); - if (__builtin_expect (n < 0 || res_hnok (tbuf) == 0, 0)) - { -@@ -1162,7 +1171,7 @@ gaih_getanswer_slice (const querybuf *an - - if (*firstp) - { -- if (ttlp != NULL) -+ if (ttlp != NULL && ttl < *ttlp) - *ttlp = ttl; - - (*pat)->name = canon ?: h_name; diff --git a/src/patches/glibc/glibc-rh809602.patch b/src/patches/glibc/glibc-rh809602.patch deleted file mode 100644 index 81aa63aba5..0000000000 --- a/src/patches/glibc/glibc-rh809602.patch +++ /dev/null @@ -1,47 +0,0 @@ -diff -rup a/nscd/nscd_getserv_r.c b/nscd/nscd_getserv_r.c ---- a/nscd/nscd_getserv_r.c 2012-04-04 16:37:27.873951850 -0600 -+++ b/nscd/nscd_getserv_r.c 2012-04-04 16:37:49.904837348 -0600 -@@ -124,6 +123,7 @@ nscd_getserv_r (const char *crit, size_t - s_name = (char *) (&found->data[0].servdata + 1); - serv_resp = found->data[0].servdata; - s_proto = s_name + serv_resp.s_name_len; -+ alloca_aliases_len = 1; - aliases_len = (uint32_t *) (s_proto + serv_resp.s_proto_len); - aliases_list = ((char *) aliases_len - + serv_resp.s_aliases_cnt * sizeof (uint32_t)); -@@ -154,7 +154,9 @@ nscd_getserv_r (const char *crit, size_t - + (serv_resp.s_aliases_cnt - * sizeof (uint32_t))); - if (alloca_aliases_len) -- tmp = __alloca (serv_resp.s_aliases_cnt * sizeof (uint32_t)); -+ tmp = alloca_account (serv_resp.s_aliases_cnt -+ * sizeof (uint32_t), -+ alloca_used); - else - { - tmp = malloc (serv_resp.s_aliases_cnt * sizeof (uint32_t)); -@@ -249,8 +251,9 @@ nscd_getserv_r (const char *crit, size_t - + (serv_resp.s_aliases_cnt - * sizeof (uint32_t))); - if (alloca_aliases_len) -- aliases_len = alloca (serv_resp.s_aliases_cnt -- * sizeof (uint32_t)); -+ aliases_len = alloca_account (serv_resp.s_aliases_cnt -+ * sizeof (uint32_t), -+ alloca_used); - else - { - aliases_len = malloc (serv_resp.s_aliases_cnt -@@ -368,7 +371,11 @@ nscd_getserv_r (const char *crit, size_t - } - - if (retval != -1) -- goto retry; -+ { -+ if (!alloca_aliases_len) -+ free ((void *) aliases_len); -+ goto retry; -+ } - } - - if (!alloca_aliases_len) diff --git a/src/patches/glibc/glibc-rh809726.patch b/src/patches/glibc/glibc-rh809726.patch deleted file mode 100644 index 0f264c817f..0000000000 --- a/src/patches/glibc/glibc-rh809726.patch +++ /dev/null @@ -1,89 +0,0 @@ -diff -rup a/localedata/locales/fi_FI b/localedata/locales/fi_FI ---- a/localedata/locales/fi_FI 2012-07-11 14:48:45.994749607 -0600 -+++ b/localedata/locales/fi_FI 2012-07-11 14:50:20.003277477 -0600 -@@ -63,60 +63,65 @@ reorder-after - - - --reorder-after -+reorder-after - ;;;IGNORE -- ;;;IGNORE - ;;;IGNORE -- ;;;IGNORE - ;;;IGNORE -- ;;;IGNORE - ;;;IGNORE -- ;;;IGNORE - ;;;IGNORE -- ;;;IGNORE - ;;;IGNORE -- ;;;IGNORE - ;;;IGNORE -- ;;;IGNORE - ;;;IGNORE -- ;;;IGNORE - ;;;IGNORE -- ;;;IGNORE - ;;;IGNORE -+reorder-after -+ ;;;IGNORE -+ ;;;IGNORE -+ ;;;IGNORE -+ ;;;IGNORE -+ ;;;IGNORE -+ ;;;IGNORE -+ ;;;IGNORE -+ ;;;IGNORE -+ ;;;IGNORE - ;;;IGNORE - --reorder-after -+reorder-after - ;;; -- ;;; - ;;; -- ;;; - ;;; -- ;;; - ;;; -- ;;; - ;;; -- ;;; - ;;; -- ;;; - ;;; -- ;;; - ;;; -+reorder-after -+ ;;; -+ ;;; -+ ;;; -+ ;;; -+ ;;; -+ ;;; -+ ;;; - ;;; - - reorder-after - ;;;IGNORE -+reorder-after - ;;;IGNORE - - % Present in iso14651_t1, but these definitions seem to have been - % removed from latest iso14651 tables. --reorder-after -+reorder-after - "";"";"";IGNORE -+reorder-after - "";"";"";IGNORE - - reorder-after - ;;;IGNORE -- ;;;IGNORE - ;;;IGNORE -+reorder-after -+ ;;;IGNORE - ;;;IGNORE - - reorder-end diff --git a/src/patches/glibc/glibc-rh823909.patch b/src/patches/glibc/glibc-rh823909.patch deleted file mode 100644 index ed9c4c91a9..0000000000 --- a/src/patches/glibc/glibc-rh823909.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/iconvdata/ibm930.c b/iconvdata/ibm930.c -index 25a9be0..6f758eb 100644 ---- a/iconvdata/ibm930.c -+++ b/iconvdata/ibm930.c -@@ -162,7 +162,8 @@ enum - while (ch > rp2->end) \ - ++rp2; \ - \ -- if (__builtin_expect (ch < rp2->start, 0) \ -+ if (__builtin_expect (rp2->start == 0xffff, 0) \ -+ || __builtin_expect (ch < rp2->start, 0) \ - || (res = __ibm930db_to_ucs4[ch + rp2->idx], \ - __builtin_expect (res, L'\1') == L'\0' && ch != '\0')) \ - { \ -@@ -215,7 +216,8 @@ enum - while (ch > rp2->end) \ - ++rp2; \ - \ -- if (__builtin_expect (ch < rp2->start, 0) \ -+ if (__builtin_expect (rp2->start == 0xffff, 0) \ -+ || __builtin_expect (ch < rp2->start, 0) \ - || (cp = __ucs4_to_ibm930db[ch + rp2->idx], \ - __builtin_expect (cp[0], L'\1')== L'\0' && ch != '\0')) \ - { \ - diff --git a/src/patches/glibc/glibc-rh826149.patch b/src/patches/glibc/glibc-rh826149.patch deleted file mode 100644 index 805572bb19..0000000000 --- a/src/patches/glibc/glibc-rh826149.patch +++ /dev/null @@ -1,80 +0,0 @@ -diff -Nrup a/posix/fnmatch.c b/posix/fnmatch.c ---- a/posix/fnmatch.c 2012-05-25 12:37:26.566678872 -0400 -+++ b/posix/fnmatch.c 2012-05-25 13:08:44.451972286 -0400 -@@ -333,6 +333,7 @@ fnmatch (pattern, string, flags) - # if HANDLE_MULTIBYTE - if (__builtin_expect (MB_CUR_MAX, 1) != 1) - { -+ const char *orig_pattern = pattern; - mbstate_t ps; - size_t n; - const char *p; -@@ -356,10 +357,9 @@ fnmatch (pattern, string, flags) - alloca_used); - n = mbsrtowcs (wpattern, &p, n + 1, &ps); - if (__builtin_expect (n == (size_t) -1, 0)) -- /* Something wrong. -- XXX Do we have to set `errno' to something which mbsrtows hasn't -- already done? */ -- return -1; -+ /* Something wrong: Fall back to single byte matching. */ -+ goto try_singlebyte; -+ - if (p) - { - memset (&ps, '\0', sizeof (ps)); -@@ -371,10 +371,8 @@ fnmatch (pattern, string, flags) - prepare_wpattern: - n = mbsrtowcs (NULL, &pattern, 0, &ps); - if (__builtin_expect (n == (size_t) -1, 0)) -- /* Something wrong. -- XXX Do we have to set `errno' to something which mbsrtows hasn't -- already done? */ -- return -1; -+ /* Something wrong: Fall back to single byte matching. */ -+ goto try_singlebyte; - if (__builtin_expect (n >= (size_t) -1 / sizeof (wchar_t), 0)) - { - __set_errno (ENOMEM); -@@ -401,14 +399,8 @@ fnmatch (pattern, string, flags) - alloca_used); - n = mbsrtowcs (wstring, &p, n + 1, &ps); - if (__builtin_expect (n == (size_t) -1, 0)) -- { -- /* Something wrong. -- XXX Do we have to set `errno' to something which -- mbsrtows hasn't already done? */ -- free_return: -- free (wpattern_malloc); -- return -1; -- } -+ /* Something wrong: Fall back to single byte matching. */ -+ goto free_and_try_singlebyte; - if (p) - { - memset (&ps, '\0', sizeof (ps)); -@@ -420,10 +412,8 @@ fnmatch (pattern, string, flags) - prepare_wstring: - n = mbsrtowcs (NULL, &string, 0, &ps); - if (__builtin_expect (n == (size_t) -1, 0)) -- /* Something wrong. -- XXX Do we have to set `errno' to something which mbsrtows hasn't -- already done? */ -- goto free_return; -+ /* Something wrong: Fall back to single byte matching. */ -+ goto free_and_try_singlebyte; - if (__builtin_expect (n >= (size_t) -1 / sizeof (wchar_t), 0)) - { - free (wpattern_malloc); -@@ -450,6 +440,11 @@ fnmatch (pattern, string, flags) - free (wpattern_malloc); - - return res; -+ -+ free_and_try_singlebyte: -+ free(wpattern_malloc); -+ try_singlebyte: -+ pattern = orig_pattern; - } - # endif /* mbstate_t and mbsrtowcs or _LIBC. */ - diff --git a/src/patches/glibc/glibc-rh827362.patch b/src/patches/glibc/glibc-rh827362.patch deleted file mode 100644 index 7e6d07e6df..0000000000 --- a/src/patches/glibc/glibc-rh827362.patch +++ /dev/null @@ -1,250 +0,0 @@ -diff -pruN glibc-2.12-2-gc4ccff1/libio/Makefile glibc-2.12-2-gc4ccff1.fseek/libio/Makefile ---- glibc-2.12-2-gc4ccff1/libio/Makefile 2010-05-04 16:57:23.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fseek/libio/Makefile 2012-09-05 17:28:08.699360413 +0530 -@@ -58,7 +58,7 @@ tests = tst_swprintf tst_wprintf tst_sws - tst-memstream1 tst-memstream2 \ - tst-wmemstream1 tst-wmemstream2 \ - bug-memstream1 bug-wmemstream1 \ -- tst-setvbuf1 tst-popen1 tst-fgetwc bug-wsetpos -+ tst-setvbuf1 tst-popen1 tst-fgetwc bug-wsetpos tst-fseek - test-srcs = test-freopen - - all: # Make this the default target; it will be defined in Rules. -diff -pruN glibc-2.12-2-gc4ccff1/libio/tst-fseek.c glibc-2.12-2-gc4ccff1.fseek/libio/tst-fseek.c ---- glibc-2.12-2-gc4ccff1/libio/tst-fseek.c 1970-01-01 05:30:00.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fseek/libio/tst-fseek.c 2012-09-05 17:27:33.606359692 +0530 -@@ -0,0 +1,153 @@ -+/* Verify that fseek/ftell combination works for wide chars. -+ -+ Copyright (C) 2012 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+/* Defined in test-skeleton.c. */ -+static int create_temp_file (const char *base, char **filename); -+ -+ -+static int -+do_seek_end (FILE *fp) -+{ -+ long save; -+ -+ if (fp == NULL) -+ { -+ printf ("do_seek_end: fopen: %s\n", strerror (errno)); -+ return 1; -+ } -+ -+ if (fputws (L"abc\n", fp) == -1) -+ { -+ printf ("do_seek_end: fputws: %s\n", strerror (errno)); -+ return 1; -+ } -+ -+ save = ftell (fp); -+ rewind (fp); -+ -+ if (fseek (fp, 0, SEEK_END) == -1) -+ { -+ printf ("do_seek_end: fseek: %s\n", strerror (errno)); -+ return 1; -+ } -+ -+ if (save != ftell (fp)) -+ { -+ printf ("save = %ld, ftell = %ld\n", save, ftell (fp)); -+ return 1; -+ } -+ -+ return 0; -+} -+ -+int -+do_seek_set (FILE *fp) -+{ -+ long save; -+ -+ if (fputws (L"abc\n", fp) == -1) -+ { -+ printf ("seek_set: fputws: %s\n", strerror (errno)); -+ return 1; -+ } -+ -+ save = ftell (fp); -+ -+ if (fputws (L"xyz\n", fp) == -1) -+ { -+ printf ("seek_set: fputws: %s\n", strerror (errno)); -+ return 1; -+ } -+ -+ if (fseek (fp, save, SEEK_SET) == -1) -+ { -+ printf ("seek_set: fseek: %s\n", strerror (errno)); -+ return 1; -+ } -+ -+ if (save != ftell (fp)) -+ { -+ printf ("save = %ld, ftell = %ld\n", save, ftell (fp)); -+ return 1; -+ } -+ -+ return 0; -+} -+ -+static int -+do_test (void) -+{ -+ if (setlocale (LC_ALL, "en_US.utf8") == NULL) -+ { -+ printf ("Cannot set en_US.utf8 locale.\n"); -+ exit (1); -+ } -+ -+ int ret = 0; -+ char *filename; -+ int fd = create_temp_file ("tst-fseek.out", &filename); -+ -+ if (fd == -1) -+ return 1; -+ -+ FILE *fp = fdopen (fd, "w+"); -+ if (fp == NULL) -+ { -+ printf ("seek_set: fopen: %s\n", strerror (errno)); -+ close (fd); -+ return 1; -+ } -+ -+ if (do_seek_set (fp)) -+ { -+ printf ("SEEK_SET test failed\n"); -+ ret = 1; -+ } -+ -+ /* Reopen the file. */ -+ fclose (fp); -+ fp = fopen (filename, "w+"); -+ if (fp == NULL) -+ { -+ printf ("seek_end: fopen: %s\n", strerror (errno)); -+ return 1; -+ } -+ -+ if (do_seek_end (fp)) -+ { -+ printf ("SEEK_END test failed\n"); -+ ret = 1; -+ } -+ -+ fclose (fp); -+ -+ return ret; -+} -+ -+ -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" -diff -pruN glibc-2.12-2-gc4ccff1/libio/wfileops.c glibc-2.12-2-gc4ccff1.fseek/libio/wfileops.c ---- glibc-2.12-2-gc4ccff1/libio/wfileops.c 2010-05-04 16:57:23.000000000 +0530 -+++ glibc-2.12-2-gc4ccff1.fseek/libio/wfileops.c 2012-09-05 17:27:33.608359685 +0530 -@@ -547,6 +547,55 @@ _IO_wfile_sync (fp) - } - INTDEF(_IO_wfile_sync) - -+/* Adjust the internal buffer pointers to reflect the state in the external -+ buffer. The content between fp->_IO_read_base and fp->_IO_read_ptr is -+ assumed to be converted and available in the range -+ fp->_wide_data->_IO_read_base and fp->_wide_data->_IO_read_end. */ -+static inline int -+adjust_wide_data (_IO_FILE *fp, bool do_convert) -+{ -+ struct _IO_codecvt *cv = fp->_codecvt; -+ -+ int clen = (*cv->__codecvt_do_encoding) (cv); -+ -+ /* Take the easy way out for constant length encodings if we don't need to -+ convert. */ -+ if (!do_convert && clen > 0) -+ { -+ fp->_wide_data->_IO_read_end += ((fp->_IO_read_ptr - fp->_IO_read_base) -+ / clen); -+ goto done; -+ } -+ -+ enum __codecvt_result status; -+ const char *read_stop = (const char *) fp->_IO_read_base; -+ do -+ { -+ -+ fp->_wide_data->_IO_last_state = fp->_wide_data->_IO_state; -+ status = (*cv->__codecvt_do_in) (cv, &fp->_wide_data->_IO_state, -+ fp->_IO_read_base, fp->_IO_read_ptr, -+ &read_stop, -+ fp->_wide_data->_IO_read_base, -+ fp->_wide_data->_IO_buf_end, -+ &fp->_wide_data->_IO_read_end); -+ -+ /* Should we return EILSEQ? */ -+ if (__builtin_expect (status == __codecvt_error, 0)) -+ { -+ fp->_flags |= _IO_ERR_SEEN; -+ return -1; -+ } -+ } -+ while (__builtin_expect (status == __codecvt_partial, 0)); -+ -+done: -+ /* Now seek to the end of the read buffer. */ -+ fp->_wide_data->_IO_read_ptr = fp->_wide_data->_IO_read_end; -+ -+ return 0; -+} -+ - _IO_off64_t - _IO_wfile_seekoff (fp, offset, dir, mode) - _IO_FILE *fp; -@@ -695,6 +744,10 @@ _IO_wfile_seekoff (fp, offset, dir, mode - fp->_wide_data->_IO_buf_base); - _IO_wsetp (fp, fp->_wide_data->_IO_buf_base, - fp->_wide_data->_IO_buf_base); -+ -+ if (adjust_wide_data (fp, false)) -+ goto dumb; -+ - _IO_mask_flags (fp, 0, _IO_EOF_SEEN); - goto resync; - } -@@ -735,6 +788,10 @@ _IO_wfile_seekoff (fp, offset, dir, mode - _IO_wsetg (fp, fp->_wide_data->_IO_buf_base, - fp->_wide_data->_IO_buf_base, fp->_wide_data->_IO_buf_base); - _IO_wsetp (fp, fp->_wide_data->_IO_buf_base, fp->_wide_data->_IO_buf_base); -+ -+ if (adjust_wide_data (fp, true)) -+ goto dumb; -+ - fp->_offset = result + count; - _IO_mask_flags (fp, 0, _IO_EOF_SEEN); - return offset; diff --git a/src/patches/glibc/glibc-rh830127.patch b/src/patches/glibc/glibc-rh830127.patch deleted file mode 100644 index 06dea73e41..0000000000 --- a/src/patches/glibc/glibc-rh830127.patch +++ /dev/null @@ -1,403 +0,0 @@ -diff -Nrup a/stdio-common/bug22.c b/stdio-common/bug22.c ---- a/stdio-common/bug22.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/stdio-common/bug22.c 2012-08-03 13:56:40.887829210 -0600 -@@ -1,12 +1,22 @@ - /* BZ #5424 */ - #include -+#include - -+/* INT_MAX + 1 */ - #define N 2147483648 - -+/* (INT_MAX / 2) + 2 */ -+#define N2 1073741825 -+ -+/* INT_MAX - 3 */ -+#define N3 2147483644 -+ - #define STRINGIFY(S) #S - #define MAKE_STR(S) STRINGIFY(S) - - #define SN MAKE_STR(N) -+#define SN2 MAKE_STR(N2) -+#define SN3 MAKE_STR(N3) - - static int - do_test (void) -@@ -20,13 +30,27 @@ do_test (void) - return 1; - } - -- ret = fprintf (fp, "%" SN "d%" SN "d", 1, 1); -+ ret = fprintf (fp, "%" SN "d", 1); -+ printf ("ret = %d\n", ret); -+ if (ret != -1 || errno != EOVERFLOW) -+ return 1; -+ -+ ret = fprintf (fp, "%." SN "d", 1); -+ printf ("ret = %d\n", ret); -+ if (ret != -1 || errno != EOVERFLOW) -+ return 1; -+ -+ ret = fprintf (fp, "%." SN3 "d", 1); -+ printf ("ret = %d\n", ret); -+ if (ret != -1 || errno != EOVERFLOW) -+ return 1; - -+ ret = fprintf (fp, "%" SN2 "d%" SN2 "d", 1, 1); - printf ("ret = %d\n", ret); - -- return ret != -1; -+ return ret != -1 || errno != EOVERFLOW; - } - --#define TIMEOUT 30 -+#define TIMEOUT 60 - #define TEST_FUNCTION do_test () - #include "../test-skeleton.c" -diff -Nrup a/stdio-common/printf-parse.h b/stdio-common/printf-parse.h ---- a/stdio-common/printf-parse.h 2010-05-04 05:27:23.000000000 -0600 -+++ b/stdio-common/printf-parse.h 2012-08-03 13:57:31.932638761 -0600 -@@ -14,9 +14,8 @@ - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public -- License along with the GNU C Library; if not, write to the Free -- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -- 02111-1307 USA. */ -+ License along with the GNU C Library; if not, see -+ . */ - - #include - #include -@@ -69,16 +68,27 @@ union printf_arg - #ifndef DONT_NEED_READ_INT - /* Read a simple integer from a string and update the string pointer. - It is assumed that the first character is a digit. */ --static unsigned int -+static int - read_int (const UCHAR_T * *pstr) - { -- unsigned int retval = **pstr - L_('0'); -+ int retval = **pstr - L_('0'); - - while (ISDIGIT (*++(*pstr))) -- { -- retval *= 10; -- retval += **pstr - L_('0'); -- } -+ if (retval >= 0) -+ { -+ if (INT_MAX / 10 < retval) -+ retval = -1; -+ else -+ { -+ int digit = **pstr - L_('0'); -+ -+ retval *= 10; -+ if (INT_MAX - digit < retval) -+ retval = -1; -+ else -+ retval += digit; -+ } -+ } - - return retval; - } -diff -Nrup a/stdio-common/printf-parsemb.c b/stdio-common/printf-parsemb.c ---- a/stdio-common/printf-parsemb.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/stdio-common/printf-parsemb.c 2012-08-03 13:58:44.683366361 -0600 -@@ -13,9 +13,8 @@ - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public -- License along with the GNU C Library; if not, write to the Free -- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -- 02111-1307 USA. */ -+ License along with the GNU C Library; if not, see -+ . */ - - #include - #include -@@ -88,12 +87,15 @@ __parse_one_specmb (const UCHAR_T *forma - - n = read_int (&format); - -- if (n > 0 && *format == L_('$')) -+ if (n != 0 && *format == L_('$')) - /* Is positional parameter. */ - { - ++format; /* Skip the '$'. */ -- spec->data_arg = n - 1; -- *max_ref_arg = MAX (*max_ref_arg, n); -+ if (n != -1) -+ { -+ spec->data_arg = n - 1; -+ *max_ref_arg = MAX (*max_ref_arg, n); -+ } - } - else - /* Oops; that was actually the width and/or 0 padding flag. -@@ -161,10 +163,13 @@ __parse_one_specmb (const UCHAR_T *forma - /* The width argument might be found in a positional parameter. */ - n = read_int (&format); - -- if (n > 0 && *format == L_('$')) -+ if (n != 0 && *format == L_('$')) - { -- spec->width_arg = n - 1; -- *max_ref_arg = MAX (*max_ref_arg, n); -+ if (n != -1) -+ { -+ spec->width_arg = n - 1; -+ *max_ref_arg = MAX (*max_ref_arg, n); -+ } - ++format; /* Skip '$'. */ - } - } -@@ -178,9 +183,13 @@ __parse_one_specmb (const UCHAR_T *forma - } - } - else if (ISDIGIT (*format)) -- /* Constant width specification. */ -- spec->info.width = read_int (&format); -+ { -+ int n = read_int (&format); - -+ /* Constant width specification. */ -+ if (n != -1) -+ spec->info.width = n; -+ } - /* Get the precision. */ - spec->prec_arg = -1; - /* -1 means none given; 0 means explicit 0. */ -@@ -197,10 +206,13 @@ __parse_one_specmb (const UCHAR_T *forma - { - n = read_int (&format); - -- if (n > 0 && *format == L_('$')) -+ if (n != 0 && *format == L_('$')) - { -- spec->prec_arg = n - 1; -- *max_ref_arg = MAX (*max_ref_arg, n); -+ if (n != -1) -+ { -+ spec->prec_arg = n - 1; -+ *max_ref_arg = MAX (*max_ref_arg, n); -+ } - ++format; - } - } -@@ -214,7 +226,12 @@ __parse_one_specmb (const UCHAR_T *forma - } - } - else if (ISDIGIT (*format)) -- spec->info.prec = read_int (&format); -+ { -+ int n = read_int (&format); -+ -+ if (n != -1) -+ spec->info.prec = n; -+ } - else - /* "%.?" is treated like "%.0?". */ - spec->info.prec = 0; -@@ -295,9 +312,9 @@ __parse_one_specmb (const UCHAR_T *forma - /* We don't try to get the types for all arguments if the format - uses more than one. The normal case is covered though. If - the call returns -1 we continue with the normal specifiers. */ -- || (spec->ndata_args = (*__printf_arginfo_table[spec->info.spec]) -- (&spec->info, 1, &spec->data_arg_type, -- &spec->size)) < 0) -+ || (int) (spec->ndata_args = (*__printf_arginfo_table[spec->info.spec]) -+ (&spec->info, 1, &spec->data_arg_type, -+ &spec->size)) < 0) - { - /* Find the data argument types of a built-in spec. */ - spec->ndata_args = 1; -diff -Nrup a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c ---- a/stdio-common/vfprintf.c 2012-08-03 13:31:26.605168350 -0600 -+++ b/stdio-common/vfprintf.c 2012-08-03 14:09:26.836725512 -0600 -@@ -1,4 +1,4 @@ --/* Copyright (C) 1991-2008, 2009 Free Software Foundation, Inc. -+/* Copyright (C) 1991-2012 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or -@@ -12,9 +12,8 @@ - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public -- License along with the GNU C Library; if not, write to the Free -- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -- 02111-1307 USA. */ -+ License along with the GNU C Library; if not, see -+ . */ - - #include - #include -@@ -67,10 +66,10 @@ - do { \ - unsigned int _val = val; \ - assert ((unsigned int) done < (unsigned int) INT_MAX); \ -- if (__builtin_expect ((unsigned int) INT_MAX - (unsigned int) done \ -- < _val, 0)) \ -+ if (__builtin_expect (INT_MAX - done < _val, 0)) \ - { \ - done = -1; \ -+ __set_errno (EOVERFLOW); \ - goto all_done; \ - } \ - done += _val; \ -@@ -141,12 +140,17 @@ - do \ - { \ - assert ((size_t) done <= (size_t) INT_MAX); \ -- if ((size_t) PUT (s, (String), (Len)) != (size_t) (Len) \ -- || (size_t) INT_MAX - (size_t) done < (size_t) (Len)) \ -+ if ((size_t) PUT (s, (String), (Len)) != (size_t) (Len)) \ - { \ - done = -1; \ - goto all_done; \ - } \ -+ if (__builtin_expect (INT_MAX - done < (Len), 0)) \ -+ { \ -+ done = -1; \ -+ __set_errno (EOVERFLOW); \ -+ goto all_done; \ -+ } \ - done += (Len); \ - } \ - while (0) -@@ -1435,10 +1439,21 @@ vfprintf (FILE *s, const CHAR_T *format, - const UCHAR_T *tmp; /* Temporary value. */ - - tmp = ++f; -- if (ISDIGIT (*tmp) && read_int (&tmp) && *tmp == L_('$')) -- /* The width comes from a positional parameter. */ -- goto do_positional; -+ if (ISDIGIT (*tmp)) -+ { -+ int pos = read_int (&tmp); - -+ if (pos == -1) -+ { -+ __set_errno (EOVERFLOW); -+ done = -1; -+ goto all_done; -+ } -+ -+ if (pos && *tmp == L_('$')) -+ /* The width comes from a positional parameter. */ -+ goto do_positional; -+ } - width = va_arg (ap, int); - - /* Negative width means left justified. */ -@@ -1449,9 +1464,9 @@ vfprintf (FILE *s, const CHAR_T *format, - left = 1; - } - -- if (__builtin_expect (width >= (size_t) -1 / sizeof (CHAR_T) - 32, 0)) -+ if (__builtin_expect (width >= INT_MAX / sizeof (CHAR_T) - 32, 0)) - { -- __set_errno (ERANGE); -+ __set_errno (EOVERFLOW); - done = -1; - goto all_done; - } -@@ -1481,9 +1496,10 @@ vfprintf (FILE *s, const CHAR_T *format, - LABEL (width): - width = read_int (&f); - -- if (__builtin_expect (width >= (size_t) -1 / sizeof (CHAR_T) - 32, 0)) -+ if (__builtin_expect (width == -1 -+ || width >= INT_MAX / sizeof (CHAR_T) - 32, 0)) - { -- __set_errno (ERANGE); -+ __set_errno (EOVERFLOW); - done = -1; - goto all_done; - } -@@ -1518,10 +1534,21 @@ vfprintf (FILE *s, const CHAR_T *format, - const UCHAR_T *tmp; /* Temporary value. */ - - tmp = ++f; -- if (ISDIGIT (*tmp) && read_int (&tmp) > 0 && *tmp == L_('$')) -- /* The precision comes from a positional parameter. */ -- goto do_positional; -+ if (ISDIGIT (*tmp)) -+ { -+ int pos = read_int (&tmp); -+ -+ if (pos == -1) -+ { -+ __set_errno (EOVERFLOW); -+ done = -1; -+ goto all_done; -+ } - -+ if (pos && *tmp == L_('$')) -+ /* The precision comes from a positional parameter. */ -+ goto do_positional; -+ } - prec = va_arg (ap, int); - - /* If the precision is negative the precision is omitted. */ -@@ -1529,15 +1556,26 @@ vfprintf (FILE *s, const CHAR_T *format, - prec = -1; - } - else if (ISDIGIT (*f)) -- prec = read_int (&f); -+ { -+ prec = read_int (&f); -+ -+ /* The precision was specified in this case as an extremely -+ large positive value. */ -+ if (prec == -1) -+ { -+ __set_errno (EOVERFLOW); -+ done = -1; -+ goto all_done; -+ } -+ } - else - prec = 0; - if (prec > width - && prec > sizeof (work_buffer) / sizeof (work_buffer[0]) - 32) - { -- if (__builtin_expect (prec >= (size_t) -1 / sizeof (CHAR_T) - 32, 0)) -+ if (__builtin_expect (prec >= INT_MAX / sizeof (CHAR_T) - 32, 0)) - { -- __set_errno (ERANGE); -+ __set_errno (EOVERFLOW); - done = -1; - goto all_done; - } -@@ -1722,13 +1760,13 @@ do_positional: - nargs = MAX (nargs, max_ref_arg); - /* Calculate total size needed to represent a single argument across - all three argument-related arrays. */ -- bytes_per_arg = sizeof (*args_value) + sizeof (*args_size) -- + sizeof (*args_type); -+ bytes_per_arg = (sizeof (*args_value) + sizeof (*args_size) -+ + sizeof (*args_type)); - - /* Check for potential integer overflow. */ -- if (__builtin_expect (nargs > SIZE_MAX / bytes_per_arg, 0)) -+ if (__builtin_expect (nargs > INT_MAX / bytes_per_arg, 0)) - { -- __set_errno (ERANGE); -+ __set_errno (EOVERFLOW); - done = -1; - goto all_done; - } -@@ -1746,6 +1784,8 @@ do_positional: - } - } - -+ /* Set up the remaining two arrays to each point past the end of the -+ prior array, since space for all three has been allocated now. */ - args_size = &args_value[nargs].pa_int; - args_type = &args_size[nargs]; - memset (args_type, s->_flags2 & _IO_FLAGS2_FORTIFY ? '\xff' : '\0', diff --git a/src/patches/glibc/glibc-rh832516.patch b/src/patches/glibc/glibc-rh832516.patch deleted file mode 100644 index 476af4b9c7..0000000000 --- a/src/patches/glibc/glibc-rh832516.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff -Nrup a/locale/loadlocale.c b/locale/loadlocale.c ---- a/locale/loadlocale.c 2010-05-04 07:27:23.000000000 -0400 -+++ b/locale/loadlocale.c 2012-08-05 17:19:47.761384155 -0400 -@@ -170,7 +170,6 @@ _nl_load_locale (struct loaded_l10nfile - int save_err; - int alloc = ld_mapped; - -- file->decided = 1; - file->data = NULL; - - fd = open_not_cancel_2 (file->filename, O_RDONLY); -@@ -279,6 +278,7 @@ _nl_load_locale (struct loaded_l10nfile - newdata->alloc = alloc; - - file->data = newdata; -+ file->decided = 1; - } - - void diff --git a/src/patches/glibc/glibc-rh832694.patch b/src/patches/glibc/glibc-rh832694.patch deleted file mode 100644 index 249afb5263..0000000000 --- a/src/patches/glibc/glibc-rh832694.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/sysdeps/gnu/errlist.c b/sysdeps/gnu/errlist.c -index e3d2faf..5437ff8 100644 ---- a/sysdeps/gnu/errlist.c -+++ b/sysdeps/gnu/errlist.c -@@ -780,11 +780,12 @@ TRANS The user's disk quota was exceeded. */ - #endif - #ifdef ESTALE - /* --TRANS Stale NFS file handle. This indicates an internal confusion in the NFS --TRANS system which is due to file system rearrangements on the server host. --TRANS Repairing this condition usually requires unmounting and remounting --TRANS the NFS file system on the local host. */ -- [ERR_REMAP (ESTALE)] = N_("Stale NFS file handle"), -+TRANS Stale file handle. This indicates an internal confusion in the -+TRANS file system which is due to file system rearrangements on the server host -+TRANS for NFS filesystems or corruption in other filesystems. -+TRANS Repairing this condition usually requires unmounting, possibly -+TRANS repairing and remounting the file system. */ -+ [ERR_REMAP (ESTALE)] = N_("Stale file handle"), - # if ESTALE > ERR_MAX - # undef ERR_MAX - # define ERR_MAX ESTALE diff --git a/src/patches/glibc/glibc-rh833717.patch b/src/patches/glibc/glibc-rh833717.patch deleted file mode 100644 index e44573cf0c..0000000000 --- a/src/patches/glibc/glibc-rh833717.patch +++ /dev/null @@ -1,45265 +0,0 @@ -diff -Nrup a/stdio-common/Makefile b/stdio-common/Makefile ---- a/stdio-common/Makefile 2012-05-23 14:54:54.670443298 -0600 -+++ b/stdio-common/Makefile 2012-05-22 13:47:51.000000000 -0600 -@@ -60,7 +60,7 @@ tests := tstscanf test_rdwr test-popen t - tst-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \ - tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a \ - bug19 bug19a tst-popen2 scanf13 scanf14 scanf15 bug20 bug21 bug22 \ -- scanf16 scanf17 tst-setvbuf1 bug-vfprintf-nargs -+ scanf16 scanf17 tst-setvbuf1 bug-vfprintf-nargs bug23 bug23-2 bug23-3 - - test-srcs = tst-unbputc tst-printf - -diff -Nrup a/stdio-common/bug23-2.c b/stdio-common/bug23-2.c ---- a/stdio-common/bug23-2.c 1969-12-31 17:00:00.000000000 -0700 -+++ b/stdio-common/bug23-2.c 2012-05-24 07:12:55.331644716 -0600 -@@ -0,0 +1,70 @@ -+#include -+#include -+#include -+ -+static const char expected[] = "\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55%%%%%%%%%%%%%%%%%%%%%%%%%%\n"; -+ -+static int -+do_test (void) -+{ -+ char *buf = malloc (strlen (expected) + 1); -+ snprintf (buf, strlen (expected) + 1, -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", -+ "a", "b", "c", "d", 5); -+ return strcmp (buf, expected) != 0; -+} -+ -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" -diff -Nrup a/stdio-common/bug23-3.c b/stdio-common/bug23-3.c ---- a/stdio-common/bug23-3.c 1969-12-31 17:00:00.000000000 -0700 -+++ b/stdio-common/bug23-3.c 2012-05-24 07:13:26.948480695 -0600 -@@ -0,0 +1,45076 @@ -+#include -+#include -+#include -+ -+static const char expected[] = "\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55\ -+\n\ -+a\n\ -+abbcd55%%%%%%%%%%%%%%%%%%%%%%%%%%\n"; -+ -+ -+ -+int -+do_test (void) -+{ -+ char *buf = malloc (strlen (expected) + 1); -+ snprintf (buf, strlen (expected) + 1, -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", -+ "a", "b", "c", "d", 5); -+ return (strcmp (buf, expected) != 0); -+} -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" -+ -diff -Nrup a/stdio-common/bug23.c b/stdio-common/bug23.c ---- a/stdio-common/bug23.c 1969-12-31 17:00:00.000000000 -0700 -+++ b/stdio-common/bug23.c 2012-05-24 07:12:27.636788393 -0600 -@@ -0,0 +1,22 @@ -+#include -+#include -+#include -+ -+static const char expected[] = "\ -+\n\ -+a\n\ -+abbcd55%%%%%%%%%%%%%%%%%%%%%%%%%%\n"; -+ -+static int -+do_test (void) -+{ -+ char *buf = malloc (strlen (expected) + 1); -+ snprintf (buf, strlen (expected) + 1, -+ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d" -+ "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", -+ "a", "b", "c", "d", 5); -+ return strcmp (buf, expected) != 0; -+} -+ -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" -diff -Nrup a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c ---- a/stdio-common/vfprintf.c 2012-05-23 14:54:54.689443199 -0600 -+++ b/stdio-common/vfprintf.c 2012-05-23 23:16:55.376155638 -0600 -@@ -238,6 +238,12 @@ vfprintf (FILE *s, const CHAR_T *format, - /* For the argument descriptions, which may be allocated on the heap. */ - void *args_malloced = NULL; - -+ /* For positional argument handling. */ -+ struct printf_spec *specs; -+ -+ /* Track if we malloced the SPECS array and thus must free it. */ -+ bool specs_malloced = false; -+ - /* This table maps a character into a number representing a - class. In each step there is a destination label for each - class. */ -@@ -1638,10 +1644,10 @@ do_positional: - /* Array with information about the needed arguments. This has to - be dynamically extensible. */ - size_t nspecs = 0; -- size_t nspecs_max = 32; /* A more or less arbitrary start value. */ -- struct printf_spec *specs -- = alloca (nspecs_max * sizeof (struct printf_spec)); -+ /* A more or less arbitrary start value. */ -+ size_t nspecs_size = 32 * sizeof (struct printf_spec); - -+ specs = alloca (nspecs_size); - /* The number of arguments the format string requests. This will - determine the size of the array needed to store the argument - attributes. */ -@@ -1678,14 +1684,30 @@ do_positional: - - for (f = lead_str_end; *f != L_('\0'); f = specs[nspecs++].next_fmt) - { -- if (nspecs >= nspecs_max) -+ if (nspecs * sizeof (*specs) >= nspecs_size) - { - /* Extend the array of format specifiers. */ - struct printf_spec *old = specs; -- specs = extend_alloca (specs, nspecs_max, 2 * nspecs_max); -+ if (__libc_use_alloca (2 * nspecs_size)) -+ specs = extend_alloca (specs, nspecs_size, 2 * nspecs_size); -+ else -+ { -+ nspecs_size *= 2; -+ specs = malloc (nspecs_size); -+ } -+ - - /* Copy the old array's elements to the new space. */ -- memmove (specs, old, nspecs * sizeof (struct printf_spec)); -+ memmove (specs, old, nspecs * sizeof (*specs)); -+ -+ /* If we had previously malloc'd space for SPECS, then -+ release it after the copy is complete. */ -+ if (specs_malloced) -+ free (old); -+ -+ /* Now set SPECS_MALLOCED if needed. */ -+ if (!__libc_use_alloca (nspecs_size)) -+ specs_malloced = true; - } - - /* Parse the format specifier. */ -@@ -1998,6 +2020,8 @@ do_positional: - } - - all_done: -+ if (specs_malloced) -+ free (specs); - free (args_malloced); - free (workstart); - /* Unlock the stream. */ diff --git a/src/patches/glibc/glibc-rh834386-2.patch b/src/patches/glibc/glibc-rh834386-2.patch deleted file mode 100644 index ad895c7394..0000000000 --- a/src/patches/glibc/glibc-rh834386-2.patch +++ /dev/null @@ -1,107 +0,0 @@ -2013-05-03 Carlos O'Donell - - * intl/dcigettext.c (DCIGETTEXT): Skip translating if _nl_find_msg returns -1. - (_nl_find_msg): Return -1 if recursive call returned -1. If newmem is null - return -1. - * intl/loadmsgcat.c (_nl_load_domain): If _nl_find_msg returns -1 abort - loading the domain. - -diff -Nrup a/intl/dcigettext.c b/intl/dcigettext.c ---- a/intl/dcigettext.c 2010-05-04 07:27:23.000000000 -0400 -+++ b/intl/dcigettext.c 2013-08-01 00:11:54.616363264 -0400 -@@ -640,6 +640,11 @@ DCIGETTEXT (domainname, msgid1, msgid2, - retval = _nl_find_msg (domain->successor[cnt], binding, - msgid1, 1, &retlen); - -+ /* Resource problems are not fatal, instead we return no -+ translation. */ -+ if (__builtin_expect (retval == (char *) -1, 0)) -+ goto no_translation; -+ - if (retval != NULL) - { - domain = domain->successor[cnt]; -@@ -943,6 +948,11 @@ _nl_find_msg (domain_file, domainbinding - nullentry = - _nl_find_msg (domain_file, domainbinding, "", 0, &nullentrylen); - -+ /* Resource problems are fatal. If we continue onwards we will -+ only attempt to calloc a new conv_tab and fail later. */ -+ if (__builtin_expect (nullentry == (char *) -1, 0)) -+ return (char *) -1; -+ - if (nullentry != NULL) - { - const char *charsetstr; -@@ -1156,7 +1166,7 @@ _nl_find_msg (domain_file, domainbinding - freemem_size); - # ifdef _LIBC - if (newmem != NULL) -- transmem_list = transmem_list->next; -+ transmem_list = newmem; - else - { - struct transmem_list *old = transmem_list; -@@ -1171,6 +1181,16 @@ _nl_find_msg (domain_file, domainbinding - malloc_count = 1; - freemem_size = INITIAL_BLOCK_SIZE; - newmem = (transmem_block_t *) malloc (freemem_size); -+# ifdef _LIBC -+ if (newmem != NULL) -+ { -+ /* Add the block to the list of blocks we have to free -+ at some point. */ -+ newmem->next = transmem_list; -+ transmem_list = newmem; -+ } -+ /* Fall through and return -1. */ -+# endif - } - if (__builtin_expect (newmem == NULL, 0)) - { -@@ -1181,11 +1201,6 @@ _nl_find_msg (domain_file, domainbinding - } - - # ifdef _LIBC -- /* Add the block to the list of blocks we have to free -- at some point. */ -- newmem->next = transmem_list; -- transmem_list = newmem; -- - freemem = (unsigned char *) newmem->data; - freemem_size -= offsetof (struct transmem_list, data); - # else -@@ -1402,7 +1417,7 @@ get_output_charset (domainbinding) - return _NL_CURRENT (LC_CTYPE, CODESET); - # else - # if HAVE_ICONV -- extern const char *locale_charset PARAMS ((void); -+ extern const char *locale_charset PARAMS ((void)); - return locale_charset (); - # endif - # endif -diff -Nrup a/intl/loadmsgcat.c b/intl/loadmsgcat.c ---- a/intl/loadmsgcat.c 2010-05-04 07:27:23.000000000 -0400 -+++ b/intl/loadmsgcat.c 2013-08-01 00:12:48.448237849 -0400 -@@ -1235,7 +1235,7 @@ _nl_load_domain (domain_file, domainbind - default: - /* This is an invalid revision. */ - invalid: -- /* This is an invalid .mo file. */ -+ /* This is an invalid .mo file or we ran out of resources. */ - free (domain->malloced); - #ifdef HAVE_MMAP - if (use_mmap) -@@ -1255,6 +1255,12 @@ _nl_load_domain (domain_file, domainbind - - /* Get the header entry and look for a plural specification. */ - nullentry = _nl_find_msg (domain_file, domainbinding, "", 0, &nullentrylen); -+ if (__builtin_expect (nullentry == (char *) -1, 0)) -+ { -+ __libc_rwlock_fini (domain->conversions_lock); -+ goto invalid; -+ } -+ - EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals); - - out: diff --git a/src/patches/glibc/glibc-rh834386.patch b/src/patches/glibc/glibc-rh834386.patch deleted file mode 100644 index 61ddbe83eb..0000000000 --- a/src/patches/glibc/glibc-rh834386.patch +++ /dev/null @@ -1,181 +0,0 @@ -# -# Red Hat BZ: -# https://bugzilla.redhat.com/show_bug.cgi?id=816647 -# -# ChangeLog -# -#2013-04-30 Patsy Franklin -# -# * iconv/gconv_cache.c (find_module): Demangle init_fct before -# checking for NULL. Mangle __btowc_fct if init_fct is non-NULL. -# * iconv/gconv_db.c (free_derivation): Check that __shlib_handle -# is non-NULL before demangling the end_fct. Check for NULL -# end_fct after demangling. -# (__gconv_release_step): Demangle the end_fct before checking -# it for NULL. Remove assert on __shlibc_handle != NULL. -# (gen_steps): Don't check btowc_fct for NULL before mangling. -# Demangle init_fct before checking for NULL. -# (increment_counter): Likewise -# * gconv_dl.c (__gconv_find_shlib): Don't check init_fct or -# end_fct for NULL before mangling. -# * wcsmbs/btowc.c (__btowc): Demangle btowc_fct before checking -# for NULL. -# -diff -Nrup a/iconv/gconv_cache.c b/iconv/gconv_cache.c ---- a/iconv/gconv_cache.c 2012-12-24 22:02:13.000000000 -0500 -+++ b/iconv/gconv_cache.c 2013-04-30 11:34:20.112389987 -0400 -@@ -207,17 +207,16 @@ find_module (const char *directory, cons - result->__data = NULL; - - /* Call the init function. */ -- if (result->__init_fct != NULL) -- { -- __gconv_init_fct init_fct = result->__init_fct; -+ __gconv_init_fct init_fct = result->__init_fct; - #ifdef PTR_DEMANGLE -- PTR_DEMANGLE (init_fct); -+ PTR_DEMANGLE (init_fct); - #endif -+ if (init_fct != NULL) -+ { - status = DL_CALL_FCT (init_fct, (result)); - - #ifdef PTR_MANGLE -- if (result->__btowc_fct != NULL) -- PTR_MANGLE (result->__btowc_fct); -+ PTR_MANGLE (result->__btowc_fct); - #endif - } - } -diff -Nrup a/iconv/gconv_db.c b/iconv/gconv_db.c ---- a/iconv/gconv_db.c 2012-12-24 22:02:13.000000000 -0500 -+++ b/iconv/gconv_db.c 2013-04-30 11:32:42.700592914 -0400 -@@ -179,16 +179,15 @@ free_derivation (void *p) - size_t cnt; - - for (cnt = 0; cnt < deriv->nsteps; ++cnt) -- if (deriv->steps[cnt].__counter > 0 -- && deriv->steps[cnt].__end_fct != NULL) -+ if ((deriv->steps[cnt].__counter > 0) -+ && (deriv->steps[cnt].__shlib_handle != NULL)) - { -- assert (deriv->steps[cnt].__shlib_handle != NULL); -- - __gconv_end_fct end_fct = deriv->steps[cnt].__end_fct; - #ifdef PTR_DEMANGLE - PTR_DEMANGLE (end_fct); - #endif -- DL_CALL_FCT (end_fct, (&deriv->steps[cnt])); -+ if (end_fct != NULL) -+ DL_CALL_FCT (end_fct, (&deriv->steps[cnt])); - } - - /* Free the name strings. */ -@@ -212,16 +211,12 @@ __gconv_release_step (struct __gconv_ste - if (step->__shlib_handle != NULL && --step->__counter == 0) - { - /* Call the destructor. */ -- if (step->__end_fct != NULL) -- { -- assert (step->__shlib_handle != NULL); -- -- __gconv_end_fct end_fct = step->__end_fct; -+ __gconv_end_fct end_fct = step->__end_fct; - #ifdef PTR_DEMANGLE -- PTR_DEMANGLE (end_fct); -+ PTR_DEMANGLE (end_fct); - #endif -- DL_CALL_FCT (end_fct, (step)); -- } -+ if (end_fct != NULL) -+ DL_CALL_FCT (end_fct, (step)); - - #ifndef STATIC_GCONV - /* Release the loaded module. */ -@@ -293,13 +288,11 @@ gen_steps (struct derivation_step *best, - - /* Call the init function. */ - __gconv_init_fct init_fct = result[step_cnt].__init_fct; -- if (init_fct != NULL) -- { -- assert (result[step_cnt].__shlib_handle != NULL); -- - # ifdef PTR_DEMANGLE -- PTR_DEMANGLE (init_fct); -+ PTR_DEMANGLE (init_fct); - # endif -+ if (init_fct != NULL) -+ { - status = DL_CALL_FCT (init_fct, (&result[step_cnt])); - - if (__builtin_expect (status, __GCONV_OK) != __GCONV_OK) -@@ -312,8 +305,7 @@ gen_steps (struct derivation_step *best, - } - - # ifdef PTR_MANGLE -- if (result[step_cnt].__btowc_fct != NULL) -- PTR_MANGLE (result[step_cnt].__btowc_fct); -+ PTR_MANGLE (result[step_cnt].__btowc_fct); - # endif - } - } -@@ -393,16 +385,15 @@ increment_counter (struct __gconv_step * - - /* Call the init function. */ - __gconv_init_fct init_fct = step->__init_fct; -- if (init_fct != NULL) -- { - #ifdef PTR_DEMANGLE -- PTR_DEMANGLE (init_fct); -+ PTR_DEMANGLE (init_fct); - #endif -+ if (init_fct != NULL) -+ { - DL_CALL_FCT (init_fct, (step)); - - #ifdef PTR_MANGLE -- if (step->__btowc_fct != NULL) -- PTR_MANGLE (step->__btowc_fct); -+ PTR_MANGLE (step->__btowc_fct); - #endif - } - } -diff -Nrup a/iconv/gconv_dl.c b/iconv/gconv_dl.c ---- a/iconv/gconv_dl.c 2012-12-24 22:02:13.000000000 -0500 -+++ b/iconv/gconv_dl.c 2013-04-30 11:32:42.701592922 -0400 -@@ -132,10 +132,8 @@ __gconv_find_shlib (const char *name) - - #ifdef PTR_MANGLE - PTR_MANGLE (found->fct); -- if (found->init_fct != NULL) -- PTR_MANGLE (found->init_fct); -- if (found->end_fct != NULL) -- PTR_MANGLE (found->end_fct); -+ PTR_MANGLE (found->init_fct); -+ PTR_MANGLE (found->end_fct); - #endif - - /* We have succeeded in loading the shared object. */ -diff -Nrup a/wcsmbs/btowc.c b/wcsmbs/btowc.c ---- a/wcsmbs/btowc.c 2012-12-24 22:02:13.000000000 -0500 -+++ b/wcsmbs/btowc.c 2013-04-30 11:32:42.701592922 -0400 -@@ -47,15 +47,15 @@ __btowc (c) - /* Get the conversion functions. */ - fcts = get_gconv_fcts (_NL_CURRENT_DATA (LC_CTYPE)); - __gconv_btowc_fct btowc_fct = fcts->towc->__btowc_fct; -+#ifdef PTR_DEMANGLE -+ if (fcts->towc->__shlib_handle != NULL) -+ PTR_DEMANGLE (btowc_fct); -+#endif - - if (__builtin_expect (fcts->towc_nsteps == 1, 1) - && __builtin_expect (btowc_fct != NULL, 1)) - { - /* Use the shortcut function. */ --#ifdef PTR_DEMANGLE -- if (fcts->towc->__shlib_handle != NULL) -- PTR_DEMANGLE (btowc_fct); --#endif - return DL_CALL_FCT (btowc_fct, (fcts->towc, (unsigned char) c)); - } - else diff --git a/src/patches/glibc/glibc-rh837695.patch b/src/patches/glibc/glibc-rh837695.patch deleted file mode 100644 index 03e1e02704..0000000000 --- a/src/patches/glibc/glibc-rh837695.patch +++ /dev/null @@ -1,54 +0,0 @@ -diff -rup a/nss/nsswitch.h b/nss/nsswitch.h ---- a/nss/nsswitch.h 2010-05-04 05:27:23.000000000 -0600 -+++ b/nss/nsswitch.h 2012-07-05 11:28:15.316585117 -0600 -@@ -182,4 +182,8 @@ extern int __nss_hostname_digits_dots (c - int *h_errnop); - libc_hidden_proto (__nss_hostname_digits_dots) - -+/* Maximum number of aliases we allow. */ -+#define MAX_NR_ALIASES 48 -+#define MAX_NR_ADDRS 48 -+ - #endif /* nsswitch.h */ -Only in b/nss: nsswitch.h.orig -diff -rup a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c ---- a/resolv/nss_dns/dns-host.c 2012-07-05 11:27:39.298760961 -0600 -+++ b/resolv/nss_dns/dns-host.c 2012-07-05 11:28:15.317585112 -0600 -@@ -89,10 +89,6 @@ - - #define RESOLVSORT - --/* Maximum number of aliases we allow. */ --#define MAX_NR_ALIASES 48 --#define MAX_NR_ADDRS 48 -- - #if PACKETSZ > 65536 - # define MAXPACKET PACKETSZ - #else -Only in b/resolv/nss_dns: dns-host.c.orig -diff -rup a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c ---- a/sysdeps/posix/getaddrinfo.c 2012-07-05 11:27:39.284761028 -0600 -+++ b/sysdeps/posix/getaddrinfo.c 2012-07-05 14:15:39.785546125 -0600 -@@ -565,7 +565,10 @@ gaih_inet (const char *name, const struc - IPv6 scope ids. */ - if (req->ai_family == AF_INET) - { -- size_t tmpbuflen = 512; -+ /* Add room for struct host_data in resolv/nss_dns/dns-host.c */ -+ size_t tmpbuflen = 512 + (MAX_NR_ALIASES+MAX_NR_ADDRS+1)*sizeof(char*) -+ + 16 * sizeof(char); -+ - assert (tmpbuf == NULL); - tmpbuf = alloca_account (tmpbuflen, alloca_used); - int rc; -@@ -807,7 +810,7 @@ gaih_inet (const char *name, const struc - old_res_options = _res.options; - _res.options &= ~RES_USE_INET6; - -- size_t tmpbuflen = 1024; -+ size_t tmpbuflen = 1024 + sizeof(struct gaih_addrtuple); - malloc_tmpbuf = !__libc_use_alloca (alloca_used + tmpbuflen); - assert (tmpbuf == NULL); - if (!malloc_tmpbuf) -Only in b/sysdeps/posix: getaddrinfo.c.orig -Only in b/sysdeps/posix: getaddrinfo.c.rej diff --git a/src/patches/glibc/glibc-rh837918.patch b/src/patches/glibc/glibc-rh837918.patch deleted file mode 100644 index 924d83de91..0000000000 --- a/src/patches/glibc/glibc-rh837918.patch +++ /dev/null @@ -1,7183 +0,0 @@ -diff -Nrup a/math/libm-test.inc b/math/libm-test.inc ---- a/math/libm-test.inc 2010-05-04 05:27:23.000000000 -0600 -+++ b/math/libm-test.inc 2012-08-06 09:54:00.821929695 -0600 -@@ -2018,6 +2018,142 @@ cos_test (void) - - - static void -+cos_test_tonearest (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(cos) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (cos_tonearest); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_TONEAREST)) -+ { -+ TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L); -+ TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L); -+ TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L); -+ TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L); -+ TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L); -+ TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L); -+ TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L); -+ TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L); -+ TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L); -+ TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (cos_tonearest); -+} -+ -+ -+static void -+cos_test_towardzero (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(cos) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (cos_towardzero); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_TOWARDZERO)) -+ { -+ TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L); -+ TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L); -+ TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L); -+ TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L); -+ TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L); -+ TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L); -+ TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L); -+ TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L); -+ TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L); -+ TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (cos_towardzero); -+} -+ -+ -+static void -+cos_test_downward (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(cos) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (cos_downward); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_DOWNWARD)) -+ { -+ TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L); -+ TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L); -+ TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L); -+ TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L); -+ TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L); -+ TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L); -+ TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L); -+ TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L); -+ TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L); -+ TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (cos_downward); -+} -+ -+ -+static void -+cos_test_upward (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(cos) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (cos_upward); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_UPWARD)) -+ { -+ TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L); -+ TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L); -+ TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L); -+ TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L); -+ TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L); -+ TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L); -+ TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L); -+ TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L); -+ TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L); -+ TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (cos_upward); -+} -+ -+ -+static void - cosh_test (void) - { - errno = 0; -@@ -2043,6 +2179,114 @@ cosh_test (void) - - - static void -+cosh_test_tonearest (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(cosh) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (cosh_tonearest); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_TONEAREST)) -+ { -+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L); -+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L); -+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (cosh_tonearest); -+} -+ -+ -+static void -+cosh_test_towardzero (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(cosh) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (cosh_towardzero); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_TOWARDZERO)) -+ { -+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L); -+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L); -+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (cosh_towardzero); -+} -+ -+ -+static void -+cosh_test_downward (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(cosh) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (cosh_downward); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_DOWNWARD)) -+ { -+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L); -+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L); -+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (cosh_downward); -+} -+ -+ -+static void -+cosh_test_upward (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(cosh) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (cosh_upward); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_UPWARD)) -+ { -+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L); -+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L); -+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (cosh_upward); -+} -+ -+ -+static void - cpow_test (void) - { - errno = 0; -@@ -2527,6 +2771,114 @@ exp_test (void) - - - static void -+exp_test_tonearest (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(exp) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (exp_tonearest); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_TONEAREST)) -+ { -+ TEST_f_f (exp, 1, M_El); -+ TEST_f_f (exp, 2, M_E2l); -+ TEST_f_f (exp, 3, M_E3l); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (exp_tonearest); -+} -+ -+ -+static void -+exp_test_towardzero (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(exp) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (exp_towardzero); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_TOWARDZERO)) -+ { -+ TEST_f_f (exp, 1, M_El); -+ TEST_f_f (exp, 2, M_E2l); -+ TEST_f_f (exp, 3, M_E3l); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (exp_towardzero); -+} -+ -+ -+static void -+exp_test_downward (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(exp) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (exp_downward); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_DOWNWARD)) -+ { -+ TEST_f_f (exp, 1, M_El); -+ TEST_f_f (exp, 2, M_E2l); -+ TEST_f_f (exp, 3, M_E3l); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (exp_downward); -+} -+ -+ -+static void -+exp_test_upward (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(exp) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (exp_upward); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_UPWARD)) -+ { -+ TEST_f_f (exp, 1, M_El); -+ TEST_f_f (exp, 2, M_E2l); -+ TEST_f_f (exp, 3, M_E3l); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (exp_upward); -+} -+ -+ -+static void - exp10_test (void) - { - errno = 0; -@@ -4848,22 +5200,127 @@ pow_test (void) - END (pow); - } - -+ - static void --remainder_test (void) -+pow_test_tonearest (void) - { -+ int save_round_mode; - errno = 0; -- FUNC(remainder) (1.625, 1.0); -+ FUNC(pow) (0, 0); - if (errno == ENOSYS) - /* Function not implemented. */ - return; - -- START (remainder); -+ START (pow_tonearest); - -- TEST_ff_f (remainder, 1, 0, nan_value, INVALID_EXCEPTION); -- TEST_ff_f (remainder, 1, minus_zero, nan_value, INVALID_EXCEPTION); -- TEST_ff_f (remainder, plus_infty, 1, nan_value, INVALID_EXCEPTION); -- TEST_ff_f (remainder, minus_infty, 1, nan_value, INVALID_EXCEPTION); -- TEST_ff_f (remainder, nan_value, nan_value, nan_value); -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_TONEAREST)) -+ { -+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L); -+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (pow_tonearest); -+} -+ -+ -+static void -+pow_test_towardzero (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(pow) (0, 0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (pow_towardzero); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_TOWARDZERO)) -+ { -+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L); -+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (pow_towardzero); -+} -+ -+ -+static void -+pow_test_downward (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(pow) (0, 0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (pow_downward); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_DOWNWARD)) -+ { -+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L); -+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (pow_downward); -+} -+ -+ -+static void -+pow_test_upward (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(pow) (0, 0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (pow_upward); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_UPWARD)) -+ { -+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L); -+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (pow_upward); -+} -+ -+ -+static void -+remainder_test (void) -+{ -+ errno = 0; -+ FUNC(remainder) (1.625, 1.0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (remainder); -+ -+ TEST_ff_f (remainder, 1, 0, nan_value, INVALID_EXCEPTION); -+ TEST_ff_f (remainder, 1, minus_zero, nan_value, INVALID_EXCEPTION); -+ TEST_ff_f (remainder, plus_infty, 1, nan_value, INVALID_EXCEPTION); -+ TEST_ff_f (remainder, minus_infty, 1, nan_value, INVALID_EXCEPTION); -+ TEST_ff_f (remainder, nan_value, nan_value, nan_value); - - TEST_ff_f (remainder, 1.625, 1.0, -0.375); - TEST_ff_f (remainder, -1.625, 1.0, 0.375); -@@ -5545,6 +6002,7 @@ sin_test (void) - - #ifdef TEST_DOUBLE - TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868); -+ TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1); - #endif - - END (sin); -@@ -5553,6 +6011,142 @@ sin_test (void) - - - static void -+sin_test_tonearest (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(sin) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (sin_tonearest); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_TONEAREST)) -+ { -+ TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L); -+ TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L); -+ TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L); -+ TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L); -+ TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L); -+ TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L); -+ TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L); -+ TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L); -+ TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L); -+ TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (sin_tonearest); -+} -+ -+ -+static void -+sin_test_towardzero (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(sin) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (sin_towardzero); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_TOWARDZERO)) -+ { -+ TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L); -+ TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L); -+ TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L); -+ TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L); -+ TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L); -+ TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L); -+ TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L); -+ TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L); -+ TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L); -+ TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (sin_towardzero); -+} -+ -+ -+static void -+sin_test_downward (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(sin) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (sin_downward); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_DOWNWARD)) -+ { -+ TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L); -+ TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L); -+ TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L); -+ TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L); -+ TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L); -+ TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L); -+ TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L); -+ TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L); -+ TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L); -+ TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (sin_downward); -+} -+ -+ -+static void -+sin_test_upward (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(sin) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (sin_upward); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_UPWARD)) -+ { -+ TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L); -+ TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L); -+ TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L); -+ TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L); -+ TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L); -+ TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L); -+ TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L); -+ TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L); -+ TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L); -+ TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (sin_upward); -+} -+ -+ -+static void - sincos_test (void) - { - FLOAT sin_res, cos_res; -@@ -5610,6 +6204,115 @@ sinh_test (void) - END (sinh); - } - -+ -+static void -+sinh_test_tonearest (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(sinh) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (sinh_tonearest); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_TONEAREST)) -+ { -+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L); -+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L); -+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (sinh_tonearest); -+} -+ -+ -+static void -+sinh_test_towardzero (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(sinh) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (sinh_towardzero); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_TOWARDZERO)) -+ { -+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L); -+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L); -+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (sinh_towardzero); -+} -+ -+ -+static void -+sinh_test_downward (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(sinh) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (sinh_downward); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_DOWNWARD)) -+ { -+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L); -+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L); -+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (sinh_downward); -+} -+ -+ -+static void -+sinh_test_upward (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(sinh) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (sinh_upward); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_UPWARD)) -+ { -+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L); -+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L); -+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (sinh_upward); -+} -+ -+ - static void - sqrt_test (void) - { -@@ -5673,6 +6376,143 @@ tan_test (void) - END (tan); - } - -+ -+static void -+tan_test_tonearest (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(tan) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (tan_tonearest); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_TONEAREST)) -+ { -+ TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L); -+ TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L); -+ TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L); -+ TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L); -+ TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L); -+ TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L); -+ TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L); -+ TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L); -+ TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L); -+ TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (tan_tonearest); -+} -+ -+ -+static void -+tan_test_towardzero (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(tan) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (tan_towardzero); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_TOWARDZERO)) -+ { -+ TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L); -+ TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L); -+ TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L); -+ TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L); -+ TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L); -+ TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L); -+ TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L); -+ TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L); -+ TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L); -+ TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (tan_towardzero); -+} -+ -+ -+static void -+tan_test_downward (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(tan) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (tan_downward); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_DOWNWARD)) -+ { -+ TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L); -+ TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L); -+ TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L); -+ TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L); -+ TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L); -+ TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L); -+ TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L); -+ TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L); -+ TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L); -+ TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (tan_downward); -+} -+ -+ -+static void -+tan_test_upward (void) -+{ -+ int save_round_mode; -+ errno = 0; -+ FUNC(tan) (0); -+ if (errno == ENOSYS) -+ /* Function not implemented. */ -+ return; -+ -+ START (tan_upward); -+ -+ save_round_mode = fegetround (); -+ -+ if (!fesetround (FE_UPWARD)) -+ { -+ TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L); -+ TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L); -+ TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L); -+ TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L); -+ TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L); -+ TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L); -+ TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L); -+ TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L); -+ TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L); -+ TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L); -+ } -+ -+ fesetround (save_round_mode); -+ -+ END (tan_upward); -+} -+ -+ - static void - tanh_test (void) - { -@@ -6171,20 +7011,44 @@ main (int argc, char **argv) - atan_test (); - atan2_test (); - cos_test (); -+ cos_test_tonearest (); -+ cos_test_towardzero (); -+ cos_test_downward (); -+ cos_test_upward (); - sin_test (); -+ sin_test_tonearest (); -+ sin_test_towardzero (); -+ sin_test_downward (); -+ sin_test_upward (); - sincos_test (); - tan_test (); -+ tan_test_tonearest (); -+ tan_test_towardzero (); -+ tan_test_downward (); -+ tan_test_upward (); - - /* Hyperbolic functions: */ - acosh_test (); - asinh_test (); - atanh_test (); - cosh_test (); -+ cosh_test_tonearest (); -+ cosh_test_towardzero (); -+ cosh_test_downward (); -+ cosh_test_upward (); - sinh_test (); -+ sinh_test_tonearest (); -+ sinh_test_towardzero (); -+ sinh_test_downward (); -+ sinh_test_upward (); - tanh_test (); - - /* Exponential and logarithmic functions: */ - exp_test (); -+ exp_test_tonearest (); -+ exp_test_towardzero (); -+ exp_test_downward (); -+ exp_test_upward (); - exp10_test (); - exp2_test (); - expm1_test (); -@@ -6207,6 +7071,10 @@ main (int argc, char **argv) - fabs_test (); - hypot_test (); - pow_test (); -+ pow_test_tonearest (); -+ pow_test_towardzero (); -+ pow_test_downward (); -+ pow_test_upward (); - sqrt_test (); - - /* Error and gamma functions: */ -diff -Nrup a/math/math_private.h b/math/math_private.h ---- a/math/math_private.h 2010-05-04 05:27:23.000000000 -0600 -+++ b/math/math_private.h 2012-08-06 09:54:00.821929695 -0600 -@@ -357,4 +357,41 @@ extern void __docos (double __x, double - #define math_force_eval(x) __asm __volatile ("" : : "m" (x)) - #endif - -+ -+/* The standards only specify one variant of the fenv.h interfaces. -+ But at least for some architectures we can be more efficient if we -+ know what operations are going to be performed. Therefore we -+ define additional interfaces. By default they refer to the normal -+ interfaces. */ -+#define libc_fegetround() fegetround () -+#define libc_fegetroundf() fegetround () -+#define libc_fegetroundl() fegetround () -+ -+#define libc_fesetround(r) (void) fesetround (r) -+#define libc_fesetroundf(r) (void) fesetround (r) -+#define libc_fesetroundl(r) (void) fesetround (r) -+ -+#define libc_feholdexcept(e) (void) feholdexcept (e) -+#define libc_feholdexceptf(e) (void) feholdexcept (e) -+#define libc_feholdexceptl(e) (void) feholdexcept (e) -+ -+#define libc_feholdexcept_setround(e, r) \ -+ do { feholdexcept (e); fesetround (r); } while (0) -+#define libc_feholdexcept_setroundf(e, r) \ -+ do { feholdexcept (e); fesetround (r); } while (0) -+#define libc_feholdexcept_setroundl(e, r) \ -+ do { feholdexcept (e); fesetround (r); } while (0) -+ -+#define libc_fetestexcept(e) fetestexcept (e) -+#define libc_fetestexceptf(e) fetestexcept (e) -+#define libc_fetestexceptl(e) fetestexcept (e) -+ -+#define libc_fesetenv(e) (void) fesetenv (e) -+#define libc_fesetenvf(e) (void) fesetenv (e) -+#define libc_fesetenvl(e) (void) fesetenv (e) -+ -+#define libc_feupdateenv(e) (void) feupdateenv (e) -+#define libc_feupdateenvf(e) (void) feupdateenv (e) -+#define libc_feupdateenvl(e) (void) feupdateenv (e) -+ - #endif /* _MATH_PRIVATE_H_ */ -diff -Nrup a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps ---- a/sysdeps/i386/fpu/libm-test-ulps 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/i386/fpu/libm-test-ulps 2012-08-06 11:29:16.370874961 -0600 -@@ -9,18 +9,12 @@ ldouble: 1 - Test "asin (-0.5) == -pi/6": - ildouble: 1 - ldouble: 1 --Test "asin (-1.0) == -pi/2": --ildouble: 1 --ldouble: 1 - Test "asin (0.5) == pi/6": - ildouble: 1 - ldouble: 1 - Test "asin (0.75) == 0.848062078981481008052944338998418080": - ildouble: 1 - ldouble: 1 --Test "asin (1.0) == pi/2": --ildouble: 1 --ldouble: 1 - - # atanh - Test "atanh (0.75) == 0.972955074527656652552676371721589865": -@@ -35,20 +29,6 @@ ildouble: 2 - ldouble: 2 - - # cacosh --Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i": --double: 1 --float: 9 --idouble: 1 --ifloat: 9 --ildouble: 6 --ldouble: 6 --Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i": --double: 1 --float: 4 --idouble: 1 --ifloat: 4 --ildouble: 1 --ldouble: 1 - Test "Real part of: cacosh (0.75 + 1.25 i) == 1.13239363160530819522266333696834467 + 1.11752014915610270578240049553777969 i": - ildouble: 1 - ldouble: 1 -@@ -124,8 +104,6 @@ ldouble: 1 - Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i": - float: 1 - ifloat: 1 --ildouble: 1 --ldouble: 1 - Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i": - double: 1 - idouble: 1 -@@ -149,9 +127,7 @@ float: 1 - idouble: 1 - ifloat: 1 - Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - - # cexp -@@ -186,8 +162,6 @@ ifloat: 1 - Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i": - double: 1 - idouble: 1 --ildouble: 1 --ldouble: 1 - Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i": - double: 1 - float: 1 -@@ -262,27 +236,175 @@ ifloat: 1 - # cos - Test "cos (M_PI_6l * 2.0) == 0.5": - double: 1 --float: 1 - idouble: 1 --ifloat: 1 - Test "cos (M_PI_6l * 4.0) == -0.5": - double: 2 - float: 1 - idouble: 2 - ifloat: 1 -+ -+# cos_downward -+Test "cos_downward (1) == 0.5403023058681397174009366074429766037323": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (10) == -0.8390715290764524522588639478240648345199": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "cos_downward (3) == -0.9899924966004454572715727947312613023937": -+double: 1 -+idouble: 1 -+Test "cos_downward (4) == -0.6536436208636119146391681830977503814241": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (5) == 0.2836621854632262644666391715135573083344": -+float: 1 -+ifloat: 1 -+Test "cos_downward (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (8) == -0.1455000338086135258688413818311946826093": -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (9) == -0.9111302618846769883682947111811653112463": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# cos_tonearest -+Test "cos_tonearest (8) == -0.1455000338086135258688413818311946826093": -+ildouble: 1 -+ldouble: 1 -+Test "cos_tonearest (9) == -0.9111302618846769883682947111811653112463": -+ildouble: 1 -+ldouble: 1 -+ -+# cos_towardzero -+Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199": - ildouble: 1 - ldouble: 1 --Test "cos (pi/2) == 0": -+Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660": - double: 1 - float: 1 - idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 -+Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (4) == -0.6536436208636119146391681830977503814241": -+double: 1 -+idouble: 1 -+Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344": -+float: 1 -+ifloat: 1 -+Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 - --# cosh --Test "cosh (0.75) == 1.29468328467684468784170818539018176": -+# cos_upward -+Test "cos_upward (1) == 0.5403023058681397174009366074429766037323": -+float: 1 -+ifloat: 1 -+Test "cos_upward (10) == -0.8390715290764524522588639478240648345199": -+ildouble: 1 -+ldouble: 1 -+Test "cos_upward (2) == -0.4161468365471423869975682295007621897660": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_upward (3) == -0.9899924966004454572715727947312613023937": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_upward (4) == -0.6536436208636119146391681830977503814241": -+double: 1 -+idouble: 1 -+Test "cos_upward (5) == 0.2836621854632262644666391715135573083344": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_upward (6) == 0.9601702866503660205456522979229244054519": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 - ildouble: 1 -+ldouble: 1 -+Test "cos_upward (7) == 0.7539022543433046381411975217191820122183": -+double: 1 -+idouble: 1 -+Test "cos_upward (8) == -0.1455000338086135258688413818311946826093": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ -+# cosh_downward -+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997": -+double: 1 -+float: 1 -+ldouble: 2 -+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344": -+double: 1 -+float: 1 -+ldouble: 1 -+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919": -+float: 1 -+ldouble: 1 -+ -+# cosh_tonearest -+Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997": -+ldouble: 1 -+ -+# cosh_towardzero -+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997": -+double: 1 -+float: 1 -+ldouble: 2 -+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344": -+double: 1 -+float: 1 -+ldouble: 1 -+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919": -+float: 1 -+ldouble: 1 -+ -+# cosh_upward -+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344": -+ldouble: 1 -+Test "cosh_upward (24) == 13244561064.92173614708845674912733665919": -+double: 1 - - # cpow - Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i": -@@ -353,12 +475,8 @@ double: 1 - float: 1 - idouble: 1 - ifloat: 1 --ildouble: 2 --ldouble: 2 - Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 -@@ -370,40 +488,36 @@ ifloat: 1 - Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": - double: 1 - idouble: 1 --ildouble: 439 --ldouble: 439 -+ildouble: 1 -+ldouble: 1 - Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": - float: 1 - ifloat: 1 --ildouble: 2 --ldouble: 2 -+ildouble: 1 -+ldouble: 1 - Test "Real part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i": - ildouble: 1 - ldouble: 1 - Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 3 - ldouble: 3 - - # ctanh - Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i": --ildouble: 5 --ldouble: 5 -+ildouble: 3 -+ldouble: 3 - Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i": - float: 1 - ifloat: 1 --ildouble: 25 --ldouble: 25 -+ildouble: 1 -+ldouble: 1 - Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i": - float: 1 - ifloat: 1 - Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - Test "Imaginary part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i": - double: 1 -@@ -419,9 +533,6 @@ double: 1 - idouble: 1 - - # erfc --Test "erfc (0.75) == 0.288844366346484868401062165408589223": --float: 1 --ifloat: 1 - Test "erfc (1.25) == 0.0770998717435417698634765188027188596": - ildouble: 1 - ldouble: 1 -@@ -434,14 +545,6 @@ idouble: 1 - ildouble: 1 - ldouble: 1 - --# exp --Test "exp (0.75) == 2.11700001661267466854536981983709561": --ildouble: 1 --Test "exp (1000.0) == 0.197007111401704699388887935224332313e435": --ildouble: 754 --Test "exp (50.0) == 5184705528587072464087.45332293348538": --ildouble: 16 -- - # exp10 - Test "exp10 (-1) == 0.1": - ildouble: 1 -@@ -453,6 +556,51 @@ Test "exp10 (3) == 1000": - ildouble: 8 - ldouble: 8 - -+# exp_downward -+Test "exp_downward (1) == e": -+ildouble: 1 -+ldouble: 1 -+Test "exp_downward (2) == e^2": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "exp_downward (3) == e^3": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# exp_towardzero -+Test "exp_towardzero (1) == e": -+ildouble: 1 -+ldouble: 1 -+Test "exp_towardzero (2) == e^2": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "exp_towardzero (3) == e^3": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# exp_upward -+Test "exp_upward (1) == e": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ - # expm1 - Test "expm1 (1) == M_El - 1.0": - ildouble: 1 -@@ -485,26 +633,24 @@ float: 1 - # j0 - Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1": - double: 1 --float: 2 -+float: 1 - idouble: 1 --ifloat: 2 -+ifloat: 1 - ildouble: 1 - ldouble: 1 - Test "j0 (10.0) == -0.245935764451348335197760862485328754": --double: 3 -+double: 1 - float: 1 --idouble: 3 -+idouble: 1 - ifloat: 1 - Test "j0 (2.0) == 0.223890779141235668051827454649948626": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1": - double: 1 --float: 2 -+float: 1 - idouble: 1 --ifloat: 2 -+ifloat: 1 - ildouble: 1 - ldouble: 1 - Test "j0 (8.0) == 0.171650807137553906090869407851972001": -@@ -512,13 +658,8 @@ float: 1 - ifloat: 1 - - # j1 --Test "j1 (0.75) == 0.349243602174862192523281016426251335": --double: 1 --idouble: 1 - Test "j1 (10.0) == 0.0434727461688614366697487680258592883": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 -@@ -526,9 +667,7 @@ Test "j1 (2.0) == 0.57672480775687338720 - double: 1 - idouble: 1 - Test "j1 (8.0) == 0.234636346853914624381276651590454612": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 -@@ -536,38 +675,31 @@ ldouble: 1 - # jn - Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1": - double: 1 --float: 2 -+float: 1 - idouble: 1 --ifloat: 2 -+ifloat: 1 - ildouble: 1 - ldouble: 1 - Test "jn (0, 10.0) == -0.245935764451348335197760862485328754": --double: 3 -+double: 1 - float: 1 --idouble: 3 -+idouble: 1 - ifloat: 1 - Test "jn (0, 2.0) == 0.223890779141235668051827454649948626": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1": - double: 1 --float: 2 -+float: 1 - idouble: 1 --ifloat: 2 -+ifloat: 1 - ildouble: 1 - ldouble: 1 - Test "jn (0, 8.0) == 0.171650807137553906090869407851972001": - float: 1 - ifloat: 1 --Test "jn (1, 0.75) == 0.349243602174862192523281016426251335": --double: 1 --idouble: 1 - Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 -@@ -575,9 +707,7 @@ Test "jn (1, 2.0) == 0.57672480775687338 - double: 1 - idouble: 1 - Test "jn (1, 8.0) == 0.234636346853914624381276651590454612": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 -@@ -589,9 +719,7 @@ ifloat: 1 - ildouble: 1 - ldouble: 1 - Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10": - float: 1 -@@ -606,38 +734,32 @@ ifloat: 1 - ildouble: 1 - ldouble: 1 - Test "jn (10, 10.0) == 0.207486106633358857697278723518753428": --double: 5 --float: 2 --idouble: 5 --ifloat: 2 -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 - ildouble: 2 - ldouble: 2 - Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6": --double: 2 --idouble: 2 - ildouble: 1 - ldouble: 1 - Test "jn (3, -1.0) == -0.0195633539826684059189053216217515083": - ildouble: 1 - ldouble: 1 - Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - Test "jn (3, 1.0) == 0.0195633539826684059189053216217515083": - ildouble: 1 - ldouble: 1 - Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563": --double: 5 --float: 2 --idouble: 5 --ifloat: 2 -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 - ildouble: 1 - ldouble: 1 - Test "jn (3, 2.0) == 0.128943249474402051098793332969239835": --double: 1 --idouble: 1 - ildouble: 1 - ldouble: 1 - -@@ -648,9 +770,7 @@ idouble: 1 - ildouble: 1 - ldouble: 1 - Test "lgamma (0.7) == 0.260867246531666514385732417016759578": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1": - double: 1 -@@ -660,11 +780,6 @@ ifloat: 2 - ildouble: 1 - ldouble: 1 - --# log --Test "log (e) == 1": --float: 1 --ifloat: 1 -- - # log10 - Test "log10 (0.75) == -0.124938736608299953132449886193870744": - ildouble: 1 -@@ -675,20 +790,179 @@ ifloat: 1 - ildouble: 1 - ldouble: 1 - --# sincos --Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res": -+# pow_downward -+Test "pow_downward (1.0625, 1.125) == 1.070582293028761362162622578677070098674": - double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948": - float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# pow_towardzero -+Test "pow_towardzero (1.0625, 1.125) == 1.070582293028761362162622578677070098674": -+double: 1 - idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948": -+float: 1 - ifloat: 1 --Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res": -+ildouble: 1 -+ldouble: 1 -+ -+# pow_upward -+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "pow_upward (1.5, 1.03125) == 1.519127098714743184071644334163037684948": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# sin_downward -+Test "sin_downward (1) == 0.8414709848078965066525023216302989996226": -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (10) == -0.5440211108893698134047476618513772816836": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (2) == 0.9092974268256816953960198659117448427023": -+double: 1 -+idouble: 1 -+Test "sin_downward (3) == 0.1411200080598672221007448028081102798469": -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (4) == -0.7568024953079282513726390945118290941359": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (5) == -0.9589242746631384688931544061559939733525": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (6) == -0.2794154981989258728115554466118947596280": - double: 1 - float: 1 - idouble: 1 - ifloat: 1 -+Test "sin_downward (7) == 0.6569865987187890903969990915936351779369": - ildouble: 1 - ldouble: 1 --Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res": -+Test "sin_downward (8) == 0.9893582466233817778081235982452886721164": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (9) == 0.4121184852417565697562725663524351793439": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# sin_tonearest -+Test "sin_tonearest (10) == -0.5440211108893698134047476618513772816836": -+ildouble: 1 -+ldouble: 1 -+Test "sin_tonearest (4) == -0.7568024953079282513726390945118290941359": -+ildouble: 1 -+ldouble: 1 -+Test "sin_tonearest (9) == 0.4121184852417565697562725663524351793439": -+ildouble: 1 -+ldouble: 1 -+ -+# sin_towardzero -+Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836": -+float: 1 -+ifloat: 1 -+Test "sin_towardzero (2) == 0.9092974268256816953960198659117448427023": -+double: 1 -+idouble: 1 -+Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359": -+float: 1 -+ifloat: 1 -+Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525": -+float: 1 -+ifloat: 1 -+Test "sin_towardzero (6) == -0.2794154981989258728115554466118947596280": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (7) == 0.6569865987187890903969990915936351779369": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# sin_upward -+Test "sin_upward (1) == 0.8414709848078965066525023216302989996226": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "sin_upward (10) == -0.5440211108893698134047476618513772816836": -+float: 1 -+ifloat: 1 -+Test "sin_upward (2) == 0.9092974268256816953960198659117448427023": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (3) == 0.1411200080598672221007448028081102798469": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "sin_upward (4) == -0.7568024953079282513726390945118290941359": -+float: 1 -+ifloat: 1 -+Test "sin_upward (5) == -0.9589242746631384688931544061559939733525": -+float: 1 -+ifloat: 1 -+Test "sin_upward (6) == -0.2794154981989258728115554466118947596280": -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (7) == 0.6569865987187890903969990915936351779369": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "sin_upward (8) == 0.9893582466233817778081235982452886721164": -+float: 1 -+ifloat: 1 -+ -+# sincos -+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res": -+double: 1 -+idouble: 1 -+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res": - double: 1 - float: 1 - idouble: 1 -@@ -698,66 +972,237 @@ ldouble: 1 - - # sinh - Test "sinh (0.75) == 0.822316731935829980703661634446913849": --double: 1 - ildouble: 1 - --# tan --Test "tan (pi/4) == 1": -+# sinh_downward -+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225": - double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ldouble: 4 -+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305": -+double: 1 -+float: 1 - idouble: 1 -+ifloat: 1 -+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168": -+float: 1 -+ifloat: 1 -+ldouble: 5 - --# tgamma --Test "tgamma (-0.5) == -2 sqrt (pi)": --double: 2 -+# sinh_tonearest -+Test "sinh_tonearest (22) == 1792456423.065795780701106568345764104225": -+ldouble: 3 -+Test "sinh_tonearest (23) == 4872401723.124451299966006944252978187305": -+ldouble: 1 -+Test "sinh_tonearest (24) == 13244561064.92173614705070540368454568168": -+ldouble: 6 -+ -+# sinh_towardzero -+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ldouble: 4 -+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168": -+float: 1 -+ifloat: 1 -+ldouble: 5 -+ -+# sinh_upward -+Test "sinh_upward (22) == 1792456423.065795780701106568345764104225": -+ldouble: 16 -+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305": -+ldouble: 27 -+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168": -+double: 1 -+idouble: 1 -+ldouble: 7 -+ -+# tan_downward -+Test "tan_downward (1) == 1.5574077246549022305069748074583601730873": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "tan_downward (10) == 0.6483608274590866712591249330098086768169": -+float: 1 -+ifloat: 1 -+Test "tan_downward (2) == -2.1850398632615189916433061023136825434320": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "tan_downward (3) == -0.1425465430742778052956354105339134932261": -+double: 1 -+idouble: 1 -+Test "tan_downward (4) == 1.1578212823495775831373424182673239231198": - float: 1 --idouble: 2 - ifloat: 1 - ildouble: 1 - ldouble: 1 --Test "tgamma (0.5) == sqrt (pi)": -+Test "tan_downward (5) == -3.3805150062465856369827058794473439087096": -+ildouble: 1 -+ldouble: 1 -+Test "tan_downward (6) == -0.2910061913847491570536995888681755428312": -+double: 1 - float: 1 -+idouble: 1 - ifloat: 1 --Test "tgamma (0.7) == 1.29805533264755778568117117915281162": -+Test "tan_downward (7) == 0.8714479827243187364564508896003135663222": -+double: 1 -+idouble: 1 -+Test "tan_downward (8) == -6.7997114552203786999252627596086333648814": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_downward (9) == -0.4523156594418098405903708757987855343087": -+float: 1 -+ifloat: 1 -+ -+# tan_tonearest -+Test "tan_tonearest (6) == -0.2910061913847491570536995888681755428312": -+ildouble: 1 -+ldouble: 1 -+Test "tan_tonearest (8) == -6.7997114552203786999252627596086333648814": -+ildouble: 1 -+ldouble: 1 -+Test "tan_tonearest (9) == -0.4523156594418098405903708757987855343087": -+ildouble: 1 -+ldouble: 1 -+ -+# tan_towardzero -+Test "tan_towardzero (1) == 1.5574077246549022305069748074583601730873": - double: 1 - float: 1 - idouble: 1 - ifloat: 1 --Test "tgamma (4) == 6": -+Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169": -+float: 1 -+ifloat: 1 -+Test "tan_towardzero (2) == -2.1850398632615189916433061023136825434320": -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312": -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (7) == 0.8714479827243187364564508896003135663222": -+double: 1 -+idouble: 1 -+Test "tan_towardzero (8) == -6.7997114552203786999252627596086333648814": -+double: 1 -+idouble: 1 -+ildouble: 2 -+ldouble: 2 -+Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087": -+double: 1 -+idouble: 1 - ildouble: 1 - ldouble: 1 - --# y0 --Test "y0 (0.125) == -1.38968062514384052915582277745018693": -+# tan_upward -+Test "tan_upward (1) == 1.5574077246549022305069748074583601730873": - ildouble: 1 - ldouble: 1 --Test "y0 (0.75) == -0.137172769385772397522814379396581855": -+Test "tan_upward (10) == 0.6483608274590866712591249330098086768169": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (2) == -2.1850398632615189916433061023136825434320": -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (3) == -0.1425465430742778052956354105339134932261": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (4) == 1.1578212823495775831373424182673239231198": -+double: 1 -+idouble: 1 -+Test "tan_upward (5) == -3.3805150062465856369827058794473439087096": - double: 1 - float: 1 - idouble: 1 - ifloat: 1 --Test "y0 (1.0) == 0.0882569642156769579829267660235151628": -+Test "tan_upward (6) == -0.2910061913847491570536995888681755428312": -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (7) == 0.8714479827243187364564508896003135663222": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (8) == -6.7997114552203786999252627596086333648814": -+double: 1 -+idouble: 1 -+ildouble: 2 -+ldouble: 2 -+Test "tan_upward (9) == -0.4523156594418098405903708757987855343087": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# tgamma -+Test "tgamma (-0.5) == -2 sqrt (pi)": - double: 2 - float: 1 - idouble: 2 - ifloat: 1 - ildouble: 1 - ldouble: 1 --Test "y0 (1.5) == 0.382448923797758843955068554978089862": -+Test "tgamma (0.5) == sqrt (pi)": -+float: 1 -+ifloat: 1 -+Test "tgamma (0.7) == 1.29805533264755778568117117915281162": - double: 1 - float: 1 - idouble: 1 - ifloat: 1 --Test "y0 (10.0) == 0.0556711672835993914244598774101900481": -+ -+# y0 -+Test "y0 (0.125) == -1.38968062514384052915582277745018693": -+ildouble: 1 -+ldouble: 1 -+Test "y0 (0.75) == -0.137172769385772397522814379396581855": - double: 1 - float: 1 - idouble: 1 - ifloat: 1 -+Test "y0 (1.0) == 0.0882569642156769579829267660235151628": -+ildouble: 1 -+ldouble: 1 -+Test "y0 (10.0) == 0.0556711672835993914244598774101900481": -+float: 1 -+ifloat: 1 - ildouble: 1 - ldouble: 1 - Test "y0 (8.0) == 0.223521489387566220527323400498620359": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 -@@ -766,9 +1211,6 @@ ldouble: 1 - Test "y1 (0.125) == -5.19993611253477499595928744876579921": - ildouble: 1 - ldouble: 1 --Test "y1 (1.0) == -0.781212821300288716547150000047964821": --double: 1 --idouble: 1 - Test "y1 (10.0) == 0.249015424206953883923283474663222803": - double: 2 - float: 2 -@@ -782,9 +1224,7 @@ ifloat: 2 - ildouble: 1 - ldouble: 1 - Test "y1 (8.0) == -0.158060461731247494255555266187483550": --double: 1 - float: 2 --idouble: 1 - ifloat: 2 - ildouble: 1 - ldouble: 1 -@@ -799,37 +1239,21 @@ float: 1 - idouble: 1 - ifloat: 1 - Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628": --double: 2 --float: 1 --idouble: 2 --ifloat: 1 - ildouble: 1 - ldouble: 1 --Test "yn (0, 1.5) == 0.382448923797758843955068554978089862": --double: 1 --float: 1 --idouble: 1 --ifloat: 1 - Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 - Test "yn (0, 8.0) == 0.223521489387566220527323400498620359": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 - Test "yn (1, 0.125) == -5.19993611253477499595928744876579921": - ildouble: 1 - ldouble: 1 --Test "yn (1, 1.0) == -0.781212821300288716547150000047964821": --double: 1 --idouble: 1 - Test "yn (1, 10.0) == 0.249015424206953883923283474663222803": - double: 2 - float: 2 -@@ -843,17 +1267,13 @@ ifloat: 2 - ildouble: 1 - ldouble: 1 - Test "yn (1, 8.0) == -0.158060461731247494255555266187483550": --double: 1 - float: 2 --idouble: 1 - ifloat: 2 - ildouble: 1 - ldouble: 1 - Test "yn (10, 0.125) == -127057845771019398.252538486899753195": - double: 1 --float: 1 - idouble: 1 --ifloat: 1 - ildouble: 2 - ldouble: 2 - Test "yn (10, 0.75) == -2133501638.90573424452445412893839236": -@@ -862,28 +1282,22 @@ ifloat: 1 - ildouble: 4 - ldouble: 4 - Test "yn (10, 1.0) == -121618014.278689189288130426667971145": --double: 1 - float: 2 --idouble: 1 - ifloat: 2 - Test "yn (10, 10.0) == -0.359814152183402722051986577343560609": - double: 1 --float: 3 -+float: 1 - idouble: 1 --ifloat: 3 -+ifloat: 1 - Test "yn (10, 2.0) == -129184.542208039282635913145923304214": --double: 2 - float: 3 --idouble: 2 - ifloat: 3 - Test "yn (3, 0.125) == -2612.69757350066712600220955744091741": - ildouble: 1 - ldouble: 1 - Test "yn (3, 0.75) == -12.9877176234475433186319774484809207": - double: 1 --float: 1 - idouble: 1 --ifloat: 1 - ildouble: 2 - ldouble: 2 - Test "yn (3, 10.0) == -0.251362657183837329779204747654240998": -@@ -892,15 +1306,13 @@ float: 1 - idouble: 1 - ifloat: 1 - Test "yn (3, 2.0) == -1.12778377684042778608158395773179238": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - - # Maximal error of functions: - Function: "acos": --ildouble: 622 --ldouble: 622 -+ildouble: 1 -+ldouble: 1 - - Function: "asin": - ildouble: 1 -@@ -917,18 +1329,6 @@ ildouble: 2 - ldouble: 2 - - Function: Real part of "cacosh": --double: 1 --float: 9 --idouble: 1 --ifloat: 9 --ildouble: 6 --ldouble: 6 -- --Function: Imaginary part of "cacosh": --double: 1 --float: 4 --idouble: 1 --ifloat: 4 - ildouble: 1 - ldouble: 1 - -@@ -1033,8 +1433,6 @@ double: 1 - float: 1 - idouble: 1 - ifloat: 1 --ildouble: 1 --ldouble: 1 - - Function: "cos": - double: 2 -@@ -1044,16 +1442,58 @@ ifloat: 1 - ildouble: 1 - ldouble: 1 - --Function: "cosh": -+Function: "cos_downward": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cos_tonearest": - ildouble: 1 -+ldouble: 1 -+ -+Function: "cos_towardzero": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cos_upward": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cosh_downward": -+double: 1 -+float: 1 -+ldouble: 2 -+ -+Function: "cosh_tonearest": -+ldouble: 1 -+ -+Function: "cosh_towardzero": -+double: 1 -+float: 1 -+ldouble: 2 -+ -+Function: "cosh_upward": -+double: 1 -+ldouble: 1 - - Function: Real part of "cpow": - double: 1 - float: 4 - idouble: 1 - ifloat: 4 --ildouble: 763 --ldouble: 763 -+ildouble: 6 -+ldouble: 6 - - Function: Imaginary part of "cpow": - double: 2 -@@ -1086,38 +1526,32 @@ double: 1 - float: 1 - idouble: 1 - ifloat: 1 --ildouble: 2 --ldouble: 2 - - Function: Real part of "ctan": - double: 1 - idouble: 1 --ildouble: 439 --ldouble: 439 -+ildouble: 1 -+ldouble: 1 - - Function: Imaginary part of "ctan": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 3 - ldouble: 3 - - Function: Real part of "ctanh": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 --ildouble: 5 --ldouble: 5 -+ildouble: 3 -+ldouble: 3 - - Function: Imaginary part of "ctanh": - double: 1 - float: 1 - idouble: 1 - ifloat: 1 --ildouble: 25 --ldouble: 25 -+ildouble: 1 -+ldouble: 1 - - Function: "erf": - double: 1 -@@ -1125,19 +1559,36 @@ idouble: 1 - - Function: "erfc": - double: 1 --float: 1 - idouble: 1 --ifloat: 1 - ildouble: 1 - ldouble: 1 - --Function: "exp": --ildouble: 754 -- - Function: "exp10": - ildouble: 8 - ldouble: 8 - -+Function: "exp_downward": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "exp_towardzero": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "exp_upward": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ - Function: "expm1": - ildouble: 1 - -@@ -1151,10 +1602,10 @@ Function: "hypot": - float: 1 - - Function: "j0": --double: 3 --float: 2 --idouble: 3 --ifloat: 2 -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 - ildouble: 1 - ldouble: 1 - -@@ -1167,10 +1618,10 @@ ildouble: 1 - ldouble: 1 - - Function: "jn": --double: 5 --float: 2 --idouble: 5 --ifloat: 2 -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 - ildouble: 2 - ldouble: 2 - -@@ -1192,6 +1643,58 @@ ifloat: 1 - ildouble: 1 - ldouble: 1 - -+Function: "pow_downward": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "pow_towardzero": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "pow_upward": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_downward": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_tonearest": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_towardzero": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_upward": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ - Function: "sincos": - double: 1 - float: 1 -@@ -1201,13 +1704,62 @@ ildouble: 1 - ldouble: 1 - - Function: "sinh": --double: 1 - ildouble: 1 - -+Function: "sinh_downward": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ldouble: 5 -+ -+Function: "sinh_tonearest": -+ldouble: 6 -+ -+Function: "sinh_towardzero": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ldouble: 5 -+ -+Function: "sinh_upward": -+double: 1 -+idouble: 1 -+ldouble: 27 -+ - Function: "tan": - double: 1 - idouble: 1 - -+Function: "tan_downward": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "tan_tonearest": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "tan_towardzero": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "tan_upward": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ - Function: "tgamma": - double: 2 - float: 1 -@@ -1217,9 +1769,9 @@ ildouble: 1 - ldouble: 1 - - Function: "y0": --double: 2 -+double: 1 - float: 1 --idouble: 2 -+idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 -diff -Nrup a/sysdeps/ieee754/dbl-64/e_exp.c b/sysdeps/ieee754/dbl-64/e_exp.c ---- a/sysdeps/ieee754/dbl-64/e_exp.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/ieee754/dbl-64/e_exp.c 2012-08-06 09:54:00.823929687 -0600 -@@ -1,7 +1,7 @@ - /* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. -- * Copyright (C) 2001 Free Software Foundation -+ * Copyright (C) 2001-2012 Free Software Foundation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by -@@ -39,6 +39,7 @@ - #include "MathLib.h" - #include "uexp.tbl" - #include "math_private.h" -+#include - - double __slowexp(double); - -@@ -53,6 +54,10 @@ double __ieee754_exp(double x) { - int4 k; - #endif - int4 i,j,m,n,ex; -+ fenv_t env; -+ double retval; -+ -+ libc_feholdexcept_setround (&env, FE_TONEAREST); - - junk1.x = x; - m = junk1.i[HIGH_HALF]; -@@ -85,18 +90,19 @@ double __ieee754_exp(double x) { - rem=(bet + bet*eps)+al*eps; - res = al + rem; - cor = (al - res) + rem; -- if (res == (res+cor*err_0)) return res*binexp.x; -- else return __slowexp(x); /*if error is over bound */ -+ if (res == (res+cor*err_0)) { retval = res*binexp.x; goto ret; } -+ else { retval = __slowexp(x); goto ret; } /*if error is over bound */ - } - -- if (n <= smallint) return 1.0; -+ if (n <= smallint) { retval = 1.0; goto ret; } - - if (n >= badint) { -- if (n > infint) return(x+x); /* x is NaN */ -- if (n < infint) return ( (x>0) ? (hhuge*hhuge) : (tiny*tiny) ); -+ if (n > infint) { retval = x+x; goto ret; } /* x is NaN */ -+ if (n < infint) { retval = (x>0) ? (hhuge*hhuge) : (tiny*tiny); goto ret; } - /* x is finite, cause either overflow or underflow */ -- if (junk1.i[LOW_HALF] != 0) return (x+x); /* x is NaN */ -- return ((x>0)?inf.x:zero ); /* |x| = inf; return either inf or 0 */ -+ if (junk1.i[LOW_HALF] != 0) { retval = x+x; goto ret; } /* x is NaN */ -+ retval = (x>0)?inf.x:zero; /* |x| = inf; return either inf or 0 */ -+ goto ret; - } - - y = x*log2e.x + three51.x; -@@ -121,8 +127,8 @@ double __ieee754_exp(double x) { - if (res < 1.0) {res+=res; cor+=cor; ex-=1;} - if (ex >=-1022) { - binexp.i[HIGH_HALF] = (1023+ex)<<20; -- if (res == (res+cor*err_0)) return res*binexp.x; -- else return __slowexp(x); /*if error is over bound */ -+ if (res == (res+cor*err_0)) { retval = res*binexp.x; goto ret; } -+ else { retval = __slowexp(x); goto ret; } /*if error is over bound */ - } - ex = -(1022+ex); - binexp.i[HIGH_HALF] = (1023-ex)<<20; -@@ -135,15 +141,19 @@ double __ieee754_exp(double x) { - cor = (t-res)+y; - if (res == (res + eps*cor)) - { binexp.i[HIGH_HALF] = 0x00100000; -- return (res-1.0)*binexp.x; -+ retval = (res-1.0)*binexp.x; -+ goto ret; - } -- else return __slowexp(x); /* if error is over bound */ -+ else { retval = __slowexp(x); goto ret; } /* if error is over bound */ - } - else { - binexp.i[HIGH_HALF] =(junk1.i[LOW_HALF]+767)<<20; -- if (res == (res+cor*err_0)) return res*binexp.x*t256.x; -- else return __slowexp(x); -+ if (res == (res+cor*err_0)) { retval = res*binexp.x*t256.x; goto ret; } -+ else { retval = __slowexp(x); goto ret; } - } -+ ret: -+ libc_feupdateenv (&env); -+ return retval; - } - - /************************************************************************/ -diff -Nrup a/sysdeps/ieee754/dbl-64/e_exp2.c b/sysdeps/ieee754/dbl-64/e_exp2.c ---- a/sysdeps/ieee754/dbl-64/e_exp2.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/ieee754/dbl-64/e_exp2.c 2012-08-06 09:54:00.824929683 -0600 -@@ -24,9 +24,6 @@ - 17 (1), March 1991, pp. 26-45. - It has been slightly modified to compute 2^x instead of e^x. - */ --#ifndef _GNU_SOURCE --#define _GNU_SOURCE --#endif - #include - #include - #include -@@ -37,13 +34,8 @@ - - #include "t_exp2.h" - --/* XXX I know the assembler generates a warning about incorrect section -- attributes. But without the attribute here the compiler places the -- constants in the .data section. Ideally the constant is placed in -- .rodata.cst8 so that it can be merged, but gcc sucks, it ICEs when -- we try to force this section on it. --drepper */ --static const volatile double TWO1023 = 8.988465674311579539e+307; --static const volatile double TWOM1000 = 9.3326361850321887899e-302; -+static const double TWO1023 = 8.988465674311579539e+307; -+static const double TWOM1000 = 9.3326361850321887899e-302; - - double - __ieee754_exp2 (double x) -@@ -60,11 +52,7 @@ __ieee754_exp2 (double x) - union ieee754_double ex2_u, scale_u; - fenv_t oldenv; - -- feholdexcept (&oldenv); --#ifdef FE_TONEAREST -- /* If we don't have this, it's too bad. */ -- fesetround (FE_TONEAREST); --#endif -+ libc_feholdexcept_setround (&oldenv, FE_TONEAREST); - - /* 1. Argument reduction. - Choose integers ex, -256 <= t < 256, and some real -@@ -108,9 +96,10 @@ __ieee754_exp2 (double x) - * x + .055504110254308625) - * x + .240226506959100583) - * x + .69314718055994495) * ex2_u.d; -+ math_opt_barrier (x22); - - /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */ -- fesetenv (&oldenv); -+ libc_fesetenv (&oldenv); - - result = x22 * x + ex2_u.d; - -diff -Nrup a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c ---- a/sysdeps/ieee754/dbl-64/e_pow.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/ieee754/dbl-64/e_pow.c 2012-08-06 09:54:00.824929683 -0600 -@@ -42,6 +42,7 @@ - #include "MathLib.h" - #include "upow.tbl" - #include "math_private.h" -+#include - - - double __exp1(double x, double xx, double error); -@@ -79,6 +80,11 @@ double __ieee754_pow(double x, double y) - (u.i[HIGH_HALF]==0 && u.i[LOW_HALF]!=0)) && - /* 2^-1023< x<= 2^-1023 * 0x1.0000ffffffff */ - (v.i[HIGH_HALF]&0x7fffffff) < 0x4ff00000) { /* if y<-1 or y>1 */ -+ fenv_t env; -+ double retval; -+ -+ libc_feholdexcept_setround (&env, FE_TONEAREST); -+ - z = log1(x,&aa,&error); /* x^y =e^(y log (X)) */ - t = y*134217729.0; - y1 = t - (t-y); -@@ -92,7 +98,10 @@ double __ieee754_pow(double x, double y) - a2 = (a-a1)+aa; - error = error*ABS(y); - t = __exp1(a1,a2,1.9e16*error); /* return -10 or 0 if wasn't computed exactly */ -- return (t>0)?t:power1(x,y); -+ retval = (t>0)?t:power1(x,y); -+ -+ libc_feupdateenv (&env); -+ return retval; - } - - if (x == 0) { -diff -Nrup a/sysdeps/ieee754/dbl-64/s_sin.c b/sysdeps/ieee754/dbl-64/s_sin.c ---- a/sysdeps/ieee754/dbl-64/s_sin.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/ieee754/dbl-64/s_sin.c 2012-08-06 09:54:00.827929671 -0600 -@@ -55,6 +55,7 @@ - #include "MathLib.h" - #include "sincos.tbl" - #include "math_private.h" -+#include - - static const double - sn3 = -1.66666666666664880952546298448555E-01, -@@ -97,12 +98,16 @@ double __sin(double x){ - #if 0 - int4 nn; - #endif -+ fenv_t env; -+ double retval = 0; -+ -+ libc_feholdexcept_setround (&env, FE_TONEAREST); - - u.x = x; - m = u.i[HIGH_HALF]; - k = 0x7fffffff&m; /* no sign */ - if (k < 0x3e500000) /* if x->0 =>sin(x)=x */ -- return x; -+ { retval = x; goto ret; } - /*---------------------------- 2^-26 < |x|< 0.25 ----------------------*/ - else if (k < 0x3fd00000){ - xx = x*x; -@@ -110,7 +115,8 @@ double __sin(double x){ - t = ((((s5.x*xx + s4.x)*xx + s3.x)*xx + s2.x)*xx + s1.x)*(xx*x); - res = x+t; - cor = (x-res)+t; -- return (res == res + 1.07*cor)? res : slow(x); -+ retval = (res == res + 1.07*cor)? res : slow(x); -+ goto ret; - } /* else if (k < 0x3fd00000) */ - /*---------------------------- 0.25<|x|< 0.855469---------------------- */ - else if (k < 0x3feb6000) { -@@ -127,7 +133,8 @@ double __sin(double x){ - cor=(ssn+s*ccs-sn*c)+cs*s; - res=sn+cor; - cor=(sn-res)+cor; -- return (res==res+1.025*cor)? res : slow1(x); -+ retval = (res==res+1.096*cor)? res : slow1(x); -+ goto ret; - } /* else if (k < 0x3feb6000) */ - - /*----------------------- 0.855469 <|x|<2.426265 ----------------------*/ -@@ -153,7 +160,8 @@ double __sin(double x){ - cor=(ccs-s*ssn-cs*c)-sn*s; - res=cs+cor; - cor=(cs-res)+cor; -- return (res==res+1.020*cor)? ((m>0)?res:-res) : slow2(x); -+ retval = (res==res+1.020*cor)? ((m>0)?res:-res) : slow2(x); -+ goto ret; - } /* else if (k < 0x400368fd) */ - - /*-------------------------- 2.426265<|x|< 105414350 ----------------------*/ -@@ -179,7 +187,8 @@ double __sin(double x){ - res = a+t; - cor = (a-res)+t; - cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps; -- return (res == res + cor)? res : sloww(a,da,x); -+ retval = (res == res + cor)? res : sloww(a,da,x); -+ goto ret; - } - else { - if (a>0) -@@ -200,7 +209,8 @@ double __sin(double x){ - res=sn+cor; - cor=(sn-res)+cor; - cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps; -- return (res==res+cor)? ((m)?res:-res) : sloww1(a,da,x); -+ retval = (res==res+cor)? ((m)?res:-res) : sloww1(a,da,x); -+ goto ret; - } - break; - -@@ -222,7 +232,8 @@ double __sin(double x){ - res=cs+cor; - cor=(cs-res)+cor; - cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps; -- return (res==res+cor)? ((n&2)?-res:res) : sloww2(a,da,x,n); -+ retval = (res==res+cor)? ((n&2)?-res:res) : sloww2(a,da,x,n); -+ goto ret; - - break; - -@@ -258,7 +269,8 @@ double __sin(double x){ - res = a+t; - cor = (a-res)+t; - cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps; -- return (res == res + cor)? res : bsloww(a,da,x,n); -+ retval = (res == res + cor)? res : bsloww(a,da,x,n); -+ goto ret; - } - else { - if (a>0) {m=1;t=a;db=da;} -@@ -277,7 +289,8 @@ double __sin(double x){ - res=sn+cor; - cor=(sn-res)+cor; - cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps; -- return (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n); -+ retval = (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n); -+ goto ret; - } - break; - -@@ -299,7 +312,8 @@ double __sin(double x){ - res=cs+cor; - cor=(cs-res)+cor; - cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps; -- return (res==res+cor)? ((n&2)?-res:res) : bsloww2(a,da,x,n); -+ retval = (res==res+cor)? ((n&2)?-res:res) : bsloww2(a,da,x,n); -+ goto ret; - - break; - -@@ -313,17 +327,20 @@ double __sin(double x){ - n = __branred(x,&a,&da); - switch (n) { - case 0: -- if (a*a < 0.01588) return bsloww(a,da,x,n); -- else return bsloww1(a,da,x,n); -+ if (a*a < 0.01588) retval = bsloww(a,da,x,n); -+ else retval = bsloww1(a,da,x,n); -+ goto ret; - break; - case 2: -- if (a*a < 0.01588) return bsloww(-a,-da,x,n); -- else return bsloww1(-a,-da,x,n); -+ if (a*a < 0.01588) retval = bsloww(-a,-da,x,n); -+ else retval = bsloww1(-a,-da,x,n); -+ goto ret; - break; - - case 1: - case 3: -- return bsloww2(a,da,x,n); -+ retval = bsloww2(a,da,x,n); -+ goto ret; - break; - } - -@@ -333,9 +350,13 @@ double __sin(double x){ - else { - if (k == 0x7ff00000 && u.i[LOW_HALF] == 0) - __set_errno (EDOM); -- return x / x; -+ retval = x / x; -+ goto ret; - } -- return 0; /* unreachable */ -+ -+ ret: -+ libc_feupdateenv (&env); -+ return retval; - } - - -@@ -350,11 +371,16 @@ double __cos(double x) - mynumber u,v; - int4 k,m,n; - -+ fenv_t env; -+ double retval = 0; -+ -+ libc_feholdexcept_setround (&env, FE_TONEAREST); -+ - u.x = x; - m = u.i[HIGH_HALF]; - k = 0x7fffffff&m; - -- if (k < 0x3e400000 ) return 1.0; /* |x|<2^-27 => cos(x)=1 */ -+ if (k < 0x3e400000 ) { retval = 1.0; goto ret; } /* |x|<2^-27 => cos(x)=1 */ - - else if (k < 0x3feb6000 ) {/* 2^-27 < |x| < 0.855469 */ - y=ABS(x); -@@ -371,7 +397,8 @@ double __cos(double x) - cor=(ccs-s*ssn-cs*c)-sn*s; - res=cs+cor; - cor=(cs-res)+cor; -- return (res==res+1.020*cor)? res : cslow2(x); -+ retval = (res==res+1.020*cor)? res : cslow2(x); -+ goto ret; - - } /* else if (k < 0x3feb6000) */ - -@@ -385,7 +412,8 @@ double __cos(double x) - res = a+t; - cor = (a-res)+t; - cor = (cor>0)? 1.02*cor+1.0e-31 : 1.02*cor -1.0e-31; -- return (res == res + cor)? res : csloww(a,da,x); -+ retval = (res == res + cor)? res : csloww(a,da,x); -+ goto ret; - } - else { - if (a>0) {m=1;t=a;db=da;} -@@ -404,7 +432,8 @@ double __cos(double x) - res=sn+cor; - cor=(sn-res)+cor; - cor = (cor>0)? 1.035*cor+1.0e-31 : 1.035*cor-1.0e-31; -- return (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x); -+ retval = (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x); -+ goto ret; - } - - } /* else if (k < 0x400368fd) */ -@@ -431,7 +460,8 @@ double __cos(double x) - res = a+t; - cor = (a-res)+t; - cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps; -- return (res == res + cor)? res : csloww(a,da,x); -+ retval = (res == res + cor)? res : csloww(a,da,x); -+ goto ret; - } - else { - if (a>0) {m=1;t=a;db=da;} -@@ -450,7 +480,8 @@ double __cos(double x) - res=sn+cor; - cor=(sn-res)+cor; - cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps; -- return (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x); -+ retval = (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x); -+ goto ret; - } - break; - -@@ -471,7 +502,8 @@ double __cos(double x) - res=cs+cor; - cor=(cs-res)+cor; - cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps; -- return (res==res+cor)? ((n)?-res:res) : csloww2(a,da,x,n); -+ retval = (res==res+cor)? ((n)?-res:res) : csloww2(a,da,x,n); -+ goto ret; - - break; - -@@ -506,7 +538,8 @@ double __cos(double x) - res = a+t; - cor = (a-res)+t; - cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps; -- return (res == res + cor)? res : bsloww(a,da,x,n); -+ retval = (res == res + cor)? res : bsloww(a,da,x,n); -+ goto ret; - } - else { - if (a>0) {m=1;t=a;db=da;} -@@ -525,7 +558,8 @@ double __cos(double x) - res=sn+cor; - cor=(sn-res)+cor; - cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps; -- return (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n); -+ retval = (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n); -+ goto ret; - } - break; - -@@ -546,7 +580,8 @@ double __cos(double x) - res=cs+cor; - cor=(cs-res)+cor; - cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps; -- return (res==res+cor)? ((n)?-res:res) : bsloww2(a,da,x,n); -+ retval = (res==res+cor)? ((n)?-res:res) : bsloww2(a,da,x,n); -+ goto ret; - break; - - } -@@ -558,17 +593,20 @@ double __cos(double x) - n = __branred(x,&a,&da); - switch (n) { - case 1: -- if (a*a < 0.01588) return bsloww(-a,-da,x,n); -- else return bsloww1(-a,-da,x,n); -+ if (a*a < 0.01588) retval = bsloww(-a,-da,x,n); -+ else retval = bsloww1(-a,-da,x,n); -+ goto ret; - break; - case 3: -- if (a*a < 0.01588) return bsloww(a,da,x,n); -- else return bsloww1(a,da,x,n); -+ if (a*a < 0.01588) retval = bsloww(a,da,x,n); -+ else retval = bsloww1(a,da,x,n); -+ goto ret; - break; - - case 0: - case 2: -- return bsloww2(a,da,x,n); -+ retval = bsloww2(a,da,x,n); -+ goto ret; - break; - } - -@@ -580,10 +618,13 @@ double __cos(double x) - else { - if (k == 0x7ff00000 && u.i[LOW_HALF] == 0) - __set_errno (EDOM); -- return x / x; /* |x| > 2^1024 */ -+ retval = x / x; /* |x| > 2^1024 */ -+ goto ret; - } -- return 0; - -+ ret: -+ libc_feupdateenv (&env); -+ return retval; - } - - /************************************************************************/ -diff -Nrup a/sysdeps/ieee754/dbl-64/s_tan.c b/sysdeps/ieee754/dbl-64/s_tan.c ---- a/sysdeps/ieee754/dbl-64/s_tan.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/ieee754/dbl-64/s_tan.c 2012-08-06 09:54:00.828929666 -0600 -@@ -40,6 +40,8 @@ - #include "mpa.h" - #include "MathLib.h" - #include "math.h" -+#include "math_private.h" -+#include - - static double tanMp(double); - void __mptan(double, mp_no *, int); -@@ -58,21 +60,27 @@ double tan(double x) { - mp_no mpy; - #endif - -+ fenv_t env; -+ double retval; -+ - int __branred(double, double *, double *); - int __mpranred(double, mp_no *, int); - -+ libc_feholdexcept_setround (&env, FE_TONEAREST); -+ - /* x=+-INF, x=NaN */ - num.d = x; ux = num.i[HIGH_HALF]; - if ((ux&0x7ff00000)==0x7ff00000) { - if ((ux&0x7fffffff)==0x7ff00000) - __set_errno (EDOM); -- return x-x; -+ retval = x-x; -+ goto ret; - } - - w=(x>63)&1; - j0 = ((i0>>52)&0x7ff)-0x3ff; -- if(j0<52) { -+ if(__builtin_expect(j0<52, 1)) { - if(j0<0) { - if((i0&UINT64_C(0x7fffffffffffffff))==0) return x; - uint64_t i = i0 & UINT64_C(0xfffffffffffff); - i0 &= UINT64_C(0xfffe000000000000); - i0 |= (((i|-i) >> 12) & UINT64_C(0x8000000000000)); - INSERT_WORDS64(x,i0); -- feholdexcept (&env); -+ libc_feholdexcept (&env); - double w = TWO52[sx]+x; - double t = w-TWO52[sx]; -- fesetenv (&env); -- EXTRACT_WORDS64(i0,t); -- INSERT_WORDS64(t,(i0&UINT64_C(0x7fffffffffffffff))|(sx<<63)); -- return t; -+ math_opt_barrier(t); -+ libc_fesetenv (&env); -+ return copysign(t, x); - } else { - uint64_t i = UINT64_C(0x000fffffffffffff)>>j0; - if((i0&i)==0) return x; /* x is integral */ -@@ -73,10 +64,11 @@ TWO52[2]={ - else return x; /* x is integral */ - } - INSERT_WORDS64(x,i0); -- feholdexcept (&env); -+ libc_feholdexcept (&env); - double w = TWO52[sx]+x; - double t = w-TWO52[sx]; -- fesetenv (&env); -+ math_opt_barrier (t); -+ libc_fesetenv (&env); - return t; - } - weak_alias (__nearbyint, nearbyint) -diff -Nrup a/sysdeps/ieee754/flt-32/e_exp2f.c b/sysdeps/ieee754/flt-32/e_exp2f.c ---- a/sysdeps/ieee754/flt-32/e_exp2f.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/ieee754/flt-32/e_exp2f.c 2012-08-06 09:54:00.829929661 -0600 -@@ -56,11 +56,7 @@ __ieee754_exp2f (float x) - union ieee754_float ex2_u, scale_u; - fenv_t oldenv; - -- feholdexcept (&oldenv); --#ifdef FE_TONEAREST -- /* If we don't have this, it's too bad. */ -- fesetround (FE_TONEAREST); --#endif -+ libc_feholdexcept_setroundf (&oldenv, FE_TONEAREST); - - /* 1. Argument reduction. - Choose integers ex, -128 <= t < 128, and some real -@@ -103,7 +99,7 @@ __ieee754_exp2f (float x) - x22 = (.24022656679f * x + .69314736128f) * ex2_u.f; - - /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */ -- fesetenv (&oldenv); -+ libc_fesetenv (&oldenv); - - result = x22 * x + ex2_u.f; - -diff -Nrup a/sysdeps/ieee754/flt-32/e_expf.c b/sysdeps/ieee754/flt-32/e_expf.c ---- a/sysdeps/ieee754/flt-32/e_expf.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/ieee754/flt-32/e_expf.c 2012-08-06 09:54:00.829929661 -0600 -@@ -47,9 +47,6 @@ - to perform an 'accurate table method' expf, because of the range reduction - overhead (compare exp2f). - */ --#ifndef _GNU_SOURCE --#define _GNU_SOURCE --#endif - #include - #include - #include -@@ -60,8 +57,8 @@ - extern const float __exp_deltatable[178]; - extern const double __exp_atable[355] /* __attribute__((mode(DF))) */; - --static const volatile float TWOM100 = 7.88860905e-31; --static const volatile float TWO127 = 1.7014118346e+38; -+static const float TWOM100 = 7.88860905e-31; -+static const float TWO127 = 1.7014118346e+38; - - float - __ieee754_expf (float x) -@@ -86,10 +83,7 @@ __ieee754_expf (float x) - union ieee754_double ex2_u; - fenv_t oldenv; - -- feholdexcept (&oldenv); --#ifdef FE_TONEAREST -- fesetround (FE_TONEAREST); --#endif -+ libc_feholdexcept_setroundf (&oldenv, FE_TONEAREST); - - /* Calculate n. */ - n = x * M_1_LN2 + THREEp22; -@@ -119,7 +113,7 @@ __ieee754_expf (float x) - x22 = (0.5000000496709180453 * dx + 1.0000001192102037084) * dx + delta; - - /* Return result. */ -- fesetenv (&oldenv); -+ libc_fesetenvf (&oldenv); - - result = x22 * ex2_u.d + ex2_u.d; - return (float) result; -diff -Nrup a/sysdeps/ieee754/flt-32/s_nearbyintf.c b/sysdeps/ieee754/flt-32/s_nearbyintf.c ---- a/sysdeps/ieee754/flt-32/s_nearbyintf.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/ieee754/flt-32/s_nearbyintf.c 2012-08-06 09:54:00.891929402 -0600 -@@ -19,22 +19,14 @@ - #include "math.h" - #include "math_private.h" - --#ifdef __STDC__ - static const float --#else --static float --#endif - TWO23[2]={ - 8.3886080000e+06, /* 0x4b000000 */ - -8.3886080000e+06, /* 0xcb000000 */ - }; - --#ifdef __STDC__ -- float __nearbyintf(float x) --#else -- float __nearbyintf(x) -- float x; --#endif -+float -+__nearbyintf(float x) - { - fenv_t env; - int32_t i0,j0,sx; -@@ -50,13 +42,13 @@ TWO23[2]={ - i0 &= 0xfff00000; - i0 |= ((i1|-i1)>>9)&0x400000; - SET_FLOAT_WORD(x,i0); -- feholdexcept (&env); -- w = TWO23[sx]+x; -- t = w-TWO23[sx]; -- fesetenv (&env); -+ libc_feholdexceptf (&env); -+ w = TWO23[sx]+x; -+ t = w-TWO23[sx]; -+ libc_fesetenvf (&env); - GET_FLOAT_WORD(i0,t); - SET_FLOAT_WORD(t,(i0&0x7fffffff)|(sx<<31)); -- return t; -+ return t; - } else { - i = (0x007fffff)>>j0; - if((i0&i)==0) return x; /* x is integral */ -@@ -64,14 +56,14 @@ TWO23[2]={ - if((i0&i)!=0) i0 = (i0&(~i))|((0x100000)>>j0); - } - } else { -- if(j0==0x80) return x+x; /* inf or NaN */ -+ if(__builtin_expect(j0==0x80, 0)) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } - SET_FLOAT_WORD(x,i0); -- feholdexcept (&env); -+ libc_feholdexceptf (&env); - w = TWO23[sx]+x; - t = w-TWO23[sx]; -- fesetenv (&env); -+ libc_fesetenvf (&env); - return t; - } - weak_alias (__nearbyintf, nearbyintf) -diff -Nrup a/sysdeps/powerpc/fpu/libm-test-ulps b/sysdeps/powerpc/fpu/libm-test-ulps ---- a/sysdeps/powerpc/fpu/libm-test-ulps 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/powerpc/fpu/libm-test-ulps 2012-08-06 10:03:24.424569052 -0600 -@@ -37,16 +37,9 @@ ildouble: 1 - ldouble: 1 - - # cacosh --Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i": --double: 1 --float: 7 --idouble: 1 --ifloat: 7 - Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i": --double: 1 --float: 3 --idouble: 1 --ifloat: 3 -+float: 1 -+ifloat: 1 - - # casin - Test "Real part of: casin (-2 - 3 i) == -0.57065278432109940071028387968566963 - 1.9833870299165354323470769028940395 i": -@@ -84,8 +77,6 @@ ifloat: 1 - - # catan - Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": --float: 3 --ifloat: 3 - ildouble: 1 - ldouble: 1 - Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": -@@ -93,23 +84,14 @@ double: 1 - float: 1 - idouble: 1 - ifloat: 1 --Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i": --float: 4 --ifloat: 4 - - # catanh - Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": - double: 4 - idouble: 4 --Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": --float: 4 --ifloat: 4 - Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i": - double: 1 - idouble: 1 --Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i": --float: 6 --ifloat: 6 - - # cbrt - Test "cbrt (-27.0) == -3.0": -@@ -167,8 +149,6 @@ ldouble: 1 - - # clog - Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": --float: 3 --ifloat: 3 - ildouble: 1 - ldouble: 1 - Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i": -@@ -197,9 +177,7 @@ ildouble: 1 - ldouble: 1 - Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i": - double: 1 --float: 5 - idouble: 1 --ifloat: 5 - ildouble: 1 - ldouble: 1 - Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i": -@@ -298,23 +276,165 @@ ldouble: 1 - # cos - Test "cos (M_PI_6l * 2.0) == 0.5": - double: 1 --float: 1 - idouble: 1 --ifloat: 1 - Test "cos (M_PI_6l * 4.0) == -0.5": - double: 2 - float: 1 - idouble: 2 - ifloat: 1 --Test "cos (pi/2) == 0": --double: 1 -+ -+# cos_downward -+Test "cos_downward (1) == 0.5403023058681397174009366074429766037323": -+float: 1 -+ifloat: 1 -+ildouble: 4 -+ldouble: 4 -+Test "cos_downward (10) == -0.8390715290764524522588639478240648345199": -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (2) == -0.4161468365471423869975682295007621897660": -+float: 1 -+ifloat: 1 -+Test "cos_downward (3) == -0.9899924966004454572715727947312613023937": -+float: 1 -+ifloat: 1 -+Test "cos_downward (4) == -0.6536436208636119146391681830977503814241": -+float: 1 -+ifloat: 1 -+Test "cos_downward (5) == 0.2836621854632262644666391715135573083344": -+float: 1 -+ifloat: 1 -+Test "cos_downward (6) == 0.9601702866503660205456522979229244054519": -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+Test "cos_downward (8) == -0.1455000338086135258688413818311946826093": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "cos_downward (9) == -0.9111302618846769883682947111811653112463": -+ildouble: 1 -+ldouble: 1 -+ -+# cos_tonearest -+Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+ -+# cos_towardzero -+Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323": -+ildouble: 2 -+ldouble: 2 -+Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199": -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660": -+float: 1 -+ifloat: 1 -+Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937": -+float: 1 -+ifloat: 1 -+Test "cos_towardzero (4) == -0.6536436208636119146391681830977503814241": -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344": -+float: 1 -+ifloat: 1 -+Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093": - float: 1 --idouble: 1 - ifloat: 1 --Test "cos (16.0) == -0.9576594803233846418996372326511034717803" - ildouble: 2 - ldouble: 2 - -+# cos_upward -+Test "cos_upward (1) == 0.5403023058681397174009366074429766037323": -+ildouble: 2 -+ldouble: 2 -+Test "cos_upward (10) == -0.8390715290764524522588639478240648345199": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_upward (4) == -0.6536436208636119146391681830977503814241": -+ildouble: 1 -+ldouble: 1 -+Test "cos_upward (5) == 0.2836621854632262644666391715135573083344": -+ildouble: 1 -+ldouble: 1 -+Test "cos_upward (6) == 0.9601702866503660205456522979229244054519": -+float: 1 -+ifloat: 1 -+Test "cos_upward (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_upward (9) == -0.9111302618846769883682947111811653112463": -+float: 2 -+ifloat: 2 -+ -+# cosh_downward -+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997": -+float: 1 -+ifloat: 1 -+ildouble: 5269156250720 -+ldouble: 5269156250720 -+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344": -+float: 1 -+ifloat: 1 -+ildouble: 484603564240 -+ldouble: 484603564240 -+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919": -+float: 1 -+ifloat: 1 -+ildouble: 89137844202 -+ldouble: 89137844202 -+ -+# cosh_tonearest -+Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997": -+ildouble: 5269156250719 -+ldouble: 5269156250719 -+Test "cosh_tonearest (23) == 4872401723.124451300068625740569997090344": -+ildouble: 484603564240 -+ldouble: 484603564240 -+Test "cosh_tonearest (24) == 13244561064.92173614708845674912733665919": -+ildouble: 89137844202 -+ldouble: 89137844202 -+ -+# cosh_towardzero -+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997": -+float: 1 -+ifloat: 1 -+ildouble: 5269156250720 -+ldouble: 5269156250720 -+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344": -+float: 1 -+ifloat: 1 -+ildouble: 484603564240 -+ldouble: 484603564240 -+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919": -+float: 1 -+ifloat: 1 -+ildouble: 89137844202 -+ldouble: 89137844202 -+ -+# cosh_upward -+Test "cosh_upward (22) == 1792456423.065795780980053377632656584997": -+ildouble: 5269156250719 -+ldouble: 5269156250719 -+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344": -+ildouble: 484603564240 -+ldouble: 484603564240 -+Test "cosh_upward (24) == 13244561064.92173614708845674912733665919": -+ildouble: 89137844200 -+ldouble: 89137844200 -+ - # cpow - Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i": - float: 1 -@@ -386,12 +506,6 @@ float: 1 - ifloat: 1 - - # ctan --Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": --double: 1 --idouble: 1 --Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": --ildouble: 1 --ldouble: 1 - Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i": - double: 1 - idouble: 1 -@@ -463,6 +577,33 @@ Test "exp2 (10) == 1024": - ildouble: 2 - ldouble: 2 - -+# exp_downward -+Test "exp_downward (2) == e^2": -+float: 1 -+ifloat: 1 -+Test "exp_downward (3) == e^3": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# exp_towardzero -+Test "exp_towardzero (2) == e^2": -+float: 1 -+ifloat: 1 -+Test "exp_towardzero (3) == e^3": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# exp_upward -+Test "exp_upward (1) == e": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ - # expm1 - Test "expm1 (0.75) == 1.11700001661267466854536981983709561": - double: 1 -@@ -505,40 +646,27 @@ ifloat: 1 - # j0 - Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1": - double: 1 --float: 2 -+float: 1 - idouble: 1 --ifloat: 2 --ildouble: 1 --ldouble: 1 -+ifloat: 1 - Test "j0 (10.0) == -0.245935764451348335197760862485328754": --double: 3 -+double: 2 - float: 1 --idouble: 3 -+idouble: 2 - ifloat: 1 --ildouble: 1 --ldouble: 1 --Test "j0 (2.0) == 0.223890779141235668051827454649948626": --float: 2 --ifloat: 2 - Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1": - double: 1 --float: 2 -+float: 1 - idouble: 1 --ifloat: 2 --ildouble: 1 --ldouble: 1 -+ifloat: 1 - Test "j0 (8.0) == 0.171650807137553906090869407851972001": - float: 1 - ifloat: 1 --ildouble: 1 --ldouble: 1 - - # j1 - Test "j1 (10.0) == 0.0434727461688614366697487680258592883": - float: 2 - ifloat: 2 --ildouble: 1 --ldouble: 1 - Test "j1 (2.0) == 0.576724807756873387202448242269137087": - double: 1 - idouble: 1 -@@ -551,38 +679,25 @@ ldouble: 1 - # jn - Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1": - double: 1 --float: 2 -+float: 1 - idouble: 1 --ifloat: 2 --ildouble: 1 --ldouble: 1 -+ifloat: 1 - Test "jn (0, 10.0) == -0.245935764451348335197760862485328754": --double: 3 -+double: 2 - float: 1 --idouble: 3 -+idouble: 2 - ifloat: 1 --ildouble: 1 --ldouble: 1 --Test "jn (0, 2.0) == 0.223890779141235668051827454649948626": --float: 2 --ifloat: 2 - Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1": - double: 1 --float: 2 -+float: 1 - idouble: 1 --ifloat: 2 --ildouble: 1 --ldouble: 1 -+ifloat: 1 - Test "jn (0, 8.0) == 0.171650807137553906090869407851972001": - float: 1 - ifloat: 1 --ildouble: 1 --ldouble: 1 - Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883": - float: 2 - ifloat: 2 --ildouble: 1 --ldouble: 1 - Test "jn (1, 2.0) == 0.576724807756873387202448242269137087": - double: 1 - idouble: 1 -@@ -615,11 +730,8 @@ ifloat: 1 - ildouble: 4 - ldouble: 4 - Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6": --float: 4 --ifloat: 4 --Test "jn (3, -1.0) == -0.0195633539826684059189053216217515083": --ildouble: 1 --ldouble: 1 -+float: 3 -+ifloat: 3 - Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4": - double: 1 - float: 1 -@@ -628,21 +740,18 @@ ifloat: 1 - Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2": - double: 1 - idouble: 1 --Test "jn (3, 1.0) == 0.0195633539826684059189053216217515083": --ildouble: 1 --ldouble: 1 - Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563": - double: 3 --float: 2 -+float: 1 - idouble: 3 --ifloat: 2 -+ifloat: 1 - ildouble: 2 - ldouble: 2 - Test "jn (3, 2.0) == 0.128943249474402051098793332969239835": - double: 1 --float: 2 -+float: 1 - idouble: 1 --ifloat: 2 -+ifloat: 1 - ildouble: 2 - ldouble: 2 - -@@ -675,115 +784,350 @@ Test "log1p (-0.25) == -0.28768207245178 - float: 1 - ifloat: 1 - --# log2 --Test "log2 (e) == M_LOG2El": -+# pow_downward -+Test "pow_downward (1.0625, 1.125) == 1.070582293028761362162622578677070098674": - ildouble: 1 - ldouble: 1 -- --# sin --Test "sin (16.0) == -0.2879033166650652947844562482186175296207" --ildouble: 2 --ldouble: 2 -- --# sincos --Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res": --double: 1 --float: 1 --idouble: 1 --ifloat: 1 --Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res": --double: 1 -+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948": - float: 1 --idouble: 1 - ifloat: 1 --Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res": --double: 1 -+ -+# pow_towardzero -+Test "pow_towardzero (1.0625, 1.125) == 1.070582293028761362162622578677070098674": -+ildouble: 1 -+ldouble: 1 -+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948": - float: 1 --idouble: 1 - ifloat: 1 --Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res": -+ -+# pow_upward -+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674": - float: 1 - ifloat: 1 -- --# sinh --Test "sinh (0.75) == 0.822316731935829980703661634446913849": -+Test "pow_upward (1.5, 1.03125) == 1.519127098714743184071644334163037684948": - ildouble: 1 - ldouble: 1 - --# tan --Test "tan (pi/4) == 1": --double: 1 --idouble: 1 -+# sin_downward -+Test "sin_downward (1) == 0.8414709848078965066525023216302989996226": -+ildouble: 4 -+ldouble: 4 -+Test "sin_downward (10) == -0.5440211108893698134047476618513772816836": -+float: 1 -+ifloat: 1 -+Test "sin_downward (2) == 0.9092974268256816953960198659117448427023": - ildouble: 1 - ldouble: 1 -- --# tanh --Test "tanh (-0.75) == -0.635148952387287319214434357312496495": -+Test "sin_downward (3) == 0.1411200080598672221007448028081102798469": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "sin_downward (4) == -0.7568024953079282513726390945118290941359": - ildouble: 1 - ldouble: 1 --Test "tanh (0.75) == 0.635148952387287319214434357312496495": -+Test "sin_downward (5) == -0.9589242746631384688931544061559939733525": -+float: 1 -+ifloat: 1 -+Test "sin_downward (6) == -0.2794154981989258728115554466118947596280": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "sin_downward (8) == 0.9893582466233817778081235982452886721164": - ildouble: 1 - ldouble: 1 - --# tgamma --Test "tgamma (-0.5) == -2 sqrt (pi)": --double: 1 -+# sin_tonearest -+Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226": - float: 1 --idouble: 1 - ifloat: 1 --Test "tgamma (0.5) == sqrt (pi)": -+ -+# sin_towardzero -+Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226": - float: 1 - ifloat: 1 --Test "tgamma (0.7) == 1.29805533264755778568117117915281162": --double: 1 -+ildouble: 2 -+ldouble: 2 -+Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836": - float: 1 --idouble: 1 - ifloat: 1 -- --# y0 --Test "y0 (0.125) == -1.38968062514384052915582277745018693": -+Test "sin_towardzero (2) == 0.9092974268256816953960198659117448427023": - ildouble: 1 - ldouble: 1 --Test "y0 (0.75) == -0.137172769385772397522814379396581855": -+Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469": - ildouble: 1 - ldouble: 1 --Test "y0 (1.0) == 0.0882569642156769579829267660235151628": --double: 2 -+Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359": -+float: 1 -+ifloat: 1 -+Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525": - float: 1 --idouble: 2 - ifloat: 1 -+Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164": - ildouble: 1 - ldouble: 1 --Test "y0 (1.5) == 0.382448923797758843955068554978089862": --double: 2 -+Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439": - float: 1 --idouble: 2 - ifloat: 1 --Test "y0 (10.0) == 0.0556711672835993914244598774101900481": -+ildouble: 1 -+ldouble: 1 -+ -+# sin_upward -+Test "sin_upward (1) == 0.8414709848078965066525023216302989996226": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "sin_upward (2) == 0.9092974268256816953960198659117448427023": -+float: 2 -+ifloat: 2 -+Test "sin_upward (3) == 0.1411200080598672221007448028081102798469": -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (4) == -0.7568024953079282513726390945118290941359": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (6) == -0.2794154981989258728115554466118947596280": -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (9) == 0.4121184852417565697562725663524351793439": -+float: 1 -+ifloat: 1 -+ -+# sincos -+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res": -+double: 1 -+idouble: 1 -+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res": - double: 1 - float: 1 - idouble: 1 - ifloat: 1 -+Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res": -+float: 1 -+ifloat: 1 -+ -+# sinh -+Test "sinh (0.75) == 0.822316731935829980703661634446913849": - ildouble: 1 - ldouble: 1 --Test "y0 (2.0) == 0.510375672649745119596606592727157873": -+ -+# sinh_downward -+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225": -+float: 1 -+ifloat: 1 -+ildouble: 5269156250718 -+ldouble: 5269156250718 -+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305": -+float: 1 -+ifloat: 1 -+ildouble: 484603564240 -+ldouble: 484603564240 -+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168": -+float: 1 -+ifloat: 1 -+ildouble: 89137844201 -+ldouble: 89137844201 -+ -+# sinh_tonearest -+Test "sinh_tonearest (22) == 1792456423.065795780701106568345764104225": -+ildouble: 5269156250719 -+ldouble: 5269156250719 -+Test "sinh_tonearest (23) == 4872401723.124451299966006944252978187305": -+ildouble: 484603564241 -+ldouble: 484603564241 -+Test "sinh_tonearest (24) == 13244561064.92173614705070540368454568168": -+ildouble: 89137844201 -+ldouble: 89137844201 -+ -+# sinh_towardzero -+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225": -+float: 1 -+ifloat: 1 -+ildouble: 5269156250718 -+ldouble: 5269156250718 -+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305": -+float: 1 -+ifloat: 1 -+ildouble: 484603564240 -+ldouble: 484603564240 -+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168": -+float: 1 -+ifloat: 1 -+ildouble: 89137844201 -+ldouble: 89137844201 -+ -+# sinh_upward -+Test "sinh_upward (22) == 1792456423.065795780701106568345764104225": -+ildouble: 5269156250719 -+ldouble: 5269156250719 -+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305": -+ildouble: 484603564241 -+ldouble: 484603564241 -+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168": -+ildouble: 89137844202 -+ldouble: 89137844202 -+ -+# tan -+Test "tan (pi/4) == 1": -+ildouble: 1 -+ldouble: 1 -+ -+# tan_downward -+Test "tan_downward (1) == 1.5574077246549022305069748074583601730873": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "tan_downward (10) == 0.6483608274590866712591249330098086768169": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "tan_downward (2) == -2.1850398632615189916433061023136825434320": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_downward (6) == -0.2910061913847491570536995888681755428312": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_downward (8) == -6.7997114552203786999252627596086333648814": -+float: 1 -+ifloat: 1 -+Test "tan_downward (9) == -0.4523156594418098405903708757987855343087": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# tan_tonearest -+Test "tan_tonearest (10) == 0.6483608274590866712591249330098086768169": -+ildouble: 1 -+ldouble: 1 -+Test "tan_tonearest (4) == 1.1578212823495775831373424182673239231198": -+ildouble: 1 -+ldouble: 1 -+Test "tan_tonearest (7) == 0.8714479827243187364564508896003135663222": -+ildouble: 1 -+ldouble: 1 -+ -+# tan_towardzero -+Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261": -+float: 1 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096": -+float: 1 -+ifloat: 1 -+Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312": -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (7) == 0.8714479827243187364564508896003135663222": -+ildouble: 2 -+ldouble: 2 -+Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# tan_upward -+Test "tan_upward (10) == 0.6483608274590866712591249330098086768169": -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (3) == -0.1425465430742778052956354105339134932261": -+float: 1 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+Test "tan_upward (5) == -3.3805150062465856369827058794473439087096": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (6) == -0.2910061913847491570536995888681755428312": -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (7) == 0.8714479827243187364564508896003135663222": -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (9) == -0.4523156594418098405903708757987855343087": -+ildouble: 1 -+ldouble: 1 -+ -+# tanh -+Test "tanh (-0.75) == -0.635148952387287319214434357312496495": -+ildouble: 1 -+ldouble: 1 -+Test "tanh (0.75) == 0.635148952387287319214434357312496495": -+ildouble: 1 -+ldouble: 1 -+ -+# tgamma -+Test "tgamma (-0.5) == -2 sqrt (pi)": - double: 1 -+float: 1 - idouble: 1 --Test "y0 (8.0) == 0.223521489387566220527323400498620359": -+ifloat: 1 -+Test "tgamma (0.5) == sqrt (pi)": -+float: 1 -+ifloat: 1 -+Test "tgamma (0.7) == 1.29805533264755778568117117915281162": - double: 1 - float: 1 - idouble: 1 - ifloat: 1 -+ -+# y0 -+Test "y0 (0.125) == -1.38968062514384052915582277745018693": - ildouble: 1 - ldouble: 1 -- --# y1 --Test "y1 (0.125) == -5.19993611253477499595928744876579921": -+Test "y0 (1.0) == 0.0882569642156769579829267660235151628": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "y0 (1.5) == 0.382448923797758843955068554978089862": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+Test "y0 (10.0) == 0.0556711672835993914244598774101900481": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "y0 (2.0) == 0.510375672649745119596606592727157873": - double: 1 - idouble: 1 --Test "y1 (1.5) == -0.412308626973911295952829820633445323": -+Test "y0 (8.0) == 0.223521489387566220527323400498620359": -+double: 1 - float: 1 -+idouble: 1 - ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# y1 - Test "y1 (10.0) == 0.249015424206953883923283474663222803": - double: 3 - float: 1 -@@ -794,30 +1138,27 @@ ldouble: 2 - Test "y1 (2.0) == -0.107032431540937546888370772277476637": - double: 1 - float: 1 --idouble: 2 --ifloat: 2 -+idouble: 1 -+ifloat: 1 - Test "y1 (8.0) == -0.158060461731247494255555266187483550": - double: 1 - float: 2 - idouble: 1 - ifloat: 2 --ildouble: 2 --ldouble: 2 -+ildouble: 1 -+ldouble: 1 - - # yn - Test "yn (0, 0.125) == -1.38968062514384052915582277745018693": - ildouble: 1 - ldouble: 1 --Test "yn (0, 0.75) == -0.137172769385772397522814379396581855": --ildouble: 1 --ldouble: 1 - Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628": - double: 2 - float: 1 - idouble: 2 - ifloat: 1 --ildouble: 2 --ldouble: 2 -+ildouble: 1 -+ldouble: 1 - Test "yn (0, 1.5) == 0.382448923797758843955068554978089862": - double: 2 - float: 1 -@@ -828,8 +1169,6 @@ double: 1 - float: 1 - idouble: 1 - ifloat: 1 --ildouble: 2 --ldouble: 2 - Test "yn (0, 2.0) == 0.510375672649745119596606592727157873": - double: 1 - idouble: 1 -@@ -838,14 +1177,8 @@ double: 1 - float: 1 - idouble: 1 - ifloat: 1 --ildouble: 2 --ldouble: 2 --Test "yn (1, 0.125) == -5.19993611253477499595928744876579921": --double: 1 --idouble: 1 --Test "yn (1, 1.5) == -0.412308626973911295952829820633445323": --float: 2 --ifloat: 2 -+ildouble: 1 -+ldouble: 1 - Test "yn (1, 10.0) == 0.249015424206953883923283474663222803": - double: 3 - float: 1 -@@ -863,14 +1196,8 @@ double: 1 - float: 2 - idouble: 1 - ifloat: 2 --ildouble: 2 --ldouble: 2 --Test "yn (3, 0.125) == -2612.69757350066712600220955744091741": --double: 1 --idouble: 1 --Test "yn (10, 0.125) == -127057845771019398.252538486899753195": --double: 1 --idouble: 1 -+ildouble: 1 -+ldouble: 1 - Test "yn (10, 0.75) == -2133501638.90573424452445412893839236": - double: 1 - float: 2 -@@ -881,21 +1208,14 @@ float: 2 - ifloat: 2 - Test "yn (10, 10.0) == -0.359814152183402722051986577343560609": - double: 2 --float: 2 - idouble: 2 --ifloat: 2 --ildouble: 2 --ldouble: 2 - Test "yn (10, 2.0) == -129184.542208039282635913145923304214": - double: 3 - float: 1 - idouble: 3 - ifloat: 1 --ildouble: 2 --ldouble: 2 --Test "yn (3, 0.125) == -2612.69757350066712600220955744091741": --double: 1 --idouble: 1 -+ildouble: 1 -+ldouble: 1 - Test "yn (3, 0.75) == -12.9877176234475433186319774484809207": - float: 1 - ifloat: 1 -@@ -904,8 +1224,8 @@ double: 1 - float: 1 - idouble: 1 - ifloat: 1 --ildouble: 2 --ldouble: 2 -+ildouble: 1 -+ldouble: 1 - Test "yn (3, 2.0) == -1.12778377684042778608158395773179238": - double: 1 - idouble: 1 -@@ -950,18 +1270,12 @@ ildouble: 1 - ldouble: 1 - - Function: Real part of "cacosh": --double: 1 --float: 7 --idouble: 1 --ifloat: 7 - ildouble: 1 - ldouble: 1 - - Function: Imaginary part of "cacosh": --double: 1 --float: 3 --idouble: 1 --ifloat: 3 -+float: 1 -+ifloat: 1 - - Function: Real part of "casin": - double: 1 -@@ -992,8 +1306,6 @@ ildouble: 1 - ldouble: 1 - - Function: Real part of "catan": --float: 4 --ifloat: 4 - ildouble: 1 - ldouble: 1 - -@@ -1009,10 +1321,6 @@ Function: Real part of "catanh": - double: 4 - idouble: 4 - --Function: Imaginary part of "catanh": --float: 6 --ifloat: 6 -- - Function: "cbrt": - double: 1 - idouble: 1 -@@ -1066,8 +1374,6 @@ ildouble: 2 - ldouble: 2 - - Function: Imaginary part of "clog": --float: 3 --ifloat: 3 - ildouble: 1 - ldouble: 1 - -@@ -1079,9 +1385,9 @@ ldouble: 3 - - Function: Imaginary part of "clog10": - double: 1 --float: 5 -+float: 1 - idouble: 1 --ifloat: 5 -+ifloat: 1 - ildouble: 1 - ldouble: 1 - -@@ -1093,10 +1399,54 @@ ifloat: 1 - ildouble: 1 - ldouble: 1 - -+Function: "cos_downward": -+float: 1 -+ifloat: 1 -+ildouble: 4 -+ldouble: 4 -+ -+Function: "cos_tonearest": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cos_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "cos_upward": -+float: 2 -+ifloat: 2 -+ildouble: 2 -+ldouble: 2 -+ - Function: "cosh": - ildouble: 1 - ldouble: 1 - -+Function: "cosh_downward": -+float: 1 -+ifloat: 1 -+ildouble: 5269156250720 -+ldouble: 5269156250720 -+ -+Function: "cosh_tonearest": -+ildouble: 5269156250719 -+ldouble: 5269156250719 -+ -+Function: "cosh_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 5269156250720 -+ldouble: 5269156250720 -+ -+Function: "cosh_upward": -+ildouble: 5269156250719 -+ldouble: 5269156250719 -+ - Function: Real part of "cpow": - double: 2 - float: 5 -@@ -1113,10 +1463,6 @@ ifloat: 2 - ildouble: 2 - ldouble: 2 - --Function: Imaginary part of "cproj": --ildouble: 1 --ldouble: 1 -- - Function: Real part of "csin": - ildouble: 1 - ldouble: 1 -@@ -1146,8 +1492,6 @@ ildouble: 1 - ldouble: 1 - - Function: Real part of "ctan": --double: 1 --idouble: 1 - ildouble: 1 - ldouble: 1 - -@@ -1201,6 +1545,28 @@ Function: "exp2": - ildouble: 2 - ldouble: 2 - -+Function: "exp_downward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "exp_tonearest": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "exp_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "exp_upward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ - Function: "expm1": - double: 1 - float: 1 -@@ -1218,10 +1584,10 @@ ildouble: 1 - ldouble: 1 - - Function: "j0": --double: 3 --float: 2 --idouble: 3 --ifloat: 2 -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 - ildouble: 1 - ldouble: 1 - -@@ -1235,9 +1601,9 @@ ldouble: 1 - - Function: "jn": - double: 3 --float: 4 -+float: 3 - idouble: 3 --ifloat: 4 -+ifloat: 3 - ildouble: 4 - ldouble: 4 - -@@ -1264,8 +1630,6 @@ ldouble: 1 - Function: "log1p": - float: 1 - ifloat: 1 --ildouble: 1 --ldouble: 1 - - Function: "log2": - ildouble: 1 -@@ -1275,10 +1639,52 @@ Function: "pow": - ildouble: 1 - ldouble: 1 - -+Function: "pow_downward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "pow_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "pow_upward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ - Function: "sin": - ildouble: 1 - ldouble: 1 - -+Function: "sin_downward": -+float: 1 -+ifloat: 1 -+ildouble: 4 -+ldouble: 4 -+ -+Function: "sin_tonearest": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "sin_upward": -+float: 2 -+ifloat: 2 -+ildouble: 2 -+ldouble: 2 -+ - Function: "sincos": - double: 1 - float: 1 -@@ -1291,12 +1697,54 @@ Function: "sinh": - ildouble: 1 - ldouble: 1 - -+Function: "sinh_downward": -+float: 1 -+ifloat: 1 -+ildouble: 5269156250718 -+ldouble: 5269156250718 -+ -+Function: "sinh_tonearest": -+ildouble: 5269156250719 -+ldouble: 5269156250719 -+ -+Function: "sinh_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 5269156250718 -+ldouble: 5269156250718 -+ -+Function: "sinh_upward": -+ildouble: 5269156250719 -+ldouble: 5269156250719 -+ - Function: "tan": - double: 1 - idouble: 1 - ildouble: 1 - ldouble: 1 - -+Function: "tan_downward": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "tan_tonearest": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "tan_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+ -+Function: "tan_upward": -+float: 1 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+ - Function: "tanh": - ildouble: 1 - ldouble: 1 -diff -Nrup a/sysdeps/s390/fpu/libm-test-ulps b/sysdeps/s390/fpu/libm-test-ulps ---- a/sysdeps/s390/fpu/libm-test-ulps 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/s390/fpu/libm-test-ulps 2012-08-06 09:54:38.324772546 -0600 -@@ -31,16 +31,9 @@ ildouble: 1 - ldouble: 1 - - # cacosh --Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i": --double: 1 --float: 7 --idouble: 1 --ifloat: 7 - Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i": --double: 1 --float: 3 --idouble: 1 --ifloat: 3 -+float: 1 -+ifloat: 1 - ildouble: 1 - ldouble: 1 - -@@ -83,17 +76,11 @@ ildouble: 1 - ldouble: 1 - - # catan --Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": --float: 3 --ifloat: 3 - Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": - double: 1 - float: 1 - idouble: 1 - ifloat: 1 --Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i": --float: 4 --ifloat: 4 - Test "Imaginary part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i": - ildouble: 1 - ldouble: 1 -@@ -102,17 +89,12 @@ ldouble: 1 - Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": - double: 4 - idouble: 4 --Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": --float: 4 --ifloat: 4 - Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i": - double: 1 - idouble: 1 - ildouble: 1 - ldouble: 1 - Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i": --float: 6 --ifloat: 6 - ildouble: 1 - ldouble: 1 - -@@ -185,9 +167,6 @@ ildouble: 1 - ldouble: 1 - - # clog --Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": --float: 3 --ifloat: 3 - Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i": - float: 1 - ifloat: 1 -@@ -210,9 +189,7 @@ ildouble: 1 - ldouble: 1 - Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i": - double: 1 --float: 5 - idouble: 1 --ifloat: 5 - ildouble: 1 - ldouble: 1 - Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i": -@@ -288,9 +265,7 @@ ifloat: 1 - # cos - Test "cos (M_PI_6l * 2.0) == 0.5": - double: 1 --float: 1 - idouble: 1 --ifloat: 1 - ildouble: 1 - ldouble: 1 - Test "cos (M_PI_6l * 4.0) == -0.5": -@@ -300,11 +275,159 @@ idouble: 2 - ifloat: 1 - ildouble: 1 - ldouble: 1 --Test "cos (pi/2) == 0": --double: 1 -+ -+# cos_downward -+Test "cos_downward (1) == 0.5403023058681397174009366074429766037323": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (10) == -0.8390715290764524522588639478240648345199": -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (2) == -0.4161468365471423869975682295007621897660": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (3) == -0.9899924966004454572715727947312613023937": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (4) == -0.6536436208636119146391681830977503814241": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (5) == 0.2836621854632262644666391715135573083344": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (6) == 0.9601702866503660205456522979229244054519": -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (8) == -0.1455000338086135258688413818311946826093": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+# cos_tonearest -+Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+ -+# cos_towardzero -+Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323": -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199": -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (4) == -0.6536436208636119146391681830977503814241": -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (6) == 0.9601702866503660205456522979229244054519": -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+# cos_upward -+Test "cos_upward (10) == -0.8390715290764524522588639478240648345199": -+float: 1 -+ifloat: 1 -+Test "cos_upward (6) == 0.9601702866503660205456522979229244054519": -+float: 1 -+ifloat: 1 -+Test "cos_upward (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+Test "cos_upward (9) == -0.9111302618846769883682947111811653112463": -+float: 2 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+# cosh_downward -+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# cosh_tonearest -+Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997": -+ildouble: 1 -+ldouble: 1 -+ -+# cosh_towardzero -+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919": - float: 1 --idouble: 1 - ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# cosh_upward -+Test "cosh_upward (22) == 1792456423.065795780980053377632656584997": -+ildouble: 1 -+ldouble: 1 -+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344": -+ildouble: 1 -+ldouble: 1 -+Test "cosh_upward (24) == 13244561064.92173614708845674912733665919": -+ildouble: 1 -+ldouble: 1 - - # cpow - Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i": -@@ -393,8 +516,6 @@ ldouble: 1 - - # ctan - Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": --double: 1 --idouble: 1 - ildouble: 1 - ldouble: 1 - Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": -@@ -467,6 +588,37 @@ Test "exp2 (10) == 1024": - ildouble: 2 - ldouble: 2 - -+# exp_downward -+Test "exp_downward (2) == e^2": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "exp_downward (3) == e^3": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# exp_towardzero -+Test "exp_towardzero (2) == e^2": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "exp_towardzero (3) == e^3": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# exp_upward -+Test "exp_upward (1) == e": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ - # expm1 - Test "expm1 (0.75) == 1.11700001661267466854536981983709561": - double: 1 -@@ -513,29 +665,27 @@ ifloat: 1 - # j0 - Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1": - double: 1 --float: 2 -+float: 1 - idouble: 1 --ifloat: 2 -+ifloat: 1 - Test "j0 (0.75) == 0.864242275166648623555731103820923211": - float: 1 - ifloat: 1 - Test "j0 (10.0) == -0.245935764451348335197760862485328754": --double: 3 -+double: 2 - float: 1 --idouble: 3 -+idouble: 2 - ifloat: 1 - ildouble: 2 - ldouble: 2 - Test "j0 (2.0) == 0.223890779141235668051827454649948626": --float: 2 --ifloat: 2 - ildouble: 2 - ldouble: 2 - Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1": - double: 1 --float: 2 -+float: 1 - idouble: 1 --ifloat: 2 -+ifloat: 1 - Test "j0 (8.0) == 0.171650807137553906090869407851972001": - float: 1 - ifloat: 1 -@@ -569,29 +719,27 @@ ldouble: 4 - # jn - Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1": - double: 1 --float: 2 -+float: 1 - idouble: 1 --ifloat: 2 -+ifloat: 1 - Test "jn (0, 0.75) == 0.864242275166648623555731103820923211": - float: 1 - ifloat: 1 - Test "jn (0, 10.0) == -0.245935764451348335197760862485328754": --double: 3 -+double: 2 - float: 1 --idouble: 3 -+idouble: 2 - ifloat: 1 - ildouble: 2 - ldouble: 2 - Test "jn (0, 2.0) == 0.223890779141235668051827454649948626": --float: 2 --ifloat: 2 - ildouble: 2 - ldouble: 2 - Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1": - double: 1 --float: 2 -+float: 1 - idouble: 1 --ifloat: 2 -+ifloat: 1 - Test "jn (0, 8.0) == 0.171650807137553906090869407851972001": - float: 1 - ifloat: 1 -@@ -640,15 +788,13 @@ Test "jn (10, 1.0) == 0.2630615123687453 - ildouble: 1 - ldouble: 1 - Test "jn (10, 10.0) == 0.207486106633358857697278723518753428": --double: 4 --float: 3 --idouble: 4 --ifloat: 3 -+float: 1 -+ifloat: 1 - ildouble: 2 - ldouble: 2 - Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6": --float: 4 --ifloat: 4 -+float: 3 -+ifloat: 3 - Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4": - double: 1 - float: 1 -@@ -661,16 +807,16 @@ idouble: 1 - ifloat: 1 - Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563": - double: 3 --float: 2 -+float: 1 - idouble: 3 --ifloat: 2 -+ifloat: 1 - ildouble: 2 - ldouble: 2 - Test "jn (3, 2.0) == 0.128943249474402051098793332969239835": - double: 1 --float: 2 -+float: 1 - idouble: 1 --ifloat: 2 -+ifloat: 1 - - # lgamma - Test "lgamma (-0.5) == log(2*sqrt(pi))": -@@ -713,71 +859,315 @@ Test "log2 (0.75) == -.41503749927884381 - ildouble: 1 - ldouble: 1 - --# sincos --Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res": --double: 1 -+# pow_downward -+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948": - float: 1 --idouble: 1 - ifloat: 1 --ildouble: 1 --ldouble: 1 --Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res": --double: 1 -+ -+# pow_towardzero -+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948": -+float: 1 -+ifloat: 1 -+ -+# pow_upward -+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674": - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 --Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res": --double: 1 -+ -+# sin_downward -+Test "sin_downward (1) == 0.8414709848078965066525023216302989996226": -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (10) == -0.5440211108893698134047476618513772816836": - float: 1 --idouble: 1 - ifloat: 1 --Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res": -+Test "sin_downward (2) == 0.9092974268256816953960198659117448427023": -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (3) == 0.1411200080598672221007448028081102798469": - float: 1 - ifloat: 1 -- --# sqrt --Test "sqrt (2) == M_SQRT2l": - ildouble: 1 - ldouble: 1 -- --# tan --Test "tan (pi/4) == 1": --double: 1 --idouble: 1 -- --# tanh --Test "tanh (-0.75) == -0.635148952387287319214434357312496495": -+Test "sin_downward (4) == -0.7568024953079282513726390945118290941359": - ildouble: 1 - ldouble: 1 --Test "tanh (-1.0) == -0.7615941559557648881194582826047935904": -+Test "sin_downward (5) == -0.9589242746631384688931544061559939733525": -+float: 1 -+ifloat: 1 - ildouble: 1 - ldouble: 1 --Test "tanh (0.75) == 0.635148952387287319214434357312496495": -+Test "sin_downward (6) == -0.2794154981989258728115554466118947596280": -+float: 1 -+ifloat: 1 - ildouble: 1 - ldouble: 1 --Test "tanh (1.0) == 0.7615941559557648881194582826047935904": -+Test "sin_downward (8) == 0.9893582466233817778081235982452886721164": - ildouble: 1 - ldouble: 1 - --# tgamma --Test "tgamma (-0.5) == -2 sqrt (pi)": --double: 1 -+# sin_tonearest -+Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226": - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 --Test "tgamma (0.5) == sqrt (pi)": -+Test "sin_tonearest (3) == 0.1411200080598672221007448028081102798469": -+ildouble: 1 -+ldouble: 1 -+Test "sin_tonearest (6) == -0.2794154981989258728115554466118947596280": -+ildouble: 1 -+ldouble: 1 -+Test "sin_tonearest (9) == 0.4121184852417565697562725663524351793439": -+ildouble: 1 -+ldouble: 1 -+ -+# sin_towardzero -+Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226": - float: 1 - ifloat: 1 --Test "tgamma (0.7) == 1.29805533264755778568117117915281162": --double: 1 -+Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836": - float: 1 --idouble: 1 - ifloat: 1 --Test "tgamma (4) == 6": -+Test "sin_towardzero (2) == 0.9092974268256816953960198659117448427023": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359": -+float: 1 -+ifloat: 1 -+Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (6) == -0.2794154981989258728115554466118947596280": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+# sin_upward -+Test "sin_upward (1) == 0.8414709848078965066525023216302989996226": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (10) == -0.5440211108893698134047476618513772816836": -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (2) == 0.9092974268256816953960198659117448427023": -+float: 2 -+ifloat: 2 -+Test "sin_upward (3) == 0.1411200080598672221007448028081102798469": -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (4) == -0.7568024953079282513726390945118290941359": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (7) == 0.6569865987187890903969990915936351779369": -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (9) == 0.4121184852417565697562725663524351793439": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# sincos -+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res": -+float: 1 -+ifloat: 1 -+ -+# sinh_downward -+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# sinh_towardzero -+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168": -+float: 1 -+ifloat: 1 -+ -+# sinh_upward -+Test "sinh_upward (22) == 1792456423.065795780701106568345764104225": -+ildouble: 1 -+ldouble: 1 -+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305": -+ildouble: 1 -+ldouble: 1 -+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168": -+ildouble: 1 -+ldouble: 1 -+ -+# sqrt -+Test "sqrt (2) == M_SQRT2l": -+ildouble: 1 -+ldouble: 1 -+ -+# tan_downward -+Test "tan_downward (1) == 1.5574077246549022305069748074583601730873": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_downward (10) == 0.6483608274590866712591249330098086768169": -+float: 1 -+ifloat: 1 -+Test "tan_downward (2) == -2.1850398632615189916433061023136825434320": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_downward (6) == -0.2910061913847491570536995888681755428312": -+float: 1 -+ifloat: 1 -+Test "tan_downward (8) == -6.7997114552203786999252627596086333648814": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_downward (9) == -0.4523156594418098405903708757987855343087": -+float: 1 -+ifloat: 1 -+ -+# tan_towardzero -+Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169": -+float: 1 -+ifloat: 1 -+Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312": -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# tan_upward -+Test "tan_upward (1) == 1.5574077246549022305069748074583601730873": -+float: 1 -+ifloat: 1 -+Test "tan_upward (10) == 0.6483608274590866712591249330098086768169": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (2) == -2.1850398632615189916433061023136825434320": -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (3) == -0.1425465430742778052956354105339134932261": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (4) == 1.1578212823495775831373424182673239231198": -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (5) == -3.3805150062465856369827058794473439087096": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (6) == -0.2910061913847491570536995888681755428312": -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (9) == -0.4523156594418098405903708757987855343087": -+ildouble: 1 -+ldouble: 1 -+ -+# tanh -+Test "tanh (-0.75) == -0.635148952387287319214434357312496495": -+ildouble: 1 -+ldouble: 1 -+Test "tanh (-1.0) == -0.7615941559557648881194582826047935904": -+ildouble: 1 -+ldouble: 1 -+Test "tanh (0.75) == 0.635148952387287319214434357312496495": -+ildouble: 1 -+ldouble: 1 -+Test "tanh (1.0) == 0.7615941559557648881194582826047935904": -+ildouble: 1 -+ldouble: 1 -+ -+# tgamma -+Test "tgamma (-0.5) == -2 sqrt (pi)": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tgamma (0.5) == sqrt (pi)": -+float: 1 -+ifloat: 1 -+Test "tgamma (0.7) == 1.29805533264755778568117117915281162": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "tgamma (4) == 6": - ildouble: 1 - ldouble: 1 - -@@ -917,17 +1307,13 @@ ifloat: 2 - ildouble: 5 - ldouble: 5 - Test "yn (10, 1.0) == -121618014.278689189288130426667971145": --double: 1 - float: 2 --idouble: 1 - ifloat: 2 - ildouble: 1 - ldouble: 1 - Test "yn (10, 10.0) == -0.359814152183402722051986577343560609": - double: 2 --float: 2 - idouble: 2 --ifloat: 2 - ildouble: 2 - ldouble: 2 - Test "yn (10, 2.0) == -129184.542208039282635913145923304214": -@@ -941,9 +1327,7 @@ Test "yn (3, 0.125) == -2612.69757350066 - double: 1 - idouble: 1 - Test "yn (3, 0.75) == -12.9877176234475433186319774484809207": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 2 - ldouble: 2 -@@ -973,17 +1357,9 @@ Function: Imaginary part of "cacos": - ildouble: 1 - ldouble: 1 - --Function: Real part of "cacosh": --double: 1 --float: 7 --idouble: 1 --ifloat: 7 -- - Function: Imaginary part of "cacosh": --double: 1 --float: 3 --idouble: 1 --ifloat: 3 -+float: 1 -+ifloat: 1 - ildouble: 1 - ldouble: 1 - -@@ -1013,10 +1389,6 @@ ifloat: 6 - ildouble: 2 - ldouble: 2 - --Function: Real part of "catan": --float: 4 --ifloat: 4 -- - Function: Imaginary part of "catan": - double: 1 - float: 1 -@@ -1032,8 +1404,6 @@ ildouble: 1 - ldouble: 1 - - Function: Imaginary part of "catanh": --float: 6 --ifloat: 6 - ildouble: 1 - ldouble: 1 - -@@ -1089,10 +1459,6 @@ ifloat: 1 - ildouble: 1 - ldouble: 1 - --Function: Imaginary part of "clog": --float: 3 --ifloat: 3 -- - Function: Real part of "clog10": - float: 1 - ifloat: 1 -@@ -1101,9 +1467,9 @@ ldouble: 1 - - Function: Imaginary part of "clog10": - double: 1 --float: 5 -+float: 1 - idouble: 1 --ifloat: 5 -+ifloat: 1 - ildouble: 1 - ldouble: 1 - -@@ -1115,6 +1481,48 @@ ifloat: 1 - ildouble: 1 - ldouble: 1 - -+Function: "cos_downward": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "cos_tonearest": -+float: 1 -+ifloat: 1 -+ -+Function: "cos_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "cos_upward": -+float: 2 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cosh_downward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cosh_tonearest": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cosh_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cosh_upward": -+ildouble: 1 -+ldouble: 1 -+ - Function: Real part of "cpow": - double: 2 - float: 4 -@@ -1162,8 +1570,6 @@ ildouble: 1 - ldouble: 1 - - Function: Real part of "ctan": --double: 1 --idouble: 1 - ildouble: 1 - ldouble: 1 - -@@ -1211,6 +1617,24 @@ Function: "exp2": - ildouble: 2 - ldouble: 2 - -+Function: "exp_downward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "exp_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "exp_upward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ - Function: "expm1": - double: 1 - float: 1 -@@ -1228,10 +1652,10 @@ float: 1 - ifloat: 1 - - Function: "j0": --double: 3 --float: 2 --idouble: 3 --ifloat: 2 -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 - ildouble: 2 - ldouble: 2 - -@@ -1244,10 +1668,10 @@ ildouble: 4 - ldouble: 4 - - Function: "jn": --double: 4 --float: 4 --idouble: 4 --ifloat: 4 -+double: 3 -+float: 3 -+idouble: 3 -+ifloat: 3 - ildouble: 4 - ldouble: 4 - -@@ -1277,6 +1701,44 @@ Function: "log2": - ildouble: 1 - ldouble: 1 - -+Function: "pow_downward": -+float: 1 -+ifloat: 1 -+ -+Function: "pow_towardzero": -+float: 1 -+ifloat: 1 -+ -+Function: "pow_upward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_downward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_tonearest": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "sin_upward": -+float: 2 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ - Function: "sincos": - double: 1 - float: 1 -@@ -1285,6 +1747,22 @@ ifloat: 1 - ildouble: 1 - ldouble: 1 - -+Function: "sinh_downward": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "sinh_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "sinh_upward": -+ildouble: 1 -+ldouble: 1 -+ - Function: "sqrt": - ildouble: 1 - ldouble: 1 -@@ -1293,6 +1771,24 @@ Function: "tan": - double: 1 - idouble: 1 - -+Function: "tan_downward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "tan_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "tan_upward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ - Function: "tanh": - ildouble: 1 - ldouble: 1 -diff -Nrup a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps ---- a/sysdeps/x86_64/fpu/libm-test-ulps 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/x86_64/fpu/libm-test-ulps 2012-08-06 11:02:14.602759422 -0600 -@@ -42,26 +42,13 @@ ldouble: 1 - - # cacos - Test "Imaginary part of: cacos (0.75 + 1.25 i) == 1.11752014915610270578240049553777969 - 1.13239363160530819522266333696834467 i": --float: 1 --ifloat: 1 - ildouble: 2 - ldouble: 2 - - # cacosh --Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i": --double: 1 --float: 7 --idouble: 1 --ifloat: 7 --ildouble: 6 --ldouble: 6 - Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i": --double: 1 --float: 3 --idouble: 1 --ifloat: 3 --ildouble: 1 --ldouble: 1 -+float: 1 -+ifloat: 1 - Test "Real part of: cacosh (0.75 + 1.25 i) == 1.13239363160530819522266333696834467 + 1.11752014915610270578240049553777969 i": - ildouble: 1 - ldouble: 1 -@@ -75,8 +62,6 @@ ifloat: 1 - ildouble: 2 - ldouble: 2 - Test "Imaginary part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i": --float: 1 --ifloat: 1 - ildouble: 2 - ldouble: 2 - -@@ -103,21 +88,15 @@ double: 1 - float: 1 - idouble: 1 - ifloat: 1 --ldouble: 1 - ildouble: 1 -+ldouble: 1 - - # catan --Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": --float: 3 --ifloat: 3 - Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": - double: 1 - float: 1 - idouble: 1 - ifloat: 1 --Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i": --float: 4 --ifloat: 4 - - # catanh - Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": -@@ -125,15 +104,9 @@ double: 4 - idouble: 4 - ildouble: 1 - ldouble: 1 --Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": --float: 4 --ifloat: 4 - Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i": - double: 1 - idouble: 1 --Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i": --float: 6 --ifloat: 6 - - # cbrt - Test "cbrt (-0.001) == -0.1": -@@ -152,14 +125,9 @@ ildouble: 1 - ldouble: 1 - - # ccos --Test "Real part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i": --double: 1 --idouble: 1 - Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i": - float: 1 - ifloat: 1 --ildouble: 1 --ldouble: 1 - Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i": - double: 1 - float: 1 -@@ -168,19 +136,17 @@ ifloat: 1 - ildouble: 1 - ldouble: 1 - Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i": --ildouble: 1 --ldouble: 1 - float: 1 - ifloat: 1 -+ildouble: 1 -+ldouble: 1 - - # ccosh - Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i": - float: 1 - ifloat: 1 - Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 -@@ -205,9 +171,6 @@ ildouble: 1 - ldouble: 1 - - # clog --Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i": --float: 3 --ifloat: 3 - Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i": - float: 1 - ifloat: 1 -@@ -227,11 +190,7 @@ idouble: 1 - ifloat: 1 - Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i": - double: 1 --float: 5 - idouble: 1 --ifloat: 5 --ildouble: 1 --ldouble: 1 - Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i": - double: 1 - float: 1 -@@ -276,9 +235,7 @@ float: 1 - idouble: 1 - ifloat: 1 - Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 -@@ -306,33 +263,164 @@ ifloat: 1 - # cos - Test "cos (M_PI_6l * 2.0) == 0.5": - double: 1 --float: 1 - idouble: 1 --ifloat: 1 - Test "cos (M_PI_6l * 4.0) == -0.5": - double: 2 - float: 1 - idouble: 2 - ifloat: 1 -+ -+# cos_downward -+Test "cos_downward (1) == 0.5403023058681397174009366074429766037323": -+float: 1 -+ifloat: 1 - ildouble: 1 - ldouble: 1 --Test "cos (pi/2) == 0": --double: 1 -+Test "cos_downward (2) == -0.4161468365471423869975682295007621897660": -+float: 1 -+ifloat: 1 -+Test "cos_downward (3) == -0.9899924966004454572715727947312613023937": -+float: 1 -+ifloat: 1 -+Test "cos_downward (4) == -0.6536436208636119146391681830977503814241": - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 --Test "cos (0.80190127184058835) == 0.69534156199418473": --double: 1 --idouble: 1 -+Test "cos_downward (5) == 0.2836621854632262644666391715135573083344": -+float: 1 -+ifloat: 1 -+Test "cos_downward (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (8) == -0.1455000338086135258688413818311946826093": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (9) == -0.9111302618846769883682947111811653112463": -+ildouble: 1 -+ldouble: 1 -+ -+# cos_tonearest -+Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+Test "cos_tonearest (8) == -0.1455000338086135258688413818311946826093": -+ildouble: 1 -+ldouble: 1 -+Test "cos_tonearest (9) == -0.9111302618846769883682947111811653112463": -+ildouble: 1 -+ldouble: 1 -+ -+# cos_towardzero -+Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323": -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199": -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344": -+float: 1 -+ifloat: 1 -+Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093": -+float: 1 -+ifloat: 1 -+ -+# cos_upward -+Test "cos_upward (10) == -0.8390715290764524522588639478240648345199": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_upward (2) == -0.4161468365471423869975682295007621897660": -+ildouble: 1 -+ldouble: 1 -+Test "cos_upward (3) == -0.9899924966004454572715727947312613023937": -+ildouble: 1 -+ldouble: 1 -+Test "cos_upward (5) == 0.2836621854632262644666391715135573083344": -+ildouble: 1 -+ldouble: 1 -+Test "cos_upward (6) == 0.9601702866503660205456522979229244054519": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_upward (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+Test "cos_upward (9) == -0.9111302618846769883682947111811653112463": -+float: 2 -+ifloat: 2 -+ -+# cosh_downward -+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# cosh_tonearest -+Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997": -+ildouble: 1 -+ldouble: 1 -+ -+# cosh_towardzero -+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# cosh_upward -+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344": -+ildouble: 1 -+ldouble: 1 - - # cpow - Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i": - float: 1 - ifloat: 1 --ldouble: 1 - ildouble: 1 -+ldouble: 1 - Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i": - float: 1 - ifloat: 1 -@@ -363,9 +451,9 @@ ildouble: 1 - ldouble: 1 - Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": - double: 1 --float: 5 -+float: 4 - idouble: 1 --ifloat: 5 -+ifloat: 4 - Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": - float: 2 - ifloat: 2 -@@ -383,22 +471,11 @@ ldouble: 1 - Test "Real part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i": - ildouble: 1 - ldouble: 1 --Test "Imaginary part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i": --float: 1 --ifloat: 1 --Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i": --double: 1 --idouble: 1 - - # csinh --Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i": --double: 1 --idouble: 1 - Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i": - double: 1 - idouble: 1 --ildouble: 2 --ldouble: 2 - Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i": - float: 1 - ifloat: 1 -@@ -418,37 +495,31 @@ ifloat: 1 - - # ctan - Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": --double: 1 --idouble: 1 --ildouble: 439 --ldouble: 439 -+ildouble: 1 -+ldouble: 1 - Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": --float: 1 --ifloat: 1 --ildouble: 2 --ldouble: 2 -+ildouble: 1 -+ldouble: 1 - Test "Real part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i": - ildouble: 1 - ldouble: 1 - Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i": - double: 1 --float: 1 - idouble: 1 --ifloat: 1 - ildouble: 3 - ldouble: 3 - - # ctanh - Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i": --float: 2 --ifloat: 2 --ildouble: 5 --ldouble: 5 - double: 1 -+float: 2 - idouble: 1 -+ifloat: 2 -+ildouble: 3 -+ldouble: 3 - Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i": --ildouble: 25 --ldouble: 25 -+ildouble: 1 -+ldouble: 1 - Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i": - float: 1 - ifloat: 1 -@@ -456,10 +527,10 @@ Test "Real part of: ctanh (0.75 + 1.25 i - double: 1 - idouble: 1 - Test "Imaginary part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i": --ildouble: 1 --ldouble: 1 - double: 1 - idouble: 1 -+ildouble: 1 -+ldouble: 1 - - # erf - Test "erf (1.25) == 0.922900128256458230136523481197281140": -@@ -481,26 +552,61 @@ ldouble: 1 - - # exp10 - Test "exp10 (-1) == 0.1": --ildouble: 1 --ldouble: 1 --float: 1 --ifloat: 1 - double: 2 --idouble: 2 --Test "exp10 (0.75) == 5.62341325190349080394951039776481231": --ildouble: 2 --ldouble: 2 - float: 1 -+idouble: 2 - ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "exp10 (0.75) == 5.62341325190349080394951039776481231": - double: 1 -+float: 1 - idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 - Test "exp10 (3) == 1000": --ildouble: 8 --ldouble: 8 --float: 2 --ifloat: 2 - double: 6 -+float: 2 - idouble: 6 -+ifloat: 2 -+ildouble: 3 -+ldouble: 3 -+ -+# exp_downward -+Test "exp_downward (1) == e": -+ildouble: 1 -+ldouble: 1 -+Test "exp_downward (2) == e^2": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "exp_downward (3) == e^3": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# exp_towardzero -+Test "exp_towardzero (1) == e": -+ildouble: 1 -+ldouble: 1 -+Test "exp_towardzero (2) == e^2": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "exp_towardzero (3) == e^3": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# exp_upward -+Test "exp_upward (1) == e": -+float: 1 -+ifloat: 1 - - # expm1 - Test "expm1 (0.75) == 1.11700001661267466854536981983709561": -@@ -570,9 +676,7 @@ ifloat: 1 - ildouble: 1 - ldouble: 1 - Test "j0 (8.0) == 0.171650807137553906090869407851972001": --double: 2 - float: 1 --idouble: 2 - ifloat: 1 - - # j1 -@@ -617,9 +721,7 @@ ifloat: 1 - ildouble: 1 - ldouble: 1 - Test "jn (0, 8.0) == 0.171650807137553906090869407851972001": --double: 2 - float: 1 --idouble: 2 - ifloat: 1 - Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883": - float: 2 -@@ -714,12 +816,12 @@ ldouble: 1 - - # log10 - Test "log10 (0.75) == -0.124938736608299953132449886193870744": --ildouble: 1 --ldouble: 1 --float: 2 --ifloat: 2 - double: 1 -+float: 2 - idouble: 1 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 - Test "log10 (e) == log10(e)": - float: 1 - ifloat: 1 -@@ -731,37 +833,309 @@ Test "log1p (-0.25) == -0.28768207245178 - float: 1 - ifloat: 1 - --# sincos --Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res": --double: 1 --float: 1 --idouble: 1 --ifloat: 1 --Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res": --double: 1 --float: 1 --idouble: 1 --ifloat: 1 -+# pow_downward -+Test "pow_downward (1.0625, 1.125) == 1.070582293028761362162622578677070098674": - ildouble: 1 - ldouble: 1 --Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res": --double: 1 -+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948": - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 --Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res": -+ -+# pow_towardzero -+Test "pow_towardzero (1.0625, 1.125) == 1.070582293028761362162622578677070098674": -+ildouble: 1 -+ldouble: 1 -+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# pow_upward -+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "pow_upward (1.5, 1.03125) == 1.519127098714743184071644334163037684948": -+ildouble: 1 -+ldouble: 1 -+ -+# sin_downward -+Test "sin_downward (1) == 0.8414709848078965066525023216302989996226": -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (10) == -0.5440211108893698134047476618513772816836": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (3) == 0.1411200080598672221007448028081102798469": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (4) == -0.7568024953079282513726390945118290941359": -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (5) == -0.9589242746631384688931544061559939733525": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (6) == -0.2794154981989258728115554466118947596280": -+float: 1 -+ifloat: 1 -+Test "sin_downward (7) == 0.6569865987187890903969990915936351779369": -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (8) == 0.9893582466233817778081235982452886721164": -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (9) == 0.4121184852417565697562725663524351793439": -+ildouble: 1 -+ldouble: 1 -+ -+# sin_tonearest -+Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226": -+float: 1 -+ifloat: 1 -+Test "sin_tonearest (10) == -0.5440211108893698134047476618513772816836": -+ildouble: 1 -+ldouble: 1 -+Test "sin_tonearest (4) == -0.7568024953079282513726390945118290941359": -+ildouble: 1 -+ldouble: 1 -+Test "sin_tonearest (9) == 0.4121184852417565697562725663524351793439": -+ildouble: 1 -+ldouble: 1 -+ -+# sin_towardzero -+Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226": - float: 1 - ifloat: 1 --Test "sincos (0.80190127184058835, &sin_res, &cos_res) puts 0.69534156199418473 in cos_res": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836": -+float: 1 -+ifloat: 1 -+Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359": -+float: 1 -+ifloat: 1 -+Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525": -+float: 1 -+ifloat: 1 -+Test "sin_towardzero (6) == -0.2794154981989258728115554466118947596280": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (7) == 0.6569865987187890903969990915936351779369": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# sin_upward -+Test "sin_upward (1) == 0.8414709848078965066525023216302989996226": -+float: 1 -+ifloat: 1 -+Test "sin_upward (2) == 0.9092974268256816953960198659117448427023": -+float: 2 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (4) == -0.7568024953079282513726390945118290941359": -+float: 1 -+ifloat: 1 -+Test "sin_upward (6) == -0.2794154981989258728115554466118947596280": -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (9) == 0.4121184852417565697562725663524351793439": -+float: 1 -+ifloat: 1 -+ -+# sincos -+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res": - double: 1 - idouble: 1 -- --# tan --Test "tan (pi/4) == 1": -+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res": - double: 1 -+float: 1 - idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res": -+float: 1 -+ifloat: 1 -+ -+# sinh_downward -+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225": -+float: 1 -+ifloat: 1 -+ildouble: 4 -+ldouble: 4 -+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305": -+float: 1 -+ifloat: 1 -+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168": -+float: 1 -+ifloat: 1 -+ildouble: 5 -+ldouble: 5 -+ -+# sinh_tonearest -+Test "sinh_tonearest (22) == 1792456423.065795780701106568345764104225": -+ildouble: 3 -+ldouble: 3 -+Test "sinh_tonearest (23) == 4872401723.124451299966006944252978187305": -+ildouble: 1 -+ldouble: 1 -+Test "sinh_tonearest (24) == 13244561064.92173614705070540368454568168": -+ildouble: 6 -+ldouble: 6 -+ -+# sinh_towardzero -+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225": -+float: 1 -+ifloat: 1 -+ildouble: 4 -+ldouble: 4 -+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305": -+float: 1 -+ifloat: 1 -+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168": -+float: 1 -+ifloat: 1 -+ildouble: 5 -+ldouble: 5 -+ -+# sinh_upward -+Test "sinh_upward (22) == 1792456423.065795780701106568345764104225": -+ildouble: 16 -+ldouble: 16 -+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305": -+ildouble: 27 -+ldouble: 27 -+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168": -+ildouble: 7 -+ldouble: 7 -+ -+# tan_downward -+Test "tan_downward (1) == 1.5574077246549022305069748074583601730873": -+float: 1 -+ifloat: 1 -+Test "tan_downward (10) == 0.6483608274590866712591249330098086768169": -+float: 1 -+ifloat: 1 -+Test "tan_downward (2) == -2.1850398632615189916433061023136825434320": -+float: 1 -+ifloat: 1 -+Test "tan_downward (4) == 1.1578212823495775831373424182673239231198": -+ildouble: 1 -+ldouble: 1 -+Test "tan_downward (5) == -3.3805150062465856369827058794473439087096": -+ildouble: 1 -+ldouble: 1 -+Test "tan_downward (6) == -0.2910061913847491570536995888681755428312": -+float: 1 -+ifloat: 1 -+Test "tan_downward (8) == -6.7997114552203786999252627596086333648814": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_downward (9) == -0.4523156594418098405903708757987855343087": -+float: 1 -+ifloat: 1 -+ -+# tan_tonearest -+Test "tan_tonearest (6) == -0.2910061913847491570536995888681755428312": -+ildouble: 1 -+ldouble: 1 -+Test "tan_tonearest (8) == -6.7997114552203786999252627596086333648814": -+ildouble: 1 -+ldouble: 1 -+Test "tan_tonearest (9) == -0.4523156594418098405903708757987855343087": -+ildouble: 1 -+ldouble: 1 -+ -+# tan_towardzero -+Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169": -+float: 1 -+ifloat: 1 -+Test "tan_towardzero (2) == -2.1850398632615189916433061023136825434320": -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096": -+float: 1 -+ifloat: 1 -+Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312": -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (8) == -6.7997114552203786999252627596086333648814": -+ildouble: 2 -+ldouble: 2 -+Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# tan_upward -+Test "tan_upward (1) == 1.5574077246549022305069748074583601730873": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (10) == 0.6483608274590866712591249330098086768169": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (2) == -2.1850398632615189916433061023136825434320": -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (3) == -0.1425465430742778052956354105339134932261": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (5) == -3.3805150062465856369827058794473439087096": -+float: 1 -+ifloat: 1 -+Test "tan_upward (6) == -0.2910061913847491570536995888681755428312": -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (7) == 0.8714479827243187364564508896003135663222": -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (8) == -6.7997114552203786999252627596086333648814": -+ildouble: 2 -+ldouble: 2 -+Test "tan_upward (9) == -0.4523156594418098405903708757987855343087": -+ildouble: 1 -+ldouble: 1 - - # tgamma - Test "tgamma (-0.5) == -2 sqrt (pi)": -@@ -779,9 +1153,6 @@ double: 1 - float: 1 - idouble: 1 - ifloat: 1 --Test "tgamma (4) == 6": --ildouble: 1 --ldouble: 1 - - # y0 - Test "y0 (0.125) == -1.38968062514384052915582277745018693": -@@ -960,27 +1331,17 @@ ildouble: 1 - ldouble: 1 - - Function: Imaginary part of "cacos": --float: 1 --ifloat: 1 - ildouble: 2 - ldouble: 2 - - Function: Real part of "cacosh": --double: 1 --float: 7 --idouble: 1 --ifloat: 7 --ildouble: 6 --ldouble: 6 -- --Function: Imaginary part of "cacosh": --double: 1 --float: 3 --idouble: 1 --ifloat: 3 - ildouble: 1 - ldouble: 1 - -+Function: Imaginary part of "cacosh": -+float: 1 -+ifloat: 1 -+ - Function: Real part of "casin": - double: 1 - float: 1 -@@ -990,8 +1351,6 @@ ildouble: 2 - ldouble: 2 - - Function: Imaginary part of "casin": --float: 1 --ifloat: 1 - ildouble: 2 - ldouble: 2 - -@@ -1011,10 +1370,6 @@ ifloat: 6 - ildouble: 5 - ldouble: 5 - --Function: Real part of "catan": --float: 4 --ifloat: 4 -- - Function: Imaginary part of "catan": - double: 1 - float: 1 -@@ -1027,10 +1382,6 @@ idouble: 4 - ildouble: 1 - ldouble: 1 - --Function: Imaginary part of "catanh": --float: 6 --ifloat: 6 -- - Function: "cbrt": - double: 1 - idouble: 1 -@@ -1058,9 +1409,7 @@ idouble: 1 - ifloat: 1 - - Function: Imaginary part of "ccosh": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 -@@ -1081,25 +1430,17 @@ ifloat: 1 - ildouble: 1 - ldouble: 1 - --Function: Imaginary part of "clog": --float: 3 --ifloat: 3 -- - Function: Real part of "clog10": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 - - Function: Imaginary part of "clog10": - double: 1 --float: 5 -+float: 1 - idouble: 1 --ifloat: 5 --ildouble: 1 --ldouble: 1 -+ifloat: 1 - - Function: "cos": - double: 2 -@@ -1109,11 +1450,55 @@ ifloat: 1 - ildouble: 1 - ldouble: 1 - -+Function: "cos_downward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cos_tonearest": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cos_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cos_upward": -+float: 2 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cosh_downward": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "cosh_tonearest": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cosh_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "cosh_upward": -+ildouble: 1 -+ldouble: 1 -+ - Function: Real part of "cpow": - double: 2 --float: 5 -+float: 4 - idouble: 2 --ifloat: 5 -+ifloat: 4 - ildouble: 5 - ldouble: 5 - -@@ -1129,16 +1514,8 @@ Function: Real part of "csin": - ildouble: 1 - ldouble: 1 - --Function: Imaginary part of "csin": --double: 1 --float: 1 --idouble: 1 --ifloat: 1 -- - Function: Real part of "csinh": --double: 1 - float: 1 --idouble: 1 - ifloat: 1 - ildouble: 1 - ldouble: 1 -@@ -1148,24 +1525,18 @@ double: 1 - float: 1 - idouble: 1 - ifloat: 1 --ildouble: 2 --ldouble: 2 - - Function: Real part of "csqrt": - float: 1 - ifloat: 1 - - Function: Real part of "ctan": --double: 1 --idouble: 1 --ildouble: 439 --ldouble: 439 -+ildouble: 1 -+ldouble: 1 - - Function: Imaginary part of "ctan": - double: 1 --float: 1 - idouble: 1 --ifloat: 1 - ildouble: 3 - ldouble: 3 - -@@ -1174,16 +1545,16 @@ double: 1 - float: 2 - idouble: 1 - ifloat: 2 --ildouble: 5 --ldouble: 5 -+ildouble: 3 -+ldouble: 3 - - Function: Imaginary part of "ctanh": --float: 1 --ifloat: 1 --ildouble: 25 --ldouble: 25 - double: 1 -+float: 1 - idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 - - Function: "erf": - double: 1 -@@ -1196,12 +1567,28 @@ ildouble: 1 - ldouble: 1 - - Function: "exp10": --ildouble: 8 --ldouble: 8 --float: 2 --ifloat: 2 - double: 6 -+float: 2 - idouble: 6 -+ifloat: 2 -+ildouble: 3 -+ldouble: 3 -+ -+Function: "exp_downward": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "exp_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "exp_upward": -+float: 1 -+ifloat: 1 - - Function: "expm1": - double: 1 -@@ -1250,17 +1637,59 @@ ildouble: 1 - ldouble: 1 - - Function: "log10": -+double: 1 - float: 2 -+idouble: 1 - ifloat: 2 - ildouble: 1 - ldouble: 1 --double: 1 --idouble: 1 - - Function: "log1p": - float: 1 - ifloat: 1 - -+Function: "pow_downward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "pow_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "pow_upward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_downward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_tonearest": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_upward": -+float: 2 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ - Function: "sincos": - double: 1 - float: 1 -@@ -1269,10 +1698,52 @@ ifloat: 1 - ildouble: 1 - ldouble: 1 - -+Function: "sinh_downward": -+float: 1 -+ifloat: 1 -+ildouble: 5 -+ldouble: 5 -+ -+Function: "sinh_tonearest": -+ildouble: 6 -+ldouble: 6 -+ -+Function: "sinh_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 5 -+ldouble: 5 -+ -+Function: "sinh_upward": -+ildouble: 27 -+ldouble: 27 -+ - Function: "tan": - double: 1 - idouble: 1 - -+Function: "tan_downward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "tan_tonearest": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "tan_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "tan_upward": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ - Function: "tgamma": - double: 1 - float: 1 -diff -Nrup a/sysdeps/x86_64/fpu/math_private.h b/sysdeps/x86_64/fpu/math_private.h ---- a/sysdeps/x86_64/fpu/math_private.h 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/x86_64/fpu/math_private.h 2012-08-06 09:54:00.893929393 -0600 -@@ -56,3 +56,82 @@ do { \ - } while (0) - - #endif -+ -+ -+/* Specialized variants of the interfaces which only handle -+ either the FPU or the SSE unit. */ -+#undef libc_fegetround -+#define libc_fegetround() \ -+ ({ \ -+ unsigned int mxcsr; \ -+ asm volatile ("stmxcsr %0" : "=m" (*&mxcsr)); \ -+ (mxcsr & 0x6000) >> 3; \ -+ }) -+#undef libc_fegetroundf -+#define libc_fegetroundf() libc_fegetround () -+// #define libc_fegetroundl() fegetround () -+ -+#undef libc_fesetround -+#define libc_fesetround(r) \ -+ do { \ -+ unsigned int mxcsr; \ -+ asm ("stmxcsr %0" : "=m" (*&mxcsr)); \ -+ mxcsr = (mxcsr & ~0x6000) | ((r) << 3); \ -+ asm volatile ("ldmxcsr %0" : : "m" (*&mxcsr)); \ -+ } while (0) -+#undef libc_fesetroundf -+#define libc_fesetroundf(r) libc_fesetround (r) -+// #define libc_fesetroundl(r) (void) fesetround (r) -+ -+#undef libc_feholdexcept -+#define libc_feholdexcept(e) \ -+ do { \ -+ unsigned int mxcsr; \ -+ asm ("stmxcsr %0" : "=m" (*&mxcsr)); \ -+ (e)->__mxcsr = mxcsr; \ -+ mxcsr = (mxcsr | 0x1f80) & ~0x3f; \ -+ asm volatile ("ldmxcsr %0" : : "m" (*&mxcsr)); \ -+ } while (0) -+#undef libc_feholdexceptf -+#define libc_feholdexceptf(e) libc_feholdexcept (e) -+// #define libc_feholdexceptl(e) (void) feholdexcept (e) -+ -+#undef libc_feholdexcept_setround -+#define libc_feholdexcept_setround(e, r) \ -+ do { \ -+ unsigned int mxcsr; \ -+ asm ("stmxcsr %0" : "=m" (*&mxcsr)); \ -+ (e)->__mxcsr = mxcsr; \ -+ mxcsr = ((mxcsr | 0x1f80) & ~0x603f) | ((r) << 3); \ -+ asm volatile ("ldmxcsr %0" : : "m" (*&mxcsr)); \ -+ } while (0) -+#undef libc_feholdexcept_setroundf -+#define libc_feholdexcept_setroundf(e, r) libc_feholdexcept_setround (e, r) -+// #define libc_feholdexcept_setroundl(e, r) ... -+ -+#undef libc_fetestexcept -+#define libc_fetestexcept(e) \ -+ ({ unsigned int mxcsr; asm volatile ("stmxcsr %0" : "=m" (*&mxcsr)); \ -+ mxcsr & (e) & FE_ALL_EXCEPT; }) -+#undef libc_fetestexceptf -+#define libc_fetestexceptf(e) libc_fetestexcept (e) -+// #define libc_fetestexceptl(e) fetestexcept (e) -+ -+#undef libc_fesetenv -+#define libc_fesetenv(e) \ -+ asm volatile ("ldmxcsr %0" : : "m" ((e)->__mxcsr)) -+#undef libc_fesetenvf -+#define libc_fesetenvf(e) libc_fesetenv (e) -+// #define libc_fesetenvl(e) (void) fesetenv (e) -+ -+#undef libc_feupdateenv -+#define libc_feupdateenv(e) \ -+ do { \ -+ unsigned int mxcsr; \ -+ asm volatile ("stmxcsr %0" : "=m" (*&mxcsr)); \ -+ asm volatile ("ldmxcsr %0" : : "m" ((e)->__mxcsr)); \ -+ feraiseexcept (mxcsr & FE_ALL_EXCEPT); \ -+ } while (0) -+#undef libc_feupdateenvf -+#define libc_feupdateenvf(e) libc_feupdateenv (e) -+// #define libc_feupdateenvl(e) (void) feupdateenv (e) diff --git a/src/patches/glibc/glibc-rh841787.patch b/src/patches/glibc/glibc-rh841787.patch deleted file mode 100644 index 3cec783201..0000000000 --- a/src/patches/glibc/glibc-rh841787.patch +++ /dev/null @@ -1,42 +0,0 @@ -diff -rup a/resolv/res_init.c b/resolv/res_init.c ---- a/resolv/res_init.c 2012-07-26 15:10:45.655638776 -0600 -+++ b/resolv/res_init.c 2012-07-26 15:11:27.731423002 -0600 -@@ -314,9 +314,9 @@ __res_vinit(res_state statp, int preinit - cp++; - if ((*cp != '\0') && (*cp != '\n') - && __inet_aton(cp, &a)) { -- statp->nsaddr_list[nservall].sin_addr = a; -- statp->nsaddr_list[nservall].sin_family = AF_INET; -- statp->nsaddr_list[nservall].sin_port = -+ statp->nsaddr_list[nserv].sin_addr = a; -+ statp->nsaddr_list[nserv].sin_family = AF_INET; -+ statp->nsaddr_list[nserv].sin_port = - htons(NAMESERVER_PORT); - nserv++; - #ifdef _LIBC -diff -rup a/resolv/res_send.c b/resolv/res_send.c ---- a/resolv/res_send.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/resolv/res_send.c 2012-07-26 15:34:58.398261659 -0600 -@@ -421,10 +421,10 @@ __libc_res_nsend(res_state statp, const - EXT(statp).nsmap[n] = MAXNS; - } - } -- n = statp->nscount; -- if (statp->nscount > EXT(statp).nscount) -+ n = statp->nscount - EXT(statp).nscount6; -+ if (n > EXT(statp).nscount) - for (n = EXT(statp).nscount, ns = 0; -- n < statp->nscount; n++) { -+ n < statp->nscount - EXT(statp).nscount6; n++) { - while (ns < MAXNS - && EXT(statp).nsmap[ns] != MAXNS) - ns++; -@@ -441,7 +441,7 @@ __libc_res_nsend(res_state statp, const - malloc(sizeof (struct sockaddr_in6)); - if (EXT(statp).nsaddrs[n] != NULL) { - memset (mempcpy(EXT(statp).nsaddrs[n], -- &statp->nsaddr_list[n], -+ &statp->nsaddr_list[ns], - sizeof (struct sockaddr_in)), - '\0', - sizeof (struct sockaddr_in6) diff --git a/src/patches/glibc/glibc-rh843673.patch b/src/patches/glibc/glibc-rh843673.patch deleted file mode 100644 index a2ff2629b8..0000000000 --- a/src/patches/glibc/glibc-rh843673.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff -Brup a/stdlib/msort.c b/stdlib/msort.c ---- a/stdlib/msort.c 2010-05-04 07:27:23.000000000 -0400 -+++ b/stdlib/msort.c 2012-08-07 13:30:14.131765346 -0400 -@@ -25,6 +25,8 @@ - #include - #include - #include -+#include -+ - - struct msort_param - { -@@ -182,7 +184,7 @@ qsort_r (void *b, size_t n, size_t s, __ - static long int phys_pages; - static int pagesize; - -- if (phys_pages == 0) -+ if (pagesize == 0) - { - phys_pages = __sysconf (_SC_PHYS_PAGES); - -@@ -197,6 +199,9 @@ qsort_r (void *b, size_t n, size_t s, __ - a quarter of the physical memory. */ - phys_pages /= 4; - -+ /* Make sure phys_pages is written to memory. */ -+ atomic_write_barrier (); -+ - pagesize = __sysconf (_SC_PAGESIZE); - } - diff --git a/src/patches/glibc/glibc-rh845218.patch b/src/patches/glibc/glibc-rh845218.patch deleted file mode 100644 index 47f909c10b..0000000000 --- a/src/patches/glibc/glibc-rh845218.patch +++ /dev/null @@ -1,218 +0,0 @@ -commit 16b293a7a6f65d8ff348a603d19e8fd4372fa3a9 -Author: Siddhesh Poyarekar -Date: Wed Apr 30 11:48:43 2014 +0530 - - Do not fail if one of the two responses to AF_UNSPEC fails (BZ #14308) - - [Fixes BZ #14308, #12994, #13651] - - AF_UNSPEC results in sending two queries in parallel, one for the A - record and the other for the AAAA record. If one of these is a - referral, then the query fails, which is wrong. It should return at - least the one successful response. - - The fix has two parts. The first part makes the referral fall back to - the SERVFAIL path, which results in using the successful response. - There is a bug in that path however, due to which the second part is - necessary. The bug here is that if the first response is a failure - and the second succeeds, __libc_res_nsearch does not detect that and - assumes a failure. The case where the first response is a success and - the second fails, works correctly. - - This condition is produced by buggy routers, so here's a crude - interposable library that can simulate such a condition. The library - overrides the recvfrom syscall and modifies the header of the packet - received to reproduce this scenario. It has two key variables: - mod_packet and first_error. - - The mod_packet variable when set to 0, results in odd packets being - modified to be a referral. When set to 1, even packets are modified - to be a referral. - - The first_error causes the first response to be a failure so that a - domain-appended search is performed to test the second part of the - __libc_nsearch fix. - - The driver for this fix is a simple getaddrinfo program that does an - AF_UNSPEC query. I have omitted this since it should be easy to - implement. - - I have tested this on x86_64. - - The interceptor library source: - - /* Override recvfrom and modify the header of the first DNS response to make it - a referral and reproduce bz #845218. We have to resort to this ugly hack - because we cannot make bind return the buggy response of a referral for the - AAAA record and an authoritative response for the A record. */ - #define _GNU_SOURCE - #include - #include - #include - #include - #include - #include - #include - #include - #include - - /* Lifted from resolv/arpa/nameser_compat.h. */ - typedef struct { - unsigned id :16; /*%< query identification number */ - #if BYTE_ORDER == BIG_ENDIAN - /* fields in third byte */ - unsigned qr: 1; /*%< response flag */ - unsigned opcode: 4; /*%< purpose of message */ - unsigned aa: 1; /*%< authoritive answer */ - unsigned tc: 1; /*%< truncated message */ - unsigned rd: 1; /*%< recursion desired */ - /* fields - * in - * fourth - * byte - * */ - unsigned ra: 1; /*%< recursion available */ - unsigned unused :1; /*%< unused bits (MBZ as of 4.9.3a3) */ - unsigned ad: 1; /*%< authentic data from named */ - unsigned cd: 1; /*%< checking disabled by resolver */ - unsigned rcode :4; /*%< response code */ - #endif - #if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN - /* fields - * in - * third - * byte - * */ - unsigned rd :1; /*%< recursion desired */ - unsigned tc :1; /*%< truncated message */ - unsigned aa :1; /*%< authoritive answer */ - unsigned opcode :4; /*%< purpose of message */ - unsigned qr :1; /*%< response flag */ - /* fields - * in - * fourth - * byte - * */ - unsigned rcode :4; /*%< response code */ - unsigned cd: 1; /*%< checking disabled by resolver */ - unsigned ad: 1; /*%< authentic data from named */ - unsigned unused :1; /*%< unused bits (MBZ as of 4.9.3a3) */ - unsigned ra :1; /*%< recursion available */ - #endif - /* remaining - * bytes - * */ - unsigned qdcount :16; /*%< number of question entries */ - unsigned ancount :16; /*%< number of answer entries */ - unsigned nscount :16; /*%< number of authority entries */ - unsigned arcount :16; /*%< number of resource entries */ - } HEADER; - - static int done = 0; - - /* Packets to modify. 0 for the odd packets and 1 for even packets. */ - static const int mod_packet = 0; - - /* Set to true if the first request should result in an error, resulting in a - search query. */ - static bool first_error = true; - - static ssize_t (*real_recvfrom) (int sockfd, void *buf, size_t len, int flags, - struct sockaddr *src_addr, socklen_t *addrlen); - - void - __attribute__ ((constructor)) - init (void) - { - real_recvfrom = dlsym (RTLD_NEXT, "recvfrom"); - - if (real_recvfrom == NULL) - { - printf ("Failed to get reference to recvfrom: %s\n", dlerror ()); - printf ("Cannot simulate test\n"); - abort (); - } - } - - /* Modify the second packet that we receive to set the header in a manner as to - reproduce BZ #845218. */ - static void - mod_buf (HEADER *h, int port) - { - if (done % 2 == mod_packet || (first_error && done == 1)) - { - printf ("(Modifying header)"); - - if (first_error && done == 1) - h->rcode = 3; - else - h->rcode = 0; /* NOERROR == 0. */ - h->ancount = 0; - h->aa = 0; - h->ra = 0; - h->arcount = 0; - } - done++; - } - - ssize_t - recvfrom (int sockfd, void *buf, size_t len, int flags, - struct sockaddr *src_addr, socklen_t *addrlen) - { - ssize_t ret = real_recvfrom (sockfd, buf, len, flags, src_addr, addrlen); - int port = htons (((struct sockaddr_in *) src_addr)->sin_port); - struct in_addr addr = ((struct sockaddr_in *) src_addr)->sin_addr; - const char *host = inet_ntoa (addr); - printf ("\n*** From %s:%d: ", host, port); - - mod_buf (buf, port); - - printf ("returned %zd\n", ret); - return ret; - } - -diff --git a/resolv/res_query.c b/resolv/res_query.c -index a9db837..4e6612c 100644 ---- a/resolv/res_query.c -+++ b/resolv/res_query.c -@@ -382,7 +382,9 @@ __libc_res_nsearch(res_state statp, - ret = __libc_res_nquerydomain(statp, name, NULL, class, type, - answer, anslen, answerp, - answerp2, nanswerp2, resplen2); -- if (ret > 0 || trailing_dot) -+ if (ret > 0 || trailing_dot -+ /* If the second response is valid then we use that. */ -+ || (ret == 0 && answerp2 != NULL && resplen2 > 0)) - return (ret); - saved_herrno = h_errno; - tried_as_is++; -@@ -422,7 +424,8 @@ __libc_res_nsearch(res_state statp, - answer, anslen, answerp, - answerp2, nanswerp2, - resplen2); -- if (ret > 0) -+ if (ret > 0 || (ret == 0 && answerp2 != NULL -+ && resplen2 > 0)) - return (ret); - - if (answerp && *answerp != answer) { -diff --git a/resolv/res_send.c b/resolv/res_send.c -index 60743df..3273d55 100644 ---- a/resolv/res_send.c -+++ b/resolv/res_send.c -@@ -1351,6 +1351,7 @@ send_dg(res_state statp, - (*thisresplenp > *thisanssizp) - ? *thisanssizp : *thisresplenp); - -+ next_ns: - if (recvresp1 || (buf2 != NULL && recvresp2)) { - *resplen2 = 0; - return resplen; -@@ -1368,7 +1369,6 @@ send_dg(res_state statp, - goto wait; - } - -- next_ns: - __res_iclose(statp, false); - /* don't retry if called from dig */ - if (!statp->pfcode) diff --git a/src/patches/glibc/glibc-rh846342.patch b/src/patches/glibc/glibc-rh846342.patch deleted file mode 100644 index 8cfca0513f..0000000000 --- a/src/patches/glibc/glibc-rh846342.patch +++ /dev/null @@ -1,48 +0,0 @@ -This is a workaround for broken code which issues memcpy requests with -overlapping arguments. With this patch installed, if the file -/etc/sysconfig/32bit_ssse3_memcpy_via_32bit_ssse3_memmove exists then a -32bit memcpy call which normally would be handled by the SSSE3 memcpy -implementation would instead be handled by the 32bit SSSE3 memmove -implementation which is more tolerant of overlaps. - -diff -Nrup a/sysdeps/i386/i686/multiarch/memcpy.S b/sysdeps/i386/i686/multiarch/memcpy.S ---- a/sysdeps/i386/i686/multiarch/memcpy.S 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/i386/i686/multiarch/memcpy.S 2012-11-20 14:19:52.890780415 -0700 -@@ -21,6 +21,10 @@ - #include - #include - -+ .section .rodata -+L(magicfile): -+ .ascii "/etc/sysconfig/32bit_ssse3_memcpy_via_32bit_ssse3_memmove" -+ - /* Define multiple versions only for the definition in lib and for - DSO. In static binaries we need memcpy before the initialization - happened. */ -@@ -48,6 +52,26 @@ ENTRY(memcpy) - 1: leal __memcpy_ia32@GOTOFF(%ebx), %eax - testl $bit_SSSE3, CPUID_OFFSET+index_SSSE3+__cpu_features@GOTOFF(%ebx) - jz 2f -+ -+ /* This is an inlined access (magicfile, 0) syscall. -+ -+ Note that it clobbers %ebx, so we have to save/restore -+ it around the syscall. */ -+ mov %ebx, %edx -+ leal L(magicfile)@GOTOFF(%ebx), %ebx -+ xor %ecx, %ecx -+ movl $33, %eax -+ int $0x80 -+ mov %edx, %ebx -+ -+ /* If the file did not exist, then %eax will be -1..-4095 and we -+ do nothing special. */ -+ cmpl $-4095, %eax -+ jae 4f -+ -+ leal __memmove_ssse3@GOTOFF(%ebx), %eax -+ jmp 2f -+4: - leal __memcpy_ssse3@GOTOFF(%ebx), %eax - testl $bit_Fast_Rep_String, FEATURE_OFFSET+index_Fast_Rep_String+__cpu_features@GOTOFF(%ebx) - jz 2f diff --git a/src/patches/glibc/glibc-rh847932.patch b/src/patches/glibc/glibc-rh847932.patch deleted file mode 100644 index 33ea851fa7..0000000000 --- a/src/patches/glibc/glibc-rh847932.patch +++ /dev/null @@ -1,364 +0,0 @@ -diff -Nrup a/stdlib/Makefile b/stdlib/Makefile ---- a/stdlib/Makefile 2010-05-04 05:27:23.000000000 -0600 -+++ b/stdlib/Makefile 2012-08-15 09:25:37.812443006 -0600 -@@ -71,7 +71,7 @@ tests := tst-strtol tst-strtod testmb t - tst-atof1 tst-atof2 tst-strtod2 tst-strtod3 tst-rand48-2 \ - tst-makecontext tst-strtod4 tst-strtod5 tst-qsort2 \ - tst-makecontext2 tst-strtod6 tst-unsetenv1 \ -- tst-makecontext3 -+ tst-makecontext3 tst-strtod-overflow - - include ../Makeconfig - -diff -Nrup a/stdlib/strtod_l.c b/stdlib/strtod_l.c ---- a/stdlib/strtod_l.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/stdlib/strtod_l.c 2012-08-15 09:34:29.550281346 -0600 -@@ -62,6 +62,7 @@ extern unsigned long long int ____strtou - #include - #include - #include -+#include - - /* The gmp headers need some configuration frobs. */ - #define HAVE_ALLOCA 1 -@@ -176,19 +177,19 @@ extern const mp_limb_t _tens_in_limb[MAX - /* Return a floating point number of the needed type according to the given - multi-precision number after possible rounding. */ - static FLOAT --round_and_return (mp_limb_t *retval, int exponent, int negative, -+round_and_return (mp_limb_t *retval, intmax_t exponent, int negative, - mp_limb_t round_limb, mp_size_t round_bit, int more_bits) - { - if (exponent < MIN_EXP - 1) - { -- mp_size_t shift = MIN_EXP - 1 - exponent; -- -- if (shift > MANT_DIG) -+ if (exponent < MIN_EXP - 1 - MANT_DIG) - { - __set_errno (EDOM); - return 0.0; - } - -+ mp_size_t shift = MIN_EXP - 1 - exponent; -+ - more_bits |= (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0; - if (shift == MANT_DIG) - /* This is a special case to handle the very seldom case where -@@ -235,6 +236,9 @@ round_and_return (mp_limb_t *retval, int - __set_errno (ERANGE); - } - -+ if (exponent > MAX_EXP) -+ goto overflow; -+ - if ((round_limb & (((mp_limb_t) 1) << round_bit)) != 0 - && (more_bits || (retval[0] & 1) != 0 - || (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0)) -@@ -260,6 +264,7 @@ round_and_return (mp_limb_t *retval, int - } - - if (exponent > MAX_EXP) -+ overflow: - return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL; - - return MPN2FLOAT (retval, exponent, negative); -@@ -273,7 +278,7 @@ round_and_return (mp_limb_t *retval, int - factor for the resulting number (see code) multiply by it. */ - static const STRING_TYPE * - str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t *n, mp_size_t *nsize, -- int *exponent -+ intmax_t *exponent - #ifndef USE_WIDE_CHAR - , const char *decimal, size_t decimal_len, const char *thousands - #endif -@@ -337,7 +342,7 @@ str_to_mpn (const STRING_TYPE *str, int - } - while (--digcnt > 0); - -- if (*exponent > 0 && cnt + *exponent <= MAX_DIG_PER_LIMB) -+ if (*exponent > 0 && *exponent <= MAX_DIG_PER_LIMB - cnt) - { - low *= _tens_in_limb[*exponent]; - start = _tens_in_limb[cnt + *exponent]; -@@ -415,7 +420,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group - { - int negative; /* The sign of the number. */ - MPN_VAR (num); /* MP representation of the number. */ -- int exponent; /* Exponent of the number. */ -+ intmax_t exponent; /* Exponent of the number. */ - - /* Numbers starting `0X' or `0x' have to be processed with base 16. */ - int base = 10; -@@ -437,7 +442,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group - /* Points at the character following the integer and fractional digits. */ - const STRING_TYPE *expp; - /* Total number of digit and number of digits in integer part. */ -- int dig_no, int_no, lead_zero; -+ size_t dig_no, int_no, lead_zero; - /* Contains the last character read. */ - CHAR_TYPE c; - -@@ -769,7 +774,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group - are all or any is really a fractional digit will be decided - later. */ - int_no = dig_no; -- lead_zero = int_no == 0 ? -1 : 0; -+ lead_zero = int_no == 0 ? (size_t) -1 : 0; - - /* Read the fractional digits. A special case are the 'american - style' numbers like `16.' i.e. with decimal point but without -@@ -791,12 +796,13 @@ ____STRTOF_INTERNAL (nptr, endptr, group - (base == 16 && ({ CHAR_TYPE lo = TOLOWER (c); - lo >= L_('a') && lo <= L_('f'); }))) - { -- if (c != L_('0') && lead_zero == -1) -+ if (c != L_('0') && lead_zero == (size_t) -1) - lead_zero = dig_no - int_no; - ++dig_no; - c = *++cp; - } - } -+ assert (dig_no <= (uintmax_t) INTMAX_MAX); - - /* Remember start of exponent (if any). */ - expp = cp; -@@ -819,24 +825,80 @@ ____STRTOF_INTERNAL (nptr, endptr, group - - if (c >= L_('0') && c <= L_('9')) - { -- int exp_limit; -+ intmax_t exp_limit; - - /* Get the exponent limit. */ - if (base == 16) -- exp_limit = (exp_negative ? -- -MIN_EXP + MANT_DIG + 4 * int_no : -- MAX_EXP - 4 * int_no + 4 * lead_zero + 3); -+ { -+ if (exp_negative) -+ { -+ assert (int_no <= (uintmax_t) (INTMAX_MAX -+ + MIN_EXP - MANT_DIG) / 4); -+ exp_limit = -MIN_EXP + MANT_DIG + 4 * (intmax_t) int_no; -+ } -+ else -+ { -+ if (int_no) -+ { -+ assert (lead_zero == 0 -+ && int_no <= (uintmax_t) INTMAX_MAX / 4); -+ exp_limit = MAX_EXP - 4 * (intmax_t) int_no + 3; -+ } -+ else if (lead_zero == (size_t) -1) -+ { -+ /* The number is zero and this limit is -+ arbitrary. */ -+ exp_limit = MAX_EXP + 3; -+ } -+ else -+ { -+ assert (lead_zero -+ <= (uintmax_t) (INTMAX_MAX - MAX_EXP - 3) / 4); -+ exp_limit = (MAX_EXP -+ + 4 * (intmax_t) lead_zero -+ + 3); -+ } -+ } -+ } - else -- exp_limit = (exp_negative ? -- -MIN_10_EXP + MANT_DIG + int_no : -- MAX_10_EXP - int_no + lead_zero + 1); -+ { -+ if (exp_negative) -+ { -+ assert (int_no -+ <= (uintmax_t) (INTMAX_MAX + MIN_10_EXP - MANT_DIG)); -+ exp_limit = -MIN_10_EXP + MANT_DIG + (intmax_t) int_no; -+ } -+ else -+ { -+ if (int_no) -+ { -+ assert (lead_zero == 0 -+ && int_no <= (uintmax_t) INTMAX_MAX); -+ exp_limit = MAX_10_EXP - (intmax_t) int_no + 1; -+ } -+ else if (lead_zero == (size_t) -1) -+ { -+ /* The number is zero and this limit is -+ arbitrary. */ -+ exp_limit = MAX_10_EXP + 1; -+ } -+ else -+ { -+ assert (lead_zero -+ <= (uintmax_t) (INTMAX_MAX - MAX_10_EXP - 1)); -+ exp_limit = MAX_10_EXP + (intmax_t) lead_zero + 1; -+ } -+ } -+ } -+ -+ if (exp_limit < 0) -+ exp_limit = 0; - - do - { -- exponent *= 10; -- exponent += c - L_('0'); -- -- if (__builtin_expect (exponent > exp_limit, 0)) -+ if (__builtin_expect ((exponent > exp_limit / 10 -+ || (exponent == exp_limit / 10 -+ && c - L_('0') > exp_limit % 10)), 0)) - /* The exponent is too large/small to represent a valid - number. */ - { -@@ -845,7 +907,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group - /* We have to take care for special situation: a joker - might have written "0.0e100000" which is in fact - zero. */ -- if (lead_zero == -1) -+ if (lead_zero == (size_t) -1) - result = negative ? -0.0 : 0.0; - else - { -@@ -864,6 +926,9 @@ ____STRTOF_INTERNAL (nptr, endptr, group - /* NOTREACHED */ - } - -+ exponent *= 10; -+ exponent += c - L_('0'); -+ - c = *++cp; - } - while (c >= L_('0') && c <= L_('9')); -@@ -932,7 +997,14 @@ ____STRTOF_INTERNAL (nptr, endptr, group - } - #endif - startp += lead_zero + decimal_len; -- exponent -= base == 16 ? 4 * lead_zero : lead_zero; -+ assert (lead_zero <= (base == 16 -+ ? (uintmax_t) INTMAX_MAX / 4 -+ : (uintmax_t) INTMAX_MAX)); -+ assert (lead_zero <= (base == 16 -+ ? ((uintmax_t) exponent -+ - (uintmax_t) INTMAX_MIN) / 4 -+ : ((uintmax_t) exponent - (uintmax_t) INTMAX_MIN))); -+ exponent -= base == 16 ? 4 * (intmax_t) lead_zero : (intmax_t) lead_zero; - dig_no -= lead_zero; - } - -@@ -974,7 +1046,10 @@ ____STRTOF_INTERNAL (nptr, endptr, group - } - - /* Adjust the exponent for the bits we are shifting in. */ -- exponent += bits - 1 + (int_no - 1) * 4; -+ assert (int_no <= (uintmax_t) (exponent < 0 -+ ? (INTMAX_MAX - bits + 1) / 4 -+ : (INTMAX_MAX - exponent - bits + 1) / 4)); -+ exponent += bits - 1 + ((intmax_t) int_no - 1) * 4; - - while (--dig_no > 0 && idx >= 0) - { -@@ -1014,13 +1089,15 @@ ____STRTOF_INTERNAL (nptr, endptr, group - really integer digits or belong to the fractional part; i.e. we normalize - 123e-2 to 1.23. */ - { -- register int incr = (exponent < 0 ? MAX (-int_no, exponent) -- : MIN (dig_no - int_no, exponent)); -+ register intmax_t incr = (exponent < 0 -+ ? MAX (-(intmax_t) int_no, exponent) -+ : MIN ((intmax_t) dig_no - (intmax_t) int_no, -+ exponent)); - int_no += incr; - exponent -= incr; - } - -- if (__builtin_expect (int_no + exponent > MAX_10_EXP + 1, 0)) -+ if (__builtin_expect (exponent > MAX_10_EXP + 1 - (intmax_t) int_no, 0)) - { - __set_errno (ERANGE); - return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL; -@@ -1205,7 +1282,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group - digits we should have enough bits for the result. The remaining - decimal digits give us the information that more bits are following. - This can be used while rounding. (Two added as a safety margin.) */ -- if (dig_no - int_no > (MANT_DIG - bits + 2) / 3 + 2) -+ if ((intmax_t) dig_no > (intmax_t) int_no + (MANT_DIG - bits + 2) / 3 + 2) - { - dig_no = int_no + (MANT_DIG - bits + 2) / 3 + 2; - more_bits = 1; -@@ -1213,7 +1290,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group - else - more_bits = 0; - -- neg_exp = dig_no - int_no - exponent; -+ neg_exp = (intmax_t) dig_no - (intmax_t) int_no - exponent; - - /* Construct the denominator. */ - densize = 0; -@@ -1491,7 +1568,9 @@ ____STRTOF_INTERNAL (nptr, endptr, group - register int i; - (void) __mpn_lshift (&retval[used - / BITS_PER_MP_LIMB], -- retval, RETURN_LIMB_SIZE, -+ retval, -+ (RETURN_LIMB_SIZE -+ - used / BITS_PER_MP_LIMB), - used % BITS_PER_MP_LIMB); - for (i = used / BITS_PER_MP_LIMB - 1; i >= 0; --i) - retval[i] = 0; -diff -Nrup a/stdlib/tst-strtod-overflow.c b/stdlib/tst-strtod-overflow.c ---- a/stdlib/tst-strtod-overflow.c 1969-12-31 17:00:00.000000000 -0700 -+++ b/stdlib/tst-strtod-overflow.c 2012-08-15 09:25:01.098592764 -0600 -@@ -0,0 +1,48 @@ -+/* Test for integer/buffer overflow in strtod. -+ Copyright (C) 2012 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+ -+#define EXPONENT "e-2147483649" -+#define SIZE 214748364 -+ -+static int -+do_test (void) -+{ -+ char *p = malloc (1 + SIZE + sizeof (EXPONENT)); -+ if (p == NULL) -+ { -+ puts ("malloc failed, cannot test for overflow"); -+ return 0; -+ } -+ p[0] = '1'; -+ memset (p + 1, '0', SIZE); -+ memcpy (p + 1 + SIZE, EXPONENT, sizeof (EXPONENT)); -+ double d = strtod (p, NULL); -+ if (d != 0) -+ { -+ printf ("strtod returned wrong value: %a\n", d); -+ return 1; -+ } -+ return 0; -+} -+ -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" diff --git a/src/patches/glibc/glibc-rh848082.patch b/src/patches/glibc/glibc-rh848082.patch deleted file mode 100644 index dfb96bfb11..0000000000 --- a/src/patches/glibc/glibc-rh848082.patch +++ /dev/null @@ -1,88 +0,0 @@ -commit 4f031072a5055abd83717820b59efdaa463d5853 -Author: Ulrich Drepper -Date: Sat May 28 16:59:30 2011 -0400 - - Handle failure of _nl_explode_name in all cases - - 2011-05-28 Ulrich Drepper - - * locale/findlocale.c (_nl_find_locale): Return right away if - _nl_explode_name failed. - * locale/programs/locarchive.c (add_locale_to_archive): Likewise. - -diff --git a/locale/findlocale.c b/locale/findlocale.c -index 6b88c96..2fec9a7 100644 ---- a/locale/findlocale.c -+++ b/locale/findlocale.c -@@ -1,4 +1,4 @@ --/* Copyright (C) 1996-2001, 2002, 2003, 2006, 2010 Free Software Foundation, Inc. -+/* Copyright (C) 1996-2003, 2006, 2010, 2011 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - -@@ -140,6 +140,9 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len, - */ - mask = _nl_explode_name (loc_name, &language, &modifier, &territory, - &codeset, &normalized_codeset); -+ if (mask == -1) -+ /* Memory allocate problem. */ -+ return NULL; - - /* If exactly this locale was already asked for we have an entry with - the complete name. */ -diff --git a/locale/programs/locarchive.c b/locale/programs/locarchive.c -index 85ba77d..e95bcf1 100644 ---- a/locale/programs/locarchive.c -+++ b/locale/programs/locarchive.c -@@ -1,4 +1,4 @@ --/* Copyright (C) 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc. -+/* Copyright (C) 2002,2003,2005,2007,2009,2011 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - -@@ -1079,6 +1079,8 @@ add_locale_to_archive (ah, name, data, replace) - int mask = _nl_explode_name (strdupa (name), - &language, &modifier, &territory, - &codeset, &normalized_codeset); -+ if (mask == -1) -+ return -1; - - if (mask & XPG_NORM_CODESET) - /* This name contains a codeset in unnormalized form. -@@ -1128,6 +1130,7 @@ add_locale_to_archive (ah, name, data, replace) - - /* Now read the locale.alias files looking for lines whose - right hand side matches our name after normalization. */ -+ int result = 0; - if (alias_file != NULL) - { - FILE *fp; -@@ -1207,6 +1210,11 @@ add_locale_to_archive (ah, name, data, replace) - &rhs_territory, - &rhs_codeset, - &rhs_normalized_codeset); -+ if (rhs_mask == 1) -+ { -+ result = -1; -+ goto out; -+ } - if (!strcmp (language, rhs_language) - && ((rhs_mask & XPG_CODESET) - /* He has a codeset, it must match normalized. */ -@@ -1240,6 +1248,7 @@ add_locale_to_archive (ah, name, data, replace) - } - } - -+ out: - fclose (fp); - } - -@@ -1248,7 +1257,7 @@ add_locale_to_archive (ah, name, data, replace) - if (mask & XPG_NORM_CODESET) - free ((char *) normalized_codeset); - -- return 0; -+ return result; - } - - diff --git a/src/patches/glibc/glibc-rh848748.patch b/src/patches/glibc/glibc-rh848748.patch deleted file mode 100644 index b75a36884a..0000000000 --- a/src/patches/glibc/glibc-rh848748.patch +++ /dev/null @@ -1,70 +0,0 @@ -2013-04-30 Patsy Franklin - - * nis/yp_xdr.c: Defined XDRMAXNAME and XDRMAXRECORD. - (xdr_domainname): Use XDRMAXNAME as maxsize. - (xdr_mapname): Use XDRMAXNAME as maxsize. - (xdr_peername): Use XDRMAXNAME as maxsize. - (xdr_keydat): Use XDRMAXRECORD as maxsize. - (xdr_valdat): Use XDRMAXRECORD as maxsize. - -diff -Nrup a/nis/yp_xdr.c b/nis/yp_xdr.c ---- a/nis/yp_xdr.c 2012-06-30 15:12:34.000000000 -0400 -+++ b/nis/yp_xdr.c 2013-04-30 05:36:02.492835503 -0400 -@@ -32,6 +32,14 @@ - #include - #include - -+/* The specification suggests 1024 as a maximum length of all fields, -+ but current linux systems usually don't use any limits. So, to stay -+ as much compatible as possible with recent linux systems we choose -+ limits large enough to avoid problems. */ -+ -+#define XDRMAXNAME 1024 -+#define XDRMAXRECORD 16 * 1024 * 1024 -+ - bool_t - xdr_ypstat (XDR *xdrs, ypstat *objp) - { -@@ -49,21 +57,21 @@ libnsl_hidden_def (xdr_ypxfrstat) - bool_t - xdr_domainname (XDR *xdrs, domainname *objp) - { -- return xdr_string (xdrs, objp, ~0); -+ return xdr_string (xdrs, objp, XDRMAXNAME); - } - libnsl_hidden_def (xdr_domainname) - - bool_t - xdr_mapname (XDR *xdrs, mapname *objp) - { -- return xdr_string (xdrs, objp, ~0); -+ return xdr_string (xdrs, objp, XDRMAXNAME); - } - libnsl_hidden_def (xdr_mapname) - - bool_t - xdr_peername (XDR *xdrs, peername *objp) - { -- return xdr_string (xdrs, objp, ~0); -+ return xdr_string (xdrs, objp, XDRMAXNAME); - } - libnsl_hidden_def (xdr_peername) - -@@ -71,7 +79,7 @@ bool_t - xdr_keydat (XDR *xdrs, keydat *objp) - { - return xdr_bytes (xdrs, (char **) &objp->keydat_val, -- (u_int *) &objp->keydat_len, ~0); -+ (u_int *) &objp->keydat_len, XDRMAXRECORD); - } - libnsl_hidden_def (xdr_keydat) - -@@ -79,7 +87,7 @@ bool_t - xdr_valdat (XDR *xdrs, valdat *objp) - { - return xdr_bytes (xdrs, (char **) &objp->valdat_val, -- (u_int *) &objp->valdat_len, ~0); -+ (u_int *) &objp->valdat_len, XDRMAXRECORD); - } - libnsl_hidden_def (xdr_valdat) - diff --git a/src/patches/glibc/glibc-rh849203.patch b/src/patches/glibc/glibc-rh849203.patch deleted file mode 100644 index ea50593338..0000000000 --- a/src/patches/glibc/glibc-rh849203.patch +++ /dev/null @@ -1,195 +0,0 @@ -diff -Nrup a/intl/Makefile b/intl/Makefile ---- a/intl/Makefile 2010-05-04 05:27:23.000000000 -0600 -+++ b/intl/Makefile 2012-08-17 14:40:00.457226629 -0600 -@@ -74,6 +74,16 @@ ifneq (no,$(PERL)) - tests: $(objpfx)mtrace-tst-gettext - endif - endif -+ -+# Multiple tests use this data. Create it once to avoid racing and -+# spurious test failures. -+codeset_mo = $(objpfx)domaindir/de_DE/LC_MESSAGES/codeset.mo -+ -+$(codeset_mo): -+ $(make-target-directory) -+ msgfmt -o $@T tstcodeset.po -+ mv -f $@T $@ -+ - $(objpfx)mtrace-tst-gettext: $(objpfx)tst-gettext.out - $(common-objpfx)malloc/mtrace $(objpfx)tst-gettext.mtrace > $@ - $(objpfx)tst-gettext.out: tst-gettext.sh $(objpfx)tst-gettext -@@ -83,16 +93,14 @@ $(objpfx)tst-translit.out: tst-translit. - $(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/ - $(objpfx)tst-gettext2.out: tst-gettext2.sh $(objpfx)tst-gettext2 - $(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/ --$(objpfx)tst-codeset.out: tst-codeset.sh $(objpfx)tst-codeset -- $(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/ --$(objpfx)tst-gettext3.out: tst-gettext3.sh $(objpfx)tst-gettext3 -- $(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/ - $(objpfx)tst-gettext4.out: tst-gettext4.sh $(objpfx)tst-gettext4 - $(SHELL) -e $< $(common-objpfx) '$(run-program-prefix)' $(common-objpfx)intl/ --$(objpfx)tst-gettext5.out: tst-gettext5.sh $(objpfx)tst-gettext5 -- $(SHELL) -e $< $(common-objpfx) '$(run-program-prefix)' $(common-objpfx)intl/ - $(objpfx)tst-gettext6.out: tst-gettext6.sh $(objpfx)tst-gettext6 - $(SHELL) -e $< $(common-objpfx) '$(run-program-prefix)' $(common-objpfx)intl/ -+ -+$(objpfx)tst-codeset.out: $(codeset_mo) -+$(objpfx)tst-gettext3.out: $(codeset_mo) -+$(objpfx)tst-gettext5.out: $(codeset_mo) - endif - endif - -@@ -109,6 +117,11 @@ CFLAGS-tst-gettext4.c = -DOBJPFX=\"$(obj - CFLAGS-tst-gettext5.c = -DOBJPFX=\"$(objpfx)\" - CFLAGS-tst-gettext6.c = -DOBJPFX=\"$(objpfx)\" - -+LOCPATH-ENV = LOCPATH=$(common-objpfx)localedata -+tst-codeset-ENV = $(LOCPATH-ENV) -+tst-gettext3-ENV = $(LOCPATH-ENV) -+tst-gettext5-ENV = $(LOCPATH-ENV) -+ - ifeq ($(have-thread-library),yes) - ifeq (yes,$(build-shared)) - $(addprefix $(objpfx),$(multithread-test-srcs)): $(shared-thread-library) -diff -Nrup a/intl/tst-codeset.sh b/intl/tst-codeset.sh ---- a/intl/tst-codeset.sh 2010-05-04 05:27:23.000000000 -0600 -+++ b/intl/tst-codeset.sh 1969-12-31 17:00:00.000000000 -0700 -@@ -1,43 +0,0 @@ --#! /bin/sh --# Test of bind_textdomain_codeset. --# Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. --# This file is part of the GNU C Library. --# -- --# The GNU C Library 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. -- --# The GNU C Library is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --# Lesser General Public License for more details. -- --# You should have received a copy of the GNU Lesser General Public --# License along with the GNU C Library; if not, write to the Free --# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA --# 02111-1307 USA. -- --common_objpfx=$1 --objpfx=$2 -- --LC_ALL=C --export LC_ALL -- --# Generate the test data. --msgfmt -o ${objpfx}codeset.mo.$$ tstcodeset.po || exit --# Create the domain directories. --mkdir -p ${objpfx}domaindir/de_DE/LC_MESSAGES --# Populate them. --mv -f ${objpfx}codeset.mo.$$ ${objpfx}domaindir/de_DE/LC_MESSAGES/codeset.mo -- --GCONV_PATH=${common_objpfx}iconvdata --export GCONV_PATH --LOCPATH=${common_objpfx}localedata --export LOCPATH -- --${common_objpfx}elf/ld.so --library-path $common_objpfx \ --${objpfx}tst-codeset > ${objpfx}tst-codeset.out -- --exit $? -diff -Nrup a/intl/tst-gettext3.sh b/intl/tst-gettext3.sh ---- a/intl/tst-gettext3.sh 2010-05-04 05:27:23.000000000 -0600 -+++ b/intl/tst-gettext3.sh 1969-12-31 17:00:00.000000000 -0700 -@@ -1,44 +0,0 @@ --#! /bin/sh --# Test that the gettext() results come out in the correct encoding for --# locales that differ only in their encoding. --# Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. --# This file is part of the GNU C Library. --# -- --# The GNU C Library 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. -- --# The GNU C Library is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --# Lesser General Public License for more details. -- --# You should have received a copy of the GNU Lesser General Public --# License along with the GNU C Library; if not, write to the Free --# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA --# 02111-1307 USA. -- --common_objpfx=$1 --objpfx=$2 -- --LC_ALL=C --export LC_ALL -- --# Generate the test data. --msgfmt -o ${objpfx}codeset.mo.$$ tstcodeset.po || exit --# Create the domain directories. --mkdir -p ${objpfx}domaindir/de_DE/LC_MESSAGES --# Populate them. --mv -f ${objpfx}codeset.mo.$$ ${objpfx}domaindir/de_DE/LC_MESSAGES/codeset.mo -- --GCONV_PATH=${common_objpfx}iconvdata --export GCONV_PATH --LOCPATH=${common_objpfx}localedata --export LOCPATH -- --${common_objpfx}elf/ld.so --library-path $common_objpfx \ --${objpfx}tst-gettext3 > ${objpfx}tst-gettext3.out -- --exit $? -diff -Nrup a/intl/tst-gettext5.sh b/intl/tst-gettext5.sh ---- a/intl/tst-gettext5.sh 2010-05-04 05:27:23.000000000 -0600 -+++ b/intl/tst-gettext5.sh 1969-12-31 17:00:00.000000000 -0700 -@@ -1,43 +0,0 @@ --#! /bin/sh --# Test that gettext() in multithreaded applications works correctly if --# different threads operate in different locales referring to the same --# catalog file but with different encodings. --# Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. --# This file is part of the GNU C Library. --# -- --# The GNU C Library 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. -- --# The GNU C Library is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --# Lesser General Public License for more details. -- --# You should have received a copy of the GNU Lesser General Public --# License along with the GNU C Library; if not, write to the Free --# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA --# 02111-1307 USA. -- --common_objpfx=$1 --run_program_prefix=$2 --objpfx=$3 -- --LC_ALL=C --export LC_ALL -- --# Create the domain directories. --mkdir -p ${objpfx}domaindir/de_DE/LC_MESSAGES --# Populate them. --msgfmt -o ${objpfx}domaindir/de_DE/LC_MESSAGES/codeset.mo tstcodeset.po -- --GCONV_PATH=${common_objpfx}iconvdata --export GCONV_PATH --LOCPATH=${common_objpfx}localedata --export LOCPATH -- --${run_program_prefix} ${objpfx}tst-gettext5 > ${objpfx}tst-gettext5.out -- --exit $? diff --git a/src/patches/glibc/glibc-rh849651.patch b/src/patches/glibc/glibc-rh849651.patch deleted file mode 100644 index 97a5144a9c..0000000000 --- a/src/patches/glibc/glibc-rh849651.patch +++ /dev/null @@ -1,343 +0,0 @@ -diff -Nrup a/sysdeps/x86_64/fpu/e_expf.S b/sysdeps/x86_64/fpu/e_expf.S ---- a/sysdeps/x86_64/fpu/e_expf.S 1969-12-31 17:00:00.000000000 -0700 -+++ b/sysdeps/x86_64/fpu/e_expf.S 2012-08-20 09:47:15.551971545 -0600 -@@ -0,0 +1,339 @@ -+/* Optimized __ieee754_expf function. -+ Copyright (C) 2012 Free Software Foundation, Inc. -+ Contributed by Intel Corporation. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+/* Short algorithm description: -+ * -+ * Let K = 64 (table size). -+ * e^x = 2^(x/log(2)) = 2^n * T[j] * (1 + P(y)) -+ * where -+ * x = m*log(2)/K + y, y in [0.0..log(2)/K] -+ * m = n*K + j, m,n,j - signed integer, j in [0..K-1] -+ * values of 2^(j/K) are tabulated as T[j]. -+ * -+ * P(y) is a minimax polynomial approximation of expf(x)-1 -+ * on small interval [0.0..log(2)/K]. -+ * -+ * P(y) = P3*y*y*y*y + P2*y*y*y + P1*y*y + P0*y, calculated as -+ * z = y*y; P(y) = (P3*z + P1)*z + (P2*z + P0)*y -+ * -+ * Special cases: -+ * expf(NaN) = NaN -+ * expf(+INF) = +INF -+ * expf(-INF) = 0 -+ * expf(x) = 1 for subnormals -+ * for finite argument, only expf(0)=1 is exact -+ * expf(x) overflows if x>88.7228317260742190 -+ * expf(x) underflows if x<-103.972076416015620 -+ */ -+ -+ .text -+ENTRY(__ieee754_expf) -+ /* Input: single precision x in %xmm0 */ -+ cvtss2sd %xmm0, %xmm1 /* Convert x to double precision */ -+ movd %xmm0, %ecx /* Copy x */ -+ movsd L(DP_KLN2)(%rip), %xmm2 /* DP K/log(2) */ -+ movsd L(DP_P2)(%rip), %xmm3 /* DP P2 */ -+ movl %ecx, %eax /* x */ -+ mulsd %xmm1, %xmm2 /* DP x*K/log(2) */ -+ andl $0x7fffffff, %ecx /* |x| */ -+ lea L(DP_T)(%rip), %rsi /* address of table T[j] */ -+ cmpl $0x42ad496b, %ecx /* |x|<125*log(2) ? */ -+ movsd L(DP_P3)(%rip), %xmm4 /* DP P3 */ -+ addsd L(DP_RS)(%rip), %xmm2 /* DP x*K/log(2)+RS */ -+ jae L(special_paths) -+ -+ /* Here if |x|<125*log(2) */ -+ cmpl $0x31800000, %ecx /* |x|<2^(-28) ? */ -+ jb L(small_arg) -+ -+ /* Main path: here if 2^(-28)<=|x|<125*log(2) */ -+ cvtsd2ss %xmm2, %xmm2 /* SP x*K/log(2)+RS */ -+ movd %xmm2, %eax /* bits of n*K+j with trash */ -+ subss L(SP_RS)(%rip), %xmm2 /* SP t=round(x*K/log(2)) */ -+ movl %eax, %edx /* n*K+j with trash */ -+ cvtss2sd %xmm2, %xmm2 /* DP t */ -+ andl $0x3f, %eax /* bits of j */ -+ mulsd L(DP_NLN2K)(%rip), %xmm2/* DP -t*log(2)/K */ -+ andl $0xffffffc0, %edx /* bits of n */ -+#ifdef __AVX__ -+ vaddsd %xmm1, %xmm2, %xmm0 /* DP y=x-t*log(2)/K */ -+ vmulsd %xmm0, %xmm0, %xmm2 /* DP z=y*y */ -+#else -+ addsd %xmm1, %xmm2 /* DP y=x-t*log(2)/K */ -+ movaps %xmm2, %xmm0 /* DP y */ -+ mulsd %xmm2, %xmm2 /* DP z=y*y */ -+#endif -+ mulsd %xmm2, %xmm4 /* DP P3*z */ -+ addl $0x1fc0, %edx /* bits of n + SP exponent bias */ -+ mulsd %xmm2, %xmm3 /* DP P2*z */ -+ shll $17, %edx /* SP 2^n */ -+ addsd L(DP_P1)(%rip), %xmm4 /* DP P3*z+P1 */ -+ addsd L(DP_P0)(%rip), %xmm3 /* DP P2*z+P0 */ -+ movd %edx, %xmm1 /* SP 2^n */ -+ mulsd %xmm2, %xmm4 /* DP (P3*z+P1)*z */ -+ mulsd %xmm3, %xmm0 /* DP (P2*z+P0)*y */ -+ addsd %xmm4, %xmm0 /* DP P(y) */ -+ mulsd (%rsi,%rax,8), %xmm0 /* DP P(y)*T[j] */ -+ addsd (%rsi,%rax,8), %xmm0 /* DP T[j]*(P(y)+1) */ -+ cvtsd2ss %xmm0, %xmm0 /* SP T[j]*(P(y)+1) */ -+ mulss %xmm1, %xmm0 /* SP result=2^n*(T[j]*(P(y)+1)) */ -+ ret -+ -+ .p2align 4 -+L(small_arg): -+ /* Here if 0<=|x|<2^(-28) */ -+ addss L(SP_ONE)(%rip), %xmm0 /* 1.0 + x */ -+ /* Return 1.0 with inexact raised, except for x==0 */ -+ ret -+ -+ .p2align 4 -+L(special_paths): -+ /* Here if 125*log(2)<=|x| */ -+ shrl $31, %eax /* Get sign bit of x, and depending on it: */ -+ lea L(SP_RANGE)(%rip), %rdx /* load over/underflow bound */ -+ cmpl (%rdx,%rax,4), %ecx /* |x|under/overflow bound */ -+ cmpl $0x7f800000, %ecx /* |x| is finite ? */ -+ jae L(arg_inf_or_nan) -+ -+ /* Here if |x|>under/overflow bound, and x is finite */ -+ testq %rax, %rax /* sign of x nonzero ? */ -+ je L(res_overflow) -+ -+ /* Here if -inf0) */ -+ movss L(SP_LARGE)(%rip), %xmm0/* load large value 2^100 */ -+ mulss %xmm0, %xmm0 /* Return overflowed result (Inf or max normal) */ -+ ret -+ -+ .p2align 4 -+L(arg_inf_or_nan): -+ /* Here if |x| is Inf or NAN */ -+ jne L(arg_nan) /* |x| is Inf ? */ -+ -+ /* Here if |x| is Inf */ -+ lea L(SP_INF_0)(%rip), %rdx /* depending on sign of x: */ -+ movss (%rdx,%rax,4), %xmm0 /* return zero or Inf */ -+ ret -+ -+ .p2align 4 -+L(arg_nan): -+ /* Here if |x| is NaN */ -+ addss %xmm0, %xmm0 /* Return x+x (raise invalid) */ -+ ret -+ -+ .p2align 4 -+L(near_under_or_overflow): -+ /* Here if 125*log(2)<=|x|this bound, then result overflows */ -+ .long 0x42cff1b4 /* if x -Date: Wed Aug 29 10:03:39 2012 +0530 - - Don't make ttyname* fail if proc filesystem is not available - - The ttyname and ttyname_r functions on Linux now fall back to - searching for the tty file descriptor in /dev/pts or /dev if /proc is - not available. This allows creation of chroots without the procfs - mounted on /proc. - - Fixes BZ #14516. - - 2012-08-29 Siddhesh Poyarekar - - [BZ #14516] - * sysdeps/unix/sysv/linux/ttyname.c (ttyname): Don't return - failure if reading from procfs failed. - * sysdeps/unix/sysv/linux/ttyname_r.c (ttyname_r): Likewise. - -diff -rup a/sysdeps/unix/sysv/linux/ttyname.c b/sysdeps/unix/sysv/linux/ttyname.c ---- a/sysdeps/unix/sysv/linux/ttyname.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/unix/sysv/linux/ttyname.c 2012-08-27 10:53:29.326671475 -0600 -@@ -146,12 +146,6 @@ ttyname (int fd) - } - - ssize_t len = __readlink (procname, ttyname_buf, buflen); -- if (__builtin_expect (len == -1 && errno == ENOENT, 0)) -- { -- __set_errno (EBADF); -- return NULL; -- } -- - if (__builtin_expect (len != -1 - #ifndef __ASSUME_PROC_SELF_FD_SYMLINK - /* This is for Linux 2.0. */ -diff -rup a/sysdeps/unix/sysv/linux/ttyname_r.c b/sysdeps/unix/sysv/linux/ttyname_r.c ---- a/sysdeps/unix/sysv/linux/ttyname_r.c 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/unix/sysv/linux/ttyname_r.c 2012-08-27 10:54:05.406528501 -0600 -@@ -126,12 +126,6 @@ __ttyname_r (int fd, char *buf, size_t b - *_fitoa_word (fd, __stpcpy (procname, "/proc/self/fd/"), 10, 0) = '\0'; - - ssize_t ret = __readlink (procname, buf, buflen - 1); -- if (__builtin_expect (ret == -1 && errno == ENOENT, 0)) -- { -- __set_errno (EBADF); -- return EBADF; -- } -- - if (__builtin_expect (ret == -1 && errno == ENAMETOOLONG, 0)) - { - __set_errno (ERANGE); diff --git a/src/patches/glibc/glibc-rh852445.patch b/src/patches/glibc/glibc-rh852445.patch deleted file mode 100644 index 3c4e13f848..0000000000 --- a/src/patches/glibc/glibc-rh852445.patch +++ /dev/null @@ -1,105 +0,0 @@ -From libc-alpha-return-31329-listarch-libc-alpha=sources dot redhat dot com at sourceware dot org Wed Jul 11 11:36:39 2012 -Return-Path: -Delivered-To: listarch-libc-alpha at sources dot redhat dot com -Received: (qmail 15677 invoked by alias); 11 Jul 2012 11:36:39 -0000 -Received: (qmail 15654 invoked by uid 22791); 11 Jul 2012 11:36:37 -0000 -X-SWARE-Spam-Status: No, hits=-4.3 required=5.0 - tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE -X-Spam-Check-By: sourceware.org -Date: Wed, 11 Jul 2012 21:06:06 +0930 -From: Alan Modra -To: libc-alpha at sourceware dot org -Cc: rsa at linux dot vnet dot ibm dot com -Subject: powerpc pthread_once bug fix -Message-ID: <20120711113606.GM3117@bubble.grove.modra.org> -MIME-Version: 1.0 -Content-Type: text/plain; charset=us-ascii -Content-Disposition: inline -User-Agent: Mutt/1.5.21 (2010-09-15) -Mailing-List: contact libc-alpha-help at sourceware dot org; run by ezmlm -Precedence: bulk -List-Id: -List-Subscribe: -List-Archive: -List-Post: -List-Help: , -Sender: libc-alpha-owner at sourceware dot org -Delivered-To: mailing list libc-alpha at sourceware dot org - -This fixes some bugs in the powerpc pthread_once code. Ref -gcc.gnu.org/bugzilla/show_bug.cgi?id=52839#c10 - -Release barriers are needed to ensure any memory written by -init_routine is seen by other threads before *once_control changes. -In the case of clear_once_control we need to flush any partially -written state. - -2012-06-28 Alan Modra - - * sysdeps/unix/sysv/linux/powerpc/pthread_once.c (__pthread_once): - Add release barrier before setting once_control to say - initialisation is done. Add hints on lwarx. Use macro in - place of isync. - (clear_once_control): Add release barrier. - -[ This was slightly edited -- the constraint for operand 0 in the last asm was changed - from "=&r" to "=&b" as using r0 in that context results in a load immediate 1 into - the target rather than incrementing the target. ] - -diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c b/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c -index 4e3d7bd..bb1ebf2 100644 ---- a/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c -+++ b/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c -@@ -28,6 +28,7 @@ clear_once_control (void *arg) - { - pthread_once_t *once_control = (pthread_once_t *) arg; - -+ __asm __volatile (__lll_rel_instr); - *once_control = 0; - lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); - } -@@ -47,15 +48,15 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void)) - oldval = *once_control; - if ((oldval & 2) == 0) - *once_control = newval; -- Do this atomically. -+ Do this atomically with an acquire barrier. - */ - newval = __fork_generation | 1; -- __asm __volatile ("1: lwarx %0,0,%3\n" -+ __asm __volatile ("1: lwarx %0,0,%3" MUTEX_HINT_ACQ "\n" - " andi. %1,%0,2\n" - " bne 2f\n" - " stwcx. %4,0,%3\n" - " bne 1b\n" -- "2: isync" -+ "2: " __lll_acq_instr - : "=&r" (oldval), "=&r" (tmp), "=m" (*once_control) - : "r" (once_control), "r" (newval), "m" (*once_control) - : "cr0"); -@@ -87,8 +88,18 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void)) - pthread_cleanup_pop (0); - - -- /* Add one to *once_control to take the bottom 2 bits from 01 to 10. */ -- atomic_increment (once_control); -+ /* Add one to *once_control to take the bottom 2 bits from 01 to 10. -+ A release barrier is needed to ensure memory written by init_routine -+ is seen in other threads before *once_control changes. */ -+ int tmp; -+ __asm __volatile (__lll_rel_instr "\n" -+ "1: lwarx %0,0,%2" MUTEX_HINT_REL "\n" -+ " addi %0,%0,1\n" -+ " stwcx. %0,0,%2\n" -+ " bne- 1b" -+ : "=&b" (tmp), "=m" (*once_control) -+ : "r" (once_control), "m" (*once_control) -+ : "cr0"); - - /* Wake up all other threads. */ - lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); - --- -Alan Modra -Australia Development Lab, IBM - diff --git a/src/patches/glibc/glibc-rh859965.patch b/src/patches/glibc/glibc-rh859965.patch deleted file mode 100644 index 8fcbcd49bc..0000000000 --- a/src/patches/glibc/glibc-rh859965.patch +++ /dev/null @@ -1,854 +0,0 @@ -# -# Based on the following patch: -# -# Upstream bug: https://sourceware.org/bugzilla/show_bug.cgi?id=14906 -# URL: https://sourceware.org/ml/libc-alpha/2015-02/msg00504.html -# -# 2015-02-17 Carlos O'Donell -# -# [BZ #14906] -# * nscd/cache.c (prune_cache): Use TRACED_FILE. Compare and update -# traced file mtime. Use consistent log message. -# * nscd/connections.c [HAVE_INOTIFY] (install_watches): New function. -# (register_traced_file): Call install_watches. Always set mtime. -# (invalidate_cache): Iterate over all trace files. Call install_watches. -# (inotify_check_files): Don't inline. Handle watching parent -# directories and configuration file movement in and out. -# (handle_inotify_events): New function. -# (main_loop_poll): Call handle_inotify_events. -# (main_loop_epoll): Likewise. -# * nscd/nscd.h: Define TRACED_FILE, TRACED_DIR, and PATH_MAX. -# (struct traced_file): Use array of inotify fds. Add parent directory, -# and basename. -# (struct database_dyn): Remove unused file_mtime. -# (init_traced_file): New inline function. -# (define_traced_file): New macro. -# * nss/nss_db/db-init.c: Use define_traced_file. -# (_nss_db_init): Use init_traced_file. -# * nss/nss_files/files-init.c: Use define_traced_file. -# (_nss_files_init): Use init_traced_file. -# -diff -urN glibc-2.12-2-gc4ccff1.orig/misc/sys/cdefs.h glibc-2.12-2-gc4ccff1.mod1/misc/sys/cdefs.h ---- glibc-2.12-2-gc4ccff1.orig/misc/sys/cdefs.h 2015-02-18 04:42:12.115187116 -0500 -+++ glibc-2.12-2-gc4ccff1.mod1/misc/sys/cdefs.h 2015-02-18 04:02:03.635159090 -0500 -@@ -362,6 +362,14 @@ - # endif - #endif - -+#if __GNUC__ >= 3 -+# define __glibc_unlikely(cond) __builtin_expect ((cond), 0) -+# define __glibc_likely(cond) __builtin_expect ((cond), 1) -+#else -+# define __glibc_unlikely(cond) (cond) -+# define __glibc_likely(cond) (cond) -+#endif -+ - #include - - #if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH -diff -urN glibc-2.12-2-gc4ccff1.orig/nscd/cache.c glibc-2.12-2-gc4ccff1.mod1/nscd/cache.c ---- glibc-2.12-2-gc4ccff1.orig/nscd/cache.c 2015-02-18 04:42:12.329180362 -0500 -+++ glibc-2.12-2-gc4ccff1.mod1/nscd/cache.c 2015-02-18 04:02:03.635159090 -0500 -@@ -266,29 +266,52 @@ - - /* If we check for the modification of the underlying file we invalidate - the entries also in this case. */ -- if (table->inotify_descr < 0 && table->check_file && now != LONG_MAX) -+ if (table->check_file && now != LONG_MAX) - { -- struct stat64 st; -+ struct traced_file *runp = table->traced_files; - -- if (stat64 (table->filename, &st) < 0) -+ while (runp != NULL) - { -- char buf[128]; -- /* We cannot stat() the file, disable file checking if the -- file does not exist. */ -- dbg_log (_("cannot stat() file `%s': %s"), -- table->filename, strerror_r (errno, buf, sizeof (buf))); -- if (errno == ENOENT) -- table->check_file = 0; -- } -- else -- { -- if (st.st_mtime != table->file_mtime) -+#ifdef HAVE_INOTIFY -+ if (runp->inotify_descr[TRACED_FILE] == -1) -+#endif - { -- /* The file changed. Invalidate all entries. */ -- now = LONG_MAX; -- table->file_mtime = st.st_mtime; -+ struct stat64 st; -+ -+ if (stat64 (runp->fname, &st) < 0) -+ { -+ /* Print a diagnostic that the traced file was missing. -+ We must not disable tracing since the file might return -+ shortly and we want to reload it at the next pruning. -+ Disabling tracing here would go against the configuration -+ as specified by the user via check-files. */ -+ char buf[128]; -+ dbg_log (_("checking for monitored file `%s': %s"), -+ runp->fname, strerror_r (errno, buf, sizeof (buf))); -+ } -+ else -+ { -+ /* This must be `!=` to catch cases where users turn the -+ clocks back and we still want to detect any time difference -+ in mtime. */ -+ if (st.st_mtime != runp->mtime) -+ { -+ dbg_log (_("monitored file `%s` changed (mtime)"), -+ runp->fname); -+ /* The file changed. Invalidate all entries. */ -+ now = LONG_MAX; -+ runp->mtime = st.st_mtime; -+#ifdef HAVE_INOTIFY -+ /* Attempt to install a watch on the file. */ -+ install_watches (runp); -+#endif -+ } -+ } - } -+ -+ runp = runp->next; - } -+ - } - - /* We run through the table and find values which are not valid anymore. -diff -urN glibc-2.12-2-gc4ccff1.orig/nscd/connections.c glibc-2.12-2-gc4ccff1.mod1/nscd/connections.c ---- glibc-2.12-2-gc4ccff1.orig/nscd/connections.c 2015-02-18 04:42:12.333180236 -0500 -+++ glibc-2.12-2-gc4ccff1.mod1/nscd/connections.c 2015-02-18 04:40:51.674726008 -0500 -@@ -74,6 +74,25 @@ - static void begin_drop_privileges (void); - static void finish_drop_privileges (void); - -+/* Define the traced files. */ -+#define PWD_FILENAME "/etc/passwd" -+define_traced_file (pwd, PWD_FILENAME); -+ -+#define GRP_FILENAME "/etc/group" -+define_traced_file (grp, GRP_FILENAME); -+ -+#define HST_FILENAME "/etc/hosts" -+define_traced_file (hst, HST_FILENAME); -+ -+#define RESOLV_FILENAME "/etc/resolv.conf" -+define_traced_file (resolv, RESOLV_FILENAME); -+ -+#define SERV_FILENAME "/etc/services" -+define_traced_file (serv, SERV_FILENAME); -+ -+#define NETGR_FILENAME "/etc/netgroup" -+define_traced_file (netgr, NETGR_FILENAME); -+ - /* Map request type to a string. */ - const char *const serv2str[LASTREQ] = - { -@@ -115,8 +134,6 @@ - .shared = 0, - .max_db_size = DEFAULT_MAX_DB_SIZE, - .suggested_module = DEFAULT_SUGGESTED_MODULE, -- .reset_res = 0, -- .filename = "/etc/passwd", - .db_filename = _PATH_NSCD_PASSWD_DB, - .disabled_iov = &pwd_iov_disabled, - .postimeout = 3600, -@@ -136,8 +153,6 @@ - .shared = 0, - .max_db_size = DEFAULT_MAX_DB_SIZE, - .suggested_module = DEFAULT_SUGGESTED_MODULE, -- .reset_res = 0, -- .filename = "/etc/group", - .db_filename = _PATH_NSCD_GROUP_DB, - .disabled_iov = &grp_iov_disabled, - .postimeout = 3600, -@@ -157,8 +172,6 @@ - .shared = 0, - .max_db_size = DEFAULT_MAX_DB_SIZE, - .suggested_module = DEFAULT_SUGGESTED_MODULE, -- .reset_res = 1, -- .filename = "/etc/hosts", - .db_filename = _PATH_NSCD_HOSTS_DB, - .disabled_iov = &hst_iov_disabled, - .postimeout = 3600, -@@ -178,8 +191,6 @@ - .shared = 0, - .max_db_size = DEFAULT_MAX_DB_SIZE, - .suggested_module = DEFAULT_SUGGESTED_MODULE, -- .reset_res = 0, -- .filename = "/etc/services", - .db_filename = _PATH_NSCD_SERVICES_DB, - .disabled_iov = &serv_iov_disabled, - .postimeout = 28800, -@@ -199,8 +210,6 @@ - .shared = 0, - .max_db_size = DEFAULT_MAX_DB_SIZE, - .suggested_module = DEFAULT_SUGGESTED_MODULE, -- .reset_res = 0, -- .filename = "/etc/netgroup", - .db_filename = _PATH_NSCD_NETGROUP_DB, - .disabled_iov = &netgroup_iov_disabled, - .postimeout = 28800, -@@ -863,41 +872,26 @@ - dbs[cnt].shared = 0; - assert (dbs[cnt].ro_fd == -1); - } -+ } - -- dbs[cnt].inotify_descr = -1; -- if (dbs[cnt].check_file) -- { --#ifdef HAVE_INOTIFY -- if (inotify_fd < 0 -- || (dbs[cnt].inotify_descr -- = inotify_add_watch (inotify_fd, dbs[cnt].filename, -- IN_DELETE_SELF | IN_MODIFY)) < 0) -- /* We cannot notice changes in the main thread. */ --#endif -- { -- /* We need the modification date of the file. */ -- struct stat64 st; -+ /* Initialize and register the traced files. */ -+ init_traced_file (&pwd_traced_file.file, PWD_FILENAME, 0); -+ register_traced_file (pwddb, &pwd_traced_file.file); - -- if (stat64 (dbs[cnt].filename, &st) < 0) -- { -- /* We cannot stat() the file, disable file checking. */ -- dbg_log (_("cannot stat() file `%s': %s"), -- dbs[cnt].filename, strerror (errno)); -- dbs[cnt].check_file = 0; -- } -- else -- dbs[cnt].file_mtime = st.st_mtime; -- } -- } -+ init_traced_file (&grp_traced_file.file, GRP_FILENAME, 0); -+ register_traced_file (grpdb, &grp_traced_file.file); - --#ifdef HAVE_INOTIFY -- if (cnt == hstdb && inotify_fd >= -1) -- /* We also monitor the resolver configuration file. */ -- resolv_conf_descr = inotify_add_watch (inotify_fd, -- _PATH_RESCONF, -- IN_DELETE_SELF | IN_MODIFY); --#endif -- } -+ init_traced_file (&hst_traced_file.file, HST_FILENAME, 0); -+ register_traced_file (hstdb, &hst_traced_file.file); -+ -+ init_traced_file (&resolv_traced_file.file, RESOLV_FILENAME, 1); -+ register_traced_file (hstdb, &resolv_traced_file.file); -+ -+ init_traced_file (&serv_traced_file.file, SERV_FILENAME, 0); -+ register_traced_file (servdb, &serv_traced_file.file); -+ -+ init_traced_file (&netgr_traced_file.file, NETGR_FILENAME, 0); -+ register_traced_file (netgrdb, &netgr_traced_file.file); - - /* Create the socket. */ - #ifndef __ASSUME_SOCK_CLOEXEC -@@ -968,6 +962,92 @@ - finish_drop_privileges (); - } - -+#ifdef HAVE_INOTIFY -+#define TRACED_FILE_MASK (IN_DELETE_SELF | IN_CLOSE_WRITE | IN_MOVE_SELF) -+#define TRACED_DIR_MASK (IN_DELETE_SELF | IN_CREATE | IN_MOVED_TO | IN_MOVE_SELF) -+void -+install_watches (struct traced_file *finfo) -+{ -+ /* If we have inotify support use it exclusively with no fallback -+ to stat. This is a design decision to make the implementation -+ sipmler. Either we use fstat for the file name or we use inotify -+ for both the file and parent directory. */ -+ if (finfo->inotify_descr[TRACED_FILE] < 0) -+ finfo->inotify_descr[TRACED_FILE] = inotify_add_watch (inotify_fd, -+ finfo->fname, -+ TRACED_FILE_MASK); -+ if (finfo->inotify_descr[TRACED_FILE] < 0) -+ { -+ dbg_log (_("disabled inotify-based monitoring for file `%s': %s"), -+ finfo->fname, strerror (errno)); -+ return; -+ } -+ dbg_log (_("monitoring file `%s` (%d)"), -+ finfo->fname, finfo->inotify_descr[TRACED_FILE]); -+ /* Additionally listen for IN_CREATE events in the files parent -+ directory. We do this because the file to be watched might be -+ deleted and then added back again. When it is added back again -+ we must re-add the watch. We must also cover IN_MOVED_TO to -+ detect a file being moved into the directory. */ -+ if (finfo->inotify_descr[TRACED_DIR] < 0) -+ finfo->inotify_descr[TRACED_DIR] = inotify_add_watch (inotify_fd, -+ finfo->dname, -+ TRACED_DIR_MASK); -+ if (finfo->inotify_descr[TRACED_DIR] < 0) -+ { -+ dbg_log (_("disabled inotify-based monitoring for directory `%s': %s"), -+ finfo->fname, strerror (errno)); -+ return; -+ } -+ dbg_log (_("monitoring directory `%s` (%d)"), -+ finfo->dname, finfo->inotify_descr[TRACED_DIR]); -+} -+#endif -+ -+/* Register the file in FINFO as a traced file for the database DBS[DBIX]. -+ -+ We support registering multiple files per database. Each call to -+ register_traced_file adds to the list of registered files. -+ -+ When we prune the database, either through timeout or a request to -+ invalidate, we will check to see if any of the registered files has changed. -+ When we accept new connections to handle a cache request we will also -+ check to see if any of the registered files has changed. -+ -+ If we have inotify support then we install an inotify fd to notify us of -+ file deletion or modification, both of which will require we invalidate -+ the cache for the database. Without inotify support we stat the file and -+ store st_mtime to determine if the file has been modified. */ -+void -+register_traced_file (size_t dbidx, struct traced_file *finfo) -+{ -+ /* If the database is disabled or file checking is disabled -+ then ignore the registration. */ -+ if (! dbs[dbidx].enabled || ! dbs[dbidx].check_file) -+ return; -+ -+ if (__glibc_unlikely (debug_level > 0)) -+ dbg_log (_("monitoring file %s for database %s"), -+ finfo->fname, dbnames[dbidx]); -+ -+#ifdef HAVE_INOTIFY -+ install_watches (finfo); -+#endif -+ struct stat64 st; -+ if (stat64 (finfo->fname, &st) < 0) -+ { -+ /* We cannot stat() the file, disable file checking. */ -+ dbg_log (_("disabled monitoring for file `%s': %s"), -+ finfo->fname, strerror (errno)); -+ finfo->mtime = 0; -+ } -+ else -+ finfo->mtime = st.st_mtime; -+ -+ /* Queue up the file name. */ -+ finfo->next = dbs[dbidx].traced_files; -+ dbs[dbidx].traced_files = finfo; -+} - - /* Close the connections. */ - void -@@ -986,9 +1066,25 @@ - for (number = pwddb; number < lastdb; ++number) - if (strcmp (key, dbnames[number]) == 0) - { -- if (dbs[number].reset_res) -- res_init (); -- -+ struct traced_file *runp = dbs[number].traced_files; -+ while (runp != NULL) -+ { -+ /* Make sure we reload from file when checking mtime. */ -+ runp->mtime = 0; -+#ifdef HAVE_INOTIFY -+ /* During an invalidation we try to reload the traced -+ file watches. This allows the user to re-sync if -+ inotify events were lost. Similar to what we do during -+ pruning. */ -+ install_watches (runp); -+#endif -+ if (runp->call_res_init) -+ { -+ res_init (); -+ break; -+ } -+ runp = runp->next; -+ } - break; - } - -@@ -1817,6 +1913,231 @@ - /* Array for times a connection was accepted. */ - static time_t *starttime; - -+#ifdef HAVE_INOTIFY -+/* Inotify event for changed file. */ -+union __inev -+{ -+ struct inotify_event i; -+# ifndef PATH_MAX -+# define PATH_MAX 1024 -+# endif -+ char buf[sizeof (struct inotify_event) + PATH_MAX]; -+}; -+ -+/* Returns 0 if the file is there and matches the last mtime -+ on record, otherwise -1. */ -+int -+check_file (struct traced_file *finfo) -+{ -+ struct stat64 st; -+ if (stat64 (finfo->fname, &st) < 0) -+ return -1; -+ return 0; -+} -+ -+/* Process the inotify event in INEV. If the event matches any of the files -+ registered with a database then mark that database as requiring its cache -+ to be cleared. We indicate the cache needs clearing by setting -+ TO_CLEAR[DBCNT] to true for the matching database. */ -+static void -+inotify_check_files (bool *to_clear, union __inev *inev) -+{ -+ /* Check which of the files changed. */ -+ for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt) -+ { -+ struct traced_file *finfo = dbs[dbcnt].traced_files; -+ -+ while (finfo != NULL) -+ { -+ /* The configuration file was moved or deleted. -+ We stop watching it at that point, and reinitialize. */ -+ if (finfo->inotify_descr[TRACED_FILE] == inev->i.wd -+ && ((inev->i.mask & IN_MOVE_SELF) -+ || (inev->i.mask & IN_DELETE_SELF) -+ || (inev->i.mask & IN_IGNORED))) -+ { -+ int ret; -+ bool moved = (inev->i.mask & IN_MOVE_SELF) != 0; -+ -+ if (check_file (finfo) == 0) -+ { -+ dbg_log (_("ignored out of order inotify event for `%s`"), -+ finfo->fname); -+ return; -+ } -+ -+ dbg_log (_("monitored file `%s` was %s, removing watch"), -+ finfo->fname, moved ? "moved" : "deleted"); -+ /* File was moved out, remove the watch. Watches are -+ automatically removed when the file is deleted. */ -+ if (moved) -+ { -+ ret = inotify_rm_watch (inotify_fd, inev->i.wd); -+ if (ret < 0) -+ dbg_log (_("failed to remove file watch `%s`: %s"), -+ finfo->fname, strerror (errno)); -+ } -+ finfo->inotify_descr[TRACED_FILE] = -1; -+ to_clear[dbcnt] = true; -+ if (finfo->call_res_init) -+ res_init (); -+ return; -+ } -+ /* The configuration file was open for writing and has just closed. -+ We reset the cache and reinitialize. */ -+ if (finfo->inotify_descr[TRACED_FILE] == inev->i.wd -+ && inev->i.mask & IN_CLOSE_WRITE) -+ { -+ /* Mark cache as needing to be cleared and reinitialize. */ -+ dbg_log (_("monitored file `%s` was written to"), finfo->fname); -+ to_clear[dbcnt] = true; -+ if (finfo->call_res_init) -+ res_init (); -+ return; -+ } -+ /* The parent directory was moved or deleted. There is no coming -+ back from this. We do not track the parent of the parent, and -+ once this happens we trigger one last invalidation. You must -+ restart nscd to track subsequent changes. We track this to -+ do one last robust re-initialization and then we're done. */ -+ if (finfo->inotify_descr[TRACED_DIR] == inev->i.wd -+ && ((inev->i.mask & IN_DELETE_SELF) -+ || (inev->i.mask & IN_MOVE_SELF) -+ || (inev->i.mask & IN_IGNORED))) -+ { -+ bool moved = (inev->i.mask & IN_MOVE_SELF) != 0; -+ /* The directory watch may have already been removed -+ but we don't know so we just remove it again and -+ ignore the error. Then we remove the file watch. -+ Note: watches are automatically removed for deleted -+ files. */ -+ if (moved) -+ inotify_rm_watch (inotify_fd, inev->i.wd); -+ if (finfo->inotify_descr[TRACED_FILE] != -1) -+ { -+ dbg_log (_("monitored parent directory `%s` was %s, removing watch on `%s`"), -+ finfo->dname, moved ? "moved" : "deleted", finfo->fname); -+ if (inotify_rm_watch (inotify_fd, finfo->inotify_descr[TRACED_FILE]) < 0) -+ dbg_log (_("failed to remove file watch `%s`: %s"), -+ finfo->dname, strerror (errno)); -+ } -+ finfo->inotify_descr[TRACED_FILE] = -1; -+ finfo->inotify_descr[TRACED_DIR] = -1; -+ to_clear[dbcnt] = true; -+ if (finfo->call_res_init) -+ res_init (); -+ /* Continue to the next entry since this might be the -+ parent directory for multiple registered files and -+ we want to remove watches for all registered files. */ -+ continue; -+ } -+ /* The parent directory had a create or moved to event. */ -+ if (finfo->inotify_descr[TRACED_DIR] == inev->i.wd -+ && ((inev->i.mask & IN_MOVED_TO) -+ || (inev->i.mask & IN_CREATE)) -+ && strcmp (inev->i.name, finfo->sfname) == 0) -+ { -+ /* We detected a directory change. We look for the creation -+ of the file we are tracking or the move of the same file -+ into the directory. */ -+ int ret; -+ dbg_log (_("monitored file `%s` was %s, adding watch"), -+ finfo->fname, -+ inev->i.mask & IN_CREATE ? "created" : "moved into place"); -+ /* File was moved in or created. Regenerate the watch. */ -+ if (finfo->inotify_descr[TRACED_FILE] != -1) -+ inotify_rm_watch (inotify_fd, -+ finfo->inotify_descr[TRACED_FILE]); -+ -+ ret = inotify_add_watch (inotify_fd, -+ finfo->fname, -+ TRACED_FILE_MASK); -+ if (ret < 0) -+ dbg_log (_("failed to add file watch `%s`: %s"), -+ finfo->fname, strerror (errno)); -+ -+ finfo->inotify_descr[TRACED_FILE] = ret; -+ -+ /* The file is new or moved so mark cache as needing to -+ be cleared and reinitialize. */ -+ to_clear[dbcnt] = true; -+ if (finfo->call_res_init) -+ res_init (); -+ -+ /* Done re-adding the watch. Don't return, we may still -+ have other files in this same directory, same watch -+ descriptor, and need to process them. */ -+ } -+ /* Other events are ignored, and we move on to the next file. */ -+ finfo = finfo->next; -+ } -+ } -+} -+ -+/* If an entry in the array of booleans TO_CLEAR is TRUE then clear the cache -+ for the associated database, otherwise do nothing. The TO_CLEAR array must -+ have LASTDB entries. */ -+static inline void -+clear_db_cache (bool *to_clear) -+{ -+ for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt) -+ if (to_clear[dbcnt]) -+ { -+ pthread_mutex_lock (&dbs[dbcnt].prune_lock); -+ dbs[dbcnt].clear_cache = 1; -+ pthread_mutex_unlock (&dbs[dbcnt].prune_lock); -+ pthread_cond_signal (&dbs[dbcnt].prune_cond); -+ } -+} -+ -+int -+handle_inotify_events (void) -+{ -+ bool to_clear[lastdb] = { false, }; -+ union __inev inev; -+ -+ /* Read all inotify events for files registered via -+ register_traced_file(). */ -+ while (1) -+ { -+ /* Potentially read multiple events into buf. */ -+ ssize_t nb = TEMP_FAILURE_RETRY (read (inotify_fd, -+ &inev.buf, -+ sizeof (inev))); -+ if (nb < (ssize_t) sizeof (struct inotify_event)) -+ { -+ /* Not even 1 event. */ -+ if (__glibc_unlikely (nb == -1 && errno != EAGAIN)) -+ return -1; -+ /* Done reading events that are ready. */ -+ break; -+ } -+ /* Process all events. The normal inotify interface delivers -+ complete events on a read and never a partial event. */ -+ char *eptr = &inev.buf[0]; -+ ssize_t count; -+ while (1) -+ { -+ /* Check which of the files changed. */ -+ inotify_check_files (to_clear, &inev); -+ count = sizeof (struct inotify_event) + inev.i.len; -+ eptr += count; -+ nb -= count; -+ if (nb >= (ssize_t) sizeof (struct inotify_event)) -+ memcpy (&inev, eptr, nb); -+ else -+ break; -+ } -+ continue; -+ } -+ /* Actually perform the cache clearing. */ -+ clear_db_cache (to_clear); -+ return 0; -+} -+ -+ -+#endif -+ - - static void - __attribute__ ((__noreturn__)) -@@ -1910,66 +2231,21 @@ - { - if (conns[1].revents != 0) - { -- bool to_clear[lastdb] = { false, }; -- union -- { --# ifndef PATH_MAX --# define PATH_MAX 1024 --# endif -- struct inotify_event i; -- char buf[sizeof (struct inotify_event) + PATH_MAX]; -- } inev; -+ int ret; -+ ret = handle_inotify_events (); - -- while (1) -+ if (ret == -1) - { -- ssize_t nb = TEMP_FAILURE_RETRY (read (inotify_fd, &inev, -- sizeof (inev))); -- if (nb < (ssize_t) sizeof (struct inotify_event)) -- { -- if (__builtin_expect (nb == -1 && errno != EAGAIN, -- 0)) -- { -- /* Something went wrong when reading the inotify -- data. Better disable inotify. */ -- dbg_log (_("\ --disabled inotify after read error %d"), -- errno); -- conns[1].fd = -1; -- firstfree = 1; -- if (nused == 2) -- nused = 1; -- close (inotify_fd); -- inotify_fd = -1; -- } -- break; -- } -- -- /* Check which of the files changed. */ -- for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt) -- if (inev.i.wd == dbs[dbcnt].inotify_descr) -- { -- to_clear[dbcnt] = true; -- goto next; -- } -- -- if (inev.i.wd == resolv_conf_descr) -- { -- res_init (); -- to_clear[hstdb] = true; -- } -- next:; -+ /* Something went wrong when reading the inotify -+ data. Better disable inotify. */ -+ dbg_log (_("disabled inotify-based monitoring after read error %d"), errno); -+ conns[1].fd = -1; -+ firstfree = 1; -+ if (nused == 2) -+ nused = 1; -+ close (inotify_fd); -+ inotify_fd = -1; - } -- -- /* Actually perform the cache clearing. */ -- for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt) -- if (to_clear[dbcnt]) -- { -- pthread_mutex_lock (&dbs[dbcnt].prune_lock); -- dbs[dbcnt].clear_cache = 1; -- pthread_mutex_unlock (&dbs[dbcnt].prune_lock); -- pthread_cond_signal (&dbs[dbcnt].prune_cond); -- } -- - --n; - } - -@@ -2112,58 +2388,18 @@ - # ifdef HAVE_INOTIFY - else if (revs[cnt].data.fd == inotify_fd) - { -- bool to_clear[lastdb] = { false, }; -- union -- { -- struct inotify_event i; -- char buf[sizeof (struct inotify_event) + PATH_MAX]; -- } inev; -- -- while (1) -+ int ret; -+ ret = handle_inotify_events (); -+ if (ret == -1) - { -- ssize_t nb = TEMP_FAILURE_RETRY (read (inotify_fd, &inev, -- sizeof (inev))); -- if (nb < (ssize_t) sizeof (struct inotify_event)) -- { -- if (__builtin_expect (nb == -1 && errno != EAGAIN, 0)) -- { -- /* Something went wrong when reading the inotify -- data. Better disable inotify. */ -- dbg_log (_("disabled inotify after read error %d"), -- errno); -- (void) epoll_ctl (efd, EPOLL_CTL_DEL, inotify_fd, -- NULL); -- close (inotify_fd); -- inotify_fd = -1; -- } -- break; -- } -- -- /* Check which of the files changed. */ -- for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt) -- if (inev.i.wd == dbs[dbcnt].inotify_descr) -- { -- to_clear[dbcnt] = true; -- goto next; -- } -- -- if (inev.i.wd == resolv_conf_descr) -- { -- res_init (); -- to_clear[hstdb] = true; -- } -- next:; -+ /* Something went wrong when reading the inotify -+ data. Better disable inotify. */ -+ dbg_log (_("disabled inotify-based monitoring after read error %d"), errno); -+ (void) epoll_ctl (efd, EPOLL_CTL_DEL, inotify_fd, NULL); -+ close (inotify_fd); -+ inotify_fd = -1; -+ break; - } -- -- /* Actually perform the cache clearing. */ -- for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt) -- if (to_clear[dbcnt]) -- { -- pthread_mutex_lock (&dbs[dbcnt].prune_lock); -- dbs[dbcnt].clear_cache = 1; -- pthread_mutex_unlock (&dbs[dbcnt].prune_lock); -- pthread_cond_signal (&dbs[dbcnt].prune_cond); -- } - } - # endif - else -diff -urN glibc-2.12-2-gc4ccff1.orig/nscd/nscd.h glibc-2.12-2-gc4ccff1.mod1/nscd/nscd.h ---- glibc-2.12-2-gc4ccff1.orig/nscd/nscd.h 2015-02-18 04:42:12.329180362 -0500 -+++ glibc-2.12-2-gc4ccff1.mod1/nscd/nscd.h 2015-02-18 04:02:03.636159059 -0500 -@@ -62,6 +62,67 @@ - 80% of the thread stack size. */ - #define MAX_STACK_USE ((8 * NSCD_THREAD_STACKSIZE) / 10) - -+/* Records the file registered per database that when changed -+ or modified requires invalidating the database. */ -+struct traced_file -+{ -+ /* Tracks the last modified time of the traced file. */ -+ time_t mtime; -+ /* Support multiple registered files per database. */ -+ struct traced_file *next; -+ int call_res_init; -+ /* Requires Inotify support to do anything useful. */ -+#define TRACED_FILE 0 -+#define TRACED_DIR 1 -+ int inotify_descr[2]; -+# ifndef PATH_MAX -+# define PATH_MAX 1024 -+# endif -+ /* The parent directory is used to scan for creation/deletion. */ -+ char dname[PATH_MAX]; -+ /* Just the name of the file with no directory component. */ -+ char *sfname; -+ /* The full-path name of the registered file. */ -+ char fname[]; -+}; -+ -+/* Initialize a `struct traced_file`. As input we need the name -+ of the file, and if invalidation requires calling res_init. -+ If CRINIT is 1 then res_init will be called after invalidation -+ or if the traced file is changed in any way, otherwise it will -+ not. */ -+static inline void -+init_traced_file(struct traced_file *file, const char *fname, int crinit) -+{ -+ char *dname; -+ file->mtime = 0; -+ file->inotify_descr[TRACED_FILE] = -1; -+ file->inotify_descr[TRACED_DIR] = -1; -+ strcpy (file->fname, fname); -+ /* Compute the parent directory name and store a copy. The copy makes -+ it much faster to add/remove watches while nscd is running instead -+ of computing this over and over again in a temp buffer. */ -+ file->dname[0] = '\0'; -+ dname = strrchr (fname, '/'); -+ if (dname != NULL) -+ { -+ size_t len = (size_t)(dname - fname); -+ if (len > sizeof (file->dname)) -+ abort (); -+ strncpy (file->dname, file->fname, len); -+ file->dname[len] = '\0'; -+ } -+ /* The basename is the name just after the last forward slash. */ -+ file->sfname = &dname[1]; -+ file->call_res_init = crinit; -+} -+ -+#define define_traced_file(id, filename) \ -+static union \ -+{ \ -+ struct traced_file file; \ -+ char buf[sizeof (struct traced_file) + sizeof (filename)]; \ -+} id##_traced_file; - - /* Structure describing dynamic part of one database. */ - struct database_dyn -@@ -74,15 +135,12 @@ - - int enabled; - int check_file; -- int inotify_descr; - int clear_cache; - int persistent; - int shared; - int propagate; -- int reset_res; -- const char filename[16]; -+ struct traced_file *traced_files; - const char *db_filename; -- time_t file_mtime; - size_t suggested_module; - size_t max_db_size; - -@@ -199,6 +257,10 @@ - - /* connections.c */ - extern void nscd_init (void); -+extern void register_traced_file (size_t dbidx, struct traced_file *finfo); -+#ifdef HAVE_INOTIFY -+extern void install_watches (struct traced_file *finfo); -+#endif - extern void close_sockets (void); - extern void start_threads (void) __attribute__ ((__noreturn__)); diff --git a/src/patches/glibc/glibc-rh861167.patch b/src/patches/glibc/glibc-rh861167.patch deleted file mode 100644 index d7e982f75d..0000000000 --- a/src/patches/glibc/glibc-rh861167.patch +++ /dev/null @@ -1,86 +0,0 @@ -commit be08eda54c7cf833ccfa4b8d1f1b1d668c26af66 -Author: Andreas Jaeger -Date: Wed May 23 09:27:39 2012 +0200 - - Update from Linux 3.4 - -[ Partial, unrelated bits not included. ] - -2012-05-23 Andreas Jaeger - - * sysdeps/unix/sysv/linux/powerpc/bits/mman.h - (MADV_DONTDUMP,MADV_DODUMP): New macros from Linux 3.4. - macro. - * sysdeps/unix/sysv/linux/s390/bits/mman.h - (MADV_DONTDUMP,MADV_DODUMP): Likewise. - * sysdeps/unix/sysv/linux/i386/bits/mman.h - (MADV_DONTDUMP,MADV_DODUMP): Likewise. - * sysdeps/unix/sysv/linux/x86_64/bits/mman.h - (MADV_DONTDUMP,MADV_DODUMP): Likewise. - -diff -Nrup a/sysdeps/unix/sysv/linux/i386/bits/mman.h b/sysdeps/unix/sysv/linux/i386/bits/mman.h ---- a/sysdeps/unix/sysv/linux/i386/bits/mman.h 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/unix/sysv/linux/i386/bits/mman.h 2012-09-27 11:44:26.985150148 -0600 -@@ -1,5 +1,5 @@ - /* Definitions for POSIX memory map interface. Linux/i386 version. -- Copyright (C) 1997,2000,2003,2005,2006,2009 Free Software Foundation, Inc. -+ Copyright (C) 1997-2012 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or -@@ -94,6 +94,9 @@ - # define MADV_DOFORK 11 /* Do inherit across fork. */ - # define MADV_MERGEABLE 12 /* KSM may merge identical pages. */ - # define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages. */ -+# define MADV_DONTDUMP 16 /* Explicity exclude from the core dump, -+ overrides the coredump filter bits. */ -+# define MADV_DODUMP 17 /* Clear the MADV_DONTDUMP flag. */ - # define MADV_HWPOISON 100 /* Poison a page for testing. */ - #endif - -diff -Nrup a/sysdeps/unix/sysv/linux/powerpc/bits/mman.h b/sysdeps/unix/sysv/linux/powerpc/bits/mman.h ---- a/sysdeps/unix/sysv/linux/powerpc/bits/mman.h 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/unix/sysv/linux/powerpc/bits/mman.h 2012-09-27 11:43:37.161351259 -0600 -@@ -96,6 +96,9 @@ - # define MADV_DOFORK 11 /* Do inherit across fork. */ - # define MADV_MERGEABLE 12 /* KSM may merge identical pages. */ - # define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages. */ -+# define MADV_DONTDUMP 16 /* Explicity exclude from the core dump, -+ overrides the coredump filter bits. */ -+# define MADV_DODUMP 17 /* Clear the MADV_DONTDUMP flag. */ - # define MADV_HWPOISON 100 /* Poison a page for testing. */ - #endif - -diff -Nrup a/sysdeps/unix/sysv/linux/s390/bits/mman.h b/sysdeps/unix/sysv/linux/s390/bits/mman.h ---- a/sysdeps/unix/sysv/linux/s390/bits/mman.h 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/unix/sysv/linux/s390/bits/mman.h 2012-09-27 11:44:49.745059646 -0600 -@@ -94,6 +94,9 @@ - # define MADV_DOFORK 11 /* Do inherit across fork. */ - # define MADV_MERGEABLE 12 /* KSM may merge identical pages. */ - # define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages. */ -+# define MADV_DONTDUMP 16 /* Explicity exclude from the core dump, -+ overrides the coredump filter bits. */ -+# define MADV_DODUMP 17 /* Clear the MADV_DONTDUMP flag. */ - # define MADV_HWPOISON 100 /* Poison a page for testing. */ - #endif - -diff -Nrup a/sysdeps/unix/sysv/linux/x86_64/bits/mman.h b/sysdeps/unix/sysv/linux/x86_64/bits/mman.h ---- a/sysdeps/unix/sysv/linux/x86_64/bits/mman.h 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/unix/sysv/linux/x86_64/bits/mman.h 2012-09-27 11:42:08.314725733 -0600 -@@ -1,5 +1,5 @@ - /* Definitions for POSIX memory map interface. Linux/x86_64 version. -- Copyright (C) 2001, 2003, 2005, 2006, 2009 Free Software Foundation, Inc. -+ Copyright (C) 2001-2012 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or -@@ -95,6 +95,9 @@ - # define MADV_DOFORK 11 /* Do inherit across fork. */ - # define MADV_MERGEABLE 12 /* KSM may merge identical pages. */ - # define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages. */ -+# define MADV_DONTDUMP 16 /* Explicity exclude from the core dump, -+ overrides the coredump filter bits. */ -+# define MADV_DODUMP 17 /* Clear the MADV_DONTDUMP flag. */ - # define MADV_HWPOISON 100 /* Poison a page for testing. */ - #endif - diff --git a/src/patches/glibc/glibc-rh862094.patch b/src/patches/glibc/glibc-rh862094.patch deleted file mode 100644 index 6e7fe0af18..0000000000 --- a/src/patches/glibc/glibc-rh862094.patch +++ /dev/null @@ -1,68 +0,0 @@ -From bc5fb0374c3ce6eca92f44d13a55b066e707c4a0 Mon Sep 17 00:00:00 2001 -From: Andreas Schwab -Date: Wed, 15 Sep 2010 07:20:57 -0700 -Subject: [PATCH] Don't try to free rpath strings allocated during startup - ---- - ChangeLog | 10 ++++++++++ - elf/dl-load.c | 3 --- - elf/dl-support.c | 3 +++ - elf/rtld.c | 4 ++++ - 4 files changed, 17 insertions(+), 3 deletions(-) - - 2010-09-13 Andreas Schwab - Ulrich Drepper - - * elf/rtld.c (dl_main): Set GLRO(dl_init_all_dirs) just before - re-relocationg ld.so. - * elf/dl-support.c (_dl_non_dynamic_init): And here after the - _dl_init_paths call. - * elf/dl-load.c (_dl_init_paths). Don't set GLRO(dl_init_all_dirs) - here anymore. - -diff --git a/elf/dl-load.c b/elf/dl-load.c -index 0adddf5..a7162eb 100644 ---- a/elf/dl-load.c -+++ b/elf/dl-load.c -@@ -787,9 +787,6 @@ _dl_init_paths (const char *llp) - } - else - env_path_list.dirs = (void *) -1; -- -- /* Remember the last search directory added at startup. */ -- GLRO(dl_init_all_dirs) = GL(dl_all_dirs); - } - - -diff --git a/elf/dl-support.c b/elf/dl-support.c -index f94d2c4..5897b32 100644 ---- a/elf/dl-support.c -+++ b/elf/dl-support.c -@@ -264,6 +264,9 @@ _dl_non_dynamic_init (void) - objects. */ - _dl_init_paths (getenv ("LD_LIBRARY_PATH")); - -+ /* Remember the last search directory added at startup. */ -+ _dl_init_all_dirs = GL(dl_all_dirs); -+ - _dl_lazy = *(getenv ("LD_BIND_NOW") ?: "") == '\0'; - - _dl_bind_not = *(getenv ("LD_BIND_NOT") ?: "") != '\0'; -diff --git a/elf/rtld.c b/elf/rtld.c -index 90f3ff1..5ecc4fe 100644 ---- a/elf/rtld.c -+++ b/elf/rtld.c -@@ -2291,6 +2291,10 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", - lossage); - } - -+ /* Remember the last search directory added at startup, now that -+ malloc will no longer be the one from dl-minimal.c. */ -+ GLRO(dl_init_all_dirs) = GL(dl_all_dirs); -+ - if (! prelinked && rtld_multiple_ref) - { - /* There was an explicit ref to the dynamic linker as a shared lib. --- -1.7.1 - diff --git a/src/patches/glibc/glibc-rh863384.patch b/src/patches/glibc/glibc-rh863384.patch deleted file mode 100644 index 7644a4ed10..0000000000 --- a/src/patches/glibc/glibc-rh863384.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff -pruN glibc-2.12-2-gc4ccff1/sysdeps/posix/getaddrinfo.c glibc-2.12-2-gc4ccff1.fixed/sysdeps/posix/getaddrinfo.c ---- glibc-2.12-2-gc4ccff1/sysdeps/posix/getaddrinfo.c 2013-07-23 15:23:42.011941780 +0530 -+++ glibc-2.12-2-gc4ccff1.fixed/sysdeps/posix/getaddrinfo.c 2013-07-23 15:24:54.032938976 +0530 -@@ -562,8 +562,8 @@ gaih_inet (const char *name, const struc - - /* If we do not have to look for IPv6 addresses, use - the simple, old functions, which do not support -- IPv6 scope ids. */ -- if (req->ai_family == AF_INET) -+ IPv6 scope ids, nor retrieving the canonical name. */ -+ if (req->ai_family == AF_INET && (req->ai_flags & AI_CANONNAME) == 0) - { - /* Add room for struct host_data in resolv/nss_dns/dns-host.c */ - size_t tmpbuflen = 512 + (MAX_NR_ALIASES+MAX_NR_ADDRS+1)*sizeof(char*) diff --git a/src/patches/glibc/glibc-rh863453.patch b/src/patches/glibc/glibc-rh863453.patch deleted file mode 100644 index 96fb769a84..0000000000 --- a/src/patches/glibc/glibc-rh863453.patch +++ /dev/null @@ -1,81 +0,0 @@ ---- glibc-2.12-2-gc4ccff1/nscd/grpcache.c.lrgrpissue 2002-03-19 01:06:04.905969517 +0530 -+++ glibc-2.12-2-gc4ccff1/nscd/grpcache.c 2002-03-19 01:09:46.495970850 +0530 -@@ -207,10 +207,11 @@ cache_addgr (struct database_dyn *db, in - change. Allocate memory on the cache since it is likely - discarded anyway. If it turns out to be necessary to have a - new record we can still allocate real memory. */ -- bool dataset_in_stack_or_freed = false; -+ bool dataset_temporary = false; -+ bool dataset_malloced = false; - dataset = NULL; - -- if (he == NULL || ! __libc_use_alloca (alloca_used + total + n)) -+ if (he == NULL) - dataset = (struct dataset *) mempool_alloc (db, total + n, 1); - - if (dataset == NULL) -@@ -218,10 +219,16 @@ cache_addgr (struct database_dyn *db, in - /* We cannot permanently add the result in the moment. But - we can provide the result as is. Store the data in some - temporary memory. */ -- dataset = (struct dataset *) alloca_account (total + n, alloca_used); -- -+ if (! __libc_use_alloca (alloca_used + total + n)) -+ { -+ /* XXX What to do if malloc fails? */ -+ dataset = (struct dataset *) malloc (total + n); -+ dataset_malloced = true; -+ } -+ else -+ dataset = (struct dataset *) alloca_account (total + n, alloca_used); - /* We cannot add this record to the permanent database. */ -- dataset_in_stack_or_freed = true; -+ dataset_temporary = true; - } - - dataset->head.allocsize = total + n; -@@ -276,13 +283,10 @@ cache_addgr (struct database_dyn *db, in - dh->timeout = dataset->head.timeout; - ++dh->nreloads; - -- /* If the new record was not allocated on the stack, then it must -- be freed. Note that it can no longer be used. */ -- if (! dataset_in_stack_or_freed) -- { -- free (dataset); -- dataset_in_stack_or_freed = true; -- } -+ /* If the new record was allocated via malloc, then we -+ must free it here. */ -+ if (dataset_malloced) -+ free (dataset); - } - else - { -@@ -298,7 +302,7 @@ cache_addgr (struct database_dyn *db, in - key_copy = (char *) newp + (key_copy - (char *) dataset); - - dataset = memcpy (newp, dataset, total + n); -- dataset_in_stack_or_freed = false; -+ dataset_temporary = false; - } - - /* Mark the old record as obsolete. */ -@@ -313,7 +317,7 @@ cache_addgr (struct database_dyn *db, in - assert (fd != -1); - - #ifdef HAVE_SENDFILE -- if (__builtin_expect (db->mmap_used, 1) && !dataset_in_stack_or_freed) -+ if (__builtin_expect (db->mmap_used, 1) && ! dataset_temporary) - { - assert (db->wr_fd != -1); - assert ((char *) &dataset->resp > (char *) db->data); -@@ -340,7 +344,7 @@ cache_addgr (struct database_dyn *db, in - - /* Add the record to the database. But only if it has not been - stored on the stack. */ -- if (! dataset_in_stack_or_freed) -+ if (! dataset_temporary) - { - /* If necessary, we also propagate the data to disk. */ - if (db->persistent) diff --git a/src/patches/glibc/glibc-rh864322.patch b/src/patches/glibc/glibc-rh864322.patch deleted file mode 100644 index 565a146191..0000000000 --- a/src/patches/glibc/glibc-rh864322.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -rup a/sysdeps/generic/netinet/ip.h b/sysdeps/generic/netinet/ip.h ---- a/sysdeps/generic/netinet/ip.h 2010-05-04 05:27:23.000000000 -0600 -+++ b/sysdeps/generic/netinet/ip.h 2012-10-11 09:22:12.620160387 -0600 -@@ -194,7 +194,7 @@ struct ip_timestamp - */ - - #define IPTOS_CLASS_MASK 0xe0 --#define IPTOS_CLASS(class) ((tos) & IPTOS_CLASS_MASK) -+#define IPTOS_CLASS(class) ((class) & IPTOS_CLASS_MASK) - #define IPTOS_CLASS_CS0 0x00 - #define IPTOS_CLASS_CS1 0x20 - #define IPTOS_CLASS_CS2 0x40 diff --git a/src/patches/glibc/glibc-rh867679.patch b/src/patches/glibc/glibc-rh867679.patch deleted file mode 100644 index 3e823c86ee..0000000000 --- a/src/patches/glibc/glibc-rh867679.patch +++ /dev/null @@ -1,139 +0,0 @@ -commit 9fab36eb583c0e585e83a01253299afed9ea9a11 -Author: Siddhesh Poyarekar -Date: Tue Sep 25 14:10:29 2012 +0530 - - Shrink heap on linux when overcommit_memory == 2 - - Using madvise with MADV_DONTNEED to release memory back to the kernel - is not sufficient to change the commit charge accounted against the - process on Linux. It is OK however, when overcommit is enabled or is - heuristic. However, when overcommit is restricted to a percentage of - memory setting the contents of /proc/sys/vm/overcommit_memory as 2, it - makes a difference since memory requests will fail. Hence, we do what - we do with secure exec binaries, which is to call mmap on the region - to be dropped with MAP_FIXED. This internally unmaps the pages in - question and reduces the amount of memory accounted against the - process. - -diff --git a/malloc/arena.c b/malloc/arena.c -index f24e76c..b209e3b 100644 ---- a/malloc/arena.c -+++ b/malloc/arena.c -@@ -19,6 +19,9 @@ - - #include - -+/* Get the implementation for check_may_shrink_heap. */ -+#include -+ - /* Compile-time constants. */ - - #define HEAP_MIN_SIZE (32*1024) -@@ -621,10 +624,10 @@ shrink_heap(heap_info *h, long diff) - new_size = (long)h->size - diff; - if(new_size < (long)sizeof(*h)) - return -1; -- /* Try to re-map the extra heap space freshly to save memory, and -- make it inaccessible. */ - #ifdef _LIBC -- if (__builtin_expect (__libc_enable_secure, 0)) -+ /* Try to re-map the extra heap space freshly to save memory, and make it -+ inaccessible. See malloc-sysdep.h to know when this is true. */ -+ if (__builtin_expect (check_may_shrink_heap (), 0)) - #else - if (1) - #endif -diff --git a/sysdeps/generic/malloc-sysdep.h b/sysdeps/generic/malloc-sysdep.h -new file mode 100644 -index 0000000..bbc48c0 ---- /dev/null -+++ b/sysdeps/generic/malloc-sysdep.h -@@ -0,0 +1,25 @@ -+/* System-specific malloc support functions. Generic version. -+ Copyright (C) 2012 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+/* Force an unmap when the heap shrinks in a secure exec. This ensures that -+ the old data pages immediately cease to be accessible. */ -+static inline bool -+check_may_shrink_heap (void) -+{ -+ return __libc_enable_secure; -+} -diff --git a/sysdeps/unix/sysv/linux/malloc-sysdep.h b/sysdeps/unix/sysv/linux/malloc-sysdep.h -new file mode 100644 -index 0000000..f926aea ---- /dev/null -+++ b/sysdeps/unix/sysv/linux/malloc-sysdep.h -@@ -0,0 +1,57 @@ -+/* System-specific malloc support functions. Linux version. -+ Copyright (C) 2012 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+/* The Linux kernel overcommits address space by default and if there is not -+ enough memory available, it uses various parameters to decide the process to -+ kill. It is however possible to disable or curb this overcommit behavior -+ by setting the proc sysctl vm.overcommit_memory to the value '2' and with -+ that, a process is only allowed to use the maximum of a pre-determined -+ fraction of the total address space. In such a case, we want to make sure -+ that we are judicious with our heap usage as well, and explicitly give away -+ the freed top of the heap to reduce our commit charge. See the proc(5) man -+ page to know more about overcommit behavior. -+ -+ Other than that, we also force an unmap in a secure exec. */ -+static inline bool -+check_may_shrink_heap (void) -+{ -+ static int may_shrink_heap = -1; -+ -+ if (__builtin_expect (may_shrink_heap >= 0, 1)) -+ return may_shrink_heap; -+ -+ may_shrink_heap = __libc_enable_secure; -+ -+ if (__builtin_expect (may_shrink_heap == 0, 1)) -+ { -+ int fd = open_not_cancel_2 ("/proc/sys/vm/overcommit_memory", -+ O_RDONLY | O_CLOEXEC); -+ if (fd >= 0) -+ { -+ char val; -+ ssize_t n = read_not_cancel (fd, &val, 1); -+ may_shrink_heap = n > 0 && val == '2'; -+ close_not_cancel_no_status (fd); -+ } -+ } -+ -+ return may_shrink_heap; -+} diff --git a/src/patches/glibc/glibc-rh868808.patch b/src/patches/glibc/glibc-rh868808.patch deleted file mode 100644 index 27a10b23bc..0000000000 --- a/src/patches/glibc/glibc-rh868808.patch +++ /dev/null @@ -1,99 +0,0 @@ -From d6f67f7d833b4e2039f832355fb0edd65522c9f4 Mon Sep 17 00:00:00 2001 -From: Ulrich Drepper -Date: Sat, 14 May 2011 10:46:17 -0400 -Subject: [PATCH] Handle recursive calls in backtrace better - ---- - ChangeLog | 7 +++++++ - NEWS | 12 ++++++------ - sysdeps/ia64/backtrace.c | 27 +++++++++++++++++++++++---- - 3 files changed, 36 insertions(+), 10 deletions(-) - - 2011-05-14 Ulrich Drepper - - [BZ #12432] - * sysdeps/ia64/backtrace.c (struct trace_reg): Add cfa element. - (dummy_getcfa): New function. - (init): Get _Unwind_GetCFA address, use dummy if not found. - (backtrace_helper): In recursion check, also check whether CFA changes. - (__backtrace): Completely initialize arg. - -diff --git a/sysdeps/ia64/backtrace.c b/sysdeps/ia64/backtrace.c -index 5cefb86..d4ff291 100644 ---- a/sysdeps/ia64/backtrace.c -+++ b/sysdeps/ia64/backtrace.c -@@ -1,5 +1,5 @@ - /* Return backtrace of current program state. -- Copyright (C) 2003, 2004, 2005, 2007, 2009 Free Software Foundation, Inc. -+ Copyright (C) 2003-2005, 2007, 2009, 2011 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - -@@ -27,14 +27,26 @@ - struct trace_arg - { - void **array; -- int cnt, size; -+ _Unwind_Word cfa; -+ int cnt; -+ int size; - }; - - #ifdef SHARED - static _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *); - static _Unwind_Ptr (*unwind_getip) (struct _Unwind_Context *); -+static _Unwind_Word (*unwind_getcfa) (struct _Unwind_Context *); - static void *libgcc_handle; - -+ -+/* Dummy version in case libgcc_s does not contain the real code. */ -+static _Unwind_Word -+dummy_getcfa (struct _Unwind_Context *ctx __attribute__ ((unused))) -+{ -+ return 0; -+} -+ -+ - static void - init (void) - { -@@ -47,10 +59,13 @@ init (void) - unwind_getip = __libc_dlsym (libgcc_handle, "_Unwind_GetIP"); - if (unwind_getip == NULL) - unwind_backtrace = NULL; -+ unwind_getcfa = (__libc_dlsym (libgcc_handle, "_Unwind_GetCFA") -+ ?: dummy_getcfa); - } - #else - # define unwind_backtrace _Unwind_Backtrace - # define unwind_getip _Unwind_GetIP -+# define unwind_getcfa _Unwind_GetCFA - #endif - - static _Unwind_Reason_Code -@@ -65,8 +80,12 @@ backtrace_helper (struct _Unwind_Context *ctx, void *a) - arg->array[arg->cnt] = (void *) unwind_getip (ctx); - - /* Check whether we make any progress. */ -- if (arg->cnt > 0 && arg->array[arg->cnt - 1] == arg->array[arg->cnt]) -+ _Unwind_Word cfa = unwind_getcfa (ctx); -+ -+ if (arg->cnt > 0 && arg->array[arg->cnt - 1] == arg->array[arg->cnt] -+ && cfa == arg->cfa) - return _URC_END_OF_STACK; -+ arg->cfa = cfa; - } - if (++arg->cnt == arg->size) - return _URC_END_OF_STACK; -@@ -78,7 +97,7 @@ __backtrace (array, size) - void **array; - int size; - { -- struct trace_arg arg = { .array = array, .size = size, .cnt = -1 }; -+ struct trace_arg arg = { .array = array, .cfa = 0, .size = size, .cnt = -1 }; - #ifdef SHARED - __libc_once_define (static, once); - --- -1.7.1 - diff --git a/src/patches/glibc/glibc-rh886968.patch b/src/patches/glibc/glibc-rh886968.patch deleted file mode 100644 index 4872a91fc1..0000000000 --- a/src/patches/glibc/glibc-rh886968.patch +++ /dev/null @@ -1,33 +0,0 @@ -diff -Nrup a/elf/dl-load.c b/elf/dl-load.c ---- a/elf/dl-load.c 2013-01-10 08:57:20.098898830 -0500 -+++ b/elf/dl-load.c 2013-01-10 12:04:48.155962895 -0500 -@@ -819,7 +819,7 @@ lose (int code, int fd, const char *name - { - r->r_state = RT_CONSISTENT; - _dl_debug_state (); -- LIBC_PROBE (rtld_map_complete, 2, nsid, r); -+ LIBC_PROBE (rtld_map_complete, 3, nsid, r, NULL); - } - - _dl_signal_error (code, name, NULL, msg); -diff -Nrup a/elf/dl-open.c b/elf/dl-open.c ---- a/elf/dl-open.c 2013-01-10 08:57:19.917897417 -0500 -+++ b/elf/dl-open.c 2013-01-10 12:06:04.644775710 -0500 -@@ -298,7 +298,7 @@ dl_open_worker (void *a) - struct r_debug *r = _dl_debug_initialize (0, args->nsid); - r->r_state = RT_CONSISTENT; - _dl_debug_state (); -- LIBC_PROBE (rtld_map_complete, 2, args->nsid, r); -+ LIBC_PROBE (rtld_map_complete, 3, args->nsid, r, new); - - /* Only do lazy relocation if `LD_BIND_NOW' is not set. */ - int reloc_mode = mode & __RTLD_AUDIT; -@@ -472,7 +472,7 @@ TLS generation counter wrapped! Please - - /* Notify the debugger all new objects have been relocated. */ - if (relocation_in_progress) -- LIBC_PROBE (rtld_reloc_complete, 2, args->nsid, r); -+ LIBC_PROBE (rtld_reloc_complete, 3, args->nsid, r, new); - - /* Run the initializer functions of new objects. */ - _dl_init (new, args->argc, args->argv, args->env); diff --git a/src/patches/glibc/glibc-rh905575.patch b/src/patches/glibc/glibc-rh905575.patch deleted file mode 100644 index 70baa89314..0000000000 --- a/src/patches/glibc/glibc-rh905575.patch +++ /dev/null @@ -1,72 +0,0 @@ -diff -rup a/sysdeps/ieee754/dbl-64/slowexp.c b/sysdeps/ieee754/dbl-64/slowexp.c ---- a/sysdeps/ieee754/dbl-64/slowexp.c 2012-01-01 05:16:32.000000000 -0700 -+++ b/sysdeps/ieee754/dbl-64/slowexp.c 2012-03-13 11:57:51.225330782 -0600 -@@ -31,6 +31,8 @@ - #include "mpa.h" - #include "math_private.h" - -+#include -+ - void __mpexp(mp_no *x, mp_no *y, int p); - - /*Converting from double precision to Multi-precision and calculating e^x */ -@@ -61,12 +63,21 @@ __slowexp(double x) { - __sub(&mpy,&mpcor,&mpz,p); - __mp_dbl(&mpw, &w, p); - __mp_dbl(&mpz, &z, p); -- if (w == z) return w; -+ if (w == z) { -+ /* Track how often we get to the slow exp code plus -+ its input/output values. */ -+ LIBC_PROBE (slowexp_p6, 2, &x, &w); -+ return w; -+ } - else { /* if calculating is not exactly */ - p = 32; - __dbl_mp(x,&mpx,p); - __mpexp(&mpx, &mpy, p); - __mp_dbl(&mpy, &res, p); -+ -+ /* Track how often we get to the uber-slow exp code plus -+ its input/output values. */ -+ LIBC_PROBE (slowexp_p32, 2, &x, &res); - return res; - } - } -diff -rup a/sysdeps/ieee754/dbl-64/slowpow.c b/sysdeps/ieee754/dbl-64/slowpow.c ---- a/sysdeps/ieee754/dbl-64/slowpow.c 2012-01-01 05:16:32.000000000 -0700 -+++ b/sysdeps/ieee754/dbl-64/slowpow.c 2012-03-13 11:57:59.865284437 -0600 -@@ -35,6 +35,8 @@ - #include "mpa.h" - #include "math_private.h" - -+#include -+ - void __mpexp(mp_no *x, mp_no *y, int p); - void __mplog(mp_no *x, mp_no *y, int p); - double ulog(double); -@@ -66,7 +68,12 @@ __slowpow(double x, double y, double z) - __mp_dbl(&mpr, &res, p); - __sub(&mpp,&eps,&mpr1,p); /* pp -eps =r1 */ - __mp_dbl(&mpr1, &res1, p); /* converting into double precision */ -- if (res == res1) return res; -+ if (res == res1) { -+ /* Track how often we get to the slow pow code plus -+ its input/output values. */ -+ LIBC_PROBE (slowpow_p10, 4, &x, &y, &z, &res); -+ return res; -+ } - - p = 32; /* if we get here result wasn't calculated exactly, continue */ - __dbl_mp(x,&mpx,p); /* for more exact calculation */ -@@ -76,5 +83,10 @@ __slowpow(double x, double y, double z) - __mul(&mpy,&mpz,&mpw,p); /* y*z =w */ - __mpexp(&mpw, &mpp, p); /* e^w=pp */ - __mp_dbl(&mpp, &res, p); /* converting into double precision */ -+ -+ /* Track how often we get to the uber-slow pow code plus -+ its input/output values. */ -+ LIBC_PROBE (slowpow_p32, 4, &x, &y, &z, &res); -+ - return res; - } diff --git a/src/patches/glibc/glibc-rh905874.patch b/src/patches/glibc/glibc-rh905874.patch deleted file mode 100644 index 1d9ea109a1..0000000000 --- a/src/patches/glibc/glibc-rh905874.patch +++ /dev/null @@ -1,174 +0,0 @@ -# -# Backported from upstream. -# -# - Add en_US.UTF-8 as pre-requisite for regression test: -# -# commit 62c4a69dc2aea24776cbf0e951d41709a7408cc6 -# Author: Joseph Myers -# Date: Thu Nov 1 00:22:04 2012 +0000 -# -# Build en_US.UTF-8 locale for testing. -# -# - Fix buffer overrun: -# -# commit a445af0bc722d620afed7683cd320c0e4c7c6059 -# Author: Andreas Schwab -# Date: Tue Jan 29 14:45:15 2013 +0100 -# -# Fix buffer overrun in regexp matcher -# -# ChangeLog/ -# 2013-02-12 Andreas Schwab -# -# [BZ #15078] -# * posix/regexec.c (extend_buffers): Add parameter min_len. -# (check_matching): Pass minimum needed length. -# (clean_state_log_if_needed): Likewise. -# (get_subexp): Likewise. -# * posix/Makefile (tests): Add bug-regex34. -# (bug-regex34-ENV): Define. -# * posix/bug-regex34.c: New file. -# -diff -urN glibc-2.12-2-gc4ccff1.orig/localedata/Makefile glibc-2.12-2-gc4ccff1/localedata/Makefile ---- glibc-2.12-2-gc4ccff1.orig/localedata/Makefile 2013-07-24 20:40:37.364888120 -0400 -+++ glibc-2.12-2-gc4ccff1/localedata/Makefile 2013-07-24 20:59:54.713289753 -0400 -@@ -133,7 +133,7 @@ - ifeq (no,$(cross-compiling)) - # We have to generate locales - LOCALES := de_DE.ISO-8859-1 de_DE.UTF-8 en_US.ANSI_X3.4-1968 \ -- en_US.ISO-8859-1 ja_JP.EUC-JP da_DK.ISO-8859-1 \ -+ en_US.ISO-8859-1 en_US.UTF-8 ja_JP.EUC-JP da_DK.ISO-8859-1 \ - hr_HR.ISO-8859-2 sv_SE.ISO-8859-1 ja_JP.SJIS fr_FR.ISO-8859-1 \ - vi_VN.TCVN5712-1 nb_NO.ISO-8859-1 nn_NO.ISO-8859-1 \ - tr_TR.UTF-8 cs_CZ.UTF-8 zh_TW.EUC-TW fa_IR.UTF-8 fr_FR.UTF-8 \ -diff -urN glibc-2.12-2-gc4ccff1.orig/posix/bug-regex34.c glibc-2.12-2-gc4ccff1/posix/bug-regex34.c ---- glibc-2.12-2-gc4ccff1.orig/posix/bug-regex34.c 1969-12-31 19:00:00.000000000 -0500 -+++ glibc-2.12-2-gc4ccff1/posix/bug-regex34.c 2013-07-24 20:59:54.713289753 -0400 -@@ -0,0 +1,46 @@ -+/* Test re_search with multi-byte characters in UTF-8. -+ Copyright (C) 2013 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define _GNU_SOURCE 1 -+#include -+#include -+#include -+#include -+ -+static int -+do_test (void) -+{ -+ struct re_pattern_buffer r; -+ /* ကျွန်ုပ်x */ -+ const char *s = "\xe1\x80\x80\xe1\x80\xbb\xe1\x80\xbd\xe1\x80\x94\xe1\x80\xba\xe1\x80\xaf\xe1\x80\x95\xe1\x80\xbax"; -+ -+ if (setlocale (LC_ALL, "en_US.UTF-8") == NULL) -+ { -+ puts ("setlocale failed"); -+ return 1; -+ } -+ memset (&r, 0, sizeof (r)); -+ -+ re_compile_pattern ("[^x]x", 5, &r); -+ /* This was triggering a buffer overflow. */ -+ re_search (&r, s, strlen (s), 0, strlen (s), 0); -+ return 0; -+} -+ -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" -diff -urN glibc-2.12-2-gc4ccff1.orig/posix/Makefile glibc-2.12-2-gc4ccff1/posix/Makefile ---- glibc-2.12-2-gc4ccff1.orig/posix/Makefile 2013-07-24 20:40:37.399888098 -0400 -+++ glibc-2.12-2-gc4ccff1/posix/Makefile 2013-07-24 21:00:43.267265979 -0400 -@@ -94,7 +94,7 @@ - tst-rfc3484-3 \ - tst-getaddrinfo3 tst-fnmatch2 tst-cpucount tst-cpuset \ - bug-getopt1 bug-getopt2 bug-getopt3 bug-getopt4 \ -- bug-getopt5 -+ bug-getopt5 bug-regex34 - xtests := bug-ga2 - ifeq (yes,$(build-shared)) - test-srcs := globtest -@@ -199,6 +199,7 @@ - bug-regex25-ENV = LOCPATH=$(common-objpfx)localedata - bug-regex26-ENV = LOCPATH=$(common-objpfx)localedata - bug-regex30-ENV = LOCPATH=$(common-objpfx)localedata -+bug-regex34-ENV = LOCPATH=$(common-objpfx)localedata - tst-rxspencer-ARGS = --utf8 rxspencer/tests - tst-rxspencer-ENV = LOCPATH=$(common-objpfx)localedata - tst-pcre-ARGS = PCRE.tests -diff -urN glibc-2.12-2-gc4ccff1.orig/posix/regexec.c glibc-2.12-2-gc4ccff1/posix/regexec.c ---- glibc-2.12-2-gc4ccff1.orig/posix/regexec.c 2013-07-24 20:40:37.396888100 -0400 -+++ glibc-2.12-2-gc4ccff1/posix/regexec.c 2013-07-24 21:02:53.005156187 -0400 -@@ -198,7 +198,7 @@ - static int check_node_accept (const re_match_context_t *mctx, - const re_token_t *node, int idx) - internal_function; --static reg_errcode_t extend_buffers (re_match_context_t *mctx) -+static reg_errcode_t extend_buffers (re_match_context_t *mctx, int min_len) - internal_function; - - /* Entry point for POSIX code. */ -@@ -1160,7 +1160,7 @@ - || (BE (next_char_idx >= mctx->input.valid_len, 0) - && mctx->input.valid_len < mctx->input.len)) - { -- err = extend_buffers (mctx); -+ err = extend_buffers (mctx, next_char_idx + 1); - if (BE (err != REG_NOERROR, 0)) - { - assert (err == REG_ESPACE); -@@ -1737,7 +1737,7 @@ - && mctx->input.valid_len < mctx->input.len)) - { - reg_errcode_t err; -- err = extend_buffers (mctx); -+ err = extend_buffers (mctx, next_state_log_idx + 1); - if (BE (err != REG_NOERROR, 0)) - return err; - } -@@ -2791,7 +2791,7 @@ - if (bkref_str_off >= mctx->input.len) - break; - -- err = extend_buffers (mctx); -+ err = extend_buffers (mctx, bkref_str_off + 1); - if (BE (err != REG_NOERROR, 0)) - return err; - -@@ -4099,7 +4099,7 @@ - - static reg_errcode_t - internal_function __attribute_warn_unused_result__ --extend_buffers (re_match_context_t *mctx) -+extend_buffers (re_match_context_t *mctx, int min_len) - { - reg_errcode_t ret; - re_string_t *pstr = &mctx->input; -@@ -4108,8 +4108,10 @@ - if (BE (INT_MAX / 2 / sizeof (re_dfastate_t *) <= pstr->bufs_len, 0)) - return REG_ESPACE; - -- /* Double the lengthes of the buffers. */ -- ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2); -+ /* Double the lengthes of the buffers, but allocate at least MIN_LEN. */ -+ ret = re_string_realloc_buffers (pstr, -+ MAX (min_len, -+ MIN (pstr->len, pstr->bufs_len * 2))); - if (BE (ret != REG_NOERROR, 0)) - return ret; - diff --git a/src/patches/glibc/glibc-rh905941.patch b/src/patches/glibc/glibc-rh905941.patch deleted file mode 100644 index d5d50f25b9..0000000000 --- a/src/patches/glibc/glibc-rh905941.patch +++ /dev/null @@ -1,146 +0,0 @@ -diff -pruN a/nptl/sysdeps/pthread/unwind-forcedunwind.c b/nptl/sysdeps/pthread/unwind-forcedunwind.c ---- a/nptl/sysdeps/pthread/unwind-forcedunwind.c 2010-05-04 16:57:23.000000000 +0530 -+++ b/nptl/sysdeps/pthread/unwind-forcedunwind.c 2014-06-02 23:00:02.901013275 +0530 -@@ -45,8 +45,10 @@ pthread_cancel_init (void) - - if (__builtin_expect (libgcc_s_handle != NULL, 1)) - { -- /* Force gcc to reload all values. */ -- asm volatile ("" ::: "memory"); -+ /* Order reads so as to prevent speculation of loads -+ of libgcc_s_{resume,personality,forcedunwind,getcfa} -+ to points prior to the write barrier. */ -+ atomic_read_barrier (); - return; - } - -@@ -72,9 +74,14 @@ pthread_cancel_init (void) - libgcc_s_forcedunwind = forcedunwind; - PTR_MANGLE (getcfa); - libgcc_s_getcfa = getcfa; -- /* Make sure libgcc_s_handle is written last. Otherwise, -- pthread_cancel_init might return early even when the pointer the -- caller is interested in is not initialized yet. */ -+ /* At the point at which any thread writes the handle -+ to libgcc_s_handle, the initialization is complete. -+ The writing of libgcc_s_handle is atomic. All other -+ threads reading libgcc_s_handle do so atomically. Any -+ thread that does not execute this function must issue -+ a read barrier to ensure that all of the above has -+ actually completed and that the values of the -+ function pointers are correct. */ - atomic_write_barrier (); - libgcc_s_handle = handle; - } -@@ -91,11 +98,19 @@ __unwind_freeres (void) - } - } - --void --_Unwind_Resume (struct _Unwind_Exception *exc) -+static __always_inline void -+_maybe_pthread_cancel_init (void) - { - if (__builtin_expect (libgcc_s_handle == NULL, 0)) - pthread_cancel_init (); -+ else -+ atomic_read_barrier (); -+} -+ -+void -+_Unwind_Resume (struct _Unwind_Exception *exc) -+{ -+ _maybe_pthread_cancel_init (); - - void (*resume) (struct _Unwind_Exception *exc) = libgcc_s_resume; - PTR_DEMANGLE (resume); -@@ -108,8 +123,7 @@ __gcc_personality_v0 (int version, _Unwi - struct _Unwind_Exception *ue_header, - struct _Unwind_Context *context) - { -- if (__builtin_expect (libgcc_s_handle == NULL, 0)) -- pthread_cancel_init (); -+ _maybe_pthread_cancel_init (); - - _Unwind_Reason_Code (*personality) - (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *, -@@ -122,8 +136,7 @@ _Unwind_Reason_Code - _Unwind_ForcedUnwind (struct _Unwind_Exception *exc, _Unwind_Stop_Fn stop, - void *stop_argument) - { -- if (__builtin_expect (libgcc_s_handle == NULL, 0)) -- pthread_cancel_init (); -+ _maybe_pthread_cancel_init (); - - _Unwind_Reason_Code (*forcedunwind) - (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *) -@@ -135,8 +148,7 @@ _Unwind_ForcedUnwind (struct _Unwind_Exc - _Unwind_Word - _Unwind_GetCFA (struct _Unwind_Context *context) - { -- if (__builtin_expect (libgcc_s_handle == NULL, 0)) -- pthread_cancel_init (); -+ _maybe_pthread_cancel_init (); - - _Unwind_Word (*getcfa) (struct _Unwind_Context *) = libgcc_s_getcfa; - PTR_DEMANGLE (getcfa); -diff -pruN a/sysdeps/gnu/unwind-resume.c b/sysdeps/gnu/unwind-resume.c ---- a/sysdeps/gnu/unwind-resume.c 2010-05-04 16:57:23.000000000 +0530 -+++ b/sysdeps/gnu/unwind-resume.c 2014-06-02 23:02:26.812007078 +0530 -@@ -20,8 +20,11 @@ - #include - #include - #include -+#include -+#include - #include - -+static void *libgcc_s_handle; - static void (*libgcc_s_resume) (struct _Unwind_Exception *exc); - static _Unwind_Reason_Code (*libgcc_s_personality) - (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *, -@@ -42,13 +45,32 @@ init (void) - - libgcc_s_resume = resume; - libgcc_s_personality = personality; -+ atomic_write_barrier (); -+ /* At the point at which any thread writes the handle -+ to libgcc_s_handle, the initialization is complete. -+ The writing of libgcc_s_handle is atomic. All other -+ threads reading libgcc_s_handle do so atomically. Any -+ thread that does not execute this function must issue -+ a read barrier to ensure that all of the above has -+ actually completed and that the values of the -+ function pointers are correct. */ -+ libgcc_s_handle = handle; - } - -+static __always_inline void -+_maybe_init (void) -+{ -+ if (__builtin_expect (libgcc_s_handle == NULL, 0)) -+ init (); -+ else -+ atomic_read_barrier (); -+} -+ -+ - void - _Unwind_Resume (struct _Unwind_Exception *exc) - { -- if (__builtin_expect (libgcc_s_resume == NULL, 0)) -- init (); -+ _maybe_init (); - libgcc_s_resume (exc); - } - -@@ -58,8 +80,7 @@ __gcc_personality_v0 (int version, _Unwi - struct _Unwind_Exception *ue_header, - struct _Unwind_Context *context) - { -- if (__builtin_expect (libgcc_s_personality == NULL, 0)) -- init (); -+ _maybe_init (); - return libgcc_s_personality (version, actions, exception_class, - ue_header, context); - } diff --git a/src/patches/glibc/glibc-rh916986.patch b/src/patches/glibc/glibc-rh916986.patch deleted file mode 100644 index 9bed61f903..0000000000 --- a/src/patches/glibc/glibc-rh916986.patch +++ /dev/null @@ -1,123 +0,0 @@ -commit cf7c9078a5acdbb435498ace92cd81009637a971 -Author: Ulrich Drepper -Date: Fri Nov 19 09:35:39 2010 -0500 - - Define MAP_HUGETLB. - - * sysdeps/unix/sysv/linux/i386/bits/mman.h: Define MAP_HUGETLB. - * sysdeps/unix/sysv/linux/x86_64/bits/mman.h: Likewise. - -commit dd62fda6cc83b3afa150a4be7d273ab118bf9825 -Author: Anton Blanchard -Date: Tue Mar 27 18:37:16 2012 -0700 - - Define MAP_STACK and MAP_HUGETLB on powerpc, s390, sh and sparc. - - * sysdeps/unix/sysv/linux/powerpc/bits/mman.h: Define MAP_STACK and - MAP_HUGETLB. - * sysdeps/unix/sysv/linux/s390/bits/mman.h: Likewise. - * sysdeps/unix/sysv/linux/sh/bits/mman.h: Likewise. - * sysdeps/unix/sysv/linux/sparc/bits/mman.h: Likewise. - -commit 7e4fc5890e07549e5ad98b4244e3e0ed5c709e6a -Author: Mike Frysinger -Date: Mon Apr 16 22:44:23 2012 -0400 - - ia64: add MAP_{STACK,HUGETLB} to bits/mman.h - - Just adding new bit flags that newer kernels define. - - Signed-off-by: Mike Frysinger - - * sysdeps/unix/sysv/linux/ia64/bits/mman.h (MAP_STACK): Define. - (MAP_HUGETLB): Likewise. - -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/powerpc/bits/mman.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/powerpc/bits/mman.h 2013-07-23 04:01:42.440052942 -0300 -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/powerpc/bits/mman.h 2013-07-23 22:26:42.317789260 -0300 -@@ -65,6 +65,8 @@ - # define MAP_NORESERVE 0x00040 /* Don't check for reservations. */ - # define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ - # define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -+# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -+# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ - #endif - - /* Flags to `msync'. */ -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/s390/bits/mman.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/s390/bits/mman.h 2013-07-23 04:01:42.447052393 -0300 -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/s390/bits/mman.h 2013-07-23 22:26:42.335787833 -0300 -@@ -64,6 +64,8 @@ - # define MAP_NORESERVE 0x04000 /* Don't check for reservations. */ - # define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ - # define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -+# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -+# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ - #endif - - /* Flags to `msync'. */ -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/sh/bits/mman.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/sh/bits/mman.h 2010-05-04 08:27:23.000000000 -0300 -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/sh/bits/mman.h 2013-07-23 22:26:42.336787753 -0300 -@@ -64,6 +64,8 @@ - # define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ - # define MAP_POPULATE 0x8000 /* Populate (prefault) pagetables. */ - # define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -+# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -+# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ - #endif - - /* Flags to `msync'. */ -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/sparc/bits/mman.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/sparc/bits/mman.h 2010-05-04 08:27:23.000000000 -0300 -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/sparc/bits/mman.h 2013-07-23 22:26:42.337787674 -0300 -@@ -66,6 +66,8 @@ - # define _MAP_NEW 0x80000000 /* Binary compatibility with SunOS. */ - # define MAP_POPULATE 0x8000 /* Populate (prefault) pagetables. */ - # define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -+# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -+# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ - #endif - - /* Flags to `msync'. */ -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/i386/bits/mman.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/i386/bits/mman.h 2013-07-23 04:01:42.406055607 -0300 -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/i386/bits/mman.h 2013-07-23 22:32:37.407630135 -0300 -@@ -64,6 +64,7 @@ - # define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ - # define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ - # define MAP_STACK 0x20000 /* Allocation is for a stack. */ -+# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ - #endif - - /* Flags to `msync'. */ -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/x86_64/bits/mman.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/x86_64/bits/mman.h 2013-07-23 04:01:42.493048788 -0300 -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/x86_64/bits/mman.h 2013-07-23 22:32:37.433628073 -0300 -@@ -65,6 +65,7 @@ - # define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ - # define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ - # define MAP_STACK 0x20000 /* Allocation is for a stack. */ -+# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ - #endif - - /* Flags to `msync'. */ -Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/ia64/bits/mman.h -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/ia64/bits/mman.h 2010-05-04 08:27:23.000000000 -0300 -+++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/ia64/bits/mman.h 2013-07-23 22:37:28.643530951 -0300 -@@ -65,6 +65,8 @@ - # define MAP_NORESERVE 0x04000 /* Don't check for reservations. */ - # define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ - # define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -+# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -+# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ - #endif - - /* Flags to `msync'. */ diff --git a/src/patches/glibc/glibc-rh919562.patch b/src/patches/glibc/glibc-rh919562.patch deleted file mode 100644 index 42aa819fd4..0000000000 --- a/src/patches/glibc/glibc-rh919562.patch +++ /dev/null @@ -1,190 +0,0 @@ -# -# Patch provided by Ulrich Drepper in BZ#919562. -# -# Patch has not been sent upstream. -# -# 2013-03-08 Ulrich Drepper -# -# * elf/rtld.c (dl_main): Correctly determine when the application -# required DSOs with TLS and bump the generation counter in that -# case. The current condition does not account for an audit -# module using TLS. -# * elf/dl-tls.c (_dl_count_modids): New function. -# (_dl_allocate_tls_init): Add assertion to check TLS -# generation. -# * sysdeps/generic/ldsodefs.h: Declare _dl_count_modids. -# * elf/Makefile: Add rules to build and run tst-audit9. -# * elf/tst-audit9.c: New file. -# * elf/tst-auditmod9a.c: New file. -# * elf/tst-auditmod9b.c: New file. -# -diff -urN glibc-2.12-2-gc4ccff1.orig/elf/dl-tls.c glibc-2.12-2-gc4ccff1/elf/dl-tls.c ---- glibc-2.12-2-gc4ccff1.orig/elf/dl-tls.c 2013-04-24 16:06:10.410756438 -0400 -+++ glibc-2.12-2-gc4ccff1/elf/dl-tls.c 2013-04-24 16:06:49.092604707 -0400 -@@ -109,6 +109,28 @@ - } - - -+size_t -+internal_function -+_dl_count_modids (void) -+{ -+ if (! __builtin_expect (GL(dl_tls_dtv_gaps), true)) -+ return GL(dl_tls_max_dtv_idx); -+ -+ size_t n = 0; -+ struct dtv_slotinfo_list *runp = GL(dl_tls_dtv_slotinfo_list); -+ while (runp != NULL) -+ { -+ for (size_t i = 0; i < runp->len; ++i) -+ if (runp->slotinfo[i].map != NULL) -+ ++n; -+ -+ runp = runp->next; -+ } -+ -+ return n; -+} -+ -+ - #ifdef SHARED - void - internal_function -@@ -411,6 +433,7 @@ - - /* Keep track of the maximum generation number. This might - not be the generation counter. */ -+ assert (listp->slotinfo[cnt].gen <= GL(dl_tls_generation)); - maxgen = MAX (maxgen, listp->slotinfo[cnt].gen); - - if (map->l_tls_offset == NO_TLS_OFFSET -diff -urN glibc-2.12-2-gc4ccff1.orig/elf/Makefile glibc-2.12-2-gc4ccff1/elf/Makefile ---- glibc-2.12-2-gc4ccff1.orig/elf/Makefile 2013-04-24 16:06:10.408756448 -0400 -+++ glibc-2.12-2-gc4ccff1/elf/Makefile 2013-04-24 16:07:29.475457962 -0400 -@@ -97,6 +97,8 @@ - tst-audit6.c tst-auditmod6a.c tst-auditmod6b.c \ - tst-auditmod6c.c \ - tst-audit7.c tst-auditmod7a.c tst-auditmod7b.c \ -+ tst-audit9.c \ -+ tst-auditmod9a.c tst-auditmod9b.c \ - order2mod1.c order2mod2.c order2mod3.c order2mod4.c \ - tst-stackguard1.c tst-stackguard1-static.c \ - tst-array5.c tst-array5-static.c tst-array5dep.c \ -@@ -198,7 +200,7 @@ - tst-dlmodcount tst-dlopenrpath tst-deep1 \ - tst-dlmopen1 tst-dlmopen2 tst-dlmopen3 \ - unload3 unload4 unload5 unload6 unload7 unload8 tst-global1 order2 \ -- tst-audit1 tst-audit2 \ -+ tst-audit1 tst-audit2 tst-audit9 \ - tst-stackguard1 tst-addr1 tst-thrlock \ - tst-unique1 tst-unique2 - # reldep9 -@@ -251,7 +253,8 @@ - unload8mod1 unload8mod1x unload8mod2 unload8mod3 \ - order2mod1 order2mod2 order2mod3 order2mod4 \ - tst-unique1mod1 tst-unique1mod2 \ -- tst-unique2mod1 tst-unique2mod2 -+ tst-unique2mod1 tst-unique2mod2 \ -+ tst-auditmod9a tst-auditmod9b - ifeq (yes,$(have-initfini-array)) - modules-names += tst-array2dep tst-array5dep - endif -@@ -574,6 +577,8 @@ - ifuncmod1.so-no-z-defs = yes - ifuncmod5.so-no-z-defs = yes - ifuncmod6.so-no-z-defs = yes -+tst-auditmod9a.so-no-z-defs = yes -+tst-auditmod9b.so-no-z-defs = yes - - ifeq ($(build-shared),yes) - # Build all the modules even when not actually running test programs. -@@ -1015,6 +1020,10 @@ - $(objpfx)tst-audit7.out: $(objpfx)tst-auditmod7b.so - tst-audit7-ENV = LD_AUDIT=$(objpfx)tst-auditmod7b.so - -+$(objpfx)tst-audit9: $(libdl) -+$(objpfx)tst-audit9.out: $(objpfx)tst-auditmod9a.so $(objpfx)tst-auditmod9b.so -+tst-audit9-ENV = LD_AUDIT=$(objpfx)tst-auditmod9a.so -+ - $(objpfx)tst-global1: $(libdl) - $(objpfx)tst-global1.out: $(objpfx)testobj6.so $(objpfx)testobj2.so - -diff -urN glibc-2.12-2-gc4ccff1.orig/elf/rtld.c glibc-2.12-2-gc4ccff1/elf/rtld.c ---- glibc-2.12-2-gc4ccff1.orig/elf/rtld.c 2013-04-24 16:06:10.410756438 -0400 -+++ glibc-2.12-2-gc4ccff1/elf/rtld.c 2013-04-24 16:06:49.096604693 -0400 -@@ -1637,6 +1637,10 @@ - } - } - -+ /* Keep track of the currently loaded modules to count how many -+ non-audit modules which use TLS are loaded. */ -+ size_t count_modids = _dl_count_modids (); -+ - /* Set up debugging before the debugger is notified for the first time. */ - #ifdef ELF_MACHINE_DEBUG_SETUP - /* Some machines (e.g. MIPS) don't use DT_DEBUG in this way. */ -@@ -2281,7 +2285,8 @@ - # define NONTLS_INIT_TP do { } while (0) - #endif - -- if (!was_tls_init_tp_called && GL(dl_tls_max_dtv_idx) > 0) -+ if ((!was_tls_init_tp_called && GL(dl_tls_max_dtv_idx) > 0) -+ || count_modids != _dl_count_modids ()) - ++GL(dl_tls_generation); - - /* Now that we have completed relocation, the initializer data -diff -urN glibc-2.12-2-gc4ccff1.orig/elf/tst-audit9.c glibc-2.12-2-gc4ccff1/elf/tst-audit9.c ---- glibc-2.12-2-gc4ccff1.orig/elf/tst-audit9.c 1969-12-31 19:00:00.000000000 -0500 -+++ glibc-2.12-2-gc4ccff1/elf/tst-audit9.c 2013-04-24 16:06:49.096604693 -0400 -@@ -0,0 +1,8 @@ -+#include -+ -+int main(void) -+{ -+ void *h = dlopen("$ORIGIN/tst-auditmod9b.so", RTLD_LAZY); -+ int (*fp)(void) = dlsym(h, "f"); -+ return fp() - 1; -+} -diff -urN glibc-2.12-2-gc4ccff1.orig/elf/tst-auditmod9a.c glibc-2.12-2-gc4ccff1/elf/tst-auditmod9a.c ---- glibc-2.12-2-gc4ccff1.orig/elf/tst-auditmod9a.c 1969-12-31 19:00:00.000000000 -0500 -+++ glibc-2.12-2-gc4ccff1/elf/tst-auditmod9a.c 2013-04-24 16:06:49.097604689 -0400 -@@ -0,0 +1,16 @@ -+#include -+ -+__thread int var; -+ -+unsigned int -+la_version (unsigned int v) -+{ -+ return v; -+} -+ -+void -+la_activity (uintptr_t *cookie, unsigned int flag) -+{ -+ ++var; -+} -+ -diff -urN glibc-2.12-2-gc4ccff1.orig/elf/tst-auditmod9b.c glibc-2.12-2-gc4ccff1/elf/tst-auditmod9b.c ---- glibc-2.12-2-gc4ccff1.orig/elf/tst-auditmod9b.c 1969-12-31 19:00:00.000000000 -0500 -+++ glibc-2.12-2-gc4ccff1/elf/tst-auditmod9b.c 2013-04-24 16:06:49.097604689 -0400 -@@ -0,0 +1,6 @@ -+__thread int a; -+ -+int f(void) -+{ -+ return ++a; -+} -diff -urN glibc-2.12-2-gc4ccff1.orig/sysdeps/generic/ldsodefs.h glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/generic/ldsodefs.h 2013-04-24 16:06:10.545755798 -0400 -+++ glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h 2013-04-24 16:06:49.098604686 -0400 -@@ -1031,6 +1031,9 @@ - /* Determine next available module ID. */ - extern size_t _dl_next_tls_modid (void) internal_function attribute_hidden; - -+/* Count the modules with TLS segments. */ -+extern size_t _dl_count_modids (void) internal_function attribute_hidden; -+ - /* Calculate offset of the TLS blocks in the static TLS block. */ - extern void _dl_determine_tlsoffset (void) internal_function attribute_hidden; - diff --git a/src/patches/glibc/glibc-rh928318.patch b/src/patches/glibc/glibc-rh928318.patch deleted file mode 100644 index 36aa19a6d8..0000000000 --- a/src/patches/glibc/glibc-rh928318.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff --git a/resolv/res_init.c b/resolv/res_init.c -index 40dbe7d..202569d 100644 ---- a/resolv/res_init.c -+++ b/resolv/res_init.c -@@ -176,13 +176,6 @@ __res_vinit(res_state statp, int preinit) { - statp->id = res_randomid(); - } - --#ifdef USELOOPBACK -- statp->nsaddr.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1); --#else -- statp->nsaddr.sin_addr.s_addr = INADDR_ANY; --#endif -- statp->nsaddr.sin_family = AF_INET; -- statp->nsaddr.sin_port = htons(NAMESERVER_PORT); - statp->nscount = 0; - statp->ndots = 1; - statp->pfcode = 0; -@@ -433,6 +426,12 @@ __res_vinit(res_state statp, int preinit) { - #endif - (void) fclose(fp); - } -+ if (__builtin_expect(statp->nscount == 0, 0)) { -+ statp->nsaddr.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1); -+ statp->nsaddr.sin_family = AF_INET; -+ statp->nsaddr.sin_port = htons(NAMESERVER_PORT); -+ statp->nscount = 1; -+ } - if (statp->defdname[0] == 0 && - __gethostname(buf, sizeof(statp->defdname) - 1) == 0 && - (cp = strchr(buf, '.')) != NULL) diff --git a/src/patches/glibc/glibc-rh929302.patch b/src/patches/glibc/glibc-rh929302.patch deleted file mode 100644 index 305b339c06..0000000000 --- a/src/patches/glibc/glibc-rh929302.patch +++ /dev/null @@ -1,98 +0,0 @@ -From decadad73858bc108828eed5540c7955dc2a977b Mon Sep 17 00:00:00 2001 -From: Adhemerval Zanella -Date: Fri, 7 Jun 2013 14:44:58 -0500 -Subject: [PATCH 1/2] PowerPC: Change sched_getcpu to use vDSO getcpu instead of syscall. - -Backport of d5e0b9bd6e296f3ec5263fa296d39f3fed9b8fa2 from master. ---- - sysdeps/unix/sysv/linux/powerpc/Versions | 1 + - sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h | 2 + - sysdeps/unix/sysv/linux/powerpc/init-first.c | 3 ++ - sysdeps/unix/sysv/linux/powerpc/sched_getcpu.c | 30 ++++++++++++++++++++++ - 4 files changed, 36 insertions(+), 0 deletions(-) - create mode 100644 sysdeps/unix/sysv/linux/powerpc/sched_getcpu.c - -diff --git a/sysdeps/unix/sysv/linux/powerpc/Versions b/sysdeps/unix/sysv/linux/powerpc/Versions -index 1ef53b9..396a423 100644 ---- a/sysdeps/unix/sysv/linux/powerpc/Versions -+++ b/sysdeps/unix/sysv/linux/powerpc/Versions -@@ -3,5 +3,6 @@ libc { - __vdso_get_tbfreq; - __vdso_clock_gettime; - __vdso_clock_getres; -+ __vdso_getcpu; - } - } -diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h b/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h -index 746d9ce..c3026d5 100644 ---- a/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h -+++ b/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h -@@ -31,6 +31,8 @@ extern void *__vdso_clock_getres; - - extern void *__vdso_get_tbfreq; - -+extern void *__vdso_getcpu; -+ - #endif - - #endif /* _LIBC_VDSO_H */ -diff --git a/sysdeps/unix/sysv/linux/powerpc/init-first.c b/sysdeps/unix/sysv/linux/powerpc/init-first.c -index 92dacc7..cfed655 100644 ---- a/sysdeps/unix/sysv/linux/powerpc/init-first.c -+++ b/sysdeps/unix/sysv/linux/powerpc/init-first.c -@@ -27,6 +27,7 @@ void *__vdso_gettimeofday attribute_hidden; - void *__vdso_clock_gettime; - void *__vdso_clock_getres; - void *__vdso_get_tbfreq; -+void *__vdso_getcpu; - - - static inline void -@@ -41,6 +42,8 @@ _libc_vdso_platform_setup (void) - __vdso_clock_getres = _dl_vdso_vsym ("__kernel_clock_getres", &linux2615); - - __vdso_get_tbfreq = _dl_vdso_vsym ("__kernel_vdso_get_tbfreq", &linux2615); -+ -+ __vdso_getcpu = _dl_vdso_vsym ("__kernel_getcpu", &linux2615); - } - - # define VDSO_SETUP _libc_vdso_platform_setup -diff --git a/sysdeps/unix/sysv/linux/powerpc/sched_getcpu.c b/sysdeps/unix/sysv/linux/powerpc/sched_getcpu.c -new file mode 100644 -index 0000000..617e6f1 ---- /dev/null -+++ b/sysdeps/unix/sysv/linux/powerpc/sched_getcpu.c -@@ -0,0 +1,30 @@ -+/* Copyright (C) 2013 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library 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. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+ -+ -+int -+sched_getcpu (void) -+{ -+ unsigned int cpu; -+ int r = INLINE_VSYSCALL (getcpu, 3, &cpu, NULL, NULL); -+ -+ return r == -1 ? r : cpu; -+} --- -1.7.1 - diff --git a/src/patches/glibc/glibc-rh929388.patch b/src/patches/glibc/glibc-rh929388.patch deleted file mode 100644 index 44ddd17f2d..0000000000 --- a/src/patches/glibc/glibc-rh929388.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff -pruN glibc-2.5-20061008T1257/sysdeps/x86_64/fpu/math_private.h glibc-2.5-20061008T1257.patched/sysdeps/x86_64/fpu/math_private.h ---- glibc-2.5-20061008T1257/sysdeps/x86_64/fpu/math_private.h 2013-02-12 07:05:08.000000000 -0500 -+++ glibc-2.5-20061008T1257.patched/sysdeps/x86_64/fpu/math_private.h 2013-02-12 06:59:08.000000000 -0500 -@@ -90,10 +90,14 @@ while (0) - #undef libc_feupdateenv - #define libc_feupdateenv(e) \ - do { \ -- unsigned int mxcsr; \ -+ unsigned int mxcsr, new_mxcsr; \ - asm volatile ("stmxcsr %0" : "=m" (*&mxcsr)); \ -- asm volatile ("ldmxcsr %0" : : "m" ((e)->__mxcsr)); \ -- feraiseexcept (mxcsr & FE_ALL_EXCEPT); \ -+ /* Merge in the old exceptions. */ \ -+ new_mxcsr = mxcsr & FE_ALL_EXCEPT | (e)->__mxcsr; \ -+ asm volatile ("ldmxcsr %0" : : "m" (*&new_mxcsr)); \ -+ /* Only raise exception if there are any that are not masked. */ \ -+ if (~(mxcsr >> 7) & mxcsr & FE_ALL_EXCEPT) \ -+ feraiseexcept (mxcsr & FE_ALL_EXCEPT); \ - } while (0) - #undef libc_feupdateenvf - #define libc_feupdateenvf(e) libc_feupdateenv (e) diff --git a/src/patches/glibc/glibc-rh947882.patch b/src/patches/glibc/glibc-rh947882.patch deleted file mode 100644 index 6d10982a2e..0000000000 --- a/src/patches/glibc/glibc-rh947882.patch +++ /dev/null @@ -1,63 +0,0 @@ -# -# Backport from upstream: -# -# From 1cef1b19089528db11f221e938f60b9b048945d7 Mon Sep 17 00:00:00 2001 -# From: Andreas Schwab -# Date: Thu, 21 Mar 2013 15:50:27 +0100 -# Subject: [PATCH] Fix stack overflow in getaddrinfo with many results -# -# --- -# ChangeLog | 6 ++++++ -# NEWS | 5 ++++- -# sysdeps/posix/getaddrinfo.c | 23 +++++++++++++++++++++-- -# 3 files changed, 31 insertions(+), 3 deletions(-) -# -# 2013-04-03 Andreas Schwab -# -# [BZ #15330] -# * sysdeps/posix/getaddrinfo.c (getaddrinfo): Allocate results and -# order arrays from heap if bigger than alloca cutoff. -# -diff -urN glibc-2.12-2-gc4ccff1.orig/sysdeps/posix/getaddrinfo.c glibc-2.12-2-gc4ccff1/sysdeps/posix/getaddrinfo.c ---- glibc-2.12-2-gc4ccff1.orig/sysdeps/posix/getaddrinfo.c 2013-07-24 20:40:37.601887975 -0400 -+++ glibc-2.12-2-gc4ccff1/sysdeps/posix/getaddrinfo.c 2013-07-24 20:54:32.722447705 -0400 -@@ -2386,11 +2386,27 @@ - __typeof (once) old_once = once; - __libc_once (once, gaiconf_init); - /* Sort results according to RFC 3484. */ -- struct sort_result results[nresults]; -- size_t order[nresults]; -+ struct sort_result *results; -+ size_t *order; - struct addrinfo *q; - struct addrinfo *last = NULL; - char *canonname = NULL; -+ bool malloc_results; -+ -+ malloc_results -+ = !__libc_use_alloca (nresults * (sizeof (*results) + sizeof (*order))); -+ if (malloc_results) -+ { -+ results = malloc (nresults * (sizeof (*results) + sizeof (*order))); -+ if (results == NULL) -+ { -+ free (in6ai); -+ return EAI_MEMORY; -+ } -+ } -+ else -+ results = alloca (nresults * (sizeof (*results) + sizeof (*order))); -+ order = (size_t *) (results + nresults); - - /* If we have information about deprecated and temporary addresses - sort the array now. */ -@@ -2557,6 +2573,9 @@ - - /* Fill in the canonical name into the new first entry. */ - p->ai_canonname = canonname; -+ -+ if (malloc_results) -+ free (results); - } - - free (in6ai); diff --git a/src/patches/glibc/glibc-rh952422.patch b/src/patches/glibc/glibc-rh952422.patch deleted file mode 100644 index c73bf523fa..0000000000 --- a/src/patches/glibc/glibc-rh952422.patch +++ /dev/null @@ -1,127 +0,0 @@ -diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c -index af454b6..249bd19 100644 ---- a/sysdeps/unix/sysv/linux/getsysstats.c -+++ b/sysdeps/unix/sysv/linux/getsysstats.c -@@ -35,6 +34,7 @@ - - #include - #include -+#include - - - /* How we can determine the number of available processors depends on -@@ -49,8 +49,6 @@ - But not all systems have support for the /proc filesystem. If it - is not available we simply return 1 since there is no way. */ - --#include -- - - /* Other architectures use different formats for /proc/cpuinfo. This - provides a hook for alternative parsers. */ -@@ -128,6 +126,15 @@ next_line (int fd, char *const buffer, char **cp, char **re, - int - __get_nprocs () - { -+ static int cached_result; -+ static time_t timestamp; -+ -+ time_t now = time (NULL); -+ time_t prev = timestamp; -+ atomic_read_barrier (); -+ if (now == prev) -+ return cached_result; -+ - /* XXX Here will come a test for the new system call. */ - - const size_t buffer_size = __libc_use_alloca (8192) ? 8192 : 512; -@@ -135,20 +142,65 @@ __get_nprocs () - char *buffer_end = buffer + buffer_size; - char *cp = buffer_end; - char *re = buffer_end; -- int result = 1; - - #ifdef O_CLOEXEC - const int flags = O_RDONLY | O_CLOEXEC; - #else - const int flags = O_RDONLY; - #endif -+ int fd = open_not_cancel_2 ("/sys/devices/system/cpu/online", flags); -+ char *l; -+ int result = 0; -+ if (fd != -1) -+ { -+ l = next_line (fd, buffer, &cp, &re, buffer_end); -+ if (l != NULL) -+ do -+ { -+ char *endp; -+ unsigned long int n = strtoul (l, &endp, 10); -+ if (l == endp) -+ { -+ result = 0; -+ break; -+ } -+ -+ unsigned long int m = n; -+ if (*endp == '-') -+ { -+ l = endp + 1; -+ m = strtoul (l, &endp, 10); -+ if (l == endp) -+ { -+ result = 0; -+ break; -+ } -+ } -+ -+ result += m - n + 1; -+ -+ l = endp; -+ while (l < re && isspace (*l)) -+ ++l; -+ } -+ while (l < re); -+ -+ close_not_cancel_no_status (fd); -+ -+ if (result > 0) -+ goto out; -+ } -+ -+ cp = buffer_end; -+ re = buffer_end; -+ result = 1; -+ - /* The /proc/stat format is more uniform, use it by default. */ -- int fd = open_not_cancel_2 ("/proc/stat", flags); -+ fd = open_not_cancel_2 ("/proc/stat", flags); - if (fd != -1) - { - result = 0; - -- char *l; - while ((l = next_line (fd, buffer, &cp, &re, buffer_end)) != NULL) - /* The current format of /proc/stat has all the cpu* entries - at the front. We assume here that stays this way. */ -@@ -169,6 +221,11 @@ __get_nprocs () - } - } - -+ out: -+ cached_result = result; -+ atomic_write_barrier (); -+ timestamp = now; -+ - return result; - } - weak_alias (__get_nprocs, get_nprocs) -@@ -236,7 +293,7 @@ phys_pages_info (const char *format) - long int result = -1; - - /* If we haven't found an appropriate entry return 1. */ -- FILE *fp = fopen ("/proc/meminfo", "rc"); -+ FILE *fp = fopen ("/proc/meminfo", "rce"); - if (fp != NULL) - { - /* No threads use this stream. */ diff --git a/src/patches/glibc/glibc-rh966775.patch b/src/patches/glibc/glibc-rh966775.patch deleted file mode 100644 index 32a0f2167e..0000000000 --- a/src/patches/glibc/glibc-rh966775.patch +++ /dev/null @@ -1,177 +0,0 @@ -diff -pruN glibc-2.12-2-gc4ccff1/math/math_private.h glibc-2.12-2-gc4ccff1.new/math/math_private.h ---- glibc-2.12-2-gc4ccff1/math/math_private.h 2013-06-07 08:35:52.785442441 -0400 -+++ glibc-2.12-2-gc4ccff1.new/math/math_private.h 2013-06-07 08:29:35.621042340 -0400 -@@ -394,4 +394,31 @@ extern void __docos (double __x, double - #define libc_feupdateenvf(e) (void) feupdateenv (e) - #define libc_feupdateenvl(e) (void) feupdateenv (e) - -+/* Save and set the rounding mode. The use of fenv_t to store the old mode -+ allows a target-specific version of this function to avoid converting the -+ rounding mode from the fpu format. By default we have no choice but to -+ manipulate the entire env. */ -+ -+#ifndef libc_feholdsetround -+# define libc_feholdsetround(e, r, c) libc_feholdexcept_setround(e, r) -+#endif -+#ifndef libc_feholdsetroundf -+# define libc_feholdsetroundf(e, r, c) libc_feholdexcept_setroundf(e, r) -+#endif -+#ifndef libc_feholdsetroundl -+# define libc_feholdsetroundl(e, r, c) libc_feholdexcept_setroundl(e, r) -+#endif -+ -+/* ... and the reverse. */ -+ -+#ifndef libc_feresetround -+# define libc_feresetround(e, c) libc_feupdateenv(e) -+#endif -+#ifndef libc_feresetroundf -+# define libc_feresetroundf(e, c) libc_feupdateenvf(e) -+#endif -+#ifndef libc_feresetroundl -+# define libc_feresetroundl(e, c) libc_feupdateenvl(e) -+#endif -+ - #endif /* _MATH_PRIVATE_H_ */ -diff -pruN glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/e_exp.c glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/e_exp.c ---- glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/e_exp.c 2013-06-07 08:35:52.785442441 -0400 -+++ glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/e_exp.c 2013-06-07 08:30:21.976222459 -0400 -@@ -57,7 +57,8 @@ double __ieee754_exp(double x) { - fenv_t env; - double retval; - -- libc_feholdexcept_setround (&env, FE_TONEAREST); -+ int changed; -+ libc_feholdsetround (&env, FE_TONEAREST, changed); - - junk1.x = x; - m = junk1.i[HIGH_HALF]; -@@ -152,7 +153,7 @@ double __ieee754_exp(double x) { - else { retval = __slowexp(x); goto ret; } - } - ret: -- libc_feupdateenv (&env); -+ libc_feresetround (&env, changed); - return retval; - } - -diff -pruN glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/e_pow.c glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/e_pow.c ---- glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/e_pow.c 2013-06-07 08:35:52.785442441 -0400 -+++ glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/e_pow.c 2013-06-07 08:31:00.294939087 -0400 -@@ -83,7 +83,8 @@ double __ieee754_pow(double x, double y) - fenv_t env; - double retval; - -- libc_feholdexcept_setround (&env, FE_TONEAREST); -+ int changed; -+ libc_feholdsetround (&env, FE_TONEAREST, changed); - - z = log1(x,&aa,&error); /* x^y =e^(y log (X)) */ - t = y*134217729.0; -@@ -100,7 +101,7 @@ double __ieee754_pow(double x, double y) - t = __exp1(a1,a2,1.9e16*error); /* return -10 or 0 if wasn't computed exactly */ - retval = (t>0)?t:power1(x,y); - -- libc_feupdateenv (&env); -+ libc_feresetround (&env, changed); - return retval; - } - -diff -pruN glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/s_sin.c glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/s_sin.c ---- glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/s_sin.c 2013-06-07 08:35:52.786442462 -0400 -+++ glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/s_sin.c 2013-06-07 08:32:08.254822633 -0400 -@@ -101,7 +101,8 @@ double __sin(double x){ - fenv_t env; - double retval = 0; - -- libc_feholdexcept_setround (&env, FE_TONEAREST); -+ int changed; -+ libc_feholdsetround (&env, FE_TONEAREST, changed); - - u.x = x; - m = u.i[HIGH_HALF]; -@@ -355,7 +356,7 @@ double __sin(double x){ - } - - ret: -- libc_feupdateenv (&env); -+ libc_feresetround (&env, changed); - return retval; - } - -@@ -374,7 +375,8 @@ double __cos(double x) - fenv_t env; - double retval = 0; - -- libc_feholdexcept_setround (&env, FE_TONEAREST); -+ int changed; -+ libc_feholdsetround (&env, FE_TONEAREST, changed); - - u.x = x; - m = u.i[HIGH_HALF]; -@@ -623,7 +625,7 @@ double __cos(double x) - } - - ret: -- libc_feupdateenv (&env); -+ libc_feresetround (&env, changed); - return retval; - } - -diff -pruN glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/s_tan.c glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/s_tan.c ---- glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/s_tan.c 2013-06-07 08:35:52.786442462 -0400 -+++ glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/s_tan.c 2013-06-07 08:32:39.736162619 -0400 -@@ -66,7 +66,8 @@ double tan(double x) { - int __branred(double, double *, double *); - int __mpranred(double, mp_no *, int); - -- libc_feholdexcept_setround (&env, FE_TONEAREST); -+ int changed; -+ libc_feholdsetround (&env, FE_TONEAREST, changed); - - /* x=+-INF, x=NaN */ - num.d = x; ux = num.i[HIGH_HALF]; -@@ -495,7 +496,7 @@ double tan(double x) { - goto ret; - - ret: -- libc_feupdateenv (&env); -+ libc_feresetround (&env, changed); - return retval; - } - -diff -pruN glibc-2.12-2-gc4ccff1/sysdeps/x86_64/fpu/math_private.h glibc-2.12-2-gc4ccff1.new/sysdeps/x86_64/fpu/math_private.h ---- glibc-2.12-2-gc4ccff1/sysdeps/x86_64/fpu/math_private.h 2013-06-07 08:35:52.787442488 -0400 -+++ glibc-2.12-2-gc4ccff1.new/sysdeps/x86_64/fpu/math_private.h 2013-06-07 08:34:35.370109759 -0400 -@@ -139,3 +139,31 @@ do { \ - #undef libc_feupdateenvf - #define libc_feupdateenvf(e) libc_feupdateenv (e) - // #define libc_feupdateenvl(e) (void) feupdateenv (e) -+ -+#undef libc_feholdsetround -+#define libc_feholdsetround(e, r, c) \ -+({ \ -+ unsigned int mxcsr, new_mxcsr; \ -+ asm ("stmxcsr %0" : "=m" (*&mxcsr)); \ -+ new_mxcsr = (mxcsr & ~0x6000) | ((r) << 3); \ -+ if (__builtin_expect (new_mxcsr != mxcsr, 0)) \ -+ { \ -+ (e)->__mxcsr = mxcsr; \ -+ asm volatile ("ldmxcsr %0" : : "m" (*&new_mxcsr)); \ -+ c = 1; \ -+ } \ -+ else \ -+ c = 0; \ -+}) -+ -+#undef libc_feresetround -+#define libc_feresetround(e, c) \ -+({ \ -+ if (__builtin_expect (c, 0)) \ -+ { \ -+ unsigned int mxcsr; \ -+ asm ("stmxcsr %0" : "=m" (*&mxcsr)); \ -+ mxcsr = (mxcsr & ~0x6000) | ((e)->__mxcsr & 0x6000); \ -+ asm volatile ("ldmxcsr %0" : : "m" (*&mxcsr)); \ -+ } \ -+}) diff --git a/src/patches/glibc/glibc-rh966778.patch b/src/patches/glibc/glibc-rh966778.patch deleted file mode 100644 index d8fd3fa27b..0000000000 --- a/src/patches/glibc/glibc-rh966778.patch +++ /dev/null @@ -1,54 +0,0 @@ -commit 3056dcdb783a177158a5617657d1a33f872358d6 -Author: Ulrich Drepper -Date: Mon Nov 22 11:11:24 2010 -0500 - - Fix multiple nss_compat initgroups() bugs - - Compat initgroups() is completely broken; the code will always set - skip_initgroups_dyn to true, so initgroups() will never be actually - called, but due to the nature of the code, setgrent() won't be called - either - thus, subsequent invocations of initgroups() will not return - the NIS group list anymore. - - This is a simple patch that makes sure skip_initgroups_dyn is set only - in case initgroups is not available; it also attempts to handle the - unavailability of other NSS interfaces better. - - Conflicts: - - ChangeLog - -diff --git a/nis/nss_compat/compat-initgroups.c b/nis/nss_compat/compat-initgroups.c -index 07a3b92..de8d95c 100644 ---- a/nis/nss_compat/compat-initgroups.c -+++ b/nis/nss_compat/compat-initgroups.c -@@ -474,18 +474,21 @@ internal_getgrent_r (ent_t *ent, char *buffer, size_t buflen, const char *user, - /* If the selected module does not support getgrent_r or - initgroups_dyn, abort. We cannot find the needed group - entries. */ -- if (nss_getgrent_r == NULL && nss_initgroups_dyn == NULL) -+ if (nss_initgroups_dyn == NULL || nss_getgrgid_r == NULL) -+ { -+ if (nss_setgrent != NULL) -+ { -+ nss_setgrent (1); -+ ent->need_endgrent = true; -+ } -+ ent->skip_initgroups_dyn = true; -+ } -+ -+ if (ent->skip_initgroups_dyn && nss_getgrent_r == NULL) - return NSS_STATUS_UNAVAIL; - - ent->files = false; - -- if (nss_initgroups_dyn == NULL && nss_setgrent != NULL) -- { -- nss_setgrent (1); -- ent->need_endgrent = true; -- } -- ent->skip_initgroups_dyn = true; -- - return getgrent_next_nss (ent, buffer, buflen, user, group, - start, size, groupsp, limit, errnop); - } diff --git a/src/patches/glibc/glibc-rh970090.patch b/src/patches/glibc/glibc-rh970090.patch deleted file mode 100644 index 601062477c..0000000000 --- a/src/patches/glibc/glibc-rh970090.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -pruN glibc-2.18/nscd/aicache.c glibc-2.18.new/nscd/aicache.c ---- glibc-2.18/nscd/aicache.c 2013-08-11 04:22:55.000000000 +0530 -+++ glibc-2.18.new/nscd/aicache.c 2013-08-26 11:10:25.843470413 +0530 -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include - - #include "dbg_log.h" - #include "nscd.h" -@@ -100,8 +101,11 @@ addhstaiX (struct database_dyn *db, int - no_more = __nss_database_lookup ("hosts", NULL, - "dns [!UNAVAIL=return] files", &nip); - -+ /* Initialize configurations. */ -+ if (__builtin_expect (!_res_hconf.initialized, 0)) -+ _res_hconf_init (); - if (__res_maybe_init (&_res, 0) == -1) -- no_more = 1; -+ no_more = 1; - - /* If we are looking for both IPv4 and IPv6 address we don't want - the lookup functions to automatically promote IPv4 addresses to diff --git a/src/patches/glibc/glibc-rh970776.patch b/src/patches/glibc/glibc-rh970776.patch deleted file mode 100644 index ec2f2a6f99..0000000000 --- a/src/patches/glibc/glibc-rh970776.patch +++ /dev/null @@ -1,279 +0,0 @@ -Patch attached to bugzilla by Ankit Patel, from Red Hat translation team. - -Index: glibc-2.12-2-gc4ccff1/po/de.po -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/po/de.po 2010-05-04 08:27:23.000000000 -0300 -+++ glibc-2.12-2-gc4ccff1/po/de.po 2013-07-23 20:35:03.213177408 -0300 -@@ -2396,14 +2396,14 @@ msgstr "Zu viele Benutzer" - msgid "Disk quota exceeded" - msgstr "Der zugewiesene Plattenplatz (Quota) ist überschritten" - --#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS --#. TRANS system which is due to file system rearrangements on the server host. --#. TRANS Repairing this condition usually requires unmounting and remounting --#. TRANS the NFS file system on the local host. --#: stdio-common/../sysdeps/gnu/errlist.c:779 --#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:181 --msgid "Stale NFS file handle" --msgstr "Veraltete NFS-Dateizugriffsnummer" -+#. TRANS Stale file handle. This indicates an internal confusion in the -+#. TRANS file system which is due to file system rearrangements on the server host -+#. TRANS for NFS filesystems or corruption in other filesystems. -+#. TRANS Repairing this condition usually requires unmounting, possibly -+#. TRANS repairing and remounting the file system. -+#: sysdeps/gnu/errlist.c:787 -+msgid "Stale file handle" -+msgstr "Veraltetes Datei-Handle" - - #. TRANS An attempt was made to NFS-mount a remote file system with a file name that - #. TRANS already specifies an NFS-mounted file. -Index: glibc-2.12-2-gc4ccff1/po/es.po -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/po/es.po 2010-05-04 08:27:23.000000000 -0300 -+++ glibc-2.12-2-gc4ccff1/po/es.po 2013-07-23 20:35:03.243175029 -0300 -@@ -2533,14 +2533,14 @@ msgstr "Se ha excedido la cuota de disco - # Muy bien, he buscado "stale" y por lo que parece es algo que "caduca" - # o que "vence", como las letras comerciales. Me he decidido por "en desuso". - # --#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS --#. TRANS system which is due to file system rearrangements on the server host. --#. TRANS Repairing this condition usually requires unmounting and remounting --#. TRANS the NFS file system on the local host. --#: stdio-common/../sysdeps/gnu/errlist.c:779 --#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:181 --msgid "Stale NFS file handle" --msgstr "`handle' de fichero NFS en desuso" -+#. TRANS Stale file handle. This indicates an internal confusion in the -+#. TRANS file system which is due to file system rearrangements on the server host -+#. TRANS for NFS filesystems or corruption in other filesystems. -+#. TRANS Repairing this condition usually requires unmounting, possibly -+#. TRANS repairing and remounting the file system. -+#: sysdeps/gnu/errlist.c:787 -+msgid "Stale file handle" -+msgstr "Identificador de archivos obsoletos" - - #. TRANS An attempt was made to NFS-mount a remote file system with a file name that - #. TRANS already specifies an NFS-mounted file. -Index: glibc-2.12-2-gc4ccff1/po/fr.po -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/po/fr.po 2010-05-04 08:27:23.000000000 -0300 -+++ glibc-2.12-2-gc4ccff1/po/fr.po 2013-07-23 20:35:03.250174474 -0300 -@@ -5802,13 +5802,14 @@ msgstr "Trop d'usagers" - msgid "Disk quota exceeded" - msgstr "Débordement du quota d'espace disque" - --#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS --#. TRANS system which is due to file system rearrangements on the server host. --#. TRANS Repairing this condition usually requires unmounting and remounting --#. TRANS the NFS file system on the local host. -+#. TRANS Stale file handle. This indicates an internal confusion in the -+#. TRANS file system which is due to file system rearrangements on the server host -+#. TRANS for NFS filesystems or corruption in other filesystems. -+#. TRANS Repairing this condition usually requires unmounting, possibly -+#. TRANS repairing and remounting the file system. - #: sysdeps/gnu/errlist.c:787 --msgid "Stale NFS file handle" --msgstr "Panne d'accès au fichier NFS" -+msgid "Stale file handle" -+msgstr "Gestionnaire de fichiers périmés" - - #. TRANS An attempt was made to NFS-mount a remote file system with a file name that - #. TRANS already specifies an NFS-mounted file. -Index: glibc-2.12-2-gc4ccff1/po/it.po -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/po/it.po 2010-05-04 08:27:23.000000000 -0300 -+++ glibc-2.12-2-gc4ccff1/po/it.po 2013-07-23 20:35:03.253174237 -0300 -@@ -1662,6 +1662,15 @@ msgstr "Superata la quota di disco" - msgid "Disk quota exceeded" - msgstr "Superata la quota di disco" - -+#. TRANS Stale file handle. This indicates an internal confusion in the -+#. TRANS file system which is due to file system rearrangements on the server host -+#. TRANS for NFS filesystems or corruption in other filesystems. -+#. TRANS Repairing this condition usually requires unmounting, possibly -+#. TRANS repairing and remounting the file system. -+#: sysdeps/gnu/errlist.c:787 -+msgid "Stale file handle" -+msgstr "Gestione file obsoleti" -+ - #: nscd/nscd.c:86 - msgid "Do not fork and display messages on the current tty" - msgstr "Non fa fork e stampa i messaggi sul tty corrente" -Index: glibc-2.12-2-gc4ccff1/po/ja.po -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/po/ja.po 2013-07-23 04:01:34.628665260 -0300 -+++ glibc-2.12-2-gc4ccff1/po/ja.po 2013-07-23 20:35:03.304170193 -0300 -@@ -2333,14 +2333,14 @@ msgstr "¥æ¡¼¥¶¤¬Â¿¤¹¤®¤Þ¤¹" - msgid "Disk quota exceeded" - msgstr "¥Ç¥£¥¹¥¯»ÈÍÑÎÌÀ©¸Â¤òĶ²á¤·¤Þ¤·¤¿" - --#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS --#. TRANS system which is due to file system rearrangements on the server host. --#. TRANS Repairing this condition usually requires unmounting and remounting --#. TRANS the NFS file system on the local host. --#: stdio-common/../sysdeps/gnu/errlist.c:779 --#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:181 --msgid "Stale NFS file handle" --msgstr "¼Â¸úÀ­¤Î¤Ê¤¤NFS¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤Ç¤¹" -+#. TRANS Stale file handle. This indicates an internal confusion in the -+#. TRANS file system which is due to file system rearrangements on the server host -+#. TRANS for NFS filesystems or corruption in other filesystems. -+#. TRANS Repairing this condition usually requires unmounting, possibly -+#. TRANS repairing and remounting the file system. -+#: sysdeps/gnu/errlist.c:787 -+msgid "Stale file handle" -+msgstr "¸Å¤¤¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤Ç¤¹" - - #. TRANS An attempt was made to NFS-mount a remote file system with a file name that - #. TRANS already specifies an NFS-mounted file. -Index: glibc-2.12-2-gc4ccff1/po/ko.po -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/po/ko.po 2010-05-04 08:27:23.000000000 -0300 -+++ glibc-2.12-2-gc4ccff1/po/ko.po 2013-07-23 20:35:03.311169638 -0300 -@@ -5803,13 +5803,14 @@ msgstr "사용자가 너무 많음" - msgid "Disk quota exceeded" - msgstr "디스크 할당량이 초과됨" - --#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS --#. TRANS system which is due to file system rearrangements on the server host. --#. TRANS Repairing this condition usually requires unmounting and remounting --#. TRANS the NFS file system on the local host. -+#. TRANS Stale file handle. This indicates an internal confusion in the -+#. TRANS file system which is due to file system rearrangements on the server host -+#. TRANS for NFS filesystems or corruption in other filesystems. -+#. TRANS Repairing this condition usually requires unmounting, possibly -+#. TRANS repairing and remounting the file system. - #: sysdeps/gnu/errlist.c:787 --msgid "Stale NFS file handle" --msgstr "끊어진 NFS 파일 핸들" -+msgid "Stale file handle" -+msgstr "오래된 파일 처리" - - #. TRANS An attempt was made to NFS-mount a remote file system with a file name that - #. TRANS already specifies an NFS-mounted file. -Index: glibc-2.12-2-gc4ccff1/po/libc.pot -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/po/libc.pot 2010-05-04 08:27:23.000000000 -0300 -+++ glibc-2.12-2-gc4ccff1/po/libc.pot 2013-07-23 20:35:03.326168449 -0300 -@@ -5696,12 +5696,13 @@ msgstr "" - msgid "Disk quota exceeded" - msgstr "" - --#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS --#. TRANS system which is due to file system rearrangements on the server host. --#. TRANS Repairing this condition usually requires unmounting and remounting --#. TRANS the NFS file system on the local host. -+#. TRANS Stale file handle. This indicates an internal confusion in the -+#. TRANS file system which is due to file system rearrangements on the server host -+#. TRANS for NFS filesystems or corruption in other filesystems. -+#. TRANS Repairing this condition usually requires unmounting, possibly -+#. TRANS repairing and remounting the file system. - #: sysdeps/gnu/errlist.c:787 --msgid "Stale NFS file handle" -+msgid "Stale file handle" - msgstr "" - - #. TRANS An attempt was made to NFS-mount a remote file system with a file name that -Index: glibc-2.12-2-gc4ccff1/po/pt_BR.po -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/po/pt_BR.po 2010-05-04 08:27:23.000000000 -0300 -+++ glibc-2.12-2-gc4ccff1/po/pt_BR.po 2013-07-23 20:35:03.331168053 -0300 -@@ -2287,13 +2287,14 @@ msgstr "Erro de Srmount" - msgid "Stack fault" - msgstr "Falha de pilha" - --#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS --#. TRANS system which is due to file system rearrangements on the server host. --#. TRANS Repairing this condition usually requires unmounting and remounting --#. TRANS the NFS file system on the local host. --#: stdio-common/../sysdeps/gnu/errlist.c:506 --msgid "Stale NFS file handle" --msgstr "Manipulador de arquivo NFS corrompido" -+#. TRANS Stale file handle. This indicates an internal confusion in the -+#. TRANS file system which is due to file system rearrangements on the server host -+#. TRANS for NFS filesystems or corruption in other filesystems. -+#. TRANS Repairing this condition usually requires unmounting, possibly -+#. TRANS repairing and remounting the file system. -+#: sysdeps/gnu/errlist.c:787 -+msgid "Stale file handle" -+msgstr "Manipulador de arquivo obsoleto" - - #: nscd/nscd.c:81 - msgid "Start NUMBER threads" -Index: glibc-2.12-2-gc4ccff1/po/ru.po -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/po/ru.po 2010-05-04 08:27:23.000000000 -0300 -+++ glibc-2.12-2-gc4ccff1/po/ru.po 2013-07-23 20:35:03.338167498 -0300 -@@ -5798,13 +5798,14 @@ msgstr "Слишком много пол - msgid "Disk quota exceeded" - msgstr "Превышена дисковая квота" - --#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS --#. TRANS system which is due to file system rearrangements on the server host. --#. TRANS Repairing this condition usually requires unmounting and remounting --#. TRANS the NFS file system on the local host. -+#. TRANS Stale file handle. This indicates an internal confusion in the -+#. TRANS file system which is due to file system rearrangements on the server host -+#. TRANS for NFS filesystems or corruption in other filesystems. -+#. TRANS Repairing this condition usually requires unmounting, possibly -+#. TRANS repairing and remounting the file system. - #: sysdeps/gnu/errlist.c:787 --msgid "Stale NFS file handle" --msgstr "Устаревший хэндл файла NFS" -+msgid "Stale file handle" -+msgstr "Устаревший дескриптор файла" - - #. TRANS An attempt was made to NFS-mount a remote file system with a file name that - #. TRANS already specifies an NFS-mounted file. -Index: glibc-2.12-2-gc4ccff1/po/zh_CN.po -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/po/zh_CN.po 2010-05-04 08:27:23.000000000 -0300 -+++ glibc-2.12-2-gc4ccff1/po/zh_CN.po 2013-07-23 20:35:03.344167022 -0300 -@@ -5519,13 +5519,14 @@ msgstr "用户过多" - msgid "Disk quota exceeded" - msgstr "超出磁盘限额" - --#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS --#. TRANS system which is due to file system rearrangements on the server host. --#. TRANS Repairing this condition usually requires unmounting and remounting --#. TRANS the NFS file system on the local host. -+#. TRANS Stale file handle. This indicates an internal confusion in the -+#. TRANS file system which is due to file system rearrangements on the server host -+#. TRANS for NFS filesystems or corruption in other filesystems. -+#. TRANS Repairing this condition usually requires unmounting, possibly -+#. TRANS repairing and remounting the file system. - #: sysdeps/gnu/errlist.c:787 --msgid "Stale NFS file handle" --msgstr "" -+msgid "Stale file handle" -+msgstr "失效文件句柄" - - #. TRANS An attempt was made to NFS-mount a remote file system with a file name that - #. TRANS already specifies an NFS-mounted file. -Index: glibc-2.12-2-gc4ccff1/po/zh_TW.po -=================================================================== ---- glibc-2.12-2-gc4ccff1.orig/po/zh_TW.po 2010-05-04 08:27:23.000000000 -0300 -+++ glibc-2.12-2-gc4ccff1/po/zh_TW.po 2013-07-23 20:35:03.349166626 -0300 -@@ -2333,14 +2333,14 @@ msgstr "太多使用者" - msgid "Disk quota exceeded" - msgstr "硬碟 quota 滿了" - --#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS --#. TRANS system which is due to file system rearrangements on the server host. --#. TRANS Repairing this condition usually requires unmounting and remounting --#. TRANS the NFS file system on the local host. --#: stdio-common/../sysdeps/gnu/errlist.c:779 --#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:181 --msgid "Stale NFS file handle" --msgstr "過舊的 NFS 檔案控制碼" -+#. TRANS Stale file handle. This indicates an internal confusion in the -+#. TRANS file system which is due to file system rearrangements on the server host -+#. TRANS for NFS filesystems or corruption in other filesystems. -+#. TRANS Repairing this condition usually requires unmounting, possibly -+#. TRANS repairing and remounting the file system. -+#: sysdeps/gnu/errlist.c:787 -+msgid "Stale file handle" -+msgstr "過舊的檔案處理" - - #. TRANS An attempt was made to NFS-mount a remote file system with a file name that - #. TRANS already specifies an NFS-mounted file. diff --git a/src/patches/glibc/glibc-rh978098.patch b/src/patches/glibc/glibc-rh978098.patch deleted file mode 100644 index 0b53dcc258..0000000000 --- a/src/patches/glibc/glibc-rh978098.patch +++ /dev/null @@ -1,124 +0,0 @@ -# -# Based on commit e6c61494125126d2ba77e5d99f83887a2ed49783. -# -# 2011-04-10 Ulrich Drepper -# -# [BZ #12650] -# * sysdeps/i386/dl-tls.h: Define TLS_DTV_UNALLOCATED. -# * sysdeps/ia64/dl-tls.h: Likewise. -# * sysdeps/powerpc/dl-tls.h: Likewise. -# * sysdeps/s390/dl-tls.h: Likewise. -# * sysdeps/sh/dl-tls.h: Likewise. -# * sysdeps/sparc/dl-tls.h: Likewise. -# * sysdeps/x86_64/dl-tls.h: Likewise. -# * elf/dl-tls.c: Don't define TLS_DTV_UNALLOCATED here. -# -diff -urN glibc-2.12-2-gc4ccff1/elf/dl-tls.c glibc-2.12-2-gc4ccff1.mod/elf/dl-tls.c ---- glibc-2.12-2-gc4ccff1/elf/dl-tls.c 2015-02-18 05:16:56.087096028 -0500 -+++ glibc-2.12-2-gc4ccff1.mod/elf/dl-tls.c 2015-02-18 05:21:04.018424445 -0500 -@@ -33,9 +33,6 @@ - to allow dynamic loading of modules defining IE-model TLS data. */ - #define TLS_STATIC_SURPLUS 64 + DL_NNS * 100 - --/* Value used for dtv entries for which the allocation is delayed. */ --#define TLS_DTV_UNALLOCATED ((void *) -1l) -- - - /* Out-of-memory handler. */ - #ifdef SHARED -diff -urN glibc-2.12-2-gc4ccff1/nptl/allocatestack.c glibc-2.12-2-gc4ccff1.mod/nptl/allocatestack.c ---- glibc-2.12-2-gc4ccff1/nptl/allocatestack.c 2015-02-18 05:16:56.101095594 -0500 -+++ glibc-2.12-2-gc4ccff1.mod/nptl/allocatestack.c 2015-02-18 05:21:04.019424414 -0500 -@@ -26,6 +26,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -242,6 +243,10 @@ - - /* Clear the DTV. */ - dtv_t *dtv = GET_DTV (TLS_TPADJ (result)); -+ for (size_t cnt = 0; cnt < dtv[-1].counter; ++cnt) -+ if (! dtv[1 + cnt].pointer.is_static -+ && dtv[1 + cnt].pointer.val != TLS_DTV_UNALLOCATED) -+ free (dtv[1 + cnt].pointer.val); - memset (dtv, '\0', (dtv[-1].counter + 1) * sizeof (dtv_t)); - - /* Re-initialize the TLS. */ -diff -urN glibc-2.12-2-gc4ccff1/sysdeps/i386/dl-tls.h glibc-2.12-2-gc4ccff1.mod/sysdeps/i386/dl-tls.h ---- glibc-2.12-2-gc4ccff1/sysdeps/i386/dl-tls.h 2010-05-04 07:27:23.000000000 -0400 -+++ glibc-2.12-2-gc4ccff1.mod/sysdeps/i386/dl-tls.h 2015-02-18 05:21:04.019424414 -0500 -@@ -58,3 +58,6 @@ - - # endif - #endif -+ -+/* Value used for dtv entries for which the allocation is delayed. */ -+#define TLS_DTV_UNALLOCATED ((void *) -1l) -diff -urN glibc-2.12-2-gc4ccff1/sysdeps/ia64/dl-tls.h glibc-2.12-2-gc4ccff1.mod/sysdeps/ia64/dl-tls.h ---- glibc-2.12-2-gc4ccff1/sysdeps/ia64/dl-tls.h 2010-05-04 07:27:23.000000000 -0400 -+++ glibc-2.12-2-gc4ccff1.mod/sysdeps/ia64/dl-tls.h 2015-02-18 05:21:04.019424414 -0500 -@@ -28,3 +28,6 @@ - #define DONT_USE_TLS_INDEX 1 - - extern void *__tls_get_addr (size_t m, size_t offset); -+ -+/* Value used for dtv entries for which the allocation is delayed. */ -+#define TLS_DTV_UNALLOCATED ((void *) -1l) -diff -urN glibc-2.12-2-gc4ccff1/sysdeps/powerpc/dl-tls.h glibc-2.12-2-gc4ccff1.mod/sysdeps/powerpc/dl-tls.h ---- glibc-2.12-2-gc4ccff1/sysdeps/powerpc/dl-tls.h 2010-05-04 07:27:23.000000000 -0400 -+++ glibc-2.12-2-gc4ccff1.mod/sysdeps/powerpc/dl-tls.h 2015-02-18 05:21:04.019424414 -0500 -@@ -47,3 +47,6 @@ - # define GET_ADDR_OFFSET (ti->ti_offset + TLS_DTV_OFFSET) - # define __TLS_GET_ADDR(__ti) (__tls_get_addr (__ti) - TLS_DTV_OFFSET) - #endif -+ -+/* Value used for dtv entries for which the allocation is delayed. */ -+#define TLS_DTV_UNALLOCATED ((void *) -1l) -diff -urN glibc-2.12-2-gc4ccff1/sysdeps/s390/dl-tls.h glibc-2.12-2-gc4ccff1.mod/sysdeps/s390/dl-tls.h ---- glibc-2.12-2-gc4ccff1/sysdeps/s390/dl-tls.h 2010-05-04 07:27:23.000000000 -0400 -+++ glibc-2.12-2-gc4ccff1.mod/sysdeps/s390/dl-tls.h 2015-02-18 05:21:04.019424414 -0500 -@@ -72,6 +72,9 @@ - # define __TLS_GET_ADDR(__ti) \ - ({ extern char _GLOBAL_OFFSET_TABLE_[] attribute_hidden; \ - (void *) __tls_get_offset ((char *) (__ti) - _GLOBAL_OFFSET_TABLE_) \ -- + (unsigned long) __builtin_thread_pointer (); }) -+ + (unsigned long) __builtin_thread_pointer (); }) - - #endif -+ -+/* Value used for dtv entries for which the allocation is delayed. */ -+#define TLS_DTV_UNALLOCATED ((void *) -1l) -diff -urN glibc-2.12-2-gc4ccff1/sysdeps/sh/dl-tls.h glibc-2.12-2-gc4ccff1.mod/sysdeps/sh/dl-tls.h ---- glibc-2.12-2-gc4ccff1/sysdeps/sh/dl-tls.h 2010-05-04 07:27:23.000000000 -0400 -+++ glibc-2.12-2-gc4ccff1.mod/sysdeps/sh/dl-tls.h 2015-02-18 05:21:04.019424414 -0500 -@@ -27,3 +27,6 @@ - - - extern void *__tls_get_addr (tls_index *ti); -+ -+/* Value used for dtv entries for which the allocation is delayed. */ -+#define TLS_DTV_UNALLOCATED ((void *) -1l) -diff -urN glibc-2.12-2-gc4ccff1/sysdeps/sparc/dl-tls.h glibc-2.12-2-gc4ccff1.mod/sysdeps/sparc/dl-tls.h ---- glibc-2.12-2-gc4ccff1/sysdeps/sparc/dl-tls.h 2010-05-04 07:27:23.000000000 -0400 -+++ glibc-2.12-2-gc4ccff1.mod/sysdeps/sparc/dl-tls.h 2015-02-18 05:21:04.019424414 -0500 -@@ -27,3 +27,6 @@ - - - extern void *__tls_get_addr (tls_index *ti); -+ -+/* Value used for dtv entries for which the allocation is delayed. */ -+#define TLS_DTV_UNALLOCATED ((void *) -1l) -diff -urN glibc-2.12-2-gc4ccff1/sysdeps/x86_64/dl-tls.h glibc-2.12-2-gc4ccff1.mod/sysdeps/x86_64/dl-tls.h ---- glibc-2.12-2-gc4ccff1/sysdeps/x86_64/dl-tls.h 2010-05-04 07:27:23.000000000 -0400 -+++ glibc-2.12-2-gc4ccff1.mod/sysdeps/x86_64/dl-tls.h 2015-02-18 05:21:04.019424414 -0500 -@@ -27,3 +27,6 @@ - - - extern void *__tls_get_addr (tls_index *ti); -+ -+/* Value used for dtv entries for which the allocation is delayed. */ -+#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/src/patches/glibc/glibc-rh981942.patch b/src/patches/glibc/glibc-rh981942.patch deleted file mode 100644 index cbe1ab8dbd..0000000000 --- a/src/patches/glibc/glibc-rh981942.patch +++ /dev/null @@ -1,22 +0,0 @@ -commit 2e96f1c73b06e81da59ef7fffa426dc201875f31 -Author: Andreas Schwab -Date: Thu Aug 4 15:42:10 2011 -0400 - - Fix encoding name for IDN in getaddrinfo - -diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c -index 6d574c5..a5aafe9 100644 ---- a/sysdeps/posix/getaddrinfo.c -+++ b/sysdeps/posix/getaddrinfo.c -@@ -432,7 +432,10 @@ gaih_inet (const char *name, const struct gaih_service *service, - /* In case the output string is the same as the input string - no new string has been allocated. */ - if (p != name) -- malloc_name = true; -+ { -+ name = p; -+ malloc_name = true; -+ } - } - #endif - diff --git a/src/patches/glibc/glibc-rh988931.patch b/src/patches/glibc/glibc-rh988931.patch deleted file mode 100644 index 38594a47b2..0000000000 --- a/src/patches/glibc/glibc-rh988931.patch +++ /dev/null @@ -1,33 +0,0 @@ -commit e23fe25b33324a9ea992276c1a4f04127bf9ba4b -Author: Andreas Schwab -Date: Sun Feb 20 07:24:56 2011 -0500 - - Move setting variable in relro data earlier in ld.so. - -diff --git a/elf/rtld.c b/elf/rtld.c -index 8510380..174954b 100644 ---- a/elf/rtld.c -+++ b/elf/rtld.c -@@ -2179,6 +2179,10 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", - we need it in the memory handling later. */ - GLRO(dl_initial_searchlist) = *GL(dl_ns)[LM_ID_BASE]._ns_main_searchlist; - -+ /* Remember the last search directory added at startup, now that -+ malloc will no longer be the one from dl-minimal.c. */ -+ GLRO(dl_init_all_dirs) = GL(dl_all_dirs); -+ - if (prelinked) - { - if (main_map->l_info [ADDRIDX (DT_GNU_CONFLICT)] != NULL) -@@ -2298,9 +2302,8 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", - lossage); - } - -- /* Remember the last search directory added at startup, now that -- malloc will no longer be the one from dl-minimal.c. */ -- GLRO(dl_init_all_dirs) = GL(dl_all_dirs); -+ /* Make sure no new search directories have been added. */ -+ assert (GLRO(dl_init_all_dirs) == GL(dl_all_dirs)); - - if (! prelinked && rtld_multiple_ref) - { diff --git a/src/patches/glibc/glibc-rh995972.patch b/src/patches/glibc/glibc-rh995972.patch deleted file mode 100644 index 0178bca761..0000000000 --- a/src/patches/glibc/glibc-rh995972.patch +++ /dev/null @@ -1,246 +0,0 @@ -commit d26dfc60edc8c6dd160eefff16a734152a835ca0 -Author: Martin von Gagern -Date: Sat May 14 21:25:43 2011 -0400 - - Fix handling of static TLS in dlopen'ed objects - - When dynamically loading a library along with several dependencies, calls to - _dl_add_to_slotinfo and _dl_update_slotinfo can become intermixed. As a - consequence, _dl_update_slotinfo will update the generation counter of the dtv - although not all of the slots belonging to that generation have been added. - Subsequent calls to _dl_add_to_slotinfo will add more slots to the same - generation, for which no storage will be allocated, as the dtv generation - checks will claim no work is necessary. This will lead to uninitialized dtv - entries and will likely cause a SIGSEGV when thread local variables are - accessed. - -diff --git a/elf/Makefile b/elf/Makefile -index 8d9657d..6efb86c 100644 ---- a/elf/Makefile -+++ b/elf/Makefile -@@ -76,6 +76,7 @@ distribute := rtld-Rules \ - tst-tlsmod12.c tst-tls10.h tst-alignmod.c tst-alignmod2.c \ - circlemod1.c circlemod1a.c circlemod2.c circlemod2a.c \ - circlemod3.c circlemod3a.c nodlopenmod2.c \ -+ tst-tls19mod1.c tst-tls19mod2.c tst-tls19mod3.c \ - tls-macros.h \ - reldep8mod1.c reldep8mod2.c reldep8mod3.c \ - nodel2mod1.c nodel2mod2.c nodel2mod3.c \ -@@ -194,7 +195,7 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \ - restest2 next dblload dblunload reldep5 reldep6 reldep7 reldep8 \ - circleload1 tst-tls3 tst-tls4 tst-tls5 tst-tls6 tst-tls7 tst-tls8 \ - tst-tls10 tst-tls11 tst-tls12 tst-tls13 tst-tls14 tst-tls15 \ -- tst-tls16 tst-tls17 tst-tls18 tst-tls-dlinfo \ -+ tst-tls16 tst-tls17 tst-tls18 tst-tls19 tst-tls-dlinfo \ - tst-align tst-align2 $(tests-execstack-$(have-z-execstack)) \ - tst-dlmodcount tst-dlopenrpath tst-deep1 \ - tst-dlmopen1 tst-dlmopen2 tst-dlmopen3 \ -@@ -240,6 +241,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \ - $(patsubst %,tst-tlsmod17a%,$(tlsmod17a-suffixes)) \ - tst-tlsmod17b \ - $(patsubst %,tst-tlsmod18a%,$(tlsmod18a-suffixes)) \ -+ tst-tls19mod1 tst-tls19mod2 tst-tls19mod3 \ - circlemod1 circlemod1a circlemod2 circlemod2a \ - circlemod3 circlemod3a \ - reldep8mod1 reldep8mod2 reldep8mod3 \ -@@ -525,6 +527,8 @@ $(objpfx)tst-tlsmod13a.so: $(objpfx)tst-tlsmod13.so - # For tst-tls9-static, make sure the modules it dlopens have libc.so in DT_NEEDED - $(objpfx)tst-tlsmod5.so: $(common-objpfx)libc.so - $(objpfx)tst-tlsmod6.so: $(common-objpfx)libc.so -+$(objpfx)tst-tls19mod1.so: $(objpfx)tst-tls19mod2.so $(objpfx)tst-tls19mod3.so -+$(objpfx)tst-tls19mod3.so: $(objpfx)ld.so - $(objpfx)reldep8mod3.so: $(objpfx)reldep8mod1.so $(objpfx)reldep8mod2.so - $(objpfx)nodel2mod3.so: $(objpfx)nodel2mod1.so $(objpfx)nodel2mod2.so - $(objpfx)reldep9mod2.so: $(objpfx)reldep9mod1.so -@@ -822,6 +826,9 @@ $(patsubst %,$(objpfx)%.os,$(tlsmod18a-modules)): $(objpfx)tst-tlsmod18a%.os : t - $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ -DN=$* -DNOT_IN_libc=1 $< - $(patsubst %,$(objpfx)tst-tlsmod18a%.so,$(tlsmod18a-suffixes)): $(objpfx)tst-tlsmod18a%.so: $(objpfx)ld.so - -+$(objpfx)tst-tls19: $(libdl) -+$(objpfx)tst-tls19.out: $(objpfx)tst-tls19mod1.so -+ - CFLAGS-tst-align.c = $(stack-align-test-flags) - CFLAGS-tst-align2.c = $(stack-align-test-flags) - CFLAGS-tst-alignmod.c = $(stack-align-test-flags) -diff --git a/elf/dl-open.c b/elf/dl-open.c -index cf8e8cc..8d90b56 100644 ---- a/elf/dl-open.c -+++ b/elf/dl-open.c -@@ -347,6 +347,7 @@ dl_open_worker (void *a) - /* If the file is not loaded now as a dependency, add the search - list of the newly loaded object to the scope. */ - bool any_tls = false; -+ unsigned int first_static_tls = new->l_searchlist.r_nlist; - for (unsigned int i = 0; i < new->l_searchlist.r_nlist; ++i) - { - struct link_map *imap = new->l_searchlist.r_list[i]; -@@ -425,30 +426,9 @@ dl_open_worker (void *a) - might have to increase its size. */ - _dl_add_to_slotinfo (imap); - -- if (imap->l_need_tls_init) -- { -- /* For static TLS we have to allocate the memory here -- and now. This includes allocating memory in the DTV. -- But we cannot change any DTV other than our own. So, -- if we cannot guarantee that there is room in the DTV -- we don't even try it and fail the load. -- -- XXX We could track the minimum DTV slots allocated in -- all threads. */ -- if (! RTLD_SINGLE_THREAD_P && imap->l_tls_modid > DTV_SURPLUS) -- _dl_signal_error (0, "dlopen", NULL, N_("\ --cannot load any more object with static TLS")); -- -- imap->l_need_tls_init = 0; --#ifdef SHARED -- /* Update the slot information data for at least the -- generation of the DSO we are allocating data for. */ -- _dl_update_slotinfo (imap->l_tls_modid); --#endif -- -- GL(dl_init_static_tls) (imap); -- assert (imap->l_need_tls_init == 0); -- } -+ if (imap->l_need_tls_init -+ && first_static_tls == new->l_searchlist.r_nlist) -+ first_static_tls = i; - - /* We have to bump the generation counter. */ - any_tls = true; -@@ -460,6 +440,40 @@ cannot load any more object with static TLS")); - _dl_fatal_printf (N_("\ - TLS generation counter wrapped! Please report this.")); - -+ /* We need a second pass for static tls data, because _dl_update_slotinfo -+ must not be run while calls to _dl_add_to_slotinfo are still pending. */ -+ for (unsigned int i = first_static_tls; i < new->l_searchlist.r_nlist; ++i) -+ { -+ struct link_map *imap = new->l_searchlist.r_list[i]; -+ -+ if (imap->l_need_tls_init -+ && ! imap->l_init_called -+ && imap->l_tls_blocksize > 0) -+ { -+ /* For static TLS we have to allocate the memory here and -+ now. This includes allocating memory in the DTV. But we -+ cannot change any DTV other than our own. So, if we -+ cannot guarantee that there is room in the DTV we don't -+ even try it and fail the load. -+ -+ XXX We could track the minimum DTV slots allocated in -+ all threads. */ -+ if (! RTLD_SINGLE_THREAD_P && imap->l_tls_modid > DTV_SURPLUS) -+ _dl_signal_error (0, "dlopen", NULL, N_("\ -+cannot load any more object with static TLS")); -+ -+ imap->l_need_tls_init = 0; -+#ifdef SHARED -+ /* Update the slot information data for at least the -+ generation of the DSO we are allocating data for. */ -+ _dl_update_slotinfo (imap->l_tls_modid); -+#endif -+ -+ GL(dl_init_static_tls) (imap); -+ assert (imap->l_need_tls_init == 0); -+ } -+ } -+ - /* Notify the debugger all new objects have been relocated. */ - if (relocation_in_progress) - LIBC_PROBE (rtld_reloc_complete, 3, args->nsid, r, new); -diff --git a/elf/tst-tls19.c b/elf/tst-tls19.c -new file mode 100644 -index 0000000..acbc1d6 ---- /dev/null -+++ b/elf/tst-tls19.c -@@ -0,0 +1,27 @@ -+// BZ 12453 -+#include -+#include -+ -+ -+static int -+do_test (void) -+{ -+ void* dl = dlopen ("tst-tls19mod1.so", RTLD_LAZY | RTLD_GLOBAL); -+ if (dl == NULL) -+ { -+ printf ("Error loading tst-tls19mod1.so: %s\n", dlerror ()); -+ return 1; -+ } -+ -+ int (*fn) (void) = dlsym (dl, "foo"); -+ if (fn == NULL) -+ { -+ printf("Error obtaining symbol foo\n"); -+ return 1; -+ } -+ -+ return fn (); -+} -+ -+#define TEST_FUNCTION do_test () -+#include "../test-skeleton.c" -diff --git a/elf/tst-tls19mod1.c b/elf/tst-tls19mod1.c -new file mode 100644 -index 0000000..2790097 ---- /dev/null -+++ b/elf/tst-tls19mod1.c -@@ -0,0 +1,15 @@ -+#include -+ -+extern int bar (void); -+extern int baz (void); -+ -+int -+foo (void) -+{ -+ int v1 = bar (); -+ int v2 = baz (); -+ -+ printf ("bar=%d, baz=%d\n", v1, v2); -+ -+ return v1 != 666 || v2 != 42; -+} -diff --git a/elf/tst-tls19mod2.c b/elf/tst-tls19mod2.c -new file mode 100644 -index 0000000..cae702f ---- /dev/null -+++ b/elf/tst-tls19mod2.c -@@ -0,0 +1,13 @@ -+static int __thread tbar __attribute__ ((tls_model ("initial-exec"))) = 666; -+ -+void -+setter (int a) -+{ -+ tbar = a; -+} -+ -+int -+bar (void) -+{ -+ return tbar; -+} -diff --git a/elf/tst-tls19mod3.c b/elf/tst-tls19mod3.c -new file mode 100644 -index 0000000..e7b2801 ---- /dev/null -+++ b/elf/tst-tls19mod3.c -@@ -0,0 +1,16 @@ -+#include -+ -+static int __thread tbaz __attribute__ ((tls_model ("local-dynamic"))) = 42; -+ -+void -+setter2 (int a) -+{ -+ tbaz = a; -+} -+ -+int -+baz (void) -+{ -+ printf ("&tbaz=%p\n", &tbaz); -+ return tbaz; -+}