diff --git a/chapter01/changelog.xml b/chapter01/changelog.xml index 099b5927e..935b7487a 100644 --- a/chapter01/changelog.xml +++ b/chapter01/changelog.xml @@ -39,7 +39,41 @@ or as appropriate for the entry or if needed the entire day's listitem. --> - + + 2022-11-22 + + + [xry111] - Update to linux-6.0.9. Fixes + #5162. + + + [xry111] - Update to libpipeline-1.5.7. Fixes + #5163. + + + [xry111] - Update to xz-5.2.8. Fixes + #5164. + + + [xry111] - Update to man-db-2.11.1. Fixes + #5166. + + + [xry111] - Update to mpfr-4.1.1. Fixes + #5167. + + + [xry111] - Stop disabling decimal float for temporary GCC, + so mpfr will be built with decimal float support. + + + [xry111] - Update instruction for wheel to avoid relying on + deprecated Python features. + + + + + 2022-11-10 diff --git a/chapter05/gcc-pass1.xml b/chapter05/gcc-pass1.xml index b6245fce2..a1cc87e4f 100644 --- a/chapter05/gcc-pass1.xml +++ b/chapter05/gcc-pass1.xml @@ -100,7 +100,6 @@ cd build --disable-nls \ --disable-shared \ --disable-multilib \ - --disable-decimal-float \ --disable-threads \ --disable-libatomic \ --disable-libgomp \ @@ -208,15 +207,15 @@ cd build - --disable-decimal-float, --disable-threads, - --disable-libatomic, --disable-libgomp, + --disable-threads, + --disable-libatomic, --disable-libgomp, --disable-libquadmath, --disable-libssp, --disable-libvtv, --disable-libstdcxx - These switches disable support for the decimal floating point - extension, threading, libatomic, libgomp, libquadmath, libssp, + These switches disable support for + threading, libatomic, libgomp, libquadmath, libssp, libvtv, and the C++ standard library respectively. These features - will fail to compile when building a cross-compiler and are not + may fail to compile when building a cross-compiler and are not necessary for the task of cross-compiling the temporary libc. diff --git a/chapter06/gcc-pass2.xml b/chapter06/gcc-pass2.xml index 2242bbc94..ba1a4b7a2 100644 --- a/chapter06/gcc-pass2.xml +++ b/chapter06/gcc-pass2.xml @@ -101,7 +101,6 @@ cd build --enable-default-ssp \ --disable-nls \ --disable-multilib \ - --disable-decimal-float \ --disable-libatomic \ --disable-libgomp \ --disable-libquadmath \ diff --git a/chapter08/acl.xml b/chapter08/acl.xml index 654a250e3..a80ed23fc 100644 --- a/chapter08/acl.xml +++ b/chapter08/acl.xml @@ -24,7 +24,7 @@ <para>The Acl package contains utilities to administer Access Control Lists, - which are used to define more fine-grained discretionary access rights for + which are used to define fine-grained discretionary access rights for files and directories.</para> <segmentedlist> @@ -52,11 +52,11 @@ <screen><userinput remap="make">make</userinput></screen> - <para>The Acl tests need to be run on a filesystem that supports access - controls after <application>Coreutils</application> has been built with the - Acl libraries. If desired, return to this package and run <command>make - check</command> after <application>Coreutils</application> has been built - later in this chapter.</para> + <para>The Acl tests must be run on a filesystem that supports access + controls, but not until the <application>Coreutils</application> package has been built, + using the <application>Acl</application> libraries. If desired, return to this package + and run <command>make check</command> after the <application>Coreutils</application> + package has been built.</para> <para>Install the package:</para> diff --git a/chapter08/attr.xml b/chapter08/attr.xml index 28a07b331..5b6709995 100644 --- a/chapter08/attr.xml +++ b/chapter08/attr.xml @@ -23,8 +23,8 @@ <sect2 role="package"> <title/> - <para>The attr package contains utilities to administer the extended - attributes on filesystem objects.</para> + <para>The Attr package contains utilities to administer the extended + attributes of filesystem objects.</para> <segmentedlist> <segtitle>&buildtime;</segtitle> @@ -52,7 +52,7 @@ <screen><userinput remap="make">make</userinput></screen> - <para>The tests need to be run on a filesystem that supports extended + <para>The tests must be run on a filesystem that supports extended attributes such as the ext2, ext3, or ext4 filesystems. To test the results, issue:</para> diff --git a/chapter08/coreutils.xml b/chapter08/coreutils.xml index eb3cbcd06..3d2138026 100644 --- a/chapter08/coreutils.xml +++ b/chapter08/coreutils.xml @@ -128,11 +128,10 @@ FORCE_UNSAFE_CONFIGURE=1 ./configure \ <screen><userinput remap="test">su tester -c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check"</userinput></screen> -<!-- test-getlogin is now skipped - <para>The test-getlogin test is known to fail in the LFS chroot environment.</para> ---> -<!-- should be fixed at next release, coreutils-9.2 --> - <para>The sort-NaN-infloop test is known to fail with GCC-12.</para> +<!-- Sometimes skipped, but if not it may fail. + Please DO NOT remove or comment out this unless we can fully + understand it! --> + <para>The test-getlogin test may fail in the LFS chroot environment.</para> <para>Remove the temporary group:</para> diff --git a/chapter08/gcc.xml b/chapter08/gcc.xml index e9805ebd0..292600bb8 100644 --- a/chapter08/gcc.xml +++ b/chapter08/gcc.xml @@ -100,8 +100,8 @@ cd build</userinput></screen> --disable-bootstrap \ --with-system-zlib</userinput></screen> - <para>Note that for other programming languages there are some prerequisites that - are not yet available. See the + <para>GCC supports seven different computer languages, but the + prerequisites for most of them have not yet been installed. See the <ulink url="&blfs-book;general/gcc.html">BLFS Book GCC page</ulink> for instructions on how to build all of GCC's supported languages.</para> @@ -111,8 +111,8 @@ cd build</userinput></screen> <varlistentry> <term><parameter>LD=ld</parameter></term> <listitem> - <para>This parameter makes the configure script use the ld installed - by the binutils built earlier in this chapter, rather than + <para>This parameter makes the configure script use the ld program installed + by the Binutils package built earlier in this chapter, rather than the cross-built version which would otherwise be used.</para> </listitem> </varlistentry> @@ -121,7 +121,7 @@ cd build</userinput></screen> <term><parameter>--with-system-zlib</parameter></term> <listitem> <para>This switch tells GCC to link to the system installed copy of - the zlib library, rather than its own internal copy.</para> + the Zlib library, rather than its own internal copy.</para> </listitem> </varlistentry> </variablelist> @@ -129,21 +129,21 @@ cd build</userinput></screen> <note> <anchor id="pie-ssp-info" xreflabel="note on PIE and SSP"/> <para> - PIE (position-independent executable) is a technique to produce + PIE (position-independent executables) are binary programs that can be loaded anywhere in memory. Without PIE, the security feature named ASLR (Address Space Layout Randomization) - can be applied for the shared libraries, but not the executable - itself. Enabling PIE allows ASLR for the executables in addition to + can be applied for the shared libraries, but not for the executables + themselves. Enabling PIE allows ASLR for the executables in addition to the shared libraries, and mitigates some attacks based on fixed addresses of sensitive code or data in the executables. </para> <para> SSP (Stack Smashing Protection) is a technique to ensure - that the parameter stack is not corrupted. Stack corruption can - for example alter the return address of a subroutine, - which would allow transferring control to some dangerous code + that the parameter stack is not corrupted. Stack corruption can, + for example, alter the return address of a subroutine, + thus transferring control to some dangerous code (existing in the program or shared libraries, or injected by the - attacker somehow) instead of the original one. + attacker somehow). </para> </note> @@ -153,10 +153,10 @@ cd build</userinput></screen> <important> <para>In this section, the test suite for GCC is considered - important, but it takes a long time. First time builders are - encouraged to not skip it. The time to run the tests can be - reduced significantly by adding -jx to the make command below - where x is the number of cores on your system.</para> + important, but it takes a long time. First-time builders are + encouraged to run the test suite. The time to run the tests can be + reduced significantly by adding -jx to the <command>make -k check</command> command below, + where x is the number of CPU cores on your system.</para> </important> <para>One set of tests in the GCC test suite is known to exhaust the default @@ -169,23 +169,23 @@ cd build</userinput></screen> <screen><userinput remap="test">chown -Rv tester . su tester -c "PATH=$PATH make -k check"</userinput></screen> - <para>To receive a summary of the test suite results, run:</para> + <para>To extract a summary of the test suite results, run:</para> <screen><userinput remap="test">../contrib/test_summary</userinput></screen> - <para>For only the summaries, pipe the output through + <para>To filter out only the summaries, pipe the output through <userinput>grep -A7 Summ</userinput>.</para> <para>Results can be compared with those located at <ulink url="&test-results;"/> and <ulink url="https://gcc.gnu.org/ml/gcc-testresults/"/>.</para> - <para>In gcc, eleven tests, in the i386 test suite are known to FAIL. + <para>Eleven tests in the i386 test suite for the gcc compiler are known to FAIL. It's because the test files do not account for the <parameter>--enable-default-pie</parameter> option.</para> - <para>In g++, four tests related to PR100400 are known to be reported - as both XPASS and FAIL. It's because the test file for this known issue + <para>Four tests related to PR100400 may be reported + as both XPASS and FAIL when testing the g++ compiler; the test file is not well written.</para> <para>A few unexpected failures cannot always be avoided. The GCC developers @@ -207,8 +207,8 @@ su tester -c "PATH=$PATH make -k check"</userinput></screen> <screen><userinput remap="install">make install</userinput></screen> <para>The GCC build directory is owned by <systemitem class="username"> - tester</systemitem> now and the ownership of the installed header - directory (and its content) will be incorrect. Change the ownership to + tester</systemitem> now, and the ownership of the installed header + directory (and its content) is incorrect. Change the ownership to the <systemitem class="username">root</systemitem> user and group:</para> <screen><userinput remap="install">chown -v -R root:root \ @@ -245,7 +245,7 @@ readelf -l a.out | grep ': /lib'</userinput></screen> <screen><computeroutput>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</computeroutput></screen> - <para>Now make sure that we're setup to use the correct start files:</para> + <para>Now make sure that we're set up to use the correct start files:</para> <screen><userinput>grep -E -o '/usr/lib.*/S?crt[1in].*succeeded' dummy.log</userinput></screen> @@ -294,7 +294,7 @@ SEARCH_DIR("/usr/local/lib") SEARCH_DIR("/lib") SEARCH_DIR("/usr/lib");</computeroutput></screen> - <para arch="default">A 32-bit system may see a few different directories. For example, here + <para arch="default">A 32-bit system may use a few other directories. For example, here is the output from an i686 machine:</para> <!-- not using entities here as the dir names has nothing to do with multilib --> @@ -328,7 +328,7 @@ SEARCH_DIR("/usr/lib");</computeroutput></screen> at all, then something is seriously wrong. Investigate and retrace the steps to find out where the problem is and correct it. <!--The most likely reason is that something went wrong with the specs file adjustment.--> Any - issues will need to be resolved before continuing with the process.</para> + issues should be resolved before continuing with the process.</para> <para>Once everything is working correctly, clean up the test files:</para> @@ -395,7 +395,7 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen> <term><command>cpp</command></term> <listitem> <para>The C preprocessor; it is used by the compiler to expand the - #include, #define, and similar statements in the source files</para> + #include, #define, and similar directives in the source files</para> <indexterm zone="ch-system-gcc cpp"> <primary sortas="b-cpp">cpp</primary> </indexterm> @@ -428,7 +428,7 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen> <para>A wrapper around <command>ar</command> that adds a plugin to the command line. This program is only used to add "link time optimization" and is not useful with the - default build options</para> + default build options.</para> <indexterm zone="ch-system-gcc gcc-ar"> <primary sortas="b-gcc-ar">gc-ar</primary> </indexterm> @@ -441,7 +441,7 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen> <para>A wrapper around <command>nm</command> that adds a plugin to the command line. This program is only used to add "link time optimization" and is not useful with the - default build options</para> + default build options.</para> <indexterm zone="ch-system-gcc gcc-nm"> <primary sortas="b-gcc-nm">gc-nm</primary> </indexterm> @@ -454,7 +454,7 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen> <para>A wrapper around <command>ranlib</command> that adds a plugin to the command line. This program is only used to add "link time optimization" and is not useful with the - default build options</para> + default build options.</para> <indexterm zone="ch-system-gcc gcc-ranlib"> <primary sortas="b-gcc-ranlib">gc-ranlib</primary> </indexterm> @@ -465,7 +465,7 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen> <term><command>gcov</command></term> <listitem> <para>A coverage testing tool; it is used to analyze programs to - determine where optimizations will have the most effect</para> + determine where optimizations will have the greatest effect</para> <indexterm zone="ch-system-gcc gcov"> <primary sortas="b-gcov">gcov</primary> </indexterm> @@ -546,7 +546,7 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen> <varlistentry id="libgcov"> <term><filename class="libraryfile">libgcov</filename></term> <listitem> - <para>This library is linked in to a program when GCC is instructed + <para>This library is linked into a program when GCC is instructed to enable profiling</para> <indexterm zone="ch-system-gcc libgcov"> <primary sortas="c-libgcov">libgcov</primary> @@ -588,7 +588,7 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen> <varlistentry id="liblto_plugin"> <term><filename class="libraryfile">liblto_plugin</filename></term> <listitem> - <para>GCC's LTO plugin allows binutils to process object files + <para>GCC's LTO plugin allows Binutils to process object files produced by GCC with LTO enabled</para> <indexterm zone="ch-system-gcc liblto_plugin"> <primary sortas="c-liblto_plugin">liblto_plugin</primary> @@ -610,8 +610,8 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen> <term><filename class="libraryfile">libssp</filename></term> <listitem> <para>Contains routines supporting GCC's stack-smashing protection - functionality. Normally it's unused because glibc also provides - those routines</para> + functionality. Normally it is not used, because Glibc also provides + those routines.</para> <indexterm zone="ch-system-gcc libssp"> <primary sortas="c-libssp">libssp</primary> </indexterm> diff --git a/chapter08/libcap.xml b/chapter08/libcap.xml index fa1811480..0a2757017 100644 --- a/chapter08/libcap.xml +++ b/chapter08/libcap.xml @@ -23,9 +23,9 @@ <sect2 role="package"> <title/> - <para>The Libcap package implements the user-space interfaces to the POSIX - 1003.1e capabilities available in Linux kernels. These capabilities are a - partitioning of the all powerful root privilege into a set of distinct + <para>The Libcap package implements the user-space interface to the POSIX + 1003.1e capabilities available in Linux kernels. These capabilities + partition the all-powerful root privilege into a set of distinct privileges.</para> <segmentedlist> @@ -166,7 +166,7 @@ rm -rf DESTDIR</userinput></screen> <varlistentry id="getpcaps"> <term><command>getpcaps</command></term> <listitem> - <para>Displays the capabilities on the queried process(es)</para> + <para>Displays the capabilities of the queried process(es)</para> <indexterm zone="ch-system-libcap getpcaps"> <primary sortas="b-getpcaps">getpcaps</primary> </indexterm> diff --git a/chapter08/mpfr.xml b/chapter08/mpfr.xml index f2344facb..7237b1ecb 100644 --- a/chapter08/mpfr.xml +++ b/chapter08/mpfr.xml @@ -58,7 +58,7 @@ make html</userinput></screen> Do not skip it under any circumstances.</para> </important> - <para>Test the results and ensure that all tests passed:</para> + <para>Test the results and ensure that all 183 tests passed:</para> <screen><userinput remap="test">make check</userinput></screen> diff --git a/chapter08/shadow.xml b/chapter08/shadow.xml index cbd6ac913..83c8f6ec9 100644 --- a/chapter08/shadow.xml +++ b/chapter08/shadow.xml @@ -66,16 +66,16 @@ find man -name Makefile.in -exec sed -i 's/passwd\.5 / /' {} \;</userinput></s the obsolete <filename class="directory">/var/spool/mail</filename> location for user mailboxes that Shadow uses by default to the <filename class="directory">/var/mail</filename> location used currently. And, - get rid of <filename class="directory">/bin</filename> and - <filename class="directory">/sbin</filename> from <envar>PATH</envar>, - since they are simply symlinks to their counterpart in + remove <filename class="directory">/bin</filename> and + <filename class="directory">/sbin</filename> from the <envar>PATH</envar>, + since they are simply symlinks to their counterparts in <filename class="directory">/usr</filename>.</para> <note> - <para>If <filename class="directory">/bin</filename> and/or - <filename class="directory">/sbin</filename> are preferred to be - left over in <envar>PATH</envar> for some reason, modify - <envar>PATH</envar> in <filename>.bashrc</filename> after LFS is + <para>If you wish to include <filename class="directory">/bin</filename> + and/or <filename class="directory">/sbin</filename> in the <envar>PATH</envar> + for some reason, modify the + <envar>PATH</envar> in <filename>.bashrc</filename> after LFS has been built.</para> </note> @@ -85,7 +85,7 @@ find man -name Makefile.in -exec sed -i 's/passwd\.5 / /' {} \;</userinput></s -i etc/login.defs</userinput></screen> <note> - <para>If you chose to build Shadow with Cracklib support, run the following:</para> + <para>If you chose to build Shadow with Cracklib support, issue this command:</para> <screen role="nodump"><userinput>sed -i 's:DICTPATH.*:DICTPATH\t/lib/cracklib/pw_dict:' etc/login.defs</userinput></screen> </note> @@ -108,21 +108,22 @@ find man -name Makefile.in -exec sed -i 's/passwd\.5 / /' {} \;</userinput></s --with-group-name-max-length=32</userinput></screen> <variablelist> - <title>The meaning of the configure option: + The meaning of the new configuration options: touch /usr/bin/passwd The file /usr/bin/passwd needs - to exist because its location is hardcoded in some programs, and - if it does not exist, the default location is not right. + to exist because its location is hardcoded in some programs; + if it does not already exist, the installation script will + create it in the wrong place. --with-group-name-max-length=32 - The maximum user name is 32 characters. Make the maximum - group name the same. + The longest permissible user name is 32 characters. Make the maximum + length of a group name the same. @@ -153,9 +154,9 @@ make -C man install-man groups; set and change their passwords; and perform other administrative tasks. For a full explanation of what password shadowing means, see the doc/HOWTO file within the unpacked - source tree. If using Shadow support, keep in mind that programs which need + source tree. If you use Shadow support, keep in mind that programs which need to verify passwords (display managers, FTP programs, pop3 daemons, etc.) - must be Shadow-compliant. That is, they need to be able to work with + must be Shadow-compliant. That is, they must be able to work with shadowed passwords. To enable shadowed passwords, run the following command: @@ -167,44 +168,44 @@ make -C man install-man grpconv Shadow's default configuration for the useradd - utility has a few caveats that need some explanation. First, the default + utility needs some explanation. First, the default action for the useradd utility is to create the user and - a group of the same name as the user. By default the user ID (UID) and - group ID (GID) numbers will begin with 1000. This means if you don't pass - parameters to useradd, each user will be a member of a + a group with the same name as the user. By default the user ID (UID) and + group ID (GID) numbers will begin at 1000. This means if you don't pass + extra parameters to useradd, each user will be a member of a unique group on the system. If this behavior is undesirable, you'll need - to pass one of the -g or -N - parameter to useradd or to change the setting of + to pass either the -g or -N + parameter to useradd, or else change the setting of USERGROUPS_ENAB in /etc/login.defs. See useradd(8) for more information. Second, to change the default parameters, the file - /etc/default/useradd needs to be created and tailored + /etc/default/useradd must be created and tailored to suit your particular needs. Create it with: mkdir -p /etc/default useradd -D --gid 999 - <filename>/etc/default/useradd</filename> Parameter Explanations + <filename>/etc/default/useradd</filename> parameter explanations GROUP=999 This parameter sets the beginning of the group numbers used in the /etc/group file. The particular value 999 - comes from the --gid parameter above. You can - modify it to anything you desire. + comes from the --gid parameter above. You + may set it to any desired value. Note that useradd will never reuse a UID or GID. If the number identified in this parameter is used, it will use the next available number. Note also that if you don't have a group with - an ID equal to this number on your system the first time you use + an ID equal to this number on your system, then the first time you use useradd without the -g - parameter, you will get a message displayed on the terminal that - says: useradd: unknown GID 999, - although the account is correctly created. That is why we have + parameter, an error message will be generated—useradd: + unknown GID 999, + even though the account has been created correctly. That is why we created the group users with this group ID in . @@ -214,12 +215,11 @@ useradd -D --gid 999 CREATE_MAIL_SPOOL=yes This parameter causes useradd to create a - mailbox file for the newly created user. useradd - will make the group ownership of this file to the + mailbox file for each new user. useradd + will assign the group ownership of this file to the mail group with 0660 - permissions. If you would prefer that these mailbox files are not - created by useradd, issue the following - command: + permissions. If you would rather not create these files, + issue the following command: sed -i '/MAIL/s/yes/no/' /etc/default/useradd @@ -230,7 +230,7 @@ useradd -D --gid 999 - Setting the root password + Setting the Root Password Choose a password for user root and set it by running: @@ -329,7 +329,7 @@ useradd -D --gid 999 faillog Is used to examine the log of login failures, to set a maximum - number of failures before an account is blocked, or to reset the + number of failures before an account is blocked, and to reset the failure count faillog @@ -509,9 +509,8 @@ useradd -D --gid 999 nologin - Displays a message that an account is not available; it is designed - to be used as the default shell for accounts that have been - disabled + Displays a message saying an account is not available; it is designed + to be used as the default shell for disabled accounts nologin @@ -597,7 +596,7 @@ useradd -D --gid 999 userdel - Deletes the given user account + Deletes the specified user account userdel @@ -607,8 +606,8 @@ useradd -D --gid 999 usermod - Is used to modify the given user's login name, User - Identification (UID), shell, initial group, home directory, etc. + Is used to modify the given user's login name, user + identification (UID), shell, initial group, home directory, etc. usermod @@ -640,7 +639,7 @@ useradd -D --gid 999 libsubid - library for process subordinate id ranges for users + library to handle subordinate id ranges for users and groups libsubid diff --git a/chapter08/wheel.xml b/chapter08/wheel.xml index f49ada356..5b09fc65b 100644 --- a/chapter08/wheel.xml +++ b/chapter08/wheel.xml @@ -40,12 +40,39 @@ Installation of Wheel + Compile wheel with the following command: + +PYTHONPATH=src pip3 wheel -w dist --no-build-isolation --no-deps $PWD + Install wheel with the following command: -pip3 install --no-index $PWD +pip3 install --no-index --find-links=dist wheel - The meaning of the pip3 options: + The meaning of the pip3 commands: + + + PYTHONPATH=src + + Allow using this package (not installed yet) to build a + wheel archive for itself, to avoid a chicken-or-egg problem. + + + + + wheel + + Build wheel archive for this package. + + + + + -w dist + + Put the created wheels into the + dist directory. + + install @@ -55,24 +82,25 @@ - --no-index + --no-build-isolation, + --no-deps, and + --no-index Prevent pip from fetching files from the online package repository (PyPI). If packages are installed in the correct order, - then it won't need to fetch any files in the first place, but this - option adds some safety in case of user error. + then it won't need to fetch any files in the first place, but these + options add some safety in case of user error. - $PWD + --find-links dist - Look for files to install in the current working directory. + Search wheel archives from the + dist directory. - - @@ -86,7 +114,7 @@ wheel /usr/lib/python&python-minor;/site-packages/wheel and - /usr/lib/python&python-minor;/site-packages/wheel-&wheel-version;-py&python-minor;.egg-info + /usr/lib/python&python-minor;/site-packages/wheel-&wheel-version;.dist-info diff --git a/packages.ent b/packages.ent index 2152a65bd..67f50eab9 100644 --- a/packages.ent +++ b/packages.ent @@ -415,10 +415,10 @@ - - + + - + @@ -433,12 +433,12 @@ - + - + - +