From 99912e6d2978f7079da86ebbec23262901e8657a Mon Sep 17 00:00:00 2001 From: jingquan liu <2457161894@qq.com> Date: Thu, 8 Jul 2021 21:03:48 +0800 Subject: [PATCH] final --- LICENSE | 35 + README | 6 + README.md | 19 + Source-Insight/Linux-0.11.IAB | Bin 0 -> 102400 bytes Source-Insight/Linux-0.11.IAD | Bin 0 -> 1328 bytes Source-Insight/Linux-0.11.IMB | Bin 0 -> 81920 bytes Source-Insight/Linux-0.11.IMD | Bin 0 -> 1128 bytes Source-Insight/Linux-0.11.PFI | Bin 0 -> 412 bytes Source-Insight/Linux-0.11.PO | Bin 0 -> 776 bytes Source-Insight/Linux-0.11.PR | Bin 0 -> 32648 bytes Source-Insight/Linux-0.11.PRI | Bin 0 -> 208984 bytes Source-Insight/Linux-0.11.PS | Bin 0 -> 623496 bytes Source-Insight/Linux-0.11.SearchResults | 2 + Source-Insight/Linux-0.11.WK3 | Bin 0 -> 8851 bytes linux/Image | Bin 0 -> 135588 bytes linux/Image.bkp | Bin 0 -> 131556 bytes linux/Makefile | 125 +++ linux/System.map | 588 ++++++++++++ linux/System.map.2 | 1084 +++++++++++++++++++++++ linux/boot/bootsect | Bin 0 -> 544 bytes linux/boot/bootsect.o | Bin 0 -> 923 bytes linux/boot/bootsect.s | 260 ++++++ linux/boot/head.o | Bin 0 -> 27012 bytes linux/boot/head.s | 240 +++++ linux/boot/setup | Bin 0 -> 344 bytes linux/boot/setup.o | Bin 0 -> 596 bytes linux/boot/setup.s | 231 +++++ linux/execve2.patch | 41 + linux/fs/Makefile | 101 +++ linux/fs/bitmap.c | 168 ++++ linux/fs/bitmap.o | Bin 0 -> 10272 bytes linux/fs/block_dev.c | 73 ++ linux/fs/block_dev.o | Bin 0 -> 7288 bytes linux/fs/buffer.c | 384 ++++++++ linux/fs/buffer.o | Bin 0 -> 13340 bytes linux/fs/char_dev.c | 104 +++ linux/fs/char_dev.o | Bin 0 -> 8284 bytes linux/fs/exec.c | 540 +++++++++++ linux/fs/exec.o | Bin 0 -> 19472 bytes linux/fs/fcntl.c | 75 ++ linux/fs/fcntl.o | Bin 0 -> 6740 bytes linux/fs/file_dev.c | 90 ++ linux/fs/file_dev.o | Bin 0 -> 7820 bytes linux/fs/file_table.c | 9 + linux/fs/file_table.o | Bin 0 -> 2636 bytes linux/fs/fs.o | Bin 0 -> 147340 bytes linux/fs/inode.c | 340 +++++++ linux/fs/inode.o | Bin 0 -> 14064 bytes linux/fs/ioctl.c | 46 + linux/fs/ioctl.o | Bin 0 -> 5824 bytes linux/fs/namei.c | 784 ++++++++++++++++ linux/fs/namei.o | Bin 0 -> 20752 bytes linux/fs/open.c | 208 +++++ linux/fs/open.o | Bin 0 -> 11176 bytes linux/fs/pipe.c | 111 +++ linux/fs/pipe.o | Bin 0 -> 8096 bytes linux/fs/read_write.c | 103 +++ linux/fs/read_write.o | Bin 0 -> 7516 bytes linux/fs/select.c | 10 + linux/fs/select.o | Bin 0 -> 1772 bytes linux/fs/stat.c | 66 ++ linux/fs/stat.o | Bin 0 -> 7204 bytes linux/fs/super.c | 282 ++++++ linux/fs/super.o | Bin 0 -> 12280 bytes linux/fs/truncate.c | 65 ++ linux/fs/truncate.o | Bin 0 -> 6840 bytes linux/include/.DS_Store | Bin 0 -> 6148 bytes linux/include/a.out.h | 220 +++++ linux/include/asm/io.h | 24 + linux/include/asm/memory.h | 15 + linux/include/asm/segment.h | 65 ++ linux/include/asm/system.h | 66 ++ linux/include/assert.h | 34 + linux/include/const.h | 15 + linux/include/ctype.h | 34 + linux/include/errno.h | 60 ++ linux/include/fcntl.h | 56 ++ linux/include/linux/config.h | 48 + linux/include/linux/fdreg.h | 71 ++ linux/include/linux/fs.h | 210 +++++ linux/include/linux/hdreg.h | 65 ++ linux/include/linux/head.h | 20 + linux/include/linux/kernel.h | 22 + linux/include/linux/mm.h | 10 + linux/include/linux/sched.h | 239 +++++ linux/include/linux/sys.h | 119 +++ linux/include/linux/tty.h | 77 ++ linux/include/signal.h | 69 ++ linux/include/stdarg.h | 28 + linux/include/stddef.h | 19 + linux/include/stdio.h | 256 ++++++ linux/include/stdlib.h | 43 + linux/include/string.h | 405 +++++++++ linux/include/sys/stat.h | 58 ++ linux/include/sys/times.h | 15 + linux/include/sys/types.h | 46 + linux/include/sys/utsname.h | 16 + linux/include/sys/wait.h | 23 + linux/include/termios.h | 228 +++++ linux/include/time.h | 42 + linux/include/unistd.h | 287 ++++++ linux/include/utime.h | 13 + linux/init/main.c | 216 +++++ linux/init/main.c.rej | 12 + linux/init/main.o | Bin 0 -> 12204 bytes linux/kernel/Makefile | 83 ++ linux/kernel/asm.o | Bin 0 -> 1740 bytes linux/kernel/asm.s | 146 +++ linux/kernel/blk_drv/Makefile | 58 ++ linux/kernel/blk_drv/blk.h | 140 +++ linux/kernel/blk_drv/blk_drv.a | Bin 0 -> 52200 bytes linux/kernel/blk_drv/floppy.c | 463 ++++++++++ linux/kernel/blk_drv/floppy.o | Bin 0 -> 16608 bytes linux/kernel/blk_drv/hd.c | 351 ++++++++ linux/kernel/blk_drv/hd.o | Bin 0 -> 15524 bytes linux/kernel/blk_drv/ll_rw_blk.c | 165 ++++ linux/kernel/blk_drv/ll_rw_blk.o | Bin 0 -> 8732 bytes linux/kernel/blk_drv/ramdisk.c | 126 +++ linux/kernel/blk_drv/ramdisk.o | Bin 0 -> 10660 bytes linux/kernel/chr_drv/Makefile | 68 ++ linux/kernel/chr_drv/chr_drv.a | Bin 0 -> 68878 bytes linux/kernel/chr_drv/console.c | 710 +++++++++++++++ linux/kernel/chr_drv/console.o | Bin 0 -> 20892 bytes linux/kernel/chr_drv/keyboard.2.o | Bin 0 -> 6024 bytes linux/kernel/chr_drv/keyboard.2.s | 466 ++++++++++ linux/kernel/chr_drv/keyboard.S | 588 ++++++++++++ linux/kernel/chr_drv/rs_io.o | Bin 0 -> 1320 bytes linux/kernel/chr_drv/rs_io.s | 147 +++ linux/kernel/chr_drv/serial.c | 59 ++ linux/kernel/chr_drv/serial.o | Bin 0 -> 6744 bytes linux/kernel/chr_drv/tty_io.c | 349 ++++++++ linux/kernel/chr_drv/tty_io.o | Bin 0 -> 22496 bytes linux/kernel/chr_drv/tty_ioctl.c | 204 +++++ linux/kernel/chr_drv/tty_ioctl.o | Bin 0 -> 10644 bytes linux/kernel/exit.c | 197 ++++ linux/kernel/exit.o | Bin 0 -> 11160 bytes linux/kernel/fork.c | 148 ++++ linux/kernel/fork.o | Bin 0 -> 9632 bytes linux/kernel/kernel.o | Bin 0 -> 87278 bytes linux/kernel/math/Makefile | 43 + linux/kernel/math/math.a | Bin 0 -> 6624 bytes linux/kernel/math/math_emulate.c | 42 + linux/kernel/math/math_emulate.o | Bin 0 -> 6460 bytes linux/kernel/mktime.c | 58 ++ linux/kernel/mktime.o | Bin 0 -> 2868 bytes linux/kernel/panic.c | 24 + linux/kernel/panic.o | Bin 0 -> 5420 bytes linux/kernel/printk.c | 41 + linux/kernel/printk.o | Bin 0 -> 2420 bytes linux/kernel/sched.c | 485 ++++++++++ linux/kernel/sched.o | Bin 0 -> 25908 bytes linux/kernel/signal.c | 129 +++ linux/kernel/signal.o | Bin 0 -> 8952 bytes linux/kernel/sys.c | 305 +++++++ linux/kernel/sys.o | Bin 0 -> 13084 bytes linux/kernel/system_call.o | Bin 0 -> 2640 bytes linux/kernel/system_call.s | 298 +++++++ linux/kernel/system_call.s.rej | 14 + linux/kernel/traps.c | 208 +++++ linux/kernel/traps.o | Bin 0 -> 12964 bytes linux/kernel/vsprintf.c | 233 +++++ linux/kernel/vsprintf.o | Bin 0 -> 6152 bytes linux/lib/Makefile | 73 ++ linux/lib/_exit.c | 13 + linux/lib/_exit.o | Bin 0 -> 1984 bytes linux/lib/close.c | 10 + linux/lib/close.o | Bin 0 -> 2216 bytes linux/lib/ctype.c | 35 + linux/lib/ctype.o | Bin 0 -> 1904 bytes linux/lib/dup.c | 10 + linux/lib/dup.o | Bin 0 -> 2192 bytes linux/lib/errno.c | 7 + linux/lib/errno.o | Bin 0 -> 1468 bytes linux/lib/execve.c | 10 + linux/lib/execve.o | Bin 0 -> 2332 bytes linux/lib/lib.a | Bin 0 -> 34094 bytes linux/lib/malloc.c | 232 +++++ linux/lib/malloc.o | Bin 0 -> 4876 bytes linux/lib/open.c | 25 + linux/lib/open.o | Bin 0 -> 2360 bytes linux/lib/setsid.c | 10 + linux/lib/setsid.o | Bin 0 -> 2240 bytes linux/lib/string.c | 14 + linux/lib/string.o | Bin 0 -> 6376 bytes linux/lib/wait.c | 16 + linux/lib/wait.o | Bin 0 -> 2576 bytes linux/lib/write.c | 10 + linux/lib/write.o | Bin 0 -> 2368 bytes linux/mm/Makefile | 38 + linux/mm/memory.c | 463 ++++++++++ linux/mm/memory.c.orig | 431 +++++++++ linux/mm/memory.c.rej | 12 + linux/mm/memory.o | Bin 0 -> 13676 bytes linux/mm/mm.o | Bin 0 -> 13804 bytes linux/mm/page.o | Bin 0 -> 640 bytes linux/mm/page.s | 40 + linux/tools/build | Bin 0 -> 15140 bytes linux/tools/build.c | 171 ++++ linux/tools/system | Bin 0 -> 294939 bytes 马铁诚&&刘思睿(1).doc | Bin 0 -> 691257 bytes 200 files changed, 17404 insertions(+) create mode 100644 LICENSE create mode 100644 README create mode 100644 README.md create mode 100644 Source-Insight/Linux-0.11.IAB create mode 100644 Source-Insight/Linux-0.11.IAD create mode 100644 Source-Insight/Linux-0.11.IMB create mode 100644 Source-Insight/Linux-0.11.IMD create mode 100644 Source-Insight/Linux-0.11.PFI create mode 100644 Source-Insight/Linux-0.11.PO create mode 100644 Source-Insight/Linux-0.11.PR create mode 100644 Source-Insight/Linux-0.11.PRI create mode 100644 Source-Insight/Linux-0.11.PS create mode 100644 Source-Insight/Linux-0.11.SearchResults create mode 100644 Source-Insight/Linux-0.11.WK3 create mode 100644 linux/Image create mode 100644 linux/Image.bkp create mode 100644 linux/Makefile create mode 100644 linux/System.map create mode 100644 linux/System.map.2 create mode 100644 linux/boot/bootsect create mode 100644 linux/boot/bootsect.o create mode 100644 linux/boot/bootsect.s create mode 100644 linux/boot/head.o create mode 100644 linux/boot/head.s create mode 100644 linux/boot/setup create mode 100644 linux/boot/setup.o create mode 100644 linux/boot/setup.s create mode 100644 linux/execve2.patch create mode 100644 linux/fs/Makefile create mode 100644 linux/fs/bitmap.c create mode 100644 linux/fs/bitmap.o create mode 100644 linux/fs/block_dev.c create mode 100644 linux/fs/block_dev.o create mode 100644 linux/fs/buffer.c create mode 100644 linux/fs/buffer.o create mode 100644 linux/fs/char_dev.c create mode 100644 linux/fs/char_dev.o create mode 100644 linux/fs/exec.c create mode 100644 linux/fs/exec.o create mode 100644 linux/fs/fcntl.c create mode 100644 linux/fs/fcntl.o create mode 100644 linux/fs/file_dev.c create mode 100644 linux/fs/file_dev.o create mode 100644 linux/fs/file_table.c create mode 100644 linux/fs/file_table.o create mode 100644 linux/fs/fs.o create mode 100644 linux/fs/inode.c create mode 100644 linux/fs/inode.o create mode 100644 linux/fs/ioctl.c create mode 100644 linux/fs/ioctl.o create mode 100644 linux/fs/namei.c create mode 100644 linux/fs/namei.o create mode 100644 linux/fs/open.c create mode 100644 linux/fs/open.o create mode 100644 linux/fs/pipe.c create mode 100644 linux/fs/pipe.o create mode 100644 linux/fs/read_write.c create mode 100644 linux/fs/read_write.o create mode 100644 linux/fs/select.c create mode 100644 linux/fs/select.o create mode 100644 linux/fs/stat.c create mode 100644 linux/fs/stat.o create mode 100644 linux/fs/super.c create mode 100644 linux/fs/super.o create mode 100644 linux/fs/truncate.c create mode 100644 linux/fs/truncate.o create mode 100644 linux/include/.DS_Store create mode 100644 linux/include/a.out.h create mode 100644 linux/include/asm/io.h create mode 100644 linux/include/asm/memory.h create mode 100644 linux/include/asm/segment.h create mode 100644 linux/include/asm/system.h create mode 100644 linux/include/assert.h create mode 100644 linux/include/const.h create mode 100644 linux/include/ctype.h create mode 100644 linux/include/errno.h create mode 100644 linux/include/fcntl.h create mode 100644 linux/include/linux/config.h create mode 100644 linux/include/linux/fdreg.h create mode 100644 linux/include/linux/fs.h create mode 100644 linux/include/linux/hdreg.h create mode 100644 linux/include/linux/head.h create mode 100644 linux/include/linux/kernel.h create mode 100644 linux/include/linux/mm.h create mode 100644 linux/include/linux/sched.h create mode 100644 linux/include/linux/sys.h create mode 100644 linux/include/linux/tty.h create mode 100644 linux/include/signal.h create mode 100644 linux/include/stdarg.h create mode 100644 linux/include/stddef.h create mode 100644 linux/include/stdio.h create mode 100644 linux/include/stdlib.h create mode 100644 linux/include/string.h create mode 100644 linux/include/sys/stat.h create mode 100644 linux/include/sys/times.h create mode 100644 linux/include/sys/types.h create mode 100644 linux/include/sys/utsname.h create mode 100644 linux/include/sys/wait.h create mode 100644 linux/include/termios.h create mode 100644 linux/include/time.h create mode 100644 linux/include/unistd.h create mode 100644 linux/include/utime.h create mode 100644 linux/init/main.c create mode 100644 linux/init/main.c.rej create mode 100644 linux/init/main.o create mode 100644 linux/kernel/Makefile create mode 100644 linux/kernel/asm.o create mode 100644 linux/kernel/asm.s create mode 100644 linux/kernel/blk_drv/Makefile create mode 100644 linux/kernel/blk_drv/blk.h create mode 100644 linux/kernel/blk_drv/blk_drv.a create mode 100644 linux/kernel/blk_drv/floppy.c create mode 100644 linux/kernel/blk_drv/floppy.o create mode 100644 linux/kernel/blk_drv/hd.c create mode 100644 linux/kernel/blk_drv/hd.o create mode 100644 linux/kernel/blk_drv/ll_rw_blk.c create mode 100644 linux/kernel/blk_drv/ll_rw_blk.o create mode 100644 linux/kernel/blk_drv/ramdisk.c create mode 100644 linux/kernel/blk_drv/ramdisk.o create mode 100644 linux/kernel/chr_drv/Makefile create mode 100644 linux/kernel/chr_drv/chr_drv.a create mode 100644 linux/kernel/chr_drv/console.c create mode 100644 linux/kernel/chr_drv/console.o create mode 100644 linux/kernel/chr_drv/keyboard.2.o create mode 100644 linux/kernel/chr_drv/keyboard.2.s create mode 100644 linux/kernel/chr_drv/keyboard.S create mode 100644 linux/kernel/chr_drv/rs_io.o create mode 100644 linux/kernel/chr_drv/rs_io.s create mode 100644 linux/kernel/chr_drv/serial.c create mode 100644 linux/kernel/chr_drv/serial.o create mode 100644 linux/kernel/chr_drv/tty_io.c create mode 100644 linux/kernel/chr_drv/tty_io.o create mode 100644 linux/kernel/chr_drv/tty_ioctl.c create mode 100644 linux/kernel/chr_drv/tty_ioctl.o create mode 100644 linux/kernel/exit.c create mode 100644 linux/kernel/exit.o create mode 100644 linux/kernel/fork.c create mode 100644 linux/kernel/fork.o create mode 100644 linux/kernel/kernel.o create mode 100644 linux/kernel/math/Makefile create mode 100644 linux/kernel/math/math.a create mode 100644 linux/kernel/math/math_emulate.c create mode 100644 linux/kernel/math/math_emulate.o create mode 100644 linux/kernel/mktime.c create mode 100644 linux/kernel/mktime.o create mode 100644 linux/kernel/panic.c create mode 100644 linux/kernel/panic.o create mode 100644 linux/kernel/printk.c create mode 100644 linux/kernel/printk.o create mode 100644 linux/kernel/sched.c create mode 100644 linux/kernel/sched.o create mode 100644 linux/kernel/signal.c create mode 100644 linux/kernel/signal.o create mode 100644 linux/kernel/sys.c create mode 100644 linux/kernel/sys.o create mode 100644 linux/kernel/system_call.o create mode 100644 linux/kernel/system_call.s create mode 100644 linux/kernel/system_call.s.rej create mode 100644 linux/kernel/traps.c create mode 100644 linux/kernel/traps.o create mode 100644 linux/kernel/vsprintf.c create mode 100644 linux/kernel/vsprintf.o create mode 100644 linux/lib/Makefile create mode 100644 linux/lib/_exit.c create mode 100644 linux/lib/_exit.o create mode 100644 linux/lib/close.c create mode 100644 linux/lib/close.o create mode 100644 linux/lib/ctype.c create mode 100644 linux/lib/ctype.o create mode 100644 linux/lib/dup.c create mode 100644 linux/lib/dup.o create mode 100644 linux/lib/errno.c create mode 100644 linux/lib/errno.o create mode 100644 linux/lib/execve.c create mode 100644 linux/lib/execve.o create mode 100644 linux/lib/lib.a create mode 100644 linux/lib/malloc.c create mode 100644 linux/lib/malloc.o create mode 100644 linux/lib/open.c create mode 100644 linux/lib/open.o create mode 100644 linux/lib/setsid.c create mode 100644 linux/lib/setsid.o create mode 100644 linux/lib/string.c create mode 100644 linux/lib/string.o create mode 100644 linux/lib/wait.c create mode 100644 linux/lib/wait.o create mode 100644 linux/lib/write.c create mode 100644 linux/lib/write.o create mode 100644 linux/mm/Makefile create mode 100644 linux/mm/memory.c create mode 100644 linux/mm/memory.c.orig create mode 100644 linux/mm/memory.c.rej create mode 100644 linux/mm/memory.o create mode 100644 linux/mm/mm.o create mode 100644 linux/mm/page.o create mode 100644 linux/mm/page.s create mode 100644 linux/tools/build create mode 100644 linux/tools/build.c create mode 100644 linux/tools/system create mode 100644 马铁诚&&刘思睿(1).doc diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2172f86 --- /dev/null +++ b/LICENSE @@ -0,0 +1,35 @@ +GCC RUNTIME LIBRARY EXCEPTION + +Version 3.1, 31 March 2009 + +General information: http://www.gnu.org/licenses/gcc-exception.html + +Copyright (C) 2009 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +This GCC Runtime Library Exception ("Exception") is an additional permission under section 7 of the GNU General Public License, version 3 ("GPLv3"). It applies to a given file (the "Runtime Library") that bears a notice placed by the copyright holder of the file stating that the file is governed by GPLv3 along with this Exception. + +When you use GCC to compile a program, GCC may combine portions of certain GCC header files and runtime libraries with the compiled program. The purpose of this Exception is to allow compilation of non-GPL (including proprietary) programs to use, in this way, the header files and runtime libraries covered by this Exception. + + 0. Definitions. + + A file is an "Independent Module" if it either requires the Runtime Library for execution after a Compilation Process, or makes use of an interface provided by the Runtime Library, but is not otherwise based on the Runtime Library. + + "GCC" means a version of the GNU Compiler Collection, with or without modifications, governed by version 3 (or a specified later version) of the GNU General Public License (GPL) with the option of using any subsequent versions published by the FSF. + + "GPL-compatible Software" is software whose conditions of propagation, modification and use would permit combination with GCC in accord with the license of GCC. + + "Target Code" refers to output from any compiler for a real or virtual target processor architecture, in executable form or suitable for input to an assembler, loader, linker and/or execution phase. Notwithstanding that, Target Code does not include data in any format that is used as a compiler intermediate representation, or used for producing a compiler intermediate representation. + + The "Compilation Process" transforms code entirely represented in non-intermediate languages designed for human-written code, and/or in Java Virtual Machine byte code, into Target Code. Thus, for example, use of source code generators and preprocessors need not be considered part of the Compilation Process, since the Compilation Process can be understood as starting with the output of the generators or preprocessors. + + A Compilation Process is "Eligible" if it is done using GCC, alone or with other GPL-compatible software, or if it is done without using any work based on GCC. For example, using non-GPL-compatible Software to optimize any GCC intermediate representations would not qualify as an Eligible Compilation Process. + + 1. Grant of Additional Permission. + + You have permission to propagate a work of Target Code formed by combining the Runtime Library with Independent Modules, even if such propagation would otherwise violate the terms of GPLv3, provided that all Target Code was generated by Eligible Compilation Processes. You may then convey such a combination under terms of your choice, consistent with the licensing of the Independent Modules. + + 2. No Weakening of GCC Copyleft. + +The availability of this Exception does not imply any general presumption that third-party software is unaffected by the copyleft requirements of the license of GCC. diff --git a/README b/README new file mode 100644 index 0000000..2e56a37 --- /dev/null +++ b/README @@ -0,0 +1,6 @@ +revision history: + +版本0: 这是oldlinux.org网站上的linux-0.11-lab.rar中的版本。可能是赵博士在原始0.11版本的基础上修改而成。我做了如下改动: + a) 对一些Makefile做了修改,生成调试信息; + b) 将其移植到ubuntu和debian下,主要修改的地方用 "by wyj"标注。 + diff --git a/README.md b/README.md new file mode 100644 index 0000000..ff82b3f --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +#### 从命令行创建一个新的仓库 + +```bash +touch README.md +git init +git add README.md +git commit -m "first commit" +git remote add origin https://bdgit.educoder.net/pghs975uc/my_system_call.git +git push -u origin master + +``` + +#### 从命令行推送已经创建的仓库 + +```bash +git remote add origin https://bdgit.educoder.net/pghs975uc/my_system_call.git +git push -u origin master + +``` diff --git a/Source-Insight/Linux-0.11.IAB b/Source-Insight/Linux-0.11.IAB new file mode 100644 index 0000000000000000000000000000000000000000..27c23b6e1f3379c54bfea8c6c805c76fa235fa7c GIT binary patch literal 102400 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 X+E}E5VH>Ng(M~HVI#}YIPA>QZN3SCK literal 0 HcmV?d00001 diff --git a/Source-Insight/Linux-0.11.PO b/Source-Insight/Linux-0.11.PO new file mode 100644 index 0000000000000000000000000000000000000000..de8db453c6bceca6363a1974df88a64caed7c9e8 GIT binary patch literal 776 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 >LdwT?$NcJnp;7Il?Z10x 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 ZnP<(9Ox^sRyj^ZyQ^(&fr!Q^I{{xPUk!%0} literal 0 HcmV?d00001 diff --git a/Source-Insight/Linux-0.11.PS b/Source-Insight/Linux-0.11.PS new file mode 100644 index 0000000000000000000000000000000000000000..2c515c4dd3f2da9176ef09bd338843664bd433cf GIT binary patch literal 623496 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

gTMo^M<*{ia#Sx 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"s":""); diff --git a/Source-Insight/Linux-0.11.WK3 b/Source-Insight/Linux-0.11.WK3 new file mode 100644 index 0000000000000000000000000000000000000000..83b8a91bcf60093c431c8bf17f52b9cdc811bb72 GIT binary patch literal 8851 zcmeHNU1%It6u!xtnA*~$Xr-XiX~mKsXS%y>wTU7LiNV&UjmC=9Tf^+^Bs*kwCd^Nh zNHH%WJ_tr%)Hh!O;vWHv7Hr6aFTp&hPb#}85ivdp6{-&+7{4=fr9)zRgG?RtEm05vc5+GbvNT<&w* z<)&fz<8oTbWMos#@iZT>eMi&fW0q?S7d(FA>iI1m%3F5%YvsY`|HEoNyN$6Q?_z8j zAd%4K;Pc=~;B{aMXuCT&9q`+s8XUhs|4A%n*B-{cM$aO64&&dwkFhJ@jbwRl^3?Km zayiyBIT>pRb>;k8ag5E`*snUC;Tg6id1}to+5Q)J^Yg0wVwZg8tkTL`n$b+l?Pr4n z+AT_J%zQ#ZlkJAniukVJ1g#6y4t$bcjC zR@lD;z7DSPI9l z-cPH|97$!<=~O12KG5C4PrI~*ecZQn-eYTiQMWu->|IM@@469JO4uQ;cxHB*jel7R zGKNXmd_?5F!nrOm=@hwPAP4;ea4$FuyaS!yq{$Cq9_UB^ESTPoX$*}&4Yq)fp*Mk_ z1;~Fl_%(q1Q?y@!PUHUsXkOAg!EXZO^E~(xPy;*;(D=*frym7SgEcjRqc`?f|0pqO z>HFYZ9|p|=^H^)=juQI^CF24x473B^!a)Og8vGD^JPM}Lu>iaU&|AJolR&Z|G5Ji# z^`8k`M+-Z7&bGba;Od&ExQei9scdCfhR4IlrcGEJsBF=vj_5;%si(#8wl#(;S-x^% zu_>yy2^NFLIIp7qmTvOcgRi)Uh4H~EjibfUuQ-zCjqDxRenDuPpV^!!WcB6ZRv#w1$ zi!SR);i-4io;=$&DeQ)sS2W~YkieA0QR2>wm)JZ&`F2F$==&vh@tHE)hc+cS$@Y*~ z{itJD-pEeT+~#=`gJX{2=}n?1UVNj8XtHR+emL)32q%0B{eQ9m=Svid9Z=Bb7QMLj7RH!n^7ZcDFEkY#pO2pW3A8 L(|=0vYl{BA4o;%1 literal 0 HcmV?d00001 diff --git a/linux/Image b/linux/Image new file mode 100644 index 0000000000000000000000000000000000000000..de0327731d925fe80aa88c1aaee13ecf38d56e64 GIT binary patch literal 135588 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

92tljF z+sBnzSHJANQ6#RTNIU|QO>)eDUDYHS8XX%QCUXF@Fv)4+a2H?AaQpLBK`w~GLNAAJoDUX34mb|Q zSJ|-S0QWw5X;{smiEAy-c0ikeakkYGm7bmHYJwb|>c}I%zlocnaeS;|je+jt@{)<1 z?nLrO>wAhd4as|7DhU27FjyjN0-d43emDOtVMdbYVU#PQGyFy!nf6nMgg@#JXWAQzf~m@*(Wk+L1GE%X<7ZYL&FM;0r49vWbMmzbTTGXk8W{ zYhT6B1KaTP&|mTM@N4+_<=^nrebw;1*L!)<-zv8Q3eON#e*P2W4D=9(Z~h@zX&R5O z8R-p`P6R!&lKpAdiO>PkmebpQa@&$bV({U?!S8h2KpD24>8_Gze>c23taTs8k1j`i zo57S9oZgoiX@!b;vSy;!Yfaa=zbfyR1TgQ~w*7nR~cKocn z?%Ja4e`9t?!mJA~x&XpBUz=)1;;JRv?|(c)Q>dxY5Q6Eo61F&H-2E-24Er7<&MYdBO# zb%B1JiUV^T`O!>hpvg$_fe>&uY}`~?Cu|_}m)U_W9jA^3^Jk-9%pTX)kDPW)QQOTx zl|V$3pgIY8n>sQ3q>YSm_9SGVfw-0cr*Adkhcv3jonP0z0VM^J@xKXRHt23z`~X5T z5%SSQvSH1Jm&E~(q#5ar^QqUE#{qZt`>H!1V70u-Cir9}QSd(){UKtM%dZwJ=!LO8BI5_J)?~W~#4nYZaf#gIev(%uuF- zrtw=(PW(go!ADy54d3&qGc$C`8QGUX|IC@Q&O4tjOY~PV#W#75O}fZ1pmd&x&bM2L z@Mt(G{g@g$yz~|jeD*o#W>48CU|n?K1sl3{m2%8`HJvWrsG9PT4?(?SytigUS7b`LI30WqE z4W8~PgQ&(j&ksWB$I`tO%a2<=zW1d_b0#7y51f%uz0cY}<;szqy|W6>2JNuaTq#6x zz2z3#4;xWa#8stxLYZoPiDbC?f|$w-!K-9iiXhBZrv*dJY}i(fn4K0@Zhk;aUjU}& z8wZ>X&NEsT%hIA|V1+{tSf3LC-h@%>u;kQqa@PHrXQ$)1dT@ zgIX^G!W>h=NI?fmvNz;u`XxJ~GVm$gp^Sx&yk3i3xnf{$rYyXQbeW3(oj4vvcS8@B zHJ4Fs4*>N)8GSFJrI$5_tS%vDaX)URhj*r zC-F=MwuDK|a!}K;q2rnGLp@N{hNk^Gf#ZWdn#KrC2Qk_v>RoXAdx;=-?iM6VkdEDg{GA||?iOSRK~CK*NaYHEOxP{R zp#<59v18XFFqI%2UUm)g5rW*eTafbz@--ibe+>vL5hDrTWz2JtFVArKTttvM147NW zmOiNuY{bvHBd#wpV!lEnX6`2L3CU0YM%Sg%FnfwNmzgV2Cl<#2jP9`5-Y}{$GMcXe(+wX@X<*sCMh{@NFlpJAl zl*!MHlpJGnoXLM4DcNRng2}Irlw8H+B$NL>QgStuYnWVf&j>A6%j7yHJ0s;zF}a?} z)(C8YmJRJk&3_{Le5iL|RA&bT#01Lu-Z?WkB4#LjG0l%{+qkys9M%9o>$*muVTfV9 z4-D&lIPLov3Rcrvwh>n$STMiG0%|OwULX|HUR%3^b=k?focx91oRG14-uJGvtQ&%f zv(7m4+;h&RQFFNk>oj?$XS1z%X|O-Nv65E71s7g){&}-zJ~3}SGUXqcxBN?Ztk=*3 z^ZFUOci!uK+%@mOHavbbZ#Ey_n-^b<$1P3OJzKZasv!MaSI*4Mf`K{jJW>GNeM3Cq z5zz!QDOs@FRtyaOW+)AdiMemy_xb3V_bWcu&by9;-Tm*IEM^G|s-B7?K8c=YG9Rc> zvwX>1Ecs!7O)ZCkGPN9ThUE|dcs{;lexioX?ab`Jrnm!httEJ891PbQYw`1GtTTvZ z)D7I0F-K%@N2yiCHi{}HyVy=Sl6DGk7Sj;XSlP6~+#oL7GGC(_d;e&mhckw%Yq)6h zbH+wBHq|?DFpzPnjGGc1!s=lsM4he}D#wu6N1Y92h4-19YMJ<}D)1h4)}Ptz?AN;` z(lNf{1LsRBdE@4icauxrC0ArvE*cOV!XtRHjF@8GSKKYO6%C}e*!X>h7phaDH^a?o8!!4r`l7D*wFnqb|tgP3b@b14>a7aDHD%O|6psxuCVR$DG^gs>HgiRAWZs zTBj>yLVfKKym|CtlIwIu3y^alDTUBXrz>6vUFUS!g;2fIl_-Q7ovx}vr~#bS&^(y9 zTA6B%Xz?Oy7_l_b4qCjpS_PW#Mbv4;TrVP}5lvo1y+%OtgXx|s>D^#VgT|t98u5m| z_Tud%nwYWhXx&2+0#!y+4rDP2V+bwGT3y{5$7(_9? z#9i)yz(%1au!q8q7{xLkMK#*&oGROFNQ#eddqm~0{VL!>q2rA>GMG8FItAcr1JP0p z!Qc>xYl|TmbRk&Ba*7d%V&zkT9vHbg)XfH%F9uV>&RcqhMFu<9438}D>>eIDy7Tto zkrm~PllBQU_XW8AHj3+Sqc>GJn?8aqio+2SD*J~}Sw4(P#tfrUBZp9_kwd7|$RSi} z?rwWh*BA&1Wyrm+YMD=i}fC7e=p|TXYLMi)V z6nUCSV~D&wJO30s-otQPh4FeCxZJ8cwoN*& zyiaX=kbDz+2dGm(UHb-VfymkEffV>kSC88GSKO!wqRP{A6SLn#&ua>_Rq&B$8!J=M z+$44u$r=D$a7}f-Y>kbTyc0CC43YaILnAyuHo>*)n73vp8uJNF#2Rnwczvyu%yxeC z8Vd-H27>AB*CnP~EkSIoazzld*?@T;3y-u`V3%}8S$-deDq95xMAuMCq_9?Q-qdt9 z1+X?!v#CBGW?)weh-WP8S^Q_M5V!YSnB_AP z(>vIEP3=-zAI7*Ko2=^mWJX6?4=;}Ph0yr5%g>zXqC$(c9-bdk&}AzzP_<`T~C+ z88R30IjMyfTfK6Qme*XCkxK#s%~~hzgf)&7^34SxvOvtSCY0V0S(t=EsE4o)4x}3s zb&>q<_z32o;G;6XnGZYP%SRx;j*<-%h)cpO_t-Y-5WY=aygxeaTnEG0jTpvIP;LJG zChh&LHuf6k(H5JRN$q4B8l=`*GzP+4OU&$_H9ovkS}7iWdPgp5q83$?KiDgZ+Zz6& zYEV>-wTOLE#2e3QUrF;?Xtc5h^JNd7Z;h?o+r}H11Y+5)eo};WGt)cl@D0n^d4tP3 zgna<3OAkSfFv@(9)1ps}fm@JdKNA1g9D(Ir+no(C3LcygD5KD4!XhERGX_Z3hR z3QoO)igvyul2xBOi)bK1gRSELS4%h%(7i`Zo7Io{co+2!gDdsl$F&tJ^uS%8`-#C- zw)eQk4x#H-gDZcDheNv%2eNuFX3k`)+axxGPr;MoJ4qZn3e7-!67le$qUVhpkL;o( z@?)6HWy-l-d`t1o%@JPqZLD4~*Cq(MSD=F_{A}nV>e=XA*&XBf$T1PIY_8!RVu%a^ zL*-njY(w|6=z)9ni$)GwZ7H!Buz71XYawmHmi^pF?&xB#3L~NGWfN?6t|w@|LiUpK zp9h*stL;)ZM*&S`%Or{PHhzJ+ayaUQhq@A|8`$gJvKVo?uPoi7-f)&%mP_4-GKa2& z?PKzZuMzpw>?~pK=8QfJaw($ONlPW_T~vOubwe5~VQ%bFkZvCbTryn_C{?rez;mu! zjN?3T*k=7I`WnmP1zqK;t(GeEyC8-a3zevL&^IgpCW6BK%WCxBpv0-COq`1qkQT$~ zlu`^i;|dn`{ZDr*NM31OqB2ttp;po1tx;%b%xSJCI=7nF0%6Q*n-8LxH`a3GaMZEk z2n)>{142^aH7_ITSwhT<3YkJxwv@A!{C}g#i7~T;zoxwAj1-F|m+G8a%qkH|<0{h5 zTq8F)33oZ+HaINQpq~eHQ8c|m79H74CvX()%^X^2`8?e;o-uA3lY5=b;%hDjYkFgl zW{CKWTH&R1-KQv+H2|CV-rWXKn32#0r%Zbj$Z{p(O;sm$XOmKuY3D+PoBE8GT4@-- zr3p86otGLisa(QvQ*T46xQV2(U1ZYZNC)qN3*AnRtx4+`E2Xgu!U{%V?MfiUm}M>S1=S;#QZ4>lE>uRAatbYTu0KmxZGkkt z!g0?uAPo}_1(%+>YLG6il#hC|vhWHzCUs*A40|M=y9^;+Hr3%Bg~z1+#zn>_Cud5$ zE;n%+s2xF>rFzWadY02coSAn1I@fzd_qESM1T8MZUMbl>0(h>J72V$fSbhfO=@{js zsFu5470=T+qO5!sB#TC8b%5huynFzDdupi}rSnCMn5aBq;^`g91y2~UP3}SYDMbE|L2v+lmWc?#PX6oLv5D$l}eeu9B$oXfb-B!^J zwhrd!AQZ7$k1>tkCE5=)bL9ZyHf*FlidD~~LLARee}EKsJo%eHJI{_`lZ4=ntTI?G z8dA9sP$<-3)33V?t_V7Y zAY!$+>&a0N5hD>XA>!M)!;w#lY`a7pue8Vyn<7PPpaE@vNu<(W(uI3d(hqXvDN7m* zFS`q`xv%4=Kt2LRNXHZ*<(z=a;nDo3^Ji!#Fy><}mC|vcu-|%iYX9yiy%$Pkk33mf z#G>#GGa+RtD4LdSe0nLse7FQG*ZzDa(p*u85m%O<=8N$3Wi>Wo6aEA$f#}!S2ylU4 zvIU-k7DObUDD;B=LNBOhFSzrsM)x>q)=rFd+9kGC`L|AFDM^IG^W;cySe&hv%u}$- z{hKOLEPLpHTs{C%BIbW$0CK@s1Kg|OLLc4W`dnWy(^ZY!#WGp%OYduEIz`hLNf(k) zt%t7Kh{~f7PjXRTZYE~;1>FTUT<_7Lwh+~)w^9spXt>86(7*i+-JSi5yYaUJogDzHPu!dy^pEUT=i1j^2yw>ZYrGGG}W)~*u$a8kIGS6*aZj0 zz!oG-gH%+r_oJAtV2!~*L2EfVy(1W2Mph%XHa&n9Nf6tkVXoxSO$HmXR(29bUO#2I z(I`yWs=ukFYC^V-)Y9Dir8RHKeTJqB1 z;Cq8ShLZ{jdw52moBa^mirAG_l>@Amn26J3ioz6RxMS!^Dnxp=ff30FDoBIW7esxH z5sami_O0(ZT?9g2u}FqkSCma-pNni>@M1wW^IRRM76Z!9tqUpiNWlLZ>Jk9Kmqg~3DVD%b4*clc=RB;%3pQ+^iz9Z3I_UR2|^w5PzyH}XMO+N&HTR2 z*hE?!g_Q=IG@w6`hH9mudJJ}XS^3=a$fz7g-!SFCmmz`;UO&#EARvzoD~$e)N>nZU z{1H{lBrK9fP_gW#NE(`zZeTcgYgs7>-XX(N%?X?QDPB_N7jS5k8VxJ+)u)}(`(iM# zCA~hFIhg(V^oJ+BOXUxhU|>zB~Wx_>=Vc`Jg!okR)c9Na8A4 z0u};U??e;X@1jo@r>5Mbv?h^OLr&`veo*D}P3&iGmZo9Y>fNLhhb1+-Ne2&05~o0t zH>guwAMx}@6v|&7mc*VQNsqYWnvn&ik&c?EdTltoaVdsmm0dJ0fo6phGqFS?P0J>Z^2VR_4s6Y*VdI{A zmh`T5I3!^`@UV?DV^2CSy!(%zwjQ?WV*&KR(2`!dOgLNCTF@h%>vjU}^*f#ZowL{% z@l%>KI5?dXB^GiE(@$nPHKUwo+{~z>5d~B=<%I3c z9tioULAbg%8=b@&ARNoxfX<6ZjLI^2!kE8CgL0byKsZ~ISz4akn{flz!aYm`6bfqN zpHPmBQeAHS7qF_yQ5SH5lvuo?Y|4QNEXv06i$3z8t`)lE4&Cux5EVwJwC_gSq zQuC!u^;^dwQ19o(c2@j&43>oQRg^lh-WRqJZtyXtAvdUuu-yuhv-Vek?d1W%292s5 zD$il+LY^VUWl~c7mBFnlv_X~Sjz^CwU{!iE`Wi6r_jL7vFu{N+ea ziqdBD<9Z8NGH8s`un8S|7cpEzi8&EYV<|@qI2EU+WE|$VMz&&J zKUL&2hJ5a0#!Z`;U{-n9KRNoDhtW)rbb}&?JgwVNk+p9B{Kby`@4RtJ7G6IrkhK2L(7} z!fj|ChYU&Ok3&LeXsuesSq+l18CsP&&A1H_&R>%KI+Q+n1R1ErY0PXh!X7>z>nz~w zB9~6@kOvYf-Fo;C5}xW_bds~l`Tfq2x+f3b%9z%uRR!j zEM3ql1sKDqxGRSzxc-ko1qGsrp=-UC8HGVW&ZNhQcRfU>i!6k=WWTHXbTUh|WY=3H z1egT&4$R0PhtjOfdndrNAIFd8uLGRFCs!fNVN`l_ragvX(j^=87=vj4-^ zmp-1vTT-b=WZQJVkjpGdtA%q+cJ`!*B3x`zNCy7oi1a0eKH-U9aV=#>I{G=IxM)=D zpML3Gk!<2duppRFA6V9rp(#%F5ie378tRC2(@Io(B&jxMI~N4daHf7YBi)yfN#Wqu zj=)0G85i{dF(=gdIV^&Ue9&&6l6P-DT_(qAkeKNrZXY(xgUj+0H7DAGnyT7?tUNEW zgBc&G%X6hK&XvBntn_`uKWc!3^`8H(iVYZ1Ppb$Bi>qW-Pc!YX1UQx_7g9LuSzrMGESv%XP`h-#N+Vc2!qDG=WuHL|BS=I!~Y-R@b@wCD(3Jin5WrO#75=7%XvU- z^-2s3eNg=(MvMwcf8Auwg{Fk>n?>Q7lp?v1l{6{>_aV^Av+#?U+7M#kHH*S0PSC6i6e21gZ_3G z;z2LRn;Opl5p}CZ#o(m1ryYN>AtgH(-O=(+Qv$kx(Rd{@qMK4D&^(MfzLjj z8ppTGnz43T0XdA1&fAjQoav&Y1k;zNLO8=hh;o5I9E^~PBfth|;u=`aDA~#%Z?qxN z(vgJMq|~So@nVZ;df+tlB?DY8G^f=ZL8?^i#S7H(Mz!KJ$k`BPK$1FH+bwIFm9i|I z>Nu#*$05|+*eD;&A7zTa3dJ+!IHYJ4`0aEt+Rsn7%+LP&W&R#rs<_M+Q|2#`;wzKU zBbE8~>=EkODjC6cvvn9Z&4LRcI4-#xiD043^H{}Ck`T6iz82M~DIAb-ZSgTQpySO> z8It2hy5h_kWlpx*kQTUTB+Aa&B>|6*a|t+}1ZZKWvb5R`TDb8JxjCt*=x;HPTQtw! zxb~shDSoS8WOpKPK+WhhSC7{Kebl$-0%K(#s0-<~9hlp(xl_P-Z3ta& zy7f9lFu!jx@2#gMKI?Qb0p-L~U^|{MQkJJe<((@OFl)v8 zf?Xt#Y7#`Pxft=+9-pRahJcPwm^>o2`WT7i|5U;xx_@;iYQ; zWTJG(DC~TP`IK`&Yp!?T+2rd9p}-x5SJ@(QHe-coGq;v{dtWRMY?iGh_|wfGWj+GR zTV1ytEo~9kFd`0waxo4x@2S4BsGPraXl>_U6kxY-X(hVjX}2LtcEC+1@QbK$5X)io zmIOb|tvH2)LfC3e6d$XGd<2csv{}N*FoV*Vs)-asD5}RVFhYSdj;1Qb@>e~g{JE8` z_N1Gd8wf=UihseSLtuP@VC0mGBhPUd?R!GZFUoHNC6Q9c3M!ndfH@%WvL4oBG`D3z zF|>i!Se$moFVri!d}18z0%3GFgBt{UJT_{uBHdyf87grrh)5Zth@Po#6t=*?8@jU??HFN*P0~js+-m zY8^)DLCl;~8tzP>$^nKqPJ_}a?}iaHn5)+kFsUt42Ccl~1S{e+I;%{NhNVeI;Rafq zc-G@7GZ#n_r6K#1Dp-YY;Ej3w_~xLyvD+p)8~pf&;cC=v|F?loym*J=Nnt3bmr4=x zb|7clCNn~81DcAhSOxi=x_$u{wX3udlV}(-S!@s{FE++SJz&Tu(nda!Ut(!8uLFKv zf{KYhwiXN!TEwrj_iV(jq_mxxLjBuKZuXZOXqSO?R<2GP1k~=Pd3iu(m(6>HuX$es zN>;<)95y)i?=>$-va*jK3F^K(0=_xGS52PnUGr|92yUJ?l&E$fITDe(ZHQ$fHpIR+ zp&?Fsw5TC)g&db*>~xQ)-VHyKK4ULW9gi8$R=GG1%l^ec-z^4W_D!kd11_)$lbtTw z3)iSd#~K-pfgViQ@l+QZu8fEY{W)|qzUw7OFoCOE->>0n`ukB4Cs~6JoNVvwCfF8 z6oO+LBCQ)Fd9!A88T`Q+dp={oj#vVY4u53@!~w6^YrPs}R-;GPG-v9Y_N65> zM`HBmCv>7C=Rp#&KFi}wxK8PGy$8{kq2<^;Op4g8tDUAQK8$r*C=uE#cLZjESU{?& zz~r%pK7-+}RN+?%yjaPJleDvoNy}WOq+#geRI56ZA{6Lx3)=l;%}TMLj1)2$7D#%*HeYC=DR$7%)@W5D4uRa$c82qbd-!wsP zoh+ariN>ahZA$GUy9y5S91Q}Pl*@uoSVpX|P`DOy39&=-A4Z1Jug_Q1`6!BQ35HP% zxnTb-j=4pc+Ft}hT$Cg7tQQltVLY3xxlDz7cZ?Z{ZS~4F?kf1|vf@%d+iWBjVc8Yu z{*Eb;;xmN*NHwFu4DRr5>YxKA^SYq|#b(g?LZKj;z>GxjN40?I#RNY;*H7@_!}08j z#LGX z6tpSGgCyeI1%N3ekaSUF@}2gQc+}ZD5v*p?Pq56-cQeEz<}9pT5h;qoa7{J%9C>hd zk5*VK(b-f+glN&xsFInza71MTH}q!9W$qa(U>3HRq2*rCgA&YIG)s7wCA|Ld;2`OW ziVfi*OAk!If=g$J1y;jn=u!3fDqNZ(?Qsxr3IJ+QE?XDku{NZ(58?V2La8QWW3uAZ zwiHld$Yy}#UQ~wpxH2s?lq>PCf#&I;895=dY})@3SH4>@B3GV&Xg6GugDurVKGp$x zu*xpx5-m=$MOgHP4hvGtm$0Im-e{cq3Nwm`1NJqpmO7a+!JT#_vnPQwtL8#GqwRQ# zNoNc-KraURz0i$(U!K|rqeN7qbGx3f_Iic{6Wu#km$G z7616~^0{C@6PaxtTi(R2h*(Dx?}e3Vn2+DL8&(4X{uGs5f-2A5WW*g#bPfdIR5TU3 zL|OhzUMtU_dU3tpd>XW%)=bH+$qz_P5Y02LpcS88unn9>U?n!bY9rJ- z*k;QlmpE24CXJCca{%9v16N1e0+(qbBM{VVin)+V&8iT6DcMdSa9>J>KfZzy)N*C{ z&zO+11@Xh#;?)o+$wg+~4LFM~WYOk9PTv0>L2kBIbQi3LA_>W*M6fzc7mu0~UAlsa z?YPmv5t7Xc0MU`k*gKDy{=?m38T63E*?@@866gkmz2#-dH;hiC!aU&iGvCa%jRVPh zTTOpxaaYj@6>(jHt1(o>^IUyb45IXbA-}B9pNh6PE>jBBCT-!t`B?6AkUnWll4ejr zRhH%F(cZ9HrfM9o+za%`dLRlLhma0_)NF+$gqRfQpW6E+E-r8bl&yspmje;@McI}w&6P%1*?pPb-<$E={y3ZhCp(84$f$Uc^Vi- zNfG8l%0^LAKN1&USXz1A`apT+i?aeCS7e+=8G{0W4tdD&z(zxIY%$q6o+Hr}7uDT!p1PW)GTMu<{prlY>GAv6&qZ zdlGoASxEQ*r4l=(VTxW?(;G#!QRtRr$RNKwzjn#TeK|Z)e z?*(ui`HEVMj`)Z-lSQw^7W~4MPc(pB>Ox)Pwbd1$=0sBV>5H(HDK<4_<(z6%`R2EO zusVe?0T@6FlIfMsH>eLzg4iJFlsi!zr5JboEczCn(u?NklnA}X6^ocSLP=r*4d{sl z&-@tMjLtY118`Dz9NGbP@mMRjQpF^SLMn4#(*P%ZYBgh)C#D0QArgt_IP;WV7n0eb z(2rMlP{FG^)aaHH)jcZr93MIwA(YUNjjD#!4oR)%d8L1foS)qGg@OTJS+n;rx zt6=obbs$pb-XiU9FHg-w`)>sTEXvIDmeJoa5hM=FKa%CZZ^=hII4>T8Y-}+yvlh<| zg2}U4N;@Ca#s^Nu*GWzRP6)sZW8=1>6F^abrXQg0L(){09OmUMrv%OC9FcqbSO3B% z56M;hrXRRiEo%K{>ZM2ThFV_(jsUF;lyr87OqkwKp1WDopwwqW7x31#jm-Botg@att6e&e|v=!Y)jJdPPW&mj#3vKeS6UD1VrJEfk% zguc{F60Wba3$JtB*G;Lp5gv`%f zVcJ@G%3_G%dbf+`P6B~D5p8z*G36@GIe(nxSTV_Cq&5@G7kkq$zF9TnW= z4;8(fNwkw$G-UyT$C(SSrHJL>nIg$DzlO0KTl`axmSMPO72ysQ;}$s^g4izy0cminC7UH z2WCE*{g>~Liw@*!IJ9+*n^04fK#ERLQwb|SX0A`=B64`%2mK2g#vyPjM_p3lee5L0 zpno5B4z{y7-4yx!c@{Kc+BWDOW0BZzBi2C?%(5&M(b%6#kCJsp-0wl!+(pKiIL9C?8MNpXqkSp2XCq}MQ~JFWxBE*4c(efd<-PuIMZ>Vi;2kH9 zz+iW2bZ;5lgz~$=lEGZqG!3cxkWy8{_pfR(W--k$@FkCd;tk)*rQ9f2=jaA$tibtQMUgxEr z%nZ`Ph13h(g7UWH#q7~(A{wk|oyaMHc#ulRNPD}=I;eiS7WPgrtqM)xvWi&pVMR+|Ch0PO5=}XN;y?J0P%HcLD!|l_8 z(*Y;vs8;taX&z1VHqZ+U(90-5*k7P~6h;7Apee$>afiqhxK)kwk4Loaz`w81=>HRinR0Fo~%FVUrGObT@Pbh?xx+g{^=`G|sEl!+#JA zZ9s?&&F+?=uY$xqFcf(9npyk(Lz%T}Ms=V-vJzNbX2t&xLl=IunseX@X_0U8PoGHfIeZ_)`ZroTjm~S#sSki9S4H{XE z;bc?N+4<|ST8O4?GEL1pnAy~HjC7ki|2dsoff&+%&0O@ow*OH z(NZsWoh&LZ=h+xlxs+oTm#zAfbYWepZK01@N=-V@<~gHWkJAq*L5`$hStCa^(uXiP zh#bUE<=svJZy0A`QAP$GSJTi=PfqP`E0aTaRgy!UL`7!mc^eA^YO>ZLVYP7EDIsbU z=W|i8ou~V+dp$F-*?O_9U8D{EfR-X2)u2_-pj(K?K`pP%qm_~}MRu_Ot+%}NyNfxzjZXA{*&A3eowFbY3*5emdTExdwxfhQTBbUziw0 zfB?M5lq`|V)fQS#!gNVPdJ-HSu^E>>=W9lI*6=hbHcXDt zfNUxCYpRlFU=_s^%xzfeJObHnZBhTKFR>zCjDe`a5J;XRk;Y2G%XYjQ)X!(6jCUR( zZ5W@kp?c)58kXuc8rt$@h?fkNzJ`7hFk%sZB_}dqgOJAXja&A*^{9X9iyNesJAU;f zlJdD%GEfDnu?q?Y?GCM7yXzZ-(%Tx*je?X2lr_Ua?XJM87T%kh%gsL4>=jtl|EX*9Yngo>Y zGH#quZ)pFM_vimmG@l~_NNNyIo3P&#rh48m;};(5+TJ4^ZD^st73QR@p^^9sIUykT zy}LAsdT} z3emZb0y1|BewgUHVqq*2QB10E5Vjt=88mzawlJ_7!-Lb>TR1g4^fs}B4GNL;K0u<2 z%jk{DP-P^w8InX)i)1vzU*sA~`1LjNv^f4J@ZS~%7j~Aa#%k2#fDk6F0)gy3<)VU2~xb?<$tcrL}^dZ2$$9_+gi8LXhfZ3d7@1IaI00y2mo zVyjK;294d0q7X|o{>9sNEa^o+orQRwsm-Mnrw0dwq#RlKm}FsNPAo%3W$crDSQ_4( z*5%UD(!@3`P;=oOxx$73SOb`Pzj+SNdT zQ6NQ1uu20q$`CEb$XaU*oHmf0${u<*vBwGQ8Vu$>fU252s3u0eeiuX0;fEbB2-jZ* z>1ZE5tkxoqz6LiwrZP$VB#OD*#9ZIc1hP`(19%V?7dTJ4r?g}|7W7d#B(ylCihmqWtoKhh6T@u1jh zMaKt119(6_`868;<&W^N)E(POfnwDZkR&PvbYLVVT=o_0I2j_qIiojNRrJ*l z6B~NhuCWo2^5$au)-Y^)L?LbLLvhY96p$X)rO>6|aypp115w$_vAYZEpX2-0d(4FC|zJP`3=;f7ny!}L!9+$cXP)UMnaK;}z77U{W7+}hFJ$UG1KQG)jZ zavJa7X&53Ts_8=aZt}IRT@TGqms2H{I!w8cgdX(K*1lfy} zjfCV&p%~a4h{WXGM*hI&sq3#P>O&o>5j=PtPcCZk$2b%{f0I{V>3C-qDV1A*m`#Sq zE?ONZN08-}WWLJW9?61KT@b@ngUZdL^+ z*EabF-3e|o$0NP>wU70*h7P^I_vboMbIElHpqP0(dVljOK4ByG`%?WdjwHMWZ}?(d zAdtWe&hVv)XV93L+vFiop7r)Vu3(#+!*9XnX5r@WrHQ9C6Caw1MiNVZ z8C$Myrc01%_t#oC_qERzl0ZLY6oXO?9?iHa|Ha?hOPcSzu+$JSEx5hz8<|h6I-odvz8EWTmV7s%V@Ldh1 zX30x5dhyjxLg^I)YG;@ap?Gn$BM>LnL2)kAK;8--gYv)BCT2(xRmVOHUgsb8WFMH&mssPRXT`kxGyoC$4z z02ocOB^zmU(ueJTVu9YdqL>Ju1xgLfzhcoXwm?${p)NzTsIfp#gxLU6rB|aW=TZ!{ zXCv0NKu^)wZOS}RdcIBN_MsN&H~&)>D5b!#+g;JzqXkMUO{CSml1A$-i&_7#TcDkL zXMryGt#F-|5)>#Oh2c_c`j03cricZ)1~0=cP)#nfKs9Q27N|lDw?HRTvR63L0EA(1 z+0)Xg+^+HEO=5u_MS3xAxE847oU&X*?hT}&N_-5pKqo`a82_KKK#x}&od|)KmJOv^ zLo_hZg{$!3->xlC!lNG%33BrxA5QzvSfDH(Sa;&Fw-zY-Hpbc^7AU(RTjN#i1EH>> z(D%*)b@2_cKvxwIarhr@fx7uRiwqL6Krb!i1?P+f%Bt?#0`+6l3VIgkLBp_-APg4d z94l%}a~}$6V^#b@(9_&kQeZ>S$Tmp;YB`(b#)S^$+3kD>TX*7#(kL_x2KUEvi0-tJ z{)|a~9N-Wx>Uy<6Z%2YJou4mqEl{@~O~cd;AZq|wus}B>WGv9f^pzIqy^5_H53xWw z0FP{e`XOm}_7IXUg<|$#fxe&?s0Tly1v;z4tFKs~ckHDF>NXh&@>!s+EFXr=G}CG$ zTcEz|GFG9*fyuQ%Utrs5qmSI$K~SkSjNFqsf(5!32SOF%|1%48{(VF3h}~PDPg6E- z6Pr>f_bkwF!kNr9CJ%(mvEKsi*Gzn9Cf5S}v@g?(JTG_vzoa5C95;u2SjBIFQu1Jd zN)s77axB^t(#tNpD+^Sbez*m?oMafS=31Z>dTpBrb)u!F<88VU^FOyhv%o*p0;L^M zut5EtYcDO(dGLCJh|*T{TcDg6BASbhBU+$ZPq}p%Y}gKH+)`M z(OfOnTwO7!N`ru=ccA|y1zGsZ;fC$zhl*`VpJ6L43Eg+as-Xfol3_b^gNpk+yZ^F@ zUQ-igMRHuo5O*rL$k|l5H+=?ttLG_RIy#n#r*|}W2*4O?fWA0Sf!uXHfsbI_lKbQC z4ubB^wX9ZbOkGD_nY)){bsc-Uwc_|yi;=~RiAfB1Xe4GbV1ObXP}dX?MpQ_R3F0R1 z+?YGR;oip(L4*h_P4jM&NS^z?a4C`xY9lhHz6LRTK!G>WoQV&26uBL6%ZXTZj{#?R z7C(&rg<3diJ*g=!A1+lsz&VEBdE3TYft9TvCtKC903ui=jv zLLtVPC5m+lH2z@DE@ph$WxHWK??Ck5F%n+-MW7%N+D`u&{u^9w12kuv=nGqD0fwYN ze-rGRKL*jbm6lBq69-AOQV{!G8xZd{jRW~R275r_3*h7aM#KF(in;$vv(ygU$M>OR zlL!2-qFCc8hq>}8U{AUZtSFF25x8*3ATb4(E=QkMZ1i!lL0`l|SG}JHQG~hjo*$K4%#E%>v?x~HV;ZUm zsS4oXugZd@zy+N*6Nm=^oTPa_i`j_$obb_|vI5ebukv!+(CEBb{nG6cBp3Edc(-kc zUY++Yve5H}~})g>UXLpBMs~hJD+3EUW={|B$^Y z9B@bld$aT&u@P?6#XJIfJKJwUoEcFTUba$m)jQ~*Uq>gbn-X4jqlrr~vRxuud7vp} zKC6~#r`xpHE+`kcEb(1O$zZO!%{K}-D3QysfM)U*kx0?|>f=6HL0HB&?iVS*8RFTD z6t_eamN~ULW&FAoH+Gt2cmVBk%`r;0a+6h$O1+K$lqW|Ea32x)U^cOhx7`lpa@7cm zQ+LcnZatzkSZ<+Hp{)}OuVsV-3SZucF&*zL5plT6e6*-Kl{-63DWKGjnz6r2>FvxsOe92#^a~XlZ#pvpjrwLh_Cg;lY=J0}H!8HN zQ(me%#OZZ)d-gjsx7$GrQ7MF%Eg`jAzZDH)(B zl|P(mmiM&>Vq{w0$doiTb)`>LAf5e32MBZfaS986RJ8OI@(!2W^R{>b@hD8xfjEWl zF})=B7c>hX)zY975&IPeDOwgn`Q^y!Qf{?WXa#;Rw6=~RzTEeLq7yv^)Nq7yJNP4{<~amje>9QK@K3glq?7H|T9clC=?85ic%Qc*dCi zdF>@pgmL?aJ1~~#`lYd5eIOkwh$s+j`mGs^&PT>-#K!YsRPdlKf=^|NJj<>MNbr;wjn+^4u$0?MMMBU<^D&y-&lOOl?N2`g^ROT>nEN(k)s~5) z1tLRQK%hUtEo`?1!plCXqX#OLLZMzKTuz)IaWMBWQxdx@UM&aAwQ$Ja4?UaEvXcKk z18o`%u&WLfU10`)uYk$S@-hq93JQ#Q*p5j8D^LY{gWhSpND%LQt&({4}apH@ONKS2mARsjup2;xI1*@lUt|X?p)kZea=`7myV^RRSn6p`_sC zCf{+QOCBs_yiAeM0KgFr8P{_MD>nKvIs=ZOvJ zJc2s{UU>orpB&Sijq5}#1f+=wr3I&%;tPG@>-eHhq5aqwB+H@9A|g0ev(Sa!$UPXl zouAj3!(B*ZaKkoQn7lS!1XmyKbz9+{ZVCiiu96Sav22vd=r}r7Y-q=#ABtD+R-P;o z!sp(piq~AeA?@CTIH?TQ22>S|(3vFnktVl;Mmt#FrE|Q8_Aq9$QNg>AmrksD8#x&^ zX5FQ#AO=!(%o1fb3pq%S_*5 z&2ZThFvaXL-^P8k-Xkjd4Yz|+-(l~*Sn1Gj)49W`PcoyJ<6~Yig*?PN4MrD=U*egf zqmT@s{)zqVkFj428P#~)%SN6U zI$v~X=X=U8M6C@3V==G%mo~sIIdcbnAEblJ)i}~S??xu=ooAs)niM`BxI-Q8;~RIX z4ws%e#1dOgiG2TzzDtMw1WemPhczD_Ei8Y~t`4;EBC8Z>rNU3T0llRyRV)f0Ra4mv zb5u$$06HeT`C^>G+&$kEn!D79SYgiIEC=CO+7$ZRl4S|BsaXReB?y+GiHU6*v5mQ0 zb|-mUh>(TU=}gUkMn>jcP*UYlLX)@;V*+|5&)p~N+#RM@7UtH8g`YGMCO!G!Cg3}cQ(Wxta=X$r z#^3c_O8PC#K`n{RLx@ZhdlqS?+>5=d8zO-P9=4zPu&wrCyTQYDxnhe?1;$q96ERq* zuu|VEeEB}*<>O^lLWR$JDh0d6Ls8>HQRPDsA__FkVD4|Gzc`S)d$9ZrQSoxW`F&x7 z5b&zL3mblo>0kFBnA_Y5!ZE3?Os@UrD_r?aSFdMhUZguk`0j(2$To@%AM`KJ0?tC@69ADGpAHKAFg6sxENTY z8l_s;S%r6_G;8F0Ms>R~eP4ogFud!`Q{gJ=I!|LmQ|0({BYMzAo+)#Bwz%v3h|nUa z;^Vl7u5&^8Iu0kIfq3hT{06q!#gFkcWUv5OOsOx-wsNR`lBHWL& zaV+CE^IASOB*FV?o7W3|yt2@zzN7C#!V*pgg((#yOLIXUn>CxrtmNHnUF``X)&_UK8_ii!CgGp-FsV*qAFtf z)$a)|snjyO8xgHD2PVyeh>TN@(3=S@hw&YEei)5jt%9fDNAfNEak3)}t|n4pa5+FB z^FxK*iy*Hls4$mL47>dSc^a|&Ton6t15lNd6ORN{ci>k9?_ z82m|r{z@P6oiJf_j_@QUs;~-T!(L1bwHLqtiVwLkN6Ne(NI<#N^G+gsne}WZLY?^~ z#a?n(TjUNE5s52xZYD^sHb}(UmRnY+756;dz=3dz7<8?yt_cxGk_Z$JyFw0pCjn6H zpy|?315|hrEOVdx&Fl-yKCPnZ-FaKHSauKC>9JObwfLIFJjB^U;F${So>vyU%P<=N zUb8oJ4vORDu=v6{?^5Qgjuat;n6DB~F0j%_%o68x;B+^rxP)&poBx{Edd%ez$J5gw zXdMJWyfNTeQA3=CTa0*RCN3qwkwEu4BV0j#su67C1fxZCQkzX^{v{YZFZ zG#+{M6&AAXA}vIPiP3j5`nM(;^Ag=WUdJn9ohNxY?46_>q9a|%5GS1?02yVmY42uO zR3CS6mgi<5Gg7#t#)F@T=g*ek>hA$Y%I;T2O7rK@y^AaUGZysM3wF^(IIBk&39?@! z-+!lz#K1)E8|cF=%#ebXr3+#ghKl9^rf zp~qRjai|}%x^}XB3`m_xj8&3CJ#8%6>p^ZagE4VBtI;#G^6^<)Z!zbGged$zV*5>& zDSI)V;CgzFCm7S^p^MN6Nmtf|O&i0?g`BU#fn@wb&yy$Qx!K4x6uTjV@|hxlMZ6D% z@=L4v!^DULQ4wF3meJUUjNp<_@gy0);E$TGq8rBbV1AxvDgL@>AChUR{CAyP{FJ#0zo&T~!gj;Z2nrG+tSG7BXV4r{eZ1 z2}rP%>)!)sp8}ww)-!5I^A4!xexX>BdRXoKevY_b22S{RH^zJyIKM~80+&TM$R*g~ zas<^Ocaut>{pHuuxKXp$BvA+_afmBqS@Ml$NmCRdu_cYyV0vRr8h|~z+Q+;Ru2X?s zEX=!2>&l^A<}~1x^lf7z+n6THHw1ml{pMq*yr_%WpjVCO4VUer#n)-2OcbuuT8Znl zAlen(Faz=Z?cxMT7dL)u++8y=z=Tn4oj<05HWACWl_nlhAu_o8xN z!sf$XkQez+koPu(b~of*qSL%0@;+Q3kCiktR@t;^N2`(#MUg2)mdow4;G6oAd|Y6# zpx10Z>L_MkH5x}_ba*trH11N=qu7h`^7Y|kkaBIHjLM_iekv)c_=q{9s3g-NQHPBP zaFYwrmpV-C2!etfdi!#SsTPk%P1?&zru#)n)z}DCvQ72YApdpb5eH)M#gl|W+-=T@ z^H!9I@nW2Jw>iU_#L>R;77S9W&(R!a;l}0?J`g49TrEhl6MZQga%%Bz^aMUg0xN~P zqyK!XW(A&2S^`a#HQeV@e8!K*3wFL}2H`*WXx#O6-I4`M?4!3|)*{aoQ2jYcbq zZT*12MevK=2SR-XBoxQB^3o;b;?x7ULhy9@tj18C;xi(oi&@vYS;bS+OOUmNkgR%3 zoD|dP!m?;LT0RqEO495sOfCb|s(3iByIhDFQqV~f>Bo58sl%eAkc3vJPzZYhL*%b{ zrSsK&Dr}(1CL;arObEipSKmeSHD%(xSu+Z%4b10BbNq6D%uML$%2=z`Yq`wdsm#i7 zv;+Etka-S-HOwknu4OzQ0sSy6MQG9t5usWKa&!5+kQ*k;Haf8K3sL(^zE(;SV)%Un z&OZhIGQi6>nH7X(#(S^`mp_niHK*Z?b%rg5X<1o5jC-NtwCUohkCs{2{Kb1a68Z66 z6%TKicsX`J&IkCJlZ$Ji)Nf_6GK1+SQt{`Zv00;TaJc#%2P#Fz02Oq<%%XP&B2iDA z5e3^3ANJvZf_PEldfZG);BpCRn*vT(LpGGU~5a4XenTm)p4GoouaPGMxy zX@=^eg<(M%{1vleVB!`1Gs*AmXQC=(rjpLHGSD!tdaHm~DB=iMh!GhL_yGWf9DWZ` zzlKNV^;yu^yw%8`Fh>%Y2g+PJ^MtkyX}OD%1^Sf7Qc}_kN*FyvdA#yLPkF40vfh^Y z+|+h7g2sprnc%*I3YfQJ-Jk&%Qh<7ZP*1r~ z>7E!7oeyG=CPMH@yh}E%yeZFKO(N4`^Tk(gejc74_w|5cER5J9<^9C_1>oIOUI$3Z zR0_}R;0N4#Cc%Yjmi7Wl$jfw%03QcHF~aJWF)N7!+WFa`DP{S!-EU!IN3T$wfGbod zEbUn&(?O!X2dKNH15?VSw3UovYq7y)St4TU6s59w2i+qyh@%&6Q$!S+ENkU#6khkM z)>7>;@ex3`866I%CAK)sevKx*UE3E`t)9BsteG+-pl&|+`05r6S1w{z5?2yu{f zOEtbU-zGGsS5o@?A*COMvW|jqOzKB6IBcUVyB+WH?W$z{VuqR4It8+u9Nkui+v9MK zLhr{-c9Tl9uBnT(aL1A+&lPM~s>LGzvArl$w^8Tb!)Bti3moXM=uF{qCh4^q=0 z&n0yewy*N#*#lAAEKj`V&rzY>+M0BQb{d6x!J+FYxo#ZSiqO=a4Exb16g?#&dl}GY zTY%RSz<9Qo>E*Sk#Z$0Pq&PZzfv^j}!aT%Bt&53@Sd3Mi zUw!q}qpQ1TF}Eo4WyVePw^1mcSqlKfNF5}|dTGzA@$ zqOXs6`xZ5si#s&5gv6IXGyc3n?7|CHdJ> za=Zdc3!Tb1S+Kt3wOaD(AHkX%iHV3Ebb_C-k(h-|3bjCGqCaoQhwxm12#tf7?RXJ^ zCTs3CY#S3L!|-A>WWobyTIiRk?C+_*m5in~l*m;yy$g`ICleQaf8w!-HU&%w@t$=| zZ43ZG=x+RDZJZpgjYHsF*EtV6(2r??h|xm(VWu&h{)$a}p}Z5}L{m4Jh}KQkdlFc` zIMGSiq}o!i5H%AluZvt(YKU14Yp?}es4??94EGOJ%QfLgJKN8~b1SX%*{;YY$x9^KD zdUB{SkLuW*2UUx~mKa*~GsBVT-b#`!3zN~M@9eY(vAx~=R(3O1KpNRfl^)t86OP`{ z@X<|BZit|KF7bzHN-8hD?o|v+@c{(UusLg6%nuE+tf5aZ-*1OHl+(-O3@s!4iOz@V zC1t8YOUxJKDPcUT7nOisS;kabV!nEq?pXR{I2!3+Q?YjTUa;+9HuZIV`F}H80(_vQ zP{L1pq#RO__&!mf*Pa9pnLg||Tb0tu@2V*DB{9_7M8)b8(RM7IZ|@;6Ul>CRY?B?y z+e2vqneqz?se2Pr!E`8Iy1M67KBAIH58Zm>5V+sp{4MK zdBa9j5`DcG`n3NH&3bPFG5(-jF-U8F6&ENzcCCr6M|jI;uoV{FirG#=Ex5^5Z4b7l z;dRnaw_!XMOTgJ2;uDU~fpbt$B*x*umsZK?BM4maSO^N0M{*nvQb;E@zIpf@lemj# zOSy9}o62Tzhc`f9(S#7a28U}5Qwz|67{hklglfy;1kY}3+v|L(8S(su(G4!Xx)>B@ zQ)iy_d?p|k!&v0W{qgX`lqXw)&R2IMA%x6opbVEHuzYnBKPtSV8vjJ6-EuT&2C#t9o9!EhGBh{xhY zLKnE=4NKR^S1SWBB=ETSFq_F?BvTEyaQJ9!m;)E=kx?e=6hWRihhyZ*Xp7ost zaj{y&vMLqKVF9WkbZ7}S$%e{*8lHcOod{yZVe{?ivT z$(_BvZd=0JPFX49PU=cgh%qR{WT*oEg`MdA1ZM*T^O247q<-~CgJC1aKz+wo=GbD# z5#$VKqDOlhEJCtZ-5G52plfXvEkcCBH#6#LaMYDsT!Dz+>W)qhP{#wCyQG30IE!aDwCutU3ew6i&I*) z&LBR*%-0TSQWY>)Ia7}sVl~_gb)j`jnozOOvsg>{9rZla1G|aToS4+h?8F$&CcY^z z9;HLgv@yleE7)t{hBF6HAv}c1l`D6odW1hi)7TRS*7EQ&hd9(ud>AV(%;v`L?xwHE z$4Cx$Sbl=y2K~oAH}y+SwM3_m-V~yKK~b+3qRQ!$=+)#j9Sygxvj-;LYB;pKQ+0qM z!m$Ew{V6DoO`mmn9SWKjdKcqHddLuV_81|4nWJNw>}(6unrMLAnE-}{tr4Y*WPd8x zFeO!AA;2`eg@Jts7Az%P;KIUzONCP>2l1{FPpb69wERN6C8UGnHVPAZ<7;I78zENO z?75-_(n1qV!NfG33-cW^`}zV4ze&etcZ@`P6PV>^$Wju=6zm-otSTbR1PY@oVQzrM zyF$-mUIf__LiKQCd}R;x=MrMh5FEwGIfUX%{&M8(5XPAL3)ENX=x{~w#zsF$=Hd6W zu}a7K8cwn+!en@F4>Ez9$yKBr_;h`+b9o0N^L1mw>B*(EiL`Jec!ji)}7q8i*M|p zLn((Tw66ta15MF21z+XEQ5bJRay*xVGnFH@s^Kg+zJe#CktQEWH1Yj~ zd^pJbXYj1d%0Z@sRLgh6;3S8^Yt|T8R^QCp@3v4U=Y^~zW$1j3!1Nt=_oh>5to8@7$PoMz@COVUr0S=~t+$#^TIzAtZe zDFWBdL%r}YHM&y;qyoTYy2^)^hM6bt`EUb7#s-&NrB6K%4Ylpkosp^blUzE$604~c zF=suSslZU|f~fB+q{jzl`NZa4Y&iU4OUI=uXU=;Es4#CNu+?z>Aim^l64Nn$#FCtY zl9+wP#mx9E{HxoYDHiuJ(@lg5|5+e5KBYCXz~GkNNTC~e1^&FhDB5@jZ|5d%5HBi7 z+#_#70dc{drZ4}1>0n@7pk8%&8_bR0YZWYS2nV-GB)U7&Bh%a7;iT{B>uE2Vv&!m7=}mh_5>*wEqf8vCAQoTiKn*_~IH~?Z(Sn2b%yDjQj{9$cfAh3iSBJ5NJBMs<@qp_&G;LuV!>T zqNVCqXYxL3JLgR(7TMTWj1OxjtfPV$9jQ(E5j{Css>!us9pU9g{A_s)!EGzT1Ysp+ zsN9r%TPa`12#Al*8Bl!62Q6%pSK@T9)bGjLH4F%p$%2wfrxsZGKLP;A=hY5(6uX|i*PHdal zDd-d@Pa;+X-%z^@#OhPMcq&@Q9Ek&iJn@B9NNDfKiROAqG}kjFS9ZkFY3n*yE^ak5 zfSQl|6KXC*>!Ulyj;r=kG#sSD?jG*Ua<9v^doXqBuON>QK)wPeSTGXz3j6m7@SB6! zQ#6PU1G4qp1NtQK1~{U%s578vwev;BOpqkXjHtRp9z-ONoX>^{7SJ`Yi_r)6e|R_i z*k=C2eFRT}h6gmb%!84E4J1h-rmh*^ffS*LkS=kDEM+xcBcJlZ3@JNr{XE@_Ju7Rt zZ?OFl2qlXI>O`=+g_8AOd7%Jnb77_|{hrnK0t8n^&?p6L6m*pQ#8Y^(m_d-6-6Z!J z7>CLFRqEYHM8rixwS~Z7BUi*vvu<_jJP=S9Leu`!EDFFaBB1~$YP)?UCft^|Q&gNC z$~jJ!+-ie@#)^4NmiRzvSm!cJEU~8|JCWY=-(27ArO{S%hEPm^eKmHOajK}b^DQWr zLY^K?0t&5N2T8cRG}l5)f|F!|)8T%cpc8~ac!ujaxaIptEVL(EXkm$A+To<#0a{tl zag@&eo2ah>*aNzLUIaJtA}kinK4tY-lSQCh(#M!SUw){}`$w9-Y|5fR9GgNsuOgaS z%3Zgq;_%y}oJUifMiYx|P<+(*N64`brdPMivsS$6bM1Q3dcQAa2Onrre1*Hq&+Pvr zl8HodTd;)*TcYI7HWRIjaMLcxmb^xyQJ*7%8`;Do>8x%)WzBp{%@~(32Sh>G%%4x8 z>*n1yc3QdUcC%nsnNTCQm3i!9g)UE9rWX6JU_0dNs??HoLU7m4_Y!Pv37fJ0kHos{ znQHSGg= z4x7*GBaNyhq+wk~YN@U>O)OF932baZRMEFsTxnlrW+t*g0rhpO?aEiPrK-FwR-y+* z9`pr*V4X*LQ}JT4(~<%zm2BTM3MAmgF$n_w1%ILFj!TYFTFROX4kLsua3~$tU!d>=O+nS)F{YqCn+Ewa z!nP641t0BIYW@C@5t$ADN*)?ISk1$_S2U)F6zzxiH}3ZZ{dHBTkOEWK3a0 znw-{g2rNl34EB%Nn?M}dGyk;k_$Ez_h}akvYBAZgpcoOEU;UQs#BQbUAJ36Qjpstv z@f?QI=`g^NQW(e*Bh0!eZ+%>OP(>rP74)uY^&9h`@QCn{cFVoLKf%;P#0l4~o;&68?Zf|L+qA@!O-iaXkklwH@IamvBoa? zA!p+Z0N|R~Sja$M{%^>_zmzB28uD5NP?f6#f-~CKr?=?{)MgVZ%uL zqij1vz2K!mH5Py%FjMq7PKte@m<0dg(!l0Sq|X`P?;`_x%9=_TN5dST)ZDkMo4)gK zB@2ad_CEzAgkcdNF~jwJDYqz;DnotWd<(*`LUItq%I@OQhFk$sTN@^0d1o*JDNpVT z?%UU1-%Xm9T^MS5Qnv+lS?^?@OJWw=ejzRn~nU)t|}K^?ewd^5om~ zeJHZ+PZHR0ldWEGPkHh)74w?RCQ_UZ?|(@)oL*b%yO*l(K=p~_PDMlt`SymHN9%=h zHr#}7u~QF`a(=eqrlTzCcV9eGx7Qx7ypGEM+Wc7T2DUeJgbfrQAB^iS0FP>nv385i zl>Cr+i)yB`1ezG-(WA`Qy;IBnAboj-=4J51!*+p`J z<_SL`@Zc_~CcF{(~+ZOp+Q>W zc?rTq?1>jGPBiS4CwGa&X5>ayOI!$scCD(*% zAyHjtza=9O4q;KsIJ75WKjv*cI|j-?O2-*y;3OHS?nqQL+#tu%gR7woY+xT^O(^WO z`F3UHwS_tSu-E4P%Xlf`cy0OJhm67pZQ8fuSvaieWJ8vWbxHW|UYl?Cpoj!5T{xbE z;(aWR@iO>1rodi4Y2*%~3wsAI*pOXasxU)p)3iR^*ftHyDIW53V#^M{bZ$ph2qPXQ z%Cq>$eG;}%IC%%pCC8mEyq9dSP*6>aTr^7+T??}itr3Al(XtxZ&V(s8vXzFe#ypsO z1dc$WfK47$DwD=q+vsosI=F7nhZ!koB4mVQiF`k@tTiRnfv}ki60xlJV z7#<2N?k$3l)Y-xJ3pnxq5-tvK_|?%9E+Z%hCQkW<3JlN!hg;0igA=LUvYf|B{Y1Rf zqGZV92lIX^UTS8@LCg>4&2PP<^wE;DkvHzfKUt-%2w?)7*uVfRfibuPAXc_t#kja` zcOsW2!Ny&0S#sk@j;=y3Ny1*+Ct(Y$psE$4JQz79SzN%wxVc{>BFfywfUuziS=Mzr zQ|{dW(5rKNoI_<|2dk&p|`H z4}gaV{2c(NbE4quJaUB(k&TSpt*8?N=c|q;Wi=PqWBV7g-)a8@S|s~kfm;L(K76ot z*S5s-+NfHQjes$bV&$g10F)1Ui86);(on4PND=oQHF!4rS{nn zsr_2~lS+d0Lc-bH0#2>5Bkc$<$@oCJ?8@1~u;@+FkPjpBj%yh`CD1c;F*51M<5e!M zKF5^3V-&Au1(InvLHNI|SbM>jv{{I{&Pza*jd^58ngT{btdRiPcVmgA{YCuSn@|Q) z{yO>z_rF(mCPc)wr;!9Ah%cZoJ`hPD3jiLXL|5R`4j7X+Hj|qFL@zoA(UkDAz!{1~ z@{&{w-}cKC!LSvgB$uwdsJ?GF!+MwK*s$dQn;WsQGq_XMS!-Pgg}slRUi-I@UP=Nb zTeK`F>q4Ho&JihhyaggO7{6#R4NM2=dW%3_BQMqXh(WVacYY2%J%EIYJ|O8mvGf?W zQ`=^;olNFEZZhT|s#(pF%w+4BZ0K>4i3Ih1q@c_U>rOC|Af6?h#&lny)y0!irDKZv zzD&&#znLNHQr46 zvyMaGuo`6%HON3-BmXOj88mfzF?sxrhD`Qs9sHDZd#e@sj>ywiWD;G^7AwNH?YDEI zYnV?lkyktUxKp7+=Z8KP-r=lATEXs z9Vs1sLi3S%M~_f7P8-qeBi|%SS+fOLXq@Pc#Ovw#THdt$U)r>$9$GKlL)O%Trj3J{ z6aU$o8#&e4o50TUbd(7D`vm2~*#JuMco2#UNNh)fyjGBk2`o2_vm{r@_>aYPb7w;C8>JgN~BBNTtTE@d)c$9Z}4i*t&L%GxKV?gqLH(m*^zb<=zAx zis2d&xua(+n11!NvwAe80=aYloz3p%59Z|@@{i8>yML^aw&v`mHayNW7s}B-DB>0+ zS1td4D8iX5KP=j&f2iN6g?fq^fwO1-SuOF)3BEYgPr=x&b7Ho zsbg0C-9Vpo+2lljzm%=}6a5K0I}$to5uEI-pX^%mM}H5#L{HOZ&1~7`#DlS^wWEay z*lyCCm~cI$ITrt_O_wpXeMn$ysU5^~SBt#1tLyJtz7k}$DQh+$huRT0fXG=pg0vn< zS{r&C`r7vKhx0-W2y7bMOuy?d&O{~eyaV_x#PL;e}{ys9`PFYh1 z4pMrXU;iqByzKtdWV9oYJp91A+8&E-TKfTvj$7~=e1vl@U1EP~#m+;irA_^24?ob} zjHpXSUaDu0xL6;4;YIGOyfGv6+==7#nPV@$@S=jNr-hb%)n&|@S(tTM&48RA|Ed^OmD(_&`QZ}#jlIL6`_ha(rqcpMXOOvI6gV-k+ZIIhHz zuk}Nw$QvTKhm2m?>!u~%8vn9Dc~$l7>-%U$zLL@fWj8LYxa{0{+MJu07B8M(xhQMs zFztLzhkm1eLvVG0LUJrI{RVgjW)8aHobv~tH}`^-y{^7){InS}ubDKp;FeqaXk(`5 zPMDZC`O5rJXRpwf&ng^u?bxfPo;>{%WOrTXozTCo>)_<_(4t}rP}3f$Q=47sC5w*Ymajc!5y|CNUUiBB}Y;ej8Y zrVq+AM$tRe`D&bXX!6G#_k;E)I2tVn<^8^EGmiQ+b!z5iV%=w{o714z6V=6~CzxiE zqVK29!4ph>qVoN}N?-6n$z%4ww}mYsOg0P*;c75R%RYJA(GN>Hy3|Iu4F!&-TDS~3 zVsRtH0he4p#4rnkFbsao^+W+Un$SV31x5ilo3KgS3fP+HJi|ON1i}hH3WpVZv|{@q zj;%i6*lP8yQDZByA$t3MMjvGK`Z&=I?!)r2&Kwk}VPmJf7>0|c0mw8m+&TpdDO}JP z#G6cVP*%4)O$@O3G9}#RQ#-S8PmoJNxFyWxBV2iK<%uv7;IV>?hbD zm)cU+ilIwKkBwz*I8VEJdO?q~ZcOceV`@)Orq`cbe{$U}`|#$&kKwzVIX#w~%q_pu z>OQg?Y2)8O*=BXT&rwqUo`th#&Z^t(eEkD}nJaACmpC8Bv9WGfkHak+7Hf6862$p% z@a0t>ak#YeBS(F&`k5Frot`>w)%#-1G&9lf2+nj)3*GZR7sQ+`r5o!fIYD&6%tT4z zAGYdWTq#=8r+%hu%>j(2Se07+%*1uz^NC^1QK zmxx!Zxu8QARa1AE`xSrav%?}KU-*u3e{w0-HIp^$A}A6SfyZ_ZrIgmM)()Y-ByfG3 z@(jqLOqK}Wf?EoWCz~ecQWLF|X8?{BXgH-XUQu~81E<_P>E!FOT3Wb-$VJsmDup-i zF=>6#f&HbJ=TT7|=OGuaduQX3zc* zJ{WO4t#u4kj8Zpba8;RV(B;SYHe)EZ)}f|3sbujcvk5|!R}rPy2}9Vl@v%xJ(2*7diu27C#Kw3!;ffJA1C!A5KBNu=V7MM*klWUkA zEvy|6`lyV@ghQ8vLqiaP;3HuePPln32rWKuba5}oNEQeiyv>$=5pF9MOr8eI(*SuoL!M5NCzm`Wh*KRs z8zhQswdaGPx%K|cYTWJhqa`iHa|X2(dv)eooJ#RHXI3fR0FMs};X}}+P^T_D6urNm z;-@QFPH(LvhRZ=*#0;_B)WEkQ?0g8}3lK)G%jF``@*qeS!O8D}Wr}H!M zZ-yc$?2>u#n}d848}CfZyfVqZ2l&fY9Nr@MaxJz9*6q&46J7`2YskZ1L9BtMi9mf{ zUSfZLtsrWd-UKsZEhGltc(qo1lreRKXqHZ7;(}5#>TqV;b=8HOcp-EG>E~pozgin? zS#w~iGq}GaIk^Ap{f(`Yv08;9phL$4UQlf+76S$Ebn+%U=*^`q?LlT8>_}X3lQC2A z^f0r5X!?mHZaVLT^Q5F>k?O}~BT6PDgP4>~j46LyTB#OMzMe{rCsIB<$%>YVwgRo9 z_fS?qm51>C59r;6%`S`qQ&(_L@UKU=K8~B-96h+iMi?^=5~PXvNlOz2$=6>z9ww3> zufi7~MLXV3_TsDDpFc4*%uc+P4I68aQ5tj+hZI?)Pg>eTav$DI_9_uGLb_D(#LdztXOU%Pwj$V2{K z;QsXsH1gn)yt>^^ytO()ES`)-1|r34GDW}<{CqMJeaWqGBo}JfK{bFfF^H{9N9$q7 zpFi>SzDdECx8hY&NxTm3`}_(2XIBM}2%nnB`x+;fIPjlH+{erri977WzX~4VTe&R~ z&!J%0Nd~%9B{74La^Dw^`jdV-p?0aE1r86#*VeJa1y$*aBo_N$RHEP;!TsXF?uJ*; z%$0q$1-}UHS@Tt(2L|Y~g6|AJAdF>rb0jzaXsMx#MW#|iwU^_i>cKClxKm9S;uG$% zr-z2O2oC?M_A(5vhaXsTAYc!^17Y83WVXR0loD2los_2KneTGj5-~8wr(&0Envc7R zkEQGwOjv%+B~1(i(>LVNM`MV~M+?#=&+opl@)T;J*+NJ1fk?4I?@@omY{h1?h;hN$ zrD^8-D9(UQQftDR|9TXrlJFvpa%!*>R)*b0k#y0NvSA7uZP@(s%3;1TEpO_S@uP=n zL!z$(zM5e*RaJg%Sc!M>Fu#8pr^wo%5`BK4wA5SU(?{#PSmyWo6r}sAi;BHTeY6QR zUa!8$yJ%FH0^l&Ozj#1yJ9{aT>qCb4midZ{Dk?_lzVedMgG#dWYH`L}K`7TKb(y96{6&7RAQ18n zt||rF^Yr4fB1m0I*^uu-Z%w7Qg0#g8!QNlwTR7W&z3#7BR$jS4_gCq@3a__XE3K%i zu3k2`s&bTGS#$YC+ErEhqN*CN?k`{D)oZ*r1-w4LWQx3eD6o`P8$YRFR4-nP8dRM$ zenS43iPLe7;B*VFm6|EE`9(f2Qdei`73GV{{R}2)(<$62T^m%bYe`x`Im#%CT~k%; z_4yzWuOa*(_k~MA(MKz(3e2zYLc4(qzqY_z>8&ZM(5q{z{N7@Jc~zxWQogtxD)rXX zRMlvjw`ggvUf%iqSImDU(DR^?OM6)k@C2Q&oU!~jzZ(C1)$!?)`jq$(+pE;q%U=VM zY_N(Pf|byVjtq2NA2%K1XCtK4Ll{Jri^{bU@BF|5t!lBi2Kry3&94enmiV;t%Ed($ z{@XZ%1iZB)#yI&f<@j+zfMLqfyyw08Plh0 zW*k#j*LZ!P(}XdYsiHVZjghQoF|2d&@DW+VFBy`3$$3hb*Ln4ls>*Zyx-U>&T~&j# zx4NhXW~fg(Cs!L=1gkFc7tIxQt6eEguezwRycjC*Q8SY&b>EVrYLrZ;De6N+v3$!a zi(!r+aEI?Wj2SyFcRberC*cObl&hxVX26y=E79JlVKGI%mycJ$FBIvDhh<9nZ&(E5tF14{^a&;cmDcXj= z3`#DgNkOkw0hmWAomExMGF(Ua2}c2DVP4fm3%s%Mf=EO_r@WZUi@AQ9qEDx{GJV;S znkx7e*zbZ$+9c~>M%dQ~Hi7D}2}p6IKh+#t198L7r`5_lkw5*&z+Bgj?(8>R247GaYtQV zKEHec(nCckUvy20>Jpscdg0>rK^K?wV%HFf@G(y)QY&BJ^-KN1U5y^?)~2vjkU&aS zR^+4GSO72Nn~(BGa$=1sB6fx}RB+G&m9#B(P?BJXD4-|+Z7Py}3Dt5e19(i?KZ_*j zZG3(x8t$YDs~$jy<0P^#CDT+!85 zF7UETuAv`9j|6XARI>=CRsuf>#hY4SJ(%QZpnjikVV3xBp$ThBXU#)@XOkEH-U|zS)8aNrb;{ z{6N!Q!SOkc^nYkt7LKBt1;sR1(bQ2F-lg8+#ZZRy0;M%oi`YG&2PtRgL>rc4hO6ez zD4a2M!UTQ5Xnkz{)NxnNojz&S_@VlAj8uw-qT+{^4Q1WJz@)6Ka$XfLQ5K>(?L7=_ zNl{HD2QNeP`Rs7YYtZY%tI_OXIdW)%uO<&AGw-5m|1t{=>`NVDyFhU<{W) zlM9dPCqt_j6fJYG9NCndmxZ<~>LOxy5#=#sYf{-?TW!=r%YGP5hTY`NaJnpST%MM! zg@3>}FG-WO9FEeJFBULbcR2^El$LPXB&r0*f=lA3E zFL}9j*rc`KGGh~AXIjoq0d*vdSeDNsV_ZECMf;(CEb;~_7gkm+5hh7r6poEfPsNTM zX47WlSc>Bv9340YxFbhJ#oQWID?>4ml70$h@at^4UUu(d=p{rIO`y1H(IU8rEPYV` zZg0Ly{qPA62(^Sx{=fl8ITqR}S} zn<__%NNBdhEM;z}=04^eqXeVN3N+bKdPz+={00jm5mA(gE5le-PQ2I)OvoJv78AXG z&UykqF){J!a2h~!1s^yx;gr}NsJVb(I1TyvhbYG>ofOho%BH3_vX6jt{+g;~XgV?l z^v!Zw)Q#E4+|rV{D%B_`LRPd=x~5^QP(pwI{aQ1repqi2jfna}N8>N&GzX(Tc99s? zNks}Jqg)(@A43E~R9ZseeOf^@lR;4B!l5}gmj!MtFIrk&c{zw8W+J;-I$NJ`wOU>- znt3JkgmE8R6FMi3yMPa|;68tOMFot;#{nmP(XpIl_|*g%BMVIJKy?j`h;S1qLr%L)Ajka73cm4gjIa zk4_HbVSiN>x{U<`boPbP(tYgf^6E+2g9~ihqd5MkjwdbQCQI0i|KB<91iyZ> zuNZ#Wg~i(K3vJqvMK*0Wj&t!O>peIeH`%m*;(S(>O}hri1{`~Fe23#1;NEJRRtK72 z;ruL)S8=?nFyfzC!n{7wgLyDtGu;UAqbz2=CT=~S94DXCfh|_}tvFwSpEiEtm_^$8 zQ*y^JRIHspZldT9u;w+lysFrb6({&@Ob_rgR@tRj)lKn2zj z=n1%(OvM>#-S#V!o#eTnm%x{jr;^2kAk%z_`_DQ>O zq0wD{`1e%VZ?~iDb&he#9>?EoC}|5w_b8c1g7)wGyNrS4g|f_5I3FN990xB0{&gI@ z7PuYX`DvAWJoeqvRyG0u9q?HG+kihG2X6)58V5fF{EawxC-8UT;He4N84(8`4E)PD zI9|1;8FBDJ;7NZwR{m<>edFM3f$PAtl|HMLJ~so;iJ{j)!~5hDfqwuS4%emQ9lNYe z={paC=HS1_uWz=~qlo_m@mSUpZP;F%?4%u}!H`D3gZ=Wy+QBrd9pr%41KNe}b{W5c zK9AF0JdOru-1b5lYLR~b`(4Jp2*Zxj>>H&|*aUpW2VKTx64!N{w*tEb*ww_8{nFu! z4hE2pqYX5Vfo3+sCQZ8inkbqtLGvzXZnEeu&#^G9JGSF=+(6IzXP2>_VNi2Yx?rYyZJETcU8Qe_IOdZqPy$@gv=OV5?)W&A=ANU{3)n zi@{of&5FSe0?UuVjsUwn26HCjJ^`@pN)}OmU~d8Y88M-2`+exfg%8R`T*2XJ+4F#n zjluZZt?U@A8rV58*lJ+u7L0bW30M-aIn1AZSE1_vfL{gtJ&C8;-;w=MD|z4}0{0P@ z^4>#vbzFXcxSt>nZypZYgv(wKwh88!*b99NXf~4u{>=V>v_l>Em7jDOV~OKO+H7FU zfN?vMu-UgHZ9ec(pGNm%^MG9lOx$DvIqTUEY!fhR-LD0<&Vn(Y2Y@XHR*taHfmi19 z6!2FqwB*?e?8O-DAh6%YU`K#8#$Zm&ckYY9(t+J!!6;7_uw}q5lJcZgLBH%*a)I9q zJYK&d>>u%uBHpxr^5SIdm%vISFSmW3tjCSOKLRes2(lh;Wj!*@R>Vy?0>32Fq}i{P zX?6p@3pmF{tUJfnNS}KMaRWc^GS->-+@9>z5$*(jAMk984{$q%hJ66@%fN2#N51Sb zPM2x*Yaj>PMmF$AfuF;)9Q&Lt$E%DhK-@MwYs8mTNIT4@_(J{)#666-SpTqE;ii75 zvrWM62d#;T@&mgYSQdH1@05WtX?FvE6u8x%_5<5w!I=Iquyw$u%k*wL1|Y0ICo*{n zxQDp%s~I=T=HUj!7bE`z@vBw*9UK?j&M{G)lTGDjjD%V+KG=gK7-DKnQ;0MpzV0%T zSSR2aoyP6ZY|)9Rll4f`yR*x{zIK++;|R%mWZYwjJMc}HFKscsj-i~?iG~%IfuN~kn1#V$n0Pwyn}Hh=ciaCZZOsk5 z=x7(GeNx6-BXZ;;ZqIj+-%Jyd{b>pC`@6d2#>I#(nA@2LKh zcDx?=AAp;7Odgwo{Tr~~NFHwcuOyEq;5j`E$&Fu&|z)AYXwTQbbEm~Ki{(;{ggVVnGH0~q7vE(CUax9FL{Y}Jm z_B9M{br$(t9Vz<}#0@{qFan4Y?foVxTjEK0xEJ_KW}2NcjT>Z{h~q1xKVh0k`&ItW zZT}$Jl}Z1HG@l{OK=L~_jpOtf|HrbfN18)t99u72fPW0UnE7)ogvl1^p94O!pJ9As z;{PG>H-Vp?VHnubBkAEpNPif(5BTFI{;0(H{zzRcN8CQ$Feb?~x_!Ll zbuV!H0DMu!z0UX47E9C^GeXy(|ag4kGT~&oc}xYf9ZOio|sy?!pTUBiS6o zBt^zBX{hK-d^?b?lycPBBV!mh;!Z^z`J?{D8X0|Bp2DZ8x(WNV0>@xv&EC)Da4IHoK*%u+A9jrLs+!!Txm}q0QZ8vK;mwD zzO?V7z#jx|_BU`1T54bTp%^R^*eVOgyhZ}^0aN`(hF$d=1;GCU_+MmRY4$%$8OnhF z-fb8+O59^Fm3CMQJYjhJaz22#uaU-DPKKXS_^)NXdK~{I>s3cw8{%%i5T7Nr=+@)- zGOSz5{v~MUWJmKQ?m~x5{I3W@e+Bk8r0ki%`;9P+$r5+lCrCU8_!Qv%B(7hl+QSUs z1;DR2>1RrPR{*~cxT$ZBJ!^s80qjE33R}Y>qgs<P>6FUVPWg`_tmfoPoHv5Z6FD_H_>?JF^hX27beI z)d#|6t#cdueCtdI^9azFfc~eTzeM_4kK>|K$hj{rZ_q92bVHLM@fdR-U@sl zaGZ#{=!>c2Ljc|cenmK6%-y-BpXs>7+7`&e1&91kzhUf?JlytImH!96IbawMnfNc1 z{|A099yYV$)WZzmPXHfb>S4Il1M8|9aeJ3U>WcZU2DTko?7ZUv;I9E6A@kKSR2S{( zDc~KzpO^e~$9Bn|dAA{M{W4W=tb@%mj``3=nYb?l{3@AGntie?Uk31c z;MV-fCmZ-6u+a>O{-zLX<%YnZJ{AuDbeuRqy zTcb@()blo^DY(@z7Mr|kWZtd7p8)>6#69-y57z-_l3OTQoZP~f*pdbfR1eFz*6*jw8kE$FDVo#=?p2JH*04PzR4KzHIkHwKmFeF&DX5HyED6KgxwzFF+nH&LEv@3 zKbE*|Z@H6 zFNA+G?{Ss^uK|9!!f#gosTTMq;6EpB+9CauZvTnm&80fw%eI0x0iQGLH zE60A&mVy>8o^qsOsaWth0=x{kEw;~@=lI6DegiTsV*vDemm$~g!}aWss%H;q?g33~ zJr@Gs2K*uLp`T_wQ-F)smb0}X%dr_zDl22At`3d;ia95B&tfN?D70hYYkFpe;Bq&`JmI6ksP4F*YH z4f@v_)LKgnz5TN&av{fN(BJp4YV$}>*`5OSObpfv>}_DEV(}y0L0}&O6LTwE)BcVC zb2b{rPe^6v&-RvK55~5)j7&W50NURjOZ&K$mb%RY?Wdq!Kw8==1}2nY9`MVzM07@4 zKd_C!3MH-Ej*T|N*8^_@UM%r6bDe7o@P3crr5Psfk@U|2p9nnG@4X3pLkvA-IShO| zaN&b+O$;Am)83E4(t!1OG@5QOuuEdF9AHJj`jQWREJFdX`M}^}sRtLjTVbzrwJ44!l(Jpz0+@H+BQd1csdjq+(}=RhZ*nL--YadkbhF zjyiY_v@2gw>yfx7?>1odz=UlJ*{*7#q3MV_tmwshtCBk%wq}l7Fg(^$A;cD>7h_nH zM(yEayc_Y)B7QW&X4%u1NEVDQK>YsWq-T9pBmPsw4`X`R7WbYp-CE#1UOYbE#}Gg8 zIPv7$ig*v=;oitMmHUx&1P=kf5;*gqylNg-X!f(DaiUR;0}Yynm8Qs~0Sj#~XmUYw zK{So<^InVFChZKxPmBp7c?#Mp3#|^?TF~Z$FRI3xcd?l_X|{l7DrkmA)7)s%uxzcM znF*R9iiYz`*8+D+p5_);w5&3e7vev6owGAZcYo{{)SwH&a)2j=7}az)wfoEui@j zG^Woo=fx`(BkH^rG~=69TQK>kd(^WmI%gmJC1@`N?F@u1HX-WAj^+{>g~>iM6P12F z=#lIg`VtE{^;`hj*`OU6rbRu}$igtb8u32FqbpLp5PyRzEU`Ghyn35J3)Gnx*QxM4 z3l=A-fC_W*vR4d5pIV0g?^(d6qB7FDLDA(QaH6LOB!VXRQnP1bsIfyaZ0r-{sH0?=T{{iP~L6eT~2cY}966?CZ z#~cvYd>q+NVNDTnlM&wcCybfz$2c6}pPz2i2KTpVZx6+DJiTmM@1JT~CGcP4JOnbl zhBT8N#(WFscW~?m_A-t(92dFqf;go63&J0R{vghUn=p>Wu^Mu(`aRYP5#NY(dwvF6 z#PKS4)ih|@3LKZ;3tx=9wjumDj-5#NDvrH4-oWuTj(2h7EH>Lx9 zDUL1B*CUJ3_bo;Lk7Ejs={RQMn9D;|N(#Oc4IG$f06(9h#nEB<%?>()TG2D&xSt$}V0bZekn1Kk?v z)S0ye5QL-5TiDK(_{tuYn&uzu*m$?q9bCx;4LAM6FHPEerZVhy6pj!hm z8fbghrX70Urn&LrV-H>=v9Z&pZ9Zz#dPeAaX+2JJ&U9!FkG+tI&x_CkP8FiYWRxb*+bpg=SdW=1oD;Pvt{@mm^Re!UFz3{)>QEegW6DU+1yfm zt;wqmmDlrqK5Zz!fTh08`eO@*EplT2n^||YxSnWvM%UC8-(|p^ZX6o&`QBC>pPzyY z^>eE8={TEoIS<*i=WwjQz@);n>nb=<(ec*Sp_gsiyg%Vt)$oK>({x3L$G|npKsvpL qU0a1?Tds;Erh7?3)uwHvX&V)lDk`>=qNUbq7PJ>b zaG~a54bAo1-d1f3(t52wTB}wAT1@~6{;E;iO8rqIwRG2|)ay@FG@tkToOzyoHUzNu z`}yPhdEJe&&oeV;&YU@O=FFLyGxK!!RIk|FZFQ~aS!4Moy*+90jbFSPv#hRbHm%sa zqGv__1J>YL%UV-q-EUQO`>UQ9d)a7&yDjU9vBj--;U)OQ*xy={?R}^E1j{`mY6qW) ztch9oS6jcE=Ii#2eIn9rMOO6WkG1j-Ta#Dq^i8#_%z=}0hayL?D*Jx8b#!+e&;47g ziXTp1z0>!qWhJ@-7XPm4`Q>0Z^WibiU(++yN?+<*KY7(u-;pDKWZAvFFOTy5`La>1 z)yMQq+T5ETm9InO2qaBDVdPX_X8&%Vb>ztFt&D$g#bvYR{zLirpGS3>zbYb zNjm2F;(xWAe(Gtt18%f(`~Ju}spF5i1Fp9^{&bhMWQ*my2erL4aQ0WunYkYIMXjG0 z%Ruq*)7HK|;!bP(+3PK9%;@HCUohvwi@%Y$?25};zy7Vn@{&xkW_ zWutA@MzasFtb0117`M90x+nZZ#6Hw-tsZIJv;WhFW zob>h@tNo2%6bs!6&=vL_n(~Ex2OR6mpKsmy)Yduqnbw^zZJnJz)w*-Pt%;&lw6?C~ z@12RQ6XaR5b(K8*CR}C0J`J1Dpc8_Sgnh3;;DSI>v|gEWOI7A=G^_p%R^xenk0sA* zdrYhqjE)%PyjPwT4pcZ$;Xs806%PDA$${<&$QDy?U`0NB*F@|0J}ZAV;_}PzGhFI1 zJ?Yh~>J*r05v%p}aH418ewNjq-BcAmtS3*yt#I?{mi7E!Z+K~-!D<}?fb44{k+!~b zf%W_=>pREQ%n%bYXw9|z=dQI@bWZI-3=B}qva9X0{Mo+XDVevzzC(V6==EXWxO@3z zp_RW12Pzz>aG=703I{42sBoadfeHsI9H?-h!hs40DjcYApu&L)2Pzz>aG=703I{42 zsBoadfeHsI9H?-h!hs40DjcYApu&L)2Pzz>aG=703I{42sBoadfeHsI9H?-h!hs40 zDjcYApu&L)2Pzz>aG=703I{42sBoadfeHsI9H?-h!hs40DjcYApu&L)2Pzz>aG=70 z3I{42sBoadfeHsI9H?-h!hs40DjcYApu&L)2mYVpz(p4So3}qM*qry{Z&+6G#Nvl% zT>Q<8zrFC{#Dy2Pe*Mx*GncfE9%HqfdfK5Q!z(=(g3gN~Pkuz5Wz7t)svdv#S7ttm z`#slKQ44piA2Yb~jobR<68CD{FxnUJgDceuz6JSK%eN5U(w6nm&M)IW(CXI)tq*QH z3U`WHSME5bCw$muTpT(EAnmw1bSLi)wQv(RFAA0CEX(R_J)D8cUxfn|4pcZ$;Xs80 z6%PC_<-lMV73a4)_`J5~e<>F#)vj=$!hs40DjcYA;C}}PvfCovRjBF{?RH}_lwFhz zS(lH@;k6jy?>n1U2T!Q7x(D%>-4Iz%@IyX2`00Sp%}B=Zp)!1$?;AcBOMArQsyxHrv@x7xlIc+)qh41Y_6{Fo(?FsTkK%S_OvF@dNf}9G- zsR|kIzIsoP4S;M=$V7L?o*+*EgaZmW^fy!geoTdUyEkb#{O6K$WlG*W=qnCLuoN0K|p?hyft(0K|s@hyx(u03?P1 zNB|(|03?S2NCKe70jL=UpoSQlKy9)U6x;q}er$tftzP<`&&qCSUVn!Dx3kVXJ^RXQ z*=>oP-8+4wthqTWd|%J%P^`+@34V>T)+P?Bvh4NUTv4;1wf|!GzVQom1_!ctV6=Rq zXZ38LT*aS>)@y@Pgq6dRG5gh ziZ83@;U_mvisP$2Bk56pX7YUE)) zJcE5mV*=92!hHL_-~fehLux&gM?KPO*h;`v<5eO_l%KS&*axslQ$9f1kQPx=qXFfC zSE9%}#t3>Q<cwc2f7|_o4I(hR@n`G7_q4hlNF$vwoROS>Whmc%iV*(^4 zl#K~tW5UZuBdSx;*SVd2YWgbCYpzdZeEKK;qp z76JC3T0z!1e<$Fin6|N9PPaG(6+HpPXSSD!-E*6}#9k3bA#+Jk0&1hH_@LkpFI%Fd zlH&XiNtz*ZxxNc2ZFtWoht$#AFi`~-BoBMu*YF*6on`7e!&BE0z-L3wH|^uIocdje zIH_M<7sMe-vBEQDT51ug|0+64w>zS!@LpbB*oI0Ky8-OTaN#*t6LO65V~yxoNUO_n zB&^G|r$9U;BxDMxH3h6>0S$2xJp7`g_y@HI#6eZ;$^(!)-r4oQ2*u{>Uv4e!X?=mE z8ccD6shgNyKiGo)N?{Bn5sGj!QRMu~tS3Y&4)z3@l|dU!Y2+x4cQjIbTH9m9k{j0n zMY3w(ai2A1U8btoe8Vb6K(zLemlyAB0bP>5+J(%u&p}n^0%(k+yttA;#mMu2mEhby zN%vWxF##GQJ3&_AN2oaniR6GhymXlx%C$EG8E_r1skttOSG9wRDeJDBXd-7IOmn=#~ z$h+{>XM;l^IZ95kjR`_Fr}Y`(=i7=WNhU=J^;cD_b%EmhNKz26D;HsiS=y5s(>^CTekYMhER*Yz+&UAs*?4>q8J4T$ITk^fY7<{Wi6Cr0 z<^bXwf%sTN6~{9Ijm`*2`{J+%fXzU3Hxc{$UO-VO@%M_9&;(4qz%|HjLudFP1dQW* z7{Ub!f8qV?hWL6!V$_xjrNDe}BD%3L8IDklQH)i%6F)-nVTeWr1BD+V2H7HpI#7S2 zC)nA-f+BWQNcSY5$nzQWk~NE(`4j_0rUGaJsuq5yzhj-0I-y@`Deua@qG|!9xl|f+ zLn}u5=On{uxX6g`iqE2=*$q)6_jML%-w$ii@zsCtH;^@tF=*E(H20Kh{9J4TNw{Vz>uV%P- zsX%a`K_S7MHEErIm*(b)eOjZ^vvXZ7ki(O0c@+0IaWgcI zk5#NO(0xH(a*^qFq z3N5?EKb_oS+qG2{50XfOUFb%G2J*+eOOc49x~frh*djH630bX48L`0Y5Ujwby2mdo zp88Iq_q~9F<{yGV(|CN%NpA?+5%kC)`_t|dp#!8Xr?uUFWuO7D&gY~kfGl8|YH~6friNU8G*PPwwO&rs6b>MR5!x-2-Sc}o7-_1p$ zXFe&*V6fG)Jyp;kvCgyoP!6$dZ}swHmXGb-5}BKe$jp+KE7ia`>)8pZ@f)FmxX{sr zUXNEwcp6X6r;{9KHlU`6tI76+a#Z|yiR3uD#!E0q@EV!EAPDouZiPykg)z7pvzXG% zyq1{03rusb8L-#eo3$*KaVAq{BSlyh9?`?Xlet;Rq{vfXGi1hw|%o4wnvawf^_T=Sv#V=Y_R)22fHxWD3XYwDIJZ-q-%}joQ$)77v zmXUPL0Fz%~@)w6o&NF!%lV=Q<{2G(rWb!%X$x8VSChuhO{^dr1CR?--{In644VOE} zPLv}_39ySIv;M4u1!4vgsRpn#Y_fbX3%{lj8*Ot_=lHms>R zlQqE4+DnF^VTb{?4-BwZv&56X{80a~fNR(Hy@^=3r?E`zLBS3>eGdI#>=qfEVLS<|pguyv)otY>Hc9lP|$L z<1otCS&LuHVm>OCQ8#c~#vGBs9R<{s+bF7-66JQv;j~kLvz&&A#>%Dy7WLw?>^`1q z>=Pq}o&;iRF5~2WDr2J>o9-Pr2*|jk!bN8eVU4g8qIMUIK~|$t?4!=6s?z&RE(MtQ zORDi6wbz|C*WR!9(MZSGj!&H}spO55OWsW`d6!&~U2@TY;1C|clV!wgurPupZ%nkg zUMvQNq$B>_!yw9UqSj^(suqb({Zc#gMxm`=9JeW)lr?u|5m6z;4zCUG9k4U0grc9P&yayNk11zU5>!B&N$6vA#40eN8A^ z1&;N#HxR9x#`OdzlpuMvZ{v z`?EbY(!0T!CXGeoG~*3_?d97JG%;i0k-FC)1geatZOCE@#t>wb8v*I^dA^A7OXDG` zB7jw3I>wGT3y?K*GCRIx-AaUW{w@e?6lwx%?d*tAEcZ}UqjT+(Wjh8*@v&`>sQk5G z0$eC`tPw{Bb0^oP0bFY!TFW6A90GB9IRt|a1nU@}7=b8OKJDv)k*h=9EP#1pFeU8# zQO_=s{?0phjSO^l?;1I>^OjvBs{@Ra_6g1H^KqSK1lMUsZmhO9eilpFhan_X_79;l zunU!p*@a4t973f=4xv&bhft}Jd!X{FGAjGn=GH2z5)1*dG{SW{hSRJ0E3eCXuE35u zgFZk*R78gqk48O1W|stQ&cVqE=2Ry!i|mfw;TRax+8$+o;*nKlCj+MV#yO@0IUwQ* zOTZZGqG>TyG;^qc0*02MvJ|;ODf=R6Hj_pXc_2SJjmL)=Zfh`J?{4pW02Jom(x!@G z`W*|eJT$!O^m&ZG$jaZpiBqKDIpI}o)9i+tbGUiVrFvyS3Oym@x_H=J+mGci#P|>& zvqvwtFqidh&gN^4ydrVA)o^s1bX<9#()IxPCiV_cr-8b@9koE@tn5GLsUCU;hLBqegfo@gnW$>r;+LhvID~XI!zuwceUC2RUr>R) ztXdtaws{Dup*1I|*$rvBgU!PGZ1AtKaF&`Ob0D7+TWPU1D(7f<&0!gZ6d=&74bo0n z<47al8~`E<#2jlv*&UIEDJX<~2a8nAL73}_ znf;PrwU};XLIUvaBgIeXqe|N}p zQqfrRvakAcXs*SLg~REN=Hp7IE^+c+WDSHR%79GqJanvX2t-no^T?d zA00JqRxj#f9n?DvuJr#L*H&zx0e55Jc7vB2TKohjuzV75Gp$WE5 zlt_1j5U7K@qE5P~gFwx_#IlI#p0ac+bN%T~Sq^o_=ME8H5v5UlQpl&d_7divo70Cu zE=A0>vr>sh2bGs>-M9oxm>atkq}#&*hfIe9O4T`g;W^hW#&90E%ckxs`jX1x1zoCY zt=1a!J3odO3zev~(Kmzt6hYxOe=Yj2U*goGBF@DMTB*W-_OwzAIpZcI_J^lC6*POe zs7q94>LGdCLqlUua~07!)w~=CV^-UI5XHQ)*28y29otj$#(8eAzv{EtZ&dS0o z=)lsAEimk)xo#DNblB8@cN89z`WsgYkDQz)@w(i^X`prlWtQqOo9kJ22XW@w`DCt=qrGnFR==69>To^jRh%EF&K0 zmw5jdwzL85j)iXRtEA#_a=7?uKsa8mkd|7Ry2Q)ZgoHJZjloW8`yauz16gN?EZkk! zVP5?sn56jySYxK{Jst6I+}Rfo41=711`}=7-C*lraW+B`D|3`-{4UXcsF@=N5Vu_v z@DZ$fE*;`{J{>L=SVej2nZMf4jbf98;I*nU2p0hS$r%>uA84r}U0<=Q4RKTHwQ{@4 zcZPNffPg+EuCUoheL#vSYl!}?hx5OG7{FyxaW z+rB0aI$GpsOp&5B(0~bVNu<(S(s>`Hq@NeaQVZZa-l>R+YdJmMyUU{;zj78zAXF>*0P&6ys`1DeM`S3Nc zT>JBBNOMFTMqE{KswcwLm$lf0O?nfk1foA+BfwR9$)oTnvmheHWT_YY7ka@1>;<>| z!{{Cx&Dx2vPP@dm8t>MLEG3C>xSkwI4vVwYl6e|-xpz|~ie(S=@e2$oTqYYm>3!|Bz)sQhMAC(1MCOoHepDWXxRQ(dax*c%FX%3@ z;VPF7wS}lY-IZdHL&H68gZ>oC^=%lX~_`W#h}dtS^d2O0efBVmVmE6;O|H61xNV` zJJvnv<-IHNK)#hG0&UPfi;MGG7|qqLC`vG8li{rJsgU*j;r$pnsl;R8)DpdwV>va7p^5^9Z@H<%h(&9l@I|Cc z?`fl#Dm9v;UTRyvR5;p6g%6vidi5Q9I5hbY1xgE%42pp*NSFqxsAca*F8%2u8AET5@G#h}%%rCA8a z{w~Iq0nw@hJpwet07;yu(kPY#ywK0aqi)l%4d&mnLsbs2a81F_xDJhr7hBmOK$z7v zL{WVeDif@M(>_NG)RYUd)jE_-6AH~~fynP2W5)Q6hL&s@9Q<&Q$2HO+VGn)DyV(!1 zt%zM|RXM;K#6+APQydii4DWHCY(z4G3VP;G45Gfq2*%P$`_>QbF2(|(SR_NNE6S#^ z&qX%ReYqr?MXnCiiUH;2)_D|qB;a2ibqRoAOobObZFFZ8IEm7NR-Tnibbf}5!W6u? zu0e`M*#|f}Mj$)QqX@HO+dX>DdiAT_30^0xHX0>~#9|sHiBTD2*>dwYY5S9;oTcE& zHJ%*d>a75KJ35%o=R4o5>Bn{0nNp4c-cX23BX4TEf+EY&IecA7OG`r59I|y8;o&F%D9G2Nu`}I-J zb$;2$87<(q?`_6Eq|z;E(x!7Zb=cB(b>8UKU=V;gHENZyQ@Jm`ixomquk9$UE;l4 zs@{1{)*m>xkC&Vz=ezy;FVg4dgXR=KQkY>PiK}EuSO{dj9ZlwciauGMns$=1nnYR+ zIhl`pL6y(fn%*baT6V$K=wSQgE=kQ!(m}fq%6Pk%%y>y=%S*b^k_5ocU8 zvY<55Q4>}7kAjXR(dszJu81AsXm-bE7juJy@0~4k_-40IN+mJ>IpF4QMUY!%qd4&5 zNHlgo(F7QO{q*wh9jHbJdkR^Ckk>1)F*>4mM-`$JSchxm8j_)3j#bm@KuHlylV`(t zhue!2gM&P6Tz(H?qZR(m=m|l%!-U#Tl^r(Z32~8nZ)G_6T2KK}Vg#m)8aeCjmJD$z zhh&u8<+*!Fl^B`=t+F|5fJD zji2|S4~CZX(q+Pabd3c)(z$jg;NG~+?%#P1`(hk(i^L!th89*8XRR9WRdE3$v5*co zd6u{uBMtbGAc|f*$+kqms;a^y7>vOVT>|(K?AQ+rzExPZa?-Ja3nam-faE+NA*ses z37+HAI8kCDNv5C3bZSO9_cnu3MH>uA%^v{ys6)86Hy@qI8Xz1iT#e3)NQ}xd zc*2;!OoMV-93Y&n$tYvmp$0t$tSz6IsTDAg5M_>R+YAqv(+2VuD_FuS%c z{KEA?BsE{!R6jEYfkrPc7O~>TVz4BXr=rw} zjh=7<;U*7bnhJx;h=fx?a`tv&du2edL8B^%0tHN6$TP$^OiGErGPqTPHmI?j@#rxH ztjTUdzeA1$PI^H7S{O4|B8mP>kS8*^coC9QqO{rkF{d$3!6tO<1H^C*C1yut8VfmE zz^OPjCF3x^HL?|>Y{gvJ^0}c7?y;r(_^BbEG30X}GY-S&YQ!a(kYECKKAF&jQ?TFP zjwTw?0Q6%{fd*{Hg{=kqIKp1LkXoOHB`4k7ho^!0IJx)oOTxWcEDk~X^P%PKl=KFl zcrpylv5h%?tvTvEtwrpvl1J7}&No0kqfq1WW$ZsrN@EV^<8qQLMph#lxI+^u zmZd={4vPc>aQ4w^fvnA94d$#facmIakO`-ud29{`=TZ4%kPsSLtBg3SK~gqBt1_n< zw;{sCujPLLrB5C~27)-XC&xfsd_4YF!q-JEP4AEg5`s=WJO~L-buT)}-e^C&^Nn9* zH$=reU?r2i`O(_XNeM#Q>rGvtR?%w@LLbYPv`PuaFe>iI;c<@tBTzwsC}QYZw`E3P z5RkLWapGME(di-!Aujo!>OP&!QZ3o_76}0+fxQ(oGRUDcEA!q4@cb9>qxl;E=k3Wg z2y+;f9-V8CVVHEt20g~092(6`#w5a9LThEbIgWt+gW4tN-Kk}H*p>jFv@Fdo_00~P zgxa>6{C`JJcDUnoi1>ohXxO+63I?nPU?g4ocnWVRr6QSc)BQp@3}Ur%j>*oR5>bSU zO&ZC-pBk3Fl+Y(U@hYxJ79Hux7mVVfQL%q^%LgLa#EoD{FrhxMtRq8Hoa!T9ram;( z5$UFtsP;%oZBAJbK*O2(U59i}LN1MST049TO=rBK4~RLTF3x5VT;#)0^JRH==hIbk zoCb-xE-p5BuwfotRh*zX(H_)PwKinsMUfrM_()xmD}8aU^u=YR?}y$|0~~C0{dZMt zz=%d#ML<|yC9`^(Yfpd*jOD3?6wXE#m_mUC+}^;ZOfljgkaUd0fx_FMAb zW)EMAFd@-nXtZ(%E(tgbCq{K+jr9Z_HI7M~9xGuSthtUG^)>h>mxYXI`@J_u8s~v} zWM)HqPZ^RRIsU_3zL9v!5vv$L`*NINr-A9AfmCrHI5~(Ya;q4rs{E7iZrO^U7{<(C z6EQj@>RBZ&HWD)eb<3~DOu1yG##Yn%>4RdDO44u*i8O7r=Ab63JaL|=jp(DQJa^F0 zr`$y+L0|V`nKmR|5U?5P$rRcs0|v>9DS0uF_Y$Urv;|O9f<@t(k|Mdxk}?8}Q{A*d z68Oh4D>cZHUjk^5b{+r|ugBF9f$|L)P{AOog(Ubjf%mAXm9(`V&O=3E(xRM?Up1Y zmC<-5Gol;Q$I*C++Q57%#MRT4Q!t6@=zJ~|zjV49vLFz9e51SHAjQ81#Q=a&i*6$O zKZe*io*dC*#Cs6%YNzT-v#%g}ZZ2Il7b|Qd@ty=GZct+ZvSA#S5OUw}||V;gs{c!Vkb5){vrW00az;J4kyXfHpVGOs&L zSoyD%`7F9rd6})I%-E@%nHk9lwx5h#pe}Bj1;^N_HJxoPuux_ptm2nQ z2;06`j|_FC;~S2pIEv<7e6C$Zd`7zB%o$})w%U*u_};0*aO2F~67a+rhk#>AfEIQ# zORMjo{T1(!`(Mh6{xS17Me}5cW4)Mt%y;@lb|(M_)QnET^zaAJM?E_N7)tknx{z)= zw(Ujqh3Hr~t8%lja1wZ^4WX+c*DoSdk>9h_^v=^0p0m4{fO6vP$BGV*k+LEcDsPUU z7*`cJCdDvUh;tqjo7T2PAEu~3K?P}1K;OB1CGwLGcC^DoZ?r3SvY)={x~`_WpX+Sw z_p&yPr}Tk?v<1|vzhaV$Su5V>?;?RDZ*CuNTfkdPyv*=|GrR2h+Dj79pUeKJusE!o z-gjNWdYybg!PL} z-1zA2eL3LUBpV;__L@P;JOl(Xj?;*ib_HkH5gS6e7{_h*R$p22EPj1xZD(T?V7G8+ zCAwoFI||44&`#hLQQ;sKYv{`deww>IO2=5R5tuAL^b0xh8>N|G2`6II$zmcQQVgM} z9lO8?#oaDX%jK_jSow1*UF%9WH8&8(Icb*N@2?Mm@d$#EQ%>FIaTuNSl$c+X-zKg3 z$uu2}JUa@Q0|KIgtj9=h8iHbI1Ff;Rl#E^YWv9?mw*z5xhQcO2dpx!g=+AAo*@L-s zN~8=?M9)+w3L7-w4UDHjxrD}~E>G8C@n>{5R;LD?+o-U7?`utFcT}~05xq|xrLHhs zxLopa{*NuxIT8>B6Z7?BWzPVe?v1Aw;zob*QxXe;YUXga%`>=%M?d90b~#Fx;$GbQ4NvqcqxJ|AI|w zFS9jZC?UE=8AGj(JyRqA*I-6+3I{0?M)vQ}u z?*g6pm=490#!yZliZbNwK+d*J<%HNKG!*-2yJT)@UQ9&@g5y(bOW zz>rU*jeH`%#L{G58~pkjDkk2-S};IlZ;-v`aO{~$+o^%y@Gm#H+5K#yT?W=!1>8zO z27=l>G%t@&?6!HYJ+aih+kukR`2W_tAj!%oH$84L*LmRHb}c`mXZd8i&L%IT$)gz z$0=yflQl10n$_vc*V2qsgnGadsHIS|dH)t>SI{PAP1Y!Yb2SruD3G;|yF7ZWEdV*l zgV!hFfw7)GXAVNtV%s?$V_fdeE1@8X#-@pFOz$IW-Zt_a2?Cf@$b(N<;KO#svpbSc1j&FlZtGl?;dV5mxGLkvGhu^VI(%hiy<0%Q*S!@gPVh-Y~jaJk(Y7dm8z5U(5>IZ5WlRkBj_bCth~Ss2Q);A2T+TK1DEuh=*bB!FM-!%f2{ z!s?=$#VJ7w8AKtr6r!+w1BNM}WkKWHZb9_N8GR$7NtX@IeHu;{vd=4_E1}z+lta}0 z!chMrqqTP7WiMb62;>IqK`x%)Ybo1@Ft7+qp^;s8rzhlBBNwRCsfx2ebyj{9_ef#v zVjhlsFzk6SmCM{XaZR}sgH2B#GXi&5YmzEez|&mDv5J#9)`cLM)Vr7*NK2yTW+QqE zYkt#utP~%tbkGYa&W0dI z;_sE%iC`_0Zik};-^~z@nA5R#MWiSS!!_05Jo4baUZ-_fiO!ZPB1DUhM99ouIHIzF zn|kvBnR~`cn1wB7Xt@XUpaioP%@S;ua0W^sT~V; zF4^x%xz&COP%P>dbz}_rU9r=I!yJS@zMO+#mx@z-DUY{`m#4}=h$+Od<@cXIZ23RS z&jBm`rGg(rKl~R8K5I7x@44c&7meQh{7PDKZ zdyodn>DM>^G5u?fgDA>H3Ge*3-H$E6^e5D%E5ljSUZAB=UNOW>3Jx!uR`MD-6JQuM z*%QM&47-@6k_=X&~05>6UxfU`4 zLCvO^OR3bX3elIA?F0h%rDgczD;Pm7S5>^wgp@6a-<2(H4S|weWad49v*=P5Z64(0 zE!Gj_W@|-v!+Pk4kX)GqtHX5hs5x(>E11}h8wngC*{lE%HHxu!9x?rgyTvl-QP}`i z#AgX~1H$g|GUOXZCsJV^aQm5WX4}Sw%wm80_6sS$w%46NJ!nYxP(wHR8pn|HbD$b+5VYN=tI9>?n>yh<96gCDS9sH=- zN=XPY$=5%n_ew4tlGcGUq*Ko$SnyP6+qQ8400s9) zgIg5gc=2TZ0+u5p*v98a1Lw6*HIYJhn7;GebRXs+GTZ9lDw2Jor&&5>j?{pOT`R; zI+slWTw+gu28TS^#BwlmNK;fO{d>lLhNUW(xF#dX@S|GS&2v^b%#gNw?LXNs!2!-m zwUPM~;5tiO(wI!s&l1gx%XY8JZm3lsdimTBy%)f7TJ-q^+(!ixWxNr!T`+rP$Pzl~a^a<(t?3!Ri$3A7B72NT$y;-=ID?31WkwQ|<&& zlw#aKbH$JGlwLGjr$p#Aj#$LRO-B-wXh2sicvRNdW^~5E7=Ux6W6%z;i$`09l^}s- zqL5(WKQzGkpjyqC<%#KlXNX{UjxkT^b)mjAW`}|Sud&jrGt}so64gB__W~a}8X=U_ zPy$sAsU4DD&G`(7MByNkm%#{;Sjh{rHJKsXlZ0*xhO;x!(pViuR@P1iNF5J3!^Mc_ z43r2YfC$;qP}I}tW-?MU02!gT5gn25pZ5S1X*J_GP4%X4uZ+ESxP$_)W#E-70Oj15P%uZ(1T6@ zMFEJ5Ryb>J3?gi@acUBElRTA1%GY#9{)jR~adA)})qKQqi6mRvtrGQt4lp_j%kKSA3u zB$Q0OzmRS=h!-~Gz|JU#bxLbPY2tBe=5oqKvwoS>1s18x;btn!a#wiuvJAiR!VdI9 zhjA{)44xNs`I@Yzo%GEvl+N*m%L+5_9`8#-=Lv7{I;-?L+j-rXzL1=Q8^}fSBo#kI z4@HT7h#ljE%KI?#faBbKhVZ9~vJf)A@J-X!%2OgDf~%Y^Ucko=t(}O5{{zXwlrI3J zo>_2&@cZeohH6CSPF*}!J|x4HBQ%qP@@N+&SI8L1fEt zaJUs{I5?gFEaBy-N38>iF!kq1hZ^Wj^H9;tnM6C8MN<|ac$~TL(u7zMo+*+nOD8av zV~c;~(y|NgbINds%5jUF4Z-a!OK}lHkl#@%Z0HgP(xa^zw{S|kmuegAzm|LdF4HLO z%3KeuEA4a3VTrB0p}q$zN4m3G4w&X>(_`k7+kg4~IEF75m!YleoP@fv1X6SokPvm& znd?)zh#a=Ven7hz6WKTfPT{CaO3Y$1D!`z3A9gmjvpL-q`TR{DG-BE|=p3?;*c%Y* zD4!U1mEe9oSojO10@*}?yoR2RvdyR|j&q`L0LziRaF@d3e9&EmaNeo|YaOu^*3zwp$o{f~5 zOzC%1obE3bpyNC8%X=g4+L3n3mOJ{5KXMobJ4>SiFLM z3GcFzVc-^*f#R#3;Zkmtt8?4~5bGw&ysvKsc4?j8I2k-!3u)8R0@_DVA>?}sDs{h5 z8`3B<4!Z(;y@R(n3sDhiTk+_V)J1OUiOe7^TuMF9DX5r`yqG=OEkuJgtxs}FAReS% zhNGM5pdw<4D_{d03(=XN#Lyc>!l$+URU}fEJY+z;j`9?TziWQ;d{J0Y8I2EP5pGXJ zVe>>%`qFbyZyslga=4AkaQg?rX@irqRjYfJH18w&t8O8o*9Fc0O(;0q$?n8|-<9iF&N zx@U~6BB&^i^xjGqt^ZL<7IeVoE%$wvdj`s7_d6Yh?)_9ZUD+A|IU{HF?idYx4H}Sx zLkQ9*6B{LP9AT%ElUzsYiD9yj{=l>362Do1t%ESs(Q1{=vj)U)IBT)d&Rd}v5Kalx z8+15nNCS6-{RsQ47@(voWw}noawKzs@eQ2USeXOG;*nWot>XZ-Oc|V#rSkgDx+^C|uV^5l?j`*VJc&?{o1Yy({pBG_1i(m>< z1Hz_k)aWkg3J^03E(%)#k7%5xYJ~qF7}|so8JgcCLth1ndtoT>d}Lpa`HeE;x+Posh4u(; zUPT87F^A&>8AVP~5dD-;R5n9uMBw4p8sqvSsEPT*S3jg317D}C3Piq#T~xgwlnw;Y zdU9HX9E=I5V6qdAmbc04#V>sEAbawtmtQMkaTTD~)hF~@|9V4Bl zPTT$@AXEG*M8ijxRQ9cAuuh9yY-UtBsLsNt)o5wNb~69` zRmqXC8p)wfq9QYmyek9(1#w~>l2$9XosyzPae5S0OBCt;>s%fTYze(~HBqJw{*0C) z9@U^V(4dbJkBwShUPLRUWZLUsp|Ckifj`?N=bu1G3f}DxGG*_cTxlM(K{H@%O396* zDG=FA$5DvRPo(prLG{Dc35RQDAfL$L3lpOV5P zMtIinwi(4o9{_J#-V3K;pfn3`fx-*ghN)p1kS(QtO*PUCtfF{=ISoslN1%jLThzbi zN>;>;F%UHv0?CsU(pX7&*^YIB`f-P}@y;V;0>rwwSmN!U-JAREMlJfbHWS|C8lPD<|v^%tR{qFC#$!=># zH}X>=P}U3^wR_@vsXz<&#lbs{FfB53K!Af$OAc4=k-vDw76jBfEoOpLF`mpqdN0qqMcE^32$}Si@jCIuU zy&=0}{DR+SH#D0ap;{Z&`SBs%S(rI)H4!MCW!yNS-qijl?=SwjY(7T@kW@dO3BvwN znCg1Nj9qxNV|x#Cw4s&$R+y8rhDPG6<%EFTM()rcl5+`YaHlnTeh(d%vivVxW;oQk zVD_PB13$`TM<^H{-DAVyR1AJ}oBz)GBz+Uerq>vz2Ti{L=UO&TJ zGQ``sdnSy;E|d{h(?eRG>zY{nEhurc&=b(%4&Y9E$fF zCA=kTM({?!3wID$1Td5ZS1Z~s?xjwMDs6kV9wJ|HC;zav&RT_RFlQ{XVz%}-L`Smt zqNG>TLnYu70%lac9%?y%9H3EfJb!?`P%vAnO6T;CKy=}AfGnJZA0~P(02qx#6q7C; zgl&Xw1`XebEex#2@ZhvI2~#V-7^6=Kg-CiIAkoET^hV!J0$oa*Aw@*>NJcaKO)go4 zUtcrNGUHzo{}Mozu)_9I)mY7X91y~!RiMyG5p#e8@6EUlqC}|djDbXINnGVoyDLCv zyej|58q{M%ZbS*ttk_>rDnrD@Vj1)b07hiQL&(2Eh6lhVF?>&jm?0spCPA8)Z`=+B zmM{sm_aY045nU}Gl470!E~BtOMG`06lRV+xhkByke$hAX&4|xpi4RcJQ^_FBT<`iXBE-k-%kYav-9P^8S5{p8yRaoqy2t8t7ZPw9a4})R^o80yVzvMS#=* z-iGiO4#0CM57%2r=YxG0B7+rFxXl0(hu{U0-&q8tA3?;{n%MOk`x=TuEc1I8Z`-k? z7Xft^;<3&!SV${Q7Y+zXIkNIG5ug86%TQ4n`=qGXFq_l5Tv}S1+@=L;F1*8@3>yMq z4Pfd~+*hQ^_=Rk0&6duGL-Kz{5Su{6BcQsL96iAU0ENH++7^3AES*Fgw zX#>fr?4dX3x}3nS!C>K2sH(|>YGTyucQBM4e%SGnaQzjKj`rch%9L?*JKXq?lPUO= z&2`Cp@G{gv&q>Dj0X`mHwt{z>8dDiwQ z3eNGk?Al;quo`qC$cAMwi1U&gmnM%Sy~yn!ji;0IIpjoZyoodv$%oZikGy=_Xuvd7 ztcK_^+N6TkMC-OvU{vc%E`~8~G<3PcA>s7%^g~oUD7IG7@qy3)9*|FdD}{f>kGohJ zj?Pe^SbExI8%hjZEeppJ>!twgFcaXYbDdLB69?oh9wBmHA@~N}y^O0# zV4rS=t3E&*ggTcd>i~h*AhJnU1ds8`Zb!=OuU#AgA(nn9LPOd>kQ|TNmTC zUthnLyDr(S*dD+G)0L&k9=`NX1r;L}egcbW~jIvuMp0$o*>)ggvYU~BDd^ZrwUFk74iU*ul#=c1;~*q=Eq{IQ;Y*SX$z4po*X$*wuRbU>OSaJH#Wy7h zrB@87onb!H;l|O9K%7_y<=wC!dMZ|{6zlw4UfJ`XRx1U5^H<5ld z^{}d}FFags6mFHwUW?NaX4huJta_x}_&Wq?EG(zSA3<*B4LceO`Dfzzwm$=mCfSk= zG&F}PfC)U%v;*eFKzL#Am>?9^w=r0zcf{i@v!2RGVafpc)4h9%w4bX}O z3gnnS0v~~S$7MukqNR%%t*aFqQ`gb}H%HWE5`v|#df6YVN7r{^ViLoNti((L3{b>< zx`GeFhzhAOLEOR#uDQ4myPymaM2LU|&m)|XBA3Uo^CDlxLu5>sWMjAml?QfD!|l6e ztFxS$6RS?e;Oe;eAxy*Sv6uCfrZ{}KT={@K1b(bx8?W|Kwtj(Z<)Hxb|u#hNc{J6{>7|*L>yhky^OaBchNQAc2{~i7tTuuYb z&9%^Fpwt2kNrB!b*td8TqH%c_n;<6p$Y>=$mIKx!-f0>e@^=)b%CcnY;r<50{aeeq z|6Z%q4&2ArB4sWN{@1XZ;we6_#Wb*|oPB;2NRKV9FJe8Gl+>X8Q@9s*$vSS*+cTD8 z`5*tx-85Km;1WfRPj0zRO>4VLLYdJ(Ah)H!3YKJZ^K=GnwF?DJs^U{e2W1ZKNh(13J0L!Jn^M{PJ{r|rE z0*dpUG}JF?H{s%wpt@fRMb51Ftm1HUK)ZqaxS!jhX36HUw^_p)BADy`+AR*-L9blo6MPnrB ztP;tkDJ8D}3vn}?hZjN&{3Ud;ZJOT0C_vE54=8en(Zb!rmdd?d+hp+1~_k;sY)4px= zo^8SrX|gvBKd`jFH_t`(1j5Z~^AONo0DK$b%!sP+vXz>v(MAXT0XkvB{J5V1QOP+B&)Laz@yo@OMvQOvgJ*L>z8>94V>}r8+V@2PYS)I)ym7 zDQH-d9snkQ8Ir~jS+*yQm{jpIEKT;%lX&BPgKP-l$VqBbTS8miYISK=O7plxHG#G@8G`LiqR7RD!eJbnYT?LH36u}Zvaf~hQXf|ct zrKcbjE@6g{w418?hI*^V-nZw>B_Pm3R0`o`ONj3yWn&*#54U5;3AAzjm9m+EP@OKm z{}HoRd}^4gLQ;H>cAQ)Vp^$C$F>RYzzm4k2(?A6y!V@d*OMf;BPrUGLboQ)xFgED; zBR$Fi%U&rSnK#E{o9y|LYxMA#mV!ncSUfZT88(x`CZNf3vy*_mRSOZ1!f zJ8iy9v9fFGFjGSqm)#Vplnr*@h3TD>`(EV6JNK)pqLWO2{y{Iztw*6Z#&+{1N9P-! zClNWird*1O<7(KfCsz>JI1xq@mp>v5$k!J#0eo1u(P#SSE_X>bEosI`-!8&OUXrKc zo(TlP(=pn{jyRZoh3D9@0STV+KBmTrpOJDiR3rp#HaAKaexraQZTGDO^WfAnSh#_) zYRkmY0+AstAkbgrN}tmL;bmXa(F2uAqfoaKevLRm;$Y$PrX+S*yjnJxYvC-E7y6Tg zmQ9S08EDgBfL+C16nCU`3#ek2S6IMSP+-i%cDaibhB^#sZsPG~6uk4bM%smqs1g?K zoQ3+$f`sv65M#&QQYKx;F&oTKmHL{F77p_=5HG{NBHo1`SKwUGp#1gg-G1h=(Ll#xVHb@_ zD_O$xKo9=MAok^tFecWhx0BmLsAUDsKk(T!ynET>b}4Uj(<(RfyAXs2{X|SIJgJLF zW!eUnFTN*L7t0mYI{iiYoiM@}C*&>nfqoI)2Q-zp5V@lJS@6sY{ar${wuKdh);;7T zI!|m!=Mmfy@XGBx*t#&yIq_j>LIIgXgwldjP4T6^@Pn~K`+{V7`(9*`zA##|(9_7s zJsA5MZy}z|?Lw62gcBG_$!pU^a6`=A?HAKlxXzFQfl!bS)3FjLlhJW>tk}?w#pQap z-WfXJ3E@*gxT26Viqh_roXTKrKvmH&ok?;J{#J9_XtX!2RTT*kpLNcE=SQSFH<#@7izfjG7jszUg+tB7I_I1dN0G> z09S_{Wm}S$w{)f@#lL$G5Q@A!sJhb`?7)?;a~B0o1j__Y67FcZky%7ua+;+E3lI

nP+vP2QN6RTNZf3`eJ=G3b*vTJ1ngK@o>f=AcY_oySCYr+-3!`{V2v zLq;`v#U_v^hRzoq+WDUL3Q?wsU@WHRuDx*PR_rVTm^8|hnR3V^qEkE_MMjxis+}{` z;o6chC+l$OnnTR|B~v2bPu6$ou!qC6Ep=G)^`O%72kmNK8_)Zv*@{&7DJP(pS)|KF zVZ55kM(nAS8~}7oY8HJ1{a#C_=Q=#@O4luQ(EHNCPlw@xnn4hj)f zx&1+DL0QHCEr?FrVC||qr6;Hxw%o1eu1%ar7-bfk&-KYBqLQ946NXb+jF%^}0Ok(! z-$5Q}v|*PmnxNvCpY(j5kl?W_TgWo-ZuIf7s*i^qzYoE<3lif%O6_aLZ%Z|9+4!CR zHH!O?Bk~s2Ze`>5G8no>AIl)Jme8V)?;-SF#_tw&UiVBt1WCp%^4nS@mkU)i&7nre z!dwcmFL9a%fFP&?0=!Fah;iO16dh*hH!!*rE<%P69s0GTFiY zr(cyC<57K=l70nqP)lO-5KXRyJ&QC`?#15K4H4f07h8u1+aeFP*)Fz=6kB`>FlLxf z#GplCrM``xd^K)9p6M4V$}Lf;h@cqbLE-bD_#3BxXqv&oKTUtJA$NCU`58^^67VFp z>sULct=D&9!+$aNpPAbno#dF*P$jn`@)aIWrmOd}GvCuHXmCBQmgQ(Y!F7(AN;*2z z%m(Aoh|{SNXMwr!e9nEc9pBRJ9>1)3>O0$e-wW8U_3juyX`MTh4CYP>+MlT*wGIYS zJw~Y(Uik2ClxCe=``)lS(|5~1hwD1?RJh8z&K+iPfoPs_wOxJn$wo=!5k#jMjf4LFCvaa);p?YVw ziEzGQ!Lf|n3ay_XlHh*a!tDiDX|d823p^y8O%jAD)x%43Ngk(ZHj&5UJSYxyQEV{M z3?al`$TWz9%Ht-!adc80<5)tT^%9IrZ&FyRFV(IOdF0W*;f3~Q5NvRl&vie#El5!n zUR-pm;F3z6hj$~Q4aTqBEQrWB^~gWG5@9qtF0rHz&}-y9vr!ta(!)j(sW3PIP{{ny z<&j1kJ!Lzz0fZ%iT#kfG?#F(K+!#s*3w=i1AkpqT><*+d2QjQ7q?Gd$g-ob&OsR4d zV_X0)*Gz(bJ~M46`gtakw*!s(n{*%+Cpk~_6 z>1JVV2o*2}5Z%`kSEDcVT&$w$UJX_!Uuu=UjinE)#n&w+a5I7bLxG)R9fJ2f%m#qh z>CJ7=%&9v%LV9+(Tf14{96&V((7rXiI5 zl#~s83p+Ia?gJ_5OX7(-Vq$t#;a+K0-WRp=j(7UQ5A?VCeNPql$@V6eyh}uj3ic-C zi36CuKZ(PnNit)xequ)q|LV5uIqj`pydNGZtCc5C1qk2Vq0khb!;h2}lrV)jeA|9< zR$g4dtqzcX&3x@eW`0)FJD`W`6WT;zCmM%#eS$-WN>S4Jt^;>lo%J{2(a(M(JThY- zd2}!fIl>g8!o=uLGdg0TVT0@D@mk)b#joD(eB(A!4$+Y=WQdba@tn@9@HuYh0xeV@ zR}}>cGpJV}k$b2gZBgbOUUPAuR7FyyR74Z(0qbPGwm z<(ncmt$e=#?}U=UN;ufg=;YM<14e1o(;|CgV8dw`KLeo+M#k>=lk?pjFAbX$T0$=HRiCr`+Avq2{^p9tb@?f{Fp-&6Vt zB8rEK5ecFqo-C~+u@4!+T}a|dGIqi9ny8%0-uB zbdR{cNuI(>pY%e#Bc2aMp+Sp3kQQ=ul{E4Q(36#G2e@bLXowKoUvG2`ic1#;YcNGlz!qWg$o~SD? z(p*2@!fzEzN_~1iF&yub9^Q>IpHD096|(fHHPH=nSD?5YL3PL#P7-K;oYM_&yt($VUEc{lU#7>?&4A^ z#0DGpHmCwTmdD~%P+KuBlD72`nGMl={x*^1vU0b)<+wwT-@7HRfUK^}w*C*vdzZ7% z-ILca40)d^k;h7!8LMpCw4+tYhqA~tA_HWBwr91Ea=TO-@XyEuNIA?F*-aN zUm9mA>ajO<3>Bz8d^4wX#nQ;OUkS!^eAt{(RFdhCs6&SZxYhyaOCPF+1wl~|y?r^v z)QZQWCVj+7rt{$))z}CHDRR!oQA@WrMr??|ic^F_Tmi|6^H!9I@nVd71ti0o#L@mb z4pM*ls^%~YHwiA`1JS3aJ6e!rC;QR~$f?CEB$K$e8CD8+N%;yZff@~VA&2S^1TAD` zJ|;1A@M`hDFYnf1f8jz%Y~cj_ASR^u5(5LSF$iB{G+J3~=2HR}!7p|n2=#rCP#%}z z*>vRM)C0Ie@O1i?#<1hywq?@AtZSUC;;HE-$l5|kR=p)ois^J8E zJ5#hOF3v?42{A(oIzb}67#E$qOOzCn)asN9VNYO){57w1zPeY14KyW)NU!G(LD=}} zxv#UXO1wAgMnJWJ`8<$=U+#~Y2_0P->(zP<$o!q!qDtH&>j+uoKq%jO5H->|mJgqP zKZ_zXd$x#By$!j!=mW?NlQR?$VBH69q5Dg|3?&IMyatxuYXbibz{{uW6of9BaSInk z77yTC>lD1P&alNWEvqVqaeO{bn=an|sVeKTzqxORBR{U6cJYRZmtzOyJb^nz^R1tQ zQoo+X$_%ETNX4Ir#%7(m!QooWAS*mih+qYnZ81P zA9+5iLS`!IJk$aW_Wx6H9hg!s zrQOXawiX*)mL(#lPEjh0_s~5;gE)H8Hd#cW#j;l3h{78l&K%;xt-Iesyj)i8UQ~VO z$gQJ`R?$Fj&G_&996U3pZw)bW>puJi38AfizV)IIF8S;dT*A~l2e$^~Il?@v6g3nS zjPdiGdrshZ7h2T;+Ay?K6=#VWK)s5`cE70{Ar1f?46YoU9q7U9L2%SNs67)xOla*} zfZAS6LTcmG3E?AP9Bt?e5F>RS8ssWA;%nzPoudIoh=Zh4s_~_{fzX&<;b9f$4=Mc! zlywAzV`4v2!QlkTO0?r$uJ}(CFJPEynaPmd)X26fT(W_46nc$Vs+&}zbxmEQg*%pX zfkx0RA6^%_mzUA~GtylTy2X%I59qkIUQ6&~m;{b4cCzKDtmKe*hFfo~KlcXR6R{ z&7>Tmol2ozaL8Ipt`o<#A~dxt!(Q}BMNdh{e*@_At-$LFU_9T;^uXn)#loX}D)n^s z0uRpx4_E$JtB0%CI@Sr=QT-;FUlv|@J(CrjELU(1AIk8LO6mI|jCw+cSotcvuiEq^ zCV{vZSi%3vR$|ohbksz>prlh*=lhv#I!PdZCxnUZg?sjZk^@)%*8s>TfENekG84)g zF1sU<2`?YVrdxRfe(Kk?hVpj-G(Qh`ieYKAn;u8m`B&NUir5fyK=|JNRXs?<7EygE zu4gslP&hDH`C~~PBMjw-DdjjRZ{-hQnpSKaacxjs<4bWps~IN=YpDdcvy(WL9i3kf zmdSX&>KYKw6^Q(2KxP5w{w-~}BaTMPv1TwYrh+CMIJ5FUMPu)w`4%&oc?`+lrsy4s z%+<_%!JadpjAVzvK%RTnLt0}30P@%3hpn-{+ZqGFo!v1TYjnGGL8Msu%@ETen4X0b zU%u&I!9-DakVx+)>Wu-mFCOf9K4sf)@kKVL!k3_!J#gz(B$q0D%&uhClFU{3aYSM~ zb9h7|tZ5<=BM7|BB{QYmAensuW}(FQ1t=8y=BOy(eugS!;+cbk?`a)w1}&w*^!>H3 zJM!ZWBY`fC4A9B(ueH4?pbCUhh|~AD4(vWhXDlD5R>0HQEhDD%x27cr?u5FD(VA%V zfW&wZqC|f?BoS0fCx7ciQD(n^{Ifae1(NIwP=@*EaC3D2eG2mnVCgE>6KZpG{v<{{ z!YG<25cxpieka6BO69{xG&Q!79na4It4pTU!OnYWy0;ImGtA%Pf>EXS?x?c4&w@{| zz%~q6VD@VEQp1OSMMCQh9UsF4=>`c#=Q92#ijpadw_=G|ihE+EV{_KFfZt4u4GSu4)jz?^mJP3P)6b=%FL*Z0h&x(i-(z7`g#4diG5g1y(AfX>ko zo)PWP6Cl12hIw%A;6SpiffB&awnGFWeSsDreFkZ3UOU6G?tc?MYx4_fhvB}Oxpx2D zwbu7-pFOsF0$5iv8Nx6?!f3ecz(Z@9vYmq%1sJUH80U?o$PbDbJ!EEo?(rqnMf;KCe;ujJ3EvKOwog6U5<<)D7FDBGg4wNy)w@eY$Ag1`A@GjYm zDXz#8tNF~Lr*Ol3RX-Yux?cCA{}bK1FTgndfw^L&6`nu<^@P`&xE|p$BzqGidJ`r3 z|Frim@KsgU{_on4V2B}!8WaU}p zOM9%xb81^s(E7K&+T*p++7^TY$Ac9sww!7$ZLLij+xn_fi|qUT&AHazJDct6+0Qd52jshPG-;?H|=cnK?%+pqmw$c&FfDoy%_FvtT zezVG@Ud{6{c(J=>(~n+dYAo~2<+J2cVs1*Y$d%g~epwa#G12)%`<0}gohrb0ucYT*!Y0|y3GK=G zr`d^MRvb36|AtqR*`>hvfQ}DTu;irYNX&sXp{4qGY(Cx#=T($J;yXF=lw;2w`Znrl zIZ)<5`=zD%Tzl{1xQ@3icMR+ZI3J;@53y#RY`Lq~cLPgw+o`0`+(~uTsSsCC2o^cD zvrC=mK!NuF!kka~s(G*|k!mn%#0=D*e%~KkJpC3q<4oM1-iAd;^{QK2_eAMhcbOJp z!tfo^<7!xstBARRNS`$9nHuuwB9;{`Bt4?!Qxm|V6Jv8zQ+)&eJ|>w zbz7Rw3ZrMUmU6cATs;-LN!6U0)Z6UL7%gBvy=fk$qh`vK;yhBcFjg}IsLo~Zqk1B# z>M{O|rm-Un>`dlm4q2$fd_N#7tmdZAlMOiaB1UrDVfhNhZH*uP+|)NU)iRyBorE8mcUqXR7N{0-wqc}VT;O>_<; zvU{2BY-bjC$N--*bKYmQHKJ;f?N99*rlsm{y47jCg+YA>3zilx%V*&r-wPLA*2=p| zqD9sd%kn?sxzuir+ayfqOFa12`G^s#_=Y*A28uf`@dY!}bS=zx+w9xQ()dj|JiEgr z+L@y)@8O{zOPo=#*C<$BN|;L|jOz(=6BeJ}`9tPK$ez>Lh8ydYWwvb3H)75(9L>nN zlj2+ccH|r~#<)TC)y_Q=8)X(H2m0aE$oYFByERGX3{8*;Zl=^D)xbB})?YoM*Q>B} zSh`qS_ju|y$f>j~{8KsQ^zra*?=v30UY2a*<n$)DfF)$; zw5wx&RaMmoT`zvvy31_adcBOzzgH0Bw}l#>u(l+IcBq6X#7wEHihL&c+?H(`kqyFz)0;*__SAOvLTou!wS*=I3Hd zGSHGm`9h>_$;$ngiR?_s+WPBOmq(Dlb$?&;hWJ4qPy~Qs4e;`jr7`o=Js)j=7^DxX z+Vo{|9DGAHHPwDhO9zb7e5IH<>nTbFL$eE_t-q0;?{Mjf&7EvGe0OvA`CiVN_YU^L zx{;t(qxpmR;F(XXlH9D4lyj5A?<>w##xL`)W&04bxX(;?GAdj*!EAgg-lPJ;9r?zTm7Sn+0uV-A7jNAN7(ikbIa zYud|L^AWt9uKz<)b~y~u)_0xHlA1~Cs4PQA-lqJNp28~C zsodA|bi~Vxr1}hk8(NbDNhJ>Qa`WUXk$k5~{JRl`ILQaod+n7u-EH-I^ivK40?%Zj zl+q=}!)s8kwHS}-G%Tf853>z=dA zIz}r>+V}-bz`UbUpFS~LE!Zg-76pS@Rs>)2b{Uw}r#ACcG%;aq-JWbdM1_RG?y)_& zUe=TAiH2R4v@Hi#F5cy5fSMz$i+9eX^~oLc5}>Xs8V-rs-J_jZk+r44C{ve{Jt%4f zu&=;rEgQqV!jtC-IiDH0ZwQ$bq0D;mtKXa1bL>+M78XX5|JZv zJsW0Nplh&m=>t#xb{IdlQUAD)5Y37HjYVQDui80ko{4GM!sl{KC?#aRxkFaCN^jdN z{P7GcyKenFxrIF|tF>>i>wbi?MS?n)9B-3kC$H3-10!wCrI@KozhhOfjNr-?+Cu>w z4BdY%MYKd2v}&`PxKyZlCKxtyarQK8R~5~LK)NuRjvtq%0B#W( z1%#>Xu9Zx<)8dZt;({pWW3tp%8&s1i=3!a#9jBzuZI&#t7m=MwAN?P$@2;wzR&#<; zOq2WuyUa9Ibh`8wl(a$~-;)Fir^|&TS>6ElH8U;2Q8vNxxSud|hOiaSaH9sdZ;(YA z?a^tpSYncPlxX!xhpp!Z=TUpzGH~>jqsU#lq|hS22R{8fCSm&oF(x{LpI< zpV9PfQ#MWL@D%2G71PuTzx+k7IQm4B=Ft*olaFOKK|N~x8RS@t>9sr?U1Q$#xn`Yd zy`Pk_TMx8&e2u%CI^^Wfkjx~?+Je)Vs3ltNYBN1`k!;#!qb;v7H0sk#aD$q7DqXtU zFI+v3shQ$(W<%79&HQ1oT(|DFsnaT@+bzMYhM-1mj*bS+3f*L9nYY+~vD%?tSLH2P z=d?b%^>;aeJvsYX|0l6)d#2{8)CZTQ3tAi1jcRWS&h9P7i)6)pk>jvUuC%hwCb4Td z@mh$h$lf#)E(bZhe6hctO(nsAz#ayigKp2yukm`5Y^ZIv8AD(WT z?_S-uboWZ1YkQKo9*HJSjfW0f&+C)Mt0i#NWvZ514iuXu3O7getyIy6EUt9j;b&&D zpn&e$RYA{JtEGB*r&)>HYVwdTFa&F()|;9aiyfEO14y-FU?V8 zUIJ1onY%_4&b<&ZyGtxXa~6uQ$kH1RFM^pu$ypWJdn9pV{PUBQ&1z24ULG z#ehq@-E5pooE>r5n3?S}?6gipU`xV0H9mf4j&QP9{>8}=QL#57Qe*VcG?OiEH6tSb z*{$@+<2jLdaeSD1R3IOE#AClO5IoX%&DH^!~ELTif*)hjPJS`4iJ)e?f6-LF!=?QDbmXHPd#|Iv2-}zPPqJ<8?2DI%>Wct|z)!&&b+V>-u`?sVKeRNkv6A#-2gm!_ zfLpk_7UO8Y4^*1_P<7LPBUiRijI;k}AR~;5fW!*7^_SeHP+l3@`makv6!wti1Xu=$cmC{41oNuqc<)DiC(YyDz>dYr4mJvdAFQ;&lmOE_>oli!%+o@Udr2Vn1?&S4&z5naz%I^E7eQ zcUk!0o|bO5B?THMfhrLwr)vY{YwNF)T4(qy{%@t1iBJjAQ^d;;QyvM|7WR1BKlu_<^Hr zpuRiTqtOOAjUMvbAA}9|Vb+9_UR!Th_Pn++hfnv~+JBiXMHa7Zzxyy~A2NSvo`qvg zXEd@5TARoJ$eO9aC`A;Q)`jyVlPe$WD_z)YfA*&uMaB%JP2c*s zvF#gF*gWJHX3LH~2pJ?R!o*{uI-75S=COq$tUGx5cHEiId&w3U1vPB5i)KZpYf%=a zH4?}*Eo+n7nK8vpYNef5GY=LYgA>R#u+KwERnkmr8<#9Vx7O|TFrx&`MMfmc)%%fc zt$9Mdk~DKeV)s{kMhSny9qH^6CWiuxk2FCf4R`DP0%6BICZx4tr~3$8Mynl|gzXn9 zu*s%3xA~)oFsbWpIX@=#quElMl9A!3=KVyr)XGqUm`}}HpTwl}JtbEo-xNN9ij>FQ zluL*SY;L;(Sb}1>17KFRpJ!a$vOQNzldy@jr7gK>Bqvv4mn5;*t|@GRHB`-Jl!uWs z$h#ux{288XKk)!1R9|Z3s7U9+VO+#mhJn-Zdah+Di7xgrv;c1tW!j9ci zqZ@>nQ#U&5IZ4 zbflRF4$SAKXek+Vy#tN#egNMR@LK>)=S;!ZM(qk8k((5`-J{NJI>YN|3Rh`yJ+puD z`<<@8phdCo+jN_u;ll@Oo_##`^gU9o$;QA8q*S?uKL*uB zdH1!7zM|=f&U4A6d$O)dxq62wd-nypy1uDEhSQ4wdziHsJ~*gCv>Z4Os?p3NyNf+w z3}Wf~q+Q!tV(Iz`|90lc=j+!!(76Adwlfi8uA`eoV1j%oa`7vv1hxS1FeSQ}PdhLs z-{h#p=%49DXA><6FKjx&V^OfAD2;E|g&x7k6{aNTuROc0e=@^1?mdt>TMpRV$i~jr zt+vi~wRBS0uPLtUL!`HopyV_y8_Jf>Xv=|f3cvI+L^PQ9OoM4xI;1<&1SW6Nr8hn@ zxp|HHz&q&aJ`#HLO_n~INzbrd+V*|HRwavlY%=9ws@a<*`N`HQ*@%xxW)igZvw|u! z)}1htR-PrCrgZu$Mm8zEbV||IU#T_X_frl~O149gk`Qi&4Bds@{W|B7d3T@AdQKZ?_Ni|Y6|UY4);ZDi zM&|YOdM$79?l1G&y*^G~?jbwggQlC*v6}8Yuw|2`Iy-aJSsqV`*xzR;za0mt;_)y} z?h$@^?mW}T^=w#-=P!tIoFhfmOz?>i0nOn5uTV#xW#W?;#Ru-lsT8N3Im?x*`ADj@C6Rb)m!1vSt!D#rs;Ixu_H4k=kH{o# z(@r^;8Jl+2Y+JLhWmhw`__SipFx`aK?E6a#@91CS^qyVX)J7S$IupUeWkFew(0Ay702x_`t%4_vOZOwsz-s|DpA= zaNA}1tN%UTXD1mt&h@jlJs#%4*rMifMg+E-Y{|_DBF*9W`+Hm))7(!4fo;u0bw0Gs zUI)GFkG8#U$eIgRuP2A*b3zb>o6iw#)RH!LK7_s=|MMGjJKG6t6vZ2Jz4R-$*(8DP z|FnT%_nwkV8%oFKFNroCYkB9#``JLGaPSm^_C_x&943dWDK(V?b-QLn6R{_gyM z)Ab6Y<85o3I|z?Ge@XC(6Z%8sf{Es_W`+ zxUrv8-dI^Rf5FWQYcBl4Txa&JODh)7t6fwwVx)71y`M9Fdg&#XPQL8&sTZ8G!dZU(%!$`dxbljz z7hU{m8C;Z>0r%V-hI+T%aO3T>d%(^Lt$qI2e#=wI)}Pq9AmG?ab({LHKk-Y+%TQCF z^(UUj<=Sv4mkpqnXlgufYo4(A>sgNz_6`@nC+l*$X@BmCmQN z!sJ;}(_I}S$(BFV>1$e-aLQtInsQe^1R{EKj@v`=loL)`Li4sLw7F6 zxl*k zbF|`j0*<#96Pm1b3om{l^ zJ({Nir?T1z9@xdEL*66dEnVbbjQ;v~%YjoD|ID-?-2s;Q!$?DFr~6coQPKKAT3D7E zT>Cw~jf}?DguIzfkyz|iHm!*AJW(DyW6OG(O898lK~O4!%aN6E)Gn>-1y)gZ0!Vcd znlP)=r9(8qBAlwGf#IO zv0`5`h4f-}Q<$eEOGKZcmp`-grIcdZa^R?>UdBo+m{YGI(aG6mS>CBOb8&ji*33T8Jdz-R6QPXyt)`7zoLTa8N!wWIZZ?CMvZ2@ z^Bx^XNE&gL9m~RE=a<<{`<-GI5psFJFQNyU$S3(gT~5YsD`RTI12dSG9XO%zOXl-A z;nfFWlGsmvdbCC*HpU@=x@yT$K+Bd$E4iHj=Et9G!#&beE6oKqO^=9;iWuCJ+4Br4 zeP%zm;T~y5W1U@p#=B5lJ_oAZ4@R&D($amMu+duAb_hHEgiV-DiZ+Q}u;hzA2g>d% zga^#-ltDT2ysZ>!l48zQOwhb7+)pvw%O^=VNQ8MdlWUZnEUfGDWX9u@q4ScV;e?Q4 z42BUVKa=6#j-=qcVocJpHQaCMXLD!CvOJ(_RCOTTUs(h;`*V3u*$^A;y|uOn&vx-7 z348~&tu>vILSHraELbVL<9BlDs^3;t8h63e^3v>7>C)x9rUx(WHZxqmsvT%rb?nJ& zxzDS+)TpL=oIRauPb2MVm^}@)rxWby7<oAI??i0G`|>Q!i`;=0nf4UMTJjJ9m2mE9>L5*HV=JvP%mTC&1sw0 zX7RrW{%*bo20|O}U78VAPiGzQz=n2S3>7 z%WBAsta|=TvRdlDWm5C(o#{{4gomi;Yr{jJU$gz;G5h0v;r@YMo#3>-HMwPbm={;4 zh|R;XWMESK%%*4xwZ3y1iQdz0IFTDQJS{aqncK>4rh{$R@jH)x@Zyx#=N{&5QhB;= zees<~<8NQt`j+vjxw^IS`4Tt%7ZUgLb0%?jaMb&)Z;|KpG>KdoF2SnsA!l9K{FM+2lf1=BE;yEihi9)|XoMnP&roi+Hbk>$_6iu|ACWg8S^~3UMyhG}S=k@Ko+M>Z~SCSP^Mq;Vsi;XSXL8XHD7)YZkE zk(IHd=2m*?d5t5{H7Q>g@%)x<2RjxTU4>MCRI(8%be zBsY0q;MP}HjvHE8;x@+1<1rI5G7YP%BI)UF#e#Aqt5W{(UKnerjn#;@Vj(Qz<&6t( zh}`JL8R_|2R)YaE7n^RYNfm_>f(b>+Gb?&0NhL{_#UKDd1Vz)HK z8snBJc{NffPohav$}Z@uiwlO<=S{j~>iA2ib4_r18tzp2DV%xbjWJT!m$)_6i>l)a z<~h?P+y$;PwBB{{oU-alDXqkXz?H8vuUt`UA{{-RiI+!dpSrrIQf8PlgbewozVaucu_LOwk=~iq*KRwgPj6AdKc}Do#JO41dWWHGUE-A zi9n~in4^n1ahYPHTTxykPiFkpl7>3`3idm{RyL_Rn341~hD}p_(gdtH)@M30#ATm{ zZzlZ(WZMucuUzJuvZUo(Pw6Ev-o`DD8=r$*Y{8z>_53hOE}K8Rvby1hp_MnfO^rnRbiBrCVojYKVHI5fF20E> ztZsB8&ai37e|mK-PJj4C)pHhc9yc^{ZXL{qUDr?@k7bW@X!7bO@b_fo*45&&7vT-m zku=Kf&zVO-FL3A8)Kx4T8|iU*(Y)&Uq(?=RuV+n}>N1>hy|{RH=(&}B)itCd8kHxC zbgJja;#PmSt8wEZ&J`*Z5?IL=lsC$4%*P8g&ZGRPoK#~Tkqk(N3J0gDR<@-M$`TAW z1vCYaO{LN=ky;LCfXB3but`F1(-=q5xW{^gN;3^p6!Xva>CQamcY#ZB=G81D^LP^- zXr+7QHB+Y|w?+d-sj)b@($&_^k3o%R#ShXW;f>217GVsP_(>G+YeDtklhZ)sjg1RS z%>Oi+q^4ZeJlY!<%~(woNJQWG6@ZB8fa8#(pMWj zVzDDJMq6yzgnV-vW+XBGdhl-@=Q56Zj(a#B;wW#JUm5oI7FaRTD3tGkwbSlSa7H8L5gMAXtlJbUH4PJ)3^VH!~H_+?j)nxWqjvbotapVzV7F$#wUzSFL z9lEtO)wK%;k2}j9#&8LmQaoy04AZ@!X_>?9$fol2656h*i;CT~;i z!rHne#w6v7lCeG0OR;}+1CBE|;GD?O!m)v4N7_+SGpE6;l@Sc2te>I`aaT<@rtaMg zy^N@)2~^ZAT7-)zaThh=_U6UhX(O*2Ic@yN>&DC8W+c75@eAoiH!Ox*TM%1sUO-2s z>4cZ_yqFqGQ>~Y~N8?Tzd6gX{lF)C5C7!ua&Hem2MkS-m8k+0{Ze>F?enSPZh$%|S zl`&SelPmQCmy}L~#ig;hW<5=fW@6Il;xs@@4IdnuaZ2hAyt#m3IF0<`!#&4oofK)( z%H~aPY#)Ji@rJr(G##4)eXE>l>Sp#ar>b&}m+Ar(VJq5Gy5lfbsFc6|WUcvBpRTu* zMofLt(Zs7Y&0*B1E|OuLRisfe<U{6hm9!Y~O@Zo8AW4yYi21{wwD3fr)?ZIY+y@?&brS7VlX@+)RRB?6iTLH}L8=+mplBl`53N#pl1;wAGt%!+*J zJc^Wv&b0DHW{81?yu}4G*QeGsvW~lvr9+phGb+`X!pzv*B`h4oa0hh@MWa!O$96D; zK0i4&#=!BqI=YJagI)E1*18+jzuC#<>3Po7y7Ee~@pD(5&?S3PjTkY)jqqFOBpbXs zKwCad+so%MF;w~*_~bdc`VAdjxzL6f7RB5=XTq$2b2&$?cg#o&-N(tO=NL0L;5;}l;H=}kjpIX(v&sWb4ac`RW^)h*=kLoGXZPZJfMZZ7fz9(*V$0%W{&`#)J57#BqvM2!4TEr#XS;xq*TC;qV%| zR^hsX|N2XZ5+g-0v7mTiLD=AwbACaTRCMMuL|YgvE0o$2Rb#;_1l}C8#v-ak#%alvvH#q`AY&mrow+!7uUg2?b$o zJ{SW2L-3n~^ArCuU^#3y)oTafF(mY8z{o868DL+3^-$ti!ulysb}l;K0GlH~a^7I` zYzBWF{GWXM%Qnw@!RP$?P-2*He&X>kSR>ef2oR5*mWS>PpY~c(udeDzahiljo(p_KYk|$ z`_rWTx!hEq^!lO1S>oy2bd9xX)lHQ6>xloI$Nx_8ZwXB-h=zU@fZH}mcfd`0tbw-Q z8;267ir2&fcaDdz0w0hCzYqM>Ecg@PBfxiAKGEQITOYf@U&})OI(SzW{2=&yS@2>S zUm^=$0-pEB!{sjp@1F&q4en;a^--HMv*7E%&&`5w1|OdVe+GOi_-Id`^`1WWf-lIR zccFO`yb=6$Y$92gq1S@8Hm$!Y;=XcjclP>L9Y%;hfq0gGY#Xd72+Iy8gI9xJf4Ch? zOSc2rWE|Rme)CY`5#;$8n~a9q!&z-oGCV>0@Y{zHcN4~rih~<$yW0)k41S@-U6=EI zuTeQr5TvMvU76=HU?}q*i)V?ru<+5J}~;v!i=ti zU!&`@{*Soj#F3@>N%rMnwHeq3u(=u7X0T})SO-{X8YUg@20IsQwsKJaFw^>l*THWE z|DDB)gRfbie^5L=Je2sFa4YXWNnV%B0lALzBjR`wZ_+06gJnsZP<~^f`71OVMT0*J z-sky$@FjdGW`b~jrvAb12h-LbXp4g{TiRyus)IfIio3yX0y8%wAeXKl1ltaluD@r% zo=n4(&mOP`!Kw)x9mH%to#1~@qZQACVBHy5QD4XTbp|#B?1c<$4A|BTY%18lrD2k1 zF4+BGXIpuS>(H;pN=w1FfM@GhB-_2j|D1T={>AHIu;;)kEw4y$uC2%I;KzRC^~1Iv zZ&y7k&3@vR5oc}yN$=O%GzY+c2>!VI6?GSSIMv@5Gyl0NaVW9Y&*#p9uuHfEd@HzK z-|72_NN7aT2PnTXXkH8?62}u3-)oRVZDRrW&%sYqT8%GGv12^Nts?H#P$E%4*z%n! z@s0c&iTfFGnf`%?_6+XpM>^XLwgXxpGvx>SF<6OsQ~m`o7VQD>pM$5{Q~r_ISQ@7E zF4&V`({1`l@T!8a>TeAA+u%{*o?jhwt8E?;pqa!U#p6V)y!bC^TyUqx9W7xsm0KBY zY-4<|gCq>&9Hm)DnsU>a_K!xL1ig;)q0I zl8q}4jZf9_0pcRLiNwj!sh${)IxfK?ly@Gu`l+N0Eup0v$4E};WHdBaK~pCh6@~$) z@TuSrfNPVc>NxlhYipI@>-+M?T3^Q7Q*tyD_f8)2`)N9De|j(Y4z}ra2v6xkxjmky zHY3k=Xs7Z0NYj>}sP*K06}$#~md_hwl$`H@KLQ^0@a51;U->M)ybS(TU(UNyat#&n0ZDN{Ey&FBUR>T=%!Sf*~AU!Ma*%VrZ~s|Mfu0UTfzTk@o4aEi?0L! z2HWV&yus@uWviRPzYgx(s(9#`f%RaISRRq!|FJywfS+=7BJrw^@3VL(_#5D!ED>K8 zhekKyn8Wb_;NJxQSD(*4mQMuSWjpR|KEA{o|A4oEZ}NOYavU59eLa{l4vs_n;jxJx zi+U5BKnD4<8HOcTgh1C$tUy^&UP0 zyb!$3;t{`n)PPrkU+3e~tqrXLzaRWf#^Y)?q0SJTJpV^rliO2QrvAa3GjNrC4|p3m z&q5fPLJL!6f0MY^c)R5_HZBsnI#u>u4DGm66Nx60sqDd9tZXiL9Q>z#nyogC{MA_E zP8^y@{6%R}ZPfE|k>Kk+-Ieii^`!YFX-*Zt!_$P0&+u_7>t@pIIPLIyc?SF?@CxNG zf5U`I^n1Zi;_c0U_wm13{7vu#INMt+J&r>3;iDX9*04n4As>Ih;)B4u!9TFL8+_M} zB}RikcRD%|&QClhgWYyUBC$Y#`q@g$V=nlAfPc~Ak>Coe*QMa+oS8^`)7R_2rt0Eu z;(kz)NKCP5+~6e3>tXOt@YO!AI|{-P!rQ^G;ky8*WYuXjG$4yk50GZ!h@=mS$Op-O zijJmz^L)@qD_3#o%#>Uu#GTED@iN;%Dfnb?*UIJ2_S(U0@G|hs_7n%d5xmaQC)>w5 z@F&1u^6?jJ`8I>sjY=dYs(oa!ne#(E4Nc|PN17F*6A6|DOwB=CTd&F%!Cy}_t zk6V{a;?|FL%&a%0ic=&kJ2> z*Fk&A1&PF&9@kns0weMmQwSfEm4b8?G2G*2;jRl*ZhAFQy{>=jO`i((Buisbz{tEanY+l8| zpIaH4!T)7!B5||Dqroa`hxdYagX6AEowo#2W5Oqh`!#Xti+`Z0g4>jQDg5T)V&$9Yn1%4a2uWyYn?*&@~c9v+dd9#-4tvji#9mKCBKAV2_ z5_b!6>Ej5M<4y27@N~VYZo?1?XINx@q8$J>A53BSvofy?5%7u(Ts$U&&jDvjX@0_H zgG~eT%cXql!AimOPzihog)U9`mvzK7^0|bI#eua+mJ=P9;AZfD1=ssud|gCCPbTY5 z?Q9n`XO*()-=j&kvuNnH^maBH+V`MsorF(j4v^_jE-BcU7i!Au=};h(>?Oz1-&~bl z=aY&1DRG&)o$KMgZWSK~`w_I)S{+0}tPrWccR4l?_d!`Au`;c!kTo$5IFje>9q!D13_0yljbwwFE+3C>HOwOGBB zLa)!do@ae#G<0^#XU-+={cGv(eSdm#DsDM(AI(f8{%rLS4Rxh#;a=i?c0GEqvPHDE z>=J$){G1!G?KJ&FLq$pbh-NP|Uzp9D&Fe4JcA}vxLcSjr%>ihxos&rDrPnE&IwLuk z70n`a8JK8KcYEtdU1?vEt0d{>4`DY~M7tdFrSzF6^$I2E7)mqsi#2p}R ze_bN6+0$cs9ZOpbM|w<9#joT9{QE751kaDlULv82l-*7y?&}SS#IHPlcN(4VRlV$x zLR^y6Ky!5*8p6`Kr;p$-G`WOIzGee7M>Hi8Ul0xB&jzLEtq@dg9WuAt z;$FPft2fobMjNMmb`v*i`Qh{3*TMf4{7Rcoaqu!*zJuU=pJFFvZNT`?2d(4C3IH1R-pX6(V>(7$J(@{NIJ6f~K(QwDw|xYw54AZ^KoegXK);Q!Xc zmp+p8rQ*2`n##3_#JPmkA5rzjCN_hA5&R|(4>Hjf{WIXZ!2fJb&15iqEGoHd58^ZZraEaf%X|_89E#P#B!j)Cxib0{2~v( z6gWMDvP4I5;?cfi4wwm5IT~e?m z5c*ayqxITx$Zpb&`C9g|PA73^5GNl>Udg$UGuYxxhm9Vu@al5__^HsxEuLJvi-4~L zA7gPh?$J*M{}y<;hX-%8Ha8c%6Fl8sB*Rkh--G`!hYM-v2RSkW>;H-S;@1<2TGgRC z{{5=TonN>^aV3DW0o;-1@>uzLom6P6&%TKDVVzXA_Hqo4Yz17JJB zOrPLk`KK_SY4_R@gWSl` z4E?X5H*KEulI?D=gBjR^U?*)(BoN#DME4BXnP6s)#I@{i57-p2uZYUeU+ryBur;&2 z9fbB#Xup3r?L+Cb((SNQ>G$tv>?2y)DgzVA5Cv}mH@=2z(ar#S8EhtD)lra}n!;~dL2 zocpLZKk)nvon>;YD!yx=Is5TM;&j5&FSqSXejC9{!83Kx0bbLQT(2zFdZkO!J>dTi z-XcC;UW0BMB)n3s4l12{ycvudpVxY?mvbRH-)%ky)?KgBVQE!QgF3R zcqQ*&&-8GA-e>9`>|$tFcs#fXWNc^^`2FC<2N9=wyBF-+VCil4VX!Z!VdA+3Y&qC$ z%hTNRbqVhS-vVAHJgJAvdg$RGG;cz)OEmZy?IUps7N6!g_x&)D*e={lTN3$T&TW3w0=l&Gl)CsCx`1%?X#Y^BI15eSiF;cTv_my^gd2HxDVQ$(7K}K zC*F^Py#%IsE8CUZWN0pzyFGfdZtBTBfO&{NZed91yammhq&H(&pT^sxruZTz9-%FX z#5lr!*#|7KEEFFh-X%U;deui6@#hggQt7cR?Zr~M1>jeH0^c>nFZ`Hz@qLi^HN?|& z#kWX%hg^bN!2bzcc}QNbubk=kv!Zz&nl@;t?sS@RpGNhP%fEHdoY|Ac`0ZGl+ZOF; z{)wL%6QuGqv~_8;F0^x@y&GCYNYA^%&s#LBp!sKLM)ah)*{4z29)zYHn&BRe=9l^N zsTbyrir+>2qr@A%Ba?}*w(+u?PU3$=ykD<(25&R-QpJUFIG#dDc&njp}K;!!?uT2D3dW;a= zc@UcQ(1<>*o{i40Pt&>j;Jwh^0qu+|v_YCnY7}Ps%shzZzl@59cP z(DphQ&pnNO{u^rzPja6Td<5s+EEo+fW)CtncYV)so@Ibg&^O>Lrt>d?HnM@Ws5fZa zKj7YWoc$~R$$G;+viK*~LAm}K=X0Ui)5u!PA06khTJBXojtziK;P^h_`=L97@Kw8* zo88NrDB+8a3^>mh1)LQw&!>FI`~yB$g16nxUO;5HlQgGqbezSU@8Q@C_7KP89Qy_b zoPQzRlZ2m#{u$0=?qQvgBZ%CI$LOz!zkzfQd<_{m9)Z_12IV(#ob*+EF?nquyq2S# zbdPX+hvVNkp5pikM+wJS9D{};BYL`&^8JLPwiEuImJ2!S=>7F-;L|ja;P+`X+2WP% z=xh=HA7L~J9K;sKoZs1Ea?wZZicILg{_i-FW;^7^`8AvWz5jYO(5r!74fJZDR|CBo z=+!{426{EntASn({14Q?{%1aU4d&D0{|6T7|5cHqX9Ufh(O>J&WX@YynwGjFB97k8 zQ(L|$=J@X;b9nh&qn_91*>2ur$W#8AY5nWw*O)z?aFx@1V2RVbni*^5E*?PntJD0# zfPnMp_<(a^b)fn9uLhbQc&J2y_VQd|r_S-|2 zeIZiL-rUzYBlsKhOqAA=gqLyXH_-WwlS!`}M87d7#mA=?o{j$0Kz4fJQJ#6x`a;iq zUvRYUpr7*s&)*Y&Sjhko!TgTQ;}jaSvVRz|qmDVjIlAz;W4$a^J2V6O&x zHPEYpUJdkWpjQLE8tBzPuLgQG(5nHffeU>_e8T+V)mq*Y7V-&u&%GMx)xiID4fOhh z|LqpgTmD`R^lG421HBsP)xgJV;4{xJbc3Y#*QLDV?+-Y8Is?vrUPydIimtEI=eY2!kQ0gqn*&>%xlWX~ zfevu;ojwjXGtB31^lzAc$*W{wV^PmvIQjGN@#YuE^0NdJ%rBVbr}*5Iod5rXE}b~> z0(aOo^Z2-1lRJ9Em=U9gpVefpMy(h%dPHRO=@#Wt*2V>VYKw1JIV0k+rEzCOL!G{g z=ZuIgm{Y~qhGNbLdp)nQ(HWsHIC_*MIe%#T5@V&yNAk_@c>eoz&uj=dW52?8g3N=)Hr}T@)uYp`t>_Q=mJUZCIbn4i z*OEIt+H7PH-Q4#B&Q^}cOT9==t{2p^{h#9eL%jUopP)O>zu+ty{r+#; Cri=yv literal 0 HcmV?d00001 diff --git a/linux/Makefile b/linux/Makefile new file mode 100644 index 0000000..ecbcf30 --- /dev/null +++ b/linux/Makefile @@ -0,0 +1,125 @@ +# +# if you want the ram-disk device, define this to be the +# size in blocks. +# +RAMDISK = #-DRAMDISK=512 + +AS86 =as86 -0 -a +LD86 =ld86 -0 + +AS =as +LD =ld +LDFLAGS =-m elf_i386 -Ttext 0 -e startup_32 -Map=System.map.2 -N +CC =gcc -march=i386 $(RAMDISK) +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -fno-stack-protector -mcld +CPP =cpp -nostdinc -Iinclude + +# +# ROOT_DEV specifies the default root-device when making the image. +# This can be either FLOPPY, /dev/xxxx or empty, in which case the +# default of /dev/hd6 is used by 'build'. +# +ROOT_DEV= + +ARCHIVES=kernel/kernel.o mm/mm.o fs/fs.o +DRIVERS =kernel/blk_drv/blk_drv.a kernel/chr_drv/chr_drv.a +MATH =kernel/math/math.a +LIBS =lib/lib.a + +.c.s: + $(CC) $(CFLAGS) \ + -nostdinc -Iinclude -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -nostdinc -Iinclude -c -o $*.o $< + +all: Image + +Image: boot/bootsect boot/setup tools/system tools/build + cp -f tools/system system.tmp + strip system.tmp + tools/build boot/bootsect boot/setup system.tmp $(ROOT_DEV) > Image + rm -f system.tmp + sync + +disk: Image + dd bs=8192 if=Image of=/dev/PS0 + +tools/build: tools/build.c + $(CC) $(CFLAGS) \ + -o tools/build tools/build.c + +boot/head.o: boot/head.s + +tools/system: boot/head.o init/main.o \ + $(ARCHIVES) $(DRIVERS) $(MATH) $(LIBS) + $(LD) $(LDFLAGS) boot/head.o init/main.o \ + $(ARCHIVES) \ + $(DRIVERS) \ + $(MATH) \ + $(LIBS) \ + -o tools/system + nm tools/system | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw]\)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort >System.map + +kernel/math/math.a: FORCE + (cd kernel/math; make) + +kernel/blk_drv/blk_drv.a: FORCE + (cd kernel/blk_drv; make) + +kernel/chr_drv/chr_drv.a: FORCE + (cd kernel/chr_drv; make) + +kernel/kernel.o: FORCE + (cd kernel; make) + +mm/mm.o: FORCE + (cd mm; make) + +fs/fs.o: FORCE + (cd fs; make) + +lib/lib.a: FORCE + (cd lib; make) + +FORCE: + +boot/setup: boot/setup.s + $(AS86) -o boot/setup.o boot/setup.s + $(LD86) -s -o boot/setup boot/setup.o + +boot/bootsect: boot/bootsect.s + $(AS86) -o boot/bootsect.o boot/bootsect.s + $(LD86) -s -o boot/bootsect boot/bootsect.o + +tmp.s: boot/bootsect.s tools/system + (echo -n "SYSSIZE = (";ls -l tools/system | grep system \ + | cut -c25-31 | tr '\012' ' '; echo "+ 15 ) / 16") > tmp.s + cat boot/bootsect.s >> tmp.s + +clean: + rm -f Image System.map tmp_make core System.map.2 + rm -f boot/bootsect boot/setup + rm -f init/*.o tools/system tools/build boot/*.o + (cd mm;make clean) + (cd fs;make clean) + (cd kernel;make clean) + (cd lib;make clean) + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in init/*.c;do echo -n "init/";$(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + (cd fs; make dep) + (cd kernel; make dep) + (cd mm; make dep) + +### Dependencies: +init/main.o : init/main.c include/unistd.h include/sys/stat.h \ + include/sys/types.h include/sys/times.h include/sys/utsname.h \ + include/utime.h include/time.h include/linux/tty.h include/termios.h \ + include/linux/sched.h include/linux/head.h include/linux/fs.h \ + include/linux/mm.h include/signal.h include/asm/system.h include/asm/io.h \ + include/stddef.h include/stdarg.h include/fcntl.h diff --git a/linux/System.map b/linux/System.map new file mode 100644 index 0000000..2b369d9 --- /dev/null +++ b/linux/System.map @@ -0,0 +1,588 @@ +00000000 T pg_dir +00000000 T startup_32 +0000005a t check_x87 +00000073 t setup_idt +00000090 t rp_sidt +000000a3 t setup_gdt +00001000 t pg0 +00002000 t pg1 +00003000 t pg2 +00004000 t pg3 +00005000 T tmp_floppy_area +00005412 t L6 +00005414 t int_msg +00005428 t ignore_int +00005450 t setup_paging +000054ae t idt_descr +000054b6 t gdt_descr +000054c0 T idt +00005cc0 T gdt +000064c0 T fork +000064ef T pause +0000651e T setup +00006555 T sync +00006584 t time_init +00006799 T main +0000690c t printf +0000695b T init +00006bd3 T print_nr +00006c04 t put_fs_byte +00006c1c T show_task +00006ca1 T show_stat +00006ce7 T math_state_restore +00006d45 T schedule +00006ef7 T sys_pause +00006f0d T sleep_on +00006f6c T interruptible_sleep_on +00007027 T ticks_to_floppy_on +000070f2 T floppy_on +00007121 T floppy_off +00007131 T do_floppy_timer +00007329 T do_timer +00007418 T sys_alarm +00007497 T sys_getpid +000074a3 T sys_getppid +000074af T sys_getuid +000074be T sys_geteuid +000074ce T sys_getgid +000074de T sys_getegid +000074ed T sys_nice +00007518 T sched_init +000076a5 T sys_getdents +00007801 T sys_pipe2 +00007814 T sys_sleep +0000784d T sys_getcwd +00007853 T sys_mmap +00007859 T sys_munmap +0000785f T sys_clone +00007868 t bad_sys_call +00007870 t reschedule +0000787c T system_call +000078b7 t ret_from_sys_call +00007900 T coprocessor_error +00007922 T device_not_available +0000795c T timer_interrupt +00007994 T sys_execve +000079a4 T sys_execve2 +000079b4 T sys_fork +000079cc T hd_interrupt +00007a08 T floppy_interrupt +00007a3e T parallel_interrupt +00007a45 t _get_base +00007a77 t die +00007c59 T do_double_fault +00007c7c T do_general_protection +00007c9f T do_divide_error +00007cc2 T do_int3 +00007d8a T do_nmi +00007dad T do_debug +00007dd0 T do_overflow +00007df3 T do_bounds +00007e16 T do_invalid_op +00007e39 T do_device_not_available +00007e5c T do_coprocessor_segment_overrun +00007e7f T do_invalid_TSS +00007ea2 T do_segment_not_present +00007ec5 T do_stack_segment +00007ee8 T do_coprocessor_error +00007f1c T do_reserved +00007f3f T trap_init +00008223 T divide_error +00008228 t no_error_code +00008258 T debug +0000825f T nmi +00008266 T int3 +0000826d T overflow +00008274 T bounds +0000827b T invalid_op +00008282 T coprocessor_segment_overrun +00008289 T reserved +00008290 T irq13 +000082a5 T double_fault +000082aa t error_code +000082dc T invalid_TSS +000082e3 T segment_not_present +000082ea T stack_segment +000082f1 T general_protection +000082f8 t _get_base +0000832a T verify_area +00008391 T copy_mem +000084eb T copy_process +00008998 T find_empty_process +00008a2c T panic +00008a67 T printk +00008ab8 t skip_atoi +00008b13 t number +00008d84 T vsprintf +00009210 t get_fs_long +00009226 t put_fs_byte +0000923e t put_fs_long +0000924a T sys_ftime +00009250 T sys_break +00009256 T sys_ptrace +0000925c T sys_stty +00009262 T sys_gtty +00009268 T sys_rename +0000926e T sys_prof +00009274 T sys_setregid +0000932d T sys_setgid +000093c4 T sys_acct +000093ca T sys_phys +000093d0 T sys_lock +000093d6 T sys_mpx +000093dc T sys_ulimit +000093e2 T sys_time +0000943e T sys_setreuid +00009520 T sys_setuid +000095b5 T sys_stime +0000960b T sys_times +000096ab T sys_brk +000096ed T sys_setpgid +000097c6 T sys_getpgrp +000097d2 T sys_setsid +0000984c T sys_getgroups +00009852 T sys_setgroups +00009858 T sys_uname +000098c1 T sys_sethostname +000098c7 T sys_getrlimit +000098cd T sys_setrlimit +000098d3 T sys_getrusage +000098d9 T sys_gettimeofday +000098df T sys_settimeofday +000098e5 T sys_umask +00009918 t _get_base +0000994a t put_fs_long +00009956 T release +000099ba t send_sig +00009a39 t kill_session +00009a93 T sys_kill +00009c43 t tell_father +00009ccd T do_exit +00009f01 T sys_exit +00009f1a T sys_waitpid +0000a140 t get_fs_byte +0000a14e t put_fs_byte +0000a166 t put_fs_long +0000a172 T sys_sgetmask +0000a17e T sys_ssetmask +0000a1aa T sys_sigpending +0000a1b0 T sys_sigsuspend +0000a1b6 t save_old +0000a209 t get_new +0000a249 T sys_signal +0000a2cd T sys_sigaction +0000a3d7 T do_signal +0000a5c3 T kernel_mktime +0000a708 t oom +0000a727 T get_free_page +0000a763 T free_page +0000a7d2 T free_page_tables +0000a8d1 T copy_page_tables +0000aa52 T put_page +0000ab3e T un_wp_page +0000abf6 T do_wp_page +0000ac81 T get_empty_page +0000acc1 t try_to_share +0000ae53 t share_page +0000af07 T do_no_page +0000b069 T do_no_page2 +0000b1cb T mem_init +0000b23f T calc_mem +0000b334 T page_fault +0000b36b t get_fs_long +0000b381 T sys_ustat +0000b387 T sys_utime +0000b434 T sys_access +0000b510 T sys_chdir +0000b584 T sys_chroot +0000b5f8 T sys_chmod +0000b692 T sys_chown +0000b70d T sys_open +0000b9b0 T sys_creat +0000b9d3 T sys_close +0000baa2 T sys_lseek +0000bbb9 T sys_read +0000bdac T sys_write +0000bf5a t lock_inode +0000bf87 t unlock_inode +0000bfa5 T invalidate_inodes +0000c014 T sync_inodes +0000c06b t _bmap +0000c457 T bmap +0000c47a T create_block +0000c49d T iput +0000c60c T get_empty_inode +0000c761 T get_pipe_inode +0000c7d6 T iget +0000c99b t read_inode +0000cbd1 T sys_sync +0000cc34 T sync_dev +0000cd2d T invalidate_buffers +0000cd9f T check_disk_change +0000ce49 t remove_from_queues +0000cf40 t insert_into_queues +0000d005 t find_buffer +0000d06d T get_hash_table +0000d0ef T getblk +0000d28d T brelse +0000d2d6 T bread +0000d35b T bread_page +0000d47d T breada +0000d572 T buffer_init +0000d6a1 t lock_super +0000d6ce t free_super +0000d713 T get_super +0000d782 T put_super +0000d855 t read_super +0000db98 T sys_umount +0000dcf9 T sys_mount +0000de6a T mount_root +0000e078 t get_fs_byte +0000e086 t put_fs_byte +0000e09e T block_write +0000e1f0 T block_read +0000e31b t get_fs_byte +0000e329 t put_fs_byte +0000e341 t rw_ttyx +0000e389 t rw_tty +0000e3d9 t rw_ram +0000e3df t rw_mem +0000e3e5 t rw_kmem +0000e3eb t rw_port +0000e485 t rw_memory +0000e55b T rw_char +0000e5c5 t get_fs_byte +0000e5d3 t put_fs_byte +0000e5eb T file_read +0000e796 T file_write +0000e990 t put_fs_byte +0000e9a8 t cp_stat +0000ea7f T sys_stat +0000eac9 T sys_lstat +0000eae4 T sys_fstat +0000eb41 T sys_readlink +0000eb47 t _get_base +0000eb79 t get_fs_byte +0000eb87 t get_fs_long +0000eb9d t put_fs_byte +0000ebb5 t put_fs_long +0000ebc1 t get_fs +0000ebd5 t get_ds +0000ebe9 t set_fs +0000ebf0 T sys_uselib +0000ebf6 t create_tables +0000ed41 t count +0000ed80 t copy_strings +0000ef3c t change_ldt +0000f0bf T do_execve +0000fb41 T do_execve2 +0001061a t get_fs_byte +00010628 t put_fs_byte +00010640 t put_fs_long +0001064c T read_pipe +00010921 T sys_pipe +00010b23 t get_fs_byte +00010b31 t permission +00010bd2 t match +00010c3a t find_entry +00011094 t get_dir +00011281 t dir_namei +00011300 T namei +00011416 T open_namei +00011769 T sys_mknod +00011999 T sys_mkdir +00011d4a t empty_dir +00011f28 T sys_rmdir +00012280 T sys_unlink +00012521 T sys_symlink +00012527 T sys_link +00012781 T free_block +000128f3 T new_block +00012a97 T free_inode +00012bfe T new_inode +00012dd8 t dupfd +00012eb2 T sys_dup2 +00012ed9 T sys_dup +00012ef4 T sys_fcntl +00013033 T sys_ioctl +00013104 t free_ind +000131a3 t free_dind +00013242 T truncate +00013377 T sys_select +0001337d t lock_buffer +000133aa t unlock_buffer +0001359c t make_request +00013740 T ll_rw_block +00013799 T blk_dev_init +000137e7 t unlock_buffer +0001381c t end_request +000138cd T floppy_deselect +00013904 T floppy_change +0001398a t setup_DMA +00013a40 t output_byte +00013ab6 t result +00013b73 t bad_flp_intr +00013bd2 t rw_interrupt +00013cc1 T setup_rw_floppy +00013d82 t seek_interrupt +00013ddb t transfer +00013f10 t recal_interrupt +00013f5a T unexpected_floppy_interrupt +00013f9f t recalibrate_floppy +00014001 t reset_interrupt +00014046 t reset_floppy +000140c3 t floppy_on_interrupt +0001412e t do_fd_request +00014332 T floppy_init +00014384 t unlock_buffer +000143b9 t end_request +00014458 T sys_setup +0001480b t controller_ready +0001489f t hd_out +0001498c t drive_busy +000149f2 t reset_controller +00014a6f t reset_hd +00014b07 T unexpected_hd_interrupt +00014b1a t bad_rw_intr +00014b58 t read_intr +00014c7e t recal_intr +00014c98 t do_hd_request +00014f99 T hd_init +00015013 t unlock_buffer +00015048 t end_request +000150e7 t do_rd_request +0001521d T rd_init +00015273 T rd_load +0001551f t get_fs_byte +0001552d t put_fs_byte +00015545 T tty_init +00015556 T tty_intr +000155ca t sleep_if_empty +00015602 t sleep_if_full +00015676 T copy_to_cooked +00015c31 T tty_read +00015f9f T tty_write +000161b1 T do_tty_interrupt +000161d9 T chr_dev_init +000161da t gotoxy +00016228 t set_origin +0001628e t scrup +0001647e t scrdown +00016575 t lf +000165ab t ri +000165e1 t cr +00016602 t del +00016634 t csi_J +000166c5 t csi_K +00016777 T csi_m +000167de t set_cursor +00016844 t respond +0001689c t insert_char +000168ff t insert_line +00016943 t delete_char +000169a1 t delete_line +000169e5 t csi_at +00016a23 t csi_L +00016a61 t csi_P +00016a9f t csi_M +00016add t save_cur +00016af2 t restore_cur +00016b11 T con_write +0001719f T con_init +000173d6 T sysbeepstop +000173ff t sysbeep +0001745d t mode +0001745e t leds +0001745f t e0 +00017460 T keyboard_interrupt +00017489 t e0_e1 +000174b4 t set_e0 +000174bd t set_e1 +000174c6 t put_queue +000174ff t ctrl +00017517 t unctrl +0001751b t unalt +00017531 t lshift +00017539 t unlshift +00017541 t rshift +00017549 t unrshift +00017551 t caps +00017573 t set_leds +00017589 t uncaps +00017591 t scroll +0001759a t num +000175a3 t cursor +000175c3 t cur2 +000175ec t cur +000175f8 t ok_cur +00017606 t num_table +00017613 t cur_table +00017620 t func +0001763d t ok_func +00017650 t end_func +00017651 t func_table +00017681 t key_map +000176e2 t shift_map +000177a4 t do_self +0001780c t none +0001780d t minus +00017822 t key_table +00017c22 t kb_wait +00017c2b t reboot +00017c3d t die +00017c3f t init +00017cb4 T rs_init +00017d37 T rs_write +00017d84 T rs1_interrupt +00017d8c T rs2_interrupt +00017d91 t rs_int +00017da8 t rep_int +00017dc5 t end +00017dd3 t jmp_table +00017de4 t modem_status +00017dec t line_status +00017df4 t read_char +00017e7b t get_fs_byte +00017e89 t get_fs_long +00017e9f t put_fs_byte +00017eb7 t put_fs_long +00017ec3 t change_speed +00017f41 t flush +00017f53 t send_break +00017f54 t get_termios +00017fb0 t set_termios +00018000 t get_termio +000180c8 t set_termio +0001818c T tty_ioctl +0001848a t get_fs_byte +00018498 T math_emulate +0001857b T math_error +0001859b T _exit +000185ab T open +000185f4 T close +00018668 T dup +0001869f T setsid +000186ce T execve +0001876b T strcpy +00018787 T strncpy +000187ac T strcat +000187d7 T strncat +0001880c T strcmp +00018833 T strncmp +00018861 T strchr +0001888e T strrchr +000188bd T strspn +000188fa T strcspn +00018937 T strpbrk +0001896e T strstr +000189a7 T strlen +000189ca T strtok +00018a4d T memcpy +00018a6d T memmove +00018ac1 T memcmp +00018aeb T memchr +00018b23 T memset +0001cae8 d envp_rc +0001cafc d envp +0001cb20 D sys_call_table +0001cc9c D NR_syscalls +0001cca0 d init_task +0001dca0 D current +0001dcc0 D task +0001ddc0 D stack_start +0001ddc8 D current_DOR +0001dde0 d thisname.1960 +0001de20 d month +0001de60 d last_inode.1940 +0001de64 D start_buffer +0001de80 d crw_table +0001dea0 d ioctl_table +0001dec0 d floppy_type +0001df80 d cur_spec1 +0001df84 d cur_rate +0001df88 d floppy +0001df8c d current_track +0001df90 d callable.1849 +0001dfa0 D tty_table +000204c0 D table_list +000204e0 d quotient +00020500 D _ctype +00020601 B __bss_start +00020601 D _edata +00020620 b printbuf +00020a20 b memory_end +00020a24 b buffer_memory_end +00020a28 b main_memory_start +00020a40 B jiffies +00020a44 B startup_time +00020a48 B last_task_used_math +00020a5c b mon_timer +00020a6c b moff_timer +00020a80 b timer_list +00020d80 b next_timer +00020d84 B last_pid +00020da0 b buf +000211a0 b HIGH_MEMORY +000211c0 b mem_map +000220c0 B inode_table +000227c0 B nr_buffers +000227c4 b free_list +000227c8 b buffer_wait +000227cc B ROOT_DEV +00022800 B blk_dev +00022838 B do_floppy +0002283c B selected +00022844 b recalibrate +00022848 b reset +0002284c b seek +00022850 b reply_buffer +00022857 b current_drive +00022858 b sector +00022859 b head +0002285a b track +0002285b b seek_track +0002285c b command +00022860 B do_hd +00022880 B hd_info +000228b0 b recalibrate +000228b4 b reset +000228b8 b NR_HD +000228c0 b hd +00022910 B rd_length +00022914 b cr_flag.1928 +00022920 B beepcount +00022924 b video_type +00022928 b video_num_columns +0002292c b video_size_row +00022930 b video_num_lines +00022934 b video_page +00022938 b video_mem_start +0002293c b video_mem_end +00022940 b video_port_reg +00022942 b video_port_val +00022944 b video_erase_char +00022948 b origin +0002294c b scr_end +00022950 b pos +00022954 b x +00022958 b y +0002295c b top +00022960 b bottom +00022964 b state +00022968 b npar +00022980 b par +000229c0 b ques +000229c4 b saved_x +000229c8 b saved_y +000229e0 B drive_info +00022a00 B user_stack +00023a00 B hash_table +00023ee0 B super_block +00024240 B file_table +00024640 B request +00024ac0 B rd_start +00024ac4 B _ctmp +00024ac8 B errno +00024acc B ___strtok +00024ad0 B end +00024ad0 B _end diff --git a/linux/System.map.2 b/linux/System.map.2 new file mode 100644 index 0000000..3acfd16 --- /dev/null +++ b/linux/System.map.2 @@ -0,0 +1,1084 @@ +Archive member included to satisfy reference by file (symbol) + +kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + fs/fs.o (ll_rw_block) +kernel/blk_drv/blk_drv.a(floppy.o) + kernel/kernel.o (do_floppy) +kernel/blk_drv/blk_drv.a(hd.o) + kernel/kernel.o (do_hd) +kernel/blk_drv/blk_drv.a(ramdisk.o) + kernel/blk_drv/blk_drv.a(hd.o) (rd_load) +kernel/chr_drv/chr_drv.a(tty_io.o) + kernel/kernel.o (tty_table) +kernel/chr_drv/chr_drv.a(console.o) + kernel/chr_drv/chr_drv.a(tty_io.o) (con_write) +kernel/chr_drv/chr_drv.a(keyboard.2.o) + kernel/chr_drv/chr_drv.a(console.o) (keyboard_interrupt) +kernel/chr_drv/chr_drv.a(serial.o) + kernel/chr_drv/chr_drv.a(tty_io.o) (rs_init) +kernel/chr_drv/chr_drv.a(rs_io.o) + kernel/chr_drv/chr_drv.a(serial.o) (rs1_interrupt) +kernel/chr_drv/chr_drv.a(tty_ioctl.o) + fs/fs.o (tty_ioctl) +kernel/math/math.a(math_emulate.o) + kernel/kernel.o (math_emulate) +lib/lib.a(ctype.o) kernel/chr_drv/chr_drv.a(tty_io.o) (_ctmp) +lib/lib.a(_exit.o) init/main.o (_exit) +lib/lib.a(open.o) init/main.o (open) +lib/lib.a(close.o) init/main.o (close) +lib/lib.a(errno.o) init/main.o (errno) +lib/lib.a(write.o) init/main.o (write) +lib/lib.a(dup.o) init/main.o (dup) +lib/lib.a(setsid.o) init/main.o (setsid) +lib/lib.a(execve.o) init/main.o (execve) +lib/lib.a(wait.o) init/main.o (wait) +lib/lib.a(string.o) fs/fs.o (strncpy) + +分配公共符号 +公共符号 大小 文件 + +errno 0x4 lib/lib.a(errno.o) +hash_table 0x4cc fs/fs.o +___strtok 0x4 lib/lib.a(string.o) +rd_start 0x4 kernel/blk_drv/blk_drv.a(ramdisk.o) +request 0x480 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) +user_stack 0x1000 kernel/kernel.o +_ctmp 0x1 lib/lib.a(ctype.o) +super_block 0x360 fs/fs.o +drive_info 0x20 init/main.o +file_table 0x400 fs/fs.o + +Discarded input sections + + .note.GNU-stack + 0x0000000000000000 0x0 init/main.o + .note.GNU-stack + 0x0000000000000000 0x0 kernel/kernel.o + .note.GNU-stack + 0x0000000000000000 0x0 mm/mm.o + .note.GNU-stack + 0x0000000000000000 0x0 fs/fs.o + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(floppy.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(hd.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(ramdisk.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(tty_io.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(console.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(serial.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/math/math.a(math_emulate.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(ctype.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(_exit.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(open.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(close.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(errno.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(write.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(dup.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(setsid.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(execve.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(wait.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(string.o) + +内存配置 + +名称 来源 长度 属性 +*default* 0x0000000000000000 0xffffffffffffffff + +Linker script and memory map + +段 .text 的地址设置为 0x0 +LOAD boot/head.o +LOAD init/main.o +LOAD kernel/kernel.o +LOAD mm/mm.o +LOAD fs/fs.o +LOAD kernel/blk_drv/blk_drv.a +LOAD kernel/chr_drv/chr_drv.a +LOAD kernel/math/math.a +LOAD lib/lib.a + 0x0000000008048000 PROVIDE (__executable_start, 0x8048000) + 0x0000000008048074 . = (0x8048000 + SIZEOF_HEADERS) + +.interp + *(.interp) + +.note.gnu.build-id + *(.note.gnu.build-id) + +.hash + *(.hash) + +.gnu.hash + *(.gnu.hash) + +.dynsym + *(.dynsym) + +.dynstr + *(.dynstr) + +.gnu.version + *(.gnu.version) + +.gnu.version_d + *(.gnu.version_d) + +.gnu.version_r + *(.gnu.version_r) + +.rel.init + *(.rel.init) + +.rel.text 0x0000000008048074 0x0 + *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) + .rel.text 0x0000000000000000 0x0 boot/head.o + +.rel.fini + *(.rel.fini) + +.rel.rodata + *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) + +.rel.data.rel.ro + *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) + +.rel.data 0x0000000008048074 0x0 + *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) + .rel.data 0x0000000000000000 0x0 boot/head.o + +.rel.tdata + *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) + +.rel.tbss + *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) + +.rel.ctors + *(.rel.ctors) + +.rel.dtors + *(.rel.dtors) + +.rel.got + *(.rel.got) + +.rel.bss + *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) + +.rel.ifunc + *(.rel.ifunc) + +.rel.plt 0x0000000008048074 0x0 + *(.rel.plt) + 0x0000000008048074 PROVIDE (__rel_iplt_start, .) + *(.rel.iplt) + .rel.iplt 0x0000000000000000 0x0 boot/head.o + 0x0000000008048074 PROVIDE (__rel_iplt_end, .) + +.init + *(SORT(.init)) + +.plt 0x0000000008048080 0x0 + *(.plt) + *(.iplt) + .iplt 0x0000000000000000 0x0 boot/head.o + +.text 0x0000000000000000 0x18b47 + *(.text.unlikely .text.*_unlikely .text.unlikely.*) + *(.text.exit .text.exit.*) + *(.text.startup .text.startup.*) + *(.text.hot .text.hot.*) + *(.text .stub .text.* .gnu.linkonce.t.*) + .text 0x0000000000000000 0x64c0 boot/head.o + 0x0000000000000000 startup_32 + 0x0000000000000000 pg_dir + 0x0000000000005000 tmp_floppy_area + 0x00000000000054c0 idt + 0x0000000000005cc0 gdt + .text 0x00000000000064c0 0x744 init/main.o + 0x00000000000064c0 fork + 0x00000000000064ef pause + 0x000000000000651e setup + 0x0000000000006555 sync + 0x0000000000006799 main + 0x000000000000695b init + 0x0000000000006bd3 print_nr + .text 0x0000000000006c04 0x3b04 kernel/kernel.o + 0x0000000000006c1c show_task + 0x0000000000006ca1 show_stat + 0x0000000000006ce7 math_state_restore + 0x0000000000006d45 schedule + 0x0000000000006ef7 sys_pause + 0x0000000000006f0d sleep_on + 0x0000000000006f6c interruptible_sleep_on + 0x0000000000006fff wake_up + 0x0000000000007027 ticks_to_floppy_on + 0x00000000000070f2 floppy_on + 0x0000000000007121 floppy_off + 0x0000000000007131 do_floppy_timer + 0x0000000000007205 add_timer + 0x0000000000007329 do_timer + 0x0000000000007418 sys_alarm + 0x0000000000007497 sys_getpid + 0x00000000000074a3 sys_getppid + 0x00000000000074af sys_getuid + 0x00000000000074be sys_geteuid + 0x00000000000074ce sys_getgid + 0x00000000000074de sys_getegid + 0x00000000000074ed sys_nice + 0x0000000000007518 sched_init + 0x00000000000076a5 sys_getdents + 0x0000000000007801 sys_pipe2 + 0x0000000000007814 sys_sleep + 0x000000000000784d sys_getcwd + 0x0000000000007853 sys_mmap + 0x0000000000007859 sys_munmap + 0x000000000000785f sys_clone + 0x000000000000787c system_call + 0x0000000000007900 coprocessor_error + 0x0000000000007922 device_not_available + 0x000000000000795c timer_interrupt + 0x0000000000007994 sys_execve + 0x00000000000079a4 sys_execve2 + 0x00000000000079b4 sys_fork + 0x00000000000079cc hd_interrupt + 0x0000000000007a08 floppy_interrupt + 0x0000000000007a3e parallel_interrupt + 0x0000000000007c59 do_double_fault + 0x0000000000007c7c do_general_protection + 0x0000000000007c9f do_divide_error + 0x0000000000007cc2 do_int3 + 0x0000000000007d8a do_nmi + 0x0000000000007dad do_debug + 0x0000000000007dd0 do_overflow + 0x0000000000007df3 do_bounds + 0x0000000000007e16 do_invalid_op + 0x0000000000007e39 do_device_not_available + 0x0000000000007e5c do_coprocessor_segment_overrun + 0x0000000000007e7f do_invalid_TSS + 0x0000000000007ea2 do_segment_not_present + 0x0000000000007ec5 do_stack_segment + 0x0000000000007ee8 do_coprocessor_error + 0x0000000000007f1c do_reserved + 0x0000000000007f3f trap_init + 0x0000000000008223 divide_error + 0x0000000000008258 debug + 0x000000000000825f nmi + 0x0000000000008266 int3 + 0x000000000000826d overflow + 0x0000000000008274 bounds + 0x000000000000827b invalid_op + 0x0000000000008282 coprocessor_segment_overrun + 0x0000000000008289 reserved + 0x0000000000008290 irq13 + 0x00000000000082a5 double_fault + 0x00000000000082dc invalid_TSS + 0x00000000000082e3 segment_not_present + 0x00000000000082ea stack_segment + 0x00000000000082f1 general_protection + 0x000000000000832a verify_area + 0x0000000000008391 copy_mem + 0x00000000000084eb copy_process + 0x0000000000008998 find_empty_process + 0x0000000000008a2c panic + 0x0000000000008a67 printk + 0x0000000000008d84 vsprintf + 0x000000000000924a sys_ftime + 0x0000000000009250 sys_break + 0x0000000000009256 sys_ptrace + 0x000000000000925c sys_stty + 0x0000000000009262 sys_gtty + 0x0000000000009268 sys_rename + 0x000000000000926e sys_prof + 0x0000000000009274 sys_setregid + 0x000000000000932d sys_setgid + 0x00000000000093c4 sys_acct + 0x00000000000093ca sys_phys + 0x00000000000093d0 sys_lock + 0x00000000000093d6 sys_mpx + 0x00000000000093dc sys_ulimit + 0x00000000000093e2 sys_time + 0x000000000000943e sys_setreuid + 0x0000000000009520 sys_setuid + 0x00000000000095b5 sys_stime + 0x000000000000960b sys_times + 0x00000000000096ab sys_brk + 0x00000000000096ed sys_setpgid + 0x00000000000097c6 sys_getpgrp + 0x00000000000097d2 sys_setsid + 0x000000000000984c sys_getgroups + 0x0000000000009852 sys_setgroups + 0x0000000000009858 sys_uname + 0x00000000000098c1 sys_sethostname + 0x00000000000098c7 sys_getrlimit + 0x00000000000098cd sys_setrlimit + 0x00000000000098d3 sys_getrusage + 0x00000000000098d9 sys_gettimeofday + 0x00000000000098df sys_settimeofday + 0x00000000000098e5 sys_umask + 0x0000000000009956 release + 0x0000000000009a93 sys_kill + 0x0000000000009ccd do_exit + 0x0000000000009f01 sys_exit + 0x0000000000009f1a sys_waitpid + 0x000000000000a172 sys_sgetmask + 0x000000000000a17e sys_ssetmask + 0x000000000000a1aa sys_sigpending + 0x000000000000a1b0 sys_sigsuspend + 0x000000000000a249 sys_signal + 0x000000000000a2cd sys_sigaction + 0x000000000000a3d7 do_signal + 0x000000000000a5c3 kernel_mktime + .text 0x000000000000a708 0xc63 mm/mm.o + 0x000000000000a727 get_free_page + 0x000000000000a763 free_page + 0x000000000000a7d2 free_page_tables + 0x000000000000a8d1 copy_page_tables + 0x000000000000aa52 put_page + 0x000000000000ab3e un_wp_page + 0x000000000000abf6 do_wp_page + 0x000000000000ac28 write_verify + 0x000000000000ac81 get_empty_page + 0x000000000000af07 do_no_page + 0x000000000000b069 do_no_page2 + 0x000000000000b1cb mem_init + 0x000000000000b23f calc_mem + 0x000000000000b334 page_fault + .text 0x000000000000b36b 0x8012 fs/fs.o + 0x000000000000b381 sys_ustat + 0x000000000000b387 sys_utime + 0x000000000000b434 sys_access + 0x000000000000b510 sys_chdir + 0x000000000000b584 sys_chroot + 0x000000000000b5f8 sys_chmod + 0x000000000000b692 sys_chown + 0x000000000000b70d sys_open + 0x000000000000b9b0 sys_creat + 0x000000000000b9d3 sys_close + 0x000000000000baa2 sys_lseek + 0x000000000000bbb9 sys_read + 0x000000000000bdac sys_write + 0x000000000000bfa5 invalidate_inodes + 0x000000000000c014 sync_inodes + 0x000000000000c457 bmap + 0x000000000000c47a create_block + 0x000000000000c49d iput + 0x000000000000c60c get_empty_inode + 0x000000000000c761 get_pipe_inode + 0x000000000000c7d6 iget + 0x000000000000cbd1 sys_sync + 0x000000000000cc34 sync_dev + 0x000000000000cd2d invalidate_buffers + 0x000000000000cd9f check_disk_change + 0x000000000000d06d get_hash_table + 0x000000000000d0ef getblk + 0x000000000000d28d brelse + 0x000000000000d2d6 bread + 0x000000000000d35b bread_page + 0x000000000000d47d breada + 0x000000000000d572 buffer_init + 0x000000000000d713 get_super + 0x000000000000d782 put_super + 0x000000000000db98 sys_umount + 0x000000000000dcf9 sys_mount + 0x000000000000de6a mount_root + 0x000000000000e09e block_write + 0x000000000000e1f0 block_read + 0x000000000000e55b rw_char + 0x000000000000e5eb file_read + 0x000000000000e796 file_write + 0x000000000000ea7f sys_stat + 0x000000000000eac9 sys_lstat + 0x000000000000eae4 sys_fstat + 0x000000000000eb41 sys_readlink + 0x000000000000ebf0 sys_uselib + 0x000000000000f0bf do_execve + 0x000000000000fb41 do_execve2 + 0x000000000001064c read_pipe + 0x00000000000107a2 write_pipe + 0x0000000000010921 sys_pipe + 0x0000000000011300 namei + 0x0000000000011416 open_namei + 0x0000000000011769 sys_mknod + 0x0000000000011999 sys_mkdir + 0x0000000000011f28 sys_rmdir + 0x0000000000012280 sys_unlink + 0x0000000000012521 sys_symlink + 0x0000000000012527 sys_link + 0x0000000000012781 free_block + 0x00000000000128f3 new_block + 0x0000000000012a97 free_inode + 0x0000000000012bfe new_inode + 0x0000000000012eb2 sys_dup2 + 0x0000000000012ed9 sys_dup + 0x0000000000012ef4 sys_fcntl + 0x0000000000013033 sys_ioctl + 0x0000000000013242 truncate + 0x0000000000013377 sys_select + .text 0x000000000001337d 0x46a kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x0000000000013740 ll_rw_block + 0x0000000000013799 blk_dev_init + .text 0x00000000000137e7 0xb9d kernel/blk_drv/blk_drv.a(floppy.o) + 0x00000000000138cd floppy_deselect + 0x0000000000013904 floppy_change + 0x0000000000013cc1 setup_rw_floppy + 0x0000000000013f5a unexpected_floppy_interrupt + 0x0000000000014332 floppy_init + .text 0x0000000000014384 0xc8f kernel/blk_drv/blk_drv.a(hd.o) + 0x0000000000014458 sys_setup + 0x0000000000014b07 unexpected_hd_interrupt + 0x0000000000014f99 hd_init + .text 0x0000000000015013 0x50c kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x000000000001521d rd_init + 0x0000000000015273 rd_load + .text 0x000000000001551f 0xcbb kernel/chr_drv/chr_drv.a(tty_io.o) + 0x0000000000015545 tty_init + 0x0000000000015556 tty_intr + 0x0000000000015663 wait_for_keypress + 0x0000000000015676 copy_to_cooked + 0x0000000000015c31 tty_read + 0x0000000000015f9f tty_write + 0x00000000000161b1 do_tty_interrupt + 0x00000000000161d9 chr_dev_init + .text 0x00000000000161da 0x1283 kernel/chr_drv/chr_drv.a(console.o) + 0x0000000000016777 csi_m + 0x0000000000016b11 con_write + 0x000000000001719f con_init + 0x00000000000173d6 sysbeepstop + .text 0x000000000001745d 0x7e2 kernel/chr_drv/chr_drv.a(keyboard.2.o) + 0x0000000000017460 keyboard_interrupt + .text 0x0000000000017c3f 0x145 kernel/chr_drv/chr_drv.a(serial.o) + 0x0000000000017cb4 rs_init + 0x0000000000017d37 rs_write + .text 0x0000000000017d84 0xf7 kernel/chr_drv/chr_drv.a(rs_io.o) + 0x0000000000017d84 rs1_interrupt + 0x0000000000017d8c rs2_interrupt + .text 0x0000000000017e7b 0x60f kernel/chr_drv/chr_drv.a(tty_ioctl.o) + 0x000000000001818c tty_ioctl + .text 0x000000000001848a 0x111 kernel/math/math.a(math_emulate.o) + 0x0000000000018498 math_emulate + 0x000000000001857b math_error + .text 0x000000000001859b 0x0 lib/lib.a(ctype.o) + .text 0x000000000001859b 0x10 lib/lib.a(_exit.o) + 0x000000000001859b _exit + .text 0x00000000000185ab 0x49 lib/lib.a(open.o) + 0x00000000000185ab open + .text 0x00000000000185f4 0x37 lib/lib.a(close.o) + 0x00000000000185f4 close + .text 0x000000000001862b 0x0 lib/lib.a(errno.o) + .text 0x000000000001862b 0x3d lib/lib.a(write.o) + 0x000000000001862b write + .text 0x0000000000018668 0x37 lib/lib.a(dup.o) + 0x0000000000018668 dup + .text 0x000000000001869f 0x2f lib/lib.a(setsid.o) + 0x000000000001869f setsid + .text 0x00000000000186ce 0x3d lib/lib.a(execve.o) + 0x00000000000186ce execve + .text 0x000000000001870b 0x60 lib/lib.a(wait.o) + 0x000000000001870b waitpid + 0x0000000000018748 wait + .text 0x000000000001876b 0x3dc lib/lib.a(string.o) + 0x000000000001876b strcpy + 0x0000000000018787 strncpy + 0x00000000000187ac strcat + 0x00000000000187d7 strncat + 0x000000000001880c strcmp + 0x0000000000018833 strncmp + 0x0000000000018861 strchr + 0x000000000001888e strrchr + 0x00000000000188bd strspn + 0x00000000000188fa strcspn + 0x0000000000018937 strpbrk + 0x000000000001896e strstr + 0x00000000000189a7 strlen + 0x00000000000189ca strtok + 0x0000000000018a4d memcpy + 0x0000000000018a6d memmove + 0x0000000000018ac1 memcmp + 0x0000000000018aeb memchr + 0x0000000000018b23 memset + *(.gnu.warning) + +.fini + *(SORT(.fini)) + 0x0000000000018b47 PROVIDE (__etext, .) + 0x0000000000018b47 PROVIDE (_etext, .) + 0x0000000000018b47 PROVIDE (etext, .) + +.rodata 0x0000000000018b48 0x13f2 + *(.rodata .rodata.* .gnu.linkonce.r.*) + .rodata 0x0000000000018b48 0xc9 init/main.o + *fill* 0x0000000000018c11 0x3 + .rodata 0x0000000000018c14 0x438 kernel/kernel.o + .rodata 0x000000000001904c 0x18f mm/mm.o + *fill* 0x00000000000191db 0x1 + .rodata 0x00000000000191dc 0x62c fs/fs.o + .rodata 0x0000000000019808 0x7a kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + *fill* 0x0000000000019882 0x2 + .rodata 0x0000000000019884 0x133 kernel/blk_drv/blk_drv.a(floppy.o) + *fill* 0x00000000000199b7 0x1 + .rodata 0x00000000000199b8 0x1a7 kernel/blk_drv/blk_drv.a(hd.o) + *fill* 0x0000000000019b5f 0x1 + .rodata 0x0000000000019b60 0x188 kernel/blk_drv/blk_drv.a(ramdisk.o) + .rodata 0x0000000000019ce8 0x17d kernel/chr_drv/chr_drv.a(console.o) + *fill* 0x0000000000019e65 0x3 + .rodata 0x0000000000019e68 0x80 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .rodata 0x0000000000019ee8 0x52 kernel/math/math.a(math_emulate.o) + +.rodata1 + *(.rodata1) + +.eh_frame_hdr + *(.eh_frame_hdr) + +.eh_frame 0x0000000000019f3c 0x2b8c + *(.eh_frame) + .eh_frame 0x0000000000019f3c 0x108 init/main.o + .eh_frame 0x000000000001a044 0xbb8 kernel/kernel.o + 0xca8 (size before relaxing) + .eh_frame 0x000000000001abfc 0x1b0 mm/mm.o + 0x1c8 (size before relaxing) + .eh_frame 0x000000000001adac 0xe10 fs/fs.o + 0xfa8 (size before relaxing) + .eh_frame 0x000000000001bbbc 0x98 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0xb0 (size before relaxing) + .eh_frame 0x000000000001bc54 0x23c kernel/blk_drv/blk_drv.a(floppy.o) + 0x254 (size before relaxing) + .eh_frame 0x000000000001be90 0x1e8 kernel/blk_drv/blk_drv.a(hd.o) + 0x200 (size before relaxing) + .eh_frame 0x000000000001c078 0xac kernel/blk_drv/blk_drv.a(ramdisk.o) + 0xc4 (size before relaxing) + .eh_frame 0x000000000001c124 0x12c kernel/chr_drv/chr_drv.a(tty_io.o) + 0x144 (size before relaxing) + .eh_frame 0x000000000001c250 0x2c0 kernel/chr_drv/chr_drv.a(console.o) + 0x2d8 (size before relaxing) + .eh_frame 0x000000000001c510 0x54 kernel/chr_drv/chr_drv.a(serial.o) + 0x6c (size before relaxing) + .eh_frame 0x000000000001c564 0x148 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + 0x160 (size before relaxing) + .eh_frame 0x000000000001c6ac 0x5c kernel/math/math.a(math_emulate.o) + 0x74 (size before relaxing) + .eh_frame 0x000000000001c708 0x1c lib/lib.a(_exit.o) + 0x34 (size before relaxing) + .eh_frame 0x000000000001c724 0x24 lib/lib.a(open.o) + 0x3c (size before relaxing) + .eh_frame 0x000000000001c748 0x20 lib/lib.a(close.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001c768 0x20 lib/lib.a(write.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001c788 0x20 lib/lib.a(dup.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001c7a8 0x18 lib/lib.a(setsid.o) + 0x30 (size before relaxing) + .eh_frame 0x000000000001c7c0 0x20 lib/lib.a(execve.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001c7e0 0x38 lib/lib.a(wait.o) + 0x50 (size before relaxing) + .eh_frame 0x000000000001c818 0x2b0 lib/lib.a(string.o) + 0x2c8 (size before relaxing) + +.gcc_except_table + *(.gcc_except_table .gcc_except_table.*) + +.exception_ranges + *(.exception_ranges .exception_ranges*) + 0x000000000001cac8 . = . + +.eh_frame + *(.eh_frame) + +.gcc_except_table + *(.gcc_except_table .gcc_except_table.*) + +.exception_ranges + *(.exception_ranges .exception_ranges*) + +.tdata + *(.tdata .tdata.* .gnu.linkonce.td.*) + +.tbss + *(.tbss .tbss.* .gnu.linkonce.tb.*) + *(.tcommon) + +.preinit_array 0x000000000001cac8 0x0 + 0x000000000001cac8 PROVIDE (__preinit_array_start, .) + *(.preinit_array) + 0x000000000001cac8 PROVIDE (__preinit_array_end, .) + +.init_array 0x000000000001cac8 0x0 + 0x000000000001cac8 PROVIDE (__init_array_start, .) + *(SORT(.init_array.*) SORT(.ctors.*)) + *(.init_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .ctors) + 0x000000000001cac8 PROVIDE (__init_array_end, .) + +.fini_array 0x000000000001cac8 0x0 + 0x000000000001cac8 PROVIDE (__fini_array_start, .) + *(SORT(.fini_array.*) SORT(.dtors.*)) + *(.fini_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .dtors) + 0x000000000001cac8 PROVIDE (__fini_array_end, .) + +.ctors + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + +.dtors + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + +.jcr + *(.jcr) + +.data.rel.ro + *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) + *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) + +.dynamic + *(.dynamic) + +.got + *(.got) + *(.igot) + +.got.plt 0x000000000001cac8 0x0 + *(.got.plt) + *(.igot.plt) + .igot.plt 0x0000000000000000 0x0 boot/head.o + +.data 0x000000000001cae0 0x3b21 + *(.data .data.* .gnu.linkonce.d.*) + .data 0x000000000001cae0 0x0 boot/head.o + .data 0x000000000001cae0 0x28 init/main.o + *fill* 0x000000000001cb08 0x18 + .data 0x000000000001cb20 0x1330 kernel/kernel.o + 0x000000000001cb20 sys_call_table + 0x000000000001cc9c NR_syscalls + 0x000000000001dca0 current + 0x000000000001dcc0 task + 0x000000000001ddc0 stack_start + 0x000000000001ddc8 current_DOR + .data 0x000000000001de50 0x0 mm/mm.o + *fill* 0x000000000001de50 0x10 + .data 0x000000000001de60 0x60 fs/fs.o + 0x000000000001de64 start_buffer + .data 0x000000000001dec0 0x0 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .data 0x000000000001dec0 0xcd kernel/blk_drv/blk_drv.a(floppy.o) + *fill* 0x000000000001df8d 0x3 + .data 0x000000000001df90 0x4 kernel/blk_drv/blk_drv.a(hd.o) + .data 0x000000000001df94 0x0 kernel/blk_drv/blk_drv.a(ramdisk.o) + *fill* 0x000000000001df94 0xc + .data 0x000000000001dfa0 0x2538 kernel/chr_drv/chr_drv.a(tty_io.o) + 0x000000000001dfa0 tty_table + 0x00000000000204c0 table_list + .data 0x00000000000204d8 0x1 kernel/chr_drv/chr_drv.a(console.o) + .data 0x00000000000204d9 0x0 kernel/chr_drv/chr_drv.a(keyboard.2.o) + .data 0x00000000000204d9 0x0 kernel/chr_drv/chr_drv.a(serial.o) + .data 0x00000000000204d9 0x0 kernel/chr_drv/chr_drv.a(rs_io.o) + *fill* 0x00000000000204d9 0x7 + .data 0x00000000000204e0 0x20 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .data 0x0000000000020500 0x0 kernel/math/math.a(math_emulate.o) + .data 0x0000000000020500 0x101 lib/lib.a(ctype.o) + 0x0000000000020500 _ctype + .data 0x0000000000020601 0x0 lib/lib.a(_exit.o) + .data 0x0000000000020601 0x0 lib/lib.a(open.o) + .data 0x0000000000020601 0x0 lib/lib.a(close.o) + .data 0x0000000000020601 0x0 lib/lib.a(errno.o) + .data 0x0000000000020601 0x0 lib/lib.a(write.o) + .data 0x0000000000020601 0x0 lib/lib.a(dup.o) + .data 0x0000000000020601 0x0 lib/lib.a(setsid.o) + .data 0x0000000000020601 0x0 lib/lib.a(execve.o) + .data 0x0000000000020601 0x0 lib/lib.a(wait.o) + .data 0x0000000000020601 0x0 lib/lib.a(string.o) + +.data1 + *(.data1) + 0x0000000000020601 _edata = . + 0x0000000000020601 PROVIDE (edata, .) + 0x0000000000020601 . = . + 0x0000000000020601 __bss_start = . + +.bss 0x0000000000020620 0x44b0 + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + .bss 0x0000000000020620 0x0 boot/head.o + .bss 0x0000000000020620 0x40c init/main.o + *fill* 0x0000000000020a2c 0x14 + .bss 0x0000000000020a40 0x760 kernel/kernel.o + 0x0000000000020a40 jiffies + 0x0000000000020a44 startup_time + 0x0000000000020a48 last_task_used_math + 0x0000000000020d84 last_pid + .bss 0x00000000000211a0 0xf20 mm/mm.o + .bss 0x00000000000220c0 0x710 fs/fs.o + 0x00000000000220c0 inode_table + 0x00000000000227c0 nr_buffers + 0x00000000000227cc ROOT_DEV + *fill* 0x00000000000227d0 0x10 + .bss 0x00000000000227e0 0x58 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x00000000000227e0 wait_for_request + 0x0000000000022800 blk_dev + .bss 0x0000000000022838 0x25 kernel/blk_drv/blk_drv.a(floppy.o) + 0x0000000000022838 do_floppy + 0x000000000002283c selected + 0x0000000000022840 wait_on_floppy_select + *fill* 0x000000000002285d 0x3 + .bss 0x0000000000022860 0xb0 kernel/blk_drv/blk_drv.a(hd.o) + 0x0000000000022860 do_hd + 0x0000000000022880 hd_info + .bss 0x0000000000022910 0x4 kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x0000000000022910 rd_length + .bss 0x0000000000022914 0x4 kernel/chr_drv/chr_drv.a(tty_io.o) + *fill* 0x0000000000022918 0x8 + .bss 0x0000000000022920 0xac kernel/chr_drv/chr_drv.a(console.o) + 0x0000000000022920 beepcount + .bss 0x00000000000229cc 0x0 kernel/chr_drv/chr_drv.a(keyboard.2.o) + .bss 0x00000000000229cc 0x0 kernel/chr_drv/chr_drv.a(serial.o) + .bss 0x00000000000229cc 0x0 kernel/chr_drv/chr_drv.a(rs_io.o) + .bss 0x00000000000229cc 0x0 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .bss 0x00000000000229cc 0x0 kernel/math/math.a(math_emulate.o) + .bss 0x00000000000229cc 0x0 lib/lib.a(ctype.o) + .bss 0x00000000000229cc 0x0 lib/lib.a(_exit.o) + .bss 0x00000000000229cc 0x0 lib/lib.a(open.o) + .bss 0x00000000000229cc 0x0 lib/lib.a(close.o) + .bss 0x00000000000229cc 0x0 lib/lib.a(errno.o) + .bss 0x00000000000229cc 0x0 lib/lib.a(write.o) + .bss 0x00000000000229cc 0x0 lib/lib.a(dup.o) + .bss 0x00000000000229cc 0x0 lib/lib.a(setsid.o) + .bss 0x00000000000229cc 0x0 lib/lib.a(execve.o) + .bss 0x00000000000229cc 0x0 lib/lib.a(wait.o) + .bss 0x00000000000229cc 0x0 lib/lib.a(string.o) + *(COMMON) + *fill* 0x00000000000229cc 0x14 + COMMON 0x00000000000229e0 0x20 init/main.o + 0x00000000000229e0 drive_info + COMMON 0x0000000000022a00 0x1000 kernel/kernel.o + 0x0000000000022a00 user_stack + COMMON 0x0000000000023a00 0xc40 fs/fs.o + 0x0000000000023a00 hash_table + 0x0000000000023ee0 super_block + 0x0000000000024240 file_table + COMMON 0x0000000000024640 0x480 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x0000000000024640 request + COMMON 0x0000000000024ac0 0x4 kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x0000000000024ac0 rd_start + COMMON 0x0000000000024ac4 0x1 lib/lib.a(ctype.o) + 0x0000000000024ac4 _ctmp + *fill* 0x0000000000024ac5 0x3 + COMMON 0x0000000000024ac8 0x4 lib/lib.a(errno.o) + 0x0000000000024ac8 errno + COMMON 0x0000000000024acc 0x4 lib/lib.a(string.o) + 0x0000000000024acc ___strtok + 0x0000000000024ad0 . = ALIGN ((. != 0x0)?0x4:0x1) + 0x0000000000024ad0 . = ALIGN (0x4) + 0x0000000000024ad0 . = SEGMENT_START ("ldata-segment", .) + 0x0000000000024ad0 . = ALIGN (0x4) + 0x0000000000024ad0 _end = . + 0x0000000000024ad0 PROVIDE (end, .) + +.stab + *(.stab) + +.stabstr + *(.stabstr) + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x0000000000000000 0x29 + *(.comment) + .comment 0x0000000000000000 0x29 init/main.o + 0x2a (size before relaxing) + .comment 0x0000000000000000 0x1a4 kernel/kernel.o + .comment 0x0000000000000000 0x2a mm/mm.o + .comment 0x0000000000000000 0x2f4 fs/fs.o + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(floppy.o) + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(hd.o) + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(ramdisk.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(tty_io.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(console.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(serial.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .comment 0x0000000000000000 0x2a kernel/math/math.a(math_emulate.o) + .comment 0x0000000000000000 0x2a lib/lib.a(ctype.o) + .comment 0x0000000000000000 0x2a lib/lib.a(_exit.o) + .comment 0x0000000000000000 0x2a lib/lib.a(open.o) + .comment 0x0000000000000000 0x2a lib/lib.a(close.o) + .comment 0x0000000000000000 0x2a lib/lib.a(errno.o) + .comment 0x0000000000000000 0x2a lib/lib.a(write.o) + .comment 0x0000000000000000 0x2a lib/lib.a(dup.o) + .comment 0x0000000000000000 0x2a lib/lib.a(setsid.o) + .comment 0x0000000000000000 0x2a lib/lib.a(execve.o) + .comment 0x0000000000000000 0x2a lib/lib.a(wait.o) + .comment 0x0000000000000000 0x2a lib/lib.a(string.o) + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x0000000000000000 0x628 + *(.debug_aranges) + .debug_aranges + 0x0000000000000000 0x20 init/main.o + .debug_aranges + 0x0000000000000020 0x140 kernel/kernel.o + .debug_aranges + 0x0000000000000160 0x20 mm/mm.o + .debug_aranges + 0x0000000000000180 0x238 fs/fs.o + .debug_aranges + 0x00000000000003b8 0x20 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_aranges + 0x00000000000003d8 0x20 kernel/blk_drv/blk_drv.a(floppy.o) + .debug_aranges + 0x00000000000003f8 0x20 kernel/blk_drv/blk_drv.a(hd.o) + .debug_aranges + 0x0000000000000418 0x20 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_aranges + 0x0000000000000438 0x20 kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_aranges + 0x0000000000000458 0x20 kernel/chr_drv/chr_drv.a(console.o) + .debug_aranges + 0x0000000000000478 0x20 kernel/chr_drv/chr_drv.a(serial.o) + .debug_aranges + 0x0000000000000498 0x20 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_aranges + 0x00000000000004b8 0x20 kernel/math/math.a(math_emulate.o) + .debug_aranges + 0x00000000000004d8 0x18 lib/lib.a(ctype.o) + .debug_aranges + 0x00000000000004f0 0x20 lib/lib.a(_exit.o) + .debug_aranges + 0x0000000000000510 0x20 lib/lib.a(open.o) + .debug_aranges + 0x0000000000000530 0x20 lib/lib.a(close.o) + .debug_aranges + 0x0000000000000550 0x18 lib/lib.a(errno.o) + .debug_aranges + 0x0000000000000568 0x20 lib/lib.a(write.o) + .debug_aranges + 0x0000000000000588 0x20 lib/lib.a(dup.o) + .debug_aranges + 0x00000000000005a8 0x20 lib/lib.a(setsid.o) + .debug_aranges + 0x00000000000005c8 0x20 lib/lib.a(execve.o) + .debug_aranges + 0x00000000000005e8 0x20 lib/lib.a(wait.o) + .debug_aranges + 0x0000000000000608 0x20 lib/lib.a(string.o) + +.debug_pubnames + *(.debug_pubnames) + +.debug_info 0x0000000000000000 0x179eb + *(.debug_info .gnu.linkonce.wi.*) + .debug_info 0x0000000000000000 0xb73 init/main.o + .debug_info 0x0000000000000b73 0x50d9 kernel/kernel.o + .debug_info 0x0000000000005c4c 0xba8 mm/mm.o + .debug_info 0x00000000000067f4 0xa498 fs/fs.o + .debug_info 0x0000000000010c8c 0x932 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_info 0x00000000000115be 0xc9f kernel/blk_drv/blk_drv.a(floppy.o) + .debug_info 0x000000000001225d 0xd5f kernel/blk_drv/blk_drv.a(hd.o) + .debug_info 0x0000000000012fbc 0xad5 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_info 0x0000000000013a91 0xacd kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_info 0x000000000001455e 0xdb0 kernel/chr_drv/chr_drv.a(console.o) + .debug_info 0x000000000001530e 0x85c kernel/chr_drv/chr_drv.a(serial.o) + .debug_info 0x0000000000015b6a 0xb47 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_info 0x00000000000166b1 0x7b5 kernel/math/math.a(math_emulate.o) + .debug_info 0x0000000000016e66 0x66 lib/lib.a(ctype.o) + .debug_info 0x0000000000016ecc 0x77 lib/lib.a(_exit.o) + .debug_info 0x0000000000016f43 0xd0 lib/lib.a(open.o) + .debug_info 0x0000000000017013 0x97 lib/lib.a(close.o) + .debug_info 0x00000000000170aa 0x36 lib/lib.a(errno.o) + .debug_info 0x00000000000170e0 0xc9 lib/lib.a(write.o) + .debug_info 0x00000000000171a9 0x97 lib/lib.a(dup.o) + .debug_info 0x0000000000017240 0x95 lib/lib.a(setsid.o) + .debug_info 0x00000000000172d5 0xcb lib/lib.a(execve.o) + .debug_info 0x00000000000173a0 0xed lib/lib.a(wait.o) + .debug_info 0x000000000001748d 0x55e lib/lib.a(string.o) + +.debug_abbrev 0x0000000000000000 0x44d1 + *(.debug_abbrev) + .debug_abbrev 0x0000000000000000 0x237 init/main.o + .debug_abbrev 0x0000000000000237 0xfb8 kernel/kernel.o + .debug_abbrev 0x00000000000011ef 0x20b mm/mm.o + .debug_abbrev 0x00000000000013fa 0x1a50 fs/fs.o + .debug_abbrev 0x0000000000002e4a 0x169 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_abbrev 0x0000000000002fb3 0x27d kernel/blk_drv/blk_drv.a(floppy.o) + .debug_abbrev 0x0000000000003230 0x23c kernel/blk_drv/blk_drv.a(hd.o) + .debug_abbrev 0x000000000000346c 0x1a8 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_abbrev 0x0000000000003614 0x279 kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_abbrev 0x000000000000388d 0x26b kernel/chr_drv/chr_drv.a(console.o) + .debug_abbrev 0x0000000000003af8 0x175 kernel/chr_drv/chr_drv.a(serial.o) + .debug_abbrev 0x0000000000003c6d 0x18d kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_abbrev 0x0000000000003dfa 0x163 kernel/math/math.a(math_emulate.o) + .debug_abbrev 0x0000000000003f5d 0x3e lib/lib.a(ctype.o) + .debug_abbrev 0x0000000000003f9b 0x51 lib/lib.a(_exit.o) + .debug_abbrev 0x0000000000003fec 0x97 lib/lib.a(open.o) + .debug_abbrev 0x0000000000004083 0x75 lib/lib.a(close.o) + .debug_abbrev 0x00000000000040f8 0x2c lib/lib.a(errno.o) + .debug_abbrev 0x0000000000004124 0xa1 lib/lib.a(write.o) + .debug_abbrev 0x00000000000041c5 0x75 lib/lib.a(dup.o) + .debug_abbrev 0x000000000000423a 0x73 lib/lib.a(setsid.o) + .debug_abbrev 0x00000000000042ad 0x85 lib/lib.a(execve.o) + .debug_abbrev 0x0000000000004332 0xb6 lib/lib.a(wait.o) + .debug_abbrev 0x00000000000043e8 0xe9 lib/lib.a(string.o) + +.debug_line 0x0000000000000000 0x483d + *(.debug_line .debug_line.* .debug_line_end) + .debug_line 0x0000000000000000 0x1e5 init/main.o + .debug_line 0x00000000000001e5 0xf17 kernel/kernel.o + .debug_line 0x00000000000010fc 0x2b0 mm/mm.o + .debug_line 0x00000000000013ac 0x1de9 fs/fs.o + .debug_line 0x0000000000003195 0x197 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_line 0x000000000000332c 0x24c kernel/blk_drv/blk_drv.a(floppy.o) + .debug_line 0x0000000000003578 0x2bf kernel/blk_drv/blk_drv.a(hd.o) + .debug_line 0x0000000000003837 0x160 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_line 0x0000000000003997 0x33b kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_line 0x0000000000003cd2 0x3ab kernel/chr_drv/chr_drv.a(console.o) + .debug_line 0x000000000000407d 0xd9 kernel/chr_drv/chr_drv.a(serial.o) + .debug_line 0x0000000000004156 0x1db kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_line 0x0000000000004331 0xe1 kernel/math/math.a(math_emulate.o) + .debug_line 0x0000000000004412 0x28 lib/lib.a(ctype.o) + .debug_line 0x000000000000443a 0x39 lib/lib.a(_exit.o) + .debug_line 0x0000000000004473 0x62 lib/lib.a(open.o) + .debug_line 0x00000000000044d5 0x5c lib/lib.a(close.o) + .debug_line 0x0000000000004531 0x28 lib/lib.a(errno.o) + .debug_line 0x0000000000004559 0x76 lib/lib.a(write.o) + .debug_line 0x00000000000045cf 0x5a lib/lib.a(dup.o) + .debug_line 0x0000000000004629 0x77 lib/lib.a(setsid.o) + .debug_line 0x00000000000046a0 0x5d lib/lib.a(execve.o) + .debug_line 0x00000000000046fd 0x7a lib/lib.a(wait.o) + .debug_line 0x0000000000004777 0xc6 lib/lib.a(string.o) + +.debug_frame + *(.debug_frame) + +.debug_str 0x0000000000000000 0x21cb + *(.debug_str) + .debug_str 0x0000000000000000 0x3ba init/main.o + 0x45d (size before relaxing) + .debug_str 0x00000000000003ba 0xa04 kernel/kernel.o + 0x243f (size before relaxing) + .debug_str 0x0000000000000dbe 0x18a mm/mm.o + 0x4e5 (size before relaxing) + .debug_str 0x0000000000000f48 0x8b5 fs/fs.o + 0x4947 (size before relaxing) + .debug_str 0x00000000000017fd 0xe9 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x48a (size before relaxing) + .debug_str 0x00000000000018e6 0x1cf kernel/blk_drv/blk_drv.a(floppy.o) + 0x66c (size before relaxing) + .debug_str 0x0000000000001ab5 0x15e kernel/blk_drv/blk_drv.a(hd.o) + 0x5e1 (size before relaxing) + .debug_str 0x0000000000001c13 0x77 kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x586 (size before relaxing) + .debug_str 0x0000000000001c8a 0xf4 kernel/chr_drv/chr_drv.a(tty_io.o) + 0x4dc (size before relaxing) + .debug_str 0x0000000000001d7e 0x1b9 kernel/chr_drv/chr_drv.a(console.o) + 0x5b0 (size before relaxing) + .debug_str 0x0000000000001f37 0x1a kernel/chr_drv/chr_drv.a(serial.o) + 0x3f5 (size before relaxing) + .debug_str 0x0000000000001f51 0x8b kernel/chr_drv/chr_drv.a(tty_ioctl.o) + 0x4a0 (size before relaxing) + .debug_str 0x0000000000001fdc 0x6c kernel/math/math.a(math_emulate.o) + 0x38e (size before relaxing) + .debug_str 0x0000000000002048 0x89 lib/lib.a(ctype.o) + 0xb2 (size before relaxing) + .debug_str 0x00000000000020d1 0x2e lib/lib.a(_exit.o) + 0xdb (size before relaxing) + .debug_str 0x0000000000000000 0x2e lib/lib.a(open.o) + 0xeb (size before relaxing) + .debug_str 0x00000000000020ff 0x8 lib/lib.a(close.o) + 0xdd (size before relaxing) + .debug_str 0x0000000000002107 0x8 lib/lib.a(errno.o) + 0x8f (size before relaxing) + .debug_str 0x0000000000000000 0x8 lib/lib.a(write.o) + 0xe9 (size before relaxing) + .debug_str 0x000000000000210f 0x6 lib/lib.a(dup.o) + 0xd5 (size before relaxing) + .debug_str 0x0000000000002115 0x9 lib/lib.a(setsid.o) + 0xe5 (size before relaxing) + .debug_str 0x000000000000211e 0x9 lib/lib.a(execve.o) + 0xee (size before relaxing) + .debug_str 0x0000000000002127 0x11 lib/lib.a(wait.o) + 0xfb (size before relaxing) + .debug_str 0x0000000000002138 0x93 lib/lib.a(string.o) + 0x143 (size before relaxing) + +.debug_loc + *(.debug_loc) + +.debug_macinfo + *(.debug_macinfo) + +.debug_weaknames + *(.debug_weaknames) + +.debug_funcnames + *(.debug_funcnames) + +.debug_typenames + *(.debug_typenames) + +.debug_varnames + *(.debug_varnames) + +.debug_pubtypes + *(.debug_pubtypes) + +.debug_ranges 0x0000000000000000 0x18 + *(.debug_ranges) + .debug_ranges 0x0000000000000000 0x18 init/main.o + +.debug_macro + *(.debug_macro) + +.gnu.attributes + *(.gnu.attributes) + +/DISCARD/ + *(.note.GNU-stack) + *(.gnu_debuglink) + *(.gnu.lto_*) +OUTPUT(tools/system elf32-i386) diff --git a/linux/boot/bootsect b/linux/boot/bootsect new file mode 100644 index 0000000000000000000000000000000000000000..4fbb8f823afe23687f1887d48deeb19fdcf83049 GIT binary patch literal 544 zcmZQ%7GP0e00JfufdrZ$>>UT#`)=%Dn9z4%Cj+DAH_iW_m%fre~uHUSwNXN9*i=ymehGJ;Ln!ff#WtiVnQ zhTZH8d+ix_Fbba)*ufysci@E)!;7N~dJF$B+A=VditBaD0d;UNHUH)>;o2bsq=ibD zUjNfu{D<)s1B1c@RhzFW-(_8 zyWs)N8wX!-zAym_G6SXbtl4ZCONDkYGHA2SVkl+#&o+l)@hk?z1B+)cfHa*h-qdq| z733tt+pm`g1P2Cni_Kx^=9|Ib*m1R6Y!*YuwM`6-j~E!Y0DW7;8WkBGaTw@dps&vg zgE+6x1nv67yn*3e)L{k&UM`>f#FWgubcN!|;*!){1wB1IUM^lPq<|j0Og84wRRH+h BgWdoD literal 0 HcmV?d00001 diff --git a/linux/boot/bootsect.o b/linux/boot/bootsect.o new file mode 100644 index 0000000000000000000000000000000000000000..e35422ec017a165928bfcbec5f9f0363b4a9e75c GIT binary patch literal 923 zcmYjPe@GKy7=FH+PB$=@gOrLGSb;@HGl?KZQ#V8qHK&qRjLn^EOg*`~_2a*bAQEj2 z`bR7R8DjO1Ax5YD;D!W64T2~X>5mFT9P~#*1c~eYW`BB3fn$y+MeVjqc)FB7D{5ZwQc zlnx;W9UDX^enV$llvLXoyfYO9Z}$=84ic;$V`O7tS=LmkPeZ`p+0`EKHzCjy2sHQl zw}lpeD-uHysXwTY5sDOw1Y=|-4_TXAn>%^rd%=iw84Yc11;O9ydW>fq~$ltjP-a7_y>584mLI>~!sq4M`D5Ly@qm@(>AWA%vwU zr%{<_+X|nde;^cvTBwf1Bxp*gFV1T;>8i$^g?NcKSG5q0@!xcE+`au;IbOSyoY+a~ z{!PR`f4ixx+SO^8CCMcNsiZj%R`aVSzcIBg=v7dW8hevmN}95U=#^i zr)no|09j{lb(WIStn(?vkzMq|I|{AlEXVU%$9xr@m*6E`j|&EKW*r6`Npr0hYp)?r zZZZ#$s1!#JP?cts3OD|gYj$Hl#R^TxZHehkwhp*b#dJ@BG4oNrJhA0o88bcbDr`}l zq`HQqR(%{jBbm%s8(UUwT8Z1NS<0;0*6J{lvGC1C@wAnkO^FJFf$S6TC5rM^{XXi` zL>k>@nq232gLmrem|4t+bg$&5+XH7iM)#1fVRRQc{Pnj!5uJed*5_GV{{}WkC!rMg z_MAVrNM}JOl67*Dd*89})A9sAdKZB*dkfv2*ih7^UQ;z`&?SnZugqR%-#z8CTDl%r F<1c(7E-?TA literal 0 HcmV?d00001 diff --git a/linux/boot/bootsect.s b/linux/boot/bootsect.s new file mode 100644 index 0000000..711f103 --- /dev/null +++ b/linux/boot/bootsect.s @@ -0,0 +1,260 @@ +! +! SYS_SIZE is the number of clicks (16 bytes) to be loaded. +! 0x3000 is 0x30000 bytes = 196kB, more than enough for current +! versions of linux +! +SYSSIZE = 0x3000 +! +! bootsect.s (C) 1991 Linus Torvalds +! +! bootsect.s is loaded at 0x7c00 by the bios-startup routines, and moves +! iself out of the way to address 0x90000, and jumps there. +! +! It then loads 'setup' directly after itself (0x90200), and the system +! at 0x10000, using BIOS interrupts. +! +! NOTE! currently system is at most 8*65536 bytes long. This should be no +! problem, even in the future. I want to keep it simple. This 512 kB +! kernel size should be enough, especially as this doesn't contain the +! buffer cache as in minix +! +! The loader has been made as simple as possible, and continuos +! read errors will result in a unbreakable loop. Reboot by hand. It +! loads pretty fast by getting whole sectors at a time whenever possible. + +.globl begtext, begdata, begbss, endtext, enddata, endbss +.text +begtext: +.data +begdata: +.bss +begbss: +.text + +SETUPLEN = 4 ! nr of setup-sectors +BOOTSEG = 0x07c0 ! original address of boot-sector +INITSEG = 0x9000 ! we move boot here - out of the way +SETUPSEG = 0x9020 ! setup starts here +SYSSEG = 0x1000 ! system loaded at 0x10000 (65536). +ENDSEG = SYSSEG + SYSSIZE ! where to stop loading + +! ROOT_DEV: 0x000 - same type of floppy as boot. +! 0x301 - first partition on first drive etc +ROOT_DEV = 0x306 + +entry start +start: + mov ax,#BOOTSEG + mov ds,ax + mov ax,#INITSEG + mov es,ax + mov cx,#256 + sub si,si + sub di,di + rep + movw + jmpi go,INITSEG +go: mov ax,cs + mov ds,ax + mov es,ax +! put stack at 0x9ff00. + mov ss,ax + mov sp,#0xFF00 ! arbitrary value >>512 + +! load the setup-sectors directly after the bootblock. +! Note that 'es' is already set up. + +load_setup: + mov dx,#0x0000 ! drive 0, head 0 + mov cx,#0x0002 ! sector 2, track 0 + mov bx,#0x0200 ! address = 512, in INITSEG + mov ax,#0x0200+SETUPLEN ! service 2, nr of sectors + int 0x13 ! read it + jnc ok_load_setup ! ok - continue + mov dx,#0x0000 + mov ax,#0x0000 ! reset the diskette + int 0x13 + j load_setup + +ok_load_setup: + +! Get disk drive parameters, specifically nr of sectors/track + + mov dl,#0x00 + mov ax,#0x0800 ! AH=8 is get drive parameters + int 0x13 + mov ch,#0x00 + seg cs + mov sectors,cx + mov ax,#INITSEG + mov es,ax + +! Print some inane message + + mov ah,#0x03 ! read cursor pos + xor bh,bh + int 0x10 + + mov cx,#24 + mov bx,#0x0007 ! page 0, attribute 7 (normal) + mov bp,#msg1 + mov ax,#0x1301 ! write string, move cursor + int 0x10 + +! ok, we've written the message, now +! we want to load the system (at 0x10000) + + mov ax,#SYSSEG + mov es,ax ! segment of 0x010000 + call read_it + call kill_motor + +! After that we check which root-device to use. If the device is +! defined (!= 0), nothing is done and the given device is used. +! Otherwise, either /dev/PS0 (2,28) or /dev/at0 (2,8), depending +! on the number of sectors that the BIOS reports currently. + + seg cs + mov ax,root_dev + cmp ax,#0 + jne root_defined + seg cs + mov bx,sectors + mov ax,#0x0208 ! /dev/ps0 - 1.2Mb + cmp bx,#15 + je root_defined + mov ax,#0x021c ! /dev/PS0 - 1.44Mb + cmp bx,#18 + je root_defined +undef_root: + jmp undef_root +root_defined: + seg cs + mov root_dev,ax + +! after that (everyting loaded), we jump to +! the setup-routine loaded directly after +! the bootblock: + + jmpi 0,SETUPSEG + +! This routine loads the system at address 0x10000, making sure +! no 64kB boundaries are crossed. We try to load it as fast as +! possible, loading whole tracks whenever we can. +! +! in: es - starting address segment (normally 0x1000) +! +sread: .word 1+SETUPLEN ! sectors read of current track +head: .word 0 ! current head +track: .word 0 ! current track + +read_it: + mov ax,es + test ax,#0x0fff +die: jne die ! es must be at 64kB boundary + xor bx,bx ! bx is starting address within segment +rp_read: + mov ax,es + cmp ax,#ENDSEG ! have we loaded all yet? + jb ok1_read + ret +ok1_read: + seg cs + mov ax,sectors + sub ax,sread + mov cx,ax + shl cx,#9 + add cx,bx + jnc ok2_read + je ok2_read + xor ax,ax + sub ax,bx + shr ax,#9 +ok2_read: + call read_track + mov cx,ax + add ax,sread + seg cs + cmp ax,sectors + jne ok3_read + mov ax,#1 + sub ax,head + jne ok4_read + inc track +ok4_read: + mov head,ax + xor ax,ax +ok3_read: + mov sread,ax + shl cx,#9 + add bx,cx + jnc rp_read + mov ax,es + add ax,#0x1000 + mov es,ax + xor bx,bx + jmp rp_read + +read_track: + push ax + push bx + push cx + push dx + mov dx,track + mov cx,sread + inc cx + mov ch,dl + mov dx,head + mov dh,dl + mov dl,#0 + and dx,#0x0100 + mov ah,#2 + int 0x13 + jc bad_rt + pop dx + pop cx + pop bx + pop ax + ret +bad_rt: mov ax,#0 + mov dx,#0 + int 0x13 + pop dx + pop cx + pop bx + pop ax + jmp read_track + +/* + * This procedure turns off the floppy drive motor, so + * that we enter the kernel in a known state, and + * don't have to worry about it later. + */ +kill_motor: + push dx + mov dx,#0x3f2 + mov al,#0 + outb + pop dx + ret + +sectors: + .word 0 + +msg1: + .byte 13,10 + .ascii "Loading system ..." + .byte 13,10,13,10 + +.org 508 +root_dev: + .word ROOT_DEV +boot_flag: + .word 0xAA55 + +.text +endtext: +.data +enddata: +.bss +endbss: diff --git a/linux/boot/head.o b/linux/boot/head.o new file mode 100644 index 0000000000000000000000000000000000000000..a4c55649c84336692e2f017e7d3b9dc5fd3082ba GIT binary patch literal 27012 zcmeI5O=ule7>2)-rn#v$OwS%uL!8 z6a%qn7P*Sc3jRisn&iB4& z&iUrdGdG*FIOn4m54>cIk-Qk$Ah(^!ke}VzorWRlmW`=8*Nf1++Dw|)n=8(lL2X<) zq}4H0_qtn3hEHg(eMrzN@gL4WGWd|l-26`+&h}(Q)Bb+)4UucVe)-Gw{Sx<}!~D%I z+*?{aEZ2TpTI?Ts6R8Drs4QHmT#)ACbDHqHPI#fPaIkZJx%=grzZ~<#59qk$nEtaG zwGRskkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@{I3YSFZx$|7#nQXbmBLjzwysojfuwek;Xv15&K~{ z6T}bn$jEE2Z|!ovS+gN%tq)^XR$HyssPk=M+o88dFJpht^U^0$N=mKOKTj>|UZ7II z4x`H(J5>#+>Q=Qw)n--0B9~TQ#eSfLn=SeK)YI5gR6e{_N}TOiv2kb*y3Aqg&{f?# zRHRiv)sBntlbK~r0wh2JBtQZrur3L-9K81NMAG<0vMw3$rAdGUNPq-LVBHWXMn|V& zZ%m3&9A>eWtI(e;#{O(9#j+QBQXGq-`^K^jJ@x#QE<0i`Vp6sSL02)fJdSHqsHM(blD3iP(3Pv78q7&_8 zM*5-k_?fI2(eEHwXv&I_5`-Qfll%P;pXV0YUx3zAW3po86$m{&CikN%^o7%6cM$*qTtc_Ysx=5yrWmz#Y0Wq@1&%*1%SXPY8K_u4qV*JPI(}(IbjC`7P zOl$R@sT#=|)qkDIv{wK99Ukv?m%n(Im&lK20=Hg{t*Sze*ZlDbcXsa{@hVv2a|5sH zyZGms^dqTP8`GihV(m}Dz>RbuF1PGQ!HL`fm@lJ4uYeu7y6z=u@~z6cI{M&Nu>=k<<%P!gh--%^>djmB1Ic# zG~x&OiAMa0zq0GKeRF1UbBAE`q28r)_-9Aob|_S NJgpJWKc}%z4Mb on a 4Mb machine). + * + * NOTE! Although all physical memory should be identity + * mapped by this routine, only the kernel page functions + * use the >1Mb addresses directly. All "normal" functions + * use just the lower 1Mb, or the local data space, which + * will be mapped to some other place - mm keeps track of + * that. + * + * For those with more memory than 16 Mb - tough luck. I've + * not got it, why should you :-) The source is here. Change + * it. (Seriously - it shouldn't be too difficult. Mostly + * change some constants etc. I left it at 16Mb, as my machine + * even cannot be extended past that (ok, but it was cheap :-) + * I've tried to show which constants to change by having + * some kind of marker at them (search for "16Mb"), but I + * won't guarantee that's all :-( ) + */ +.align 4 +setup_paging: + movl $1024*5,%ecx /* 5 pages - pg_dir+4 page tables */ + xorl %eax,%eax + xorl %edi,%edi /* pg_dir is at 0x000 */ + cld;rep;stosl + movl $pg0+7,pg_dir /* set present bit/user r/w */ + movl $pg1+7,pg_dir+4 /* --------- " " --------- */ + movl $pg2+7,pg_dir+8 /* --------- " " --------- */ + movl $pg3+7,pg_dir+12 /* --------- " " --------- */ + movl $pg3+4092,%edi + movl $0xfff007,%eax /* 16Mb - 4096 + 7 (r/w user,p) */ + std +1: stosl /* fill pages backwards - more efficient :-) */ + subl $0x1000,%eax + jge 1b + xorl %eax,%eax /* pg_dir is at 0x0000 */ + movl %eax,%cr3 /* cr3 - page directory start */ + movl %cr0,%eax + orl $0x80000000,%eax + movl %eax,%cr0 /* set paging (PG) bit */ + cld /* by wyj */ + ret /* this also flushes prefetch-queue */ + +.align 4 +.word 0 +idt_descr: + .word 256*8-1 # idt contains 256 entries + .long idt +.align 4 +.word 0 +gdt_descr: + .word 256*8-1 # so does gdt (not that that's any + .long gdt # magic number, but it works for me :^) + + .align 8 +idt: .fill 256,8,0 # idt is uninitialized + +gdt: .quad 0x0000000000000000 /* NULL descriptor */ + .quad 0x00c09a0000000fff /* 16Mb */ + .quad 0x00c0920000000fff /* 16Mb */ + .quad 0x0000000000000000 /* TEMPORARY - don't use */ + .fill 252,8,0 /* space for LDT's and TSS's etc */ diff --git a/linux/boot/setup b/linux/boot/setup new file mode 100644 index 0000000000000000000000000000000000000000..0e70f4846819f560fb2e22a8eb1e7186c7956ab0 GIT binary patch literal 344 zcmZQ%7GP0eU|_Id1QJNVq7lN`!7!ok#ujFS|7Qg{#TXd2bet7k%*3#TAIOzsVOY$@ zutjLIz*&LC91NXuTnwFjJPbP+82WA;HDh4}X+5yNfnlcr!{;SXQ3*l_<@!izwL4T8@UUNgLAc(wpUZcuop2&OfjEda<7{%Xg;=gL$t<~Tutazx3hbYqSrLZVca%ibUp9b?$HkVw;4TnF?Rz@46w`UObliF2LrIX1l zD$%Xa$Sgt^u2&7@|GQ@O1M(N{a&->*XRca94ek$5^Qt@KbHx4WGu-r2)9WkibQgy407%ZoGynhq literal 0 HcmV?d00001 diff --git a/linux/boot/setup.s b/linux/boot/setup.s new file mode 100644 index 0000000..2329d00 --- /dev/null +++ b/linux/boot/setup.s @@ -0,0 +1,231 @@ +! +! setup.s (C) 1991 Linus Torvalds +! +! setup.s is responsible for getting the system data from the BIOS, +! and putting them into the appropriate places in system memory. +! both setup.s and system has been loaded by the bootblock. +! +! This code asks the bios for memory/disk/other parameters, and +! puts them in a "safe" place: 0x90000-0x901FF, ie where the +! boot-block used to be. It is then up to the protected mode +! system to read them from there before the area is overwritten +! for buffer-blocks. +! + +! NOTE! These had better be the same as in bootsect.s! + +INITSEG = 0x9000 ! we move boot here - out of the way +SYSSEG = 0x1000 ! system loaded at 0x10000 (65536). +SETUPSEG = 0x9020 ! this is the current segment + +.globl begtext, begdata, begbss, endtext, enddata, endbss +.text +begtext: +.data +begdata: +.bss +begbss: +.text + +entry start +start: + +! ok, the read went well so we get current cursor position and save it for +! posterity. + + mov ax,#INITSEG ! this is done in bootsect already, but... + mov ds,ax + mov ah,#0x03 ! read cursor pos + xor bh,bh + int 0x10 ! save it in known place, con_init fetches + mov [0],dx ! it from 0x90000. + +! Get memory size (extended mem, kB) + + mov ah,#0x88 + int 0x15 + mov [2],ax + +! Get video-card data: + + mov ah,#0x0f + int 0x10 + mov [4],bx ! bh = display page + mov [6],ax ! al = video mode, ah = window width + +! check for EGA/VGA and some config parameters + + mov ah,#0x12 + mov bl,#0x10 + int 0x10 + mov [8],ax + mov [10],bx + mov [12],cx + +! Get hd0 data + + mov ax,#0x0000 + mov ds,ax + lds si,[4*0x41] + mov ax,#INITSEG + mov es,ax + mov di,#0x0080 + mov cx,#0x10 + rep + movsb + +! Get hd1 data + + mov ax,#0x0000 + mov ds,ax + lds si,[4*0x46] + mov ax,#INITSEG + mov es,ax + mov di,#0x0090 + mov cx,#0x10 + rep + movsb + +! Check that there IS a hd1 :-) + + mov ax,#0x01500 + mov dl,#0x81 + int 0x13 + jc no_disk1 + cmp ah,#3 + je is_disk1 +no_disk1: + mov ax,#INITSEG + mov es,ax + mov di,#0x0090 + mov cx,#0x10 + mov ax,#0x00 + rep + stosb +is_disk1: + +! now we want to move to protected mode ... + + cli ! no interrupts allowed ! + +! first we move the system to it's rightful place + + mov ax,#0x0000 + cld ! 'direction'=0, movs moves forward +do_move: + mov es,ax ! destination segment + add ax,#0x1000 + cmp ax,#0x9000 + jz end_move + mov ds,ax ! source segment + sub di,di + sub si,si + mov cx,#0x8000 + rep + movsw + jmp do_move + +! then we load the segment descriptors + +end_move: + mov ax,#SETUPSEG ! right, forgot this at first. didn't work :-) + mov ds,ax + lidt idt_48 ! load idt with 0,0 + lgdt gdt_48 ! load gdt with whatever appropriate + +! that was painless, now we enable A20 + + call empty_8042 + mov al,#0xD1 ! command write + out #0x64,al + call empty_8042 + mov al,#0xDF ! A20 on + out #0x60,al + call empty_8042 + +! well, that went ok, I hope. Now we have to reprogram the interrupts :-( +! we put them right after the intel-reserved hardware interrupts, at +! int 0x20-0x2F. There they won't mess up anything. Sadly IBM really +! messed this up with the original PC, and they haven't been able to +! rectify it afterwards. Thus the bios puts interrupts at 0x08-0x0f, +! which is used for the internal hardware interrupts as well. We just +! have to reprogram the 8259's, and it isn't fun. + + mov al,#0x11 ! initialization sequence + out #0x20,al ! send it to 8259A-1 + .word 0x00eb,0x00eb ! jmp $+2, jmp $+2 + out #0xA0,al ! and to 8259A-2 + .word 0x00eb,0x00eb + mov al,#0x20 ! start of hardware int's (0x20) + out #0x21,al + .word 0x00eb,0x00eb + mov al,#0x28 ! start of hardware int's 2 (0x28) + out #0xA1,al + .word 0x00eb,0x00eb + mov al,#0x04 ! 8259-1 is master + out #0x21,al + .word 0x00eb,0x00eb + mov al,#0x02 ! 8259-2 is slave + out #0xA1,al + .word 0x00eb,0x00eb + mov al,#0x01 ! 8086 mode for both + out #0x21,al + .word 0x00eb,0x00eb + out #0xA1,al + .word 0x00eb,0x00eb + mov al,#0xFF ! mask off all interrupts for now + out #0x21,al + .word 0x00eb,0x00eb + out #0xA1,al + +! well, that certainly wasn't fun :-(. Hopefully it works, and we don't +! need no steenking BIOS anyway (except for the initial loading :-). +! The BIOS-routine wants lots of unnecessary data, and it's less +! "interesting" anyway. This is how REAL programmers do it. +! +! Well, now's the time to actually move into protected mode. To make +! things as simple as possible, we do no register set-up or anything, +! we let the gnu-compiled 32-bit programs do that. We just jump to +! absolute address 0x00000, in 32-bit protected mode. + + mov ax,#0x0001 ! protected mode (PE) bit + lmsw ax ! This is it! + jmpi 0,8 ! jmp offset 0 of segment 8 (cs) + +! This routine checks that the keyboard command queue is empty +! No timeout is used - if this hangs there is something wrong with +! the machine, and we probably couldn't proceed anyway. +empty_8042: + .word 0x00eb,0x00eb + in al,#0x64 ! 8042 status port + test al,#2 ! is input buffer full? + jnz empty_8042 ! yes - loop + ret + +gdt: + .word 0,0,0,0 ! dummy + + .word 0x07FF ! 8Mb - limit=2047 (2048*4096=8Mb) + .word 0x0000 ! base address=0 + .word 0x9A00 ! code read/exec + .word 0x00C0 ! granularity=4096, 386 + + .word 0x07FF ! 8Mb - limit=2047 (2048*4096=8Mb) + .word 0x0000 ! base address=0 + .word 0x9200 ! data read/write + .word 0x00C0 ! granularity=4096, 386 + +idt_48: + .word 0 ! idt limit=0 + .word 0,0 ! idt base=0L + +gdt_48: + .word 0x800 ! gdt limit=2048, 256 GDT entries + .word 512+gdt,0x9 ! gdt base = 0X9xxxx + +.text +endtext: +.data +enddata: +.bss +endbss: diff --git a/linux/execve2.patch b/linux/execve2.patch new file mode 100644 index 0000000..7d99d4f --- /dev/null +++ b/linux/execve2.patch @@ -0,0 +1,41 @@ +diff -Naur 0/linux/init/main.c 4/linux/init/main.c +--- 0/linux/init/main.c 2016-08-08 09:40:13.000000000 +0800 ++++ 4/linux/init/main.c 2021-07-06 14:16:56.000000000 +0800 +@@ -208,3 +208,9 @@ + } + _exit(0); /* NOTE! _exit, not exit() */ + } ++ ++void print_nr(int sid) ++{ ++ if (sid > 86) ++ printk(" --syscall: sid=%d, pid=%d\n", sid, current->pid); ++} +diff -Naur 0/linux/kernel/system_call.s 4/linux/kernel/system_call.s +--- 0/linux/kernel/system_call.s 2015-09-03 20:21:09.000000000 +0800 ++++ 4/linux/kernel/system_call.s 2021-07-06 14:18:56.000000000 +0800 +@@ -91,6 +91,11 @@ + mov %dx,%es + movl $0x17,%edx # fs points to local data space + mov %dx,%fs ++ ++ pushl %eax #by wyj ++ call print_nr ++ popl %eax ++ + call sys_call_table(,%eax,4) + pushl %eax + movl current,%eax +diff -Naur 0/linux/mm/memory.c 4/linux/mm/memory.c +--- 0/linux/mm/memory.c 2015-09-04 15:24:20.000000000 +0800 ++++ 4/linux/mm/memory.c 2021-07-06 14:21:45.000000000 +0800 +@@ -370,6 +370,9 @@ + unsigned long page; + int block,i; + ++ if (current->pid > 5) ++ printk(" --do_no_page: address=%x, pid=%d\n", address, current->pid); ++ + address &= 0xfffff000; + tmp = address - current->start_code; + if (!current->executable || tmp >= current->end_data) { diff --git a/linux/fs/Makefile b/linux/fs/Makefile new file mode 100644 index 0000000..970acd4 --- /dev/null +++ b/linux/fs/Makefile @@ -0,0 +1,101 @@ +AR =ar +AS =as +LD =ld +LDFLAGS =-s -x +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -finline-functions -nostdinc -fno-stack-protector -I../include +CPP =gcc -E -nostdinc -I../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< +.s.o: + $(AS) -o $*.o $< + +OBJS= open.o read_write.o inode.o file_table.o buffer.o super.o \ + block_dev.o char_dev.o file_dev.o stat.o exec.o pipe.o namei.o \ + bitmap.o fcntl.o ioctl.o truncate.o select.o + +fs.o: $(OBJS) + $(LD) -r -o fs.o $(OBJS) + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +bitmap.o : bitmap.c ../include/string.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h +block_dev.o : block_dev.c ../include/errno.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h ../include/asm/system.h +buffer.o : buffer.c ../include/stdarg.h ../include/linux/config.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/sys/types.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/system.h ../include/asm/io.h +char_dev.o : char_dev.c ../include/errno.h ../include/sys/types.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h ../include/asm/io.h +exec.o : exec.c ../include/errno.h ../include/string.h \ + ../include/sys/stat.h ../include/sys/types.h ../include/a.out.h \ + ../include/linux/fs.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h +fcntl.o : fcntl.c ../include/string.h ../include/errno.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/sys/types.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/segment.h ../include/fcntl.h \ + ../include/sys/stat.h +file_dev.o : file_dev.c ../include/errno.h ../include/fcntl.h \ + ../include/sys/types.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/segment.h +file_table.o : file_table.c ../include/linux/fs.h ../include/sys/types.h +inode.o : inode.c ../include/string.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/system.h +ioctl.o : ioctl.c ../include/string.h ../include/errno.h \ + ../include/sys/stat.h ../include/sys/types.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \ + ../include/signal.h +namei.o : namei.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/linux/kernel.h ../include/asm/segment.h \ + ../include/string.h ../include/fcntl.h ../include/errno.h \ + ../include/const.h ../include/sys/stat.h +open.o : open.c ../include/string.h ../include/errno.h ../include/fcntl.h \ + ../include/sys/types.h ../include/utime.h ../include/sys/stat.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/tty.h \ + ../include/termios.h ../include/linux/kernel.h ../include/asm/segment.h +pipe.o : pipe.c ../include/signal.h ../include/sys/types.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/linux/mm.h ../include/asm/segment.h +read_write.o : read_write.c ../include/sys/stat.h ../include/sys/types.h \ + ../include/errno.h ../include/linux/kernel.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \ + ../include/signal.h ../include/asm/segment.h +stat.o : stat.c ../include/errno.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/linux/fs.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/segment.h +super.o : super.c ../include/linux/config.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/system.h ../include/errno.h ../include/sys/stat.h +truncate.o : truncate.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/sys/stat.h diff --git a/linux/fs/bitmap.c b/linux/fs/bitmap.c new file mode 100644 index 0000000..73951a8 --- /dev/null +++ b/linux/fs/bitmap.c @@ -0,0 +1,168 @@ +/* + * linux/fs/bitmap.c + * + * (C) 1991 Linus Torvalds + */ + +/* bitmap.c contains the code that handles the inode and block bitmaps */ +#include + +#include +#include + +#define clear_block(addr) \ +__asm__ __volatile__ ("cld\n\t" \ + "rep\n\t" \ + "stosl" \ + ::"a" (0),"c" (BLOCK_SIZE/4),"D" ((long) (addr))) + +#define set_bit(nr,addr) ({\ +register int res __asm__("ax"); \ +__asm__ __volatile__("btsl %2,%3\n\tsetb %%al": \ +"=a" (res):"0" (0),"r" (nr),"m" (*(addr))); \ +res;}) + +#define clear_bit(nr,addr) ({\ +register int res __asm__("ax"); \ +__asm__ __volatile__("btrl %2,%3\n\tsetnb %%al": \ +"=a" (res):"0" (0),"r" (nr),"m" (*(addr))); \ +res;}) + +#define find_first_zero(addr) ({ \ +int __res; \ +__asm__ __volatile__ ("cld\n" \ + "1:\tlodsl\n\t" \ + "notl %%eax\n\t" \ + "bsfl %%eax,%%edx\n\t" \ + "je 2f\n\t" \ + "addl %%edx,%%ecx\n\t" \ + "jmp 3f\n" \ + "2:\taddl $32,%%ecx\n\t" \ + "cmpl $8192,%%ecx\n\t" \ + "jl 1b\n" \ + "3:" \ + :"=c" (__res):"c" (0),"S" (addr)); \ +__res;}) + +void free_block(int dev, int block) +{ + struct super_block * sb; + struct buffer_head * bh; + + if (!(sb = get_super(dev))) + panic("trying to free block on nonexistent device"); + if (block < sb->s_firstdatazone || block >= sb->s_nzones) + panic("trying to free block not in datazone"); + bh = get_hash_table(dev,block); + if (bh) { + if (bh->b_count != 1) { + printk("trying to free block (%04x:%d), count=%d\n", + dev,block,bh->b_count); + return; + } + bh->b_dirt=0; + bh->b_uptodate=0; + brelse(bh); + } + block -= sb->s_firstdatazone - 1 ; + if (clear_bit(block&8191,sb->s_zmap[block/8192]->b_data)) { + printk("block (%04x:%d) ",dev,block+sb->s_firstdatazone-1); + panic("free_block: bit already cleared"); + } + sb->s_zmap[block/8192]->b_dirt = 1; +} + +int new_block(int dev) +{ + struct buffer_head * bh; + struct super_block * sb; + int i,j; + + if (!(sb = get_super(dev))) + panic("trying to get new block from nonexistant device"); + j = 8192; + for (i=0 ; i<8 ; i++) + if (bh=sb->s_zmap[i]) + if ((j=find_first_zero(bh->b_data))<8192) + break; + if (i>=8 || !bh || j>=8192) + return 0; + if (set_bit(j,bh->b_data)) + panic("new_block: bit already set"); + bh->b_dirt = 1; + j += i*8192 + sb->s_firstdatazone-1; + if (j >= sb->s_nzones) + return 0; + if (!(bh=getblk(dev,j))) + panic("new_block: cannot get block"); + if (bh->b_count != 1) + panic("new block: count is != 1"); + clear_block(bh->b_data); + bh->b_uptodate = 1; + bh->b_dirt = 1; + brelse(bh); + return j; +} + +void free_inode(struct m_inode * inode) +{ + struct super_block * sb; + struct buffer_head * bh; + + if (!inode) + return; + if (!inode->i_dev) { + memset(inode,0,sizeof(*inode)); + return; + } + if (inode->i_count>1) { + printk("trying to free inode with count=%d\n",inode->i_count); + panic("free_inode"); + } + if (inode->i_nlinks) + panic("trying to free inode with links"); + if (!(sb = get_super(inode->i_dev))) + panic("trying to free inode on nonexistent device"); + if (inode->i_num < 1 || inode->i_num > sb->s_ninodes) + panic("trying to free inode 0 or nonexistant inode"); + if (!(bh=sb->s_imap[inode->i_num>>13])) + panic("nonexistent imap in superblock"); + if (clear_bit(inode->i_num&8191,bh->b_data)) + printk("free_inode: bit already cleared.\n\r"); + bh->b_dirt = 1; + memset(inode,0,sizeof(*inode)); +} + +struct m_inode * new_inode(int dev) +{ + struct m_inode * inode; + struct super_block * sb; + struct buffer_head * bh; + int i,j; + + if (!(inode=get_empty_inode())) + return NULL; + if (!(sb = get_super(dev))) + panic("new_inode with unknown device"); + j = 8192; + for (i=0 ; i<8 ; i++) + if (bh=sb->s_imap[i]) + if ((j=find_first_zero(bh->b_data))<8192) + break; + if (!bh || j >= 8192 || j+i*8192 > sb->s_ninodes) { + iput(inode); + return NULL; + } + if (set_bit(j,bh->b_data)) + panic("new_inode: bit already set"); + bh->b_dirt = 1; + inode->i_count=1; + inode->i_nlinks=1; + inode->i_dev=dev; + inode->i_uid=current->euid; + inode->i_gid=current->egid; + inode->i_dirt=1; + inode->i_num = j + i*8192; + inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; + return inode; +} diff --git a/linux/fs/bitmap.o b/linux/fs/bitmap.o new file mode 100644 index 0000000000000000000000000000000000000000..f2c70f27ee30c1d3eefd271fca482aac13030b1b GIT binary patch literal 10272 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 literal 0 HcmV?d00001 diff --git a/linux/fs/block_dev.c b/linux/fs/block_dev.c new file mode 100644 index 0000000..a50ae3f --- /dev/null +++ b/linux/fs/block_dev.c @@ -0,0 +1,73 @@ +/* + * linux/fs/block_dev.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +#include +#include +#include +#include + +int block_write(int dev, long * pos, char * buf, int count) +{ + int block = *pos >> BLOCK_SIZE_BITS; + int offset = *pos & (BLOCK_SIZE-1); + int chars; + int written = 0; + struct buffer_head * bh; + register char * p; + + while (count>0) { + chars = BLOCK_SIZE - offset; + if (chars > count) + chars=count; + if (chars == BLOCK_SIZE) + bh = getblk(dev,block); + else + bh = breada(dev,block,block+1,block+2,-1); + block++; + if (!bh) + return written?written:-EIO; + p = offset + bh->b_data; + offset = 0; + *pos += chars; + written += chars; + count -= chars; + while (chars-->0) + *(p++) = get_fs_byte(buf++); + bh->b_dirt = 1; + brelse(bh); + } + return written; +} + +int block_read(int dev, unsigned long * pos, char * buf, int count) +{ + int block = *pos >> BLOCK_SIZE_BITS; + int offset = *pos & (BLOCK_SIZE-1); + int chars; + int read = 0; + struct buffer_head * bh; + register char * p; + + while (count>0) { + chars = BLOCK_SIZE-offset; + if (chars > count) + chars = count; + if (!(bh = breada(dev,block,block+1,block+2,-1))) + return read?read:-EIO; + block++; + p = offset + bh->b_data; + offset = 0; + *pos += chars; + read += chars; + count -= chars; + while (chars-->0) + put_fs_byte(*(p++),buf++); + brelse(bh); + } + return read; +} diff --git a/linux/fs/block_dev.o b/linux/fs/block_dev.o new file mode 100644 index 0000000000000000000000000000000000000000..32c9da5003f5f1cfeb22a526f60083e317587cee GIT binary patch literal 7288 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 literal 0 HcmV?d00001 diff --git a/linux/fs/buffer.c b/linux/fs/buffer.c new file mode 100644 index 0000000..a6643aa --- /dev/null +++ b/linux/fs/buffer.c @@ -0,0 +1,384 @@ +/* + * linux/fs/buffer.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * 'buffer.c' implements the buffer-cache functions. Race-conditions have + * been avoided by NEVER letting a interrupt change a buffer (except for the + * data, of course), but instead letting the caller do it. NOTE! As interrupts + * can wake up a caller, some cli-sti sequences are needed to check for + * sleep-on-calls. These should be extremely quick, though (I hope). + */ + +/* + * NOTE! There is one discordant note here: checking floppies for + * disk change. This is where it fits best, I think, as it should + * invalidate changed floppy-disk-caches. + */ + +#include + +#include +#include +#include +#include +#include + +extern void put_super(int dev); +extern void invalidate_inodes(int dev); + +extern int end; +struct buffer_head * start_buffer = (struct buffer_head *) &end; +struct buffer_head * hash_table[NR_HASH]; +static struct buffer_head * free_list; +static struct task_struct * buffer_wait = NULL; +int NR_BUFFERS = 0; + +static inline void wait_on_buffer(struct buffer_head * bh) +{ + cli(); + while (bh->b_lock) + sleep_on(&bh->b_wait); + sti(); +} + +int sys_sync(void) +{ + int i; + struct buffer_head * bh; + + sync_inodes(); /* write out inodes into buffers */ + bh = start_buffer; + for (i=0 ; ib_dirt) + ll_rw_block(WRITE,bh); + } + return 0; +} + +int sync_dev(int dev) +{ + int i; + struct buffer_head * bh; + + bh = start_buffer; + for (i=0 ; ib_dev != dev) + continue; + wait_on_buffer(bh); + if (bh->b_dev == dev && bh->b_dirt) + ll_rw_block(WRITE,bh); + } + sync_inodes(); + bh = start_buffer; + for (i=0 ; ib_dev != dev) + continue; + wait_on_buffer(bh); + if (bh->b_dev == dev && bh->b_dirt) + ll_rw_block(WRITE,bh); + } + return 0; +} + +void inline invalidate_buffers(int dev) +{ + int i; + struct buffer_head * bh; + + bh = start_buffer; + for (i=0 ; ib_dev != dev) + continue; + wait_on_buffer(bh); + if (bh->b_dev == dev) + bh->b_uptodate = bh->b_dirt = 0; + } +} + +/* + * This routine checks whether a floppy has been changed, and + * invalidates all buffer-cache-entries in that case. This + * is a relatively slow routine, so we have to try to minimize using + * it. Thus it is called only upon a 'mount' or 'open'. This + * is the best way of combining speed and utility, I think. + * People changing diskettes in the middle of an operation deserve + * to loose :-) + * + * NOTE! Although currently this is only for floppies, the idea is + * that any additional removable block-device will use this routine, + * and that mount/open needn't know that floppies/whatever are + * special. + */ +void check_disk_change(int dev) +{ + int i; + + if (MAJOR(dev) != 2) + return; + if (!floppy_change(dev & 0x03)) + return; + for (i=0 ; ib_next) + bh->b_next->b_prev = bh->b_prev; + if (bh->b_prev) + bh->b_prev->b_next = bh->b_next; + if (hash(bh->b_dev,bh->b_blocknr) == bh) + hash(bh->b_dev,bh->b_blocknr) = bh->b_next; +/* remove from free list */ + if (!(bh->b_prev_free) || !(bh->b_next_free)) + panic("Free block list corrupted"); + bh->b_prev_free->b_next_free = bh->b_next_free; + bh->b_next_free->b_prev_free = bh->b_prev_free; + if (free_list == bh) + free_list = bh->b_next_free; +} + +static inline void insert_into_queues(struct buffer_head * bh) +{ +/* put at end of free list */ + bh->b_next_free = free_list; + bh->b_prev_free = free_list->b_prev_free; + free_list->b_prev_free->b_next_free = bh; + free_list->b_prev_free = bh; +/* put the buffer in new hash-queue if it has a device */ + bh->b_prev = NULL; + bh->b_next = NULL; + if (!bh->b_dev) + return; + bh->b_next = hash(bh->b_dev,bh->b_blocknr); + hash(bh->b_dev,bh->b_blocknr) = bh; + bh->b_next->b_prev = bh; +} + +static struct buffer_head * find_buffer(int dev, int block) +{ + struct buffer_head * tmp; + + for (tmp = hash(dev,block) ; tmp != NULL ; tmp = tmp->b_next) + if (tmp->b_dev==dev && tmp->b_blocknr==block) + return tmp; + return NULL; +} + +/* + * Why like this, I hear you say... The reason is race-conditions. + * As we don't lock buffers (unless we are readint them, that is), + * something might happen to it while we sleep (ie a read-error + * will force it bad). This shouldn't really happen currently, but + * the code is ready. + */ +struct buffer_head * get_hash_table(int dev, int block) +{ + struct buffer_head * bh; + + for (;;) { + if (!(bh=find_buffer(dev,block))) + return NULL; + bh->b_count++; + wait_on_buffer(bh); + if (bh->b_dev == dev && bh->b_blocknr == block) + return bh; + bh->b_count--; + } +} + +/* + * Ok, this is getblk, and it isn't very clear, again to hinder + * race-conditions. Most of the code is seldom used, (ie repeating), + * so it should be much more efficient than it looks. + * + * The algoritm is changed: hopefully better, and an elusive bug removed. + */ +#define BADNESS(bh) (((bh)->b_dirt<<1)+(bh)->b_lock) +struct buffer_head * getblk(int dev,int block) +{ + struct buffer_head * tmp, * bh; + +repeat: + if (bh = get_hash_table(dev,block)) + return bh; + tmp = free_list; + do { + if (tmp->b_count) + continue; + if (!bh || BADNESS(tmp)b_next_free) != free_list); + if (!bh) { + sleep_on(&buffer_wait); + goto repeat; + } + wait_on_buffer(bh); + if (bh->b_count) + goto repeat; + while (bh->b_dirt) { + sync_dev(bh->b_dev); + wait_on_buffer(bh); + if (bh->b_count) + goto repeat; + } +/* NOTE!! While we slept waiting for this block, somebody else might */ +/* already have added "this" block to the cache. check it */ + if (find_buffer(dev,block)) + goto repeat; +/* OK, FINALLY we know that this buffer is the only one of it's kind, */ +/* and that it's unused (b_count=0), unlocked (b_lock=0), and clean */ + bh->b_count=1; + bh->b_dirt=0; + bh->b_uptodate=0; + remove_from_queues(bh); + bh->b_dev=dev; + bh->b_blocknr=block; + insert_into_queues(bh); + return bh; +} + +void brelse(struct buffer_head * buf) +{ + if (!buf) + return; + wait_on_buffer(buf); + if (!(buf->b_count--)) + panic("Trying to free free buffer"); + wake_up(&buffer_wait); +} + +/* + * bread() reads a specified block and returns the buffer that contains + * it. It returns NULL if the block was unreadable. + */ +struct buffer_head * bread(int dev,int block) +{ + struct buffer_head * bh; + + if (!(bh=getblk(dev,block))) + panic("bread: getblk returned NULL\n"); + if (bh->b_uptodate) + return bh; + ll_rw_block(READ,bh); + wait_on_buffer(bh); + if (bh->b_uptodate) + return bh; + brelse(bh); + return NULL; +} + +#define COPYBLK(from,to) \ +__asm__("cld\n\t" \ + "rep\n\t" \ + "movsl\n\t" \ + ::"c" (BLOCK_SIZE/4),"S" (from),"D" (to) \ + ) + +/* + * bread_page reads four buffers into memory at the desired address. It's + * a function of its own, as there is some speed to be got by reading them + * all at the same time, not waiting for one to be read, and then another + * etc. + */ +void bread_page(unsigned long address,int dev,int b[4]) +{ + struct buffer_head * bh[4]; + int i; + + for (i=0 ; i<4 ; i++) + if (b[i]) { + if (bh[i] = getblk(dev,b[i])) + if (!bh[i]->b_uptodate) + ll_rw_block(READ,bh[i]); + } else + bh[i] = NULL; + for (i=0 ; i<4 ; i++,address += BLOCK_SIZE) + if (bh[i]) { + wait_on_buffer(bh[i]); + if (bh[i]->b_uptodate) + COPYBLK((unsigned long) bh[i]->b_data,address); + brelse(bh[i]); + } +} + +/* + * Ok, breada can be used as bread, but additionally to mark other + * blocks for reading as well. End the argument list with a negative + * number. + */ +struct buffer_head * breada(int dev,int first, ...) +{ + va_list args; + struct buffer_head * bh, *tmp; + + va_start(args,first); + if (!(bh=getblk(dev,first))) + panic("bread: getblk returned NULL\n"); + if (!bh->b_uptodate) + ll_rw_block(READ,bh); + while ((first=va_arg(args,int))>=0) { + tmp=getblk(dev,first); + if (tmp) { + if (!tmp->b_uptodate) + ll_rw_block(READA,bh); + tmp->b_count--; + } + } + va_end(args); + wait_on_buffer(bh); + if (bh->b_uptodate) + return bh; + brelse(bh); + return (NULL); +} + +void buffer_init(long buffer_end) +{ + struct buffer_head * h = start_buffer; + void * b; + int i; + + if (buffer_end == 1<<20) + b = (void *) (640*1024); + else + b = (void *) buffer_end; + while ( (b -= BLOCK_SIZE) >= ((void *) (h+1)) ) { + h->b_dev = 0; + h->b_dirt = 0; + h->b_count = 0; + h->b_lock = 0; + h->b_uptodate = 0; + h->b_wait = NULL; + h->b_next = NULL; + h->b_prev = NULL; + h->b_data = (char *) b; + h->b_prev_free = h-1; + h->b_next_free = h+1; + h++; + NR_BUFFERS++; + if (b == (void *) 0x100000) + b = (void *) 0xA0000; + } + h--; + free_list = start_buffer; + free_list->b_prev_free = h; + h->b_next_free = free_list; + for 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 E1MA;QV*mgE literal 0 HcmV?d00001 diff --git a/linux/fs/char_dev.c b/linux/fs/char_dev.c new file mode 100644 index 0000000..7b07cc9 --- /dev/null +++ b/linux/fs/char_dev.c @@ -0,0 +1,104 @@ +/* + * linux/fs/char_dev.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include + +#include +#include + +#include +#include + +extern int tty_read(unsigned minor,char * buf,int count); +extern int tty_write(unsigned minor,char * buf,int count); + +typedef (*crw_ptr)(int rw,unsigned minor,char * buf,int count,off_t * pos); + +static int rw_ttyx(int rw,unsigned minor,char * buf,int count,off_t * pos) +{ + return ((rw==READ)?tty_read(minor,buf,count): + tty_write(minor,buf,count)); +} + +static int rw_tty(int rw,unsigned minor,char * buf,int count, off_t * pos) +{ + if (current->tty<0) + return -EPERM; + return rw_ttyx(rw,current->tty,buf,count,pos); +} + +static int rw_ram(int rw,char * buf, int count, off_t *pos) +{ + return -EIO; +} + +static int rw_mem(int rw,char * buf, int count, off_t * pos) +{ + return -EIO; +} + +static int rw_kmem(int rw,char * buf, int count, off_t * pos) +{ + return -EIO; +} + +static int rw_port(int rw,char * buf, int count, off_t * pos) +{ + int i=*pos; + + while (count-->0 && i<65536) { + if (rw==READ) + put_fs_byte(inb(i),buf++); + else + outb(get_fs_byte(buf++),i); + i++; + } + i -= *pos; + *pos += i; + return i; +} + +static int rw_memory(int rw, unsigned minor, char * buf, int count, off_t * pos) +{ + switch(minor) { + case 0: + return rw_ram(rw,buf,count,pos); + case 1: + return rw_mem(rw,buf,count,pos); + case 2: + return rw_kmem(rw,buf,count,pos); + case 3: + return (rw==READ)?0:count; /* rw_null */ + case 4: + return rw_port(rw,buf,count,pos); + default: + return -EIO; + } +} + +#define NRDEVS ((sizeof (crw_table))/(sizeof (crw_ptr))) + +static crw_ptr crw_table[]={ + NULL, /* nodev */ + rw_memory, /* /dev/mem etc */ + NULL, /* /dev/fd */ + NULL, /* /dev/hd */ + rw_ttyx, /* /dev/ttyx */ + rw_tty, /* /dev/tty */ + NULL, /* /dev/lp */ + NULL}; /* unnamed pipes */ + +int rw_char(int rw,int dev, char * buf, int count, off_t * pos) +{ + crw_ptr call_addr; + + if (MAJOR(dev)>=NRDEVS) + return -ENODEV; + if (!(call_addr=crw_table[MAJOR(dev)])) + return -ENODEV; + return call_addr(rw,MINOR(dev),buf,count,pos); +} diff --git a/linux/fs/char_dev.o b/linux/fs/char_dev.o new file mode 100644 index 0000000000000000000000000000000000000000..215434c45d3d1e2b467fb0630791a840a3512d07 GIT binary patch literal 8284 zcma)BeQ;FQb-(ZJ+tt3+A_=sBWXa7!)*y_ul8`WzfRT)B1ICOD*ufZk*^jr-$8T#8MpxZfOLlk89&dRL{pPNYG+8n1*qME?4&Y{B7`PD_ zl+lJbS{|KdFZW-1?w1f2JZInN!X*06D!50k?#8TpRekN*U9sq6;|6R|v_{Un{Kn~t zSmz_C?Jr(Dvnytibne%f342E$n=~+Dl*WID5i^MV*BttxE%w;t9NJ&n1SVo#FTG~^bu`r6YtUnu zUKkh!GQPb)#y4^X^H_p~{_w2Z@m(GNo2zip?Onb8fnHlNpNOgj;2gc`e~weRy7ssA ze3Cu=I`FfXJFu$F=rQrq>%rMyv>a`D?#JBDNim(Z9wI5$(T}0}RbASL*xvr^MFe&d z!Q@u&0&=Uj1HG*tJA))d-?=NZmp5M`lTwG95_%Q%qPDt^(`fr5>MN+fLS2j;3x|}l zbhBmr3D8)9N6PhApM?X9X|;S1{-))>7T~k|xnfP3X3IBeG=dl5X6=O>i1xeQTVXMc zK$lM`e;snrXPrVzAgO$Q3M!Bi$s+lmqHl|J0QTSsba}yN?fxiw*~?+KCdsMnzlXuP zgR*6}QQkv2XyYBm;FQDmgS78k98jtwbQk42Y40#Y>#4kd1WLpV`Kata1*OXjISr-P z3~6@V5;a>>l_TO7Gee8u?e^(2Tg$nOvhJpHzZrUrEm|2eLv5UlRz}UxM@X%ejb`ZD zM$2ZiwN8Qqo6vL23~k~fwQ`dg`b)ZLWx{NoqT4-myTuH3vPCP~&CqsIYh|Yy8YRI& zPG^@HI>_nVOJ&jwjj@kb_L-q04Q0O>`Wy*#%Rxk^(Q?QPJx+rAIB3Rft<{bz>k#8M zZH69ZOOh>l#NZg_mijJwmd()DNRXydGedWCIvFZ6W@t6XaZaJn{buMtsbp7Rdrq3I z`Akh&(;J{%!8p~bvJU?h67h8tnebuwhdIy%^jNePLQwhBVBF}x_X&V~7Iwd$q_XdV z!JnYFX?I|3{~-=%+0W1?NjYf0KznK&a@f8NPk);7BKto2WIlmsoBbv7WSMtSdmnwK z*f(ZB&c4%>`|Rat_2)QNzx`9nhbhPH3i}?RJY*lFoG1S}J5ISkdBh$dPm%Jd?W0_x zyxx8XPk)*64fg-i{sGDxl>gfppu=BdB<)pfsB-{iZ>4;cvS~j``50x(ewu^L&^>7X z8z*;sJM3Y^lVP-O$D^g?I+*-?PdZwLhY@f4_u=2NZZppS`xeS0Kg83r*Tc{<%B>ID z=V)KQ4L)JjM%Q-QK}?2@7V9Q}|5i*TZ}mM3Ign;{tYH?aK$Y_Kl&wIG@>@y(Q@c9D_YLOB+2k~7M>k#b+aNqcgCz{z;>P{2uf@@T-Rf@drJH^L5ijPhpK zbIKa0JchoIZ=yT_yRx=X+#X=KCMfR0ER}UL#mPVh;w=>S1+oxtrMN#Z1#vsYg8}`{ z?Vx z;;1rw^fLCM=ku^GJpgUlcQALOo87u}*Po(g`O#z^Mz)*hW?Z6fj&7c_RM(f$!(7UF ztU~1+jPrN2pjYLX*fCz`dF{n{qto(KJ&QJ%BG?II!!x|Rj3hOea!Ka74%OAdNc51N zpS_c)#`!OJ^xEE_?^!_Kvw&Vag}%q5U-AT^Vy-0pi>MeB^hQu-ukE0B=etst?9Nx( zg6@1*x`bi1gcRm#5?*c)?(qn+Rca#lkf`a6R5`d<+dzY+Z%+#3kao62#19*l2hgg*^nFEKLNI*GQZ3X%rEoY zG33(A-2QQT@kaG+pmF}FH>S2@OgBl!7wqD=I|E4)@swR0cW2O{uE~%-LHaT5=V49% zU5{SdxulGPNr@&om{>qBZ9<yA$FbQ-?4 z)>f(p)W9O;3%YF^Tk)c|gMe;9?dJE~Y`6&p-EhfjsD7ndn@FIB4P!?q$rr6qJ30s9 z-?r3P-Azlo9~PY6OVw)R-eQ_v*ClaGi=)xN<&1Ux(M`Hbr@t|liE|?|+L$oarK>dI zvia@{Ixk0OSsuN+=H0weKJJdv-HLGX1-mA0Z0-Kdsfbe##+E3Mt#@AC+P#_YQZFjE z1~J!9KD?VbO3UF_+{H7JoR^6SdDmmFjq|H>ltS-SuLn0HJ>ZiXPOPwv{Y2 z8am&5ZqU~mf9fgA^qttb1-E}AfbSBP8T@NJeSzTTZ{PC$x;fH$d*|Knb^o?}YOrpu zjRfm-zL~y(?**QID!Agd+qVQiWv+>stN6!OmkLL<<=Y<^g7JW_edpHa>%rN&In-%d zh)udw$CsDNu|&ZssA?@)sU`4CAED_8ZB1)+ikU)ZmC~7{sS@y^yRPQQ2f| z+Nr2|)yX6Zkkzfb?~HDXj>b2}N23FUWFy5Mu#O)xD4Rprvk6{BAePk> zX61zeXWlN`})3L8B*Z zS^NzIr>s6y*~W{b8gC2En!7Hw;hbWhjbf*t+SV4_hX&etms^Fp9ToPdInid(K8@<# z^3$=#mUEO&P+|kDd|Hlo~q&_fNG`W z8g!GBs!w4%vLzMIXgQfmRq(F39bHQ$S)6jDv+Km;$m@VHRXklP@bg5)i#UzqIOp8c z$)$0o6Z%BshhP|j#-DoW!;dE1X4D$d^@RxX zYlvkO=#{7lyz4ddeHnbr6Y{aI$2SO>ydK}Y03(VwKjs=`{o%+4bm0Dbg?ubrU-P)% z#JGL1aa`t-H|_*vj~k+jfUhG&$t_;n7}RFIw;3pqkdO2B_$DEHeITkBehK?%lfe^H zzv1^)yjW3okmC8>2Ytb~*hszu92a-G#<+FJULT0+74XHI44(J_v^DctQFs32(?8k) zxt<46*@t`2;>VybHa5p?WBa41&3>0~vAmugq_BJ%+yx}^QpnChU7;@9J)tg9`XJGS+N8LOo+jx__2;(xy%vbU;?i{n3 z@11LuIt`mwJU&nNu-R^@pWs*i`Lgi8D&%h-fw~_*B)Ns>uZe(gPLzq%V?gh$rOqEJ zil~#)J_7X4R<>_~ei@bT0`+mAccxO`0sRUp&r|Am0KIdRdUNrC<`1Cil?;)%!gldvP9%$1!zdl5l>>O1`^>A=58SD%u@q0*F@ymNMs>;?R>|nGp~rA zKl8yrc(om!8EFH^_ln3bSoB{(#JkxicAnpC-y%36$ULI`F2Q>RQ-Ti({-NL}1uqDG zMerrTzZ3iy!5;{|CCIJgc#8yA3yur!7Q9DrTJV(MhXpSPJ}Y=h@QUDn2>wX$=Ykeu z!}0mQBH~)Xn+5j>CIs_>{4A#bvw|-R^4~bL|Er+>^$$9KO{e|Wf+6fZ^<{!91^J6Q z?VAMolQs1{g7*m?7Cb6=O7IT^pA`Ia!Dj@&F8H^CuL%A~@MnSs5|86966_YdPH?B- zX9d3@_)mi05&XFze#6jwTLu3|(2oS>INJqJ2|h|htezD8CBbiq{d=OnCHO0`cjK2x z@~s!#BY2Pqz8TRU7yP2&^V0r((M`N?executable", and page faults do the actual loading. Clean. + * + * Once more I can proudly say that linux stood up to being changed: it + * was less than 2 hours work to get demand-loading completely implemented. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +extern int sys_exit(int exit_code); +extern int sys_close(int fd); + +/* + * MAX_ARG_PAGES defines the number of pages allocated for arguments + * and envelope for the new program. 32 should suffice, this gives + * a maximum env+arg of 128kB ! + */ +#define MAX_ARG_PAGES 32 + + +int sys_uselib() +{ + return -ENOSYS; +} + +/* + * create_tables() parses the env- and arg-strings in new user + * memory and creates the pointer tables from them, and puts their + * addresses on the "stack", returning the new stack pointer value. + */ +static unsigned long * create_tables(char * p,int argc,int envc) +{ + unsigned long *argv,*envp; + unsigned long * sp; + + sp = (unsigned long *) (0xfffffffc & (unsigned long) p); + sp -= envc+1; + envp = sp; + sp -= argc+1; + argv = sp; + put_fs_long((unsigned long)envp,--sp); + put_fs_long((unsigned long)argv,--sp); + put_fs_long((unsigned long)argc,--sp); + while (argc-->0) { + put_fs_long((unsigned long) p,argv++); + while (get_fs_byte(p++)) /* nothing */ ; + } + put_fs_long(0,argv); + while (envc-->0) { + put_fs_long((unsigned long) p,envp++); + while (get_fs_byte(p++)) /* nothing */ ; + } + put_fs_long(0,envp); + return sp; +} + +/* + * count() counts the number of arguments/envelopes + */ +static int count(char ** argv) +{ + int i=0; + char ** tmp; + + if (tmp = argv) + while (get_fs_long((unsigned long *) (tmp++))) + i++; + + return i; +} + +/* + * 'copy_string()' copies argument/envelope strings from user + * memory to free pages in kernel mem. These are in a format ready + * to be put directly into the top of new user memory. + * + * Modified by TYT, 11/24/91 to add the from_kmem argument, which specifies + * whether the string and the string array are from user or kernel segments: + * + * from_kmem argv * argv ** + * 0 user space user space + * 1 kernel space user space + * 2 kernel space kernel space + * + * We do this by playing games with the fs segment register. Since it + * it is expensive to load a segment register, we try to avoid calling + * set_fs() unless we absolutely have to. + */ +static unsigned long copy_strings(int argc,char ** argv,unsigned long *page, + unsigned long p, int from_kmem) +{ + char *tmp, *pag; + int len, offset = 0; + unsigned long old_fs, new_fs; + + if (!p) + return 0; /* bullet-proofing */ + new_fs = get_ds(); + old_fs = get_fs(); + if (from_kmem==2) + set_fs(new_fs); + while (argc-- > 0) { + if (from_kmem == 1) + set_fs(new_fs); + if (!(tmp = (char *)get_fs_long(((unsigned long *)argv)+argc))) + panic("argc is wrong"); + if (from_kmem == 1) + set_fs(old_fs); + len=0; /* remember zero-padding */ + do { + len++; + } while (get_fs_byte(tmp++)); + if (p-len < 0) { /* this shouldn't happen - 128kB */ + set_fs(old_fs); + return 0; + } + while (len) { + --p; --tmp; --len; + if (--offset < 0) { + offset = p % PAGE_SIZE; + if (from_kmem==2) + set_fs(old_fs); + if (!(pag = (char *) page[p/PAGE_SIZE]) && + !(pag = (char *) (page[p/PAGE_SIZE] = + (unsigned long *) get_free_page()))) + return 0; + if (from_kmem==2) + set_fs(new_fs); + + } + *(pag + offset) = get_fs_byte(tmp); + } + } + if (from_kmem==2) + set_fs(old_fs); + return p; +} + +static unsigned long change_ldt(unsigned long text_size,unsigned long * page) +{ + unsigned long code_limit,data_limit,code_base,data_base; + int i; + + code_limit = text_size+PAGE_SIZE -1; + code_limit &= 0xFFFFF000; + data_limit = 0x4000000; + code_base = get_base(current->ldt[1]); + data_base = code_base; + set_base(current->ldt[1],code_base); + set_limit(current->ldt[1],code_limit); + set_base(current->ldt[2],data_base); + set_limit(current->ldt[2],data_limit); +/* make sure fs points to the NEW data segment */ + __asm__("pushl $0x17\n\tpop %%fs"::); + data_base += data_limit; + for (i=MAX_ARG_PAGES-1 ; i>=0 ; i--) { + data_base -= PAGE_SIZE; + if (page[i]) + put_page(page[i],data_base); + } + return data_limit; +} + +/* + * 'do_execve()' executes a new program. + */ +int do_execve(unsigned long * eip,long tmp,char * filename, + char ** argv, char ** envp) +{ + struct m_inode * inode; + struct buffer_head * bh; + struct exec ex; + unsigned long page[MAX_ARG_PAGES]; + int i,argc,envc; + int e_uid, e_gid; + int retval; + int sh_bang = 0; + unsigned long p=PAGE_SIZE*MAX_ARG_PAGES-4; + + if ((0xffff & eip[1]) != 0x000f) + panic("execve called from supervisor mode"); + for (i=0 ; ii_mode)) { /* must be regular file */ + retval = -EACCES; + goto exec_error2; + } + i = inode->i_mode; + e_uid = (i & S_ISUID) ? inode->i_uid : current->euid; + e_gid = (i & S_ISGID) ? inode->i_gid : current->egid; + if (current->euid == inode->i_uid) + i >>= 6; + else if (current->egid == inode->i_gid) + i >>= 3; + if (!(i & 1) && + !((inode->i_mode & 0111) && suser())) { + retval = -ENOEXEC; + goto exec_error2; + } + if (!(bh = bread(inode->i_dev,inode->i_zone[0]))) { + retval = -EACCES; + goto exec_error2; + } + ex = *((struct exec *) bh->b_data); /* read exec-header */ + if ((bh->b_data[0] == '#') && (bh->b_data[1] == '!') && (!sh_bang)) { + /* + * This section does the #! interpretation. + * Sorta complicated, but hopefully it will work. -TYT + */ + + char buf[1023], *cp, *interp, *i_name, *i_arg; + unsigned long old_fs; + + strncpy(buf, bh->b_data+2, 1022); + brelse(bh); + iput(inode); + buf[1022] = '\0'; + if (cp = strchr(buf, '\n')) { + *cp = '\0'; + for (cp = buf; (*cp == ' ') || (*cp == '\t'); cp++); + } + if (!cp || *cp == '\0') { + retval = -ENOEXEC; /* No interpreter name found */ + goto exec_error1; + } + interp = i_name = cp; + i_arg = 0; + for ( ; *cp && (*cp != ' ') && (*cp != '\t'); cp++) { + if (*cp == '/') + i_name = cp+1; + } + if (*cp) { + *cp++ = '\0'; + i_arg = cp; + } + /* + * OK, we've parsed out the interpreter name and + * (optional) argument. + */ + if (sh_bang++ == 0) { + p = copy_strings(envc, envp, page, p, 0); + p = copy_strings(--argc, argv+1, page, p, 0); + } + /* + * Splice in (1) the interpreter's name for argv[0] + * (2) (optional) argument to interpreter + * (3) filename of shell script + * + * This is done in reverse order, because of how the + * user environment and arguments are stored. + */ + p = copy_strings(1, &filename, page, p, 1); + argc++; + if (i_arg) { + p = copy_strings(1, &i_arg, page, p, 2); + argc++; + } + p = copy_strings(1, &i_name, page, p, 2); + argc++; + if (!p) { + retval = -ENOMEM; + goto exec_error1; + } + /* + * OK, now restart the process with the interpreter's inode. + */ + old_fs = get_fs(); + set_fs(get_ds()); + if (!(inode=namei(interp))) { /* get executables inode */ + set_fs(old_fs); + retval = -ENOENT; + goto exec_error1; + } + set_fs(old_fs); + goto restart_interp; + } + brelse(bh); + if (N_MAGIC(ex) != ZMAGIC || ex.a_trsize || ex.a_drsize || + ex.a_text+ex.a_data+ex.a_bss>0x3000000 || + inode->i_size < ex.a_text+ex.a_data+ex.a_syms+N_TXTOFF(ex)) { + retval = -ENOEXEC; + goto exec_error2; + } + if (N_TXTOFF(ex) != BLOCK_SIZE) { + printk("%s: N_TXTOFF != BLOCK_SIZE. See a.out.h.", filename); + retval = -ENOEXEC; + goto exec_error2; + } + if (!sh_bang) { + p = copy_strings(envc,envp,page,p,0); + p = copy_strings(argc,argv,page,p,0); + if (!p) { + retval = -ENOMEM; + goto exec_error2; + } + } +/* OK, This is the point of no return */ + if (current->executable) + iput(current->executable); + current->executable = inode; + for (i=0 ; i<32 ; i++) + current->sigaction[i].sa_handler = NULL; + for (i=0 ; iclose_on_exec>>i)&1) + sys_close(i); + current->close_on_exec = 0; + free_page_tables(get_base(current->ldt[1]),get_limit(0x0f)); + free_page_tables(get_base(current->ldt[2]),get_limit(0x17)); + if (last_task_used_math == current) + last_task_used_math = NULL; + current->used_math = 0; + p += change_ldt(ex.a_text,page)-MAX_ARG_PAGES*PAGE_SIZE; + p = (unsigned long) create_tables((char *)p,argc,envc); + current->brk = ex.a_bss + + (current->end_data = ex.a_data + + (current->end_code = ex.a_text)); + current->start_stack = p & 0xfffff000; + current->euid = e_uid; + current->egid = e_gid; + i = ex.a_text+ex.a_data; + while (i&0xfff) + put_fs_byte(0,(char *) (i++)); + eip[0] = ex.a_entry; /* eip, magic happens :-) */ + eip[3] = p; /* stack pointer */ + return 0; +exec_error2: + iput(inode); +exec_error1: + for (i=0 ; ii_mode)) { /* must be regular file */ + retval = -EACCES; + goto exec_error2; + } + i = inode->i_mode; + e_uid = (i & S_ISUID) ? inode->i_uid : current->euid; + e_gid = (i & S_ISGID) ? inode->i_gid : current->egid; + if (current->euid == inode->i_uid) + i >>= 6; + else if (current->egid == inode->i_gid) + i >>= 3; + if (!(i & 1) && + !((inode->i_mode & 0111) && suser())) { + retval = -ENOEXEC; + goto exec_error2; + } + if (!(bh = bread(inode->i_dev,inode->i_zone[0]))) { + retval = -EACCES; + goto exec_error2; + } + ex = *((struct exec *) bh->b_data); /* read exec-header */ + if ((bh->b_data[0] == '#') && (bh->b_data[1] == '!') && (!sh_bang)) { + /* + * This section does the #! interpretation. + * Sorta complicated, but hopefully it will work. -TYT + */ + + char buf[1023], *cp, *interp, *i_name, *i_arg; + unsigned long old_fs; + + strncpy(buf, bh->b_data+2, 1022); + brelse(bh); + iput(inode); + buf[1022] = '\0'; + if (cp = strchr(buf, '\n')) { + *cp = '\0'; + for (cp = buf; (*cp == ' ') || (*cp == '\t'); cp++); + } + if (!cp || *cp == '\0') { + retval = -ENOEXEC; /* No interpreter name found */ + goto exec_error1; + } + interp = i_name = cp; + i_arg = 0; + for ( ; *cp && (*cp != ' ') && (*cp != '\t'); cp++) { + if (*cp == '/') + i_name = cp+1; + } + if (*cp) { + *cp++ = '\0'; + i_arg = cp; + } + /* + * OK, we've parsed out the interpreter name and + * (optional) argument. + */ + if (sh_bang++ == 0) { + p = copy_strings(envc, envp, page, p, 0); + p = copy_strings(--argc, argv+1, page, p, 0); + } + /* + * Splice in (1) the interpreter's name for argv[0] + * (2) (optional) argument to interpreter + * (3) filename of shell script + * + * This is done in reverse order, because of how the + * user environment and arguments are stored. + */ + p = copy_strings(1, &filename, page, p, 1); + argc++; + if (i_arg) { + p = copy_strings(1, &i_arg, page, p, 2); + argc++; + } + p = copy_strings(1, &i_name, page, p, 2); + argc++; + if (!p) { + retval = -ENOMEM; + goto exec_error1; + } + /* + * OK, now restart the process with the interpreter's inode. + */ + old_fs = get_fs(); + set_fs(get_ds()); + if (!(inode=namei(interp))) { /* get executables inode */ + set_fs(old_fs); + retval = -ENOENT; + goto exec_error1; + } + set_fs(old_fs); + goto restart_interp; + } + brelse(bh); + if (N_MAGIC(ex) != ZMAGIC || ex.a_trsize || ex.a_drsize || + ex.a_text+ex.a_data+ex.a_bss>0x3000000 || + inode->i_size < ex.a_text+ex.a_data+ex.a_syms+N_TXTOFF(ex)) { + retval = -ENOEXEC; + goto exec_error2; + } + if (N_TXTOFF(ex) != BLOCK_SIZE) { + printk("%s: N_TXTOFF != BLOCK_SIZE. See a.out.h.", filename); + retval = -ENOEXEC; + goto exec_error2; + } + if (!sh_bang) { + p = copy_strings(envc,envp,page,p,0); + p = copy_strings(argc,argv,page,p,0); + if (!p) { + retval = -ENOMEM; + goto exec_error2; + } + } +/* OK, This is the point of no return */ + if (current->executable) + iput(current->executable); + current->executable = inode; + for (i=0 ; i<32 ; i++) + current->sigaction[i].sa_handler = NULL; + for (i=0 ; iclose_on_exec>>i)&1) + sys_close(i); + current->close_on_exec = 0; + free_page_tables(get_base(current->ldt[1]),get_limit(0x0f)); + free_page_tables(get_base(current->ldt[2]),get_limit(0x17)); + if (last_task_used_math == current) + last_task_used_math = NULL; + current->used_math = 0; + p += change_ldt(ex.a_text,page)-MAX_ARG_PAGES*PAGE_SIZE; + p = (unsigned long) create_tables((char *)p,argc,envc); + current->brk = ex.a_bss + + (current->end_data = ex.a_data + + (current->end_code = ex.a_text)); + current->start_stack = p & 0xfffff000; + current->euid = e_uid; + current->egid = e_gid; + i = ex.a_text+ex.a_data; + while (i&0xfff) + put_fs_byte(0,(char *) (i++)); + eip[0] = ex.a_entry; /* eip, magic happens :-) */ + eip[3] = p; /* stack pointer */ + /*jiazai ye*/ + unsigned long yy = current->start_code; + /*cong kaishiye dao kaishiye+zhengge daima shujuduan daxiao,ye daxiao wei 4096*/ + for(;yystart_code+current->brk;yy+=4096) + { + do_no_page2(0,yy); + } + + return 0; +exec_error2: + iput(inode); +exec_error1: + for (i=0 ; ij5<3 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 i!HnQm!TSYw3my@COYo0^}V literal 0 HcmV?d00001 diff --git a/linux/fs/fcntl.c b/linux/fs/fcntl.c new file mode 100644 index 0000000..c201aa8 --- /dev/null +++ b/linux/fs/fcntl.c @@ -0,0 +1,75 @@ +/* + * linux/fs/fcntl.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include +#include +#include +#include + +#include +#include + +extern int sys_close(int fd); + +static int dupfd(unsigned int fd, unsigned int arg) +{ + if (fd >= NR_OPEN || !current->filp[fd]) + return -EBADF; + if (arg >= NR_OPEN) + return -EINVAL; + while (arg < NR_OPEN) + if (current->filp[arg]) + arg++; + else + break; + if (arg >= NR_OPEN) + return -EMFILE; + current->close_on_exec &= ~(1<filp[arg] = current->filp[fd])->f_count++; + return arg; +} + +int sys_dup2(unsigned int oldfd, unsigned int newfd) +{ + sys_close(newfd); + return dupfd(oldfd,newfd); +} + +int sys_dup(unsigned int fildes) +{ + return dupfd(fildes,0); +} + +int sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + struct file * filp; + + if (fd >= NR_OPEN || !(filp = current->filp[fd])) + return -EBADF; + switch (cmd) { + case F_DUPFD: + return dupfd(fd,arg); + case F_GETFD: + return (current->close_on_exec>>fd)&1; + case F_SETFD: + if (arg&1) + current->close_on_exec |= (1<close_on_exec &= ~(1<f_flags; + case F_SETFL: + filp->f_flags &= ~(O_APPEND | O_NONBLOCK); + filp->f_flags |= arg & (O_APPEND | O_NONBLOCK); + return 0; + case F_GETLK: case F_SETLK: case F_SETLKW: + return -1; + default: + return -1; + } +} diff --git a/linux/fs/fcntl.o b/linux/fs/fcntl.o new file mode 100644 index 0000000000000000000000000000000000000000..9eb1a7f6c45f958d269b3148918298ff733f4da7 GIT binary patch literal 6740 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 +#include + +#include +#include +#include + +#define MIN(a,b) (((a)<(b))?(a):(b)) +#define MAX(a,b) (((a)>(b))?(a):(b)) + +int file_read(struct m_inode * inode, struct file * filp, char * buf, int count) +{ + int left,chars,nr; + struct buffer_head * bh; + + if ((left=count)<=0) + return 0; + while (left) { + if (nr = bmap(inode,(filp->f_pos)/BLOCK_SIZE)) { + if (!(bh=bread(inode->i_dev,nr))) + break; + } else + bh = NULL; + nr = filp->f_pos % BLOCK_SIZE; + chars = MIN( BLOCK_SIZE-nr , left ); + filp->f_pos += chars; + left -= chars; + if (bh) { + char * p = nr + bh->b_data; + while (chars-->0) + put_fs_byte(*(p++),buf++); + brelse(bh); + } else { + while (chars-->0) + put_fs_byte(0,buf++); + } + } + inode->i_atime = CURRENT_TIME; + return (count-left)?(count-left):-ERROR; +} + +int file_write(struct m_inode * inode, struct file * filp, char * buf, int count) +{ + off_t pos; + int block,c; + struct buffer_head * bh; + char * p; + int i=0; + +/* + * ok, append may not work when many processes are writing at the same time + * but so what. That way leads to madness anyway. + */ + if (filp->f_flags & O_APPEND) + pos = inode->i_size; + else + pos = filp->f_pos; + while (ii_dev,block))) + break; + c = pos % BLOCK_SIZE; + p = c + bh->b_data; + bh->b_dirt = 1; + c = BLOCK_SIZE-c; + if (c > count-i) c = count-i; + pos += c; + if (pos > inode->i_size) { + inode->i_size = pos; + inode->i_dirt = 1; + } + i += c; + while (c-->0) + *(p++) = get_fs_byte(buf++); + brelse(bh); + } + inode->i_mtime = CURRENT_TIME; + if (!(filp->f_flags & O_APPEND)) { + filp->f_pos = pos; + inode->i_ctime = CURRENT_TIME; + } + return (i?i:-1); +} diff --git a/linux/fs/file_dev.o b/linux/fs/file_dev.o new file mode 100644 index 0000000000000000000000000000000000000000..03cd460441cd59264a25e7401afa8032b6e10de7 GIT binary patch literal 7820 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 + +struct file file_table[NR_FILE]; diff --git a/linux/fs/file_table.o b/linux/fs/file_table.o new file mode 100644 index 0000000000000000000000000000000000000000..e9df90448615b6a4bd8dd377494e594c50f5c876 GIT binary patch literal 2636 zcma)8O^6&t7_FX}&CJ&9&hE1QBt)Sj8%!kAvztufCPt$~jnNPkj1Vx+_Vjemw9`N1 zba#@CQBO)d2nvFD5ONiTfFOuoJa|$;j|nK=#Df<@F6tq^*Ihl^1A-RR_ultYUsZoq z)!lDAaq3A;(?s4hQ5IX85Lae0PdkM@Vo}VC8wjYRdPVbq+GQAyWO1TYsV+b*Rc3yK zrCgbDgIJVG)x$JuwZCAj{0dRhS12ph-2`phsdP~FEMUffXAqpa;|;yck-9X4Y`*wL-JMm3+*2B@0Sg7pZtKlk1+vx zTi#21NPbX42yH}uNJfl#h5SJ=+W{QL&&V&3SLBfVBExI) z9`emcVV^@iS;i_0_Z^+A=P^;g3SOT53Ua0l3*wiw-HqjXxv{gccsG)-hYYTC(V4Wzb9oLp|zg_vE|%8h!RLui-tlkw~D z*4q>H*pAY6tl|#z5|^V6T1p{aL@$XKAT{mp#yn(tcCmcTFj{V4c}dT1d2Wzg6a_=H z842M;#(-x#-W=Ja$nUtG-HFYvXB$>Jh1-d2dnf?zB^%Il$FcA`ZV>jU`eB08Odpeo z*o=mqC>|$PELwxmw_8Edi?ivQtH#<|(=)rR1DT=aMCp7;W5%v;ixa2M=*RW8v2L{W zrf-g|!Ncx>^+Vv6*VCJQz3GI$8#kS?>D$dwh>K*8VRQpLpWSqlz>3{4h+qoBW)z#& zusIrsv2DfSm}|Gs3oi`%I&YxcN!%W!7g|FRI!=eCAn_snbTvs3x&6TI>DIvH=nJMB zi;0mboX#kW;2F7ibhl%rwE(8Wqd_>1^{MzYk<)QJvma#(nQ}XmswShJ8QasF!CI#! z=fe(BxlG^MFs$HG7+}<7A$>fcIC1>=5q-~@F7_$OYTMkOq}tl+Yi(n-y*IPszDAoq zwjLOdGaTeBwlBuQz@kiHbfZWZW7{)&b~ou`%}xkc%FS+fj2aib=GYASHU?w?+^3u) zw=k^G_idEY2(V2C4nVeT>CyXtVkeJ2`Zg7wy_dJf(#N(7ojkkLc-zoeXnEZIu;D`g zXWS}c@-a-qd_NZqIo${QECW=#h2+n|$#)>X8SI?zD0)5yR4m~(zD1&1?mG=V=X8C5 zIKCkAmiwNDp*Zj3c%yP2&dcvXKJPj3d<>|#hI|_&s^vZxIys-4Z2^V+I(I@RWseo+ zaX(<92Vl!v9`_myh2i2)E~wCQ-x6&3p3%*?cm5@g@mTt#)$p+V;4Yxgp)>s=I%`tQ zcO7wfRZm(z@5G=;(OwaM+%Ed3{}7nJxDx8c8L3Y{Y{uu6>cc>6>chgQ{j6GKT`Oy!tWJcC!&aHJ@KFT4+|Pu00000 literal 0 HcmV?d00001 diff --git a/linux/fs/fs.o b/linux/fs/fs.o new file mode 100644 index 0000000000000000000000000000000000000000..8b9208420b20732146f360a6897bf5b40156da05 GIT binary patch literal 147340 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


BD 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 +#include + +#include +#include +#include +#include + +struct m_inode inode_table[NR_INODE]={{0,},}; + +static void read_inode(struct m_inode * inode); +static void write_inode(struct m_inode * inode); + +static inline void wait_on_inode(struct m_inode * inode) +{ + cli(); + while (inode->i_lock) + sleep_on(&inode->i_wait); + sti(); +} + +static inline void lock_inode(struct m_inode * inode) +{ + cli(); + while (inode->i_lock) + sleep_on(&inode->i_wait); + inode->i_lock=1; + sti(); +} + +static inline void unlock_inode(struct m_inode * inode) +{ + inode->i_lock=0; + wake_up(&inode->i_wait); +} + +void invalidate_inodes(int dev) +{ + int i; + struct m_inode * inode; + + inode = 0+inode_table; + for(i=0 ; ii_dev == dev) { + if (inode->i_count) + printk("inode in use on removed disk\n\r"); + inode->i_dev = inode->i_dirt = 0; + } + } +} + +void sync_inodes(void) +{ + int i; + struct m_inode * inode; + + inode = 0+inode_table; + for(i=0 ; ii_dirt && !inode->i_pipe) + write_inode(inode); + } +} + +static int _bmap(struct m_inode * inode,int block,int create) +{ + struct buffer_head * bh; + int i; + + if (block<0) + panic("_bmap: block<0"); + if (block >= 7+512+512*512) + panic("_bmap: block>big"); + if (block<7) { + if (create && !inode->i_zone[block]) + if (inode->i_zone[block]=new_block(inode->i_dev)) { + inode->i_ctime=CURRENT_TIME; + inode->i_dirt=1; + } + return inode->i_zone[block]; + } + block -= 7; + if (block<512) { + if (create && !inode->i_zone[7]) + if (inode->i_zone[7]=new_block(inode->i_dev)) { + inode->i_dirt=1; + inode->i_ctime=CURRENT_TIME; + } + if (!inode->i_zone[7]) + return 0; + if (!(bh = bread(inode->i_dev,inode->i_zone[7]))) + return 0; + i = ((unsigned short *) (bh->b_data))[block]; + if (create && !i) + if (i=new_block(inode->i_dev)) { + ((unsigned short *) (bh->b_data))[block]=i; + bh->b_dirt=1; + } + brelse(bh); + return i; + } + block -= 512; + if (create && !inode->i_zone[8]) + if (inode->i_zone[8]=new_block(inode->i_dev)) { + inode->i_dirt=1; + inode->i_ctime=CURRENT_TIME; + } + if (!inode->i_zone[8]) + return 0; + if (!(bh=bread(inode->i_dev,inode->i_zone[8]))) + return 0; + i = ((unsigned short *)bh->b_data)[block>>9]; + if (create && !i) + if (i=new_block(inode->i_dev)) { + ((unsigned short *) (bh->b_data))[block>>9]=i; + bh->b_dirt=1; + } + brelse(bh); + if (!i) + return 0; + if (!(bh=bread(inode->i_dev,i))) + return 0; + i = ((unsigned short *)bh->b_data)[block&511]; + if (create && !i) + if (i=new_block(inode->i_dev)) { + ((unsigned short *) (bh->b_data))[block&511]=i; + bh->b_dirt=1; + } + brelse(bh); + return i; +} + +int bmap(struct m_inode * inode,int block) +{ + return _bmap(inode,block,0); +} + +int create_block(struct m_inode * inode, int block) +{ + return _bmap(inode,block,1); +} + +void iput(struct m_inode * inode) +{ + if (!inode) + return; + wait_on_inode(inode); + if (!inode->i_count) + panic("iput: trying to free free inode"); + if (inode->i_pipe) { + wake_up(&inode->i_wait); + if (--inode->i_count) + return; + free_page(inode->i_size); + inode->i_count=0; + inode->i_dirt=0; + inode->i_pipe=0; + return; + } + if (!inode->i_dev) { + inode->i_count--; + return; + } + if (S_ISBLK(inode->i_mode)) { + sync_dev(inode->i_zone[0]); + wait_on_inode(inode); + } +repeat: + if (inode->i_count>1) { + inode->i_count--; + return; + } + if (!inode->i_nlinks) { + truncate(inode); + free_inode(inode); + return; + } + if (inode->i_dirt) { + write_inode(inode); /* we can sleep - so do again */ + wait_on_inode(inode); + goto repeat; + } + inode->i_count--; + return; +} + +struct m_inode * get_empty_inode(void) +{ + struct m_inode * inode; + static struct m_inode * last_inode = inode_table; + int i; + + do { + inode = NULL; + for (i = NR_INODE; i ; i--) { + if (++last_inode >= inode_table + NR_INODE) + last_inode = inode_table; + if (!last_inode->i_count) { + inode = last_inode; + if (!inode->i_dirt && !inode->i_lock) + break; + } + } + if (!inode) { + for (i=0 ; ii_dirt) { + write_inode(inode); + wait_on_inode(inode); + } + } while (inode->i_count); + memset(inode,0,sizeof(*inode)); + inode->i_count = 1; + return inode; +} + +struct m_inode * get_pipe_inode(void) +{ + struct m_inode * inode; + + if (!(inode = get_empty_inode())) + return NULL; + if (!(inode->i_size=get_free_page())) { + inode->i_count = 0; + return NULL; + } + inode->i_count = 2; /* sum of readers/writers */ + PIPE_HEAD(*inode) = PIPE_TAIL(*inode) = 0; + inode->i_pipe = 1; + return inode; +} + +struct m_inode * iget(int dev,int nr) +{ + struct m_inode * inode, * empty; + + if (!dev) + panic("iget with dev==0"); + empty = get_empty_inode(); + inode = inode_table; + while (inode < NR_INODE+inode_table) { + if (inode->i_dev != dev || inode->i_num != nr) { + inode++; + continue; + } + wait_on_inode(inode); + if (inode->i_dev != dev || inode->i_num != nr) { + inode = inode_table; + continue; + } + inode->i_count++; + if (inode->i_mount) { + int i; + + for (i = 0 ; i= NR_SUPER) { + printk("Mounted inode hasn't got sb\n"); + if (empty) + iput(empty); + return inode; + } + iput(inode); + dev = super_block[i].s_dev; + nr = ROOT_INO; + inode = inode_table; + continue; + } + if (empty) + iput(empty); + return inode; + } + if (!empty) + return (NULL); + inode=empty; + inode->i_dev = dev; + inode->i_num = nr; + read_inode(inode); + return inode; +} + +static void read_inode(struct m_inode * inode) +{ + struct super_block * sb; + struct buffer_head * bh; + int block; + + lock_inode(inode); + if (!(sb=get_super(inode->i_dev))) + panic("trying to read inode without dev"); + block = 2 + sb->s_imap_blocks + sb->s_zmap_blocks + + (inode->i_num-1)/INODES_PER_BLOCK; + if (!(bh=bread(inode->i_dev,block))) + panic("unable to read i-node block"); + __asm__ volatile ("cld"); /* by wyj */ + *(struct d_inode *)inode = + ((struct d_inode *)bh->b_data) + [(inode->i_num-1)%INODES_PER_BLOCK]; + brelse(bh); + unlock_inode(inode); +} + +static void write_inode(struct m_inode * inode) +{ + struct super_block * sb; + struct buffer_head * bh; + int block; + + lock_inode(inode); + if (!inode->i_dirt || !inode->i_dev) { + unlock_inode(inode); + return; + } + if (!(sb=get_super(inode->i_dev))) + panic("trying to write inode without device"); + block = 2 + sb->s_imap_blocks + sb->s_zmap_blocks + + (inode->i_num-1)/INODES_PER_BLOCK; + if (!(bh=bread(inode->i_dev,block))) + panic("unable to read i-node block"); + __asm__ volatile ("cld"); /* by wyj */ + ((struct d_inode *)bh->b_data) + [(inode->i_num-1)%INODES_PER_BLOCK] = + *(struct d_inode *)inode; + bh->b_dirt=1; + inode->i_dirt=0; + brelse(bh); + unlock_inode(inode); +} diff --git a/linux/fs/inode.o b/linux/fs/inode.o new file mode 100644 index 0000000000000000000000000000000000000000..b339860228e4c78ee64beb13b59f12397b5f388c GIT binary patch literal 14064 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 +#include +#include + +#include + +extern int tty_ioctl(int dev, int cmd, int arg); + +typedef int (*ioctl_ptr)(int dev,int cmd,int arg); + +#define NRDEVS ((sizeof (ioctl_table))/(sizeof (ioctl_ptr))) + +static ioctl_ptr ioctl_table[]={ + NULL, /* nodev */ + NULL, /* /dev/mem */ + NULL, /* /dev/fd */ + NULL, /* /dev/hd */ + tty_ioctl, /* /dev/ttyx */ + tty_ioctl, /* /dev/tty */ + NULL, /* /dev/lp */ + NULL}; /* named pipes */ + + +int sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + struct file * filp; + int dev,mode; + + if (fd >= NR_OPEN || !(filp = current->filp[fd])) + return -EBADF; + mode=filp->f_inode->i_mode; + if (!S_ISCHR(mode) && !S_ISBLK(mode)) + return -EINVAL; + dev = filp->f_inode->i_zone[0]; + if (MAJOR(dev) >= NRDEVS) + return -ENODEV; + if (!ioctl_table[MAJOR(dev)]) + return -ENOTTY; + return ioctl_table[MAJOR(dev)](dev,cmd,arg); +} diff --git a/linux/fs/ioctl.o b/linux/fs/ioctl.o new file mode 100644 index 0000000000000000000000000000000000000000..a90c4a535f2401bc3107c29582dd092fd9da3306 GIT binary patch literal 5824 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 xFoF%tadsN-O{X literal 0 HcmV?d00001 diff --git a/linux/fs/namei.c b/linux/fs/namei.c new file mode 100644 index 0000000..93f1e08 --- /dev/null +++ b/linux/fs/namei.c @@ -0,0 +1,784 @@ +/* + * linux/fs/namei.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * Some corrections by tytso. + */ + +#include +#include +#include + +#include +#include +#include +#include +#include + +#define ACC_MODE(x) ("\004\002\006\377"[(x)&O_ACCMODE]) + +/* + * comment out this line if you want names > NAME_LEN chars to be + * truncated. Else they will be disallowed. + */ +/* #define NO_TRUNCATE */ + +#define MAY_EXEC 1 +#define MAY_WRITE 2 +#define MAY_READ 4 + +/* + * permission() + * + * is used to check for read/write/execute permissions on a file. + * I don't know if we should look at just the euid or both euid and + * uid, but that should be easily changed. + */ +static int permission(struct m_inode * inode,int mask) +{ + int mode = inode->i_mode; + +/* special case: not even root can read/write a deleted file */ + if (inode->i_dev && !inode->i_nlinks) + return 0; + else if (current->euid==inode->i_uid) + mode >>= 6; + else if (current->egid==inode->i_gid) + mode >>= 3; + if (((mode & mask & 0007) == mask) || suser()) + return 1; + return 0; +} + +/* + * ok, we cannot use strncmp, as the name is not in our data space. + * Thus we'll have to use match. No big problem. Match also makes + * some sanity tests. + * + * NOTE! unlike strncmp, match returns 1 for success, 0 for failure. + */ +static int match(int len,const char * name,struct dir_entry * de) +{ + register int same __asm__("ax"); + + if (!de || !de->inode || len > NAME_LEN) + return 0; + if (len < NAME_LEN && de->name[len]) + return 0; + __asm__("cld\n\t" + "fs ; repe ; cmpsb\n\t" + "setz %%al" + :"=a" (same) + :"0" (0),"S" ((long) name),"D" ((long) de->name),"c" (len) + ); + return same; +} + +/* + * find_entry() + * + * finds an entry in the specified directory with the wanted name. It + * returns the cache buffer in which the entry was found, and the entry + * itself (as a parameter - res_dir). It does NOT read the inode of the + * entry - you'll have to do that yourself if you want to. + * + * This also takes care of the few special cases due to '..'-traversal + * over a pseudo-root and a mount point. + */ +static struct buffer_head * find_entry(struct m_inode ** dir, + const char * name, int namelen, struct dir_entry ** res_dir) +{ + int entries; + int block,i; + struct buffer_head * bh; + struct dir_entry * de; + struct super_block * sb; + +#ifdef NO_TRUNCATE + if (namelen > NAME_LEN) + return NULL; +#else + if (namelen > NAME_LEN) + namelen = NAME_LEN; +#endif + entries = (*dir)->i_size / (sizeof (struct dir_entry)); + *res_dir = NULL; + if (!namelen) + return NULL; +/* check for '..', as we might have to do some "magic" for it */ + if (namelen==2 && get_fs_byte(name)=='.' && get_fs_byte(name+1)=='.') { +/* '..' in a pseudo-root results in a faked '.' (just change namelen) */ + if ((*dir) == current->root) + namelen=1; + else if ((*dir)->i_num == ROOT_INO) { +/* '..' over a mount-point results in 'dir' being exchanged for the mounted + directory-inode. NOTE! We set mounted, so that we can iput the new dir */ + sb=get_super((*dir)->i_dev); + if (sb->s_imount) { + iput(*dir); + (*dir)=sb->s_imount; + (*dir)->i_count++; + } + } + } + if (!(block = (*dir)->i_zone[0])) + return NULL; + if (!(bh = bread((*dir)->i_dev,block))) + return NULL; + i = 0; + de = (struct dir_entry *) bh->b_data; + while (i < entries) { + if ((char *)de >= BLOCK_SIZE+bh->b_data) { + brelse(bh); + bh = NULL; + if (!(block = bmap(*dir,i/DIR_ENTRIES_PER_BLOCK)) || + !(bh = bread((*dir)->i_dev,block))) { + i += DIR_ENTRIES_PER_BLOCK; + continue; + } + de = (struct dir_entry *) bh->b_data; + } + if (match(namelen,name,de)) { + *res_dir = de; + return bh; + } + de++; + i++; + } + brelse(bh); + return NULL; +} + +/* + * add_entry() + * + * adds a file entry to the specified directory, using the same + * semantics as find_entry(). It returns NULL if it failed. + * + * NOTE!! The inode part of 'de' is left at 0 - which means you + * may not sleep between calling this and putting something into + * the entry, as someone else might have used it while you slept. + */ +static struct buffer_head * add_entry(struct m_inode * dir, + const char * name, int namelen, struct dir_entry ** res_dir) +{ + int block,i; + struct buffer_head * bh; + struct dir_entry * de; + + *res_dir = NULL; +#ifdef NO_TRUNCATE + if (namelen > NAME_LEN) + return NULL; +#else + if (namelen > NAME_LEN) + namelen = NAME_LEN; +#endif + if (!namelen) + return NULL; + if (!(block = dir->i_zone[0])) + return NULL; + if (!(bh = bread(dir->i_dev,block))) + return NULL; + i = 0; + de = (struct dir_entry *) bh->b_data; + while (1) { + if ((char *)de >= BLOCK_SIZE+bh->b_data) { + brelse(bh); + bh = NULL; + block = create_block(dir,i/DIR_ENTRIES_PER_BLOCK); + if (!block) + return NULL; + if (!(bh = bread(dir->i_dev,block))) { + i += DIR_ENTRIES_PER_BLOCK; + continue; + } + de = (struct dir_entry *) bh->b_data; + } + if (i*sizeof(struct dir_entry) >= dir->i_size) { + de->inode=0; + dir->i_size = (i+1)*sizeof(struct dir_entry); + dir->i_dirt = 1; + dir->i_ctime = CURRENT_TIME; + } + if (!de->inode) { + dir->i_mtime = CURRENT_TIME; + for (i=0; i < NAME_LEN ; i++) + de->name[i]=(ib_dirt = 1; + *res_dir = de; + return bh; + } + de++; + i++; + } + brelse(bh); + return NULL; +} + +/* + * get_dir() + * + * Getdir traverses the pathname until it hits the topmost directory. + * It returns NULL on failure. + */ +static struct m_inode * get_dir(const char * pathname) +{ + char c; + const char * thisname; + struct m_inode * inode; + struct buffer_head * bh; + int namelen,inr,idev; + struct dir_entry * de; + + if (!current->root || !current->root->i_count) + panic("No root inode"); + if (!current->pwd || !current->pwd->i_count) + panic("No cwd inode"); + if ((c=get_fs_byte(pathname))=='/') { + inode = current->root; + pathname++; + } else if (c) + inode = current->pwd; + else + return NULL; /* empty name is bad */ + inode->i_count++; + while (1) { + thisname = pathname; + if (!S_ISDIR(inode->i_mode) || !permission(inode,MAY_EXEC)) { + iput(inode); + return NULL; + } + for(namelen=0;(c=get_fs_byte(pathname++))&&(c!='/');namelen++) + /* nothing */ ; + if (!c) + return inode; + if (!(bh = find_entry(&inode,thisname,namelen,&de))) { + iput(inode); + return NULL; + } + inr = de->inode; + idev = inode->i_dev; + brelse(bh); + iput(inode); + if (!(inode = iget(idev,inr))) + return NULL; + } +} + +/* + * dir_namei() + * + * dir_namei() returns the inode of the directory of the + * specified name, and the name within that directory. + */ +static struct m_inode * dir_namei(const char * pathname, + int * namelen, const char ** name) +{ + char c; + const char * basename; + struct m_inode * dir; + + if (!(dir = get_dir(pathname))) + return NULL; + basename = pathname; + while (c=get_fs_byte(pathname++)) + if (c=='/') + basename=pathname; + *namelen = pathname-basename-1; + *name = basename; + return dir; +} + +/* + * namei() + * + * is used by most simple commands to get the inode of a specified name. + * Open, link etc use their own routines, but this is enough for things + * like 'chmod' etc. + */ +struct m_inode * namei(const char * pathname) +{ + const char * basename; + int inr,dev,namelen; + struct m_inode * dir; + struct buffer_head * bh; + struct dir_entry * de; + + if (!(dir = dir_namei(pathname,&namelen,&basename))) + return NULL; + if (!namelen) /* special case: '/usr/' etc */ + return dir; + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + iput(dir); + return NULL; + } + inr = de->inode; + dev = dir->i_dev; + brelse(bh); + iput(dir); + dir=iget(dev,inr); + if (dir) { + dir->i_atime=CURRENT_TIME; + dir->i_dirt=1; + } + return dir; +} + +/* + * open_namei() + * + * namei for open - this is in fact almost the whole open-routine. + */ +int open_namei(const char * pathname, int flag, int mode, + struct m_inode ** res_inode) +{ + const char * basename; + int inr,dev,namelen; + struct m_inode * dir, *inode; + struct buffer_head * bh; + struct dir_entry * de; + + if ((flag & O_TRUNC) && !(flag & O_ACCMODE)) + flag |= O_WRONLY; + mode &= 0777 & ~current->umask; + mode |= I_REGULAR; + if (!(dir = dir_namei(pathname,&namelen,&basename))) + return -ENOENT; + if (!namelen) { /* special case: '/usr/' etc */ + if (!(flag & (O_ACCMODE|O_CREAT|O_TRUNC))) { + *res_inode=dir; + return 0; + } + iput(dir); + return -EISDIR; + } + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + if (!(flag & O_CREAT)) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EACCES; + } + inode = new_inode(dir->i_dev); + if (!inode) { + iput(dir); + return -ENOSPC; + } + inode->i_uid = current->euid; + inode->i_mode = mode; + inode->i_dirt = 1; + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + inode->i_nlinks--; + iput(inode); + iput(dir); + return -ENOSPC; + } + de->inode = inode->i_num; + bh->b_dirt = 1; + brelse(bh); + iput(dir); + *res_inode = inode; + return 0; + } + inr = de->inode; + dev = dir->i_dev; + brelse(bh); + iput(dir); + if (flag & O_EXCL) + return -EEXIST; + if (!(inode=iget(dev,inr))) + return -EACCES; + if ((S_ISDIR(inode->i_mode) && (flag & O_ACCMODE)) || + !permission(inode,ACC_MODE(flag))) { + iput(inode); + return -EPERM; + } + inode->i_atime = CURRENT_TIME; + if (flag & O_TRUNC) + truncate(inode); + *res_inode = inode; + return 0; +} + +int sys_mknod(const char * filename, int mode, int dev) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh; + struct dir_entry * de; + + if (!suser()) + return -EPERM; + if (!(dir = dir_namei(filename,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (bh) { + brelse(bh); + iput(dir); + return -EEXIST; + } + inode = new_inode(dir->i_dev); + if (!inode) { + iput(dir); + return -ENOSPC; + } + inode->i_mode = mode; + if (S_ISBLK(mode) || S_ISCHR(mode)) + inode->i_zone[0] = dev; + inode->i_mtime = inode->i_atime = CURRENT_TIME; + inode->i_dirt = 1; + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + iput(dir); + inode->i_nlinks=0; + iput(inode); + return -ENOSPC; + } + de->inode = inode->i_num; + bh->b_dirt = 1; + iput(dir); + iput(inode); + brelse(bh); + return 0; +} + +int sys_mkdir(const char * pathname, int mode) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh, *dir_block; + struct dir_entry * de; + + if (!suser()) + return -EPERM; + if (!(dir = dir_namei(pathname,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (bh) { + brelse(bh); + iput(dir); + return -EEXIST; + } + inode = new_inode(dir->i_dev); + if (!inode) { + iput(dir); + return -ENOSPC; + } + inode->i_size = 32; + inode->i_dirt = 1; + inode->i_mtime = inode->i_atime = CURRENT_TIME; + if (!(inode->i_zone[0]=new_block(inode->i_dev))) { + iput(dir); + inode->i_nlinks--; + iput(inode); + return -ENOSPC; + } + inode->i_dirt = 1; + if (!(dir_block=bread(inode->i_dev,inode->i_zone[0]))) { + iput(dir); + free_block(inode->i_dev,inode->i_zone[0]); + inode->i_nlinks--; + iput(inode); + return -ERROR; + } + de = (struct dir_entry *) dir_block->b_data; + de->inode=inode->i_num; + strcpy(de->name,"."); + de++; + de->inode = dir->i_num; + strcpy(de->name,".."); + inode->i_nlinks = 2; + dir_block->b_dirt = 1; + brelse(dir_block); + inode->i_mode = I_DIRECTORY | (mode & 0777 & ~current->umask); + inode->i_dirt = 1; + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + iput(dir); + free_block(inode->i_dev,inode->i_zone[0]); + inode->i_nlinks=0; + iput(inode); + return -ENOSPC; + } + de->inode = inode->i_num; + bh->b_dirt = 1; + dir->i_nlinks++; + dir->i_dirt = 1; + iput(dir); + iput(inode); + brelse(bh); + return 0; +} + +/* + * routine to check that the specified directory is empty (for rmdir) + */ +static int empty_dir(struct m_inode * inode) +{ + int nr,block; + int len; + struct buffer_head * bh; + struct dir_entry * de; + + len = inode->i_size / sizeof (struct dir_entry); + if (len<2 || !inode->i_zone[0] || + !(bh=bread(inode->i_dev,inode->i_zone[0]))) { + printk("warning - bad directory on dev %04x\n",inode->i_dev); + return 0; + } + de = (struct dir_entry *) bh->b_data; + if (de[0].inode != inode->i_num || !de[1].inode || + strcmp(".",de[0].name) || strcmp("..",de[1].name)) { + printk("warning - bad directory on dev %04x\n",inode->i_dev); + return 0; + } + nr = 2; + de += 2; + while (nr= (void *) (bh->b_data+BLOCK_SIZE)) { + brelse(bh); + block=bmap(inode,nr/DIR_ENTRIES_PER_BLOCK); + if (!block) { + nr += DIR_ENTRIES_PER_BLOCK; + continue; + } + if (!(bh=bread(inode->i_dev,block))) + return 0; + de = (struct dir_entry *) bh->b_data; + } + if (de->inode) { + brelse(bh); + return 0; + } + de++; + nr++; + } + brelse(bh); + return 1; +} + +int sys_rmdir(const char * name) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh; + struct dir_entry * de; + + if (!suser()) + return -EPERM; + if (!(dir = dir_namei(name,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + iput(dir); + return -ENOENT; + } + if (!(inode = iget(dir->i_dev, de->inode))) { + iput(dir); + brelse(bh); + return -EPERM; + } + if ((dir->i_mode & S_ISVTX) && current->euid && + inode->i_uid != current->euid) { + iput(dir); + iput(inode); + brelse(bh); + return -EPERM; + } + if (inode->i_dev != dir->i_dev || inode->i_count>1) { + iput(dir); + iput(inode); + brelse(bh); + return -EPERM; + } + if (inode == dir) { /* we may not delete ".", but "../dir" is ok */ + iput(inode); + iput(dir); + brelse(bh); + return -EPERM; + } + if (!S_ISDIR(inode->i_mode)) { + iput(inode); + iput(dir); + brelse(bh); + return -ENOTDIR; + } + if (!empty_dir(inode)) { + iput(inode); + iput(dir); + brelse(bh); + return -ENOTEMPTY; + } + if (inode->i_nlinks != 2) + printk("empty directory has nlink!=2 (%d)",inode->i_nlinks); + de->inode = 0; + bh->b_dirt = 1; + brelse(bh); + inode->i_nlinks=0; + inode->i_dirt=1; + dir->i_nlinks--; + dir->i_ctime = dir->i_mtime = CURRENT_TIME; + dir->i_dirt=1; + iput(dir); + iput(inode); + return 0; +} + +int sys_unlink(const char * name) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh; + struct dir_entry * de; + + if (!(dir = dir_namei(name,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + iput(dir); + return -ENOENT; + } + if (!(inode = iget(dir->i_dev, de->inode))) { + iput(dir); + brelse(bh); + return -ENOENT; + } + if ((dir->i_mode & S_ISVTX) && !suser() && + current->euid != inode->i_uid && + current->euid != dir->i_uid) { + iput(dir); + iput(inode); + brelse(bh); + return -EPERM; + } + if (S_ISDIR(inode->i_mode)) { + iput(inode); + iput(dir); + brelse(bh); + return -EPERM; + } + if (!inode->i_nlinks) { + printk("Deleting nonexistent file (%04x:%d), %d\n", + inode->i_dev,inode->i_num,inode->i_nlinks); + inode->i_nlinks=1; + } + de->inode = 0; + bh->b_dirt = 1; + brelse(bh); + inode->i_nlinks--; + inode->i_dirt = 1; + inode->i_ctime = CURRENT_TIME; + iput(inode); + iput(dir); + return 0; +} + +int sys_symlink() +{ + return -ENOSYS; +} + +int sys_link(const char * oldname, const char * newname) +{ + struct dir_entry * de; + struct m_inode * oldinode, * dir; + struct buffer_head * bh; + const char * basename; + int namelen; + + oldinode=namei(oldname); + if (!oldinode) + return -ENOENT; + if (S_ISDIR(oldinode->i_mode)) { + iput(oldinode); + return -EPERM; + } + dir = dir_namei(newname,&namelen,&basename); + if (!dir) { + iput(oldinode); + return -EACCES; + } + if (!namelen) { + iput(oldinode); + iput(dir); + return -EPERM; + } + if (dir->i_dev != oldinode->i_dev) { + iput(dir); + iput(oldinode); + return -EXDEV; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + iput(oldinode); + return -EACCES; + } + bh = find_entry(&dir,basename,namelen,&de); + if (bh) { + brelse(bh); + iput(dir); + iput(oldinode); + return -EEXIST; + } + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + iput(dir); + iput(oldinode); + return -ENOSPC; + } + de->inode = oldinode->i_num; + bh->b_dirt = 1; + brelse(bh); + iput(dir); + oldinode->i_nlinks++; + oldinode->i_ctime = CURRENT_TIME; + oldinode->i_dirt = 1; + iput(oldinode); + return 0; +} + diff --git a/linux/fs/namei.o b/linux/fs/namei.o new file mode 100644 index 0000000000000000000000000000000000000000..dac657b5b6096965e835af938fe0557a054cadfd GIT binary patch literal 20752 zcmbt+4SbZvwfF3^yV-|LNCF8EU@eOV2^vC>pr{}LqI_ehs34JLlWfRJzRd3Op;pm_ z)+J))eYLGEnqaS1dz;=`@2#})_R7Z#*e}smu~x0^6)TNjE!C>^E${z7bDrHzMDhOK z{rz_T=ggcrbLPyMGxN+7xaHC%m$_Un<$PSqtumZaEi+9`m4-4kLJe0}bk&sFjoa1j z`)_|?_5S3Wh2V?3RKep_y(*OBej z)>cRvtH-0fn2nQ9TB-fItZPYWVe0wR?>}xl@le6tPp)1Qf+J=^&4T=!?L##H7=b3$ zU8<|vv-b@TToVMpO@DShLff1W%!v!Y(Y&zSnnu8n=)xrzW0rs)ILFR^%F~%N6k_GcC#zvWdH*~xVhyNLl-a-w*+qY@qmmo{Hdee%Fegbk%;rsHCU37{DaAUJA9+EITso~_Jyz7X|= z>H24-K0V07Q~JV*x^F`qJ`9KtOSIp0ly@n|<;4YG*@Al5SCW$XLz5C|5}@0SH!7WK z@B^)y`8ll`hE4*;^?|#NCyci;Mg{i1>d{kNiRE;49Sv%)wwRA72ODm`~fVnkLSnAKufRNa3j>y#wjt}WEax_-%Ida{`-vr+}> zOVNYbASS4Hm71lhl}a$t7Q>4k7wlm7kA29+lo-i!^2|{tK^}tyBz21D_sF`c-cjp9 zfNRUILsQ3c75A9|9M!fahEU(}2cTjHViVSIhbjl!K(1;J%5{eqWBlNQn4h3ZaJLv} zNB>$B6=DN1d5=?FEGZRJ2`-otvssfx2iObB(u)XuF=h021hl_(AL7hr&+rX)BHT|hKW(XFriKs#j=rBveA2(d~?1SaiE9obRKTvVka zZU&>)#2#bqisYL!;E*7Cuz`;0+Rb6JYjCI~FkL47cd(y|Q9@sr9RC>$%u)#MK=7xQ zl;&ZkY^bEKwHKa-ap240>vE;%JnbAa=i7`{91z6aT&N{!cQd5QQyF)sTcf;;9RW+7 zdhlX%d@@#JN!J-rE}5a9nc;;2nPCo28>P1Kj&UdwI1ER_kKjQ6x5 z*U}X$N((8ak5DOgTrRmfJL=L6QO^TFnKLb8j5jmMf+3Yj7D4Juox%W=*GxdPFvk3Q z-l1Eb28UvusenPJS;m+CJ=*0D89^Lb5P?~VHkV3GtkMdS+qaB`aKTTXlt|RhnD#e4 znaq1>=j?$6C;Kn|9D8C}s#a@vRtU3fS`FxI_oSCp_H^@9?$`Yt&qMHFo#-PMkh#bM z71b$t>}8Xr^~n{1>Z}*z@1TTkfRcLu(4qT;sSRX@?xpbAC!{&r<9AYeg+8s9V)2v= zT0B~JA$$d^O!|tS3FES-Gt<4E!CBJ%XRU=y6CHwn)1-zm)uh7@sYh>}Yn9UHO@|L+ zE2XbxiOkLa{Bu>-rKb!tXG4Lru!885Ga10bDjB@6E`Kj;+zFnl(}o)rLm8{-dEdjq z^jAY8^Y1AZ(}32g%z{XJQ)ju;#mf%2j+ayJS-mC|Nd9-?Wi?vBBJNqtMCskbWZzk) zwj?`VM*JlmFBxeaF9no7&35-HT7P=HWEARn`KigB&SocGLG!HKnQ5ZqrOPxaJ5=pK zKL56N+(fjAGSO4;_z||0&IUdt zmf~bksuC*(cVnJ@KBe7f+i@RPci7lbDvvv6JI#vBVm#yHxuSwT1kD4Zv+3gQ0MFBU zH9Ari2dgdd_E2sTrLswsrZTZyqt5~<^Wf37g-3+H9~pmS%P+VtWOX}>FMy&T^ps%n z6%Sr~&t?ZvVgbdny5Sh`ME)6`IaqzF)p-TFEQYQuA2?fG$@bczbIo>{J`QE~m_?sr z!Q!a}YO6EXA3RsPZoZI(w3P|J++mF25Y{&o14BW=o=M3Oz=nY59fo?=V?sni%-kSA zy0i(m7N)lf-XYOtrI=H>1EM8hEle@BUFv8sgS>1d6`K$lB_hOB(nspb`V_Cf1;-_yW@xaLzr_LL4R!49iWw z7$xn7PxJ-Yz-=DZsZ(BCEWny!`;?feFV}c&flIYFt9G-U9M`h;@AFJPKIQ&>2KHT; z5`a=>U)jHL>qz%}%KrUFliddF-`jA|mF%6~M9k^o-zj~X{k!(ftbDAufQ%A-WN0^C z^19H3Ca%doJv4a$NGkxHSq*xJI8*GGlNmUK{>s75n~#QAgtgXyiVOF}D+Xy#PsS&E z;`C5WS1nf-ZD!o-^DdwKaTmDZf1vF;qb+bDG$zsX2N4 z9R!xs;bZ^MQ~mi2_$^yMDy^|6&9vfUs0bu(l4YqcLA`VJQR3VpIax0~d2Ht7OnDj% zAR{hfMy!K#m*6`cn&e6HZ9Yl9JMc-;?wVt#=9NKHz|oM(Ecmo9hr~;P5=jBt^^_8h0GSR;75l^ z!K8|T`*zlS3HGH9G8>_#E_f|k?NF0 zGvZS2awMZyn!qa`{4~nrc6x=GgzbeWVt(-TNDXzrZ4z}5t(*wYwAPQkhs^Zws$}qU zSkSS~^mCt)44ULvZjz&ZcuNZoFz#)pl4fa?y?}-s(+h~*ow}tqtb#2wmoTM+o+EY3 z!_WlRnGO3B`SH}s^)tdVjHt{lND$}6(!uA&2mX|$Ts!B~3iT7j7AiDPe&vivbIwJ) z=?m)YkQksuhZ-ZYoLTYoH}2);#vQp<->zlm65T8PoTt>X_F!jwdpsCzYj2E@YuMN* zjK|73sWyf?+oEmjf|G;w;l^NNv@_BWZ|~e3Y;OxTMm7W|R90>B;{ab#0hN)~j`-#* zndWdT*wzwlTR(o*dBL&?jguf#6KRRWsj#iREwU*Zi$~hx!KP?S1Om`?5v0n46B_;M zoI<7WE(#xy>sR=7J&2zh$>Xy|zYb8!ngYgldoBaG!^-U?q1^RCd6dWF+lYtYcpDwdTP!_g^zE+JeQJG zzLjis8GH2j&gAd>D1L2U%nNz}Gl}2#HOed`o$K3*R-Q$q^L($fd@<>vzHiX7C6)Ls z^!1=a&(iZj7yJH9dKu{w-x11RPCDRwj(TcI2bJx)4LXKgfi9nLdzVp(ZyoBrwH$%+ zH9?1WxgL$rg-Y)iN!z~1SbhcRJl_*6U-60${rm4CeI?5aEq^tctLwoOTmJW9fp;ZG zTVnYiVvS}3mj7au8764u)_1NKrquF}OxKiIxgF6)P%q?whLe;nKBnmP zHy+=tyld&VX3O8pnlNix;De2@t^UhU(_#7dQ$YinxaEJ3<7p(b$@23|?~TycH(CA^ zJ8gO!)3e3OZE1`vZ?nf%>InLY#gzBD|DA&^%R(fSLxt^0p;aEcTLL9Rmx8dBH4|OU z@LW3!s(eRL?$M?y-xQR4LX@_AYth`Z)`at92ztV#ZQtXVcu&0v+iOtbX)s~iO+Ae> z@tf~^f_j=5eL-IOap{ zK)RLmG~btKTN~*rAK$ur+DT9M%^}@E`h4G8?CW~c7bvR@9Ta-v^rvqFg%a#Q`F>1# z18K|0zkBd(B<=C-WM`WwZu@Seaho@yJP-b)8?9Yv*5din^^o%YlH<79sDq61++x%{ z#b#TKx-pcwm2{5pUaG#0wC$^Bmr2ro-%gscmA=XI-O9GxSYGHGf?v;9*j2IbAobi% zy2@9`@)TuO_#UCo?KF3#?+4V=MY_(ni1K$(=UU&{)VYIm(&+mS%HK)fH2dzO4PPZ4 z^=)VQU8Jv5dCVxcqCf|YPgxBpF7(|05Q==$sjQowE8h>Ppohhl%DW9EKXMukRXKlx zH9p@8lv>Oyg}$l(Wcz0RoHrzg?I)6+#zr1r4GXI3@oW2TX8H6&$mFSfiWaaOQ$P)c zwx<9^)?Utpw=42pcj?xtvm@|Kg%b2l|$y-X%u=x%Cn zSKbQJ#h_6>g>;E;90upDr22r$V-c5^_DGSk{P4nWywjK}eSQj7Q9}7%B0Zh7#~q7R zD)0HEZQmbQegWw`luuRO8KjZr@$0>ibTP`$Q{Ib6m$(}`rz!8nqyz2<4WCIm==%?N z(mRWEsXG$hq`a4qE^|j39J<^cX>{mHcck8-tK5+o^vtIG43vYeCOs47QRSUOx*Bak z&m~=ha^;;za)F!fsv)@qRx0nMBx~J`ATJ}i!rcUNKFO8tbs!gztaIxewUG2$AM=lQ z5$Q%>EvC-9cqIJUtn&6^PMOoRYsaa)e}d*$Ty1-ptMVqGVKI`OF14^#dkf);VRxd= z`&!?QAZhnPFpQV^OSL zS@pZMx;mIi=hz-r+MYW=kD3l6tq0k38NO$MbM2b!cT9fJai(^}Ljz2H$QU9fKjfIK zjeOYDt)-Dd8zUddHuAe-q#9*$WUsL^Cd;?rJlC$huwpnjMe8*uA{vzS`fb`#>qpdc zw0|-+jU)8bzhSIhq1|!Z^t5(__V1sKK`lkmHq3-@bt5eLUbvOoas9@oT2)fU4o14D za}6T<79As1xk`=JMvZidRikwWqg<>)q>a|D8s)l3v-TL+JlbW9UN`m+9OoEm*)m3l z#aP`1CJs|VD{T)I2fj(sDZ1`ubU#x2VSYzMr0rov0_N`QbI@-+ki!~-e&ZN47N-McIV@*FSbvlS9EmN!qU-t z7RFhUIL2_fjn{J4&X%z{IXGR zS@x(G++s_XqjAAfVP#I1rTfrJ?s73t=EPx*3u?szvjCQh1(=g5 zRuniEe0`t=_YSn+n*%NQ)<6p!)>yD>fCcxZE%?H8X2WN+rhksc;Z&!jz--Rc^SabC zMyYGGUH_n6zoh*0j$NZ4&SpK@!7n%t9vfmR{H>TJsmWo@)V%0SjdAhsL~os0mM_Tw zSE_Lz!BO7rJi3mHA&$LW!wPW>;wfTW3dVWwAUXa6RM|x?{V?tt=9-XSl=cIVoqPa_1W%9P7|R z7`Ctr&|)Dp4bh6dj$(h77+jE>)eqP_muq1W`yV=9Ei9S>J^3SC6GyWI4>(j;I6_Ut zTnwv#xzssv^ui*Jp}OSjbG6)XZ`uy4M5&^x^gzfKpRKiwK&cqZQaqeGqa{1)lghtl zl$S`2H`A@ujFxV_3yY{?jC3pPSm{sLK!t1eXl=kJ6`diri0Bt8lp~roP)u!R1hYra zghztY^~lC&dNSoWnPYbG#VqPy{x~;6q!%;ysRu#1T>r=)ieDE3SK;fbsF)IMYiLO{ zMy7;gt+=*Iv$&^9Y|1W(ZH{HJO2s1UT5(xb(M&~c;nqmBqJh0NN5YLLgh5R)gRzF@ zh!n*)cSKl

t6jFNeh!)_IpQUv;DiA;f&ucyfW2Mq-XQX8@|20?2f2;z+a&x%^&EZ$HE^0geQ^*BRjoLX_JbbT1XUcYOHky)YMexvApg zoC#YDjl(G0|C^xf2bW-nCYVU@{UW>*beBbNu9Cr$uiQ>p1JJaC3hoQ71=MC0oP2B` zwg@pdBodY_rmbwf6)r|58&Z=rL?fSSf!0%zf?I2(S$Pra&b!_m2tPc~8Vo#H*eBCx zFMW%MuFX4}kS7jc_WlHJNlB0yOZ3~3V)$3J--7l}RxR02^h+zRQV}40OcH#x^3UQ& zN~@MIg*bfYesT$voNa6+`De~mp*QohWZ$6P9%XA2ft_d^+Vyr(iW2Sz%edR>uD=P7 zHvUj}WHcUm^i>wJ?P4uNg^AI3GWx$vH0C9`dAyca#5zy%a@adbIYdXgkReVwMF29& zVl&>&u&6%n;H=EgL}sLLM~xHlDgBVpI`9Bb?AmFXgN8h3E||klwJWe(r?!wc8z5(m zuBlU^H;}~7fJD6K_#J&cnSJ|tyk=x(Qg58>qSC2_bHFz z9FH>%1e#^Y#YP+MuOMsEgk9^0?aNItwzj!W5y;Kn2Qw^S2FI5Hbtv{ET(%+2A9gzo zv)sTeU(+n?sDWMaYTCurKB@KRVx2!%d5gaX7%6)|87a+QK=&@K_)l5TUoPB57vZcP zT_nhUjeP%|E)oM1xo@zWE|RiZk8u0O5_Tz1$P;o0h2DiYeO)_;VB0|h-t{e`c=Nwk zxk+Vr(T9G;`b|Lnkkz%5(=XioKT^_m!jgWL@UD&iStX#zTDjY~AF7iBiLY|wAOhd67G9;fV z0$9ZRP$<8&S~ygUNDvkAWoaFYeaHwd`4mr*i3|Ur`Ko$gTn`oIYnIZli$)%S3|XB| z{${K5TJh_)en=R8>W-9+uE6LX(SUxd)-AmFty}ZLJiw<$?n(*ohWZo5x!X;ji1L$N``1*gS+@SF)Dszw# zb3GNeS4lvErCj$eIQtX;6}6sGLz;I$E&p@HlG4L!@Aq@W{W5UE$GdUnyTFA#LKe9! zxe6ey(Wo5IE6!8A|$Zwty)(OJLN@P%m%$`Ja4#c7cIR`D{Z21 zoz^N`rv=fj>VX-E?{AkTK)Sf`TkGzckpWIL!Rxb9bV)&lYB|^#=c5wy>8F^fc|y^8 zJ`u~38`o!IsGcRCXu?!WJgwyBepyD5**BoY2AhPfL-Zi|aB~IJR*Z|J?fpdNKxisZ z2Hs1`-Ga@By&y00uORO&2<>jjyHuxnCFFg$NFFO`W~{Pl(}7kcA4($Ah^&;`XTdl1 zCHc6(U_r0NeAH3Qz8W-+#^~^9d}-XJsK>Dv<>l+g#~|g}KpB_QIJA@qZg)%HG#p@Ua*@SpN-4GrW!4T;U4gdfC&^n)9~fcv?^ zHyDjp65I9xfs5c5yAOo=Do7}eYvZL$$i=A#aE0LM^cjtzI>l#1NEfp{=w=m9O)o*# z7DBS>EpbvzmkZ0H-Dvqth$%_4voN^~P^;qMy!HwqW>`TdNu(d+wWp1Ul0p(%onj&E z2@H|H=9SJ@_p7jhCYy-#yE7pO8()1F(brap_h#)Fs5UU4C(ZH8{V_A4qbp;bTCbHd zf2T65z|juq6G9d^5Y{rQXt~yjd<68vuoR)GGev~z9LUWT??7&tEZgY7$}dFiFZtRi zNr>V14LJW4_{#w=-(*%0mKpEGB3$7BzSW+NH`W=p7^Y=siJB?G6txi`(+lr zGZ2Y-;*2QRj`*+-2NcAM66Y&W)#>LD5NjJ$HTVo+SGR?;&5{Wty@Ok+*5D!_qnr_4 z%W(=LlTI^K7cB}4%HS`U6$2Bm=$}P?Z$ArFAv2Y9o|S=yan)ND#6l5Az(S13XuuBu zAms3Si25}=GOyo)#^$X?{)D-bz&udq(wQf>ug}O`lq}GvJeHA?7Er?IVans>4|>XD zb(HnC%;%=IqY*SlbjW1)9aO-)9q$Gm2ofwa3KAU4jz_(3XK6dmEapa^GpJE-@stA8 zLxg(Dh065Ci0A?kgESF>PvBj$Y2{6M_8JnI5t}c*YSZ)Z^titl6k}n;7AYSf-Y)|0 z#>#p?Ql`>)=7v7t)-wez)UdP{P(nebYXtZ>07?U)8@M>;U2TuNKTD7F?GT$UvwrcO~Ri?`7|LPI!u(SD4GLbGM9 znuEgYf6;b`2eslp`;Gp+3y$Zl$E zdj)Qf!#N7QA2-!QD$%;8F4DrCOPfI>=uRSUQs`b$LifaPgYI`efre&(eFBjn3lvPvDNMIRp$X4m*XHX$3O?7;vmP$eIDwj2pGi2vOV4uaE7nJ@QIy3Qh6>MV`O41NL4ccz=38RTc+Kj4uB%?EO(u|7wm zK3+UX&44_Y)Q#A_DpckUKy7n8@me@ng?4LO$`#s^Dbx!OSxd=vv2qo7U)}ivCV}|kg@XT;t;DDm>8Oc%PDy9m=LVQ;I!R^j zZU~c6T0qHxEB8|XOk&fmnvI{jb*-V?Jpj$k2cAM$8tt|l zPu6GUNP&hDHx#LM4BMjw-Ddo5V%E}$UG_BYq z;##J-CKuy+*Dy{J)=~++%1+`|c6@FLw7+6^Pu2L1rEo5m?%C*THQ}Y6kP- zWYB~IXIAceXzblI-x4O18;0c1QS^>N<|<~sWcQg*L$XU?WsZB+!&+ks0CG3thpn-{ z*BXPso!K!L9_S;wAX2Q{GZ52Zn0^N*zFgyb!9-Dakx1_*>W!6bUp%NJ0?M|?3~52B z@Kq>gH{3cC$;ApEHRmD7iY-qtz<(r9{b-2Ug<*IfDWhLOr{jttPr@k`s^5KsleD8%V|TnF}m zt20(iQfyCUwv3rR(3+MUxa{;cMr)$c0}|syh!TT;fFy!S>Ev5#M49~z^3UerVZcOx zC1sd@E;q;L{z+ke4lG^GdO~fE&z;Js#~4NP1R`IVf5;8-_I>%HCrypHWXGyTuv&~Q zF|7`E-;2||B?MdSfl;OR?Wl0z-tK-YyB8}UYuHN-9|jZ&tv7Uh3=^aqBp98`_}eH- zrYv6fDrPA@fFK>4v$lo&&>-uYdlmEjJlJ8BUL$8{aqknIw^2)Ku35g6*NIc3aaOM+ z1GTcIT;)so$8A){s*|B;RKG^BcDBVCxQ$(X#U%c&Vo!h$^i@jqbXw_9M&kQK|A)Od zfsd-X--pk=voMoP79mK0AQuT5B)|Y+HOK$~0!EE2%BGN&L_!ji35z0x29yv{a4T9= zC}`E9(*CTXwG{yc>r$xNVx@|$)x@CUQl(az|MQ%4?#yIy`@iq|d;d%F$({SX&v!ZJ ze9wOFx%bw1pLcP{^j`DXI+ad-S4E@G$)VmBI@X$kx)as;#tuaBMPb;FvdNC*jX^8{ zsp<;~i3eSYFgge?U48Q8EFpgTIewn4e3r}}iho9_DYldzivMwdY#QWHd_QQZribDxJZlHfb*L%4VZMD6 zGKp=y9Qri<6xI5mix~glTscTo2J2`I&{ymM#a4sEHPZ9~d?3fL%~vDa(mBC1jl&0>&+P@De_?c^kFPFM~M z!o`KpPr*i-_LhrV>A=K*5V1ySH*So+S!E&P(-1I6t{%Knxv_epEW^V|r-KF`ixaNX zu!=V<%~G#c1`txfL-NCHwuMpD8WLsUg9%{^T(Cz#smxQ5qIpUrmirJ&y1XfcMJ`Xh z^L1wMx3GO++nFSvtE2;*tA5Rh)+2pKH=tZ0QFaEVCEWNSdK!6&%s599Xyfp#?_5L| zt3^z!cENlmpc0X8T!u}ujiq;l=bv&Xf?RRfc0Iam+?heRJ`qgb^Cc4&p7g|`IABd^ z`QH#9pITW+Y$akhatMIHCF3o$?y^n5tK2g?Dz&gQlCr*99mGfj} zoxQ$gEaPpb^aOb)b+t^ycqC#PT!Hq5o#!%B>S`cq%nV~eLw zB4jisR?F4~i;(P9pRGR}K-YRm)(A<%Zfc9Gv=&!>c?BVUtGlH-Kno9S#-a@PwzXv0 zmNU>1aKIi}@;SGaQ>EWIi`y%m8NerU<53Lw1yLVoolE~{E5Ma8aAk~gr4O&9_Hjz9 z*BRtTnEBcvpl}uxS^s`(``8EAKD1dSk$vHWxSHa0Knjya_ zFCV2t&K#!3*W=i0;f6B@P>py9lPg#LNcPC~3{~U#c3_c>mpQZ}?Zk(%+J#x&_}$&) zRXG^R;SS4YB)2};_PMEhIMtG!I(kz?^)p8GQW;e>eUiPJnx>=T)}3-=;;n~6D^KYT zP%<2=(5ycOr?KiYFE2+zlN#T~xREVnBX;(L8u?|8<`t^5ot?CY1@K8KprB!EMDY^U zpQ<%XCDm0%U^?Eyz`g?umI}`GVd221>BMREcvndvQMJS@`LpqskYDFTM07hOEyva=SgBYszX>*yZ>+V2_`nhtXGN zJ92D7qr~{Vrwmm5OdWSVu;Jg%l83a9Rb>#V!$4~{;{!^&E#dJ)dlnTJ7k}AwX+0#jQv+72lrF7&mu`!pNWd9g-x3*tEcL=#oaG`m&T?@c@#Xv= zi$R}-Ib>5DgI2>wj?EL+@xeY?W0}G^$&YJj@Krt>h4CgN$8(uD(>Zdh8qU(wr&@hhC_?>BvIHYz$%sFSou| z@Y~*uuxc%Rh^##w(KHIQyfdIL>yhbqqsp*PS9b>1(e_)T;b&U|(-BEVPe<;g)E-+( zPe%d>8ns(aM>0T5H9Z|s#;hGY%jOt6ol>QMY)*Qy%&Ac1L|oks+s#nA*`cVE^i*Qe z&BF4#0>EXm4u>TTGf&?0;RcA5jXqQBC-z50Jv{o^ z$W;4LE*)Tr)pm-Uvz|>Y7?isp8oJ8Z;{&sNV)Gz29DcU5d9)6h^WHw1=8Xi_8qOc& zmwatuHjE!ICFdX|c3&}q0l$u)x&x_laUU~X4_x?uuH5*Pw1WwTwd5U)^mbmsKJPEe zI^N9Nxt@*kMFpPc)lDcMJ~XGvE8nFa3K$ot*PPgm;>K?_Jb*KsDUdrACAQPH%qG6? zK?Sl;f>9Gx=T=1he%wEa`dBEo7sv;xl~uOfn#wlpPkSc9sq%x4c#9o_mKOC#?#kDI zwKjDZV7zURCm}ySn$DokM^H`gBBEb!!~_P0$(K7ET_D0=cUE{kin)KatS_1J>&~vG z2ce2x4yoMw&hrS|Dpac)2yz=t$OPhxYk0LAFRx3p0Xi7r5d_JJ%uGh;p%IAC3|Q5? zXOHu9j%2STy8&$Fy0xjikJ`j}6Ou(U=Bi0y&xC!H+sa3JQ+~uxPNr&FZP-V6c@aNb z-b&yntHJ_dC#LAobo_QPe$B%XeSFS<(P#YNg)Qnzo^DhA?fj&`fIt^nNYd$y#;e!C zxvIoyqkp2&J79E;vPZp;%Kp%eGS#?Z3DZ6h3F|&WIfuKBQFA^t54xBh1Aba_fW?!y zw`L%#e#kcK5-;&AjJqVI89$PTJTV zML@oMJ>WxiV%@|}L8m+gJXjHYRqry8t4|H`sb~vxBn}L+Gw4FzNb)GKi6 zb4TG`Vehyaesd6eiu$p^K-@Y#5BV7R1~{U%$TOg4HStBpREUvj2CMFP01Ow!`D~ap z0bc_ffj+SJ&kvv-+r}TK> zRor>&=kdMRv$Br+2Al3fq*Rh1?SZ*#8MEH2hf1(E3&oVFe}1i*3vzV?ZQ+1TQjRhI z@fv}222jt!NIJlY z+-_Qp33n8)i{_bd&bI`~tu{z#>u9zK5+5iH`&X<^e-rtYi}HZ3pBMF;coB{kihaV`3ATxvQYGK2==0@=x_JM< zqOYp5tPpKAdzABNMrVhOwXRTn)c6O)V*`p_-M+wj`KHhHH_F=k zU7F2&pher2&0S7v?;oHhmD;VrQASu3m37vcmc9sA?c5AyYZNN=Ig;GODjv~`ZuS$_ zQQF?)P+qq@3yhi%0joBj$)MxH*#B9z?3U=*>tN^$k$crC2Lpx zzGwgLG7h`8Vf`PmbC4gnlwHt<0B=<5DL8g-VZ4Z-a9^Yw$|kP3vW`t+m*Iqu z!d-&kWi`QNionYkyYksoC?w+N#t6$`;`DrEWW7Gjue{GommV*$-H=w+{B zxyoj6O~U~<@yR{}fp5*~{nso-mh3&cD^uZ@t-kj*y5%OsLPYvq3`+lvq7R!^gWbGZ z4bjaj`c2i71gA(TS(DIV^Lc&f=v;yh^D>f4b*GZ#5{2brWvfRPeTBu9rZsk8G6*El z+OXEtZ8dAE4m+xpSoJatwgpmPLqN5r^2K7^VrsOOs^2UWP~b%yg__>dzMYyg5O_L} zEXKJ>J|2idqh<%`QW;K`o9T99DFsW;Y7UN-&A#w=wpgXcC2gFRur7te2w4_5ln(o^ zX7-OP3OfJV6b1d+G{iq8TsFd?;G?}dU8qTCHuG($;Z&mhq^-omTr&O%H$TVq133Z< zTZ$?e_E&AQFxcy~2dgkx2Z%PN_6pH9mpr)H)30jTsBkT7W@bmNfwrz?Nlm|2#UaTR zK%-udLJ|jGM@7QbggKySV(W~6QJZuIIw4u+ymISNWx%SUF|p2o>du8P6&j2?t> zHx~w6-0h}#7Icw9=5806+@Z8gbvEaip=8!hg6luq_q(nSFwB zim(#am7{QMpAVFt`-*wfbs?@)qA<>WUqUi6Oafv|x}huMEfb~F(9ks}3L&kLOpsXF zU0S?7OM>*)#%WmINduAa=#ly(N17VCGNBEK%|-t$!EkyVmET^S z-!+v#CUiO?lE^nU&iT4QI%nh6_!c|;5J~4J8?XMFN&V)t`|1vw;mm6;|L+Zt$==TT zhK_JMqmK{9^_DmC#vXi0mjHix+f zT?F{IUsiOqi)q^_Sl4Jub%|!nc0%Iy`;?pTJ}7x_i}REeENBJ?@MZp!p>H-<>H0)F z4CzQC`YoSQM_bdJspG-|8O7%%1U=XjFKe8v*a?sBlgc)8lg=eBgv`e_75OxA@h`FP zfqPoK*%pq_SVpK25pp$cLi!rIGNr09+=upWwGMh ze{0usP0tHWy3)?Vo@q|{CU?=%-cFO_f&?_+U{m%`66)g0uLM*ezqVQ=9D8>*{Il*N$Vv`Zgu zY}*CODIfB4V#^M{bZ#Oj(BPwp@+?1cAA>CvPTs-usd1+d?0)eOJgO8m^z#JegP-mU&6%!4!@c^p~q zW0J)MJdB%rMi?!MyBrX1FGP@ar<@5lxM{+w7G^VlWLMxSI!!S zMQ@5WR%1lod>Ppn)pTkcfk2wGd6k8$Pcdb09>c4-HSsJs^=SWgVeJK9(q6;M+l>pd~ zDH?}QJ77${V=txoBYV;LU^9m2*YwaP;+G{x*=;&s3k+T*Q!;w>u!gST02_R=W5bpM zY;MHH&iZFno*k-dL}G7er`PlqVy|KXCr5c%O4c<7>P`($xZ!mOp~3`Zh1pI$#4c76 z**kct$44aXN`2~6_-QK?wS0||544uYu$|tv)t;qV(YLBG1ewixmSn4KpxU5sQIiS{ zaVnw=4C_uPB=vZfa60wAK&@*pmRgS*4PB|t5x=dOOwFgiMN^5Zh;o<{E|7o!1X|eT z*KT-GUev>*u--$|yEvlP%KOqS(Qdqk@@IXE{Pwj-i_Ae1**o~FV@%Ta=?L2RD+@Bs zvv%-P(oKh=k#C4R9*s<8)3Y-g;oJ6`xY0Fir+`RpH1ayD=GBc0(GxUZrSqai8g-m& zV$`^xRg^K1@7K_kpz1OA;pH2Qv>HhemqUi;gyy)$d<5R?Zmh&<6RLgWn?wogb^>dh zD0?IMdV0Q=H!0^HL+o)2FYX}={h;ZNG={_1NS$0Q?u)j}A{yYOfF&+=Y z$?9b5&ku zmm+G-s}u{{1tiN-tjowM(1Ac)2lAR7$m`!8NFQx!ud+0cmb$Az&d{uFinS1|hOTsg zoK+i#>#zYc3-2o7OHC8iu#dYRlGMk!k~VZ+&u!X?;3mm|=h4V)yrC;y7+wjXbM#dH zpo`-{{;9lQh%4+;^~yVihq1X*QG4xjyXvD*=*dHTHsB>b8?Z2l{QF_g2K4&|fjrd* zKXUlJCl6GsO*`xNuRmIMs1~{S6uDAPQtOX?REKwTU=WkoO3&Vu+wW^yms)!4+MZzD zAx8`2dsw@knrMf$XCyBtgfG!a>dS*J3y$F$5v`+V%$;%R^t0T15`o-w^rpT3z3(o} zJRTgI`A%>`C~4i<%MCovv;fW#@8)rflCPG(?@2m!^?P}{t@o^}L}Mp8BXD-=J$KH$ z*?&|TM)OOGFq`*ZIvsmyFxY9B=3Ji@lQ@3OJ0bK*=TGwldnW8U>Iu4@ZT2+(vwoVh zVVZB<3qdzuq9?@MIs11z@nCFX?N}KFY&Y5Kab1Dfw8g(TY$;A{90iR1wf%TLy^zbPT7DGt!;b={@VTFdkY)4gV;ui_ZDjX)%%r-(fo!Y z%;v-CQ>wBueaiwhXDZviV4NcS3F}H=LB-w(T3@(m%M5l?Y)4J}kT*Bfx|bTF=}nA| z_v1DApfg7=Gap;^?D53nJw4|Qd9!IRSR+S`wlao~u!amB=1QIkTo-l6&oSabo<8tjSZdr(Kvc=Im8s<=oj5FPm`jMVS|j`@R4!hzbDr z+ysVt*Ur1*y7?_&u_~_R^^dq(8Ij%CYvM9Ps7$qLx^C?Cclg`RWB0~hYjC;2>F{6! zs6umsF`0Q)?#%0!ndvAMEPOsd0YD3@&GdkR5`(6%R_=uz@@C^xTw&5Bsph6VgAqD% zbSF?B>gY~{|KE9p5aS;k-jJFft`mnejo0!HeZCZD3!eNT$6b)!jAKXC!T5gHwaueH zZJ*j<*;vO}`KBBE`eS`D`bX+a)$%>{x&BA$|JeBb?<$}BZs7xF%~!McH)668!VsL2JjK2sAR>>Vkz7E@<@QO(r!ct2>Y+2UvWW5^nS9omsdi$fY3M66W#| zt^&9UL=4ICSKT2Kw&;%c= zhRzM0>-L#L_MUhE-{s77FYC-LztihJFhfa`UPapGHvfa8q~4uo&zm#1?tt@;?*dF+ zWr)vlK7nIX-9Gn;{Tr8xx_vHrK2iUNH6L)e^y~+Y25-Y0jG4M8PF(X3IcA#U2|DWM zIHxz>`VTIMIrkTDYMAPT(11A}B@!IG=0991S{BzZ$G7fHjHZ~CqG66_1MGaH4b{)_ zoIl4IbWlH9Y=V4!MrzzgZT42m5qY6}wVDq;^wBkSC%9kn`#w7?HTlAKjQit@v91{} zu!|s1W&|GFIi675uvQ#Lf+^tpD&Yx;wJ5Sg_!it^cs$-Nay~uLN_Ya`1c`<*{=aRRG%n=sHFkG?u2bQaQT6nr2P23PL@NuCYz|#3)Krf;uAMNb4>S$Pleqrs&l8;KJ zQ@)j7KE%2gHEFi))EQyFWYRBu^wN?+_XXd=KJ9qr7e>#o{IVVfq+f_xH1Qe(<^6(q ztd!z}4Js^hiQy}(*=MD84qvip;{AvwHh}Q~q4f2+d}vRF+lOHSL?&zqc#*f^YdvYgcE+6&edwGl`LuljhUE}o$8TrgZy@mbKOc92^~jxe6EHm zmW6{6YAQ#F1nTzs>k-Kwz-)eRMYqr?rOp_o(}J;$j6N-my^Im1ZR}5qZlRNb(%JMO zS{Ec2-vZ^<2N|*Zqx60TT6(SN00j4ZfHEO>C@K~CZfqU(1(0mMh`1rQrlf?o!Av4& z7&)eVRk)qlfjXS9Up+xq%2jjx&MajXq%<92@G~q8aC(+l_?Fk z$Qu?|CS3D(HtEdYdMq;@f>C9QQ`6SAdbO~{t!C2dE!=*_CC8SwR@%0jv!rX9$Ewo^ zbsDTrY3kHRoqDKK7j^QflS`iJ*s>u;k*)T8P&BI{m|BUuy+PEZ<#^7ZmeF3Dx*n%u zJkFV3j5omJgF^TabTQm%$rg&Ozm*VVQ?in+wFM5BgSd#<$a+(SwiUGVUeE(TBh-~@ zk!WQ-M3$m3p&1+33SOY#3lbjBNyX1hEin7E3WMJqTq{4yn7C0^OD6*H z!6_+qIJ55h>KdJRA+(F~^HY;wuC3p{?#<=S`lHS9^+&%vy5rC^tX3fj=+Nj$%>kZx&p7F_t2$)E^oy5Kj3#CHoK4mqrUp*>;Llgu7_~b zo1+Jx+z4ay5Q8MipSs*5MZWy(p|Ftpcon_?DeLi*G%vr({pll@gw4s_0^bO8b$ge-JYt-?e7uLW0JqvmL$?UoVPQ0}`A}pVbMF3Lc6{S(* zsQ+{tls@NHIEqU*JViG^(o>JEOkX#k9Dn-Amq(`7|6vziB^AT#`Xiq{68z-i`jfIv z_3*yNk5jJspHPmoLxys*IpmA_lYA?8RE*~{V%SLrxkMdfl8EJz&+ZS#+%dU!c}Ucp z7=o{@V}}c}(ic&d`(LzD{j2py<%8YZUqUt4p!F8&a`1fpRoIRx4>HjhkQ|cJ_grA-dy))jamN|BKy`3 z23voUu|%oEPD;Dv+3#}O87W}oCt{auQZ;uKx0P&8BdosWk|c+L$s4oTMq`M}M+=gb z&2K)7wkh4hVhbOs2O{MLz59caVk?4B)uj}^IyJ3QE@%PLU~F3 zDU>qoE{f>2lvEW{%80@FrR9UGOGNf17fl*FSPX1=T~l2(xT>NeCftbRafQ}6vf1e$yG%~){>$nW5N;u2Nwkk23Hk`$rV+L zt>V1WvZ6w(v>gAX!MGR^6IW1DT2@Gf!cuUSl?F?!f{MZ-tDiq(In=Fz1FKh57vzlaal!W<%$IrD_v3=BpD-SFmhuo(XY}HF(S7VX_U#XswgO`u117-jmY=&4_yw4I8j(plV4T@ z@79zB#iF9}qN=kK?TxF_f%9_)kTYz6qN@p8mg)(4;z>{V}`JK)UK>5s)n49g~8TpVM%$6VpU5~ zI@5*>PaiUJV8+P)+LxCXS%nql=LW6nn##(GDx8Zd^Quq`t*Pf^i3xcq)p^0Z1u}2N zg{tUP=9QNgzy;Ox%+zwLdRbm2Qf9FzS_5UWs#la3pg2OnAHL%-e!|48Nm&1%iW>kI zU3>{{cFdSL>$1yd&zZ}55RuEvFDNX+jfhg*iC9uzQF(P$b+BgXvgIqTq1?w9Pdjf? z#}`qwjYXduHUFI`xo<#!ya{&}@t%?&a#(m@$B1@h+rw5vE*rLQjtMu zAE~cZMP)^(MDSbrz@p`))j{SweJLi4&$4*Xr>Gmj5;(b-MGAhcs6p{4W@A-RwF1`> zd$OT`v9PVmyhTN=`BF$S;8R{K;KhORL(NVJeV17YowW) z%5V`-(NXQGU_o5*W9+t;AA?}4it-9qSTZe9;Z`E`j4)aoD=#S99K;KuFIbXSiH5j3 zZxPZ|ty<$2GVs%aV8w!Jw5e#fKuI$#!l_21EUoKCSGU7(a_*vmg{4*V`W0Sb)l|d0 zEr*tTVp#YLFs}eIFIe;A5j5gX_r@(28-I~ z2~>IZA!zRrkX2ERCVL5519mdiZ1xxABcWrg{IZII#hLyVmlx!hE`mN>g!Hw{DVbf; zGMZjA@m9YPg*XR6%c39fYINJXRu7QAI;0 zMgFM%UgR^pF&2`OU$z*52W!xQ7Frk2%E>{zIZ}{LEeax3bhYJ+ir6Jru^mK@gw{B( zY6*&3A=*he-u43X!4^ja4OUk#PM5z?GGR|y%z1cktY7x|Q_ImD2Q3-2>ZdJq3$it@ zwkBOXbJBD%E9@<)C}pES=|ZVrD*cEOI~avgC7We}ZF3YRVz*0 zbR2nAiwam=WmQLB6fG|*SPEyTR-m}5VhOtk^dP0|oLGj{nBn3DGiT4dWb$OI&sb|h z&LtBsTrgwm+)0D185pVL4MN5bDjCGQMFCTBWtQ`*V3{r$)Frs zUp{#H_`#QtXL*|$ZsldW5S?^sVxTGuG^^(Y=%_fI&>`m+v9i>Z>(I4~HFfYMYLo~? zyB?Pxro|^7Mv2{lo(o8W(-B^9pl&!-BL$tPwCU-M>LU=lU{%EmR2`)Oe>0s? z?#Aq6L2=;%tu+RYP#LYAE(FF3g>3J?+iSMe_xmm45t(1;Xo97j=3vyvE)v5!IDwHbN+f+Dk}$wa9I0q#sLBwV&cDU+ zGLE-3M*Nc~n%6(}U>FS7)*B9cjEfzvjYpq5w-ZixU`sWA9nRzMCnil9zeJpOQPy}; z1>(GkQ)GXDHLnGw6$L@8IHBFf^Zan8XW(I+!9Px7Zfe2DZ@GfTLLa7 z`Q;jk5Ep@GDIQzA@}i=`A`S-ix|W)kP+GPib~7SG5)*+xe21Vq$#K;&`XTGjMrrE1a@9IBo&XowZ_oyr<5b7@vG~yl4FWcqi?Z;dro> zUNW$?IQ9bXircIRC)aU?iI7zI+i-sJ;OS5`S2JOAojD=SHSGq+_0BpMZSKY4d*O8G z5}cvyH!qBL(&kZK0$)y>IxYc_)cG98y)T{)4Z#^Y))JjAAHvuJoch2$Gc}&7@pTIK zn`=~hGJ*Gd>2zqajZcVoCW4*`d2zqd!jsHvRovGCe-${lT=S3NZvpmVD{L3A{lF5Wl#<&E?DxRz zIP?4(u%}vKjldpnrTaCoUjd8WaLacu9RjwI>5}Dbe7x@l$N2cf>z(7{lj>Z|yER69 z5(;(V_~+w&;}4>MKPU5&`J4;=u6T}bzVb_@V|K(ZW#G-in+dxx{wQ~s=<>A|crNhK z8n4m$u@(5$zoi*N@I5YEK~K9<;I6f zHvs&<>$G2QBJFjKiSYr)Uk#*mKSZC`aUKQPcaEM8^`$MOWr4=|0O5&t@Dku(wu9FK zH}RdHL&{FTJfOcWF9FAPXS?-DuJET3R?>-ISOOB*a9pD*nEc1zH7Gb|A1c%{O<}+GT&1D(IMKv zM+9ysuHt(u<7?saUGO%8hc^$0%Y@I&4VMXq=kcO%fy_3_pgl9Us&Z%nzwo2ep$WwC zN7)QuD}Zr3lPt5ZE7=_2V?J)#k1Yf?6qvlp0&(VZ5ZD%A(Rsff*oG*K;cNxA5?Co{ z>4PE_&SSt|j*_L#L%^PCg&hO-t5(=aU^`l2PRw_1Z-pfTyCDi=eA0of05(j;C#eGd zWxtXI{5Ih2^((UcgMUBxcKN3*PR8y5R;Xe7uhNNS$5aU33!d zlF~^sFH<@PfZq(9Vto(>B_j5*ViJ0pRxok1kI~fo+MxsDA?324FLkzTd)jral!Q*6V*9cRj$EEXg|gW&qD=6OhKL5 z&>8;a=}-*w1U6gh_#MJ%sYIXL2%Xqdr$gA+&h!NwjVd3>djPyQ|9v_%N%4{#<0E-| z06ZtYUez0N%zq4(g$42$?Ez;$6^=ulV>!n$j3<2}u;S7eG8Lqm7z~DqCj-9*cu3)X z^FOMr`GMzseVWrg702r$@yG%1`EL+^Tc=U=r-i`pI(=GgT#WdFq3w=xn~cvU$ex33 zjIu64qFl%G0pJ1Pb8OovjEv`A;A?;fG`;&F^S*z>;bk*MoO+QcGXS{0DwlE1czrykE{&x9BzQx*g+eu8$@+e^iks&QJlqTXIa}vhrQ?TKDtLTl z^heZ*)L-5H`OSA*Hf5^)gU%<==}UWUbsXJWwSP?OjnFyXqiw$I1pXoL0*24A5GGrc ze;W9xo}tjcZTw#fe+_u|lu!s;dXzjG5z3zcUJd*q8^2%Sd~(9oD-`-t;gdP@lNK$F5nfw&u-VJ0Y`E>K0OYdE6xtLL4LMDEI+4! zkLeo<4Oa0=atw&XD+v?yi&ERxgLL5ez%3OoYrd`rS-`IX-nu@`2fhq=>-rG{{tEC{ zl^wtNN0q)Cf!Fs7g(k9ov{PnAJ6aYrreiO3wxoqZdA5JAQ0XA=7L zgm((Op#wspczX;J6B)xKA){0A?LaoAj7Oar8N>L&I}<$GNB+w-GPY^i8lSH7Cfugw zI;KU>87;^LA)ASB5f0F@Tqn$R^fT-MIc;x&%tSoQ)?OSQ18+EZ(QyDIUeb6rXj!+j zRC#(AcoF1t74A24RQdiI_}#$m{sv8hNbHJss1=q9Y)ur#utou^2B!Os6jS#bxxoJg z{Ld<^B=b)y4kf_<%O46|rSO1Rtjb|6aMzIb)43JAFQF5iPSTHQ{Ff?U1CC#)e6_$k z4Bqua@mbO+-v%6?hkeVqe-4@X87=J+_n|{3{uj{jU#|J8ihC;Xp2I_-X$tq7lNFu` z{375z6>eRw>%&aoxxlZm<>x4WmjS;Wxb1I_J!^s80Bk5_Wm&@_qh6C@TDO6JC;07^ zgQvl301qd|H#`r24M08cXumOUPiP#&Lixuui*CqU$VwVEa&;P#fnV1Orwu>w6~Hl# zmVd;ufRzEW)5UOS1G^F!AF@H*QXEqv?Mo26jUz&#akPNsVi{CeAa4Zz7;wG}$M!|Q z@pw4zSkHDtCTA2j<7=64JqtLljjm@IkUa+39i!1EW3JP>J((Q8Eyht3)3QN<81<5n zfDb2zLT`MV-b-!unC2Y(+=NfQw3k;U;MIahIiy*(8}wbR#_c>I|2F(AhwNp_cYX&} zoj6XgaO?)}*O!DstD}76cdTgPqt_r4cWEeOwjQGe9A8EIh+*+vGyj<0ew|V3(t=!lL?t#3qzq_wXpNcupOp-A!HsZ z2!-CV(}0y^<|WJWO7O~xLZR7OKdLO}I-&-`wDSODx0E0+Y#-jO{KPVJfbm!ysecx* zqreh?&216?nc?`;=GTy!v;^ZM6*s@5T*b`~UNRcBpOuF~JGCF9^O)YkFs8+%m-cd? z6I&Sy;npe3i{DWYDYqryU3PUS^jB@~dg=4mm@m)MAr@3_gp98mGN9>m?GN+M`;`>i zsNIm+2bpszgZW_rl!+e#egrs9#C>dw>Eq)7UIRWZ94_YWT+>f=jEt@ewBbX8{C+SL zI-+d&&6joi4}4oqD0Hul|4g_4z|Y0QX3;qPFcbJAz=zv@7^3{Zys8B6;Ic?wG2FGl zo&?r<-mw+Do}6 zIkdAE?#lqbScQ{hPE+Yi0p0*SI(*v60R8~*UnzOZd|1in03W{+^<3lCI&TVrF9d$Q z!u{q?)Oc?t@K=C8PP|n+!o`7IEsL1U=iSiBy)G15YTK$(VIKni2=L!2JYYVl@Z-Q| ztP0up5iQ6ie{S{({KtHQ9%->ERNfS(3F$HuWX!MvCc zd>lTuq|1Tj(B*(WTn^ssHQ_OZWsfN~0p9?8l5K0e3gZFbPXN!i@hcU+7r610w(>`T z4+4IjlJ}b{l>ABHw*p^m+gYUM^`72ByayZ)*hkkrmY}br>xl(+24sJ~HWZpp8}OaH z&y7K)eIJ79n+=&0kZE0ZDuH{~h3kxEqAppGUk`i}@c(MjmOdPAOKEc#WO~PCBTi=ea=G1zoXZ0 zASP1!z^^xl)Y^SGpMx#(IRKekA=5gaX9M32{9f2$JI#EiFDrqM+=M(daABwSdZZVN z&n##58Y=T|D`dxS#yAKx^V`IYrVNme0bdQA_rs%X$n}WH@p}!&y=JT0tHvQGp!eCW z?T>XlXJh^j9_uZ_3h#ZeG=7G{6ED(bZWQphARknCc+D>t_?X*5p-~FAf?B==_*~$5 z8aJ;{Wv&+Z4&c${g>l#d{2t)Hb>V{EdBVkFpxS@%#@-bQl`{|78DFK=k*IeVyqoV1 zg*uyBFJ6rk=+6`2t-Cj*_DCR4uyi5U&z*fSF9B{qhJWm*l7amMnCufYmJaM`V6xr- z<5(~NEPh)kbdt)E{FHg&_`ql}7^Hk9pb)sx5t1z z(F!{R>Bzv7}C-9#4 z;iVZi9#Ha61D^uCb-VW(@QtnH8J82lp9C)3AY2o}huFkFT471R;_h!Lmj-NPD=ZUO z9`WLqXWq5mmhk&>C!BODnJ`rB$OfoTevY>hr_*&p~w4=jHF|TXU zrX`&NpFrj!$}lgds{TA3c*2wIw;$Qy8Q`6%bq;!ejfao3It0_bu1BJ@1qG z59~|GuF^JeV@Z~woxrbvZP^Ba$9&rZY%Z|qI{Ol^DNz`09tV~IY`(H7?;~5FPXS*J zJePRb57S!sAq9i%osc<18MHIpn__{?06z1nQ0M@0t($KCKCH{M&W6nAkU4F)Ltm+O zh`bxc5s}yleL04;W%M3C^8Mid7W}cG?X)K^QzppI1^?)` z=rcbm!T%Wi!PH0D;@&grtq1OY=G*N)0Dj+Z;nVIR@B`qZd86G#?nkmf9tVCQaE8J7 z>UrF3yPu_u6P0QrWKcDtW%6tpm=I}@$%4#)mNK%PFN$imDLYf!lVgHNm{PVPO4fpG zEo5_G7g-Y>c7Yu>Wp+a5637f{DRY%A!?YcO%pAxJ)H0l3`W7KyFuNqb5&UBCrQZ=J z$uCuWmK)D`_);wRcD`P3UMuIN6E zeif|DpIXSg4;h(nwy)|O3n;^Zp9S5Wka-U>cAI6-i&twy^!XvkOxmmKf^A3Nqn;b( zbN0cXLv}P|XM&C@6Ec5HRF}voO!b+m$n+~954AS(g;C=4b1r1(L3UJF7Wq)65<`9^ z_|@Q}E7G>WzfvcbSUZ2&4TeN>^_dr!YkFZ6){d%#W@q7LuNa6vwgUa%Z!wSf9s0K? zurKaOA$kDcjq|zvux}YRR&Ik#;%~4%bSwHR+;ltz`j*F$u3OO7e1QE6PYLnUpb-B) zhB4ZkXjg6*;!#}x2ItEllMMP@$bDIkb>08M91vJOj*Q2!rU>3N&_`axnE5V@!$IHK z-4JQL4e`bxJjdfTMC=_xlmq`I&I1vLSD-WX=a_Hd{1%P_!2W>aFpgn%Jw+8tI-*Z%+x1>ne?{*V-kzX~RcgM5wcwZ#mlF(Y$zOH=>v&SBn zh}u)jMD04vSPKtfgZ9Uw_K(Sicw{^t&M!4;yWe8e-v4Bq%-U<2;xOJ1`dxqP-i>g_ zWAVNo$G836h=)gbeBa+;1nGqkL)LR&ai00M;4@`hOCp|&gMU56+oH8RL!dmLA+_z; z^2FPd?`yO#PdpGS1lJc@hWkgsbqD_K#U?K-?tvdXzu*m$j=v5MbarvF&R^bc)D% zg}a+`jzc&CX05STEEEB}Wi%N(=G+1|Gvw!j_>;!J@Ku=Dme}&o8UEAwc=>0v^QQzR z$Un24Kk_}1c>e!GO_?}xjFmPkA0NuAu`&jY8k8|`XpOuYvT8`iAb&=Gg~}(*)nLpi zW4gBxPjyGRnNR4Nq8j_$6yI5fH#|gbOH};Za8mq9*WjttHu~wHomn@_+78H`NN;VQ@K(0lVtvRZm{{b>r}k{x!%Tiy@f89W?10Umf+vq(?P14GeeJ^(3tqMPJ=})y+FLFmrtQCJ^ZUl)D^mpZpW=5q zVe{9Vi!V{RZLY1)7kR7rA03DtL(?mu=(Rw;!9v{^7pEFHvigH zhDeBVfYSd}vCZGG7Mo|I^i{bp#y8QToPxwFy_drH&(^hkI#=;0;w9Qj@0Z|DwVf8$ z?^0>=KL>wg6kmn=P?&GCl-=WDe8BaFkZ+dI0*e12UQDdQEdf8;uHpyqVn)Tk7yQAt zahw(Z^)UaHcI|Jgw)JCgFwkd4{*?a4pv_+l{;{a~SP|&~jAu|zjZI*p`xVh0hUx5t zVkAtb>({XCaJulxKVh1k<`XpV79Z4x55RF->G*|oqhz>m1j7|vB2vxHZ;(A2cFius zKnnLe6iFiObhBMFyOQ>}Qz&yLX`lN)#JiDBba$qFGU+7u6R>M`C!Os6f_M+oDQ@Jh zFnf}=7>f&V+36zKd)nc+n4b@F?*hw_%Sa0MW&n;$Nju%!A?cV-+T&gu2YLo+pW97( z=3OYCiJnfBpG7>;^!$Yim&@3go;!Fkn<-2-J!eu(UZj|w3}EWQGQIg#i}gjS>EW(+ z#Yr>0m8FHkF^8tpP0tY@IP$`8dYaKRtBVZNvn9+KWqO`spi(T;^w!Y8+%Yf^Fg;%( zOVz~$)AIWu;K!hA3t|!hOr;{ZvK2JDZv?}8BHRXgJ zRbm;zp^!Y7JBIWU(!<>Q@arlko#Ea>x`Om@_h!MFw>f`kjWq1l%VQDS8HR7^a2J zG0qopilc|h9BJc_`SJKpxN!7m=@s$Sq|YPmj1Q6?K-v>uTv{m{>7;$}#RVug14$>w z7gtmW#~{*4pn(r2o$T&`_&fYGpCV!jv6#ui(M7~viB!Di7{(^U?V(@>C4_r9>EWcE z@zvFS;TS>M5TZIYSQvGT z-F)w$V;bo~_cqcO{t3BQB4V$@iFI4Lwzr6V3N#Px>KG?$U@U7iKZPbyQ#jfAdSsn8 zP1kOCF%Ivn5tdQ>9|*Zk0E*NNLM-|o9YB{~p+PWYSK=57IB5V(8$C#N&81!sMpB&V z?D9{X4A~bsa>LwY$?dWXgCRrqL5{L8uczX@izpbf-*T)E^SVo3H%^||=d$xRw(i7L zGUsdN=H;Rr4SgKu?Imxe&0_-2Dq=mQ-n+Q!-c#~K@;UMx6x|rfS&&h-(T0iSg_5^i z^th0T%vlRAKT2wB{TsMF|BQ#!jEnPN(%hVtatD|k|6Bl8uLVnmap`!;sSqi9HEWK| znyy&oBIN_k3fin0inT=FuYT?MRf@sc1IB+bntwdYR8;w~0ab8}g*Qepgz zI_BmQG+b*T)Nd{>d%xs@)PwV2X}QdZOVK;_;>f`Gr4pB_nx1Jf-xoo+FN1yfJ($t? zUUHTV>jHp+BhxId(rJFo2h(TSm%5lO)KU-IQqK&flzpkC=Hr`9EKLtBMzHuZ{&+4= zx;V`S*?R(G|Jth%7(#)qd?$b3YNq2gl@9fUpYa!7rJ}H1OZS}j0n}U$%WaCDm9&u0 zY5^byKq-L&1*8&~N6Uo@NCObdKK#!JNLFQh&$*rgJDvyPavc8yUbaPnFKq!>c$Vd1 z=lfEi5du8}jK%#*<8uQ1=9%#eCGjBF5frQh24KN@a$2-+H-lN9xPBo5q zs&TyQ1Ik%z_-n`ky!i7hegM~!zQo8A)`Jj`$TS;F`I@!COGMA7} z@%AB|OWHyOdVsdoAm4p4jd*tfapy7x!plLv`%=7+eg4)WbINc+4Tgt%vx zAl8XK4)Wczh$osp4)WcXug67_>Ej^ZJ)5abHhmoAtBVxV$3ecju*^6P^3_GE=}QQ6 z(#$wkW%nGKPB(oVEj?@U1XR(4)WE-DAUJ5zPiXX<2cB7&!vw8rjLVsbuq#8 zageVrvdlOR^4;?&Hre!XkgqPXO&SCJd;~?KXpV7%NeH`Swui!Ej?@UCcCn z9OSEu*`|+!e04G3^l^}{E*6?T4)WbsGSEUZj)Q#nLi(-5^l^~y&LgJ`KESZcoxckO zq0;nmknb+wMbPwdknb+!#d6cfLB6|)zFukiILLPw^DCmYW*i3&?vk5uaTwuX$l<=K z7lM|9{OQn&aXv~z46X|ClQqF3Og&^TfO)SPvQt8M)sUUE>AerXu7wQL=~Y8^(jKoG zva4dNhU}`?sv&zmLW%dPAv;T-<)s&0i>RCGRYP{tY2JqrJy$8iO82TEJLy4QHDo94 z_o^W~?GN>;Av@_|-hKFWm6Oi!sv$e+;a)XlCq2TehU}zA3R4f+=})g3vNHhTeE~nN zrKC--8nTmidbc9#uH_W>c-4^oZr~iU(~af`FcMw&{DtO@V{G8MSD8y;Roq6{6mHhU z_d!ah$65Jl-C}e?en0!lfn&Y_v>0 zNhqToHAz?oQh3!Qf##jwNdP)!u*jiqBgUPEuLAB9@f1xUj-=2+VvO@ToLo~7jQgCM zLB=?5$L|@G*#@GsFy#coofd~UJ2-)G_m>fOa01~zkF?Xl350t9X^(>w2zNSZpMw(! z_dwE#4o)E4gGeWV20oZ{vX>JGx1Z)ygq-2A2urVZ5vH6#xQDSh@^S*<&Y+U;asuHV zPTJ|<1j0Rnw8zT{gnJ}uAMhck~paY~cftL#Rc+vsr zf}TJ+3%GDkB$@4?yRt~;AeO>CiDa$=6A1TYk~1BcK)9!nobA8_!ktZWzC*SHQ%NuM zasuI=M!L|ujr4`g#}c?3C$<~XwY`O#V{RVW)iF-C2eQ|^$3{)jH z6XpoEEJ=3&H%AgxMg3J!T}yChR!;U;*P9`DHQ=3!10L5hl#?7f_Bi#yN z(PzdOLp;cha@veF$QRv<%Z2GPMgeyw-$O>6!4bDd^dQz5cBm8M{03HgJ`6KPca9i1 z6g9Rk1uJD~UKzj#0ASkC>rJ$;MtAnr=4Pij>op|S?2!VEbyDMZ)F`h4wq7cTluFQS z!yw+fRG29WFYA3(m@W}#vDljZw!_S1Y36O1q4c?0T3Bx}po`vz1Ygx{Z0)m!PAr*( z#`D*RjInhIx)G{erBs%mEmNzng1rmEoXXya(qf8Z;N17Oc+u)8ScJ1TUIC2G-Y8v1 zXG_W{&YsG^HU^|lA>G9kr5#0yO1VpJ`yv9Ry$K)F0JAc(sbdyNM`nwu{iP*W|; zXARXpW&w+FGQb$;ukkzN&&-GyqzS(87)>esam@C|3kFFP&HmXmrsUYl#yD9>hrG@N zyezf(s^rm9n;#ukW$d;9(f_|tZg5$_@DR|T z9gN^nsmQl5E5#=nL?M^C$s@w|#+MBxpC zLp5`Ak{IS3^ddw3n-t)CpH--zheQ2a%TWJjhbjhn80hfA)uIU3C***Snh8uSoKJ&iA7jlJ!!F(B;0veRY>;cgk^R0y zoIQsEFH{0?IdZUi;AWm}j}k~n2{8Y#SqjXDz}a&ds}~heMh*7Cui6^p#8CF?X1uXq zs?CAiZid1Dgj8yk>ZGR5s)bd zdoD*7)3X+_-C>7xr5KS4!=A!hrJD63?A!PaB`hQLX_iuK)p_~08Do}ekyQu;!lVYTqn_YH}$GW%e$L;RRj&A zFx9Gv*U4HDqZS^FiywjCV|M{Daw#NYx$t0IO4=FAg$H9gX-_N{9*h~JeX*R_7&Fu1 z6}9kS%p$HA9*oPc!-ZaWFlI9`df`D`=!FM$p%)(1g^$aGn#Ji?)u9DW1C zv1-YI5+YVDIgmDE@58TaA%k;Zy&;Z&OyM!_Yq~l`MlEY&NB|cUyIk4PW zv8;=(Mbu4=RZ9+}(_+<<1H(#>RZ9+}2gRx-2h#pnwd6qiLu1vF1L(h!;jwDTf%FLOH4v_=Nskl`z2rbo#;PR;1|VYDAG?;4He=P218HZhT5_PcCsr*v z+ydMuyiU4NE&#aYT|$Rk0B{eD1NxtEyc}(&NvAD>>(FM1|k&4%hVXXSGoa7rBln}9; zwnB;SAz&a{ji%EVCXdc?tUMFjyZ1VGM)D&kNL$74~m9>O@ z%1|2Ix&{2sa?GB@Mj#13q927}~rA6p&mqFw2bo|!2V0Wz!VuChKYjkcv zS7k~sVU*UDb2okAIg<`F$5RJ`^D{A~oxoy=Sx~nRVG*$4Jsoby66Tb(xHM*nZk?{h z+7#$>$;zYgY!#hC(Jddm^T3-BR?8s|YRO-Kl?qx}n|`-~Q3dG1?)T8n<#Sf*yGL7Z zfq||vdY6-rly|;Wil{56=>9w;%=s(B8VAA}vLz2|=qqSEPK~^K!x~%*QDNk@2t!{% zqm)4w?}Nr6MtAG)aji6pmD6;rigm2IqSTm+)P)Cv;R|0^6fK*R*p-FVEKzbvkb~#- zRdQDrSo{aWb5a zWy-WphrU9}2U26@!(olHv9O?0zOsdezJkU>^zNF&VU3w#jWsPa^c6JX7{>LVg*C1Z zYh2$#LtjDTI%+hWiEostbZ~h@#j2r&hQ5Nvhm6&x(P51b!Wx@eXy_|wTtki9=Z7^? zu->4;xV?pjzJkVCjMZJM!x|TdHSTJmp|7AZf*SY!JgiY0*0{HYhQ5Nvos8Aa=fWDl z4r}aep`ov!QACXg8=;XQ^Zebg#)B<1^c6I&W~_FnV0l7$_sm#3<-1#G=qsn_aS=6s zGY%TO#b|833L0!io``35F1o7=j59!UQIhAxy&L0z?Rv0zs7fB^ANqC_%+4(2CY8P!*~aDppVs zK|e24ZBaq1)>^gp_dIK@bLNZ&#n!gJejk6#J8SK|_S*aGbJ@>cd+oK!yn@Sre_YOf z`;X)DA(S3n3Va#3oYiHxob-Pbm$Ph!%Sr$D;__@M@DGd2Idj&9xj!&2*Tpx*<+Au@ zxLg+B442E|o8fXBK zO$&KLZMUFqf_*yoDcGNpwXywf%hU8jG<^^Q{lQeRgiZh66+!Ul7>>h{`%#HBUDDZf z0l_i{L*rWo_8M1e6-aDcZ7XhcWK2Wj18l8vO;7^VE3>y~Z(FP2W8=D@ax|~ImC#(~ zcG2Fc(4R9st%T;5GozJr(?}+M(ca!xJdPPNw~*S(Qzb4Vdw2W(OtR9wDM78ZhJ6k}j2Wdj#p)5)Cu)+8SI;Ls_>+Fufrv>-LBNFilaJ zo>Q@TPL*|g#8TvRMP*`T&FPLRx;=t9Q=>9$;+E4BRdjma*r=@ABgia?D!M&_%+jc=+at&-}HAq3(m1w|poB7;z zm-bNRY?hr`q5;zlk?twcfa$idt{Ej7Fx^(thn8r-bmx%nEzyAKhN*vci3UuEMSB=9 zOAq1KZ6`gqL<6SVL3&<^228h;^kF3$Fx|PNGoLB9i#=JopF*!=1wrXi(if19N;F`) z3rV{Y4VZ4Xh?i)q_lb|DXm^g@iCNFFQs@9Y4uWy7n5EjKq)?!w0J4SuO=y8O7Rks;-wTH zM^e0$;-w_TODR5{q6k`yQ z)iz`VVe<|6%?gJjZ^rgxHZm=}8`l=L^5S3zEyH-+Mk#fTmtBUjdm9pJSW_*3 zK7hYE{$K-_4SZ#;l!xQ@ArT9{b-0uz_;bNMqgV0?yOL}d`Ln}4~8@syo0~$slN!16k%ExZQw)T6{h`ePyMkl&G%Ak z&1TeMuTHW*#AXZ6BBn1|>e$$lE0PiA^UR3UEjr)~q&6jg}Zyy3PAahoz-QH8ioneM2DxJ{Xst~vN4P;hF72-B!)&nD!$spUMzV69pK6mQt zo+xe;U-v|DoA|mXTUeL+x+hyntFL=<4r%puPll;qech97q}A6w*-l!0-IE=p)z>}Q zNm_l~lXFRDxGmYmo)lmAi!MicE&7w)XrAY5 zSxgq5(^-UD=6O!H@yzr5C(w|2p0l$u&vWkS0dAvcJ=39>8X8jf8vIk-=6mQlC%DZY z$frOUX~k`R25H4@{t(iN+x(%V6}S1Bq}99J_fkD@8iEyZT<+-irf5=q!qXMg{0NH+#f}H zsu;NZ(WDi(DXq9oX~k_yD{k}0P+oDHUqo7Qn_oECeEa@dQaQRo06x`;QkQChJ zk0U9#%`YV>xXm9=QgEAJMpAK`KY_G*m;2?U)w|rUSd0DyZUX?p=4+|`YgpwP(o+ElQR*K-+Bc)| zK4gaDmm-xTTMPb&BNJ$ZlI8I6Br$|HVN?#Ql%l_E>ZTyMnQY6SL?Yg|g6s^GOp27^6tWX`(+aACrMe|@_92!mB$HYUJxIIs7 z=eELVHWPOt@#FX(j+_n@QC&#Al7Y^va$w3htp5>bN5`|&A#VYTd=W5X}Z3}ik~L?Fz&fN`(6LQTE5D}FCY=l zAW+-J`lIhKaV5+bcH_@y;`f;N+B~u2VHW=(6W1YeixmGJ1gqSh75$JTTGi<&_9K3I zun`sRmu%QSvy|RSX0+|1%&(aEV6K0{^HdOrO#PeDRBjKBN|O4y(bUJOpiWZ1IGTDA zQyV4qnbFiQQ$wqyemzf}xQD3|B=y@!ogBBJKS>1HwY7vKe+4=D zs2vkbrkU1X#gdab%k|e#U@~XD{#t%9U$q(fCQrwYzm8-ujGA5W@jCn}-2Yj(!u>3G z*ps+l=69OK!ubZ0Ty!f|yff;_*haf6ZF#POKf(#@I zhMzM`4asr%^>bN|M#1p&9tI82LeUb_;oL(Fm9qN`{`pS)loIy>{?%*@5>Fzi88FK6 zIyh6WJqyVmMBN!6Fs79qQ^sYEt@RkhBy3K&dIr)pY))7Rn-dno=7fc?IpNwv(9;d| zoL__%Hm9ERi||yowkfLT{32Y(cC|(IoL?x@71hs0nljx{1LqgYOpWR}zfh(pYT!#3 zp2lX)i0V1NP^LGk=lnvMxlujm7s@P%>N&qqW?|I8Z%eqIUAri%=jTb8W25@Nz-245 zBx>LnIXsiIw_vo5OV z{6d+&sGjo+W%{Ff&M(3N&p%H!^1!eLxq*finR~c1HD_Uxb^; z?276+zX%7(?2hU=zX;D_Utb*66UT>}k3t2PMGfL)H?#)KJIdft8>&{7t%v zw1&S)2b)oghQCQS^SSF5C-d}dmeue#=@4lRf0J%uT^jx--AY=+-=yb|*6=s!F!gKr zn{*rLImtu#O}CTQ@HgoW(i;9I-AP)*-=yb~o*#H|Y)yBuCnfw%`Z`t+B#+`Jy@0fa zzez77t>JId-4xgGH|a%dkWR-|cB4cY8V-9HF*o+i}rG)Sl8DbqDPO?WuzCZyBxlyqB-E^w3Xs!_*N(%llCCe-jWHR^cE^qv}Z zJS9D&MjcN{_tvQ6De1X2T>A?(JPp$6c*^vJNQa?lG3iAp3tGd|ARPT^L(;Xt|E~ef zKkMqU;~P@@7^G;DmDC7c)G*dfEgkkTBqeXEMHkQK6OApyq!*BO$?>EQCtXU0NFPDE zHrYq|$d#ZQk`I$!NHybwS|&Y`RnicQn}W;+S8m{5pXByt3=QM8mIpB^lpD2{8z5A! zYAq*{ZsI#vTSKc|x%nroB^b958U3~8LoT2uw!M5PuO>+Ng)PtI7inrzV(DJeJxN;= z=vh}nd`7a7>9g6e-ulx>&mq0Y)i;otOJ;Q`NcTXv#2>sNY%!cv@!O~_x@;eZ-`V&d zj{G$;bSCjE$1I?LCUw!J7;Ui4oL59smZJpfK#6}wi5AX8qA4n)<)bOg;Jl(NLu4zb zO>y-UlpBAQV!Soq~GW5dNr{mq@VG`0x0J$5Y7OhZ2`ciE~)u{4HlAV}{5{ z`6*i7RsRg_(IVK$6g0n??4gIlg0o&qUysslsIQj<;Y``FWP1nY7P6){L-t;N#z+21 z+J-?%GtfG%SHy5l)N{1yX*=t@^AOxgTfVbt9@QDQE9iKP?3!1P1i>}ZipjXEEwbFY zMoY+bpRDw7(Ee%4ZzlUWl$pzMWQ5l3Y6r-8^9*EIUkzEA&LNVUz z>}18?Y|6@*O<5VUDZ4&iso9jBEb^O8SsAk_D`PfgWz43m zjM)7_g>)7_g>)7_g>)7_g>+_9_Pf}V7C(g* zWbso-t4-OfFM!2Qp?DTQh46qjWp<X$Oa%NNJ zS}|!o^NN z6?_4l`T|JA5_c3^qc&w%@C8s>ZOTfkO<8HRDZ7F%fLla8YEyOvUjR4i3*bh50ot?2qBu7D7Z(~YfgHY=BAhqdoaLsDGU4^1; zQk0-lAXC`Re1H*E)PA*aPC-^UWiv`(FhgbE%}Y#KDl%5}6lM@)sqwb;W;8UC=l8t4 zY}+&@Ht}J<1c@_5;gJ|G8{6^>wqC3~Efga z=W5|yLEAPKK7#BCP;iAPUm8uefWFa4mXm5Ye z5mDm_)c84Qtc1KC8jV$>WKiQg5n~25&L+3~2H{NO%1mSGu10zj+0^m3a}TBao_<#l zd|%Y>D?|N4Nz^6=EwcGZ20f^65vNe&u*r>^ri`m?5vNe&8d~TSD#Ig!31Bx|&a}1A zDb#YhTEr>z46UrYg-)TyOjV~)<9c*M-I@A~&1k^{FFI38^>)$ADw0J_^jp_SZ2o}e z4OP!a+?Y+;9fMup;jI{Ck4Ag@x*8~WmTDZ4oe6iiq|xFHIS@fwL2h6=a|2~ zQx68Xt^q|gu%4L+V~u=$H%dE=d`&WN--N2DNs=8NCq%v`Z81w*NY}bwFuj#@gKMOG z8|fzZQC?R&={EOMrgxC;ayv+OlI{)+^d)zph2eqIke0O((;;wh1VK6}JS(O1I9)!N zQh2Y*&CnChpdQYqDvk)chOC%^_)|m6A@|FdKSuo>Y$?Jtehn$_u3;bjV6=}qfM2KJ zFFPFJm(oWsFP3=J%};^VWt;9LbZ}fSn#Qx<2O%+<#~cf?+Z4oDXLTN3pSuFs#EU^GF?&KT>SIv$aF{J)cbKRd;dS8&~jq23k-1#^~0b?SXVW?59H-WOz+M|J9bLDegxI`zIFvpT9%?+Y?(qdHng zz1U6HMRn?Z!JNLRPQ5S4^hb5-eL>ZO(Kz+KV80DTb?SY=oMH5Vcwf+wa%WVh-WOzc zMRh-ffFC5YJE~Lf3wGkgQJs2U&?E1%NCFjm^O_x}-WQ)j8L^H&5BYjl6r(#D)_};Y zqsaz-O2s;w6oP{%h2Y>xKdV#gXtI&CT1S(C#h}$XnrtGi*3o3}$5Cb-O*ZqnQ|oAQ zHp{AYG#MhT*3qO896Tum2TuyY!IMI8@MIh7nv*<)-()*!wT>n`NUL=;*-2Whqsh6X zGwW!wi#;jU(WDR@JShYRPYS`olid_o>u6%Z!OM=_sMb+0Uaevs^#}5ft98_C@NTh= zdJWz!)=@u$GHM<5hmcn5sMp}#VjcAb>!>%c)_RKacFN7mtfOAMTE#l*3)WGu!MkBc z>I>FUU$Bn)BU!6jM|~l9w=Y;ny$0_V>!{Ld9aUPbqe`oF)EBIy zzF-~oi&>XiNByXE)Q?(6y$0{5b<~eqNBvTk6YHqg;N7&2dJW#K9!Ul3s4rMYy?M3P z4?_XpA?eylL4D@cYF%9xuu=aYq!wpVK(ae_U}&1m;bIbU!jZ-ZpS188KGxHbxKI)= zLIK&=9xi4^xEd!yP;C7si0lxNw?m{^d>7VJ1mj%L@+|=4a4WwOUx3`di`*|MM=Xd% z50z^cPfO!mbtVf9Qw(;$*1;|C*W9Mu5ck)F+qBpq#t~92pP;T=S;-Uc4T3!(xRJM} zStYkxC2atlp)pQtyp=r;dsOvF*7&DZV|4+!+pNawv()}JRkE&n3-d-aZ?O8h0@p8X zd%Ftu1uYTt9wz(RyMXKPADEr3+R&I~po^NfP~Fi0T-sKEu36tXV34 z9SvmgG0}DqP-OE)%6v^_aEHi!L(30WKUv_0f~F6V{n<}ZUJbi_EKlQJ_%khGtuYS% z61THN6878^1gA-ru%ZSX(&QwxGM#cgC1U~KyIH6j?m?kNQt08lP&F&mB^TP97n<RQNjuL1GznfWI;Z{FO1_uZ#hIWeoTyr%|;5e`O5#D`UW483X>x81PTb zEkc05G6wvWG2ow=TZ90AWeoT$W57S@V{;7nCmYBZ@K?rwzcL2=l`-J2i~;||+#&?{ zC*~F*z&|m!2m$`dzzx852K_&_l=jIVJo;Ga$`lAevYiDjC|lLPq_24xNEP1=<;s5j|SS%Z3$ zt}WB;A~}R~Ls^4*lWqcy^qHj9?IP)=`mP{l5+4_NII@XFGKa6eOe~VQlnCThpky9t zSJt53q}A;rnNPYF=?v;kTHP*^!$~(Gok6`xx0N-hH|ef2&1cC%(&~1R97TF+nO3{x zXwp4pTIrOYQKpSf>E1GJc}mYM)9oTThVl!L4tf#kg-B;mZ_cqJ#0)>DC!<)jCbefUjQ z`~-J#C`fO|Kfa^VwUdJMtDyO3U0vh&2BsVYew3wVZWralj>q68ZWrbGd}Gw@qP&2# zx?PkHC#`N5}uni^?3*i(DPuE-G`$!0n>G0m6EsZH;4#YaDAcS8%qEXrKj^h9f5-!(72h z0yn8EIHhQfuW{Tp)l9bKM2x&ql`r5PlxL&i$cx<8!LtyNNHS2q`auz62Ea2E5TUir z!blypvFw#7`{z>jXAr4AP3bm{$1M93BHlJ;pltg$Sg3>F73@-L=fEFz^0@&fZs*XS zaX3-ReTlU^ND=A7xq#MRm0He#O08ukN!IdL)FEPdEwi+ip(YwlquFdIYvJzbj2lEP zgV50Y2&?)xR<(k14Ij=>=rg7)y-?& z!csp&soU^B9BBvQ)yvv4=CVXAzpQg|9p7Nh7g5Kbd?W~7FFMZ2bzEdR)F)fSphF$j zjVtN3ygt|X6KcGM8tXn9$o}$hWe7# zc`5Z8lxn5&PfY`l2cw+^!ssDuL(suTzor`U;Y|7M*@6P{MK~ttd<+WHyH7((CtZ+} zYxu5r(giuW_8O#i@j>mJj-TW@k||%rJCQLV=%k}aW&Uko0-i-G;Mt0wYGQS_gx*EPCcR5>v`YDBe3+f7DVq=Db!4z}ppmZTb#WAlGe?mbs9qdJ_;6$>I39Hrv9mG7QN+&1Oo)Q*Y)o+!v9mFeo}Y~= zjv{t8Cerh>F%zO-I~y}03bwN`#Zko0#!QHU?QG11C|Kzk2~n`py$MmU(sL7{U^^QV z>7doTj`aL&Oq9*f#zcA$t9df$ijU`)xRmnjy?EJT(3SL!lsSQPP5MceT~4|-<=K1j z3et7yzmZyNlY5Pl z$-PF&a<5U=lY5Pl$-PF&3=B9~7&kDWjDZ0iXLGMn_FL{X%1U#uQJP0` zuTe6&*C?6Y8i~La!GPP`f!lMLMj~)Sy$(NE$rfk~|7X5jvo9N#+sHM}d`@tU{u zap24-Udsjq=~N`dCzFoSJMkNz!kgpLCm|o7O1hMu0yXiv#h`1`ZIn5UbX{6cJ?p7* zTu@6De-5&44TubL#2em$_G^WTIkZB>99p4bj+B9_V#ORikDLEfs74v zlpMR!KZ8ZU;rNfgfLA-MACK%y^oE_s8*{1NuuV+AjI>K%WcnV`N%}#iUrxG|zL)85 zAYDmsBz?u@plj2WlzAi58`9S^{YqBVl$Mx&73sO@DQ9( zORvYYF}{vE`_p#HT+e$ln7#>L>-dJnNFPf7mhv}}-jcqZGB=Ulir7IAeGXO0Lz4#k z0a^#)Sx#wgOlHpm8Kh6(Cz-=SPOQBKw9+e}Dw($sGVsWys4RQo@u!A{k~PJve1f&1%vsor*Z@l}+I z%Yc@f!_R73qM-UQq>Rqx)Q>@cmQz25l+n4I`Y{O5a_YyBGCG%2KL!C>PW>1JXgT#` z5TNDMk0G6e-gD~5AVABhAA3teWX_~;tD)+U%>6>_fNVO zK#L3A{IjkuIevC(H?nzIDuC9z@#uw3L<`f96OIfbuTkJk6Q5;R5rXlHDbuwcGKYxF zRk=)8E^`cJrdsZ5)O`n1#Q%ZM~VY`C-QDfwf&g5GUr~EQzo`W*q$Ey&IT!=Dyb<3<( zjj~ECV!)7%SFwr4m6`{JaFPSxN1!@ZwZf_j+K!;|>&Tw^>C9^L=ehFh#wZstvD(aF zsl6=qM|r8g&r9tcQ%b~Gs>;)j!du>s5|7rlsEtVFv6hkE}FpMmDKi&@D- z%&C1Chp9`EQ&B|w^V3>nxaC}meTJNm`{5JG>w8$QZzyP6%iM1<{uee{kOP>()Js3wMULod(;@UM~_u|Os;kkO>Br#Pv~3AA?t4Fvlp_P zKBZy(+mM3w@$Lw3EV}KnOdt&=b9jsIVcZbe`|qxO4&^)&};`))F&c+XItECnE!FEYxEeJOZ zL##r?6rMqephCnHo=G~Y+=<_?pPnzSLI4wPBweZyF@*z%gRZR*F@>8**Hws^!ohPu zkE;;CgqzO--Cfy3nX_4TYJ~tM93tIQA%F?Du&x;u0+?_s=|d|7FyT3*dn*Jm;V|{j zt`NY4+epu;JcQqHJL$O<0+?_I>3NmCq<4}&tU>@2o=bXuQ06SMA>8$0q*VxD!q>5a zpn~Tx2rnQVRpiOJkhH51z=XRgUaAnlgcmJBdM)~s-I%iDKFdt@=P^MIt*&wTex&$# z(Xo){u16QFY0q!&dm8oT-t$>_cHqT&6S5?-Vf>qs4Kv&58Bi{^Q4(q!CH33G@TU6< z>K1*M<+{(uuTJp%lKE`@B0RbNxLza&B~I}CQmLTC37$WG50guJxcXI~Dwh||J{zTGUB~I}CYSP`= z)Gk@Y;w64SlGSXq1_w?~BJCtNaPnHx8XP!TLt29aCu={HqGky)mz>OWo7yF({t+0P z+9m6Foi?>o#-?`4*wjuLo7yR3Q@i9espU2;0bY-*>BP3@Gisa?{?=GfFO*+9mocFNe)P8plpDPvPRW%||5o1DQ)ZEBbF zv)^oLmuzH?P3@8ajB44`F4;uJrgq678JpTAXR)s@Ry%L9ndkV})Gir%7K}~plC4|t zfM9ADJ3gARhMHq_r{YB9@|Tk?l{oYAZy;SMapvW(VBgf1IP>yvWO_r1GcSK7t7!`E8#F>}Bp7&(1#F>}BfqgSn;>^q6NP0_&GcPZv zEo0`zZwXJ2l!qoobfFNR>~t7{YT{03J<03m%qyM!b&whtIi15o8W%a8%coxBBB%4d zgLKTiC|b{S^d>bl#O~Ypr!%jl=QKROGV@A!wlHXQ^dRkI=9L^wx+F8NWCrP4nRz9L zkZzEfS8^!nCYgC9Gf8V)dIud8D1pypqF6 zYh2`HKIvMSc_j--Yh2{yaMDdO^Gc2&-6k`ylAo}hI)pF>W(s^??y4`=ep zc>-daM2wR+EGLJvn9QYR7MZO@FiUzniyY0oxsL_Gze*z4#t0peek9e z{w@gqMdZhGGQL^(v}(g6t2V;vM*S zV529#N7{@h#;7pPn(;-`AqtHd(n;M@KZ35H<3{QZ!t1|)9h%a%qoBA`7AS&HOXEeG zO{sChe+iOr6v-Ac-Ex=u{J4h|`Y)eF&gNXU609Ed04Sv%C^hVcbtKgg$+(Fo;bh=ZkpI5rpwwYTEMX8c|Q7+weaBA!eH7QwrCnJ4AVmt zKH#kFSnKM}yK6e82Gh?%_G}1uvZhzHAj!u8x8*K^P8a-TCw|paIh1h?F5}I1d+}bf=FizL8Sk)3qgFd_qPyqI?@AM z2qNulA&7Lz7J^9E+CmT=*s_HnrrT`cmGB|xI@up>vxPrE_>ec@CEBSWsof?rHd}Cm zWNfzZYvDrM%C#$4e4y1hIF=0LpochVc%ryG)&Ld zX;@XZPD46dr=d)?PQ&JA>olaZbsFm2-#QKZCR?W=ovqW5wso34s7f9h%od);C%Gwp z^NaaK-^|K`R4)20q@z?W`WDi*ICU#&yXd!)wu}B#(st3e6)yU1OmEoVku8TMs7n`x zxKA-#6k>C-MWF%FuZu#nvy6S(p}E6k@uD{{9_dT5M5>^8d@i zwAi8$TRxcX!>?Ph3jK+x$-mV1unB|{!b;ytbWP;##C)Xpep^2>91G4pR91?%3Q%`T~38 zz07>;SFm^@DD%ru-B!ao-^+yoTuZC0T-?R45T|hL+Pk%;L0vhy$J7VaBU$cIvi}MP z@N-4s8X#v?_^2st>ku*JT-&$V3Mm9Q-rB^x&st@zs|(zqRQ;G%-LF-DE~~ovI7(?-3MW9BwE0Nd!&nhw8DjNrl8*0KH&!1)&u?=GXqBZun-}ZG3Vz_{hqI`!O)iOS$ z3hamOZ2E@gX?kmxj!2QXE8pM@;Wdz)6m)U*B)*GHsO2;Ji!AGypi8XicQbf&EuTuB zPb{USD%as_89w{$65pcvX6&+$Mpv|Gl3NinoL zfwW?1x16+MXt#p2VrW-zrg8;mDpzo(as_89mpfBk4jqP}{irjQ*ARSyp}mIS6AbM& z1fO7NuOavZL;JNK!Z%7Wv@eF>^TiN+z8Hc}8MC-6V-|O1%;K($S=@aw1fMcyaaYDH z?#e94j&16U_UC5ZlU32ndU8veD?p~0xS=^N|i@P$0 zp_MUX=gL3sWs(u(l>(WHA~`d2HR9qz*P>~I&-+2Jmvv%_6TXNS9xUKG>6+K&d}^P_?I z{AeIPKN^V7j|SrNqk;H*ArPO}KzxGmyawV+_n|Jo;`_LZG(O`W-&7kXYo7$oKkMoO z!eg*7Nd>|i4aCQ>4O{y$yibI2+5+*B1WXwdh_B?PBDIMhe+$I-CKQDm0*aoFoc#vk zGe8ow-h`nPF`yv*4wQPWz?gqyDPla$K!q(k;h`UmV+LGbT4>*l#;J}{BOS0a$y%}I zBIG_40ztLW6FeHP+)&#EtgKPF!M3Z&Rh8?n!qyozDUj={;y~VJst->AqU9}YJ%_?G zDg48427&k;jNA!apzV~5yqzcTBnU$eeXC`o)!2xtZ@vX+)7e{M@125aRnp+7B4*a%=yu9VM0RQqM@*aUgzp>HEk8ZT` zg^gCeu+hpFHd^_@Mk_zC7#g#PyrlJ%x0jB{%Vz6FD?db9H(L3^Mk`;~XypqVt$bml zmEXp?vWUE-vxvN;vxvN;vxvN;N0;8&#}<*7U6MuQC7ng&C9S8t`NBpk|C<}F(n7d_ zmlcthugv};@-lsY8?7`V?|+5=@7RdEe6JtIcify(^^}J(5qb5i@e=;O7Lk`Sx(aRn zzZQ{~>ADL2JN$nwA}{5275aaT|F1>lWy=T4`|$gl5qZ}j_2q7~asdaODvy>*-8%e^ z=M(aJ5aKFcKMh>{)%;<4Ju@J<48M&EA^6O5$WaLKVdU%f`;a6?O4)uNQz~REUt0W{ z*MqZz*bYQdg%FGyUUuBo9?X|p;w)a)4ur_EMp~C4@`1M@j zYcqwCo-3R_Mxo`I!s)rfcTwRCD*Se?@LicgNzWC|7^BegOyP`7VcXBBa26GQ4+?LS zOKvUOB};m)aMl=wmS+lQnL?PJqB+!tXQRFLTX-Bn^ZAPA^ZAPQVhy70G1j@5Qg4I= ztd8jB3$i*T9d+tMvUtp0T&yjyhr}f9E-uy`vKijk(K>`uCO1_74`$V6L?cI6Bg;rghe_tVa>;t>3%@>nxjDLen7X1 zwC)FVCz96vfNnMEZeVDBVsaA}mB@ZTi;Zh0EPi8k8Q5aunhA^Px(w{s-j7?9nXs5{ znAI0Ct6#^fHO#6^Zo*Epr%{c7+nb$C%$(eWMJ6|4k;zS1M}S$B zolHz7H(`;>M zxe1Gvn$xHsxE>FYVOGD1%&zQYVlun4lZn}HhFSe)t}5jwtZ#zJO;|gJvJ7k?0?dTP#_2M!>u06TOjx9K8Q4Mum{HRLk(xMtS$q)A<{i&!eU*z3~V6+%!I{sT?V!g0cOHtUAhcxAp*>V#dKW; zwh#ek!eV-cT-`4ArxZY7uzNgvE44t`>n;{3k5}ulP?|1YR>?QC^X&Mc@_xNsGWMAp$G{uY?G&2)yuz z+!Kp5|j#QJ2@DsP3ys#3G0g}s`zsNIcCCQJ}`!zCBb2f__K8)q4Ib> zpWj2NyOA7@z_(oYVnyTm8lb|)cjFC@#|&#c%nCAo#ho?)JQOy<=L}JEnEL zV_GLF(7LL?>K9q`A zF{OQgDPidixGV8ZOzEIZtWiLPe442fgj`AzPJj6QE`Pe`v-Fr2}F6s3LhB zv`e=@2>WbFmv*s0atP`2rJ!AM3+c)=6iL>St~m~LDY=()?Wv$E$$LrHQBQ4hA?a~% z0o{;nCoRFho06}SZeZuNCAX6vPZ}Zo+@ImUS>r6=kzchMPm6^8^o6jWz7Y1)7s7t} zLfB8g_6K-$8_Fp<%v;#c^3%9jZ(%>n8t?x&B(+6ljrUKcD=N=LL;N~2-BCs3{gas* zl?l}~rzfgtynlA>jHs;f{>k)4WsUbwW^Pn|Yc0x1bkGG+`9A1TW?@v(c>la(i=wi| z`zLd3RMvR^WR^q~jrUJxX;jvD|74a$WsUbwW_eWBc>k<)WmML9|72E2WsUbwW^Gi~ zc>iS9Mde?W(Hw~m+832I-am8tqq4^Pr|Q9|qVfKZ1~U|uHQqmShS3Lbs__H+@Xgp6 zl~>@^_nXMLeg@%||h$Z4p_nWXhJ)TE!)W%2$=XYu~|US#q9 zNoVo?PeCmj_A}Yc=dN2$Lru<>d!NvTo(z%B;{CHOJqvsq4H)J27ZH3tGqRBK{ygey)xYk^I4=OLdHh=^ z7!k=I%Je4CNH4?%^}STz6-XFmK2P%WR0B2C`8oVH*ntC7pm9OH#s#g@0|%t?gd6p} z#sx+CtiTuIf_jY$iuBom*SMf{jELlqWZAAdMnv+3xS(F+g4Qu2lGnJPb-H3l`5ASL zh@|Pgb&QCl^xQgyJCs>~bm&|}dLh!WN~du_QI;!qOkaX@z#Wpy>ICkPT!~f!?vPwv zCvb=4+B$(dB-hmm+#%UlCog3oE~qcW1@$YYqdyVbkq6%LC6=z86x7t?9p;~Pb?W$v z*1QKl#4wTyxT9xZaY$6W!r+*VJT5eB|1;D*YA@r!M7+}U2nLC${=F#iGz7wtccDa; zjz>{FA98}DkBSI0P(p$vMdSZMw5`N`@TiebAx3{Zh)iwyB*mvP@lp(r%ke)Pd4XCb z>g80e*|bhIt>Wqw9iTPB_i7<^NU+LBp@Y_haAXP)fW@>NqhqG&2wL96QW8Y>TPU?b zN}Y#N4A>OSod!O?oVnTMVD0cQ_A4$x8!=xSf$i-ZsZI_TUHm;f#G7mgLXzVl{>2V#+kO=kyv)_LbbqUBU%*}JcFEtNvg9-L-I6fao}r80@8I%Z%b|(}iKM#{e*FAu(%sqlp5ZDM7ZmgRpXuI%JFh4vJJVfI zOlX!FK{4SvUZdL#x0TiV3&=A3O+fE=nCA z&D1@IQZ>B#+wm;at^tu@8NcBss240_Yl?zpY)vt_6QaIfA7tImOIopvttlpS(Dxch zDWPS?58jAc6wCO{eEJm2__JA7Lzw#^(u!qlO)=qmr>!X_j6+~+iV5Qo*qUO(I0Uw) zm^{RKxAR3&EaP{ORxIOpl2$C^#{^RHyV#$CWxNJbN*<*m4WyJX4uLP6UF3IDT(QjP znj*VVu}tCubTzO{;(0~HGD;y(z^|ZdY>e||kTonrz?@+js>rYmCwn+Y02P$xtw%br z3`Ny+gHp=#XHUP=gK$mI*cJkYJfmgANIn2{q`D zV41N;%TqnD4ChIFs^sa(uuM3IUx=4FT3)bBSU5b%j+PfJv!A2o1Q4FUa*WEEiYKcj+Q5uv7_aQWkL-) zL@Z-R%M;6l8gz(QCe)xq#4@1<9TF__(nrhFDh4c5gMWOLrE7s@mVxG9biwiOkSYs~}BaiQ+9%yhI4W)0d+0B(vgGt#da%KjV ztOBs(kRuD0QTux2X9lCFU7PQM7Cqtp!zh87EH3fFyu=i(!0MjD3_`ZlF}-aU#_nh) z$p=vuPz7b*4H3DtS^O48d;chCJCHS#E?c)PX*OO8Rj zL;Iz+@kFZIp`{wM#&cN@5M|TOjb{h3aYIeRXKfE+OktQeC~-+MuD`mGTFzIU>#A24 zxW1s{(`5HCbKwty;0@B^zh{fTo@cPd(#Cz-MpsSIAMra?<6yPB!1Y%b7P!7@OMzn) z^7via#-X6|A9;HpAp6N5V#hP;3`hP94{ECfq@9fR#h)U$i}o&QItxK-AKVBX@!p#+t;(f6#G1ig!Z!Z3 zwXrG>mvMttdAN*QT|I&Q^J$e_S$)31Evqt$PW&0o>#u&Ec@Hbshg}Ns-`KtAYGKY7 z-uO@01pIoE8^afV4*CbAH-*0hJ#o#CVXi^Dw?kzUy$RwMKPpYV{(`1W(DmX|(idy1 z6IsZ(Mb)94i}&7iN%h?Y_PR^-iTD9q5$}EA(qN*;KK)j3*Fp27jd1iA>uJ2#+d{qBi>C2r zZx8iu-*o9Dx!XHJz1=rmG7YzTr!)^C)+WjQ&e*|8a>Fxrn6x;zcfsLncer6=wTn)eQ%4N0zK`bi-LGu#Qw!W zV-uhHH+>3TkDi+*Pr=(leGIO?U>YBTw^>)Mog~kJvb?#In@ojk3z;@b;%_8 zI*g3o?ul2%p*#$Kin{cc|6=r(Pkg{~Kbq(M(sJ*`qjE8t&IjoL9%mLeM!fIS@z--I z9;$Lx8hPN6_`Zi%6WkuiDQ|cU$>0J=xZvh#_|++IH-<=B;X9HrC}Wtv1BzbmlsDeb zlvgmND>$;b(IatP;YeIpI1<;%$fB6iy{sc~y-pZ-VAgZEDjtcel*^{UWm){s&&T>P zx{w zvB-48qxrmZ0u{^8$6`)?J{DEy=VOt{&&MK@pN~Z*KOc)sem)kVz#=^uH?d&Aaxktk z`T1BBvx9LHnQ!LjV=*T`AB(E<^RdX}=VOt{&&MK@pN~Z*KOc)sem)je+rhYrO)>3! zEauq3xXA#6#pmZ^k;%`;B9otw#eU1r$C`}i{4zZlH?fle?0l?;Q3g}Yvcr(82jiCU z3N-MenN2R!4L?VcosY$)1Twiy)nQd8muWw%%g)Clot=-h7_=J7)57F39sJh_xHVyr zyL2<3JDpsnXR~Z}J{IZhd@RP4GF~wHlijFuyF?=Q%fYyb&h2V6tP$_N zlY?=S!oj$S&h2Vwr%rTkhr@7p1WDmw+(ZM)CLI7tiAC<0wK3jKxp~>#E|JLnc77Er z%+9aU%Juvz(%Jb{q-$}sEYGhZotGNh-DYn==oKo^qI0_%%!MKSo%O|U#C@CC_n^@%j`e9`79g?oa!MKb@&p+$x zvf~?4{~)C3s3xgnmgPBcU>E|dd_D4QS)L>S?U-fxvfG2y;<9`Xis~%uW60U>vi$SV z%sEptXIbHtMJQ1#m2sPkmYBkKiRhU#yl@ILSV9lLZLPuh7S-`ny%J?5I^_r_sS;W> zs^jC0vbqPQ&T7*=C{hR;Yjw%Ko+^NG+jt&tWZaPM<}hwBXl-U~2U7H%X&BJ76^=ZX z*LL8T+7293n-t1xvq-sCn{h+B$Hh3*_6xwi=y=vPxg26aoVCrt0N?1?jN`Q@f;IxT z=mf2MunK$mata}4PnBl%6|WX%Ef?}v+C^5k=Jb$05fqYp9|m%@YYIFckWCqXOwi7a zy6N4N5Mz6C4L^dxL1={w{`G(yc}zFtF{LI9&cJa?lMY0q%njpE|oKw6`?xGVUX($F>TjZD|jHSWsM&^7L=(a<&SYRYKn z8h6c`Fc@j*8h0&e4PE1|qfQN7;|fO%xEppNT|?Kn8%b;E8g~=v{e-SLi~!2L<2{(= zr5qF7?W{aVyO7}aF&VMUE=S5oK*|=u}eYh?bcL$PvvAR2u z?%&S_@q|x)$D@zXHua>*~S=EWwHeE1|XR1EmA`LDlRpmMygTY6f-iU5Sp-2082&216+Tx8|#;VKFrz;z`Nvfn@9T zOgo+Xdyl9M1HLrj$Xm+LI=BU%pQn?|wf33T#t^ohs83r~YWyZu^u0|aYn$Im?hMWA zZx(mWGnHFM0B7{DxNG+7zT%-Oo4HY&Iaob^AczL;5OsZMCOfC(n5n^jT3^Q+?qtz( z$A!TZY4RZe-`eCmv(A)`c+Z$7zh_L7-;*_28Y!`IxZxR%G+G<^zG5TqvPK52pJyw+ z#ma7O2!j^{NI!^HG|G9I-^!i{c&L8oa=C@)G`kuU`3KDzY?fR9kJ{R`(jCuhP5sT% zzu(oy4p+C(2iLg1=3la260h&>St!vtIk=*_IJny&JOi@hdN}}QpOH;N?S9wPa81D8nCVdM&4+y9fN?@;W?TY zYJaQ^y0)@GCyC;grZC`U0K9jYo@sxalr^Yb4pUV@_J_QA8Cze}LxymUkkEp2{DFw$CtkQpBfh`GhdQzBTmUYJAG|xZFvReKB8fBk|uKQWz3X$!Z6k^C?jbC7m^1`i%>~+*Gc#W}kPgdo1 z$SZfEHP7xz#%dR=wif6MaFVqE_v9|N;8xLe8A9mZAU5;8mv;Sv?OLZf*@tR%k#*9+ zU(PzXv&>=W8Eck(nle^z&9m99(JuaqU0|QSmS43CTo+7IpSxb%p-H+!U_9Wb%*iKB z#{=W9BeAE4Ur4s^?_wH=Ob9ht7EG8g}p>5gi+$f3;CsDis?On%}a@3ZZ2bP}=v`u^o=e1oj~8Vp9+JsVJS1Z~99=O;mom#DIsRCg{KP{x$96bs1l!fR!%-RA z;rKrk=$74UI~?8SkK^{3wZIL19!wtS_6)oWSmfBhwSd#MQV`2|J})cKtv=55ql-6^ z{*MN_W!WsyEot517;oWC(jAWRR?`19fo@|t&nNyv1-gy@>jK@fZ~oAMZmCnP1!E5+ z6rLa zG@JNS11A2@;$Qp>Gz_~QMlf}S*t3okf2Wbj94G!xBa=B!{GCQ7bDa1)jZEe^@pl@T z3^dXU6MxrB^)~V6n^MP%s|N8Ic*37_bNJPJso1lQ>qq;EJ&W{N!G2=TB7JsXv1c9E zkDNv(b6h`ig~()1Ba=CL+~=V5T*rM5?ihZu79bt;BGLEQx>4DS8WRBgXk;%}?z-eSMhxH?;k;xn;{!Sy4IZXVWMkaHd_`5=6 zGFOO9=2miC{X5Qs!qA&Nf)s+}{%h^H8SgJbFVeVR1~rZ93aBfm&8D@yC#R zw^a62UYTT|G70=D(J`qWQ{-@!)+JG3Pt+z2HEj(-qX%1;9T*0)p!TnztWCn5o}yxX zLGwqDhqW1N()z4P;~UwSb8bB-49=E@98|{B$XQBwj=^K8dt323w`bS+u7fch&y`-D zDQ!8DO0Q!1UqRwoQT!Pw*6zGY8>Op2p_mvk4VP-J)oS|W;;++c=sgx*uVv(VjUH@0 zXNF!c&p*`by+y^=11Je$&&T;?sxz_u#(NU5=*NM$32=qi>Y&K}xLgPs{Wli8cPI z1U!p1{%QG&I;3m-Qwew$tN)0cI2IS& zr80d{g&QrE>DLp-;$r;MxPJhuhoTBMTE@lrr}4nwqvTFKLm=KnW|sz!hzH5+*5DEG zSsWn^TE&~yf24-ry4d_jYPiud-uf_JDL|{#-3WPEf_Wcqx_s9%P~}Dgo>}D6@>JAh zkx$EaqM++%b*@ZMd}B_ zZiuu7JhRBBWwy;CpO(2f!6KiQxjDfipO(2f!6KiQAEM6ftXBh`S>)3)!hQ!9`Lui` z+j%Z!<_8L@+%EQ{1U$3Ir{zak;DRmq)qrQV1XJcAiLMavEQ@@aIyO}zpC;lbmf?$8 z=P+IXtT)-D`0bj%gd=Zc0i+B`Y#H08k9>o{&D87hC@kLy~7qQ|C33wJOz9{cQ zZ^q`IQu`C!e!im_zR3JjtgBOZ8w6^JFX*2lsS$i3bYWpT$3_Ve%JJh_2!$hD3*v^t zuyGoAn%_5`cXrOw9-2uEgP)RQL7%$l@m8yaYw(+1AuJI{p%ZV(S=u^*zn zJA)P*WUoeUD+k&58h$i_s*I%j4#vx)Bk8*)=}0=KHw^e@ePAXOyv)swem|a`y1gip zaWbLV<#H(1b4W?$W|uLcL&uDyylEObG*(Yc8%de2p+nzVT#QYQ;ZbK5Sb_Dn30qcfsLf3BO6IsT{e=EF4;)B7_^2Cb?S*(u8$!3 zk|Qb0W+N%-Y$Rn}Gi)R!eW;D3q^tp>qM^Zh&GMV)kh!dU{F#rdW6JNdTr;Jv}7=Q>>nz5`ZaIPfrQJ6sxDF1YnBQ({t=d z%7;}(Qa&7+r{|cFloElBq@?u#%UE~u*+|NC4Zswur>BjiOxFNRv3hz+0H#gg!~m}2$xlmJZeV(QcbEMxWbWB{gE zJv|f5)MNGZWB{gEJv|wKDOOKU24ITS(~|+1V)gWt08FuZdfG_JS~PU%Z;qtw+Ls+V z^a_qw^}iN6^jr)+;s-eT6Eyx2B`5L$%7&P5j_RaWQYeOP^ZsbP`34PEdI zy2pma+fa}bOgAeG&c|2dyk6AD;TtOoOYtw}&_*JN2aNiUx*_Vq!WcKimt0t2jsG{C zpvU0WW|8@q9O&~csGfd_fc*Ep7-K^!(=F|nvm5+C{TcT)L;cje08 zkt>&Dw{qpisq#q$<=qA4leIlVLG#C`cIL6OVbTYx4M(`KUoGS_`FVp{HYPi0BWR&J zfxGq@NVU=i(=r`DW=duNBh1TTFSe2XLFoQl{9TA(uqYO6fcZZ95i3lHzq90UB-V`t zfdAC6d{o1e*sXFc{{9#mwxT(2p@vtm!sY0_Kg4OfuV96urTqU7P6)(UHote9U%?8o z+ROhZPTPG2E4;*d{3}@D4}cY-6&Tf~rmYN*91|j>Z5)z=n6vd%qU*YJ4P?>|rkB!> zcYyBX=b<*ejOksZ8`7f?WhI?(0LJd7^cbd3q}N|t3`gSh|6}i60OKmIyYc(lyR)mc zC3_{mu_eC&Taw=fEK3*zwq$_;2eh)mmL=H|mSrPpWt+EILlQ^{GHseP4l9z7w27Cb zc{O28ns*UR^JojA@1#T|Y0@S^^h=wxAOGKPX71g)D_J(LwEh0IrK>Y@XU@FN%z4b2 zxsvwYf1k8)bdY9v! zd5T}{m5jg#&GzS7w--RHzFT?m+yMc4BEd1sO$o6x@xhrQeg0>>r8c2vVqkBdgh@>LB70 zf3wC|7GtiRDq+X8ccOF5?k#Ikx9MekGf=nAG!n8kXINEy1;rfj%3$jU6k4ZD7XPSJ zCUBSIjFrs&f%hTzH8S_#BR9P7&9usV)QGVq^rn@EFp*y+D+wA=bx9%#+li`65>EgYQFTe;LrfA?mn0G{imFQz z3CE)9l0?FjqUw^wU1&{7R9%v|7jS7*U6M$6M)Yy0+o5X-&xuwL-cGpOC~{a`{~ik> ziJnG`yPZukqUs(C*}UlEsI_}NVG*Stf_nquSXA9(@jZ-YiN42z@%}v)cOl^4W5L$? z_gFCC-($gme~$$N{yi29`1e>4wSSKV1O7c04EXn0FyP-~!GM2{1^d{)$AW=PmcGY= z0skHg2K;+081V10V8Fk}f~fs_EEw?bv0%Wz$ASU>9t#Hidn_36@3A0i{~inWTZg6Z zvEUp39*a*ow8Tu}h0ks)1O7c04EXn0u;2W9EPn19aPgc>KLoeK#nk+crSGx$9c76r za+)x{MGi^VWpPJA3vxbqmYC4Zoj@Pu*@e(8OkqUnjS$*R*or=ZXJ`)#b)xh}2(=Iv zQFTjKbr{2z3x%8vPjIPL{PS z%8iN8t%NJ1>Z(M-)lqd-BJr<`s;d$SuZn&J&rmnv)zSA7K16s;bb#<-!fT`SMhM+T zc%5NM7tc^1`!kwlq9hA2qC0^$(@-Rwogz!pUe`iFwXBuAhd0=p&R}x-L0>Df|{_vWqNE0)PnY4uQKuio% zikvCyL8o~~wsA|JqOISpC ztFya~a7;>9?s~!{(fb&G3E@)2^R^7aGi-HR2H`ojx-Elnd2}Aib!!MOwAF1HgqPa% zc62uqR^MS&aJ5ZuM+K|zu)4KOqrSuH))7|UVRbJjTxZkU(cMINvyD9z_X>hrZ0w=9 zn+a}1Epb~0!R@xZErXyu=ICBcP#$x1w-8jv9Nn#i_e9Au-Fm`p(LuruGti$MhWk|v zKWD1!+IfZxPgw-~t}b#o10}bb=EYiulCI3@4r7N?FNwHV|?U`KnuU`!29+g*I+`!3TM3=$5VM*ADe%Xgb^mkB26(5VL8MoUWU4w2iZqVQ})NidDovI%{rOp5u)MwqPyfoMv`eiVUmYr4_{&$56EPH zG%lfS_Qp~spj}j!C$uEvQ%63=-NH*)=iD>Xay#1U+@}EF5Tiz-8L6Qlq zWX9BondU2XmzoBn%u_ocJC*JMBeuTs0hwmkY_e zepbaEz?^!H-Ts%%^Esq=TB3disAu9VLtMU z;r@V)c-sv!!I!YpIr~oLIIK|K`wxh)nc_ATae@&m8PW4mndKdbC~}B&_W$7!_C6$Q zdlM_ib;s&c5lxJcGd`&z5{!`3zF$Q&GvX0uIiezVGUD%8o1-e?T`c?oMjTTSyO3gW zCtWQgjVRXTb+EP28RT;68cU=Kva$*>OQdeGn(N!rIVi(y;i46?*8{_nyEtE~iE>Gd z<#&D<;8KUNx2u9SAlcFbe0K*?gzP#*7&|c+9iw_Bp2{ccM@T{S$JNh~zFb-xkzUbS8U1i0%I;g-FE5^^ys6f3H;}zNNE>>ro731e;+?yHL zZpHZd85P)J#rXLd6=C4_pKjIwITg}S(6 zD37ktLBih0pb2{)gC^{K44Sa_F=)a$ZG`j+HbSB)&_=ibNZ)9!jYyBKakLTX(KU`XB0aiZgEk^Py8cIMBhsTw zYa@|C45r%S-hVZV!KTS4SPrK&g#{z-VPGw2^Os>6M7p46j3S>Ib>->sYF~Bv`VBHm{N&Y z5*Zkq?Wsh|5f@P^5oe4MQ7RFWLM3WPeP>w9?_(k<2uZQch)9)4!j9}4CC-V+U!mO! zjzxALuYybL*1j$cm*P$nc7nD3qeRNiv7|n2$j-5(J`Gd1(vK*VDE;VJq?R`1cD9JR z&lIH}eE~_-<~|L%@qGQLG(-GXbN)ANHVv9^%v1M(r^GMD8gE@q5V*?zf%V?XWFh+z zNNm#}M%Ob4rKarvQbyFFjf=mxIa1srv(E+JW5qKnbKk7ZI0aSEj8bZ7*i7O%@Ee+q0Se1O5QwF!wYnjOGWNtt;p?}C$DDl zf^GA9+i~;GGW~W}xg0GoxMQ9iE-%V#G12T+sgKeDsypi&2y&>XUdSvr`}*SapXzrq{uUjN!77t_#hqVZ@g>Dr;24=Mmv@nfeLJkgI&enAQP;yXKY4`)x4IARX^WLJJc1Qd6#xL zo4F6EKTA%~2vdi0u99Wy&ysf{T3y=VY&i@#8m12AY$fb{mYlHnS#rYOXUVzo<$ac% zyKvrT$q9R(B`55CmYi@owh-?F4*#>{M4~@Sz7z3={wz6R@3Z8DajKpjeFI_dv*gn- zAm_f~ldaXhwV~jp9V(!GYgIt|)~bN^tqlcFma2e052FJ5Jd6tH^Drvlf0mqmT<3k3 zoB{u{qh@BVcqEW64s4=U!c*y$M_O;f>(X`U7g?!SFfe+A+^*M zmjhJZ%i)!*j=man)n18T?wPILf;7-lnN*$N6%H}rh7g|aP$zgpOS6FG3EoiP1aByC zf;SX6!5a#k;0*;%@P;b6Y?R6yLh`Q$C3<~Bi2OP^dopgQ8$v>>xWu0AYEXHCH>6JR z>JPum)mfh44XG2n`or(4aP=ir!ZYLv-caBKZzym>NGNcEHxxL*t6+74SHbE8uY%PH z-caBKZ>WxCsT)ETnoJuylVmTSD)Yw+z_(Oi?wk67mCM1bNbg1Q)HO_@#{=f+AtnQo-)9OwUF6yV9J>BR|wC;I~BiF#qWXs zHy-NYM_$UOCLtlF}<-V0PMo|4H_MIAU^TWb}3lpjU1)~WjR8MBWv-POH7 zb=o4TBm_a;Dq?L_9f2!VphWTzgFW!myVbR&4GL8U(QZ?4TUmmL8dYeIEaVzh$gUa3 zcbLXSerx(vYnm{31J}k~@HQ0he1rL8)R|AA9+Jvj;{qk*a+~M^CFF9Mo!i0!OIZfQ z2EFvlu}E}_4gQ*M<6KcQ1x?7vxRl_+CBQ7^NKm9d|JYO7co`x#hm6)R&u1M96~ zW$b5QgH@u8{g)z8XB8`BKLeYrVrA@SV6#=CjQtE;Wfd!9KLcB=VrA@Spx!E0#(tvS zW)&-AKLgvXVrA@SV24$#jQtEWS;flO&%iFLSQ+~n*kctdV?R;1StZKY&wlH$ij}dS zZ@SP2(%8QPlkBintc?8(^jXC}M*_EvfumOO5NO?PXZPM|6)R)^N(|4vR*7;w;yU*o zlp~G(!^i_cHR2e^6=OlOKm}870N@?m4&Mw<7ksG&Qza}vC2PD1pU|OekoO54(%pZr zPw22G-7Nax{63+>89fU6>9CHT=Uv@d*68E!&HxSJfBgUwwy+TTi$qVqZ#EF!IVRm)X zWw1L;QKiuQ6`86^c^HWzaaGE-giAT+VnzG}UZm{DECu)M;KiO;WcdMNV%;N^Y>nY^ zg^g5kMOx?z=B_5Z)SXcZc*UJazRYc5{7P1=x;R0272!IkxP*b#3~U!hxF3lHA6Ri% zbrjB26W|0VflQN(e!14 zjqH94OTvXL>m^ol#V*t6#)zAzj!_1DnfP8>gcqpUbP|E}lJ1)6wEN0DJgzT0;76(q zNNaEyQvG>T>0ZDpOVa!a8_hp#F^#3D1w4o#43^9MH%g2gx`pp!s-5OvA(bgp z$yvA&Nf#N5AH>V(q*VwkUWxWZC$pp&=T{rz-$bAY?4J~TqgJuJ)TZuCOO7$ zfef`U`!A69Da`&gDxZS!;LkT82bPBOx&1);=UZ=vf4)7Te}10RiF3^#qaCr+sG_4> z;A3=sbClCb>~V~Mqg>!)G?+Td1wKaOwzH!K9jaX59qn{7iE^l;olYiE4pp}dXcu_z zGJ;8zL%qug4pjl|0`F+2lS!0ARY1GItAKWaR{`w;uL9Zy-qB7clPHI( zfOdgb0qp|sXs44<WcOyTGe}c7b=a)5#>tp^kPsnM65M1+)vi3TPL270@p5DzL|z zL^;&aPA8K&2^{ToB3mEW6JrRbXOib&NTb4!gFElV&+xO@3DZpNi5*}9t$|X z#{$mpv4Hb?>?_2noZn;bC9Is^V^~}a?ff1a&-tA_8Do!Vcazu<;rGa(;IL&hJjZ z`Q6DmzdJeScPHok?&O@`ovVmXI=?$P=XWRI{O%~{_ZXeu9p(HU8zkJ2M1R8Fq#S=Z zM`hQ-`Tb_V{MB6@bvOg1yGgGXYe6QWoEu*I45DI`bHnSd0#YMJIXAqXuoI)48@`0F zh*8cBUrIO@qnsO-ZY3o#%DLeUL^DNs&AtFo7F}W#DLGe^%m<5%QO*@phyhYJn3-8MMmblMN?u}9e!#VQhzBMm=ZfVI5EJVzD%l!Cx($k|y8teXQO*_BgqOxB z=ZY1-i{#5;`h@!wA#}_*+=6UBV~0Q_n)ziAiunuD8*V6^*#;5Fd|8FMj9DLM{+Ri7Ao!F- z@FzepTOx?*eSKqy>^DCS5M#X8t!TyTsyE;f(s$4$x-$4`J`E?Tl&V>oKeo5D1g zn17En`(&E(7uXk9n43HBwGbIo4PkONIT>O(9H{$Toc6rZ{48G6rGM6Ym}R?p3RzlZ z7COzapzFPY=E?)2H<%}6mhQQSx^UZ-7wjjx9j5ZMIgD{;s`7hSvs=tpfpoJ(`V^4P zSqNG)_jqXM{EQ`g!9HWw=NLXwnBGZ?d>FwqSGHsMqyAqjZL!w5cra`0pV@xz)F1Xc8bgP$WAeZQqO!R)U z#ZUBZFVXvRiF%pn2{Y{{`iz(82|v+1i-|sE{v8rwVuRu;E@oGK-h3G`fDkjklWCqd zryMYihcU^ZvO(HWL;JKpv~0#7>!x?jZ8gjD9~G{JkL!0bKBMEiVTj%a znlnFbJ&*Sn%62@B+zbCInEZ1(`5n*>pJb6)>s7qJMJE3#lUseNWQqNYx#TmW>?P%& zXD@`}GxOirg3GQ#){woF5oJuVK}9TM#4{|RMnzOJ;!0-O$Q}sUs~NGF5w$ACdPeMI zM4gJ*z=*YsxSWIzuX{#(k4QJEh)s<6JEpioMQmoo4n|z5aBN}3GmN-OMQlUFqQkh^ z-@IByY-hw#!`z~RI~c?i*1;wQ`wn3)Y*p`fA!6pstb>l&!-&)DzJVv11(E^!SPBL?m+%yEV}wy7LnV#FLqG^);e0qWMA2UzMSB*lg7uOZ2t zhZ*xp9rFxg?o`zUL0nPk^b(ieAa=bK}u&g=8zg>!_IBSw9#_D&py!3uv@ z9q88zLxG20FH*>&9cFCFcCEGV1~P|i*IGvqpG_dVUPe1)yVfOyaju>4rG#S+*{&ro zMJ#d1cC8KXLHrcrrcX|28A2byuS?y$#0aZ{*FrI2yM&y^ArrQzs4~ff?Ww9vGGRNe z$|MuEOMi`8$0B6Hb{YM=O1x{=ooo2YIZbrihw;X6l&(kEag?q{SU5`8BOG&-uGfOO z5{uga%#L&($PBR1k7i}2O&N0qT2J~gIDxjTXRKWkD4QrsCW1O2A(9SU` zpq*n>ph;c3t^&K%wd*RdM_s$_+`>ZjWwFj4_M5(T-D%+)eOautcU6eGUX*(dPAda_ z>e_Xuje(=;+I6R${pMdLa~p=|UgaF)bi5q_|BE)$T&e5D9FkFJD%!wb`895AN@))- zp~N(M`CWMDkk;)=%o4z4i*^+&yU?MSW>*tl>QGFxS3Hd5%N&Yn_R0+6tD_Xt>{W#8 zoG8UKdo=?P(JHRKp2ytg3aeu>ZD z#^XEql{4j4P9S*f;*b0URmndgqg&2l3M~To?_NUhdin6p|AZyMQF|*)VK~%j!@CJv z&J%cs_po@!p-vlaAuJr~wBfzW0LPqzOw&qul0%&~+{XLVCp*+>!}~bD%AMm(v!8hv zI@D>y9fX%UA0yn!vX(i2z`VB-u5_r=h7S;~cBs>ayNG|KL!CB!knk$!D|m*x39ojj z(}oWbUgJ<^3?C-E)}c-tzKyWw{uAya#YinboMZupGlWODpRnanrwtz=>^RhE!$+B1 zIMivw$NnBMF*KRoSi%F{BFwH=&M9KWaU^x9(~6bv0%$nYX~n8b80}n1cr_^nYY8%m zHIE`5&M8b<%y=LshAA=UB>s4xuW?-rJr8s{7jhVli28gDVJD(KUqe_#)aPpm$0F+U zHH1qd>hm>(O9A8CD^-MNI7+7_`Z-33QJfZ%iah5OXBC$?N9nXof!p@cXlD&!C!(&) zAuJrF(-Mv$o}aHFT;eF5mT)QJ`S}{cGa{`$tMK_6!gC_(^EHIa9i`I}UKmlIuOYlN zqCQ_kcv(b!zJ_phM18)7@al;Ad=26Ci09{P2yZ|y%^74@HM|d_*a4>( z{NY+8yLO%tIu4k>x~pRjXP}(M)bM1iWla4ha+$Npgp)vq&ko{UoPONqEYb?}h|(wU z65^RrMqzM1iQF215I3!kGS{Nd;B87~eHB?tOE5xMpHyObjj}ZWPxtBTn0U=Pyls?; zFQu*}6_zzzmsrjXcsa|^mmNnwDNWeR7Xeh#gk4G4lG21N@2q#EG+|dW z-j&jXy@FYVlqT$z?*JU}1eOrraEWl`IsruTGkr>cvDdzWH>${W1a*(C6q&k6Uw~07yW_0F8_{AoAz7forCzP%-M4L4b&I1}2=TuPh?T}N1nGokAVD{&@t17Ri3 zgm(NC1ENgVp|>%<#FD1#&`oScsU=Ogd~BLN_z8-IAtj70{+@70{+@70{+@71*Op*C8#=NYiy_5Bp8u-V)N{j5J+`_I?pF zUYo8%tqf?>b*PO2ZMqJ%v#;;8r0F`e?>{g++H@W2n2IT_P1m7YAIDMw({+&pWmU0x zX)`6Qdu-mlnFcn==3QAy#pc}rn|JrHIK}4O7Q%|nyL*oVR&3sFC9K%I+tvqKQ*7Sd zN4hJQY~J0^yo$}c9fTE|cLQwR4X}APz~~a$gMt`y!BZ|#)!g_2zhW^%UemX#p z&3}yrYBtZI_t^Ygq=D(0NlO?H#KeGmTQ0yK&j)n?uppZcT}Uc4g!()^VMnOX(-Rg# zeV(3hOsLP(6D|?z^YnyE0rT_pgcX|)RTDkfJflc1av}8Cd}tM?zGU;E)l8w-d}s|} zN07~j))H21KD3T-4Dlq}W`I`Zzro)UK0w2)agoE)wD-huM3b>k#$WT)Y{&xI zdx9Y42?TNn-|k1+|ZIP8ykJKFS1}82L%y*)H+K(2J_|oAU5%3gFqS@bnoo zKTZtW7&PuRjb|i=T|S0w9tMhm);7M-HMvIDWX3!A=2|6wHltpIX6|HU3zIwptY4E@ zKjmX>$-~+bz}l+orLeXstb2`F*AZVYU%uY{FrTB3vFvuBSY|QuzmN1n#L-zMz!kbNZjL?Ie(IL*M%kXB7F`E)~ zWL-4^#vdZqF@9Bpr^)Rkv$7mlL;=l%CqPK3>WV9XGEZ>S_e-0d70!=+Kqy^gTs(kSO%PZ*_70(=AEm`kIa zyQ9dLV%@hfUQ4mA{(_T~V%;VdtEE^K&{C`lXem|&{5uGl$G?M+sI?U9CK%9CtO{r; zRt2;as{;NVgft~-Dc03raME`W@{NB7Ap`y$gbZjY)|H=g^6wyI4YU;N-pqiOVpTv( zu_~aYSQXGxtO{r;)|EcC{vCuIPA$c{Ev$im2Vo5unwDbSRtB^b>$WkVrC84qSW2<( zzS%h`*6rYDSo}K(zl1!}5%|X_qnHKRAgz)c0OTBj`Kh)y*%5dYq~$pRlkUph<0vw` zpToV-y%@w6?vO+8Dq|IEw#-$=D#DenGFB0;c9pT}a=j?Zh9fA1;tq!BO3th`OB)fK=QG79A{_3udIGiEHUq&jPd6TjD7IMzL zl`KOEXi2=Es@z)%f~&=)fJXY0?yYwqwzL_cvWjxDtoI`8i+p*CwfP$TO! z3g2GHnMSeP3yGd+%nTgj{IOG>GO_DJPjVunWcc zfu?DY-@P|GrcukV$~a-Ifo0Pm@LOdn)Ap&fEqbq3PlEzrO;fM70UvTrQ@J)wKL|HP zYX&<4o2%1*%1r?LqECibB}$1=Ag zrMU%<-^cIN&B(t7DJt=6^8pdhyKPu)u!ZQ-X+~ivgN$H=;K@zLPBU_gjQAQ35$TJD zjb6k!#`|-n{Ic9IzKh@Yqkiy%H7;do=N1jLMNAu+oNvTfzK6p+6`~KL86_*AjB0!n zzmDi>-&wow6QKp0z=ln6CD3KREf;QQIPUOa;_;rj_oj+KwmaF!> zg7&P#%jaHKd;W#Bl)dKRF;6`NY@vN{;P86W#UVR{)P(3W!mO61szrAg?9JBs)e2WA z8d?Df%wj?_Oacno&wwVpZ;E_f=302UpX*vZI2S))8tmc(bDx_gq_}96%Ze$3sb_=a zMwhC;htfPnM;kY--9W<17@%GYxZDMs^2WgTb; zN9Eh+*N_6@ZcAe4UiQ9+=e3OrCxByIy2DcLgFZO6Qs=IT^Amrh zJv`>A-$zj)UXE-=31R|<>cDi&=%;1K2`!fIR7m928RYFeiBy6UFzm>wEN6NoK=nVy zJI7dgh2Os`bW@5TAnn1+{~X(t*VeyxV>HxyL6n>l<|$U!WVI){HEU@uOU0Z$P1B z69<6dZ*6=t=xU#s?DeeB?7hIqw^;O0Z-$(!{TCdK-X1s}%|3(|n0VM7=^&(UrgylT zB>he7TbXGw^S>R~7U8dX>Wg?PZ1RPVZL!AY$Z5Qo$8i%h`s} z9mvc6sLX!7VYf2-<=3 z2qMq{jUekG_zV$zm!Wm<^e#;<0U660d^d&v&fZ_ zx&Bn=Qt_b0A`()W#^ER&(`6>}MkD%emb~4Z;uuEbgPwTE&?GrO)f-}w6Lh;7$1BXx zqHgA5eL1BjJFYVmFN&kJMAt0Q9R#`^vPye=bn13zbq0J*YYhU3`o1xinhi-6ekqd!8Bq#E z9V7!#Qf4lh$&6D%h=KZ0W-OTrt8t}SJ5yC_$;_?sa#_>TkY7`1ZL0%;X{-mVn3d*= zID4XQ#_w*DSZAy@R>UpX&1Z%*Fsl;nV+)qdR4L!1QqIodWBNHo=-jC;Yjy$N=r;4s zT=fQr=z?|3!&QEPu18Z*Le{(@7=ayMsTu69>t10N)&laDbwUOmFP%e+9h_BWGSTeZpyiR+octlfrl;3zNiDhYDImCc`D9gIX?PUx zqc@C-vDr0c&(94j%UR%2<-!~u&K#dEK}S(tGuqS_2N4I7v879Ls1*t2h%8jlhzoUV z(N(O)MY=C^@M7IW9bBgIBB<~#_v;G0q}58lR*3Lwr5juoOdNOzvt%%r-+64wir^bB zkDh8PbG2dBSE(grH3?2FWovZpvB0V7uGKkY1oNz0BWLEg6Dl`lY@gWVTHpjI9K`k- zCX~0>M)PM-QI6h8y{~UV<%rwsCf)70G(Jer@mwFU2TGAou2%(gQKkt2UBzV6a$U*b z^xWb)!=u}o{!kUJ%viC#nc*lT5K0(dNm7|7?Yqws6RK&Prl|Mjl%HsFmbF2#c zQBQ?3Mf=l&9qo~UP6GFiAY;V}qGvRc?@}O&|bab_KZ_1)#uWMzF{m_L#>RCwZLlY@96EOa5Zbe&xgq zhyrmX1(XK+fJ^4MeGqJq?bRvB#e=1KW1~mf%`Z31eipe>+3yhq167OWda_8>vY`3s znb%uQHG9V}gThMYS12fjs0u~VD7_A_0Y&-kiFqVE$s4xG-mn!<&{HKrDxRWI`fJg+ zEq;9~O|E~#-e8J+9uOo;P$|jMlf6im`BYjkI!J#u;zS_x24ff~c&=aY zSfON|Za8v~uDC+6;W}86BQv$K%|AbZAvk@#Sqm+WireIz5L>9Yd7`pVqH@F|m8g=L zgG4|v!6S9GLV-#q=aW=%J`I)R)6f)eg1jc82u#7Uvrxmd{N)EKU5<<7t&dRcfo+sAbG;v+b&u@?hKcfC zU@DiYseImp=j$|qQlM`I2Q~0UiW9k-!?Y|sI%VIrR4~jUmJl%&B&Vs$=EVq8;)z7nU>SUgT^R6)i@D?rN0+t`=%nY+U-vC!g1$I{dd; z;od^}Dj4SJxjtu)7m`&@u?ui=CY2t4B&Q9ooWw%hE zdyNKptz;AwIrA(XAF#H1IXp3Lf>F)i64YX0h^`9S;fBUR`b@A{T5^M15J?XP5>LK@ zXN^{4$J$*y-x{46=bD4KD8vN>#hiZxl2gZ60=8%@&6TfcYK*tdo41+yk)65y%yY0|t%5o$m#IX}wH(dM}} zY;=XsSKxRP`!P@1$q}*FshW(r{~zeobC`r*U&rNB-Ty0Al6(>?l+%1^rqCzOBR+rX zPM<)p@K<1@4y?cd|L}38mj5?9Jby_IxRjHR7EbY?b#ekvgt5b<1txFFmBaMLZAw8y z^u)f`o;(~}PO&PyRU3DCJgsms$R}~Q4&;`RynGXKwctqPd`9yJGoX0*WX>hu6J9V1 z90Le1Y8@XV16`2goe*2RM1Cdd^6xn`_@-j4fUqd*)cLV6EGrHX*zIP0=(-({kUaCU zmaP^Bb)Q9kZ~3S-X^pip>t)qn5K2DkE`d?9K4is zH0P~>nspUU`FxVnp30D=)K&nT13a?u@aXZ-`)HEhd@2bp+a$d4XbNs;W2gj5?^$Ta zJ2jw*rEn`FNIQADaNdL<#c6h}B$ab-X^hJu{>Mq--q^hs+R63RIXOgb`N%C%if+a= z&}z!bbCk}jnP;o@CHA~M3R)$+?bnItcwn5)U*>!R_6N_R_?vVs42YjO&yf7_*8M%k zyzZ^(`Li|W2js_lQ$4o`zsMPZph>tw7>Ahw;lZtew>*DR12@ zbaO6T&t+jMEfLp zi_tjh3PzG0Ur1h@=3`AkIktCx#*BPzvCva?!cK?080h6lu$TV3x*VPtW67VlXfX4i;VO~ z^GMkCIFNTT1AgM6Tp<(qk&Q2g`3rMU%mB)K6((36Hurp89V3G8oPU$1X*(AA$*(<6M@l@dqNf?t~_& zZQU(!g-T=Q1(;Ka-rAsH_(IQ4O_4)JTm72q=|YZzuglK+IU6gn6NWJ zDFw5lkWxHq7pk)ZXDh~1&Ulr0J?+k?-NLz)-zzz47_W_b$$!n0Y&=|=E}VSgEF=@J zzrw1&g6AglD<1XBfcRLjd=%*(&}v9b=hVSTx&}HpnMLCMkHuJHN^&Xns`-6v_glvA zarHHSjngD1{xN``&hE}WqqDoUE7{iW{jKWi>`or_L%qj(4dY--XLlv85W;n>od?@1 zJAlvVZS81p1Bm->I@((_w69mi^c_3gP7rs-^mgv=Zt2o_`r2@}o`RFzoxOd`23(j0 z)|c9_#!NRi;F>wp73KJ2?R(j6C=A!D_kH?(qTs!~QYNTlD(j;7dHk_f#>Hsv|A2_w zk@`Oytq>`Z9Lc7$+3cD02gUw`{5O`%eIqK}%|6!b7 zS(mall;Taj{qwt@vVYsO7MLQF%~}ge?UB31^Y$qdIWt)?k`6f6Fk!8aH^wuG#DdynRThJvNhH&awaJ8nWwOWIk!*Du(XueN z&rN3sQJ;;XI+-1*7#K*L$fQxF_~^*VicDiog)CWI_DV%#d}P7K=Aog)h_y5>5+kDK zS-W4{Cz0Og+OgAiQ9X*PNIsd)EYmf5992jU4OEH!84({&j|?&1K6)B|Ecdi)7m0lp zjdcT}ra37#iunWS71^vxbNfD-<`LJ9oEGtf#3w4j{P;&yV!Za`-&;Lq>^RGvQoMnywn!R^+DIDS&hm*#^VYYCFG#lkdr13=TQckdiX zrA9_FVpxob;RiN})bL9p`JvHf`T7|*Ata(fX0#TS=uAgbCr>b@nvYRFIOLXS;PXm6 zi1`WrwY%!=Y2vYlZ8h0#HJCDq#I|^1K|C>E{#dvW-#iWqwhZ2gIA#^hQM_LJ0uf_o zgkJTy6!x?n?!~Hze|kPJQZIaInvwL)7i}h5HRP#mA7La{IzLbmrUBn z`hL~mSoUAv-ITarywF>P|EXSUeyJF+*2RZ8ZmOrPOZmkhw!Qz1sInGw1joF|W;@Xl zjrwGx0H-BgVvHerbXuGdK8b0h${7C zeZ-9OH=Ve@PQDZy+%#vG>HfeKAJ^&o(<5zO)`VRAPoYCCJ6j7o(_`}( zIgg+NG#;dF_Up0-(XS3K;`o6m)}zgJ@3r`zBs%I8_iRI}lPT(qraq+<(Q<4l7+ zrD@y!ve!?$T&qm1zG_kJbCYU_T?@1 z2%BIhN+Li+Dk&86uvSmOcO>xgF*lXU$f`Z}Qc}b-$H0zJ)rS3=9T0FUII}w^r(1N7x|<}t0JD< zIXaq5r%&j3QHsoJ0TS<)c zo9yfDZjnNp)B# zaft=uSV&MMFqDm_sXx^hJ$T#E&EzgLpT% z$V|MDT#{CGJh8JTgP61!!vALzO4t#y62Ise$td!lh}yXh@2Yq-X#W(-Z)) z1GykN$S~5xlOxuJ@e#zxPS_;lLGGdkkmg?tJ;reoc?D{9m-MR{2cuGsRU>uORI znYfO~87SYO+ZlI{s4IL`QSb_D8e-HmXI6$}RzAKj)-*sCPD3WxUj=frZ|6EkImC|k zWrrFYt*SVFe10_oN}Vr0tJB<(7KzVm_=v~wC^V9{jX+8mNslBl;DZT}o`6s*Hm0N` zi+YSCL^^@h5WoDJXcoFN%5G5$38en{&nGiUBpGV%R~!j4EchAp25V95jdi>Jykf7n-#w!~|m&@fWOJaWP*9hf`K%9BRMFrqw!e zTCNj!Ph4JA!MFw}LXm)Ru>Ihno@4n-04n5j1eB7qfp|j>b|6;+%@)K*QS%D3CY!Zq z*RQarSnJFyxb%^&S7ov(t)e{x6)k&R-B31}9UV;!RgI*FL{)l+Ojz%JSX9}`$7BFx zK1o!j5_W0*6*A%(cL-UKCkqvGG_B?q$188ps?wRNL^_>DMo;;C%(eS}AW;CCA#q0P zFV_(nkpZ=2Mu$Y{XmaEP^pS?foeDP>2oX4dLRqO?Ak3N=YygVhSrb_8Jo^2jYj5Y_tZ+~@XV6%(1EDk+fl{768x ze`9%TDK4og_61o!80}~(Ay-^6@1@3?`@KbQtM?k^iwaDz3Nf%n$31S}E+`Jl6*Tg^ zoF8A3>(tlJL9Yet)H%sF$IO8K(BXF4^6<}Fh(NtbJv@L z`7DkB$>NxzK*K%oX-^t*tgEqt)rtM-Z;_i})Svl2JZ- z8#2iRXlXwLi)=r5#yA1lf8stY1V}Lqd@4Oc*&&8*7AY{EWxAV>B-1E2rAFr|ce#vy z#O+7)#pGR3^d5!XPjOsWO9W`nswx!~(ApB|BVcG%L)mmD(;$`Wof4bKf~2#sFjII6H~eDz zDveu8sRIK1!&+R5sa$|%LLAjZv^b7jaz?bt75oj`Z92OTwTsiyhmeiQhSIR6g6rzs zNhC|2$bwQAK|kQ?=w%)_k!{EsfN0{(Lj1}kM$)NNb9S_u#QyZqXf;gN@^`eNaTDfJ z3g$?O1+553fRR2*r`8}JQVX=KRh}?^Ln4k&>&!=|2S_ zF9{NIU19(PDK3$H{)qdBn7jk&QEfMV+0BS``pu`2aQt|kV^rMWCAFv2*Jcxz7CwpD37|v$)iyAz#3A?2J)*-PUrq~g2(!O17Fx0!B#w;HZL;o!6^ptzY zopmsBqx)(az|Zi9@xQhsqE8}etoiNq{Wql&m}0QxWHRaD;Y3DGRr|L4>?z_t7#b-* zE7{^ji4?MhTnPDXf;Yj)*PA>%mVU+|6pxHhs!uZ@Dbmd2&x2;>=1xlX2sND93Lktm4^9t%dIT&qF)AJFKX4n&*^R@&wJjU58o^?8Y~6^HwX+lcYA%RnErdQ5z`C zr#1+aq_(5q3+TkKrS;Y)hF*FgF_Z=~I%%zrH)yj6JA->(lt+dj!(rEt9U$KQ68p)t z4?bm=oo?uC(3v5yFxr(0l9#U`nDG}c$$ULe*(KWEe39%lTHD{UPHXLG=^3xj0)6Fm z-voU&`^Ee|yS-j%nzFG`*$rx9n^%iV1PrxQjL1ECk zuoTi9e#Z1$H6oksVl44Vk)riblGwJlzPBWoeZv&?^^yGE>aVXGNhipV7R8%WFkyfP zq>`hOoUA2NUV1?h)(0ec9R7h_dKyekb_z9f>v=cPc~CVa<=L?MS_%xE zoTiM#7DjHudZGpX2FxCwYN+S!BR`gU2e`*2%g#Y-*Zjwuwwa60^Pb$T& z2FoONk8%n_70ueT2FqRC?*jR`_XWnRQ~B%I7@^9WTbSSX>749j6;xSc4;hb z5C;<3ks%c$Mj5a6ByJ*j{75qSGy%IuIV;$=owmzGWis2abJq}Ui7Cic@S>5=(uNdF zJNvB##moYk{aC}nk7S<2=p$@N*+wXi*5?iin0FFlr$}a+r5zD$ld1TyX^^t@W|)kX z5znhwXb~bSmvyNny@*YVOf!5pfJdoK(B18bHQz)_!3{A3CAGQKS4}R0_A~CYgkgId zLZ(cnYUm$jSgw#V*)#4pheXZaij-9wx1-ip6YdVl3?BUi(wUpHLjo=h9imoQ!&o&4 z0n&^oj#K(DU2DZu{0-XQmT${655t?Ic^GK%lg{jd&0AU=bno=4dboo_Vp!M7eSE}P z6UWa;dRPg{~%UKtft{ajBpCOLc%dk2#r{NEu!w`jZdTRa5S z(xRfARz#Z|%+s#;<@f_*MX|8oE*JLqzBaKUe_;l*`G=c!*)=k*yT#OzT1b$B}W<>8)OEh z7UhXv6m3oW_8(YPv*1r5v5a7CXi!*|D=Y_pU{3>rtFe}9Es_M^2ipM5Q?&KL zz^C^@)Qe*<&%uB=IGPsEofHlIs9VDTJf@(DNON6-WGUEIc?t=x*-H%QZ3I~N;z{bowemGgOI6a{QR0@xN|8y>i&MKz{E3W)zLP=; za9)ViZr5ZS>ISQ63_5&SNORXc@r`f#P_BVOE=?MDy5mYmpmortF;UWJWFfI=c= zVycp(S*-mMeKwWtC-&^b`BG#TOX9GiWCv5Qn`GhN3NSqa6W=H_Xs|_vPK-)~FvJ7p zEt?ecBo8!Q@@i9T6&+$=P&YyO+DdjO+8eN0I53z>kUpfb7(Iq9oov4%i$nEx9AweB zdz|JCLM%obWiisz7kpFFmbk1L711v$v7dziJ#a}&c*35V9n6S?L6Dvt9y#zBAMdXmY8bCz zd(A2-{d&2Wzg9b6;TEK^x3lkH%i+8=1BlPxPUEi`5Jb6rA75e`c9n_U7tch-VM`{T z?8V-1b1HQPG8?403*%?RXyXB-!csZ_`Q&0bNcHYf`4`IwY|H3vBzyngW+6 zxMo1}uSjB;rRM)b*?@cToXAcxMoTLYY2aX+>~3utyZ_~lQefcDGGL^92c|B&$hj9g!vsmNqRMW!OvtVIp_i(9U>g)6xAsx(T19kas(?P}11 z)RyC`a{ry2+PbV*zBujvcsPS?C1#Y;pwi9Af1D;a1Lym}6EY!oC-ssd^)tC^-iKX+ z-N^@*ov4!BY1xmU*fwWZjLO>4${@1J`#?I$m>=Jkt>&QumcH1r zvDh*mK^Kfixw#I{8Bzjq;|z=6r~A4N9X_l*NXA+YQ0h426qL_7CO=$fc;_0`` zW2Xwhb^hv2&AX#!niq0mEW`R=hBf*e=Zo)Y?VGnKVn5HBrIFnskzz z1;~dN2^P4$7LFz9Yz3G(TPnwWp00d9C~spD4ksXH(VS@9nO5b=*Ro?s*e1;mmfY=u zw^15?OjzY01Sfz(81Fq=}dND=pfO3No~w0D7&Hlx`Ff{J3tw3C>~mBrvx1#1LOggv>E9qwt5hy zd|FNqoRPWJeB*MVbBnEnX_K}@FP}Yl$UJjSV`a^rIU}EqL7=T-g}6*qH)JtyA?r5}q^;IcxD&&2B{9hkc%BMh5|zqit&OEwNxEnkUG->g z-X%HI*>;Em%bw52191~Ag*`0?+d6yS0HZ1t!{XZ~BI5VoQ@?A%?t>;N-$Sj$2IY`7 zzbq^M4-|o}I@n7|Flya+PA0-`Y{T`BXFfTQ5HAfSAfKkQ%@rauGMIp)MVzvkjG4D0~+7ktCgsfU7X9wytf66L@-Z$%c!pb`POC>kEW}5Mku2uyg7WI z8TK)qIp<>wS!AlzsfQQ6*fWR)E2l3qozA7D2+}s39OZ~u3#5&eB#r6ZfDO=&ox@4m zqgTdXVG8?*bhFbZ(!?(qC(X0}Xcygw4QYnemY4WN|BGwH4ML*E z7vbRrO_3Mntb_kT4S@}1SiDr3pSj0cLpBNii^HAYGOWc|tzgzyiwxHu6DJ2n7Q~^I zZa1k!C;3il#Wq0-LU5SWK5JCKP?4+_y<}QfBKSZ99d6@0Q3E1(u^Pb1#sh~%DU95T z8v}Fut@%T?O|{KFseYsb-FqiW9VZ?b2f&ccDD2AXMH?gD*OPMycj zJ$24=X=**x-FwLM)EQSg3#b}CgAG_u$C(_O!Txm%)}|K>ToJ=TfoDtAzyJnnLA(M3 z38Rb{saT-)W*^Zz5>%Q&#P~mQ&^{)bc-)B_KWF~1>iE=NY@%sQ4Mc$oXD)e8fyo@qY?uHjT=vnR1H)~GP_Ys8_K;_c-ir_`F(U-FFVX$r-#EG_YIgN}a|q7NI&K)!F1T-UC}U54#_nr^CW~=t zkSUv!$;2QO3&@G`AJZnJOhcY)$+ZNdItcMN>(q&I4Mhd1QU6`NiwQ6KaMg5cv?>Ad-?XKL-8n5naHbTK}R;g|n2jSW2XIs};jTYyb9IO+*wYK3grFtS+& z+(6HzDUM;^=ik)8;d{lteS=PJ!9h!OGtoA$?OrqS*K2ujbDA9@{k8F)Z2OM8HQNqs zMAOrz9A{0y=Hz08qpLWZf86+iIT?R3Ipwpo-~ZPvhxYH#DVA~ibquX%#?4XkxPzT9nH_BD>)73XFxlms zy1X$9QYnT?k26PdtY<#Q@j)DO;_)GjT}h?2ei}Lic3qfJam7VVXS@o#UXp(9#>(MFG~!?hFF!6OO3(E*o!Z=BIkzjhdN_UFY91Zzi!1g~~*kprfLQTkG&v`nW z&N%&N8Ov|wwJF$J{Sx^#udz)>S_%(*jx$6>Z};_zZdHtQ?0v#Pd6Tnn6O;NB_Z>o9i$sds0Qz_Lv?AQw-hKdo4jxK&Bg?Aw>loL0dpj%9*KTwj z>fT?Div)~)NWyE4cGLL*Ayoy`Ucb|0mN=mMrl`^0CM&gjcTamS z>a@SJ&FJko)YDg<_ZrAMd)v@u?Y)Pq`B=fnN@PeLMwg;*x&G*3Xl3&-K!qYH zBusB~i}dAfZ$lxsAL>>kEOWQ3PGup+rmffBfCRGB(aRkz-ECc{fTW<^-97TmJjN6^ zPF;WPwL5lizVb$+ueaA51Jz|7J%EIWO7^GULG+C^WM2aFJqiGBZ7N_heClu#2Lg$mT;Fl5YX(q1|Ns3Y)AxI8uR3*Vxm~9x_fDML(-^3?C-<-^ zRhvB2pyFyx9u77pn~+Z)YBt)u#A!51pu3KYnxsZKSJf#I8izWom-T(;Km+Qik#f+Y zq9wLCMG0vmc&WTo`x*nase{Aa?f5QX@(xp`O`F_b>6$vjUoKe1Q7!5|2n~6l*s8y& zZjP(RlOm0l^`_8@8Ik(JXSG?A^`#zppY?vmOuF3auhoWPACBU#hrP9Sb#Zs- zilT%_(Db&3R@oI*7lFJi_3FY_x!s^!>CFa`73eKiG0lMQGTxi?o2UtT2FpY3=KphZ z)TI|{lY4j{*sil!f9)2kba$upsjzB)ZII++ZoP2bWU8e;vY4|uC;^*#nc7G-9R6*) zOkG%O4%YfZcUfQSA%(%(l6JYLS*wNaPHjkVQ4z69hlUW3a=AS)WKSynmF7TD8_`!J zS>`!v$}V2vAw~2S4_i}YdPZ=}=9Ht9&m4}+OMKS%MVKUMxcP&Lx zbeB)GL(Me_ZITq~85kavPdRH;m>%ycWH9i*=@EPA znks3iUKw0kH-D&5be}Xrir>1MR7P`ns9ooyArq(JIF^kh0- zy~zWc##fcaYJ+&IwN|S^&uKQ1ict^!>wM+LBBjQ#)QFiy%h)ne59CHAEY^K@eNnx; zR>aj?8>}@e{YZ-`G_`=bd%3GZ*~{@m!D@?Wi1J{gU9K#u)X_)CSh945dly3;ZOh%@ zKwTg8!9|t+dUyHI`SUH=TGw!|Zc=^~6B62z_E0=g3d?13-)uJ)l5~F^4IHCt&(NoQ zHy0sqS@cvH1EDDqtDZP`;i0=Rta|UM4EMLgU~REE#NrI9x%5brk@(1DQr*$*Mp5lc zHRc3ruHLh>T;bF$;|UX(+Q1My=H4ibI@D#%Xao5xBDA~cU~#1Y@@0Xne$BE{NcNR7 z71L6-^M2T*xXCz@B>Xk^+GxU(T+CZyZEj%y}usKUqX}!(H@DQ;=o49%CyQWRxiXh}*$@ilsEszdAqDYC6R@UE1SwfpL3;wJ@CuTOJa z$$89#&28f(2T4cmhNc3$c_0axHHk_=Iz__Dn;pNmXu6n*dIj_~TJ27Sm>QQ*HI=$W zqQdH?3z^lll;-Nh(+SsOH70Mvoo6cMaI4Zw=RmAGk0~z;xs-a-MjpB?+O|#+QCdS9 z0!+DA7}*u)!g_zdy;(YTxHeo1RmL3V`G`UrrC<)eKB$(f=A!NqM><;umyg9S$J~!4 zXuo;T=u&1NkD{UBN4>RLuA6HcjTDq9)!wq|RBWb{>&$)0k#;5UUaeZ{ab|;-u*dBh z0ecvR=pzmEH4_QcJ97q`r@J)Qd$EtujgdaYEDnFrN8R7Md=t(Z{uG#l=P z>a!;_lKWL(jpg93HQZ9fL2X#84<+%mv09=^gefV^rCQ>)&q?MLj~-Q66A?UmBa9{2 zF_jXhCFRJPi=iB%N}{FX(A;91p}ZI^sa6C#B0NM=GSWza>|cZF&r?r=8r@Vp&ryF>%$*)+!-3 z6tlY+5Aw+ZSgG(o+Jwo}xy_YdHItt@Fc2gXuG@xf2KDbl^&p)HYo~u!`;wr%pMzOU87uq_#=FsA=Zm?XZaUR7&xCf#nch#QMp0V;^L%j`~8LgJ%7 z)w5=5wyYsl3&$$2Q=n=els5AeO;ke!Ae&46^5)Ks7rjck8@miBcV9-H+pSx8eM%_!jf4tRkkYd(PU0M*st}PW!*GS zES3G$I92{ANya%it8@i)8Hp}<80s6B| z%|1JiRnC;C%}`=|Mc<0tS~`d#jHRjLNQAUaJ1!+yd%3T2Pra%A)ON+z>Qp0VzO%-s zoGc8PE3#;yTbk;odQ7n6?7tJEBhyr!^mApcuhQ!C+KK+i0LoXx5%Vj} zp*(nfkojC2SNfEvW}ae?^03m4mT{9971eDW#5D*B@?APbj@ZOBD)^*AwCfS$pkV3= zaeT=HAi5&|ac6E&8>;#7#nR$)_9UzN~SrE7(eo>W{uv zGaioEVr2HW9D6UJ>aj0GUsA8}E}oaR+S5)4t02n+sgbzktgQvDJ&PTNY)cXGu~47c z(P19hW(hkxtRx`j3QP1Em6p_Ze^jVEW9!4cgsQySl%Ja+cBkx#CTiJ9Tf2=puv^P< zf2{|3)QXn94?aoQ8nWM%oo(x(444o}CA4kBgo#Y1A5fjld>H$qTA@-lIXFR zRQDExMX3O;Sle`O?SHl7)*90Ynmx*r7Od4FEtf2$ywS?)+VUPZnHV491~Vl_ZFUCC zO1aIvjmv7gv+J=-e z(11t)wy!kzWg{)>2OcTPxPF^%s~8?t%H1(HEN4*Yptf1rB5n2pZ8jqKXe}LxfvGqg z*!r_RTkh|synU>LnA=o*#8r@3(>1HNBF$-5hPZXgk{bo8c8+_gQR$hR{*aC`uMzG}uEsIBF6r{1Ygc^+7ZDzzLJPjsgho8^u5^CBymc9O_& z)UT#R;;m*EG4q|{8s-|G$u;^@YP^rJX6!)-{1k#ew#?Wwy|lrdr1&dW`wD-szqa&^ zcRs@^z8!Cgl0C^6Do!`)yYmR7e+fOCaJ>Gi(?vH1LfM%81})XK$&XH`*uD_TgZo%Y z(|)X`8RXIJ>|CcnHWCK7 z<5HvqHf^AtAk<2wJ#1=1>cBQgJG)aFr+vo=e=L;{Rf{xxt{o6`)-Z)1s#T|_ZJ?Bp)xU3v(S1z}l3QAp#ocmLoJ}O-MsCy=UL~^+nq}Fr z;%e>V5!yZpI@8ORRZ4o)g|g`B*LDx1$1od=6r{~Iphr;DL3}_{q;b@Jc#btm%t~n( z^Q+{G`u9-w4#O6$ao3(b(>b%5M>pFDB0D0n*7~}`V)n5aGZ_eNytD6AD_nJHf9PVK zO`2>#*?Xw2;nvd7r!7yWH>L%xP*DroZ5$0Gs7xB$%{a8O3)*fr`gsR}kW{*t5;SV6 zew&wd+PrCTr%sktl_i-(1)%j&P88Whjd5L4!Y)%v##DxhvX(%UQRT4?TODX*TdHl!mW`I$-}eA)&nt2@y}dGFCn7F*3+x&8T@W?1 z^2tVjRwb{qDD?WUa-gh~N}N>16>)rVT5WdQ+Ki=tcbQ!)`(yLv>D9uet5w4OH4Hlu}kmIHPtI?%Z7UCYP8$x8MdHMskQBZ zDzZ5U+ddMx;U@dkq0%PFLHd@*!sJquEZQ=rX0ft`mQWi63eNk=US2syPYR^DztW54 zueR#tgM$7Jq=Hg~tT}jDvSev0n>~`J1I_FE?C)IrJI}JZgdI_)1@fYKA9AB)Qf=ww zwda6s@s`&WneZ=y7WGwa^bZfPQxu<=48~hc3z^g}R;6i6AL-FMI;*Q@TGVnAWhZ@a z&7?^u^QH;K$-MqM{dpJsdv9&`fJ ztGp|(YuAijcqLZXjrzZ>1W-(*Na4G4xqbavf{U)b(Xm%({_UmsKCSpFQ*^Vp8R=_9 zulqvwbzjB)XYc;9{`UI$)^t4c_&Oa^zHGygI!)gnV$Nb;`-$JGp#|bsUgE4jja?e` zt+si9Lah$58C@IDN?Y$)sbZe>G1-XU_+ai)8>s4?AS;X^He1@wK?RX7;*n$YoC3+O zp1L0oqq(VKQ14d^w#I1=X&)KS@#bG@OS=?T{DC?@xOCTVV;iC2~&t5e)gq1 zTT)DE>OEE^OsVy;WuS@pl*n3xOwrs#(ln)8uYOpHXoG;~5$!u1$*Bv8UX)y{1G|fI z@3$VjlevF)vjraX)tOYFW!&%oDf==Fcl_|4{S9GDKJ`@JubPAVz5IW1f;;lTx9aTL zj=#y@?w6Fpcldwi_U_0>@@HSbg7p>3C+;hSqwg<;Eq5#YP4wGc`BWa{Z{iwb!ioI9 zezrU6ncwcor_$ZQS^kulbjeNs_xI2A{A&D7qE*u+Kf3fav2-t9xz3pI?9$>%y6YO{ z@3zy%hKI8JC4WPs{C(#Bv0;xniaB1%-^W4Sr*hmsVO+R>OZVh%azEYglgoMU85j6z zzs{B7+khvkyL5dGf9EFPGx^h}eRs~??%ZWum^qmrMT2$NR_(Sv|JUMw9^bg0abeTV zdFWS)FY#-Aj`dU}N4my(%95AJF$Kv*)RP{M3#(SI%cs8Z7q3#-l$$FO;(JT(kIdM*fPTouu2R^8 z&q*0e6wZ#0{4Irf{QX+yuDEW=xLbbJAa<2PpFSrV@TU}HDZV2_@Q`?>{^%-&Hh(wF z;#&;Q%lH&{qm0jl)1~sC16X^|G^H>;$g1BdwGcL@iTKT$@MXELJ;vll?l-_&XM6`d zDPw)neVuv;`Z}n>KfWlGO zwVHD+*|lnQ4W=snTD7_ktL*VwwR!+n*%KcNcbcF0+wexo8D0z*`e4;+8A*Ce=FV5v z!^DhFgtyN46Y!*r&w}5b@wsquty=wGaGw7w;5`4=!g>C`4(Iv5O&q&7(XLv37hGJc zRzC>m@&63Y<9`y)<9{C3*Qn#QYV|+hz9orif70STwqGTa+izsNZ6_~Ech%~tuzqc9 zIw2%KyTXg%UlFfZ_KDLa|NFp`PD)Qo;b8dcjE{oTmEza0YNhzAqudvc;x>FK@}^3W z{4E*felo0|WBL$@D1V=ZCwwY|WBC++ew6<&!20E#P29iw%R6Doko!+Cyt;FR7!@qY_E-~F#izg_Ec;&5IMPM6}}44(K{$yBJymtS&! z+bI9r!f*IWFjE%F|Mu{u8x;CL$5ofZ8cY6etHqchbpX`0?R?;d?WF5tec7l;08_ z5BNa{fA;t{f@l6Pgu9%#g~vZgA9tRii2YLfyTLNNoXWc&`~!F*epH@=;ork4y)t~* z&yYd#A@^h8bSXZ`-;yUr%HL^llD|c-;a_HDb9vnkPX15C|15Y8i734@;4|QP&S%3v zhc(lY`}y$W8D9)Po$;69XJNXO`TrVx>Qf<5MB{J5%V@ueu-fl`;B=+(-Szay{5}k) z{H_?~U;R%eOOyMLaK8%vDbJPPM@IRVe%SxnLO-ZJm%^!jB;TjQn|OG||3x^(FMV<| zoci~#iT`$3W1!M|2L5rztKi?kTIb0975HWNeJx;64q$jChpaJ>ivblJD8@d)Fz2 zov8=8e*ixAO{K7v^AYgp*DnQ)gL1FHCvI5k=-Y+xfp0AZM8MpK;dH4y$B*LEVA*T> zh3DtYQSP6IFU{oX(oyc$z%nItiHE-lz9QrAj`E-KqEF@Lo>A@(!^dG{C-vvY;j7_z z=8AH|kHeZ*sQiC{FXBk~mz>wgmJEtt;bkBugIN9}cH0wYRLdvm6ndO5gI|PG`EG<8 zEHW-|_gmrPF&VzO^WE^~D7QVGSHcTmrd$^PBk%?IFO7}-47>{WPrLh{;B=+>lA(~i zzUIKGzEC1RL zybPY{`CkiOp1HpX{u!M$*5|k|0hTd__j`M64o~VT?z{qC-750;V>n&vpT81IS=q&UAAQw9+<${RBI4Jo)z872 zi^Pll0|Yr=kH3ujhqb9-S1J4r{z%5!GAn017QQLtwc*<`-T;2bk|Mq>;4?D!E#bQ} z-X6A14Nrduc;OW`#Z73p6MPssQt_?686 zt?CJ| z`FiRSIE}wrPkjSU>yrzK?+Nt(L?YEJ^>X+Q+>eJ<|JT8@PAJ))rub&~5LhJ;-v!Ul z_(Awk_$YUO1il_l>)YSLVHxk0-2El^UiePuf6CpjR6f~jNab6%P-f(I)#{B$@#y`N zw~lh(W)x2z#qSx#yN%-6qxhgveCQ}nWznbd`(fPwJQ&xz8&ZG0@DJKiCySf#dA|wa zuT-%3IQZdjg}@ew@#(P6zH5(H?w^56OVA0<7r-me58g~5cmDZ|U5HGIU!8B?9tTbKD{f84`W_;74h554jqh<@`SQEwtyU&WFK! zUc(y7`DmDL=mf;i;yVTo6VO*)KSSd8jtLJ?;mY5~;44{-9_8+zfMv!a$?IA0x((v= z_%49={5*B$d?md1^tj$s{=Wtv^BDV2RDt+g@FrRL?}1-T3b(uahvDllE6URkAMNW|)o&AS;!d};{G0$^ z_<>SKf1ED=K3`LLzW^_1yx0u?lCLYp5>76;|2OB3`6n;PWsb`oI!wNqS9?bH41ia4O>=}D}b@*eMJhb8YS$U3w z2Qv55;8Xnlp~`a>ydZNw7jBatD&Nw-9R3OGf$f~X2ETH1-0xNXz6n21dA4`=+Z8^G z?_PM{fe>!={5}L<`Z)EnO>Dnk!tXjcboBji;779XFTop8o?Siuf50El^!EfR`tmi| zZ}j-z25-AfDI7T_=6_rG-bdqnLGr?{ordcvT+%mtz|-j5gRZ~!ga3#4H9t`K-VdMu zF2*B|{|I<8`j8>c+`Hj)sr?%8XFgHtj8BW<3wMs|S;cn>yzNj3_j~yB;q6+CY0j6z z_uoJrI{!EP>#RO*gD-vpo#*-aJ}e_dNgw?X{t5X@^8HhI-EXi4@cMWHzAtnC9en&{ z@tv#k_cA<={kYRS{c#)8zo!kdxV6Wsrn@U@KRNggJ_m!N#K zf2{cVrKRwbdziC&c+FoQMBnIIA9>sf_Z1hR^W6WQ3ZJ$2`{Cu8emWff+%5D0Prm|x zG8@nO;I7XV^>HlxefrlH?*C)(8yT-Jbv_k-X;R$3ResNcpG80J;_m0c*WSjM?)kqI z{@{g-dG3A{eB+c-*w*<5c-FH;`rn1eH<^Qb_VHx^J{rM$$kj$n2@>lpI;(OTR8#jUd_|Fyjc@sQ$4fMOm zzZt9_p=dg9109($-YA%J_r74*8Ug4 zn`~4H^Syt61^zkhliL3}_)g?0VMou?2rDEJstcjzV+bc2-8&ezY*L^ zehzlt0-ktou{7fJp8Hf0>YD|<^L=gyJ*-8i{(ELKKmq|aY;Td zfx&JX6)1Nc>T^HV#`Ofa{z6HFD#mHrz z-*>{dXYua@ANQjW{^b7mfHzvsI~C^x;48EG_#pgXCJ$x!fvi9E!w)ZHjPmfq@Z2oD zli`s0KNr3ReYUsz|02BRb?87Z?^W{em)hexcpdt8(pR^@D|jEZGk#Q`cf&K+F6QGu zfR`T{BT)F2@FJAQt>dHrC*gyZ6!P>OEK_zVz8Byp_8b$A9vl1f-{A|+;2ol;x85e~ zzuZ{V-)8V%$zK}ZCc=AW^Q9T^TNr${^6-1XFFeVZ=;b{S{>jQ>JunYGDyy%f;g8-~ zgdc!^%lvOgkMATnpucwEL;B~F@Y~Q&sXS-H&t&a+F+Ay7=9C`(8u*Xs8&rnX=gsid zmlgGMC%htS&z0~^D4UZ#{4d~7lm7#ppM+1!()$Pe1nb?2xGR5e*p%@kYp=J!{R}3E zn591hUWq)fcAgE-WPXzJI}a}U+qiHzyyMsL%%%43g7fjZ7yi)GtZ8tUyfom4?q`kQ zyaew1Tv6VW;px2pI>g=2f*;7{>leVE&)Vk-_~$4`s?XxT9$qlJ6uyr9D7|mPCG^Le z-Te;u9a;FFDSTGHzk^SteP+78zo)D8-U>f- z6>)fbPJ!>Zk~yyP?(mkx$8crw?GHbEK~et0;48mZjPJd$jB+Ob1MpGV`r}M^vteYw z<3At1E$a^#!w+WT-PQ2Sy~o(5yyW3#`0z}=zYTwU37O+kd)^Iyh4Cx(pB35R$q_V8UOV7{@^!*Lcf1`rRQa~isrbL%?D z%6U5uZYv=FIq$_WoV$=B_ z3Wm8kJBbr*z7@9eGCOF>S2LO~$SksPOsCBusVYYmr!>O+1NJZPGiUDXuu z49s+_+}PQ?8fTCTGmgn_CZ9Tg#}TE>DxuB|7P-W70jCtx=^~wrO2+CqXcUc3bR0R# zIV1~Fg)Oq~dM#ixo1$VrB(wFE-MaCvWKXMOBTFa#Gm}?^t*c}_%ZyR!oK!Llh+@hjTl&di0Qk;GtutCmQC7az~&B zN9}UMIyjguo)IQ!GHX1t%R(?ag=)v;06S#PXF5O|51nU*M@Cp7Nyk=Ys396DDNK$~ z^c{DIk;h01lQF~}dk8mn%G?epdZ$s!o#f*)VtJK~k=HN;lG_O}GZ;jl+1{{}qIrx| zx=2<5x!nxTf)Z3G9(62~TTaPxI?k+K@F{dd7gVvxtT6CtW-j=QO_G_w$V^_S-zauB zBB5hnU~F*vz`%o!<#Bv|r1^+weR72DhEW1(k}u2EAs&z>j7p*pkp;4KPzwT;;lRKlzx7^f5c(_&f#u#qt4mh z>j6D$@9*?KRi9{Am6ZwJq zI56py`>3P!Iv*`9);YqCgfN_-gmk{2^TgTF^HE3CNiQD6@0{@VP_J=H-in_^9NA0f zbzlc^Q_6NuJsxW3fVaj39bca^ZI>N))e+i}2hOvz-hO;MJJ24JD#B3z5@BNPjM}8>HK1eodef-@CKE~CrVRib~!JP4A?nw zS(h-28A?4Iqa)vDoI-M9I?ZJM)$wX+k92Zc)5jsR z+N(RVAWNH>T`HSiMq76A9JU4M82qI_$%FHpjt4ilXQ@QXlu+?CzuhD zp4=%d~bBUJWEeH`cK_Gu332Mb=5&>P2Qk-cxfEtI05K zZroQsqAfjd^Js7&3RX0AXZeceBK<(RX=Lg0!b(wgTA$pzp`abYb#d4(eqIuJfm89H4Taib!xxBj}FWtH&#n&*VELXGtVJg5(GMg3U zWcyg|(HflYe8t6Rq~rXBHDm<9TF>UaR`@#Apq@3tK9NU}Y>JX3!?r!7t*o8RbPJR6 zq_MLG$?S`09d3O-H{hgrh$h;9RbDlH)Zw7_%7^ z}^NQZD!Nt6`j4X zGlP|hb3L@>gX!xeOjO2nRmC#_WB3#&oGhvlB7G`d0hZHu`Bi+hve(h$w2W zWvJWM|4AESc`z!yWH-5E8?JalbJYwx z)F4i(b88kYXktC7dzj3{#b#mg&?MOmxukUsCE}k=Y@%mH84WPoNNp`|Jv*9C!}Fkw zdNAj(A6Jm~sIFpeqWzb+6k{_+3C6rzK$!uNmCR9g>(MN3eppRyri;?rL6vIe+0}r) zc2t@a->nu!JLP(&m4%CYW|7L9H|w9#hrnP3) zkXvHynEFTR>-xb%Yz+JUuND{O0dTKc^Z36M#=+XRgJ79$PlCxg*6YgMLeSQ^oE zwf<~iB3D|2n(6*e)SoUD#y)PohTtqAv0uONgr2?MAC4(f*?D zXl@zmHVfdwj_4&*PUJ^6X!8V<4%N70Kh9A6evyqpqkaXWQ;Ly48POT^W5?qcG%`Dj z<(k>t(VW14?7;S@*_N;cfaP53KsRnkztdaMV4a`bk-PUGGd-3}s96NDrpyOnUUQU} zKSWH*G0uJ^+i^U$`3gthQ4T6RJn`hysel_ z?_(j|?x{AneUL@!8GdZ8#enAp^iD=*MoOn5!@HKMx{be_5Z5gD^`0BY2x?zTmCi^A zit(0@Bvmuw&BJ6Dy))@!ei+T(sToy7@~c@!v;^My<&t)^C}neztP$dZg9RbEjOJ7| RqZ;v(JNBy*q#TPJ{txrAM&JMd literal 0 HcmV?d00001 diff --git a/马铁诚&&刘思睿(1).doc b/马铁诚&&刘思睿(1).doc new file mode 100644 index 0000000000000000000000000000000000000000..10debceee77e4c5cea676bfa4a235df936639ead GIT binary patch literal 691257 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%0Amf>mRW;)qdd&aWGu9 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

    v0n64sK{DbGDw;l*)!#Vsz%fjDX1_2DA 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

    T+#Fi914#aTq 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

    {FTn_>Mp4h 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

    A?!}IATut=hMD;ecMoihJPFK#rx{- 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

    r>B|>&V<-D1Nk{r&(2YG1X4MI;k7< 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

    ef*&4bp15p+K+#4 z#GQj68x<|E@CzBO;>?!H&MqIq8&r5eb9IbcvDeUeYm1}gKvw95FM96+O=#F(lFqZ! z;xYBLfNU0|A@#&2W?A z)iy3=3rMc+H&q&!^a92olC5mw9NjKCakLlsYT9dCxKStwJ>{)3VIKP*xv%{Yw*u48 z`)4H6q~2xm7xmLBK_XH$^KX0~wN^10vH5Y{7H!6G6X$OnS*HucMiU9TndF1=5W*1D zE1fIF>Gy3q|325t5z_2n^`{Y{R~w?v&oru9cmThSlj`H8yY0)n})XvJR5AIoHdeq5!AL%I+B&h$15-+B?TgQc^;&AoQ2B7*YpLRTMdboUP%66DILh-P*KXb&v zac|ZR$C4y5&rK(t+@IOrQJ!r=jIb!#uk*U8?zVdSnElVP{wj|W7N$9G9;1}&#C1gP zv9%3|u8!TCWq2Qr{fhoNPYc6B<5$&G<{W?j_cc&$6_nJ3KOK!#M)q_PK;1gVAur8%t`uu7v*lt+9Pcj_IUEx(iUH`c{dr_-La!v0 zR3{Jb-JZ~NPw@9J|A9Gw9ea8HcY_4nN;tQF2u{E=`#-v+;EzEGOZvo*e;C1k4pBO@ zgTH_MUwXIYHlo8@rGP*P;QopGSs$!Exl`T-$|{(>CLE6aXQ;qM;6Wu3M=c1{7$BaA zsg>SP^l{oFiLtUV{ho9&Kd~QQ|Bm2miB^=nn0kcg!SX4ScW65^$9sS=Qi-cdTfA>X zAus;-zkVr~p0q?-Lpu&qx-iKSh$dK3;Ql`KXW^`XXM9gp*)95y>T0LlyMKT3;pP9q zdt!{rMlDGP^5xy}NyvZS(P#L9e4#v{CD`;~ti2pvV)!lE|Lb%U8=l0+=aQ2fy=)?{ z>zUH!8|@sfx;BH-kW)~RZ5xpObx0dR!KlnlQx@2Vyg0iBwYP;<@?@fweKeRLTe`m^ z`zi)pV_H|S<*dmw)!*}RBc8#dgMlMT;4dHV*|WaRLc<g_jvc! zII79jOsi)5{1m2`|I5?A=WGyK}oV%LQ}5)qy{)?_tPUeZECbtI|&!?fwFfUt;G-fa&8Y!XZ>%DYEqp z`Cwraq-(G#j`s=$Ns0NBs_MC;krO;_3LgO!C^Q2#VmA z=KUX#L5F-%kD2Kr6S0+~Me#MPP5zJ>nbVLf3>vhVos_g`8&wa}tt_>by41F0^(Cq! zFaHoa(>x&K^L8B&%0M7X%wH%bbcWq5&6jp~N5;}d(U!*Z5)p^;t@GMzBQY4* z1f!LnDk5s1dXaC4eO9*yJ6Na0lL}Yv%?_f^)8CRsaP=UG^YlZ&r%=FygX&HB%FZ17 zyAWz8DAAn{Oae)7WMxTeFpiUVvw44@Jd_b)%*r<^7@}M0PBDZyO^V>yH4mh zMwXe78uy`TZD%V4$A3|Y8oy&&Y)E3FC%%4$-)lQ80|e-^B$(D$_ups!;5(g0h3{W_-S=-Z~n+QrPT*dJ!XV? z#E44t@QC?qgLy-E>6B+m&|KdxXwKZL#4dGA|M+qy zJi4c1`bYxNObB6&-lXcHR7RnrfFvy$)_3?(+oSIGy=V{p_s>YKWm~m^4_nEcHW!(7u{;zhh??_)_@<>#+q_^I z>RZ)GIMv>Co=HJb`18xvxT)d7&;tub5U=VE5UAgmoj8}AIFLgId?Tw@Szis?sHx|w z%t{qwSNJ4M4y2Ufw!hIGA*l0v6RzEGd zo7dfIA~sX^JupjBQD1n6!)zpKQ#mVFz4A6Eu(PrES)&M<6JPUb*A>ls52=?7GOUsd zj~(k9WRi+9>GP@<#9wY+qXAiL1{c1gqt<7(&F6IZ%MHo?%i1`AA*g}6%9$u^6gL`Q zP^*#-UoZI3>g7sJqN&vVBfx{WMcdqby^BjI#Y*Wadaz^~|dlAcIGxd)LQ zDr4?DUSiqPD-s-Xj?+I{i+RP*tx=?T-S1cPD<7J_waCj3-#bgalR2-u{d8j;_gmwi z1WM5I=<;BDg2}Uyn3$`xy4lOzo}XVMYcHh4Bqq;R2M@1`x{swu7TCR|Y+MVb8fsFj zYv-H2zgKx{odsQzC-lj%xazd-_b-`u4dE`Ij?gKRP|XJB;ul?boTr86Tb4Zw5-^BATu-LI*Jfz40zTBO4Ogf zk}eQjj=4CpUGm=d)CB8Ts^_14PxhrzAHr*r4nmFDkDXjY?P)CGDLK%5_|$lp!w!WR zCnlkV!zk&dVY2u^%Ua%MlCH4h^&e25v|UL_R8^M;Ye^duyBwueBel{g^4S#9>$QGY zfEY9)%UPd8vj%oC!tS}RK@?BXXNmKt-r{{T?HgPnL%^wVhnj*O%LXcJ6E^yZ@I3>* z_X!mxt>1CyWHECM75A3vC0EQoAA~t0u&J=pZ z63Zpb;+iLPzdaVf|6b@gd0pEFyEQjR>UJ_^Gj_^w;9(P&$nXez&FFOkcTZKH4Av0` zP<7+#nWt%K)3$POS`ia3p7_$@sC-*vZxHbUP*cta_A!UH1@M07FwN?>Ujw!$(vh9dL?Y7TsYu8)$VN?STZ1_Sy>7^Ek1HPWrptQ)k?QU*{xRg(e z!pD(657MU}P~Z^rk~!OcBkKee$!*(LCVlMnLUz-BkQ(JGJf4YOXXw%1&slEcO?BAL*yetwbkc zX4;1DY-YYfyidv#k%FX{I4`^}hT8na#* zF0_WI`QS^BV4%rnAJ9C_RY9q&)Hs~4_>v*7^}pwJf4^8N->|iISfS$7@}-@GSjrCA z1h*Gj#~*TIxE@qp7?PvBm588r@PdCR3swiBwcv;u3ygOG%qab@WH3$L=R!pdpsqu0 z@n3OyMes{s0OGosqvt)Loi0`xD*Dl60pT11_3Q%u;&(Ek?YxJ4H`Hb)we=ZYfrL5@ zJ8D4LTA#TjT@M3LIYts{M4#qmf&gdZ_HFK@L0x-cqkFwjI#2WxyTv-bnuR!e`D?O_Xk!RqG zt(=!2GR-63>5xbue|{CEO4X0+piR%{CDO8GmMR+*F!dcBjR(0h&Lxr25 zJ6-o3e~EzDzzF|v^zBn!y|YCr};=(Jbp6GIrf zAIWTpvEyPdK&pdXanC#<8Ldxc3gjbw9KYRH^v;hJeWnWw2yqM zo^2a{He>530=g5ft`gzuqLo9ohxJ zvKVAy7q;~reoPraA*SicIC-3EuTF>v9S!FLGm(TRUZe`Bw^scA;I;PYJgdq^A%dSf zR(Q)Zr>aFcadX98+H-1o{L>9oNAi=@_u@{Y9b(#>jYI_Td%zCk^(b%PTRNN)Vas+D zkh32#F$z3N$)6fF_bm9xIy%8Vpo2gpOH#Vm?*i{?jm5HSMUUIRjC~J~y?Ts0)V9#O z@Yyj5q~RT&GGFH5*}jh-9~t?)!d32SEx8wi1TnqN-(O$?ccZ4J@Ic2Fww?b_3;b%x|?x zIv*R`5M(d`T~JmOW5=I1Gw{|Br^sv*>Asc=p0>|j*63uPk?zhvty~J0MMEupU^l79 z9+{W*?B@0KWN@C0o(5(?)SFOhu_y@GoJl^IZu4giK~&4Ra((@eEQdf<=GS%~Z$8_J z8UUk}@S4)n`^AbP+n01(7+ap2gL1uac7vx4R+*^?a#pZTxI!Rv`+?R@p&oQpXjw%d zou40;{5nI+TsYEr?0EfGvV1MDA0T>{nOfGC3!WjG06uYK<=vHqS8sQ;AsfFKpI``H z7%di)_g!1z92R<{A_sgw^?Qx2fHwnX!4qIjN0=Tlm6WD&>nF09+d^iPoI@EyY5&Ht zRW=vJCqAbhpRGfOyg>o5){@yb9-uOCI$il{^O~bPsqBBQ1Gpc1?fVOw+F3euvM1K{ z!9SSHFAar_z~6ocYVSUf0;Bm^6|$n??KQ&Lh}!N?M1Wa(W*K$aWN^9UYD)=QUIp|tPD z2k?GRE;Av3&-0SgMt?_r`8SY(nPH#^X@>rA`}0rXFBl z*polIz?iq3BG7y*pHjfiV28c%z9!jfgVdo8V4Ddfr3cxlZiK09w%^kC1B*xDQMd@C}r4B(S7YBeGO;M8}Ksd@+ z((F`BY45@aOV0LZ^3riB=ep{#q*?-}%P}G*r!7uUJhf!a?=sWf#(r?qs|Rnf>@x?* zg;e%Pf(4tpBmI8vVSr;&u8p2>Z^mRy#by9hV3o>UOlTPU>g3mLsOctx`25v`C_)69 zg}cpIh@5gSY+_^yVu*Q@IB+rHdH7X@z@z*)9;ZDObtWugmm``u45DixlB_;)Eb6 ze*uPnP|sGaR1lpZhB@XeGkvXE=ouNav#|SEPY4|HdU5sDyzPkg;j5E-`5(v2M9qMm zI=d^#uI*Vj=@#@(Q(LALM$pG^(q9aO&qrhKoj2N1C)yN-7#+5tw~$w+iH-Ksf>RyH zPg3IX^7qXuwVJlsV}ulswW-lgvkoI47@(+-dz>3_8Ni!xl9Vh+>gB7HOG2MhQT72= zknzC~&ds`4~r8=C`TJ>B4L z6_;aBe}p_JSg^@vhg52)&FFE0IyY8vQdYO`)k5khZQ)p&JlHhM=QHX(i@$7Hy5BL-@YEIj_{cZt&%z#qb zC5v&6OOCkTvQf8+(o~O#H)Dfyd)Rve3Dt1Z`zC6W8J7h>FrLpZLbK1Zk@7tFQx8hn znE`|ijdA2XZly<#Z?~v-3%|`XO{oaWVR4I32rvh(&7qT6ElrPyRz!jXhL4r{k`7Br z^Y}L}>H$E>qus-@qVHmgAPI_egmtVWQH;=$)+CD~NZP4z?3hwu9(RXU-=@+8FlrF3 zB)qp)X%J9CG3ciY6ImHXPH&0w+wK72RuiPHSPjr}RJh#8$ zR$fnGD)>ZW;%)LtvXnMAb>MfUU4_D&B1S%XC}yfV8EEM_ zwp6TXrRNtAgY$3~8p)zocrhS3rwS{4)&54W=k2FuFm9|NvlcrP`u5>d{blrFe^Q$V zcdI%Av(OkK4Ue#ww)m>0aT*08lU^BMmVJcy)VK#tbKC_T^d5dEm{DRLBF^slhH&*P zlzQW3!Zr@#mQ=6O;Rl4RY%Mh7AhyUWOY3SRk~!|IhZ}htb=+i+-8WkyfGudMFmZg^ zUJL(f#AX1!quRQF@}k+2LY$hY$iF!&mU=oFu;?J)Ml0_Reohk=`dErSL3oFxHqF{ z=x&t$Wp%JbHM9I|Eit@m=UXuK7+fcdW6s*>fG+kUP_W9_(nxECG z2c~>`7o#9LN8Ak|-uaVqT~2J3cVvwx^DaJJcHp43Fh-1d9npciYBPBE4@Fgg%>TH-m<6wZcb)e9rMvl^>~Vyv$)gi1<8D~ia_Nc4~X2l1@9NIF&9-z zvsO+RZ5{D?&84EGv{xZ{ejre#In;k7KK8laGW&q%VD|-AUoX{8Mj$&NVr$hwOU*YV+=y#AhL;$&~ShzqWA!%qPYE}kjt(k`g6w9|i^3BS|^l%_~$2BOdgvi45cYRAFLeC_hm_^OF$_t2-u0SE*V|tVo zErzk(@%a!E6c{(nN=lnw2&1w&;DoQ~Pjb#lCxP>$Z$H>)?=b4yyrt@N&I2FJWb64W zqZjY@p)`Ist-xI{6`5kCzaF^LE0;E$6cppqmd!>suFkx7>|}?gc!<=-!u*9Z=^NhhYVhN(Xo9vv5`5QP@{?{lMT1<+G?ZFlId`1 zrf?xS;_Keai1Xc8PkmrZY<$a}`G_yIYNg?c6chDEt%}K zp5cYfV_lRs{qGnDMW2J2Gd#^+K)ib)WtkXQ&k-OPYJ#p_U zWBomzZtFlPmS3tfb^ySv`MeKD=~cK0Y1lG2q+XX-@STvs03W4S)ZhXaBSTdNf41}p zw{F78Ws|y9l8$p?M)Yar(kL3ZT|u(7ayzZV3jmxhAY;{aUzc7sb&hDF;Yu7?c^n~y z6yq<;%z&$}nY5uePtM8fYCwWh%6wy~HIE;GL8dfKelyN+-{?itI=D&~ErAX?x~CEr z;e4s!!m5PW3?sjo!Su|iE$b|_CFmF;@z`iiMq9~`L_s1VC5^`2VO}6W{*B~4%lSQN z3n=Z`oJ~fDe-`;h8f1t-<|h{Wq74d|%j5t6a!ft7-Tqt*@YitbT~j{MI((<6UVd6b zLg60mQ)X_V1mN=eii+$QLiiyR0d_=qw2V*@LfU;49CzbynT#x~4%4s7>oqq^5q*m) z5y%XsbD+)6wp!*Sv^MfaQ@4X5<;hsu(1APjL=g$^GG7Nre~Fr#n>kg{1IOHvxZRG? z@YbU$)sM}O7m=3n0N7vHyJ%{Z5$zN)Gg0GmLcctQ)_#k=NTyTH$xy%h9b`CRd!K~6 zz8276K~|)qV%OrVr{vC8Cj;kpaZvZNt<>yxP}t@r9WW_hYIARW?3wXCa~$ldyjt@; za;C1_G1_U1T0jdp62Ne}h|PX$e*g0;Q24Df(di%G!^wo3@ArJe;WyxB(Gx3HUU>f0uu8?(kgc9QUjHPUam<&twt>=AY|xFd z^P5JOC;!~4Eb#!gsJ}z};i!@`o%gwf;WuNo&u^S2Uooc@%WnD9Jv>fcAsgaJkBPz~ z=Vq^72K+!Y#4Jy*y#e+h*atp5i0gj5$BYDc3HVk<9h6q=aEk))2GgIQ1DLqG3mCp2$sYl0@ zA)^wFt*dJ!HHDD<9+5*41#5#B0Uycr=^Y8=8Z`S_MKQ?48X*z-mE+rw z>0YUEKh(ca*?n`3_b4w2KiR|xk0Y5jl|2!2=mY3IiZ4^A40vatcb^k%vow1PG9uAH zAH?->FKBX<rWY)DzsepyE z-q`0Zj4om-!C|$78O1<7jgpc_wmN~wB2}gh!oD#=S2IS2oC(=U@@aeR8=Umz;lM&# z>1U@=|C7G%@izaWJ?gNy*6ET#S9gEc5{QozSxs-XeUp%3BHK7r*oq@Cai%5rE*gp9t$GugF`VO08% zx)6XL1egI70jXDHN?Lh98ZdB@g%?%@|I)WQF780WZ;VqCa8B-PhdLZ^L^gP8jU9@` zBF^tcD?395-Vgs;i8Bg%Go)o@k#rH9KYs3 zTyD?@C1V8yCgL@kwX1sRUHi0MvM&DEE#Ef80aKLD+-DI~wg!!3VJ*a#kHVl$k{SF&keZe+!sJgrJ%1AQB0 zn6wDbr5MVN@PptY!W=VEa$Nx5D-m`jGcROr2r_wu)*Wjqp{H=$?lcdPYd5pRDRq7~_Sw{{2{@!Cf^as`SMx++*<$%67p=n`{>1S=pZtEA=#FPQ%;EIL)QRWaDbb8;AOx7O)rbHO0KuX=X4nh z1{;-z^S-e{k4RT(qBIj*q$M9jrPCN%_d z;`DAv4@0OY>4X;(%YlVKlRno*Tf=FjDeck5Zl&l~EG=AQrBuH1qSKJu3)99j{)?Fn zAnOI}S1>&_AJg*L|DBkrz?_q~V5_NextUJQTb8L?%%SOq8S|09e*)z&%fR8Zcs>^) z>&m?QtjQbRcZrr&tt`$}h}QJGGXVhdwCN8-$?%aR8UG*@?t> zdD^+M;Q%HK<=AbL2tLAg2(19$(?P9MmwE@$d!#&-Nag9*r4^B(4=sv4>8ok1?xE0F zlfZ9cOB`9>Joo}ic$am-??4mFG-G!7m)?}z)p$drW>W-Z_w(R^aaKk6Mlr^MG+AcO zd~F2zl*Nla?rw%qEakRWJ&(o)k2R+}xmjC zn4wHE!0%wLp=>+96X~^2BMw4zk-AB%dMnKr^UiUj7?CisF_F3~rS*0S3W!8`+#Q}4 zawnTwu%Yv@nzVPVA|e9ePD1rIf17-^GAdVpmmoI}OqT8elVS-kNSc^hWk5aAy2A3f z##D-=EXTmxn)3W^&S2+^eYLMg9=hqDGXD1&?ni5hKJG$lMRe|R;z#NJW zfg4#O=HX7(WSlb32S|AU-*C5RP)rBfI!w1m1=*M(x9JyESvbDqV!?t3a|DWzRDF(47$5^c9=d*o3B#Dj&w@+tzNw7=>~g{ zYu$U~kp)nV41SS(OOYUFwT4uc+v;aVoi`c$@7`fRe z&LUt~Uq+lzTLSxtr2I*vV^637TpVVFk&uB4mk6 zL$5V`w)VfQq=#+3wj}+^H1gRrh+{u@x?<*NEuT*qA%TtVvCT_CR*~X{v7)xL-C#6i zYNM8gcd+;V@mF6vI>(R?JsP#tf~7}__NI~IT6T2!vk)E`42PyWPbN*kA!#IQbjE{k zJnz%?W<-)0tu2>gXf%GfJ5ZDyM2$^t4AHNIc5fg5rpizx{GgQ z@OszqNHmVF<(}0?y{G?HHht~rl;3{3DNY_RNQ|d>(WM}-W+Xm+*1kROz`ezyLDA$H zZGbwEZF-XzRK&CHxd3n=zNaE7b`-p#v@ZAthjCw0ZHlwPVyFwJDgs&aY#5?l{mS5# zJh-L)W82MMRF{TvUsq-O+dr?i;|_%_*nMh#%mxSsjSQ&qvl}K?;Z@m`KYamA^fo?C1^dp zci8KK(8c1PH-3JB=R?Xi8A*`7P`fbm>v*~XEk?UZ@HcI@O`yXz_xhd0rPk8i1&|sF zpq)Duv(1F<9>p)Ux1Rj4itO>LS{(A=d6Rs^%G;`vQ&XFI+w0iWkKJGZUYQnJEd_1L zg&kQ`YQL{?yaWOW z(-&pllOy%2qX-+2T|qIaCA9dqMYf80GcwwaKDk;pf0bobh>6Rud|)Nj!5rLAK#CH3vaLkv=%Q3WdPFc6KPr*LEA8X|=D0vuVH1kRGFl zKCQo5bAY@u{+{l9T-?8J?i}+wvd2>xj&z3sb!c;~_3CQUMZBSZkBIG2QD1x}X_r1s zhb#KL-a5{4pACVmc9xNHZyfhdSkQD4Vwerpd_N+41Dp_m`_oz`Tp)N2GP7>n_09D8X+Mu46metS60?5JzcjtD|L3k#;k0h9r+#Gk1fVZ2g*rHKP~FkU=6KR;c(cz|O& z<#BLS*3hc7U#n48lbsi;tP%>}KGPPviK^MAu`rGIFHah(}vFDt?B}`FV!Oq1ZqN#RT<)`z(J~TrBTF75E zEDdqnNR@8ZzQ)Z`s7+Yn@UJVFYCO7g33Va5lQ?l}x`aG!x#s zmKRLT?+TsM>`q>q=v6LJI?uvN^sZrULgw$-tT;xhf=t(0_}WXOu)}}az)LW zue)b%?|Jt-^g%h*KcWd?qrt73fpDJK7;SlG(b8WwTg{Z(u5&InBn=K+b2u>y39 z^uFzpO@FQ%I@e<856|J|RV>}C7(#^CNgBPZlesjTD@!{1a4U;;bt@oDDt}<5rPv~j zdoFDr*V}`(cjUmsNw@Xeemd*Q2AYz6v;&b7SXR4s6Um^=^#~f2IiPlQ3{zyNtBrp`migAt;V9h-&AVtv5Snff7Gg_2D#F|0)EzT>0N z`&MH3*Yw(%uoD-YFNC_VSy{B!)8X#O+9PdEI<#C-4cjm2m#e3#nfyOnN*AOOf_r9f z$u6o*kjWD9Z1!ZVeVFb&KYf09b?`G-Z1H}u{pK)3ZiHjn6uk2Vb*TTLALfEa6i;Lt zl0aE>I$LCH+eSLi>MO9>zvGi0lVBqqu39psyfrnDRPMlYzs}dU)}cbstVkG3zIq z^&a0pyBP{2Od}s~SPB`x=68I(@OZJ@$s(WO-@A^-bg(9T)%xK(UyZ-&^ADc-05a48Hfhl5=1jZm)<+h7(34+YA!-|aVPe- zcV|@5huj@qW&wxSZP`)%)}5=}*QRqZH}`Y@J%`%&S#B6T5kDkwzr-I{Iw)Zff3l6#^Yo{e`YG%LE^H?TAS{*?8c>TDvD_h2Lox6^8`9!@WHi ztC%Ol^Q`%__>l5J=T7(9YQZdK&Yn)&txZZS6+yTA7nMc-5wL82T(#uWn+O7?HX6N6Vyl?zv94;VV zM7+*M1U}$a+12)3dsgqxo!+xPB~H7u%=|4MI16toX|8@{<$B;#RO#J<)YDnj8GMRa zYbg!7KbGu>%6t}jdi;a&q~+A*H%{-O%(-Azf0NPXtCudAUwsnb7e)Mx9^-+;RtMrz zxAVJ+n>d`?q>Xmu$82MXtEBiNh`Th%8fFkT2B=$2+!R2Q^)gxl7F?i2Tvivi>swTH zU&+k1H>5Wc?mx5E*v(#^iyz7}KU4PJ{le3Dw9<`wscF^;iR=C!)BP3gwtSt=KAC-~ zohrS27u(@Flxax#Rh`<-tt<@OF3v73JIZaQ6Uqg6FQLU^vJ!6(nAA3U-BMZC&t`O# zxFf}ZbMKpDS%w+qSPT>d%+Ug`U|ba^aleMYiu7Y`aw3{V{Iz#^98Rx3zr*7xbIM_2 zw#koM->-;uG~TaKvE^}cO7n)0=lMGhzF&3m5n5%|xGXJ;!85~t|3$&4ZFyd5 z&Yz^vb|9{UW8`c8`0<{k_+_!)EwOv^8eZPmxJ9Ua2j8v0>5)>M-Y1#Q=DwHLeK>8e z$!@J(pRezYg05=w?vmQ5OZ0~7r~r4B+0q|yoc1=$Q#q;Nq^;_(1g-mGv@6~2c~x=U zMk6GVVE5_+KXUt9)x6UrA3u+jqmED6M+`r3;eE4~_R4kjR?RV!Z3cQ_=XfAGW_fW` zkGvzuu*o7ta?DFE)w!>#?tPZ7$=1uSbVEy8?C30G5!vLmt2*Ji%9Yz?_PMKg23*($5`^*G6$d*7fD10{^8u-X|qLOQx@lC2k^M z!k$6gdf*@E&X0m3sa?uTp>x9QcCG;~la{%BBO~EDgF>cz6Fs%o@;*8qVH$Jtq??%2 z+RN3$U6#(%@_ucO(OJc+pqsaQ5Bqbat%$Wbo#a!K@#TvTFPkd!({#tnl@07C9XFSd zA5zR~$k6Uuv3H{TcQKo7{W0 z=RO-9BD1URFh84k+Qlu`RpbNzD#qOLNVS3;BBPCZj`piMBpwXu(DH&94kBMdXHO%HipEhuoYaHFMbLI3=nanB_7!qU@q-K1{iNt!s8(Z@$I5Oflz)!xn>v zoBNW6E@9Z>a`Z01ab)CzRabLr*Se-3U&||=rgZQ?{Z0L7JExkriEb}Wow7I`2VW<* zInH?3WkkwuXf%dhYQyv}wdSTgxW2a6Q;lc2F&6x2V*ev07t~#R}W(=&l+iY#ls2CUM^a zUIv<)VW>2x=B0T%wQpZ^W|pycyG6J}l(=@T+gZs}hQzM^r4?iTGi-kML1kq%B_iL) zgzPbo`B+Kd`=k|bHST(C6Wpq>We#1oH<4>eR+$A?7h$rBHFpEaxB}^ufOV>e?`d zjI`GVPVMlf9LHNJOAlCdZW*eigZn;X4)fEA9Tlc|Uz~LdRF>>fb330e6hZf?UVG~P zJ`tnoK;9}r{T#--Trr7frDqg(?Q$M*+^Bpq#Cp0k;$3>Owms&Y=v-!>nClNPR*cIBp$anF};I$!NyER)z z&qkNu7=F<+aY;J!Meip{@<85M6T>!X4{BaMg~KZC0X3Eh3%? zFAUerkO}apQbn2Pd|0h(1K*o7d%tCtkea~ltUGO)>n8d9g?5h*hhFxu@urh8?d_hc z)t03{0;`pI$7f8xGT`gW@vUWFCT~@qohZkzBJQhjpc{H@bCz`mTTh2ob(oj!+bj3R z_w3~98x`9Xm(RF2UuKw5WxrswBc(Yh!CX!1VuB<$d>}7^S?=M(?1#sTX?a(BRb*8b z2PxXczvG;d&%4tkGU6D4Q&cRuO;B16PHuwwfgJ?KDqUYM|sONKC>U8OPgWa_%ijx%_H|YZ=T0*7-mHrDmfPIyTUit6Md1TC0XyJ zi}-#Q{LCw1Md26j-e=iQe_*&zOG|6MN#L@_E%goFk^0u-{)zhfofF@@&hK6RPs7EuhnBr#67uHXMlR)lGI}J9XEuAfHBN5}r5%3Ida1X@uG7BcaztX( z$Hf_%`bcqjq%OUF9q#R-?HIy%jI|%j(V=GIeqCXubT4M-n0m?Oa^j{2!GRxAFQ;Ex zJ$bJ|G+{622IWslgOdso*YlfA^tqmK>_X#}f!fkltskEhMZPoA3AwZNfWtv*(!dMP zrB}!ou9~j>;6R!TVdDWn7}VMA=@q4VD8&61F8YpBMq zcS`j6MX#OUi`{*=t@XV_UboGQuRVpym(@M(<6h!213nF;Oz++Fh{5&JakK|kW3)Hj ziZrME_r*i1%Ex{8SeqI;`kZ>=EH-juIRpp0z14r0B$G9AXnTc^pP2BB_rucMl?(>O zMW{m9lSj=W)&cQ&j^}0D9VcpdRoGCPJP*B`#Y(n4T@!N2S&ZN0+dz5Y(d0Kd=Dcra zTGso-31)N13s?>xMu~?c!|1#$dEMn>f((g$1DBsOvdpEP>REoG?bL?A03A!YR8fJK z=TE+wF<aLW;=H?!(G$ZJyi39G^{^ z2_Rc8yT^)wxZA<+hm2PUi*Mh#`o?$V9Y<6=2%5DvGWCh&D2dp+ICOiT{-p!~`+M5tI=e!B*Jf z5wr^(6;+Mqv=onK;;Vsyj=Kf?TEPTt6qrQJVvZKW+*Xae2ftq^k7?p}(=TC1?V4U$ zNdX4yWGJ3IHBy#kj_dv4MB}bx=!s#>UI=6_?YQ@2*rG@@D%zhql(ysK+VzZ~s!vP( z565RVE*ir;#>h9@Tv{z|rNN_Ppsnzrk;Ya@v9^(JZQjW@#XSf0HFRY8Vq#=lK7Z_O zs@+=|Fxx*|$skwsMt)@6+w{Yz-OX^;Q9mqItd+}u7UcdD{sjreJ%%;br z8md22emx?*F~T|X9Hl0Yl1kx(w`sJ=hkN|`T+9XZFP>f(t??XN>AFsJn_w$GE=ka(khe7rEb+nm*26nsEY4_?@+iHQ5CD}RD8`U zSnXNwOeMRxpp{HYziPepS>B?R`)q<&8l)bqF3n#N*z+7ySX%LAE&G7baZA2NTCuo` zF)tEiUJkb5wluHX%hkwn`=cGa%fRe;=z^^2j{e9^@#aVO2&)J6JoPxm$9s>8F8$7y zjgOPOuabM{EspqD8W#Ihwar|_Fl{@Bk@cUiD@M0+~hv$yGho_IH5o}wgJxbgbOpjT zGHy;Ih9O<~%`||Q@$|E8F0^MG z?Uk*z*SS=^e^*#9Il`PcQFJ}%qg|`U4#mAY*0(ydao}`jR&;zZ-+ox2Bzk4@Q`)#D zrM#jF#)|bdK{X|xl_|1(dL;w>8|W*B^Gw|hxau2~@}v)m(!27kYAYtAmS7XY6|Y{m z?i$UtwX-;8(RaJ2-&XJ6&@19uu{6gmJ5lj#Y0>!tGOZo?%xQbc1_G@G*0uDL8)s@g z*A*YYo1`3sc^L|BBBC>fMEjc*`qt~A_ zziV4SNJ#-FVOt5fm)oomww4wN^i@aE#5s8$)DCFx*a&g#do#-G2QS| zHHq}RsPlK&KBRxV#w=W}UCHm_dR9a{m`#5(M+I$#nSIo?LtonWxwd=|uAzf5$5ZI(SmG+fu72h_>jP;P?uo$Oo_6}_;TXwQ|y_x^sIMtpl%aTK~=)dk*JLcwY zD;T)aMlAJEDYLt`tW@eoR^hwMfrjy8}wd~oad$2(E$4N@*n zb)K@is_S@8==6$ks}wflV`ZG)k3$bT2%atVuhVtB)6ForEk0zU&aCHeH++4q zEkofKc*ajrKUj?T!cDAz~wOp7bZhHOr5jKCz;5WWP*|ipNq)?)&=G!%L4Y z-n{$9)-RQx)9)Rsz2GG-wq9zVRB4aNK+JT`&D&R!0%e^z$85!_ubOcjW&XtTgVs=7OedodjCV&XlT3X zdn)Cx>&WCyyGvX7EF;!#Uf;0iSP)^V=jK#bWnCg(cHodl^KpJvTx*BeF|~S6E(vwQ zb^_VWhV1>%^j4oYKPs)vvg)YTF1e@4z7>tGsRxf=Iiz>kP|nl4#L6onCT`h>W5!i& zt+vcG+beTq+dtko)FI(d&-3QG6uZ~CkU(Ze`8B-hR`#zurzpOv-P7Rm4!j_c{~>45 z@>A1`2l&*hE{!ji;5wtVd!sxhPt~0+Zk}86=0^t^T!RPk1GJe8vaNk} zgk-@Nn%$UK{0;m1hTt-Wo2MUh<(uB%dOKxd{8=~qQ77+ajZ+*SW!PEXpVPVi#TAV8 zU!7bc46OdHlcT1;PdNbH9HRf-@pC69fcl=l?c~r1?$0_o5up6@PVND*lN({J;9bGj zGZmwj+~{>Rf`fo%g8$E*TpIZOLb*UE#|kB|BX)9!4hSH=E!4?TNs~Ic2Pfa~)5&($ zb3eA+Y*mrBx`5$JsArP2F1yFr|qR*-%+Q#_l@FM@9Nim zeSIGHX6$xJP9-bF>k4lv*8eCPbSym2D@ZCdXFAv4B=*)*)0lTj1J^GUYB$s!XA)On zmFFuJvW?IVNx1ynGvNhc!vM?9q2u^%k;nBe1#BH0_Hj#J4_}eJ&D=LN@Phkb!ltkw z&$hq|S&1)c>vM;+M4B_2Pq&{_W$MuViWQ7gv+mh1`1g~nj zdgM_}*8LC`6<__e23I~g&=jVuiMW<$8kNd6_Dp;EL{zHL+vB?eVvhwa61iZ1o^L$$ z>dSlglVb31XSL41IL_yjFYNBaVd#;`_1chMDp&Br%h9i6A7{r}y9g%7*a8aJ?iZgj zUK)S%u3WLkG2=~z;}K>tJ6OYCW?Xr_ah;lkigr8Wh9yFIM$48A>pzV@zrv8lIRbwK zr*l(jg@|k$ZYv(%Tama_f691fEnltGDri_RBXSL)tG~ z>H72J^m=w(Z!8}*l&QF`cgrm^w_0r9?1qes6Yr;=O;#+=ZO@F5I)fKpb~1h08$wuN zT?C(#VL6SmAd83Ey%lau%;)LS+6xOFz4*%2-NbkYpTb7d@MzXlDEoqf+(fkA$+(6s zz2k9bmk%8sIXn`bd*PH@>lJI$WIcY#SnAV*wFDZuv*)=#RIa-a*UG&5rrmkxg2%z~ zo?l*fy@}mQRbREXS$&J2(8^`nXREnwC*;PAdN{Yynx0yuf98Oo&Fg*RPIkL}4|BBW zEepGdd*9yOZj|lo0#72$xlr8+PB`M zee~*+HEcV|mdutGT`iM~Hc=_dKIMD*kt33-yc1ntCIvS;^~}Mb3X& z4VP8uZKK)zQ&x|!f@<9TPfGQ=lpji2V;fT z%FtTyy`d%B!vnfV38{!9Ufo6xK1vHY?li{I?3~nAj|45_vtRBHhkSaRO=-H?P+4ts z|0ChzC0oXgyQvMMM&uWVUV%pCDB_XzxGAeBXK^6&qY5t(UekowyhqJKPqa2`Z|~G> zy{ao1xwnm$3FH#sP9 zJ^>%uS6IWgysm7~!Jxp5+-mOh&m4tAlO~O+(F$2M=k@on#A`CHG0tH1->H}yY9#P} zMP`@gjru4pQ}626PSqd?(HNDhctdUm<8yhdPB}Cw{ft@n7VUBCYoou#VqIW*T zRo_=hF7AP`KEF?vbUOr7LpB(xW73=fK>Q|OMotv?9|TX&ZfR;&`xw*`bl}n(`_z!L zvnPYx#=XUY=qfSVbR%J5a`7wBz5LZJSHNA^-*wA$bm8RxmV3_)zwMS`ulqmjmNx_C zpLfgXMwE(5hxur2lgMd!F*Tmt;f|0g0ecAkKX=Pj;P(sV0^Kr-Cr<2^mBMbJY2t;t zWlCF8x2$^g8ICTD!m4hGMaUi+4vX8tDlUh3Bi?OZ$tiH0y+3-W@7XB=M_Py2wX`a~ z(o*igfC)}HYTkgEv6=p^pvpi3O~_zXZQByY%_}G2wq_pEG+s50O1&O_EuknNnmj6% zTl4Dpfz0E!2`9&{_`#RRLgBG=-=WtMV~$~}h3~Fc8I{IiODL5yC1n~$<2TMePq@)u zol@-KEGSkW!s__-QjIN7rC3-4n2wA3s~?5i`3Yw5<`&+Ne{(&+vG4fa8a9=pV+B=uAtTwQXMB}{a8ZQQ&64MtE_pm#4i)xoF*;pa>iP zlKbo>29A22Ip^C_vZ`7lgPc4}Rr0eJpG>)Nv~4kGLDO-Hm8yb=Z0QFQ_eAwehQVfx zIgQh4eR`H@rw%@Ek#lRi=r?llO3{^bVK=!Qv@hPf8YUTBt*3V=OwekC?CfB`J2An< z>IEq=8%($aa)_^Ndm8{n;eN(GEBgSNFxMihJ*d>FDIi?a1?wE}R3us%jR$M1M zE!RsCOVsz#Q!grLmFm7Yv1KF}zb&(?m|0SLf=T*ZnXm3kq4%fw7y|bfv}}5i-B4@n zTaxqGd%(tE_;&J#@v3v_TQ$f%avJuXq=^dqdR}?iqgOY>9m|KZS(7|!#qLRAV|#es zY6i&g^y&3ww>;h-z&BOu_+hW#Ce7h}ES|d$2naJgDgc&^hka^1DB~`}M%}|6*(>pjw!!lpi5;h+@Yy`hBm%g)RlWnff0T2y+QKrYCQLA z<+_%tolW#je!zg0)0wsw-S3TuX#5)9o16@0SVN@Ds>;4Tf5J$*Xj zowu2W?NYNsUYLg8=FnF=u1!7N5Z$-jylFRCcRfK$pM`SOq#OljfyxsyJ^BaxOCM5f zb2M-$;1{kwm9Z}+cQQfIQj2x__!@`T6t5}9RXcP1x&!Zd+)pX%IrCM5L2=Wv9StL7 zBeAk6%~LrPne1B)MDyhr*En@{?>Y<9cBOQrV4HI{pZ&EAtX#i<;)~!mDX63WG%O9{k44}q6F*``2TFZ z&w<}Bl)qYU@@6POG|_tNC3lp9Vr zZ#J+}#(5}6O^M;*xJiomGT=tnJM)Rn1z1u>e%rmHDMA+}!*l!gUD%dRj=iYTnJCY{ zxkUBV4SC)T&&PI6ZOx(o)aGj2y1_MvU9ohH$BF_MVf1Q=c9N#UdD7La4IIlsrT;QxaF5Sssl8(iXG9=4t&U{=<_gKH6_b_m}$V1EVy1kU)rTwPhzc{`P$SyVqs(k z+YgF$4YqFUTf-Iqia8heyjq;$Vvt}5+?-2vT5nYIUMFMuWa6lTq=MF}ugRvW&lAe{ zJ42mTc;Fn94eIDEs|PhzM){-ox6JTFK9+i+*00FoW(fHW?xSm!Ie04~%7zPI`j@Q8)#|ozl zZi$1}68gRQzW<#|fn@zoYy0nD%q5#IXL9%um-ubvLJ+VN>tA3$quB2kMrc z{BTOwtu%REZ(&@vXfin#{Qf|Q=U)5u_we>*tQCAg*A+y=OI@$->tH3rg4Y!LNpl*n z2{~T9(=#w!FZ10-Q;_Bw|K20y98dtYt*|=|8+<~*otGg#+Btrv^*AdQ{6#8cW$^*l zlBE)z(>1A^AFRNzHM=PAnZ@m^#GZq?y-?Ae*kkz+YH%~gs@Hn>v_%LQ0(aej=7g6p zJK;`Q3Ypy2)Rjj6V=M9f>&sqT?JxK3Q!40iimDo$9^I+mDU97dukSX&sB+nFN&ZEp zvAeU@sx^yXTUD!PGvx54my+Il4-Xzb<@ZjqqHOFv^D_l3n2k`k`*N(*h9}nv7oFd- zrR`C9Fhid5^6b0**W+$7vYB6nOU<$1CS}o7cIqv3QTiS7# zeb?1|hm12D(io@TPA$URZIW%&D!vSd?)!2&%{jBOzQL-)_D*)^vYZcW*trM16!`Ha zJDZ|)JB)VYbk_tNk#QK;2-4xvqsMOd&0ZRMiRBmGP#$PqQn`($Luk!f&K8@;0%7mHyY0|T7SbkCyQ5xzBokANc_rOG# z+EJqJWjj9%$FcLIOkOxUe4k>Q)OdHXO=K=^*UUbc;=)n*_sXA{6bRsOlIe21ICenR zQBJ$7yVzse<5`r`V$4Fh_=Ar~+=nolt*%{JePr04XF5sI1)tqrzWNnquw1NTWv1)k zi0gP46i_Tie<{(c6?CPf_SQ7sr>ARh{gZxmnu~dta@}&+Efb`!9T3>hVVU(=^wD@Y z8Fss*-A=-Lc(c0;c9hDMU)ABf)jrLj-Oc+?MTv7AWNz7&)JKcupH%6+R}PzTy5|Mm z%o>zy(xk+0cbWv=e*69l`^0Mhmm>_A?0VN;d44a~-hBk4o~||TxrHuO!PBJoyiz#r zg9&T5GbQwVOjhSSeYs6v;BK7VZAbC1tJnF*_HRO?VXGDQER!)AeUI-+S{y z*i&((ReG=W$|>8_$Hhf#d)2SQHgB)C30U~;HtB2LmajFj=V@=BfBE%tx5e1_$4fzr z*mxf@J3DtIniDvlsx_2m^}(mVr{9>qTr$+K+a}I`Oh4M=^COqgn{RJ8sy8xD-=$lo z;cM3SWb5?@9%TgudGyEd`+KCh19_)SZZheuaWu-wkhmvs6@TW!%a(=>SJpi|Y+kx7 z{zI^kUgkD|E)Jf6=V!G(wB>B8Q@`_`&GkXr=g%*a&d#!A>vLs0J8p6PG^S32wUeT;tZo9_yk)F~^Go>$TrKX;8Ri(`wA3V$MZZK*mk2Uog5NzJje>vbqy%|m{O}VHr+fiR;XUp1^>q2;^Z+I^a zJo)10jWwS}7}QyGm`d05R|PkH36+tLHluxh*x#HWz|yHE@HBYKbmgaOPReTrTQhwP z83IS>+jp!NKIouWXQ#Vm{DidG)Z6t0>L&BkmR((ZJ{^x@I1=q{Sze5ISg3KL)v%_2 z+FHZc_~Up;zIo!yUa_wOH)6K8mxoCXn>Q{!lE?RqrDytc?JhsD_{G(|l#KUx8?Jhr zK>zyO4ErgL(f190Ge&Qj@)))?T+NAg7xCv4o4IzZZTr3WyG=s3C5j|JWIER*t;}lK z@yPv!U;84N_>?C%x02N-o$n@FeIo$d9qXSG&`M63s_QHM;7L{o+)&dk*OT7g3|5nF zS1%|P-IoA@q-&;~gZ9{ijqCh6pSJiH-CWznWYafT{%T)|=ELDnaRndzd0l9ebR^9x zKHE6n@FJX;eW2a5(&JH4faw4q-`Ao-4QlI`mOaM^M~bNFJ;%&G-ZWWfH$ncflh)4l z?(!jnos#LMrTm{J>@F8+ZOACFwe>dsaMfeksWj1hjsnABTxB_H(lJ@(q&l@TZal_> z6%+R?ET2ko*Y$fE*=uh+=;okO+VRkr`)swPBgLHdz7>FTO1hycc&lH!ZAf zXhY>*izH9n^ow=ywfk2aRauJkawZ)Ry+lxqGun=YtR|212I0X{!YHHGrJ z2(9B)*M^r*y?fS`?J2Ol=~6xO^m-@fi#3r__oxdv8WqkNij)&dZ#FFI%akGH)IOOx z$GI==V1xYWmKpZs(LD1Ymi7YYFg3R?DrTwsG!KWrymd8c)b4KV2Eont6*1Q;)<+IK zT}CePA>ewNOSN0#jpUC5nl5hMQKq3&J7bqgUC`cM(;c}vgKzqxLi8DqP1<=Li&e&& zJ7uIUIcCUkb!4t@jpAHA+O(x%u>nJV5l2yvwelJbi@dSuLgDh4$~A9Z(D+M6i+dO+ z`n)}Il8=ArCv>)v-R%zD z)fTx#RJ?urcxs-T>e=pWgUp!G+I32g>qF!jUp9T-y`gm32GPbM!JP!I4tK$5nYR7c zIB|E?>nLt^yWGLu!;713T1@xqiz+q7Dqp|Y{oD;xmY98yEs|o_8#jO2i8P)w!i^2a z4162F!dmdZt@b!|G;Ht*&GEn|%d+cs8EkcFWqo|FIoF4EWV3&L?JP^1ht3|e)$ zL5Js81yjQ>8xL*jwjE1YD&&G;tfQN}oidh1hn%H0<^4coS7~18WFN)b?;7#+vS?GK zF-K~Azv5WenVFQ4fm`P0pDuV^_7L0_m{<5l)G3TQo+g1I$9lzW_}EhSmSDM+nv)%6 z4yqp{ zZqaUuPUl>;QVLfxpw-dO$12*x5>>~ot+izGehB4u;mYkM#d+pk{6kwV@|Gq0oG5y- z+rhZrJ@D~^8BKlRv$JbDu9w!_r+(yHbmUVHL$UCSM$eqiP8DCFan%cPJj;VJ^9v;G zecD!wUCDI3o7~ndzpcNGnSEu?bP3s}bDwV12fqGLd1UvxL%EBX3tHcA@jK=m;XXU# zq*u<_(qW4|pV6LxO+Jdc!}z->(+fj(`Ad4l%bm6OGF2zMiD!sMlrvBM?V208TSm1W z*XWmW;$PSrA70}b_=fA;7e$+UL$u?ckK&yz<8;0%I|}+~3D{cZ4(b_jwO^!peZghh z-aR+^ohHLm_$u2sJi9#LQ#?wGdc`hB%auEl4{Ka}(Y@)vuo(qF?;5$zAu4Q7IDQ>q9_`ofm z{I2-uHuFs|0A-aYTFqyA6O3o1gM!{Fo0kZp(d<}VxCzGym#ESsc=^P(aR}ZC2|K`k zQJPMsRjt8bvP>-bVxV!wsTE5+H`R5pm%ytmIsRppFJGkP`tjQvFSWIQ?WSU0lIs*= zST~fCzQYS{o(-DC?>WA=h;UMVD{eccKgPL z_@(0~8@AplPjypiD@rhQTqd{T$Qnw_BBOq(#KCg2w(%>gt|e^ejZ}vFhudjIpLo^U zEl)S32j!0JJ-E%)SXHU2NQqj0*?GZn3`@F`-k%(CDN;@5;fXYsB0Y9@qfQvEY1+=a|VO9?wB=#T@+FmV=rDbBt#!nd9*!WeN$2V`c=!BSyV20{4<4YtX$U zyt8gl{^^O>P^sqA-Cd5IE%(Wjl3}zdfzRxy)}#w6Rm$GjZk8Z^PL3yhXA~tCjMuIY zFCjbkS?NAg$EPjwE80Z3`(dmWeBG+|o<3c;{OZqNqL)QXMsh^MBP!gv>-($7~Z;e}`XXZk?73_kaBR}#LA%XC!| z#y(1HUxi`$H(@|@Yu-)I+^tUoH*Dd_1vYL^8)0_p>_}G-S>{-H@nM&ZXolghd3AJ+ zVS|}>uwzGQ;6{o?vvST0O`xFHtT27x1Ouk3qpEWcIe$4QsadgY3g5k%z7fGK^xvTHxlji5_Tc}NgA&@+*Z(Pn{r{+(h-{T`6my|nk?Gbz!AGSi9%Oc2^M8|`Dk29__7iTlP?Ja_BgMV~|u5r+J zi$h#KqR-D^qR`XNrALoV82D@X2SgamrDT?PT1!3PdtRg~FEi3rR^X52TyGeOCxwyD z^w_e${MhmH>CZu97;3ON=26z=e#Fb>vIHy9f~J{F%ayG_vl6%Gg_76)vb_p zN^F%JB6VjYXb&uQsL?ufOxEhqF*%nIp9bd*c$5l*E*)XFfqzn?bq3LmQYFXHgX9?q zq+G~MtP-ou{gZU8+;!*(h$2+0#CTYz7q4oSti@`D{81dyd2tX0YtTvSIvo@mXU6AG zt=o&I#iQKW3G^5>K?I{A)W-6A?*wh5CTxb%TVt+RE9ATl6T-F0pq^?ZD11n(-cUuEvNxUxR2qm$_ zJVD}kIQzm`8`}$hmY5rS-K@dcJ4qB;iP}+gt#(utT8n`(2f;gu{ZMCANwk``Bz`m0 zVGFS&bl^|6-!13_9)*+Pc9{s`>4-I7YO)1N^F8Osc$lv@uQz-dJrsy|M@K-Mr^mAf zp%f5@5ua#?60mj-x5ez)4Tp6qB0BW50v9_ZCDB1Gbu`*;X{SjXgEex}u>`0G4_=NaG67?3f6B?p!BR_V+M^{^| zNb4SJlHCpQIb)pfSz`Olg^qyyJECb1;0$C94jlL#AL0YwAo2SiHmqZBrFJyjb_^_5 zh|f9ggVD7>Jr|D$Qv*G6!@RNmpg%}MciE;UP#RKsAsSRVR993s)K=IDy?7;$O<>({ zKpmwB|Fs+Whpbp_SS|C`wz$TwS}@)I?qASUgg`O>wQ`|cvLEM zZIeLl(2Hj^4Dp#uiwFB0Pf7=IcfKW#)RncOv5#>hLwW$3f^2V`S$>3`Ii)U1z9Bvp z5$7YgEQX_yrq5|^q^_zf5B4kqXj6ef6n{pd&QnYXV>D*O<@w^BWjxlEz}lg3%FZ@ZAT_K)*U>yE_J_T^nuV z>>p5VQ3!QDffu&xwO^EgO4@zk@Zq^yq83RN*BolmH%gm zf#v$%UKgql$?rQ=P^Brshgc;`z^Zlf+Sy*8ChE z;)6;pZ1jjEE08_(0$L14q#-`*4VRkG5$N$V!J$!;T8JN-3F1V3L6!rR!5U(Cz;Dj( zBh7LI`MP87wpD=|np1wLJnArVv%}1Z{p4O^A3;ZWjQ`OGrBxBJ*l=7YQrF$q&DsEt zao}H7Ac<4R;s|K-ds`86vxIaI-=`wxsObnO1uH0x9sF#8#vF5iGonKjbM;1PAi6!q z(zbK;M|CfO7Bi>)DEti`m0LovH0F8pAG?lbeqog!(+6%`)V^36qkD~*l*ga0G;ER$E^#57dMFfD*3TuW~tWBl05`{u+}{pfa8qM`HzxG7OmdjYWdaj8k^{5H3xq;e5+;lvilmRLLEr52w*x>WW)wl9a#~uyxb~M*llNBdvz}$HuUa&4KV{9SXKa=Ud zFU3F0<4+~{?<>nfJowX`7mE99-7sb(w-LQ}O{??+umGmF_fz@3F z_7mQF0Gqe!o5f$qHD~3JVMmnnTwsyK{_0P_{4K2zy@#>a2yZ`fazE44B#B#Du54`b?^hk0U>}e z!1R})zLzbJt4gnBorybs(A`K~mMGi5`&%KevVv$CHNTDX&4^=tc=PPaE4^-|yL>0Hl+?oUX)!4G}euT%@Q{Du5})`NfK{!vqZrv5Q> zPAjoxNM>lO%!>fJrC{#?VgPY~CO{kD0&oMI1jGUE0;&KbfKLd$&+99$Wh8>Qt@V|q zgul!B?|J-xA-~h`|19ocj7WYG@TQ_9AOVmBNCjL4^e?3OrTza4^ZLa`{Myog^;yV{{Ea<>!R~*I zJ^OoY!WfVo832p`W`Ga?2Y3j03}^&A1vCR%0M7yKfER$5fNsDmz$^fRMVdncEmZ~Q zP8@@69S_1|&VBZJ^54zD-(LMkNogU=O+(>yL1Yo8M-8JPxZeJn;;(B{*x{4pALvi^ z*LA1>hOQSV)qkme{YiPChKS35SbC5c$V?Vqo0bD802Bc>06V}mU>4v6uOGVr+yL%? zp$?*q1Dy8koM-D767HXrcoT(_U@{dd@vo-i7j|O{r1(oa{NG9gvJF2(Nk`$tH%NnO1P<)ip72+nh5E)n(T>d&PLIinIW1s8Xo&Xk=i&VS z1Us^jjz|Vk|3~Tw#(?A)2{-|W0h|QH0TKY`02csP05b%@Bmf=)&g*V z%>Xfg1V9p?2v7pRFa}ct-~qaTuVceQeQ(-fuK3#7s3U&f``n!DF)MRpO*LguB1)VJ zj3pMMf6yHkbaqw3;Asp7Ph&7jFTh`+Khpjj_s7u1Xyyo15yl9=aCRZTKheAeXnwJ= z3u*O2e!sQ{Hgr$CaA|+Z5YcYzon1RAGj41?9ZUKN6 z1z`@b%e#Ss4frl6vjF^KUrjQm5CKXHz~9iqn#;L#(Y)&1mE~G8inV0(^MS`P%r>a7 zb3tOTLXa5GeHQ#+W#Ih4c_H6vet)$T$q+pQM9=robD;UpcF=Pj3jpaE0eU`wo(-U9 z0BElN<9sH*p6_@z-%&f?@%M7PIiKwMe8<)Kj*IghXXZN+<~vTzcZAJ%{N{S`Qjqa| zka0W6xSb5~_uu6P-p`2*NoJv|Z}KO~2x-`yCj5;a{!T~#tzisEj%cnI&GDjnT{NGI z<^<7vAeswA^MGg$5Y7Lgxj!`ThvtmXd=Z)}LUTlDehAGCp?M)Rmw@IG#^#&<^|B40Gba#a{=hSad3W}evnH0{E#15_XD@SEjXVeE}9?b#(YP? zd`JF#N7{Tx+;NLFmG}GHx`j$6v@k!5f%!ACF%grEhEChLQ9#X>V^SCo#33hxy$1g}$T76k6JGQMdQ0NX&+fGteGN56zKzj?hYaow>mc8n;G;{ z8@g#hFSno<9MFIk4O-E|E;OJ)gBLXMi6*~D6CglF>@k3hs46g)g&u}TPTW=oq5zNJ zjadN9mtbg<8+HKfXG-jH(2W!tOrrr6N*_(2p@|iED*)pHz?*6qH-HDg3m_-y<3@-G z2k{?9A=qxp7+@1QITghs%0=W9lmsEH+ju{A8|p+n;2UVNP-nvLSN>v{Afyup!luF~ z$k2hT66`k2PqNm~c@lll%3=(Y5hLchn1Y6!d=WV%F<1Eoa+N2pu0bmy(CQSPZ)=V* zY%2>fJ|z|9qD83G;Up_h%mc&D5^LVtCI4-m30iOC2VpxQ->@a*v{aPj=%9qE!@)pJ z;tr{l1XuxW4yzF4K;cDUwEJ;mswjGnfOyObdCD=)+miz(vavoNml{{RqLRx$^48L#`xJ5V`94(F> zw-m>OTaIJHkrBuViwS7OE(3v`z(L?9>>$VzObDg~GeS3EF1P=@e}2pu^M|sp;DL4A zxFt9`90QIK$AV+UQA7E*6O0Kxgx-I5sWPcDseIsDgJg%8asSG?%{6w&;RRu4PR0x7 zripw7MhHtm#xfXo>6>g9qy37AfN;34C$J5mH>Zb3sBkS z-)W;%75SO4)oVC0Y5`6x*o7BcPP+#CWP!ti*Nb49n_%w^_bphW(01%2gEBU#ql~?i z)4|SCC3cZ**%P2;JAH_0)#<2J5UomU< zuh=$<8BEQ5H|N-XomG!zwO6|=A6fT~N*2dzl8p;+{IJzfjz->!XOTjVUyO>^0eYQi z`efr(`cG^`_VezA>SEuluL8P8cNysXj}A0&fQI`QP!|B*#>fcK=24CCfSU{if`o>= zNUaoIliW+m$VP611AUWnE%;MWtvlJqYo@5<^zaGg?Ln4L_kJzPciQnrb^}3^3ri0YWyATxan6`!@vz~!MBX|T*#1o z`#aiBeo8+*z&C%U<<6T7xn=+rHd(Rh#fn?G^f4dXXa_)IM7jKM_1Saa?}urd^LUEu#4cqAO$ zHU_Bxj!=QKwXot;24Tf1|ED(mcK`~F0&F1wYN}oUV$iw|(3%g>dJoWA573$bFCYf3 z1puuB0IdN4&HaO#%%Hhq&^$4yiTeZD(2vNRSIC^l$ecUKoU6#3bI6?I$Q+ab!L`UT ztC2a2kvX%GIg^n&-N+nlY+!9k(a1lr$OjsMJfa9pnS@6RQT5QC$G{JYL(m*QXl@^U zULQ1xWn50nBHJ>?y{Dx*dg$*Yh6*nwpQ=YJtO$kV= l0BO|?z|QW5E>;O3HVR;5FeqU7`~Sb;g#C>FFETMR004?TDMkPQ literal 0 HcmV?d00001

    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 z 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 V>jbw5@~`Gue^~G}LGBYQ|9>utgOUIM literal 0 HcmV?d00001 diff --git a/linux/fs/open.c b/linux/fs/open.c new file mode 100644 index 0000000..3695ff1 --- /dev/null +++ b/linux/fs/open.c @@ -0,0 +1,208 @@ +/* + * linux/fs/open.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +int sys_ustat(int dev, struct ustat * ubuf) +{ + return -ENOSYS; +} + +int sys_utime(char * filename, struct utimbuf * times) +{ + struct m_inode * inode; + long actime,modtime; + + if (!(inode=namei(filename))) + return -ENOENT; + if (times) { + actime = get_fs_long((unsigned long *) ×->actime); + modtime = get_fs_long((unsigned long *) ×->modtime); + } else + actime = modtime = CURRENT_TIME; + inode->i_atime = actime; + inode->i_mtime = modtime; + inode->i_dirt = 1; + iput(inode); + return 0; +} + +/* + * XXX should we use the real or effective uid? BSD uses the real uid, + * so as to make this call useful to setuid programs. + */ +int sys_access(const char * filename,int mode) +{ + struct m_inode * inode; + int res, i_mode; + + mode &= 0007; + if (!(inode=namei(filename))) + return -EACCES; + i_mode = res = inode->i_mode & 0777; + iput(inode); + if (current->uid == inode->i_uid) + res >>= 6; + else if (current->gid == inode->i_gid) + res >>= 6; + if ((res & 0007 & mode) == mode) + return 0; + /* + * XXX we are doing this test last because we really should be + * swapping the effective with the real user id (temporarily), + * and then calling suser() routine. If we do call the + * suser() routine, it needs to be called last. + */ + if ((!current->uid) && + (!(mode & 1) || (i_mode & 0111))) + return 0; + return -EACCES; +} + +int sys_chdir(const char * filename) +{ + struct m_inode * inode; + + if (!(inode = namei(filename))) + return -ENOENT; + if (!S_ISDIR(inode->i_mode)) { + iput(inode); + return -ENOTDIR; + } + iput(current->pwd); + current->pwd = inode; + return (0); +} + +int sys_chroot(const char * filename) +{ + struct m_inode * inode; + + if (!(inode=namei(filename))) + return -ENOENT; + if (!S_ISDIR(inode->i_mode)) { + iput(inode); + return -ENOTDIR; + } + iput(current->root); + current->root = inode; + return (0); +} + +int sys_chmod(const char * filename,int mode) +{ + struct m_inode * inode; + + if (!(inode=namei(filename))) + return -ENOENT; + if ((current->euid != inode->i_uid) && !suser()) { + iput(inode); + return -EACCES; + } + inode->i_mode = (mode & 07777) | (inode->i_mode & ~07777); + inode->i_dirt = 1; + iput(inode); + return 0; +} + +int sys_chown(const char * filename,int uid,int gid) +{ + struct m_inode * inode; + + if (!(inode=namei(filename))) + return -ENOENT; + if (!suser()) { + iput(inode); + return -EACCES; + } + inode->i_uid=uid; + inode->i_gid=gid; + inode->i_dirt=1; + iput(inode); + return 0; +} + +int sys_open(const char * filename,int flag,int mode) +{ + struct m_inode * inode; + struct file * f; + int i,fd; + + mode &= 0777 & ~current->umask; + for(fd=0 ; fdfilp[fd]) + break; + if (fd>=NR_OPEN) + return -EINVAL; + current->close_on_exec &= ~(1<f_count) break; + if (i>=NR_FILE) + return -EINVAL; + (current->filp[fd]=f)->f_count++; + if ((i=open_namei(filename,flag,mode,&inode))<0) { + current->filp[fd]=NULL; + f->f_count=0; + return i; + } +/* ttys are somewhat special (ttyxx major==4, tty major==5) */ + if (S_ISCHR(inode->i_mode)) + if (MAJOR(inode->i_zone[0])==4) { + if (current->leader && current->tty<0) { + current->tty = MINOR(inode->i_zone[0]); + tty_table[current->tty].pgrp = current->pgrp; + } + } else if (MAJOR(inode->i_zone[0])==5) + if (current->tty<0) { + iput(inode); + current->filp[fd]=NULL; + f->f_count=0; + return -EPERM; + } +/* Likewise with block-devices: check for floppy_change */ + if (S_ISBLK(inode->i_mode)) + check_disk_change(inode->i_zone[0]); + f->f_mode = inode->i_mode; + f->f_flags = flag; + f->f_count = 1; + f->f_inode = inode; + f->f_pos = 0; + return (fd); +} + +int sys_creat(const char * pathname, int mode) +{ + return sys_open(pathname, O_CREAT | O_TRUNC, mode); +} + +int sys_close(unsigned int fd) +{ + struct file * filp; + + if (fd >= NR_OPEN) + return -EINVAL; + current->close_on_exec &= ~(1<filp[fd])) + return -EINVAL; + current->filp[fd] = NULL; + if (filp->f_count == 0) + panic("Close: file count is 0"); + if (--filp->f_count) + return (0); + iput(filp->f_inode); + return (0); +} diff --git a/linux/fs/open.o b/linux/fs/open.o new file mode 100644 index 0000000000000000000000000000000000000000..9acf73d22d0b08ebf53d66eba5e38a0753ec174b GIT binary patch literal 11176 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 + +#include +#include /* for get_free_page */ +#include + +int read_pipe(struct m_inode * inode, char * buf, int count) +{ + int chars, size, read = 0; + + while (count>0) { + while (!(size=PIPE_SIZE(*inode))) { + wake_up(&inode->i_wait); + if (inode->i_count != 2) /* are there any writers? */ + return read; + sleep_on(&inode->i_wait); + } + chars = PAGE_SIZE-PIPE_TAIL(*inode); + if (chars > count) + chars = count; + if (chars > size) + chars = size; + count -= chars; + read += chars; + size = PIPE_TAIL(*inode); + PIPE_TAIL(*inode) += chars; + PIPE_TAIL(*inode) &= (PAGE_SIZE-1); + while (chars-->0) + put_fs_byte(((char *)inode->i_size)[size++],buf++); + } + wake_up(&inode->i_wait); + return read; +} + +int write_pipe(struct m_inode * inode, char * buf, int count) +{ + int chars, size, written = 0; + + while (count>0) { + while (!(size=(PAGE_SIZE-1)-PIPE_SIZE(*inode))) { + wake_up(&inode->i_wait); + if (inode->i_count != 2) { /* no readers */ + current->signal |= (1<<(SIGPIPE-1)); + return written?written:-1; + } + sleep_on(&inode->i_wait); + } + chars = PAGE_SIZE-PIPE_HEAD(*inode); + if (chars > count) + chars = count; + if (chars > size) + chars = size; + count -= chars; + written += chars; + size = PIPE_HEAD(*inode); + PIPE_HEAD(*inode) += chars; + PIPE_HEAD(*inode) &= (PAGE_SIZE-1); + while (chars-->0) + ((char *)inode->i_size)[size++]=get_fs_byte(buf++); + } + wake_up(&inode->i_wait); + return written; +} + +int sys_pipe(unsigned long * fildes) +{ + struct m_inode * inode; + struct file * f[2]; + int fd[2]; + int i,j; + + j=0; + for(i=0;j<2 && if_count++; + if (j==1) + f[0]->f_count=0; + if (j<2) + return -1; + j=0; + for(i=0;j<2 && ifilp[i]) { + current->filp[ fd[j]=i ] = f[j]; + j++; + } + if (j==1) + current->filp[fd[0]]=NULL; + if (j<2) { + f[0]->f_count=f[1]->f_count=0; + return -1; + } + if (!(inode=get_pipe_inode())) { + current->filp[fd[0]] = + current->filp[fd[1]] = NULL; + f[0]->f_count = f[1]->f_count = 0; + return -1; + } + f[0]->f_inode = f[1]->f_inode = inode; + f[0]->f_pos = f[1]->f_pos = 0; + f[0]->f_mode = 1; /* read */ + f[1]->f_mode = 2; /* write */ + put_fs_long(fd[0],0+fildes); + put_fs_long(fd[1],1+fildes); + return 0; +} diff --git a/linux/fs/pipe.o b/linux/fs/pipe.o new file mode 100644 index 0000000000000000000000000000000000000000..f2e890479b1d97329c0ec8dd3dcaff708e978c8d GIT binary patch literal 8096 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 th<^W~Vl6+W- +#include +#include + +#include +#include +#include + +extern int rw_char(int rw,int dev, char * buf, int count, off_t * pos); +extern int read_pipe(struct m_inode * inode, char * buf, int count); +extern int write_pipe(struct m_inode * inode, char * buf, int count); +extern int block_read(int dev, off_t * pos, char * buf, int count); +extern int block_write(int dev, off_t * pos, char * buf, int count); +extern int file_read(struct m_inode * inode, struct file * filp, + char * buf, int count); +extern int file_write(struct m_inode * inode, struct file * filp, + char * buf, int count); + +int sys_lseek(unsigned int fd,off_t offset, int origin) +{ + struct file * file; + int tmp; + + if (fd >= NR_OPEN || !(file=current->filp[fd]) || !(file->f_inode) + || !IS_SEEKABLE(MAJOR(file->f_inode->i_dev))) + return -EBADF; + if (file->f_inode->i_pipe) + return -ESPIPE; + switch (origin) { + case 0: + if (offset<0) return -EINVAL; + file->f_pos=offset; + break; + case 1: + if (file->f_pos+offset<0) return -EINVAL; + file->f_pos += offset; + break; + case 2: + if ((tmp=file->f_inode->i_size+offset) < 0) + return -EINVAL; + file->f_pos = tmp; + break; + default: + return -EINVAL; + } + return file->f_pos; +} + +int sys_read(unsigned int fd,char * buf,int count) +{ + struct file * file; + struct m_inode * inode; + + if (fd>=NR_OPEN || count<0 || !(file=current->filp[fd])) + return -EINVAL; + if (!count) + return 0; + verify_area(buf,count); + inode = file->f_inode; + if (inode->i_pipe) + return (file->f_mode&1)?read_pipe(inode,buf,count):-EIO; + if (S_ISCHR(inode->i_mode)) + return rw_char(READ,inode->i_zone[0],buf,count,&file->f_pos); + if (S_ISBLK(inode->i_mode)) + return block_read(inode->i_zone[0],&file->f_pos,buf,count); + if (S_ISDIR(inode->i_mode) || S_ISREG(inode->i_mode)) { + if (count+file->f_pos > inode->i_size) + count = inode->i_size - file->f_pos; + if (count<=0) + return 0; + return file_read(inode,file,buf,count); + } + printk("(Read)inode->i_mode=%06o\n\r",inode->i_mode); + return -EINVAL; +} + +int sys_write(unsigned int fd,char * buf,int count) +{ + struct file * file; + struct m_inode * inode; + + if (fd>=NR_OPEN || count <0 || !(file=current->filp[fd])) + return -EINVAL; + if (!count) + return 0; + inode=file->f_inode; + if (inode->i_pipe) + return (file->f_mode&2)?write_pipe(inode,buf,count):-EIO; + if (S_ISCHR(inode->i_mode)) + return rw_char(WRITE,inode->i_zone[0],buf,count,&file->f_pos); + if (S_ISBLK(inode->i_mode)) + return block_write(inode->i_zone[0],&file->f_pos,buf,count); + if (S_ISREG(inode->i_mode)) + return file_write(inode,file,buf,count); + printk("(Write)inode->i_mode=%06o\n\r",inode->i_mode); + return -EINVAL; +} diff --git a/linux/fs/read_write.o b/linux/fs/read_write.o new file mode 100644 index 0000000000000000000000000000000000000000..3263e08f7ca37ff35e2c1a7700135c74b9af7c08 GIT binary patch literal 7516 zcmbVQdvIJ=c|Z5DS9^C?vh0-|sWxQ8tm8G2R+1&#iX+8}t=O{jGPaZ0d9dEcUG2vE zV)w2sWzr^Cai@w%gA0@b0mDCm0AZkoB!9GnV={yp9(4yM45bVVuZiPK3nZO{Qb>Ql zbI)C^R1Zx#Gkbr(?>pc3opZi(&OPVugE!v1N7FRn7fl#qNfP4UqF&9YgoIct)`;t^Cvgu7)Cba66x`kcE-(Z$LB{Bth_^HBAy zP|d$#oCrPp`kQaQdGU*kyf4`R=dHzcLQ{$>_;AU|P(+&Ckwcdv^L!*)N(Q+2M=NAlK3w3JgzN zd;$u@oJQ;H$JBxuf9bz5H1K{T6Y2zL!b{AU)QVNloSXlNhNQk7GChO9DHS2Hpdwrf zJo`JQams5Uu}Hs-;#WdUh?o$~>lo}&nXW{Bak2}w3y0&~nB8e$1ULm`56lcud4E_*;=NNoZc6M63u)tYN zEKZu&o?V<+rSy@^NoM{`mCjZ*_YA{W58c{lBLdT~gEgiOa-0hIm8F*`sfHdM_Pq zWmB!WhY;jyDF1|sSnv0)H4%w}PCB=_SgGcmf$NK@GH_z!(6(x*QzY)J7hUJ_b)^m= zOa#MIdje1G6dw0dM)`nOBXqOlLF7X>0~-N`87Nj*GdaLKq9P+VkXTWhi`{@7Y(-?Lj0p)-1-5y+E=o*1B@x`PeNh5 zi`=wdqy8Xy(EexY50OXgcaa}nZ3)pG+CqLi_1$`CHHAAzAoS>=i}XHn3PP_Qx`8!P z*r12r4xJ~&^l+wrTnTYKgpf)|=;2y1Cyb*E-LHo}#2P6K>7f@HO$wuWDAN+g^w2L_ z!nhu8GQeFs;5n&>cCkBB*aaU9-xH?v@C?oFrr91n^g{-a!n7WWw}kzAh`YzQhuyhZ z58cV`+)Lqr9ttp;6b|d5L`yiLhyI)aWX(N#=)YRRF+KD+1H7A!=Jc@Z&I#if^H$J9 zkFh4rni6tw5`D}33^8kZsKU@$3a%bXvpYEovwFy2Xy+7s9?(PoL?M3_a`})RF6CTd z6t+XSfOZ-UVchq1EVq|*tOT|cVM9;Cqw^3*5Nit&$IN>_3b5~n-jtmbb`%OTMQh#e zMcd{vHfP!o(9&T4k#Bo9?5!>1-060heB>hI*qflRMmhCC`&R0=?uJc7bkTGb^$5%e z-5usGK;SlXrDPKR_6fu{h8TW>h)~7lA{R$g1nL;k_lyy4eY-@%QCbN51@f)rrqyT+31b_1 z(Eb+n+sPx)4+~?Ayxaa4>aQj5fqsiHc98d4+4_hut|Q-IIqdj2dCcCAc8v-0xaFj0 zg>gN3!g8`c@3)+s&xb508o?^upLpI&Cps zQ=~Vem%_M_^njHE-9viV%7gADJz~v(PLtka$vwA^{Fpt2r?Hs zYckC|tQJ&wfbwaDzt#(1>Ukd<+rhn}pDBoSPf!E^?qCu?Jb;9V{5xy?G zFN)0-)r_uin4$*J>J&!Ms~ZbrAFe_GngyjDps1aqD|45YqW_%)N!dwo#gc?nPu1l zx+ge)bVZau8e@oou8zV>H<7z+wTT;F!%f%S6rS1RBIh)+p!H_f6;36W%B9`3Xrxp5 zQW`HDx1P>AsZ7x=r)vT^O)-z6n5rP*#~UDNw^(*WQ$7a^)v_~KY35vSJ_d%8!@~om zbY^hGQw-v5wrnDr<#gk?$fw~kbq@&&_$Dc=Xl3~ndMdeswHnR7DD84NjJ zg^A?pOs0-c+Ep>OwL{CV+C==|c_JqiW6U!LQi9Bsv~ z`xJEK{=7X8yHcAS$IJ3@{MyGcg>i6yavaQ$pO@9(ZQT|_F!&sFe(~FFZ`=@K`N_N7j z7xQzeG_F^kkG!(fPp0IFC=YS(?#7eVW4ISoTwG3Cr>s0{y}OR*pblSpcvQ}ihH2Q0 z{1R(G9gF$ziP#f1Hi(Y3%s(b{EYhD6*9!3lP{Z>0J>_*c%dnK_e+I~JhL?!&8^V&( z@eVsq{4*im3#8v)QidPjX&T;xczp>igl`yyXhO0$oTvdmRL}D zO5tM)pH%p?!mla3pzucuUsm|KLX-1=xcncLc#Xmv6&_TWQdm;>S%pt4(QU#IXL3X=+VDBPp)pu%@6yief?g{Kt$wZe}n{ItSX3Q= IARbZpKM>p?&Hw-a literal 0 HcmV?d00001 diff --git a/linux/fs/select.c b/linux/fs/select.c new file mode 100644 index 0000000..cef8b43 --- /dev/null +++ b/linux/fs/select.c @@ -0,0 +1,10 @@ +/* nothing , only the stub */ +/* gohigh */ + +#include + +int sys_select() +{ + return -ENOSYS; +} + diff --git a/linux/fs/select.o b/linux/fs/select.o new file mode 100644 index 0000000000000000000000000000000000000000..192ba6d1f1abd10e41b4b10884baa261098a2c7f GIT binary patch literal 1772 zcma)7&1(};5TBP#Yc*|X8^x9irr<{vchlIQrD`oLS`_I)=)r@QO|tpG>~7iJNGnD0 z=0Ola5v1VBzrc%kuY!U%@!-LKz_UXA&Ay#xbJBr%GxM8yGjAr-?c-~=t}CTTNRdH3 zi)c5aJ(XC@P=QA2!?(S?y^o7PvN4*CFQ|JknlV5$n8?g?C~9ya1*=^nJJ9wb;A84! zzK}EWQ~5D9J~(=mC}YvpNh80IyOg_8U~p;T_3|Wd)D*;TT_DA2McTI6g+ zWYz7+CaW5TWCc#gsyo$gbEEAwe7IuWu2uu*LE38vw%2s}F7SBd0`ikp^Ig}$23Q`Z zV`1)kS~`u>+K4Bt-}*o26oPmKr7vCp(fNM7o{-atZZHUvt<+X8?lb^iw136TB1Up^ z4$imCN4W={9e_%I zknb%k2}#{_O?JH;Ao>A04jut>KAt<*Oy`SG_Xsc{$tSkRG@hkjdxEp<|5~#x-Rmf$ zuOj +#include + +#include +#include +#include +#include + +static void cp_stat(struct m_inode * inode, struct stat * statbuf) +{ + struct stat tmp; + int i; + + verify_area(statbuf,sizeof (* statbuf)); + tmp.st_dev = inode->i_dev; + tmp.st_ino = inode->i_num; + tmp.st_mode = inode->i_mode; + tmp.st_nlink = inode->i_nlinks; + tmp.st_uid = inode->i_uid; + tmp.st_gid = inode->i_gid; + tmp.st_rdev = inode->i_zone[0]; + tmp.st_size = inode->i_size; + tmp.st_atime = inode->i_atime; + tmp.st_mtime = inode->i_mtime; + tmp.st_ctime = inode->i_ctime; + for (i=0 ; i= NR_OPEN || !(f=current->filp[fd]) || !(inode=f->f_inode)) + return -EBADF; + cp_stat(inode,statbuf); + return 0; +} + +int sys_readlink() +{ + return -ENOSYS; +} diff --git a/linux/fs/stat.o b/linux/fs/stat.o new file mode 100644 index 0000000000000000000000000000000000000000..54d9c5da9e994a0a1cd3345aff89521bbe4c64d3 GIT binary patch literal 7204 zcma)Ae~cXEdH!a0W^VWP_I~=z9lnHxuJHkPduQK*4|2v=`~%xLBNvX?PJv~1clLJh z{>sj*v55GroY(oMozu?qyg$D8d%ySlzM1dli9IWO4Z~3JWvGO@A}RIaXk;m9m{uFqh&uDG zb$)j)dDhCEvvTKGa|4yL=9!Du8)x2Kd2@Hp%EA@))hDgoPd~hT`7-#S^UE{UCwJ$j z$gAg<^AtX+4T>~NdTu#$c6aUuaWSdSMfw5gZxsC?_0ts2FI%895zT?lM>Gjqi0Cxv zB63<{_Lpu#u1hei8n5HN^!b(Cl=1y@YUq1^_2g>KdJ^g0fOIdzMDv+nTzC8jXD+T_ zSnOk-b`A$2r_P+pO{s3*tG|YPX)~+^Xjzmgdc6;I%-P~q_I~E#3?i`rOqIS_`qF;p z;uJeU(D|`P=l+=9$aMZQufITM{lR*V;V8qNU*-rW;6A||K41=$FvK}bFm4+;toQrs zKf&jXFC>++7+hJ#7jQQoG?ltXE0p?{OuA|HeHAqEBiIt@?Xa4beFHR>W&6!gC4NZj z#335YzJH|9=54Y>jghnx5dMaZucc37BYI41()3-LKB8%fO+LydiAPAYQAd3hG&Bw8 zUU=H)V9i?2PS~B-p|JXVXq5AF+^l4XyXm|~o_d0J=T~TJ^|O`Zdr+(N>-ACc@ zoe(ydscR`5*@M^bg#%`47Xv)NbXLsNKBn^^g+pel%{E$CHB(<(7mk>z|6l-ZdB9A0>z0Sj z)M*BIh@Do<{xCeL?1x#mnwbh{acQZe29F}Q(hHc=wwW3M*kuZ#nL5sNDils2Yxd)@ z)~C$WX7*FPjOjUT_SY++vTNggO8pT11c9<2dC^wtrzRG}3jEXTsEQT?FMuSK{T1*< z=fT4W?0gGh9i60dJ_o&1q_^peqoMOKyR)44=;M+noxi2NRD#cd!`e7y@{IHQ^r?IT z5eA)p2Cj15Wu0aEtg&s*`AfE~kxx5$`upr_##vy$kC5k`KPNv%KJPqDUT6Gm&O_u4 z@&#v!ahl`>CqdpKzt#B=cc)E$n`4>apCaF`>}%0@*a=xl=TXI#~1b3`gr5@xByr_p(`Z!@$uH_~u& z>kuZy`7s(Nw_OX0Udb02!g8)>yaLxo()m~FZ@nHq18R`2L)4>ZMi}n1vH<%N=&){2 zKLegAbNSrFsZg1K{AO}16O!LTp3GGJwz6l)2Qt+%7RW65aHiU7DLYTT0UY`{@(JgQ zh;Pp`{FKs9Sgt3%dd8If&lu5<>;*m>oU?Q+uo0emsR-%h>(`fbX-gM1=W?kp(#W8_mAkBKjlXPxKJuf2mjm+{;a%D$6)I^&gN zK9lh(F`v(PrI;5oUVu0|>Awg)_%itt^uDrxn|v8(|?NF=2&a0k^e*pV-nF6pRðhZB%?$)7v2@3P66Jx{Lg)b)a zDNAkmHWrmRMDL&I78lTB?B}SbImAV7KBdOaYZn^OVmxfLl{xYkI@-#(ugp=dLi4FQ z79zD9U!i-B%AetP06*io_ZYRqsJW5GAoaN}`74#&A2C z#48Agxxhds{|-v~93NoH7%?^vj-?ZWn+8XWQD^uXxaU+leJ4~n7Hm|B!8_6)OYa}U zvKKv)vB!+WU^-2U0gIDacUw$jGY=sETO_rc9lND^+^|6UAts~XixAU>v44!w2Ci58 z$L0_x)8hbfaNO83Ne4VC7=3tLZNV}b$s-qr*)quyEKhvtF6}jHuZK6WG{zvxP$+Kr z%~sDwt;P#iwc40Bc236O_m4##i0d_Q?TI*%SFvmCh)k54yyCWVa*6AD3O~#ME-X&D z;?tiNxp36iKn>$pgBjfQzX#A7`TU&UEZ4ggZ_W)Gsz(e?2EAh4Z+1`gD3l7kwT9OW z^ELi=5rl4-FSE1oWZMg%L_%5_v2x9;K#3Jnr4d;3T+synTGOpVtFyQDND`CA^Uqsm zB0R91-0|95FTea2{&3;6W%!~k!5zsR2bZ-vbj-OiD32Z- zJ8BvjF>>jIMcm8BRK*L*pq*|xR9>@Ethk}80=HPLyLcjn9k=WiOMcjJ+sZFCG4f*p zh#UG1Pj&TuuGVUJbIoogoYRGwozHLGI$L*3a|@AT4o|sm!wrt9svFk4j_L+prPu)1 zRZ(}}bANVMwvb=U7qYVrw^Od|@D~LP&9yB5A;8QR>(r@g6vi*M{kEsvy4z_ek4MO=)QX|vO6o!tL)EHQamNV~ zckhH(?uKruu5)3_5+7u^JRhCov?v#^!n3%G)*!x7)^CBNvRYgY_qQaAlNPuXe|8b$pyW{bI#C z&J3eTXR0hzx!wxAVyju?xG*?h+Ob$z{q*7TR{=Au`gN~~*@Jp5@Iqu;s<+C=yb7W} z)@mXQ|@*;*m;Ttf`}t*JO|}K7Y(f< zY|1Lob91H8<(k`3y3Sac%o7vZ#(4&`%~40C$J*~Um_2r_k|LS;wpAL+?bW^7@&VFX4!mr?TRex@#y`wFQ&rZmHBkxqGZ`$8E0R zq}QY3!zgZmK2*NkYVf6?@=ZL8@_5Qc&!(u2S1ao0na=Y6b-NB;D6c+eumNk?`(~q! z7Y{=z&7#|LICe~f@>3Um_-4T|L-DvnnI{!qm*N1CsBNUT;79-e%a8f=hG4v>*-)<7 zHV?Tszl+Fk0!cAH997oyTLzEYfU3v)@j~rU#Pr_Z@cSPeXR>S{SM0}cLB0L{3ktsTW`E~5sz^g52>!l`xH3aaNN8$X0SilnOwB-$2HyS zw{1izp8n%2_WK+Z+x83_SqY+fOWvy$5$LLmSgPITk5|r$9m$` zUw0|@_CVRvb3|W0n@m)Q&mVF=lPLFI3B4k(Xc7wl3G`fv^=OeYp=bVzLjwPa_g)Ew zgMZJJ&=t9&NT|&Evy)oZX&S%y**J>)w$dOM?b~AkNO=jr_?b!ny^!N)CFMhq1_d0&{WYNWeLBE*wONlRbU-|IwIWF;)6}`6OH}q8p4fM(9 ziirjGOClE647xV4==j;mL}EptfwiOmufoP+B@OItu0tYB8hPqBu*k0`V&k!1w9g9O zA;>yVf1e=7O*96}bd|U7x!ApW42=eO_;|vLI z65JxVAh=KPpx`G3tAZWD#|6&`J}Y=ZkYCW)-**N1HIDMX3;tR#japJaA;{0Xly?fQ z2v!9H!PA1D7yOFgOM>4N{ACj|NRf$hE|ctP+R zg0Bg_DfqVFJA#)4KM+jdfv58j+$6X~a6xdV;Kv1z2v!8!f~N$}3O*zFlHm6R-xhpF z@RHyMf(bjyYg+KE;GYP-BKTdw9}B)G_z`R*j_W6a|0Z}N9%;`d=Mv%hh{oM4^^`vH+Ff`Q=giT$j|NM9L<$!8eb Y>3s;yLNh*8l(j literal 0 HcmV?d00001 diff --git a/linux/fs/super.c b/linux/fs/super.c new file mode 100644 index 0000000..6a4ccb1 --- /dev/null +++ b/linux/fs/super.c @@ -0,0 +1,282 @@ +/* + * linux/fs/super.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * super.c contains code to handle the super-block tables. + */ +#include +#include +#include +#include + +#include +#include + +int sync_dev(int dev); +void wait_for_keypress(void); + +/* set_bit uses setb, as gas doesn't recognize setc */ +#define set_bit(bitnr,addr) ({ \ +register int __res __asm__("ax"); \ +__asm__("bt %2,%3;setb %%al":"=a" (__res):"a" (0),"r" (bitnr),"m" (*(addr))); \ +__res; }) + +struct super_block super_block[NR_SUPER]; +/* this is initialized in init/main.c */ +int ROOT_DEV = 0; + +static void lock_super(struct super_block * sb) +{ + cli(); + while (sb->s_lock) + sleep_on(&(sb->s_wait)); + sb->s_lock = 1; + sti(); +} + +static void free_super(struct super_block * sb) +{ + cli(); + sb->s_lock = 0; + wake_up(&(sb->s_wait)); + sti(); +} + +static void wait_on_super(struct super_block * sb) +{ + cli(); + while (sb->s_lock) + sleep_on(&(sb->s_wait)); + sti(); +} + +struct super_block * get_super(int dev) +{ + struct super_block * s; + + if (!dev) + return NULL; + s = 0+super_block; + while (s < NR_SUPER+super_block) + if (s->s_dev == dev) { + wait_on_super(s); + if (s->s_dev == dev) + return s; + s = 0+super_block; + } else + s++; + return NULL; +} + +void put_super(int dev) +{ + struct super_block * sb; +/* struct m_inode * inode; */ + int i; + + if (dev == ROOT_DEV) { + printk("root diskette changed: prepare for armageddon\n\r"); + return; + } + if (!(sb = get_super(dev))) + return; + if (sb->s_imount) { + printk("Mounted disk changed - tssk, tssk\n\r"); + return; + } + lock_super(sb); + sb->s_dev = 0; + for(i=0;is_imap[i]); + for(i=0;is_zmap[i]); + free_super(sb); + return; +} + +static struct super_block * read_super(int dev) +{ + struct super_block * s; + struct buffer_head * bh; + int i,block; + + if (!dev) + return NULL; + check_disk_change(dev); + if (s = get_super(dev)) + return s; + for (s = 0+super_block ;; s++) { + if (s >= NR_SUPER+super_block) + return NULL; + if (!s->s_dev) + break; + } + s->s_dev = dev; + s->s_isup = NULL; + s->s_imount = NULL; + s->s_time = 0; + s->s_rd_only = 0; + s->s_dirt = 0; + lock_super(s); + if (!(bh = bread(dev,1))) { + s->s_dev=0; + free_super(s); + return NULL; + } + __asm__ volatile ("cld"); /* by wyj */ + *((struct d_super_block *) s) = + *((struct d_super_block *) bh->b_data); + brelse(bh); + if (s->s_magic != SUPER_MAGIC) { + s->s_dev = 0; + free_super(s); + return NULL; + } + for (i=0;is_imap[i] = NULL; + for (i=0;is_zmap[i] = NULL; + block=2; + for (i=0 ; i < s->s_imap_blocks ; i++) + if (s->s_imap[i]=bread(dev,block)) + block++; + else + break; + for (i=0 ; i < s->s_zmap_blocks ; i++) + if (s->s_zmap[i]=bread(dev,block)) + block++; + else + break; + if (block != 2+s->s_imap_blocks+s->s_zmap_blocks) { + for(i=0;is_imap[i]); + for(i=0;is_zmap[i]); + s->s_dev=0; + free_super(s); + return NULL; + } + s->s_imap[0]->b_data[0] |= 1; + s->s_zmap[0]->b_data[0] |= 1; + free_super(s); + return s; +} + +int sys_umount(char * dev_name) +{ + struct m_inode * inode; + struct super_block * sb; + int dev; + + if (!(inode=namei(dev_name))) + return -ENOENT; + dev = inode->i_zone[0]; + if (!S_ISBLK(inode->i_mode)) { + iput(inode); + return -ENOTBLK; + } + iput(inode); + if (dev==ROOT_DEV) + return -EBUSY; + if (!(sb=get_super(dev)) || !(sb->s_imount)) + return -ENOENT; + if (!sb->s_imount->i_mount) + printk("Mounted inode has i_mount=0\n"); + for (inode=inode_table+0 ; inodei_dev==dev && inode->i_count) + return -EBUSY; + sb->s_imount->i_mount=0; + iput(sb->s_imount); + sb->s_imount = NULL; + iput(sb->s_isup); + sb->s_isup = NULL; + put_super(dev); + sync_dev(dev); + return 0; +} + +int sys_mount(char * dev_name, char * dir_name, int rw_flag) +{ + struct m_inode * dev_i, * dir_i; + struct super_block * sb; + int dev; + + if (!(dev_i=namei(dev_name))) + return -ENOENT; + dev = dev_i->i_zone[0]; + if (!S_ISBLK(dev_i->i_mode)) { + iput(dev_i); + return -EPERM; + } + iput(dev_i); + if (!(dir_i=namei(dir_name))) + return -ENOENT; + if (dir_i->i_count != 1 || dir_i->i_num == ROOT_INO) { + iput(dir_i); + return -EBUSY; + } + if (!S_ISDIR(dir_i->i_mode)) { + iput(dir_i); + return -EPERM; + } + if (!(sb=read_super(dev))) { + iput(dir_i); + return -EBUSY; + } + if (sb->s_imount) { + iput(dir_i); + return -EBUSY; + } + if (dir_i->i_mount) { + iput(dir_i); + return -EPERM; + } + sb->s_imount=dir_i; + dir_i->i_mount=1; + dir_i->i_dirt=1; /* NOTE! we don't iput(dir_i) */ + return 0; /* we do that in umount */ +} + +void mount_root(void) +{ + int i,free; + struct super_block * p; + struct m_inode * mi; + + if (32 != sizeof (struct d_inode)) + panic("bad i-node size"); + for(i=0;is_dev = 0; + p->s_lock = 0; + p->s_wait = NULL; + } + if (!(p=read_super(ROOT_DEV))) + panic("Unable to mount root"); + if (!(mi=iget(ROOT_DEV,ROOT_INO))) + panic("Unable to read root i-node"); + mi->i_count += 3 ; /* NOTE! it is logically used 4 times, not 1 */ + p->s_isup = p->s_imount = mi; + current->pwd = mi; + current->root = mi; + free=0; + i=p->s_nzones; + while (-- i >= 0) + if (!set_bit(i&8191,p->s_zmap[i>>13]->b_data)) + free++; + printk("%d/%d free blocks\n\r",free,p->s_nzones); + free=0; + i=p->s_ninodes+1; + while (-- i >= 0) + if (!set_bit(i&8191,p->s_imap[i>>13]->b_data)) + free++; + printk("%d/%d free inodes\n\r",free,p->s_ninodes); +} diff --git a/linux/fs/super.o b/linux/fs/super.o new file mode 100644 index 0000000000000000000000000000000000000000..108355dade403370056a6d6f8adbf25a42f1f2f6 GIT binary patch literal 12280 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 literal 0 HcmV?d00001 diff --git a/linux/fs/truncate.c b/linux/fs/truncate.c new file mode 100644 index 0000000..36f3ea2 --- /dev/null +++ b/linux/fs/truncate.c @@ -0,0 +1,65 @@ +/* + * linux/fs/truncate.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +#include + +static void free_ind(int dev,int block) +{ + struct buffer_head * bh; + unsigned short * p; + int i; + + if (!block) + return; + if (bh=bread(dev,block)) { + p = (unsigned short *) bh->b_data; + for (i=0;i<512;i++,p++) + if (*p) + free_block(dev,*p); + brelse(bh); + } + free_block(dev,block); +} + +static void free_dind(int dev,int block) +{ + struct buffer_head * bh; + unsigned short * p; + int i; + + if (!block) + return; + if (bh=bread(dev,block)) { + p = (unsigned short *) bh->b_data; + for (i=0;i<512;i++,p++) + if (*p) + free_ind(dev,*p); + brelse(bh); + } + free_block(dev,block); +} + +void truncate(struct m_inode * inode) +{ + int i; + + if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode))) + return; + for (i=0;i<7;i++) + if (inode->i_zone[i]) { + free_block(inode->i_dev,inode->i_zone[i]); + inode->i_zone[i]=0; + } + free_ind(inode->i_dev,inode->i_zone[7]); + free_dind(inode->i_dev,inode->i_zone[8]); + inode->i_zone[7] = inode->i_zone[8] = 0; + inode->i_size = 0; + inode->i_dirt = 1; + inode->i_mtime = inode->i_ctime = CURRENT_TIME; +} + diff --git a/linux/fs/truncate.o b/linux/fs/truncate.o new file mode 100644 index 0000000000000000000000000000000000000000..6060d645583c1857b7293dd1aaeefc8be58bbe14 GIT binary patch literal 6840 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 IzHn9jD|9oPjqVKG7;EDd3GX z`@A#r*7hqr9ud*?pdpm>JCnV<$o}b} z;b&$TyRJVxZ$;kp{r2+un=_34iOlY?IqlqYFh>Qb02QDDRN%iTfSzr(xC-P-1*iZO z_)@^W4+U;m6Q@A`bYSrj0BFDQZn*YY0$3~ntcg<~A}|dqFsPa%h6Ww+l65t43Jkhv z4j-C#)|^n(?~e0}my6awu2g^u94j!3?b7=H9sI=ne@x x&U$Tu-@`u*wO)?JTQSgEF*eqUZ+_GjyGFhyPJvEG-04962$(K3D)1W$d;pa~BPRd= literal 0 HcmV?d00001 diff --git a/linux/include/a.out.h b/linux/include/a.out.h new file mode 100644 index 0000000..3e67974 --- /dev/null +++ b/linux/include/a.out.h @@ -0,0 +1,220 @@ +#ifndef _A_OUT_H +#define _A_OUT_H + +#define __GNU_EXEC_MACROS__ + +struct exec { + unsigned long a_magic; /* Use macros N_MAGIC, etc for access */ + unsigned a_text; /* length of text, in bytes */ + unsigned a_data; /* length of data, in bytes */ + unsigned a_bss; /* length of uninitialized data area for file, in bytes */ + unsigned a_syms; /* length of symbol table data in file, in bytes */ + unsigned a_entry; /* start address */ + unsigned a_trsize; /* length of relocation info for text, in bytes */ + unsigned a_drsize; /* length of relocation info for data, in bytes */ +}; + +#ifndef N_MAGIC +#define N_MAGIC(exec) ((exec).a_magic) +#endif + +#ifndef OMAGIC +/* Code indicating object file or impure executable. */ +#define OMAGIC 0407 +/* Code indicating pure executable. */ +#define NMAGIC 0410 +/* Code indicating demand-paged executable. */ +#define ZMAGIC 0413 +#endif /* not OMAGIC */ + +#ifndef N_BADMAG +#define N_BADMAG(x) \ + (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \ + && N_MAGIC(x) != ZMAGIC) +#endif + +#define _N_BADMAG(x) \ + (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \ + && N_MAGIC(x) != ZMAGIC) + +#define _N_HDROFF(x) (SEGMENT_SIZE - sizeof (struct exec)) + +#ifndef N_TXTOFF +#define N_TXTOFF(x) \ + (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : sizeof (struct exec)) +#endif + +#ifndef N_DATOFF +#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text) +#endif + +#ifndef N_TRELOFF +#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data) +#endif + +#ifndef N_DRELOFF +#define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize) +#endif + +#ifndef N_SYMOFF +#define N_SYMOFF(x) (N_DRELOFF(x) + (x).a_drsize) +#endif + +#ifndef N_STROFF +#define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms) +#endif + +/* Address of text segment in memory after it is loaded. */ +#ifndef N_TXTADDR +#define N_TXTADDR(x) 0 +#endif + +/* Address of data segment in memory after it is loaded. + Note that it is up to you to define SEGMENT_SIZE + on machines not listed here. */ +#if defined(vax) || defined(hp300) || defined(pyr) +#define SEGMENT_SIZE PAGE_SIZE +#endif +#ifdef hp300 +#define PAGE_SIZE 4096 +#endif +#ifdef sony +#define SEGMENT_SIZE 0x2000 +#endif /* Sony. */ +#ifdef is68k +#define SEGMENT_SIZE 0x20000 +#endif +#if defined(m68k) && defined(PORTAR) +#define PAGE_SIZE 0x400 +#define SEGMENT_SIZE PAGE_SIZE +#endif + +#define PAGE_SIZE 4096 +#define SEGMENT_SIZE 1024 + +#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1)) + +#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text) + +#ifndef N_DATADDR +#define N_DATADDR(x) \ + (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x)) \ + : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x)))) +#endif + +/* Address of bss segment in memory after it is loaded. */ +#ifndef N_BSSADDR +#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data) +#endif + +#ifndef N_NLIST_DECLARED +struct nlist { + union { + char *n_name; + struct nlist *n_next; + long n_strx; + } n_un; + unsigned char n_type; + char n_other; + short n_desc; + unsigned long n_value; +}; +#endif + +#ifndef N_UNDF +#define N_UNDF 0 +#endif +#ifndef N_ABS +#define N_ABS 2 +#endif +#ifndef N_TEXT +#define N_TEXT 4 +#endif +#ifndef N_DATA +#define N_DATA 6 +#endif +#ifndef N_BSS +#define N_BSS 8 +#endif +#ifndef N_COMM +#define N_COMM 18 +#endif +#ifndef N_FN +#define N_FN 15 +#endif + +#ifndef N_EXT +#define N_EXT 1 +#endif +#ifndef N_TYPE +#define N_TYPE 036 +#endif +#ifndef N_STAB +#define N_STAB 0340 +#endif + +/* The following type indicates the definition of a symbol as being + an indirect reference to another symbol. The other symbol + appears as an undefined reference, immediately following this symbol. + + Indirection is asymmetrical. The other symbol's value will be used + to satisfy requests for the indirect symbol, but not vice versa. + If the other symbol does not have a definition, libraries will + be searched to find a definition. */ +#define N_INDR 0xa + +/* The following symbols refer to set elements. + All the N_SET[ATDB] symbols with the same name form one set. + Space is allocated for the set in the text section, and each set + element's value is stored into one word of the space. + The first word of the space is the length of the set (number of elements). + + The address of the set is made into an N_SETV symbol + whose name is the same as the name of the set. + This symbol acts like a N_DATA global symbol + in that it can satisfy undefined external references. */ + +/* These appear as input to LD, in a .o file. */ +#define N_SETA 0x14 /* Absolute set element symbol */ +#define N_SETT 0x16 /* Text set element symbol */ +#define N_SETD 0x18 /* Data set element symbol */ +#define N_SETB 0x1A /* Bss set element symbol */ + +/* This is output from LD. */ +#define N_SETV 0x1C /* Pointer to set vector in data area. */ + +#ifndef N_RELOCATION_INFO_DECLARED + +/* This structure describes a single relocation to be performed. + The text-relocation section of the file is a vector of these structures, + all of which apply to the text section. + Likewise, the data-relocation section applies to the data section. */ + +struct relocation_info +{ + /* Address (within segment) to be relocated. */ + int r_address; + /* The meaning of r_symbolnum depends on r_extern. */ + unsigned int r_symbolnum:24; + /* Nonzero means value is a pc-relative offset + and it should be relocated for changes in its own address + as well as for changes in the symbol or section specified. */ + unsigned int r_pcrel:1; + /* Length (as exponent of 2) of the field to be relocated. + Thus, a value of 2 indicates 1<<2 bytes. */ + unsigned int r_length:2; + /* 1 => relocate with value of symbol. + r_symbolnum is the index of the symbol + in file's the symbol table. + 0 => relocate with the address of a segment. + r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS + (the N_EXT bit may be set also, but signifies nothing). */ + unsigned int r_extern:1; + /* Four bits that aren't used, but when writing an object file + it is desirable to clear them. */ + unsigned int r_pad:4; +}; +#endif /* no N_RELOCATION_INFO_DECLARED. */ + + +#endif /* __A_OUT_GNU_H__ */ diff --git a/linux/include/asm/io.h b/linux/include/asm/io.h new file mode 100644 index 0000000..d5cc42a --- /dev/null +++ b/linux/include/asm/io.h @@ -0,0 +1,24 @@ +#define outb(value,port) \ +__asm__ ("outb %%al,%%dx"::"a" (value),"d" (port)) + + +#define inb(port) ({ \ +unsigned char _v; \ +__asm__ volatile ("inb %%dx,%%al":"=a" (_v):"d" (port)); \ +_v; \ +}) + +#define outb_p(value,port) \ +__asm__ ("outb %%al,%%dx\n" \ + "\tjmp 1f\n" \ + "1:\tjmp 1f\n" \ + "1:"::"a" (value),"d" (port)) + +#define inb_p(port) ({ \ +unsigned char _v; \ +__asm__ volatile ("inb %%dx,%%al\n" \ + "\tjmp 1f\n" \ + "1:\tjmp 1f\n" \ + "1:":"=a" (_v):"d" (port)); \ +_v; \ +}) diff --git a/linux/include/asm/memory.h b/linux/include/asm/memory.h new file mode 100644 index 0000000..51b69e7 --- /dev/null +++ b/linux/include/asm/memory.h @@ -0,0 +1,15 @@ +/* + * NOTE!!! memcpy(dest,src,n) assumes ds=es=normal data segment. This + * goes for all kernel functions (ds=es=kernel space, fs=local data, + * gs=null), as well as for all well-behaving user programs (ds=es= + * user data space). This is NOT a bug, as any user program that changes + * es deserves to die if it isn't careful. + */ +#define memcpy(dest,src,n) ({ \ +void * _res = dest; \ +__asm__ ("cld;rep;movsb" \ + ::"D" ((long)(_res)),"S" ((long)(src)),"c" ((long) (n)) \ + ); \ +_res; \ +}) + diff --git a/linux/include/asm/segment.h b/linux/include/asm/segment.h new file mode 100644 index 0000000..94dd102 --- /dev/null +++ b/linux/include/asm/segment.h @@ -0,0 +1,65 @@ +static inline unsigned char get_fs_byte(const char * addr) +{ + unsigned register char _v; + + __asm__ ("movb %%fs:%1,%0":"=r" (_v):"m" (*addr)); + return _v; +} + +static inline unsigned short get_fs_word(const unsigned short *addr) +{ + unsigned short _v; + + __asm__ ("movw %%fs:%1,%0":"=r" (_v):"m" (*addr)); + return _v; +} + +static inline unsigned long get_fs_long(const unsigned long *addr) +{ + unsigned long _v; + + __asm__ ("movl %%fs:%1,%0":"=r" (_v):"m" (*addr)); \ + return _v; +} + +static inline void put_fs_byte(char val,char *addr) +{ +__asm__ ("movb %0,%%fs:%1"::"r" (val),"m" (*addr)); +} + +static inline void put_fs_word(short val,short * addr) +{ +__asm__ ("movw %0,%%fs:%1"::"r" (val),"m" (*addr)); +} + +static inline void put_fs_long(unsigned long val,unsigned long * addr) +{ +__asm__ ("movl %0,%%fs:%1"::"r" (val),"m" (*addr)); +} + +/* + * Someone who knows GNU asm better than I should double check the followig. + * It seems to work, but I don't know if I'm doing something subtly wrong. + * --- TYT, 11/24/91 + * [ nothing wrong here, Linus ] + */ + +static inline unsigned long get_fs() +{ + unsigned short _v; + __asm__("mov %%fs,%%ax":"=a" (_v):); + return _v; +} + +static inline unsigned long get_ds() +{ + unsigned short _v; + __asm__("mov %%ds,%%ax":"=a" (_v):); + return _v; +} + +static inline void set_fs(unsigned long val) +{ + __asm__("mov %0,%%fs"::"a" ((unsigned short) val)); +} + diff --git a/linux/include/asm/system.h b/linux/include/asm/system.h new file mode 100644 index 0000000..0b5a21d --- /dev/null +++ b/linux/include/asm/system.h @@ -0,0 +1,66 @@ +#define move_to_user_mode() \ +__asm__ ("movl %%esp,%%eax\n\t" \ + "pushl $0x17\n\t" \ + "pushl %%eax\n\t" \ + "pushfl\n\t" \ + "pushl $0x0f\n\t" \ + "pushl $1f\n\t" \ + "iret\n" \ + "1:\tmovl $0x17,%%eax\n\t" \ + "movw %%ax,%%ds\n\t" \ + "movw %%ax,%%es\n\t" \ + "movw %%ax,%%fs\n\t" \ + "movw %%ax,%%gs" \ + :::"ax") + +#define sti() __asm__ ("sti"::) +#define cli() __asm__ ("cli"::) +#define nop() __asm__ ("nop"::) + +#define iret() __asm__ ("iret"::) + +#define _set_gate(gate_addr,type,dpl,addr) \ +__asm__ ("movw %%dx,%%ax\n\t" \ + "movw %0,%%dx\n\t" \ + "movl %%eax,%1\n\t" \ + "movl %%edx,%2" \ + : \ + : "i" ((short) (0x8000+(dpl<<13)+(type<<8))), \ + "o" (*((char *) (gate_addr))), \ + "o" (*(4+(char *) (gate_addr))), \ + "d" ((char *) (addr)),"a" (0x00080000)) + +#define set_intr_gate(n,addr) \ + _set_gate(&idt[n],14,0,addr) + +#define set_trap_gate(n,addr) \ + _set_gate(&idt[n],15,0,addr) + +#define set_system_gate(n,addr) \ + _set_gate(&idt[n],15,3,addr) + +#define _set_seg_desc(gate_addr,type,dpl,base,limit) {\ + *(gate_addr) = ((base) & 0xff000000) | \ + (((base) & 0x00ff0000)>>16) | \ + ((limit) & 0xf0000) | \ + ((dpl)<<13) | \ + (0x00408000) | \ + ((type)<<8); \ + *((gate_addr)+1) = (((base) & 0x0000ffff)<<16) | \ + ((limit) & 0x0ffff); } + +#define _set_tssldt_desc(n,addr,type) \ +__asm__ ("movw $104,%1\n\t" \ + "movw %%ax,%2\n\t" \ + "rorl $16,%%eax\n\t" \ + "movb %%al,%3\n\t" \ + "movb $" type ",%4\n\t" \ + "movb $0x00,%5\n\t" \ + "movb %%ah,%6\n\t" \ + "rorl $16,%%eax" \ + ::"a" (addr), "m" (*(n)), "m" (*(n+2)), "m" (*(n+4)), \ + "m" (*(n+5)), "m" (*(n+6)), "m" (*(n+7)) \ + ) + +#define set_tss_desc(n,addr) _set_tssldt_desc(((char *) (n)),addr,"0x89") +#define set_ldt_desc(n,addr) _set_tssldt_desc(((char *) (n)),addr,"0x82") diff --git a/linux/include/assert.h b/linux/include/assert.h new file mode 100644 index 0000000..26b5d13 --- /dev/null +++ b/linux/include/assert.h @@ -0,0 +1,34 @@ +/* Allow this file to be included multiple times + with different settings of NDEBUG. */ +#undef assert +#undef __assert + +#ifdef NDEBUG +#define assert(ignore) ((void)0) +#else + +void __eprintf (); /* Defined in gnulib */ + +#ifdef __STDC__ + +#define assert(expression) \ + ((expression) ? 0 : (__assert (#expression, __FILE__, __LINE__), 0)) + +#define __assert(expression, file, line) \ + (__eprintf ("Failed assertion `%s' at line %d of `%s'.\n", \ + expression, line, file), \ + abort ()) + +#else /* no __STDC__; i.e. -traditional. */ + +#define assert(expression) \ + ((expression) ? 0 : __assert (expression, __FILE__, __LINE__)) + +#define __assert(expression, file, lineno) \ + (__eprintf ("Failed assertion `%s' at line %d of `%s'.\n", \ + "expression", lineno, file), \ + abort ()) + +#endif /* no __STDC__; i.e. -traditional. */ + +#endif diff --git a/linux/include/const.h b/linux/include/const.h new file mode 100644 index 0000000..7828e61 --- /dev/null +++ b/linux/include/const.h @@ -0,0 +1,15 @@ +#ifndef _CONST_H +#define _CONST_H + +#define BUFFER_END 0x200000 + +#define I_TYPE 0170000 +#define I_DIRECTORY 0040000 +#define I_REGULAR 0100000 +#define I_BLOCK_SPECIAL 0060000 +#define I_CHAR_SPECIAL 0020000 +#define I_NAMED_PIPE 0010000 +#define I_SET_UID_BIT 0004000 +#define I_SET_GID_BIT 0002000 + +#endif diff --git a/linux/include/ctype.h b/linux/include/ctype.h new file mode 100644 index 0000000..7acf55d --- /dev/null +++ b/linux/include/ctype.h @@ -0,0 +1,34 @@ +#ifndef _CTYPE_H +#define _CTYPE_H + +#define _U 0x01 /* upper */ +#define _L 0x02 /* lower */ +#define _D 0x04 /* digit */ +#define _C 0x08 /* cntrl */ +#define _P 0x10 /* punct */ +#define _S 0x20 /* white space (space/lf/tab) */ +#define _X 0x40 /* hex digit */ +#define _SP 0x80 /* hard space (0x20) */ + +extern unsigned char _ctype[]; +extern char _ctmp; + +#define isalnum(c) ((_ctype+1)[c]&(_U|_L|_D)) +#define isalpha(c) ((_ctype+1)[c]&(_U|_L)) +#define iscntrl(c) ((_ctype+1)[c]&(_C)) +#define isdigit(c) ((_ctype+1)[c]&(_D)) +#define isgraph(c) ((_ctype+1)[c]&(_P|_U|_L|_D)) +#define islower(c) ((_ctype+1)[c]&(_L)) +#define isprint(c) ((_ctype+1)[c]&(_P|_U|_L|_D|_SP)) +#define ispunct(c) ((_ctype+1)[c]&(_P)) +#define isspace(c) ((_ctype+1)[c]&(_S)) +#define isupper(c) ((_ctype+1)[c]&(_U)) +#define isxdigit(c) ((_ctype+1)[c]&(_D|_X)) + +#define isascii(c) (((unsigned) c)<=0x7f) +#define toascii(c) (((unsigned) c)&0x7f) + +#define tolower(c) (_ctmp=c,isupper(_ctmp)?_ctmp-('A'-'a'):_ctmp) +#define toupper(c) (_ctmp=c,islower(_ctmp)?_ctmp-('a'-'A'):_ctmp) + +#endif diff --git a/linux/include/errno.h b/linux/include/errno.h new file mode 100644 index 0000000..c282f69 --- /dev/null +++ b/linux/include/errno.h @@ -0,0 +1,60 @@ +#ifndef _ERRNO_H +#define _ERRNO_H + +/* + * ok, as I hadn't got any other source of information about + * possible error numbers, I was forced to use the same numbers + * as minix. + * Hopefully these are posix or something. I wouldn't know (and posix + * isn't telling me - they want $$$ for their f***ing standard). + * + * We don't use the _SIGN cludge of minix, so kernel returns must + * see to the sign by themselves. + * + * NOTE! Remember to change strerror() if you change this file! + */ + +extern int errno; + +#define ERROR 99 +#define EPERM 1 +#define ENOENT 2 +#define ESRCH 3 +#define EINTR 4 +#define EIO 5 +#define ENXIO 6 +#define E2BIG 7 +#define ENOEXEC 8 +#define EBADF 9 +#define ECHILD 10 +#define EAGAIN 11 +#define ENOMEM 12 +#define EACCES 13 +#define EFAULT 14 +#define ENOTBLK 15 +#define EBUSY 16 +#define EEXIST 17 +#define EXDEV 18 +#define ENODEV 19 +#define ENOTDIR 20 +#define EISDIR 21 +#define EINVAL 22 +#define ENFILE 23 +#define EMFILE 24 +#define ENOTTY 25 +#define ETXTBSY 26 +#define EFBIG 27 +#define ENOSPC 28 +#define ESPIPE 29 +#define EROFS 30 +#define EMLINK 31 +#define EPIPE 32 +#define EDOM 33 +#define ERANGE 34 +#define EDEADLK 35 +#define ENAMETOOLONG 36 +#define ENOLCK 37 +#define ENOSYS 38 +#define ENOTEMPTY 39 + +#endif diff --git a/linux/include/fcntl.h b/linux/include/fcntl.h new file mode 100644 index 0000000..0eadd32 --- /dev/null +++ b/linux/include/fcntl.h @@ -0,0 +1,56 @@ +#ifndef _FCNTL_H +#define _FCNTL_H + +/* I don't think this should be included like this, but it's easier */ +#include + +/* open/fcntl - NOCTTY, NDELAY isn't implemented yet */ +#define O_ACCMODE 00003 +#define O_RDONLY 00 +#define O_WRONLY 01 +#define O_RDWR 02 +#define O_CREAT 00100 /* not fcntl */ +#define O_EXCL 00200 /* not fcntl */ +#define O_NOCTTY 00400 /* not fcntl */ +#define O_TRUNC 01000 /* not fcntl */ +#define O_APPEND 02000 +#define O_NONBLOCK 04000 /* not fcntl */ +#define O_NDELAY O_NONBLOCK + +/* Defines for fcntl-commands. Note that currently + * locking isn't supported, and other things aren't really + * tested. + */ +#define F_DUPFD 0 /* dup */ +#define F_GETFD 1 /* get f_flags */ +#define F_SETFD 2 /* set f_flags */ +#define F_GETFL 3 /* more flags (cloexec) */ +#define F_SETFL 4 +#define F_GETLK 5 /* not implemented */ +#define F_SETLK 6 +#define F_SETLKW 7 + +/* for F_[GET|SET]FL */ +#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ + +/* Ok, these are locking features, and aren't implemented at any + * level. POSIX wants them. + */ +#define F_RDLCK 0 +#define F_WRLCK 1 +#define F_UNLCK 2 + +/* Once again - not implemented, but ... */ +struct flock { + short l_type; + short l_whence; + off_t l_start; + off_t l_len; + pid_t l_pid; +}; + +extern int creat(const char * filename,mode_t mode); +extern int fcntl(int fildes,int cmd, ...); +extern int open(const char * filename, int flags, ...); + +#endif diff --git a/linux/include/linux/config.h b/linux/include/linux/config.h new file mode 100644 index 0000000..c979fb3 --- /dev/null +++ b/linux/include/linux/config.h @@ -0,0 +1,48 @@ +#ifndef _CONFIG_H +#define _CONFIG_H + +/* + * The root-device is no longer hard-coded. You can change the default + * root-device by changing the line ROOT_DEV = XXX in boot/bootsect.s + */ + +/* + * define your keyboard here - + * KBD_FINNISH for Finnish keyboards + * KBD_US for US-type + * KBD_GR for German keyboards + * KBD_FR for Frech keyboard + */ +#define KBD_US +/*#define KBD_GR */ +/*#define KBD_FR */ +/*#define KBD_FINNISH */ + +/* + * Normally, Linux can get the drive parameters from the BIOS at + * startup, but if this for some unfathomable reason fails, you'd + * be left stranded. For this case, you can define HD_TYPE, which + * contains all necessary info on your harddisk. + * + * The HD_TYPE macro should look like this: + * + * #define HD_TYPE { head, sect, cyl, wpcom, lzone, ctl} + * + * In case of two harddisks, the info should be sepatated by + * commas: + * + * #define HD_TYPE { h,s,c,wpcom,lz,ctl },{ h,s,c,wpcom,lz,ctl } + */ +/* + This is an example, two drives, first is type 2, second is type 3: + +#define HD_TYPE { 4,17,615,300,615,8 }, { 6,17,615,300,615,0 } + + NOTE: ctl is 0 for all drives with heads<=8, and ctl=8 for drives + with more than 8 heads. + + If you want the BIOS to tell what kind of drive you have, just + leave HD_TYPE undefined. This is the normal thing to do. +*/ + +#endif diff --git a/linux/include/linux/fdreg.h b/linux/include/linux/fdreg.h new file mode 100644 index 0000000..01355af --- /dev/null +++ b/linux/include/linux/fdreg.h @@ -0,0 +1,71 @@ +/* + * This file contains some defines for the floppy disk controller. + * Various sources. Mostly "IBM Microcomputers: A Programmers + * Handbook", Sanches and Canton. + */ +#ifndef _FDREG_H +#define _FDREG_H + +extern int ticks_to_floppy_on(unsigned int nr); +extern void floppy_on(unsigned int nr); +extern void floppy_off(unsigned int nr); +extern void floppy_select(unsigned int nr); +extern void floppy_deselect(unsigned int nr); + +/* Fd controller regs. S&C, about page 340 */ +#define FD_STATUS 0x3f4 +#define FD_DATA 0x3f5 +#define FD_DOR 0x3f2 /* Digital Output Register */ +#define FD_DIR 0x3f7 /* Digital Input Register (read) */ +#define FD_DCR 0x3f7 /* Diskette Control Register (write)*/ + +/* Bits of main status register */ +#define STATUS_BUSYMASK 0x0F /* drive busy mask */ +#define STATUS_BUSY 0x10 /* FDC busy */ +#define STATUS_DMA 0x20 /* 0- DMA mode */ +#define STATUS_DIR 0x40 /* 0- cpu->fdc */ +#define STATUS_READY 0x80 /* Data reg ready */ + +/* Bits of FD_ST0 */ +#define ST0_DS 0x03 /* drive select mask */ +#define ST0_HA 0x04 /* Head (Address) */ +#define ST0_NR 0x08 /* Not Ready */ +#define ST0_ECE 0x10 /* Equipment chech error */ +#define ST0_SE 0x20 /* Seek end */ +#define ST0_INTR 0xC0 /* Interrupt code mask */ + +/* Bits of FD_ST1 */ +#define ST1_MAM 0x01 /* Missing Address Mark */ +#define ST1_WP 0x02 /* Write Protect */ +#define ST1_ND 0x04 /* No Data - unreadable */ +#define ST1_OR 0x10 /* OverRun */ +#define ST1_CRC 0x20 /* CRC error in data or addr */ +#define ST1_EOC 0x80 /* End Of Cylinder */ + +/* Bits of FD_ST2 */ +#define ST2_MAM 0x01 /* Missing Addess Mark (again) */ +#define ST2_BC 0x02 /* Bad Cylinder */ +#define ST2_SNS 0x04 /* Scan Not Satisfied */ +#define ST2_SEH 0x08 /* Scan Equal Hit */ +#define ST2_WC 0x10 /* Wrong Cylinder */ +#define ST2_CRC 0x20 /* CRC error in data field */ +#define ST2_CM 0x40 /* Control Mark = deleted */ + +/* Bits of FD_ST3 */ +#define ST3_HA 0x04 /* Head (Address) */ +#define ST3_TZ 0x10 /* Track Zero signal (1=track 0) */ +#define ST3_WP 0x40 /* Write Protect */ + +/* Values for FD_COMMAND */ +#define FD_RECALIBRATE 0x07 /* move to track 0 */ +#define FD_SEEK 0x0F /* seek track */ +#define FD_READ 0xE6 /* read with MT, MFM, SKip deleted */ +#define FD_WRITE 0xC5 /* write with MT, MFM */ +#define FD_SENSEI 0x08 /* Sense Interrupt Status */ +#define FD_SPECIFY 0x03 /* specify HUT etc */ + +/* DMA commands */ +#define DMA_READ 0x46 +#define DMA_WRITE 0x4A + +#endif diff --git a/linux/include/linux/fs.h b/linux/include/linux/fs.h new file mode 100644 index 0000000..7ab0753 --- /dev/null +++ b/linux/include/linux/fs.h @@ -0,0 +1,210 @@ +/* + * This file has definitions for some important file table + * structures etc. + */ + +#ifndef _FS_H +#define _FS_H + +#include + +/* devices are as follows: (same as minix, so we can use the minix + * file system. These are major numbers.) + * + * 0 - unused (nodev) + * 1 - /dev/mem + * 2 - /dev/fd + * 3 - /dev/hd + * 4 - /dev/ttyx + * 5 - /dev/tty + * 6 - /dev/lp + * 7 - unnamed pipes + */ + +#define IS_SEEKABLE(x) ((x)>=1 && (x)<=3) + +#define READ 0 +#define WRITE 1 +#define READA 2 /* read-ahead - don't pause */ +#define WRITEA 3 /* "write-ahead" - silly, but somewhat useful */ + +void buffer_init(long buffer_end); + +#define MAJOR(a) (((unsigned)(a))>>8) +#define MINOR(a) ((a)&0xff) + +#define NAME_LEN 14 +#define ROOT_INO 1 + +#define I_MAP_SLOTS 8 +#define Z_MAP_SLOTS 8 +#define SUPER_MAGIC 0x137F + +#define NR_OPEN 20 +#define NR_INODE 32 +#define NR_FILE 64 +#define NR_SUPER 8 +#define NR_HASH 307 +#define NR_BUFFERS nr_buffers +#define BLOCK_SIZE 1024 +#define BLOCK_SIZE_BITS 10 +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#define INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct d_inode))) +#define DIR_ENTRIES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct dir_entry))) + +#define PIPE_HEAD(inode) ((inode).i_zone[0]) +#define PIPE_TAIL(inode) ((inode).i_zone[1]) +#define PIPE_SIZE(inode) ((PIPE_HEAD(inode)-PIPE_TAIL(inode))&(PAGE_SIZE-1)) +#define PIPE_EMPTY(inode) (PIPE_HEAD(inode)==PIPE_TAIL(inode)) +#define PIPE_FULL(inode) (PIPE_SIZE(inode)==(PAGE_SIZE-1)) +#define INC_PIPE(head) \ +__asm__("incl %0\n\tandl $4095,%0"::"m" (head)) + +typedef char buffer_block[BLOCK_SIZE]; + +struct buffer_head { + char * b_data; /* pointer to data block (1024 bytes) */ + unsigned long b_blocknr; /* block number */ + unsigned short b_dev; /* device (0 = free) */ + unsigned char b_uptodate; + unsigned char b_dirt; /* 0-clean,1-dirty */ + unsigned char b_count; /* users using this block */ + unsigned char b_lock; /* 0 - ok, 1 -locked */ + struct task_struct * b_wait; + struct buffer_head * b_prev; + struct buffer_head * b_next; + struct buffer_head * b_prev_free; + struct buffer_head * b_next_free; +}; + +struct d_inode { + unsigned short i_mode; + unsigned short i_uid; + unsigned long i_size; + unsigned long i_time; + unsigned char i_gid; + unsigned char i_nlinks; + unsigned short i_zone[9]; +}; + +struct m_inode { + unsigned short i_mode; + unsigned short i_uid; + unsigned long i_size; + unsigned long i_mtime; + unsigned char i_gid; + unsigned char i_nlinks; + unsigned short i_zone[9]; +/* these are in memory also */ + struct task_struct * i_wait; + unsigned long i_atime; + unsigned long i_ctime; + unsigned short i_dev; + unsigned short i_num; + unsigned short i_count; + unsigned char i_lock; + unsigned char i_dirt; + unsigned char i_pipe; + unsigned char i_mount; + unsigned char i_seek; + unsigned char i_update; +}; + +struct file { + unsigned short f_mode; + unsigned short f_flags; + unsigned short f_count; + struct m_inode * f_inode; + off_t f_pos; + +}; + +struct super_block { + unsigned short s_ninodes; + unsigned short s_nzones; + unsigned short s_imap_blocks; + unsigned short s_zmap_blocks; + unsigned short s_firstdatazone; + unsigned short s_log_zone_size; + unsigned long s_max_size; + unsigned short s_magic; +/* These are only in memory */ + struct buffer_head * s_imap[8]; + struct buffer_head * s_zmap[8]; + unsigned short s_dev; + struct m_inode * s_isup; + struct m_inode * s_imount; + unsigned long s_time; + struct task_struct * s_wait; + unsigned char s_lock; + unsigned char s_rd_only; + unsigned char s_dirt; +}; + +struct d_super_block { + unsigned short s_ninodes; + unsigned short s_nzones; + unsigned short s_imap_blocks; + unsigned short s_zmap_blocks; + unsigned short s_firstdatazone; + unsigned short s_log_zone_size; + unsigned long s_max_size; + unsigned short s_magic; +}; + +struct dir_entry { + unsigned short inode; + char name[NAME_LEN]; +}; + +struct linux_dirent { + long d_ino; + off_t d_off; + unsigned short d_reclen; + char d_name[14]; +}; + +extern struct m_inode inode_table[NR_INODE]; +extern struct file file_table[NR_FILE]; +extern struct super_block super_block[NR_SUPER]; +extern struct buffer_head * start_buffer; +extern int nr_buffers; + +extern void check_disk_change(int dev); +extern int floppy_change(unsigned int nr); +extern int ticks_to_floppy_on(unsigned int dev); +extern void floppy_on(unsigned int dev); +extern void floppy_off(unsigned int dev); +extern void truncate(struct m_inode * inode); +extern void sync_inodes(void); +extern void wait_on(struct m_inode * inode); +extern int bmap(struct m_inode * inode,int block); +extern int create_block(struct m_inode * inode,int block); +extern struct m_inode * namei(const char * pathname); +extern int open_namei(const char * pathname, int flag, int mode, + struct m_inode ** res_inode); +extern void iput(struct m_inode * inode); +extern struct m_inode * iget(int dev,int nr); +extern struct m_inode * get_empty_inode(void); +extern struct m_inode * get_pipe_inode(void); +extern struct buffer_head * get_hash_table(int dev, int block); +extern struct buffer_head * getblk(int dev, int block); +extern void ll_rw_block(int rw, struct buffer_head * bh); +extern void brelse(struct buffer_head * buf); +extern struct buffer_head * bread(int dev,int block); +extern void bread_page(unsigned long addr,int dev,int b[4]); +extern struct buffer_head * breada(int dev,int block,...); +extern int new_block(int dev); +extern void free_block(int dev, int block); +extern struct m_inode * new_inode(int dev); +extern void free_inode(struct m_inode * inode); +extern int sync_dev(int dev); +extern struct super_block * get_super(int dev); +extern int ROOT_DEV; + +extern void mount_root(void); + +#endif diff --git a/linux/include/linux/hdreg.h b/linux/include/linux/hdreg.h new file mode 100644 index 0000000..e6c593f --- /dev/null +++ b/linux/include/linux/hdreg.h @@ -0,0 +1,65 @@ +/* + * This file contains some defines for the AT-hd-controller. + * Various sources. Check out some definitions (see comments with + * a ques). + */ +#ifndef _HDREG_H +#define _HDREG_H + +/* Hd controller regs. Ref: IBM AT Bios-listing */ +#define HD_DATA 0x1f0 /* _CTL when writing */ +#define HD_ERROR 0x1f1 /* see err-bits */ +#define HD_NSECTOR 0x1f2 /* nr of sectors to read/write */ +#define HD_SECTOR 0x1f3 /* starting sector */ +#define HD_LCYL 0x1f4 /* starting cylinder */ +#define HD_HCYL 0x1f5 /* high byte of starting cyl */ +#define HD_CURRENT 0x1f6 /* 101dhhhh , d=drive, hhhh=head */ +#define HD_STATUS 0x1f7 /* see status-bits */ +#define HD_PRECOMP HD_ERROR /* same io address, read=error, write=precomp */ +#define HD_COMMAND HD_STATUS /* same io address, read=status, write=cmd */ + +#define HD_CMD 0x3f6 + +/* Bits of HD_STATUS */ +#define ERR_STAT 0x01 +#define INDEX_STAT 0x02 +#define ECC_STAT 0x04 /* Corrected error */ +#define DRQ_STAT 0x08 +#define SEEK_STAT 0x10 +#define WRERR_STAT 0x20 +#define READY_STAT 0x40 +#define BUSY_STAT 0x80 + +/* Values for HD_COMMAND */ +#define WIN_RESTORE 0x10 +#define WIN_READ 0x20 +#define WIN_WRITE 0x30 +#define WIN_VERIFY 0x40 +#define WIN_FORMAT 0x50 +#define WIN_INIT 0x60 +#define WIN_SEEK 0x70 +#define WIN_DIAGNOSE 0x90 +#define WIN_SPECIFY 0x91 + +/* Bits for HD_ERROR */ +#define MARK_ERR 0x01 /* Bad address mark ? */ +#define TRK0_ERR 0x02 /* couldn't find track 0 */ +#define ABRT_ERR 0x04 /* ? */ +#define ID_ERR 0x10 /* ? */ +#define ECC_ERR 0x40 /* ? */ +#define BBD_ERR 0x80 /* ? */ + +struct partition { + unsigned char boot_ind; /* 0x80 - active (unused) */ + unsigned char head; /* ? */ + unsigned char sector; /* ? */ + unsigned char cyl; /* ? */ + unsigned char sys_ind; /* ? */ + unsigned char end_head; /* ? */ + unsigned char end_sector; /* ? */ + unsigned char end_cyl; /* ? */ + unsigned int start_sect; /* starting sector counting from 0 */ + unsigned int nr_sects; /* nr of sectors in partition */ +}; + +#endif diff --git a/linux/include/linux/head.h b/linux/include/linux/head.h new file mode 100644 index 0000000..db3dda2 --- /dev/null +++ b/linux/include/linux/head.h @@ -0,0 +1,20 @@ +#ifndef _HEAD_H +#define _HEAD_H + +typedef struct desc_struct { + unsigned long a,b; +} desc_table[256]; + +extern unsigned long pg_dir[1024]; +extern desc_table idt,gdt; + +#define GDT_NUL 0 +#define GDT_CODE 1 +#define GDT_DATA 2 +#define GDT_TMP 3 + +#define LDT_NUL 0 +#define LDT_CODE 1 +#define LDT_DATA 2 + +#endif diff --git a/linux/include/linux/kernel.h b/linux/include/linux/kernel.h new file mode 100644 index 0000000..cb40dd5 --- /dev/null +++ b/linux/include/linux/kernel.h @@ -0,0 +1,22 @@ +/* + * 'kernel.h' contains some often-used function prototypes etc + */ +void verify_area(void * addr,int count); +volatile void panic(const char * str); +int printf(const char * fmt, ...); +int printk(const char * fmt, ...); +int tty_write(unsigned ch,char * buf,int count); +void * malloc(unsigned int size); +void free_s(void * obj, int size); + +#define free(x) free_s((x), 0) + +/* + * This is defined as a macro, but at some point this might become a + * real subroutine that sets a flag if it returns true (to do + * BSD-style accounting where the process is flagged if it uses root + * privs). The implication of this is that you should do normal + * permissions checks first, and check suser() last. + */ +#define suser() (current->euid == 0) + diff --git a/linux/include/linux/mm.h b/linux/include/linux/mm.h new file mode 100644 index 0000000..5a160f3 --- /dev/null +++ b/linux/include/linux/mm.h @@ -0,0 +1,10 @@ +#ifndef _MM_H +#define _MM_H + +#define PAGE_SIZE 4096 + +extern unsigned long get_free_page(void); +extern unsigned long put_page(unsigned long page,unsigned long address); +extern void free_page(unsigned long addr); + +#endif diff --git a/linux/include/linux/sched.h b/linux/include/linux/sched.h new file mode 100644 index 0000000..772646a --- /dev/null +++ b/linux/include/linux/sched.h @@ -0,0 +1,239 @@ +#ifndef _SCHED_H +#define _SCHED_H + +#define NR_TASKS 64 +#define HZ 100 + +#define FIRST_TASK task[0] +#define LAST_TASK task[NR_TASKS-1] + +#include +#include +#include +#include + +#if (NR_OPEN > 32) +#error "Currently the close-on-exec-flags are in one word, max 32 files/proc" +#endif + +#define TASK_RUNNING 0 +#define TASK_INTERRUPTIBLE 1 +#define TASK_UNINTERRUPTIBLE 2 +#define TASK_ZOMBIE 3 +#define TASK_STOPPED 4 + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +extern int copy_page_tables(unsigned long from, unsigned long to, long size); +extern int free_page_tables(unsigned long from, unsigned long size); + +extern void sched_init(void); +extern void schedule(void); +extern void trap_init(void); +extern void panic(const char * str); +extern int tty_write(unsigned minor,char * buf,int count); + +typedef int (*fn_ptr)(); + +struct i387_struct { + long cwd; + long swd; + long twd; + long fip; + long fcs; + long foo; + long fos; + long st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */ +}; + +struct tss_struct { + long back_link; /* 16 high bits zero */ + long esp0; + long ss0; /* 16 high bits zero */ + long esp1; + long ss1; /* 16 high bits zero */ + long esp2; + long ss2; /* 16 high bits zero */ + long cr3; + long eip; + long eflags; + long eax,ecx,edx,ebx; + long esp; + long ebp; + long esi; + long edi; + long es; /* 16 high bits zero */ + long cs; /* 16 high bits zero */ + long ss; /* 16 high bits zero */ + long ds; /* 16 high bits zero */ + long fs; /* 16 high bits zero */ + long gs; /* 16 high bits zero */ + long ldt; /* 16 high bits zero */ + long trace_bitmap; /* bits: trace 0, bitmap 16-31 */ + struct i387_struct i387; +}; + +struct task_struct { +/* these are hardcoded - don't touch */ + long state; /* -1 unrunnable, 0 runnable, >0 stopped */ + long counter; + long priority; + long signal; + struct sigaction sigaction[32]; + long blocked; /* bitmap of masked signals */ +/* various fields */ + int exit_code; + unsigned long start_code,end_code,end_data,brk,start_stack; + long pid,father,pgrp,session,leader; + unsigned short uid,euid,suid; + unsigned short gid,egid,sgid; + long alarm; + long utime,stime,cutime,cstime,start_time; + unsigned short used_math; +/* file system info */ + int tty; /* -1 if no tty, so it must be signed */ + unsigned short umask; + struct m_inode * pwd; + struct m_inode * root; + struct m_inode * executable; + unsigned long close_on_exec; + struct file * filp[NR_OPEN]; +/* ldt for this task 0 - zero 1 - cs 2 - ds&ss */ + struct desc_struct ldt[3]; +/* tss for this task */ + struct tss_struct tss; +}; + +/* + * INIT_TASK is used to set up the first task table, touch at + * your own risk!. Base=0, limit=0x9ffff (=640kB) + */ +#define INIT_TASK \ +/* state etc */ { 0,15,15, \ +/* signals */ 0,{{},},0, \ +/* ec,brk... */ 0,0,0,0,0,0, \ +/* pid etc.. */ 0,-1,0,0,0, \ +/* uid etc */ 0,0,0,0,0,0, \ +/* alarm */ 0,0,0,0,0,0, \ +/* math */ 0, \ +/* fs info */ -1,0022,NULL,NULL,NULL,0, \ +/* filp */ {NULL,}, \ + { \ + {0,0}, \ +/* ldt */ {0x9f,0xc0fa00}, \ + {0x9f,0xc0f200}, \ + }, \ +/*tss*/ {0,PAGE_SIZE+(long)&init_task,0x10,0,0,0,0,(long)&pg_dir,\ + 0,0,0,0,0,0,0,0, \ + 0,0,0x17,0x17,0x17,0x17,0x17,0x17, \ + _LDT(0),0x80000000, \ + {} \ + }, \ +} + +extern struct task_struct *task[NR_TASKS]; +extern struct task_struct *last_task_used_math; +extern struct task_struct *current; +extern long volatile jiffies; +extern long startup_time; + +#define CURRENT_TIME (startup_time+jiffies/HZ) + +extern void add_timer(long jiffies, void (*fn)(void)); +extern void sleep_on(struct task_struct ** p); +extern void interruptible_sleep_on(struct task_struct ** p); +extern void wake_up(struct task_struct ** p); + +/* + * Entry into gdt where to find first TSS. 0-nul, 1-cs, 2-ds, 3-syscall + * 4-TSS0, 5-LDT0, 6-TSS1 etc ... + */ +#define FIRST_TSS_ENTRY 4 +#define FIRST_LDT_ENTRY (FIRST_TSS_ENTRY+1) +#define _TSS(n) ((((unsigned long) n)<<4)+(FIRST_TSS_ENTRY<<3)) +#define _LDT(n) ((((unsigned long) n)<<4)+(FIRST_LDT_ENTRY<<3)) +#define ltr(n) __asm__("ltr %%ax"::"a" (_TSS(n))) +#define lldt(n) __asm__("lldt %%ax"::"a" (_LDT(n))) +#define str(n) \ +__asm__("str %%ax\n\t" \ + "subl %2,%%eax\n\t" \ + "shrl $4,%%eax" \ + :"=a" (n) \ + :"a" (0),"i" (FIRST_TSS_ENTRY<<3)) +/* + * switch_to(n) should switch tasks to task nr n, first + * checking that n isn't the current task, in which case it does nothing. + * This also clears the TS-flag if the task we switched to has used + * tha math co-processor latest. + */ +#define switch_to(n) {\ +struct {long a,b;} __tmp; \ +__asm__("cmpl %%ecx,current\n\t" \ + "je 1f\n\t" \ + "movw %%dx,%1\n\t" \ + "xchgl %%ecx,current\n\t" \ + "ljmp *%0\n\t" \ + "cmpl %%ecx,last_task_used_math\n\t" \ + "jne 1f\n\t" \ + "clts\n" \ + "1:" \ + ::"m" (*&__tmp.a),"m" (*&__tmp.b), \ + "d" (_TSS(n)),"c" ((long) task[n])); \ +} + +#define PAGE_ALIGN(n) (((n)+0xfff)&0xfffff000) + +#define _set_base(addr,base) \ +__asm__ ("push %%edx\n\t" \ + "movw %%dx,%0\n\t" \ + "rorl $16,%%edx\n\t" \ + "movb %%dl,%1\n\t" \ + "movb %%dh,%2\n\t" \ + "pop %%edx" \ + ::"m" (*((addr)+2)), \ + "m" (*((addr)+4)), \ + "m" (*((addr)+7)), \ + "d" (base) \ + ) + +#define _set_limit(addr,limit) \ +__asm__ ("push %%edx\n\t" \ + "movw %%dx,%0\n\t" \ + "rorl $16,%%edx\n\t" \ + "movb %1,%%dh\n\t" \ + "andb $0xf0,%%dh\n\t" \ + "orb %%dh,%%dl\n\t" \ + "movb %%dl,%1\n\t" \ + "pop %%edx" \ + ::"m" (*(addr)), \ + "m" (*((addr)+6)), \ + "d" (limit) \ + ) + +#define set_base(ldt,base) _set_base( ((char *)&(ldt)) , (base) ) +#define set_limit(ldt,limit) _set_limit( ((char *)&(ldt)) , (limit-1)>>12 ) + +static inline unsigned long _get_base(char * addr) +{ + unsigned long __base; + __asm__("movb %3,%%dh\n\t" + "movb %2,%%dl\n\t" + "shll $16,%%edx\n\t" + "movw %1,%%dx" + :"=&d" (__base) + :"m" (*((addr)+2)), + "m" (*((addr)+4)), + "m" (*((addr)+7))); + return __base; +} + +#define get_base(ldt) _get_base( ((char *)&(ldt)) ) + +#define get_limit(segment) ({ \ +unsigned long __limit; \ +__asm__("lsll %1,%0\n\tincl %0":"=r" (__limit):"r" (segment)); \ +__limit;}) + +#endif diff --git a/linux/include/linux/sys.h b/linux/include/linux/sys.h new file mode 100644 index 0000000..c996eb1 --- /dev/null +++ b/linux/include/linux/sys.h @@ -0,0 +1,119 @@ +/* + * Why isn't this a .c file? Enquiring minds.... + */ + +extern int sys_setup(); +extern int sys_exit(); +extern int sys_fork(); +extern int sys_read(); +extern int sys_write(); +extern int sys_open(); +extern int sys_close(); +extern int sys_waitpid(); +extern int sys_creat(); +extern int sys_link(); +extern int sys_unlink(); +extern int sys_execve(); +extern int sys_chdir(); +extern int sys_time(); +extern int sys_mknod(); +extern int sys_chmod(); +extern int sys_chown(); +extern int sys_break(); +extern int sys_stat(); +extern int sys_lseek(); +extern int sys_getpid(); +extern int sys_mount(); +extern int sys_umount(); +extern int sys_setuid(); +extern int sys_getuid(); +extern int sys_stime(); +extern int sys_ptrace(); +extern int sys_alarm(); +extern int sys_fstat(); +extern int sys_pause(); +extern int sys_utime(); +extern int sys_stty(); +extern int sys_gtty(); +extern int sys_access(); +extern int sys_nice(); +extern int sys_ftime(); +extern int sys_sync(); +extern int sys_kill(); +extern int sys_rename(); +extern int sys_mkdir(); +extern int sys_rmdir(); +extern int sys_dup(); +extern int sys_pipe(); +extern int sys_times(); +extern int sys_prof(); +extern int sys_brk(); +extern int sys_setgid(); +extern int sys_getgid(); +extern int sys_signal(); +extern int sys_geteuid(); +extern int sys_getegid(); +extern int sys_acct(); +extern int sys_phys(); +extern int sys_lock(); +extern int sys_ioctl(); +extern int sys_fcntl(); +extern int sys_mpx(); +extern int sys_setpgid(); +extern int sys_ulimit(); +extern int sys_uname(); +extern int sys_umask(); +extern int sys_chroot(); +extern int sys_ustat(); +extern int sys_dup2(); +extern int sys_getppid(); +extern int sys_getpgrp(); +extern int sys_setsid(); +extern int sys_sigaction(); +extern int sys_sgetmask(); +extern int sys_ssetmask(); +extern int sys_setreuid(); +extern int sys_setregid(); +extern int sys_sigpending(); +extern int sys_sigsuspend(); +extern int sys_sethostname(); +extern int sys_setrlimit(); +extern int sys_getrlimit(); +extern int sys_getrusage(); +extern int sys_gettimeofday(); +extern int sys_settimeofday(); +extern int sys_getgroups(); +extern int sys_setgroups(); +extern int sys_select(); +extern int sys_symlink(); +extern int sys_lstat(); +extern int sys_readlink(); +extern int sys_uselib(); +extern int sys_sleep(); +extern int sys_execve2(); +extern int sys_getdents(); +extern int sys_pipe2(); +extern long sys_getcwd(); +extern long sys_mmap(); +extern int sys_munmap(); +extern int sys_clone(); +fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read, +sys_write, sys_open, sys_close, sys_waitpid, sys_creat, sys_link, +sys_unlink, sys_execve, sys_chdir, sys_time, sys_mknod, sys_chmod, +sys_chown, sys_break, sys_stat, sys_lseek, sys_getpid, sys_mount, +sys_umount, sys_setuid, sys_getuid, sys_stime, sys_ptrace, sys_alarm, +sys_fstat, sys_pause, sys_utime, sys_stty, sys_gtty, sys_access, +sys_nice, sys_ftime, sys_sync, sys_kill, sys_rename, sys_mkdir, +sys_rmdir, sys_dup, sys_pipe, sys_times, sys_prof, sys_brk, sys_setgid, +sys_getgid, sys_signal, sys_geteuid, sys_getegid, sys_acct, sys_phys, +sys_lock, sys_ioctl, sys_fcntl, sys_mpx, sys_setpgid, sys_ulimit, +sys_uname, sys_umask, sys_chroot, sys_ustat, sys_dup2, sys_getppid, +sys_getpgrp, sys_setsid, sys_sigaction, sys_sgetmask, sys_ssetmask, +sys_setreuid,sys_setregid, sys_sigsuspend, sys_sigpending, sys_sethostname, +sys_setrlimit, sys_getrlimit, sys_getrusage, sys_gettimeofday, +sys_settimeofday, sys_getgroups, sys_setgroups, sys_select, sys_symlink, +sys_lstat, sys_readlink, sys_uselib ,sys_execve2,sys_getdents,sys_pipe2, +sys_sleep,sys_getcwd,sys_mmap,sys_munmap,sys_clone,}; + +/* So we don't have to do any more manual updating.... */ +int NR_syscalls = sizeof(sys_call_table)/sizeof(fn_ptr); diff --git a/linux/include/linux/tty.h b/linux/include/linux/tty.h new file mode 100644 index 0000000..ad846b3 --- /dev/null +++ b/linux/include/linux/tty.h @@ -0,0 +1,77 @@ +/* + * 'tty.h' defines some structures used by tty_io.c and some defines. + * + * NOTE! Don't touch this without checking that nothing in rs_io.s or + * con_io.s breaks. Some constants are hardwired into the system (mainly + * offsets into 'tty_queue' + */ + +#ifndef _TTY_H +#define _TTY_H + +#include + +#define TTY_BUF_SIZE 1024 + +struct tty_queue { + unsigned long data; + unsigned long head; + unsigned long tail; + struct task_struct * proc_list; + char buf[TTY_BUF_SIZE]; +}; + +#define INC(a) ((a) = ((a)+1) & (TTY_BUF_SIZE-1)) +#define DEC(a) ((a) = ((a)-1) & (TTY_BUF_SIZE-1)) +#define EMPTY(a) ((a).head == (a).tail) +#define LEFT(a) (((a).tail-(a).head-1)&(TTY_BUF_SIZE-1)) +#define LAST(a) ((a).buf[(TTY_BUF_SIZE-1)&((a).head-1)]) +#define FULL(a) (!LEFT(a)) +#define CHARS(a) (((a).head-(a).tail)&(TTY_BUF_SIZE-1)) +#define GETCH(queue,c) \ +(void)({c=(queue).buf[(queue).tail];INC((queue).tail);}) +#define PUTCH(c,queue) \ +(void)({(queue).buf[(queue).head]=(c);INC((queue).head);}) + +#define INTR_CHAR(tty) ((tty)->termios.c_cc[VINTR]) +#define QUIT_CHAR(tty) ((tty)->termios.c_cc[VQUIT]) +#define ERASE_CHAR(tty) ((tty)->termios.c_cc[VERASE]) +#define KILL_CHAR(tty) ((tty)->termios.c_cc[VKILL]) +#define EOF_CHAR(tty) ((tty)->termios.c_cc[VEOF]) +#define START_CHAR(tty) ((tty)->termios.c_cc[VSTART]) +#define STOP_CHAR(tty) ((tty)->termios.c_cc[VSTOP]) +#define SUSPEND_CHAR(tty) ((tty)->termios.c_cc[VSUSP]) + +struct tty_struct { + struct termios termios; + int pgrp; + int stopped; + void (*write)(struct tty_struct * tty); + struct tty_queue read_q; + struct tty_queue write_q; + struct tty_queue secondary; + }; + +extern struct tty_struct tty_table[]; + +/* intr=^C quit=^| erase=del kill=^U + eof=^D vtime=\0 vmin=\1 sxtc=\0 + start=^Q stop=^S susp=^Z eol=\0 + reprint=^R discard=^U werase=^W lnext=^V + eol2=\0 +*/ +#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" + +void rs_init(void); +void con_init(void); +void tty_init(void); + +int tty_read(unsigned c, char * buf, int n); +int tty_write(unsigned c, char * buf, int n); + +void rs_write(struct tty_struct * tty); +void con_write(struct tty_struct * tty); + +void copy_to_cooked(struct tty_struct * tty); + +#endif diff --git a/linux/include/signal.h b/linux/include/signal.h new file mode 100644 index 0000000..ad599f0 --- /dev/null +++ b/linux/include/signal.h @@ -0,0 +1,69 @@ +#ifndef _SIGNAL_H +#define _SIGNAL_H + +#include + +typedef int sig_atomic_t; +typedef unsigned int sigset_t; /* 32 bits */ + +#define _NSIG 32 +#define NSIG _NSIG + +#define SIGHUP 1 +#define SIGINT 2 +#define SIGQUIT 3 +#define SIGILL 4 +#define SIGTRAP 5 +#define SIGABRT 6 +#define SIGIOT 6 +#define SIGUNUSED 7 +#define SIGFPE 8 +#define SIGKILL 9 +#define SIGUSR1 10 +#define SIGSEGV 11 +#define SIGUSR2 12 +#define SIGPIPE 13 +#define SIGALRM 14 +#define SIGTERM 15 +#define SIGSTKFLT 16 +#define SIGCHLD 17 +#define SIGCONT 18 +#define SIGSTOP 19 +#define SIGTSTP 20 +#define SIGTTIN 21 +#define SIGTTOU 22 + +/* Ok, I haven't implemented sigactions, but trying to keep headers POSIX */ +#define SA_NOCLDSTOP 1 +#define SA_NOMASK 0x40000000 +#define SA_ONESHOT 0x80000000 + +#define SIG_BLOCK 0 /* for blocking signals */ +#define SIG_UNBLOCK 1 /* for unblocking signals */ +#define SIG_SETMASK 2 /* for setting the signal mask */ + +#define SIG_DFL ((void (*)(int))0) /* default signal handling */ +#define SIG_IGN ((void (*)(int))1) /* ignore signal */ +#define SIG_ERR ((void (*)(int))-1) /* error return from signal */ + +struct sigaction { + void (*sa_handler)(int); + sigset_t sa_mask; + int sa_flags; + void (*sa_restorer)(void); +}; + +void (*signal(int _sig, void (*_func)(int)))(int); +int raise(int sig); +int kill(pid_t pid, int sig); +int sigaddset(sigset_t *mask, int signo); +int sigdelset(sigset_t *mask, int signo); +int sigemptyset(sigset_t *mask); +int sigfillset(sigset_t *mask); +int sigismember(sigset_t *mask, int signo); /* 1 - is, 0 - not, -1 error */ +int sigpending(sigset_t *set); +int sigprocmask(int how, sigset_t *set, sigset_t *oldset); +int sigsuspend(sigset_t *sigmask); +int sigaction(int sig, struct sigaction *act, struct sigaction *oldact); + +#endif /* _SIGNAL_H */ diff --git a/linux/include/stdarg.h b/linux/include/stdarg.h new file mode 100644 index 0000000..fd79ec0 --- /dev/null +++ b/linux/include/stdarg.h @@ -0,0 +1,28 @@ +#ifndef _STDARG_H +#define _STDARG_H + +typedef char *va_list; + +/* Amount of space required in an argument list for an arg of type TYPE. + TYPE may alternatively be an expression whose type is used. */ + +#define __va_rounded_size(TYPE) \ + (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) + +#ifndef __sparc__ +#define va_start(AP, LASTARG) \ + (AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG))) +#else +#define va_start(AP, LASTARG) \ + (__builtin_saveregs (), \ + AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG))) +#endif + +void va_end (va_list); /* Defined in gnulib */ +#define va_end(AP) + +#define va_arg(AP, TYPE) \ + (AP += __va_rounded_size (TYPE), \ + *((TYPE *) (AP - __va_rounded_size (TYPE)))) + +#endif /* _STDARG_H */ diff --git a/linux/include/stddef.h b/linux/include/stddef.h new file mode 100644 index 0000000..97f72ff --- /dev/null +++ b/linux/include/stddef.h @@ -0,0 +1,19 @@ +#ifndef _STDDEF_H +#define _STDDEF_H + +#ifndef _PTRDIFF_T +#define _PTRDIFF_T +typedef long ptrdiff_t; +#endif + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned long size_t; +#endif + +#undef NULL +#define NULL ((void *)0) + +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) + +#endif diff --git a/linux/include/stdio.h b/linux/include/stdio.h new file mode 100644 index 0000000..a779059 --- /dev/null +++ b/linux/include/stdio.h @@ -0,0 +1,256 @@ +#ifndef _STDIO_H +#define _STDIO_H + +/* s t d i o + * + * Author: C. E. Chew + * Date: August 1989 + * + * (C) Copyright C E Chew + * + * Feel free to copy, use and distribute this software provided: + * + * 1. you do not pretend that you wrote it + * 2. you leave this copyright notice intact. + * + * Definitions and user interface for the stream io package. + * + * Patchlevel 2.0 + * + * Edit History: + */ + +/* Site specific definitions */ +/*@*/ +#ifndef NULL +# define NULL ((void *)0) +#endif +#define _STDIO_UCHAR_ 0 +#define _STDIO_VA_LIST_ char * +#define _STDIO_SIZE_T_ unsigned int /* type returned by sizeof */ +#define _STDIO_USIZE_T_ unsigned int +/*=*/ + +/* Definitions based on ANSI compiler */ +#ifdef __STDC__ +# ifndef _STDIO_P_ +# define _STDIO_P_(x) x +# endif +# ifndef _STDIO_VA_ +# define _STDIO_VA_ , ... +# endif +# ifndef _STDIO_UCHAR_ +# define _STDIO_UCHAR_ 0 +# endif +#else +# ifndef _STDIO_P_ +# define _STDIO_P_(x) () +# endif +# ifndef _STDIO_VA_ +# define _STDIO_VA_ +# endif +# ifndef _STDIO_UCHAR_ +# define _STDIO_UCHAR_ (0xff) +# endif +#endif + +#ifndef _STDIO_VA_LIST_ +# define _STDIO_VA_LIST_ void * +#endif + +#ifndef _STDIO_SIZE_T_ +# define _STDIO_SIZE_T_ unsigned int +#endif + +#ifndef _STDIO_USIZE_T_ +# define _STDIO_USIZE_T_ unsigned int +#endif + +/* ANSI Definitions */ +#define BUFSIZ 1024 /* default buffer size */ + +#ifndef NULL +# define NULL ((void *) 0) /* null pointer */ +#endif + +#define EOF (-1) /* eof flag */ +#define FOPEN_MAX 16 /* minimum guarantee */ +#define FILENAME_MAX 127 /* maximum length of file name */ + +#define SEEK_SET 0 /* seek from beginning */ +#define SEEK_CUR 1 /* seek from here */ +#define SEEK_END 2 /* seek from end */ + +#define TMP_MAX (0xffff) /* maximum number of temporaries */ + +#define L_tmpnam (5 + 8 + 4 + 1 + 1) /* length of temporary file name */ + +#ifndef _FPOS_T +# define _FPOS_T + typedef long fpos_t; /* stream positioning */ +#endif + +#ifndef _SIZE_T +# define _SIZE_T + typedef _STDIO_SIZE_T_ size_t; /* sizeof type */ +#endif + +#define _IOFBF 000000 /* fully buffered io */ +#define _IOREAD 000001 /* opened for reading */ +#define _IOWRITE 000002 /* opened for writing */ +#define _IONBF 000004 /* unbuffered */ +#define _IOMYBUF 000010 /* allocated buffer */ +#define _IOPOOLBUF 000020 /* buffer belongs to pool */ +#define _IOEOF 000040 /* eof encountered */ +#define _IOERR 000100 /* error encountered */ +#define _IOSTRING 000200 /* strings */ +#define _IOLBF 000400 /* line buffered */ +#define _IORW 001000 /* opened for reading and writing */ +#define _IOAPPEND 002000 /* append mode */ +#define _IOINSERT 004000 /* insert into __iop chain */ +#define _IOSTDX 030000 /* standard stream */ + +#define _IOSTDIN 010000 /* stdin indication */ +#define _IOSTDOUT 020000 /* stdout indication */ +#define _IOSTDERR 030000 /* stderr indication */ + +#define _IORETAIN (_IOSTDX | _IOINSERT) /* flags to be retained */ + +/* Implementation Definitions */ + +typedef char __stdiobuf_t; /* stdio buffer type */ +typedef _STDIO_USIZE_T_ __stdiosize_t; /* unsigned size_t */ + +typedef struct __iobuf { + __stdiobuf_t *__rptr; /* pointer into read buffer */ + __stdiobuf_t *__rend; /* point at end of read buffer */ + __stdiobuf_t *__wptr; /* pointer into write buffer */ + __stdiobuf_t *__wend; /* point at end of write buffer */ + __stdiobuf_t *__base; /* base of buffer */ + __stdiosize_t __bufsiz; /* size of buffer */ + short __flag; /* flags */ + char __file; /* channel number */ + __stdiobuf_t __buf; /* small buffer */ + int (*__filbuf) _STDIO_P_((struct __iobuf *)); /* fill input buffer */ + int (*__flsbuf) _STDIO_P_((int, struct __iobuf *)); /* flush output buffer */ + int (*__flush) _STDIO_P_((struct __iobuf *)); /* flush buffer */ + struct __iobuf *__next; /* next in chain */ +} FILE; + +extern FILE __stdin; /* stdin */ +extern FILE __stdout; /* stdout */ +extern FILE __stderr; /* stderr */ + +#define stdin (&__stdin) +#define stdout (&__stdout) +#define stderr (&__stderr) + +/* ANSI Stdio Requirements */ + +int getc _STDIO_P_((FILE *)); +#if _STDIO_UCHAR_ +# define getc(p) ((p)->__rptr>=(p)->__rend\ + ?(*(p)->__filbuf)(p)\ + :(int)(*(p)->__rptr++&_STDIO_UCHAR_)) +#else +# define getc(p) ((p)->__rptr>=(p)->__rend\ + ?(*(p)->__filbuf)(p)\ + :(int)((unsigned char)(*(p)->__rptr++))) +#endif + +int getchar _STDIO_P_((void)); +#define getchar() getc(stdin) + +int putc _STDIO_P_((int, FILE *)); +#if _STDIO_UCHAR_ +# define putc(x,p) ((p)->__wptr>=(p)->__wend\ + ?(*(p)->__flsbuf)((x),(p))\ + :(int)(*(p)->__wptr++=(x)&_STDIO_UCHAR_)) +#else +# define putc(x,p) ((p)->__wptr>=(p)->__wend\ + ?(*(p)->__flsbuf)((x),(p))\ + :(int)((unsigned char)(*(p)->__wptr++=(x)))) +#endif + +int putchar _STDIO_P_((int)); +#define putchar(x) putc(x,stdout) + +int feof _STDIO_P_((FILE *)); +#define feof(p) (((p)->__flag&_IOEOF)!=0) + +int ferror _STDIO_P_((FILE *)); +#define ferror(p) (((p)->__flag&_IOERR)!=0) + +void clearerr _STDIO_P_((FILE *)); +#define clearerr(p) ((p)->__flag&=~(_IOEOF|_IOERR)) + +FILE *fopen _STDIO_P_((const char *, const char *)); +FILE *freopen _STDIO_P_((const char *, const char *, FILE *)); +int fflush _STDIO_P_((FILE *)); +int fclose _STDIO_P_((FILE *)); + +int fgetpos _STDIO_P_((FILE *, fpos_t *)); +int fsetpos _STDIO_P_((FILE *, fpos_t *)); +long ftell _STDIO_P_((FILE *)); +int fseek _STDIO_P_((FILE *, long, int)); +void rewind _STDIO_P_((FILE *)); + +int fgetc _STDIO_P_((FILE *)); +int fputc _STDIO_P_((int, FILE *)); +__stdiosize_t fread _STDIO_P_((void *, __stdiosize_t, + __stdiosize_t, FILE *)); +__stdiosize_t fwrite _STDIO_P_((void *, __stdiosize_t, + __stdiosize_t, FILE *)); + +int getw _STDIO_P_((FILE *)); +int putw _STDIO_P_((int, FILE *)); +char *gets _STDIO_P_((char *)); +char *fgets _STDIO_P_((char *, int, FILE *)); +int puts _STDIO_P_((const char *)); +int fputs _STDIO_P_((const char *, FILE *)); + +int ungetc _STDIO_P_((int, FILE *)); + +int printf _STDIO_P_((const char * _STDIO_VA_)); +int fprintf _STDIO_P_((FILE *, const char * _STDIO_VA_)); +int sprintf _STDIO_P_((char *, const char * _STDIO_VA_)); +int vprintf _STDIO_P_((const char *, _STDIO_VA_LIST_)); +int vfprintf _STDIO_P_((FILE *, const char *, _STDIO_VA_LIST_)); +int vsprintf _STDIO_P_((char *, const char *, _STDIO_VA_LIST_)); +int scanf _STDIO_P_((const char * _STDIO_VA_)); +int fscanf _STDIO_P_((FILE *, const char * _STDIO_VA_)); +int sscanf _STDIO_P_((const char *, const char * _STDIO_VA_)); + +void setbuf _STDIO_P_((FILE *, char *)); +int setvbuf _STDIO_P_((FILE *, char *, int, __stdiosize_t)); + +int rename _STDIO_P_((const char *, const char *)); +int remove _STDIO_P_((const char *)); + +void perror _STDIO_P_((const char *)); + +char * tmpnam _STDIO_P_((char *)); +FILE * tmpfile _STDIO_P_((void)); + +/* Posix Definitions */ +int unlink _STDIO_P_((const char *)); +#define remove(x) unlink((x)) + +#define L_ctermid 9 +char * ctermid _STDIO_P_((char *s)); + +#define L_cuserid 9 +char * cuserid _STDIO_P_((char *s)); + +FILE *fdopen _STDIO_P_((int, const char *)); + +int fileno _STDIO_P_((FILE *)); +#define fileno(p) ((p)->__file) + +#undef _STDIO_P_ +#undef _STDIO_VA_ +#undef _STDIO_VA_LIST_ +/*ndef _STDIO_UCHAR_*/ +#undef _STDIO_SIZE_T_ +#undef _STDIO_USIZE_T_ +#endif diff --git a/linux/include/stdlib.h b/linux/include/stdlib.h new file mode 100644 index 0000000..7565b46 --- /dev/null +++ b/linux/include/stdlib.h @@ -0,0 +1,43 @@ +#ifndef _STDLIB_H +#define _STDLIB_H + +#include + +#define EXIT_SUCCESS 0 +#define EXIT_FAILURE 1 + +extern double atof(const char * s); +extern int atoi(const char *s); +extern long atol(const char *s); +extern double strtod(const char *s, char **endp); +extern long strtol(const char *s, char **endp, int base); +extern unsigned long strtoul(const char *s, char **endp, int base); +extern int rand(void); +extern void srand(unsigned int seed); +extern void * calloc(size_t nobj, size_t size); +extern void * malloc(size_t size); +extern void * realloc(void * p, size_t size); +extern void free(void * p); +extern void abort(void); +extern volatile void exit(int status); +extern int atexit(void (*fcn)(void)); +extern int system(const char *s); +extern char * getenv(const char *name); +extern void * bsearch(const void *key, const void *base, + size_t n, size_t size, + int (*cmp)(const void *keyval, const void *datum)); +extern void qsort(void *base, size_t n, size_t size, + int (*cmp)(const void *,const void *)); +extern int abs(int n); +extern long labs(long n); +extern div_t div(int num, int denom); +extern ldiv_t ldiv(long num, long denom); +extern long getcwd(char * buf, size_t size); + +#ifdef __GNUC__ +#define __alloca(n) __builtin_alloca(n) +#else +#define __alloca(n) alloca(n) +#endif + +#endif diff --git a/linux/include/string.h b/linux/include/string.h new file mode 100644 index 0000000..05a6d9c --- /dev/null +++ b/linux/include/string.h @@ -0,0 +1,405 @@ +#ifndef _STRING_H_ +#define _STRING_H_ + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif + +extern char * strerror(int errno); + +/* + * This string-include defines all string functions as inline + * functions. Use gcc. It also assumes ds=es=data space, this should be + * normal. Most of the string-functions are rather heavily hand-optimized, + * see especially strtok,strstr,str[c]spn. They should work, but are not + * very easy to understand. Everything is done entirely within the register + * set, making the functions fast and clean. String instructions have been + * used through-out, making for "slightly" unclear code :-) + * + * (C) 1991 Linus Torvalds + */ + +extern inline char * strcpy(char * dest,const char *src) +{ +__asm__("cld\n" + "1:\tlodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b" + ::"S" (src),"D" (dest):"si","di","ax"); +return dest; +} + +extern inline char * strncpy(char * dest,const char *src,int count) +{ +__asm__("cld\n" + "1:\tdecl %2\n\t" + "js 2f\n\t" + "lodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n\t" + "rep\n\t" + "stosb\n" + "2:" + ::"S" (src),"D" (dest),"c" (count):"si","di","ax","cx"); +return dest; +} + +extern inline char * strcat(char * dest,const char * src) +{ +__asm__("cld\n\t" + "repne\n\t" + "scasb\n\t" + "decl %1\n" + "1:\tlodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b" + ::"S" (src),"D" (dest),"a" (0),"c" (0xffffffff):"si","di","ax","cx"); +return dest; +} + +extern inline char * strncat(char * dest,const char * src,int count) +{ +__asm__("cld\n\t" + "repne\n\t" + "scasb\n\t" + "decl %1\n\t" + "movl %4,%3\n" + "1:\tdecl %3\n\t" + "js 2f\n\t" + "lodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n" + "2:\txorl %2,%2\n\t" + "stosb" + ::"S" (src),"D" (dest),"a" (0),"c" (0xffffffff),"g" (count) + :"si","di","ax","cx"); +return dest; +} + +extern inline int strcmp(const char * cs,const char * ct) +{ +register int __res __asm__("ax"); +__asm__("cld\n" + "1:\tlodsb\n\t" + "scasb\n\t" + "jne 2f\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n\t" + "xorl %%eax,%%eax\n\t" + "jmp 3f\n" + "2:\tmovl $1,%%eax\n\t" + "jl 3f\n\t" + "negl %%eax\n" + "3:" + :"=a" (__res):"D" (cs),"S" (ct):"si","di"); +return __res; +} + +extern inline int strncmp(const char * cs,const char * ct,int count) +{ +register int __res __asm__("ax"); +__asm__("cld\n" + "1:\tdecl %3\n\t" + "js 2f\n\t" + "lodsb\n\t" + "scasb\n\t" + "jne 3f\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n" + "2:\txorl %%eax,%%eax\n\t" + "jmp 4f\n" + "3:\tmovl $1,%%eax\n\t" + "jl 4f\n\t" + "negl %%eax\n" + "4:" + :"=a" (__res):"D" (cs),"S" (ct),"c" (count):"si","di","cx"); +return __res; +} + +extern inline char * strchr(const char * s,char c) +{ +register char * __res __asm__("ax"); +__asm__("cld\n\t" + "movb %%al,%%ah\n" + "1:\tlodsb\n\t" + "cmpb %%ah,%%al\n\t" + "je 2f\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n\t" + "movl $1,%1\n" + "2:\tmovl %1,%0\n\t" + "decl %0" + :"=a" (__res):"S" (s),"0" (c):"si"); +return __res; +} + +extern inline char * strrchr(const char * s,char c) +{ +register char * __res __asm__("dx"); +__asm__("cld\n\t" + "movb %%al,%%ah\n" + "1:\tlodsb\n\t" + "cmpb %%ah,%%al\n\t" + "jne 2f\n\t" + "movl %%esi,%0\n\t" + "decl %0\n" + "2:\ttestb %%al,%%al\n\t" + "jne 1b" + :"=d" (__res):"0" (0),"S" (s),"a" (c):"ax","si"); +return __res; +} + +extern inline int strspn(const char * cs, const char * ct) +{ +register char * __res __asm__("si"); +__asm__("cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "movl %%ecx,%%edx\n" + "1:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 2f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "je 1b\n" + "2:\tdecl %0" + :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) + :"ax","cx","dx","di"); +return __res-cs; +} + +extern inline int strcspn(const char * cs, const char * ct) +{ +register char * __res __asm__("si"); +__asm__("cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "movl %%ecx,%%edx\n" + "1:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 2f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "jne 1b\n" + "2:\tdecl %0" + :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) + :"ax","cx","dx","di"); +return __res-cs; +} + +extern inline char * strpbrk(const char * cs,const char * ct) +{ +register char * __res __asm__("si"); +__asm__("cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "movl %%ecx,%%edx\n" + "1:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 2f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "jne 1b\n\t" + "decl %0\n\t" + "jmp 3f\n" + "2:\txorl %0,%0\n" + "3:" + :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) + :"ax","cx","dx","di"); +return __res; +} + +extern inline char * strstr(const char * cs,const char * ct) +{ +register char * __res __asm__("ax"); +__asm__("cld\n\t" \ + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */ + "movl %%ecx,%%edx\n" + "1:\tmovl %4,%%edi\n\t" + "movl %%esi,%%eax\n\t" + "movl %%edx,%%ecx\n\t" + "repe\n\t" + "cmpsb\n\t" + "je 2f\n\t" /* also works for empty string, see above */ + "xchgl %%eax,%%esi\n\t" + "incl %%esi\n\t" + "cmpb $0,-1(%%eax)\n\t" + "jne 1b\n\t" + "xorl %%eax,%%eax\n\t" + "2:" + :"=a" (__res):"0" (0),"c" (0xffffffff),"S" (cs),"g" (ct) + :"cx","dx","di","si"); +return __res; +} + +extern inline int strlen(const char * s) +{ +register int __res __asm__("cx"); +__asm__("cld\n\t" + "repne\n\t" + "scasb\n\t" + "notl %0\n\t" + "decl %0" + :"=c" (__res):"D" (s),"a" (0),"0" (0xffffffff):"di"); +return __res; +} + +extern char * ___strtok; + +extern inline char * strtok(char * s,const char * ct) +{ +register char * __res __asm__("si"); +__asm__("testl %1,%1\n\t" + "jne 1f\n\t" + "testl %0,%0\n\t" + "je 8f\n\t" + "movl %0,%1\n" + "1:\txorl %0,%0\n\t" + "movl $-1,%%ecx\n\t" + "xorl %%eax,%%eax\n\t" + "cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "je 7f\n\t" /* empty delimeter-string */ + "movl %%ecx,%%edx\n" + "2:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 7f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "je 2b\n\t" + "decl %1\n\t" + "cmpb $0,(%1)\n\t" + "je 7f\n\t" + "movl %1,%0\n" + "3:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 5f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "jne 3b\n\t" + "decl %1\n\t" + "cmpb $0,(%1)\n\t" + "je 5f\n\t" + "movb $0,(%1)\n\t" + "incl %1\n\t" + "jmp 6f\n" + "5:\txorl %1,%1\n" + "6:\tcmpb $0,(%0)\n\t" + "jne 7f\n\t" + "xorl %0,%0\n" + "7:\ttestl %0,%0\n\t" + "jne 8f\n\t" + "movl %0,%1\n" + "8:" + :"=b" (__res),"=S" (___strtok) + :"0" (___strtok),"1" (s),"g" (ct) + :"ax","cx","dx","di"); +return __res; +} + +extern inline void * memcpy(void * dest,const void * src, int n) +{ +__asm__("cld\n\t" + "rep\n\t" + "movsb" + ::"c" (n),"S" (src),"D" (dest) + :"cx","si","di"); +return dest; +} + +extern inline void * memmove(void * dest,const void * src, int n) +{ +if (dest + +struct stat { + dev_t st_dev; + ino_t st_ino; + umode_t st_mode; + nlink_t st_nlink; + uid_t st_uid; + gid_t st_gid; + dev_t st_rdev; + off_t st_size; + time_t st_atime; + time_t st_mtime; + time_t st_ctime; +}; + +#define S_IFMT 00170000 +#define S_IFREG 0100000 +#define S_IFBLK 0060000 +#define S_IFDIR 0040000 +#define S_IFCHR 0020000 +#define S_IFIFO 0010000 +#define S_ISUID 0004000 +#define S_ISGID 0002000 +#define S_ISVTX 0001000 + +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) + +#define S_IRWXU 00700 +#define S_IRUSR 00400 +#define S_IWUSR 00200 +#define S_IXUSR 00100 + +#define S_IRWXG 00070 +#define S_IRGRP 00040 +#define S_IWGRP 00020 +#define S_IXGRP 00010 + +#define S_IRWXO 00007 +#define S_IROTH 00004 +#define S_IWOTH 00002 +#define S_IXOTH 00001 + +extern int chmod(const char *_path, mode_t mode); +extern int fstat(int fildes, struct stat *stat_buf); +extern int mkdir(const char *_path, mode_t mode); +extern int mkfifo(const char *_path, mode_t mode); +extern int stat(const char *filename, struct stat *stat_buf); +extern mode_t umask(mode_t mask); + +#endif diff --git a/linux/include/sys/times.h b/linux/include/sys/times.h new file mode 100644 index 0000000..68d5bfb --- /dev/null +++ b/linux/include/sys/times.h @@ -0,0 +1,15 @@ +#ifndef _TIMES_H +#define _TIMES_H + +#include + +struct tms { + time_t tms_utime; + time_t tms_stime; + time_t tms_cutime; + time_t tms_cstime; +}; + +extern time_t times(struct tms * tp); + +#endif diff --git a/linux/include/sys/types.h b/linux/include/sys/types.h new file mode 100644 index 0000000..557aa31 --- /dev/null +++ b/linux/include/sys/types.h @@ -0,0 +1,46 @@ +#ifndef _SYS_TYPES_H +#define _SYS_TYPES_H + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif + +#ifndef _TIME_T +#define _TIME_T +typedef long time_t; +#endif + +#ifndef _PTRDIFF_T +#define _PTRDIFF_T +typedef long ptrdiff_t; +#endif + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +typedef int pid_t; +typedef unsigned short uid_t; +typedef unsigned char gid_t; +typedef unsigned short dev_t; +typedef unsigned short ino_t; +typedef unsigned short mode_t; +typedef unsigned short umode_t; +typedef unsigned char nlink_t; +typedef int daddr_t; +typedef long off_t; +typedef unsigned char u_char; +typedef unsigned short ushort; + +typedef struct { int quot,rem; } div_t; +typedef struct { long quot,rem; } ldiv_t; + +struct ustat { + daddr_t f_tfree; + ino_t f_tinode; + char f_fname[6]; + char f_fpack[6]; +}; + +#endif diff --git a/linux/include/sys/utsname.h b/linux/include/sys/utsname.h new file mode 100644 index 0000000..0a1c5a0 --- /dev/null +++ b/linux/include/sys/utsname.h @@ -0,0 +1,16 @@ +#ifndef _SYS_UTSNAME_H +#define _SYS_UTSNAME_H + +#include + +struct utsname { + char sysname[9]; + char nodename[9]; + char release[9]; + char version[9]; + char machine[9]; +}; + +extern int uname(struct utsname * utsbuf); + +#endif diff --git a/linux/include/sys/wait.h b/linux/include/sys/wait.h new file mode 100644 index 0000000..53190c2 --- /dev/null +++ b/linux/include/sys/wait.h @@ -0,0 +1,23 @@ +#ifndef _SYS_WAIT_H +#define _SYS_WAIT_H + +#include + +#define _LOW(v) ( (v) & 0377) +#define _HIGH(v) ( ((v) >> 8) & 0377) + +/* options for waitpid, WUNTRACED not supported */ +#define WNOHANG 1 +#define WUNTRACED 2 + +#define WIFEXITED(s) (!((s)&0xFF) +#define WIFSTOPPED(s) (((s)&0xFF)==0x7F) +#define WEXITSTATUS(s) (((s)>>8)&0xFF) +#define WTERMSIG(s) ((s)&0x7F) +#define WSTOPSIG(s) (((s)>>8)&0xFF) +#define WIFSIGNALED(s) (((unsigned int)(s)-1 & 0xFFFF) < 0xFF) + +pid_t wait(int *stat_loc); +pid_t waitpid(pid_t pid, int *stat_loc, int options); + +#endif diff --git a/linux/include/termios.h b/linux/include/termios.h new file mode 100644 index 0000000..2b7b913 --- /dev/null +++ b/linux/include/termios.h @@ -0,0 +1,228 @@ +#ifndef _TERMIOS_H +#define _TERMIOS_H + +#define TTY_BUF_SIZE 1024 + +/* 0x54 is just a magic number to make these relatively uniqe ('T') */ + +#define TCGETS 0x5401 +#define TCSETS 0x5402 +#define TCSETSW 0x5403 +#define TCSETSF 0x5404 +#define TCGETA 0x5405 +#define TCSETA 0x5406 +#define TCSETAW 0x5407 +#define TCSETAF 0x5408 +#define TCSBRK 0x5409 +#define TCXONC 0x540A +#define TCFLSH 0x540B +#define TIOCEXCL 0x540C +#define TIOCNXCL 0x540D +#define TIOCSCTTY 0x540E +#define TIOCGPGRP 0x540F +#define TIOCSPGRP 0x5410 +#define TIOCOUTQ 0x5411 +#define TIOCSTI 0x5412 +#define TIOCGWINSZ 0x5413 +#define TIOCSWINSZ 0x5414 +#define TIOCMGET 0x5415 +#define TIOCMBIS 0x5416 +#define TIOCMBIC 0x5417 +#define TIOCMSET 0x5418 +#define TIOCGSOFTCAR 0x5419 +#define TIOCSSOFTCAR 0x541A +#define TIOCINQ 0x541B + +struct winsize { + unsigned short ws_row; + unsigned short ws_col; + unsigned short ws_xpixel; + unsigned short ws_ypixel; +}; + +#define NCC 8 +struct termio { + unsigned short c_iflag; /* input mode flags */ + unsigned short c_oflag; /* output mode flags */ + unsigned short c_cflag; /* control mode flags */ + unsigned short c_lflag; /* local mode flags */ + unsigned char c_line; /* line discipline */ + unsigned char c_cc[NCC]; /* control characters */ +}; + +#define NCCS 17 +struct termios { + unsigned long c_iflag; /* input mode flags */ + unsigned long c_oflag; /* output mode flags */ + unsigned long c_cflag; /* control mode flags */ + unsigned long c_lflag; /* local mode flags */ + unsigned char c_line; /* line discipline */ + unsigned char c_cc[NCCS]; /* control characters */ +}; + +/* c_cc characters */ +#define VINTR 0 +#define VQUIT 1 +#define VERASE 2 +#define VKILL 3 +#define VEOF 4 +#define VTIME 5 +#define VMIN 6 +#define VSWTC 7 +#define VSTART 8 +#define VSTOP 9 +#define VSUSP 10 +#define VEOL 11 +#define VREPRINT 12 +#define VDISCARD 13 +#define VWERASE 14 +#define VLNEXT 15 +#define VEOL2 16 + +/* c_iflag bits */ +#define IGNBRK 0000001 +#define BRKINT 0000002 +#define IGNPAR 0000004 +#define PARMRK 0000010 +#define INPCK 0000020 +#define ISTRIP 0000040 +#define INLCR 0000100 +#define IGNCR 0000200 +#define ICRNL 0000400 +#define IUCLC 0001000 +#define IXON 0002000 +#define IXANY 0004000 +#define IXOFF 0010000 +#define IMAXBEL 0020000 + +/* c_oflag bits */ +#define OPOST 0000001 +#define OLCUC 0000002 +#define ONLCR 0000004 +#define OCRNL 0000010 +#define ONOCR 0000020 +#define ONLRET 0000040 +#define OFILL 0000100 +#define OFDEL 0000200 +#define NLDLY 0000400 +#define NL0 0000000 +#define NL1 0000400 +#define CRDLY 0003000 +#define CR0 0000000 +#define CR1 0001000 +#define CR2 0002000 +#define CR3 0003000 +#define TABDLY 0014000 +#define TAB0 0000000 +#define TAB1 0004000 +#define TAB2 0010000 +#define TAB3 0014000 +#define XTABS 0014000 +#define BSDLY 0020000 +#define BS0 0000000 +#define BS1 0020000 +#define VTDLY 0040000 +#define VT0 0000000 +#define VT1 0040000 +#define FFDLY 0040000 +#define FF0 0000000 +#define FF1 0040000 + +/* c_cflag bit meaning */ +#define CBAUD 0000017 +#define B0 0000000 /* hang up */ +#define B50 0000001 +#define B75 0000002 +#define B110 0000003 +#define B134 0000004 +#define B150 0000005 +#define B200 0000006 +#define B300 0000007 +#define B600 0000010 +#define B1200 0000011 +#define B1800 0000012 +#define B2400 0000013 +#define B4800 0000014 +#define B9600 0000015 +#define B19200 0000016 +#define B38400 0000017 +#define EXTA B19200 +#define EXTB B38400 +#define CSIZE 0000060 +#define CS5 0000000 +#define CS6 0000020 +#define CS7 0000040 +#define CS8 0000060 +#define CSTOPB 0000100 +#define CREAD 0000200 +#define CPARENB 0000400 +#define CPARODD 0001000 +#define HUPCL 0002000 +#define CLOCAL 0004000 +#define CIBAUD 03600000 /* input baud rate (not used) */ +#define CRTSCTS 020000000000 /* flow control */ + +#define PARENB CPARENB +#define PARODD CPARODD + +/* c_lflag bits */ +#define ISIG 0000001 +#define ICANON 0000002 +#define XCASE 0000004 +#define ECHO 0000010 +#define ECHOE 0000020 +#define ECHOK 0000040 +#define ECHONL 0000100 +#define NOFLSH 0000200 +#define TOSTOP 0000400 +#define ECHOCTL 0001000 +#define ECHOPRT 0002000 +#define ECHOKE 0004000 +#define FLUSHO 0010000 +#define PENDIN 0040000 +#define IEXTEN 0100000 + +/* modem lines */ +#define TIOCM_LE 0x001 +#define TIOCM_DTR 0x002 +#define TIOCM_RTS 0x004 +#define TIOCM_ST 0x008 +#define TIOCM_SR 0x010 +#define TIOCM_CTS 0x020 +#define TIOCM_CAR 0x040 +#define TIOCM_RNG 0x080 +#define TIOCM_DSR 0x100 +#define TIOCM_CD TIOCM_CAR +#define TIOCM_RI TIOCM_RNG + +/* tcflow() and TCXONC use these */ +#define TCOOFF 0 +#define TCOON 1 +#define TCIOFF 2 +#define TCION 3 + +/* tcflush() and TCFLSH use these */ +#define TCIFLUSH 0 +#define TCOFLUSH 1 +#define TCIOFLUSH 2 + +/* tcsetattr uses these */ +#define TCSANOW 0 +#define TCSADRAIN 1 +#define TCSAFLUSH 2 + +typedef int speed_t; + +extern speed_t cfgetispeed(struct termios *termios_p); +extern speed_t cfgetospeed(struct termios *termios_p); +extern int cfsetispeed(struct termios *termios_p, speed_t speed); +extern int cfsetospeed(struct termios *termios_p, speed_t speed); +extern int tcdrain(int fildes); +extern int tcflow(int fildes, int action); +extern int tcflush(int fildes, int queue_selector); +extern int tcgetattr(int fildes, struct termios *termios_p); +extern int tcsendbreak(int fildes, int duration); +extern int tcsetattr(int fildes, int optional_actions, + struct termios *termios_p); + +#endif diff --git a/linux/include/time.h b/linux/include/time.h new file mode 100644 index 0000000..d0a765d --- /dev/null +++ b/linux/include/time.h @@ -0,0 +1,42 @@ +#ifndef _TIME_H +#define _TIME_H + +#ifndef _TIME_T +#define _TIME_T +typedef long time_t; +#endif + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif + +#define CLOCKS_PER_SEC 100 + +typedef long clock_t; + +struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; +}; + +clock_t clock(void); +time_t time(time_t * tp); +double difftime(time_t time2, time_t time1); +time_t mktime(struct tm * tp); + +char * asctime(const struct tm * tp); +char * ctime(const time_t * tp); +struct tm * gmtime(const time_t *tp); +struct tm *localtime(const time_t * tp); +size_t strftime(char * s, size_t smax, const char * fmt, const struct tm * tp); +void tzset(void); + +#endif diff --git a/linux/include/unistd.h b/linux/include/unistd.h new file mode 100644 index 0000000..8c0dcf0 --- /dev/null +++ b/linux/include/unistd.h @@ -0,0 +1,287 @@ +#ifndef _UNISTD_H +#define _UNISTD_H + +/* ok, this may be a joke, but I'm working on it */ +#define _POSIX_VERSION 198808L + +#define _POSIX_CHOWN_RESTRICTED /* only root can do a chown (I think..) */ +#define _POSIX_NO_TRUNC /* no pathname truncation (but see in kernel) */ +#define _POSIX_VDISABLE '\0' /* character to disable things like ^C */ +/*#define _POSIX_SAVED_IDS */ /* we'll get to this yet */ +/*#define _POSIX_JOB_CONTROL */ /* we aren't there quite yet. Soon hopefully */ + +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#define STDERR_FILENO 2 + +#ifndef NULL +#define NULL ((void *)0) +#endif + +/* access */ +#define F_OK 0 +#define X_OK 1 +#define W_OK 2 +#define R_OK 4 + +/* lseek */ +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + +/* _SC stands for System Configuration. We don't use them much */ +#define _SC_ARG_MAX 1 +#define _SC_CHILD_MAX 2 +#define _SC_CLOCKS_PER_SEC 3 +#define _SC_NGROUPS_MAX 4 +#define _SC_OPEN_MAX 5 +#define _SC_JOB_CONTROL 6 +#define _SC_SAVED_IDS 7 +#define _SC_VERSION 8 + +/* more (possibly) configurable things - now pathnames */ +#define _PC_LINK_MAX 1 +#define _PC_MAX_CANON 2 +#define _PC_MAX_INPUT 3 +#define _PC_NAME_MAX 4 +#define _PC_PATH_MAX 5 +#define _PC_PIPE_BUF 6 +#define _PC_NO_TRUNC 7 +#define _PC_VDISABLE 8 +#define _PC_CHOWN_RESTRICTED 9 + +#include +#include +#include +#include + +#ifdef __LIBRARY__ + +#define __NR_setup 0 /* used only by init, to get system going */ +#define __NR_exit 1 +#define __NR_fork 2 +#define __NR_read 3 +#define __NR_write 4 +#define __NR_open 5 +#define __NR_close 6 +#define __NR_waitpid 7 +#define __NR_creat 8 +#define __NR_link 9 +#define __NR_unlink 10 +#define __NR_execve 11 +#define __NR_chdir 12 +#define __NR_time 13 +#define __NR_mknod 14 +#define __NR_chmod 15 +#define __NR_chown 16 +#define __NR_break 17 +#define __NR_stat 18 +#define __NR_lseek 19 +#define __NR_getpid 20 +#define __NR_mount 21 +#define __NR_umount 22 +#define __NR_setuid 23 +#define __NR_getuid 24 +#define __NR_stime 25 +#define __NR_ptrace 26 +#define __NR_alarm 27 +#define __NR_fstat 28 +#define __NR_pause 29 +#define __NR_utime 30 +#define __NR_stty 31 +#define __NR_gtty 32 +#define __NR_access 33 +#define __NR_nice 34 +#define __NR_ftime 35 +#define __NR_sync 36 +#define __NR_kill 37 +#define __NR_rename 38 +#define __NR_mkdir 39 +#define __NR_rmdir 40 +#define __NR_dup 41 +#define __NR_pipe 42 +#define __NR_times 43 +#define __NR_prof 44 +#define __NR_brk 45 +#define __NR_setgid 46 +#define __NR_getgid 47 +#define __NR_signal 48 +#define __NR_geteuid 49 +#define __NR_getegid 50 +#define __NR_acct 51 +#define __NR_phys 52 +#define __NR_lock 53 +#define __NR_ioctl 54 +#define __NR_fcntl 55 +#define __NR_mpx 56 +#define __NR_setpgid 57 +#define __NR_ulimit 58 +#define __NR_uname 59 +#define __NR_umask 60 +#define __NR_chroot 61 +#define __NR_ustat 62 +#define __NR_dup2 63 +#define __NR_getppid 64 +#define __NR_getpgrp 65 +#define __NR_setsid 66 +#define __NR_sigaction 67 +#define __NR_sgetmask 68 +#define __NR_ssetmask 69 +#define __NR_setreuid 70 +#define __NR_setregid 71 +#define __NR_sigsuspend 72 +#define __NR_sigpending 73 +#define __NR_sethostname 74 +#define __NR_setrlimit 75 +#define __NR_getrlimit 76 +#define __NR_getrusage 77 +#define __NR_gettimeofday 78 +#define __NR_settimeofday 79 +#define __NR_getgroups 80 +#define __NR_setgroups 81 +#define __NR_select 82 +#define __NR_symlink 83 +#define __NR_lstat 84 +#define __NR_readlink 85 +#define __NR_uselib 86 +#define __NR_execve2 87 +#define __NR_getdents 88 +#define __NR_pipe2 89 +#define __NR_sleep 90 +#define __NR_getcwd 91 +#define __NR_mmap 92 +#define __NR_munmap 93 +#define __NR_clone 94 + +#define _syscall0(type,name) \ +type name(void) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name)); \ +if (__res >= 0) \ + return (type) __res; \ +errno = -__res; \ +return -1; \ +} + +#define _syscall1(type,name,atype,a) \ +type name(atype a) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(a))); \ +if (__res >= 0) \ + return (type) __res; \ +errno = -__res; \ +return -1; \ +} + +#define _syscall2(type,name,atype,a,btype,b) \ +type name(atype a,btype b) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(a)),"c" ((long)(b))); \ +if (__res >= 0) \ + return (type) __res; \ +errno = -__res; \ +return -1; \ +} + +#define _syscall3(type,name,atype,a,btype,b,ctype,c) \ +type name(atype a,btype b,ctype c) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(a)),"c" ((long)(b)),"d" ((long)(c))); \ +if (__res>=0) \ + return (type) __res; \ +errno=-__res; \ +return -1; \ +} + +#endif /* __LIBRARY__ */ + +extern int errno; + +int access(const char * filename, mode_t mode); +int acct(const char * filename); +int alarm(int sec); +int brk(void * end_data_segment); +void * sbrk(ptrdiff_t increment); +int chdir(const char * filename); +int chmod(const char * filename, mode_t mode); +int chown(const char * filename, uid_t owner, gid_t group); +int chroot(const char * filename); +int close(int fildes); +int creat(const char * filename, mode_t mode); +int dup(int fildes); +int execve(const char * filename, char ** argv, char ** envp); +int execv(const char * pathname, char ** argv); +int execvp(const char * file, char ** argv); +int execl(const char * pathname, char * arg0, ...); +int execlp(const char * file, char * arg0, ...); +int execle(const char * pathname, char * arg0, ...); +volatile void exit(int status); +volatile void _exit(int status); +int fcntl(int fildes, int cmd, ...); +int fork(void); +int getpid(void); +int getuid(void); +int geteuid(void); +int getgid(void); +int getegid(void); +int ioctl(int fildes, int cmd, ...); +int kill(pid_t pid, int signal); +int link(const char * filename1, const char * filename2); +int lseek(int fildes, off_t offset, int origin); +int mknod(const char * filename, mode_t mode, dev_t dev); +int mount(const char * specialfile, const char * dir, int rwflag); +int nice(int val); +int open(const char * filename, int flag, ...); +int pause(void); +int pipe(int * fildes); +int read(int fildes, char * buf, off_t count); +int setpgrp(void); +int setpgid(pid_t pid,pid_t pgid); +int setuid(uid_t uid); +int setgid(gid_t gid); +void (*signal(int sig, void (*fn)(int)))(int); +int stat(const char * filename, struct stat * stat_buf); +int fstat(int fildes, struct stat * stat_buf); +int stime(time_t * tptr); +int sync(void); +time_t time(time_t * tloc); +time_t times(struct tms * tbuf); +int ulimit(int cmd, long limit); +mode_t umask(mode_t mask); +int umount(const char * specialfile); +int uname(struct utsname * name); +int unlink(const char * filename); +int ustat(dev_t dev, struct ustat * ubuf); +int utime(const char * filename, struct utimbuf * times); +pid_t waitpid(pid_t pid,int * wait_stat,int options); +pid_t wait(int * wait_stat); +int write(int fildes, const char * buf, off_t count); +int dup2(int oldfd, int newfd); +int getppid(void); +pid_t getpgrp(void); +pid_t setsid(void); +int execve2(const char *path, char * argv[], char * envp[]); +int getdents(unsigned int fd, struct linux_dirent *dirp, unsigned int count); +int pipe2(int fd[2], int flags); +int sleep(unsigned int seconds); +long getcwd(char * buf, size_t size); +long mmap(void *start, size_t len, int prot, int flags, + int fd, off_t off); +int munmap(void * start, size_t len); +int clone(int (*fn)(void *), void *child_stack, int flags, void *arg); + +#define __always_inline inline __attribute__((always_inline)) + +#endif diff --git a/linux/include/utime.h b/linux/include/utime.h new file mode 100644 index 0000000..83f07c7 --- /dev/null +++ b/linux/include/utime.h @@ -0,0 +1,13 @@ +#ifndef _UTIME_H +#define _UTIME_H + +#include /* I know - shouldn't do this, but .. */ + +struct utimbuf { + time_t actime; + time_t modtime; +}; + +extern int utime(const char *filename, struct utimbuf *times); + +#endif diff --git a/linux/init/main.c b/linux/init/main.c new file mode 100644 index 0000000..bd86a68 --- /dev/null +++ b/linux/init/main.c @@ -0,0 +1,216 @@ +/* + * linux/init/main.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include +#include + +/* + * we need this inline - forking from kernel space will result + * in NO COPY ON WRITE (!!!), until an execve is executed. This + * is no problem, but for the stack. This is handled by not letting + * main() use the stack at all after fork(). Thus, no function + * calls - which means inline code for fork too, as otherwise we + * would use the stack upon exit from 'fork()'. + * + * Actually only pause and fork are needed inline, so that there + * won't be any messing with the stack from main(), but we define + * some others too. + */ + +__always_inline _syscall0(int,fork) +__always_inline _syscall0(int,pause) +__always_inline _syscall1(int,setup,void *,BIOS) +__always_inline _syscall0(int,sync) + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +static char printbuf[1024]; + +extern int vsprintf(); +extern void init(void); +extern void blk_dev_init(void); +extern void chr_dev_init(void); +extern void hd_init(void); +extern void floppy_init(void); +extern void mem_init(long start, long end); +extern long rd_init(long mem_start, int length); +extern long kernel_mktime(struct tm * tm); +extern long startup_time; + +/* + * This is set up by the setup-routine at boot-time + */ +#define EXT_MEM_K (*(unsigned short *)0x90002) +#define DRIVE_INFO (*(struct drive_info *)0x90080) +#define ORIG_ROOT_DEV (*(unsigned short *)0x901FC) + +/* + * Yeah, yeah, it's ugly, but I cannot find how to do this correctly + * and this seems to work. I anybody has more info on the real-time + * clock I'd be interested. Most of this was trial and error, and some + * bios-listing reading. Urghh. + */ + +#define CMOS_READ(addr) ({ \ +outb_p(0x80|addr,0x70); \ +inb_p(0x71); \ +}) + +#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10) + +static void time_init(void) +{ + struct tm time; + + do { + time.tm_sec = CMOS_READ(0); + time.tm_min = CMOS_READ(2); + time.tm_hour = CMOS_READ(4); + time.tm_mday = CMOS_READ(7); + time.tm_mon = CMOS_READ(8); + time.tm_year = CMOS_READ(9); + } while (time.tm_sec != CMOS_READ(0)); + BCD_TO_BIN(time.tm_sec); + BCD_TO_BIN(time.tm_min); + BCD_TO_BIN(time.tm_hour); + BCD_TO_BIN(time.tm_mday); + BCD_TO_BIN(time.tm_mon); + BCD_TO_BIN(time.tm_year); + time.tm_mon--; + startup_time = kernel_mktime(&time); +} + +static long memory_end = 0; +static long buffer_memory_end = 0; +static long main_memory_start = 0; + +struct drive_info { char dummy[32]; } drive_info; + +void main(void) /* This really IS void, no error here. */ +{ /* The startup routine assumes (well, ...) this */ +/* + * Interrupts are still disabled. Do necessary setups, then + * enable them + */ + ROOT_DEV = ORIG_ROOT_DEV; + __asm__ volatile ("cld"); /* by wyj */ + drive_info = DRIVE_INFO; + memory_end = (1<<20) + (EXT_MEM_K<<10); + memory_end &= 0xfffff000; + if (memory_end > 16*1024*1024) + memory_end = 16*1024*1024; + if (memory_end > 12*1024*1024) + buffer_memory_end = 4*1024*1024; + else if (memory_end > 6*1024*1024) + buffer_memory_end = 2*1024*1024; + else + buffer_memory_end = 1*1024*1024; + main_memory_start = buffer_memory_end; +#ifdef RAMDISK + main_memory_start += rd_init(main_memory_start, RAMDISK*1024); +#endif + mem_init(main_memory_start,memory_end); + trap_init(); + blk_dev_init(); + chr_dev_init(); + tty_init(); + time_init(); + sched_init(); + buffer_init(buffer_memory_end); + hd_init(); + floppy_init(); + sti(); + move_to_user_mode(); + if (!fork()) { /* we count on this going ok */ + init(); + } +/* + * NOTE!! For any other task 'pause()' would mean we have to get a + * signal to awaken, but task0 is the sole exception (see 'schedule()') + * as task 0 gets activated at every idle moment (when no other tasks + * can run). For task0 'pause()' just means we go check if some other + * task can run, and if not we return here. + */ + for(;;) pause(); +} + +static int printf(const char *fmt, ...) +{ + va_list args; + int i; + + va_start(args, fmt); + write(1,printbuf,i=vsprintf(printbuf, fmt, args)); + va_end(args); + return i; +} + +static char * argv_rc[] = { "/bin/sh", NULL }; +static char * envp_rc[] = { "HOME=/", NULL, NULL }; + +static char * argv[] = { "-/bin/sh",NULL }; +static char * envp[] = { "HOME=/usr/root", NULL, NULL }; + +void init(void) +{ + int pid,i; + + setup((void *) &drive_info); + (void) open("/dev/tty0",O_RDWR,0); + (void) dup(0); + (void) dup(0); + printf("%d buffers = %d bytes buffer space\n\r",NR_BUFFERS, + NR_BUFFERS*BLOCK_SIZE); + printf("Free mem: %d bytes\n\r",memory_end-main_memory_start); + if (!(pid=fork())) { + close(0); + if (open("/etc/rc",O_RDONLY,0)) + _exit(1); + execve("/bin/sh",argv_rc,envp_rc); + _exit(2); + } + if (pid>0) + while (pid != wait(&i)) + /* nothing */; + while (1) { + if ((pid=fork())<0) { + printf("Fork failed in init\r\n"); + continue; + } + if (!pid) { + close(0);close(1);close(2); + setsid(); + (void) open("/dev/tty0",O_RDWR,0); + (void) dup(0); + (void) dup(0); + _exit(execve("/bin/sh",argv,envp)); + } + while (1) + if (pid == wait(&i)) + break; + printf("\n\rchild %d died with code %04x\n\r",pid,i); + sync(); + } + _exit(0); /* NOTE! _exit, not exit() */ +} + +void print_nr(int sid) +{ + if (sid > 86) + printk(" --syscall: sid=%d, pid=%d\n", sid, current->pid); +} diff --git a/linux/init/main.c.rej b/linux/init/main.c.rej new file mode 100644 index 0000000..375d6cd --- /dev/null +++ b/linux/init/main.c.rej @@ -0,0 +1,12 @@ +--- init/main.c 2016-08-08 09:40:13.000000000 +0800 ++++ init/main.c 2021-07-06 14:16:56.000000000 +0800 +@@ -208,3 +208,9 @@ + } + _exit(0); /* NOTE! _exit, not exit() */ + } ++ ++void print_nr(int sid) ++{ ++ if (sid > 86) ++ printk(" --syscall: sid=%d, pid=%d\n", sid, current->pid); ++} diff --git a/linux/init/main.o b/linux/init/main.o new file mode 100644 index 0000000000000000000000000000000000000000..402337d5adb9c8255176c94ae5c6dcef1ed10573 GIT binary patch literal 12204 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 literal 0 HcmV?d00001 diff --git a/linux/kernel/Makefile b/linux/kernel/Makefile new file mode 100644 index 0000000..049ce9f --- /dev/null +++ b/linux/kernel/Makefile @@ -0,0 +1,83 @@ +# +# Makefile for the FREAX-kernel. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). +# + +AR =ar +AS =as +LD =ld +LDFLAGS =-m elf_i386 -Ttext 0 -e startup_32 +CC =gcc -march=i386 +CFLAGS =-w -g -fomit-frame-pointer -finline-functions \ + -nostdinc -fno-stack-protector -mcld -I../include +CPP =gcc -E -nostdinc -I../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< + +OBJS = sched.o system_call.o traps.o asm.o fork.o \ + panic.o printk.o vsprintf.o sys.o exit.o \ + signal.o mktime.o + +kernel.o: $(OBJS) + $(LD) -r -o kernel.o $(OBJS) + sync + +clean: + rm -f core *.o *.a tmp_make keyboard.s + for i in *.c;do rm -f `basename $$i .c`.s;done + (cd chr_drv; make clean) + (cd blk_drv; make clean) + (cd math; make clean) + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + (cd chr_drv; make dep) + (cd blk_drv; make dep) + +### Dependencies: +exit.s exit.o : exit.c ../include/errno.h ../include/signal.h \ + ../include/sys/types.h ../include/sys/wait.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \ + ../include/linux/kernel.h ../include/linux/tty.h ../include/termios.h \ + ../include/asm/segment.h +fork.s fork.o : fork.c ../include/errno.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h ../include/asm/system.h +mktime.s mktime.o : mktime.c ../include/time.h +panic.s panic.o : panic.c ../include/linux/kernel.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h +printk.s printk.o : printk.c ../include/stdarg.h ../include/stddef.h \ + ../include/linux/kernel.h +sched.s sched.o : sched.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/linux/kernel.h ../include/linux/sys.h \ + ../include/linux/fdreg.h ../include/asm/system.h ../include/asm/io.h \ + ../include/asm/segment.h +signal.s signal.o : signal.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/linux/kernel.h ../include/asm/segment.h +sys.s sys.o : sys.c ../include/errno.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/tty.h \ + ../include/termios.h ../include/linux/kernel.h ../include/asm/segment.h \ + ../include/sys/times.h ../include/sys/utsname.h +traps.s traps.o : traps.c ../include/string.h ../include/linux/head.h \ + ../include/linux/sched.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/system.h ../include/asm/segment.h ../include/asm/io.h +vsprintf.s vsprintf.o : vsprintf.c ../include/stdarg.h ../include/string.h diff --git a/linux/kernel/asm.o b/linux/kernel/asm.o new file mode 100644 index 0000000000000000000000000000000000000000..a89ec75e6e7dea54ae5b8d9b94ba28158b48a77f GIT binary patch literal 1740 zcma)+O=uHQ5XWcRv}sSZ2!7VKN<_gLTB@F^9;`i75B*Zxid{F^*K{@67k4+Yil|sH zrv|)<7wbhmD2RBl?IjkWde90*5b+=$0#XkiyeY()eY^2xiRgpv|Nnb$W-{}d&9$S) z`xHe1e<@H4e+Zz*gMDtmZfJlym?EDGMTQ55PMti_THiEx4rWIp9YYK2@F4#&zm)${ zdN=d3q3K?@?aYKaK6ZL^#Z6j!Eo4c^qL61o9t*iIN>a0?YOGAXEIm;+mxxDna!+$#}~zPg>(|qFzDh#3ziNdZhm7_Gt$HGtt5$ zJb2(2L6$5XS6!9gLaHZMBo4WC>dM&)G@;K)yrt}^F9miX@AvkI_oDBSxC{Lei4UOf zm-sOHL5cg&k4j8uHzb}wuS$Fw{k+6C(HA7XgML}!hv?r*yy$rny5~3eqzG`)Jgcaa zE(!kRc@m2M7T_NN{u$t~^pB$a<^Z<^_)viR13VsJBf!@Kd@I0Ua+O&Yx70Y-8Aw() zvWCvYA?PfYNr0I$z%ZR|;8|u(Ciz8(@r %eax + xchgl %ebx,(%esp) # &function <-> %ebx + pushl %ecx + pushl %edx + pushl %edi + pushl %esi + pushl %ebp + push %ds + push %es + push %fs + pushl %eax # error code + lea 44(%esp),%eax # offset + pushl %eax + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + mov %ax,%fs + call *%ebx + addl $8,%esp + pop %fs + pop %es + pop %ds + popl %ebp + popl %esi + popl %edi + popl %edx + popl %ecx + popl %ebx + popl %eax + iret + +invalid_TSS: + pushl $do_invalid_TSS + jmp error_code + +segment_not_present: + pushl $do_segment_not_present + jmp error_code + +stack_segment: + pushl $do_stack_segment + jmp error_code + +general_protection: + pushl $do_general_protection + jmp error_code + diff --git a/linux/kernel/blk_drv/Makefile b/linux/kernel/blk_drv/Makefile new file mode 100644 index 0000000..1fb57f9 --- /dev/null +++ b/linux/kernel/blk_drv/Makefile @@ -0,0 +1,58 @@ +# +# Makefile for the FREAX-kernel block device drivers. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). +# + +AR =ar +AS =as +LD =ld +LDFLAGS =-s -x +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -finline-functions -nostdinc -fno-stack-protector -I../../include +CPP =gcc -E -nostdinc -I../../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< + +OBJS = ll_rw_blk.o floppy.o hd.o ramdisk.o + +blk_drv.a: $(OBJS) + $(AR) rcs blk_drv.a $(OBJS) + sync + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +floppy.s floppy.o : floppy.c ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/sys/types.h ../../include/linux/mm.h \ + ../../include/signal.h ../../include/linux/kernel.h \ + ../../include/linux/fdreg.h ../../include/asm/system.h \ + ../../include/asm/io.h ../../include/asm/segment.h blk.h +hd.s hd.o : hd.c ../../include/linux/config.h ../../include/linux/sched.h \ + ../../include/linux/head.h ../../include/linux/fs.h \ + ../../include/sys/types.h ../../include/linux/mm.h ../../include/signal.h \ + ../../include/linux/kernel.h ../../include/linux/hdreg.h \ + ../../include/asm/system.h ../../include/asm/io.h \ + ../../include/asm/segment.h blk.h +ll_rw_blk.s ll_rw_blk.o : ll_rw_blk.c ../../include/errno.h ../../include/linux/sched.h \ + ../../include/linux/head.h ../../include/linux/fs.h \ + ../../include/sys/types.h ../../include/linux/mm.h ../../include/signal.h \ + ../../include/linux/kernel.h ../../include/asm/system.h blk.h diff --git a/linux/kernel/blk_drv/blk.h b/linux/kernel/blk_drv/blk.h new file mode 100644 index 0000000..7a69b71 --- /dev/null +++ b/linux/kernel/blk_drv/blk.h @@ -0,0 +1,140 @@ +#ifndef _BLK_H +#define _BLK_H + +#define NR_BLK_DEV 7 +/* + * NR_REQUEST is the number of entries in the request-queue. + * NOTE that writes may use only the low 2/3 of these: reads + * take precedence. + * + * 32 seems to be a reasonable number: enough to get some benefit + * from the elevator-mechanism, but not so much as to lock a lot of + * buffers when they are in the queue. 64 seems to be too many (easily + * long pauses in reading when heavy writing/syncing is going on) + */ +#define NR_REQUEST 32 + +/* + * Ok, this is an expanded form so that we can use the same + * request for paging requests when that is implemented. In + * paging, 'bh' is NULL, and 'waiting' is used to wait for + * read/write completion. + */ +struct request { + int dev; /* -1 if no request */ + int cmd; /* READ or WRITE */ + int errors; + unsigned long sector; + unsigned long nr_sectors; + char * buffer; + struct task_struct * waiting; + struct buffer_head * bh; + struct request * next; +}; + +/* + * This is used in the elevator algorithm: Note that + * reads always go before writes. This is natural: reads + * are much more time-critical than writes. + */ +#define IN_ORDER(s1,s2) \ +((s1)->cmd<(s2)->cmd || (s1)->cmd==(s2)->cmd && \ +((s1)->dev < (s2)->dev || ((s1)->dev == (s2)->dev && \ +(s1)->sector < (s2)->sector))) + +struct blk_dev_struct { + void (*request_fn)(void); + struct request * current_request; +}; + +extern struct blk_dev_struct blk_dev[NR_BLK_DEV]; +extern struct request request[NR_REQUEST]; +extern struct task_struct * wait_for_request; + +#ifdef MAJOR_NR + +/* + * Add entries as needed. Currently the only block devices + * supported are hard-disks and floppies. + */ + +#if (MAJOR_NR == 1) +/* ram disk */ +#define DEVICE_NAME "ramdisk" +#define DEVICE_REQUEST do_rd_request +#define DEVICE_NR(device) ((device) & 7) +#define DEVICE_ON(device) +#define DEVICE_OFF(device) + +#elif (MAJOR_NR == 2) +/* floppy */ +#define DEVICE_NAME "floppy" +#define DEVICE_INTR do_floppy +#define DEVICE_REQUEST do_fd_request +#define DEVICE_NR(device) ((device) & 3) +#define DEVICE_ON(device) floppy_on(DEVICE_NR(device)) +#define DEVICE_OFF(device) floppy_off(DEVICE_NR(device)) + +#elif (MAJOR_NR == 3) +/* harddisk */ +#define DEVICE_NAME "harddisk" +#define DEVICE_INTR do_hd +#define DEVICE_REQUEST do_hd_request +#define DEVICE_NR(device) (MINOR(device)/5) +#define DEVICE_ON(device) +#define DEVICE_OFF(device) + +#elif (MAJOR_NR > 3) +/* unknown blk device */ +#error "unknown blk device" + +#endif + +#define CURRENT (blk_dev[MAJOR_NR].current_request) +#define CURRENT_DEV DEVICE_NR(CURRENT->dev) + +#ifdef DEVICE_INTR +void (*DEVICE_INTR)(void) = NULL; +#endif +static void (DEVICE_REQUEST)(void); + +static inline void unlock_buffer(struct buffer_head * bh) +{ + if (!bh->b_lock) + printk(DEVICE_NAME ": free buffer being unlocked\n"); + bh->b_lock=0; + wake_up(&bh->b_wait); +} + +static inline void end_request(int uptodate) +{ + DEVICE_OFF(CURRENT->dev); + if (CURRENT->bh) { + CURRENT->bh->b_uptodate = uptodate; + unlock_buffer(CURRENT->bh); + } + if (!uptodate) { + printk(DEVICE_NAME " I/O error\n\r"); + printk("dev %04x, block %d\n\r",CURRENT->dev, + CURRENT->bh->b_blocknr); + } + wake_up(&CURRENT->waiting); + wake_up(&wait_for_request); + CURRENT->dev = -1; + CURRENT = CURRENT->next; +} + +#define INIT_REQUEST \ +repeat: \ + if (!CURRENT) \ + return; \ + if (MAJOR(CURRENT->dev) != MAJOR_NR) \ + panic(DEVICE_NAME ": request list destroyed"); \ + if (CURRENT->bh) { \ + if (!CURRENT->bh->b_lock) \ + panic(DEVICE_NAME ": block not locked"); \ + } + +#endif + +#endif diff --git a/linux/kernel/blk_drv/blk_drv.a b/linux/kernel/blk_drv/blk_drv.a new file mode 100644 index 0000000000000000000000000000000000000000..361638e02d4acb8206cfad0924300a41c4390588 GIT binary patch literal 52200 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 literal 0 HcmV?d00001 diff --git a/linux/kernel/blk_drv/floppy.c b/linux/kernel/blk_drv/floppy.c new file mode 100644 index 0000000..b1a7f3a --- /dev/null +++ b/linux/kernel/blk_drv/floppy.c @@ -0,0 +1,463 @@ +/* + * linux/kernel/floppy.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * 02.12.91 - Changed to static variables to indicate need for reset + * and recalibrate. This makes some things easier (output_byte reset + * checking etc), and means less interrupt jumping in case of errors, + * so the code is hopefully easier to understand. + */ + +/* + * This file is certainly a mess. I've tried my best to get it working, + * but I don't like programming floppies, and I have only one anyway. + * Urgel. I should check for more errors, and do more graceful error + * recovery. Seems there are problems with several drives. I've tried to + * correct them. No promises. + */ + +/* + * As with hd.c, all routines within this file can (and will) be called + * by interrupts, so extreme caution is needed. A hardware interrupt + * handler may not sleep, or a kernel panic will happen. Thus I cannot + * call "floppy-on" directly, but have to set a special timer interrupt + * etc. + * + * Also, I'm not certain this works on more than 1 floppy. Bugs may + * abund. + */ + +#include +#include +#include +#include +#include +#include +#include + +#define MAJOR_NR 2 +#include "blk.h" + +static int recalibrate = 0; +static int reset = 0; +static int seek = 0; + +extern unsigned char current_DOR; + +#define immoutb_p(val,port) \ +__asm__("outb %0,%1\n\tjmp 1f\n1:\tjmp 1f\n1:"::"a" ((char) (val)),"i" (port)) + +#define TYPE(x) ((x)>>2) +#define DRIVE(x) ((x)&0x03) +/* + * Note that MAX_ERRORS=8 doesn't imply that we retry every bad read + * max 8 times - some types of errors increase the errorcount by 2, + * so we might actually retry only 5-6 times before giving up. + */ +#define MAX_ERRORS 8 + +/* + * globals used by 'result()' + */ +#define MAX_REPLIES 7 +static unsigned char reply_buffer[MAX_REPLIES]; +#define ST0 (reply_buffer[0]) +#define ST1 (reply_buffer[1]) +#define ST2 (reply_buffer[2]) +#define ST3 (reply_buffer[3]) + +/* + * This struct defines the different floppy types. Unlike minix + * linux doesn't have a "search for right type"-type, as the code + * for that is convoluted and weird. I've got enough problems with + * this driver as it is. + * + * The 'stretch' tells if the tracks need to be boubled for some + * types (ie 360kB diskette in 1.2MB drive etc). Others should + * be self-explanatory. + */ +static struct floppy_struct { + unsigned int size, sect, head, track, stretch; + unsigned char gap,rate,spec1; +} floppy_type[] = { + { 0, 0,0, 0,0,0x00,0x00,0x00 }, /* no testing */ + { 720, 9,2,40,0,0x2A,0x02,0xDF }, /* 360kB PC diskettes */ + { 2400,15,2,80,0,0x1B,0x00,0xDF }, /* 1.2 MB AT-diskettes */ + { 720, 9,2,40,1,0x2A,0x02,0xDF }, /* 360kB in 720kB drive */ + { 1440, 9,2,80,0,0x2A,0x02,0xDF }, /* 3.5" 720kB diskette */ + { 720, 9,2,40,1,0x23,0x01,0xDF }, /* 360kB in 1.2MB drive */ + { 1440, 9,2,80,0,0x23,0x01,0xDF }, /* 720kB in 1.2MB drive */ + { 2880,18,2,80,0,0x1B,0x00,0xCF }, /* 1.44MB diskette */ +}; +/* + * Rate is 0 for 500kb/s, 2 for 300kbps, 1 for 250kbps + * Spec1 is 0xSH, where S is stepping rate (F=1ms, E=2ms, D=3ms etc), + * H is head unload time (1=16ms, 2=32ms, etc) + * + * Spec2 is (HLD<<1 | ND), where HLD is head load time (1=2ms, 2=4 ms etc) + * and ND is set means no DMA. Hardcoded to 6 (HLD=6ms, use DMA). + */ + +extern void floppy_interrupt(void); +extern char tmp_floppy_area[1024]; + +/* + * These are global variables, as that's the easiest way to give + * information to interrupts. They are the data used for the current + * request. + */ +static int cur_spec1 = -1; +static int cur_rate = -1; +static struct floppy_struct * floppy = floppy_type; +static unsigned char current_drive = 0; +static unsigned char sector = 0; +static unsigned char head = 0; +static unsigned char track = 0; +static unsigned char seek_track = 0; +static unsigned char current_track = 255; +static unsigned char command = 0; +unsigned char selected = 0; +struct task_struct * wait_on_floppy_select = NULL; + +void floppy_deselect(unsigned int nr) +{ + if (nr != (current_DOR & 3)) + printk("floppy_deselect: drive not selected\n\r"); + selected = 0; + wake_up(&wait_on_floppy_select); +} + +/* + * floppy-change is never called from an interrupt, so we can relax a bit + * here, sleep etc. Note that floppy-on tries to set current_DOR to point + * to the desired drive, but it will probably not survive the sleep if + * several floppies are used at the same time: thus the loop. + */ +int floppy_change(unsigned int nr) +{ +repeat: + floppy_on(nr); + while ((current_DOR & 3) != nr && selected) + interruptible_sleep_on(&wait_on_floppy_select); + if ((current_DOR & 3) != nr) + goto repeat; + if (inb(FD_DIR) & 0x80) { + floppy_off(nr); + return 1; + } + floppy_off(nr); + return 0; +} + +#define copy_buffer(from,to) \ +__asm__("cld ; rep ; movsl" \ + ::"c" (BLOCK_SIZE/4),"S" ((long)(from)),"D" ((long)(to)) \ + ) + +static void setup_DMA(void) +{ + long addr = (long) CURRENT->buffer; + + cli(); + if (addr >= 0x100000) { + addr = (long) tmp_floppy_area; + if (command == FD_WRITE) + copy_buffer(CURRENT->buffer,tmp_floppy_area); + } +/* mask DMA 2 */ + immoutb_p(4|2,10); +/* output command byte. I don't know why, but everyone (minix, */ +/* sanches & canton) output this twice, first to 12 then to 11 */ + __asm__("outb %%al,$12\n\tjmp 1f\n1:\tjmp 1f\n1:\t" + "outb %%al,$11\n\tjmp 1f\n1:\tjmp 1f\n1:":: + "a" ((char) ((command == FD_READ)?DMA_READ:DMA_WRITE))); +/* 8 low bits of addr */ + immoutb_p(addr,4); + addr >>= 8; +/* bits 8-15 of addr */ + immoutb_p(addr,4); + addr >>= 8; +/* bits 16-19 of addr */ + immoutb_p(addr,0x81); +/* low 8 bits of count-1 (1024-1=0x3ff) */ + immoutb_p(0xff,5); +/* high 8 bits of count-1 */ + immoutb_p(3,5); +/* activate DMA 2 */ + immoutb_p(0|2,10); + sti(); +} + +static void output_byte(char byte) +{ + int counter; + unsigned char status; + + if (reset) + return; + for(counter = 0 ; counter < 10000 ; counter++) { + status = inb_p(FD_STATUS) & (STATUS_READY | STATUS_DIR); + if (status == STATUS_READY) { + outb(byte,FD_DATA); + return; + } + } + reset = 1; + printk("Unable to send byte to FDC\n\r"); +} + +static int result(void) +{ + int i = 0, counter, status; + + if (reset) + return -1; + for (counter = 0 ; counter < 10000 ; counter++) { + status = inb_p(FD_STATUS)&(STATUS_DIR|STATUS_READY|STATUS_BUSY); + if (status == STATUS_READY) + return i; + if (status == (STATUS_DIR|STATUS_READY|STATUS_BUSY)) { + if (i >= MAX_REPLIES) + break; + reply_buffer[i++] = inb_p(FD_DATA); + } + } + reset = 1; + printk("Getstatus times out\n\r"); + return -1; +} + +static void bad_flp_intr(void) +{ + CURRENT->errors++; + if (CURRENT->errors > MAX_ERRORS) { + floppy_deselect(current_drive); + end_request(0); + } + if (CURRENT->errors > MAX_ERRORS/2) + reset = 1; + else + recalibrate = 1; +} + +/* + * Ok, this interrupt is called after a DMA read/write has succeeded, + * so we check the results, and copy any buffers. + */ +static void rw_interrupt(void) +{ + if (result() != 7 || (ST0 & 0xf8) || (ST1 & 0xbf) || (ST2 & 0x73)) { + if (ST1 & 0x02) { + printk("Drive %d is write protected\n\r",current_drive); + floppy_deselect(current_drive); + end_request(0); + } else + bad_flp_intr(); + do_fd_request(); + return; + } + if (command == FD_READ && (unsigned long)(CURRENT->buffer) >= 0x100000) + copy_buffer(tmp_floppy_area,CURRENT->buffer); + floppy_deselect(current_drive); + end_request(1); + do_fd_request(); +} + +inline void setup_rw_floppy(void) +{ + setup_DMA(); + do_floppy = rw_interrupt; + output_byte(command); + output_byte(head<<2 | current_drive); + output_byte(track); + output_byte(head); + output_byte(sector); + output_byte(2); /* sector size = 512 */ + output_byte(floppy->sect); + output_byte(floppy->gap); + output_byte(0xFF); /* sector size (0xff when n!=0 ?) */ + if (reset) + do_fd_request(); +} + +/* + * This is the routine called after every seek (or recalibrate) interrupt + * from the floppy controller. Note that the "unexpected interrupt" routine + * also does a recalibrate, but doesn't come here. + */ +static void seek_interrupt(void) +{ +/* sense drive status */ + output_byte(FD_SENSEI); + if (result() != 2 || (ST0 & 0xF8) != 0x20 || ST1 != seek_track) { + bad_flp_intr(); + do_fd_request(); + return; + } + current_track = ST1; + setup_rw_floppy(); +} + +/* + * This routine is called when everything should be correctly set up + * for the transfer (ie floppy motor is on and the correct floppy is + * selected). + */ +static void transfer(void) +{ + if (cur_spec1 != floppy->spec1) { + cur_spec1 = floppy->spec1; + output_byte(FD_SPECIFY); + output_byte(cur_spec1); /* hut etc */ + output_byte(6); /* Head load time =6ms, DMA */ + } + if (cur_rate != floppy->rate) + outb_p(cur_rate = floppy->rate,FD_DCR); + if (reset) { + do_fd_request(); + return; + } + if (!seek) { + setup_rw_floppy(); + return; + } + do_floppy = seek_interrupt; + if (seek_track) { + output_byte(FD_SEEK); + output_byte(head<<2 | current_drive); + output_byte(seek_track); + } else { + output_byte(FD_RECALIBRATE); + output_byte(head<<2 | current_drive); + } + if (reset) + do_fd_request(); +} + +/* + * Special case - used after a unexpected interrupt (or reset) + */ +static void recal_interrupt(void) +{ + output_byte(FD_SENSEI); + if (result()!=2 || (ST0 & 0xE0) == 0x60) + reset = 1; + else + recalibrate = 0; + do_fd_request(); +} + +void unexpected_floppy_interrupt(void) +{ + output_byte(FD_SENSEI); + if (result()!=2 || (ST0 & 0xE0) == 0x60) + reset = 1; + else + recalibrate = 1; +} + +static void recalibrate_floppy(void) +{ + recalibrate = 0; + current_track = 0; + current_drive = 1; /* by wyj, ?? */ + do_floppy = recal_interrupt; + output_byte(FD_RECALIBRATE); + output_byte(head<<2 | current_drive); + if (reset) + do_fd_request(); +} + +static void reset_interrupt(void) +{ + output_byte(FD_SENSEI); + (void) result(); + output_byte(FD_SPECIFY); + output_byte(cur_spec1); /* hut etc */ + output_byte(6); /* Head load time =6ms, DMA */ + do_fd_request(); +} + +/* + * reset is done by pulling bit 2 of DOR low for a while. + */ +static void reset_floppy(void) +{ + int i; + + reset = 0; + cur_spec1 = -1; + cur_rate = -1; + recalibrate = 1; + printk("Reset-floppy called\n\r"); + cli(); + do_floppy = reset_interrupt; + outb_p(current_DOR & ~0x04,FD_DOR); + for (i=0 ; i<100 ; i++) + __asm__("nop"); + outb(current_DOR,FD_DOR); + sti(); +} + +static void floppy_on_interrupt(void) +{ +/* We cannot do a floppy-select, as that might sleep. We just force it */ + selected = 1; + if (current_drive != (current_DOR & 3)) { + current_DOR &= 0xFC; + current_DOR |= current_drive; + outb(current_DOR,FD_DOR); + add_timer(2,&transfer); + } else + transfer(); +} + +void do_fd_request(void) +{ + unsigned int block; + + seek = 0; + if (reset) { + reset_floppy(); + return; + } + if (recalibrate) { + recalibrate_floppy(); + return; + } + INIT_REQUEST; + floppy = (MINOR(CURRENT->dev)>>2) + floppy_type; + if (current_drive != CURRENT_DEV) + seek = 1; + current_drive = CURRENT_DEV; + block = CURRENT->sector; + if (block+2 > floppy->size) { + end_request(0); + goto repeat; + } + sector = block % floppy->sect; + block /= floppy->sect; + head = block % floppy->head; + track = block / floppy->head; + seek_track = track << floppy->stretch; + if (seek_track != current_track) + seek = 1; + sector++; + if (CURRENT->cmd == READ) + command = FD_READ; + else if (CURRENT->cmd == WRITE) + command = FD_WRITE; + else + panic("do_fd_request: unknown command"); + add_timer(ticks_to_floppy_on(current_drive),&floppy_on_interrupt); +} + +void floppy_init(void) +{ + blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; + set_trap_gate(0x26,&floppy_interrupt); + outb(inb_p(0x21)&~0x40,0x21); +} diff --git a/linux/kernel/blk_drv/floppy.o b/linux/kernel/blk_drv/floppy.o new file mode 100644 index 0000000000000000000000000000000000000000..b7a09029fa3991150dad69f394926f0299050354 GIT binary patch literal 16608 zcmb7q3wTx4weDPNKiI5fCxHM46JZB~#5OM=Dk9M!h&&Y$l&E#Hlf9B`^Vo4efOr+F z!D>kLh+0p3#3o?1_qMgAJ*OTdXv0I$qqf|h-dZ1@rM*I9>3L|4&1ti)O3zxaL#poeC4ugxC0=MZOm1)kYR@Sq$q{?k=XiR+i zSYyOsRcfLZAc}8{FENLn-S@FasqRDX-M6%4<_>(f4|L{dn%>888k#gl1PPokJAD0h z*LJ;^Cw-cNkYs;y*XDj3r?U8j3)!cspBRY2IaQ5yzID)h=hi-zqMRaRu-oB5Vh|mU<3K5mUt`h?w&;IJ|_@=WV$=?5; z(0YHUWEl0(>7v{@N^LuG%twn18AdDtkjyMYtBcS?8AQr$)!N6Dc=s`CFD)r$(NOES z*5{zDIT*{?$5Dz1htO8&tDw_<1fXmvLY`&m3gm8?f15cpzh`wx+5L+RXqWAyml$2? ziyqBFIs0Ksxw7uVV{`Zm%(I7sO)x*0g58k>EE+tB=p55?dk7<>o6CJ($M7qk z4-fYhqaFfq@Pv8aA#HZzaVfr(#j{xKs8@`rJNyjtq0#aj@E8&kl0g&n?iWGz)Ow}* z2OK4ecGON0(OY!QTf*ENJkDa7B)-ADaMf9Til7jn$sa*sFa*0@XUuf*n1Sm$6H4dq zn98B+I~R`yhf>*tKY{9CGwclI>OtG{3a!A%uoxC+rsY0!eD?s#EhR*qS*i8+d{;U9g{v;QO2;ZfC8*!wA{CyQsmn z8d+#*H{b0B=ZxHA7(d;!?E|SAw3~~P!Ea-*|IYB;$zn!BT#hsKzKqHfSUK|dD_@Rc z*FoRlEI2rBG>V}x_z)f(jmaaUaRRox&TPV4bYyvQryxqy;BSzo<1D@Q2`nxD|FOhW zca7-TP18qx9A5wz3Bw87`RJ-qMN(%fI*!SGg)H*jY)iS zoid#g9xA_wGRMs_CmP@}o&$I?`2E7}>e`%w3BW576m z@Pr3$EA<3tsl?&9V}!dmOjf)m=m=bpHJ9=|OeJY68}B&o5{vF%YwC&JgE_u=5<&qT zHTeF2qCZs_Os8zQm#TUR|Mo z#zLbF*5=)J@ZW!rHqJ%Sj;Vb1aVB65%;;2K2%=iY4|WvGGS-=iM}2hv)X*&HrMK&h z;Ywf7TfHd=iH^UUJ|iz*B*R%-^a_ z5OTGoe67d})o;~!efX%T--kqT?YR1sf06#V#uw{TUYn)V8e8KX z9i0n9jS1Th)u$U9?L?^Fj0)#u+&>YlFqiiL;3m> z@H#J;CcT03JTrI=nd|QWGsO%VWHz$51!k~kgefwES3~BMgv^}!M2j#bX0ULiq}0sm zh((pZj;71Z;P+XgnJP2LCEj7G&EPvUtxFb|!J9`)7MVF|8n}Tmt~G;?vy+;++zhUV z?+&xn%xR+9jZ|A^1_LypndN3MO4FKIX$CK21a6``tIgn@bmuE%)|$a@u#RTdo56t* zW}_J_W*uE}lNsDGQnJYm{)7f@W}{IvCza|{{!NTqvl)DnB@vdiA_iOFTm4U9ro#+2 z(dz~>DKnUl0rp49Y&C;R=%~$D-);uGA@eu>3CdqJb6TS*B$LX23*8+w zkqH|Sk}NM%*S{T)tuUhJLqM7PptHdDl^9G}uR-q9t}5&Mko&^aHmzGx-M5L2daZd- z^hHPqtnV=O>YcQ0hs4+5r0sUviE^8sV{L+WzD8zW$l5}kCe|&nZf4zP(xui^>c`kt zne{W;zlC%KUUi^bNLN`uCf!Q=^QivkdIynns-qCZjZ411baLb?GXS4|<)6<5z`Br%)znbdA4p$7+UrRs ztCasj(gEu|$}b|F4f$NRR^`8xbg9Q~aOpCS9d+p{k6rK5)gC(uJC{*^0py@-NiTvtru>UZ*P<@y z%SkVVT=|!fT<&4GmXcfzFO~lal50ItkjqG}_cVgMlH^8D6UgNxZ}RAww}SL0D}twg zCF!UY#?bj!6(F9?%6}N4=i9&8Vk zQJ_=A)6f=G#&ptNYb%0oob9AkAp&O`1uA|1+H&q+GPT1C00r&@2*j;5!n$@%P) zP5T$%YwTKqR`b~jo1HLsVt@8!)HT{z{9~=s29+t_W1rg?BkD~3A(ihq1(r9k#;ylx zrab|fp2$#{_6b#bSmPWR{F+vK-Bs%mwX+xx^ZpPt3YzfXRmb%3W@SFiewaIvH&|C=Li!JMk|L+e+p^9yJ^r%k^I)6-+h{IzRJ8y2qFF)ZAs zb3PWsds&J7debr9qzbM;d`8;*og)q_HKT$NdH3rm1&6N8xQMQP!fUDzv|wfy0Goz4 z(4m7`68eyJ&NaAB);W?{jQ#}%52hEOzOgIxHqBgb@btgZv2!_VMT{gQS2(pEV2o}t z_CZqbNM1t+%*_VR+m23glyPH5Ju<}FJvV5 z7(D-YVba)j9JS8<3)}mS;Uq(AiB5(e8Mi}8&8}h({>@m0-mcR&hEbznD_BNt7K8b7 zqX(q96R*X>1Ek96fzQJOb>R$pUhW8(R)w?ZLWLus2|p`e4tsh9@vFjbf;TUp2Z_&9 zKn2d*23KK%DqKzr8?My~C|8ALY@@?5IY7a+?9i=_;0Oha*o(w>b(I$($nw%?;XNSD zWDlM`&rIrZ-7!;+AVh(l@o7g;Oo5*En;pR{3M%Q%7DsR{1@FvRMq z5S$mo7RNJj4M_hZaN{xrN;*HsMlu-lDj}I;qMA|7^{wm zBOl9iP0Vbv?PmWUp#|>jeKJ_OQs}=c`&2uo*W~iZ7PKFC$bEg_}rn9L$ADY6BVyc>h+tkSw@S7IqOlMbW z3m&~(Yvub!I$$DwrhpZ%$xf{>E}Q;^^`>Q(tjHf@^DIk@Ou~#R$U+n+W7MZtk7?=b z@eci?<4_^gGCU|6RU6mJIgVj=bw-8M$>^L?Gb@xh?;9fziS}4&u{4w^rR`bbwr@o~ zBXX{|Cv1sy)yJ;R9*N0_5$V)77x=OnCyQjkY5?7>EGO6x31|xac|eo zz;pLf!T%sNR{G1H@4cb-hQ96FyNb8$-C5Zi=uP*2Nh_@MKiS*Are^!j-rm5;-lpDk zrKi)JZAh8N`gU)B-I|*Imrfse=|Jx_Ox3*?Pz4$;cTXt)MT~pJWPWM82CkyJ>;M&W2@#!z_4XlEq*~`aFU1gp0F9nL94%|?;=Eh#9JzcB=vytRGth1lget)3XoRuG_>pj_z*xwM?8EC>c9q2vT z`*i=#mmca5oQ$pNg|jD3A2J6wISt_yFOw85fYKe|#Fns=1`2mbiBuTRh89(i3#rX~ zMp6;x3t1E;(hVtGW5I;bxQudik`b7RVAGsRL>laHeJs_6{a!5Gj+|^sf{5^LN~QI) zA)QFr?WwT7>QdOy&r=DzqqQ^a+@+~>TO`?{8Y8J@JE77^I~r~S4INxm#p)B0l&#wB zttoZoRU1M}Le&)uDyl=}ZIMJnb4_gif(t=6v_?baO`-C}cv}qDT!~1VUEUGLB@k}v z${SP9>@%AJ{?eTKm^K!W)izgKOCihtiQPPzY>5dcwh08Xj{fLE=w%vmM zwZ+r8VnXv5!B2$NjVcskw;|Z5W2@FU?g)7m)d>BljcOgS4jXZ9(6w#ebI65Yygj4E zMhPyWZl@ZWbu;b|)Q1_1Fz+Ir2xZjcJ)w#>HiqGJtchNw)RssL+VR9l-|Ve+L)u9R z?YY*#Wv0R~g_9k2!(3I5oCtFy(GQ3)!YbX)mB7aJqVA5<2^DFLB-%#D9>y@lNE1C5Qf(cQ_2Eduj$rIDB@oEQ z7*?Cca0hNBcuVX=5yFnl8STp3k#l+=k_Zts09IQNcBsJ2CJL7fN z>LXG3)xpF{z#YBlr18Y0z%{zt+0nFX#b~3$vS3Qc@qU$c%^3(}8#5j&0+w4R*v>P8 zWe)3}>j6?0KE|B=5%ex?J*bpZZ4tiw zLE2fS%jcyvH+S3I>WZrB^BpPoA3XB#W8Ah*8Mgsx0Ww<;2y>yuQEFw{XaqO9>BGJ zQ;xS3J_WF&bdTYT$JaO(T^`i*d}d$_4r2_C!ut?(tD);2z^U71F3Bk{S3~2l?w_hi zcDCWo223R!Y<8)H-CB|2CZd9r-se=*<5sXD!M9FC#CCnU2~(jlt}3FMj?~w4O>!zZ z61*>(aLJe<;_kw&fc8`c--6iis0#eU%&x$;#o25)b?j!m!>~a?hyI%%9?20t-a+dR z=RxLyfo1&gpD?_va6h5>xM@cv&JpS`2XHJ^=L@g5^q^1ROv-=Kxu1{_vw@lR)?Vz? zr#;qn?Nx%NUDw`T9NSsf{ZNk|`b|IdAp%If`L6TeUAehYcH_*89M<6)#!m|pqt#6c@GRr^K0#OS zH4Mg=Aag&i9_~fQ_-CBwYB)$eexAgawClPTdh1;Va(CQzgU;+nZLLy$kTEWk@OAq^ z+RYV^Y9khcACZuc+iqr?EZSP8R0u|jd(X{0Zkjs zWtJ}o@-u)he>1&aXh+|pn7>Exb@?XHFJ|!kpPsvx&>r7|A$%DJ@?F5<44!#3D}#Rk z^tl=Qw?Mx#!h6(rL6?m1K0T)HdzSrw7G>@`l>7_e-FGK>+H&8Skk9;%qo5Tf@9wu)erjAf_WW89;g?*14R9?ISGo^$*hbFDFY8pKh&J=KDnhZY;Bl5q#9 zFm5pZ_S$0PxctTE9*OzL(b)|dPmxk4M`7V`U>-Th#c)3sPPW>12hRCw{JGYN^XSFd z-#ZcF)U3~V3Dps4k2R=Ntf3_tPPxZmnwR$V6$AeRGQ#8RtnZuj%s23QnT9!GmMeun zWmez^%RmF0t!3n^klVsvFW4w}ClU3x16jXY(JABlLueNIGsCgwNW3jmFIc()O;2c1ee?3NO-c+3^~h2$3~bqRUc;d;w@ z8-(v-Ir{mi;P)tppGSxY27jAsU~%Hlq$ualS1JEkE-q+PfOa z_STC$Odj^P34bpUemqJ*? zkqF;g1o`_X>i<;mMZs4Ee=qn4BI>;dG#4s$MtG0kk!K5@C0HuBRPbuSje-q=&4OEq z@MDMI!$7w4ZSv^v9wPetT`4~x_>$n8g8wDRA6L;{f#4Fs>jdis?-%S7{DI(eg2#yH z_s@m@KScQRIuZW-QRE*BPQ*)5zB{w%#Ux8hyBNiu)l|h z`SYsa?}(U3e;}frKZ$%;Z~`{W)DH?yCPHtz@G}II_N4yu4N4&2gkNO)#egm- za}lQsKb;8s#l$&iU*szUuM%t#ObB)g-YfWk;KPD_g3kyZ68yQ~8-k|<|19`dL5u4( z{G28@ORz$4q2MyXI>AQ4gdl(WOFKIR`Q9MU-+vH)B*=X%dHwzX{#tnMPbs$$BO>>s zMEwgZ;9TKX32qeRzLI+UtupcJg5MH+N{~ONV)=mJtAcL`ek7QKv80~<^%t;I_zMI( z1@95uDfqacem|k!PlZ1y_^RORf+qz(6#QIpB65}OPZcZ{)bB0GFBYCZtES#Hf?pB5 zMR2p=-GUDY{*&NSg3k&b5j-yVmY{x*p`DL}*S}W---)@z_8%48BlttXqk?Y>=5XDI z{)>XY5_IVbi zA9DoDiO7kS!mkycXH@Fx_XRK|@|_}oO!$8l{yE_f3BDon6T*KW{9gsVTyN2CKCu+* zg#zfA^aP{pAddX_&*E(x$s`Dr|?Iw`|xL)@Wn*% zrNYk_exdMJ2)|nR>xI8r_?Yk=!rw3aBf|Fz|CI1Q75<3e%OcnB1^DqB;r}40xIROk zO+@Za68;?FX9-^+{1V}>7GAIKsNX>zb2BaFcM1PB;U5zIABBHH_#X;J?$(P+$4Cr Y;3I-R5ahXo`aEY4KN8Fat^E=Fe@Zg9Y5)KL literal 0 HcmV?d00001 diff --git a/linux/kernel/blk_drv/hd.c b/linux/kernel/blk_drv/hd.c new file mode 100644 index 0000000..4bc7d6a --- /dev/null +++ b/linux/kernel/blk_drv/hd.c @@ -0,0 +1,351 @@ +/* + * linux/kernel/hd.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This is the low-level hd interrupt support. It traverses the + * request-list, using interrupts to jump between functions. As + * all the functions are called within interrupts, we may not + * sleep. Special care is recommended. + * + * modified by Drew Eckhardt to check nr of hd's from the CMOS. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAJOR_NR 3 +#include "blk.h" + +#define CMOS_READ(addr) ({ \ +outb_p(0x80|addr,0x70); \ +inb_p(0x71); \ +}) + +/* Max read/write errors/sector */ +#define MAX_ERRORS 7 +#define MAX_HD 2 + +static void recal_intr(void); + +static int recalibrate = 0; /* 1, wen */ +static int reset = 0; + +/* + * This struct defines the HD's and their types. + */ +struct hd_i_struct { + int head,sect,cyl,wpcom,lzone,ctl; + }; +#ifdef HD_TYPE +struct hd_i_struct hd_info[] = { HD_TYPE }; +#define NR_HD ((sizeof (hd_info))/(sizeof (struct hd_i_struct))) +#else +struct hd_i_struct hd_info[] = { {0,0,0,0,0,0},{0,0,0,0,0,0} }; +static int NR_HD = 0; +#endif + +static struct hd_struct { + long start_sect; + long nr_sects; +} hd[5*MAX_HD]={{0,0},}; + +#define port_read(port,buf,nr) \ +__asm__("cld;rep;insw"::"d" (port),"D" (buf),"c" (nr)) + +#define port_write(port,buf,nr) \ +__asm__("cld;rep;outsw"::"d" (port),"S" (buf),"c" (nr)) + +extern void hd_interrupt(void); +extern void rd_load(void); + +/* This may be used only once, enforced by 'static int callable' */ +int sys_setup(void * BIOS) +{ + static int callable = 1; + int i,drive; + unsigned char cmos_disks; + struct partition *p; + struct buffer_head * bh; + + if (!callable) + return -1; + callable = 0; +#ifndef HD_TYPE + for (drive=0 ; drive<2 ; drive++) { + hd_info[drive].cyl = *(unsigned short *) BIOS; + hd_info[drive].head = *(unsigned char *) (2+BIOS); + hd_info[drive].wpcom = *(unsigned short *) (5+BIOS); + hd_info[drive].ctl = *(unsigned char *) (8+BIOS); + hd_info[drive].lzone = *(unsigned short *) (12+BIOS); + hd_info[drive].sect = *(unsigned char *) (14+BIOS); + BIOS += 16; + } + if (hd_info[1].cyl) + NR_HD=2; + else + NR_HD=1; +#endif + for (i=0 ; i are the primary drives in the system, and + the ones reflected as drive 1 or 2. + + The first drive is stored in the high nibble of CMOS + byte 0x12, the second in the low nibble. This will be + either a 4 bit drive type or 0xf indicating use byte 0x19 + for an 8 bit type, drive 1, 0x1a for drive 2 in CMOS. + + Needless to say, a non-zero value means we have + an AT controller hard disk for that drive. + + + */ + + if ((cmos_disks = CMOS_READ(0x12)) & 0xf0) + if (cmos_disks & 0x0f) + NR_HD = 2; + else + NR_HD = 1; + else + NR_HD = 0; + for (i = NR_HD ; i < 2 ; i++) { + hd[i*5].start_sect = 0; + hd[i*5].nr_sects = 0; + } + for (drive=0 ; driveb_data[510] != 0x55 || (unsigned char) + bh->b_data[511] != 0xAA) { + printk("Bad partition table on drive %d\n\r",drive); + panic(""); + } + p = 0x1BE + (void *)bh->b_data; + for (i=1;i<5;i++,p++) { + hd[i+5*drive].start_sect = p->start_sect; + hd[i+5*drive].nr_sects = p->nr_sects; + } + brelse(bh); + } + if (NR_HD) + printk("Partition table%s ok.\n\r",(NR_HD>1)?"s":""); + rd_load(); + mount_root(); + return (0); +} + +static int controller_ready(void) +{ + /* int retries=10000; */ + int retries=100000; + + /* while (--retries && (inb_p(HD_STATUS)&0xc0)!=0x40); */ + while (--retries && (inb_p(HD_STATUS)&0x80)); + return (retries); +} + +static int win_result(void) +{ + int i=inb_p(HD_STATUS); + + if ((i & (BUSY_STAT | READY_STAT | WRERR_STAT | SEEK_STAT | ERR_STAT)) + == (READY_STAT | SEEK_STAT)) + return(0); /* ok */ + if (i&1) i=inb(HD_ERROR); + return (1); +} + +static void hd_out(unsigned int drive,unsigned int nsect,unsigned int sect, + unsigned int head,unsigned int cyl,unsigned int cmd, + void (*intr_addr)(void)) +{ + register int port asm("dx"); + + if (drive>1 || head>15) + panic("Trying to write bad sector"); + if (!controller_ready()) + panic("HD controller not ready"); + do_hd = intr_addr; + outb_p(hd_info[drive].ctl,HD_CMD); + port=HD_DATA; + outb_p(hd_info[drive].wpcom>>2,++port); + outb_p(nsect,++port); + outb_p(sect,++port); + outb_p(cyl,++port); + outb_p(cyl>>8,++port); + outb_p(0xA0|(drive<<4)|head,++port); + outb(cmd,++port); +} + +static int drive_busy(void) +{ + unsigned int i; + + for (i = 0; i < 10000; i++) + if (READY_STAT == (inb_p(HD_STATUS) & (BUSY_STAT|READY_STAT))) + break; + i = inb(HD_STATUS); + i &= BUSY_STAT | READY_STAT | SEEK_STAT; + if (i == READY_STAT | SEEK_STAT) + return(0); + printk("HD controller times out\n\r"); + return(1); +} + +static void reset_controller(void) +{ + int i; + + outb(4,HD_CMD); + for(i = 0; i < 100; i++) nop(); + outb(hd_info[0].ctl & 0x0f ,HD_CMD); + if (drive_busy()) + printk("HD-controller still busy\n\r"); + if ((i = inb(HD_ERROR)) != 1) + printk("HD-controller reset failed: %02x\n\r",i); +} + +static void reset_hd(int nr) +{ + reset_controller(); + hd_out(nr,hd_info[nr].sect,hd_info[nr].sect,hd_info[nr].head-1, + hd_info[nr].cyl,WIN_SPECIFY,&recal_intr); +} + +void unexpected_hd_interrupt(void) +{ + printk("Unexpected HD interrupt\n\r"); +} + +static void bad_rw_intr(void) +{ + if (++CURRENT->errors >= MAX_ERRORS) + end_request(0); + if (CURRENT->errors > MAX_ERRORS/2) + reset = 1; +} + +static void read_intr(void) +{ + if (win_result()) { + bad_rw_intr(); + do_hd_request(); + return; + } + port_read(HD_DATA,CURRENT->buffer,256); + CURRENT->errors = 0; + CURRENT->buffer += 512; + CURRENT->sector++; + if (--CURRENT->nr_sectors) { + do_hd = &read_intr; + return; + } + end_request(1); + do_hd_request(); +} + +static void write_intr(void) +{ + if (win_result()) { + bad_rw_intr(); + do_hd_request(); + return; + } + if (--CURRENT->nr_sectors) { + CURRENT->sector++; + CURRENT->buffer += 512; + do_hd = &write_intr; + port_write(HD_DATA,CURRENT->buffer,256); + return; + } + end_request(1); + do_hd_request(); +} + +static void recal_intr(void) +{ + if (win_result()) + bad_rw_intr(); + do_hd_request(); +} + +void do_hd_request(void) +{ + int i,r; + unsigned int block,dev; + unsigned int sec,head,cyl; + unsigned int nsect; + + INIT_REQUEST; + dev = MINOR(CURRENT->dev); + block = CURRENT->sector; + if (dev >= 5*NR_HD || block+2 > hd[dev].nr_sects) { + end_request(0); + goto repeat; + } + block += hd[dev].start_sect; + dev /= 5; + __asm__("divl %4":"=a" (block),"=d" (sec):"0" (block),"1" (0), + "r" (hd_info[dev].sect)); + __asm__("divl %4":"=a" (cyl),"=d" (head):"0" (block),"1" (0), + "r" (hd_info[dev].head)); + sec++; + nsect = CURRENT->nr_sectors; + if (reset) { + reset = 0; + recalibrate = 1; + reset_hd(CURRENT_DEV); + return; + } + if (recalibrate) { + recalibrate = 0; + hd_out(dev,hd_info[CURRENT_DEV].sect,0,0,0, + WIN_RESTORE,&recal_intr); + return; + } + if (CURRENT->cmd == WRITE) { + hd_out(dev,nsect,sec,head,cyl,WIN_WRITE,&write_intr); + for(i=0 ; i<3000 && !(r=inb_p(HD_STATUS)&DRQ_STAT) ; i++) + /* nothing */ ; + if (!r) { + bad_rw_intr(); + goto repeat; + } + port_write(HD_DATA,CURRENT->buffer,256); + } else if (CURRENT->cmd == READ) { + hd_out(dev,nsect,sec,head,cyl,WIN_READ,&read_intr); + } else + panic("unknown hd-command"); +} + +void hd_init(void) +{ + blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; + set_intr_gate(0x2E,&hd_interrupt); + outb_p(inb_p(0x21)&0xfb,0x21); + outb(inb_p(0xA1)&0xbf,0xA1); +} diff --git a/linux/kernel/blk_drv/hd.o b/linux/kernel/blk_drv/hd.o new file mode 100644 index 0000000000000000000000000000000000000000..ae78419973777275389a4d12ca0e3dd4b8b65cbd GIT binary patch literal 15524 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 literal 0 HcmV?d00001 diff --git a/linux/kernel/blk_drv/ll_rw_blk.c b/linux/kernel/blk_drv/ll_rw_blk.c new file mode 100644 index 0000000..f57d998 --- /dev/null +++ b/linux/kernel/blk_drv/ll_rw_blk.c @@ -0,0 +1,165 @@ +/* + * linux/kernel/blk_dev/ll_rw.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This handles all read/write requests to block devices + */ +#include +#include +#include +#include + +#include "blk.h" + +/* + * The request-struct contains all necessary data + * to load a nr of sectors into memory + */ +struct request request[NR_REQUEST]; + +/* + * used to wait on when there are no free requests + */ +struct task_struct * wait_for_request = NULL; + +/* blk_dev_struct is: + * do_request-address + * next-request + */ +struct blk_dev_struct blk_dev[NR_BLK_DEV] = { + { NULL, NULL }, /* no_dev */ + { NULL, NULL }, /* dev mem */ + { NULL, NULL }, /* dev fd */ + { NULL, NULL }, /* dev hd */ + { NULL, NULL }, /* dev ttyx */ + { NULL, NULL }, /* dev tty */ + { NULL, NULL } /* dev lp */ +}; + +static inline void lock_buffer(struct buffer_head * bh) +{ + cli(); + while (bh->b_lock) + sleep_on(&bh->b_wait); + bh->b_lock=1; + sti(); +} + +static inline void unlock_buffer(struct buffer_head * bh) +{ + if (!bh->b_lock) + printk("ll_rw_block.c: buffer not locked\n\r"); + bh->b_lock = 0; + wake_up(&bh->b_wait); +} + +/* + * add-request adds a request to the linked list. + * It disables interrupts so that it can muck with the + * request-lists in peace. + */ +static void add_request(struct blk_dev_struct * dev, struct request * req) +{ + struct request * tmp; + + req->next = NULL; + cli(); + if (req->bh) + req->bh->b_dirt = 0; + if (!(tmp = dev->current_request)) { + dev->current_request = req; + sti(); + (dev->request_fn)(); + return; + } + for ( ; tmp->next ; tmp=tmp->next) + if ((IN_ORDER(tmp,req) || + !IN_ORDER(tmp,tmp->next)) && + IN_ORDER(req,tmp->next)) + break; + req->next=tmp->next; + tmp->next=req; + sti(); +} + +static void make_request(int major,int rw, struct buffer_head * bh) +{ + struct request * req; + int rw_ahead; + +/* WRITEA/READA is special case - it is not really needed, so if the */ +/* buffer is locked, we just forget about it, else it's a normal read */ + if (rw_ahead = (rw == READA || rw == WRITEA)) { + if (bh->b_lock) + return; + if (rw == READA) + rw = READ; + else + rw = WRITE; + } + if (rw!=READ && rw!=WRITE) + panic("Bad block dev command, must be R/W/RA/WA"); + lock_buffer(bh); + if ((rw == WRITE && !bh->b_dirt) || (rw == READ && bh->b_uptodate)) { + unlock_buffer(bh); + return; + } +repeat: +/* we don't allow the write-requests to fill up the queue completely: + * we want some room for reads: they take precedence. The last third + * of the requests are only for reads. + */ + if (rw == READ) + req = request+NR_REQUEST; + else + req = request+((NR_REQUEST*2)/3); +/* find an empty request */ + while (--req >= request) + if (req->dev<0) + break; +/* if none found, sleep on new requests: check for rw_ahead */ + if (req < request) { + if (rw_ahead) { + unlock_buffer(bh); + return; + } + sleep_on(&wait_for_request); + goto repeat; + } +/* fill up the request-info, and add it to the queue */ + req->dev = bh->b_dev; + req->cmd = rw; + req->errors=0; + req->sector = bh->b_blocknr<<1; + req->nr_sectors = 2; + req->buffer = bh->b_data; + req->waiting = NULL; + req->bh = bh; + req->next = NULL; + add_request(major+blk_dev,req); +} + +void ll_rw_block(int rw, struct buffer_head * bh) +{ + unsigned int major; + + if ((major=MAJOR(bh->b_dev)) >= NR_BLK_DEV || + !(blk_dev[major].request_fn)) { + printk("Trying to read nonexistent block-device\n\r"); + return; + } + make_request(major,rw,bh); +} + +void blk_dev_init(void) +{ + int i; + + for (i=0 ; itqW|G3-m^MS3&`uzz-*@i0 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 literal 0 HcmV?d00001 diff --git a/linux/kernel/blk_drv/ramdisk.c b/linux/kernel/blk_drv/ramdisk.c new file mode 100644 index 0000000..dcdc15a --- /dev/null +++ b/linux/kernel/blk_drv/ramdisk.c @@ -0,0 +1,126 @@ +/* + * linux/kernel/blk_drv/ramdisk.c + * + * Written by Theodore Ts'o, 12/2/91 + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#define MAJOR_NR 1 +#include "blk.h" + +char *rd_start; +int rd_length = 0; + +void do_rd_request(void) +{ + int len; + char *addr; + + INIT_REQUEST; + addr = rd_start + (CURRENT->sector << 9); + len = CURRENT->nr_sectors << 9; + if ((MINOR(CURRENT->dev) != 1) || (addr+len > rd_start+rd_length)) { + end_request(0); + goto repeat; + } + if (CURRENT-> cmd == WRITE) { + (void ) memcpy(addr, + CURRENT->buffer, + len); + } else if (CURRENT->cmd == READ) { + (void) memcpy(CURRENT->buffer, + addr, + len); + } else + panic("unknown ramdisk-command"); + end_request(1); + goto repeat; +} + +/* + * Returns amount of memory which needs to be reserved. + */ +long rd_init(long mem_start, int length) +{ + int i; + char *cp; + + blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; + rd_start = (char *) mem_start; + rd_length = length; + cp = rd_start; + for (i=0; i < length; i++) + *cp++ = '\0'; + return(length); +} + +/* + * If the root device is the ram disk, try to load it. + * In order to do this, the root device is originally set to the + * floppy, and we later change it to be ram disk. + */ +void rd_load(void) +{ + struct buffer_head *bh; + struct super_block s; + int block = 256; /* Start at block 256 */ + int i = 1; + int nblocks; + char *cp; /* Move pointer */ + + if (!rd_length) + return; + printk("Ram disk: %d bytes, starting at 0x%x\n", rd_length, + (int) rd_start); + if (MAJOR(ROOT_DEV) != 2) + return; + bh = breada(ROOT_DEV,block+1,block,block+2,-1); + if (!bh) { + printk("Disk error while looking for ramdisk!\n"); + return; + } + __asm__ volatile ("cld"); /* by wyj */ + *((struct d_super_block *) &s) = *((struct d_super_block *) bh->b_data); + brelse(bh); + if (s.s_magic != SUPER_MAGIC) + /* No ram disk image present, assume normal floppy boot */ + return; + nblocks = s.s_nzones << s.s_log_zone_size; + if (nblocks > (rd_length >> BLOCK_SIZE_BITS)) { + printk("Ram disk image too big! (%d blocks, %d avail)\n", + nblocks, rd_length >> BLOCK_SIZE_BITS); + return; + } + printk("Loading %d bytes into ram disk... 0000k", + nblocks << BLOCK_SIZE_BITS); + cp = rd_start; + while (nblocks) { + if (nblocks > 2) + bh = breada(ROOT_DEV, block, block+1, block+2, -1); + else + bh = bread(ROOT_DEV, block); + if (!bh) { + printk("I/O error on block %d, aborting load\n", + block); + return; + } + (void) memcpy(cp, bh->b_data, BLOCK_SIZE); + brelse(bh); + printk("\010\010\010\010\010%4dk",i); + cp += BLOCK_SIZE; + block++; + nblocks--; + i++; + } + printk("\010\010\010\010\010done \n"); + ROOT_DEV=0x0101; +} diff --git a/linux/kernel/blk_drv/ramdisk.o b/linux/kernel/blk_drv/ramdisk.o new file mode 100644 index 0000000000000000000000000000000000000000..bb5cc54bc4f104213c7a72a217a5a8c50e501b9a GIT binary patch literal 10660 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 tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +console.s console.o : console.c ../../include/linux/sched.h \ + ../../include/linux/head.h ../../include/linux/fs.h \ + ../../include/sys/types.h ../../include/linux/mm.h ../../include/signal.h \ + ../../include/linux/tty.h ../../include/termios.h ../../include/asm/io.h \ + ../../include/asm/system.h +serial.s serial.o : serial.c ../../include/linux/tty.h ../../include/termios.h \ + ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/sys/types.h ../../include/linux/mm.h \ + ../../include/signal.h ../../include/asm/system.h ../../include/asm/io.h +tty_io.s tty_io.o : tty_io.c ../../include/ctype.h ../../include/errno.h \ + ../../include/signal.h ../../include/sys/types.h \ + ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/linux/mm.h ../../include/linux/tty.h \ + ../../include/termios.h ../../include/asm/segment.h \ + ../../include/asm/system.h +tty_ioctl.s tty_ioctl.o : tty_ioctl.c ../../include/errno.h ../../include/termios.h \ + ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/sys/types.h ../../include/linux/mm.h \ + ../../include/signal.h ../../include/linux/kernel.h \ + ../../include/linux/tty.h ../../include/asm/io.h \ + ../../include/asm/segment.h ../../include/asm/system.h diff --git a/linux/kernel/chr_drv/chr_drv.a b/linux/kernel/chr_drv/chr_drv.a new file mode 100644 index 0000000000000000000000000000000000000000..5836b86cdda6504859c603ab523be7054728f5c9 GIT binary patch literal 68878 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 literal 0 HcmV?d00001 diff --git a/linux/kernel/chr_drv/console.c b/linux/kernel/chr_drv/console.c new file mode 100644 index 0000000..a12ffbf --- /dev/null +++ b/linux/kernel/chr_drv/console.c @@ -0,0 +1,710 @@ +/* + * linux/kernel/console.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * console.c + * + * This module implements the console io functions + * 'void con_init(void)' + * 'void con_write(struct tty_queue * queue)' + * Hopefully this will be a rather complete VT102 implementation. + * + * Beeping thanks to John T Kohl. + */ + +/* + * NOTE!!! We sometimes disable and enable interrupts for a short while + * (to put a word in video IO), but this will work even for keyboard + * interrupts. We know interrupts aren't enabled when getting a keyboard + * interrupt, as we use trap-gates. Hopefully all is well. + */ + +/* + * Code to check for different video-cards mostly by Galen Hunt, + * + */ + +#include +#include +#include +#include + +/* + * These are set up by the setup-routine at boot-time: + */ + +#define ORIG_X (*(unsigned char *)0x90000) +#define ORIG_Y (*(unsigned char *)0x90001) +#define ORIG_VIDEO_PAGE (*(unsigned short *)0x90004) +#define ORIG_VIDEO_MODE ((*(unsigned short *)0x90006) & 0xff) +#define ORIG_VIDEO_COLS (((*(unsigned short *)0x90006) & 0xff00) >> 8) +#define ORIG_VIDEO_LINES (25) +#define ORIG_VIDEO_EGA_AX (*(unsigned short *)0x90008) +#define ORIG_VIDEO_EGA_BX (*(unsigned short *)0x9000a) +#define ORIG_VIDEO_EGA_CX (*(unsigned short *)0x9000c) + +#define VIDEO_TYPE_MDA 0x10 /* Monochrome Text Display */ +#define VIDEO_TYPE_CGA 0x11 /* CGA Display */ +#define VIDEO_TYPE_EGAM 0x20 /* EGA/VGA in Monochrome Mode */ +#define VIDEO_TYPE_EGAC 0x21 /* EGA/VGA in Color Mode */ + +#define NPAR 16 + +extern void keyboard_interrupt(void); + +static unsigned char video_type; /* Type of display being used */ +static unsigned long video_num_columns; /* Number of text columns */ +static unsigned long video_size_row; /* Bytes per row */ +static unsigned long video_num_lines; /* Number of test lines */ +static unsigned char video_page; /* Initial video page */ +static unsigned long video_mem_start; /* Start of video RAM */ +static unsigned long video_mem_end; /* End of video RAM (sort of) */ +static unsigned short video_port_reg; /* Video register select port */ +static unsigned short video_port_val; /* Video register value port */ +static unsigned short video_erase_char; /* Char+Attrib to erase with */ + +static unsigned long origin; /* Used for EGA/VGA fast scroll */ +static unsigned long scr_end; /* Used for EGA/VGA fast scroll */ +static unsigned long pos; +static unsigned long x,y; +static unsigned long top,bottom; +static unsigned long state=0; +static unsigned long npar,par[NPAR]; +static unsigned long ques=0; +static unsigned char attr=0x07; + +static void sysbeep(void); + +/* + * this is what the terminal answers to a ESC-Z or csi0c + * query (= vt100 response). + */ +#define RESPONSE "\033[?1;2c" + +/* NOTE! gotoxy thinks x==video_num_columns is ok */ +static inline void gotoxy(unsigned int new_x,unsigned int new_y) +{ + if (new_x > video_num_columns || new_y >= video_num_lines) + return; + x=new_x; + y=new_y; + pos=origin + y*video_size_row + (x<<1); +} + +static inline void set_origin(void) +{ + cli(); + outb_p(12, video_port_reg); + outb_p(0xff&((origin-video_mem_start)>>9), video_port_val); + outb_p(13, video_port_reg); + outb_p(0xff&((origin-video_mem_start)>>1), video_port_val); + sti(); +} + +static void scrup(void) +{ + if (video_type == VIDEO_TYPE_EGAC || video_type == VIDEO_TYPE_EGAM) + { + if (!top && bottom == video_num_lines) { + origin += video_size_row; + pos += video_size_row; + scr_end += video_size_row; + if (scr_end > video_mem_end) { + __asm__("cld\n\t" + "rep\n\t" + "movsl\n\t" + "movl video_num_columns,%1\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((video_num_lines-1)*video_num_columns>>1), + "D" (video_mem_start), + "S" (origin) + ); + scr_end -= origin-video_mem_start; + pos -= origin-video_mem_start; + origin = video_mem_start; + } else { + __asm__("cld\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" (video_num_columns), + "D" (scr_end-video_size_row) + ); + } + set_origin(); + } else { + __asm__("cld\n\t" + "rep\n\t" + "movsl\n\t" + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*top), + "S" (origin+video_size_row*(top+1)) + ); + } + } + else /* Not EGA/VGA */ + { + __asm__("cld\n\t" + "rep\n\t" + "movsl\n\t" + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*top), + "S" (origin+video_size_row*(top+1)) + ); + } +} + +static void scrdown(void) +{ + if (video_type == VIDEO_TYPE_EGAC || video_type == VIDEO_TYPE_EGAM) + { + __asm__("std\n\t" + "rep\n\t" + "movsl\n\t" + "addl $2,%%edi\n\t" /* %edi has been decremented by 4 */ + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*bottom-4), + "S" (origin+video_size_row*(bottom-1)-4) + ); + } + else /* Not EGA/VGA */ + { + __asm__("std\n\t" + "rep\n\t" + "movsl\n\t" + "addl $2,%%edi\n\t" /* %edi has been decremented by 4 */ + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*bottom-4), + "S" (origin+video_size_row*(bottom-1)-4) + ); + } +} + +static void lf(void) +{ + if (y+1top) { + y--; + pos -= video_size_row; + return; + } + scrdown(); +} + +static void cr(void) +{ + pos -= x<<1; + x=0; +} + +static void del(void) +{ + if (x) { + pos -= 2; + x--; + *(unsigned short *)pos = video_erase_char; + } +} + +static void csi_J(int par) +{ + long count __asm__("cx"); + long start __asm__("di"); + + switch (par) { + case 0: /* erase from cursor to end of display */ + count = (scr_end-pos)>>1; + start = pos; + break; + case 1: /* erase from start to cursor */ + count = (pos-origin)>>1; + start = origin; + break; + case 2: /* erase whole display */ + count = video_num_columns * video_num_lines; + start = origin; + break; + default: + return; + } + __asm__("cld\n\t" + "rep\n\t" + "stosw\n\t" + ::"c" (count), + "D" (start),"a" (video_erase_char) + ); +} + +static void csi_K(int par) +{ + long count __asm__("cx"); + long start __asm__("di"); + + switch (par) { + case 0: /* erase from cursor to end of line */ + if (x>=video_num_columns) + return; + count = video_num_columns-x; + start = pos; + break; + case 1: /* erase from start of line to cursor */ + start = pos - (x<<1); + count = (x>9), video_port_val); + outb_p(15, video_port_reg); + outb_p(0xff&((pos-video_mem_start)>>1), video_port_val); + sti(); +} + +static void respond(struct tty_struct * tty) +{ + char * p = RESPONSE; + + cli(); + while (*p) { + PUTCH(*p,tty->read_q); + p++; + } + sti(); + copy_to_cooked(tty); +} + +static void insert_char(void) +{ + int i=x; + unsigned short tmp, old = video_erase_char; + unsigned short * p = (unsigned short *) pos; + + while (i++=video_num_columns) + return; + i = x; + while (++i < video_num_columns) { + *p = *(p+1); + p++; + } + *p = video_erase_char; +} + +static void delete_line(void) +{ + int oldtop,oldbottom; + + oldtop=top; + oldbottom=bottom; + top=y; + bottom = video_num_lines; + scrup(); + top=oldtop; + bottom=oldbottom; +} + +static void csi_at(unsigned int nr) +{ + if (nr > video_num_columns) + nr = video_num_columns; + else if (!nr) + nr = 1; + while (nr--) + insert_char(); +} + +static void csi_L(unsigned int nr) +{ + if (nr > video_num_lines) + nr = video_num_lines; + else if (!nr) + nr = 1; + while (nr--) + insert_line(); +} + +static void csi_P(unsigned int nr) +{ + if (nr > video_num_columns) + nr = video_num_columns; + else if (!nr) + nr = 1; + while (nr--) + delete_char(); +} + +static void csi_M(unsigned int nr) +{ + if (nr > video_num_lines) + nr = video_num_lines; + else if (!nr) + nr=1; + while (nr--) + delete_line(); +} + +static int saved_x=0; +static int saved_y=0; + +static void save_cur(void) +{ + saved_x=x; + saved_y=y; +} + +static void restore_cur(void) +{ + gotoxy(saved_x, saved_y); +} + +void con_write(struct tty_struct * tty) +{ + int nr; + char c; + + nr = CHARS(tty->write_q); + while (nr--) { + GETCH(tty->write_q,c); + switch(state) { + case 0: + if (c>31 && c<127) { + if (x>=video_num_columns) { + x -= video_num_columns; + pos -= video_size_row; + lf(); + } + __asm__("movb attr,%%ah\n\t" + "movw %%ax,%1\n\t" + ::"a" (c),"m" (*(short *)pos) + ); + pos += 2; + x++; + } else if (c==27) + state=1; + else if (c==10 || c==11 || c==12) + lf(); + else if (c==13) + cr(); + else if (c==ERASE_CHAR(tty)) + del(); + else if (c==8) { + if (x) { + x--; + pos -= 2; + } + } else if (c==9) { + c=8-(x&7); + x += c; + pos += c<<1; + if (x>video_num_columns) { + x -= video_num_columns; + pos -= video_size_row; + lf(); + } + c=9; + } else if (c==7) + sysbeep(); + break; + case 1: + state=0; + if (c=='[') + state=2; + else if (c=='E') + gotoxy(0,y+1); + else if (c=='M') + ri(); + else if (c=='D') + lf(); + else if (c=='Z') + respond(tty); + else if (x=='7') + save_cur(); + else if (x=='8') + restore_cur(); + break; + case 2: + for(npar=0;npar='0' && c<='9') { + par[npar]=10*par[npar]+c-'0'; + break; + } else state=4; + case 4: + state=0; + switch(c) { + case 'G': case '`': + if (par[0]) par[0]--; + gotoxy(par[0],y); + break; + case 'A': + if (!par[0]) par[0]++; + gotoxy(x,y-par[0]); + break; + case 'B': case 'e': + if (!par[0]) par[0]++; + gotoxy(x,y+par[0]); + break; + case 'C': case 'a': + if (!par[0]) par[0]++; + gotoxy(x+par[0],y); + break; + case 'D': + if (!par[0]) par[0]++; + gotoxy(x-par[0],y); + break; + case 'E': + if (!par[0]) par[0]++; + gotoxy(0,y+par[0]); + break; + case 'F': + if (!par[0]) par[0]++; + gotoxy(0,y-par[0]); + break; + case 'd': + if (par[0]) par[0]--; + gotoxy(x,par[0]); + break; + case 'H': case 'f': + if (par[0]) par[0]--; + if (par[1]) par[1]--; + gotoxy(par[1],par[0]); + break; + case 'J': + csi_J(par[0]); + break; + case 'K': + csi_K(par[0]); + break; + case 'L': + csi_L(par[0]); + break; + case 'M': + csi_M(par[0]); + break; + case 'P': + csi_P(par[0]); + break; + case '@': + csi_at(par[0]); + break; + case 'm': + csi_m(); + break; + case 'r': + if (par[0]) par[0]--; + if (!par[1]) par[1] = video_num_lines; + if (par[0] < par[1] && + par[1] <= video_num_lines) { + top=par[0]; + bottom=par[1]; + } + break; + case 's': + save_cur(); + break; + case 'u': + restore_cur(); + break; + } + } + } + set_cursor(); +} + +/* + * void con_init(void); + * + * This routine initalizes console interrupts, and does nothing + * else. If you want the screen to clear, call tty_write with + * the appropriate escape-sequece. + * + * Reads the information preserved by setup.s to determine the current display + * type and sets everything accordingly. + */ +void con_init(void) +{ + register unsigned char a; + char *display_desc = "????"; + char *display_ptr; + + video_num_columns = ORIG_VIDEO_COLS; + video_size_row = video_num_columns * 2; + video_num_lines = ORIG_VIDEO_LINES; + video_page = ORIG_VIDEO_PAGE; + video_erase_char = 0x0720; + + if (ORIG_VIDEO_MODE == 7) /* Is this a monochrome display? */ + { + video_mem_start = 0xb0000; + video_port_reg = 0x3b4; + video_port_val = 0x3b5; + if ((ORIG_VIDEO_EGA_BX & 0xff) != 0x10) + { + video_type = VIDEO_TYPE_EGAM; + video_mem_end = 0xb8000; + display_desc = "EGAm"; + } + else + { + video_type = VIDEO_TYPE_MDA; + video_mem_end = 0xb2000; + display_desc = "*MDA"; + } + } + else /* If not, it is color. */ + { + video_mem_start = 0xb8000; + video_port_reg = 0x3d4; + video_port_val = 0x3d5; + if ((ORIG_VIDEO_EGA_BX & 0xff) != 0x10) + { + video_type = VIDEO_TYPE_EGAC; + video_mem_end = 0xbc000; + display_desc = "EGAc"; + } + else + { + video_type = VIDEO_TYPE_CGA; + video_mem_end = 0xba000; + display_desc = "*CGA"; + } + } + + /* Let the user known what kind of display driver we are using */ + + display_ptr = ((char *)video_mem_start) + video_size_row - 8; + while (*display_desc) + { + *display_ptr++ = *display_desc++; + display_ptr++; + } + + /* Initialize the variables used for scrolling (mostly EGA/VGA) */ + + origin = video_mem_start; + scr_end = video_mem_start + video_num_lines * video_size_row; + top = 0; + bottom = video_num_lines; + + gotoxy(ORIG_X,ORIG_Y); + set_trap_gate(0x21,&keyboard_interrupt); + outb_p(inb_p(0x21)&0xfd,0x21); + a=inb_p(0x61); + outb_p(a|0x80,0x61); + outb(a,0x61); +} +/* from bsd-net-2: */ + +void sysbeepstop(void) +{ + /* disable counter 2 */ + outb(inb_p(0x61)&0xFC, 0x61); +} + +int beepcount = 0; + +static void sysbeep(void) +{ + /* enable counter 2 */ + outb_p(inb_p(0x61)|3, 0x61); + /* set command for counter 2, 2 byte write */ + outb_p(0xB6, 0x43); + /* send 0x637 for 750 HZ */ + outb_p(0x37, 0x42); + outb(0x06, 0x42); + /* 1/8 second */ + beepcount = HZ/8; +} diff --git a/linux/kernel/chr_drv/console.o b/linux/kernel/chr_drv/console.o new file mode 100644 index 0000000000000000000000000000000000000000..2adfd564dc38d1770580be03e466f0722784c29a GIT binary patch literal 20892 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 literal 0 HcmV?d00001 diff --git a/linux/kernel/chr_drv/keyboard.2.o b/linux/kernel/chr_drv/keyboard.2.o new file mode 100644 index 0000000000000000000000000000000000000000..031174bedf6e5d505616ece4312873277e2a897e GIT binary patch literal 6024 zcmeI#e@vA39S88wa~u>bD0IWd5iG3IN(IWPxG|4bR1~PJf@9^R^fvbklw!D>pTL?RpQ+*Mn* zGU;48w;s8AWVm>EqS<*&@?`N8oR_q?$>S<71X zqpQhU;>c|B>|}qn{cv?^^rDvZp)vE_uF)a;tZgVgQf5p+v(a!e&zk68+i!oIV{VD0 z$qveBBu~6MYUVcNcSdg;yG52o2Y7R&Lo%_2xmI$m;#$r11+F_NiwEVgc?!jaWqm1K-D*hd(S5D({u2 zo>`smUelLS`%*>SH(d2qFYbJ!H;u}7ZQZuLvigM`U;FX_+P}MD%QrWFy~g?6^Pe}s zb8!Rkt)*2&Z!|XbzI6@kYn>>G%03Hi{=n zKXUF_qjl!{-1=kwC2jvN*YEN04?E`X9^#lGKA#Ef{{#35JIW98gVZwKZ#~y-aaHE~ zpK@!PTu5U{h;Lu z-jVMJ@d9TQ`L6iWBS;w8CMAn&iV>NADwp!>m>c9c*@q{~-y%e^TuaWsKBFwh_X^U* z{$vG_O`o@4M%+HqhxAu00g5$0k>AgYOi%*W(9Ev7UddzABgmu5aDbK|L?%*VdOk+hj*KDN>d z4HbHly*F2dR&##u{1sz`erfR-h1PQ19G91JET4sDQD_SX1y;&ES8?o%%Xe`s%Y|7K zYT!U#>1I(#R%Cgdm_?yh4&*0q7RBgGmJTcLKhzg9$6;@gp3|tHUe`^>ZLg zhglRl!ol*z3!u=qIUiemZWVf$b9vR6MKR_oONo`A=0KJgD?h`5EFD&Uj)S(i`~v5{ ziR=FZ&c7A6{a2jJC!kpr`Yi|Y8EEBluJ6R8h?$s}}N;$FGszVT5{zB>r%_uT9zzgsdDvtEV$;3}Fnn zr^Vgv@flqh?X97p-%lNSfLirXI2aPvQb=tH1~rLg6Q;u%qTn94Y-;0qklNvO8v!>O z${*|}rxNgVk})GA;t3migYK~EZ=;T2he`oohaM)cPnC0T33@_ax35D}Lm|CWBi>Wf zdg2<4Yhzx?aC@-Z9o9S=-;Z3b@^9qRP=3!gehIjcx4?k7j_5t)XW=j4NAUOXk8le9 z72bvkJf@7h1ZKcISOhn~=V2Xegzc~k?t@Wy6w1GtHeR%*kyr6UD&xNh8{jMORj9$Y z;CJ9ppu8KUpNsGkybQ0vYw!jfhm&vy&cS(j3ogJrP~k;F#!ZANFb!tFOt=DO!(5mL z^I;)$z!F#r%V0UIfK{*t*1~$|f=$o^Rp^5O*adai1AE~?7=`_C03LV2lHVebifi=3d>+QtbkRp2G+uQ=z>kq16AmQ0oVm~*aLgvK^TSoZ~z{K z$KY{z0-l7Y;2=B=&%m?rJiGu$;269JFTu<33cLnyz;QSUXW$&1hqvGYyaN^f<}&U- zOo3@I17^Y%FdOE=JeUs)p#zq{QdkDdVFj#$HLw=eLl" +# 1 "" +# 1 "keyboard.S" + + + + + + + + + + + + + +# 1 "../../include/linux/config.h" 1 + + + + + + + + + + + + + + + + + + + + + +# 36 "../../include/linux/config.h" + +# 47 "../../include/linux/config.h" + +# 14 "keyboard.S" 2 + +.text +.globl keyboard_interrupt + + + + +size = 1024 + +head = 4 +tail = 8 +proc_list = 12 +buf = 16 + +mode: .byte 0 +leds: .byte 2 +e0: .byte 0 + + + + + + +keyboard_interrupt: + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + push %ds + push %es + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + xor %al,%al + inb $0x60,%al + cmpb $0xe0,%al + je set_e0 + cmpb $0xe1,%al + je set_e1 + call key_table(,%eax,4) + movb $0,e0 +e0_e1: inb $0x61,%al + jmp 1f +1: jmp 1f +1: orb $0x80,%al + jmp 1f +1: jmp 1f +1: outb %al,$0x61 + jmp 1f +1: jmp 1f +1: andb $0x7F,%al + outb %al,$0x61 + movb $0x20,%al + outb %al,$0x20 + pushl $0 + call do_tty_interrupt + addl $4,%esp + pop %es + pop %ds + popl %edx + popl %ecx + popl %ebx + popl %eax + iret +set_e0: movb $1,e0 + jmp e0_e1 +set_e1: movb $2,e0 + jmp e0_e1 + + + + + + +put_queue: + pushl %ecx + pushl %edx + movl table_list,%edx # read-queue for console + movl head(%edx),%ecx +1: movb %al,buf(%edx,%ecx) + incl %ecx + andl $size-1,%ecx + cmpl tail(%edx),%ecx # buffer full - discard everything + je 3f + shrdl $8,%ebx,%eax + je 2f + shrl $8,%ebx + jmp 1b +2: movl %ecx,head(%edx) + movl proc_list(%edx),%ecx + testl %ecx,%ecx + je 3f + movl $0,(%ecx) +3: popl %edx + popl %ecx + ret + +ctrl: movb $0x04,%al + jmp 1f +alt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: orb %al,mode + ret +unctrl: movb $0x04,%al + jmp 1f +unalt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: notb %al + andb %al,mode + ret + +lshift: + orb $0x01,mode + ret +unlshift: + andb $0xfe,mode + ret +rshift: + orb $0x02,mode + ret +unrshift: + andb $0xfd,mode + ret + +caps: testb $0x80,mode + jne 1f + xorb $4,leds + xorb $0x40,mode + orb $0x80,mode +set_leds: + call kb_wait + movb $0xed,%al + outb %al,$0x60 + call kb_wait + movb leds,%al + outb %al,$0x60 + ret +uncaps: andb $0x7f,mode + ret +scroll: + xorb $1,leds + jmp set_leds +num: xorb $2,leds + jmp set_leds + + + + + +cursor: + subb $0x47,%al + jb 1f + cmpb $12,%al + ja 1f + jne cur2 + testb $0x0c,mode + je cur2 + testb $0x30,mode + jne reboot +cur2: cmpb $0x01,e0 + je cur + testb $0x02,leds + je cur + testb $0x03,mode + jne cur + xorl %ebx,%ebx + movb num_table(%eax),%al + jmp put_queue +1: ret + +cur: movb cur_table(%eax),%al + cmpb $'9,%al + ja ok_cur + movb $'~,%ah +ok_cur: shll $16,%eax + movw $0x5b1b,%ax + xorl %ebx,%ebx + jmp put_queue + + + + + +num_table: + .ascii "789 456 1230," + +cur_table: + .ascii "HA5 DGC YB623" + + + + +func: + pushl %eax + pushl %ecx + pushl %edx + call show_stat + popl %edx + popl %ecx + popl %eax + subb $0x3B,%al + jb end_func + cmpb $9,%al + jbe ok_func + subb $18,%al + cmpb $10,%al + jb end_func + cmpb $11,%al + ja end_func +ok_func: + cmpl $4,%ecx + jl end_func + movl func_table(,%eax,4),%eax + xorl %ebx,%ebx + jmp put_queue +end_func: + ret + + + + +func_table: + .long 0x415b5b1b,0x425b5b1b,0x435b5b1b,0x445b5b1b + .long 0x455b5b1b,0x465b5b1b,0x475b5b1b,0x485b5b1b + .long 0x495b5b1b,0x4a5b5b1b,0x4b5b5b1b,0x4c5b5b1b + +# 294 "keyboard.S" + +key_map: + .byte 0,27 + .ascii "1234567890-=" + .byte 127,9 + .ascii "qwertyuiop[]" + .byte 13,0 + .ascii "asdfghjkl;'" + .byte '`,0 + .ascii "\\zxcvbnm,./" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 + .byte '-,0,0,0,'+ + .byte 0,0,0,0,0,0,0 + .byte '< + .fill 10,1,0 + + +shift_map: + .byte 0,27 + .ascii "!@#$%^&*()_+" + .byte 127,9 + .ascii "QWERTYUIOP{}" + .byte 13,0 + .ascii "ASDFGHJKL:\"" + .byte '~,0 + .ascii "|ZXCVBNM<>?" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 + .byte '-,0,0,0,'+ + .byte 0,0,0,0,0,0,0 + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 + .fill 16,1,0 + .byte 0,0,0,0,0 + .byte 0,0,0,0,0,0,0 + .byte '| + .fill 10,1,0 + +# 449 "keyboard.S" + + + + +do_self: + lea alt_map,%ebx + testb $0x20,mode + jne 1f + lea shift_map,%ebx + testb $0x03,mode + jne 1f + lea key_map,%ebx +1: movb (%ebx,%eax),%al + orb %al,%al + je none + testb $0x4c,mode + je 2f + cmpb $'a,%al + jb 2f + cmpb $'},%al + ja 2f + subb $32,%al +2: testb $0x0c,mode + je 3f + cmpb $64,%al + jb 3f + cmpb $64+32,%al + jae 3f + subb $64,%al +3: testb $0x10,mode + je 4f + orb $0x80,%al +4: andl $0xff,%eax + xorl %ebx,%ebx + call put_queue +none: ret + + + + + + +minus: cmpb $1,e0 + jne do_self + movl $'/,%eax + xorl %ebx,%ebx + jmp put_queue + + + + + + +key_table: + .long none,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,ctrl,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,lshift,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,minus,rshift,do_self + .long alt,do_self,caps,func + .long func,func,func,func + .long func,func,func,func + .long func,num,scroll,cursor + .long cursor,cursor,do_self,cursor + .long cursor,cursor,do_self,cursor + .long cursor,cursor,cursor,cursor + .long none,none,do_self,func + .long func,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,unctrl,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,unlshift,none + .long none,none,none,none + .long none,none,none,none + .long none,none,unrshift,none + .long unalt,none,uncaps,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + + + + + +kb_wait: + pushl %eax +1: inb $0x64,%al + testb $0x02,%al + jne 1b + popl %eax + ret + + + + +reboot: + call kb_wait + movw $0x1234,0x472 + movb $0xfc,%al + outb %al,$0x64 +die: jmp die diff --git a/linux/kernel/chr_drv/keyboard.S b/linux/kernel/chr_drv/keyboard.S new file mode 100644 index 0000000..25210b4 --- /dev/null +++ b/linux/kernel/chr_drv/keyboard.S @@ -0,0 +1,588 @@ +/* + * linux/kernel/keyboard.S + * + * (C) 1991 Linus Torvalds + */ + +/* + * Thanks to Alfred Leung for US keyboard patches + * Wolfgang Thiel for German keyboard patches + * Marc Corsini for the French keyboard + */ + +#include + +.text +.globl keyboard_interrupt + +/* + * these are for the keyboard read functions + */ +size = 1024 /* must be a power of two ! And MUST be the same + as in tty_io.c !!!! */ +head = 4 +tail = 8 +proc_list = 12 +buf = 16 + +mode: .byte 0 /* caps, alt, ctrl and shift mode */ +leds: .byte 2 /* num-lock, caps, scroll-lock mode (nom-lock on) */ +e0: .byte 0 + +/* + * con_int is the real interrupt routine that reads the + * keyboard scan-code and converts it into the appropriate + * ascii character(s). + */ +keyboard_interrupt: + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + push %ds + push %es + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + xor %al,%al /* %eax is scan code */ + inb $0x60,%al + cmpb $0xe0,%al + je set_e0 + cmpb $0xe1,%al + je set_e1 + call key_table(,%eax,4) + movb $0,e0 +e0_e1: inb $0x61,%al + jmp 1f +1: jmp 1f +1: orb $0x80,%al + jmp 1f +1: jmp 1f +1: outb %al,$0x61 + jmp 1f +1: jmp 1f +1: andb $0x7F,%al + outb %al,$0x61 + movb $0x20,%al + outb %al,$0x20 + pushl $0 + call do_tty_interrupt + addl $4,%esp + pop %es + pop %ds + popl %edx + popl %ecx + popl %ebx + popl %eax + iret +set_e0: movb $1,e0 + jmp e0_e1 +set_e1: movb $2,e0 + jmp e0_e1 + +/* + * This routine fills the buffer with max 8 bytes, taken from + * %ebx:%eax. (%edx is high). The bytes are written in the + * order %al,%ah,%eal,%eah,%bl,%bh ... until %eax is zero. + */ +put_queue: + pushl %ecx + pushl %edx + movl table_list,%edx # read-queue for console + movl head(%edx),%ecx +1: movb %al,buf(%edx,%ecx) + incl %ecx + andl $size-1,%ecx + cmpl tail(%edx),%ecx # buffer full - discard everything + je 3f + shrdl $8,%ebx,%eax + je 2f + shrl $8,%ebx + jmp 1b +2: movl %ecx,head(%edx) + movl proc_list(%edx),%ecx + testl %ecx,%ecx + je 3f + movl $0,(%ecx) +3: popl %edx + popl %ecx + ret + +ctrl: movb $0x04,%al + jmp 1f +alt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: orb %al,mode + ret +unctrl: movb $0x04,%al + jmp 1f +unalt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: notb %al + andb %al,mode + ret + +lshift: + orb $0x01,mode + ret +unlshift: + andb $0xfe,mode + ret +rshift: + orb $0x02,mode + ret +unrshift: + andb $0xfd,mode + ret + +caps: testb $0x80,mode + jne 1f + xorb $4,leds + xorb $0x40,mode + orb $0x80,mode +set_leds: + call kb_wait + movb $0xed,%al /* set leds command */ + outb %al,$0x60 + call kb_wait + movb leds,%al + outb %al,$0x60 + ret +uncaps: andb $0x7f,mode + ret +scroll: + xorb $1,leds + jmp set_leds +num: xorb $2,leds + jmp set_leds + +/* + * curosr-key/numeric keypad cursor keys are handled here. + * checking for numeric keypad etc. + */ +cursor: + subb $0x47,%al + jb 1f + cmpb $12,%al + ja 1f + jne cur2 /* check for ctrl-alt-del */ + testb $0x0c,mode + je cur2 + testb $0x30,mode + jne reboot +cur2: cmpb $0x01,e0 /* e0 forces cursor movement */ + je cur + testb $0x02,leds /* not num-lock forces cursor */ + je cur + testb $0x03,mode /* shift forces cursor */ + jne cur + xorl %ebx,%ebx + movb num_table(%eax),%al + jmp put_queue +1: ret + +cur: movb cur_table(%eax),%al + cmpb $'9,%al + ja ok_cur + movb $'~,%ah +ok_cur: shll $16,%eax + movw $0x5b1b,%ax + xorl %ebx,%ebx + jmp put_queue + +#if defined(KBD_FR) +num_table: + .ascii "789 456 1230." +#else +num_table: + .ascii "789 456 1230," +#endif +cur_table: + .ascii "HA5 DGC YB623" + +/* + * this routine handles function keys + */ +func: + pushl %eax + pushl %ecx + pushl %edx + call show_stat + popl %edx + popl %ecx + popl %eax + subb $0x3B,%al + jb end_func + cmpb $9,%al + jbe ok_func + subb $18,%al + cmpb $10,%al + jb end_func + cmpb $11,%al + ja end_func +ok_func: + cmpl $4,%ecx /* check that there is enough room */ + jl end_func + movl func_table(,%eax,4),%eax + xorl %ebx,%ebx + jmp put_queue +end_func: + ret + +/* + * function keys send F1:'esc [ [ A' F2:'esc [ [ B' etc. + */ +func_table: + .long 0x415b5b1b,0x425b5b1b,0x435b5b1b,0x445b5b1b + .long 0x455b5b1b,0x465b5b1b,0x475b5b1b,0x485b5b1b + .long 0x495b5b1b,0x4a5b5b1b,0x4b5b5b1b,0x4c5b5b1b + +#if defined(KBD_FINNISH) +key_map: + .byte 0,27 + .ascii "1234567890+'" + .byte 127,9 + .ascii "qwertyuiop}" + .byte 0,13,0 + .ascii "asdfghjkl|{" + .byte 0,0 + .ascii "'zxcvbnm,.-" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + +shift_map: + .byte 0,27 + .ascii "!\"#$%&/()=?`" + .byte 127,9 + .ascii "QWERTYUIOP]^" + .byte 13,0 + .ascii "ASDFGHJKL\\[" + .byte 0,0 + .ascii "*ZXCVBNM;:_" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + +#elif defined(KBD_US) + +key_map: + .byte 0,27 + .ascii "1234567890-=" + .byte 127,9 + .ascii "qwertyuiop[]" + .byte 13,0 + .ascii "asdfghjkl;'" + .byte '`,0 + .ascii "\\zxcvbnm,./" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + + +shift_map: + .byte 0,27 + .ascii "!@#$%^&*()_+" + .byte 127,9 + .ascii "QWERTYUIOP{}" + .byte 13,0 + .ascii "ASDFGHJKL:\"" + .byte '~,0 + .ascii "|ZXCVBNM<>?" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + +#elif defined(KBD_GR) + +key_map: + .byte 0,27 + .ascii "1234567890\\'" + .byte 127,9 + .ascii "qwertzuiop@+" + .byte 13,0 + .ascii "asdfghjkl[]^" + .byte 0,'# + .ascii "yxcvbnm,.-" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + + +shift_map: + .byte 0,27 + .ascii "!\"#$%&/()=?`" + .byte 127,9 + .ascii "QWERTZUIOP\\*" + .byte 13,0 + .ascii "ASDFGHJKL{}~" + .byte 0,'' + .ascii "YXCVBNM;:_" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte '@,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + + +#elif defined(KBD_FR) + +key_map: + .byte 0,27 + .ascii "&{\"'(-}_/@)=" + .byte 127,9 + .ascii "azertyuiop^$" + .byte 13,0 + .ascii "qsdfghjklm|" + .byte '`,0,42 /* coin sup gauche, don't know, [*|mu] */ + .ascii "wxcvbn,;:!" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + +shift_map: + .byte 0,27 + .ascii "1234567890]+" + .byte 127,9 + .ascii "AZERTYUIOP<>" + .byte 13,0 + .ascii "QSDFGHJKLM%" + .byte '~,0,'# + .ascii "WXCVBN?./\\" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0~#{[|`\\^@]}" + .byte 0,0 + .byte '@,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + +#else +#error "KBD-type not defined" +#endif +/* + * do_self handles "normal" keys, ie keys that don't change meaning + * and which have just one character returns. + */ +do_self: + lea alt_map,%ebx + testb $0x20,mode /* alt-gr */ + jne 1f + lea shift_map,%ebx + testb $0x03,mode + jne 1f + lea key_map,%ebx +1: movb (%ebx,%eax),%al + orb %al,%al + je none + testb $0x4c,mode /* ctrl or caps */ + je 2f + cmpb $'a,%al + jb 2f + cmpb $'},%al + ja 2f + subb $32,%al +2: testb $0x0c,mode /* ctrl */ + je 3f + cmpb $64,%al + jb 3f + cmpb $64+32,%al + jae 3f + subb $64,%al +3: testb $0x10,mode /* left alt */ + je 4f + orb $0x80,%al +4: andl $0xff,%eax + xorl %ebx,%ebx + call put_queue +none: ret + +/* + * minus has a routine of it's own, as a 'E0h' before + * the scan code for minus means that the numeric keypad + * slash was pushed. + */ +minus: cmpb $1,e0 + jne do_self + movl $'/,%eax + xorl %ebx,%ebx + jmp put_queue + +/* + * This table decides which routine to call when a scan-code has been + * gotten. Most routines just call do_self, or none, depending if + * they are make or break. + */ +key_table: + .long none,do_self,do_self,do_self /* 00-03 s0 esc 1 2 */ + .long do_self,do_self,do_self,do_self /* 04-07 3 4 5 6 */ + .long do_self,do_self,do_self,do_self /* 08-0B 7 8 9 0 */ + .long do_self,do_self,do_self,do_self /* 0C-0F + ' bs tab */ + .long do_self,do_self,do_self,do_self /* 10-13 q w e r */ + .long do_self,do_self,do_self,do_self /* 14-17 t y u i */ + .long do_self,do_self,do_self,do_self /* 18-1B o p } ^ */ + .long do_self,ctrl,do_self,do_self /* 1C-1F enter ctrl a s */ + .long do_self,do_self,do_self,do_self /* 20-23 d f g h */ + .long do_self,do_self,do_self,do_self /* 24-27 j k l | */ + .long do_self,do_self,lshift,do_self /* 28-2B { para lshift , */ + .long do_self,do_self,do_self,do_self /* 2C-2F z x c v */ + .long do_self,do_self,do_self,do_self /* 30-33 b n m , */ + .long do_self,minus,rshift,do_self /* 34-37 . - rshift * */ + .long alt,do_self,caps,func /* 38-3B alt sp caps f1 */ + .long func,func,func,func /* 3C-3F f2 f3 f4 f5 */ + .long func,func,func,func /* 40-43 f6 f7 f8 f9 */ + .long func,num,scroll,cursor /* 44-47 f10 num scr home */ + .long cursor,cursor,do_self,cursor /* 48-4B up pgup - left */ + .long cursor,cursor,do_self,cursor /* 4C-4F n5 right + end */ + .long cursor,cursor,cursor,cursor /* 50-53 dn pgdn ins del */ + .long none,none,do_self,func /* 54-57 sysreq ? < f11 */ + .long func,none,none,none /* 58-5B f12 ? ? ? */ + .long none,none,none,none /* 5C-5F ? ? ? ? */ + .long none,none,none,none /* 60-63 ? ? ? ? */ + .long none,none,none,none /* 64-67 ? ? ? ? */ + .long none,none,none,none /* 68-6B ? ? ? ? */ + .long none,none,none,none /* 6C-6F ? ? ? ? */ + .long none,none,none,none /* 70-73 ? ? ? ? */ + .long none,none,none,none /* 74-77 ? ? ? ? */ + .long none,none,none,none /* 78-7B ? ? ? ? */ + .long none,none,none,none /* 7C-7F ? ? ? ? */ + .long none,none,none,none /* 80-83 ? br br br */ + .long none,none,none,none /* 84-87 br br br br */ + .long none,none,none,none /* 88-8B br br br br */ + .long none,none,none,none /* 8C-8F br br br br */ + .long none,none,none,none /* 90-93 br br br br */ + .long none,none,none,none /* 94-97 br br br br */ + .long none,none,none,none /* 98-9B br br br br */ + .long none,unctrl,none,none /* 9C-9F br unctrl br br */ + .long none,none,none,none /* A0-A3 br br br br */ + .long none,none,none,none /* A4-A7 br br br br */ + .long none,none,unlshift,none /* A8-AB br br unlshift br */ + .long none,none,none,none /* AC-AF br br br br */ + .long none,none,none,none /* B0-B3 br br br br */ + .long none,none,unrshift,none /* B4-B7 br br unrshift br */ + .long unalt,none,uncaps,none /* B8-BB unalt br uncaps br */ + .long none,none,none,none /* BC-BF br br br br */ + .long none,none,none,none /* C0-C3 br br br br */ + .long none,none,none,none /* C4-C7 br br br br */ + .long none,none,none,none /* C8-CB br br br br */ + .long none,none,none,none /* CC-CF br br br br */ + .long none,none,none,none /* D0-D3 br br br br */ + .long none,none,none,none /* D4-D7 br br br br */ + .long none,none,none,none /* D8-DB br ? ? ? */ + .long none,none,none,none /* DC-DF ? ? ? ? */ + .long none,none,none,none /* E0-E3 e0 e1 ? ? */ + .long none,none,none,none /* E4-E7 ? ? ? ? */ + .long none,none,none,none /* E8-EB ? ? ? ? */ + .long none,none,none,none /* EC-EF ? ? ? ? */ + .long none,none,none,none /* F0-F3 ? ? ? ? */ + .long none,none,none,none /* F4-F7 ? ? ? ? */ + .long none,none,none,none /* F8-FB ? ? ? ? */ + .long none,none,none,none /* FC-FF ? ? ? ? */ + +/* + * kb_wait waits for the keyboard controller buffer to empty. + * there is no timeout - if the buffer doesn't empty, we hang. + */ +kb_wait: + pushl %eax +1: inb $0x64,%al + testb $0x02,%al + jne 1b + popl %eax + ret +/* + * This routine reboots the machine by asking the keyboard + * controller to pulse the reset-line low. + */ +reboot: + call kb_wait + movw $0x1234,0x472 /* don't do memory check */ + movb $0xfc,%al /* pulse reset and A20 low */ + outb %al,$0x64 +die: jmp die diff --git a/linux/kernel/chr_drv/rs_io.o b/linux/kernel/chr_drv/rs_io.o new file mode 100644 index 0000000000000000000000000000000000000000..9d7d5b3a22aa1a7d33dea95b723af176ee68e951 GIT binary patch literal 1320 zcma)5O=}ZT6upy7lN1_>vDAuUi$oC$(TZ-YF8rt{7SvR*(+bl`=7mYg$1w9^jTe}J1pL8J+VS-DUc@11#5ry}TuH|L!9&O7g8W*$#YU6UjU z!jd2kzZJlJAu zYUu}^X)*0615dy3#7CS5;3%o*n6o2-mX*|mBJ()SkJ>Kxy3mDOdS@N-cB{sLjja`nuw?{k1!T?BECWK1Ur++2eHxq=#!x{gli&& zBRH@@L{yj;>c8RMuaxqliKJ!!PW(mv0M`reH^_6neMo3eLAl-mBy=A^x!y36flz|$ z9Yaq056bmU5ZT?V>*Z0VgF%1b96oaqeG&Pkh$c>dL{JjkL^3ZF1^Vqn>-rt20MOw)mDl`5E4qoh_V zHiu%f3^vy+-ZaTqsdKQH=_9M_uuwBq{86e5Y7L#$RJ8J@4U1NVGqq%B7P>V(VAV>U z?KNO{nOQ2UnY@MR;}pv*t7+mQ_L+$Cmk2hbH&o7BkuiEb(opct5uPWFopkSn(*o}a PoD +#include +#include +#include + +#define WAKEUP_CHARS (TTY_BUF_SIZE/4) + +extern void rs1_interrupt(void); +extern void rs2_interrupt(void); + +static void init(int port) +{ + outb_p(0x80,port+3); /* set DLAB of line control reg */ + outb_p(0x30,port); /* LS of divisor (48 -> 2400 bps */ + outb_p(0x00,port+1); /* MS of divisor */ + outb_p(0x03,port+3); /* reset DLAB */ + outb_p(0x0b,port+4); /* set DTR,RTS, OUT_2 */ + outb_p(0x0d,port+1); /* enable all intrs but writes */ + (void)inb(port); /* read data port to reset things (?) */ +} + +void rs_init(void) +{ + set_intr_gate(0x24,rs1_interrupt); + set_intr_gate(0x23,rs2_interrupt); + init(tty_table[1].read_q.data); + init(tty_table[2].read_q.data); + outb(inb_p(0x21)&0xE7,0x21); +} + +/* + * This routine gets called when tty_write has put something into + * the write_queue. It must check wheter the queue is empty, and + * set the interrupt register accordingly + * + * void _rs_write(struct tty_struct * tty); + */ +void rs_write(struct tty_struct * tty) +{ + cli(); + if (!EMPTY(tty->write_q)) + outb(inb_p(tty->write_q.data+1)|0x02,tty->write_q.data+1); + sti(); +} diff --git a/linux/kernel/chr_drv/serial.o b/linux/kernel/chr_drv/serial.o new file mode 100644 index 0000000000000000000000000000000000000000..aa0936f4090621d022012d75ab50eb8f2282e722 GIT binary patch literal 6744 zcma)AYmgjO6~5hlXLn|HGy4qWrA%Z~*^un)Zg!JwLL!?tfe<4kMTFp_r>AG9v-3)K z4|xCz21^18@_vX|V3m}XX!%17!BWepVEHG!Dy3y7!>`YM;w2%`>rhm{a@H^oxBz5 zx84wMh?65=ckLPIS5j1MoMfXGg>}+8Um;I+oUbrW&S_Pg`0<-}Y#Hb}{*&(0*BpPd z|G6wedwu|~Q?L?npA@ANXG*8U-6xC_eb3Ef^`ie){p1%rg*YJxUSEIi+_@+JIxiB2 zA)H(cZ|I8yL4SRB;^}(!M@#+)^(of9b^Is&*Pq6?-{r{e`r;Oe!IIs2IoR4Chbtm! z64K5M6mkF;HBF(7lmR9%M(8{wAte&XP6e6~IqdvDYxW1^*J+$e6 z51P(Yp;;2vTmzQfBKaKP`T`Vx0&8R;aUdXZ>HNR>|-4B%(OovEHcwe*^#QrnjHmyS_=bax__o-(Clb< zMIk>y*DK7l!x|-wnCZFDMZ&n5{t8{Inh7&KFjKSM>}b-#bxY84(oC=CAeFGmO#gvq zO4wp{OwsImnr$=F3s|Fs%gyv&x>mv!W;#a)`x(woGkqF^3 z&rE-h4phy4Grei1=75<#NC%%}r$w_P437$VfO#vM=^I#Mv!;R^97b$~v4ju}GyPXO za43Xky1{UY6ponbVfN!P*EgH#_bHSPVR~*gJ1WIc$nxhPoIyW9AmqUd+Jt!B#5{5t zC3@kM&m1nba~4*4+eHwQ8{z*zr!{m7JLOupa_jIGlF7G*8SH=zsUIO9l*`bqHF`H{ zSI9fj*jo7v^dsrtQ$I#NDbv4WgK-MGlOl5mjJx}!RzXn&AAC%;2JO+F&OL|&o)m2!-{Nc&J_B#10`6hXTe6@U^HiyX926G^YtWP48iX3cf!_+(61%A{CHdLM~Gw`Ev4P zs^m3l4;BIIiFr2Gf zDfyz5%fQ!@XXQ=kS8gC5NV)bAAwNn!m~x$%uSmJYn2)5~Ld?fgZU8@*(S8DY@JaIZ z(0f8|B%efE@J-}fpcis8>E$V=YYXX4L@DG}(%q>d=r+9zu`Ci>06dFSYA+Ir+ratgRCh}5K(&n@jOC^FcmE3o|`NZ(BDyGY3RR$48-peV<`vIy%;MT-ssuAzyQZ zm7%bsZvvxA7{-o1>f08J9eu;lwCkqmB&nJv;-)DyP0lt=w|GMCJ6dWXc6K3x9dJBH zIff=P*H}8AU3DeU6;|y9Gm&67&J|1N;{%aHu;%xVpC!mevm)xd!Z|eZs6oYyHIgO z5ZZp2$J?0}P99@$gz|NN{HgnJ6hhEhc&FEdV zgK1H+!?Np(X5bd{RdD#PHyUm+9=O=PYj1XQc04zc8_y0^ZQm(x@Wv)qgFBUCc4#U) zRH|3KaH!BAr<#f!>@;~6V`pC+Nsxywtp1C z1+F^{sMedf7o(3g%y<4!(`~w}^^U2*BO8@^Z7R#la|ydb*~ zc~hi=AoQCKZKKqnZ>BAXx`=D*rBXf=?h)5%Mrm%;{ZJH;WTtpp_?YGVAtWasG>}@+ ztZ{1Hq6!24RF|c^6UCm#kdbE<=XsW1o)^<-uFB{kdtNP0`w@ZHC|@fvtY!nI@sv9p zYQy*HSP@KD(Y+Ca^;FN%Dsd|Hz|Gfdd5!~v@j?WIMxpIhuoREET%jUh2#7v#Lkzi4 zsXNn{ZZChVu9uQ(<3`z13r}YdZEQ7{FjjdF+#tZz3a{pc0{753nNFaF@8lharb^&U zM46o#vQxHwp(00SVI1Yq!x}H;8~Cc1yoy@9&8pxg)0;^&ru>F*ISA#Tf+{Rvm3biY z;$h~nb5vB(Zc!0LLCx%K>=m^EkY%_UF4wE>aIIMkqhn!cBsV%bRIv-gW07Kb+VyL0 zW!NeE`J#U#`eEWk72Pn!ST>w-Pp^OwTPw~6Ix5?>VgkHkCB`snPM=$oR5Ii_?jpKNjQI)xx+rX)NrN@(vtS z)brG2;a5{^&h(pyGBOJ~jwk+-ijA4%adUHKk$Fodx$$&{=PTRp!}AUven3^*9jM9$ zN2{1ZVCY9!j+yUPa-n-96gjoFa|K*Ea#R-GLURfuE!9z_xLqjtSh+2=wr|&_aC2!< zsbftyKp!IK)T>n&J3d##$&tgE6rChd8@HTSrw@bu|H?%$Lz)CWYpO6OtzQ(@u`I;H zA0~0hULeFIgkC(fVZQM37E83uD+0^W*g+&JThirtX#c1rNxf%u{?;UbsUoz2QE5l99_V89Q@N?OW5KJ z{CyR=xWxUo_Q|>jusJ88#Fb9qzN!2%WcJzW@71|NTmfBNVt=t5W2;_@znzQq#Pk1J zNx8KL%2Le@ZF!!U=Vg-hT!FL261cRt6idzUtiqb{7U?Yfl58!O8u6^g63pmqvBVsu ziO;rP#G`%-XcOj%`#CO@m&F2*@|q9G8zIN%ApOl=4b|5r{>tzNf**|HoWtG6Z#F2c zY>{R^els^ZA&$YffgyZaxVV2)_AGL?HaGqnAbS1@vz3@8t>EiEsf7>d_m(Y8h@*id1QPE zq*2AI@k1JyXeCmt2O2|Rx}>fc)!MHG@jDdP%8ZXhfTH_{-yEI;>v82)0_$iHdYJ5oJQyRae@s!4& zX?$7ZZ#2H4@okM3jtj<#pR5WOYFw&uoyM&iKd$ixjh@D)#>X_itMNi?82Z0h~Ex)dj#~l5%5z+2qjoV^9_XYao`NR5e OXv_jl$P*g(Yy3B;S`h32 literal 0 HcmV?d00001 diff --git a/linux/kernel/chr_drv/tty_io.c b/linux/kernel/chr_drv/tty_io.c new file mode 100644 index 0000000..b8da643 --- /dev/null +++ b/linux/kernel/chr_drv/tty_io.c @@ -0,0 +1,349 @@ +/* + * linux/kernel/tty_io.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * 'tty_io.c' gives an orthogonal feeling to tty's, be they consoles + * or rs-channels. It also implements echoing, cooked mode etc. + * + * Kill-line thanks to John T Kohl. + */ +#include +#include +#include + +#define ALRMMASK (1<<(SIGALRM-1)) +#define KILLMASK (1<<(SIGKILL-1)) +#define INTMASK (1<<(SIGINT-1)) +#define QUITMASK (1<<(SIGQUIT-1)) +#define TSTPMASK (1<<(SIGTSTP-1)) + +#include +#include +#include +#include + +#define _L_FLAG(tty,f) ((tty)->termios.c_lflag & f) +#define _I_FLAG(tty,f) ((tty)->termios.c_iflag & f) +#define _O_FLAG(tty,f) ((tty)->termios.c_oflag & f) + +#define L_CANON(tty) _L_FLAG((tty),ICANON) +#define L_ISIG(tty) _L_FLAG((tty),ISIG) +#define L_ECHO(tty) _L_FLAG((tty),ECHO) +#define L_ECHOE(tty) _L_FLAG((tty),ECHOE) +#define L_ECHOK(tty) _L_FLAG((tty),ECHOK) +#define L_ECHOCTL(tty) _L_FLAG((tty),ECHOCTL) +#define L_ECHOKE(tty) _L_FLAG((tty),ECHOKE) + +#define I_UCLC(tty) _I_FLAG((tty),IUCLC) +#define I_NLCR(tty) _I_FLAG((tty),INLCR) +#define I_CRNL(tty) _I_FLAG((tty),ICRNL) +#define I_NOCR(tty) _I_FLAG((tty),IGNCR) + +#define O_POST(tty) _O_FLAG((tty),OPOST) +#define O_NLCR(tty) _O_FLAG((tty),ONLCR) +#define O_CRNL(tty) _O_FLAG((tty),OCRNL) +#define O_NLRET(tty) _O_FLAG((tty),ONLRET) +#define O_LCUC(tty) _O_FLAG((tty),OLCUC) + +struct tty_struct tty_table[] = { + { + {ICRNL, /* change incoming CR to NL */ + OPOST|ONLCR, /* change outgoing NL to CRNL */ + 0, + ISIG | ICANON | ECHO | ECHOCTL | ECHOKE, + 0, /* console termio */ + INIT_C_CC}, + 0, /* initial pgrp */ + 0, /* initial stopped */ + con_write, + {0,0,0,0,""}, /* console read-queue */ + {0,0,0,0,""}, /* console write-queue */ + {0,0,0,0,""} /* console secondary queue */ + },{ + {0, /* no translation */ + 0, /* no translation */ + B2400 | CS8, + 0, + 0, + INIT_C_CC}, + 0, + 0, + rs_write, + {0x3f8,0,0,0,""}, /* rs 1 */ + {0x3f8,0,0,0,""}, + {0,0,0,0,""} + },{ + {0, /* no translation */ + 0, /* no translation */ + B2400 | CS8, + 0, + 0, + INIT_C_CC}, + 0, + 0, + rs_write, + {0x2f8,0,0,0,""}, /* rs 2 */ + {0x2f8,0,0,0,""}, + {0,0,0,0,""} + } +}; + +/* + * these are the tables used by the machine code handlers. + * you can implement pseudo-tty's or something by changing + * them. Currently not done. + */ +struct tty_queue * table_list[]={ + &tty_table[0].read_q, &tty_table[0].write_q, + &tty_table[1].read_q, &tty_table[1].write_q, + &tty_table[2].read_q, &tty_table[2].write_q + }; + +void tty_init(void) +{ + rs_init(); + con_init(); +} + +void tty_intr(struct tty_struct * tty, int mask) +{ + int i; + + if (tty->pgrp <= 0) + return; + for (i=0;ipgrp==tty->pgrp) + task[i]->signal |= mask; +} + +static void sleep_if_empty(struct tty_queue * queue) +{ + cli(); + while (!current->signal && EMPTY(*queue)) + interruptible_sleep_on(&queue->proc_list); + sti(); +} + +static void sleep_if_full(struct tty_queue * queue) +{ + if (!FULL(*queue)) + return; + cli(); + while (!current->signal && LEFT(*queue)<128) + interruptible_sleep_on(&queue->proc_list); + sti(); +} + +void wait_for_keypress(void) +{ + sleep_if_empty(&tty_table[0].secondary); +} + +void copy_to_cooked(struct tty_struct * tty) +{ + signed char c; + + while (!EMPTY(tty->read_q) && !FULL(tty->secondary)) { + GETCH(tty->read_q,c); + if (c==13) + if (I_CRNL(tty)) + c=10; + else if (I_NOCR(tty)) + continue; + else ; + else if (c==10 && I_NLCR(tty)) + c=13; + if (I_UCLC(tty)) + c=tolower(c); + if (L_CANON(tty)) { + if (c==KILL_CHAR(tty)) { + /* deal with killing the input line */ + while(!(EMPTY(tty->secondary) || + (c=LAST(tty->secondary))==10 || + c==EOF_CHAR(tty))) { + if (L_ECHO(tty)) { + if (c<32) + PUTCH(127,tty->write_q); + PUTCH(127,tty->write_q); + tty->write(tty); + } + DEC(tty->secondary.head); + } + continue; + } + if (c==ERASE_CHAR(tty)) { + if (EMPTY(tty->secondary) || + (c=LAST(tty->secondary))==10 || + c==EOF_CHAR(tty)) + continue; + if (L_ECHO(tty)) { + if (c<32) + PUTCH(127,tty->write_q); + PUTCH(127,tty->write_q); + tty->write(tty); + } + DEC(tty->secondary.head); + continue; + } + if (c==STOP_CHAR(tty)) { + tty->stopped=1; + continue; + } + if (c==START_CHAR(tty)) { + tty->stopped=0; + continue; + } + } + if (L_ISIG(tty)) { + if (c==INTR_CHAR(tty)) { + tty_intr(tty,INTMASK); + continue; + } + if (c==QUIT_CHAR(tty)) { + tty_intr(tty,QUITMASK); + continue; + } + } + if (c==10 || c==EOF_CHAR(tty)) + tty->secondary.data++; + if (L_ECHO(tty)) { + if (c==10) { + PUTCH(10,tty->write_q); + PUTCH(13,tty->write_q); + } else if (c<32) { + if (L_ECHOCTL(tty)) { + PUTCH('^',tty->write_q); + PUTCH(c+64,tty->write_q); + } + } else + PUTCH(c,tty->write_q); + tty->write(tty); + } + PUTCH(c,tty->secondary); + } + wake_up(&tty->secondary.proc_list); +} + +int tty_read(unsigned channel, char * buf, int nr) +{ + struct tty_struct * tty; + char c, * b=buf; + int minimum,time,flag=0; + long oldalarm; + + if (channel>2 || nr<0) return -1; + tty = &tty_table[channel]; + oldalarm = current->alarm; + time = 10L*tty->termios.c_cc[VTIME]; + minimum = tty->termios.c_cc[VMIN]; + if (time && !minimum) { + minimum=1; + if (flag=(!oldalarm || time+jiffiesalarm = time+jiffies; + } + if (minimum>nr) + minimum=nr; + while (nr>0) { + if (flag && (current->signal & ALRMMASK)) { + current->signal &= ~ALRMMASK; + break; + } + if (current->signal) + break; + if (EMPTY(tty->secondary) || (L_CANON(tty) && + !tty->secondary.data && LEFT(tty->secondary)>20)) { + sleep_if_empty(&tty->secondary); + continue; + } + do { + GETCH(tty->secondary,c); + if (c==EOF_CHAR(tty) || c==10) + tty->secondary.data--; + if (c==EOF_CHAR(tty) && L_CANON(tty)) + return (b-buf); + else { + put_fs_byte(c,b++); + if (!--nr) + break; + } + } while (nr>0 && !EMPTY(tty->secondary)); + if (time && !L_CANON(tty)) + if (flag=(!oldalarm || time+jiffiesalarm = time+jiffies; + else + current->alarm = oldalarm; + if (L_CANON(tty)) { + if (b-buf) + break; + } else if (b-buf >= minimum) + break; + } + current->alarm = oldalarm; + if (current->signal && !(b-buf)) + return -EINTR; + return (b-buf); +} + +int tty_write(unsigned channel, char * buf, int nr) +{ + static cr_flag=0; + struct tty_struct * tty; + char c, *b=buf; + + if (channel>2 || nr<0) return -1; + tty = channel + tty_table; + while (nr>0) { + sleep_if_full(&tty->write_q); + if (current->signal) + break; + while (nr>0 && !FULL(tty->write_q)) { + c=get_fs_byte(b); + if (O_POST(tty)) { + if (c=='\r' && O_CRNL(tty)) + c='\n'; + else if (c=='\n' && O_NLRET(tty)) + c='\r'; + if (c=='\n' && !cr_flag && O_NLCR(tty)) { + cr_flag = 1; + PUTCH(13,tty->write_q); + continue; + } + if (O_LCUC(tty)) + c=toupper(c); + } + b++; nr--; + cr_flag = 0; + PUTCH(c,tty->write_q); + } + tty->write(tty); + if (nr>0) + schedule(); + } + return (b-buf); +} + +/* + * Jeh, sometimes I really like the 386. + * This routine is called from an interrupt, + * and there should be absolutely no problem + * with sleeping even in an interrupt (I hope). + * Of course, if somebody proves me wrong, I'll + * hate intel for all time :-). We'll have to + * be careful and see to reinstating the interrupt + * chips before calling this, though. + * + * I don't think we sleep here under normal circumstances + * anyway, which is good, as the task sleeping might be + * totally innocent. + */ +void do_tty_interrupt(int tty) +{ + copy_to_cooked(tty_table+tty); +} + +void chr_dev_init(void) +{ +} diff --git a/linux/kernel/chr_drv/tty_io.o b/linux/kernel/chr_drv/tty_io.o new file mode 100644 index 0000000000000000000000000000000000000000..cc4e52f7c0ee376ec80289619bc6b262ff5295d0 GIT binary patch literal 22496 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 +#include + +#include +#include +#include + +#include +#include +#include + +static unsigned short quotient[] = { + 0, 2304, 1536, 1047, 857, + 768, 576, 384, 192, 96, + 64, 48, 24, 12, 6, 3 +}; + +static void change_speed(struct tty_struct * tty) +{ + unsigned short port,quot; + + if (!(port = tty->read_q.data)) + return; + quot = quotient[tty->termios.c_cflag & CBAUD]; + cli(); + outb_p(0x80,port+3); /* set DLAB */ + outb_p(quot & 0xff,port); /* LS of divisor */ + outb_p(quot >> 8,port+1); /* MS of divisor */ + outb(0x03,port+3); /* reset DLAB */ + sti(); +} + +static void flush(struct tty_queue * queue) +{ + cli(); + queue->head = queue->tail; + sti(); +} + +static void wait_until_sent(struct tty_struct * tty) +{ + /* do nothing - not implemented */ +} + +static void send_break(struct tty_struct * tty) +{ + /* do nothing - not implemented */ +} + +static int get_termios(struct tty_struct * tty, struct termios * termios) +{ + int i; + + verify_area(termios, sizeof (*termios)); + for (i=0 ; i< (sizeof (*termios)) ; i++) + put_fs_byte( ((char *)&tty->termios)[i] , i+(char *)termios ); + return 0; +} + +static int set_termios(struct tty_struct * tty, struct termios * termios) +{ + int i; + + for (i=0 ; i< (sizeof (*termios)) ; i++) + ((char *)&tty->termios)[i]=get_fs_byte(i+(char *)termios); + change_speed(tty); + return 0; +} + +static int get_termio(struct tty_struct * tty, struct termio * termio) +{ + int i; + struct termio tmp_termio; + + verify_area(termio, sizeof (*termio)); + tmp_termio.c_iflag = tty->termios.c_iflag; + tmp_termio.c_oflag = tty->termios.c_oflag; + tmp_termio.c_cflag = tty->termios.c_cflag; + tmp_termio.c_lflag = tty->termios.c_lflag; + tmp_termio.c_line = tty->termios.c_line; + for(i=0 ; i < NCC ; i++) + tmp_termio.c_cc[i] = tty->termios.c_cc[i]; + for (i=0 ; i< (sizeof (*termio)) ; i++) + put_fs_byte( ((char *)&tmp_termio)[i] , i+(char *)termio ); + return 0; +} + +/* + * This only works as the 386 is low-byt-first + */ +static int set_termio(struct tty_struct * tty, struct termio * termio) +{ + int i; + struct termio tmp_termio; + + for (i=0 ; i< (sizeof (*termio)) ; i++) + ((char *)&tmp_termio)[i]=get_fs_byte(i+(char *)termio); + *(unsigned short *)&tty->termios.c_iflag = tmp_termio.c_iflag; + *(unsigned short *)&tty->termios.c_oflag = tmp_termio.c_oflag; + *(unsigned short *)&tty->termios.c_cflag = tmp_termio.c_cflag; + *(unsigned short *)&tty->termios.c_lflag = tmp_termio.c_lflag; + tty->termios.c_line = tmp_termio.c_line; + for(i=0 ; i < NCC ; i++) + tty->termios.c_cc[i] = tmp_termio.c_cc[i]; + change_speed(tty); + return 0; +} + +int tty_ioctl(int dev, int cmd, int arg) +{ + struct tty_struct * tty; + if (MAJOR(dev) == 5) { + dev=current->tty; + if (dev<0) + panic("tty_ioctl: dev<0"); + } else + dev=MINOR(dev); + tty = dev + tty_table; + switch (cmd) { + case TCGETS: + return get_termios(tty,(struct termios *) arg); + case TCSETSF: + flush(&tty->read_q); /* fallthrough */ + case TCSETSW: + wait_until_sent(tty); /* fallthrough */ + case TCSETS: + return set_termios(tty,(struct termios *) arg); + case TCGETA: + return get_termio(tty,(struct termio *) arg); + case TCSETAF: + flush(&tty->read_q); /* fallthrough */ + case TCSETAW: + wait_until_sent(tty); /* fallthrough */ + case TCSETA: + return set_termio(tty,(struct termio *) arg); + case TCSBRK: + if (!arg) { + wait_until_sent(tty); + send_break(tty); + } + return 0; + case TCXONC: + return -EINVAL; /* not implemented */ + case TCFLSH: + if (arg==0) + flush(&tty->read_q); + else if (arg==1) + flush(&tty->write_q); + else if (arg==2) { + flush(&tty->read_q); + flush(&tty->write_q); + } else + return -EINVAL; + return 0; + case TIOCEXCL: + return -EINVAL; /* not implemented */ + case TIOCNXCL: + return -EINVAL; /* not implemented */ + case TIOCSCTTY: + return -EINVAL; /* set controlling term NI */ + case TIOCGPGRP: + verify_area((void *) arg,4); + put_fs_long(tty->pgrp,(unsigned long *) arg); + return 0; + case TIOCSPGRP: + tty->pgrp=get_fs_long((unsigned long *) arg); + return 0; + case TIOCOUTQ: + verify_area((void *) arg,4); + put_fs_long(CHARS(tty->write_q),(unsigned long *) arg); + return 0; + case TIOCINQ: + verify_area((void *) arg,4); + put_fs_long(CHARS(tty->secondary), + (unsigned long *) arg); + return 0; + case TIOCSTI: + return -EINVAL; /* not implemented */ + case TIOCGWINSZ: + return -EINVAL; /* not implemented */ + case TIOCSWINSZ: + return -EINVAL; /* not implemented */ + case TIOCMGET: + return -EINVAL; /* not implemented */ + case TIOCMBIS: + return -EINVAL; /* not implemented */ + case TIOCMBIC: + return -EINVAL; /* not implemented */ + case TIOCMSET: + return -EINVAL; /* not implemented */ + case TIOCGSOFTCAR: + return -EINVAL; /* not implemented */ + case TIOCSSOFTCAR: + return -EINVAL; /* not implemented */ + default: + return -EINVAL; + } +} diff --git a/linux/kernel/chr_drv/tty_ioctl.o b/linux/kernel/chr_drv/tty_ioctl.o new file mode 100644 index 0000000000000000000000000000000000000000..5c8c1e48fa6e38d2d60a5c3c34542f79dc84d3a7 GIT binary patch literal 10644 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 +#include +#include + +#include +#include +#include +#include + +int sys_pause(void); +int sys_close(int fd); + +void release(struct task_struct * p) +{ + int i; + + if (!p) + return; + for (i=1 ; i32) + return -EINVAL; + if (priv || (current->euid==p->euid) || suser()) + p->signal |= (1<<(sig-1)); + else + return -EPERM; + return 0; +} + +static void kill_session(void) +{ + struct task_struct **p = NR_TASKS + task; + + while (--p > &FIRST_TASK) { + if (*p && (*p)->session == current->session) + (*p)->signal |= 1<<(SIGHUP-1); + } +} + +/* + * XXX need to check permissions needed to send signals to process + * groups, etc. etc. kill() permissions semantics are tricky! + */ +int sys_kill(int pid,int sig) +{ + struct task_struct **p = NR_TASKS + task; + int err, retval = 0; + + if (!pid) while (--p > &FIRST_TASK) { + if (*p && (*p)->pgrp == current->pid) + if (err=send_sig(sig,*p,1)) + retval = err; + } else if (pid>0) while (--p > &FIRST_TASK) { + if (*p && (*p)->pid == pid) + if (err=send_sig(sig,*p,0)) + retval = err; + } else if (pid == -1) while (--p > &FIRST_TASK) + if (err = send_sig(sig,*p,0)) + retval = err; + else while (--p > &FIRST_TASK) + if (*p && (*p)->pgrp == -pid) + if (err = send_sig(sig,*p,0)) + retval = err; + return retval; +} + +static void tell_father(int pid) +{ + int i; + + if (pid) + for (i=0;ipid != pid) + continue; + task[i]->signal |= (1<<(SIGCHLD-1)); + return; + } +/* if we don't find any fathers, we just release ourselves */ +/* This is not really OK. Must change it to make father 1 */ + printk("BAD BAD - no father found\n\r"); + release(current); +} + +int do_exit(long code) +{ + int i; + + free_page_tables(get_base(current->ldt[1]),get_limit(0x0f)); + free_page_tables(get_base(current->ldt[2]),get_limit(0x17)); + for (i=0 ; ifather == current->pid) { + task[i]->father = 1; + if (task[i]->state == TASK_ZOMBIE) + /* assumption task[1] is always init */ + (void) send_sig(SIGCHLD, task[1], 1); + } + for (i=0 ; ifilp[i]) + sys_close(i); + iput(current->pwd); + current->pwd=NULL; + iput(current->root); + current->root=NULL; + iput(current->executable); + current->executable=NULL; + if (current->leader && current->tty >= 0) + tty_table[current->tty].pgrp = 0; + if (last_task_used_math == current) + last_task_used_math = NULL; + if (current->leader) + kill_session(); + current->state = TASK_ZOMBIE; + current->exit_code = code; + tell_father(current->father); + schedule(); + return (-1); /* just to suppress warnings */ +} + +int sys_exit(int error_code) +{ + return do_exit((error_code&0xff)<<8); +} + +int sys_waitpid(pid_t pid,unsigned long * stat_addr, int options) +{ + int flag, code; + struct task_struct ** p; + + verify_area(stat_addr,4); +repeat: + flag=0; + for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) { + if (!*p || *p == current) + continue; + if ((*p)->father != current->pid) + continue; + if (pid>0) { + if ((*p)->pid != pid) + continue; + } else if (!pid) { + if ((*p)->pgrp != current->pgrp) + continue; + } else if (pid != -1) { + if ((*p)->pgrp != -pid) + continue; + } + switch ((*p)->state) { + case TASK_STOPPED: + if (!(options & WUNTRACED)) + continue; + put_fs_long(0x7f,stat_addr); + return (*p)->pid; + case TASK_ZOMBIE: + current->cutime += (*p)->utime; + current->cstime += (*p)->stime; + flag = (*p)->pid; + code = (*p)->exit_code; + release(*p); + put_fs_long(code,stat_addr); + return flag; + default: + flag=1; + continue; + } + } + if (flag) { + if (options & WNOHANG) + return 0; + current->state=TASK_INTERRUPTIBLE; + schedule(); + if (!(current->signal &= ~(1<<(SIGCHLD-1)))) + goto repeat; + else + return -EINTR; + } + return -ECHILD; +} + + diff --git a/linux/kernel/exit.o b/linux/kernel/exit.o new file mode 100644 index 0000000000000000000000000000000000000000..7d1506af908a485936a359ecc4d101805c5204dd GIT binary patch literal 11160 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 AWdHyG literal 0 HcmV?d00001 diff --git a/linux/kernel/fork.c b/linux/kernel/fork.c new file mode 100644 index 0000000..816fdba --- /dev/null +++ b/linux/kernel/fork.c @@ -0,0 +1,148 @@ +/* + * linux/kernel/fork.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * 'fork.c' contains the help-routines for the 'fork' system call + * (see also system_call.s), and some misc functions ('verify_area'). + * Fork is rather simple, once you get the hang of it, but the memory + * management can be a bitch. See 'mm/mm.c': 'copy_page_tables()' + */ +#include + +#include +#include +#include +#include + +extern void write_verify(unsigned long address); + +long last_pid=0; + +void verify_area(void * addr,int size) +{ + unsigned long start; + + start = (unsigned long) addr; + size += start & 0xfff; + start &= 0xfffff000; + start += get_base(current->ldt[2]); + while (size>0) { + size -= 4096; + write_verify(start); + start += 4096; + } +} + +int copy_mem(int nr,struct task_struct * p) +{ + unsigned long old_data_base,new_data_base,data_limit; + unsigned long old_code_base,new_code_base,code_limit; + + code_limit=get_limit(0x0f); + data_limit=get_limit(0x17); + old_code_base = get_base(current->ldt[1]); + old_data_base = get_base(current->ldt[2]); + if (old_data_base != old_code_base) + panic("We don't support separate I&D"); + if (data_limit < code_limit) + panic("Bad data_limit"); + new_data_base = new_code_base = nr * 0x4000000; + p->start_code = new_code_base; + set_base(p->ldt[1],new_code_base); + set_base(p->ldt[2],new_data_base); + if (copy_page_tables(old_data_base,new_data_base,data_limit)) { + free_page_tables(new_data_base,data_limit); + return -ENOMEM; + } + return 0; +} + +/* + * Ok, this is the main fork-routine. It copies the system process + * information (task[nr]) and sets up the necessary registers. It + * also copies the data segment in it's entirety. + */ +int copy_process(int nr,long ebp,long edi,long esi,long gs,long none, + long ebx,long ecx,long edx, + long fs,long es,long ds, + long eip,long cs,long eflags,long esp,long ss) +{ + struct task_struct *p; + int i; + struct file *f; + + p = (struct task_struct *) get_free_page(); + if (!p) + return -EAGAIN; + task[nr] = p; + __asm__ volatile ("cld"); /* by wyj */ + *p = *current; /* NOTE! this doesn't copy the supervisor stack */ + p->state = TASK_UNINTERRUPTIBLE; + p->pid = last_pid; + p->father = current->pid; + p->counter = p->priority; + p->signal = 0; + p->alarm = 0; + p->leader = 0; /* process leadership doesn't inherit */ + p->utime = p->stime = 0; + p->cutime = p->cstime = 0; + p->start_time = jiffies; + p->tss.back_link = 0; + p->tss.esp0 = PAGE_SIZE + (long) p; + p->tss.ss0 = 0x10; + p->tss.eip = eip; + p->tss.eflags = eflags; + p->tss.eax = 0; + p->tss.ecx = ecx; + p->tss.edx = edx; + p->tss.ebx = ebx; + p->tss.esp = esp; + p->tss.ebp = ebp; + p->tss.esi = esi; + p->tss.edi = edi; + p->tss.es = es & 0xffff; + p->tss.cs = cs & 0xffff; + p->tss.ss = ss & 0xffff; + p->tss.ds = ds & 0xffff; + p->tss.fs = fs & 0xffff; + p->tss.gs = gs & 0xffff; + p->tss.ldt = _LDT(nr); + p->tss.trace_bitmap = 0x80000000; + if (last_task_used_math == current) + __asm__("clts ; fnsave %0"::"m" (p->tss.i387)); + if (copy_mem(nr,p)) { + task[nr] = NULL; + free_page((long) p); + return -EAGAIN; + } + for (i=0; ifilp[i]) + f->f_count++; + if (current->pwd) + current->pwd->i_count++; + if (current->root) + current->root->i_count++; + if (current->executable) + current->executable->i_count++; + set_tss_desc(gdt+(nr<<1)+FIRST_TSS_ENTRY,&(p->tss)); + set_ldt_desc(gdt+(nr<<1)+FIRST_LDT_ENTRY,&(p->ldt)); + p->state = TASK_RUNNING; /* do this last, just in case */ + return last_pid; +} + +int find_empty_process(void) +{ + int i; + + repeat: + if ((++last_pid)<0) last_pid=1; + for(i=0 ; ipid == last_pid) goto repeat; + for(i=1 ; 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 literal 0 HcmV?d00001 diff --git a/linux/kernel/kernel.o b/linux/kernel/kernel.o new file mode 100644 index 0000000000000000000000000000000000000000..54507435076fa056960c495d5836e30d337ff558 GIT binary patch literal 87278 zcmeFa3wTu3)i=J+nKP4fW`@j=3}nCn0}L7@K!5-dxdaHvC1`}G;UXkt5)ug^B@-^z zVlbi%5e!y)je^#;TD7mO{Va-A5DH?g;^nQ>YKvMdH2$rvw(_eC~p5gi##WOWc6V9I|T%r>b;@IC*Nxr=0h%6BjE$j-P}V((QuJp2$biy2IaLmR~I4yt^{O2$-~_^WJIa( z#K)&kpN32}kq+ZDAaG<~3@u;jO=w%&6E3AqJF->WxHtYfs9{@Ewyi1bXlgl-Ya5{y zj-ZNGV>7jH-WxwJ1*Is_gb|fSubp6fyjR8_d{}I$Z*+B8O9pS%oAwpWs+l3GyKrxM|2mWTymnWyjFq6WviGXo(S6d z&>f14p(o;A6lNa+4gOc5tkkkdh#*AbN(H9%uM$+4u5Wi6dKzq663(*IK%#EY++-#^zk$!3%`= z`z`>&1g`{c+}qTnITju8F_k5$1t^Y}ZN>HRzhHp9Cs{`W4LrJc$or6oVLd4U#heI6 z%5KRkwbY#oZyMT*%NYp^g88O)y&G{I{Qn-`@rnMJEh$l+;6v_S$@s2f;gAW>1Vz!E*PfHe? zU|`tgJ7r3nqZG_3Rd9TAvXV-qFlw|>RlP#wFjgRXDa&C|ym(RsZmENd5C?n?Wy=8z zzCIF|^&K=&4PrRMEt?9*MMOL#%Ujz@5Qoze^45`I(@GVMx4YS5sGBQ+*5I5(uw$5l z3)xb?gbx)OvL5NKLQ}d4cKS~rapZkU2C6ph+eO}#VWZ4ab(a`(=q>i$M!lo2B-+}g z-RMxe6$ty5ch!ud9$T~qJbn?6DqWabhd!Nnarc1D9hZM}a^K(GiD&km8UWG}vZ|R8 z0wJ++P-}5CgwkWW_RKcFd~|EX68oek?U@d@oO}~E@Oj9VwHyel`MFi58V;O?Vh1h+ z9Qf&8g;uvVPwR%yOvPK9XLUgf&0!eRa6&KD7MU8f&NqjZMhyg`dK6r7)s+k2gU2KA z=VOC#*~0|q$sxErbv`aX!{jD**Pw5z59u|cI-%`*Cb-3Q(33crCbm=wV2|g3<*^HK z*~78-z2)4@6U?zeX zktWB}xeGA|$iAGi@xk^@(dg-?PM^MWcLYiU;^=Og91ur#kHh`(>A1YtAv(nFZxby{ zqHKghALAo*kAchMpb7ZSgfEU%KQ6W>v_$6afgmQHewRw{z(~W)m4@hSIriz}EP3xS z0VnJ+aOp1oCyFBy7B5|PHG;A3ZmP!+Z`dTKy;h?Q^8;e77;PD5!v})pqn51AbJ|$p_!0wXk z_W&ycmSPjlMm8JRoDF^ym9`wH2S+3P>ZM#wB=@+WoY97H8_at8vs@qylUA^uP{XKzQ^Dkc@GmGu7ZGZalEGXOl zR*BSHb~+>@zC?C^OMz&5s%1SAmd7N1v6~gg^Qt+01)6er&&_Izw3hi>w=gyS=*5A* z4m@!WV9`l65RwdiDOcb4i|-c0U|>CqmD+9CNA0wj3}{Mxmo^8{#TS+FyMJ zE^FAlcYS)`zALY~!r=_`xq3b+P18r$qL8z_pi^M_ZRf)nm?m6hV~0 z$T$z(0>zHPy^fe;5i-!MrWH{5pH2w|4kvxl!PGBzn+jva?r#+s$WN;(cWplwYt;jH z(=OZGHyj-p!F(Udb#2@O)o(gv*$34D@l4B!$i5TI6quW120S81g?ehHH2-Z!u!~K~ zW9Y7&){Ml9xaVrm258MzShHpSmZO0u_hPEHZDI~6JHxTbk~XtD_hgy&nJgcYWx!{$SQt|$ zKK{pNwP*-ge*Kv&qsa2;XR^#7%U4raQrCd65^=WRTR@p*DKclqXBAl{+AN&;9z)|U%aFJSS+a~2n}xage4vshew&f*dlGv_*c-DNChYIXMFau&zVSzN>7x^oscusD9s z;`J=P?wrNVEWYtv#h7LNJyF;(7PE?f-!a#=Ex?40$S3KxGUKeR!sIGb^N|}5JXV8| zw5JZ2vvPJztbItVeSGcv2dx^2i^|*Y2Gp5;d%@);*YC*1viBYb6JS zexhyY_%Ceg=ci)^HO&U>xG%2?;Z`*$C^vh?p z;gHh2SKS^{w;%uODT}=XhN+$tNA{4@0s0nTzDmnC#jxb}{^`^7t8gE~ERjIwa62*w z4eTA+o9d$Z0)w5xEWspsdJ|yM@RZLN*T2z%bq1Lk?S^h)rz7&=j#_iN<|t}nim2M0 zJmq}mDbU%~hM=M{ZQ?skcAU#I*K-=94WROkA*YelJ5#8I`;PU6GA@;caOXp^2zf#% z(G~_5F_|B2o27TcWqj4L=?!UsLy4#7S0{Szdp5WwbIZ6zvXs7Yq$F%hNmxn+&yZpQ z!AE!ych(V3*e=8Z3iknIf+5Ro`fk1y*=q|bBT=vPxgX0`LroZ74~r)6?!SWbWQ!r& zRLBGtYjf+HyLvS@5jFYLMcp#^otOJW0qW;l^k)Y)R4z6jNQ2 zFi{a=NrGHc!^?7#P^35z`9{m$967q-m|2R7&M5|jzh>oF+1c1mVu~3Kc+?(}G*HE8 zVWKlexxrJ|b^Rt8!YTlDI33RpKI(O&gW-&|aO^Bhb|9GrnI zib24nl}EZ+=|00sQqHha5xZHbh~2DI#BNq9;%8WSLl-L#v4v{xz$3t3@>1)sh2KdQ zZQi@Vdq_511C410i#kT4oql`w3w_RqlY_Q)&Pj6D^C2g}n6mL%%2SWrEpP8?xb+138QL^ZA{0K`zw!6Gynld_>!u;GRvm z6^|GV^l-wvRp4D#JKAz0&yH6VZWR+pZj=L8!WV6Pg6)?14pbLHbpanoATDV+RtUeE zB-zs-NI{U?EwSj5PciaJw2f)JMK^k71fS#!j1twrXFQzOp+6kKO5PYn)IrREK(W~1 z!)DTy;U6uD7I#Edp@B}wRG=w^BORWH1r!W}f+@|{MW=|kfsIwJ2*QvEc>1vNU{e}) zNlWz(A2G8@^1x`O_e?N~MH4q~^0$>}@O=KkBE!tYnrmZsQqted%cP*|qSEkjfDuYXex7{?GS?#hiP?b)pvQWf0Grsbn) zN4u%&-g27Sa-eWA#?=zQQl4Yx6=NMIbHRabH`!Qtdr^RRdL3`5k?eRdHJ*wW@qnl`l4MOv>=aJujuEnmChIwxCY#!4oQO;@&nO z%mpx({hDeDs4XYTT24g*H*e+OH8#hk`@l9)j`pVWWOq8R87AA4~}_GDLSjB z<&Q=y`s*{KPFA2MN7Qy=Au23P*m(o&ELJV$NrGaa`Emocn30$qbj6)E4(whViV9Rj z7C@%>`ZwXJS&W>H{wPW@w{Y7W4Xaay3^C08vrsyV64$9Hb~x4e?W*$Rx9}WEHlyVP z7GlxvBw z%vn=ak9Jg_vUL^y`?}uwFWbxqZC(05uglxbu5a18Ix3So)DYr>tO$-NAIj-A7aPJ; zacB4rkq0|EyMg&6=r}>elQ#|>;&PJcuvpAx%2*qrLPCy2VDq=JdPS*&2=ruy3B1BD z!Cb_7HWZV)V|+gHnFuPo>&z2kAR5qM#uEDe-LGK;{!>?UvLQAW-VLt^Y~I?NwTLz& z-qRs+M;CilcoI7AFh+Ia2C{af$-ShGFF}ndHdZ+joodYZ5J^mK{6e*Prs`-?wF%YS zBkn?&lTw%3_t?L{smrl$LTf)Z!j_X~jp(Q9#3o8tx2l`1Tvkz?XpxO5a#W?7tv00L z5=vv2f_A5Pz%kSDfU;`w=lGoK7SggaHtVGca`A#k zFn$fv%ui+TWOK0s(PDeLP+5#P;|dn`{pUChwD;!GmXLf?_el_tnrqtOxoQ6A|a5@|rs*&mg9#OPMg63!Z3)4z>Nve84C6qK!p0_Qc-DCEjYC{m%uD1BL1ePlgPFb zWmRi47b=|6qsda!b^wDdy7%q^nSSRTZMqlS!*4h+QZMZS2<@qg# zt5q)LboR_usUmF!ou(1Q!9BYJnV2M1@b#rFALX)_Izq{}vcPs8OxletFl-DZkIRtL zannS=s5~s&Zy%9KiIe$~u9llLHm~y~PR$mr39e@)woqqlGp~sol13kDt^t7=m+f9z zbLtZyd6Y73_nlztC}lkH1Pq#&oLWFr%N;qGVB~wD#^+wPdv68~@X1Wgo^-y9Cng$C zp6r%Wxocmr!#4MGCO>6T=QLFZv(@&meMkukLqkr(0~oU`1TLR=e7^+zFKlUpJNYb3 zwqBPF&!&ev#)HE-y^Ltdldmq>UDt$?u94%dBa3ZD$l@6D(|E5wg_KklaPD0IIu2x| z=HjtBdZv6%Ndfhg?j%6V+W5kV^Uo2iB&);UJ0BFLI- zg`E&a6PU!F!LtiEXMv!IJL}0I7!jrsVb-PFA_GQXafgRZh37l(PmpFp^pm zB~xo!`p?vK?@9WUHJuJ@ehA>nJ8JB1eJj_JsXxQbXe1oYbw8Fqe`f zSMnrBl#j(FDwE+OEp<~R1a@_HGr4{9S3H1H*^@0?mtr@(9!o)6<)Xi=HW`yeDdmTn z^DxmM#Msl0ms)Xz#MRXAZf0Mpk&E_nGx0<^jRiYAjmhAKq#Y_3;`EtZDTX;r+_Mw5 zXB@H2jW63qaXr{6m83&*#TfNCkIVR(93-W1tUr^3q!bSO2{hKOluryCTCxppBbvZ! zorYyQcjD=NZ@IN2?kL37Vra_q2t(Rl_dHX%`$XJH5e^B=j<)?wSKC6U!LFMQXM-hxTXx0RwDa>bVzYy*19>umg3puZM3=&5Oa^)QBQT+DW9?# z8-;(cYoct3(1tu^L!PoB&%!P*8-J2#>y*baHtc$EmLZtf-$iG47MRD5m5zQ{MN|RK z`GZuzA}o>y(XbO$DC#cCV_;$ksx3s|op)xb{SBLrsmY>k*PgatON*m|0%keztNe#M?nZ1+vi}l*J%QO~0gAKJrPzH6&fe1a(^6o?!R}SNH9KD5hb3u!u zEGpd_VGn5-`j0>@VbK)Dt*|FZyFdbC;jG7HmGWCZY$Zp4R8WZhi4Dv`qV}Avw&Ba| zLZ{JbyVGDY#*Dr4$GEFQTeA1PrGNCATz}xZeRk&|$vWr#&#tNtHs^vR7jKv-;wo7b z83J9O2t`la1-7oGg-%h6DvIK;xNT0;;8a$%xO5xGnIlqihPEQ7XzUq9#ZFP*Gm7M) zK$>@2z2c@A&+~}V^536P#E~G24m-~^I~J6UJgAAL8y4nR8m$fvawuX)IMi}##`WCb zAiS+4MkrCjD3ygLWB3?IOW7M_p zln#<&R*!2)brU$EJpTvXxpaHbR4wx?1;D|m7lbl93PBz&obPSZU>yX%lNJDLG(vVngq%mF*uaXeH zT^Wnytgem>i4BcZ)>N!%j8w0ws*2RsM^;v?sjsRdZ{PURehT8fS zk@)IJV_j8MgQ%`s-O#XM+3NZUk@_{0$B0W;M^>#~Qx%EVuBwWxsrph=RbyN!MO}>( zB17`>*F&9{F}q}fMP$N|2JeiS#Zxa?036_g6uPK(B*gNH#wtiRb)Y+u8g)sWZeixL8qDU$v&9 zj_mQO%6RSSdJ(H#TN|s2RIORFdW{fO73(dlYB?{Jyu@Jnkb?DA%7;x6RgJYQ*JDogb-6`Xz!2B9X}S1u#D!knJ9l!BoGhR>Z27H?0t> z*H*28|JRA-tDEX$jiR=GZAD#eEV8-*?W&J~Yi(_1Riu7(JW{c?qPDIAZ5NfRZTGBR z6KSkkv8t**9-*Q&P4!6yr3)4ar;O4KYpNQ-CuA@iP@fk;bNmhSh6uuWG1RgD{NDKEFsztB6Hn74eE?vTwy)6?zR7^|h67 zK_fjgyFSvmuA%`gi!c-;!)3D?H`G@m9Knz`YV?@=vE#-UTr_ps^r9IvFPSxa&fMa8 zmtKa0{|id-wS}^Ui_ldmd=<+pV^!5FYHF`pS+}Zwb;Fm|G{&3Ou3Nw1TJm)a#AT5B z{3Qi;XsP$#+vRVh@ckFy4y5~cVp{%ZKG}ouz0b4oo{jcp@D)LKYl{A_K%VuCPtoxX z$~(vFnyR`g3?lfget6aT+QvA0p1u^*rWQr`p-(Y3;x%w`HA4!1mCF-wgLdtFpp6ytLzJ~Q!=^l9lb#ft%b z8=s}5fjSN;9R_T85A>0W9$5)Xm`5@p@8?!Fv4}eI zKpPI)D$L4Yp?%=$c1}DDKqlim3KbCI;FN1za8|if-cvTP()kq18rwF+7qBX09t_Z_#@vD&>ja(=D{}Y_nE>pAYP$bs*VOdjO~%ypP>Y*=w@FJ6P2Ha!oO&?b zKlM<$IrZnVFX@+Z$ls0q!zGlTp5EXp>-5WYDEkCoyTG$n`sFf6(O@2KY|!Cm`NuZy1?{qKv{yj8q8sf5Xp2*5tcQQyn{X- z>{;k#pqHJ6-T?ZS&qC*1bJtnuOy2jMg}xi~--DiycF>;d)8{s2kJEuQ< zLI(JcI{4R}Hv$^RK_z%E$K7dvo<7%cogAwyI+yHEAiFq4HmqNfl#PI1h)-aE5MN5^ zn^~@v$-d$I5yPi>pb)pvKhx98U0V$F___Oy?V;WN^X=ycd@|pTk$lhxflj^9C7);X zNijYXK*#hT|41vxXC`PKNm27@9B^?r+7{5}ccZm~R@RO7FlbA=(GGwX>qa{Y+BMy1 z?}F9;U}-;MYv=_+d>y#z8~qMUPs!)jUX*!QhCj9^5Bvwa(TYHOt{aWx_oZ$$ zev9L13XMK)2JN??Enx+W{W2AI-vE6=4(3Kh59z;E&&P*B&mJm-TpgEVN&hPCjezet zl>G>0S5n3vXMVjT87r*seek5=yXd>f!)Iu_dRCfw2?tyZWyIv`bTHtmj71NS+i4XDPhY z`7mhvyU`AScDNhuC}=NqqrD5-e|DpBvG_MBG};pa?M=|eD0@Py?YJk}eT;I9@Dmz- z_W6xAPsC>?%Kf9nWGKTQKH&~+ZjHh41F|ltPptI+w~Q*S+ZRPAk9G;`JgX3 zpU_9kL3jKX1Wtd|r_gBUdVH=04P8e0Pz@B5w+)}~fu1^k?*;9_6dL7s_$d2YHJtKL_C7u{P<|usEWerg%T3JbS_}@YYmv$AM;>z!B1n-1 zWuoxiVaRydS7*rJsHWCch(6(5^744(-IQT=bfU9=K{=rzB4*&f8Ep_KXmJ{*!2aA*_iXVpsj*TCKUyZCdm99y_zQ zE}1@kLL}#kk1q)W%WyBl7ZxDyk4)aQ-)WiEFrAq87rCS6(Vo z0!oz+#Oj19=U(-1(~_)m%~}_aflZZj4>SLaau;@#RC#hg&{m=Je*??Xsyw*|*rj|q zR{K>s_xZ}s(Eo#xPC57D%rnZri7iMa&pn77v%CG)OsAad?=6Z|GAaB1*JVz5a=qAA z(J$#4Lrcd9(C)=bx~@E$bfmrl+@{MwEy7hHTy6rwwcLgbVHj!0A>-z02$!b}SI-b! zYVb+p+gn#J4m4X7&3<8{yOS44RdZr z$~}j$->N2kF5w>5X~M-<;u^Fc_gmnK}B4uoCSoim)h(xk=eB{Zj4_rF4Ot|n5V`){R;L`rr4@g!2F`){C( zELo!aZ%mey>;6+zu#}a?^d9l}2H`2E-)eOK?^#m8k~;Wc9c)|vAk;L#0$N>3B(D3H zqf9+>50`k2 z|6qNrZVi;kkzfk_4d^IvUtJ0HRv|8KX{xXeg6>{MZr$1nad$Z@HLUNFr-HC)4S^o_ zauv4R;&xZ6unmwWwj8DD){kI=yPDA#v7RH(3d%;ULk!g#!a3Gf>ZxU2xz+`&_Zq?@ ztd9t7PlbX^@Q`SuMl2Mc&xRSa0B6S)+*}%65;Ve{{Y4X z-EsQUx}Qu)C+yWH&9riZ}42oFD$A8}+Aw1l@PNN_9L6 z;@+v$MOf!9l6B$XNc;mp>GU2#=YDF~{hcV(SraI9?%tLa8_sj# zV6qM8yKv-Kc&3oQ0Cd2GgeQVtD?C#P7eW^BG{Qxo3(s_dvs`pn5y4_uDLgX>mbh@5 z*fW!0sjC{`B?QY{D*(UZrnI;NY@S!o-Kg+ zv0d#oI3LKT=3Nd|7nx6jh}nPa)1ZacLxnz$GfQY2I!PZ-stWa&0rjc@b~+$>oBE9R zfx9Y%K9hjJlUl#zZ-5L07;Q6jcN@AY>n`-EU-xRGO!USn)TR40mWw{s^+NY+{9zU& zY@tTIhc+3ADf*I@0X>xQ8lOPxd6z+#CQlG>D_d({i=u3tzXtI>5cD1E`#l2XS|2{E z^&N)j|003D5{1Dh1NMv1H+BwK4^@d1^|l7;~=X(ie9 z9d(0$3eOclBb>eMYS8HHZJR(4bhd;HF=zw0^lgPwCPsI$MbYQjk8P~aIk~H~_xF+b zb?4Zw*1j7;bi&tFjbcE26|iqAm(+>=lNkZucaHOF?H}0u-|xbIzs)~nGS&a+yQp3a zTu0F-oD;uVdoQo5>Iqv^oPQJ8^yg{eV0ic!xNGfKkc(aPyqpMkhzmUQ{t-^{gRW*n zUnHpSSS|XmV#$g3a2+XS*E_N&Y*{gI6%Bg7AFg}_)Y`x8u)OcE^q)+ne|1g}Ywf=P z3%lwgr>kVGr&O)$L{1(1I;c5Ei?w#Y4+ppR4S4D6uB2^oPThhLP73zypPdn!|<=tllj`HVA*s#*XHdt` zifT!9jyQw*Yx1s?ROgU0sEh!;K~kM#&Y<#NDbSlF)j8;_wU2m^M3coEI){s%D9@PYfMKSG}UGCO;|~5u<@e zrJ!@bTx)-fRoqOIj%tKC`s(Q0qmJOv9962uv#IPqYP-rWJNwr*7QAqEHB9)m#>rma z5fWpJ5kF$BZ%78`2)ow)VY1dYy4L!JQ>z%!pVhu81)X#5TKk*;;|u1!sVxLZf6ieA zZ`x`MWu6k#cbFGetXa`n>K8KMqhx@Mh4ZO!(8Ki91U}N;u4aU_hZAx$O5}6jB?cup zOb<7J;&x$lAThw@?i7Z5*x+Y(NCv*m50V+~FBBn{5_|@~>_|)zqxn?V)3yClq!1jV zkI{;BInlXYg+M$rK{gTEDrs6M>m&jT>m>7_)!;e_0by{RM3Tt&4EWqH zfzRbxhC&Z}a5X+@yqqRS9V*Zb_if0Q372;158+VX?`UfYnS?J71={6=4d40DuFWTG`Yt7X0b#%IyQG)q!myzKCc;;c zj)jLgM6UV@5G*{LN2H96!NS8GNdyZIe}$wfu@@c`f`x}Sk|p-SgSL>WvG6d8HcA8w z56mwVf`x}isalp`;o-~45_{o6TXZ876zcv=ctRmqc$kKsQi#3qpe-gF79RMxQ3w_u zo?@l41Pc!z6InuYu<*d=zIHVcEIiyt8Hr%w;WtSH3lG1cZL$Ol4|gU@%5{GM6)a_? z_QHc!PQPK{VHis)SYj_cXv;rE++g8>DTY=_1Pc!<*q#^>EIdqPJyrBI79OUvp6ZEk zrM>W=)yxNCFFa`1ylKdV2g~>Y_&uzMC#GdknZorlq_O1izo6LnA5iO-Mhf3S(A~?( zt^1C`M0dH2Q{UgnQ$g7D9fM8o<*k7Iz7TmT3HR`ACr|7rs3qNZ2^!(9X52-5{m8R| zvQgg;C|g4~$2XGvwX7@GH;eUNLwJPmJ;Eyq=lPx^Tu1$*eP1KIitrfUU#YX6aK7&s zgjW+D>pMWWf$%tA2K9f5@Oa@WfH0OE=t6^rgH{1rgA0vxybbkf9J!wNga&eplJ)?>ZYJ-$#^i=?b?}w1`jNwm+7`{)@GoE~Q zz3CfFp0P_o#{vLZ1EfPSH3Ti=YTR5Am{O4^jp5Mu z-9W~CatNObbZsnQ!{AH4Hjc3A!=jAP#uN5~K1yf>goC~wq+dih1o~*9O&}aL_>!+( zOgP)%OTIRdaKv{P`6m&M8hpvuCKJvv_>!;ST!Sz93eGe5lCR)=gD?5o6!I5<4!Dr; zM9^!6HkEK8WC2ejTm-t%rW2fH&|O6Yi(#eEW)Lhf@RG01Bv@+TC11OQV3~oJd~FuN zB?e#ewb_KreQAg&Z4Tj>kB<~>ZVdj!OFoz3I7X#w@seK*m>=8KmcbDyr~Ks(RTn+q zq0?XEC~>|?hin(+8E(Xs_S(HDKsJ&&mi~I3Z2FG42*qlv@VIrpTc@=zf+4*c<9I=v zVoPKM5qrAy60)>je0Q@Evo{^6Po)f!^WMm5r!g$?7L;`o&oz*R50^~74d|EL2vl1j zvRudxuwNi9V9}#6PM@XBiHWSGD7z44(~@GvEQ471FDQxvR@&y@smK@t^kAP$Y2;PT z_x`l@+n}JAH18^wqvaVRC5yrg(dWlBYKilWK&_p#fRd0ic~Zj0AhCuL70!1BwRWzB zD2a+Lb=Vjro@DE)oo^9p?N363lBiZrv#qMOt?GrS(N`$M1Y;8M_d;knCBa?{R=q~? zg}?{T+gP|41J=Q^f#Hp%R&hppaZor|6k0m5oL(F}PFZemM!-tDGew_I5j6U`o6u{6 z>GpQ!5vm>Qlxn*jHinj8z?NU>M49|R3b;<_#pHU^0+=-o}uHzl?9(xk+uE)q5d ziG#H2Cg(epT00XCRmV+TBy0>4Izyn<`F5pR9#ImlT_kJ_60|~ZbG~<}wf`|$M_U&O z8-oNxSHHvgMyA%D4Ns^#?&u<6W03IDSKo5JtEsg!p;8jx>LOudkXS~EozAy7wf5$u z#Lg}fHUEvmI&0|`zeKUI+z&w2zIH(&ARvtSus^MBbYM{}bH z|Jp8+5*zYZLoR(m6(eFuuTM3Gp01fepfvffo>d^jy zx2K=t^I>nbgZn)c>DQv}xcn73uv;0DH}@vg(Yaf>fJDt)iAmFa z3?(Wr$8P1%L9z4l;h6uDdHI*Y{yG($H7|dGC1=gcH&eBfm%l@EoV@%=8tQBa-p+dd^}M_WU4X5?-l)XM%LhV} zlb2hdJ9&8=b=zBkzNO?*TYap|kedJMFfxe-XRa=3+ z+X&lv`8O$R=jB5vYv<(w!ggN%CVA|s56m%CE(a=H0t=jC$q&B@Dsu>Z`w zoWYSP^a5D!cAx>UiO(B(+%gr|@FJDRec+S^q^UcZ28%S4qx!ioS^Kw^8UM@G^ zoV+}UdhNX2m6DgcQu1jnLDX|s8Ugu zSw!_VR+9N*N?Cd4N>+BE;#`t>D;(xvrJ28Dy>?km_%?hMi^=|Vs5w)kSgvDZpYPjc ziauP?V|dV)kgtfQJ3rK*weK-)(}5o4zBQCG%q&%ZAF%vPc$FbNOzk?}$Qw63NM8YHpY0X7SxrmoI+$j=U^{ zql4sUa7Z{<0aSD{PRv5Esv_5py`nElW~*K)>x*<~j_TwkeX({umv4glj#6>n19bEj z7CAphp|!sYFHvHvl31VpB;1shFJ&2)%F~eh*vqi}Uk97Eb4O8xT) z%0#LEO$1xVKx6>thR8}rM{j~^;Zy8@S%!F)SM5XepEeuaem|B@owIJAaH;fbC^2>C z2$-Hc0;V8&1gsC_kSFa>w~wI#hr1fN2Ae$GHHu}LspIR4o|jk>;g4P*U77+)+U>YJ z;c{KN4Q(`6q1aU-e-pzDqQG^zWHqmW3fFwXra6N21%&B#Og0$&wu1%ac>Cg;brZTW_;OB6+&S zR}F>a>()`KmL&zcRg^55sC#*G%C)E#3JP_rjg6GZG@OAUn?#CqFHcUn7L#qJZcSi` zL}uyMx2Reob6^`4ETK8Yy7dyxxtd6cZY`&bL`rpQa}p`jtq-U`mMqb&tCA(8$dUfky|&bQMaMaOqqWtk4luxVTAG8%^=x_W*C)(dzcTC9{Vb4NjDEr zPc`E%Vm?bAl_;4#$)ge_vypHu>&i8A$bSvt5#}v~R}#)M*AlLy{?TR$VQkuC0n=;= z0Lte zQ&zTKvYY(~Z&(MqAO55pJv+hbN#pC3&T)c7X&C%%?gFQ0^f-XRtRXz+ZB%HO55NVU z{N*H@50E}~5_qtHN!9@AP)rR$pD__P{Z5!w=gN5)uuPO(Lm7oaCQ7ag39C~|u3?1L zDJ54fVRcH$HJorzCQ7amgw-h}*GR%)^8@I2}^_T;m9v=26D-c)}`CaupB`nwOLRBEssFl4}BCbxO%~F=2H|$u*I1 z#N12%NrcrYCD&xa>Xed#)hQ(ft5Zq}R;QF)Q^>DQDY*&>t5Zs@se}tv>*XI@DVJv zfHH4@oS%biqa!>;gytf?TwCfv2_2(Dw~|2|#K#cNBlp0s1A{|r%@krDKF$H_J0YOY z06{nM!0R%`Q9|?F4iX+aH^^Js2;AJ?#6|119p#QN4k!TgRIkFCZm&B4!pJnUkbGHe z9M(ZCB&lI?VSN;vx$<uZ^;N=XJ zF^Du+93qivsJ%krGFm`z$w}3s-R|RTWDZ^C{G625ekC`ixpb@w;0#ZF(<)#}o8kRL z3MtI=K0ssaGQaoM6fEe~i49epp|nb&4P&kPj+MT5sl&$BrSUYAHjEYPI|_aGQYx3G z>N^_P4!NI!UhrEH1SIIbhbTT(DUQMIR9g-4bY2G2Q3s(UkVZ{%;lTMNEUkSkdcY(5 zWeMBO=E6ttzPraBsf)hkNXq)8W*D;=>kxV}QcdRr09IV9%1VNd6Kj&GRCt+VTYQfNn zLZ>I0v0X`S&3p+Q?(d?+h)6cgvlR#a(u{48!J$CrZSG5X@WAR1CU*&$g!Mk9E|&t< zBdlmXVbiLIta|}rzqOD&rP&_Lz}^vruOL0Bdq1MURjYu6bnksc?7Yo8n{4(1m-iF2 zSRoPJ$GlA;QQiAOvLr|MF>iA(r0QJVI~o2{NFEY08Y4^cb?*&SEs+A1#W0^IpPws<}DXtoxX^xof5YIf8nS zx4Ez3rXupTG~-*S!_SJiCG6yFuR*%NbM<$j*!nWe_edj!wI6iPGIHxy7V7q>yv_PK zc~stJT>>*a%fC#uRyLa9sU+OP8b_Yky{IMKT82h=su_0?YY2Jlv+n0n);{b01mRlN zm1|wWdaofo!uo*lO2T>8%Y^Hwf3)>&!m9|6u_n>BdcygZL3lOcvDTkhR|Da3)*aOU zCBn$tPQkdKCr(dV<0#O?3WT+Y@LIyUl}Ukhgbix~8?c`2rj^5rH{1ZaAO55p-9w-* zP33JICpdY|bjunHskG5NvLmcLkV+f#Av7442WF+^v+GT31bN2t8yv{n$QmFWim4%( zX3WD)Ujeh~+&TLI%e>7!lu@YiHur^uRo>Z*xy19I@u3UiT!zQMth7o=jNfZ3`U z_bh@cZ*$KkTy6!>zwSANW0s#Dn_CKhB5&i@mN-V8yp5aC{MfEeGdKce-o{fSl8U@7 zzN!&vujf{ftaOBtnYI|Jg>@GkYMO-cWen0S!ltzl)tg?zexVkkmHEW#Pq3GiE9!sl6QP=Vzm97RG1sS^ODRi?q!ug@DQHLS|+)8UN+4b4011`y(f{a&mhPGfGqcGv(#yHRt0vYsn6{a zGeqw{qY`bf^Rt#(JCE}!iNUG@yKZ^T7fV*Cj`Z+hG+UR$Y9?y)$lAg&5ek$69V5o~Nj7vfJ@#{oaL{BQr~R)Ib$;p-o8Hstz}HE1e(MvR z^h?(D4vEf>eS&z9t?VGt`L$2<+(}yhK8eoHeQNC;w0;^p|9yh6>bxvk^%u@OZWsRr zKpOT}N~x}7L3jjJeM+M93!#_@enT}bja271LP7l-?K36S`IS&m{cK7PNp*fF6x2^x zb%vxmzZ44Uv(%dfnP&g+*>F)@D9}P-b#jn5mH-!3+kY1s2(^LM!0VwDC*!SL)?HOLwghL z(Ej5*A>PBs`3CTx=t(2(N}LJCY0=FnalMHz7aLiVA&oSiU#G>v(Fa+snSaDOvMUR) z5kWgBI1&_`AH57Ru1SF1@_d`S3SiJZ>L+0G{0e36(N6(HjzV}$9YDi#2kdd@vmVoP zC+TAk0!Gq8R+DsWeNzLzbNh4L+|3X$J;whB*jFJuZUVx$+=dLA^JUoPuOc(v=Xxv! zfM=Rzkdpo=>fi=?01q+G^=PS9!bS+sX&9?rPT26g1qIrC!lq|51hfT&{T?<*D;wlC1}Bq4OmY(Sv-yP)Jk{tW1{V=s^xT zZ6Q_X>VaoiB9S~ja1o7>NWLCup=yZ~=z-E?$wWQKxkXzv0}2ZDzz^6+iA>W2e2cBk01xxDS10GRaz6>czgC6h@>r;5J5P7e%VJ=K%YJ9U6Ijb`~FO#Q&u<7|aY)V^R z4A}2^0L@6NB;3PuDS2YOP)oY!H1$+7?joL_kY@#Dqn<{}))3C|bP%p(UAdkp`L7{7 z!t+DID+%X$wiB+S{?VRt!m9|6@!Ub%>Ivt2$_TF}Jl1nL;ReFvJkL}Amk5u?Acb%+ zEly8*wv(xe6$sBWgx3<*Ju4}&jVL#|RcuF|vIZXORghQb7;3?s- zPi=4$&i1K;r-UP(rKne%L^$eG8{C9*d}@Q6aIQ~na1+k+se`A4^L^a=)20wE0G$U< z2~Pwa3q?~27eW^BG{QxoV}qOEEFX3hwIYJWuo4^G1WSB!gPUNf5BrqbB?QZSa)X=T z68X-p%_dy#xr?K14&j)m99^f)<##NQ|E~jyV@SFd>$dX%^JBXj@2=qUKL@T#hpG!V zHy5MkxZNOmK7kX>@r-EUxd*Dv0>Xyp2;qweo1RMYOd#y{@L!uYFD?cg^gK^^BGvR1 zev+PXDhZ18dMF4QRxkrewdYP~uzIRmrXw7!3{}g8&|qb%T8=`%3USQ&eO$G(dVR=R zMEcKAQ0}*eucap1ZjE4TgoiV%HF7e*sOQ&kk(Ea{$Kxl@sGGr_>zT=#N7JypKn~$C zgbR(pC9E!=NQo)ZHi6mX1tWwOKhimOak&5?j z0EtdPJ>gp6>cu89S;|<47P|%$b$(P_YhOu;#@ZDq$d!Cjez1}^GH-*ON(5hI61~M}X;!Wl*wD744eHnw*~^*V_LqZNo!J6~H=GuVh1;sAsaRCyaj@ zNw}sc%Ns(EQk{*(Mc=3U16|$^cY&blio>Ch4Vw{TKkV! z&mX8j7NFIl&!5rTuI=P=emGrg&q0!=+OVCuBlt46NjAI3GoPmpDTJN~We{tl3iND9 zw!_9^^y3cY$C`e#$anj2s`RsG_;m+4)TfC4i&3U+Va5F)XE-Lv(EmbGw-WR-tYau1 zAo~9X4A%ICK*W7$ks+q`z*YMeAKjY=32{{fbK6)Ue^F)tiu5rk`JCnD*CB&-<*ftd z?J0@5`{34j3gAN$HM19L@H7MVIHv&WK}j=i5UAuhz$aYBrQDyjGAW?W0$77lV5qYI z);Lz8&H`9hldjGJSbIq??TIlR^xjR_J`3PoOT<14;2lP!Y$j?8>)wZxNVe{sf@Z1` zdres(SW}K9OYAje!#)e(O|Zm13*e2>7>Qs_`Bkcx2-cK0CQIx!Wy3xT;2p71(D1ykDhi`z(Mrj|%Lw0N&L!M{e?CO?ek(B!V^NUnUW(DQigt zYsz;d5v(boo2Vt-8iYo;s~L9@ zYXy1iHRV?*Yp*F!A-_5cU|mN2>MVfu3So5?z2qO9ossh>U>9>rBjqfBk#ZKmNI45&O_#DH|zg0gRNh0ERjXU_D0uN#s{+%0|jr00pZxWd*A>Wd*A>Wh3P*fRS<*z(_d@ zU`(Taxu$G%o&_*E&jJ{oX90}Pvj9ftSpXyDEP$cT0$7)$e+_jOz)GXX=FWyckyCO@ zfn!v<7CGf8!2H;*#*Pmde0P$E+%tq;qQj3`BY5)v~+uOCDpG1&PxMDRV2q{QHv zlE@BBj~TKhfJeJMH5R}B)q_jaZD~+;%8gGh_jjPGj z$X$7T&UT5}8jBr`X+{F{5YaS)*Ykczqn9}UE{fK^3rR}Gvs57;b5P$~e)-A9jNbB4 zsEy%EZk0F&YGeN1@=&Oa1$*OVOP5bX{Fnf~4VOg1y?H3qF3IjK4}~t}xYKt;dgB#N zw~=TDhrEO3s4vtlQ!$p?8!veJG9{Il&6!n~4aa zJ&Iqf$iA44t5O>4M8DsmI%6vzOCq8HMCOO9b{E1}+lb3Fe4JnR`##QmVo~r8kg&8i z0ykHD6~6P4@c^Wan@P?jD2(ldLy~NKOt=?e(-0!blqn`9W zgu}*K!hH#68(HKzk8s3E`aA|`+R!1OIW}tTe+7nvAfOXMXPWp&Q-wB+To_kY24!-o zhY{>GnC|+B%B3J)d~99>Y}Qcn_WcJ6-7b-do7PhslAh^vrJtAHQ_JuKv9hXXYOZu2 zzUzCjPXmjqhj5uhW@i@o;EJg5`6fdEDtZf7x++0(s%f(`$&aaNb|$}yXxf|zRtq|8 zPU`Rmpkp?8eX=UIQC+Y)Zo+&;DqHrltBMyB&dpcYzvK_7apF#Ppt z(z0xK(pNgH!O!+MwG-_>LYva3tK8R=+<^Qpa*+|jVN9yWL*`6zyV^kzx82Kn2K&&f z8JNbSoq8_lGdol1LX}t?^x6_V5gzBKDo$ZzOE2hDJ*Ce?NaiG&-A?1}MhvxE3s=#K z3vFN6=rFs9Hkxbe1*-H8PudE-tY}1PMUGW=gGZ(^r<7sUB2_BsJho(1YKbFbn?AbJ z8k# zjv#zf#)$+Dw100vbq2TNCfn^9UE?{k(+BiG2y$|w=oS~f>_C94$kw~ll|-{tu*#w5 z#BHBsS0x9S-BEqdEU|4n&o(9*P}!aJs4nZ*X|5uiwXeE%(EpXm?|)`rIWtW6-cqsO zJJr!n7}%YV)wM&zojusc>A}98&SxiMzU-{d(PnoXzCNr%mQxY?$bQ(UKI-4S(*~$< z7D=VEivP3D?0i&tQXgvgnr-US#Oyk{QlDygs^Fi#c5E*I>T|l??>rfMI8VlNJ;_qN zl$@+NGC1&Tx3I05=gYY!lGuYJ2d@1nR+?`V>#C)#)3%r|~ zw8a9NVw$(plRjl-x8}n$|E`(Nqth|c4xsKvb~Pw93sDAn(WsQCrLSvy{7wk>aJnts z>9)XUcnT*EI-|I!tui?mowddP-b~Z!-!!K)&8|_J8kS79Qi7IY*)>YL^$z&Y6`ZKV z?97@n&iRnY?CM?yX-a(bQhk8w#p%s159#hxOY%97hewhTi^yl|2|FCRJR%$^JD#0~ zg#9SW?o{8IA3+V~p=1gAFs0(o6b@NRN(l$)0K4Ik;K1Mv#fIDHz|JsJGuxnlE@4O= zzRsvcM(yqzJ)V?KMjxg*sj{h3WqeUujeD=knNx#+X@V2#YKB6Tq<0OeK#F>l2D`>k zPiKJqOF@w`1bdw$8hUq~ezH<~z03RCQ{O)1=gb_pQ`UO)24sLO-6h zuRe2#r|RnxBuofXg6^M72kjoh+b&c0lnIcjyRD6xwmYROQ!VJ$qO`6N&1Y$fNBJyG zv9R+s*%_aHXQYXKF1)CVdl-P)Khk^Psv&(6_-G?WjI6D%tZRx@jjU)~h4-i=D*vUB zR6^s1#uQYD#;O&os_Nq-YN)8OvZg9FqLM*gQ&kZI5sNDE4GmR|08xE4?;t5Y1=g;p zuc!mr0C|I54(D(+M!5QDJ9irT>`6E3xtT2^u_mF-#zpts@Oa3t~vKZ!up_0-Zm|At$$pWm3dt0ziPqX z$m3GI=W)+*7ML@CEX(7bkvn&qBX7OZ=Dug4UXVF2^PziYn=JCOk7acyl@VK6nX)Zi&PI}h0*1SO~y}{%1Kj`w!K~)2rez^0YT-&0%VZzSC zJ4Tu-9x^ju-Ff^l>8|w;;--5Z^tgOx^}ulJVR!EPzG+UGG09Rkxs)k7tR>W|6d&p2VbjC%*6jKl-tP*9jlv7ys|PITmX>$cioPbmgC1CGG8^1o3Gw9&1`w~9kb~> zA1so^&v+J^Qqe97>O+FI(E66!ZX_j-mk)Shm+R(SUT5G!&EMtSRX4}g+q`RT@uWS) zlgx+qEL>Qexo~ji!a?$X{7$^4Z9)X=f(yQ%H9$UpM94uP$3uKgMMGnk@qj9v@qh@I zrn@)CYyk z9s2mpSJ`jM)B1#-cH7rJVUE<#XAhoHvS&{%95K)SluS9S=Z5V6^D-Us=iiTyw3W<5 z*L}`^oo3+c>Z)_rnyj7!|zaQp(<3D^B!?1bvoYgYb?eL%nSmnpjW{gI7jQ(DZq zE#|_JEpm`tzhT}I&MoFbbKy?R1?I?C^>LZ_A2B>>?LwEY`sN)?JC6@En|5MIy!z0q zucD#&|ASY}Nw0SPnVI-+lDuNnzj}O+*>rr*uASyX@7qpVcibGQ{>SewXY#Xi;pReF zX#Vfo&IB-uBJbjr1jB%+K)`hsF&rYuEsBbOD3=O?f(HR~m?V>AAjyO|0w@9sD(it4 zDvA=k@K`_;*A+p$PjnX*1rJsfLG)u$g!Mp?@4c$mlgL1n+m-{^D^t8SnoiAW|~WWZ?RT{$|D8oh3Q#y)STC#eQn&| zwpp%i`GrNpj9!6Wo7ORpd6}8W-#Ipac-!%F*B;)4_3kTWe^sa4A{eCIl%D9cW$eo%$=G5h=RQM~=ti~CGW>}-0*@5ji6L*aj zgR&Zp7<{=c^@Z8ART;3p&Zs7`ldg)aQ9c9PvO4ikHq8`wOXlHT$Tf!YPaW=*$v^vb z(q4(|L5rX>a66$1B?nDU2Hedf^Vmk12n>PqvZqg9WV80p=42peQF2FeZJ@Uc*|XVg z2sCjwoJ*xQ4;qzqV9!@^n;SjjhQJL;EEC-c%*(C{w3xpmIp~7vRW~SphU`pU;q4IU z_3BN5*OcVqK$S~k@u(d;l2uhR6dq`TgPj2iTxa7sBYVD=nNgXiHW`(iKI)y!W1Ef| z2{D>~y6)J~wQ6luplin)vaXz(YY)Pm>PPc#a=C5M&0s$>&BH%mv%j-DgZ{|AJ2PIh z_v|>BYU}9CBqC*AwfW!ji^z^$%_V^SyeSGXAx}r*j#%%!X2sR|F*8} z{VZeI$Uv7$pMIwVAvp-kYt=H4li9=FrvqoOyVE6^*EKDwlVNz0Ff+Xeo!u+Y(zPM% zJij_x+ekMm)wJHw_1+)c%|sYTi* z*ffN=%bbT&*+co~pa#0>yXOqk$bMXHT-f>H&XN8<0L9f5%yU9gK?DFc!N_U5xVeb^T|3Z67YaV+w zpS{{kjmIO`9@0!oEp}udZHRX{e*2Nr>W0o)Ih}l_V^OPKn*%M-7q?f$$-WE5b(?K} zc%aJm<}=U4n#}P=1>QJnf?Z2wuT3WLJcKUIjzJSsVO5!}nrz=m^YLn6eTc^CDb z9_Uk*%u6Om1}Ya-x!b|ljF*?Uo)DO9R)Ebc%eKEP?v@o`r6FKPW~&^S5B^N0 z7-x4V4k!3UR(`NBT#4)cqA-4fZ5v0hFcM?r_E>Z#k_8D9E-wrgh7uu@k62x*iAce? zcrXzS7L`UTDkcS^yVUQk+?+p##eV^Op$lIU0z!ws!tMHJn!a14PF<|W**C|O>R zfcwxmg36;EZTWPph(#0Of$lim-2C7<*MjD#AD!S8%Ky6h2&wB;qE_pZdg0q7zU{IN>6%0CASAt3()a z#gP%jf&>v{tD|#Cv@G1YJXx6NY^$temrh-~b}S9$ckbo_I*$v-%EP6|iuIM6A7oJl zi(=uhDNNOvt0DN(K+VJO$HNJ%*m4g~3>PHTY+PbR1?t}<%Xwo77uw<}QaMC|D0ozTelWi@S}+b1+Nor0nb^{- zaU6;xmPl6E>R`)=prsEP7Q{gXq0-X08=^^~rQ1`E1o`VIS3M=sSR%JZT=~I@Sh&&^ zNJSDQ6A$K3LLC+c=~@IWuq#qvu26Z&3N%9R`YB+AqURlrMex(7h`V@f{H%Fv7=w{= z%rKyHVJ4_u^%j&y<6&GWK^CyR1EVYuA+t#fYU14A)|IOq{N|x391HSRY-}lodBw8a zF^pA;CJG%1UKA}4+e_3&7IxR5ZB%SRtlN-n<2b!Yc@ziOW?50pGDJLay3e&4WtkZZoj>bLRZ&Y_!UMv z=;GR!1?CxsD`9ei< zKKC}PKW9*JTzOfNB4EFpxOTyC7H=xKYM! zUz0Xk){%vQlyMgd25EN^QQj!`VHjlugXj~WA4UTJ6Vy%iuXd}4eVA&j(%#x_nj%aTP|Bw1q{XWNE@UD^+{HxmJTz z9-d%hS7Y`1z%|TMIqh+(`}?bG)F0cgWv1D;cA1tnvc07m9bDTG+4ZZvr(2tCvc0$8 zWs3GPKh@?&BjdP(ObV8Tad-b!JB2sz+3u#y#y$*$ZB1VFq)dc;lIFSC`fxWQpV_cx!ghh&t+@8b z<=@mwI4w2=Cnx3f}g|f9XN*7cbpE`g-*q zs($9O{N?+*ee&^c%c4z|p;FRE+K#$mt6?ks| zeSI*Si}6Wx2ysa44}OmEN)R2yf`}bL@N$GP&caA>1jAdlM-d+vslYH_G~zvb+X_e( zrr(J2Iko2VG@sjR?RNbp(;8!&+lOgontawqN4yM=&eh3dK#UI}e{A#AlX-D0nyhfo z=}5N14OHMFwF3io;L#RMI1zLA$r`;hY(kOO-bLeKp#luy?z6APJ(4a~uiKX3=<0v< z7|F;gO7O*%>%>uF7zrbK8?`vs{5~de72Q&qlf+xLS{G? zEvoG)lUa##iled+MvBmb=OZbG3T;OA^$5yFq&8$n-0hfL`iLPSE~}VmhhCY+G;wBU-gQ-Nx9uy<1r=-AuiFHt0`Vvr?nm$s|z? z)kVhgc4KAS#7VhojuYxsN}}oi*;_3WqRwXJ3K&1`w^4 za4G)!Tj?ZKje4-vgMUS~t=Ha%WhRnptLn{i5}X=cT4oqcAsG)9W8@o;4(=pte-uvL zf^ifYP#pE3;)%Hz5$U()8n&4&0j2RjFvt6{#27xTz$5=3YjI;3IJd(}cJw-AUqbEu zYKP@AE>c>`_uRqp$#9a-@9uV1^KDOUcC`Sn5isuRhUN64Jr+)Ix*tZT#}Uuk76c3I z-h2dcos$2`^zQZ8JOS@0!ol&rZnWQ!;wiNd8*A@bBOf+P>F;Xx?o6SDV7!dO`|g>V z&vO6ku{+iU-+6E#q97QtInx8SJ;!}MQztNtS3QLH`+DbW47h0YvP5Kk*^zck+>Y0Z z{5ry3QLOV?EMINodZ>NgyWQIowhs5+trokeR{}N6p}PBQY#7M0$y&SS%$aAD_p)L3 zg_8eG$ZvTb@J8}#eJ=2iyxDt8Z4cs!Fv?P+@=?5r!0T7OJoZNKP|vu9{KB}MeE?^B zRIe#gTmb`x4^jC_qWVoYtT)~Q{r(=LwUep)<30@7A8WY&2T$pEe;Y){CH0>9cNiMI zQuMtgz?hFnW=@_d9?ZJsEvC@ax|Pq=tu!Vo{7E@`i{zqRqe8 z4ENRjLZ3k=pXz)4m!^f+B@JhdPL+4j`iAS&_~OYp+qls)if1%xGZh^B@x@ zdzKoVoNCkHH!rE)40|m$hd2pagAv~g$JAH}pT-kqDC=_bTOP-8$OLxH!AWH5Gadxs z1-OkeqL*1r;*YffNVFuHj2ZWRN6=-)ObX-O3^qmLh5YQoduN4H#fSkjuI*(!0n;fy zsSGz65N~cQOT0DojXEXxRZS$Qr(^`n3yYO|f5B zV`2!q@T;skCrNN!tA~M@Kqj?J+-1ynm_(&1LipV@_ros`O*?6PFlm<)5Z4J_Bna_V zkHoq^z6#8Nb3GzreE6<16(7EZv+;ZJRh*3J_Bi2?7B9Z8(Ej-F^F{LnB4T{_abhaI zzF22|nFg2K!I&Nbzbf;VT&*CP8u2}GP=?7>e3&{Y72oMt=XrbajR_hvhC67<6^DRK z7ZWAgh5Oyh04-eQzw<@!yy}FsgWw%9PWyRVxnCb|qizl@$jQn{ExA7m3@#>7* z+J6JbQe4sE<%#s#9yg6ax)nGWKOHf{@sH^?#6RZEAK&WJGfZ>*1khW&_y!;#0}&1a zGjXohOW!R02=&wO5g@K+I4XM+^;ToPAdyjI*Xli@ok9xXXr?y22?^a=>?WQ@BL2zb zdSm`Aor63vJSHv_UlCW6h;P048HxPtl->ho-iUHRA#lILNEA+M65HB=nJbJrQQP~8 zLm7_aCQ4sI;QeQnm<%=J(&3|=CGzl{NIWVV0>7Qhky+4M50{| zm!2p+TYA2@P^5!g9=A&TK>R}7CGrC0e$7byNQx8Wl5NEHVi)l^u?LB|A0d5#m@m?& z7~?4w$BUIDj=NQQA&Kj&XMONr#+)J!AU`$cV(Dq(e*tE0gsq0rh6@MN zo}7RghRFL6FF70^O@sW=?=95pjIrM2pTfO{;fUuk@ktW-`9JRW2JGko?zrQ{pH^n`I=hKzMaos^4H%Qt#Q-;1ydbYMNkfxVT z?oWrMjOQbTf2#0SFzSrAEy(?PNS`b{h+JUIIEBv=9}%~U-+(;+aNIK(UrUgheuAlo zNYmdd^%Utlq@NZ)5%+7Xe2Me`$>Yk!8^p)Nwc_XGR(Qc6alZTKxZ~*Lk;nHT(JuRo zXOLrz2}&1=5%L=3Q+m2MlRO~9+$nvxct43g#|r6Z#h1vdjQK!%gSd&j!I)jrd&D|T z5Iz&X{wI;o=3*=IKj>ph_YzMf-$8#$dbAiK{}1+2`eJb!iJS1v(zlCMWEHL(>1E;59`A@76rSDOg?A@Wo+p8{JEtgo0EzNATiegm_6x|b zjJb^A`x$d3^=M;mm%fYoZ|I{R;o?17=ipY3cKS^G=6+%uXryzkSS3C!t`WD0 zyTtvEa>un7dx?F;)5S{hYVj^{Be~v~@5y|$leWnBY-4(Z%+L8^r8rZ3RD4-{Py9mM zEjDlG;^`uG7ki2k@e=Vy@o{lI$^4PX-;qbV{B;7Ezro^Iai&;B;$i9Dbs*7BP7;TS<>Dj~>E0~;y!1cCe~I6S*&W>e`-_dlP9j}|Fuo+na=(!p{h>_? z|4xi{L^$#_O}rlD^>{ORqcIOM9PMf`^$OfCs1fhCV$V+Q_&gHfmrLIwKBw^do!x#3 zv3VD#JBlO4apDZ|I`Lr=`FITEb+n8c={-xm82tz7@2Iz7uB5JR`%xfuPima!An`nH zA16IcyhdE9?H_=d=b~RF{XO+0V}6o8;24+AVIaeEr8|qg6n?7o+2R;6Dqcn2gnk&g z75y-U-zU9T`Z@6p@k8-Tko9$7H*f)-_ej+Hi6GB=IJp%4Q}I!;+p#YEL~(?8p|}8K z`Myhycy=j#zvEnb^+CqlP>hOG#B0SDLFQ*>cenpM@hdUsco#lIEETU5XNw<+olih~ zIM3Tj#QP)2eB6Gb<9u;=4`{UeE__Z!zx-J71hJ>sN3_qy*zYvy!QxrsIpPR$v^YjA z6idWXu|iCU_IVrWOqQM|&Jbsc*NE4Pv&A{$9pZfPUhx5Op}0hROngFIAwDC%Aig5L zF0K~Wi0i};#SP-8;udkM_?5U*%*D6~Zchf)W_gxaB2E_PhzrFR#1F-i@7mCk_Ys4+$k77gE9>(8VEEK1SbHpX$3*tI)t9S^`-=4QvD6$CSqH$r+AK7D$W!+ zj=|$z5Z8%ciFN9^?T3gR#6BX&C3rl?AINFqY>}>M7`{SWEt>i+JXbtc94wZI9FO4f zcZiRP>%_0b*898t`iLXMQgNC%M_edABd!y_6FW3;@r@B@i@4lO#tt{`nz7T3U1yZI zvFwb58;i|YgnHn9cVS$KJQw3Wm<+)W7KwKc=a7{cHzJ?K^A`EMF=NOgI1wVh$D|SD zo2WnXK1_c@UV+&n$l-VnBlBRV$*HJc@~?725X1e9`g&uoAs^LvGK|t}>gjlXAh)Cb z$cQoX$vPS4UUE75ktD{G7Lxe0guD{{9P$H<*^@YU1&Nb-hMa)*N=|{dGI9oxHJTH>-jro+k5Uy&-XN=iOA~Iy%WE8;8kQmhdj)aS_AIXRL z2mc?Kfyw*9rWuBIH{*QHRtYXc{gabX|KvTWe=>^tC$B~QlNX`>$uCg<5Wct#!T(O?b{a`a1kobe_TQ(K{ zOk%$lBy2$&g`X}C5yy!Y;w9n?@ka4Bah`}v$EIh`2kEbnw(S_&wp(z6!ncaH9U|Pe zJFp?o3$*PDwCxDA?FO{%1mt9A+|SlKXzLlY^$O0=_Upwv#0SO4#plJ<;um5a+}CY6 zip|CLVt;X%SSn5uuMp`QgYnE47l}`bFNd+JievaS&WNQMZVABez%JE zh!2a)#h1mm#gD}Q6TcO+cs(G#gT%wcqr`6F$>JdKe6dih5bgUR#5YrVwm4s0Dn2c) z61RvuMT33{^VL8+L_AXLBK8zd6VDOHh?k3Zi5a+n7;kg&XtBFEL@W|-5zngYjvFmj zi3`QQi{FbsiTelKajnJv;vf=juta)-c!|PSO0!?X{WeH%mZs}Np2xS+jbXE>Pav`X zh0+Oeio)rnko#RHy-fOP=`GURq<2d1l0F!=hsU$u!*uNX80ditKTjO3?USUZO0yrt zHmo4AQyf(iF4>6juA^q zT+^3IUrXXzyjyy)^it`krPoM*EWKHJhjhJ$E;kJIQ-79x1&a`xUr()+dpl zrs7c~+IC0jW5n(vrX{uId@6}HXWw(-c)sUiJmbYm@h0(h@d5E+@iFmP@pbV%ag(@R z+%48)e~9@OF{`cBoyDHw>0*I+iFlQGt9Y-tQd}i&62BJrhz)XFdVdz%h}}f{z76@q zoO(82#p0#nEOD;*fVf%wTKq|@-^9gpu-H=UB=!&oh{MDS#j&D&FNSAV9z6V42Ytn1QjpCQ$4`N+(^jI%BVjHom*h@TJJXf^u!EoFa(woJsgI#!s;Wiu)ZwB0n9adq|%yeV%lobeZ&J;!K6# zC;gcCq{7!qZx**IydFBpO!pA6If?w7B)vi0tnjQu-TsZmLrCm@oOD0&422gI8Yoc=81*kc<~bPFXGMOU7~$IhF(0}W|Q?lRLoQOLg_X~y6s7EDv5Y*m!2>E ztn};RTJaO{Yw;)YYJA7p2E=uK5Q+5R&%*K$u^EYUT9dfW+bMjoI9wblhQz2?DPAnj z6z%(Qq<6dY0`XCCrTCiouDDVBO582hKg#91wb)x6B#scn;#Bb(ae=s0d`5gjd|&)b z+$mWNrB{io#rL&+zs@e+bHseHLYyLABi=|N-g(kXNSy!U(#yrC#pg-v zzly~9uU7aDahI6U1>13c*HNEmAFt`CcY$Y5O;}nk8$ZY5nG5sahy0o zoGxA`+V3BbpZlekicgEH#I@o^k>5eEUVaekc5^yMJVIL0LwzyDyLEI@WKF%HYq*$-J(@n(|Vn?xuI6xdG zUMP+gE5)0{J4svz3#H!{-&6QE()%6n(%+xN{%xgui31frOnS6*vGjQ9$E+TdO0SlFU;1dV=(2($`4eDt(vq z66rU^4;21|^mk(Ri7sDF#Un`Mub1>d>GPz+VpQQ%q;C@MRQN*a<>HG9|3rGXSht5u zuQ7@1rkV6n(p{x{N)M1eTY8lASm}x446+X1drB`LabAx|uaJIO`Yq}8(p#i=NdF{V z?TN!niY>*S;(20$ zSRq~_-YVWJt`t{^>%>js*Ww?;lxM~TH^T%0OiE#4~LBQ6nFh_8ri#0}zBagP}64 zJH^GPxZ|D_cZ>B-b>U6L7Gg*7M6th^FGj_S#Vf^|#D(HA@kQ}XalQDt_#ZK|uglL- zVpkH^RUhdg;ss)XwojA3S)8lz=cV6}{ziJgelDH;NyOh#`grNd(pQT&D15o}i_&YP zw@LpXUBADJH;2Ua+)C`I@Sf6x#B&uMlb$Bd67LWn7gvzT_gm8I#Vz7b;z0wjAM93B z68Sh(Y%aDW5zo;i>{e%m4-@mmF=DZp6eo+9inGMq#0BD`;!5!~@m=u~@k{YXvED$J z?}NoI;u+%kVxc%*yjq+iJ}N#fzAnBeZWecl{7{JHb%1!Nc&s=?93_^BNpY$8w75!K zD{d6O6n_xwp6=4k5swhti^q$7#i8OTu~>|YQ^l*rTg7|DCE^P46>*KYLEIt!B-TGe z^&++uJBh=^rQ&MwLvf49AJ(#*4-rojGY7ly1I4q&Q6$>ySn2DRDH zCDu99#d8qZ0KZd`ZY$ki9IEh<(uLAd>7?`w>4oB>3V&Amb8&~lGl#fz8;Z@vlf?cc z&hs4Ue6d2DC*Dh9zopVA4R!GriZSt8ajy7~xSXty{)+TV;%nkRNW}jx3Hz{K;h%~- zMSe)fa%>8T0onw}0pT9IwoF+#vFI zvW)NQdX5j_9H?J9z;Vlgj^<~UEQ14lOO`>Rz9owvkNB1>gG7Bxmi@JPbwHLuf%}#$ zgG~9BEc>-pbwHLuCVfkm{aUO#Aj^K0<<~hia$Lu3--FY)%OUs+?|$}o_|te=4RQX+ z?-5u<_1Ty+kl&-R-pr@*IB7cgG`b_E5B{+zxIZpu(+BIQ8mrIcHZ4rQ0PBss0O-=x zI#;&uslZz3_%5?Bd%65A(Yo%wUi_C1raf~;%VzGo`dns^fXUxsy_t6R43xg0Az zAGd7Z^B1h-N-_Owu-@9IZ^C+8pS~UIJb$-r-!tD^wcNgE0qD>FVrYN<{|@cX|4L|o z{$HWa#2>qC-?Q3VmHq(q$G;KUAOBWpfBfG;Ux>$QE>7E@@zcMj7k_!$ z_R2Ip6?zQX8w-W)Z+hDHSQvDq0rvK z_*+ru==XP zt^O6|bCC9L1pTk0+;`?Y{!nOsW5tE}X$9>qOur-a#b|G>u+IH^LbI-E*Qf_Tk3wZ< zOP>XOSAF*#Gq+y=T@U|)+Fpe99&K^`O7pwV#=iJ3h4vPve@&X^_n`mwmDfXQ+m}Mm z^TqdC+V(Zj{kyyG;+a2wFX}B!@AEXh4SFHkuXldC)3)=w(sH$T#@CP)rG@b|fqv50 zK69Z*;ClArYX^OB%2LeE9S-udr<_7(%*4ec$=Ungkh#VfBKY1=uE&p9|gf_-^Bzx%$%*FN*1uf_E> zQsprY`e59A+NeEEfc6%q$N7KWJ|4f*(f(JbZJz@@#FyU%(0Agv0r@1<@36#6b-{fBs(adf)j?NZbEX=-tO)90kYn ze6NCT?%Tf#`W@f-EP?I_8@ERLKLhP8On(*hBkeFx7Smg+`!0y!z_^-30qwtK*M{=C{h;_P)>)(LT7ay$yx-7N)`99e4|M zFil6&bUaN@PSZ1?PeS|pRM+#3(9invdr#W_i=p|AkJoO{j|k4#`h(3zAwI=Y5V__rUU5fKZnkQmmmI~!dsYL%7LPP zmfLDaqCU^7)xLIp4m3HbyqvK5yoq9t)I_)}SO71douX#==>vm(PaE9N^gm^U>3=Hz z^~Jw_Bg}x|rvGr$4}VWT%k%{X3_fMxa5Hppzy8C|BH(I{(|%XG=S;ab&`hs@X2|ut z3K@?&*@qYZEji%sbfCUD5hZbHhK>F zs{IBQM&NifUWQXG$JE$#G%0Tf)vNL+<~agNxpUz(`#x_b)gDYdw=CAAt9>YNoAYRp?hTLbmN8$w-x0A_E-BZj&UY;0mfI3J?yKQ3 zk|~rrKPG-RzBXao8f-$gk~opMJR@>5PRX0!*Sbnz7^}^mTG=>EKI~iyR=Yv0cBjmJ zF^e;1Xje?m>2k_zEJKlR=llT4dd?K#RFIqCmbEmJZ&%?$h0fb*@nXpxIhQ_jQJddH zZg(!DZEDV&1U)gM+KS;+01d~cfZF%wcScMlX)_uZ7rMPr8qQM#bM85+D09ALaagTB zENl2TV*2Svz3+nm8hskaA1HY`KJ-^MjN>3+!H)geNl|#};YJ z0F#4zCxT$-ZN!^loI7&<_R8=vw%A>KDaX>>jG39?0|gg?=Y^Po)#lwcIrWZD)%u-Y}c(na3WJSg*U`o57J@2kI#YyFGOpOAQ zXDY6$A=%AnYtH_=%d}Rvz&HeD%5rgzn@}P$qOuy;!Cgr1lo{%poXw2&@exm(#a$7= zkBdEq4c)o*Nh|L3qVaj1$DS#hjC1jNd+4skN tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: diff --git a/linux/kernel/math/math.a b/linux/kernel/math/math.a new file mode 100644 index 0000000000000000000000000000000000000000..8342e5568a5e5e4dc4fab2ac94745a4b700ca732 GIT binary patch literal 6624 zcma)A32YqI8GbXne%@pcJ9c86CKU_a6a(@4S{xH{nHWgGP(uO@5ZKJ_&Uy#$#m+2o zXbOPqC~8$vibM~f7U+d}+(_f#lL_Xmt3Tp|Nv@$IeYA2bHPynM{t12LAh&3n5J0 zCEgXwD`o9Uvut^`@P$UB*3i_~r)vYr*7!q%g9yIx9L;2s$?&MywETV zg!eB)gv6pG#OFJGeMUi_SS7l|uK9^nq;R)5a_q<(*B-lS*Wo`+%zLT&{N9u|Kbe}H zzb|zN-t%{)jsS{tUTS@DZf~luI5(L}73X%RlEt}+)Y{_VgQ;YPcjo-=)WMD)Or(;q zL|_QN5>BC=c;{ayPMiQ=8*ub`@SZ6HZU^VWsdsLI`N%|S>q+XYuinz})MN^e-P&Q# zfBZfsQ=JG9Lq0)Yn}YZcv)B1m>Ul-%&`%G|O~nqsG;!_q$KE`yYfn&I}p!@~@>Jp>4a+nlN=OtU==yJuB5)xj6Xr)(@bln8NZXlp5qXD&G`EZ z!df%l3!QICnu%OvMhhvEGpB_&^Jpv?yWFj6cc*l#nswT?@jP8GnfV zD9a`@(PV&YHlpP=GyWU{DB*lF{#gv)7beWaG~KSH+l6NQaYj?Z4m17=qbcEHGyW6< z>}5KWW_$;Q>nKc_@wJSmgxzL5&j3o;W5)XzguP~b#e&;DGro@ju4ktOGvRp$gxtrv zmCX1qS}a=1sKI{ZmfMU)SvTWz43MYbnejL2R-iCz#=pr#?c-1##NgOzaSf*DkeMhK zJRwU%5MD(;u8SFd9&O$+v2fmne+N4XA#f-Ajfl1l;A8FAeaOC|h}5o<6!I)6+OzaF zXXGv9HS%-h4diw5 zQF+h+zma@{XltN@&UTNLl#kG<$qs~kf&3vNAsM$Gr3Ac)FnTQJRJ4N&nAyVi%wn0_2jW=F^~D_C-00FYc(O$!3N9{tu2cvc_;F+lHBFQI>0hbP`z# zc>(EEv;cY`>F#I|^dizd(P_{fq<%-h&rX4+n2{F-0`(VOatx+{1zeQl#rf`e@Hs4=2Lx_S<#B zb5UB^!-)xOz35?4THAx7nJd-0Ke`v)EeLyhP}#t;yNB~{t~##LTHk}IFjx7Frn8n%cXnf+b{nBY zG)mEcDB}yZu_*TRD&vgR)JNI`y_a<$Aj$Go;*8bU&2W$Sq39k{!P1XucwiT-f-G)jPX6hHbrHK3{d;)wYn9iMM8VW}#b(D?h1{Ta`Ap zt_}kD&A;R~??H2&CjC!Ab6o(6y=ifBJ9LZUF1l@9y$K4OG^ihu^QNWNAqW-)|WJKyxIT-g>m3@^)s5jN}AF%Z$LvYzVGnbGrp9@)Gahw65T zhm+;Ulv}DbyyOxChCC<+O0|kTP;C~xftu^jZ2w?-XsEwzK%f zvyK|8v0@VP9ALfS)EW-Hnw)IGzDblZ&!}R)TyyPgt(xVSFfd1Zvr=3k!d2Nh)2{7d zxSg}}0ER+glV zUEr^KQJ-$qh0SpmordcP75k#gu1s!EX3}HnOtQbiU&x!W5JtiCWRUEIs z*sv;gf4zpKWH+F!*80_&@2@v%o}Ksb!xsg28Xngj=0c6dA1yY3TF{s+^zCF>TT#h6 zRZbU-4ckR?49wAsNL5B}BiKt;wNQrH-`napb}?w}N8E2Yo@mr+o)8yp-@Y-~cV!Nn zqUjH-f4Hfnp<9MB>A}pIz7|I$PX}Da%~uHHV8mDx3x|*32*L5EPBq&2x)tMz$YFEx zSONz_AH*@O=WCd@yUg)K>~Ls%V#<6o5gR|2h>X8XU;b1t;11qWbQfv&Km|Jr=rw#S z1*~D0)1E!+iL^R4(mA{w(~X)h&{(i@&1nq0Sc8k=Rxa1T8c#1;t%g;d#*4W{g_t*#4#09p>jvmw*}fB6lp0%RIQWZ$<6sSfaqIvO+JK5rp;5j?5m0{J1)P50!+)8Q zB>D<$S3z#=H-^_Q*BJYyKIpds9<%`!zeK#>k?1S1Ignf9twlW6lkxE7u@LV7INPv} zyuJ_Py+P3-)5iM_je*~IhYO7dXd%J9PmU$}yKdk~t| zailN~?qQCD^$F^-0=y+{@ms|EHgv%i^xN7eZLcBF6qGzKm@4BjF8geam%=)@4!Yn9 z;stVmt@^Nd|3siCF8yyG<<=f3hgIM7<=JE|sU+?Aifp+;3%k-+hSUr%I)s)~j_o<~ zi&sdf|GO+GLaG7_BK%p2#VdrY_(d4}OzA>?XD*tRcd$OFX6w{}oQXC~Y4Jjs6Y z+pYEW*ZTR#FM+BzBkESw$uGQ&TV5jNk9Z5CuN-az8+jUNBEhPbUCLNQztHlpwEYdr zT|)duye0MqY%qh@ZV>r5wU0cw0=P2W{ndXSr@kF zxj^LFBdYv?>Kp*7{R_NP+mC8|P~(dl|Df?bjepaq@<;m)jsv(x;~5%9G;Y&)sm5zG zPHVhP<5x94qVY+MFKT>CZ?Q~hb=zwjvcY0PNcrg2i^9*qT!b&Ur#9?^K8#;<97OydtVzNGP0jc;juN8?{L z8aRlUS6t(2jq5ZHX`Imb4UI2o{JF+oYkXhhG8`d{d#=V0G@j6SJ{B_VlSI_)S}otE y@pD@Lyq0(19ZLTjHQuW6UXAw=5$7Q-KdKSUg#pepg7&91CV?hozORWTjsFGSy8cH1 literal 0 HcmV?d00001 diff --git a/linux/kernel/math/math_emulate.c b/linux/kernel/math/math_emulate.c new file mode 100644 index 0000000..825e528 --- /dev/null +++ b/linux/kernel/math/math_emulate.c @@ -0,0 +1,42 @@ +/* + * linux/kernel/math/math_emulate.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This directory should contain the math-emulation code. + * Currently only results in a signal. + */ + +#include + +#include +#include +#include + +void math_emulate(long edi, long esi, long ebp, long sys_call_ret, + long eax,long ebx,long ecx,long edx, + unsigned short fs,unsigned short es,unsigned short ds, + unsigned long eip,unsigned short cs,unsigned long eflags, + unsigned short ss, unsigned long esp) +{ + unsigned char first, second; + +/* 0x0007 means user code space */ + if (cs != 0x000F) { + printk("math_emulate: %04x:%08x\n\r",cs,eip); + panic("Math emulation needed in kernel"); + } + first = get_fs_byte((char *)((*&eip)++)); + second = get_fs_byte((char *)((*&eip)++)); + printk("%04x:%08x %02x %02x\n\r",cs,eip-2,first,second); + current->signal |= 1<<(SIGFPE-1); +} + +void math_error(void) +{ + __asm__("fnclex"); + if (last_task_used_math) + last_task_used_math->signal |= 1<<(SIGFPE-1); +} diff --git a/linux/kernel/math/math_emulate.o b/linux/kernel/math/math_emulate.o new file mode 100644 index 0000000000000000000000000000000000000000..cca5d5125159affb9c33217b570e609e650cad6a GIT binary patch literal 6460 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 literal 0 HcmV?d00001 diff --git a/linux/kernel/mktime.c b/linux/kernel/mktime.c new file mode 100644 index 0000000..a6d03ca --- /dev/null +++ b/linux/kernel/mktime.c @@ -0,0 +1,58 @@ +/* + * linux/kernel/mktime.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +/* + * This isn't the library routine, it is only used in the kernel. + * as such, we don't care about years<1970 etc, but assume everything + * is ok. Similarly, TZ etc is happily ignored. We just do everything + * as easily as possible. Let's find something public for the library + * routines (although I think minix times is public). + */ +/* + * PS. I hate whoever though up the year 1970 - couldn't they have gotten + * a leap-year instead? I also hate Gregorius, pope or no. I'm grumpy. + */ +#define MINUTE 60 +#define HOUR (60*MINUTE) +#define DAY (24*HOUR) +#define YEAR (365*DAY) + +/* interestingly, we assume leap-years */ +static int month[12] = { + 0, + DAY*(31), + DAY*(31+29), + DAY*(31+29+31), + DAY*(31+29+31+30), + DAY*(31+29+31+30+31), + DAY*(31+29+31+30+31+30), + DAY*(31+29+31+30+31+30+31), + DAY*(31+29+31+30+31+30+31+31), + DAY*(31+29+31+30+31+30+31+31+30), + DAY*(31+29+31+30+31+30+31+31+30+31), + DAY*(31+29+31+30+31+30+31+31+30+31+30) +}; + +long kernel_mktime(struct tm * tm) +{ + long res; + int year; + if (tm->tm_year < 70 ) tm->tm_year += 100; /* gohigh */ + year = tm->tm_year - 70; +/* magic offsets (y+1) needed to get leapyears right.*/ + res = YEAR*year + DAY*((year+1)/4); + res += month[tm->tm_mon]; +/* and (y+2) here. If it wasn't a leap-year, we have to adjust */ + if (tm->tm_mon>1 && ((year+2)%4)) + res -= DAY; + res += DAY*(tm->tm_mday-1); + res += HOUR*tm->tm_hour; + res += MINUTE*tm->tm_min; + res += tm->tm_sec; + return res; +} diff --git a/linux/kernel/mktime.o b/linux/kernel/mktime.o new file mode 100644 index 0000000000000000000000000000000000000000..16b253f59c66435ffe52cab1b6e4970bdadd0984 GIT binary patch literal 2868 zcma)8U1%It6h3!ml5D!0?Iyczlcw0MY%yuOvyEM(v}jY)A45xxrA357+@DEy=AnKD85mXSgf)MCK{m#t2*-2mY!rb$n z@7(iq&z(EFmk%F5B7`6{1nJb#h%()QCGU$7N>M+x|41wy%A}UYQ|*<*m-{8YGF4`@ zIF(Yy-;OLE%0!km^7YraeMLRjh~Ito6Pqt-dy|^E|Kwt<$1lmtlwDC zKn07%vh;eu;kLMi*s&l}V#!$G@dl_Pm_dJCuMlYgh8yUxpKIS(uP8j@_XoHMX#yImsj0cUU z7;k30#rU1^Fyl0J8C|yHQTO-I#OQX+Jh(>j&Obmss7s78(ymgZZZ$~kyXw(8V-HZ2)hOI!JVkkXe}n10he>Saxl6|crC)51C!>0NINmP?x)YlaB}38Z z6QIzJq|hVL=)UOws7Rs>eWb@(nN04DB7|HRA?h~8fuX?m$k1exLyZr<_2dwH^>mRQ z3B0sHG%deI?S(31vUS~hB%g#=REWtWyT`WCWHN_zv;~jGMaxrVq>hns6^}-I`-Hd` z@5Ah0R&Jtc=4_`_ZI&&f+F8%8S!Rh{d{hZ;ahD%k9~B4CF46s2cO?0vb|x8lSgJp? zH8ZL0NJc)tc1$x6z3DXUS;s1;`RKgbbj@`rS8;1r&S{ptoZHA%ZKruYyW1Qa%T^1; z+@65Qowe$YRb`iR<-$D6d6uh%foNDIKcwwY)pch56h}{-PEVxs=3X^bgoUP(E>l73>9TY?JR>3#fjdH`IhJC^E=I1QJR=tW}xU|=J19Ws^VqbdXbg}7p z&7jciqfK8MyEK+Jcjrd~wsQ@|g_9&MM#ON;FkZz;;T7=DnGeT5+lhEeKPckHD1i(zY_UT|h{ zr$P?gG39_9WR~1o&B8gG4jN|SD1rtCK2~MgZ#q}~|Hf7u`er2k`J3?hEVuFO*mS86&uUG3nQi-Hpss1gJ91C8TQAX$r za*l9)XHefK;JCgnJgUBNVC4fy-{G=-z(5XVI|*H3HnmV_nt>e3b^>}hZweoX1USyi z`%`&w-`B*uj(Bt6)KKvXAj0u7h^P9DEv?3T0hoPMZxcw=uYyP$s}~rA>O+T z9d_~IFrNloeKi|hve!&v?ewBJ0Tj6?=Qf_6b>PGSW4)FSeQl=p_=>GzPb)QrK literal 0 HcmV?d00001 diff --git a/linux/kernel/panic.c b/linux/kernel/panic.c new file mode 100644 index 0000000..7d8a06b --- /dev/null +++ b/linux/kernel/panic.c @@ -0,0 +1,24 @@ +/* + * linux/kernel/panic.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This function is used through-out the kernel (includeinh mm and fs) + * to indicate a major problem. + */ +#include +#include + +void sys_sync(void); /* it's really int */ + +volatile void panic(const char * s) +{ + printk("Kernel panic: %s\n\r",s); + if (current == task[0]) + printk("In swapper task - not syncing\n\r"); + else + sys_sync(); + for(;;); +} diff --git a/linux/kernel/panic.o b/linux/kernel/panic.o new file mode 100644 index 0000000000000000000000000000000000000000..2a5b36c52ffd30e05ff9a25f97cea8ad6d6c771b GIT binary patch literal 5420 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 literal 0 HcmV?d00001 diff --git a/linux/kernel/printk.c b/linux/kernel/printk.c new file mode 100644 index 0000000..0daa097 --- /dev/null +++ b/linux/kernel/printk.c @@ -0,0 +1,41 @@ +/* + * linux/kernel/printk.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * When in kernel-mode, we cannot use printf, as fs is liable to + * point to 'interesting' things. Make a printf with fs-saving, and + * all is well. + */ +#include +#include + +#include + +static char buf[1024]; + +extern int vsprintf(char * buf, const char * fmt, va_list args); + +int printk(const char *fmt, ...) +{ + va_list args; + int i; + + va_start(args, fmt); + i=vsprintf(buf,fmt,args); + va_end(args); + __asm__("push %%fs\n\t" + "push %%ds\n\t" + "pop %%fs\n\t" + "pushl %0\n\t" + "pushl $buf\n\t" + "pushl $0\n\t" + "call tty_write\n\t" + "addl $8,%%esp\n\t" + "popl %0\n\t" + "pop %%fs" + ::"r" (i):"ax","cx","dx"); + return i; +} diff --git a/linux/kernel/printk.o b/linux/kernel/printk.o new file mode 100644 index 0000000000000000000000000000000000000000..e1ff4bd3b652b61b30586e186343403f1026cfd4 GIT binary patch literal 2420 zcma)7&ubi29RI$V*<_PVHr>S74GDD$+ZvUfP3%%@)tZ{t5LyDZsVEi0?C$LDG`q8L zW;Q0J>R~Gwf!_rCAV zo3}1reqIPciUjG@mxyXcWGPEFOAk??}LK_$obt@3i+|UV`F!(Hd%iovh?=T*T?Q6Hs9Nyy?&1^|3N=MA1%R<%M#x} z@kZ?YLd>-;fM(2L){WDc4Kc9K%t(DD+2E^Ssh=>3$@efbaj^J=rGa`ogy91~?G6p5 zH`sFYgcMstE{QyQX?L15Y@}Q-M3Il7$Z(|*p1#Bw<>^32&B4!shAQ1UiQFDwO2>qZ zIdLL8k*gRql^UTU?y`8jtI5Hvs01F!&A!>9Ji4F z@VO}g|A7?g=_pvs6AfZex_p?BbwdynF2ix+G}eBSxaNou%M+Yz^f=^F3MpnVGz`^t zMyk(@S1~l=T?_G7b`-O`Jvba;StZx2wz@TkXv0UN)~zas1Yyng8&)&ASSguZpA;*- z^ly45{lz6Mg)B=e*UUw;Y@M;nX0dJi)#fwqsWYd6tF4+@Y?#G*r|pKtx^K6g;zkGQ z9Un^9Yq_3NtarU?=ytpSDz8%vLc6+N-0(Z0Qw=*lwK`tI?0SLQ@SK{-XNVOAv}v!k z+#sY%sA#p1$rbi6p9W>O0nva7? z9>Mu+x~DB>=d?@N^!a;P`CVASc005yWCfug@uot))3QQmDT zthrvj1CzvdrQ$oANvrMKUcP=l;$r`>kY0Lw$4Eu3J~_b83iT$5)Nt^fbb z55b8)@`2cy-<;&tV;j>n#*jqO^ery52{?|yKHL|mh`(T#qwkOCZQvxSe2+oN{>pEU zouWsFk<87U*P~)s-oyBrK}^cV?@)4mzase-biBS4hFaeOu!;es8xTHY5R*Ro4MlF@Q9Wd@nJGN!e`3$$T{koQLxbW2k(u0doxR zn`sC6euzseDRS zJgGP6&jY1re*fQ@xE1K+^<^4SNFS-Aq@=r8+U1>9rpiW`9z4p5Ah7QU10(&eV zUPIX@zy;)UEaL$99TC_buUO#1^7%67`pl=89?`>z|DILd=(9emUkZGDln( Z%U{R*d*-Mw>tf +#include +#include +#include +#include +#include +#include + +#include + +#define _S(nr) (1<<((nr)-1)) +#define _BLOCKABLE (~(_S(SIGKILL) | _S(SIGSTOP))) + +void show_task(int nr,struct task_struct * p) +{ + int i,j = 4096-sizeof(struct task_struct); + + printk("%d: pid=%d, state=%d, ",nr,p->pid,p->state); + i=0; + while (i>2 ] ; + +struct { + long * a; + short b; + } stack_start = { & user_stack [PAGE_SIZE>>2] , 0x10 }; +/* + * 'math_state_restore()' saves the current math information in the + * old math state array, and gets the new ones from the current task + */ +void math_state_restore() +{ + if (last_task_used_math == current) + return; + __asm__("fwait"); + if (last_task_used_math) { + __asm__("fnsave %0"::"m" (last_task_used_math->tss.i387)); + } + last_task_used_math=current; + if (current->used_math) { + __asm__("frstor %0"::"m" (current->tss.i387)); + } else { + __asm__("fninit"::); + current->used_math=1; + } +} + +/* + * 'schedule()' is the scheduler function. This is GOOD CODE! There + * probably won't be any reason to change this, as it should work well + * in all circumstances (ie gives IO-bound processes good response etc). + * The one thing you might take a look at is the signal-handler code here. + * + * NOTE!! Task 0 is the 'idle' task, which gets called when no other + * tasks can run. It can not be killed, and it cannot sleep. The 'state' + * information in task[0] is never used. + */ +void schedule(void) +{ + int i,next,c; + struct task_struct ** p; + +/* check alarm, wake up any interruptible tasks that have got a signal */ + + for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) + if (*p) { + if ((*p)->alarm && (*p)->alarm < jiffies) { + (*p)->signal |= (1<<(SIGALRM-1)); + (*p)->alarm = 0; + } + if (((*p)->signal & ~(_BLOCKABLE & (*p)->blocked)) && + (*p)->state==TASK_INTERRUPTIBLE) + (*p)->state=TASK_RUNNING; + } + +/* this is the scheduler proper: */ + + while (1) { + c = -1; + next = 0; + i = NR_TASKS; + p = &task[NR_TASKS]; + while (--i) { + if (!*--p) + continue; + if ((*p)->state == TASK_RUNNING && (*p)->counter > c) + c = (*p)->counter, next = i; + } + if (c) break; + for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) + if (*p) + (*p)->counter = ((*p)->counter >> 1) + + (*p)->priority; + } + switch_to(next); +} + +int sys_pause(void) +{ + current->state = TASK_INTERRUPTIBLE; + schedule(); + return 0; +} + +void sleep_on(struct task_struct **p) +{ + struct task_struct *tmp; + + if (!p) + return; + if (current == &(init_task.task)) + panic("task[0] trying to sleep"); + tmp = *p; + *p = current; + current->state = TASK_UNINTERRUPTIBLE; + schedule(); + if (tmp) + tmp->state=0; +} + +void interruptible_sleep_on(struct task_struct **p) +{ + struct task_struct *tmp; + + if (!p) + return; + if (current == &(init_task.task)) + panic("task[0] trying to sleep"); + tmp=*p; + *p=current; +repeat: current->state = TASK_INTERRUPTIBLE; + schedule(); + if (*p && *p != current) { + (**p).state=0; + goto repeat; + } + *p=NULL; + if (tmp) + tmp->state=0; +} + +void wake_up(struct task_struct **p) +{ + if (p && *p) { + (**p).state=0; + *p=NULL; + } +} + +/* + * OK, here are some floppy things that shouldn't be in the kernel + * proper. They are here because the floppy needs a timer, and this + * was the easiest way of doing it. + */ +static struct task_struct * wait_motor[4] = {NULL,NULL,NULL,NULL}; +static int mon_timer[4]={0,0,0,0}; +static int moff_timer[4]={0,0,0,0}; +unsigned char current_DOR = 0x0C; + +int ticks_to_floppy_on(unsigned int nr) +{ + extern unsigned char selected; + unsigned char mask = 0x10 << nr; + + if (nr>3) + panic("floppy_on: nr>3"); + moff_timer[nr]=10000; /* 100 s = very big :-) */ + cli(); /* use floppy_off to turn it off */ + mask |= current_DOR; + if (!selected) { + mask &= 0xFC; + mask |= nr; + } + if (mask != current_DOR) { + outb(mask,FD_DOR); + if ((mask ^ current_DOR) & 0xf0) + mon_timer[nr] = HZ/2; + else if (mon_timer[nr] < 2) + mon_timer[nr] = 2; + current_DOR = mask; + } + sti(); + return mon_timer[nr]; +} + +void floppy_on(unsigned int nr) +{ + cli(); + while (ticks_to_floppy_on(nr)) + sleep_on(nr+wait_motor); + sti(); +} + +void floppy_off(unsigned int nr) +{ + moff_timer[nr]=3*HZ; +} + +void do_floppy_timer(void) +{ + int i; + unsigned char mask = 0x10; + + for (i=0 ; i<4 ; i++,mask <<= 1) { + if (!(mask & current_DOR)) + continue; + if (mon_timer[i]) { + if (!--mon_timer[i]) + wake_up(i+wait_motor); + } else if (!moff_timer[i]) { + current_DOR &= ~mask; + outb(current_DOR,FD_DOR); + } else + moff_timer[i]--; + } +} + +#define TIME_REQUESTS 64 + +static struct timer_list { + long jiffies; + void (*fn)(); + struct timer_list * next; +} timer_list[TIME_REQUESTS], * next_timer = NULL; + +void add_timer(long jiffies, void (*fn)(void)) +{ + struct timer_list * p; + + if (!fn) + return; + cli(); + if (jiffies <= 0) + (fn)(); + else { + for (p = timer_list ; p < timer_list + TIME_REQUESTS ; p++) + if (!p->fn) + break; + if (p >= timer_list + TIME_REQUESTS) + panic("No more time requests free"); + p->fn = fn; + p->jiffies = jiffies; + p->next = next_timer; + next_timer = p; + while (p->next && p->next->jiffies < p->jiffies) { + p->jiffies -= p->next->jiffies; + fn = p->fn; + p->fn = p->next->fn; + p->next->fn = fn; + jiffies = p->jiffies; + p->jiffies = p->next->jiffies; + p->next->jiffies = jiffies; + p = p->next; + } + } + sti(); +} + +void do_timer(long cpl) +{ + extern int beepcount; + extern void sysbeepstop(void); + + if (beepcount) + if (!--beepcount) + sysbeepstop(); + + if (cpl) + current->utime++; + else + current->stime++; + + if (next_timer) { + next_timer->jiffies--; + while (next_timer && next_timer->jiffies <= 0) { + void (*fn)(void); + + fn = next_timer->fn; + next_timer->fn = NULL; + next_timer = next_timer->next; + (fn)(); + } + } + if (current_DOR & 0xf0) + do_floppy_timer(); + if ((--current->counter)>0) return; + current->counter=0; + if (!cpl) return; + schedule(); +} + +int sys_alarm(long seconds) +{ + int old = current->alarm; + + if (old) + old = (old - jiffies) / HZ; + current->alarm = (seconds>0)?(jiffies+HZ*seconds):0; + return (old); +} + +int sys_getpid(void) +{ + return current->pid; +} + +int sys_getppid(void) +{ + return current->father; +} + +int sys_getuid(void) +{ + return current->uid; +} + +int sys_geteuid(void) +{ + return current->euid; +} + +int sys_getgid(void) +{ + return current->gid; +} + +int sys_getegid(void) +{ + return current->egid; +} + +int sys_nice(long increment) +{ + if (current->priority-increment>0) + current->priority -= increment; + return 0; +} + +void sched_init(void) +{ + int i; + struct desc_struct * p; + + if (sizeof(struct sigaction) != 16) + panic("Struct sigaction MUST be 16 bytes"); + set_tss_desc(gdt+FIRST_TSS_ENTRY,&(init_task.task.tss)); + set_ldt_desc(gdt+FIRST_LDT_ENTRY,&(init_task.task.ldt)); + p = gdt+2+FIRST_TSS_ENTRY; + for(i=1;ia=p->b=0; + p++; + p->a=p->b=0; + p++; + } +/* Clear NT, so that we won't have troubles with that later on */ + __asm__("pushfl ; andl $0xffffbfff,(%esp) ; popfl"); + ltr(0); + lldt(0); + outb_p(0x36,0x43); /* binary, mode 3, LSB/MSB, ch 0 */ + outb_p(LATCH & 0xff , 0x40); /* LSB */ + outb(LATCH >> 8 , 0x40); /* MSB */ + set_intr_gate(0x20,&timer_interrupt); + outb(inb_p(0x21)&~0x01,0x21); + set_system_gate(0x80,&system_call); +} + + +int sys_getdents(unsigned int fd, struct linux_dirent *dirp, unsigned int count) +{ + /*huoqu yizu muluxiang*/ + /*fd:wenjian miaoshu fu*/ + /*dirp:yonghu zhizhen, yaoqiu muluxiang chuandao dizhi*/ + /*count:zuida daxiao*/ + + struct m_inode *yy = current->filp[fd]->f_inode; + int xx = yy->i_dev;/*shebei hao*/ + int zz = yy->i_zone[0]; /*shuzu,shujukuai kuaihao*/ + + struct buffer_head *bh = bread(xx,zz);/*du shujukuai,fanhui shuju zhizhen*/ + struct dir_entry *den = bh->b_data;/*b_data:cunfang muluxiang difang*/ + + struct linux_dirent myld;/*kuozhanban dir_entry*/ + /*den youyizu muluxiang*/ + /*bianli*/ + int i,j = 0,pianyi = 0; + while(den[j].inode > 0) + { + if(sizeof(struct linux_dirent)+pianyi>count) break;/*ruguo zuida daxiao + pianyi > count,bunengcun*/ + myld.d_ino = den[j].inode; + for(i = 0;idirp*/ + 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 literal 0 HcmV?d00001 diff --git a/linux/kernel/signal.c b/linux/kernel/signal.c new file mode 100644 index 0000000..8d5a65f --- /dev/null +++ b/linux/kernel/signal.c @@ -0,0 +1,129 @@ +/* + * linux/kernel/signal.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include +#include +#include +#include + +volatile void do_exit(int error_code); + +int sys_sgetmask() +{ + return current->blocked; +} + +int sys_ssetmask(int newmask) +{ + int old=current->blocked; + + current->blocked = newmask & ~(1<<(SIGKILL-1)); + return old; +} + +int sys_sigpending() +{ + return -ENOSYS; +} + +int sys_sigsuspend() +{ + return -ENOSYS; +} + +static inline void save_old(char * from,char * to) +{ + int i; + + verify_area(to, sizeof(struct sigaction)); + for (i=0 ; i< sizeof(struct sigaction) ; i++) { + put_fs_byte(*from,to); + from++; + to++; + } +} + +static inline void get_new(char * from,char * to) +{ + int i; + + for (i=0 ; i< sizeof(struct sigaction) ; i++) + *(to++) = get_fs_byte(from++); +} + +int sys_signal(int signum, long handler, long restorer) +{ + struct sigaction tmp; + + if (signum<1 || signum>32 || signum==SIGKILL) + return -1; + tmp.sa_handler = (void (*)(int)) handler; + tmp.sa_mask = 0; + tmp.sa_flags = SA_ONESHOT | SA_NOMASK; + tmp.sa_restorer = (void (*)(void)) restorer; + handler = (long) current->sigaction[signum-1].sa_handler; + current->sigaction[signum-1] = tmp; + return handler; +} + +int sys_sigaction(int signum, const struct sigaction * action, + struct sigaction * oldaction) +{ + struct sigaction tmp; + + if (signum<1 || signum>32 || signum==SIGKILL) + return -1; + tmp = current->sigaction[signum-1]; + get_new((char *) action, + (char *) (signum-1+current->sigaction)); + if (oldaction) + save_old((char *) &tmp,(char *) oldaction); + if (current->sigaction[signum-1].sa_flags & SA_NOMASK) + current->sigaction[signum-1].sa_mask = 0; + else + current->sigaction[signum-1].sa_mask |= (1<<(signum-1)); + return 0; +} + +void do_signal(long signr,long eax, long ebx, long ecx, long edx, + long fs, long es, long ds, + long eip, long cs, long eflags, + unsigned long * esp, long ss) +{ + unsigned long sa_handler; + long old_eip=eip; + struct sigaction * sa = current->sigaction + signr - 1; + int longs; + unsigned long * tmp_esp; + + sa_handler = (unsigned long) sa->sa_handler; + if (sa_handler==1) + return; + if (!sa_handler) { + if (signr==SIGCHLD) + return; + else + do_exit(1<<(signr-1)); + } + if (sa->sa_flags & SA_ONESHOT) + sa->sa_handler = NULL; + *(&eip) = sa_handler; + longs = (sa->sa_flags & SA_NOMASK)?7:8; + *(&esp) -= longs; + verify_area(esp,longs*4); + tmp_esp=esp; + put_fs_long((long) sa->sa_restorer,tmp_esp++); + put_fs_long(signr,tmp_esp++); + if (!(sa->sa_flags & SA_NOMASK)) + put_fs_long(current->blocked,tmp_esp++); + put_fs_long(eax,tmp_esp++); + put_fs_long(ecx,tmp_esp++); + put_fs_long(edx,tmp_esp++); + put_fs_long(eflags,tmp_esp++); + put_fs_long(old_eip,tmp_esp++); + current->blocked |= sa->sa_mask; +} diff --git a/linux/kernel/signal.o b/linux/kernel/signal.o new file mode 100644 index 0000000000000000000000000000000000000000..313fd9c142505fe9b0c0724614c2c62db21a2aec GIT binary patch literal 8952 zcma)BdvILUeLnZG(%#j2z1GUIg$1n98k8Wd*0KQA$XI@0EZY!cn_^?*^*-)u7q50V z`;cYB0A-=E&?vz)kS1|r5|T-vCI6(MZYC3KHbpvRLAbQ+kYPsf}hmyiG;)}mnPrhbqXJ!PX5w{?&bo%+}*N@YG`jzQ_nm+md_Zb!S*}XUJ za(u(6W$rI49$){bfUWCVy*cCbSU|nhHCcExtWEO&1{Lp#@3wt7gPIX z{dsfd5{zYR)6X?%4!`))+3EMJS7*PVQTeV!$TfXLG2Z8kzf{C4^j1 z!qmQk0&0g0A+~VLaMc}+(0jpn4RZs)NC?A2LKsO!nZh(%UxW|fJ`@A+XOi;-03Oqm zD^!K4x4ucC=Jlb4mKx}m@NR@LwU!hlt>yz@ysv`%nPJ}YM~Gv2>9CbX!deW4d8>4= zu4W_KNPDeqly4{Pw|+wTjs-131bvT_zK!yr?%Pl1_9U1N-4`aalU-P>`@Y{`x^*A- zW=9j&+mhw|iizkxmeJAl>TRW5T9~^Sx=;7rOO0e=x^EYgk<5_p`)h`l%&_jOG&Cc6 zTa5wk$iZ_|_g&3SN@lI@^Pu7mvtDl-r`c|rZP0yt89*`{b>CrzmdqyIw~PVyFr6*B zFU@rBB(qibJw_kN?9hGBH<+Ee@4py8YWC>9hZ~xGx{u4q+{;GOdRw)6P?-CYV6wVz zikbv9dDP$la!bAr&yw!Dj9I71RCV72OealdO84E#c5K%A9^JQs?PQi>c<$HR@@dS8 z>~&zypq)xZn0NgGVcyU&6F3q5Z0ISt&$}6fSLi>5_ps;AZvd>ngxn*O6xK5kc;d9y zExvy}``Dam{SR#tq`lVblqXA|{nmCoJt@-jtZ&mM{dGJ8)*`g-$#C9K!7F6Gy(gN8(0`2{y=<=F(zhO?;SepbgFtRx zL)tVdm6$NECGEB5QGOk1Kjh1WIZQfewNw6kq&pxV6y{3Oi;Yxyg)pxt-EG)Re1vq^ z`Vs9{k&YO4VoI1dknT0?luP#+cG{(5hMjcjA;Yd9&T85ZLk@bB^a$iRVXh%P3SZD` zNw0@onCnPxG+3_nB)1?-Vctk`tC0q|f#eP&1M()4JB@LW8%gdlu?d8J195ioL>Q<90(9aj*O|DcI3x*-oG|pUJ0o>ZryP2yeRR*MbB4CV03WeEL9UUY4u^WbT)qtf}e4d=mTXT?Zoxo-6%Rk1ir=ar0Q zp(_u{0LyWfYF`S{QJ`n-w=owv*HNnWl}(&CRK*6Sk8oP(NA`(J*jIgw5m_7`ZtZBj z5m71_@op&eF)A3b#)zA~EIAc%iyN`koQAxEY^%xVk|){Lp0B~@9U1-!3kg5R5b`yL z@SR+2E@yUfS-G6IlZ(&g{GD8WE*I>?!qDY=Pe0Ppi52BCi#xG;T&BB|Yh2&U)uA5= zcVfA@Or)Jl-sO4`0)}yCj`ek7G3s&0E7r}ORhKUy)UA6Nxum1ZhAIi6r<`)6JA1eOFAXzeY*MKBC$Mxd>2W!v>_S_qr% zJYjgrjD?2V;1>~XZ8yLHF9SuQ(k-3B2slQl_zw5K1A9wP)(C8#@944Gu3GI5@8mPb*oxNj9^+Q=Fn03M!e$NcfPAt! zgJy>Jv?F+5?+JO2x&QPlLb{2n=ZgirKT*dxx?Zvi>0Du4RH}(`HI8R$zpO}YLZt0V z3X*ayRTZ#`rxVqLs3hWwThjNPkFR)-sr|9&^5y;cL~>w-BN*6kmkV}Y6f>E4Rj5kXQ+BFWO(gTSDA)&NS&}GxoHZ1s zS~Z@j#F-aTj8{siv#1p~P3^SGH05+Aj-I2~vI`ejq7v7-Cr$OobGSQ7Y$(Z zN#%{3IsQX-q=5s;O)Osk5l; zTn^)ceB*p!X5uBB*C8s2apZ}Ck+s8w#|ohY1E{tTQ5r9ogw0;bcq##GNFtBD2$9uR zlVUk@<*HhA&Qfun39JcJGhO7`q$frN@p70BSeO&>T!F)a$-{Bap+cP0mBb`Uj&ocU zzK!lD;_jGW&7L1Q6{5nhGDCDiwwa3`NaU)bTr5^`3|_ZxWw`gYB*NF6wb?&dlic!q zmk&i_L!Wb`c#Uzd#ibqECbWCJ+7iEM9>!LTSA={cP{%W{SQGHp^(}J&yd3B=tmL#4 z>jK^#Py|74#eF4io`88#md5R#Y$>Dv6mIum3;&L+@_z(!_vi{z`hO2t!p)N_FZv(H z?H*p?AJe}OF!=^MgWElqIytWkbRPv}#XPMO5z9(In1pQ3}&`vNn#9&lI7ObRwB7V?{S<6Xir<9H+-75jR-Z0d0tA zsyM-yt%w$|zecfhJNvEUV`t-Xk7km;+jTk2(9OoU41sPwF;K^A32q#h8`qgjg?I#9 zJ8s&rE;t0rzbcc*TU}m%E(@j@fE({>(6s;m?3j=115z;FpEf1p>Nv(tVzKWsA;Pd_ zemF`t@*4&1`hXNEER0_@30!j9XY8Uu#G`|{T)SJqH@AEL70!HTyX>D^7aO$e15(_A zcwD3I<&p^qn&Ul!c#Ok%KHP4+FM_5I`_1d`7YNZqrMjr&eUC!d?j!uk@$<@t;MzT; zXjj$K=~52Tj@Q?5la^;RU<7t0R|(!t;W5z7{rF?_V;^Mf$9&vwKah4~4uBM2#n;D^ zB-G`GZf=vRotTg(AjC(2jLCQ?sch4oQ((nn%+qH{sLPG#@-8;ZP4VtIS5Ca}7dP_F zEs!_m*wB{ytd0t?e5ARLkVp3$dn)-T_(|N`mHs;5Y22fV2Q)52&fo@%_W0w)`OAjM$fJcU;&T%+(7g}W7I74qi<=JOSWPbqv>;he%V z3V);UErlN{G+A%NS)h==A(6jP;WmYFg?WWfD|}Yr^9uh~;j0SIDtu4jrwaLN7u)Gn zc!k2K!j%d)DCF;1wC8*v-lcF-;R6c4tdM`Rr`-<}^5+Ng&nf(s!dDc&rSLx$YMfuN zpQo@(;WCAr6h5u+1%)pu{H?+d72*#*GTv&1A1U-;0<)cs3bzqaqlDtWq;OWrpH}=| zD11)If35g;6@IMbE!b)qKS)H}%N0MOaD$THs`%ZC&nP~x_`4PVq{63^oWDae{y!^x zOUXY{d@El5)Gt&xsBnacd^Rh7m%?#{k16~n5q3{2e$aB_?N*pm_@Kf^6@Et{${;kn uPPpeX&JPrZfjamRg?t~7&no1(gZx(&{!ro16uzwR1BJa + +#include +#include +#include +#include +#include +#include +int sys_ftime() +{ + return -ENOSYS; +} + +int sys_break() +{ + return -ENOSYS; +} + +int sys_ptrace() +{ + return -ENOSYS; +} + +int sys_stty() +{ + return -ENOSYS; +} + +int sys_gtty() +{ + return -ENOSYS; +} + +int sys_rename() +{ + return -ENOSYS; +} + +int sys_prof() +{ + return -ENOSYS; +} + +int sys_setregid(int rgid, int egid) +{ + if (rgid>0) { + if ((current->gid == rgid) || + suser()) + current->gid = rgid; + else + return(-EPERM); + } + if (egid>0) { + if ((current->gid == egid) || + (current->egid == egid) || + suser()) { + current->egid = egid; + current->sgid = egid; + } else + return(-EPERM); + } + return 0; +} + +int sys_setgid(int gid) +{ +/* return(sys_setregid(gid, gid)); */ + if (suser()) + current->gid = current->egid = current->sgid = gid; + else if ((gid == current->gid) || (gid == current->sgid)) + current->egid = gid; + else + return -EPERM; + return 0; +} + +int sys_acct() +{ + return -ENOSYS; +} + +int sys_phys() +{ + return -ENOSYS; +} + +int sys_lock() +{ + return -ENOSYS; +} + +int sys_mpx() +{ + return -ENOSYS; +} + +int sys_ulimit() +{ + return -ENOSYS; +} + +int sys_time(long * tloc) +{ + int i; + + i = CURRENT_TIME; + if (tloc) { + verify_area(tloc,4); + put_fs_long(i,(unsigned long *)tloc); + } + return i; +} + +/* + * Unprivileged users may change the real user id to the effective uid + * or vice versa. + */ +int sys_setreuid(int ruid, int euid) +{ + int old_ruid = current->uid; + + if (ruid>0) { + if ((current->euid==ruid) || + (old_ruid == ruid) || + suser()) + current->uid = ruid; + else + return(-EPERM); + } + if (euid>0) { + if ((old_ruid == euid) || + (current->euid == euid) || + suser()) { + current->euid = euid; + current->suid = euid; + } else { + current->uid = old_ruid; + return(-EPERM); + } + } + return 0; +} + +int sys_setuid(int uid) +{ +/* return(sys_setreuid(uid, uid)); */ + if (suser()) + current->uid = current->euid = current->suid = uid; + else if ((uid == current->uid) || (uid == current->suid)) + current->euid = uid; + else + return -EPERM; + return(0); +} + +int sys_stime(long * tptr) +{ + if (!suser()) + return -EPERM; + startup_time = get_fs_long((unsigned long *)tptr) - jiffies/HZ; + return 0; +} + +int sys_times(struct tms * tbuf) +{ + if (tbuf) { + verify_area(tbuf,sizeof *tbuf); + put_fs_long(current->utime,(unsigned long *)&tbuf->tms_utime); + put_fs_long(current->stime,(unsigned long *)&tbuf->tms_stime); + put_fs_long(current->cutime,(unsigned long *)&tbuf->tms_cutime); + put_fs_long(current->cstime,(unsigned long *)&tbuf->tms_cstime); + } + return jiffies; +} + +int sys_brk(unsigned long end_data_seg) +{ + if (end_data_seg >= current->end_code && + end_data_seg < current->start_stack - 16384) + current->brk = end_data_seg; + return current->brk; +} + +/* + * This needs some heave checking ... + * I just haven't get the stomach for it. I also don't fully + * understand sessions/pgrp etc. Let somebody who does explain it. + */ +int sys_setpgid(int pid, int pgid) +{ + int i; + + if (!pid) + pid = current->pid; + if (!pgid) + pgid = current->pid; + for (i=0 ; ipid==pid) { + if (task[i]->leader) + return -EPERM; + if (task[i]->session != current->session) + return -EPERM; + task[i]->pgrp = pgid; + return 0; + } + return -ESRCH; +} + +int sys_getpgrp(void) +{ + return current->pgrp; +} + +int sys_setsid(void) +{ + if (current->leader && !suser()) + return -EPERM; + current->leader = 1; + current->session = current->pgrp = current->pid; + current->tty = -1; + return current->pgrp; +} + +int sys_getgroups() +{ + return -ENOSYS; +} + +int sys_setgroups() +{ + return -ENOSYS; +} + +int sys_uname(struct utsname * name) +{ + static struct utsname thisname = { + "linux .0","nodename","release ","version ","machine " + }; + int i; + + if (!name) return -ERROR; + verify_area(name,sizeof *name); + for(i=0;iumask; + + current->umask = mask & 0777; + return (old); +} + +// #include +// #include +// #include +// _syscall2(int,signal,int,signr,void*,handler) +// int syscall1(alarm,sec); +// int sys_sleep(long seconds) +// { +// signal(SIGALRM,SIG_IGN); +// alarm(seconds); +// pause(); +// return 0; +// } + diff --git a/linux/kernel/sys.o b/linux/kernel/sys.o new file mode 100644 index 0000000000000000000000000000000000000000..d88afd949479e29c5874fef7c3f1dc1849a4e271 GIT binary patch literal 13084 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%0D6^=@ymD& z&2sAfH!g|hF=ZVPRK|A#4s0v}j1RZWQheQ@O&ySG8}3ar(GK&NGOjCzX4!81^({t1 z9#eJ&_)5ReclvXHe%U^g7Zr4(l&}XH+6Xz-Q ztTBSJ3KCrTsg#G*D`(0jv{zY5zS0AEyuy_V`W+bb85e1;(-wHnGqWF(=lJKtxxwE# zRX#yIV#|_X$+|BK>Jd>{&XG}mg8JQCC6AXl6;Dw2Kv@t}lhnmv&E7l}5v>5_F|TQ4!qfa z$$tsF*?Y;~5B@N^$@rsPv*)t>2zayKl79lc*=xx^1KvFJ|0}})$-nd_{*U0zp3M3| z_%?en`C9O1|0T~qU6{R={2cIRk0pOTc(cEfzYx56=>JmiW}jvG<>1X8OMVl0v%iwx z4&Lmo%0mBc2%>c1 zGB+Jv)qh1mQeU!l4PJjq=vxK}bJdeuHbwe;Z!Rhm?xy&uMJBx`p2)j+#{tdq;oN7; z#i4Yu(6)S!y!}WW{{qIl1_j8QzQ9PKIru|dasP&=3eLZHNQDWvC*C*w_XSc~!LiK0 zi-=n`w0yUPi-`jN&X4sNV>HmD)D421zvRCm_?X}c!QTpUp{3p|3=v|d;6;M`vn1s^ z1V1Qvr{K?tvz7V{aSmP{W0SDv;_vQ2)>|jILvXL)7X=>@{E^_Zg0Bcp#nMbWErRC@ zb_iZ0c%9&f1-~r#QzGLd&cTagYy)B={G>GlF3(u&h5vuv0JtWV=309&P=F$WIFb zQ~=vllsL)XvxztcX&xq3069mKRRBuoihPaWM#1+AZWGK1?iS>}Lc1e^w+Vhm@IJu@ z1P=>xKVZG%g3k-SBKU@24aXVuxSkUi3a%I2BA6B|2;M6AX+iE~tbauC$AbSZ_=4ac z1TBt7=<_d`M81?KUMR@lH*-;yM_OzAb;FIJw4um{2>(ilY)BOga51W4*HVi z(*$P=wh3M=_-;Y|DoMv7m=P=r-XM6Z;HLz?DEM{3?+N};@MnV03I0Kl2TA&i3N{Mj z7u#CiA$YamHwE?lK|TIFiuGR-v^dVe^Y4ztwSpmzWAJr?alxH}y9GxCZxb9Byif1} z!NY=22)-!zdm?gg;Xp}$^8^6eG_X&T8;AcgCpYUH7{=33ID*RKzpAi1n z!oMQ?>%v#z5<>q|h=^;Z@aGEOA^bAoHwbPMOiTHV!hclwPYHjo@c$zGA>oe-|0Cg# z3;&$(zY+dV!dKw}!1&G+>?9)YZsD&G+$OkFutju?M!|7G yuG7?eQt(y5C}i5MAb)C1p1%|%ZWr_f4+!2P$e-g;?=is>f-eh((1$E<6#QS(0P)%Y literal 0 HcmV?d00001 diff --git a/linux/kernel/system_call.o b/linux/kernel/system_call.o new file mode 100644 index 0000000000000000000000000000000000000000..9e5582e45007a713b5d5387385a14b3bb90b1ae2 GIT binary patch literal 2640 zcma)8U1%It6h523R*BhEqxGkn6(hzr#w1#;R>d@%)WS+PS(0vR+hMXh+g-D}v&`I$ zSrA0FA!5Q%mW?n7sNIL~5!0=ZP17 zzN;m;JT@9zZO8oLcZ;8_?qqT~`V0HSt&Ukv5L% z#oqtoVr9kN|5ClqfAt8q1Vfc~n@~pZG#5NRam3z3IeB7jX{$)fuKT^vmC$^+D^$MJ z=p45EY17p%aWb%1!-QYnF0CodgQQ!L-K= zE!!)!89}{CRjAZEX_}nl|5_&;`EIqi0eq)^kS-gyp6w2d>ulyc&OmUn9LMhLw;khN zS2qILcDQ%dQI0S3Js9l&Uw%6zA5c4A9~0NSQW@o~P9t#zV;koAj9edIK|X`GCn$yC zFe(Ll`FL$B`{!RH=aVzCZnAsAwL4a|uJ@>oRjUo?^_Hk=-3ZP7aI9+G0@CV9tltjK z^*dIz?gZ)ZB-TUVw@UgR@LiI=4?HC4-QZo4?g#Id^gi$&Nk3KNOsZBGPr3dGv|Rr< zv|RsjXu19r>ssHdRvx-;RjULc=YJVm&i@*;oc|5zlNgRwt+zaCV}Q;9>+u2l7@A*| zjs@rfh}X|{{CeL*N8HQ6`X}h$9A}&(K)-|cNb8uQCnVhpo|N=$;LDQU4gQU!p9HsG z8pzA}$Dq$h`+2!|iu;&zV?90X)3ZLk;M1@B^qW5YwokA6^k+W3?$Z~2`m#^|>eKQc zFQ4y*+TC!@dy`M^@#(!jO|e4mYCKgIzZ{9)!Cp6R44F&t@II34J8k84G9y9J)6nvyOq-YpgUXb91Bz48@UrrTi zH-$~@ZhK84XEj&M@=x%5CY8!)CI{PxW#XQ&#s(;r$tM*pR}dw|t&yv(3%I6}RLpBL z1uY@8B$Rww9lsPeMfSL+O}LZ%?cjgQ27nECfj-U}AF`(z@v@A%IKlV;(HyX$m*{=g zi2K^bO`gXKw+(XvB + +#include +#include +#include +#include +#include +#include + +#define get_seg_byte(seg,addr) ({ \ +register char __res; \ +__asm__("push %%fs;mov %%ax,%%fs;movb %%fs:%2,%%al;pop %%fs" \ + :"=a" (__res):"0" (seg),"m" (*(addr))); \ +__res;}) + +#define get_seg_long(seg,addr) ({ \ +register unsigned long __res; \ +__asm__("push %%fs;mov %%ax,%%fs;movl %%fs:%2,%%eax;pop %%fs" \ + :"=a" (__res):"0" (seg),"m" (*(addr))); \ +__res;}) + +#define _fs() ({ \ +register unsigned short __res; \ +__asm__("mov %%fs,%%ax":"=a" (__res):); \ +__res;}) + +int do_exit(long code); + +void page_exception(void); + +void divide_error(void); +void debug(void); +void nmi(void); +void int3(void); +void overflow(void); +void bounds(void); +void invalid_op(void); +void device_not_available(void); +void double_fault(void); +void coprocessor_segment_overrun(void); +void invalid_TSS(void); +void segment_not_present(void); +void stack_segment(void); +void general_protection(void); +void page_fault(void); +void coprocessor_error(void); +void reserved(void); +void parallel_interrupt(void); +void irq13(void); + +static void die(char * str,long esp_ptr,long nr) +{ + long * esp = (long *) esp_ptr; + int i; + + printk("%s: %04x\n\r",str,nr&0xffff); + printk("EIP:\t%04x:%p\nEFLAGS:\t%p\nESP:\t%04x:%p\n", + esp[1],esp[0],esp[2],esp[4],esp[3]); + printk("fs: %04x\n",_fs()); + printk("base: %p, limit: %p\n",get_base(current->ldt[1]),get_limit(0x17)); + if (esp[4] == 0x17) { + printk("Stack: "); + for (i=0;i<4;i++) + printk("%p ",get_seg_long(0x17,i+(long *)esp[3])); + printk("\n"); + } + str(i); + printk("Pid: %d, process nr: %d\n\r",current->pid,0xffff & i); + for(i=0;i<10;i++) + printk("%02x ",0xff & get_seg_byte(esp[1],(i+(char *)esp[0]))); + printk("\n\r"); + do_exit(11); /* play segment exception */ +} + +void do_double_fault(long esp, long error_code) +{ + die("double fault",esp,error_code); +} + +void do_general_protection(long esp, long error_code) +{ + die("general protection",esp,error_code); +} + +void do_divide_error(long esp, long error_code) +{ + die("divide error",esp,error_code); +} + +void do_int3(long * esp, long error_code, + long fs,long es,long ds, + long ebp,long esi,long edi, + long edx,long ecx,long ebx,long eax) +{ + int tr; + + __asm__("str %%ax":"=a" (tr):"0" (0)); + printk("eax\t\tebx\t\tecx\t\tedx\n\r%8x\t%8x\t%8x\t%8x\n\r", + eax,ebx,ecx,edx); + printk("esi\t\tedi\t\tebp\t\tesp\n\r%8x\t%8x\t%8x\t%8x\n\r", + esi,edi,ebp,(long) esp); + printk("\n\rds\tes\tfs\ttr\n\r%4x\t%4x\t%4x\t%4x\n\r", + ds,es,fs,tr); + printk("EIP: %8x CS: %4x EFLAGS: %8x\n\r",esp[0],esp[1],esp[2]); +} + +void do_nmi(long esp, long error_code) +{ + die("nmi",esp,error_code); +} + +void do_debug(long esp, long error_code) +{ + die("debug",esp,error_code); +} + +void do_overflow(long esp, long error_code) +{ + die("overflow",esp,error_code); +} + +void do_bounds(long esp, long error_code) +{ + die("bounds",esp,error_code); +} + +void do_invalid_op(long esp, long error_code) +{ + die("invalid operand",esp,error_code); +} + +void do_device_not_available(long esp, long error_code) +{ + die("device not available",esp,error_code); +} + +void do_coprocessor_segment_overrun(long esp, long error_code) +{ + die("coprocessor segment overrun",esp,error_code); +} + +void do_invalid_TSS(long esp,long error_code) +{ + die("invalid TSS",esp,error_code); +} + +void do_segment_not_present(long esp,long error_code) +{ + die("segment not present",esp,error_code); +} + +void do_stack_segment(long esp,long error_code) +{ + die("stack segment",esp,error_code); +} + +void do_coprocessor_error(long esp, long error_code) +{ + if (last_task_used_math != current) + return; + die("coprocessor error",esp,error_code); +} + +void do_reserved(long esp, long error_code) +{ + die("reserved (15,17-47) error",esp,error_code); +} + +void trap_init(void) +{ + int i; + + set_trap_gate(0,÷_error); + set_trap_gate(1,&debug); + set_trap_gate(2,&nmi); + set_system_gate(3,&int3); /* int3-5 can be called from all */ + set_system_gate(4,&overflow); + set_system_gate(5,&bounds); + set_trap_gate(6,&invalid_op); + set_trap_gate(7,&device_not_available); + set_trap_gate(8,&double_fault); + set_trap_gate(9,&coprocessor_segment_overrun); + set_trap_gate(10,&invalid_TSS); + set_trap_gate(11,&segment_not_present); + set_trap_gate(12,&stack_segment); + set_trap_gate(13,&general_protection); + set_trap_gate(14,&page_fault); + set_trap_gate(15,&reserved); + set_trap_gate(16,&coprocessor_error); + for (i=17;i<48;i++) + set_trap_gate(i,&reserved); + set_trap_gate(45,&irq13); + outb_p(inb_p(0x21)&0xfb,0x21); + outb(inb_p(0xA1)&0xdf,0xA1); + set_trap_gate(39,¶llel_interrupt); +} diff --git a/linux/kernel/traps.o b/linux/kernel/traps.o new file mode 100644 index 0000000000000000000000000000000000000000..6a7ee6d21ff51e2ed7cfc84460f06a50325a4456 GIT binary patch literal 12964 zcma)C3wTu3oj>=^O_=0P9+Ct?fjX5?gUu6yAVmpJ!J>;MR1{>G%-l&vCNtBS2?mRb zjVK|dExNUCKdjR7?e?+l+TCiQ_*qnJZFjfD{kkjlvt8@g2fNsZ{p?n&E&Kc3`#+OA zX+k?N_xJz(U*~bpJ?Gprxohplb%tRm{V`NPjWeb8ggr}_3(cxQO;I_O;ZR?p^;OyTc7e0=WV=UBdIJ=K z<&M#A4A9bn*`)nPPA#9JH`dYRdw2|{?yzg<@} Y@*Bl3%cAy7w3X5JLt0Nf-YIQ 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 literal 0 HcmV?d00001 diff --git a/linux/kernel/vsprintf.c b/linux/kernel/vsprintf.c new file mode 100644 index 0000000..06b910e --- /dev/null +++ b/linux/kernel/vsprintf.c @@ -0,0 +1,233 @@ +/* + * linux/kernel/vsprintf.c + * + * (C) 1991 Linus Torvalds + */ + +/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */ +/* + * Wirzenius wrote this portably, Torvalds fucked it up :-) + */ + +#include +#include + +/* we use this so that we can do without the ctype library */ +#define is_digit(c) ((c) >= '0' && (c) <= '9') + +static int skip_atoi(const char **s) +{ + int i=0; + + while (is_digit(**s)) + i = i*10 + *((*s)++) - '0'; + return i; +} + +#define ZEROPAD 1 /* pad with zero */ +#define SIGN 2 /* unsigned/signed long */ +#define PLUS 4 /* show plus */ +#define SPACE 8 /* space if plus */ +#define LEFT 16 /* left justified */ +#define SPECIAL 32 /* 0x */ +#define SMALL 64 /* use 'abcdef' instead of 'ABCDEF' */ + +#define do_div(n,base) ({ \ +int __res; \ +__asm__("divl %4":"=a" (n),"=d" (__res):"0" (n),"1" (0),"r" (base)); \ +__res; }) + +static char * number(char * str, int num, int base, int size, int precision + ,int type) +{ + char c,sign,tmp[36]; + const char *digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + int i; + + if (type&SMALL) digits="0123456789abcdefghijklmnopqrstuvwxyz"; + if (type&LEFT) type &= ~ZEROPAD; + if (base<2 || base>36) + return 0; + c = (type & ZEROPAD) ? '0' : ' ' ; + if (type&SIGN && num<0) { + sign='-'; + num = -num; + } else + sign=(type&PLUS) ? '+' : ((type&SPACE) ? ' ' : 0); + if (sign) size--; + if (type&SPECIAL) + if (base==16) size -= 2; + else if (base==8) size--; + i=0; + if (num==0) + tmp[i++]='0'; + else while (num!=0) + tmp[i++]=digits[do_div(num,base)]; + if (i>precision) precision=i; + size -= precision; + if (!(type&(ZEROPAD+LEFT))) + while(size-->0) + *str++ = ' '; + if (sign) + *str++ = sign; + if (type&SPECIAL) + if (base==8) + *str++ = '0'; + else if (base==16) { + *str++ = '0'; + *str++ = digits[33]; + } + if (!(type&LEFT)) + while(size-->0) + *str++ = c; + while(i0) + *str++ = tmp[i]; + while(size-->0) + *str++ = ' '; + return str; +} + +int vsprintf(char *buf, const char *fmt, va_list args) +{ + int len; + int i; + char * str; + char *s; + int *ip; + + int flags; /* flags to number() */ + + int field_width; /* width of output field */ + int precision; /* min. # of digits for integers; max + number of chars for from string */ + int qualifier; /* 'h', 'l', or 'L' for integer fields */ + + for (str=buf ; *fmt ; ++fmt) { + if (*fmt != '%') { + *str++ = *fmt; + continue; + } + + /* process flags */ + flags = 0; + repeat: + ++fmt; /* this also skips first '%' */ + switch (*fmt) { + case '-': flags |= LEFT; goto repeat; + case '+': flags |= PLUS; goto repeat; + case ' ': flags |= SPACE; goto repeat; + case '#': flags |= SPECIAL; goto repeat; + case '0': flags |= ZEROPAD; goto repeat; + } + + /* get field width */ + field_width = -1; + if (is_digit(*fmt)) + field_width = skip_atoi(&fmt); + else if (*fmt == '*') { + /* it's the next argument */ + field_width = va_arg(args, int); + if (field_width < 0) { + field_width = -field_width; + flags |= LEFT; + } + } + + /* get the precision */ + precision = -1; + if (*fmt == '.') { + ++fmt; + if (is_digit(*fmt)) + precision = skip_atoi(&fmt); + else if (*fmt == '*') { + /* it's the next argument */ + precision = va_arg(args, int); + } + if (precision < 0) + precision = 0; + } + + /* get the conversion qualifier */ + qualifier = -1; + if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L') { + qualifier = *fmt; + ++fmt; + } + + switch (*fmt) { + case 'c': + if (!(flags & LEFT)) + while (--field_width > 0) + *str++ = ' '; + *str++ = (unsigned char) va_arg(args, int); + while (--field_width > 0) + *str++ = ' '; + break; + + case 's': + s = va_arg(args, char *); + len = strlen(s); + if (precision < 0) + precision = len; + else if (len > precision) + len = precision; + + if (!(flags & LEFT)) + while (len < field_width--) + *str++ = ' '; + for (i = 0; i < len; ++i) + *str++ = *s++; + while (len < field_width--) + *str++ = ' '; + break; + + case 'o': + str = number(str, va_arg(args, unsigned long), 8, + field_width, precision, flags); + break; + + case 'p': + if (field_width == -1) { + field_width = 8; + flags |= ZEROPAD; + } + str = number(str, + (unsigned long) va_arg(args, void *), 16, + field_width, precision, flags); + break; + + case 'x': + flags |= SMALL; + case 'X': + str = number(str, va_arg(args, unsigned long), 16, + field_width, precision, flags); + break; + + case 'd': + case 'i': + flags |= SIGN; + case 'u': + str = number(str, va_arg(args, unsigned long), 10, + field_width, precision, flags); + break; + + case 'n': + ip = va_arg(args, int *); + *ip = (str - buf); + break; + + default: + if (*fmt != '%') + *str++ = '%'; + if (*fmt) + *str++ = *fmt; + else + --fmt; + break; + } + } + *str = '\0'; + return str-buf; +} diff --git a/linux/kernel/vsprintf.o b/linux/kernel/vsprintf.o new file mode 100644 index 0000000000000000000000000000000000000000..77b79c5ec34ac8e572a8523b248c9c60f110c024 GIT binary patch literal 6152 zcmbVQYiu0V6}~e&UQfKvdi@}^2`y{bq)G6u?PLLmns`Gt#EG|HzyX5|_P*@hdcEuH z&g6m8m}=q@+p&mM)CY|)RjJe;f#yelAc`u}q~Rf?Mpc2Rsw$&aA?Zdf#Ylt_;eKcC z9eeDeHtLn;e&==1IrrSh%ZXs#ud*SVP83k ziVc%pzVh+&ug}TSd1-e1%w*VCJISWnCCF>X%O+UGuVhe0- z8Y;m~Io(v0PkWDreOtIc8Nw#4_7 zoh`;x#HS)oPO+JzOaR?eK<7-vI0XN)Vop!-q3@a0DobLS+mKi6rs z5Qll?!ibWf7?&Ghfn{wq*D35vgfK1vLkz(-H!gXNtDXZ5lgd~pEEeXBh_BUCe2+jW z{*FK`zDeLMzD^(&U!|SBfX1ERT-+q6t)o>_a6GQ~E*-zNuz)}<#Z5xDN%tCIUrGU+ znhaed9Tud89a@FW+(Mq|dl0$mj>CR6FgQ;@6sBaKIVA=+XKuz|LnMjYn5*s|p3 zce%^U&*8FOoQ82pnPixMD^5WT9Sxud*a9p^bX7%k%!D>hcpMX*`jvv7>3A^jfmg}p+SLpxub@4Ni<|*MzzJ6b2EAo0y_$tO1eefehFS0NS z)4!3f+lFyZaXXM-26T-sEyFr4KRT=3V3T9Gc}Wykk-8nVNSq)lM3gn6V(iDCn}dRPm7rkPYjLU~$as#229 zYH(&i;7};=D)L*h6P>hy0+E+}NKQKWFuXepT3#sN%bC@O!EtX&+2iIQ&Z%WCN=E3) z%l={0dCFqMZRD0UrEw!d7p?UbZhfMii zXx2jRT1~^Zb8&*P)#P>nN;h@4QlZv^s2C)(UNUP%?d-PL-M^>gPTZr6_%r)BUAs%qB*07Am_SVqohl7uG4cPrBQHV-(tl`SUEyuwM0>vR4J`ESUXFYL*+x| zTEu^+dN5)9#JmoY5K5C-o)MvN=y}SpVBS4+AgG-(IqbW|2^b|UUj7-atfUwe>9WR+i z@FuXs(A9dLN3e3gDSX~(7%!QkcQ5K{^-KD^{=T}6OBOD2g<4~x`W?Yv?C5d0Ti=>d z8+(sVtJ6B#K|X=!oil3v3-fx%fLXBPkmd2d|930Aztp8pVwz* zjtaS2gTXS@KvthI{p@kRU?tNd-&5108$IvJ!5exW1Jg@g^Zb1C%=U*k!gLlHCjA3?Hm;>}*#bn_oWGz&<3s+Dd`?TowOpRmCPHHIzBRpva{t{pq>@^080)3ch+v-NM* zO|JP!b1={p+{mSL0BWd1lb(E#NrzQwZMmWx!(s43MkkIMy&Bkdw`#~c+_myvx4Qj| zo6evYPY93o>ac9u9YeBZgxi57@L2aR+u`na98=8kEKoQ!tVLr$l-tCVMdg#3fR;R{ zu|OiKMOh$LD6jwt^EoacI+2X&gMI1jKn`Xm9gW5E$^G0?Nb=F_Aa;y7n2TsJtO1C} z0`c7Na1whfki}XAu*!UG_?Tp>&s)XM^m!=ncoKBt#$?9y&qc)(2Dhh zjVAS<@q+OZA(~}JADYYJ;$`W9jN;NKwH0?CXlo2e_67X?(I&9SVd(7sF2Ntwo&3=s zNtQqQ5~DHZ3mbR=UoDN66QLvan4m4Y(h9~lL1s0wp=Vm4C2xkEy;-h*1|iYb5(Hs) z*k(xiQTquV`#e6vJm|dAJSy>6^B~&VQy|%C`1=JBqFHh6F-dhEZ+o)-8^fv*UBP2jA+vjX1~ z_>REy0{p%9A)PBi`Z^|m^@O;y)(iPofgyoA1>R2x`)36IBf*>XfWO}h`JBMN3pDeD z-bZ->w~73A2|g__EAXJu|5WfF3#5yQ#=8aHByf|!CPF-|f;Z={^1FlN4^TcpFHi=C I1*Qc48|KlfMgRZ+ literal 0 HcmV?d00001 diff --git a/linux/lib/Makefile b/linux/lib/Makefile new file mode 100644 index 0000000..608faf5 --- /dev/null +++ b/linux/lib/Makefile @@ -0,0 +1,73 @@ +# +# Makefile for some libs needed in the kernel. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). +# + +AR =ar +AS =as +LD =ld +LDFLAGS =-s -x +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer \ + -finline-functions -nostdinc -fno-stack-protector -I../include +CPP =gcc -E -nostdinc -I../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< + +OBJS = ctype.o _exit.o open.o close.o errno.o write.o dup.o setsid.o \ + execve.o wait.o string.o malloc.o + +lib.a: $(OBJS) + $(AR) rcs lib.a $(OBJS) + sync + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +_exit.s _exit.o : _exit.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +close.s close.o : close.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +ctype.s ctype.o : ctype.c ../include/ctype.h +dup.s dup.o : dup.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +errno.s errno.o : errno.c +execve.s execve.o : execve.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +malloc.s malloc.o : malloc.c ../include/linux/kernel.h ../include/linux/mm.h \ + ../include/asm/system.h +open.s open.o : open.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h ../include/stdarg.h +setsid.s setsid.o : setsid.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +string.s string.o : string.c ../include/string.h +wait.s wait.o : wait.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h ../include/sys/wait.h +write.s write.o : write.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h diff --git a/linux/lib/_exit.c b/linux/lib/_exit.c new file mode 100644 index 0000000..c0c9d69 --- /dev/null +++ b/linux/lib/_exit.c @@ -0,0 +1,13 @@ +/* + * linux/lib/_exit.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include + +volatile void _exit(int exit_code) +{ + __asm__("int $0x80"::"a" (__NR_exit),"b" (exit_code)); +} diff --git a/linux/lib/_exit.o b/linux/lib/_exit.o new file mode 100644 index 0000000000000000000000000000000000000000..4e33bda05510ad5423cc6f07963f7f58aea5da6f GIT binary patch literal 1984 zcma)7O>f*p7=FjzO}5!|X_6um1tCW&YJl3CkOhT8Ati;14@IK1;()5iyX)+_?Anp- zg|tF^hzp2Q4~PpA{Rv!Gq(~@=w(o1n_ zvop|~TKyQ{*6MLmh~vy&rBgM2)Unx{+M4+tpew35Xu5{_uKo*DHMfP?xleULJ=t1n zx~3w6#Sw_Lf zSsBBghML_z_2)1gc>=Rif49zJ*2IAfCHv7)Tm(I)p|Gyv&Z)JZ9S3PTD3c_Q2T9cT zc=Glz9Y^hC(l6ShIGG&z8^PwLKMK3;tOzm*~xZ$!!VOknhf;DdCvV_+K)v0<@)aKWpDjfcajv7au@!y6K!pNve^kX zI!~2e&~jdr1Getn5cP3Gt3i?rZGT4ukgA^gHhuv-#eOQf#S(pr>Qwzw5U4Z%$^wRM-!h;GD z5E6jolAy9oG~Cyungjh0SVa!M8h!&5eoxhRi!sU?26gk<$u&AFV)HJ-hgbVQ^EQxU z*RTxheMH5Gja`C$#yWxPvm!^p1q?n04)%Kq!>)lUKViH>#fXjV!L~X>^DsOrMr`a& z*wwxd(3iZhFVtz@5V~ChRW8BcHDkrbc>h%E{eU9eH|x=F&oPG1HROj9!T6(8^~@Lt zIjH9C;M0CuXOxr8``qN&(4F!kvF3E|- + +_syscall1(int,close,int,fd) diff --git a/linux/lib/close.o b/linux/lib/close.o new file mode 100644 index 0000000000000000000000000000000000000000..b087fd21884bc31844617f09aac7853850b43bd4 GIT binary patch literal 2216 zcma)7&2Jl35TCcZ{%D*UCn+LUkT6mzQef8!F%XrOwn?EXpdJblNJWa)_S#<6-c5Jc zkX8XIMM$l}r9vnmaX{*yz@?mv#0gQAOD^1z;K0WL1W4sKZ{M>wCm8w7%x`Ai%zN|v z-hS}XYcC5SNRuFw#)xR&Og#-L7U&2~(d#=uSMKCt*nMMu_U8BBUcY&EesX7fev-EG zyHJ0sF#lu!HqW{90JQUU<;S20fn&GOPk?hLu}}Fs+;)BxD$c zRW^#^SJGGbPNMuigmnT;OmH+4=MkUpg6BGIWjAh7{!6w`JPmH#N~o~T%6&OWOo^lA znUYzaD^H2(eB}{%=BZSA5hkoasYO(B#Hp%TK3;mE^hEXi3{;=&4 zwfbS~IW3+s4E#80JH7Puax%GjNW6kpihL10w2aPgMh=;VLF{(}uU+HT)_dW=s|Uk& zQt$i0aLZnFmX_?k+pI6A2Jj~J!=Nj}WkHI2VU*Mk$1HWg^AZn z!iY9DA}_`k)xujnHyZ6d_OE%#)lHA2mCmiL9j`5{H-|woOjlw*Gn8oQ{iTMp*f^G2 z(Xu1lH;}k?k;HaU%uQO>4YZgKhX<29lr!bxjBVZ6)Ni-NYrQ8OP+XvF$a7-3>qJgm6jSZ8jtCovhc5+@On%W+rfV^aRu(rxgwc z9uCe4&>RO1Pn(s_@p>Dw!Rgxn4}T0neBb#xGx0so{t@+CFbDe~4$y=Pfgep{a138; z#zz%a&jwuv&XUge6pS4IUva!1J%{sfzCBhHY2PAnc6~)8zYZI(FNdMmcN)5$0~K!y zt_~}TwC^IY*4gzgK#dhe+IImsTlWU)R$$}0ygywRm-RrtJtTM=HcdL83qv;Fr%1wi zINt<@&UXbm&*6PD{SNR$s!Gm29@|RlxO;dQo|F+O({UfFIPLl?eVsHMt^G3tpx{Ms^=xWcKk8e0m>K(Di=+Dm4IZv!aOC$HY?CWc(-ou)jd!?UmmU&c}V{ zn%R6m;&bvaY?^dFjkV0$E&BC=wzE9=MP!_`!B$_vOqFE7na;R zmi*BYIDp4l;w%@Gy{_a*CC@7Ps*>^^Vg8#6yDX9CJ%v9~Qr5>s<+ZYZRmmEp0sJp* C)At4d literal 0 HcmV?d00001 diff --git a/linux/lib/ctype.c b/linux/lib/ctype.c new file mode 100644 index 0000000..877e629 --- /dev/null +++ b/linux/lib/ctype.c @@ -0,0 +1,35 @@ +/* + * linux/lib/ctype.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +char _ctmp; +unsigned char _ctype[] = {0x00, /* EOF */ +_C,_C,_C,_C,_C,_C,_C,_C, /* 0-7 */ +_C,_C|_S,_C|_S,_C|_S,_C|_S,_C|_S,_C,_C, /* 8-15 */ +_C,_C,_C,_C,_C,_C,_C,_C, /* 16-23 */ +_C,_C,_C,_C,_C,_C,_C,_C, /* 24-31 */ +_S|_SP,_P,_P,_P,_P,_P,_P,_P, /* 32-39 */ +_P,_P,_P,_P,_P,_P,_P,_P, /* 40-47 */ +_D,_D,_D,_D,_D,_D,_D,_D, /* 48-55 */ +_D,_D,_P,_P,_P,_P,_P,_P, /* 56-63 */ +_P,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U, /* 64-71 */ +_U,_U,_U,_U,_U,_U,_U,_U, /* 72-79 */ +_U,_U,_U,_U,_U,_U,_U,_U, /* 80-87 */ +_U,_U,_U,_P,_P,_P,_P,_P, /* 88-95 */ +_P,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L, /* 96-103 */ +_L,_L,_L,_L,_L,_L,_L,_L, /* 104-111 */ +_L,_L,_L,_L,_L,_L,_L,_L, /* 112-119 */ +_L,_L,_L,_P,_P,_P,_P,_C, /* 120-127 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 128-143 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 144-159 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 160-175 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 176-191 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 192-207 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 208-223 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 224-239 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; /* 240-255 */ + diff --git a/linux/lib/ctype.o b/linux/lib/ctype.o new file mode 100644 index 0000000000000000000000000000000000000000..003738ea7659fb0b0002cf09372f7d18ca82a01c GIT binary patch literal 1904 zcmcgtOK;Oa5Z;a5XJ|+iUR4Ehr4|ChPD2B#3N4fhsvy)`FGx^q$4M+|JMsgyNWg_F z5ai+16#n?MdM%qF& zSe4BvsFah68brz%$@kUcq#sf4-w=c~{6P|MS5WCMMDfYvtNH(ygOa)^tMjXn{4|C) z!ogVSIur}6(SXM4`owuCI-i_?7!%HE@{EZ-k6nbyr=A=+bUyx3fNFfPQZH+jxk~jc z@^ap(^E&d*vrfHYfmI1S+Tcgbv-BR@A_dcLP+SglehC&hf|#Z-X*DC#j&85?Y2t*6 z@#0C+{OM5;nkIHQa%rqA_DO3duCX77)CVHE^EFzZ`mV{ZRsLm@?}(!()H9B<)PIun lH77Ys5*MkJ+bg+T%VmcoevRUu0{@6?B(w84QZtV4^lvrKt0Mpa literal 0 HcmV?d00001 diff --git a/linux/lib/dup.c b/linux/lib/dup.c new file mode 100644 index 0000000..dd13414 --- /dev/null +++ b/linux/lib/dup.c @@ -0,0 +1,10 @@ +/* + * linux/lib/dup.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include + +_syscall1(int,dup,int,fd) diff --git a/linux/lib/dup.o b/linux/lib/dup.o new file mode 100644 index 0000000000000000000000000000000000000000..4bdab9f29076d0ff9b741fa9bd732bd1612e75cf GIT binary patch literal 2192 zcma)7&u`pR5T0jye>9sen*>BwLBdEWB!ImMSwU1NO-Z3@K|K`80S=LO*Sl+V*G|1Q zq*Z`Q0jVWiDueuA%q}Jf=n7CqMyvn(v)n09;GRId*^=b_97I!@66BMxcBq58>iK&cK$+$2 zj4?}8Y?4`J#|)On@MQg!I&we3`7v}ySkf(E`CSZyxIQ8NsUF2F&j=?YT(=Q~?Lpe{ ziLiIK&HiZ^jFOJq&(5wOLz_p$IW$rf%jlqGbpJF8h?9n+pcncbn;V<0AN8X+u@4#i zI1VE^bN-^eZa3Xkw`n^=FK+iw1S_jA+D^}Qy3sI5oNnw5eP=U5Fh7Pe2nRvvJKZ#F zCqWdBpb8^rlz8n+&So4XemjX`+SrKw5o%VIwEJF6gDC9DnnuA@Ke@8$lT*% zX(wqQa=PU#xy#GWz-u*DG6m)q(V6x2_#w2*=x08|AV~Mi@mUiZsZnl3-tozAh#V2hdz$W4bedt zr;>FvTjTdPySNe3=;^Q&>F} zbO|_5I^J_ovj2biaXoqs$KiN;EGW{pCE$F0f1|!F=(xTDhOTc7vR(rb?+7jo3yQSu z0;FI-UnbKHfD1;W!*`0z=2U z44K#PzL_2X{F;e!W*d)f#kJp$cn+SG9@(V*K2v_$w4c358XnaCjq=lG_FFyh%IahI z6-Is^*K_-L1U9{oDaiU8fJh4fw^&fb^)WHmIT_!_2fGiB_m=qI!ST57oHHNqcYFt& zLz9lDvF3TbMGqcoJ@dnVLB{zEj5+(5O!>v-vHXu6C`@^x2N3J|WXELEFKcm6?U?>X#?7y_aB?h8zuRiJ^~FXoRa&Oa%E=0C+8 r=eVHs4aH9=ep>N26_X7|Zgl literal 0 HcmV?d00001 diff --git a/linux/lib/errno.c b/linux/lib/errno.c new file mode 100644 index 0000000..50aca2e --- /dev/null +++ b/linux/lib/errno.c @@ -0,0 +1,7 @@ +/* + * linux/lib/errno.c + * + * (C) 1991 Linus Torvalds + */ + +int errno; diff --git a/linux/lib/errno.o b/linux/lib/errno.o new file mode 100644 index 0000000000000000000000000000000000000000..92e8a5406b551b2f21b87446b585a8eb99117a0d GIT binary patch literal 1468 zcma)6O>fjN5FIzW6bM~f6$DigTBITtM7-U0RaNEdP(cMkz4ZtvNxf}glT=v;6^V}{ zC)67!egh|d2q*prTsf3CcDx%T5R5dQH#5&3+nM;?{l^c45adLVM-z|e(v;2gjp@)V z&Cm*P!}twx0#>}o@YDo|3|~x3xJ{2^UZa_08mu{SwKea1t;N>t1@QXhwKn`){=@lu z3sV=tTO!}T>w70L=N!})wsm+NmL=#EUB)QH&(;h^vvq7(kSdBSmod{UrmgLr_GY^; z*JZyQq+t>7-$_>2*V@5eI~e3?qJu#ZrYbndu|ZWJm}J8wQ^BCjVx8pK2%#(wMmmgN z1P4W~Rjl)Zy8C&mx>>oayZNY#8RcQHEPK6R7)ISy8^9P%wzRdmxzXMT*KL$Yj$WlYj9_(P?Y=`=9cq%hp$|!Y+T)&z^7{Q*G-~z_$?^+7c1Ah4Rvz>={c0=I&rye z1RUnvM<^P2EH3v5k$T-PsLOS@?ljcZeFE&}0Mch@he0JSm%wMt=Vti^Ju=7+oMY9M zbv%XO4NEbjeLr?_w!gnx?ALd~e!U|5yqk%5~)$TKIL zggo-iIk^h!9Q`;RzX#^2vi}P|pnNw1%kw?6Jzv=cwrCjh-XYH4P=IXST-@0&UW$+% literal 0 HcmV?d00001 diff --git a/linux/lib/execve.c b/linux/lib/execve.c new file mode 100644 index 0000000..a89726d --- /dev/null +++ b/linux/lib/execve.c @@ -0,0 +1,10 @@ +/* + * linux/lib/execve.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include + +_syscall3(int,execve,const char *,file,char **,argv,char **,envp) diff --git a/linux/lib/execve.o b/linux/lib/execve.o new file mode 100644 index 0000000000000000000000000000000000000000..a305001ae07411dcad14c0b6067ba4b70456d462 GIT binary patch literal 2332 zcma)7TWB0r82-=9>?PTBo12=Df+K7-YIim!FrB^bYX`SsJ4vF)wO z7;WZv!2UAM_^>r&_`Gd#}Yz@Rd^4qVdZ`VF|C~E z$7C3VS6L~Fo61)BR!RBmAS$C6T>{I%dBg`F0_P%TN0~L=qTCNk`b0@q?)HpS%>S&U zL&_FY!TK0n@o}Jn^{K+lkBkEu->E`kLL4klmCW*7c|uI)$M1lpLZ#AisIcplEn;_$ zI5BIMkCYxP-7~v7#m*;Z-g#(NOksmLN-V2W#tc!uzDF$VN4{0K74Ie{BSZ6v*`u@A z%K_dGmhLKZx{b^~gJsZRU?Ki4?*mrT#*BsI)I7i08?+>m+?34?=`=ZH;CoTra=OVM zA*ZsNBjQoaL*$EJff(&SjT}-XQNv&vhJHZO-&m(J=PueScHLQa>UOp7hRyCVZ)y3k zUG3P_cF_0YYCClMvbr8%wlaj$^Lw5ztL=f`jJ?2*pz?!i6uZsmtLtG9%Vr#e)b@H3 zJB+-JFI#rA>xL9{gD|#tb^Kr1BPgd@H|WcnKWN1@lo@PR7o5e#YR_%dmJ$VUgCg&W zj4!WCa>LFB^#Z?RbGo&)P)0;&R#uMK^A{TfKOQ7Ut3EJL(&E*{y0cKfH_@Vp)7(ga zxN@GvR#D82S=MW4I**GNgBsJRa&g;ODbKuEE}ptsw#bPt_hYvK8ixt(YA%#LCzhKr zIW0GK$!SCpIjn5S#-Ow2`RxEE#k-A0C^xcJH+20D4v`7qcIyDtAg3Ah`x3`>e01Bv z1e5M3F|xa+CYJ2||KK~}#BWJHb>=rD``6U(3_k-SsSlG&xH9wNb^!~Xx}$NSMSoP_gz%}ff~wg5T1zZR0e3mxw-ho$#-61)w={jlkCOn}dpdK1Dm=rriM*_v#-fKSrzpm=X-9~S51zH`lNzSC$P z-uzwA`F0g4lhs@F$E~b=@7I>|XDhI*Pn|@W>K`}EU=n{nhhVCSW@Vo25KI~y3gAq_ zrz!&`aR-NBq60bu-`z<}i2JI6`;vM8)mMa)&j8h65=hVYUjT7sfhKZ1)7w(YpD}@< z-^CO?olo^D9)4Vx{ZFU#v6QNN1pQN~>@r23^;Eu^(l=82eo8+}soEDVFrR_rR#Iw% H8j$}5%PIzy literal 0 HcmV?d00001 diff --git a/linux/lib/lib.a b/linux/lib/lib.a new file mode 100644 index 0000000000000000000000000000000000000000..ad98091ee65a80d56a93db744e208d37913e1994 GIT binary patch literal 34094 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 V9bS) literal 0 HcmV?d00001 diff --git a/linux/lib/malloc.c b/linux/lib/malloc.c new file mode 100644 index 0000000..d7c95d5 --- /dev/null +++ b/linux/lib/malloc.c @@ -0,0 +1,232 @@ +/* + * malloc.c --- a general purpose kernel memory allocator for Linux. + * + * Written by Theodore Ts'o (tytso@mit.edu), 11/29/91 + * + * This routine is written to be as fast as possible, so that it + * can be called from the interrupt level. + * + * Limitations: maximum size of memory we can allocate using this routine + * is 4k, the size of a page in Linux. + * + * The general game plan is that each page (called a bucket) will only hold + * objects of a given size. When all of the object on a page are released, + * the page can be returned to the general free pool. When malloc() is + * called, it looks for the smallest bucket size which will fulfill its + * request, and allocate a piece of memory from that bucket pool. + * + * Each bucket has as its control block a bucket descriptor which keeps + * track of how many objects are in use on that page, and the free list + * for that page. Like the buckets themselves, bucket descriptors are + * stored on pages requested from get_free_page(). However, unlike buckets, + * pages devoted to bucket descriptor pages are never released back to the + * system. Fortunately, a system should probably only need 1 or 2 bucket + * descriptor pages, since a page can hold 256 bucket descriptors (which + * corresponds to 1 megabyte worth of bucket pages.) If the kernel is using + * that much allocated memory, it's probably doing something wrong. :-) + * + * Note: malloc() and free() both call get_free_page() and free_page() + * in sections of code where interrupts are turned off, to allow + * malloc() and free() to be safely called from an interrupt routine. + * (We will probably need this functionality when networking code, + * particularily things like NFS, is added to Linux.) However, this + * presumes that get_free_page() and free_page() are interrupt-level + * safe, which they may not be once paging is added. If this is the + * case, we will need to modify malloc() to keep a few unused pages + * "pre-allocated" so that it can safely draw upon those pages if + * it is called from an interrupt routine. + * + * Another concern is that get_free_page() should not sleep; if it + * does, the code is carefully ordered so as to avoid any race + * conditions. The catch is that if malloc() is called re-entrantly, + * there is a chance that unecessary pages will be grabbed from the + * system. Except for the pages for the bucket descriptor page, the + * extra pages will eventually get released back to the system, though, + * so it isn't all that bad. + */ + +#include +#include +#include + +struct bucket_desc { /* 16 bytes */ + void *page; + struct bucket_desc *next; + void *freeptr; + unsigned short refcnt; + unsigned short bucket_size; +}; + +struct _bucket_dir { /* 8 bytes */ + int size; + struct bucket_desc *chain; +}; + +/* + * The following is the where we store a pointer to the first bucket + * descriptor for a given size. + * + * If it turns out that the Linux kernel allocates a lot of objects of a + * specific size, then we may want to add that specific size to this list, + * since that will allow the memory to be allocated more efficiently. + * However, since an entire page must be dedicated to each specific size + * on this list, some amount of temperance must be exercised here. + * + * Note that this list *must* be kept in order. + */ +struct _bucket_dir bucket_dir[] = { + { 16, (struct bucket_desc *) 0}, + { 32, (struct bucket_desc *) 0}, + { 64, (struct bucket_desc *) 0}, + { 128, (struct bucket_desc *) 0}, + { 256, (struct bucket_desc *) 0}, + { 512, (struct bucket_desc *) 0}, + { 1024, (struct bucket_desc *) 0}, + { 2048, (struct bucket_desc *) 0}, + { 4096, (struct bucket_desc *) 0}, + { 0, (struct bucket_desc *) 0}}; /* End of list marker */ + +/* + * This contains a linked list of free bucket descriptor blocks + */ +struct bucket_desc *free_bucket_desc = (struct bucket_desc *) 0; + +/* + * This routine initializes a bucket description page. + */ +static inline void init_bucket_desc() +{ + struct bucket_desc *bdesc, *first; + int i; + + first = bdesc = (struct bucket_desc *) get_free_page(); + if (!bdesc) + panic("Out of memory in init_bucket_desc()"); + for (i = PAGE_SIZE/sizeof(struct bucket_desc); i > 1; i--) { + bdesc->next = bdesc+1; + bdesc++; + } + /* + * This is done last, to avoid race conditions in case + * get_free_page() sleeps and this routine gets called again.... + */ + bdesc->next = free_bucket_desc; + free_bucket_desc = first; +} + +void *malloc(unsigned int len) +{ + struct _bucket_dir *bdir; + struct bucket_desc *bdesc; + void *retval; + + /* + * First we search the bucket_dir to find the right bucket change + * for this request. + */ + for (bdir = bucket_dir; bdir->size; bdir++) + if (bdir->size >= len) + break; + if (!bdir->size) { + printk("malloc called with impossibly large argument (%d)\n", + len); + panic("malloc: bad arg"); + } + /* + * Now we search for a bucket descriptor which has free space + */ + cli(); /* Avoid race conditions */ + for (bdesc = bdir->chain; bdesc; bdesc = bdesc->next) + if (bdesc->freeptr) + break; + /* + * If we didn't find a bucket with free space, then we'll + * allocate a new one. + */ + if (!bdesc) { + char *cp; + int i; + + if (!free_bucket_desc) + init_bucket_desc(); + bdesc = free_bucket_desc; + free_bucket_desc = bdesc->next; + bdesc->refcnt = 0; + bdesc->bucket_size = bdir->size; + bdesc->page = bdesc->freeptr = (void *) (cp = get_free_page()); + if (!cp) + panic("Out of memory in kernel malloc()"); + /* Set up the chain of free objects */ + for (i=PAGE_SIZE/bdir->size; i > 1; i--) { + *((char **) cp) = cp + bdir->size; + cp += bdir->size; + } + *((char **) cp) = 0; + bdesc->next = bdir->chain; /* OK, link it in! */ + bdir->chain = bdesc; + } + retval = (void *) bdesc->freeptr; + bdesc->freeptr = *((void **) retval); + bdesc->refcnt++; + sti(); /* OK, we're safe again */ + return(retval); +} + +/* + * Here is the free routine. If you know the size of the object that you + * are freeing, then free_s() will use that information to speed up the + * search for the bucket descriptor. + * + * We will #define a macro so that "free(x)" is becomes "free_s(x, 0)" + */ +void free_s(void *obj, int size) +{ + void *page; + struct _bucket_dir *bdir; + struct bucket_desc *bdesc, *prev; + + /* Calculate what page this object lives in */ + page = (void *) ((unsigned long) obj & 0xfffff000); + /* Now search the buckets looking for that page */ + for (bdir = bucket_dir; bdir->size; bdir++) { + prev = 0; + /* If size is zero then this conditional is always false */ + if (bdir->size < size) + continue; + for (bdesc = bdir->chain; bdesc; bdesc = bdesc->next) { + if (bdesc->page == page) + goto found; + prev = bdesc; + } + } + panic("Bad address passed to kernel free_s()"); +found: + cli(); /* To avoid race conditions */ + *((void **)obj) = bdesc->freeptr; + bdesc->freeptr = obj; + bdesc->refcnt--; + if (bdesc->refcnt == 0) { + /* + * We need to make sure that prev is still accurate. It + * may not be, if someone rudely interrupted us.... + */ + if ((prev && (prev->next != bdesc)) || + (!prev && (bdir->chain != bdesc))) + for (prev = bdir->chain; prev; prev = prev->next) + if (prev->next == bdesc) + break; + if (prev) + prev->next = bdesc->next; + else { + if (bdir->chain != bdesc) + panic("malloc bucket chains corrupted"); + bdir->chain = bdesc->next; + } + free_page((unsigned long) bdesc->page); + bdesc->next = free_bucket_desc; + free_bucket_desc = bdesc; + } + sti(); + return; +} + diff --git a/linux/lib/malloc.o b/linux/lib/malloc.o new file mode 100644 index 0000000000000000000000000000000000000000..3ed04d76a7ba173d4526a292a46cfe4357611de9 GIT binary patch literal 4876 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 R|B*y=fFU674&pA2{{vrLHFp32 literal 0 HcmV?d00001 diff --git a/linux/lib/open.c b/linux/lib/open.c new file mode 100644 index 0000000..8c3fc58 --- /dev/null +++ b/linux/lib/open.c @@ -0,0 +1,25 @@ +/* + * linux/lib/open.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include +#include + +int open(const char * filename, int flag, ...) +{ + register int res; + va_list arg; + + va_start(arg,flag); + __asm__("int $0x80" + :"=a" (res) + :"0" (__NR_open),"b" (filename),"c" (flag), + "d" (va_arg(arg,int))); + if (res>=0) + return res; + errno = -res; + return -1; +} diff --git a/linux/lib/open.o b/linux/lib/open.o new file mode 100644 index 0000000000000000000000000000000000000000..15f85dbfc72ef89d04b6b1e9bb81cb91bc2f14a7 GIT binary patch literal 2360 zcma)7PiP!v6o22$B)iEb+x+oQLJE$MYE))6F^iP`v8jockS1bF6|op*cV~A8cW2_v zY)RXwm8H-SM01cL^dddmi2H;e{FmJ`Y)Tt_QAd4_QBr=w>it+eL(lyk+=5mLQC=+VhXY-f_w>NSWXye zM(%Tnn$hl6hRwOz{Hk{X9;yGDK>bR!bOtcvpkPS`+suS;KyykA2azSkv66CQnQv?l4dTs%EpKy36w0K#dkah4`m9 z3@Q%LLM=*-#$bI~l@NA0p{wVklqJn79JeZjOErd1ExUToDv46-%? z?7JJn==m+rcddHIuf|^BM=<$;6~#{V9cv>DVz(LxAzgCTTc`~6MP9>qYi70SgcLP{ zFg739_$bv|PNNsa78zM;25q|oOUWQ^Nfmphi!|9|Kc z2*R?HdkW5PP4;}UkAa_v0VyTq8g3Fk8Uu0+_l5N%sjh=FyqB;CRONdP7LNa~IIc&H z;Ut{z2NqILzFFwm`feckC$MpS{L-lU79guJ5NQ?4O%_s6zH`u(%&y;{m@K5Ad~49N z^G-k+fsNRy$hMg@VXi5$agOhC1oGu zR?1b}YiRhhG9n==?s^)hTvye`qy~;-_zcLhd~3kB5O)Gx0oTXyDKNW^*~~f)!Kc=Th30XL0+mncif8Qx{dHg2nLqqj zW<5It>uS}>C|#boUIv{|YzB0>qdkKzcQ&gJ^%O`t@xQqTI&lYkprZqPMi`cXW7r|? zi30A6didqvAbI`iIL!Rp=YO;S;aLS5$a}(^|E|pWKPIr@Pcp|uGpW6l@{=iFO8H94 m + +_syscall0(pid_t,setsid) diff --git a/linux/lib/setsid.o b/linux/lib/setsid.o new file mode 100644 index 0000000000000000000000000000000000000000..b76227f05803af7a2fb2b3ca3200bdaebcce24e2 GIT binary patch literal 2240 zcma)7&2QX96rZu3O`1)&n-AJVLBgO^gb#ZYvO-k}ZPgS?B~(zQasox(T_D8B|l)``%wiro5{Aw4LrXtH?PE3o#-|I&gA%FMbtxHQ&hX+ejVy|)=>~D4Azkj?- z=c5OJ!*A=~+=1XwBOKWRmdAlkQU){%A}nW|oaKyt4`RPT{?s{O#~F*_Tv*ol26b}c zYZ7Pto{}m*fsCyK$;mZf0z=BrZvj`nB0KpkuytoojK2xS{((`2oR+6+vsJscSeuqJ zmHH{TEQxCM98_>RDeT(W>I>B?vsi)FPau;o&o2~~Cl{{Fa^{8kPcJS=xK*0NIo7-o z<0J9>!ukSIK8j&6x2^^`vwiXzh9zDHmhzw4abVRKbVK@nBZ}L-K__fv`UtRTjL94M=D1ckqU1Z%P&E1Cr?M9u=T!d*FC*tze>+Xiz^w0QB z*XsvqyZd6acIJ84+jhOJq#xzpRvPp}Z#Tgb!W7CVM$*vR8pQ29O5zNvIPtPPXzzHt zX_ANSJW0joW*TPLsa}7(8>FI_#M{MAq8lOWA(UEN-q<+nE?;jA;(Smn#d~g`q}BIV zoBm4ksY1&#&Jh9RjcY<4OvuG4$GM4`QqLw5RO2>kb2~Ns+J3g*&x00do))xgxHRnf zdAOGgzZ2wv@LL($M`b5$4YoItZG#hw$4;zaOG= zevGpCD0NY$VouoIRHZG}{D1IcaKctaMLYA{mw!^)2#XlU6jz`+P6s|QgFzo2c*>`> ztgjKF{!{1-n0U`XLI3~q<9f^-#$dcp$Y?OO70BiF%_I0t=(xTy470uq;LRMc;ywls zq5)&O28H2i+kxPc(O_&>A(!)hfxLC-n3wxAc|-7K4p?y;!n- z*bvqFNZF(EK8{NJIHCQxuW5{Os!I^=LTA9_E$5_d0?)@Epty(y-xt=Uj=`Mec=zFl zyM72J-cX^LvfdGYJ}BECejypZoPjd4kHA)cTv=9c-B4kxjt)i4XJZ+S&K7v0 zN?;3Ca0E6gU?TAB&Y(lAs{z(!bki4CzP_r(6EI1H=lPdF%q&qv&L@3DQ$A=CO@Eve yja$}w=A)lFr=YKB`87@Xu+#pQrY%i-q=@&PmOs{1tpf*^Yo=Yz19c(uAO9Eo)BB77 literal 0 HcmV?d00001 diff --git a/linux/lib/string.c b/linux/lib/string.c new file mode 100644 index 0000000..1182e63 --- /dev/null +++ b/linux/lib/string.c @@ -0,0 +1,14 @@ +/* + * linux/lib/string.c + * + * (C) 1991 Linus Torvalds + */ + +#ifndef __GNUC__ +#error I want gcc! +#endif + +#define extern +#define inline +#define __LIBRARY__ +#include diff --git a/linux/lib/string.o b/linux/lib/string.o new file mode 100644 index 0000000000000000000000000000000000000000..52d27cfcd802cb9d5fa753343b88ba1a57e4537e GIT binary patch literal 6376 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 WTIAaz1BhjOv&bHi4~l$J +#include + +_syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options) + +pid_t wait(int * wait_stat) +{ + return waitpid(-1,wait_stat,0); +} diff --git a/linux/lib/wait.o b/linux/lib/wait.o new file mode 100644 index 0000000000000000000000000000000000000000..04791b6bea2c36f77a9dd30c71c29e3d572644ce GIT binary patch literal 2576 zcma)8TZkJ~7(Qoal1(?+G~3p8mllke;(E!XYZooGSGU?$N|kC=sFIx|vzy>%W}QrW zWAVZ&SoW!)7NKv|M?n#!__~GqpbzSc556b}6<0wKEmWxAcjlaC3WEM{{_nq^bN+MY zB(FYp)T7rynGY1bft7+Wofl=^*|*@Bm5;KIai$u-PitBF@=?%;7g`; zWC61L1ME`_(v0FlSkBP<5G^P3Bf!p5-n0kYaWb7C7M3;i25mAI5S*d!l$QM%khusZ z^V`8myD{X&Pr$PaotAc3=fzNqjyxUKd1q)*X`I43pUeHKvrU*GIw-(pu?c(O*s9cvVZ9@5q$mjRKgrJSWF7C`fl0Up2 zJJWVFFXPI+AJN}(46nL{95l!PYhHc zPI;Z!ZL&msX2I{dZC=HG(CNi3$ZEcf;`Xq70%t0-xz7RC?C;qVyK^5}4(9QrCI zj@+7JykWO_RA#LmcKuq=Z^bn%pntl$&7GXA&U=m8_QU|*5WUV>pPdo&VK7%_*?K+l zd$;;_aC&-YdE$7ZAH@A++tmmAN}GITa?0H{b#G!tgEz3tAbIwfkc&CFx!^c&q1!xI z4ifLM*k8;oS<}U_Q^nl=m7>GEUE0U{EvAd5dJ$i%+dI>Zy#_Fj5^NhO^5@;yKOGCV z<;9+G8$BF5jV-^?pR0F**$^%zdyPiqpG|+#ida6TkT!PJznKwNreFZiJM!e=?1cUWhpL3?`6=2}qHDu}; z-C)}8h~I7+JMs2^3DnawP&d0yvTSwZ1{G|*}8d@;}h}XBw~Q axNo%ngGRMpeDvHm>zvS723pYfY5WJm_c#Lp literal 0 HcmV?d00001 diff --git a/linux/lib/write.c b/linux/lib/write.c new file mode 100644 index 0000000..df52e74 --- /dev/null +++ b/linux/lib/write.c @@ -0,0 +1,10 @@ +/* + * linux/lib/write.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include + +_syscall3(int,write,int,fd,const char *,buf,off_t,count) diff --git a/linux/lib/write.o b/linux/lib/write.o new file mode 100644 index 0000000000000000000000000000000000000000..ff97301946e274c24c583913d598f0dc6ef99178 GIT binary patch literal 2368 zcma)7&2QX96n|sySF-6gAABTAC5*I%@L_L4RwxRTwxm#ksv;H2p%g9NUGJ`8*G_G3 zn^X~03P?q{GzUOP2nm(HfKv{LOF@DIm!6P%;)vh?TsZVles4UJbx-i*dB68H@6Eii z#~-|O=4BxSX%b}8NF#bDmwM_F7U%(*qStr+nA|;6J+jZf-HX-P-8ZV%&(}UaRh`(` zu1?TqVHe`>lg$75*)Lz69iV!NmA7I1{H7Uwi{z=(LsH*rP&o*n!4&V=q@M zaMbuKQY)42NKK~ROK2>&4}JUsSa|}>ye)H!DRHziQ#LE}l_@b@n0y$Ss#Gq&026|g zSi(vlBD1nuey+SegVj0W_*|+!KDR!@Gf&KZ_Trp?uaGCRlm;5JL`A4-9;>DLed^d@ z)Z&cej}b$8GAtA4E#80LzV^elAB}VRh*8q?gT5bl zc4rv05f^B^G)n@ zm~PL0W+=6#_m}F8otdw?)waV<3O6laS zN{*a(Ymm52U=pR+(^BO1oy6Nr$Z5NYOHMP!F|x7kHHY1XA9O;vr0h1Ek#{-kbt5_W#2lK@he~{2?;&eUp7z*~c`G zF(##yUB?H8ho&(&hOY(Ik1E{+GF?jHfa`ou!NT$X702t*b2tg-<4Z@A_ASDYUEd8P zzX2PsFOQ+ucLK7W1Cdste8qwy?K=lu%j~)X#bQB`_ML^Et!qJ)8`m0rxzR%$E~nK5wDNw6O8OWRxY|6y$8FZ=u|TO_Q#ht;xP? zMWR1}xPj>q2Iu3xbIokN4K(jT*fi;UTGyDh=jg9{+Rk|YpPBV+1=jVh(^;l`<3<@w z!eTRI$`c(KOnI_doqu;DG6_Gn44K3o9Fd6*=w9=;JB<^{MsQyauE+H9P5%He*DwUq z%O5cqR~AUd=fcRnW8@#3z@b0Nh@LJeyPOX{*X6iV3fC3Bsqk%uO@)0%TwXiJT~ufR4e0*@zz7eR literal 0 HcmV?d00001 diff --git a/linux/mm/Makefile b/linux/mm/Makefile new file mode 100644 index 0000000..e0bcd73 --- /dev/null +++ b/linux/mm/Makefile @@ -0,0 +1,38 @@ +AR =ar +AS =as +LD =ld +LDFLAGS =-m elf_i386 -Ttext 0 -e startup_32 +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -finline-functions -nostdinc -fno-stack-protector -I../include +CPP =gcc -E -nostdinc -I../include + +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< +.s.o: + $(AS) -o $*.o $< +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< + +OBJS = memory.o page.o + +all: mm.o + +mm.o: $(OBJS) + $(LD) -r -o mm.o $(OBJS) + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +memory.o : memory.c ../include/signal.h ../include/sys/types.h \ + ../include/asm/system.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/linux/mm.h ../include/linux/kernel.h diff --git a/linux/mm/memory.c b/linux/mm/memory.c new file mode 100644 index 0000000..87da82a --- /dev/null +++ b/linux/mm/memory.c @@ -0,0 +1,463 @@ +/* + * linux/mm/memory.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * demand-loading started 01.12.91 - seems it is high on the list of + * things wanted, and it should be easy to implement. - Linus + */ + +/* + * Ok, demand-loading was easy, shared pages a little bit tricker. Shared + * pages started 02.12.91, seems to work. - Linus. + * + * Tested sharing by executing about 30 /bin/sh: under the old kernel it + * would have taken more than the 6M I have free, but it worked well as + * far as I could see. + * + * Also corrected some "invalidate()"s - I wasn't doing enough of them. + */ + +#include + +#include + +#include +#include +#include + +volatile void do_exit(long code); + +static inline volatile void oom(void) +{ + printk("out of memory\n\r"); + do_exit(SIGSEGV); +} + +#define invalidate() \ +__asm__("movl %%eax,%%cr3"::"a" (0)) + +/* these are not to be changed without changing head.s etc */ +#define LOW_MEM 0x100000 +#define PAGING_MEMORY (15*1024*1024) +#define PAGING_PAGES (PAGING_MEMORY>>12) +#define MAP_NR(addr) (((addr)-LOW_MEM)>>12) +#define USED 100 + +#define CODE_SPACE(addr) ((((addr)+4095)&~4095) < \ +current->start_code + current->end_code) + +static long HIGH_MEMORY = 0; + +#define copy_page(from,to) \ +__asm__("cld ; rep ; movsl"::"S" (from),"D" (to),"c" (1024)) + +static unsigned char mem_map [ PAGING_PAGES ] = {0,}; + +/* + * Get physical address of first (actually last :-) free page, and mark it + * used. If no free pages left, return 0. + */ +unsigned long get_free_page(void) +{ +register unsigned long __res asm("ax"); + +__asm__("std ; repne ; scasb\n\t" + "jne 1f\n\t" + "movb $1,1(%%edi)\n\t" + "sall $12,%%ecx\n\t" + "addl %2,%%ecx\n\t" + "movl %%ecx,%%edx\n\t" + "movl $1024,%%ecx\n\t" + "leal 4092(%%edx),%%edi\n\t" + "rep ; stosl\n\t" + "movl %%edx,%%eax\n\t" + "1:" + "cld\n\t" /* by wyj */ + :"=a" (__res) + :"0" (0),"i" (LOW_MEM),"c" (PAGING_PAGES), + "D" (mem_map+PAGING_PAGES-1) + ); +return __res; +} + +/* + * Free a page of memory at physical address 'addr'. Used by + * 'free_page_tables()' + */ +void free_page(unsigned long addr) +{ + if (addr < LOW_MEM) return; + if (addr >= HIGH_MEMORY) + panic("trying to free nonexistent page"); + addr -= LOW_MEM; + addr >>= 12; + if (mem_map[addr]--) return; + mem_map[addr]=0; + panic("trying to free free page"); +} + +/* + * This function frees a continuos block of page tables, as needed + * by 'exit()'. As does copy_page_tables(), this handles only 4Mb blocks. + */ +int free_page_tables(unsigned long from,unsigned long size) +{ + unsigned long *pg_table; + unsigned long * dir, nr; + + if (from & 0x3fffff) + panic("free_page_tables called with wrong alignment"); + if (!from) + panic("Trying to free up swapper memory space"); + size = (size + 0x3fffff) >> 22; + dir = (unsigned long *) ((from>>20) & 0xffc); /* _pg_dir = 0 */ + for ( ; size-->0 ; dir++) { + if (!(1 & *dir)) + continue; + pg_table = (unsigned long *) (0xfffff000 & *dir); + for (nr=0 ; nr<1024 ; nr++) { + if (1 & *pg_table) + free_page(0xfffff000 & *pg_table); + *pg_table = 0; + pg_table++; + } + free_page(0xfffff000 & *dir); + *dir = 0; + } + invalidate(); + return 0; +} + +/* + * Well, here is one of the most complicated functions in mm. It + * copies a range of linerar addresses by copying only the pages. + * Let's hope this is bug-free, 'cause this one I don't want to debug :-) + * + * Note! We don't copy just any chunks of memory - addresses have to + * be divisible by 4Mb (one page-directory entry), as this makes the + * function easier. It's used only by fork anyway. + * + * NOTE 2!! When from==0 we are copying kernel space for the first + * fork(). Then we DONT want to copy a full page-directory entry, as + * that would lead to some serious memory waste - we just copy the + * first 160 pages - 640kB. Even that is more than we need, but it + * doesn't take any more memory - we don't copy-on-write in the low + * 1 Mb-range, so the pages can be shared with the kernel. Thus the + * special case for nr=xxxx. + */ +int copy_page_tables(unsigned long from,unsigned long to,long size) +{ + unsigned long * from_page_table; + unsigned long * to_page_table; + unsigned long this_page; + unsigned long * from_dir, * to_dir; + unsigned long nr; + + if ((from&0x3fffff) || (to&0x3fffff)) + panic("copy_page_tables called with wrong alignment"); + from_dir = (unsigned long *) ((from>>20) & 0xffc); /* _pg_dir = 0 */ + to_dir = (unsigned long *) ((to>>20) & 0xffc); + size = ((unsigned) (size+0x3fffff)) >> 22; + for( ; size-->0 ; from_dir++,to_dir++) { + if (1 & *to_dir) + panic("copy_page_tables: already exist"); + if (!(1 & *from_dir)) + continue; + from_page_table = (unsigned long *) (0xfffff000 & *from_dir); + if (!(to_page_table = (unsigned long *) get_free_page())) + return -1; /* Out of memory, see freeing */ + *to_dir = ((unsigned long) to_page_table) | 7; + nr = (from==0)?0xA0:1024; + for ( ; nr-- > 0 ; from_page_table++,to_page_table++) { + this_page = *from_page_table; + if (!(1 & this_page)) + continue; + this_page &= ~2; + *to_page_table = this_page; + if (this_page > LOW_MEM) { + *from_page_table = this_page; + this_page -= LOW_MEM; + this_page >>= 12; + mem_map[this_page]++; + } + } + } + invalidate(); + return 0; +} + +/* + * This function puts a page in memory at the wanted address. + * It returns the physical address of the page gotten, 0 if + * out of memory (either when trying to access page-table or + * page.) + */ +unsigned long put_page(unsigned long page,unsigned long address) +{ + unsigned long tmp, *page_table; + +/* NOTE !!! This uses the fact that _pg_dir=0 */ + + if (page < LOW_MEM || page >= HIGH_MEMORY) + printk("Trying to put page %p at %p\n",page,address); + if (mem_map[(page-LOW_MEM)>>12] != 1) + printk("mem_map disagrees with %p at %p\n",page,address); + page_table = (unsigned long *) ((address>>20) & 0xffc); + if ((*page_table)&1) + page_table = (unsigned long *) (0xfffff000 & *page_table); + else { + if (!(tmp=get_free_page())) + return 0; + *page_table = tmp|7; + page_table = (unsigned long *) tmp; + } + page_table[(address>>12) & 0x3ff] = page | 7; +/* no need for invalidate */ + return page; +} + +void un_wp_page(unsigned long * table_entry) +{ + unsigned long old_page,new_page; + + old_page = 0xfffff000 & *table_entry; + if (old_page >= LOW_MEM && mem_map[MAP_NR(old_page)]==1) { + *table_entry |= 2; + invalidate(); + return; + } + if (!(new_page=get_free_page())) + oom(); + if (old_page >= LOW_MEM) + mem_map[MAP_NR(old_page)]--; + *table_entry = new_page | 7; + invalidate(); + copy_page(old_page,new_page); +} + +/* + * This routine handles present pages, when users try to write + * to a shared page. It is done by copying the page to a new address + * and decrementing the shared-page counter for the old page. + * + * If it's in code space we exit with a segment error. + */ +void do_wp_page(unsigned long error_code,unsigned long address) +{ +#if 0 +/* we cannot do this yet: the estdio library writes to code space */ +/* stupid, stupid. I really want the libc.a from GNU */ + if (CODE_SPACE(address)) + do_exit(SIGSEGV); +#endif + un_wp_page((unsigned long *) + (((address>>10) & 0xffc) + (0xfffff000 & + *((unsigned long *) ((address>>20) &0xffc))))); + +} + +void write_verify(unsigned long address) +{ + unsigned long page; + + if (!( (page = *((unsigned long *) ((address>>20) & 0xffc)) )&1)) + return; + page &= 0xfffff000; + page += ((address>>10) & 0xffc); + if ((3 & *(unsigned long *) page) == 1) /* non-writeable, present */ + un_wp_page((unsigned long *) page); + return; +} + +void get_empty_page(unsigned long address) +{ + unsigned long tmp; + + if (!(tmp=get_free_page()) || !put_page(tmp,address)) { + free_page(tmp); /* 0 is ok - ignored */ + oom(); + } +} + +/* + * try_to_share() checks the page at address "address" in the task "p", + * to see if it exists, and if it is clean. If so, share it with the current + * task. + * + * NOTE! This assumes we have checked that p != current, and that they + * share the same executable. + */ +static int try_to_share(unsigned long address, struct task_struct * p) +{ + unsigned long from; + unsigned long to; + unsigned long from_page; + unsigned long to_page; + unsigned long phys_addr; + + from_page = to_page = ((address>>20) & 0xffc); + from_page += ((p->start_code>>20) & 0xffc); + to_page += ((current->start_code>>20) & 0xffc); +/* is there a page-directory at from? */ + from = *(unsigned long *) from_page; + if (!(from & 1)) + return 0; + from &= 0xfffff000; + from_page = from + ((address>>10) & 0xffc); + phys_addr = *(unsigned long *) from_page; +/* is the page clean and present? */ + if ((phys_addr & 0x41) != 0x01) + return 0; + phys_addr &= 0xfffff000; + if (phys_addr >= HIGH_MEMORY || phys_addr < LOW_MEM) + return 0; + to = *(unsigned long *) to_page; + if (!(to & 1)) + if (to = get_free_page()) + *(unsigned long *) to_page = to | 7; + else + oom(); + to &= 0xfffff000; + to_page = to + ((address>>10) & 0xffc); + if (1 & *(unsigned long *) to_page) + panic("try_to_share: to_page already exists"); +/* share them: write-protect */ + *(unsigned long *) from_page &= ~2; + *(unsigned long *) to_page = *(unsigned long *) from_page; + invalidate(); + phys_addr -= LOW_MEM; + phys_addr >>= 12; + mem_map[phys_addr]++; + return 1; +} + +/* + * share_page() tries to find a process that could share a page with + * the current one. Address is the address of the wanted page relative + * to the current data space. + * + * We first check if it is at all feasible by checking executable->i_count. + * It should be >1 if there are other tasks sharing this inode. + */ +static int share_page(unsigned long address) +{ + struct task_struct ** p; + + if (!current->executable) + return 0; + if (current->executable->i_count < 2) + return 0; + for (p = &LAST_TASK ; p > &FIRST_TASK ; --p) { + if (!*p) + continue; + if (current == *p) + continue; + if ((*p)->executable != current->executable) + continue; + if (try_to_share(address,*p)) + return 1; + } + return 0; +} + +void do_no_page(unsigned long error_code,unsigned long address) +{ + int nr[4]; + unsigned long tmp; + unsigned long page; + int block,i; + address &= 0xfffff000; + tmp = address - current->start_code; + if (!current->executable || tmp >= current->end_data) { + get_empty_page(address); + return; + } + if (share_page(tmp)) + return; + if (!(page = get_free_page())) + oom(); +/* remember that 1 block is used for header */ + block = 1 + tmp/BLOCK_SIZE; + for (i=0 ; i<4 ; block++,i++) + nr[i] = bmap(current->executable,block); + bread_page(page,current->executable->i_dev,nr); + i = tmp + 4096 - current->end_data; + tmp = page + 4096; + while (i-- > 0) { + tmp--; + *(char *)tmp = 0; + } + if (put_page(page,address)) + return; + free_page(page); + oom(); +} + +void do_no_page2(unsigned long error_code,unsigned long address) +{ + int nr[4]; + unsigned long tmp; + unsigned long page; + int block,i; + address &= 0xfffff000; + tmp = address - current->start_code; + if (!current->executable || tmp >= current->end_data) { + get_empty_page(address); + return; + } + if (share_page(tmp)) + return; + if (!(page = get_free_page())) + oom(); +/* remember that 1 block is used for header */ + block = 1 + tmp/BLOCK_SIZE; + for (i=0 ; i<4 ; block++,i++) + nr[i] = bmap(current->executable,block); + bread_page(page,current->executable->i_dev,nr); + i = tmp + 4096 - current->end_data; + tmp = page + 4096; + while (i-- > 0) { + tmp--; + *(char *)tmp = 0; + } + if (put_page(page,address)) + return; + free_page(page); + oom(); +} + +void mem_init(long start_mem, long end_mem) +{ + int i; + + HIGH_MEMORY = end_mem; + for (i=0 ; i>= 12; + while (end_mem-->0) + mem_map[i++]=0; +} + +void calc_mem(void) +{ + int i,j,k,free=0; + long * pg_tbl; + + for(i=0 ; i + +#include + +#include +#include +#include + +volatile void do_exit(long code); + +static inline volatile void oom(void) +{ + printk("out of memory\n\r"); + do_exit(SIGSEGV); +} + +#define invalidate() \ +__asm__("movl %%eax,%%cr3"::"a" (0)) + +/* these are not to be changed without changing head.s etc */ +#define LOW_MEM 0x100000 +#define PAGING_MEMORY (15*1024*1024) +#define PAGING_PAGES (PAGING_MEMORY>>12) +#define MAP_NR(addr) (((addr)-LOW_MEM)>>12) +#define USED 100 + +#define CODE_SPACE(addr) ((((addr)+4095)&~4095) < \ +current->start_code + current->end_code) + +static long HIGH_MEMORY = 0; + +#define copy_page(from,to) \ +__asm__("cld ; rep ; movsl"::"S" (from),"D" (to),"c" (1024)) + +static unsigned char mem_map [ PAGING_PAGES ] = {0,}; + +/* + * Get physical address of first (actually last :-) free page, and mark it + * used. If no free pages left, return 0. + */ +unsigned long get_free_page(void) +{ +register unsigned long __res asm("ax"); + +__asm__("std ; repne ; scasb\n\t" + "jne 1f\n\t" + "movb $1,1(%%edi)\n\t" + "sall $12,%%ecx\n\t" + "addl %2,%%ecx\n\t" + "movl %%ecx,%%edx\n\t" + "movl $1024,%%ecx\n\t" + "leal 4092(%%edx),%%edi\n\t" + "rep ; stosl\n\t" + "movl %%edx,%%eax\n\t" + "1:" + "cld\n\t" /* by wyj */ + :"=a" (__res) + :"0" (0),"i" (LOW_MEM),"c" (PAGING_PAGES), + "D" (mem_map+PAGING_PAGES-1) + ); +return __res; +} + +/* + * Free a page of memory at physical address 'addr'. Used by + * 'free_page_tables()' + */ +void free_page(unsigned long addr) +{ + if (addr < LOW_MEM) return; + if (addr >= HIGH_MEMORY) + panic("trying to free nonexistent page"); + addr -= LOW_MEM; + addr >>= 12; + if (mem_map[addr]--) return; + mem_map[addr]=0; + panic("trying to free free page"); +} + +/* + * This function frees a continuos block of page tables, as needed + * by 'exit()'. As does copy_page_tables(), this handles only 4Mb blocks. + */ +int free_page_tables(unsigned long from,unsigned long size) +{ + unsigned long *pg_table; + unsigned long * dir, nr; + + if (from & 0x3fffff) + panic("free_page_tables called with wrong alignment"); + if (!from) + panic("Trying to free up swapper memory space"); + size = (size + 0x3fffff) >> 22; + dir = (unsigned long *) ((from>>20) & 0xffc); /* _pg_dir = 0 */ + for ( ; size-->0 ; dir++) { + if (!(1 & *dir)) + continue; + pg_table = (unsigned long *) (0xfffff000 & *dir); + for (nr=0 ; nr<1024 ; nr++) { + if (1 & *pg_table) + free_page(0xfffff000 & *pg_table); + *pg_table = 0; + pg_table++; + } + free_page(0xfffff000 & *dir); + *dir = 0; + } + invalidate(); + return 0; +} + +/* + * Well, here is one of the most complicated functions in mm. It + * copies a range of linerar addresses by copying only the pages. + * Let's hope this is bug-free, 'cause this one I don't want to debug :-) + * + * Note! We don't copy just any chunks of memory - addresses have to + * be divisible by 4Mb (one page-directory entry), as this makes the + * function easier. It's used only by fork anyway. + * + * NOTE 2!! When from==0 we are copying kernel space for the first + * fork(). Then we DONT want to copy a full page-directory entry, as + * that would lead to some serious memory waste - we just copy the + * first 160 pages - 640kB. Even that is more than we need, but it + * doesn't take any more memory - we don't copy-on-write in the low + * 1 Mb-range, so the pages can be shared with the kernel. Thus the + * special case for nr=xxxx. + */ +int copy_page_tables(unsigned long from,unsigned long to,long size) +{ + unsigned long * from_page_table; + unsigned long * to_page_table; + unsigned long this_page; + unsigned long * from_dir, * to_dir; + unsigned long nr; + + if ((from&0x3fffff) || (to&0x3fffff)) + panic("copy_page_tables called with wrong alignment"); + from_dir = (unsigned long *) ((from>>20) & 0xffc); /* _pg_dir = 0 */ + to_dir = (unsigned long *) ((to>>20) & 0xffc); + size = ((unsigned) (size+0x3fffff)) >> 22; + for( ; size-->0 ; from_dir++,to_dir++) { + if (1 & *to_dir) + panic("copy_page_tables: already exist"); + if (!(1 & *from_dir)) + continue; + from_page_table = (unsigned long *) (0xfffff000 & *from_dir); + if (!(to_page_table = (unsigned long *) get_free_page())) + return -1; /* Out of memory, see freeing */ + *to_dir = ((unsigned long) to_page_table) | 7; + nr = (from==0)?0xA0:1024; + for ( ; nr-- > 0 ; from_page_table++,to_page_table++) { + this_page = *from_page_table; + if (!(1 & this_page)) + continue; + this_page &= ~2; + *to_page_table = this_page; + if (this_page > LOW_MEM) { + *from_page_table = this_page; + this_page -= LOW_MEM; + this_page >>= 12; + mem_map[this_page]++; + } + } + } + invalidate(); + return 0; +} + +/* + * This function puts a page in memory at the wanted address. + * It returns the physical address of the page gotten, 0 if + * out of memory (either when trying to access page-table or + * page.) + */ +unsigned long put_page(unsigned long page,unsigned long address) +{ + unsigned long tmp, *page_table; + +/* NOTE !!! This uses the fact that _pg_dir=0 */ + + if (page < LOW_MEM || page >= HIGH_MEMORY) + printk("Trying to put page %p at %p\n",page,address); + if (mem_map[(page-LOW_MEM)>>12] != 1) + printk("mem_map disagrees with %p at %p\n",page,address); + page_table = (unsigned long *) ((address>>20) & 0xffc); + if ((*page_table)&1) + page_table = (unsigned long *) (0xfffff000 & *page_table); + else { + if (!(tmp=get_free_page())) + return 0; + *page_table = tmp|7; + page_table = (unsigned long *) tmp; + } + page_table[(address>>12) & 0x3ff] = page | 7; +/* no need for invalidate */ + return page; +} + +void un_wp_page(unsigned long * table_entry) +{ + unsigned long old_page,new_page; + + old_page = 0xfffff000 & *table_entry; + if (old_page >= LOW_MEM && mem_map[MAP_NR(old_page)]==1) { + *table_entry |= 2; + invalidate(); + return; + } + if (!(new_page=get_free_page())) + oom(); + if (old_page >= LOW_MEM) + mem_map[MAP_NR(old_page)]--; + *table_entry = new_page | 7; + invalidate(); + copy_page(old_page,new_page); +} + +/* + * This routine handles present pages, when users try to write + * to a shared page. It is done by copying the page to a new address + * and decrementing the shared-page counter for the old page. + * + * If it's in code space we exit with a segment error. + */ +void do_wp_page(unsigned long error_code,unsigned long address) +{ +#if 0 +/* we cannot do this yet: the estdio library writes to code space */ +/* stupid, stupid. I really want the libc.a from GNU */ + if (CODE_SPACE(address)) + do_exit(SIGSEGV); +#endif + un_wp_page((unsigned long *) + (((address>>10) & 0xffc) + (0xfffff000 & + *((unsigned long *) ((address>>20) &0xffc))))); + +} + +void write_verify(unsigned long address) +{ + unsigned long page; + + if (!( (page = *((unsigned long *) ((address>>20) & 0xffc)) )&1)) + return; + page &= 0xfffff000; + page += ((address>>10) & 0xffc); + if ((3 & *(unsigned long *) page) == 1) /* non-writeable, present */ + un_wp_page((unsigned long *) page); + return; +} + +void get_empty_page(unsigned long address) +{ + unsigned long tmp; + + if (!(tmp=get_free_page()) || !put_page(tmp,address)) { + free_page(tmp); /* 0 is ok - ignored */ + oom(); + } +} + +/* + * try_to_share() checks the page at address "address" in the task "p", + * to see if it exists, and if it is clean. If so, share it with the current + * task. + * + * NOTE! This assumes we have checked that p != current, and that they + * share the same executable. + */ +static int try_to_share(unsigned long address, struct task_struct * p) +{ + unsigned long from; + unsigned long to; + unsigned long from_page; + unsigned long to_page; + unsigned long phys_addr; + + from_page = to_page = ((address>>20) & 0xffc); + from_page += ((p->start_code>>20) & 0xffc); + to_page += ((current->start_code>>20) & 0xffc); +/* is there a page-directory at from? */ + from = *(unsigned long *) from_page; + if (!(from & 1)) + return 0; + from &= 0xfffff000; + from_page = from + ((address>>10) & 0xffc); + phys_addr = *(unsigned long *) from_page; +/* is the page clean and present? */ + if ((phys_addr & 0x41) != 0x01) + return 0; + phys_addr &= 0xfffff000; + if (phys_addr >= HIGH_MEMORY || phys_addr < LOW_MEM) + return 0; + to = *(unsigned long *) to_page; + if (!(to & 1)) + if (to = get_free_page()) + *(unsigned long *) to_page = to | 7; + else + oom(); + to &= 0xfffff000; + to_page = to + ((address>>10) & 0xffc); + if (1 & *(unsigned long *) to_page) + panic("try_to_share: to_page already exists"); +/* share them: write-protect */ + *(unsigned long *) from_page &= ~2; + *(unsigned long *) to_page = *(unsigned long *) from_page; + invalidate(); + phys_addr -= LOW_MEM; + phys_addr >>= 12; + mem_map[phys_addr]++; + return 1; +} + +/* + * share_page() tries to find a process that could share a page with + * the current one. Address is the address of the wanted page relative + * to the current data space. + * + * We first check if it is at all feasible by checking executable->i_count. + * It should be >1 if there are other tasks sharing this inode. + */ +static int share_page(unsigned long address) +{ + struct task_struct ** p; + + if (!current->executable) + return 0; + if (current->executable->i_count < 2) + return 0; + for (p = &LAST_TASK ; p > &FIRST_TASK ; --p) { + if (!*p) + continue; + if (current == *p) + continue; + if ((*p)->executable != current->executable) + continue; + if (try_to_share(address,*p)) + return 1; + } + return 0; +} + +void do_no_page(unsigned long error_code,unsigned long address) +{ + int nr[4]; + unsigned long tmp; + unsigned long page; + int block,i; + printk("Page fault\n"); + address &= 0xfffff000; + tmp = address - current->start_code; + if (!current->executable || tmp >= current->end_data) { + get_empty_page(address); + return; + } + if (share_page(tmp)) + return; + if (!(page = get_free_page())) + oom(); +/* remember that 1 block is used for header */ + block = 1 + tmp/BLOCK_SIZE; + for (i=0 ; i<4 ; block++,i++) + nr[i] = bmap(current->executable,block); + bread_page(page,current->executable->i_dev,nr); + i = tmp + 4096 - current->end_data; + tmp = page + 4096; + while (i-- > 0) { + tmp--; + *(char *)tmp = 0; + } + if (put_page(page,address)) + return; + free_page(page); + oom(); +} + +void mem_init(long start_mem, long end_mem) +{ + int i; + + HIGH_MEMORY = end_mem; + for (i=0 ; i>= 12; + while (end_mem-->0) + mem_map[i++]=0; +} + +void calc_mem(void) +{ + int i,j,k,free=0; + long * pg_tbl; + + for(i=0 ; ipid > 5) ++ printk(" --do_no_page: address=%x, pid=%d\n", address, current->pid); ++ + address &= 0xfffff000; + tmp = address - current->start_code; + if (!current->executable || tmp >= current->end_data) { diff --git a/linux/mm/memory.o b/linux/mm/memory.o new file mode 100644 index 0000000000000000000000000000000000000000..50868469262bbee0a6087e35c34d16a6519cfb70 GIT binary patch literal 13676 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 I2HocT4~a3Mv;Y7A literal 0 HcmV?d00001 diff --git a/linux/tools/build.c b/linux/tools/build.c new file mode 100644 index 0000000..8b8c7ab --- /dev/null +++ b/linux/tools/build.c @@ -0,0 +1,171 @@ +/* + * linux/tools/build.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This file builds a disk-image from three different files: + * + * - bootsect: max 510 bytes of 8086 machine code, loads the rest + * - setup: max 4 sectors of 8086 machine code, sets up system parm + * - system: 80386 code for actual system + * + * It does some checking that all files are of the correct type, and + * just writes the result to stdout, removing headers and padding to + * the right amount. It also writes some system data to stderr. + */ + +/* + * Changes by tytso to allow root device specification + */ + +#include /* fprintf */ +#include +#include /* contains exit */ +#include /* unistd.h needs this */ +#include +#include +#include /* contains read/write */ +#include + +#define MAJOR(a) (((unsigned)(a))>>8) +#define MINOR(a) ((a)&0xff) + +#define MINIX_HEADER 32 +#define GCC_HEADER 0x80 /* 0x1000 */ /* by wyj */ + +#define SYS_SIZE 0x3000 + +#define DEFAULT_MAJOR_ROOT 0x03 //0x02 /* by wyj */ +#define DEFAULT_MINOR_ROOT 0x00 //0x1d + +/* max nr of sectors of setup: don't change unless you also change + * bootsect etc */ +#define SETUP_SECTS 4 + +#define STRINGIFY(x) #x + +void die(char * str) +{ + fprintf(stderr,"%s\n",str); + exit(1); +} + +void usage(void) +{ + die("Usage: build bootsect setup system [rootdev] [> image]"); +} + +int main(int argc, char ** argv) +{ + int i,c,id; + char buf[1024*4]; /* by wyj */ + char major_root, minor_root; + struct stat sb; + + if ((argc != 4) && (argc != 5)) + usage(); + if (argc == 5) { + if (strcmp(argv[4], "FLOPPY")) { + if (stat(argv[4], &sb)) { + perror(argv[4]); + die("Couldn't stat root device."); + } + major_root = MAJOR(sb.st_rdev); + minor_root = MINOR(sb.st_rdev); + } else { + major_root = 0; + minor_root = 0; + } + } else { + major_root = DEFAULT_MAJOR_ROOT; + minor_root = DEFAULT_MINOR_ROOT; + } + fprintf(stderr, "Root device is (%d, %d)\n", major_root, minor_root); + if ((major_root != 2) && (major_root != 3) && + (major_root != 0)) { + fprintf(stderr, "Illegal root device (major = %d)\n", + major_root); + die("Bad root device --- major #"); + } + for (i=0;i0 ; i+=c ) + if (write(1,buf,c)!=c) + die("Write call failed"); + close (id); + if (i > SETUP_SECTS*512) + die("Setup exceeds " STRINGIFY(SETUP_SECTS) + " sectors - rewrite build/boot/setup"); + fprintf(stderr,"Setup is %d bytes.\n",i); + for (c=0 ; c sizeof(buf)) + c = sizeof(buf); + if (write(1,buf,c) != c) + die("Write call failed"); + i += c; + } + + if ((id=open(argv[3],O_RDONLY,0))<0) + die("Unable to open 'system'"); + if (read(id,buf,GCC_HEADER) != GCC_HEADER) + die("Unable to read header of 'system'"); +// if (((long *) buf)[5] != 0) +// die("Non-GCC header of 'system'"); + for (i=0 ; (c=read(id,buf,sizeof buf))>0 ; i+=c ) + if (write(1,buf,c)!=c) + die("Write call failed"); + close(id); + fprintf(stderr,"System is %d bytes.\n",i); + if (i > SYS_SIZE*16) + die("System is too big"); + return(0); +} diff --git a/linux/tools/system b/linux/tools/system new file mode 100644 index 0000000000000000000000000000000000000000..9cef2d07fe13dd362faff222427ddb147668ffd3 GIT binary patch literal 294939 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