From abdfaeae89b6f4809fcaa511e4e00fa27c9bda3c Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Mon, 30 Nov 2020 10:29:17 +0800 Subject: [PATCH 01/34] Release mode app worked on ch3. --- os/build.rs | 2 +- user/Makefile | 2 +- user/build.py | 2 +- user/src/bin/00power_3.rs | 2 +- user/src/bin/01power_5.rs | 2 +- user/src/bin/02power_7.rs | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/os/build.rs b/os/build.rs index 4a99605..eb553e5 100644 --- a/os/build.rs +++ b/os/build.rs @@ -6,7 +6,7 @@ fn main() { insert_app_data().unwrap(); } -static TARGET_PATH: &str = "../user/target/riscv64gc-unknown-none-elf/debug/"; +static TARGET_PATH: &str = "../user/target/riscv64gc-unknown-none-elf/release/"; fn insert_app_data() -> Result<()> { let mut f = File::create("src/link_app.S").unwrap(); diff --git a/user/Makefile b/user/Makefile index eabb4b2..5ca334e 100644 --- a/user/Makefile +++ b/user/Makefile @@ -1,5 +1,5 @@ TARGET := riscv64gc-unknown-none-elf -MODE := debug +MODE := release APP_DIR := src/bin TARGET_DIR := target/$(TARGET)/$(MODE) APPS := $(wildcard $(APP_DIR)/*.rs) diff --git a/user/build.py b/user/build.py index 1a22088..b558177 100644 --- a/user/build.py +++ b/user/build.py @@ -18,7 +18,7 @@ for app in apps: lines.append(line) with open(linker, 'w+') as f: f.writelines(lines) - os.system('cargo build --bin %s' % app) + os.system('cargo build --bin %s --release' % app) print('[build.py] application %s start with address %s' %(app, hex(base_address+step*app_id))) with open(linker, 'w+') as f: f.writelines(lines_before) diff --git a/user/src/bin/00power_3.rs b/user/src/bin/00power_3.rs index a4b62ab..064b4e0 100644 --- a/user/src/bin/00power_3.rs +++ b/user/src/bin/00power_3.rs @@ -10,7 +10,7 @@ const LEN: usize = 100; fn main() -> i32 { let p = 3u64; let m = 998244353u64; - let iter: usize = 100000; + let iter: usize = 200000; let mut s = [0u64; LEN]; let mut cur = 0usize; s[cur] = 1; diff --git a/user/src/bin/01power_5.rs b/user/src/bin/01power_5.rs index dfd2752..157af29 100644 --- a/user/src/bin/01power_5.rs +++ b/user/src/bin/01power_5.rs @@ -10,7 +10,7 @@ const LEN: usize = 100; fn main() -> i32 { let p = 5u64; let m = 998244353u64; - let iter: usize = 70000; + let iter: usize = 140000; let mut s = [0u64; LEN]; let mut cur = 0usize; s[cur] = 1; diff --git a/user/src/bin/02power_7.rs b/user/src/bin/02power_7.rs index 5cf1369..a5c72db 100644 --- a/user/src/bin/02power_7.rs +++ b/user/src/bin/02power_7.rs @@ -10,7 +10,7 @@ const LEN: usize = 100; fn main() -> i32 { let p = 7u64; let m = 998244353u64; - let iter: usize = 80000; + let iter: usize = 160000; let mut s = [0u64; LEN]; let mut cur = 0usize; s[cur] = 1; From 5985986249a3d39a9e935acec40aef3fd089b962 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Tue, 29 Dec 2020 16:46:58 +0800 Subject: [PATCH 02/34] Update rustsbi-qemu.bin. --- bootloader/rustsbi-qemu.bin | Bin 65480 -> 65704 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bootloader/rustsbi-qemu.bin b/bootloader/rustsbi-qemu.bin index 54329fcb74075cefde4a4d8d134481f59876b7ac..1fdc888b52d296427af28f3933d9881160b4b000 100755 GIT binary patch delta 3182 zcmcIleNaV4?)3TkpMOU-9er0ptQ9Mr~!gBfDje8YXdZa zLS2!gM6K1ZD=bo_+PB-)8Li?<_>f)cj%Bz0vsfV@MTJOcw?lRB%Y6vtf8R{*J-_oi zANQQ|?o0PGm(~i``lARPZj3_i7p>)Ph+>k2ufBx*V5d(W5;J{1(QfD*^E6=C6}<~X z!QZ2GO#iE09_UNv*oxzBZr@Opm~X5Gg<>_4o2y`tB7(>o1JkC+T7mjNq)n%Lq$X@E z5Zr=nZ5C}M$kYSf+I6!?-NU?Gun5tY38}uygzq};5^5x{r3U!@F6JbP8ZlhIL{U;B zo4m7zu+}_G1~+um7PAIN zFb+qyBBIM)OHm?yo6VfdMz;Nm5mh(yXjdtQVu48rmp;)JLv$_J`z~_!IPElO7de+bQHgln_ z*@f;UrY(2iw}+DHe{pH=K|#PSN`(Xb2Aes;rUnEd{1>QK5AR4|*VD1&D zJ!2O&w-YG845sF_^p~9NWu~urm`8x=!%Drj#DbuWk+lB(I>35uD)woW8HdRQel znw>2i^uaAm#iUzm9$YymLwPW8u2h`!dyDL!9(rNPk@w6hHmNEbww+IxWwZ|s7=L3T zmnHB{yo0bum2l&H=%TH(y0Y=3R-$ukfgjJWL<$IRPZw{@u`K>YJjq7*xP4P-O513- z*9If6(et5IBiGDkbEw%!5(|m+jT(5L7s-@-wegM0M)XjaJ^y6-M5gxhR}e~I+Af43 z6vp&lR3hXLUQ846X1-vgB2)^!SEG?0X09r+obVO9zW>z+vJy#}thFL7Y&>P+ezou^ zN;9v}36VLC_3||Vugeuqb}WZCZ^+&7 zY`~1rJiDL(s8xQ(L`yj<%b&1Stn(7wCA>fZ zKmNTGJ%PfT{%8VfZkD1kn8ET0_;&6<-@*HxGW1_)?9`yUFoWfPgOByE=pWE$^+&xh zYK=xcj9*tda&soP9fT9zucPzKK=%g-?S?JAA(BXmy0Y3!Bg|Q%tE@I-GccK2puV>b zg}{g6wd{}q3&>`FV?ewR!3XRAuOZPG6Q{OzM1(&?`fh+^R>F|MZ5Gx zd!r(E>r2b@#ZhHNMTI-^bF{kBD4jMhzpSu4VxJ-|D{fVUUbjnEv{x5VsMYEBMda!9 zQH9#=QLG!gm+s!-lp*M`oL)an8StM2RSr$VN>mQ_hBx6g+Lnsf$?;9|_^)kSv99T1 zDin_hW#z0Behf541>k)y&fyX1bM_==m;8e57>VLhqhKE~zqq>oHX0Plo{gd|jgsp2 z6G+7iC<=cQ=JfEt(M|FB4~UgFXSJWhVh$hVu!O_Uqe8`lt$qPx#M_r+*?Mu=RKOV6 zAEUrqiaOyl1ZBx!e?7-*zzP8Or zc<}SM$%lJU6KEeP@p|^rh8I~%2wnMjwiNcbbLjZvloy-0VPbybIaDzr<&{jriHSt- z;z?q{4WD8rVQeCCgR7mW5vS*K*oDJuxP77fvITz2?67;%rP0@m&3Exvt`brFk3|vN0+0)SAh~yPd!VO1a^1^5rxM*@N`hUJ9*@PS(;COtwolh~8Oa?a02thl& z$Zy3D#29~4osS5w>=j+{1Jf{V;>X;cAv`{X^Z7MiS$Uy;E7q~)+@4`J%p7p}Kcw;S A&j0`b delta 2966 zcmbVNeN>az8GmmeA#W-zkYWIl1stIwUkUP&RzAcgKwApM16Io>0RxA2b1Pp}S2bW0 zEbdI~qXb*4(FzA?rF3`OakG3`i3pqx&pJ$9=5eBU&9g`bJ60AVH{7>U>4MJTh1EmOXd4U$ z+(wDGf6bK@s0G(W9CvZ)Vi>8=xEo?)W9YuV49a6e>0V!qn_{;|psOG$N@J}u6Hyk4 zx*@k{JNpeqCM$FoZCXTHD}Mg%=MeiRN^1XtL*6;=6jVuJgAs)NPUb|088&oWU>KQ^ z3*KdhRg}R>a;nlTctPn8$DL zS}Q?0aJ2Fi%7XO=4xlu+aG(lxLgEKqC=QE^e?w70jpz^Ft|>{Tq$;zVb8hHnEoMFO zU>tg(5m8xg9K%S;nr!9*&a=%AORDMx?1GFysmLUN3m+D-k0`P|gy8C*vGWv(9zadC zXCTih=7%)Y;lO>;C=x^})Fa+*0eY$nkqA_Wwg%p#GV1~e4MIMJF^1u*E#vHrui=(M z^-k<%s@l*CKR>*Yy~>B}g~r2K?4K!8bb_cRjcw(fwnI+McJ?Ag+BUdcvuP2D+Q99| z4BNtMV!Yy`cMyA$LeUv8fG2x~B1Jtu32PDi0fnY2+<%l@igZ~v*ArW&<5IXe8tO-C z&Ej$vZl6d}K(P;?XAPA9Ov6q&B!H&6c{U>hm4w!q70H%Ro&ylD$mpPiNj zenz3D%E$V7N$9?rf0-2Vp%(PE6DAcM(1Y;D7_Cj~#doCKTzWUvuJ*VXMU<}*? z`_AcH95xN5U^|ye_ljbOZrX_QU{_N(wF)eQ=BA)$a#Vx7$2>gH)P-bKM>Gnf+0nv* zm86BqB!o-yR`~i0Z?qMze^Dacyw~FW*A->rcaQ$k>zG)=H?G>Y- z*7c56uh1_>v&V9tJT27IKVm`f<*&SzLap)T%35?soVz@;vIt!LIgv zuM!Y)1vh*eIpg1BnFQ&fr&Wmx;bCh6*>7m$=J(t7d*^$mcsEw01dk<6{!k@eKq=-J z(%`COFL=Iv6Uv1*+tprDC~Zy=+Ur2ZhKtJ!o221UfMCZC>1e~(HFFOeW*6tC@=>P z1`H@h%%m(Zc16+-CeOpsz9`omR;#p_135J?U8R#KWDUZ7XUsv?zYoi0MB zi^|I@$XCUvqhi!bT})JDY@|x1R^{zb<>}y`6LL0nh%t~aK9dgDh7wRZxZBdntg|JP zx#CXxG9C?YAu{E7GFXPi-szkX83vYNR+DwfPv@}gF?)irzCU88hQkH@!w@iHe%fr^ zNB#W|j?io~xX@&%MGQk8F7sFpTSwE?;!&#Q;m~0iA0A729Li%)9xqvcKf1-Im1n(p zmdl@%!L*J-<}Iy&EFa&B=a!qdqPfN6wiW5%#_iOnEr@G>=k2BT$1Fqcw&Z0Uy zxMNweL&M7vIi6))#rS*V3jSw2fz0ZOSDrq>z-Jg{dVDcOE{!Gh#$?j}=kVsla)-;% zluU4B6822Rd(=!)75)gAzfVHXRD9}Br>Ge5@<1Lt@%Tl4ebPMT3A+^Vzbl7#rwctS zJR|2V2d3cGbi7Z;6Jiyi{mHLm3X*2Dg6e5pJrj+5I%a4-t9a`yXNGa-)Mnu3te?Oz z1@~uP_lTIKT8q~)X%@EG{RCv$V~_S| Date: Tue, 29 Dec 2020 21:49:51 +0800 Subject: [PATCH 03/34] Update sys_time unit to ms && Update clock freq of K210. --- os/src/config.rs | 4 ++-- os/src/syscall/process.rs | 4 ++-- os/src/timer.rs | 11 ++++++++--- user/src/bin/03sleep.rs | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/os/src/config.rs b/os/src/config.rs index 07c3024..20aba22 100644 --- a/os/src/config.rs +++ b/os/src/config.rs @@ -5,7 +5,7 @@ pub const APP_BASE_ADDRESS: usize = 0x80100000; pub const APP_SIZE_LIMIT: usize = 0x20000; #[cfg(feature = "board_k210")] -pub const CPU_FREQ: usize = 10000000; +pub const CLOCK_FREQ: usize = 403000000 / 62; #[cfg(feature = "board_qemu")] -pub const CPU_FREQ: usize = 12500000; \ No newline at end of file +pub const CLOCK_FREQ: usize = 12500000; \ No newline at end of file diff --git a/os/src/syscall/process.rs b/os/src/syscall/process.rs index e0bdeba..93efe8c 100644 --- a/os/src/syscall/process.rs +++ b/os/src/syscall/process.rs @@ -2,7 +2,7 @@ use crate::task::{ suspend_current_and_run_next, exit_current_and_run_next, }; -use crate::timer::get_time; +use crate::timer::get_time_ms; pub fn sys_exit(xstate: i32) -> ! { println!("[kernel] Application exited with code {}", xstate); @@ -16,5 +16,5 @@ pub fn sys_yield() -> isize { } pub fn sys_get_time() -> isize { - get_time() as isize + get_time_ms() as isize } \ No newline at end of file diff --git a/os/src/timer.rs b/os/src/timer.rs index 7522e70..ad226e6 100644 --- a/os/src/timer.rs +++ b/os/src/timer.rs @@ -1,13 +1,18 @@ use riscv::register::time; use crate::sbi::set_timer; -use crate::config::CPU_FREQ; +use crate::config::CLOCK_FREQ; const TICKS_PER_SEC: usize = 100; +const MSEC_PER_SEC: usize = 1000; pub fn get_time() -> usize { time::read() } +pub fn get_time_ms() -> usize { + time::read() / (CLOCK_FREQ / MSEC_PER_SEC) +} + pub fn set_next_trigger() { - set_timer(get_time() + CPU_FREQ / TICKS_PER_SEC); -} \ No newline at end of file + set_timer(get_time() + CLOCK_FREQ / TICKS_PER_SEC); +} diff --git a/user/src/bin/03sleep.rs b/user/src/bin/03sleep.rs index f3d9f31..ada77e9 100644 --- a/user/src/bin/03sleep.rs +++ b/user/src/bin/03sleep.rs @@ -9,7 +9,7 @@ use user_lib::{sys_get_time, sys_yield}; #[no_mangle] fn main() -> i32 { let current_timer = sys_get_time(); - let wait_for = current_timer + 10000000; + let wait_for = current_timer + 3000; while sys_get_time() < wait_for { sys_yield(); } From b4ade2c68eb1f92c0364018b2e0cbd5f63d91b35 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sat, 2 Jan 2021 10:02:36 +0800 Subject: [PATCH 04/34] Add env --- os/Makefile | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/os/Makefile b/os/Makefile index 1d13cce..38b3c40 100644 --- a/os/Makefile +++ b/os/Makefile @@ -22,7 +22,13 @@ OBJCOPY := rust-objcopy --binary-architecture=riscv64 # Disassembly DISASM ?= -x -build: $(KERNEL_BIN) +build: env $(KERNEL_BIN) + +env: + rustup component add rust-src + rustup component add llvm-tools-preview + cargo install cargo-binutils + rustup target add riscv64gc-unknown-none-elf $(KERNEL_BIN): kernel @$(OBJCOPY) $(KERNEL_ELF) --strip-all -O binary $@ @@ -66,4 +72,4 @@ debug: build tmux split-window -h "riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234'" && \ tmux -2 attach-session -d -.PHONY: build kernel clean disasm disasm-vim run-inner +.PHONY: build env kernel clean disasm disasm-vim run-inner From 1d4041a418f15c272d8ae9b153e959765fba6c40 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sat, 2 Jan 2021 10:17:52 +0800 Subject: [PATCH 05/34] Update format of link_user.S --- os/build.rs | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/os/build.rs b/os/build.rs index eb553e5..88a964b 100644 --- a/os/build.rs +++ b/os/build.rs @@ -2,7 +2,8 @@ use std::io::{Result, Write}; use std::fs::{File, read_dir}; fn main() { - println!("cargo:rerun-if-changed=../user/src/bin/"); + println!("cargo:rerun-if-changed=../user/src/"); + println!("cargo:rerun-if-changed={}", TARGET_PATH); insert_app_data().unwrap(); } @@ -26,17 +27,12 @@ fn insert_app_data() -> Result<()> { .section .data .global _num_app _num_app: - .quad {} - "#, apps.len())?; + .quad {}"#, apps.len())?; for i in 0..apps.len() { - writeln!(f, r#" - .quad app_{}_start - "#, i)?; + writeln!(f, r#" .quad app_{}_start"#, i)?; } - writeln!(f, r#" - .quad app_{}_end - "#, apps.len() - 1)?; + writeln!(f, r#" .quad app_{}_end"#, apps.len() - 1)?; for (idx, app) in apps.iter().enumerate() { println!("app_{}: {}", idx, app); @@ -46,8 +42,7 @@ _num_app: .global app_{0}_end app_{0}_start: .incbin "{2}{1}.bin" -app_{0}_end: - "#, idx, app, TARGET_PATH)?; +app_{0}_end:"#, idx, app, TARGET_PATH)?; } Ok(()) } \ No newline at end of file From 1ea79921bda44ef868f17d688e9497a2c9756d89 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 3 Jan 2021 15:34:44 +0800 Subject: [PATCH 06/34] Remove meaningless sstatus::set_sie() when initializing. --- os/src/main.rs | 1 - os/src/trap/mod.rs | 5 ----- 2 files changed, 6 deletions(-) diff --git a/os/src/main.rs b/os/src/main.rs index 6485573..c4ab3b5 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -35,7 +35,6 @@ pub fn rust_main() -> ! { println!("[kernel] Hello, world!"); trap::init(); loader::load_apps(); - trap::enable_interrupt(); trap::enable_timer_interrupt(); timer::set_next_trigger(); task::run_first_task(); diff --git a/os/src/trap/mod.rs b/os/src/trap/mod.rs index 650b6ca..7718d77 100644 --- a/os/src/trap/mod.rs +++ b/os/src/trap/mod.rs @@ -10,7 +10,6 @@ use riscv::register::{ Interrupt, }, stval, - sstatus, sie, }; use crate::syscall::syscall; @@ -29,10 +28,6 @@ pub fn init() { } } -pub fn enable_interrupt() { - unsafe { sstatus::set_sie(); } -} - pub fn enable_timer_interrupt() { unsafe { sie::set_stimer(); } } From 923abbbc964da5a2ac5ce666942bd6789b623ab7 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Mon, 4 Jan 2021 16:03:07 +0800 Subject: [PATCH 07/34] Move some variable name to task_cx to task_cx_ptr2 --- os/src/task/mod.rs | 12 ++++++------ os/src/task/switch.S | 5 ++++- os/src/task/switch.rs | 5 ++++- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index f1d0afa..8d739ca 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -47,11 +47,11 @@ lazy_static! { impl TaskManager { fn run_first_task(&self) { self.inner.borrow_mut().tasks[0].task_status = TaskStatus::Running; - let next_task_cx = self.inner.borrow().tasks[0].get_task_cx_ptr2(); + let next_task_cx_ptr2 = self.inner.borrow().tasks[0].get_task_cx_ptr2(); unsafe { __switch( &0usize as *const _, - next_task_cx, + next_task_cx_ptr2, ); } } @@ -84,13 +84,13 @@ impl TaskManager { let current = inner.current_task; inner.tasks[next].task_status = TaskStatus::Running; inner.current_task = next; - let current_task_cx = inner.tasks[current].get_task_cx_ptr2(); - let next_task_cx = inner.tasks[next].get_task_cx_ptr2(); + let current_task_cx_ptr2 = inner.tasks[current].get_task_cx_ptr2(); + let next_task_cx_ptr2 = inner.tasks[next].get_task_cx_ptr2(); core::mem::drop(inner); unsafe { __switch( - current_task_cx, - next_task_cx, + current_task_cx_ptr2, + next_task_cx_ptr2, ); } } else { diff --git a/os/src/task/switch.S b/os/src/task/switch.S index df668f3..262511f 100644 --- a/os/src/task/switch.S +++ b/os/src/task/switch.S @@ -8,7 +8,10 @@ .section .text .globl __switch __switch: - # __switch(current_task_cx: &*const TaskContext, next_task_cx: &*const TaskContext) + # __switch( + # current_task_cx_ptr2: &*const TaskContext, + # next_task_cx_ptr2: &*const TaskContext + # ) # push TaskContext to current sp and save its address to where a0 points to addi sp, sp, -13*8 sd sp, 0(a0) diff --git a/os/src/task/switch.rs b/os/src/task/switch.rs index c5fe5f4..867fcb1 100644 --- a/os/src/task/switch.rs +++ b/os/src/task/switch.rs @@ -1,5 +1,8 @@ global_asm!(include_str!("switch.S")); extern "C" { - pub fn __switch(current_task_cx: *const usize, next_task_cx: *const usize); + pub fn __switch( + current_task_cx_ptr2: *const usize, + next_task_cx_ptr2: *const usize + ); } From 15ea8d934a6b754bf2745f3b2ffed84ae95d5f85 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 6 Jan 2021 00:09:52 +0800 Subject: [PATCH 08/34] Wrap syscalls in user_lib && change xstate to exit_code --- os/src/syscall/process.rs | 4 ++-- user/src/bin/03sleep.rs | 8 ++++---- user/src/console.rs | 6 ++++-- user/src/lib.rs | 9 +++++++-- user/src/syscall.rs | 6 ++---- 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/os/src/syscall/process.rs b/os/src/syscall/process.rs index 93efe8c..23eab1f 100644 --- a/os/src/syscall/process.rs +++ b/os/src/syscall/process.rs @@ -4,8 +4,8 @@ use crate::task::{ }; use crate::timer::get_time_ms; -pub fn sys_exit(xstate: i32) -> ! { - println!("[kernel] Application exited with code {}", xstate); +pub fn sys_exit(exit_code: i32) -> ! { + println!("[kernel] Application exited with code {}", exit_code); exit_current_and_run_next(); panic!("Unreachable in sys_exit!"); } diff --git a/user/src/bin/03sleep.rs b/user/src/bin/03sleep.rs index ada77e9..8341123 100644 --- a/user/src/bin/03sleep.rs +++ b/user/src/bin/03sleep.rs @@ -4,14 +4,14 @@ #[macro_use] extern crate user_lib; -use user_lib::{sys_get_time, sys_yield}; +use user_lib::{get_time, yield_}; #[no_mangle] fn main() -> i32 { - let current_timer = sys_get_time(); + let current_timer = get_time(); let wait_for = current_timer + 3000; - while sys_get_time() < wait_for { - sys_yield(); + while get_time() < wait_for { + yield_(); } println!("Test sleep OK!"); 0 diff --git a/user/src/console.rs b/user/src/console.rs index a826b8f..ac80117 100644 --- a/user/src/console.rs +++ b/user/src/console.rs @@ -1,11 +1,13 @@ use core::fmt::{self, Write}; -use crate::syscall::{STDOUT, sys_write}; +use super::write; struct Stdout; +const STDOUT: usize = 1; + impl Write for Stdout { fn write_str(&mut self, s: &str) -> fmt::Result { - sys_write(STDOUT, s.as_bytes()); + write(STDOUT, s.as_bytes()); Ok(()) } } diff --git a/user/src/lib.rs b/user/src/lib.rs index fdcb6d5..0d4e44a 100644 --- a/user/src/lib.rs +++ b/user/src/lib.rs @@ -12,7 +12,7 @@ mod lang_items; #[link_section = ".text.entry"] pub extern "C" fn _start() -> ! { clear_bss(); - syscall::sys_exit(main()); + exit(main()); panic!("unreachable after sys_exit!"); } @@ -32,4 +32,9 @@ fn clear_bss() { }); } -pub use syscall::*; \ No newline at end of file +use syscall::*; + +pub fn write(fd: usize, buf: &[u8]) -> isize { sys_write(fd, buf) } +pub fn exit(exit_code: i32) -> isize { sys_exit(exit_code) } +pub fn yield_() -> isize { sys_yield() } +pub fn get_time() -> isize { sys_get_time() } \ No newline at end of file diff --git a/user/src/syscall.rs b/user/src/syscall.rs index 8e4ff50..1b23a48 100644 --- a/user/src/syscall.rs +++ b/user/src/syscall.rs @@ -1,5 +1,3 @@ -pub const STDOUT: usize = 1; - const SYSCALL_WRITE: usize = 64; const SYSCALL_EXIT: usize = 93; const SYSCALL_YIELD: usize = 124; @@ -22,8 +20,8 @@ pub fn sys_write(fd: usize, buffer: &[u8]) -> isize { syscall(SYSCALL_WRITE, [fd, buffer.as_ptr() as usize, buffer.len()]) } -pub fn sys_exit(xstate: i32) -> isize { - syscall(SYSCALL_EXIT, [xstate as usize, 0, 0]) +pub fn sys_exit(exit_code: i32) -> isize { + syscall(SYSCALL_EXIT, [exit_code as usize, 0, 0]) } pub fn sys_yield() -> isize { From 2beee556e8e9b59df1f7b8130f1985c16ecf4abc Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Sat, 16 Jan 2021 19:26:02 +0800 Subject: [PATCH 09/34] rust-toochain --> nightly --- rust-toolchain | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain b/rust-toolchain index ae054b9..bf867e0 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2020-11-01 \ No newline at end of file +nightly From e4eee06cb29690fdce2ded61fde77d77af5890f6 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Thu, 21 Jan 2021 00:14:56 +0800 Subject: [PATCH 10/34] Fix os/Makefile: Support macOS --- os/Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/os/Makefile b/os/Makefile index 38b3c40..1732b23 100644 --- a/os/Makefile +++ b/os/Makefile @@ -25,10 +25,10 @@ DISASM ?= -x build: env $(KERNEL_BIN) env: - rustup component add rust-src - rustup component add llvm-tools-preview - cargo install cargo-binutils - rustup target add riscv64gc-unknown-none-elf + (rustup component list | grep "rust-src") || rustup component add rust-src + (rustup component list | grep "llvm-tools-preview") || rustup component add llvm-tools-preview + (which rust-objdump) || cargo install cargo-binutils + (rustup target list | grep "riscv64gc-unknown-none-elf") || rustup target add riscv64gc-unknown-none-elf $(KERNEL_BIN): kernel @$(OBJCOPY) $(KERNEL_ELF) --strip-all -O binary $@ @@ -59,11 +59,11 @@ ifeq ($(BOARD),qemu) -device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY_PA) else @cp $(BOOTLOADER) $(BOOTLOADER).copy - @dd if=$(KERNEL_BIN) of=$(BOOTLOADER).copy bs=128K seek=1 + @dd if=$(KERNEL_BIN) of=$(BOOTLOADER).copy bs=131072 seek=1 @mv $(BOOTLOADER).copy $(KERNEL_BIN) @sudo chmod 777 $(K210-SERIALPORT) python3 $(K210-BURNER) -p $(K210-SERIALPORT) -b 1500000 $(KERNEL_BIN) - miniterm --eol LF --dtr 0 --rts 0 --filter direct $(K210-SERIALPORT) 115200 + python3 -m serial.tools.miniterm --eol LF --dtr 0 --rts 0 --filter direct $(K210-SERIALPORT) 115200 endif debug: build From fd8f673dbe65da3c73ae9083a4366bf038c6584d Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sat, 30 Jan 2021 01:19:30 +0800 Subject: [PATCH 11/34] Declare _unused explicitly when running first task. --- os/src/task/mod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index 8d739ca..24062be 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -48,9 +48,10 @@ impl TaskManager { fn run_first_task(&self) { self.inner.borrow_mut().tasks[0].task_status = TaskStatus::Running; let next_task_cx_ptr2 = self.inner.borrow().tasks[0].get_task_cx_ptr2(); + let _unused: usize = 0; unsafe { __switch( - &0usize as *const _, + &_unused as *const _, next_task_cx_ptr2, ); } From a8388036f1ab421b34eef43d2761e75851819d8d Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Tue, 2 Feb 2021 16:30:29 +0800 Subject: [PATCH 12/34] Update os/Makefile && Update rust to 2021-01-30 --- os/Makefile | 16 ++++++++-------- rust-toolchain | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/os/Makefile b/os/Makefile index 1732b23..b55c71f 100644 --- a/os/Makefile +++ b/os/Makefile @@ -7,13 +7,13 @@ KERNEL_ENTRY_PA := 0x80020000 DISASM_TMP := target/$(TARGET)/$(MODE)/asm # BOARD -BOARD ?= qemu -SBI ?= rustsbi -BOOTLOADER := ../bootloader/$(SBI)-$(BOARD).bin +BOARD ?= qemu +SBI ?= rustsbi +BOOTLOADER := ../bootloader/$(SBI)-$(BOARD).bin # Run K210 K210-SERIALPORT = /dev/ttyUSB0 -K210-BURNER = ../tools/kflash.py +K210-BURNER = ../tools/kflash.py # Binutils OBJDUMP := rust-objdump --arch-name=riscv64 @@ -25,10 +25,10 @@ DISASM ?= -x build: env $(KERNEL_BIN) env: - (rustup component list | grep "rust-src") || rustup component add rust-src - (rustup component list | grep "llvm-tools-preview") || rustup component add llvm-tools-preview - (which rust-objdump) || cargo install cargo-binutils - (rustup target list | grep "riscv64gc-unknown-none-elf") || rustup target add riscv64gc-unknown-none-elf + (rustup target list | grep "riscv64gc-unknown-none-elf (installed)") || rustup target add $(TARGET) + cargo install cargo-binutils + rustup component add rust-src + rustup component add llvm-tools-preview $(KERNEL_BIN): kernel @$(OBJCOPY) $(KERNEL_ELF) --strip-all -O binary $@ diff --git a/rust-toolchain b/rust-toolchain index bf867e0..a08f00d 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly +nightly-2021-01-30 From e0646c2d53a609de44d251c4dc3394a22877e3a4 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 7 Feb 2021 18:04:38 +0800 Subject: [PATCH 13/34] Bump rustsbi to 0.1.1 && make config of qemu/k210 different --- .gitignore | 4 +- bootloader/rustsbi-k210.bin | Bin 73536 -> 75068 bytes bootloader/rustsbi-qemu.bin | Bin 65704 -> 103288 bytes os/Cargo.lock | 132 --------------------------- os/Makefile | 14 ++- os/src/config.rs | 2 +- os/src/{linker.ld => linker-k210.ld} | 0 os/src/linker-qemu.ld | 45 +++++++++ user/Cargo.lock | 5 - user/build.py | 2 +- user/src/linker.ld | 2 +- 11 files changed, 63 insertions(+), 143 deletions(-) delete mode 100644 os/Cargo.lock rename os/src/{linker.ld => linker-k210.ld} (100%) create mode 100644 os/src/linker-qemu.ld delete mode 100644 user/Cargo.lock diff --git a/.gitignore b/.gitignore index c4e9334..3adafb5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ .idea/* os/target/* os/.idea/* +os/Cargo.lock os/src/link_app.S user/target/* -user/.idea/* \ No newline at end of file +user/.idea/* +user/Cargo.lock diff --git a/bootloader/rustsbi-k210.bin b/bootloader/rustsbi-k210.bin index 5a9fa7d1a253dcc2396c86a01af7e8cc407c8268..e696137ab183ea5129e14e86ba980af53ae025d2 100755 GIT binary patch literal 75068 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
  • )vz#AHbL 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 Date: Mon, 8 Feb 2021 11:27:20 +0800 Subject: [PATCH 14/34] Move kflash.py out of proj. --- .gitignore | 1 + os/Makefile | 7 +- tools/kflash.py | 1452 ----------------------------------------------- 3 files changed, 6 insertions(+), 1454 deletions(-) delete mode 100755 tools/kflash.py diff --git a/.gitignore b/.gitignore index 3adafb5..4b5497c 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ os/src/link_app.S user/target/* user/.idea/* user/Cargo.lock +tools/ diff --git a/os/Makefile b/os/Makefile index e9292ed..e7aa6b7 100644 --- a/os/Makefile +++ b/os/Makefile @@ -58,7 +58,10 @@ disasm-vim: kernel @vim $(DISASM_TMP) @rm $(DISASM_TMP) -run: run-inner +run: tools run-inner + +tools: + (which $(K210-BURNER)) || (cd .. && git clone https://github.com/sipeed/kflash.py.git && mv kflash.py tools) run-inner: build ifeq ($(BOARD),qemu) @@ -82,4 +85,4 @@ debug: build tmux split-window -h "riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234'" && \ tmux -2 attach-session -d -.PHONY: build env kernel clean disasm disasm-vim run-inner +.PHONY: build env kernel clean disasm disasm-vim run-inner tools diff --git a/tools/kflash.py b/tools/kflash.py deleted file mode 100755 index d4cb1da..0000000 --- a/tools/kflash.py +++ /dev/null @@ -1,1452 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -from __future__ import (division, print_function) - -import sys -import time -import zlib -import copy -import struct -import binascii -import hashlib -import argparse -import math -import zipfile, tempfile -import json -import re -import os - - -class KFlash: - print_callback = None - - def __init__(self, print_callback = None): - self.killProcess = False - self.loader = None - self.print_callback = print_callback - - @staticmethod - def log(*args, **kwargs): - if KFlash.print_callback: - KFlash.print_callback(*args, **kwargs) - else: - print(*args, **kwargs) - - def process(self, terminal=True, dev="", baudrate=1500000, board=None, sram = False, file="", callback=None, noansi=False, terminal_auto_size=False, terminal_size=(50, 1), slow_mode = False): - self.killProcess = False - BASH_TIPS = dict(NORMAL='\033[0m',BOLD='\033[1m',DIM='\033[2m',UNDERLINE='\033[4m', - DEFAULT='\033[0m', RED='\033[31m', YELLOW='\033[33m', GREEN='\033[32m', - BG_DEFAULT='\033[49m', BG_WHITE='\033[107m') - - ERROR_MSG = BASH_TIPS['RED']+BASH_TIPS['BOLD']+'[ERROR]'+BASH_TIPS['NORMAL'] - WARN_MSG = BASH_TIPS['YELLOW']+BASH_TIPS['BOLD']+'[WARN]'+BASH_TIPS['NORMAL'] - INFO_MSG = BASH_TIPS['GREEN']+BASH_TIPS['BOLD']+'[INFO]'+BASH_TIPS['NORMAL'] - - VID_LIST_FOR_AUTO_LOOKUP = "(1A86)|(0403)|(067B)|(10C4)|(C251)|(0403)" - # WCH FTDI PL CL DAP OPENEC - ISP_RECEIVE_TIMEOUT = 0.5 - - MAX_RETRY_TIMES = 10 - - ISP_FLASH_SECTOR_SIZE = 4096 - ISP_FLASH_DATA_FRAME_SIZE = ISP_FLASH_SECTOR_SIZE * 16 - - def tuple2str(t): - ret = "" - for i in t: - ret += i+" " - return ret - - def raise_exception(exception): - if self.loader: - try: - self.loader._port.close() - except Exception: - pass - raise exception - - try: - from enum import Enum - except ImportError: - err = (ERROR_MSG,'enum34 must be installed, run '+BASH_TIPS['GREEN']+'`' + ('pip', 'pip3')[sys.version_info > (3, 0)] + ' install enum34`',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise Exception(err) - try: - import serial - import serial.tools.list_ports - except ImportError: - err = (ERROR_MSG,'PySerial must be installed, run '+BASH_TIPS['GREEN']+'`' + ('pip', 'pip3')[sys.version_info > (3, 0)] + ' install pyserial`',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise Exception(err) - - class TimeoutError(Exception): pass - - class ProgramFileFormat(Enum): - FMT_BINARY = 0 - FMT_ELF = 1 - FMT_KFPKG = 2 - - # AES is from: https://github.com/ricmoo/pyaes, Copyright by Richard Moore - class AES: - '''Encapsulates the AES block cipher. - You generally should not need this. Use the AESModeOfOperation classes - below instead.''' - @staticmethod - def _compact_word(word): - return (word[0] << 24) | (word[1] << 16) | (word[2] << 8) | word[3] - - # Number of rounds by keysize - number_of_rounds = {16: 10, 24: 12, 32: 14} - - # Round constant words - rcon = [ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 ] - - # S-box and Inverse S-box (S is for Substitution) - S = [ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 ] - Si =[ 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d ] - - # Transformations for encryption - T1 = [ 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a ] - T2 = [ 0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616 ] - T3 = [ 0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16 ] - T4 = [ 0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c ] - - # Transformations for decryption - T5 = [ 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742 ] - T6 = [ 0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857 ] - T7 = [ 0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8 ] - T8 = [ 0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0 ] - - # Transformations for decryption key expansion - U1 = [ 0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3 ] - U2 = [ 0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697 ] - U3 = [ 0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46 ] - U4 = [ 0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d ] - - def __init__(self, key): - - if len(key) not in (16, 24, 32): - raise_exception( ValueError('Invalid key size') ) - - rounds = self.number_of_rounds[len(key)] - - # Encryption round keys - self._Ke = [[0] * 4 for i in range(rounds + 1)] - - # Decryption round keys - self._Kd = [[0] * 4 for i in range(rounds + 1)] - - round_key_count = (rounds + 1) * 4 - KC = len(key) // 4 - - # Convert the key into ints - tk = [ struct.unpack('>i', key[i:i + 4])[0] for i in range(0, len(key), 4) ] - - # Copy values into round key arrays - for i in range(0, KC): - self._Ke[i // 4][i % 4] = tk[i] - self._Kd[rounds - (i // 4)][i % 4] = tk[i] - - # Key expansion (fips-197 section 5.2) - rconpointer = 0 - t = KC - while t < round_key_count: - - tt = tk[KC - 1] - tk[0] ^= ((self.S[(tt >> 16) & 0xFF] << 24) ^ - (self.S[(tt >> 8) & 0xFF] << 16) ^ - (self.S[ tt & 0xFF] << 8) ^ - self.S[(tt >> 24) & 0xFF] ^ - (self.rcon[rconpointer] << 24)) - rconpointer += 1 - - if KC != 8: - for i in range(1, KC): - tk[i] ^= tk[i - 1] - - # Key expansion for 256-bit keys is "slightly different" (fips-197) - else: - for i in range(1, KC // 2): - tk[i] ^= tk[i - 1] - tt = tk[KC // 2 - 1] - - tk[KC // 2] ^= (self.S[ tt & 0xFF] ^ - (self.S[(tt >> 8) & 0xFF] << 8) ^ - (self.S[(tt >> 16) & 0xFF] << 16) ^ - (self.S[(tt >> 24) & 0xFF] << 24)) - - for i in range(KC // 2 + 1, KC): - tk[i] ^= tk[i - 1] - - # Copy values into round key arrays - j = 0 - while j < KC and t < round_key_count: - self._Ke[t // 4][t % 4] = tk[j] - self._Kd[rounds - (t // 4)][t % 4] = tk[j] - j += 1 - t += 1 - - # Inverse-Cipher-ify the decryption round key (fips-197 section 5.3) - for r in range(1, rounds): - for j in range(0, 4): - tt = self._Kd[r][j] - self._Kd[r][j] = (self.U1[(tt >> 24) & 0xFF] ^ - self.U2[(tt >> 16) & 0xFF] ^ - self.U3[(tt >> 8) & 0xFF] ^ - self.U4[ tt & 0xFF]) - - def encrypt(self, plaintext): - 'Encrypt a block of plain text using the AES block cipher.' - - if len(plaintext) != 16: - raise_exception( ValueError('wrong block length') ) - - rounds = len(self._Ke) - 1 - (s1, s2, s3) = [1, 2, 3] - a = [0, 0, 0, 0] - - # Convert plaintext to (ints ^ key) - t = [(AES._compact_word(plaintext[4 * i:4 * i + 4]) ^ self._Ke[0][i]) for i in range(0, 4)] - - # Apply round transforms - for r in range(1, rounds): - for i in range(0, 4): - a[i] = (self.T1[(t[ i ] >> 24) & 0xFF] ^ - self.T2[(t[(i + s1) % 4] >> 16) & 0xFF] ^ - self.T3[(t[(i + s2) % 4] >> 8) & 0xFF] ^ - self.T4[ t[(i + s3) % 4] & 0xFF] ^ - self._Ke[r][i]) - t = copy.copy(a) - - # The last round is special - result = [ ] - for i in range(0, 4): - tt = self._Ke[rounds][i] - result.append((self.S[(t[ i ] >> 24) & 0xFF] ^ (tt >> 24)) & 0xFF) - result.append((self.S[(t[(i + s1) % 4] >> 16) & 0xFF] ^ (tt >> 16)) & 0xFF) - result.append((self.S[(t[(i + s2) % 4] >> 8) & 0xFF] ^ (tt >> 8)) & 0xFF) - result.append((self.S[ t[(i + s3) % 4] & 0xFF] ^ tt ) & 0xFF) - - return result - - def decrypt(self, ciphertext): - 'Decrypt a block of cipher text using the AES block cipher.' - - if len(ciphertext) != 16: - raise_exception( ValueError('wrong block length') ) - - rounds = len(self._Kd) - 1 - (s1, s2, s3) = [3, 2, 1] - a = [0, 0, 0, 0] - - # Convert ciphertext to (ints ^ key) - t = [(AES._compact_word(ciphertext[4 * i:4 * i + 4]) ^ self._Kd[0][i]) for i in range(0, 4)] - - # Apply round transforms - for r in range(1, rounds): - for i in range(0, 4): - a[i] = (self.T5[(t[ i ] >> 24) & 0xFF] ^ - self.T6[(t[(i + s1) % 4] >> 16) & 0xFF] ^ - self.T7[(t[(i + s2) % 4] >> 8) & 0xFF] ^ - self.T8[ t[(i + s3) % 4] & 0xFF] ^ - self._Kd[r][i]) - t = copy.copy(a) - - # The last round is special - result = [ ] - for i in range(0, 4): - tt = self._Kd[rounds][i] - result.append((self.Si[(t[ i ] >> 24) & 0xFF] ^ (tt >> 24)) & 0xFF) - result.append((self.Si[(t[(i + s1) % 4] >> 16) & 0xFF] ^ (tt >> 16)) & 0xFF) - result.append((self.Si[(t[(i + s2) % 4] >> 8) & 0xFF] ^ (tt >> 8)) & 0xFF) - result.append((self.Si[ t[(i + s3) % 4] & 0xFF] ^ tt ) & 0xFF) - - return result - - class AES_128_CBC: - - def __init__(self, key, iv = None): - self._aes = AES(key) - if iv is None: - self._last_cipherblock = [ 0 ] * 16 - elif len(iv) != 16: - raise_exception( ValueError('initialization vector must be 16 bytes') ) - else: - self._last_cipherblock = iv - - - def encrypt(self, plaintext): - if len(plaintext) != 16: - raise_exception( ValueError('plaintext block must be 16 bytes') ) - - precipherblock = [ (p ^ l) for (p, l) in zip(plaintext, self._last_cipherblock) ] - self._last_cipherblock = self._aes.encrypt(precipherblock) - - return b''.join(map(lambda x: x.to_bytes(1, 'little'), self._last_cipherblock)) - - def decrypt(self, ciphertext): - if len(ciphertext) != 16: - raise_exception( ValueError('ciphertext block must be 16 bytes') ) - - cipherblock = ciphertext - plaintext = [ (p ^ l) for (p, l) in zip(self._aes.decrypt(cipherblock), self._last_cipherblock) ] - self._last_cipherblock = cipherblock - - return b''.join(map(lambda x: x.to_bytes(1, 'little'), plaintext)) - - ISP_PROG = '789cbcbc7d5c1357d6007c6792c924080a0e1890d82201a2acebc38a4aab960d428862eb636b85ea56171d10b5dacafa416dcb4a48263122453a60c0604bb182b25bd71535ada8011569edf787623fb4688080a2420522cac77befcc04d0769f7dff787faffec2ccbdf7dc73cf3df79c73cfb91f33f1e0dd331f5ec300061efdb7695144c4a64541f0a746bfe9161c00363b7bcca6dd2f44e8d4588c2e069bab9b8bc5ea62b1385d1ca6d169b0785d3ca6d569b179ba79d87cdd7c2c4197802dd02dc09ed53d8b3da77b0e5ba85b88fdafee7f8b576d2ac52336794780c500747c077f8b31f884bfc5387cc2df62117cc2df62317cc2df62023ee16fb1043ee16f31099ff0b7580a9ff0b758069ff0b7d8033ee16ff128f884bfc59ef0097f8bbde013fe168f864ff85b3c063ee1cfe283015617532cff9b0c50f85117f537bc6f53a8ba93c2fc40343636ffb5a08db12b7dc635de0b0e9a4eff8ce346bc6d2c5d84e32b7dc6375a7058371bbfbd49a9ee1c2ddafb0e4e4fc4f4477140efc041f6aa89d86b20287013088a40ef58baa4c9a37574fbd88e715de3ef3fd157d658de54d97ab8fd68c789ae93f7cff4cdbd1edf9cd0b6f0f60b9d89ddcb7a57f4dfb8ded27cb3edceed5f3b7bba1ff40ef4ab82306f55888fb76ad2446fd5943f79ab8262c6aa429e1fab9ab472ac6a4afa585590ce571592efab9af4beaf6acabf7d5541b5e35421df8c534dba3e4e35a5731cac1f00eb07c0fa01b07e00ac1f08eb07c2fa81b07e20ac3f01d69f00eb4f80f527c0fa4fc2fa4fc2fa4fc2fa4f6e0a0d9a7e2fd47bba87d117a79710e06ed0918501a57723364edae4ed37bd2c79eeca1b2bf1bf95fd6deea61b9b2429e529f1a92da992ade55be3335a323cd654ae49587b73adc71b956f24bc79f3cdd1eb0faf5fb8e1ce86d17f3ffcf785dbef6c2761df4c413a6f7222e6639aa8f32183b1b1a660dd5852895126a58e2243305f5388ce970cc5fc4ca13a3f320c1b670ad38d235598dca4d2c9c94998bf6992ce9f9c8c059826eb02c8706cbc295c379efc031668fa832e909c82294c53740af28fd804d31f7513c8a9d813a6a9ba27c8ffc19e34fd8fee490ac382d038010047a9d1a3696cebb8f6f11d4f7405df0febab6c3cdc74b4f544fbc98e335d67ef5fe84bb8beb0f985b6c4dbcb3a5774afea5ddd7ff3fa9de65fdb7a6e3fe81ce8be171c01f6f4de0bf69ebea71f2f93947b548e3e3cf6e8b813e34f3e71a6acacbcbcb2f2f0e1a3474f9c3879f2cc99b9fbe32b12feb1f05f2f5425da9655afb0dfd8df5271f31f77fef56b558fed41f5809d97adb99fbb650bc995f24830b02c02c099551a22945f74978bfe8d037ce5977fdbb47b1ab803ff8e9d6e0b06c09a8def409a969d1cbc72eeaa1babf04d659be66ebeb159925a9e1abfba65b524a33c23fef596d73dd656ae4d5877739dc79b956f26bc75f3add11b0e6f58f8ea9d57476f3fbc7d6cd0d1a01726fe3a71ecb4a3d35e88fc35725cc88990c4d09ed071334fcc4c8cea891a3fe9e4a465931f4c1e3febe4ac65b31fcc7e62ca99292bfe38f0c727a2cf44aff8f3c09fdddc8df191346d52a93b192dad7001426351a39e349aee65c4456c028bbcbbed166f94937ca42c19d3c460d95972020314c1b45848d85713d9429b2b805c04b22851ec715a2402b8de0da369b2c027cbd439ccb9b98c595b55d78deb3ee561f547ddb0088fbede749db98b68b100d45ad0030b09b25893ea88f933a1bd5fb812f82b4b66b472584789bbae217a1006049bf661eeb9181fbec5d026be56e8cf0246ae5e0c06db066940df2397624034efa51f27686743547c4fd27eb2c05cfd276b7ef29a5742cff6f7c722d3480c53159d0b34f50c5e3947688bea2b0be909c771f8f6d9e78b75a1812602d05d2740a04902749a4006a6e8669cf523715d7ef1bb53f7740e280f9240f90109304d76164188b4dd831f7d9769171d242591c409c0104a4060d76d3c35af7fc353c3cc13e8f996cf5ff32da4a6483a448df2033906e918775cbc6b314502bc9ab0a9a79a1ea363fd301d8476ea9ea2cf2802e0cccdfcf8a224bf1cc7130dbf4bd9161ba24aa421206507bf4bb5ef5a8c30ce961e57d39baf8040528ab0ef80d8d7b4021efbd43dc5ef6eb0454a61ad7952d49f5292ecb5633ec5da4900ce39f18c46d2ae1477027e541b3b6f40192256f263ce9ab4e74be840d2cd5bdf9863dfbd087f459f7dbf5817865aa6375f86adc23ec5073230f56a3360c7c156df0978f74461fa233de038ca5c028c0471f453fbb6f4b0f6fea44ac3164d7087a44be9db09e44d0050e20f8ef2f29d75a5b969825bd6bf7f46780b6ad069428577f5d57f6b266a2c119c5ea7d5a17ceebd7175be66b2f01eb4ba50f347e13d39b558f327377cca3ecd0c373cad48e6a475b6eb582d27b7fb25aea3eff3124cb88e5de2dfa4aea3823e5595d032c8bd2b9f29cb49dcdd4728e148223c39d859aec3ba783ea7622e166fd670b991aec33c97b37e2adb886fbe9182693490d39385fe645d982fbcd57ca24394f27dff52b19eab3dc75589dadfbf833c7888a7887455fea02db4613ec1ad85da704304f060187e3c817b3cc1e77aad0ea03155822e3037058d2ce643119d40d22ed0d227d2744208c28ccab6a59bb54acf4e604d22b0fdf0c926318075b9c60413cb73255dc11d539ba6352a27bcefc6fe73596af6ea49d2a9c67c8d203f5f107142d9032cd4318a19403de5fb89f9b064563f92350ebbf831eced4a3f37deaccbbc6cbab1667de2964a840348464a6ccd776e3916d2756ed8e5e9658d0bbb5ee8486c5fd6baa2c9d814d69770bfd23c75e73403eb01bca95100b78c82e3999353206b2f4f96a4dcd83c775bd936fc8d1bebe6be52f60aa6590971b0aede31b34d0fd4274df4a6265066b21a4830a124cc4c6fb6024a068da36d14f89659c8044a6420dbc2ca65b88ead3684c454cb9ec6a2f75eef5b6e9b90fec27d6aaf044fec5ad6b1aa955a7613937f0ee5dcf39fff237b257f5d59ebc5c6857d2bda8dede54de186a9e6a3e61339abf6068e0a0cb6eedc39917e4f065a92e3a15720597b63dbdc37cadec0dfbcf1cadcf5982614d1062d8bd52083f62d0a63c5002fd4d27732447a9507b861c936e56a794e8b054e1b00253770dcfe214fe9d709ca8d0970d426b9397e88b58821eda125d1c5d5e662f552db87ffa57e7f9252c26329d46cb0b3e41151f479413f740534924f91d69965d6565b9c40de0380287e4f26b29ef5e0873c3e2df93b21a4832fe854256795958963c28c1719374dea8f8edb20de51d1e7adb0e5e80b1617d227d59b103b7c1369c93747623f91f128f6b0d7ddd8116e96f40e5656f68cd6208c124829872b6deb6ea8c9e85d5fafda6ae986cfba199bf6c557c306aaf79c0097f22c1097fec2ea4db3e50d029d8ab3caf0c431efa31e8f7e943253fa30366d3a8f6dc9abbfc5667c95c7c6e35a3de64f36269e9ff5f65f7d3a3da1234a2605d083ea8a1487629506229e85da2ad32c6c97f4ed47f3f0d30620580909f408bcbbc5487f59e253acbc90e75bf2ff5a4938037c46e28a67034d72902dd7b1fe9f7f6951665500ff676bd36a49badb092047462bbebeb171eee6b2cdf8b61b6b31cd44a4ff490e8b73c037c5468a413e4999e240b985dedb027c5b154d3638bb9c2950fe530cda6c8a56ffa63a3bd2466f2f497b702bb2dfe106c106cc310fc9558d3a9811de52ad0401dc29f59f052f62d68d64de2a553230fe899f182fd3c863112f684c5fef0744f50428237fc8b39a9cbfb27b4851ed3b7e5a7a6dc313706001453afb584b1838692989dd961edc11d69ed02ae95ad874d272d430d5106ece3689ea0ae1583080d0220ba3af3f00ce92e8791cdc203f85fca737bb406ed29252914a0664398483ea768d11f4610f169a9f34bf590f4b58a70a28837a812ee9c3838a18734e6f030f536a13f8fd0f2c34b3f70b1b2afbe2277dfd1238c61a48791da4fc529efe422aa08c0c382b41ef5bc00dc9d5b7f5f597802e0cf54b54df0ce672cf6e60633ebacd32c4b455e4f2bc89aafea480bb6cbd6b907ebb073727edcfea02fc9c31776dd95a644d451a09389437511378450e989c6ab2437d3bafaa9ec43267e8545bba09496654ad4daf2d00a2f906484795538589e67f00e6caaad27a61de31b04a16b9b6176093a1cd12d5b2c55fe19bcb36f2d8e57590b7c48156cd4a5e2a453762b6446e39e4b6f91f30f38571b6220b3f6350affd1eeadb79288362ac8cfc264f14df041298b912f4d605564996bf8d8509a35eb1e5b408f65d0f79130c7ba987bd3fcb3dbbe188208df0d1d20627609230fb0e772bd7561ecfce8af16109b5d847037d457efe6e2d4b668945623fe8efca23398fd1b92d1dcd50480a04d9eae761d577047fe113997b7ebddf99ca4b1be477903b57fd23df73e247615c9f8e9248012531e23a8dbc1b9534cf164a9e146cd16cbe46f315b94b8ae6f75982accfd069dc584b7f853601ea3d6b943c2597406849d859f350a9fa571e834690a9a069f22ed8a6386e062b0eea97f7c2329979bae71aa659b1e8f62f8a45fd3f21dd42165929ce0716d4ea07e474812aafeb763dd49704260220dbbd5f8cb9b5f0334e2311f471324290708fe7a0feee27df07c8be1050efa047c0d1947c1e7a0350c2a03feac94b80a31ff9fdd093f5a4bd9b718a38e225b4d84711355ec35e3bfd90228f7839fc9b0784f20714f1b5579d8dd74e4957a5018bb342cb423b6d82342349ae321980a88e04539b08b1405b6f59ea75489da43dbc696aa390e7ca4e0d4e15f03e44140ad2d983e82a89a1039b81cec9684b6a271e549612a037299a817eb396363981399e7ebb01ce58fd362b0c3a108dd60632c6e1dd3c60d6d6424b5ee3458feb0645b57046f56cb3b192afbdfa931c3e97fa50ce11af54fb33b1e1263afd1cce66b840ade3f47576ab64f0999d27f7783a3c9d31a46343c380cf0dd80fc939f54e095aebd9b3272dab1cfa6736e849da8012fef613f0097ffbc5f0097ffb45f0097ffb71f884bffd187cc2df7e009ff00767f7eeee31ec1e065cca65f71018f717bf94bbd4c6ee5101be0d63b6332becc19eac5af984bce83d8ef473f7f7d996a697b7571aa63265d0533376093235da52cfcd4f47cf3432da334d0affb2d4e876b336faeb53f3c2fb0862eafdf0aeac35f9ce30c13667f93f2b1d8a3263f52af128264777570f3d01d64506153b2942ec21c8b6875e2ec6288b4a443f4702591af40cfcbb00aab12d2353de9ba79cd4e511c64448cbdc734040ff8b3ed70fc5fd5f38c1981734cf4a85f739e51b259bc3989694541491f03af76b25b38316a2c4ce4a13438aa095dc3018c954a833fd90a5086e94405f4ae97f1c2803ea80328200cae9f03789f050ce81cf2002578610f8c4789d06c6ac1e8265ba619173de7a97a28f7f4b73cd6914defae634f16fa641707f4e2ba2154fe1a49e9ba9627b2c7e0045b4be3c55b1cff0d682e914caef0be90e3eed007c9ae870d717d27785f201771f84f1e89f334ff799d022af67fd7c6ce1bc3fa75d9a023dbd90ae1758d2b058f954d70bc86b5646885f10eade95ae21e20f08be71e91de97a59fca76e4ff936a39df349aa4db14ee7d46991b6e81b082c20bdecfec58e6f5b8d7de55d5fb65f6efab17145dfaafbabbbd675bcdafe7eceb49d6866bd545fb2a1ae1e8d9efe690f40b954801e4b7ac3114da0b3487f4ca35b802da0c1a849b2dbcb8c87342b18617d6207ed45841144b5c79698c45df4a6bf60cb76499315eb7d17d15d15617171c74be8af0daa6b4c9851807f47915cc62430e51645a3901346fb13ded53bf7aa090d5dec0150295f521392d9a68ff2c0caad91a3acea2a8345ad7c6a2f38de77a8741806b4f627fde9d21f0fea4fca80fe9819d4cafaaf941be94d56f0a3714eb2e7ebbab0446302936da113a15c435c957bcdbb9054299faa04db7a75da968df19bcb374bb6b5ac8d5f57be4ef2ca8d37e7be55f6169e796343342383f219350a64e9127471d4825135cb6da815d169d44a5c5cb9c921f31a10417e4993d9ad64109d2df1a637ec93c2f7799f5e142ff25c5f2d2ec1bd72ad5e041cd509e0a6a5fa7c8188eeee024468b5f800466590eae5e7ca514ff839f809bfe67f6b914fc26990931423bdeb4ffad88e686017dc1ac49ea3163c1cf47ad6fcec7c9be7fa578de1c2aa4d4d3aa2a22c8dca70d9a83452aaf46f028a76f1d7772cd58663318ac6b8f3374d370df4a67e70d3244d8e365e66a2859a59db5e8a2b4b9bf0de4be7fd934fc211e1b8bd37d26bdf10b7757d9da7c38c6e1a83322b4dcb3b3dd7bbb99f1ccc6bbbcb856835db14ebe9e60a00c7fecdab38bd691fb8690883ad0954feede5b8d9268b5a91fcd27934facf3f1c1ec520c9d26f26db6e9ae87bffc07e3455d737e04fc1b14323576d6cc0714ba5c1115bdad37c5c5f0df95f6d0698a65656586df50804e955f4829f011ae915dc3843c805a53f669e5e65bce6f64a5f7939ee86a1da648a79f9bc22f9066ab91a4591617dc35164c2fd855de13b0fef64c5c40b581cb1a0ff2fe6f660e6b7f1238a1e451f430d396400fd4fd3dfcb8021f907bb3e4986d16f3e047af9648c36656017991798ecbdf3776121709e1f75dd3e21ddd85ed65ade84a2c217eea3987145fbaad6d54dac690b9cb71a71fa0d17ce76918336b49e86bcc32e0bfe6fada216d3fc5e9c58b69e8b13616ce8b873ac2fdc2c8ce44a96dcf8a4a50d5a10f3a7bfd28d1631db301de85428560894cbc16872a105a4b11272901ef73d00af9955f468935891e2bfde774da7b5cc5274c7f756511a95260745ce95a55443018c253a44d867f95abad929651b5280d564123d868d20073335b4ec18f04f49b7464a2c6afa853a8ffe2846253a26c32dcdc87e12b768fc98b77f4a7fbc00f1f30529ebf4058aa62a490180811e501e6db8c93d4f36b4b269e3c0ae3bbb6e96b4045bbc1d6ea9ab79115a67ecd2e96f102dc04ada8803707e5713b413463c0de721654ec93e1803aafdf89c2e989341e6db59897a094b36928ee6962eb62104b39aeac967ecbeebe97912a0585370b7e46615d90426db661a66d82d2d9082d3271ab9e7f1138d0826d8a248639d72a070ee83b83a9e147d6406f48d96715e7a4c1598a852132a261e71a36acf058e23552d124c8eea3f7df9475f9a82bcf66ef76d058eac3b810d103a36927200910de2589526a9da9a068a5b3aad12117acb57355fcb5c38ccdd18f942cbac1dd18c68fa0e8c0e100710a1ecd6192046dafc80ed8902f43e8902e161b5f7067bf3e4887711aeef518e4444a7c0992440a4809a82898ee500f68df383b4732f8834ed55f76be92f9ce1fc8c4b9a503d8a24dfcca27de9fea4c85d7fc1c20a66eda4f7f5f85362315e3664979233fb93c273e831dd41f46606a3adb3275afaa480ddd5be5354e10926bec779a0a5ce9df4b8f57256feac887e871ca7b7c9b0c4022ac51764398576b6eb21b43f4d6f75018ee23fbbdee24b9c993077a34bc1e53ee57a6b4925956801f9f1f4f50b6236310d588d4651a0711c081c370e8c962cdc43119241ef55b47f9d84d05a2f87a9abc635008ef3a8fe9c86b3d276ef56d006eea41fff269e6ebe00ac9213442df4ff90bc5c006c623dc4d822c944397e7c8e0be66c25d3ed1401e54502e5656ddd7d365185598d17c8a536ef75b4a40ef8aeeedceb78a56140faaac6e69be2bdbe736fd58e3d6afa2f4f88786956ac89240b40d99edd7715bc34db9ca7b8a7dd799275fa03cfbb9eb7144ee59171d81fabe8cfa410b2643592ad9216c51a54c7a77a9a21e0748cdcf795fe28c7db2d8d5ea7f355bc6c345f6baeaa345db5136999e4ac82fe8ccc5d85c7f5333de0cc40efe9f1e0da389ef657eaad8740a7a5259ea0565b056d5db495488ddc5901961564fa55657c00223d1ea823dfa804df0e8d6be35f2186806e18bdd38427f4543c07830bb104344a91446a4cb5498b85ef953be1d806bbd653ebc6f3ba7a24ed5fcae90b308771b623534bbf9a2462b4cae9d0f2c1f12e49ebb44642fb4e375b0094b44f9ce221fdf59f70a68acc89f9f83d0e5fb86bb5d9aeb7e500cab07320a688c9a9cd531e7b080ec45799724081b3e09623c3f433cb8cc286e6f8535baaa145c104bb01f9cc69e9c99e0f746790471dbe87f6ade3d6a3f55a0238726d0304d16fabaa3f00f6e54492753082d8a7a5efd4834a13bdb1d9437f81000cc910fbf31a061c379d03d0966edd02cbf22f8e2c617b3240bf8ddd6a1aa48c923ebaa35ea2af2280fe2803f4760213d9194c7f86c04567185c544588f41f31229661c4ca231940f41133a83c9604941fb930e52927a63cd220521eab17293f4ac395a7e422e8718a95a7c8c12db6dd2bdf27df2794a7ea071cb7202d4dce9eec2cfade017195b10ed0db2fe1aca66750a7ed97d36c378c1d224d3d40348f849a5c0fc22d4a4062576d91a66ea08f87796437a45c091a8043de037ba4d336dbe5cd9cff399f8fa4639f13d2f3f8b463c984f4b25663fb54c3a3f3d25126a03d3ea525f9d159275488cbceb1953ba735b9e3c0b254fd4cc320b4b0386bde82b1a3c48354ef8541fa419408cd64d443d9203f9ba589a05f53fa006009683e7b81791c378c4a47c1d9ecd5ea3e3a69ed0cde2a988cdeaf5499fe8015a5d1d21e406d710e46174a5309f3c4dbe9d62a591ba0bd7bc414310aa72f1c12ff68ad32af8de1e5338361db0280f2d86ce8c51a061399e09d6c6f00a86a5b8b29e74c1f14e4f1ee013b7d712d56f45ac92b457715b7ae196694a17d7a66279d2f09d64f170f5619ac6ad14903a0deb83898b0973692fe55322d462b7a3c5812b6f965efb8a23525eb29897990da29c614778b6e516496984ead97b2928df8b726baff02502497b42a524adae1bc2ca21df5e218316b12e3fec9450eff9422a7ff9aa25b55a6140c512e6f00689de1759ef228ac2485c9a96a4bc394c7a66389eef8ade99be38a35251d8af5255d34d902908d86f8441abb62237c1795dc1745c1b13089c5457de9f632e88108a3f4d35a3b7d61ad17ea2b472f23c6509f11fd886e16d1dd58ef41911b713ab31e40fa5a217ded14a2fa354435ac812b9215d715298a66c51a455b514a95716d4c663c9153659a8ed11b2f8faf5a7b0b205aab98148c6d19070a9a8bd26a894486f726049e6f77f7a4b101f1ec6a35e44087fffa22d89b1eae37b01dd14ad41b462ce67ba4873d2ae97bdee68e344bbf7cde46abd7c94ad617ad71f765a80f77eac5bfdb870df5e0b77df8d6fc47fbefb5dff93bed5f1f6effc2751bec45c7e020f458e9f09d0e9c68413014490cf65aaf59e82227d03fcd0cb2bd9f0e5e2cde508568e4686ba99770b46daf17fb27fb5ff74ff16fe668a3eb718a84fe334960be7481c337adc0e9ff4ad1ad32c6cdabe4f5d871ff35fe6dfeebfd6f73749270d44902ff14d1498a458a4edfcd302df2edaeb5559a824d1bec6e5a1bab37d82f9a275455b5b57163e3f6ed3e3c8de2d070c354c6922403ca7f925f4b9a2c47382b5bc8cf07281ffa075f97c4e69f53d49425e32968b717d59a6ad0178662109eb3caa57be8f90478794da5e5e55637148a0632f95502180fdcb6a1d8d3bd8abbb049d2c5ba48ef4ac354c334f309b3f93384cd1c8fc50b12fed6a3b5f57e21185abffcd298602c5b3b776d1883569684f521e2117af8faaff727a138880eec06fd19fd021637658cb08e31afb5df866a096b6063dddc38cacc34721cd94fd6b8391294339223ce338f7204f341168735a5b58435551a76d0c1ad12684d03eae6cc373b7919516322391c5d3929aa65d91e13f8f80edb4362e63b07b42535304e13a3382d73095a2b2fe356cbf37398cfa6acd77dc19271240d2dbb7bed063cab9c231623ee2843c48075d9fa514f14eb61bcc6458a26c0a78bb9b5178a044190cf93e81d4e184bbb71346ee4ca5c7240d42b1629c3c400ad2e2bbe57acc734a707b9151f17299df1933bee3c6033e760da7c87ffa297ce77da1f919932f230e45029c7f3e5233954ffcf473934bc767bbc168dfa48de64dd5d8f4e3df07bb5e3ffc3da11bf2a7c1d51b7cfc1c33c52d2364db31e08efe3b0f9cf950ef7b7d463ce9a707371bde7eb6128fa5f4c80cca5027629cc5def8653cffc3d8e374e471c9ff296ee53774e4d24cc91f0b4d7fc826851fac3b1108b3d981c6e958da322abd1fd56f32d0f0bae0dd398ec89d6471318b4228fd648f5165e3b280b298a61d15a2ad212e87300c42dfa1d893791063de7ac1ff28a34caa26e403fd7083e5a4a2734425fe7d17d83a752321b4487203d7ba244ca5231a07f944817ad41fdcdcf29ae57c44d787bcefae273735e82cf14cfd775f18827fd49fa44a82d13ba41897a8b964e7549a3487510414626b90091f3c7affa3358936bbbfffaee3cab85c4d0daaa7f23920c248394254a44bf44221fd417d5cf77cc6b9db25e591a829dfee6715e0605215e7e6cf37c1d8b6760cb386c39dce818dbdd53a2fef817d832e3044bb57481538cea4fb0b14e092781994bfe64d77fcc608e9db20ed1c704f0ca511e9981cd963d1da3d3fa384a9e7ff9bc6379d05d14f95f342e3472a3ac2d1d5a3bc9b45716cf961d5277daddebd409ad8fcba0ba1e491636fff8b961590cfaf5ff92c5c68f86252cab0941869bff136c8d7d78e46bda1f1df9619b38d520e98231fc0f286e9fef12e42b05f9d3449a218d255dfd910693bab328ace04f5999bed3c4f45fd13e8c403ffdb81ce83443ab49650847b9c531bebbaf8ac852bbf3b34ae1984de8c6872193df1341c8fef82ab259edf8aee701f2ad59a3b1b860151ffbfae55a5aa0d7feaff2ca95368453b78b6df20506a705faf2d097ad2c894d6066431a515af94fd34141bf97129a421b6d249e402719c29ac20d870d9276a17f89fae3d057318a07e597904f5ae7645dcd8391c61ee0bf5af4148131e6742b3de113f1498bb94d64130f16bfbd7bdd494bd1abfe77bc6f5190a6a216ce639ad5d0c4fb8ada3c1841b63b81608f8b77d1ee1dc9c6b660666eca8d64645fe5f70607e1ccb1c8bf059b57785d7f5c3c68b902e177b436e6be7dd8b26b1dbdd34fa6ffc8087d763f4cf9d147a08a6801bb52197361f3498bff3a7a825462b98456349aafd2729b447e195230e3f235eef9cce59f8bee14dd24e6f1d4214f5de17050d2fb14d9f1249de212530d51805f3360b455967ae09dfa4d1e57737acf152b2907568b1cbc4d565a8a68ca480eee86b8a0377037df46ccfbd0eefdaaf75dff9bcb6dd4650bf0d1d22ba19fd3900602499328502217a2e2f03d2c1f1517d549186d60924a1d0999a1485d9e67419cfab7f3db5d7776df2c68f3bd5377fa79a8ebf5b03e8a8a29b48a92560fa80694e3845131855651b81c17ccc98051310ba3620aada2b4d5dda71a54582059cf47c5304af15f9d6e75dc720e78c2a898f71186e6522d9c293e2413dc3345a9549829b468a650253c3a53cc480f6b3ecccde6c16d92dbd30cf4cf30d66a80f35da904208bcddc6549a09e7030423ad31d7d8c2d5bedf85fa2ef57ed3369446a6f9e2cad388fb5c178fa2c825434c248276b72297c172b1a31cdcde48494ca14af95fc6a38d23e4917d23f73ce5483f92b96dc4c2a1a15ed8c56f1b55b9f9036bd0822a02516e6899eb2d47073985bf3ce61b7853933689babd3caed26439bb5dc6e710e422fbce2ad53edc826481ba5edd01a49394f244df1f53b5ae61cf26b866c880cfb14c1210c720e034aa13d5ca57f085668ff0d473f2067ba395ad33392a3e48cdffa6b7c4daede41729abb5e63ebc87aa63ffd7e3d61fca6ba6ba96f3e327e531fad85fe8f262c0da8efce29488e337f41d608d34cd3e37ab4e737bf0d49226c6f991c6280f15df8c4d27c5279981c70dc760e4c6db20471b44d117ccb5eb9065986504638219625ec4d9904b8361eaed14b483bcb52e59707072949cb3a4c63698096a89a5c35f414f61a050b9f294dcbb65cb287bbfd58198fa3d4e1de89acb9278735a15df9ab82ee7c884e63629a6f6c01e9173bbe6c0f371f36cb0f70fbc37d96039c3d7860ec2bbb5fdef56debe5a6a3869982bc80f485c68b0c0fa97928e07dcd7288b3f3a388f9964af8b6b3f221e5e18d8b3e32702b2805c9a213329060b212bd3072954d76c700ac5986d78a1d13e6f7cb0fa1bde3f92a268eaf1fced5f74d163d2543f12e58dc3df36bab490ce6f645df9fd92578462b443365b0e4e9afad4cd7e0b4f6a9ade11d7c0958beeaf5b3197846d9d655abcfa686377eb92391318708f4a75232191e2376bc13f79022762f1678a5a7e43380a582df4b3b6911559100d797688a36e43b645fe85ba0edd6462676e3f4eb97c18179ba5b251b26e41575a2dde006bcd956054b441026708704446ee9c6ab1a60fc230122fa672926fa84009464a3887a7d1ea07dd10efd468220fffdeefe310d03a9f6ff7f5af834aff8ab82f98c36a0b4dad483cf86b81c6f5d1e3830cfec74b732fba56e7cf7fcd910f35963f5ff4bdc9fda96a72f6b15cd96e02f74bc3c57146e84767514286b9ced71533ddbe0548bb417003ac5b6b02bb1ddd8b4a20949d851837e9611f33997395d5f2f06e69cfcfa9279315a3adf29d9369d7e518dcd16c7c594245b4789c1819c03e7f475e741716d02935dcc43ef3bc741bfe714b30410b9f359228b80dea0033e4994476bd404ca0ff4100326e7d0ad44eb81d2895a47bef341e67464f5018ea0fa673b166c1c0c24bb06cb4cf46231d069678b5dea6d3608b9dbd987f02fb1bb5bc99cb5c536fcee58a0fe4dbd743bd7b2711dc678e8eb1e0cdeee2d499ea8c5420ee4d0d94efcf7f75bdc94644e772cc81ae8b44f65e44a6e9fb8b56025a60d8df59b7768dee4855692e867075c63742a7afb779895ecee45a7dae8e4fbb8952c7c403372ace0baff593882e41d9c9188ea7a069f79afd306e11e2238c7aafb0310aeefba1dcd4409d7bfecfbf6fee52ec9ede0b61f3ba0d7689ed6c4ca309cf2f81a673d80a82c8d32c9c1ac267d1d098adbf8b9c5636dcbb6f837cadf90bce9c59de25b84d366e403cf6cc48bb357cf349419db6c7aad4e845f53e298b8d6aaf4ecc4fb93ced47cd99add4e492270374e7466625bb3084252300ec02e6c8390d7718a2cc569aa793465527130709e9b4b198c20fa1afd130910348ae6a834180942e8e86b684d0e5aeb47b072387c9a3d791cfe6a8485250d805e4c82cca49335d1068996d6920051d9cbd1c792a564b811e2f1284b638d723093c3c36859c96e093dea9227ed28f766255904ed75692c7dabdcc3318ab8837a0e7dce0e965884435fbf78a28d1ea5c168b044e41857f72bc28de6cac9a5fc1ba2b713f7b1f12939f8c2ce8d231c9150ed4c836383ebd78dd229eed38cd77fd54eb00d97d3afb8c07069e92fbf6acfd43c63cfaef9a39d95d448745ac7844b5d65ab59d338100de99640ba1dbe755dac298c4b8f03666d28848c90d0e24b6359895ae278f252d3a1f813e7e9174940684fd6c8b4d428c89d12a7549a4cbf44405e7d8d4712a56a25de299ee22f58f423a907210e92f6b8349abe510e39d621a1b16e4fe877900e7977a3bbbfa8978c5606611791347109875c83e597aed5c2f6b0507d3c1c6d827940cdf003b7f77a104b72959eefe301a5bf43cd3e276c5b9a3cdf46206b80ff67cad41f3e7d50aa7697ce7eac34ebdf11fe17872299e413c441423bc51f6207d2e45adbfbda335cbb0ce4286a15b6a8be6ed36bc4509e511a2f5e6620aa15c9e8fd4ceb33ef598d24a0250d8021f5175c83ba1624d71a5bcb6a4672a2fd926d42fa99a639dee83ce1d4ae69f767f69d6c3cdb7aa13dbae95e98ba93f709ea0f6626461ba699fea7c2e989a9c6808e315b1e5e89f573305acecf9fe42ae7bcd8f2867254c6bdff93fc0003b9a5255abaa807102a2eef03e70775b621887f906518e84f24e25f56eb54dd83e8aec509d3bf545d9e3aae85dbae97d5dfdc421ebdf2605d29f72c6f2e45255c9b53c87731d07b8fa74f7b29dc58b67a076d21d07c9ffa9130f6a7510fa0e68cc0dafd5011475b7bc42fabad46d720e7e14fbebc974ef81a70341d70eee59eff228b86e8ac208b3080d680f8f3bf9e7174800d302a8e8a3fb8f6e8b4c76dfd490786fbf52fb20003acf46b82bf61b609d2b2c48ef98435210e571a368580235e1a7eb6562fc1fdb0fc48a210b769c7201f31247249377e4f058ee8f21cb72b06f89527e10cb686ff899e324a85f99dc67ca88cfb634e5af4f524086e9d668051bf30f757a49fb48435e93f22c161c39cbf3ff5c6f4ad53d64f5a13f137497b76d1a456849762e200bfaa854e99859b10afee858223f272745aae7c31ef191d582cac115cc34a79b8c3a6b3460e8e2b0f4d9cb683af615ce43e658f95224f6caab99291172298d414defffab21d7960d35a4f1866093e58cd95b9ab2f0a50042dd46fe07d30990cfa607b910fb58efeef3e58d0f78ffb60b250e88371f56faefaef3e58f285ffe483d59cffcf3e58cde7c33ed8a3e754641c5f679a8e1aa71a2b052f33b5cdbd129a7c87f3d8f8feb6fe06ee861baef1d6301c68791cae79082eb96d043ec76ff0fd3c84af6504beebbfc1f7d310bea611f8aefd06df8f43f8ae8fc0f7b3fe1a01d05a82a49d1d8806b9daa9067af78078570ca10dbcb205047ed70cac57ba81b54183b183dda4f5521dc83553afdfc702c788007bff3e16fdf66cb90dd03b7e11edd3300b69c68ecf345532478d7cabccb560a340d18fc3ad967eaf5b18b8e28c9a968c46a7e4ff8cf6b3de961e2dd21f9702a87ff30e5baa886ea0af2340e0133300415415d66155ad1f01742ada71ae79808abd37486d7912509b28c0fa3d05bcdae8bda371733c3dba01ed7083069c89a7c735006bd10ecc7a6547ccd1c28083d622297c97c65cb2eb26d5d91da6d103270a9547fcb061edb9f0e4d6a6f18d6502e5a99f09dc3a441171c07df21ac6b902b77273bc10aff63811af688c0a841ce239b50550033ca7223739c03ec82d17d69f4368ab9c6900f18a252270c439e853c9cee02cb111276269e2cc237c23be73f30dd40ff32da8168b652fd9d4e6bac7b946412e1cb6d032917866a1fe2902dd31da331354310d20f2f227e81e51561d08344a8043d33230c25e780ff7b7f9bcd0dfbd23fb3badf0397be60c382b2657e0313e320d3a6b37cd20442dbec18c3b52a588ac07d959136b2df57f45762c86ee41f092a6e1b65a64423b12415a0bca929f5f82eaa213974a5bc59aec2cf90c0fb46e15939d155a67b171e729628ba0bdfc771a6f87a32da210d3a05e553f5869c07db3e5d86e2fcdf25d42ccfad0e67a805b4da4b43aa91b8fd28c415c0cb9918c4ef4572575e17353221b2af02a57055ed488694a9a782b8a6c33531be33395a12459121d3a33fd35b7befc625932ead370df8623b4fa127784c668e9db158095878228e84d47172a62b8b5bd5a84357309c4aca5ef56000fc2068161f41e0be7849c80faa25842b3cd5a748e87599ebe4563143413bc05231fb14ee3c1f054942ec0e2e5fb21d744225f4a0abca9a444353b2e0ccabc0a9480bd7bce1496ccd51f24faa82d3d98f5b209637656ef2907552de3b089a4b2f4529f075900665af461649fb5c1823139d5b00397f29441ae3e22cc315ef270a709d346117f5834317ed762769c0a54ee51969e18bd2b9650e5c3fa273c1d7ef503e5c9fced1e8aecc02b4df4ba0ae835778cc95c42afb6e1d97ef20ab452a8f2e8d59d2c2c8ab149fa40ff388471275969d9925774cecd09e8c1e1f49d0ac9f01ad1c2a6171a11a6a986fe247a8d4dcc925924369f7ebb1baf344479fc61112b03a24042c671f75b4b492c1777ec35015a5a88622e52e0988b98ec98f074ff881d996e9d7678f5165f17cda035a77eee84f33de8ad502612b74980673039d3a20c82febbc5044eee91a5c154300994212440f72544da34b59fc346004f4ae22d46bc39bc07ad9a112ac7f8fa01426bb9006556d712cdee69005124f09c69b14982201e6e654d02e6a2b8d972410a58e3eae7294990f8844517af3c02f11f83fe5f582de9d87b6100d5807ebd64a6e5c5585d58f1d9fea8e641260d4a70d6bd0a6d04e299b7986eaec0918f654d5a02c693272d3bc92815f03c096589894763bd240fdda11ce632ac71b302e07e50e23cb7e9a20b3d876491eb3b1924ae323971e4bfc8ebd15a8c495b697907e2dd05c34e0e663a65d18ae845a4c7d3e9923e74b326a163613baa7b6fb23a02f18d2a6800330ba2c820106c898b154d26812e84da23c6b17728bf3028410573b1c9ba30df73149925dd14a58dd894268e70b7cbb7a9551fe5da2ca265f53bd2a636e196b2541bc4175d1057732f431c61463cd871af828cd8b47b7e843228041bbe79339541376fa6c2b1ecd4d2372a46e382049221db74b3a0fe31e693966c531419b748f1975eebd55ccf9fb2b350ea652ef5ec50ca5ae807baadfd36772a14dcb6d60da56680abd64fedee94069cb67e3354b604cd58fd4b864a5351fae192a1f22d28ed7a7ea89cbbb577f7f9a1f24294fea570a8fc004adb0b6d3649dca29f976566580b8fc3feb8b6f7e65dcdfdfcc7ec2c3edf5a5807d01eee6d9b3b7d096ccba8b3bb53cd203de38ba1b26eb032e39ba132028bc9f861a8cc0fc3325287ca42b128b26f3075a874064cdf1f5c3954ae81e98ec19543e54b60ba71f0c050792a4cd70c1e182adf02d35983ef0f9533300d06df1f2a2f44e981d0a1f20328dd173adc2b946e9c68e722fdd60adc3dbe5aaf91e38ba04be211a64c39c28978b5eb0292740ecf63259f5fb8cae12f4978acc6c55e6e5414499ca434d40aa991b28152c3b28152c3b28152c3b281528fc80687f5d9860ff9917f04ebcb8f607df911ac2f3f8215a578895932542ab432542e48d850392f51cff33c4d7c4ca22eb79de6f31f93a8c447242af111894a7c44a2121f91a8c447242af131894a1c92a0a1725e82560e950b123454ce4bd081a1725e42de1f2ae725f4fda1725ec24287ca05091b2a3f8ed2f7270e950b1236c43d5e7f8b4fbbd3bcfe161f8ff161a0378056ed057fe5e3c91a61eff9c96006dd30d069dc770cf6db58b40ae4a890209f27900c1dbcaaa51b9d38da957282a87a15089567e6118e28ed15909937c1519cb3cf397407f71bf79708782942ab378a862f6cee14897d611f7ac7afda902d6fd3d2ce8ab021dbd7ccebc690e55b9c6b46d2d66cfd224ff11dd20a3e779f19c919ebcae86bb60de770fd77fcc0f1a7e485cc0ce8af92ae2791d4f5e67d9157f2ada0157f3d6dae455af28bc6ee4e233985753b602bbface5ebaf386d46f2c620791bc3d5bf166373972089d340896be6724e9b4b5620498a223b07bbf9d1f82b778fc7457640bdf94518e115282fe6119c3f5f9bc195a19228121bfc99c39329bf24d480e38b212d6778edbfd6cf8ded9cd861ec53cedd3e8e604fcdfd2df653677b8f8fc47e6aee48eca7e2511e2a432d101857e342fa6977d9c896ff79e1f9e3a8e5b7b4c32dafaf6738d8bef8dfb6dc7721fff4c896fbe247b6dcf718f6f60b1338ec73168ce8d767329e9284980c948b30a316382a2f5eade6a8893deb57bbb536bf1be2587fee8b2a3e0fb574565ecbf22331473b0c33a53eb31ac95cbe966e479e052f73a6f3c33287244c383fe44768f837252ed35cb543cf19174a7ca3ea7661d0233f38f2fccac226e82113dd1ea15f98b534e8f6e4bef0331fd3f03b4741e72bcd090cff9e7cae9259289c5b2d9dcfed18f23b54b5958c1b06e82b0dc16ef89a4ae411f2f0f17c5ecd4758e8a3fbfa36d857d121133068b3b4d4b65e60fd3e0eb05d5d2242c688035ffc003cb303514d8811ddc76d3c743d38afadf90d34b4dd62a815f3bcb498c6da5081e5e638729cf785b92b03c60b75a4fbab11b74493c598781e98e7c6815a42789ed98185225c8418b361021ff7dfe62c4b7bc51437e7558779ce234b13dcc8f3df1d858dbcf714db476846a6456d324d1d4fe52226877e9b0cc334d71bdc7708158b904f686d9083dc1c4615b9a41b60a11b6c68fc043ffb3eea7dc95f4fe7e4960ee796f6f0b9d6062db83a023aa8db9d4f62bd23f24befb9f3ebc172fb08f85fb9fcc5d68628b00fb63f7b49373e6324be0e77791aa81b89ef8e3bdf02aedb08c1a226ffe86ec504747699900b7e40b97db148ca030eba734b1bf85c4429a342e7059eb7b9cb1a2fa1b253da5e6ee40f2ea0b6748f2142ad723f80a42210ca049c95b892c0250cf842b8e15cd384f27efe2b8a57326deed51d3e0f51d46c73dfa273e791d83776f7ea0e478df6ba3bddc8a73bdde95ff834c48399edeebed7032647f715a6c9af17faf43316cae3be6e776b5ddd1074c363d0353ff0d0a7623fb6fd16daf91874e36537b4dfefe0763d060dbe77434f1e01ed7e3b5435c2727ccbc7fbdab53b62d1a9427714740f460fd9597c597dda8ed86813d1cc59b817ac0d2ad85afe5766ade5045abfed49e1f351047eea5b29c48260a2204cf1b95cc84194d2c254db2f0c1c517d1ac1ad4f0cafbda6e94f5ad0b74a4ab468e4d81e17a0f35b70bee5b4e492589dca5caf585b7c4eba21dbe29eb1f7e5f8681d7b9d038a95fd0dd2d4661bee47255dc284f5d3bfebb4b30ae9c27a10c890203bcb77e595042267cb4f0573d1e972fe54f917420dd48ab2945cc6d7ac7b4358fb583aabb0281653a173253b62b150c8174254df3d287a8a00fab07918db23c19b07309532a81514c1989de3c3872d2f76dad0f762ace21383e88e7fb839b8239011835c2ddd5d815bf6a05348615b2909186329e4d6ddff2eac77e9792b99958b95166a69ff1e1cda646b8f98af61dc424922841a9a3785fdf72cc1d6eec44aa11d2fec11b0c76fa6241b0558e675be4f4ca6701ac08495ce6c9ada08713739bd71b9b0ee1d8ab1d196008d28ce6d25c12fd9a97800b5f4076cf692e378d9ea40dfe9a06ca335a90e50f75d6302f7d4039b6b0cc87cdb62e1eaa74517eba36460b6a44e1d98180f4415f51e986a9b5559eef4e0df978f787f867bd71fa8f7a0327ac6048e8b07ba50b6590394e5362ed7671fd2745d6877319f438ed285f6162b0fda3c3ed7224842fa79bdb28cc48ace45467d0d02e52aa0c953965678c6e429cbe114adba527f45cb7db1464565b85c57ea8b1660aa746bd16757e058a27b8457606cbc5b5454cf9f86e17926a1294996b7c0df549e679a75c26dc0cd58696a287fcecab114f76387642cf4a5e842c54ae5619b94fbda8b9cc0d12a19334fc7ca3f8191b6f4e017f43e3f922d84325e84ce644d5a72b848542505fa49b14037896d9d0494c114c64ab3f0aa1d72d1d922e5479f00e5a92b00d2825799eaf140f17170928994dc07d26f8399694d82fffb2078359c67b95d9be6cf8473690ff81361eef360fbbbccf31cfbfc1e0eb7bde6b947dbf67fbced23b0ed6357008a94c153beb1d6cb3dd8ed01452cf26c3ecd53706b1c313e5e9aa155ec539dc84a04a1b9c2066b14fd6fedd62d799933e6fac5e42fcdddf15591963b990dc7023dafd41768a3c8dec14c79efdb05f5df6bb7e4c1515ac0957c869e2af82c5ab00d8e5211972afa0ccd9cc2aa1fa78dceae9316425be4e0fb77ae869f7fa70ad141d0b3c2de1023fb54b0c209829def1b5e2545a78004ddeea07c6780326871244d4367774f0b36f06e9905ad1509b607a6507d94c39f8f0e6b4a68e4f6fd843b8a208e8554ca6d9c5fd61e6d61e27d1d7caae266b4c59fae34d04f3600f931f4c528c3ade8026972409d40f572658478e84469560f5af54d60ca52f0b5fc0e5370238f47d582a80db62846505b7a54a0cff1287da309815f8e4acb0e3a724629ba9f4f423f3649d1ecffa9e2b6a213dd32cfce52a416bd52d25cd456f48aa773d72dc5ca1d9d0ca9b80eed64aaff5a457ad14d5f67411acd96832267110d6be099f222c70e1aea0bb7aa66acd069679aa01553ef5a45ef3d00b2e52b353ab6ca548147122e889d515d9738d8fa012435c23adc07c335f26fa355e1ebf16895eea4658703adca293f22015a23e46abe57dfa7d37e6147bb8398f67fa29a3d318893db938ceaf644b9fd0f61af1ed92d44238346058dcea6c9eacefe2437ec69873b862ced9a70dd7d8612b864b787ce53f60ab2f2501f9505f0dd8ad44207a355342b9f0ac574716ea82c171a9f30065fcbaf5dfbafed7fd131563508f9d6dc66ef7ff10b9b70e3bdf3d13bf18d5d6e0ca5ed01754377fc9f425f9819e921ea3bf99d0d74aaf45e88ba53a0b373e8ab34adc3d407dd1aa61edc11fcaebb6eeacd7711f5e291a74479ca6ef9afa50b9b00a2f8926da8fe4dcb79384286b89d2529fd8343bdbdb5a177f80cbf7b2736a1b1d280b82bf06be83b0ce09770834fdbd01ab06023d42d8a35b4bc1757a4f4cb154df4bc0ed86b31ec3dfc41b947b4e16bc39811f45d1f3a972e7c4923e8469b5dbe07ed5fac1e8bcee008769712bcf3a04d68b79d97f713fd4ba24d878dff2a6ff0d48571bbd60fbe8f2dbcc168910e2927bb8e71b37c45fd316ecf19bd7f481e45725582665bc0847179071a8e0abbed366e3ffe0806321319cdcbb168b71dedf61e35fd4be51ade6d8f2d74c88f23fcc70f734fd5a5c35c6dce1790fc13edb6676749b574713960780fe1839e7feaa03fd49f74dd8ebe41caef2407376e4223ce9f234ee36765ed3f4a684a3e1dc67c272d3e6968cd19cb2f4b46dfacbb12ab7b074fc1e54bf298d550179f8a5c72092f889d5548c11908638bce61f957623f39c75b3c49136a45188fea11df6578fed1b2c653b26661e4e911503739a8212e9b4afb13673e72a2a1484bcb5bc43fc7069a5c8372d4bf909677d1597edea76a78977b569225433c2d234b3030dc6ef271bfe611edfd7508ee303a41f0a88e6fb1f3b302aa2dc0bf8ba2d9f0f6a9add39a366d1447b8a511ed7b95a5cd4dbbb19a971e63b7b05fde6369e46c7d53e612213a6de367b6a16f453a396b2e47a739554ba3a1cdf5200a68bef7aa8f8a5b2a2d994965c9451c77a16db7f8bf06ff6bfb6dcbd38d4d658dfc79b765ade816fe8aa6558dee7bec35d7c37304dada28dfd9c2dc52915b6629a22d1fa39dfbb61ccb7819da775f4c90458e489319f8d27481c45719a1c28a68e8df8d7709dfff00575971966795b8100fdfa95be0f7ece58230861925b4f33e6b30e08ea29c4108835789f7e27205ec89e7ae344b20c49e336afd688fb092556e3d7db7dcbac26d51de95fbc9d0fee0ab61c2b7b9c03e3ea72ec39dd368e5730ea4bb736af65ae4dc79dbf86fe19c69c2f854457cf45e65c41b98309f66a35e8a669809d43361fee5f2e84d1560878325b3e0acd18dc3a7274b9841e4a887f8b2c244779bee678330df65a159fbe3fa85058ae48f5ed34799093add2596a494273f7ac60e5fbf52b02afaabc2bee15ba8e67197823ec6d5735c6fe841dc3d64ffed093d543b3b0b7d5f047d5b049d9045a730467e5f44d0a8f3686616f0ff0de1a7df21c7b3e343851136155e867a1b6e0ef494436d3061f4584f09cfa3b4c8489309f8d3670cfe34718e4915e4f412cb145608fee797421bdff2d2a8fd13fafa50b0a580f6a6773bf8364daffa3a102739cef223f29d057a1aac2125b7caf42256126b0980ad99cd53e59510a7c7ce549d0a7b8e5ed787b39e50863c8b45722817d4a89c70cb3f00fabee09a2a722708b69659a31bf551a340097dc071b9a03fa9a42678af3eca03b0d0333df51a9ab7e19b67a4ec073cba7861b17ea60c4009bdd70088e778bac8b468383ef9e788e7d0098f75ccef7f8b049df7e05a794d7fda84e9cb7301bde56770b9a0a066be9d6572c15466aadbe7cdd09ff022ca52751729c64b24d8c92d65a9a2e3b984fec42840779503e5917f00b72cad2e5c58c84335a667a7e94fe412bbe939af3a9c3dbf12cf85da84f14a449cc39e43bc3b645b9a7eb1d5d855d651defe65d3b78d897dcbeeafe85ad5b1ba7d5debabee9b7807a800f758932f5e449acbdbe99788fae86246ab8ce805e81b402d29f16bcbd74ad6dd7863ee9b656fe26fdd583f7743d906f455a08b16cb07686c429e43de5aa42904f3a51574e5ce8255a736d1371b8094f6a461cc26ecd037eea6a09e471a76e202bd0b234d2a4c340b7aa6dc98cef7615e89de05c7115f9823df0747d7ebc3236cce3f3eb6c077367743659564afa8ca64045f424a27d617a5c5886716f8a72d2c2872d2be50f2d28a9c682507695d95e9017eb160557124518947172e2b54a496bc56d2a88c988f9524c3be7aa0952fe52c578a978d0ef000eb8cd79857dd5ec2c1ccf12beddc1c316c7d59e883f271a5a6126a44f16702fdcf4417faaf9cb39d21e70c2a56f2967cd8ee96e6b96b69e7a25a85e78475815928c63ab53dff3354b75f8eea9eda5eecd8942c8e403f1ecff274f4bd13f4f5136481f92fa01cced9141e043297b24b35226ae9a780ededdd8e85476e3b04d865dd223a4b86ce356ea7737b71463b5a764d8eee27b0e6801a6c812e2ef4204dc8a4ee9bfaa5d958a895640659d9d7359101bda0ca7c48dd66a74999849543bcb28eed5e0b6ae31c75641fdbb04094f9e29fb258976b7be4e6cd18fbd343d1c7f5146a47ef9410dad1e215f2a5bb5893bc06d3b2e3fe007e78bbcadcabee1ff7b136f2c21b18ddd2201162d0a29d92c37b4ae61eb6649b74f38905a76da815d9827d36af4f86be4bb88da72ad2b70b9d86ac31e76db1c93e67e5e701fd2589be73b2dd4b5b1bb7d6aed312dae7ed282dd3a6dbf8fce76d949f01d0af9bbdfb0374f1d48b045ef59219ef4fd2b16d79ba772233ccf8052612c685c8c7a0df22b1700bcbdc1fa4d32aa0869218cbb40e865b22493226f225131e9961c2ab8ca4889593f85c13ddd7002a2d1409a19d10babb015aaed641985340e085794b7755457580e59003bd7fa697748ca6323603af73322dba7b458b6f7a7a69e9d1373d687f0f406574a1b344a206e023a6e49b017f2fef86bc5f9e096bcbd414d9b8dd2b8bfeab0b98619d07d25c2d2d7920a5090f69e68b2c2c639b5e04994bd038fc49b732f75b39e5db235a9e1b935b5cb3a9d417fc8733d9e37aa1a40480bad389c604c33213c2ec422b37b8cb97d13ac6b9bab038a26c85b1d9c6361900168778996e27e216fa62f15eda4fed1307268af3ed937fbc6d9f31c0977e684f1d60ec8476df2d76eb66106cda7756e8eba89b52d857d14d69b009e914bb15f656431b4e406ec581952ca595032287d05491dd6a686945f4d91e295ac742377fccef55257e00d0a8474ecf024b76b19087b9e7cc3c5ee28118d23be6018e78c8f23cd4231eb27238de57481c416171b0373879876d0a019da7834d310f28d200d6da824d4bbfbd6adff660a2f853fb4ad80baf2c9dd6319abc49b97c41adddab4668037b80c336c807c02f8e967800222ea034346ec3805716c2a7d3ae3d1e1ab7e5c16d1be20be201165f1bb7eff470eac3e3bfafadf7a0b6f6bf48416dfd7716b5ad77bb2ebc6d17bb146aea181927cdf428a4a96f8bafc9afeea264484fb104bf83b5e787eebccee3f581825a5a5500b9c3dd933c7d9eb59c0714a7a331098efadfd7d1f73fe374d4f0fb3a7ad10235541379611b46ed9003baf9928785415a7a60e5b09662504b193bc569e981115ada18fdb8966ef88d96c624ace4b474bea0a56b052d9d3f82873109bf27cdb4d8036c0a1aff1fe439330963d9cb629c5d22c67b776ddb154914e0910623d4d61378155388b350efcb0a0f17d0dd06406871f9c93d992f62bb235d06b0321797875b285f0bd0ed4652b69c3d511093572e8e6c6a029c362e23a56c922f2076405d26efff995ed4e1e1d665f455153aefa604cab7f9a6842efa2fba4c4a055d762c72fd0a35cecc49b0ee8198cef210f3ba4cad5b0664b685c6305e2709d758a4edaeb1508ac7baee63714f733a19bd639ffdb95f278ab7d99fbf76dbbeed575e03bfb1a50e6c784c03390a73380dd4731a58fcff8d067278198efe3ca88145bfaf81088ad3402979835a170e428fff170d14938d54c6784103b936749c069a380d348ed440844fa7fda19ad7409e03d7ab86a5684bf53d15d4b2242a096a999eca706d67258d7f6ecbcbcca72fb400e2eebe5b281a9ad0067363e88b2d38138fa9be1d471111b197f202f605920d3591972a00da55c742cd5f31da4da572b4daa3c53457edb5dadbf097b9a4dbe68e69bdbea07c6144ba7b68d562341ccd58f37b1419113b9b70a9237d3f0054b76b7b7fd2bff599bb5ef08bc91dfa0a419c4e7bd536bca2b398201a11e536320b042edd82f5cbdbf2a08d18a353595fecc6282200500590b35b9ac760bb7dea2842f6d456b14eab2ba5c7ca70a8599f0fad7548ace412411777cf9acd54c0797c624d14a906bd798466a11fba6bb9553c7fd73b2445746ca7b6746fa7e41a51e612a47503be4b7335b9c5e7509ff995117e9d0e41a2f9354b1499d40d65dd3526c0715ddefd9082923221af0ae6c9196e5f21b892db879c4d54a8d13784d197c0310d7feb476411fccaafd01a5b8c8f4e23ac2071abf6ea52619dfdd00e7ace86fc73d916d89f64ceff4ac47cf8b2b4cae05679015a638cab9cb00badd67819ce187c9a86d770327d59f974500e7dab6c4bb3cd5d4f5eeeaeb7f900aa87d636bd0cbab86833bdc780f330aa0f7888900f26ec12cade333cc203d6321d5c84981971b6e5ba6d64ea07fb8474743fe24cd3d42efe8e84e0d7d594d0d3bdc38dbb5e896624edeefbafea513792d17d01c53af42d3bfe3be8c3df459f6628beab0c91004cf3fbf64e5f418c3a6ce6bef1b982148b9e9680ca9d997fd14f3703fd6c19c012cc59ba102be901e8af2c40b166a7384686be07286eededc334dcca5488182cb7b1f27070cdb22b76a13151d8cdae791f0b253c1c546a7fe692eb76cb112efa68e8b55118f69372ba4f88724e7eb0f2a9894ae5f43f29954fad9c78d830cd3c334719a10b5146c42895739e9fa89c9e3e11a627b60cde7c78c75569164ec9c728564633671a798cc967c25bb3dbb26fd33b65405f2123f29d0b19be24e8e294004238fd92d5adaf106ef2370cddce67c41ec20dde537acb635f392dea02a886f095d3835d1ea8defb39c5e74ad6bfef2847bbfa355c9c54e3f5e9ff89b966dd922901c2fbedfea4e876dd41043759cbf65460f4be1689c81282d1f34989086221727c6e3d8e21e8d43086a0b61f8d09c6f2a13305357f096fd7437e89a66321ab52f5d3754ad1d39852ffb42e58340b0bd6cfd24d14cdc626ea67eb824473b0a081b756649ec984dc0fcdce2a197ba633bb37fb129610bd2bbb3dbb156fc4fbb29bf0f60403452ec2f55a31283e475b9dd26a8f901834a37c99a18c988229a7bf8c5db69ce93d9c14e389be4f77f2d23e2d7dd50976fb7034f1d6ea0a4d112f529ed8b81b69d5a6242cba9dc3e678cd1b3cc792be603f8979f42fc73bb0b8430b429fd35f24017f2b8d95941294a414b79a3c06024d2470dc6a89cb96cb4ddcfec0afbd689f33169d1b20c4b9b685c2773582262a52a1243409b2b52fbccf5d92f5a4626d74e38d8cdc73d969c55fa13b2bbaafa814b11a0bc10eeab59d1e6627fab6fe7eb2d3a32cedb81d7d9beeaa4daf1a05268e8aee70349003e8065d74079512077ad1f7e4f11fecc1696569fa04123024fdee455c347514a42b07b0e346e3f4771290b9c2ea351accca896ed2d867bf5d2d6248fd45d760b5d71d60653cfaa79a1c5b4f0f4437f9d974cfd5c1d6c4d203f6b234bc03cfb0eef4e867c8d9a65bf86cd34d80eaccea083479f43b36dd1ea8859006f0b1ad2c4d548f66d02c09edef026569b07e1043426c0893f899a1f21aa11c95c112dc0795634f43fa73407417ea1de2bdd2b37334b680790ed362cfe916e89ea564ba31278df4621b76c7288aeff4b09a2420fa3e76c18aeecadd67b786009473a643577f36c3ac82391971d2335d1fdfcdce38bbb5dad8a0a6977d2dae9d27df01c7492abdbf6fe1e125ca084f6ce1d640c60f5432d4184fccf1d59549cae93f83a37b4ef4565eda17ffc62efaeb729c979993f785f5976301b5af79abc3e23390e4e8211d87ceb2924e0f65c4cf808947b5bfdc1ae3c9484ef41e4e44dfff3b0af1d05f5f780c4bf21184a571228fc598f1fe39df0084c13c84c1fc9f30740896f49f0843cd040987a13c83950029bdbb4132b2b731f3fe9ff6de04ae896bfd1f3e936d121605230404351871a1ad55e3be50628188556aad806b0b0e8b581565116d4bcb164258448c8a8a0b5ab77a7bfdb5a61a2b95c50db555ab15b0b65a34026ad5caad082890f739331308a35deef2fe7f9ff7ffdee1f3e599b36fcf9c6532df73b64e3e1054a0a5df9fdf550c6d45b8ac812bf66bf4dda0b493aff6b12eed0aebd2b2a9d4ecc6a984ca9854c693461535ab868e774830136fd46d1c6fa1d019723d24432ac4f1de71578cb88f46151c6d3950d95bed9543bd63ecf2e42517e158510f1ca77e85c02130d15420723f10a25cfd00e1a7173fb18a115f13ff68c1cfadcace74a97e4297f05be8f0dd70f818b46c1cd61ea23fa33dfa44016ffd45fe785b44f9daa21807790fcc24c4cf8fd23654a5512785509a07eff7d34ae31f3711fda9beb62b4dc9f662a19ada5abf12e27480f0c4dddfe0bf20a582ef668b9694c2bd1cee6d6d519291ff922d8a30ea13d3d1b18a89b6d20f6ccd7ad296009d1d6d8b4aeea68dce46250f32252c4ffd86d78f309beddb28088c7818814f5563ce7d2afb840a66f88d38577a729940a6a3f9f167a9aa1082b9979c65f247bc910bfa9fb2973fd21631e563e605353bf6df3df06076a9464d3937f21e465155e40b621c7cca743de419737ff7649251ffec691bfd0dbbfe99187a15be42dc6023251d44981b40a5dfc34faef0136c17de1fee878aa07eae195f29d4f4461d23d5762f1dd553f8323d82e03d97d8d1e705a30afd1ebe664ee79850a3657d084cd9e4b65547db42a894b64138b7c41bd48667885a678f96666ba6e9a3040e4b17a50c2c7994da7a6129351bef19d92e534e794a97b0a4952ec19a678356682eb3b3a4b2ad535dd9deb49aad9f3c463bc92fd645116cbd8716e036f0ba39248bdd5b7e85eb4d8ddafb47a6e78e3240bca271cd78d6cd84ad3078371764e0af07f6fc7d4ba49bb6cd7c2ec7bb767fa40db4e565cdd1c74cac68ed902caf5cf644af95f8b48b92663657c90732bc322e6b166918579fdf8e27fa276aecbc6e1a32ead180c4b4d3307fc92c244954f2f893bc9fdadb4286e40ec9a26c9a9c9346e39c8ebbebf5803d23e0bd2951f716ce6e60725ab19b3f4e8b087f7fcde58c7b1aff9beceefd71d4a4225ed642c85b86bfe69e65078a85d05a3d4f27e21db4a8ee648fe38975b5f87736fee926742052aa7d623e5acbaf7862a678150e52d11a3ee558e1703c915fb1177d9257d71e992585d6196fe3a5ba368f5afb8b7b420875f23ea2bedbaa68195798d16a1ef5a3f4c9d336a9d041206d7ada3dc58f72de8326e2af32ba6bfc14e8a61d1e8fa86a11f48bc5191b54b47ea206bbdd6aea5a752f29d960374ef3a99f543c54545c7f98271535990bb524ff93ee4dedc515877954e05567c6fca47d954c2af2b0a316ee75de4214934f7c4aee14e7aa09a1faa196f25313d2c49e88a89814559c5b8fe0a929859e0034a8e411336ad425ea2aa4f49371d346144fa8938e126fe09124bad82b7b7631f1c6a669aae2b69092c741873ec93bdcde784848e75f6214da7cd2fd5afb78ad5a659a4bb6d71edb931899057d2cbf58db8a1ec048152aa0b29f617e8960692eb5ee1972cbed0dbdb76bd1d2dc5cff79ae4f347a718a9d545c6ebb483b232350b3a299fdfaa711ebbb97eef847540184869c6f320d59147d4c0af119ec3e25a84dbff0d2fcf1af01888fbf8f5aa1c19a70198767daf38de31f494e09d5e3edf7aa16fd3827e4e816ec4e3f098c7b80e34d6861c8e7b022a948860ed6e2efa0864499161598c34a712aa675bfdcc635a6ac7f80888154d01aa1eae2f1a8f1da02a2d8de48e86d4245c78a866b4b320e1d129269ea26b350845be0ad4352d2c36e532ddd6b100d765272981d8cb67c9c860235a1dd87c67e733c0af7db4b4aa96fa7d26d52974b541c875629805897893cf61d8fc212b71ce5bf8618bf7aabaad0be0fb498c007ef08414c3365dbde4e79c3346b0de4ff51f7de4575b9b9a5383f9a690da590d3e905fcd4a8e29cfb3efc0a19b23fa121352f79d7a4d2330a936375fbadc4f1dabf11e3c9261e2ec7e043c2572a8d78de33eeb1144604dc3fbb562c88da68eaf741bfe898476ffe04b644c433f82f9080bd624d3dfec2325e205f10459c5424d7a39ba51b4f5c2ae58e2cf9dfe09185d1b214359ea5f81dc523c683263c62e0d1415731c94d3ad796dfc08e1bd20f9e752f2fe5613bde4d76867333515f41a6e15e56e1d2605390488fa3ef95dcc77113fd756abd4d3219c4faa567a121fcb1309e25b7f19666d03b60317df116af6c134fb8add8de5345bc71f728d817d1fd6c13debbbdcdc8cdbbae02c7af517f6ac4396e7cc6cdf17563678eefb2393e5bcae48ea44aee77c6b495ae05acbd2917295b3c32213e5d1a183b3e11bf654bf4676a48a76e39c684d7ce2fa753bdf95c3d2db1aaa7242393ea7c633fad46fdd511a1da945eef2c515379f536ad36d2c40ff0d7f8fc4ff2eadba573c723a9aec94cb9d8f2f42b7a22dd39acf398cdff49f71fdaa5ba7ab3b45bb9d3522df146b1fd1015d313e0563fa785f43e80d9f594569b4fa7a6bc24153feaee394d9958c8c7b109bddcd8f8a93c5b5e6a149e8d53bd9ef2a84c924fad58c2bf95b8278298a294b4f8786758be8a967f9c1a85634903ad4ca948c573da1a434821dfb46c498b77f6396d90512a29778a8cd2273e4349ae0c2b5d3af70d786a5a90c9c9b67d472976fff499307b6c35aec74fec1b7ac62007b149632350d8bdd51db7ff9cc7318ff22eaa448a11eec441985351d5072cf3b4d6c3cdec9acd9692093f8c4c3cbd42da9d70de1a285b89e7b99901e593cb47bd9f0365bf84c3db31e1bfdf6709fff8f023363c09e1570e48cc58a1ef06e127ab20dc0a08f7ea4fe574b8c32d072ba9ef8e74ce0f99319d4fb90be34589993d7008d5682f089177432f9a2ea2aa82675be63de09b19a3cca2c4250f587d7f0dcf1bf13eccade84088903cda6259a7a9ecac566acc9ab88d72152ec5b3bd6b21d4693581358fd292bd32a22645a9ec14635adb8f472926b4b65f483c4aaff95eb0e2637e656ca19c848b703c6e92a7662a582e2b9fb2f58d21211712a5223ba210fab2515aea84175f96488fb3a31423602539f43ef2de74aee530c4373c87faa9ba47cca398ea8204fafdf088725231f46b84579b253057a57efab16b7affa07a0b17ace9a11a3b3c27baf45a30e5fb9d33fb3cbcfad74b5ff480ea257c87293dd6f5c04443d45354999732f07c454694946f47e0b8a00620ae3f29ff5d28ff1c291f629a4355db088a6da6ab366bcbdfe83ded407060a28adeaffc6006553157a2f83284285881e73e91038e6e5e67aa82d6c7f155748def36946f268e0fafba15b0ea7e9db84ce7406ac7273a7271a2fea46326d54310c883b5496a08f576353a1eb220eaabeddef72f24e67f631d63cd0d98af4c4fad8479f90c5c62ddd74c4d0bfba8c81c93e2cb44e228b40435ff7c57fdf811f4632ace47f9b8cd5aa7d23a58256e262e6714e68a1035f773fe5258890c0961de0b7c4de0fde70ec2ba046a7a3ea73cd5503f9371ba0fb3a8efed51ca94e2ac792a2a64bab07c1aaca48299b6533bd12b29a8abc0c483197a58f150c7e73b611d38ba19d7536ff5901c6ecca1972817e1247abd9328f031d86c22f22f1ac80062ebb4921c6aa36d0fcac5be073653bf85102559a0e5a7182d5f7ff19fd5f1b27394543881d696b933368d97cc561593efab4ab2a9992da8d05682a879cbf8b8b5e6415d7c48dcf8fd77244c7b9c82e77b148eed8696fade16a5a8e7cc1e2ff1528d873ed0142c373dfffc982e7b9d67daec14ef8f9f0e7919d5473894793a124a55246e1bba75af9fe9aaffc740ff87e4400f533e6e48cedf8f51427b9ba4897ba2162432f5722bf1f97aa1ae3fe85aff5f41fd7be172f0a28ab5f3547c35f4ec57ea117e7f43cdafe1596ae43efb04a9ec0a336408f2f2f375d4b5c72bfb12ea7700b31ec66f234894e29f1aa59a8cfbf5f5dba9c98f04ccb851b2d9f3506a54dbf83699774d7ea92c81de37a4014a39f43384fb53baa43f5bf4b8c4d29f1e00fd976724e6f480fe77f4901cfc5c620d639e4cd3b4e6a7f829679eccd3f78f16e0770625a07343724c95e79bad4becb39fea2bec8573a929851ec61f6b3f2e93903cacd5db82cefafb13fa04e84793853d85fe25958a11dfa2a32d5803aabbead36eca4de8acb7259cb12696db2a8e3cc39af8f5b33fd544f94e68df1e38a4651c28b4796a6677c4dbe6597e20243051f1e55c265792a39b159fbf4454d1fd6cb92df4b35ddb6f6bc45d1cd31642f1f933743aca3f4a9a634be0fdf7b9b930fd587f24a6e6dd36d3dce96daa80ded368edccb0b5f4ee3eb3f9384da687df7bb50452fd0531a91ecc8e36329aeb590d9afb7931527cf912a3b973af77ed6fd6bd72734d8ff27107b3a719997ac3e1bf30a6264e4ac47ba399e6257f5e3e45b60aafbba32fe12704d7fe8544360fe7b3788a1139c87bdd4e3a9ca9b2fa40177d5f6db2137e46096db3ae692ceb6e1f63cca3ffd141aed86709fa2eced3e493bdaa11b7b66a44406967b832c392af2f24a6d4a75642784d17ff99096017837707d8dc7607d664b551bfbad9dac2fc23cc492af9c229e651f7fb78d74929417ca118e331adb150d1b38187dfc07be906b9969c4aabf684e7c5315031342550e1d4c0dbb24a31217fea90f492db5f870dbf3daaa6e4fe1689f77def66bcafa5f765ef9f52cb983d17e4535323fb45be2cb6ec062bcfda9f4e4d1122da86c9f31ac7f2b6996921293cfcae605385f5b942835c99587c26a741bafc1144e0000d7f2c312d6d44ca34c8e99bcc1eb55ee9cc2f32bbfd86dc1f7e67d46dd1632654e864a6071f28dd48ed8c9c1499365adbf756047ec34aca15139afa6c5427f951efd65a7ecf51b1bb44042605615e1b6613d89f913a8d46deeb15634e39f0f791c384fee39deb9072e119bc57e530c5984ab9ce9f925d41697bd4c382562bf6570cc56d2e21bb91eb2a8e1630f1fa4dc831b1bb6004107ef38df39707dfdf9fc5b869c6e15f43e6dcb1fc7afeceed21596c2e26b0f32632ed2b1209df48fb52d7776bcdf3dfc531f108478585c9bea7bfa49f94eceb26796cee2618b0ce142069a52436286d74ba9cd2a889a4b1613d1b8d5b7c7b86b78da60a06f215bbfa138d55fcbd8261e39d5f22d2fe968e96e7110325bfa66ed8e26bda98d89266d4f5356514b4be65c4dff8fe509ab6d77758dac8748706988ba4d4076b5237dc2c1d02ffcf965a4e2a62ce28c2bfee78651d481fcefede55f3393e3fbc9157a87d6c969235dda9c8261e3e4350134004b4cd19fc06251d2bc49c1aeeaf40f4371ca2749b01192fa31996f7e7a3da42f6eb4c3d1b5badf52429e89271023a5780f7ba9be78bbf5d9d75920a2191fb4c6a6a13a2b22208f750fc36dfa546916c84de6795b15f8625c6a2fe26972073127d2a34bdfbb24ee8b718e17d3520ff8cf6cdfd9ddd969956edd77112ddd4ae27d1d1f7f43974fd32ce59be847e805d0a0542f47bf1150da0776466eedfc69a384033299a39af504ffa1112a1a2afb0ddd4bb913e41e32db541d488f8552264c868443a52b1e634c2e7a862bfbb397ec37ec7af620b6610e4aba3fdb13b7d5a07f8e143fd51da3a24f4a3165623cc59d591a6350c07402ff2c35f8608c356f0ab45489f20439bca31534cdf381009d336ddc5cc3fc59a3a745ca61395eb4d7d2a5b5393dfca7b60d48b2208429d563d00b96d2009b760914aef24e251578408734770a8e332e98a81a85cef7a0f9f31a4c87f8226c95a9c557a93338e03a7510b2b653f4440ea69552494c2ad2a03bd95a7d85edfee569001bec16fcf46bafc745a5503518b4cba81f6b3b61e49ab3390c99971f783314143e8481c8f627b75bbc9ada95de12ea419161a420aee2d32da2dbf1ad16e3db0db4da114624ef1c77b17ad92b5381d2e480b56a3c3058afc46549ea67f224326696dfbf3fed6e7617febf3b8fe084715a5cfd4100a370229dc09942f1c214e92f2abc5a8c5b9c54558afd82e6a376d723243fba80dc2069456294406d113bafd0ed3ed877fb155927b79fcab039021310a1d2f905e25095c77fa1092c02d74b4e0788162cd134857b1fd49fbb4d2b4104f02ef77242d90f125bfe8494fd0147e48ad59526fdab2976e61a15fe77986ecef676d92bb7ca7fe845b5023d1f1bbbedff5d2349927d1f9cb3ef52329680b51ac013d83347644b5c992a0c4b530320a09aa57936048ba65af6279b3f0ac9e0c478a1e0224d59c34af72e5870cc6a5829634f5fab4ddfaf768c51a21f22bd593be482fdc45603f64bb69abb1bda154af8d408ab550c34edcf058ab134a7b2fc727c7e093cdbc74072ca71a3e0a78d0c14cf8d52bfdaddaac8ef386927fb373e870fb073f84406921048fcaa9e7e9d437fd95a206c40f1621e12d0707ef0df8cef51e3c15ebabdbfb692ca7a0e1dfbb85be113f26cd6c346afc1d4fb405a7a86ffa29491c92442e0ede05f49325ae43a3d24d1115ade305dff99c35422cdb8dad4b4a57cd9cdfa575885f3bbfa944b53b43f1ee8b4ccde33d843c89fd5a4b6dd4b7e3701e514932e8755cf1593c6397f76bc66737e35d6766dc09bebd5f37249dba24b41b6ff3b9cf0c5d8aefb12954c514bedbec00541e542cfc8ad77bca789dc6674a3ae5efc52f0c1a816e86146b1a79af6c11de518e5c83b6ee4babd611811ad5b8eb396c7e2e941bd32ab05dd8588b5dd1e9b346c65fd2084db6c536f45842a9e5d79c9a33e5234c5336b51706f9a2723a85de01c5822fd100487713cf3a5dfbdb845fe75e359316ed5c8477ab39903e31a0dc68890d1dbf39e2668729f468d288bbc6b410e81fac182eba8b98f546f85a78b4a15f87cd944a1e3df9fbbe345904227ca51264435d2279fd34d63a3740a3b2ec7077ccc4ef6f4eab0e478dd5f83f8e4d7302874a2b0847f83bd1011a21ebd7e7a02958d73ebfb4834973c4a37f837100d4061bd76726fbfe2d69d5bea8b149552a25855d5ad05861fed8fd6c6ab297360d746588262d6420da74fce68a4aba45f9c103d18ec836673d1985a8de55289aeeb9b6de02ddd952dfceee14f0b34a1846e23eaddebcca49e1588930a3d6c20ba65ac62e1ff0787fba8da65fb3a8d5c2b62bdbcaafbe8d0a65ccf909fa0d248f3a2be2291c083ab5843cbdf636a27a548b06d0b9da74a18353f498691d0f7a47288543032a2f9590a66df5ad161fa1eb3bb852956905b791e92ad9e1263f12dd9016d29f084bfc0a4af71805952a1c6fa2ac8c16191ff7eb22c55a189d363f6e77fc45d183403b353696981e461b35eab6201b8da24783e594e14ba78c58db99fd95b0ae8fd279a78b5af7a71fd00dcf3a9ac56ade0d989d4af0778454f55ede8ea81619757ca050afed8fee0a2c6d50d0febcc651efe22f165113f57a4bcf42a1a483e1178ad7de3da9741b87593eee3e944d93400abd135b3799f37ca464329f4aad77a62635f508535369f52e52723a9fcaa8771e4d12c949a3679d11aa15eeb7d12b6a9e6c18e9727b966f5a703ae1418ac87e050aa76ae45e46a9e4fc593e38d7945d134aab4e270668f0a94b2d96dd0fb4eebefc605f62aa8f7e830cedd980fbfae57952d1233135f930d20cfcc2cf0def7afafda91e6921be041ef971bfd29087c782b49070c2f0a41eda93caafef416d9538ccf3e587a41319e49e82b46a12b5e451eb49076aaa9c60734036759e3c92863578538565a7f9d08f85921d518a2d021831a9cb03bbe337de4d6645fe6398c1faa29b02c51a3c529bb63e6e9f76885bdfaa639a808463f8eb2a2aa59e27251d48537efdc3d15ae4836b282c11d7d060a8a1c164cbb1aef566af16c97a93370f8dc65f91914ddd679d81581cb08b2bf8772593c00509c0e5630811e54692c995c6e7fd3a825f4732e090146a70c0067e10f4e9e57836a27010210d597ec8d4d7e6e11e4d67cb8626371ea28224302b10a04bc58afcfe448b61ecf21977f8733c51bfe621e94c7f1b7c7b4ecd709dd4d69f1f08b37db6d60ea7cdec8f9436fb3b4fa63fa4cb9963a9c308aad297df4f3329fed63246f778ef9dd3eec9e0adda194fa8613dede76139dfec127df612f30e2b2225800a28429d36352b35011d7146a7859c15f4d3b4f5c43aa3701e2b64fd44bd55ba7c79bf86010f026b67dc14354eb95bd57aadf9c6e35b781fe9f483ba5159acbfa4dee5173496564e9ebd7f994dfcbdf029d1fba36d16d5bdefffc19e0f441f4e8327a49f25edf789531734fd34e51dfd5f917e6207cbb166adebd982089ac72ee9788632069fefd0aa35aeb51dbdc39a61672de9d624d23b9130ebc7442a7b17ef66a262530bea1851f2761b997885828eb492031a3bc688fd3b8c8a4d1284739565a9b7847e1a3b07766d1ccf9fe981d2667af0a24fa68578f00664b77c931a22954ce1eb6def09145e4f797a328b6fd1e1447356bad4aebc3d650abf329d909cb7735883d87727d4394d267b8fde490b392798a269e969b8f7d46237d724dbd27a4ee3eec08739a14ec8ce553627981b56cc59a7135dd6e2a760e706c2bf4a237660f36ee89883383689a04fe65de874dba639867b7a1823ce75f48e6b9482229f574ab3b4b3c4a6b5f5ed1def7526e41f727798e562caac6f67c2b45db3c4139aabccdee533d648f7e13c3fe3b0e5fd5a06344e6908ae15b5053e987177cecd1badb79aeb1eb36762b1ba219f273c75ae4337ca46df5b36257e7fbccdaa7bd15316ed5f64f35edd07fe1feef970b09576a0d90484e8a769615bcbf3ae25348a1c7caa43cb96edd7594294c5509b248261e73b4eb408e9d484e4604ab7cb1d34c1b5a5f3ac9998bf97327147982cfe7c42e737749c22a3fbb434a1c5e23bf9a52f8c9d1a51f376a746c8dfc6da80b5824a1140dfe98176665399644f5e885e9bc597668356ecbfc72bd1597ab128b3980d5936843f2f0ca91625f532d84de5a785a8209630de717267c18c74aaae1529af68f9937aaad664413d58f4c6c7c7cea1436f06516f17f172908da5662674baf90ca05e2fea96340287efb4ad192b7650acd1219d84350f37398d6f7171d08bc2f847b5297efc2a35e8eda55cd39627ed299e86919f439f3c85cfac9d24a4a22fac7b7a3d6bcf8f34a4c7abda9cab681ddc033a68d18e9aac0e0decc368e0398da5b435098319add2d6dfb3d22a26e70b0da089970e59692853eb9106db5d3ef38f5934d4123bacb06e295c25c8e9d82a2821ae01d51ab64e5f929432ba391b7fa379fd465349b69e74900c79942a7b79799b4c3134057fafe95165bef64c31c2b19f6242be5c3162988762a8cae3d66f75bfdefbe561bd7fcdf0c7254fbd407bc7654f4ad79d1f13a4511717d4a38da77e3ac57cb398fc8562a8442476c811b3a92ec964ef6a5ea5ba099d356af7b25c3595f3d4f9922f9563830ac96766bc5b7d613a8cb0339b905e50c44b1ba892658abd2d2c372f583b31fdd25a939bb0071e45735c32c50aaf0667b67f16806e8989296e05b01a0e81b99733ccbd7e10213c8b6fc9532d52383688937ad949609a8a79d2bbd878093e8432f524edb6c08cc2438cdbb211af43dc9bda7324628b1e0cb09364b2f745284792e9c2a6e9097960ede5e635bd725c2004d39fac4b9b5dee265b0c69d92dfe1f6ab304ddd25842d5bc44c984efe06f3aa89e367836c453881b7ae4aa076451854fd1786d3ac23b2b8dcbc26fd9a53645bc4fd5d4fa96506825fe27e00feff4af9034f490da0d9352b37d08fa974f30278d93daa9a4c2fed46c9b77fa653075e597bac0726ef7ce18e44028e4021476e89af6ad636932425c10448f1f1f53df931fe5b830f5b27b2d5b4a0fc9256a9e70829d6b47591fe647156aebc5508f76782dea7da721513750358d29e3679bbd2facebe520b173b53068cb3e7fd9c5527f45f78e47a5cdde2130b4b5a07fa88bb56da824979af648d051a7f5859b2444e10f1295be40c2a32e930e29ea312ede05788ebc51c2aef292eb4630798cc864b54aec793ec7d29e5acbef6a3fe0338024c53946558e64904b5d2efba4dca242d6d86e91446a8ff953dfd6f10aaba621698188b7459294e65d006b27bc2b6a30bd9f4c4cb1d60833b7c3f4cc0de7a0314fe1d084be2ac5a3966ab48e2c3776ea02712a473244f396511644bff7fc88cd85eb7e9dc58f8fcbfe1c2a4bd283e2091d185f111f5a34a6d357683bb5f6d36e1df12a53d42e124ef9b7d5412f13a036adab6fb773b5d42caa1c2fc8456fd91544d1bf8d664ae7f74626f7d63a7816ecb0668346ba7eb57d79a21b39b0e9abedb8edd8fab8044f029d1b4d1c9b83ef848b0b66d37cebb80268537dcee2543bd748cb9b75640a28ba60e7daf1a6dd4cf916f11c5c0f6ad6f5b2cc0d8af21d24eb7a1decfc4d3066bc200749e7b92353f6a66f2e49a695b2e55f9c637966ce5a4a8ceebb36429ebbd12b18c7866e84d1d453782fc79509e1176dd1413b9b8e3a7a003d5df7b4f91eddd3667b38d2736497866e06cd441535eb739e5d2f31fb6d75d1290863f98eee648eabb8179bf64983e62b150efb55b99e7cf484bad828b2f84b26f6e7f271ec2184230e4db93759bef5aedcd20bf7ea173222331e6a2c6984be9252d4994a72d9b00796d094b8097568c257af1c82323ae69ad264618e98e3d491c713d0d758e272723ce46e2325c37ae0be5e775a2351b80e733c85df6ab834b55796a64c33bd5df4c4aa7c46abf21db62adfe189a56c7ebed54cfdd448ebce86fa73f30db89f645a3a20fcec45dc9be55beaf76a8babd46e7a5b5a484ab7add95ffd0a4fbf25ef5f88d934420f59eecabeec742f3b01b1dae60e54b836d8c0486dfbe05788c32eff576c4bfdd2027da6d815d6ed4c7e3e3339a43febec397d44c3f6ad71b1d69cd0379246e01eca5449b677f6b63e7b2c3aeb37992de3ee94a96dab0ae663566fee28a9bd8f8352bb952808a19f05750eeb3bc26fdc1d654e01c16ada954951d48c22418e649c65b67299f215f2d648b02e2fb0cc745e6774b9c33c697c3acc0bd497ec8acfb6f04c5b3f6bc1ee4c0f1af1da70cb781cd670d0523b353b71d93503db0e75e47f77676feab3a5c3df27963b9f4ff0d3cad6e701763461caf92ad4078c2711470b75123e1e013e110f935a46815bba62ad4e454d7f0a2360b99ba35a9ad36236bddbb4cd494d25d78b6f69a5a21a9e5e98ccc7dff9b4c9f0575fd2c426929a6183bf60e5e32fb684fd5b0e768c4e9b3b7359936fc94ff2a68efc6eeccc65e82eeb5c96f54f5397bb6924f4b787792ded7f37da75b41dbac3d4d56e6f8befe4e2890da6a936ebd22aee9af5da816d985f849fe25bf4773e9aec1d4daf1ca51c2a787cb0a3596675754838107f61647f50d81fe7bcb294aaab053b5c82b10715c9d5c8de5848f6448aa267480f65beacc56525eaa5e474c1d87dd20c19a204d5e8a0f681117f07a721715c49cfce1bdb6469a7a17f4daf43a6f79eb62b9249e8be35e4b0fd8775bd77b6b92a9225885fd162c6bbf62bb5012a53457d3bcc5d363d157b6ea142044821267a288a6cd1655dda5e5b343e3b8ab07f49d15f22ca574bb515449aa74e4425fdd27132badc5531f453d1658de54d70d92ba951f915065d806ae726c5e7a3897e9a349881f14710fdd246a478f0c7121e696353e4fc7184bcfdfd773e28f9a0cf87ed8bdf5952b204e66e8ad4648da7a2ff57227a6fc052cf97a28d785c36499b5299baae459883cadc7b9ac5bd24e16c3fed21153c5eb6330a664ff21497ce1954d1dfa5368494b86b99ab95ad354984f7f09ed74dcb709d5ec67b14f1f4a2ef78f49783dd2bee9becabef5fd66948ba8d325ce92f5f4d4ee47d895aa3a632ef217c2a0675251de67702bcf7383fe2987bd8d8e57662ef1af7081b8da8d532bb2bfb06af1509bfcef7e862360fc959f82dad50786b197e7bc48cf5b51473c7f7f38b863ab8a9725c8c083fc773ab8252cea5a945684b39df4f84f0fe4eccdb5d5770d1715cf0f97513923a77acc2bf55e57e73e443bd6c2c3a5a90498dbd29f41ddfb33fe1267a6cf610d988347e1dfb7a663a9e57f4f7247c4ef52ec23bb0ef60f7040dd5ee6b0d6b20fcacdf7bba846d34e1dd8c1a8dbab35bfcf08e7e1392f0eee21b6fe698989d838c02948cd3d7870827e94f3e361b9e1480fe0ad168d1a38fbdb4d4cfa705caba3d881830ec1cb6495a3d24dde916d3bf91f63914c34f924fc4a1a5a2a2562f2d0eef50e6e05358e5af2acc1850f6c5b69e65469143729b73639e5154f35a655e5b70cada545942defc3c26a7e33438a78ecb4b1af119eeb805bcaf789f2b4f2cd46ae507ef1e7e70b4e178cbe936ef6f9919c6de60afdb5e8f32a9759221192fa38cda51ec6e4445829d51f8c93910ea08b1ed87274f084f9846889fb18467d846728ed9235043263963db8867de1b287d05e648c29348c2c8f6bb9c31ddc1f43fe28c59769249bec172c696d1b53237ad5a4230bc317ca2e4fa6fd28c3a626bbd5e88f0d3984cf765bb159f7f8a145f7f8a5c6bbf502be42da82dc4fbd1fcbf6126aba2a885f73b0caa47039e6350adf3b130a8b6a0df67505dd058f64d285b4cf5601854a9893483ea9185415533d58a4175ff2f32a842e8eff0ef776550759c0c7b9e6550d1f55214e0d5dab186ffe65f6650ddef6050ddff7f9941757f41d40b1854f7ffcf32a876b9fe2bfca95b515df853b368fed4dd17f2a7caae7abd883f8535e66833bbaa0ef857f953d6b1c8fdfe15fe141dc3232606a47a317fcabab42c7f8aeea9eaaf3dc79f0a78317fca3a95a2717fc09fa2e38daa7c8e3f15f062fe54e773e733f239fed4c64efed416f41c7fea32e64f59851f66cd9f5af387fca932c7e7f8533a2bfe94d4f67d532acd9fcaaf7f3fc6a1a8fb7f843fc53cf1595ed739fc29a6d77993cb9f2af0c5bbeef82660fe14732f48b0e64fedb0e64f31e3dfb43fe64f31b1f45f8ef953ccfded6556fca98d7f993ff533c39f829a67faf337f6a7532e983f2561f9532d88bec7aca8f5e42e0b479697f0cf7064db42a8e47f9949b5fdd9009a3fc27ccd1ef0b22bfb962f95e5a68f2f50d37a3a8f6652312d30a98349c5983d6826d575999afe6efa1d2b26151d76e0bbdecd05fef43eacb31926d59eae4c2ae6edce449a4945a78afab34c2a26572f7730a9e4ccd7837f894925e9c2a462fa0d19cba4a2733af02d0e938a7966fb7098544cbf25c5bfedb14caa6e7fc0a422582695c38b98549b7deecda3f23b98543f6ff5609954d7ff4526d50f7f814935ed392655d47f8249157494786397ebf262afec309a471540f3a8e6d33caa369647e5c8e1513df8a7785413383caa299807c5acc476606ddf9fde9547b59ce151e5ec627854a7052fe251316dfcc48a47757d91358f8a717ffca73caaf57f8d4775ac0b8f6af69ff0a8fefe9fe051e5d03caad9ff091ed5b017f2a878899847b5333ce6d1af3f5af3a878899d3c2a5ee23fc7a38a38f86ff3a8e8bea6def98f785469233a795403d83eb948ed956dea26dc526cbfde8778e3ec518b7de827ff511e159d3b6db77f994745872725ff3c8f6a13e651e5d6f794a8a9d52fe251e9d35fc8a3cabbd2ae4fb7e6516df3b1f0a82efeb8e777795438362b1ed5ea0e1e95eb531e05bd109560e1516dcdf1cee8f8b5d0eb775854cb318b6a8f76bef1b60dc3a16aeb69c5a14a7e4c73a8be28bd6db3c32ccc1ef66327836a0d694aff3306153d53c30c2ae684bbed94731706d5643cd35d38cec2a07af53906151d1e33a898f08510fe050caaeecf31a8ac6788c91b29372e832a8661505576615031e3d7df680615ad0bea5ffe8c43d439e393af855907cda0baf72f30a83ae329caa57a320caa42016650ad717e11836a338f195ff70e548c8095e4d0fba864dd9e2e0caa37ab0bfce8df6d3c5fc411b14a2f8372c70caaf2119841758f615031f3911fff7ae97d522957864175ef5f62505de8f81ab02809ca4f33a8eefd1506153de7f19771195456f1ad84f27530a8f4e8771854c7690695a3207001ac4e6ea91906152ff1abedde8f180655678cc971304fc10caa3e0c836ac7d74c4dd7767b9e41d5194abe0cf4e32f30a8b6a01731a8accaf31ed4cf1f31a898f9a0e8390655f98b19549d31a3484a66c5a0ca5a8719545a5f86415560db8392d9f7c066864175ef9f665075a614fa2ed5836150dd9b7b795d71fa4c0b83eaca6354982df84b0c2aabf69803cf771706d5bd99c582cd3e5bb79842d6dc7a017feafbcddf322d76eab7df7d369819fa4c863f859f8de7f95356e59961cd9f3af44ff0a7acf423f0dfe14fb1fd1d531f017f953ff58a357fca8ffe5df7d68bf85338f61236f6a2d7ff127f8a7e2e4f5f7f9e3f65a56faf71f9535bd05fe74f59b5ffb87f8e3f65d5bea35ec89f62ca39c5b31ceb8d4680b5a6aa40f17921c2bca6922efc29abf61bfe97f9533f75f2a7ca7d9fe34f95cde45715b0ebbcb3983bd5992acd9fa235d7f38c853f55883af9539db9f119fc62fed4ad28963f351ff3a7987577f871863fb505fd2e7faa0af3a7acf45d61b2b7f0a72ceb6e1feac5fc29abf6965bf3a72ce1cade4df8fa42229547a677c97f6f980361e6547edb3d5883ddef644ee9059839f5eb7dcc42c2ec11d1e3c0dbf83bf3e1e9aea72604e8ea0b42e9b700b6ee33e79dc45c8f1dd9bb2fba2f3ef40d668ce85b1e77bf904ef346e69222f7c5e2d0de5bdda753018d6867477ed06b63efcef3157ab68d9e77b293c1329a007fbabd08c7a8c9def4cda76a6ad363ab5045e385373b7923ccd95c9dae3ee6804b6d334f19ad992aec6e62831edbec2e65cac2fe1e7946f4d82bfd707a6bdca69b847f9626b5006a41d688144502fcbd87d8bd8c39010ca7e0468a50fe793df9a83bd554cfb89663d6083e2b59c89edb6ed09ce231ac02b666c67aa53b9de78fd298a564b260f9e63067eabd0a815eb40c9f8ddb7a1a594e5780d51f9ffab502e1932f2ce7bee213263acf02c1bf582826609f429ea96f5d2b3ee302eef9109ad7624cf163d24bfea6c5e8bea8f7f2c056cc08c0cc8019cdc18fe73c7ae7fe823b91b717d51cd43db8c81f2f425e5943d253a61001b96f48a652628988ffca4944519fdaf2315f27919c7cf6a260badd62f7d0e2f4425e6e5e610e09fd8b3b3ab7a1f8643a9f7a720515a6cb50717a7f58cf913ed1157b3433346c79bdbc729de8b7f64fe9d64b0ab2309814472448b14b82544569e36c117f6c3652d9ce36da2d8ecc6042d624315ca126238410d32126ec2204df456e2d4e5fa7520cdd45f89e74b397a042810451719f120372c5a18b32aa2c6b1bcd3cdf3d9b95924d3ec5dabd2aac4bde5bf139f2389c264f71a405e9cc3875c2cfc262b8b56ad2fb3bdfe77d70ebbd498b772ee62dc1ac86019833c5e8a5d62b57d560b7d862f67979a411efe7e811a5bf2ae427c9da42cad3a4df8bf886e63b48d9dc489fdcdd98d796dfb696da043651fbd0d87aa19a9249f9ae4594930956d515a837b6d9b61051eecd88ea750a51599588da20a67d2b47d7a0711ad021f583d2b85017f44a11fe428a5a7387875d898bd259cd3c9340dc8e6d857e948b09cd5f2d397d4cdff023d63c7c12af1ced582885bcb5b9d079ab16f1952b5d08e56f90b74419c1e6ad970b6158f809a272c5229c4a4b48ef7d94b38c30dca940a68de2764a2a166177fd111724a9573eac4014ea26a00ac5885a07799d4b121a757e397336725bc8831b1af5f5522ae80e6a0b696b69349a6e45b553eebf21d3d23dad296ad347a75a6b8d20378b5bef1a4d31bf81dd4da3c9966c097a963239c8f8afe558a7fedfcb71efe5c18f236f5b9eabc0d619cdcc737530e770d66f83b16eb4cdd4ff88b5a33cd9d0f40b4a19fc2047fa63233fb7c22b0befc44a096ac5d2906bfcd502bfbce5091adf0b3d85c21f72bad918b2f722622a1170689fa17e17f24aaf3df169d900963b8a4e139e52d2c9ac1795f1f1fb40fc959494fc8eef96351a15934d3e8675be8421e431ba9ea3ece54b347c70cad690fd379f69ec9e8ff2e3105a2814249516a68f6e35f45c8788290da5867a5fe28713fa0201b13fdb7eaa2ac074826c4e0a51a5291fdf8332482b6da004ca15b5a84eabbff6943ff1b89b5084f36e87cff6d057fdc457deae43cb1384ea409950383b475f30010d5f8f771e7e19fdb0fa9df56dce63fd9593e7127ab113a2c2ab1c64a3f03901fe1159a2831bd64d3ab8213523c5979892f28670ea5823bedb9f2d99ea683444ad23765f1c56d68f2d77f261c2530fe59692506efc857f60134f2afa8e5fa81d858a45553e4ad96364a8fa09e1bc180a5ad1f2443f5229dcebb3bb34928d21f42053f625a56eda51adca75f761a67ab75409e9482e4a6174a2024964af5605ec30e2bd5b093fa17a6229be93a87b97daabed4b85ea1d91de32c2afcd9998ac0af0886c0b4972d6579244c3eae3ce2db995b99ab48f5cda720db54282821e294eee8a5edcb378b2fb1a1bb2a0a5d2b448faae0d4f5f45f20ca55308c3c1df90f2fd7ba825cfa051f30b57778735040f1948334f49fecc3364f8f3a5d784bc920da33653094f616d982af32ec0e1c76dc7312ae3ee21431384ce955ec371f279ca2613e24987e80d9a7a88e11e4f69730d6279c2d3570b7947371c2ea01aeb11de3779dc66fc7bb3f406c96bcc533655a25499be52c03b5ad098230d11f0127294b678df650dcfa0a985780a78fa99b6bc7e05473bf75d5e2fad06ffebe9723db98d941ffc8294da7ac230ba9ef0de365e54e613bb59b9229818dfed3bd58c0d06f3bbc830fa2932c47d8494ab4fa0f602e5387fc2d03dcae77281a1db4355aab372d4056418de44786fb8b6c130fa0641f81a56bfe343ad682294dd2eaaa423fa2025791829337ef6512e8576d794f8188c1791a1a40419b44f7c085feaf14524fdd20995ac371cae44a30a0c4baf104ab242a5975541c86ad528527a6524df501f8598fddca7adbd94775828957d89cee751734891b45a8634d952a7c7fc1ff2cee60993f323db9c4f6fa082bfb3933625a291788fe8685744e5dc15d8aba9f4bb02fccdb6b4a90939fa53820a8154ab86f235c1fceda8d673df9ccc01e997b50bb43a7fcab6ba4fae3f655fdd47e36f92553f2540cb7ed81f9c79ddb83f735529251323a9568b7e309a7a8bdb715ef02ed34921336449b2fcc85539a737ec88906a6bcd544035ca4d933a5de1cfcf95868c405b8b756a2aad8597abd667349aa9ac1684f75f4d0a3a9a218d9e8dbcb49b8a4dbdc4ed84dff95293084becebba51e8ffe93de99344d44feb719c2d8dee2e0f4a937c97d74f4b6d90f0a44f9af07ed2c4619ed45861c6bb49f72b70dc076e2e904fa3d6dc66eca735b9434e83d57ca9bf33126669fc0c19953e52d287a42657dbe9858ff86e5ae829ce55c2fc0609366d3354d623a5d315783eabd1b45c7a1ffd5c65c86da44f4c40bb2b744c2e56b7e0dda7335aa0cf9608f4898d78f7e98c6a01e6ae2a0fed455e05de9a91fbdc84642bfe424019b40ba54ca6320f23bd1889c76beff8185c6e23437d33626227d441465caf7a5283ced2f5aa97c188f01389705ab8fea1256c45c7a5d183d1c42ff4b26abe7dcafc5cfbb4147f13121dd727ba22530e5976dea8acd5a2dee56c0ed35be8bdab5bd07af88fcf0df128daada6dbac7234c23111ea14ff5387c1ce45dc7edeb82312a7d3e6dc72d8ba07293f6c7d8aed8c9adffacb51db0cfd651eb12346fa3d8c817df557457ce90f8d7ce98d277c436310323c0946d299957c65dc6fc46aa1b4ef48b45a240daa8219473391d27fb3ae3cf7ec6a7d9f51885adf4c18eaab884d2669601f1813a42a8f08bc8a958a403bdc870ca3dea9e946ad158b95e0c7f557aae789658687b50495d22d5e5f50890e643c5d4d9d2605e5eacafd98553eccf474db810dcad287c4d30dfa82d388aa2617ef88d248a4e006bae2951414e894e49490abafec83f4ed00e746bee1612561785845e8839da02e3c77510e2778741a79dd165bd2786b9f893cd1ae515f905d5fadc71a73a11edaf8119f3a51cf930a90c0758ba1200329ab1e22c3b6d5e8529ec1fb3b88b39a3054d5a1634618f95aa5a05386ea27089e7671058230e2f1e46d1fe53ae8ffe169b7f84ff14f31e2bc607365e9aa8b540fbe58595b4b383e38ada3f2cf84e29aa2b2c905fa822ac82b7581747635260551bdf6a215db0f6c3078ff4c3cd9f074f5699da391d29e11e0ef6edc32f12fa990e393a484cef1595228055d1c2f14aa0c21dd09e5badd48d9f77fd0fc1ce56b358432e636a1bc2a24566c1fb5d130ea67e2f88669a5d4e633884e378d9c87d33dad9b6d1c2f7ee443d7466e90d14d206ec5dfb628af68607e4a899b11c42f1e2f16aa94eb8510632d618999981c6154dec6e66454592aed26859cd59a9509ed68762d2e25e5c017504838834e4d47be4cb7e5970f09832603e90b60c6f93d39bd2df882739bf383d5296a4d80f4c94768f6434a448ec1bf02a6fc8dea7b82470985b3f4d59e7c4d36fef66f2d496d59889475109f48142cdd5085a8d745a85ced7aca80edf4a211b8757744b7b90695c2cc69fd99f614f5d9524a7081f7749b32bd12190e3f2494ddaf809e98f9fa1b7d106e9b7fe8f4c17d61340e30e69f84fe71c31544b94ad03f745f14419fb9ee0a32b949dadb82dbde29d1ad574bfc31239ed29d9c62ef4fa59c9c426d104c913e69677aaa297a4d208c0295d0660756077c9a7f12fab38db711e52641a00781ebd5d33e93a8a975b791c9958951afab3713ea25466a768d0db55e2cc2cf8489242f60cd773219bafdacc23d9af2b59f0943469d8ad5ff094933472627e4acc86afbcc243c7199d1857a11a30b7faebd4b8c269b131718cdbff44f69b2a6b45393977f4339319a4c3ca0d69f1941b7700a3986d1a7589d53316871efbd4899f75095bbda50026d9e51a5c29a1cabf32c35e9ceb4625d4e1948f7d66f3689a438f7be98cf8904bdb72a679991458f95e1820e7d335437d231e25116b7a421a3da27c1684a3dd38c677ff83ba31f72938c6ee950a64efdcdaca7f5b7986cf451ae87f056fa9ba29e566aa5bf62467f0d89b01eda463a2bef804b2d94ab07df8672108ba89ec20152dd6db374ac2b4af123de342c2d8531b8db20a9735fa40f31f3a5054e48bf6205f22e005d3e0ea362f6e3fef82483c7fd34ea943bfa154f90a39f74d4693355b8a7df5becf908585b53023c0c413fc00c4ba51cf52bcc202a7df2f3a41b609c9827a24bab4c3fcc945678c52756176d54c63421cab17b9fcebc6c2da59f1489b87f972765f3429ee3a9ce6784ea21e6c5ea4c3d841734fe3ba25302898073ce6daee5ea61fbe04959cb3c292642f82d76c56e29816dae52ac73f3489887439f2b823e37edac7b5248a00c9f430a73f3f555f0147923989f475412b9a9d4a6bb282837c55f724ae35fe24cf811013b229242da9ca4c1246168fc0a1d776a585d992b4cfbc8b50566aa9e04731640e799e6bc45f8bd86d206f47ef49b043caf3ebd73e8933e6e90226596a5260209a79c58dd2bf884107a3fc6b256c2d34de467c64fc0f03cea5485088ff7f9db943d4f2243f035149463e8730e51bea324c592d7548519ae88d63675b5006bbed33665df934859790329375c00ed008d1b550612e6734157d0b063ca982c64ead5bd39e0d80c4b7a8d6e308f5f05fda4df3365cf2c9412087d669e2ba373ef42afe88f77f180b8c510b733c45d77a123cefc634c7f67d09df5b9b9da942fd97058b3226f7e31d683f3a5f8e96834621b8f63259a7179ab8a356ae87d7e928eca30e339cef0829b067cf28ce4a73623ee5140cf0e61795a77bd34c5ff7c29731fababc5ae01e761ee21417acd6a74e8b0a9b7a4dd6443ded2d70f44230fa5046efa167aba8dd0d3d94a10f443927af330e8ed4c8557da4d1249bbbe3e043dc9101e02bdd8b8f0a75a83492cdc1ff1a569fbc2cfa67dcd9c7fa1dfe0841c23cbd34ead959275e607b036863917da5d77368f507ff52b7e732025e1c979bb9a379a44c9527593f995ed5f9dd20beb0815f4a98705fa2a19b1e35689ec6cde5958d94c92fd90b73c316580dfc091db9505f56876ae63941bfe855c54ed63a8aea6df826f2a1f4fd6f8ccbf24f4f728c26f2554fe71726734bbd4b213c6d8f3f88b16fdcc463e355388705f804fb4a0cfcea05b2df45a7e64a1b68e3f5ebbd7a710d620301f945d41b08e0a4e72965e1111cbf36ed2dfbae2bc6852f5eb1ff31bf37686137ed773f197afb02253a7f89eed480dd7023e03049f0082cf5891217c1e4efdc7d1393807f9dfe447e9b5649977813ec417c5f684beb3c8c394a28ef8c9929be44b6e90dbafd4d4c57a744caddbee463af1f1ba59d9f336c265af28936cbf0bbdb393d9002b4bc2b7d138f8a410d6b4a3f93757e338bd65fac3cee8873c8fa8b5a2d89e49328f88a4e024277d908888ce9b246bcbfd215798dadeb321f754eea6e37145cec8b2d3022e8b47548a3a4976c8f8db00dc923b16e2771d42be34b3d92cad6ae4b7e5ea0b4622652249e8832af9d7735b5c70e90ccd32226580becf4844658b9d977f24edd6cd67dc367cb60cf56385e4d3e3b9f8ac6d9efd85b61069b79a8f09f5fac93a3f7c46329577d82517fae0c32e9beaf48db042f1a3d276a37c92b8884f6f96ecd3a94d054f5aa3ab52d4d26e8f3e5e3f595aa0c56f4990b01b7d9e10ffa1735bf00d67fc5d3236e7a651ce0f514a051ebd08ffa4106942fbc7c3d26638b5e47de43c3ff7ad5c2a47dc33aec805a52653af97d9eac9b256eacdf66ed8b794ff1d9445c93fa1c2bd849bb01ba2ce4709dcc423117e7b21d96e28e84628ab1fd2f3f61ff20c30cf399f4704367c232d90217d4222ccf2379dd7f951b9876d72fd3493a98cc336509e044b791c49cb793744607e51e3ace2cc7d98c12f305c7582391225fa0db9912305ca8db548b9f02aa11c8360862c26fc8c7a59029da2f4ea05580d92c45a21a4aa4e99ac6f4c44a635c2fb2609f950dae482ce1e33d45712443df6fb7763ee455873c8a07dae7af2f17ba6b5627df505fe5ae1f55c8dfae6a66bb2f379b82e615e510ae38e71e23f3cc85ca366f2d81bb5a5d83e65f2f2632647d19d1de4a163267b515d2dcc93741760a652508724e798f61b5c24519b0aebda975cd3df9985661fb29c4783cf114df1871caaf5e2357c7ca2a8573a354788c60b927d18bd46fb5079d24c37a10059de135b87f94e88c350ef08117e27ed952ebadd193274172a278a88a291cb07d48a1e1c48ef77374bd31912095f949a7c074e8d6614333c899e38e57ba153c2f787dbd3e74fbe8c325ad95f7b9eb68550924634dccf2da8d247a8ab5b864f4f24fc6a4bd9b2b129d5bcb05cc99b714ad627615b8779f4c2303e055dc3148ca6bf9f89dd48e1d05e69de99bd7f61ce6685de1a6209b5c7b1402edd1b115b3efd176afc4e9f39a30f875718f72ee58f11e3f987bf52c8272c3960c24ed29b7a46b4d2fe0c7b174fd2dc3476cd2712bc289f65395df3b9254ce1d088b644281ce17fc0bcf29f02143de16e9ac2a911fd344de10cf7cb1532f8bfcafdeed76113ee6e993fa1f6eb08f7075f2f716ffc3ac1bd2d351912418b279acd9f01ae01867b9bcde9806f017b7ccce6fd80d3800f01f75566f32c90aac5d1514b23c2e511b1b131b11e3668aeafdfa420f57cb9dfd2f88858b9ffe2b0b885f26931e11188bd2ceeb40b7618278f5e1a1d2f4f088b8d873b08149bb02cfe85fe16c7c42c43366c3c094b17862d0d5f0c295b05c25a1a131b210f4f58b26c9cdc33cede06bd1e961017211fbad273e8b0518b57be2cf79bfe7a87099c516c44d45ccfa1c3c3e70ff28c1b2c9f68e5f3f75cece92c44fe9ef320cfc8c12fcbffd019c7e03204d1f5cd9593df7ab1bd457e37fd8fdd77bdf6c7ee455718b98f95475859c6caef587995957758f98895a892916256bab052ceca311cb30fc73c9995d359b98c952b5999c9ca35ac3cc23197b1f20c2bef70cc8f38e6668e195575358b396607d6ecc2ca411cf3508e790cc7ecc3314fe698a773ccb338e6508e7921c7bcacaa6b7daee4989339e64c8ed9e17b363e560ee2988772cc6338661f8e7932c73c9d639ec53187b272212b9339e64c56ae61e5e71cf3115696b1f22ac75cc331dfe1981f71cccd1c3362f55ccc4a39c73c88631eca318fe1987d38e6c91cf3748e7916c71cca312f64e532566672cc6b38e68d1c7364fc503996fed3e5f1114b96c5c486c54647c461fb6172c67d382b95ac1cc1ca91ac1cc5cad18c8ceb882f2e6c0574c7d0f145c7418f1c47d726b8b3f18675f80b8b8d4a5812b1343eeed5d888f884d8a5f215618b13222cfec32cfe873fe7dfda6364189bbf30367f616cfec2d8fc8559f2d711cfdb2fce1f1b4f1c1b4f1c1b4f1c1b4f9c259e31ac1ccbca614359398ca98f3196746676d6abfcf5b0c58b23626977365c3c1b2e9e09f77e446c0c76981c161bfe4a62742ce4105ba1d830b91cdbcf60aa282c3c3c36220ef21cb78cb17f3b3e8c7a4fbe2c861efdc01cc5daab17c72c085bdce910cfdacf5c181b11166e653f94b57f5166e10275a0dd411d681937f4d5c86538dd2e95f86a646cd89208ab6ca038365c577f0885b1e9f9272ca5e2a36396feb116807f369eb0e1bf17ae6b005007c6ff08568e64e528568e66cb31fc45f98b43716cf838367c1c1b3e8e0d1f67093f86956359396c282b8731f5c5c613cfc613cfc613cfc6b36f0c3bceb2b29995f2b1ecf3cacac9ac3c3d8e7d7e5973fba83f960ba099dfa3db83a997c8b084c5f1f2c888786aa19579714c58b8b57b5c3c4c9b687334a840142850f4d2b8f8d804baca69fb25d17161ec54af3332b882e5833c17270c86c9d638b9951f9c00d42e15b32202ab7458bcdc73e898c52b87c817472c1d87e7452f638d1e475bbe0cadc0d88587c5878d63e75f717444e33c8785bf1c09b1c5e33bb7b94397b013404e5abf970fba60ff5e465e947a97f43b2b0ffd777ef5dff955d7f9ce7fe7575dcdffb7cfafa09318af1cb6c4cfaa3b7a33215e1e13295f12b124267695bd0dd38dbc3dfbedd75553a732fe954b42acfcc7ad8a7b376225ac89293c1e87cb17ac92d3ab5acfc5e1f2c4e8f885782d8997a15dfaa317a41bb4342e61190ceef1b88f5a158763c3718c93870d9de88957b861c358391c4b0f4e8cffe225628480632db436f078ff66225617f9cf78e6ff659f2b4733edf9841d57a7b3e6dbe3197994959b2730f229eb6f086b064d41048007e0f785fa78ed732404880024400c90006c00b6003bf0630fe806e80e70406bf88e207b407829c89e209d00ce702f03b8f45d835c01bd006e0077406f401f405f801ce001e8075000fa033c0103000301830083015e8097002f035e010c01bc0a180a1806180e50024600460246014603c600c602c601c60326002602bc01af017c20af2ac8e72490af83f405e907d21fcaaa064c060400a600de004c054c0304829f3701d3016f0166403dbc0d7226b805411cc1801030cf02cc06cc01f35cc03cc07cc03b60f72e201410065800a000e18008708f0444011602a2c16e11e03dc062c012c052400c6019b82f07c402e200f160970058014804ac84165e05781ff001e0434012e023874de86340322005900a4803a443180d2003a085f832013a4016201b9003c805ac06e401f05f3e60edd04d480f5807f7eb011b0005808d804d10d7664021600b602b601b603ba008b003b013fc7d02d805d80dd803d80bf6fb009f02f603fe06f80cf077c001c0ff003e077f5f000e020c802f0187c0fe30c0083802f80a7014500cf81a700c500228059401ca01c70127002701a700a70115803380b38073806f00df02ce032e002e02be035c025c067c0fb8d2174f8dd6c0f4620daa065c05fc003574adef26f423dcff04b80eb8016df033c81af07f13700b6002dc06d402ea00f5803b80bb807b805f00f7010f000f01bf021e011a00ff00fc06780c68043c0134019a012d80a780678056401ba01d60ee4b770033d8aee46d46f49fce9a67e27f57e69bcdb7008f00ed00bb77cce65e8041803180c9805980858095804c4011e0734009e05bc035c01dc01380e85db3d9193000300ae00f08064402560032003e8039805840166023600fe04bc071c077801ac043402bc026d46c76018c02a48799cdeb00fe703f00100c88047c04580dd802d80f3802380db8021801fe6f837c0c10c07d4f802f6026a03f201c100f380eb80ab8076805382f8034001300c1808580f701ab01fb016580ab80fb00310579063c0608c2cde63e20c70166002201a9808d80cf0127018f001700556cb8db009f08b33910f00e6001600d600fe021a05b24e40550c2ba79c37d157b8fdd4bc07c1950071812056503b9089001780ab001bb5e518cdf87567162390fecb30047001bc1ee6064a77b1dd88d8a60b08005b643c883d5a37eac54d012af58de4d8c0e87e981f744f948f98001722bab0913e56318dfb05859b600e6161e13e541aa1933df7d7be69bd3df1dfe3bf6c3de1d69190f3dfa052c85057774b87c59586c74fcaa7eacfd8a776171b5e2dd0509911e1303836042c35eafe2d45f9d1e1bb328828235fef0a1c3c6befa5ec4d2f0d855f111ef26c6c4be17b72c8c8ae8b07a252e3e6c6978d8e298a5701bfedeab8ba317bc1a1e1b0d8bb6b857f14f03432836de4130b3f10c1fccbcdca7f345bf09c1cb3b58a825ca3dfafdc7d28f8c8d88888d8f897b3506e6634be36357e14cf883e58c996fbe6d29e70be65d9d59b49a4fad9c1916f7de7f385ff110651c5b33092b67c62c9b1e1b1d831b07d7937c71745cfcd480b767be1bf0f6bb7ed3a6cf9c3d48be6ca56fc4e2b05511e1383353c17d6ec2cae971b101e1f3e583e58351bf95a0ab803eacf45fd5691ec002db6133cf0a4300a11f30580198c722f0fd4e33be9fc7bacfb1c2ba0fb14ec345f0787cb804ec25e45ca23fb9c87ff312ff2f5f2fa740df9fcbc0dbea1ee36172e7bd2fb8cd63dd83412e60ef3f0379f02fc03a5e2e4ea633d23d15fab174c66c01d76f95555c07b2baba796533725176a7dde7d97f9c3637fd399cf47f4a61ec9c53193fad6cfa8b21ed2f01ed0087d4cef4b1bf6556693e62efb1fdf3b37dcbd5fa5a5733dfa7abb9fdb580407ffa2e7a69242d035581b45c1ac6bc271b3a6cb872c4c851a3c78c0d5b408547445a4276daab26bdeeebe7df61cf4a39e71acab9e481618172ecef9580a591f817d35572265c5723026fb4f4f30ca725d48cb9d5dc6c7e64ae31979993cdc88cda512b6a468f500d2ab3ac55201ff2d68b277628524cafdcd87ee1f219c1f53d576dc253bfb97cef1f577a7806dc7e65d48837df3e70e13dcfd71a373ef9febd59c41eedb1b2906bbb53f7ec3c347c58fd15c13f4cc3bf1fbedcfdb2e2c7e10f03d6cc19ebbd53fcf6b3f620c7fca7635ddfa73c5f1f56f6d98425b76efc38ffbb27860f3f2bbafd75f887fedf5d0ff2967bf55f6050576f54bcb6fbeed8dd03ef7dbccfebb5b9b6ff9892b2fb81cb8da8a3ebc6fafdbdcf1717d7bdb6bcd4f0a96ed5c2922153e7de9c76b264ddfabab3af4d9b38f1c3a3a35eb23fded67a212cdd31f1dbbfdd7e2da87cdfae401f69d889ef5f8a70bd354b66bcd4f09a4df527cb2676f9d7fcdaf96fb9d7334edbb357b299b65f11b176ca94e4d79ca69edd5c20cfe2cd083de999307cd18c0b9b875f18346defedf9134fcd1f9fbd6ded9cc5332e4ccf6e1834d13e426697909291b0e2ece469915b9a674dff7ae6bc886f4fe777db73a0c8d5f4897f1f8df15efb46b735c5d7736fb46c7df6cb47fbdf7a7d246f34f1c5a8c5ca98d33fe7dc4d3eab3eaadfa76a9efeccf3bd8ae5ef954ea8dc73d11cd077e5f1ef3b7452fe68eba1652fedfbfba9add15df554507ad66df5088eee22f9d725ae5c3be4b3c5ee393b7446f8bc5d11ef793babeb75564e7ff3ed8059208774719dfefaea2f60ae738c4191d53dc6742bf31eb82f61cd47409e64efbb1d84f9e35f8075bc5cf43fc4c88fc0df975f32660bb87ec758c5e55cdcd56d2d6bbe6c65eff2f51fa7cd4dff28277d6fd66e259bee3bacbc7214fa43482712107bb0337decefaa55fab3d8f4b13dddd87fd29f747a18842fae77b93cd3a1eb25e8b8580b157d112fb818f749f4c57bc1855de57fa44cff87ae5ddf9acd185f03b6b1083fd769c6f7db58f72d56d87301d6638f3afa4ee66516c1bed32298774c5e42f6fda8a0b38fc5575923fb5ef909fb7eb3a9abfbffd72f8295dd94e7ff36a2c792bafb3784c8f67f3547ffbdfe7bfdf7faeff5dfebff4fd71d765cb5c8668e143777952e1c398823c770e4648e9cc5910b397225476672e4468edcc7914738f20c475ee5c83b1cd9cc91e296aed285230771e4188e9ccc91b338722147aee4c84c8edcc891fb38f208479ee1c8ab1c7987239b3952fcb4ab74e1c8411c3986232773e42c8e5cc8912b393293233772e43e8e3cc2916738f22a47dee1c8668e143feb2a5d387210478ee1c8c91c398b231772e44a8ecce4c88d1cb98f238f70e4198ebcca917738b29923c5ad5da50b470ee2c8311c3999236771e4428e5cc991991cb99123f771e4118e3cc3915739f20e473673a4b8adab74e1c8411c3986232773e42c8e5cc8912b393293233772e43e8e3cc2916738f22a47dee1c8668e14b777952e1c398823c770e4648e9cc5910b397225476672e4468edcc7914738f20c475ee5c83b1cd9cc91627357e9c2918338720c474ee6c8591cb9902357726426476ee4c87d1c798423cf70e4558eb45c66f31fbdeffde7afff747cffa9ebf5ffcbddd77ec9b46b4961d7f675f995d5ab078cacf9e93f23cd5d2efc5e43f5f6eb01017f90c33f73672ecb7ba3ce9899f7463ecb6c3aca95fcc05bf6a711fdc5ebff019e470e55' - ISP_PROG = binascii.unhexlify(ISP_PROG) - ISP_PROG = zlib.decompress(ISP_PROG) - - def printProgressBar (iteration, total, prefix = '', suffix = '', filename = '', decimals = 1, length = 100, fill = '='): - """ - Call in a loop to create terminal progress bar - @params: - iteration - Required : current iteration (Int) - total - Required : total iterations (Int) - prefix - Optional : prefix string (Str) - suffix - Optional : suffix string (Str) - decimals - Optional : positive number of decimals in percent complete (Int) - length - Optional : character length of bar (Int) - fill - Optional : bar fill character (Str) - """ - percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total))) - filledLength = int(length * iteration // total) - bar = fill * filledLength + '-' * (length - filledLength) - KFlash.log('\r%s |%s| %s%% %s' % (prefix, bar, percent, suffix), end = '\r') - # Print New Line on Complete - if iteration == total: - KFlash.log() - if callback: - fileTypeStr = filename - if prefix == "Downloading ISP:": - fileTypeStr = "ISP" - elif prefix == "Programming BIN:" and fileTypeStr == "": - fileTypeStr = "BIN" - callback(fileTypeStr, iteration, total, suffix) - - def slip_reader(port): - partial_packet = None - in_escape = False - - while True: - waiting = port.inWaiting() - read_bytes = port.read(1 if waiting == 0 else waiting) - if read_bytes == b'': - raise_exception( Exception("Timed out waiting for packet %s" % ("header" if partial_packet is None else "content")) ) - for b in read_bytes: - - if type(b) is int: - b = bytes([b]) # python 2/3 compat - - if partial_packet is None: # waiting for packet header - if b == b'\xc0': - partial_packet = b"" - else: - raise_exception( Exception('Invalid head of packet (%r)' % b) ) - elif in_escape: # part-way through escape sequence - in_escape = False - if b == b'\xdc': - partial_packet += b'\xc0' - elif b == b'\xdd': - partial_packet += b'\xdb' - else: - raise_exception( Exception('Invalid SLIP escape (%r%r)' % (b'\xdb', b)) ) - elif b == b'\xdb': # start of escape sequence - in_escape = True - elif b == b'\xc0': # end of packet - yield partial_packet - partial_packet = None - else: # normal byte in packet - partial_packet += b - - - class ISPResponse: - class ISPOperation(Enum): - ISP_ECHO = 0xC1 - ISP_NOP = 0xC2 - ISP_MEMORY_WRITE = 0xC3 - ISP_MEMORY_READ = 0xC4 - ISP_MEMORY_BOOT = 0xC5 - ISP_DEBUG_INFO = 0xD1 - ISP_CHANGE_BAUDRATE = 0xc6 - - class ErrorCode(Enum): - ISP_RET_DEFAULT = 0 - ISP_RET_OK = 0xE0 - ISP_RET_BAD_DATA_LEN = 0xE1 - ISP_RET_BAD_DATA_CHECKSUM = 0xE2 - ISP_RET_INVALID_COMMAND = 0xE3 - - @staticmethod - def parse(data): - # type: (bytes) -> (int, int, str) - op = 0 - reason = 0 - text = '' - - if (sys.version_info > (3, 0)): - op = int(data[0]) - reason = int(data[1]) - else: - op = ord(data[0]) - reason = ord(data[1]) - - try: - if ISPResponse.ISPOperation(op) == ISPResponse.ISPOperation.ISP_DEBUG_INFO: - text = data[2:].decode() - except ValueError: - KFlash.log('Warning: recv unknown op', op) - - return (op, reason, text) - - - class FlashModeResponse: - class Operation(Enum): - ISP_DEBUG_INFO = 0xD1 - ISP_NOP = 0xD2 - ISP_FLASH_ERASE = 0xD3 - ISP_FLASH_WRITE = 0xD4 - ISP_REBOOT = 0xD5 - ISP_UARTHS_BAUDRATE_SET = 0xD6 - FLASHMODE_FLASH_INIT = 0xD7 - - class ErrorCode(Enum): - ISP_RET_DEFAULT = 0 - ISP_RET_OK = 0xE0 - ISP_RET_BAD_DATA_LEN = 0xE1 - ISP_RET_BAD_DATA_CHECKSUM = 0xE2 - ISP_RET_INVALID_COMMAND = 0xE3 - ISP_RET_BAD_INITIALIZATION = 0xE4 - - @staticmethod - def parse(data): - # type: (bytes) -> (int, int, str) - op = 0 - reason = 0 - text = '' - - if (sys.version_info > (3, 0)): - op = int(data[0]) - reason = int(data[1]) - else: - op = ord(data[0]) - reason = ord(data[1]) - - if FlashModeResponse.Operation(op) == FlashModeResponse.Operation.ISP_DEBUG_INFO: - text = data[2:].decode() - - return (op, reason, text) - - - def chunks(l, n): - """Yield successive n-sized chunks from l.""" - for i in range(0, len(l), n): - yield l[i:i + n] - - class TerminalSize: - @staticmethod - def getTerminalSize(): - import platform - current_os = platform.system() - tuple_xy=None - if current_os == 'Windows': - tuple_xy = TerminalSize._getTerminalSize_windows() - if tuple_xy is None: - tuple_xy = TerminalSize._getTerminalSize_tput() - # needed for window's python in cygwin's xterm! - if current_os == 'Linux' or current_os == 'Darwin' or current_os.startswith('CYGWIN'): - tuple_xy = TerminalSize._getTerminalSize_linux() - if tuple_xy is None: - # Use default value - tuple_xy = (80, 25) # default value - return tuple_xy - - @staticmethod - def _getTerminalSize_windows(): - res=None - try: - from ctypes import windll, create_string_buffer - - # stdin handle is -10 - # stdout handle is -11 - # stderr handle is -12 - - h = windll.kernel32.GetStdHandle(-12) - csbi = create_string_buffer(22) - res = windll.kernel32.GetConsoleScreenBufferInfo(h, csbi) - except: - return None - if res: - import struct - (bufx, bufy, curx, cury, wattr, - left, top, right, bottom, maxx, maxy) = struct.unpack("hhhhHhhhhhh", csbi.raw) - sizex = right - left + 1 - sizey = bottom - top + 1 - return sizex, sizey - else: - return None - - @staticmethod - def _getTerminalSize_tput(): - # get terminal width - # src: http://stackoverflow.com/questions/263890/how-do-i-find-the-width-height-of-a-terminal-window - try: - import subprocess - proc=subprocess.Popen(["tput", "cols"],stdin=subprocess.PIPE,stdout=subprocess.PIPE) - output=proc.communicate(input=None) - cols=int(output[0]) - proc=subprocess.Popen(["tput", "lines"],stdin=subprocess.PIPE,stdout=subprocess.PIPE) - output=proc.communicate(input=None) - rows=int(output[0]) - return (cols,rows) - except: - return None - - @staticmethod - def _getTerminalSize_linux(): - def ioctl_GWINSZ(fd): - try: - import fcntl, termios, struct, os - cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ,'1234')) - except: - return None - return cr - cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) - if not cr: - try: - fd = os.open(os.ctermid(), os.O_RDONLY) - cr = ioctl_GWINSZ(fd) - os.close(fd) - except: - pass - if not cr: - try: - cr = (os.env['LINES'], os.env['COLUMNS']) - except: - return None - return int(cr[1]), int(cr[0]) - - @staticmethod - def get_terminal_size(fallback=(100, 24), terminal = False): - try: - columns, rows = TerminalSize.getTerminalSize() - if not terminal: - if not terminal_auto_size: - columns, rows = terminal_size - except: - columns, rows = fallback - - return columns, rows - - class MAIXLoader: - def change_baudrate(self, baudrate): - KFlash.log(INFO_MSG,"Selected Baudrate: ", baudrate, BASH_TIPS['DEFAULT']) - out = struct.pack('III', 0, 4, baudrate) - crc32_checksum = struct.pack('I', binascii.crc32(out) & 0xFFFFFFFF) - out = struct.pack('HH', 0xd6, 0x00) + crc32_checksum + out - self.write(out) - time.sleep(0.05) - self._port.baudrate = baudrate - if args.Board == "goE": - if baudrate >= 4500000: - # OPENEC super baudrate - KFlash.log(INFO_MSG, "Enable OPENEC super baudrate!!!", BASH_TIPS['DEFAULT']) - if baudrate == 4500000: - self._port.baudrate = 300 - if baudrate == 6000000: - self._port.baudrate = 250 - if baudrate == 7500000: - self._port.baudrate = 350 - - def change_baudrate_stage0(self, baudrate): - # Dangerous, here are dinosaur infested!!!!! - # Don't touch this code unless you know what you are doing - # Stage0 baudrate is fixed - # Contributor: [@rgwan](https://github.com/rgwan) - # rgwan - baudrate = 1500000 - if args.Board == "goE" or args.Board == "trainer": - KFlash.log(INFO_MSG,"Selected Stage0 Baudrate: ", baudrate, BASH_TIPS['DEFAULT']) - # This is for openec, contained ft2232, goE and trainer - KFlash.log(INFO_MSG,"FT2232 mode", BASH_TIPS['DEFAULT']) - baudrate_stage0 = int(baudrate * 38.6 / 38) - out = struct.pack('III', 0, 4, baudrate_stage0) - crc32_checksum = struct.pack('I', binascii.crc32(out) & 0xFFFFFFFF) - out = struct.pack('HH', 0xc6, 0x00) + crc32_checksum + out - self.write(out) - time.sleep(0.05) - self._port.baudrate = baudrate - - retry_count = 0 - while 1: - self.checkKillExit() - retry_count = retry_count + 1 - if retry_count > 3: - err = (ERROR_MSG,'Fast mode failed, please use slow mode by add parameter ' + BASH_TIPS['GREEN'] + '--Slow', BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - try: - self.greeting() - break - except TimeoutError: - pass - elif args.Board == "dan" or args.Board == "bit" or args.Board == "kd233": - KFlash.log(INFO_MSG,"CH340 mode", BASH_TIPS['DEFAULT']) - # This is for CH340, contained dan, bit and kd233 - baudrate_stage0 = int(baudrate * 38.4 / 38) - # CH340 can not use this method, test failed, take risks at your own risk - else: - # This is for unknown board - KFlash.log(WARN_MSG,"Unknown mode", BASH_TIPS['DEFAULT']) - - def __init__(self, port='/dev/ttyUSB1', baudrate=115200): - # configure the serial connections (the parameters differs on the device you are connecting to) - self._port = serial.Serial( - port=port, - baudrate=baudrate, - parity=serial.PARITY_NONE, - stopbits=serial.STOPBITS_ONE, - bytesize=serial.EIGHTBITS, - timeout=0.1 - ) - KFlash.log(INFO_MSG, "Default baudrate is", baudrate, ", later it may be changed to the value you set.", BASH_TIPS['DEFAULT']) - - self._port.isOpen() - self._slip_reader = slip_reader(self._port) - self._kill_process = False - - """ Read a SLIP packet from the serial port """ - - def read(self): - return next(self._slip_reader) - - """ Write bytes to the serial port while performing SLIP escaping """ - - def write(self, packet): - buf = b'\xc0' \ - + (packet.replace(b'\xdb', b'\xdb\xdd').replace(b'\xc0', b'\xdb\xdc')) \ - + b'\xc0' - #KFlash.log('[WRITE]', binascii.hexlify(buf)) - return self._port.write(buf) - - def read_loop(self): - #out = b'' - # while self._port.inWaiting() > 0: - # out += self._port.read(1) - - # KFlash.log(out) - while 1: - sys.stdout.write('[RECV] raw data: ') - sys.stdout.write(binascii.hexlify(self._port.read(1)).decode()) - sys.stdout.flush() - - def recv_one_return(self): - timeout_init = time.time() - data = b'' - # find start boarder - #sys.stdout.write('[RECV one return] raw data: ') - while 1: - if time.time() - timeout_init > ISP_RECEIVE_TIMEOUT: - raise TimeoutError - c = self._port.read(1) - #sys.stdout.write(binascii.hexlify(c).decode()) - sys.stdout.flush() - if c == b'\xc0': - break - - in_escape = False - while 1: - if time.time() - timeout_init > ISP_RECEIVE_TIMEOUT: - self.raise_exception( TimeoutError ) - c = self._port.read(1) - #sys.stdout.write(binascii.hexlify(c).decode()) - sys.stdout.flush() - if c == b'\xc0': - break - - elif in_escape: # part-way through escape sequence - in_escape = False - if c == b'\xdc': - data += b'\xc0' - elif c == b'\xdd': - data += b'\xdb' - else: - self.raise_exception( Exception('Invalid SLIP escape (%r%r)' % (b'\xdb', c)) ) - elif c == b'\xdb': # start of escape sequence - in_escape = True - - data += c - - #sys.stdout.write('\n') - return data - - # kd233 or open-ec or new cmsis-dap - def reset_to_isp_kd233(self): - self._port.setDTR (False) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- RESET to LOW, IO16 to HIGH --') - # Pull reset down and keep 10ms - self._port.setDTR (True) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- IO16 to LOW, RESET to HIGH --') - # Pull IO16 to low and release reset - self._port.setRTS (True) - self._port.setDTR (False) - time.sleep(0.1) - def reset_to_boot_kd233(self): - self._port.setDTR (False) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- RESET to LOW --') - # Pull reset down and keep 10ms - self._port.setDTR (True) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- RESET to HIGH, BOOT --') - # Pull IO16 to low and release reset - self._port.setRTS (False) - self._port.setDTR (False) - time.sleep(0.1) - - #dan dock - def reset_to_isp_dan(self): - self._port.setDTR (False) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- RESET to LOW, IO16 to HIGH --') - # Pull reset down and keep 10ms - self._port.setDTR (False) - self._port.setRTS (True) - time.sleep(0.1) - #KFlash.log('-- IO16 to LOW, RESET to HIGH --') - # Pull IO16 to low and release reset - self._port.setRTS (False) - self._port.setDTR (True) - time.sleep(0.1) - def reset_to_boot_dan(self): - self._port.setDTR (False) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- RESET to LOW --') - # Pull reset down and keep 10ms - self._port.setDTR (False) - self._port.setRTS (True) - time.sleep(0.1) - #KFlash.log('-- RESET to HIGH, BOOT --') - # Pull IO16 to low and release reset - self._port.setRTS (False) - self._port.setDTR (False) - time.sleep(0.1) - - # maix goD for old cmsis-dap firmware - def reset_to_isp_goD(self): - self._port.setDTR (True) ## output 0 - self._port.setRTS (True) - time.sleep(0.1) - #KFlash.log('-- RESET to LOW --') - # Pull reset down and keep 10ms - self._port.setRTS (False) - self._port.setDTR (True) - time.sleep(0.1) - #KFlash.log('-- RESET to HIGH, BOOT --') - # Pull IO16 to low and release reset - self._port.setRTS (False) - self._port.setDTR (True) - time.sleep(0.1) - def reset_to_boot_goD(self): - self._port.setDTR (False) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- RESET to LOW --') - # Pull reset down and keep 10ms - self._port.setRTS (False) - self._port.setDTR (True) - time.sleep(0.1) - #KFlash.log('-- RESET to HIGH, BOOT --') - # Pull IO16 to low and release reset - self._port.setRTS (True) - self._port.setDTR (True) - time.sleep(0.1) - - # maix goE for openec or new cmsis-dap firmware - def reset_to_boot_maixgo(self): - self._port.setDTR (False) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- RESET to LOW --') - # Pull reset down and keep 10ms - self._port.setRTS (False) - self._port.setDTR (True) - time.sleep(0.1) - #KFlash.log('-- RESET to HIGH, BOOT --') - # Pull IO16 to low and release reset - self._port.setRTS (False) - self._port.setDTR (False) - time.sleep(0.1) - - def greeting(self): - self._port.write(b'\xc0\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0') - op, reason, text = ISPResponse.parse(self.recv_one_return()) - - #KFlash.log('MAIX return op:', ISPResponse.ISPOperation(op).name, 'reason:', ISPResponse.ErrorCode(reason).name) - - - def flash_greeting(self): - retry_count = 0 - while 1: - self.checkKillExit() - self._port.write(b'\xc0\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0') - retry_count = retry_count + 1 - try: - op, reason, text = FlashModeResponse.parse(self.recv_one_return()) - except IndexError: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to Connect to K210's Stub",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Index Error, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - except TimeoutError: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to Connect to K210's Stub",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Timeout Error, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - except: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to Connect to K210's Stub",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Unexcepted Error, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - # KFlash.log('MAIX return op:', FlashModeResponse.Operation(op).name, 'reason:', - # FlashModeResponse.ErrorCode(reason).name) - if FlashModeResponse.Operation(op) == FlashModeResponse.Operation.ISP_NOP and FlashModeResponse.ErrorCode(reason) == FlashModeResponse.ErrorCode.ISP_RET_OK: - KFlash.log(INFO_MSG,"Boot to Flashmode Successfully",BASH_TIPS['DEFAULT']) - self._port.flushInput() - self._port.flushOutput() - break - else: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to Connect to K210's Stub",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Unexcepted Return recevied, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - - def boot(self, address=0x80000000): - KFlash.log(INFO_MSG,"Booting From " + hex(address),BASH_TIPS['DEFAULT']) - - out = struct.pack('II', address, 0) - - crc32_checksum = struct.pack('I', binascii.crc32(out) & 0xFFFFFFFF) - - out = struct.pack('HH', 0xc5, 0x00) + crc32_checksum + out # op: ISP_MEMORY_WRITE: 0xc3 - self.write(out) - - def recv_debug(self): - op, reason, text = ISPResponse.parse(self.recv_one_return()) - #KFlash.log('[RECV] op:', ISPResponse.ISPOperation(op).name, 'reason:', ISPResponse.ErrorCode(reason).name) - if text: - KFlash.log('-' * 30) - KFlash.log(text) - KFlash.log('-' * 30) - if ISPResponse.ErrorCode(reason) not in (ISPResponse.ErrorCode.ISP_RET_DEFAULT, ISPResponse.ErrorCode.ISP_RET_OK): - KFlash.log('Failed, retry, errcode=', hex(reason)) - return False - return True - - def flash_recv_debug(self): - op, reason, text = FlashModeResponse.parse(self.recv_one_return()) - #KFlash.log('[Flash-RECV] op:', FlashModeResponse.Operation(op).name, 'reason:', - # FlashModeResponse.ErrorCode(reason).name) - if text: - KFlash.log('-' * 30) - KFlash.log(text) - KFlash.log('-' * 30) - - if FlashModeResponse.ErrorCode(reason) not in (FlashModeResponse.ErrorCode.ISP_RET_OK, FlashModeResponse.ErrorCode.ISP_RET_OK): - KFlash.log('Failed, retry') - return False - return True - - def init_flash(self, chip_type): - chip_type = int(chip_type) - KFlash.log(INFO_MSG,"Selected Flash: ",("In-Chip", "On-Board")[chip_type],BASH_TIPS['DEFAULT']) - out = struct.pack('II', chip_type, 0) - crc32_checksum = struct.pack('I', binascii.crc32(out) & 0xFFFFFFFF) - out = struct.pack('HH', 0xd7, 0x00) + crc32_checksum + out - '''Retry when it have error''' - retry_count = 0 - while 1: - self.checkKillExit() - sent = self.write(out) - retry_count = retry_count + 1 - try: - op, reason, text = FlashModeResponse.parse(self.recv_one_return()) - except IndexError: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to initialize flash",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Index Error, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - except TimeoutError: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to initialize flash",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Timeout Error, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - except: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to initialize flash",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Unexcepted Error, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - # KFlash.log('MAIX return op:', FlashModeResponse.Operation(op).name, 'reason:', - # FlashModeResponse.ErrorCode(reason).name) - if FlashModeResponse.Operation(op) == FlashModeResponse.Operation.FLASHMODE_FLASH_INIT and FlashModeResponse.ErrorCode(reason) == FlashModeResponse.ErrorCode.ISP_RET_OK: - KFlash.log(INFO_MSG,"Initialization flash Successfully",BASH_TIPS['DEFAULT']) - break - else: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to initialize flash",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Unexcepted Return recevied, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - - def flash_dataframe(self, data, address=0x80000000): - DATAFRAME_SIZE = 1024 - data_chunks = chunks(data, DATAFRAME_SIZE) - #KFlash.log('[DEBUG] flash dataframe | data length:', len(data)) - total_chunk = math.ceil(len(data)/DATAFRAME_SIZE) - - time_start = time.time() - for n, chunk in enumerate(data_chunks): - self.checkKillExit() - while 1: - self.checkKillExit() - #KFlash.log('[INFO] sending chunk', i, '@address', hex(address), 'chunklen', len(chunk)) - out = struct.pack('II', address, len(chunk)) - - crc32_checksum = struct.pack('I', binascii.crc32(out + chunk) & 0xFFFFFFFF) - - out = struct.pack('HH', 0xc3, 0x00) + crc32_checksum + out + chunk # op: ISP_MEMORY_WRITE: 0xc3 - sent = self.write(out) - #KFlash.log('[INFO]', 'sent', sent, 'bytes', 'checksum', binascii.hexlify(crc32_checksum).decode()) - - address += len(chunk) - - if self.recv_debug(): - break - - columns, lines = TerminalSize.get_terminal_size((100, 24), terminal) - time_delta = time.time() - time_start - speed = '' - if (time_delta > 1): - speed = str(int((n + 1) * DATAFRAME_SIZE / 1024.0 / time_delta)) + 'kiB/s' - printProgressBar(n+1, total_chunk, prefix = 'Downloading ISP:', suffix = speed, length = columns - 35) - - def dump_to_flash(self, data, address=0): - ''' - typedef struct __attribute__((packed)) { - uint8_t op; - int32_t checksum; /* All the fields below are involved in the calculation of checksum */ - uint32_t address; - uint32_t data_len; - uint8_t data_buf[1024]; - } isp_request_t; - ''' - - DATAFRAME_SIZE = ISP_FLASH_DATA_FRAME_SIZE - data_chunks = chunks(data, DATAFRAME_SIZE) - #KFlash.log('[DEBUG] flash dataframe | data length:', len(data)) - - - - for n, chunk in enumerate(data_chunks): - #KFlash.log('[INFO] sending chunk', i, '@address', hex(address)) - out = struct.pack('II', address, len(chunk)) - - crc32_checksum = struct.pack('I', binascii.crc32(out + chunk) & 0xFFFFFFFF) - - out = struct.pack('HH', 0xd4, 0x00) + crc32_checksum + out + chunk - #KFlash.log("[$$$$]", binascii.hexlify(out[:32]).decode()) - retry_count = 0 - while True: - try: - sent = self.write(out) - #KFlash.log('[INFO]', 'sent', sent, 'bytes', 'checksum', crc32_checksum) - self.flash_recv_debug() - except: - retry_count = retry_count + 1 - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Error Count Exceeded, Stop Trying",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - continue - break - address += len(chunk) - - - - def flash_erase(self): - #KFlash.log('[DEBUG] erasing spi flash.') - self._port.write(b'\xc0\xd3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0') - op, reason, text = FlashModeResponse.parse(self.recv_one_return()) - #KFlash.log('MAIX return op:', FlashModeResponse.Operation(op).name, 'reason:', - # FlashModeResponse.ErrorCode(reason).name) - - def install_flash_bootloader(self, data): - # Download flash bootloader - self.flash_dataframe(data, address=0x80000000) - - def load_elf_to_sram(self, f): - try: - from elftools.elf.elffile import ELFFile - from elftools.elf.descriptions import describe_p_type - except ImportError: - err = (ERROR_MSG,'pyelftools must be installed, run '+BASH_TIPS['GREEN']+'`' + ('pip', 'pip3')[sys.version_info > (3, 0)] + ' install pyelftools`',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - - elffile = ELFFile(f) - if elffile['e_entry'] != 0x80000000: - KFlash.log(WARN_MSG,"ELF entry is 0x%x instead of 0x80000000" % (elffile['e_entry']), BASH_TIPS['DEFAULT']) - - for segment in elffile.iter_segments(): - t = describe_p_type(segment['p_type']) - KFlash.log(INFO_MSG, ("Program Header: Size: %d, Virtual Address: 0x%x, Type: %s" % (segment['p_filesz'], segment['p_vaddr'], t)), BASH_TIPS['DEFAULT']) - if not (segment['p_vaddr'] & 0x80000000): - continue - if segment['p_filesz']==0 or segment['p_vaddr']==0: - KFlash.log("Skipped") - continue - self.flash_dataframe(segment.data(), segment['p_vaddr']) - - def flash_firmware(self, firmware_bin, aes_key = None, address_offset = 0, sha256Prefix = True, filename = ""): - # type: (bytes, bytes, int, bool) -> None - # Don't remove above code! - - #KFlash.log('[DEBUG] flash_firmware DEBUG: aeskey=', aes_key) - - if sha256Prefix == True: - # Add header to the firmware - # Format: SHA256(after)(32bytes) + AES_CIPHER_FLAG (1byte) + firmware_size(4bytes) + firmware_data - aes_cipher_flag = b'\x01' if aes_key else b'\x00' - - # Encryption - if aes_key: - enc = AES_128_CBC(aes_key, iv=b'\x00'*16).encrypt - padded = firmware_bin + b'\x00'*15 # zero pad - firmware_bin = b''.join([enc(padded[i*16:i*16+16]) for i in range(len(padded)//16)]) - - firmware_len = len(firmware_bin) - - data = aes_cipher_flag + struct.pack('I', firmware_len) + firmware_bin - - sha256_hash = hashlib.sha256(data).digest() - - firmware_with_header = data + sha256_hash - - total_chunk = math.ceil(len(firmware_with_header)/ISP_FLASH_DATA_FRAME_SIZE) - # Slice download firmware - data_chunks = chunks(firmware_with_header, ISP_FLASH_DATA_FRAME_SIZE) # 4kiB for a sector, 16kiB for dataframe - else: - total_chunk = math.ceil(len(firmware_bin)/ISP_FLASH_DATA_FRAME_SIZE) - data_chunks = chunks(firmware_bin, ISP_FLASH_DATA_FRAME_SIZE) - - time_start = time.time() - for n, chunk in enumerate(data_chunks): - self.checkKillExit() - chunk = chunk.ljust(ISP_FLASH_DATA_FRAME_SIZE, b'\x00') # align by size of dataframe - - # Download a dataframe - #KFlash.log('[INFO]', 'Write firmware data piece') - self.dump_to_flash(chunk, address= n * ISP_FLASH_DATA_FRAME_SIZE + address_offset) - columns, lines = TerminalSize.get_terminal_size((100, 24), terminal) - time_delta = time.time() - time_start - speed = '' - if (time_delta > 1): - speed = str(int((n + 1) * ISP_FLASH_DATA_FRAME_SIZE / 1024.0 / time_delta)) + 'kiB/s' - printProgressBar(n+1, total_chunk, prefix = 'Programming BIN:', filename=filename, suffix = speed, length = columns - 35) - - def kill(self): - self._kill_process = True - - def checkKillExit(self): - if self._kill_process: - self._port.close() - self._kill_process = False - raise Exception("Cancel") - - def open_terminal(reset): - control_signal = '0' if reset else '1' - control_signal_b = not reset - import serial.tools.miniterm - # For using the terminal with MaixPy the 'filter' option must be set to 'direct' - # because some control characters are emited - sys.argv = [sys.argv[0], _port, '115200', '--dtr='+control_signal, '--rts='+control_signal, '--filter=direct'] - serial.tools.miniterm.main(default_port=_port, default_baudrate=115200, default_dtr=control_signal_b, default_rts=control_signal_b) - sys.exit(0) - - boards_choices = ["kd233", "dan", "bit", "bit_mic", "goE", "goD", "maixduino", "trainer"] - if terminal: - parser = argparse.ArgumentParser() - parser.add_argument("-p", "--port", help="COM Port", default="DEFAULT") - parser.add_argument("-f", "--flash", help="SPI Flash type, 0 for SPI3, 1 for SPI0", default=1) - parser.add_argument("-b", "--baudrate", type=int, help="UART baudrate for uploading firmware", default=115200) - parser.add_argument("-l", "--bootloader", help="Bootloader bin path", required=False, default=None) - parser.add_argument("-k", "--key", help="AES key in hex, if you need encrypt your firmware.", required=False, default=None) - parser.add_argument("-v", "--version", help="Print version.", action='version', version='0.8.3') - parser.add_argument("--verbose", help="Increase output verbosity", default=False, action="store_true") - parser.add_argument("-t", "--terminal", help="Start a terminal after finish (Python miniterm)", default=False, action="store_true") - parser.add_argument("-n", "--noansi", help="Do not use ANSI colors, recommended in Windows CMD", default=False, action="store_true") - parser.add_argument("-s", "--sram", help="Download firmware to SRAM and boot", default=False, action="store_true") - parser.add_argument("-B", "--Board",required=False, type=str, help="Select dev board", choices=boards_choices) - parser.add_argument("-S", "--Slow",required=False, help="Slow download mode", default=False) - parser.add_argument("firmware", help="firmware bin path") - args = parser.parse_args() - else: - args = argparse.Namespace() - setattr(args, "port", "DEFAULT") - setattr(args, "flash", 1) - setattr(args, "baudrate", 115200) - setattr(args, "bootloader", None) - setattr(args, "key", None) - setattr(args, "verbose", False) - setattr(args, "terminal", False) - setattr(args, "noansi", False) - setattr(args, "sram", False) - setattr(args, "Board", None) - setattr(args, "Slow", False) - - # udpate args for none terminal call - if not terminal: - args.port = dev - args.baudrate = baudrate - args.noansi = noansi - args.sram = sram - args.Board = board - args.firmware = file - - if args.Board == "maixduino" or args.Board == "bit_mic": - args.Board = "goE" - - if (args.noansi == True): - BASH_TIPS = dict(NORMAL='',BOLD='',DIM='',UNDERLINE='', - DEFAULT='', RED='', YELLOW='', GREEN='', - BG_DEFAULT='', BG_WHITE='') - ERROR_MSG = BASH_TIPS['RED']+BASH_TIPS['BOLD']+'[ERROR]'+BASH_TIPS['NORMAL'] - WARN_MSG = BASH_TIPS['YELLOW']+BASH_TIPS['BOLD']+'[WARN]'+BASH_TIPS['NORMAL'] - INFO_MSG = BASH_TIPS['GREEN']+BASH_TIPS['BOLD']+'[INFO]'+BASH_TIPS['NORMAL'] - KFlash.log(INFO_MSG,'ANSI colors not used',BASH_TIPS['DEFAULT']) - - manually_set_the_board = False - if args.Board: - manually_set_the_board = True - - if args.port == "DEFAULT": - if args.Board == "goE": - list_port_info = list(serial.tools.list_ports.grep("0403")) #Take the second one - if len(list_port_info) == 0: - err = (ERROR_MSG,"No vaild COM Port found in Auto Detect, Check Your Connection or Specify One by"+BASH_TIPS['GREEN']+'`--port/-p`',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise_exception( Exception(err) ) - list_port_info.sort() - if len(list_port_info) == 1: - _port = list_port_info[0].device - elif len(list_port_info) > 1: - _port = list_port_info[1].device - KFlash.log(INFO_MSG,"COM Port Auto Detected, Selected ", _port, BASH_TIPS['DEFAULT']) - elif args.Board == "trainer": - list_port_info = list(serial.tools.list_ports.grep("0403")) #Take the first one - if(len(list_port_info)==0): - err = (ERROR_MSG,"No vaild COM Port found in Auto Detect, Check Your Connection or Specify One by"+BASH_TIPS['GREEN']+'`--port/-p`',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise_exception( Exception(err) ) - list_port_info.sort() - _port = list_port_info[0].device - KFlash.log(INFO_MSG,"COM Port Auto Detected, Selected ", _port, BASH_TIPS['DEFAULT']) - else: - try: - list_port_info = next(serial.tools.list_ports.grep(VID_LIST_FOR_AUTO_LOOKUP)) #Take the first one within the list - _port = list_port_info.device - KFlash.log(INFO_MSG,"COM Port Auto Detected, Selected ", _port, BASH_TIPS['DEFAULT']) - except StopIteration: - err = (ERROR_MSG,"No vaild COM Port found in Auto Detect, Check Your Connection or Specify One by"+BASH_TIPS['GREEN']+'`--port/-p`',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise_exception( Exception(err) ) - else: - _port = args.port - KFlash.log(INFO_MSG,"COM Port Selected Manually: ", _port, BASH_TIPS['DEFAULT']) - - self.loader = MAIXLoader(port=_port, baudrate=115200) - file_format = ProgramFileFormat.FMT_BINARY - - # 0. Check firmware - try: - firmware_bin = open(args.firmware, 'rb') - except FileNotFoundError: - err = (ERROR_MSG,'Unable to find the firmware at ', args.firmware, BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise_exception( Exception(err) ) - - with open(args.firmware, 'rb') as f: - file_header = f.read(4) - #if file_header.startswith(bytes([0x50, 0x4B])): - if file_header.startswith(b'\x50\x4B'): - if ".kfpkg" != os.path.splitext(args.firmware)[1]: - KFlash.log(INFO_MSG, 'Find a zip file, but not with ext .kfpkg:', args.firmware, BASH_TIPS['DEFAULT']) - else: - file_format = ProgramFileFormat.FMT_KFPKG - - #if file_header.startswith(bytes([0x7F, 0x45, 0x4C, 0x46])): - if file_header.startswith(b'\x7f\x45\x4c\x46'): - file_format = ProgramFileFormat.FMT_ELF - if args.sram: - KFlash.log(INFO_MSG, 'Find an ELF file:', args.firmware, BASH_TIPS['DEFAULT']) - else: - err = (ERROR_MSG, 'This is an ELF file and cannot be programmed to flash directly:', args.firmware, BASH_TIPS['DEFAULT'] , '\r\nPlease retry:', args.firmware + '.bin', BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise_exception( Exception(err) ) - - # 1. Greeting. - KFlash.log(INFO_MSG,"Trying to Enter the ISP Mode...",BASH_TIPS['DEFAULT']) - - retry_count = 0 - - while 1: - self.checkKillExit() - try: - retry_count = retry_count + 1 - if retry_count > 15: - err = (ERROR_MSG,"No vaild Kendryte K210 found in Auto Detect, Check Your Connection or Specify One by"+BASH_TIPS['GREEN']+'`-p '+('/dev/ttyUSB0', 'COM3')[sys.platform == 'win32']+'`',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise_exception( Exception(err) ) - if args.Board == "dan" or args.Board == "bit" or args.Board == "trainer": - try: - KFlash.log('.', end='') - self.loader.reset_to_isp_dan() - self.loader.greeting() - break - except TimeoutError: - pass - elif args.Board == "kd233": - try: - KFlash.log('_', end='') - self.loader.reset_to_isp_kd233() - self.loader.greeting() - break - except TimeoutError: - pass - elif args.Board == "goE": - try: - KFlash.log('*', end='') - self.loader.reset_to_isp_kd233() - self.loader.greeting() - break - except TimeoutError: - pass - elif args.Board == "goD": - try: - KFlash.log('#', end='') - self.loader.reset_to_isp_goD() - self.loader.greeting() - break - except TimeoutError: - pass - else: - try: - KFlash.log('.', end='') - self.loader.reset_to_isp_dan() - self.loader.greeting() - args.Board = "dan" - KFlash.log() - KFlash.log(INFO_MSG,"Automatically detected dan/bit/trainer",BASH_TIPS['DEFAULT']) - break - except TimeoutError: - pass - try: - KFlash.log('_', end='') - self.loader.reset_to_isp_kd233() - self.loader.greeting() - args.Board = "kd233" - KFlash.log() - KFlash.log(INFO_MSG,"Automatically detected goE/kd233",BASH_TIPS['DEFAULT']) - break - except TimeoutError: - pass - try: - KFlash.log('.', end='') - self.loader.reset_to_isp_goD() - self.loader.greeting() - args.Board = "goD" - KFlash.log() - KFlash.log(INFO_MSG,"Automatically detected goD",BASH_TIPS['DEFAULT']) - break - except TimeoutError: - pass - try: - # Magic, just repeat, don't remove, it may unstable, don't know why. - KFlash.log('_', end='') - self.loader.reset_to_isp_kd233() - self.loader.greeting() - args.Board = "kd233" - KFlash.log() - KFlash.log(INFO_MSG,"Automatically detected goE/kd233",BASH_TIPS['DEFAULT']) - break - except TimeoutError: - pass - except Exception as e: - KFlash.log() - raise_exception( Exception("Greeting fail, check serial port ("+str(e)+")" ) ) - - # Don't remove this line - # Dangerous, here are dinosaur infested!!!!! - ISP_RECEIVE_TIMEOUT = 3 - - KFlash.log() - KFlash.log(INFO_MSG,"Greeting Message Detected, Start Downloading ISP",BASH_TIPS['DEFAULT']) - - if manually_set_the_board and (not args.Slow): - if (args.baudrate >= 1500000) or args.sram: - self.loader.change_baudrate_stage0(args.baudrate) - - # 2. download bootloader and firmware - if args.sram: - if file_format == ProgramFileFormat.FMT_KFPKG: - err = (ERROR_MSG, "Unable to load kfpkg to SRAM") - err = tuple2str(err) - raise_exception( Exception(err) ) - elif file_format == ProgramFileFormat.FMT_ELF: - self.loader.load_elf_to_sram(firmware_bin) - else: - self.loader.install_flash_bootloader(firmware_bin.read()) - else: - # install bootloader at 0x80000000 - isp_loader = open(args.bootloader, 'rb').read() if args.bootloader else ISP_PROG - self.loader.install_flash_bootloader(isp_loader) - - # Boot the code from SRAM - self.loader.boot() - - if args.sram: - # Dangerous, here are dinosaur infested!!!!! - # Don't touch this code unless you know what you are doing - self.loader._port.baudrate = args.baudrate - KFlash.log(INFO_MSG,"Boot user code from SRAM", BASH_TIPS['DEFAULT']) - if(args.terminal == True): - open_terminal(False) - msg = "Burn SRAM OK" - raise_exception( Exception(msg) ) - - # Dangerous, here are dinosaur infested!!!!! - # Don't touch this code unless you know what you are doing - self.loader._port.baudrate = 115200 - - KFlash.log(INFO_MSG,"Wait For 0.1 second for ISP to Boot", BASH_TIPS['DEFAULT']) - - time.sleep(0.1) - - self.loader.flash_greeting() - - if args.baudrate != 115200: - self.loader.change_baudrate(args.baudrate) - KFlash.log(INFO_MSG,"Baudrate changed, greeting with ISP again ... ", BASH_TIPS['DEFAULT']) - self.loader.flash_greeting() - - self.loader.init_flash(args.flash) - - if file_format == ProgramFileFormat.FMT_KFPKG: - KFlash.log(INFO_MSG,"Extracting KFPKG ... ", BASH_TIPS['DEFAULT']) - firmware_bin.close() - with tempfile.TemporaryDirectory() as tmpdir: - try: - with zipfile.ZipFile(args.firmware) as zf: - zf.extractall(tmpdir) - except zipfile.BadZipFile: - err = (ERROR_MSG,'Unable to Decompress the kfpkg, your file might be corrupted.',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise_exception( Exception(err) ) - - fFlashList = open(os.path.join(tmpdir, 'flash-list.json'), "r") - sFlashList = re.sub(r'"address": (.*),', r'"address": "\1",', fFlashList.read()) #Pack the Hex Number in json into str - fFlashList.close() - jsonFlashList = json.loads(sFlashList) - for lBinFiles in jsonFlashList['files']: - self.checkKillExit() - KFlash.log(INFO_MSG,"Writing",lBinFiles['bin'],"into","0x%08x"%int(lBinFiles['address'], 0),BASH_TIPS['DEFAULT']) - with open(os.path.join(tmpdir, lBinFiles["bin"]), "rb") as firmware_bin: - self.loader.flash_firmware(firmware_bin.read(), None, int(lBinFiles['address'], 0), lBinFiles['sha256Prefix'], filename=lBinFiles['bin']) - else: - if args.key: - aes_key = binascii.a2b_hex(args.key) - if len(aes_key) != 16: - raise_exception( ValueError('AES key must by 16 bytes') ) - - self.loader.flash_firmware(firmware_bin.read(), aes_key=aes_key) - else: - self.loader.flash_firmware(firmware_bin.read()) - - # 3. boot - if args.Board == "dan" or args.Board == "bit" or args.Board == "trainer": - self.loader.reset_to_boot_dan() - elif args.Board == "kd233": - self.loader.reset_to_boot_kd233() - elif args.Board == "goE": - self.loader.reset_to_boot_maixgo() - elif args.Board == "goD": - self.loader.reset_to_boot_goD() - else: - KFlash.log(WARN_MSG,"Board unknown !! please press reset to boot!!") - - KFlash.log(INFO_MSG,"Rebooting...", BASH_TIPS['DEFAULT']) - try: - self.loader._port.close() - except Exception: - pass - - if(args.terminal == True): - open_terminal(True) - - def kill(self): - if self.loader: - self.loader.kill() - self.killProcess = True - - def checkKillExit(self): - if self.killProcess: - if self.loader: - self.loader._port.close() - raise Exception("Cancel") - - -def main(): - kflash = KFlash() - try: - kflash.process() - except Exception as e: - if str(e) == "Burn SRAM OK": - sys.exit(0) - kflash.log(str(e)) - sys.exit(1) - -if __name__ == '__main__': - main() From 9944ac870102f6a95e8fa0b2e4973389d847378a Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 14 Feb 2021 01:00:46 +0800 Subject: [PATCH 15/34] Fix alignment in os/build.rs --- os/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/os/build.rs b/os/build.rs index 88a964b..5e03231 100644 --- a/os/build.rs +++ b/os/build.rs @@ -23,7 +23,7 @@ fn insert_app_data() -> Result<()> { apps.sort(); writeln!(f, r#" - .align 4 + .align 3 .section .data .global _num_app _num_app: From db66972228368be12de71274669ba6e20959e9f0 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 28 Feb 2021 06:32:04 +0800 Subject: [PATCH 16/34] Add Ubuntu18.04 docker --- .dockerignore | 1 + Dockerfile | 40 ++++++++++++++++++++++++++++++++++++++++ Makefile | 8 ++++++++ README.md | 2 +- 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 Makefile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..df3359d --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +*/* \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ac784bc --- /dev/null +++ b/Dockerfile @@ -0,0 +1,40 @@ +FROM ubuntu:18.04 +LABEL maintainer="dinghao188" \ + version="1.1" \ + description="ubuntu 18.04 with tools for tsinghua's rCore-Tutorial-V3" + +#install some deps +RUN set -x \ + && apt-get update \ + && apt-get install -y curl wget autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \ + gawk build-essential bison flex texinfo gperf libtool patchutils bc xz-utils \ + zlib1g-dev libexpat-dev pkg-config libglib2.0-dev libpixman-1-dev git tmux python3 + +#install rust and qemu +RUN set -x; \ + RUSTUP='/root/rustup.sh' \ + && cd $HOME \ + #install rust + && curl https://sh.rustup.rs -sSf > $RUSTUP && chmod +x $RUSTUP \ + && $RUSTUP -y --default-toolchain nightly --profile minimal \ + + #compile qemu + && wget https://ftp.osuosl.org/pub/blfs/conglomeration/qemu/qemu-5.0.0.tar.xz \ + && tar xvJf qemu-5.0.0.tar.xz \ + && cd qemu-5.0.0 \ + && ./configure --target-list=riscv64-softmmu,riscv64-linux-user \ + && make -j$(nproc) install \ + && cd $HOME && rm -rf qemu-5.0.0 qemu-5.0.0.tar.xz + +#for chinese network +RUN set -x; \ + APT_CONF='/etc/apt/sources.list'; \ + CARGO_CONF='/root/.cargo/config'; \ + BASHRC='/root/.bashrc' \ + && echo 'export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static' >> $BASHRC \ + && echo 'export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup' >> $BASHRC \ + && touch $CARGO_CONF \ + && echo '[source.crates-io]' > $CARGO_CONF \ + && echo "replace-with = 'ustc'" >> $CARGO_CONF \ + && echo '[source.ustc]' >> $CARGO_CONF \ + && echo 'registry = "git://mirrors.ustc.edu.cn/crates.io-index"' >> $CARGO_CONF \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2e33976 --- /dev/null +++ b/Makefile @@ -0,0 +1,8 @@ +DOCKER_NAME ?= dinghao188/rcore-tutorial +.PHONY: docker build_docker + +docker: + docker run --rm -it --mount type=bind,source=$(shell pwd),destination=/mnt ${DOCKER_NAME} + +build_docker: + docker build -t ${DOCKER_NAME} . diff --git a/README.md b/README.md index 5083448..dd356b5 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ # rCore-Tutorial-v3 -rCore-Tutorial version 3. +rCore-Tutorial version 3. \ No newline at end of file From 8406e8d8fe5ffe26020fe004634d09a456260e81 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sat, 6 Mar 2021 03:21:29 +0800 Subject: [PATCH 17/34] Do not fetch tools when running on qemu. --- os/Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/os/Makefile b/os/Makefile index e7aa6b7..9be727a 100644 --- a/os/Makefile +++ b/os/Makefile @@ -58,10 +58,9 @@ disasm-vim: kernel @vim $(DISASM_TMP) @rm $(DISASM_TMP) -run: tools run-inner +run: run-inner -tools: - (which $(K210-BURNER)) || (cd .. && git clone https://github.com/sipeed/kflash.py.git && mv kflash.py tools) + run-inner: build ifeq ($(BOARD),qemu) @@ -71,6 +70,7 @@ ifeq ($(BOARD),qemu) -bios $(BOOTLOADER) \ -device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY_PA) else + (which $(K210-BURNER)) || (cd .. && git clone https://github.com/sipeed/kflash.py.git && mv kflash.py tools) @cp $(BOOTLOADER) $(BOOTLOADER).copy @dd if=$(KERNEL_BIN) of=$(BOOTLOADER).copy bs=$(K210_BOOTLOADER_SIZE) seek=1 @mv $(BOOTLOADER).copy $(KERNEL_BIN) @@ -85,4 +85,4 @@ debug: build tmux split-window -h "riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234'" && \ tmux -2 attach-session -d -.PHONY: build env kernel clean disasm disasm-vim run-inner tools +.PHONY: build env kernel clean disasm disasm-vim run-inner From cd9c1708a63fd20efd030df7a5e55b9bf3983c1f Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 7 Mar 2021 19:54:09 +0800 Subject: [PATCH 18/34] Link small sections in linker --- os/src/linker-k210.ld | 3 +++ os/src/linker-qemu.ld | 3 +++ user/src/linker.ld | 3 +++ 3 files changed, 9 insertions(+) diff --git a/os/src/linker-k210.ld b/os/src/linker-k210.ld index 8a24ad1..2ef74ca 100644 --- a/os/src/linker-k210.ld +++ b/os/src/linker-k210.ld @@ -18,6 +18,7 @@ SECTIONS srodata = .; .rodata : { *(.rodata .rodata.*) + *(.srodata .srodata.*) } . = ALIGN(4K); @@ -25,6 +26,7 @@ SECTIONS sdata = .; .data : { *(.data .data.*) + *(.sdata .sdata.*) } . = ALIGN(4K); @@ -33,6 +35,7 @@ SECTIONS *(.bss.stack) sbss = .; *(.bss .bss.*) + *(.sbss .sbss.*) } . = ALIGN(4K); diff --git a/os/src/linker-qemu.ld b/os/src/linker-qemu.ld index 8348a38..8bcce1a 100644 --- a/os/src/linker-qemu.ld +++ b/os/src/linker-qemu.ld @@ -18,6 +18,7 @@ SECTIONS srodata = .; .rodata : { *(.rodata .rodata.*) + *(.srodata .srodata.*) } . = ALIGN(4K); @@ -25,6 +26,7 @@ SECTIONS sdata = .; .data : { *(.data .data.*) + *(.sdata .sdata.*) } . = ALIGN(4K); @@ -33,6 +35,7 @@ SECTIONS *(.bss.stack) sbss = .; *(.bss .bss.*) + *(.sbss .sbss.*) } . = ALIGN(4K); diff --git a/user/src/linker.ld b/user/src/linker.ld index d3f023d..75438fb 100644 --- a/user/src/linker.ld +++ b/user/src/linker.ld @@ -13,13 +13,16 @@ SECTIONS } .rodata : { *(.rodata .rodata.*) + *(.srodata .srodata.*) } .data : { *(.data .data.*) + *(.sdata .sdata.*) } .bss : { start_bss = .; *(.bss .bss.*) + *(.sbss .sbss.*) end_bss = .; } /DISCARD/ : { From 80b03c67406464bb8162c62f3c7f8e90e7b1b6a5 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Tue, 9 Mar 2021 16:08:36 +0800 Subject: [PATCH 19/34] Bump rustsbi to 0.2.0-alpha.1[81d53d8] --- bootloader/rustsbi-k210.bin | Bin 75068 -> 78860 bytes bootloader/rustsbi-qemu.bin | Bin 103288 -> 108184 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/bootloader/rustsbi-k210.bin b/bootloader/rustsbi-k210.bin index e696137ab183ea5129e14e86ba980af53ae025d2..58d1c1a7aab97a8253864fa22811a0c8334cb60d 100755 GIT binary patch literal 78860 zcmdRX3w%`7wfC7xW|%;Lgn&F0JtQVKoXQA6P-vx-w3AkEYt>$Q`?8%RJ>#R58tuf= zYCC|5!GeWG#MVboLZRciHkH&sYg-wpNuSrRwzaqIt@b1&F=)U96AT#O`>(zBo<|-S zZ~eaC_q9LCoU`}Yd+qhwYpuQZ-gz$9-h#_=ueqZrFtFdPX$>1^X;nRk+;d%SEzh;# z%>FWZ=ho)8muz})(_`PdJMZv?8E2Net_$3eqg}ShxUzts;5yp*Syq;{ zA-HSW-WhXOXlTV;%O%!emc_rKmG(fEHG_JaOTESB+eZqnXe^)Wpj=3Fnq(taPm520;UCvaBvuAQ_y z(7U-4y*1Q&?%SC|J!oG-d7OUffh?=o&A;RCRd22Gg5t)U0%LCu-Uyrpeye^tzsRzx z&GS7Toxcja&p4fB-4e;3%Fm&TRn7Pm{L-nH_$KvB`x<@)#Jjsxy});kxeva_?!dkSM*u+D|ET~6}?pb3M^N@ z^vl#QEm7*wFHO+lY5avVqFOBcCSc45PfIw>#au&w zmp#}#oMn|q_CyM<*sFunb>_p`&GmVJG+RL$IuDTMNl4yMIMFn~nV)54tk{qbyv%OZ zvaD{Kp3qmm?*guG{YPG8Xy&ddjo`bC;K0RpKk8->4!x1uV3ki`Q;d9fEg;CB69lvu zudp`cC%pV-eN#oEXQ|G zefDgR=L4(jm=Yl$#+NO}cSP`HW`oD_uq0SF1EQ-7F5Y`JS}+QV_ZnH&rb5@dFj7Nm zlY0Td)diQJ#(MyXPBk(LT}FZ4cnNAP##_88UdZh^>)mr)+Y2skyo73PxMaWQwX;he z{Sk%?%w!T4=U7Z%&s{rDfOG2V%8O@s%3YFgqNlF|b~fQl!1SSlBJtlP34A|dcV$^c z#Hj+yy&k}}6#so_XE$-7`2xeNpD;$69q7=Q*X)b{KT9#XrIN4isGmODn}VMcz|VAv zpZ_9xn{%LehJ5~WQvUS&Fw!e9(wW>x^c(0G&%T*x`wEmv7}`F~-|8M?&<_qQi!? zi09Z`w7CZVUBja0ku`ulQY8&R9JUGzkcWpxT&ggbA7L6;9;4qCQ%~_s zqi;Gmip%ulr1zMXyRsYIu3!QFoo-c{l74T9axn%f_lR=RksC5LdA4Wl2~}WZYpd(J z_YFh$A1OI%46GdTWi@!TOgWa7MqNpVzpkX)IOzxGrkYe%RhgWhJk4{VKk~eF`%sdx z^Y=vezy?h-P%|g3W_K&s?DLz;A9`V-XMZ6&p_W_d^(A&g!y;W7Mm}T0{#CKg) zH`ALQvnVXSdja1$_--M+^_uOGDtB_EyZ1}@zfYC|TM^dnnr0{3^N&=0k$S8YP@G;% zaQI0k@~FL(dV}2Wp-4W%i+=qyXNi6{My4j9@zW@BTjyn2ou+(CZT8~r9D3W1y5Y#7 za6|ivv->)H6_KrmqcGs_Qs4GO+-83Gx~=t?-NTXQ(9NLwTxga&Phk^}Y0r0(V+z62 z;L@PQrR@(TOQTh))NGXac(B2mDXHt93gBMH(4=LNUyqrcGp78%waRT!rz@&J4ZA6s%~lZg6B-TYZ>eiUxjgm zX6LeqY|qCQSW(0vu5l4Rmzk=){D|F8?UhIH-BG)LajZOomIp-3T~(i_+WDr9S**yc zi_mOt-}d1I_XO|bQI*#Z1f@Kbsu9=LOMKj?%AEHmXOm(ddj+8)(q8IGFCxv^WR^+& z75c8>kbdQvW?^+*AI;_brLIFWbwM-r5>yydxXEN(oABCol}^baiTUJ+9@LURqwN0sn_Bvj`mZJ6eMd$2lI zZuZC-HSnrEoR#vd581=HR<1=h_s%Ct8*2|5!U~bz(ngxIFhl5KKEKIEPvMBfkg%^8 z$M%@vh%scG5nnj7mimI4PQG?zlXIYvZ749VrZl2|MMAjC=8BV z^NgQX3Ta9&Erlha?1IFoVO3bJPMtCL%WypSa zldV6hZs0Mhn;T1h?Zm|!!F^<9RJ$3=<3r(ePXvY5m=1+=cw#7=-J_uh{Apq+;NQEA zVV8;(zu-P;GP@{b_BaLv$>)4gDW1kz?V| zhf>>c7N)`xdOfv`z%N*i$F>pwRcad+WG;yr@_`gSBh}t+_Vt6?S=wQxLxW*X9JFiw zefEf}ykOcvucEx}!P|ZVHdLj#$g`OueqN@zetKgBGc_bh@__f`0n9p{T3BkO9=62; zLuKKOkrqS??EVs(N1?%r=W+e$%RCmT>qHXjkDs z^wts_?o`iyF~$oo0s6Ykv|-IsxiQGPJKDxQ8T}sAS%r~ojIb7a@c`sC!?W2uJ+xnN zO&40u7^mgl6_%#un+EJ!DmVJ%820e&XY?+^Y``4bO>MfV&C_qU&43tf{X5!bj*!nw z&)w$#1gp;8$zb(=(z4b(nU>!sy##LcZRf_r`f7tXVCG&emA6)bw|32J)QHN03kFG& z5p#2SHfJFwU1kQsnMV&`R(FhEUq$M-f-hmCYMR?L`gmM4=l}m#*Wa~kT4N%Twk(z( z<~i8&a)akd<*#hl@ISU`N}PhsMr~K--jr|L@|(89$#3FY>6;ACb`4P*P1yy$3h21G zq+Njfj7DuSMRo93%&`AY*IHFw(nZ!?$uKwxGcU#=Vvl5BKzq-@EB~&^D&KQ zj=;q%O$>!~bdkk=(nhng#%pftsP9Hip}|8lUSwU^YYYl{N`H)WDchi-;R3DEy-VAR zl8m4Wm`LI+!;|X<@3~0^e~$Uu1({o95!cklxUT2OLVUHsh4_w(Ey8d+&m_)&vCK(p zf_TXNiTw=2e;(k!8J+=`)aTztEJ@pyy;u9N)Z)45i)%f9fHXTncK1NX{)Ob1u_rc2 za}C!iKr(KN zYh9K0{dKZ@(UEUkJ;IYiWDM|Z#VF}7jh6oMNaGJwV>A_Lk4H!)ZTo42q}A>ocwXY> zQTbQliobTYtsjFQ{+b}9ugS*ul_sT`el4!{p2~&P&b0KA=VW&`A89$7=h56Y z_!E9U`DIv%!HS)`>dPekJ@Cq^*0p+n5QBB#GETsUjAXl-yPAi3q^}<>v1`GXSh?~> z)VshkymM^C?%K^FGtaBJ*|Lv*G0Unm%TwNj)*+^5dQ;v6ZYAF^&*O31BRdY{T93vE zqUl?WVWYD+7czUCVCam%3-9;$s2+6#QZ{J3k_v@WEF=$BU|CI51o6w?(_9?5k)Auv zeDxfrXW_YVxk=Vqo-4EO`Y#>7Z5ea}&2;R?#>-e2>=c^8`eM>gb4gz_`eW($MX9gQ z>q*a(B|x+l5OzjXwgou?RMD|*#ebCAmUV30wuF5V{dsCz`i8M>X+KPD%Q-T-Ewb}- zgYYN?+|J7>K@h)<@;KX7m(2HO8b(`#L>6 zF3YecgQpebWirM^=?YnDy-KC4YW5B88}`kEyoi#(Hi|{reU%Zrw=80JsTs@3O0L=T z+?E9?WLNInXR+v*JgS*n|^Jl=mf>=BaQS6k#TS2V6e*5I+cFyU;9B?=ei6rRQY@do_A!z z3x@Yi<>l8uT)UzR&w!Mkum9-7wZRot(^`G}eAT}_T)Xy99F1k@LqDXr>Sh}&zc+5F z+IHgupMU6!kKDm{uvSpnLMk)2R50i1P4sShQ`jsIXIJKgnRlY1m1TG8e_=l9MEo|j zwdiBiTA`BezbEB0wU+(})uQ>NJ;MI2m^W`u%$t+=MI3{b$X;rRc~n2jk<mO<}AOk$}4J%A+d>AY-D}=*JOv04!nC9xgZSL4u$@hkFkEM2+E4 zgssYnd)8kXzh^`}C+OL^cH*A(&dK*2{qvZf8J~Ae)N|mfiF>wAjqaJW+nTP`y(q<^8^{wWGtXb! zsvQ+plJL@9jqb(pOm^XKRxHCj=xRXu&B4P}t!Iwz&j>DKA7(nu&bJ3^&4+7M7DQ;+ z=*op>hd3MByX+(fb9BM@KmmCBc+3=-5kSnRNc zn}G}gC+x;DlOYK`%sw@HA))=;F57UWu#H&ytPjZdBCo}jt5#%;zAdG`(&Z~!wY=aQ z87rdM(O0@fyrsD>t#*a4Vw~C)Tf|$cO?|?W5;7mhDgawjL}$sTV{%gzjL|izFs8O+ z!PZT-WAttfa<-{aG5!dYjHCPW~u9X;*yG_99au`q^{w ziS><%_{7?j&L`0=X?(I&(DbY0@`<2#^h>FH68-f#_~aii?k6l84x(CGN$*rIuZKs! zk}6ZGl*{5@R%OIte&N|bpL70{prD>bQk#X+i&!6e-HGF893a+R{S9u^o7*FWoc`tC9lS8l=l@ zZYhOybT$8mc}%~*Nv_sAtI5maXb#1uX%$MX_y-Go6~#f!lz*;2NaLaybh5AOCfQf$ zUey<6>`v5I?FGJyn*M7DhL!V08+pL$w_q|*iuSu5j_k=fP)f%u$TDta8-bf~SMj{U-i+{oQ%BEk; zQ_+{mURx;a=}O71@i*w5$VOvnatoU-rpg^r4thlnMVPLskU5_j4OwzNTScqd4si=I z@@Q3?+b^ZK3gvf@rOwd-;X_og9))!F`Xp?j_onJD*{^8DIW0B%Hi6p>skkNof@iQ5 z$D}O%mUY*d6+_XMRtC*9dc}}SRwq^rx!1C^6+`jPDl8js#gNPXMM5cNTIeZgT&x(1 zSePSVhCjn)h!d(6L-HGtaoEpe80wI;J3wETMMTWJFC}I!dWx?QV}NatSoM_Netb## z7_60J#}Jw?#xOc&E?U+Wrj8+SgYCfACf%jhI%bmf)D-cCTLyjbm~+;-9~2p_crPOF zJU-AIk=hLQjA)Ms<&Karfe{A$OR*d^n`V97(E_mZ2WlgQB_QOwH*}r;l&2ZVs z8mFu)yCbLDjec{EWFMV9FmH%f)z&9!ZTP?%XLJpcmD1c@SXJ}{=Zkfo0<2h4W?+V= zTC7Iy!ZY%R@vjRjO&c_Xg0%#*x5#=@9ncLnfa2F6-Pu}?;Wu}jKjiC8RVp<*BO!Z3ejKFe+Dud)?aW+G>fdK7KeUQ(Qc zHhrqi5U5Zrqtl^wYE$SkUC{nCNd(!%#QUr-fo-fwKT0yPjp{gvZ0`I$MF^c-{1R|R zoAHZVu!zq9vv`6R1L+cWBgehPcOhS{)v-U(o{Q{B>Vx!cwM*$qc$h(wFq&I17h|1s zL(o&s-jM~H%{T7}O?quNkbbv^E1@gPkar4yEQd?t@2B_~tu+Zt13l!zYnE}hf2Y}e zyM=6n$bB^5AMqdc4{%vPWRI2+4zkGJRj|g7WGi9-@7o%k{g0 z_vDrs$FK**V7dlQ8t}b+3-~GeCS-FKatsg|hkVX5UJ>iYf}Yo74Hc1c_Z*aLpJnt2 z+wDB~^yZErGTi6Uuf|~2bo!MsXTz+5oW^{{OyIBB*J7O9BfjgzcNwk7hnr>Y4j#Us z6?*!1v-s})9&PIOLh?97%wuNbtVI;_z+YDkgmt!IW1@fgSxP|Xw(53{&} z_e!gDdfXf;+hPopoym(~&Y zh#W=E>M|b_nG@g);s)9NKX`^XZa!J@l=Wt(^D8FR+z_#M_)k}vtr*cQ5&rVSPe`fw3AD^f^ntRgWz5uCQjp)c09<00 zE;vp7PPuift8jl|P8{neQ>x|>U8!v024iRyB3`8n_Sb4>POlKPJlZT#OKbJ+wv5Q# zn~kHGE0(gp(w;h$JUcs z)(f`8cg%PLR2TB?Jb}Ge`VV5od2(cX&{qfg^3#r%+F;&;ZSK3zyZL_f=>N`~({pa! ziu!(FaUNq{>!1;U&$EEDHwn9UXn`DVOaDG+P%DU>pWCpek$cUW<@;II)~4cY^re3& zuend|fxHBJ;ru&aIC~a5Hm{NM#&>LyOC2`(ecSt`MtKuxaUr<4q1*pO?D7ygUAux;E9VYT zjoqKdy7dl@QIRcX^e4Q?OtRVGareq|qw)JcSA|(F4n?=mHl2+CQ z#dbf$YZpA87cP|Jx#&NGJZk-2lzn%|jCE|qDmwml{{XWe{vO%Ne~&)S?*}&X-=W9( z{mISz_w*9+zP@`p|2?uqystkxo&OFj=J!Kc{P*Nyet#PIM#7q;xD)12!D*o>lEz^b zktzIuoS~PbTFPYe)1Hkc6Vda!GP4AkVZ=?`ik881XHyOMMDFF-UB>O`&|_@V)7+ix zIevC@&$aKBFs&ZlGvZ`}a_#bbvYjf!?nr~jli|nOM~jnTdJq@G-l;RS!JqDsd#rf( zm*A<|9Hv3tEU|+}@Kk&jQ-QSG@)efGJu;lartG847-JY&ly2@hlt+Sqlz1vLCO?X`iJVd9a;K7~112}sWEGc;KXxxL>o$Mii(-?^R#=}E;kJyWmzARr(c1k^ z)7pGl;-xDIrFA4p>+zuqyqXFXXz&hmpywrqs_ws&Pz9W~g39SgLe=4Ur(tUQ6T?*g zha^nee`VXA_`@zQ>ca9UrE+orLM&I}X$CMXu>a) zdt51klpEt2Q@>rrd=vTZ9HpdLr9`ZlA$~~FI+349ISds4cZa8XTO799;#Vol;jO-z zk@zNBuD&7LkTQzcGC{sIJi0QqhLG*169OFLZ&_kCM$|)ChSrH?F@nNZN~=*D@k?5a z(-GIO(j$P$mgmE-Q7!A4@J}2>bko`m4a#;aXdid7T?>(()ONwueQxabg>CPneWZY- zf}YAuz=~)qMS94FTUAZHm#n1>gPTOnGQdnvl&OGL{(_O=YpPqC3wRJ$%(6I|>OX`h zjEEZf`U_h!KHjQ7m+VQb z=89)4ebt{W(Ql2rnk&k%4;GfXTlwS1#$C-7V+d5K)m)?ZAVp3x>ARFHLLWaTvIu3l z%p%NE^<@^JPd&>lLb*0edptJ85VynMMvEg2flt!Y5|w%PHF{EcvCbNLLSC$h@yG9^ zCl%MQ8t4g>3l3;3A*Gakz%{`i?CB)mQFM^ssr&*1G35G=ZQaO>uiq_l5nQ>(@BGgh z&-&Z(&eup5UQk8IiE}c7wJfz_JQxQu`&Wv5gf%bP@*vk9cJ732)ylR)uT9hz&nk)YG)^&>p-qt!jhOS`Zmd1ht~`b++DH5c zyn%WmhA39vE3xyH_!#GIbj?S7oEe2k6u%2)8Y6{PKHkX|enoO>L$@&rf4K^>k%GH_ppQOe5CO_cigbzy zmm3-L0?JcD2lXzFxp7870e08$d;O$%|F<3>9pst}^Yv?u zzW^I+m9OQm17BbTtmN5-IbQdM?Ip+s<+TE=$kgVWIX7=Rl4EY`_CY6+E^y@%w8%9; zgr9f?Jk-bgAb|<-hBWFp=fzx0KDB;|GDy?Ti*Y4$kJ-DX6*$t!HsyHg^p$gsSXYM5 z0d_bWPP7&nB0q6dj;AQGpt*|Db38>$fp>EZqte_cb5IF>hMQyuna*yh%Uw!-O0mXt zhrU9bJ43S?mydS_%+jUFz23eG)}!98tRR2kB(h_~8l&(zgHLk|CAyxuXv`WTQ}9#3 z`RG+8pnrD|ZwwmFMMm`pSzEuKRx<@%*hYTqu3AVl(SaSDM?l8k$94&A^rne z7h#G-e}G?65$i$TeQ^%@6Z44mCE&Z4_gr8Fg~uiLX@UcJ1x1WYk8!lQEG1iy+eYlZ zi{{oOCQ^7Sp_?Vo$@O+?isCuKu*ky_y@WoO+7_2RD!Iz4Of6$x4PM5QdM;iKq?}iT zla$041dZa>c!FC+e_h2gqc8ABrX-Imy-a&y;sxVQUl5*^q|A$yD0SVLsrKo>GyqEB(VM!$K0bT4I#(C%ws5;^bOF6+9oh=H9Ca-DXF z<_@tB={6xFSV1aFv>A~5cMPm#p&zCJ{1&38F=FlqmY+4+g;qsBZj-T1ajMZ-R6^1P z&lY}>jHGN!37aB3t!0>a7S1*>59;Z1*|2W|glFs@9 zYZpq=OLHkcp44g-8K=>b)B;imcD&S=agkNyHh&QG_pT@}>1(JNnhBnHlG+b_oG{0D z)G&9lEK?g&R#LMrg|umz5?TRYT;@OVcLY;T0w&6abd|T%GB@b&#~En?-)1N4h$8IR zjmp@Z^Fm@ji-bCmsU(hgKPjPsQIe>nE&i@_X%o4a0>6%}S|XW{JTqP{rl@UwpSd<^ zwIQcdl*IR_c5Wc+9g)jshtE^9yQuF@$N|Ys1?JxWJ2eP1D#J4XyEqAR5?}ENG+Mwj zs=mwviKm_RrgTpFE+UVVJZ;oWTsVoDSWoZ=c4ms1_*~qkznIExR+glVSQVzxOUi6c zr zXj@P$v#N79=2MoEwtXxm?aw5oB)SXdN`x!Pr*sfOMPy8za@M76FSpr*I50)S$xf8* z{EXWve_BKXqGC=(G+^%GvuAJAc72uqZu;8X*Xj9v8|Qvh({9uX?jzih-c&n`^!GB3 zQ)icCDfR#geXB~Lf%>p7q-%*-Tgj)j705nLH{8c-D}^GP;c=POu-SqKgY1SSu`Ka- zdTcsBTeV2eRj_ z7We$P?0IvHdwyK@yxHQOm&l%{$GGPu7LR1QwU{A_En$da%lO$^!OsZ@$qw*UoL+lI ztaTD^kq_?|HZ}QmG8!XtJ`Z93^}rXhN0^4*pU1S_a>tF!Y_$wMn`kM8^Zh{93}Bv% z`RwCdQ#(X8U5T1CE%oyh)~vN?bDn*SYlaR`%@=_iiQnd8*Ux2}+D8GW%YKDx#(zdN zBZwMt&AR{ai-Hjvy3xb(|L+&UYTg~&sHo~!5RG^#-3{^e6~={+?da8NWAHL=?&BL#BKAT zIk2Al5;9(N(DhaSYh&r^*_uw*x^Kr8D7spu-+n^SRZzVA@#35p6utsPSL8J4472q( z^}FN=U`+5pk*{7mDC-8UB+Amty&T^js=MlY3cGunVm^h5=xU;E!BSOM{~p!-&jiPm zf46?#l1B0_>eDGaZI#CQ1=b4 z8F++hCi&I7qjb}l3t#4D!B)_(Aug_9&QeJv}mi-#n)OJ$M6n?!wma911 zLLNaZ7bivwSq?owHIw|>exJ|Xrtn`3INkQkTr<9%Y9{%${NCcJYV4sxz&X`E%r*6I zQq3g4hBx^ZJg@MXk2V(=3ZGl3rr=jW(Gy>fxm#sTT?d?QL*a8X)fD_HYS!FUKTGu< zU5K&IG88`VrJA|1*aAc1O|PRj%&*8kSOjj(r}}w zf>k$?_a){k_jbgY7-s7@!7R=%&6YL*?Gw0=Vx9Rlm0~qmSO}`LOO=v^zzPaB;x9}u4C&!sIYYHIJc0l&zZ7biDjy&#z_e>-K%W6sPG z))w-RIQNledWq*RO76Q@`kWMx$61w$U3db*=#645Se=k#p&Pa1#eZ>}Y%dH!CFu&BxF~z?P`SVm~unj;b zs?ccxl#^L*p2?Gz)VeYM0TTvOL=JeAW3 z1+}({Q#;FRO8Qzl{Kt&r{u9P2a1CM}O>{zvCS-ZK%x{6r_>a*20KP2dUCSc=ni~1h zisYH@^KphBPE!is7iq?6GR;TDu8G?>)go*OUij;Nz$LgruM_y4(&*(=RY(_PN1C1N zYX3;~t^VQcoBe~?CY?BG^!a?3NP5Tbmh^%g;*N}~Wq#ND)LI$K7Vq^eoQgdJ+}9UV zWsLkRk-c-9;L1iG9Yt@H_nweJA%UYc>i_iFl}mAC@_S@d`ki@l{$Dxc3_K-H)>;fb zZFH@&=!~^RIAw(?CdVwG{r{zADqr)cmWfgQPsij%E*3Ny&TAlT!d3<3Ge!UZ--(xy z{x!ti~o@_=ZfxJJ*49dT_9-DHTgj@8}+!eQ(u+(6~yf&l53nu@~Ddqp8vN zw_&#pVkqaR<4mGXAo$kpSgKC1v?^vH8Y!R=5XiS0PRkwpHv0bY-iCtXy^ZIN_m=j! zjBQsNABMN_Ht@=L?dq?N`*z%RX>ZV2$l^KaZ`D!Nrq@Bh+!4R+NM_BqeDn z*-lorY9qB2Go0fWGu)PnjXM^}(QY)woTt-w`qCkRyGhji;ACrB@0n~(ec5Dd#xIy` z%|I^KJeQWUj=i-8(_U-id=%uBz4iI)@o&LS7i$3QYt-(NerY3CokN6a2Xqql?&R9r zI;y?LWP6V!+C$F&+i0(TRD0i+?d?poSM;{p+cc`Z2V{HSO0>6VlI;nRQPnFb^R{9?WddM5?hi zc&@UICA1Np@XjT*cgN&OYkDT)S7POd^9IdgOSRXDH;jIU zpzy1VGwlM7WeBe59nBT-PYPZESCpC3)0bQkzdn&$C~#(dD($2g&ij~8xrLG|lIQ<2 z&Kemq9((*k8-7K~>0F{t;0aodfX5!r|;&_6^St?;FgiZ0X-ty(P!}Ak`32 z8|K3ZMGw@OTojFx`2K?Akm)H=sQ#3b8^jo#ey0QaqRqiVK;FUzGtYQVg{+V)tQByVmFx(aoudtq90M zCArpy7)m4l?)xJCj#ogh-?f~_RoIKpbgGgy5MRv3K{vJejMdm1Lh|v8?y1LiSeNf~x{kw?qhQuuXTeXi* zTP8+JxRAW8$z9QQSM`3$FIRC3?H_5AbCZreg9&)=SM;HHcJ(yR=7sPjy(ZriRf%&L zY%}}#eP;Hto=Em9?UC%BJ(29r4Zz!8@8)20S8n;PsRw1>p+!f3{@48z(7*4W>4cM}5M_5qY|?uyPb=O&ot!m_PNrAN zlTXm;TGD&gR~4P29b@F_&!g$oc2dfd20HQgcP8l+y7rx;lk@z!=@kFnThR&UhEHDa z9hwB4zL`oVXMU1S+Pg;6$yxCB=@hzH(W(1YDNjd}bkZvno#@7$biJqjY&4yM|B&+3 zt>~oVE@ zc#o1N?d{Xa$x?JOpO^CV$0VJsaz&@;6Qk)AZ5&Ofwr8b0{Z`S*!kz1iPS&hP?g2g2;rORAqehS^e(8+ZIasEpgav#~J#HhsVteuiRX`gB({uzdnTd|NuN#4M@ zTd{^lx8kf#ZN<5BGOYv#Mz<18YbE;m$+Y71jc&!dCKZ?H_*JQ`IG>zM zD|#1u=*kNV{*Wa$x{i5zd@n4taU3s9NP6fi>0Vf1Q<@hhxFEh}TrW&eJNlo}3llZr z|D=0iqK@;&b9!O7j`hNv@1=TSbE@l((h1aP1!pp|eckq5si{6IV-j>eQ?Jb{>EyAC z(K)x%xastkg!h>(OKwSwThxr-F?QU6OU1Yc{J58qZw!H-C|72+XHv%DC zcf*Krhn}T~L!q^?Ccmca&UVv(l)SSGKEI~pf*YS1nOF7n@I%#G=DBxrTtdy@`VR60 z_L#>)OOTUAF^ZKqvCWSi(R5qz$^kk4Z_4q1gfT867QHDE3m$)^7(e_`Iev;*aLFe} zjlXJ~@n0my&k+lePXJF+uG8a|EKu5QO3iSIjrc`)^!T5mb5yRh+;=wB;Ledddt@9V z;jc%vL}* z2R#1IG6zIu{AYYQ2;r6<=z($MAY_ah|MGFhe{5V15D}l~-D%^0b36`kHcgHLepWG- z0|Ni{Rvb|H5yn7h#HmO z^u25P_uacj+-KX;Re<={u4x@ILZ+{$FNF3(6thg_7v&j%50QA&ZT9d@SrmEgW$Oty zAqjahx_CrnkENWADX?h?J4~F7sf$&Qd-xl+!&cEwuJm&*#aDsbD8^jI9vj3Xyo?L#TRzG#7C$4xomkW<8{FXr4~WJRKM4ls)N zAAX6m`tdi5GVke`@+Rro!o6tX49gYOJp0+m&MWCCnDV@D*OU%lLFV(`U6~!;hM^NP zo1NTXRYj}Yo9NBdxi_4l=f#|yLATh@Z=+w_!hIn|5JBuOqxFJX@g8-ixB5=vRx#A+ z!_y4Ow)Yhqp1_~|J zJ%4T;#S_Dbf5bD`FV^t}k>;BGJAc^fon5tKw|42io_Uc|oTrI%%Mc^YvVLMG>g32e z3r5#jlB}cJ8B=F|vW{wJOke+rNUenDJlWTUqx(8Z(ebx{`PQ*@#=!H5WSt57+B%6k zSH>8_!5NI<_S^=~?=yA=NG`P7;D<5(bGfuYjr-n^kX8qSRJ zftEt@vEL3ELv+78{qo=!>*49JM#QehUc0u;#BP@n`w;H*{o9A;<*KtNmhmpi{2H;F z@%OafE`BRp`kZqs@_?~oZ1mN`d#bAbsLot1wB5$f*t|va7=^Gwx+Lrw~+FK&u7RI@2;R+c?!0vm>5h z)#qB>-TUoG7X8XRdBBcL4_1A#)%*MbtQ)+R;W_9li0;-NZNk&b;zsXRR|n^BxO;P+ z>B**&jNm~Zv{MG2eY^0y!ba}qDXM9o$*V2YjKiyg%Qjp|^=D9h`Z~3K>h}d3c56d1 zeBayrifG{&wO}95t6hQpDXW85ZCFU{%;a{KrL~jVF13@|?k+s9Mc%1#>^4`)aLMuP z1^yA_s=i+GhX2i-Ch60{h0^lApS=gnF8u!Q{9gMeb0H!H{9c}`8TtnA?x$>VaA-}@ zjdeFZGxYSyeWy!0{XNDj%zfR*i|0R;JN*Nz>zLLSv^$ps2aD%3MI6W&Q@`ZQPUy0R zI`1o7J3ciz!=1Wq6(ok{B)Yq$L}t{5{+pq|tSIxQaE5haR^++GmHV*AqluGdp3C#} zPvM=zSkLOknfE4@;qBM?E#0ZN3UAL}>v4g1#G2T2yjx_^t$uVCEop7a$t=yKekjwN zV4{=pL{6AE6PuxTK9z)xA)z^#-pTS$Cn06&h~Rt#qJqkj4m8q=Vr9gK8=LJu8xbW{ zVttqPSLa83H{<>)oKj3Xo|Rn?Scb9oVy?$6*mN>4Sw1|s;@)5(tNi4M)2Tagvk-Dj zq`XD3zXjRm;*RRk&^V7w1Wn-KiJ=JD{vedkzc;@H(P5j0NyM9>88ofsPHyosREznlt9;Qq1DI2TL|jkb9r zXhP?J2Df32f`$cw|(kL#b1>4b(`%&l83!OCTG<@q# zvUh!QPju)_(E{1-=FT|Ho zC~?NVzyO_^pz`>|XmJ{zf0$=q=Q)Z)cVZtX>zpXYLbuS+$dyha{Z3kmv{4Y6?X6Fn zr&GxgOB(jqA=73M9#UlG$UdCpZX+LB_WMiQLBA2NI+5pD9#2!GvS#~MhQ%66!onw9 zQoE~x3ABu};cek>?dz|4bGHUNyGFEjt?*OeDKwG36F7ma3S4zYs=iA31Id!;4ruO} zh#3(i0$VuQk>&^7vv$bDoW|`nD<0Tg@+2 zN^=6Oou~R3Y%><#%ROrb;lyhiv@fa8IE}2QX$L9miQ`n4;B7yh?<}*PC?|kRE>2`U ziDzp`TGo@W3-wn;))UTGHwIE7j6C8mG5;oWf)F7TUxlt(Xfby3Z(QB&tD1M?ye}e( z2)v8aq1V19jEno8mG)`0h~4{k9|@CKHQ)uX1A1a$`h5G)ziTh`RXnb?5<+} z9AAntI#;MM!oHTCyUJ}zAES8-_Z3LZ-WfASEoY)JYQFR_Iyqy<7zxY2$v${={b&E4W;7`LU@{mRCzLBXO{KU>0 zvf0`{)!=#3o#SJf4Ap}q>LfCG3e$SEe@IZv!mb{&r6g~i;c>AYlwLEClUh^i(zH9Y zaF#K1fXvF^r?~V?#%t4=lG-L@T5!&IHREYDqpwd~)5%C})9FvGNwWsoib<>S?f)Vw zfv90?s&hhc;sGKpJpdl!scuvH# z#8?AzKa|YDym}OGVsFsOKDrrY_7T#=6u%R52(sUNH&@**cHIgs6)2za0L( zn_JUvr??zh+2F{?>9vVlIdHyQ1?=xSbBkGZC+EjO1~PXbUyR=U$kQ6|4_4j8yKbds zn9Apn;kHiGUDMo;`;X*KMtycFe?;lDwJx&U-8Cs^aX65#iwIiG@bWAU>XD*O1DPB# zlyc{nFOIAHA>}Ckx|^$Y{&Qo3ikahH$zo>;yVb@*MqR<$rYl-Rl0!PpPuqB@A29(gx4A z45omC3?Gsax+&rH-JYesiaWM>mNJb=ZdgO%7EI;^S332{j<|o+EqCGzSwDok_z0t8 zxhgc?ElHveIv0KXZ?p+Z;__^xar#Lsp^^F~aVPS4^%xVpc31l~$c>o6qPL`D1iaNp zy9xch?5nO{Yk;%ZUv-Id@$e+dR#mTb$a~#r+I9IRtq>ZpzR02>TCcB03>;;KxVe|w zBMVW}Bt@`uB14@dIfLZGjk9HtQ#j?IhMOiOt@s=@#)+^`(__k_mNt!SI2lvsH!fu% z33xubQ5HGbW34hB}Hf<&xi--a)eg$U7qCo^BX+6MWGU?Zq;ELpXkHxKc=5s4`XvLB`B7Ui+@oB25`#F?sk4Je`hO_aUu`Mg=pOoasrXk9ir?bj!T|11xI+)pzc}%YPcz`#v(AmZ?iq}| zGPB9NbVaMz7+ir}$nr_tra-4qiZa{)h|_%46KcZiz)7K^Ors|{Hxv2nf@_Q}#6al%XU{OkIM>^?U9s5c0r6r@zfKobu_PnwTCMx4{R{P-Td*g7n~a!QB^<5Gk91=8*><#kfa9_>ACgC7^zpsh$QO4NEARA!M7IXq z^9h|V_wO71#0U8i12fd2NG0}{+li)o}JJL??G7b*9># z!L-@q!tM}384Wi8aO|2q)sm5YPKCsB^ctQ$i)FSu@)99Cv_j>(SE$fC<%}h}6E$C!})BT*1yZ$>B66-J2Z@$b) z*F~mLXBd!C`~czsJ_e+!=g{BP>GZ5!MI5r1vRoKW4SSeUV+r{tP7FEgcPQ$;415c! zBgQZvvb@o3Xd60v>sF(G4&>bEUln70So<2|);pjm=)6R-#r`kX2_E4(<*%mT|L`h_sUbfISOe<3TgJYq{;LxuzRq1@~-tJae&$-Wla;@0va ztWQ&IV`Nd##+p`^RY!3WK^yBZ#xraqCav1m#Qo1A;==>atlYoDMP8cxPbobVy* zeI@5>&3!Gjn#FSWF%d;n*2LtBYkTqI;z zi^qPXe%M@*mBWeHndl?b#s0Zl%71h|_hC2~J#))cAtT|9iCh4RCsx8I;XX=pak@LK zKUXjdn9dicm@?0F|B9*7)1KrRy@{j+`z9-ty@(T${!wsQuFhwotUS7Up!v0y*Nd~b zcijyxIAYVey7GnT3eJw} zGWiJXy3t!NVBQ8FnTkFtJcv| z88FBGoo!|X>yNw$TykIV?mka7!npHCNN#^sCH3u&{Kl-TDLHPONbH+BRcrmmEa6&x z+^!to%S69Q^H5qJR{_Rv5e!`nQQ}*gPtl_rmQ{0){fhsL-HElTQ;4o(eRLM?c`JF{ zzH`kRSKqn%%~xtxp1uCdhYsKVdLseNZ&x^c~`Yi?Zq@?+tZ zhaWlp(8&jePSiXw@aLKbj_#{@;0U-8wlB`U(n0A(34QV(QlC7ov}`o0w5<7<Q^xZ1Rj8m4_@s%dwJBX$RL>FJ_~anc(x zhLWu!HVv&-7TGB@huO$|S-Z%R#=0KaokG?_+sUG;Lj=Dl?CZJz_VbP(yQ%!xH8+*L z(tP8Zo*6f;?tGG+9BsHS5 zdmGcUsG-5*xF!Gno2IP;7NPaU8ZKtgo<-KWh|!Z}wU|@_U2wE2M0Y1%6FFw4wI}(b z=m8NSVt)PzwFjICXrp&gCh&8nZz?}))mhf{WJf{MJs$(S9m%?(h~0gpsd%b!(s*6< zY@9}xQPC1QJ9LV?aT9-CvF9SQOlX85z*RIKH}ww8@@&pJdKGSWd@gd>-Fl|ufD!pk zWJ|^2%+`^C{m0E&5&s*;o8O{u2C6>SdNG|TbqwWrJ_Q1SeHmi`KE%+^ z%K=G!$9DU<2u=d*H_p_J%X_`WDohp(z~$OfWO*uBk%?U$1{i&xowuGlq^OQtrz zdfcq~Qfp?U74w0RlwiHWxs5rt2%e#$O8hgnL$gGkxvnO=M_^?HcGd!#8I8_ce@Zb76mHnpUyrE}+65ucdq?``gBd87GF)MGm`+=RIhXAsV|kFyIg}P1SRiZ|k-WC???vKn3Q$%ym=ajC~3Zd&nS@(yztmh_G z7AR0`Xsm)bo-M7mAJ}+X4LRR%Ta(@I_ZT-UQzn!%X zt$K2dUwPH+$BT1_g|-cBO7+%Y74{cN@4!~F3NBx44Yfo4^so9&ca*wZD9brS zZ{@$svDQ+t9V^b5k@7{}$$CU^{r$og=~}*`6+S!J)MVRYExQ+98}11rZlSnGYGlEZ zD;KW9yXWM=*JoddboROKViNZ%vCcydA^Y3xWg58og;wuf!PMK2thvOykgFK^sveoi zrkxu9_M`YbjvBEaNv8njpNhKks$FMz4bz4-*K!oGYByzE!+yj(95#FC_Cb6F@%|tNf7oT5Al;JfYVK+t>QPeuX<g6nGgF=M*NO;N1iUP6v`Rp@4zTNWvZmGheQ5(`iFxoB_z?Gsy$Vb7l5j|0Q(- zAYx3om7DaG4{K$l7vWh#Gm@3(MhwTmYC7>xh2RPDiH*LTZn_bQBU7MQ;(n+bs#n)j z4O(^BQt9v86886Rxy3)YWu1R`%kBP=Ej2g|`bP48zyIz_wAsG*_>kMB6ZV`Q8Px%Q zVrIiRsLNO2O88*aJ+ywm3_iXqSl_V_aV0mh6F1N~0Ej8F-V3#{gi;(JKTO_|2Xz-q zjysBc+Ug9?X7jW>2}XLdf$P~eNyOU3Nj}mhOF2_-nT0+P!{*vFW=Qs=>k7LDu|7Y} z5ZEPg#JPDD`s@JXEWVHRw?r(Pb2fU1Mke! zFYKq2a46E9+BUqYvTB7R%gl zK}9jvwgaWPu*l@ONJiJF*kf-l#U6=Xut=drK(C_*2*-yPw4QnKz>;e3F|lR=E-vX@ z*#o#{HqNNOdHo#O&OFi#%x&udnH%$MSyjf0O&NCIrj;2P`+74j-{gL}Yt!W!?q{5g zD>k{xMmAlM;VK{ARI*7sZ!lwdhPI%8!~1s4te&yp^n)Gk-G`1mbM)zfeK;lb8rboE z*zq$W#=tt$IC_m~9Pyh*_YBkMxCOVO)#o50B<7p|tou&0JW_w82(z{qwvbrEn+b~! zbNKPl95E_dUm@(~way_)*+J*`V`W{;iEF3s#Jt{6wq%4lz>b#mk`j@o4 z;Ll_hvBMH&S!}mZZ@~5Nbe#TD7Ip=5w^r2mutZ8v*xuajiI3yr5^zELg|+ z5+l}W!&yXl>RUwC7bLiHl=Z+fVM@GJP)Pq$!ow2xeS!N-j(Z0#g><<|Uob88+YKkz zS{QSa4LPc=ei_xx74s;69jz2^#5xP{k~$4K9ZS(V@STWriVK?NR=qf;wS zY!6Wzq&{b3d+9XPF=N?Mviw*8gp6zay zBBBSZ0@!jmrC8mqBi2#`hX|Mg9v(OCdZB)j87VDwE1l-LmH4^oGqgnePSK1E1yWnt?0;ocrt|osL|DE{sU7?1J|0 zl(k&}W$nRKC=36XY!7R@+}_6s$}+P_tnE^EJgpbfGykSYMrxUY&6I8RydYM1MO)T& zYK0f8g=iJ0v0tTD13yu141%AA!A~Q0e}QMOcbDg&x4`?ncbB)rTaXRD%I?SP%_P7JG<1Vh@qlnoqh1I~~*> zB9GWZq_sjK#2%t)tuw?PB9GA}xYZ!(6?==2K`r(Wxm)L950RjD;jb8vdvK$2T;kCw z1r}>65#?-nqwVbdo(6CK%%48EPwc*W_ncNOuja(echB3WUAkw=?B#d4u_wmTjk&H?YYnLncK^GyyGRjWl^TFrM1g-N4Y#upTCT$MB)#t-__b1Z|de z`5f(vjpBYHqo2GzyDJZ8{4)kt@QDOrBscD2rb9OtB%{I;jQf$kCIxd&&0&}trR z0?fyly*w3iPS!(g0gAEVrZ=*ZvB&7Wh<<{yW#&}Revg)I@9;ao2Yle>E*pD7n-Bd? z^UK?1qd0HDP0)7Pea(MhX!TW1YKDhR&ntap3a%*N3NT#G%M2IW8Pt2H3EYalE6o!0 ztyAAbi*ft5Zcvy?_8nTLFr~kw`UXxg`y%f66@{sQ!>cIGSnm&;{<@Za|Np|-l028{ zHljt|h^r9X@1Ku*M=Qt^IobRVZrNJYByGbGBuTXr-NiIshB?=G1u|UJm~)fc=#COjj^jA@nSX_rus>t>+RFZ)!zIo$_H*{Lc02Cs8tK!T9ex{_Lc34} zzYRA3jo<0B68!cIB5k*2L4!bFv>VS-zoogC*ZQ^dJ*_XU_T1p1$mh@+`q%RpqwDga zHFM9$uldzpmW9XzLVN=f(P?5#CXY$z1vhCp+kxNt(oOSJi*hv3UUpaWZzO$& z6QlW_$^cS&D*PQa8twZu8uGWX#~5)r1)$2J@XBE^L!Y+EGQlB|!n*Y1ZAWFh#JeRezG=4` ze>Yw#o@WexVIKBJ35ju#%OLqap=Yg5#rL6aDlRz}$L5)}T9RLhGiZipK8Lp_;^efW zDWe;+F?{ecGrPhQB&!AGaw0& z6zF(Bj(gV;19I1w=9zOOUMZ(^aUlE(K*k`6`^&;OU9oNv&gYw zC2eruy#ak@7SMlF$aBy0bhvHotj)k*#*&Bw2#ZUcI_sVj!?z_ZaT zJ_#*OAwi$sls>TwIKzWpp>N8}RA>R8d#^=fsz3%cERQR2&OA<8Pf+#xl${@74pdLpD{KG^+_Q3N^qMndZ zbz|D43?r>da6i%i;9ijF_&4MCw2EPOWtc9a$}~^}|8dV`vDke!I3AV@`pZurCvJ6H zOi(6ncViog`X()IV=oBz7ob(DVY{EK0Dcp?kXBW&9umw&1Q5Aq>U}O~5=(i;`pP1T zq{{L@9>am$ImA-c+vs^Vpi8!HUBo(T5AK+5c9Kv5Cdxb(nn=5ltr7_jVg&Sm=m)@q zd=O>%<>gxQMG57IsJa~KZHjC$6WI(fdjAPvS5v)fi^4YBOl&;gH zjpEG4nZeMB*`2oV6Dk2S+2jm0$uP~Ugilz~eKd=RI3x5BLlZqh(OixTa})|15k3ZK zfb>YEgNQR}^2F-Rgi&B>alA zVy9sx#Vy&2T)SL;f2oLg@%Q7LoSoGHLf4Vnz}zISZ9N z>Z@>Bye84)6pi@rvG0-V7SH|f?!E**iYnXtR#jJT>5vYcg|HSN5CUZBPCAQ%k)gvX zAPR0M>2x|FkOh(so5M`D4nzsUG@Cjy5tRwiL5E1X#H7a3I zAm9I1-AYb=$F*@Ji3nl zjwoebF=~zZjI|?@)SU?*LA`8u-@1-SZQWTVB=)JhpyWuL08b42A^fH1wRA2PY4omd zOW}mjF=g0^otF+@h^|;y9I|9vUR2dqc|>$ih)c7&`K|6rIc-9Mj?*2AYKFeh#_yJy9~SkzrybS=BQV&!@u_-`3yiDy|=xGzrDzh^xnb@HBO zUD}@3vQtLwo(}hNOG#xzPa_S^BZ{0!ZR5OYw+VEtSM;#G6@@pdqb~KxtF-QE z4wU7EXdCc`8l=gkn7X>IVx&85WxGqCsfe=2~rCtCF(wc-^V71hc^oh0C3c-V~>#`LoZ%Pp@l^)OPbj3hhUf+E6K( zTUosrN%yLwQHER7<&zv(r=(x6qdU~rGjx?ar9*efO;28_lr;7xjAk`H0Uo)|w$2fC z;ZJQCt68brzO94ab(a(ko4$-XF;+`QLxsC7C8`tt%SHZjt+B2x&{kc`=rK`e2g$NN z{dn#2bwza@_{)X`>lSaw-sHfz(z>VFdZ{N3@r-X8?$5nxz=~gni*ikLM17-3Zi47SysjtqX2SvB=*Wk;R1q-hsso}JS%@63It9&F8McBs|HJr%pFqN>JE+ciy` z?g{AlL07ve?}&R?W!aXz)1~W9R<-?w)=BD%>fS9!Jw%9X%G;VieYu2acLSlk4$WM_Ew)57T;Xhc+z!DhB-DC(%IXgck9^MoAiGSx+pYMaR%cwH@_vYlb&Yr>XQ(rgFYK;6|T*p zAyn6VQ`SgAwQLz8ex*%U^rxxFw9p=!!qs`2%0TRX;u%9aO^K#cSFwL@PrrHOEVZo2 zxhJhWv8O7!O3A%3v&Uvr+ZAaEf%clFFP@Es8~&PH2sy$6Qgdg>JG%eK56b zOGKM*-n5y+wVQ}2YFmf7cdqp9FR6z!?9|BCs0xFV=J-!d?n!Yc&?>OAFW5r3!2QUF zO%yg(m44}4Gn`k%H20*kE!>x0i!;CD zWAvdh2GH2c&It%3Ru2beC?qf~0WwE$cow9@1)on`U*6$D5AW094NjZEMwfl{%3Pk# zMK=_0!rZ}p!HO@IZOGY#bsDTRpRt~bZdLN#c3JO+H=y_yCdK>E+QS7p^8exmx>BIE z|G$)X@=QpmC`<#lkcSU_7 zxK+Y%!&Cg*cSU`)A$RQ(-4U$x8s>3*#RoSVoQ?`7S85wtqqS@8n3dqv%ZALg3vU<) zBmdfT%56kGA4ab-_4MkHgtvDrF;c`69+Nb?(l^X^YzzsaIXy8_@N&9jA7-9&Vm_Y0iatXYcEH z@Jz<3tky-%uUDm1H9Q& zn)1mSB5FM6H3rWb&4v2J4sto{_03e zu@R*tT%0cMzt7F*?Z};&dvY=V(2i9TSDjp`&e@rnmf4;@0<%AZOS|N^d57IID{l~M zP5I(U0?u&?!i)-G%17e#;f74%>a_M5Z@b*Pey<&Ze!p!}mrmPT8?}zJ#bJ*vl!&FK ze}obbyo}2srEgO$HY}ZS55Fbv<3H5U)UKA^tVd2R(^#8iUCS^M3dt&-xJoBE_}^-c zOWdky?th|=<$Y{&pY5uyt$Vm9CC?|`l&Y>uNt}LkufZiOnk4kd6{pjYkjgGkuHYfP z`f;=$9Z%(d2>DJ~eoNNe|K_F-k8+{KR0u0y%Wzw6c60Z><{dw#H4j)Ll15E1u~zM= zh^lbt&J!cFH{#nhb#BqN@ypV86wB{)Ppjl}c6djHHJr^SB%j|Kc46e%X&p1q%sDj= z<5EbD)=tM@kNaGgnC96VN*p0gq_l0^4#y*6zmVM3p&oN6sn;ZiW?pv7IhBIwFLOg>Dh$VY6XURSeIM1~V2|vHNW}4eUI@N+& zB$wwojvwIZsXEJn1djS;cT`85c3e&nEaIOCT`|Rp-b)T!6Fk{-~6Svy5Tw}odq8BWQ&15w!m3Iz3VP>f9zyw1F?3Hom5(eeGB@anZ>fe&r6=M3>ydulZ4R)Rs`|Uq@*T zdh$ef{eR?fqSSv{Kb86)Tr&^e#$4{2G)uTNlp*ZWaW+?`XAYk_()wZZyi508c<^jSN7k7|r}A6r z{NA`^)6%*MkGO<4yU|Oahu@JmG4Et9|H~Z@O?>F&D)pkBIcYiVnQGTg`F&2|G+KhV zvg@L)YLesYX9-SN+2{H4DUhSDXLjJYMzi#rV z<#xH0){`67k2Ta+-Cel>K956eAR87r1~>5ZTn4n1z4pEE+Mj~gZmaRk-AkTq^UQS; zcy~XO{OwZ1ZDzOZO|C)tbCd%)ZNoQa!69?|`1)Q6*ej5| zc+?~gapA?&xZv}N>&r{MelIW9-eoV|>t9MwD84MsnWwUtoOrx?y=g^fQ1t<`+u=9{ zKUCabnr2yZRBrW-KAHfxx+UW16^~ZkK|`UB^~ihc6?`D_-aYOk!JaD_-)BO34Sk@;~Fp zpV-TanZo~WulzMv^E;ES%YR5&Ni(;4G)ANKl;ej^!cEya8TnkZ<`lj|k5#v-T92k9 zsD5o@Dm(zAN!#&5a;=B|uB(2{LSnJZModiy^+oHKe@DW~H~zJyu>MND#!1T8Xh_Ta z3zr@*i#ik5p~yTKH{opPl=_!Z=icl`>Kl&|&%tm~fBsuC@j~_24v&^tEBCbGR6?6# z$!9%Lrz5pkFO%)s))4j0SR?)WDdDnRoiTN10&VZ^a9lpXW5t#6I5$L{HfW>q4McEu zvJ$C}x(H637g0Eyz!_|F?l2{Vk@|zsrV(0XUm%aYWvz^;b*yTD@6$wtwHo5lkV`G| zE?n`zd#In>AjkZ4z4=o0n>Yzt=?HI7DH2EE)a;8q-hz?KCG`)m;987_T5@S9?02rq z(-00X{5@XAsA>T7sR1T2tuTkQQ1aG->5l?+K0M8r1_yXEo(G zT75g-O~VMS+uKq1CS7enU$z+KH*YVgvTZzYTPZ#9xzSctZE-h|J#_uNA4)`C=d>-4 zI{h~Bu6jPZHtHLcaA$ZM=8fWrUqxL+IbBxDscBo?iLu7rZFQ#=tJ?54P(p2W9c5?7 zVvjQFM6DKU^0I}SpH#lu^8|Xok581^2F!C4R&R%!ip~X@w6T4+PNAhxJIYfwN;EC+ z3<|ETPxu>3;cmGUZePFM9r{K20SysgzbZ{V=0hzTvaUE<>jyh73quZU<_=T4xy99C zEl;#x$*bA!Zh7qPOZ%Od6HZr$qm96qix+LH@A0VbHs#ekF*lSu-R7&wa+{(F2~adi zn(8S#sQL+-d|e;n=n}&HH4%H!BzvZ!Nn(H94$dZ4DZR7j{P`gBnkS!Zd0V_k91CFVB%i+b>!qJ=K+}h=6_jcxc?RyTVtz>H2C44!o zZ*q+i%KE`0cIXGQSn1CqmeQ|pRi3whFTY=<{GFLRWv?iDZK+Mjg5|WOq)|R+ZQX937Wlem&=Ec-V zyf13fh*~A318=x(RcRAh8`$@~vOl9dt9+Gu6U>VQqANew)k64Bw8(1o)gt{{UoA$y z)T70|^@cnS zec_vOY}KHKj8DPu z`ADw`kf^>x&O^Ri*WN zj|x?#rcGG8aL?uI#m3Z1vA(m7vuISDrQ&axr=qvlgp)Tnm#+yW&{vYUQtHA zt*8fhFEn457VU0uhkw`Al}+B-@7*66{xV(F9++RYhVHZ&?IFw7V$Z;OA*9fHHYDHL z5wgg7CM3&x%9vrsu7UEc=bF{Zo97$B`u;!6x6k4ZF@iPy8 zpm&F+#cLH=Qs^}H+@@8YPuA+)5k1dMc(aU@+e%5`AY{wEYgos~Gd&tBnvD>~^=Nxap>5_BZ9acn?;eyE z!n94*|2Scu70fPu*&_nD;$S`5dUL9A45O zQ=C`IN-!m7m%XUSS?J0s$d|J0Il0cv6sgdjpY4n;a@h-A(k;@R&fKh&l!;UCS}?;l zbMjqNVip$UIb#Zna_t#0(GGiIc0o*`GdriqRk$*ysL&CUms40+P*@aQT;y^@J2Q); z9r@#|an3BOGuDwAYt70?&Pa;M$Z;*m%5mmqj*E?s!+)7GHzy;yu&CxNDWR&R(;r;H z9L_BOUr$eGex`KG_-oX>UUYA^luUxz?s7TvmbfHWfmBqS;VQH{T+;F!*FvdanX@n} zw_v%fMbD3K{DnDLE-BZEpX+m66TdJgd!Zl0GJ9^ZQ_3uG7D@R9E-5R=CFSHpA(%-i z4J7Yx7YB@T6SYf^{`SnwYZdY5%VB&!OF0%T$;n3%CbAODD|R_o#JF-Ci=8eMrEIi? z=alkvFcT&qeSFNO`?`_-4tp+Yq?A5u39XS<9%PB*4iIM*j-Mc#IX z|9+i#ze-~HxJ$vaZ)JKgoX+ss2@2hdjf~!pVTs{LhGQ8{VmOuIDGYn%{9Je;le>iB z6%3a!d_ODM2PC~*VpA?E`B6fI%wb_~J?V*GQ0$TlvZOp`UP0kXDXXAR%C)bgL|M)X z#y4CJT`OlvuH6NmyqLx2xLBn}wCCh^S0l2I@yj1?hKzN9C_qp8b5JGkoH$iN|5HT! zWjw@nf$@3Uj=%n~(dOvbarWFL3+>Tyh@bSmlHWj?n{=nkg4g6fdVzdN%C%qt#mXd6XLzAvx} z+*5yMvl^HpO-B`!BImJsG+M6uNtcv*fdkF*bsr1!EG*X}+?O!A$mnzC#hH_+YIEjU z%yh(^GtU~2XFciW$|YCc?rVh8Qe z)9l5$t`}K4IA$nc-uA(Q*VI$r^fI03s#7F6s&rY&mx(d@w-2v8Z$7UVmheCY5Lg7C z^qjuwZTJ`I_3%x17Uny1VFI{FDN^i;q}W(U{z^B3ClGpTz4pKl4WvfrCq-tgbipB;3-|cWf-IL;FP01$E9JRh8E>}9!Y;+GRA+jXu&`IJS{BwRkGp^U z^Wz_uSWIty{8x7H>Ph*0?dO&2#Y}8Bx*ngu{VqU(zTonwA7Xa(@#lK?r@a*l^NVcM z@ASgVbgG2EywOk;9}OVB{u-NaWaqeI91ER}#Tb-}Gt1XpmXmS7 zv`l^SbItq!lMM7tcJxhj&Xz*EDB9CV#rfzm91HCkxlYMZkm>Z*`8qzc+*wggHt~vm z$1pvpk4)?QwG%QryZN7=UlKvlFP-Vwro4F8JZT81aE__6bq`12WF%kWDK|C3?u14=wI!}A%gWcWpf zKVew)pb|ft;d>YkWAbb(98P)q$O?D|d+zO*z4+U^6**IB8z?MZ;$rdZt`pzL>^V1o zaXv=l+tFTf@}0I7N{hO)c!{%cSx!+wp_f9(5$`>Vd{<5$#+L4wa*#%oZ&(~U^z=lL zL#~2C=WKhnQ+A(b6xcJn13tc0H_fY9{<2@dVdxQMQwXwJ>=_j-3%!%x-41syHzzya znMu>=POOJK5uL>1B?ah2red0&ZO`>d-siT5;os?QdhPOmQWuGA(0)nKDDD0(R<0v} z={V+3r~Q`Khon(``p@3SGa3n(znmD*!U4YgH|kG%pMTTLQp5`3`>X3mFbmV0Kb+x$ch_RDA|``{gMt@ zH%qRCIYkow7c91~lyb5p%-#zn@5Efn%*o6j<&rX;j$C`8Q?g?PkFNJzEsjL$6uT}^ zlDn!Lx(7Qv+s5K~eTch369KdG9Zu+0BrUP$(*?0i-$C@>UN~h1k`Qf{9f1NQ!j=|3 zW_sMu^eq9#tES|~+Ss4}A@Jfu)+BQ+>$e$pF+7LiT!!~C+{$nV!`do^Ut-uUuQM0J z@CAjL&O$mzbl7QmWH=?vFbc5tT!;d+(*?ewVu!<7gmPptigKYH>(UN%XR^JDR^~fm?5={m9OgBl ztpq6LJPUcH*F$htXusfE2v>+!B2+Z!v5;0O=!ycRsyUVx=Rjs5CZP5r=QUXZzrWm- zkW1U;4dkK*URT^T@>W3}E#H25ihaG~m=~XVM4@kDcn`z>u?^uD!tr#v78Ya{q3)#{ z6#LDFF7&!pO-LB9KmA_N=^WFUPd&;7#jdQR6e-^cZ&OkxT3GK^o=J1ZjFmF5-Ud?v zXJw&6(1rwNT+J*!T1NExmW922wiu}BgTrw0<*&ya=t1Wd-nHd9&LXTr_^&PJOX;@4 zLhsr#74&_sVozBpe!TOrVc#h9YyDd~H(!96GuBFqu!$0#XJ4^^(R@2~nUrTQTC6nW zHm1LK9yuIoQUBSWPW}5xfbaNnqx}niemXwUa`NTB(fH)gPuIWcoZ5#!4~EQHlDqQS zO$fyE=f}n@K~ebfXXY%+$wZN_lvX(l3-F9yz46g{@4bA|N0B;;vH0bbYfhmv4-2p8 zVia}k==WuZjIQna$ltJCDZes?YZ=a9_;H4B&~C5o4~nP*^&hviUV1C+X9Qi{UkyX$ zpnk@W(GMLg^inM6FJ~y^&^q_g?-YBy%J6Q64>MfD@PryA-hB+mGHhgc3d27}ukL;{ z7oO(NY&I_VYJ0{0YkPI~!&DuA{upMbpJh1D&B=#nupk%Prwibn7dS9B6=FjzDLT$~ zPn4EeEz3u)QhbCKBVEVxssGo^?`c$jK02>K7P>DV{u}zY{&KKYFQ=a_PZH9lJnUM~ zG2AXKDOiq1hgN2$iTLw<3mQ$|pMDWEx?b@=W7mZRxn9S~q|}c*q)o4AfNUQ>x&?H) zR`g@-Mf~`02k#_+KYbxcxAsD>1dZz9lim&cSAV$&!8_t={$A^cKi@mxq5X+J{X>up z*P+X6J%0K92yvE^%B4BI`P}DLswy7PU=OD4)j#euN|k0a#lH| z3FDrz0a`G2YYUF5|$kp{D9CCWAA0t5zM0D@+W~P%hXu5?LiG}$L%uQCJ zd1Mw8({;71LZ_38_m@B7I`X4IAJ9vDN~dd&{&Fm!i5qR=uXgi)1*S;Ta5PGW>sg96!`gX@}l<+D{$F{rSD)_)p50kN@N^@89*q{N;H4 zu>WM9{FCxTkA3-0$8W&g?HKvaYzqSGM(+z|N2pEJ_x4uY3fEu6yXaPEa9uNR9AWk5l4W?~4(K;z1Bn3i2MhoV1PlTU1`Gj6fT4h4fZ>3f03!e+0iytsfYE>`z!<<-z&JoO zAO;W%hy$1b7C<~80bm6r0+Im9fE2*ZfLj3L0TTeX0#c#tZP0Tf@GpQT0o#Dnkk`q8 zDS)YfX@Kc~8GzdXGZAMNU^d_mz#Q1&PT;%nY%XNX1Kf@9J%D=w_aS^gU_Rghz=NPI z0Hg!#fDC{GkO^?&c@`iWun>>~+9JSWKrSE;kPj#TEWz`ofI>hKzy(?{U>RUJUdF70VRM^KpCJMPyrq{pc1eK^40>X01pEm0jvX51J(l`1<-#R z0l$fTjCcT>aK9O_1+W#c4e%IbJq~yR@LRx>fbD?a0crqG0d^qX(|~6H&jNM=eh)g% z%#mGyI>2*)=K+5J>;}95coFgb2-pLt2fPH>3p&o&kw(DFfIk6V0sI;8D&RH1>wq@^ z`vCg^Zvx%|;7lHA0vrGw1iTG61UL-%E8rc#yMQBr_WL?|`Gw;TYgJ z;3L4tu+S$%9wYyS`+opF1^g3b@ELG3;-3KE>>s}8MMx{44bTqw9B>M78t?_+zX4|e zUjn`Yd=0=^LGlgYTfldKvw%*(Ily_q1;9nX_kbS&mjIUmI9o`%0Q8zPQ0d>i3spZ; z|K-4xRX*E!k975TOy^CszyG<@+2@xIUDu<2wm+SYDU|;ALyAB13B%0{w=;Z(;cpqf z!0^IpFF`E}OcdQs`8Z{_$NxlWE&P9`cRt`$v8!xTLi zFvZkxJgM*LqhIgy&ub@Cz8m{A*<5FSwrin0nYv2e4fog2olwg0O0$BEEbPV6eqk^D ze;YRZNIkvrK0K-9cM8K93|BC`jo}v=j;0L{SL{tn`Qg}%e0e7wKVp88B7wupuW%Dm zf z)Den(S&)>lFzxf`m1lS1Oj6O%@#Du|+al5<<+lVR`RxDbbiE|MHIO2ur;pVuM0zjF zd5g)VYwPs-hhI8hv9P=rgXjL`^gVm-wfj$%=g;pg_kOZAgm~w{DSuPS{jTE*HhiSu zbe6uv;+uho0{rQ8J&oEBnRSNtWdJ*!Z}3bG#)!K0YDd8lM=S6rY?Bivwji zhm{bYkdROh)p_5Srn4M=bto>NAJL_JF zKAJ8*=OR(4OqUR%&c9a^W*lC0!M&6sHK9oP5zHdPH>IjE#fvMGk zMy=KAg7pIfA`Bsc#y){TDx=W1uSplig^T_82%*1bAU}v35+(^_gt7d%fM_mOh~v%N z@A+MPo$5L5_xumyWz`j-OZSHrD<7%e5qtMNkF47;aL}iHf~L>-;Zk(Wt@9sPu=iv| z_4_z))5$No0{n?so3-C>u(%A z-tkSj`;ljMzWzqj!6WZ|@?TT7z4q>bBkxU}IqU9wA6!ti{?R`+G`_L_z`^6eVd3}B zKX?90S4m*r(tm!|Cum51!N5TaR{v`E3x9s~`>^oAL((SCoOREA^B?@xulF|n{pdeB zzUeG1del|CC1%0M=$PNX(D=r|_l|$|cN5y>gb$&tO z_**C1Hf+4ob!T?*+lSu&;G>T}ztTmd1;ffdQKuNO@q2*LD zs(6(~;52GYuzq$>U(H;Npc<&x30grT@PZ&1RH6`|=K6$+DMGMDEgCgK zWl(WKT)*6aoZ!;lA_NJyXp*#J#Imm7e%hGeae`zV8dS1QRkk%E zAav~}F-E*u!}sZ@E2$snGL#(aZxBnm#FEbpUj+&k)k31Kbbd(5%i5B^MkNV)b&@ts zYf!ra1`GG8?$wo)_Zz4W)6GzoJgk218AG@#?kQF2CnGfmQ7m~jxHQkWA~H&ir`4*G z*M$K>P$0nvkdQqd)s)wZ0el~okqhSgil*QYE|d@FBLWACgS0nsi-g7etNaK2-wj7~ z$N1y?CtNfBgvBZTE2%?ufxpP3qH=~&H&2*3>(TAof2Y>ytm7xl`|kY@R3ZJWiSzFM zb=~e4UQ1~1yQXUW_U`IOYv0USna=qQjROX1wEBRMaBFf(?XHhL)+KJ(SgXG4obPzcE`@&zw>U5CZhka5fg50 zI-rt(D8%h&(VR~)Jwq(Jf)y0O1 zL-B{%xzr@pbTLMy$7fDbrBNz_&MKsc{WU6sX7OfPnMsFRf zGM4PSCG$?h6rDcJHeibO&Oyngnl$|&Ve-^Op^sLtMyyh6L`fqTWDYEUBC9x{BSll$i}yRHtCBUrskErKUeHz?i_+~lUpgdC2v%uJ z*Hx(&i-CepWAvn#oYNO+^TX3h9uG0xt&1pGQ#x62PYeom&mL29bezy%#g{Hg!Kar= z$??%MRC;`tGI-LA@g;BGqUKcitM>7HX`ivGOv5~V$?l{gyPSAYIG4AjZO&Ej4t`>2z`b6y4^GDrWfFaRQbH(XE93u zj3G(BrsJ31`_t)pGdi~U)8~LT0dPG(B9on4x!&`c>^Y9X6cj=ZeG#KvC6SF{I(fiU zL;8l-3^qv3gTEdtjfsk_8B?$`eJo$wJa+I8&Ev?GnuP6L%?Xz|yOq;FWxXlTp7>m! z6G<`sh9<`jw5NSH_^D|fi|jLJ6+AWb$ybNYa(-}P7Wri8Y|?zaO=s zow!RP(Q`YvH|AnNOhd+T9LM7yHzgo8)W|tCyqf1Z)o^a`fcpbdbULn|io-|TIdP1z zJcyGL5nZK4m!;8TJW8R=DlH=D`TiWwC!>Q<@#rSG!Mwl)(6ERITnHbA?gOzQS<7hz zJwKSc8N3E?MnZV9Afj*4@By++styw5X?P%?4BfnG4C1D6Dh{GKEq4dUYYf^9j@JdK zr||u`Ba|MXgNMW$Bh$~ z^TW7hf{NF1YT>_-eQ2to@_4OU&vUWCx2j?h7P&~BftQd$PDsK-s3D|id48L~1#||xvhNvzJc6GZA3t{5R1I=aK3*5 ztMj}8`HJBzkjwM)Hskw($fYV$P;t*fKH(n=c#*RP zB?)nmWfN|~XWJ)m20mVg*2XOmr~%bn4JT+rWovR=7}rN5h;M0W7Q(3|Q93jh$Nx9< zQ3DU)=V~cs5w!xIIt3IXKIG5wohWP60d51*QgM<#QZ1K`niryBWTJr?xH)0GhDuwd zMgp)iY8Oq4gZ>z@2zRUM4tkG#szj}p*9=x|5=f%TtmXP}VImgRs$8#~#j|#%u*j_qp4u{;Vj|@K09`fXnE(I) literal 75068 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 U=Y=5&Z}P;@0ki5(aM>3A3l{tUGXMYp literal 103288 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 Date: Mon, 5 Apr 2021 16:23:52 +0800 Subject: [PATCH 20/34] Downgrade cargo-binutils to 0.2.0 --- os/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/os/Makefile b/os/Makefile index 9be727a..2a4b387 100644 --- a/os/Makefile +++ b/os/Makefile @@ -33,7 +33,7 @@ build: env $(KERNEL_BIN) env: (rustup target list | grep "riscv64gc-unknown-none-elf (installed)") || rustup target add $(TARGET) - cargo install cargo-binutils + cargo install cargo-binutils --vers ~0.2 rustup component add rust-src rustup component add llvm-tools-preview From f1aabb5e0e305699914fdd7ba856364c2d266f2e Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Fri, 9 Jul 2021 21:18:51 +0800 Subject: [PATCH 21/34] RefCell->UPSafeCell --- .gitignore | 1 + os/Makefile | 11 +++++++++-- os/src/loader.rs | 2 ++ os/src/main.rs | 11 +++++++---- os/src/sync/mod.rs | 3 +++ os/src/sync/up.rs | 27 +++++++++++++++++++++++++++ os/src/task/mod.rs | 23 +++++++++++------------ os/src/task/task.rs | 1 + rust-toolchain | 2 +- user/src/bin/00power_3.rs | 2 +- user/src/bin/01power_5.rs | 2 +- user/src/bin/02power_7.rs | 2 +- 12 files changed, 65 insertions(+), 22 deletions(-) create mode 100644 os/src/sync/mod.rs create mode 100644 os/src/sync/up.rs diff --git a/.gitignore b/.gitignore index 4b5497c..614368a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ os/target/* os/.idea/* os/Cargo.lock os/src/link_app.S +os/last-* user/target/* user/.idea/* user/Cargo.lock diff --git a/os/Makefile b/os/Makefile index 2a4b387..5330215 100644 --- a/os/Makefile +++ b/os/Makefile @@ -29,7 +29,14 @@ OBJCOPY := rust-objcopy --binary-architecture=riscv64 # Disassembly DISASM ?= -x -build: env $(KERNEL_BIN) +build: env switch-check $(KERNEL_BIN) + +switch-check: +ifeq ($(BOARD), qemu) + (which last-qemu) || (rm last-k210 -f && touch last-qemu && make clean) +else ifeq ($(BOARD), k210) + (which last-k210) || (rm last-qemu -f && touch last-k210 && make clean) +endif env: (rustup target list | grep "riscv64gc-unknown-none-elf (installed)") || rustup target add $(TARGET) @@ -85,4 +92,4 @@ debug: build tmux split-window -h "riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234'" && \ tmux -2 attach-session -d -.PHONY: build env kernel clean disasm disasm-vim run-inner +.PHONY: build env kernel clean disasm disasm-vim run-inner switch-check diff --git a/os/src/loader.rs b/os/src/loader.rs index 893a067..9916699 100644 --- a/os/src/loader.rs +++ b/os/src/loader.rs @@ -3,11 +3,13 @@ use crate::task::TaskContext; use crate::config::*; #[repr(align(4096))] +#[derive(Copy, Clone)] struct KernelStack { data: [u8; KERNEL_STACK_SIZE], } #[repr(align(4096))] +#[derive(Copy, Clone)] struct UserStack { data: [u8; USER_STACK_SIZE], } diff --git a/os/src/main.rs b/os/src/main.rs index c4ab3b5..9bef144 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -3,7 +3,6 @@ #![feature(global_asm)] #![feature(llvm_asm)] #![feature(panic_info_message)] -#![feature(const_in_array_repeat_expressions)] #[macro_use] mod console; @@ -15,6 +14,7 @@ mod loader; mod config; mod task; mod timer; +mod sync; global_asm!(include_str!("entry.asm")); global_asm!(include_str!("link_app.S")); @@ -24,9 +24,12 @@ fn clear_bss() { fn sbss(); fn ebss(); } - (sbss as usize..ebss as usize).for_each(|a| { - unsafe { (a as *mut u8).write_volatile(0) } - }); + unsafe { + core::slice::from_raw_parts_mut( + sbss as usize as *mut u8, + ebss as usize - sbss as usize, + ).fill(0); + } } #[no_mangle] diff --git a/os/src/sync/mod.rs b/os/src/sync/mod.rs new file mode 100644 index 0000000..7729524 --- /dev/null +++ b/os/src/sync/mod.rs @@ -0,0 +1,3 @@ +mod up; + +pub use up::UPSafeCell; \ No newline at end of file diff --git a/os/src/sync/up.rs b/os/src/sync/up.rs new file mode 100644 index 0000000..849ac4b --- /dev/null +++ b/os/src/sync/up.rs @@ -0,0 +1,27 @@ +/// Wrap a static data structure inside it so that we are +/// able to access it without any `unsafe`. +/// +/// We should only use it in uniprocessor. +/// +/// In order to get mutable reference of inner data, call +/// `upsafe_access`. +pub struct UPSafeCell { + /// inner data + data: T, +} + +unsafe impl Sync for UPSafeCell {} + +impl UPSafeCell { + /// User is responsible to guarantee that inner struct is only used in + /// uniprocessor. + pub unsafe fn new(value: T) -> Self { + Self { data: value, } + } + /// Mention that user should hold exactly one &mut T at a time. + pub fn upsafe_access(&self) -> &mut T { + unsafe { + &mut *(&self.data as *const _ as usize as *mut T) + } + } +} \ No newline at end of file diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index 24062be..2c05cb5 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -4,16 +4,16 @@ mod task; use crate::config::MAX_APP_NUM; use crate::loader::{get_num_app, init_app_cx}; -use core::cell::RefCell; use lazy_static::*; use switch::__switch; use task::{TaskControlBlock, TaskStatus}; +use crate::sync::UPSafeCell; pub use context::TaskContext; pub struct TaskManager { num_app: usize, - inner: RefCell, + inner: UPSafeCell, } struct TaskManagerInner { @@ -21,8 +21,6 @@ struct TaskManagerInner { current_task: usize, } -unsafe impl Sync for TaskManager {} - lazy_static! { pub static ref TASK_MANAGER: TaskManager = { let num_app = get_num_app(); @@ -36,18 +34,19 @@ lazy_static! { } TaskManager { num_app, - inner: RefCell::new(TaskManagerInner { + inner: unsafe { UPSafeCell::new(TaskManagerInner { tasks, current_task: 0, - }), + })}, } }; } impl TaskManager { fn run_first_task(&self) { - self.inner.borrow_mut().tasks[0].task_status = TaskStatus::Running; - let next_task_cx_ptr2 = self.inner.borrow().tasks[0].get_task_cx_ptr2(); + let task0 = &mut self.inner.upsafe_access().tasks[0]; + task0.task_status = TaskStatus::Running; + let next_task_cx_ptr2 = task0.get_task_cx_ptr2(); let _unused: usize = 0; unsafe { __switch( @@ -58,19 +57,19 @@ impl TaskManager { } fn mark_current_suspended(&self) { - let mut inner = self.inner.borrow_mut(); + let mut inner = self.inner.upsafe_access(); let current = inner.current_task; inner.tasks[current].task_status = TaskStatus::Ready; } fn mark_current_exited(&self) { - let mut inner = self.inner.borrow_mut(); + let mut inner = self.inner.upsafe_access(); let current = inner.current_task; inner.tasks[current].task_status = TaskStatus::Exited; } fn find_next_task(&self) -> Option { - let inner = self.inner.borrow(); + let inner = self.inner.upsafe_access(); let current = inner.current_task; (current + 1..current + self.num_app + 1) .map(|id| id % self.num_app) @@ -81,7 +80,7 @@ impl TaskManager { fn run_next_task(&self) { if let Some(next) = self.find_next_task() { - let mut inner = self.inner.borrow_mut(); + let mut inner = self.inner.upsafe_access(); let current = inner.current_task; inner.tasks[next].task_status = TaskStatus::Running; inner.current_task = next; diff --git a/os/src/task/task.rs b/os/src/task/task.rs index 54dc360..fbae53e 100644 --- a/os/src/task/task.rs +++ b/os/src/task/task.rs @@ -1,3 +1,4 @@ +#[derive(Copy, Clone)] pub struct TaskControlBlock { pub task_cx_ptr: usize, pub task_status: TaskStatus, diff --git a/rust-toolchain b/rust-toolchain index a08f00d..a14eedc 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2021-01-30 +nightly-2021-07-01 diff --git a/user/src/bin/00power_3.rs b/user/src/bin/00power_3.rs index 064b4e0..e0ec5f3 100644 --- a/user/src/bin/00power_3.rs +++ b/user/src/bin/00power_3.rs @@ -22,7 +22,7 @@ fn main() -> i32 { println!("power_3 [{}/{}]", i, iter); } } - println!("{}^{} = {}", p, iter, s[cur]); + println!("{}^{} = {}(MOD {})", p, iter, s[cur], m); println!("Test power_3 OK!"); 0 } \ No newline at end of file diff --git a/user/src/bin/01power_5.rs b/user/src/bin/01power_5.rs index 157af29..e47761b 100644 --- a/user/src/bin/01power_5.rs +++ b/user/src/bin/01power_5.rs @@ -22,7 +22,7 @@ fn main() -> i32 { println!("power_5 [{}/{}]", i, iter); } } - println!("{}^{} = {}", p, iter, s[cur]); + println!("{}^{} = {}(MOD {})", p, iter, s[cur], m); println!("Test power_5 OK!"); 0 } diff --git a/user/src/bin/02power_7.rs b/user/src/bin/02power_7.rs index a5c72db..a97d2f5 100644 --- a/user/src/bin/02power_7.rs +++ b/user/src/bin/02power_7.rs @@ -22,7 +22,7 @@ fn main() -> i32 { println!("power_7 [{}/{}]", i, iter); } } - println!("{}^{} = {}", p, iter, s[cur]); + println!("{}^{} = {}(MOD {})", p, iter, s[cur], m); println!("Test power_7 OK!"); 0 } From 92b949a01f9b9b138d5324c3a68eaade0b4cb232 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sat, 10 Jul 2021 12:35:17 +0800 Subject: [PATCH 22/34] Move TaskContext into TCB instead of kstack. --- os/src/loader.rs | 15 +++++---------- os/src/task/context.rs | 12 +++++++++++- os/src/task/mod.rs | 25 ++++++++++++++----------- os/src/task/switch.S | 27 ++++++++++++--------------- os/src/task/switch.rs | 6 ++++-- os/src/task/task.rs | 10 +++------- 6 files changed, 49 insertions(+), 46 deletions(-) diff --git a/os/src/loader.rs b/os/src/loader.rs index 9916699..47e1bcf 100644 --- a/os/src/loader.rs +++ b/os/src/loader.rs @@ -28,14 +28,10 @@ impl KernelStack { fn get_sp(&self) -> usize { self.data.as_ptr() as usize + KERNEL_STACK_SIZE } - pub fn push_context(&self, trap_cx: TrapContext, task_cx: TaskContext) -> &'static mut TaskContext { - unsafe { - let trap_cx_ptr = (self.get_sp() - core::mem::size_of::()) as *mut TrapContext; - *trap_cx_ptr = trap_cx; - let task_cx_ptr = (trap_cx_ptr as usize - core::mem::size_of::()) as *mut TaskContext; - *task_cx_ptr = task_cx; - task_cx_ptr.as_mut().unwrap() - } + pub fn push_context(&self, trap_cx: TrapContext) -> usize { + let trap_cx_ptr = (self.get_sp() - core::mem::size_of::()) as *mut TrapContext; + unsafe { *trap_cx_ptr = trap_cx; } + trap_cx_ptr as usize } } @@ -81,9 +77,8 @@ pub fn load_apps() { } } -pub fn init_app_cx(app_id: usize) -> &'static TaskContext { +pub fn init_app_cx(app_id: usize) -> usize { KERNEL_STACK[app_id].push_context( TrapContext::app_init_context(get_base_i(app_id), USER_STACK[app_id].get_sp()), - TaskContext::goto_restore(), ) } diff --git a/os/src/task/context.rs b/os/src/task/context.rs index 47a652d..35055d0 100644 --- a/os/src/task/context.rs +++ b/os/src/task/context.rs @@ -1,14 +1,24 @@ +#[derive(Copy, Clone)] #[repr(C)] pub struct TaskContext { ra: usize, + sp: usize, s: [usize; 12], } impl TaskContext { - pub fn goto_restore() -> Self { + pub fn zero_init() -> Self { + Self { + ra: 0, + sp: 0, + s: [0; 12], + } + } + pub fn goto_restore(kstack_ptr: usize) -> Self { extern "C" { fn __restore(); } Self { ra: __restore as usize, + sp: kstack_ptr, s: [0; 12], } } diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index 2c05cb5..a477865 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -25,11 +25,14 @@ lazy_static! { pub static ref TASK_MANAGER: TaskManager = { let num_app = get_num_app(); let mut tasks = [ - TaskControlBlock { task_cx_ptr: 0, task_status: TaskStatus::UnInit }; + TaskControlBlock { + task_cx: TaskContext::zero_init(), + task_status: TaskStatus::UnInit + }; MAX_APP_NUM ]; for i in 0..num_app { - tasks[i].task_cx_ptr = init_app_cx(i) as * const _ as usize; + tasks[i].task_cx = TaskContext::goto_restore(init_app_cx(i)); tasks[i].task_status = TaskStatus::Ready; } TaskManager { @@ -46,12 +49,12 @@ impl TaskManager { fn run_first_task(&self) { let task0 = &mut self.inner.upsafe_access().tasks[0]; task0.task_status = TaskStatus::Running; - let next_task_cx_ptr2 = task0.get_task_cx_ptr2(); - let _unused: usize = 0; + let next_task_cx_ptr = &task0.task_cx as *const TaskContext; + let mut _unused = TaskContext::zero_init(); unsafe { __switch( - &_unused as *const _, - next_task_cx_ptr2, + &mut _unused as *mut TaskContext, + next_task_cx_ptr, ); } } @@ -84,13 +87,13 @@ impl TaskManager { let current = inner.current_task; inner.tasks[next].task_status = TaskStatus::Running; inner.current_task = next; - let current_task_cx_ptr2 = inner.tasks[current].get_task_cx_ptr2(); - let next_task_cx_ptr2 = inner.tasks[next].get_task_cx_ptr2(); - core::mem::drop(inner); + let current_task_cx_ptr = &mut inner.tasks[current].task_cx as *mut TaskContext; + let next_task_cx_ptr = &inner.tasks[next].task_cx as *const TaskContext; + drop(inner); unsafe { __switch( - current_task_cx_ptr2, - next_task_cx_ptr2, + current_task_cx_ptr, + next_task_cx_ptr, ); } } else { diff --git a/os/src/task/switch.S b/os/src/task/switch.S index 262511f..3f985d2 100644 --- a/os/src/task/switch.S +++ b/os/src/task/switch.S @@ -1,37 +1,34 @@ .altmacro .macro SAVE_SN n - sd s\n, (\n+1)*8(sp) + sd s\n, (\n+2)*8(a0) .endm .macro LOAD_SN n - ld s\n, (\n+1)*8(sp) + ld s\n, (\n+2)*8(a1) .endm .section .text .globl __switch __switch: # __switch( - # current_task_cx_ptr2: &*const TaskContext, - # next_task_cx_ptr2: &*const TaskContext + # current_task_cx_ptr: *mut TaskContext, + # next_task_cx_ptr: *const TaskContext # ) - # push TaskContext to current sp and save its address to where a0 points to - addi sp, sp, -13*8 - sd sp, 0(a0) - # fill TaskContext with ra & s0-s11 - sd ra, 0(sp) + # save kernel stack of current task + sd sp, 8(a0) + # save ra & s0~s11 of current execution + sd ra, 0(a0) .set n, 0 .rept 12 SAVE_SN %n .set n, n + 1 .endr - # ready for loading TaskContext a1 points to - ld sp, 0(a1) - # load registers in the TaskContext - ld ra, 0(sp) + # restore ra & s0~s11 of next execution + ld ra, 0(a1) .set n, 0 .rept 12 LOAD_SN %n .set n, n + 1 .endr - # pop TaskContext - addi sp, sp, 13*8 + # restore kernel stack of next task + ld sp, 8(a1) ret diff --git a/os/src/task/switch.rs b/os/src/task/switch.rs index 867fcb1..fa75be1 100644 --- a/os/src/task/switch.rs +++ b/os/src/task/switch.rs @@ -1,8 +1,10 @@ global_asm!(include_str!("switch.S")); +use super::TaskContext; + extern "C" { pub fn __switch( - current_task_cx_ptr2: *const usize, - next_task_cx_ptr2: *const usize + current_task_cx_ptr: *mut TaskContext, + next_task_cx_ptr: *const TaskContext ); } diff --git a/os/src/task/task.rs b/os/src/task/task.rs index fbae53e..fd5f5f9 100644 --- a/os/src/task/task.rs +++ b/os/src/task/task.rs @@ -1,13 +1,9 @@ +use super::TaskContext; + #[derive(Copy, Clone)] pub struct TaskControlBlock { - pub task_cx_ptr: usize, pub task_status: TaskStatus, -} - -impl TaskControlBlock { - pub fn get_task_cx_ptr2(&self) -> *const usize { - &self.task_cx_ptr as *const usize - } + pub task_cx: TaskContext, } #[derive(Copy, Clone, PartialEq)] From 8dfbb05fc21c7719e4a0a6922c64b6a313e58584 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Mon, 12 Jul 2021 22:11:34 +0800 Subject: [PATCH 23/34] Remove a warning. --- os/src/loader.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/os/src/loader.rs b/os/src/loader.rs index 47e1bcf..ac017e8 100644 --- a/os/src/loader.rs +++ b/os/src/loader.rs @@ -1,5 +1,4 @@ use crate::trap::TrapContext; -use crate::task::TaskContext; use crate::config::*; #[repr(align(4096))] From 8731d981ecc880d64ba8f607ee0fdd4fd08f9300 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sat, 17 Jul 2021 00:34:04 +0800 Subject: [PATCH 24/34] Bump rustsbi to qemu[d4968dd2] k210[b689314e]. --- bootloader/rustsbi-k210.bin | Bin 78860 -> 94904 bytes bootloader/rustsbi-qemu.bin | Bin 108184 -> 128712 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/bootloader/rustsbi-k210.bin b/bootloader/rustsbi-k210.bin index 58d1c1a7aab97a8253864fa22811a0c8334cb60d..27987d6839be28f8acd13e816e4de1c4548debbe 100755 GIT binary patch literal 94904 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 literal 78860 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 diff --git a/bootloader/rustsbi-qemu.bin b/bootloader/rustsbi-qemu.bin index f293ced75934d33cb2585f729b62d019c954456f..0e61b8ea1c1e32ed9f23de7cf517d5dd89ebd4bd 100755 GIT binary patch literal 128712 zcmd?S4R}=5wKsldk~7RefP@&n6gwm)!nryP1Bvqa4rwQTRWI6NKW=S@;28@QOQa{( zw$w@JjDZUj8Zhnkw)X@Y8qd`!1OvBLW#Bfk^|n@Ti?{9j+D>8;0|rbm!9WANzqQvs zGZV0__kG{{Joo?nA0AHT?6W`CUTf{O*IsMwy{9>xO1{IP?5xVqDp02G+?fC7wOJRx z6bL=0D0!xWZ?z+?&f4D|Dms|zjxr|(CHD%RkWZucSEka zK&w6d@RZdXb~sBn$s-+)guk-o3)-5O z*Q{N;<*VA)UjEwJuWx_Qx9*j74?VQ~8@|V0d8}~N2E|*dC>!z|3($Vwl>Vs$Gl#An zDIDFGw7TPct^J1vo*Q~`T5@%m-krME zy|86kvjaKRcc$&bUstSuFxa@>p}Z9d3@b{ZUK`vy;egV(UO|dd=rOxO>Z-a3@ZVOn zAn*3_5&vi$y(=m`aC6auqc<1b{Mya+QyK%5J8-SXoHJP)*g7TOrR4dC8h22w=7Kt- zu%_P4Z;AOHv;G>bZ>wA6>F3mt|CnACF46fdGB2j%w<78s=P@gceR@^R{+^Z-n@VeM z2PAjYMINno4QYMafEwI8xk+gRzTS#NE_h7-m3RkOFpueldf$bcj&D`2R*(OpT+LU@ zp7hgmKK<6iMb9?p?pYs1@0RCj-OC+ZtFIgN_WK67{p2~1S*Rb=i}u@j=T^HeT0D7(qMH~WCwV`c?w-B!O! z^vY^;dd#pM4X)0nUs(mU?xJg&+^Ke+xB50C|4#Sr;Og;h&i2Ff+v?sNTxmgvpF z)vh+B^ROD!{&lwLz|&*S3|hZGvwj|W=)wChk96pBJX+WO>HZ;qukWOG#(&lq^N;w> zH?}KEL$vt^Om%aL1{$N^Mq`xH+xIsPP(MPQgcqVmBY3SLs=FkYs9LwL59#_I-C5HW zc0JJb$crbQJ9TKVbvS;`y3h!IYludF(fC9BeSF-n+eHT4uo#CEYRN8cNyo+-lKQaxp%pdpC5l`hVCsWM(I&qBE%Q=b@oa2Wt zxMzAQpOtx%zb5XnPI4agMb7iUPbkl>@m!Djn#Zg%tkayQ=O>)!`X7sWWS-EkFy?gY z4CiV8G3R;fkf>*hgy)wuDy*}dr}?mi=UGvY%#(cCV^-?cdCn7Ulkl{PdS*&^en#Wc zy2yF-gA$(oq8^zi)Il;pdz1474@h{Pp*&Y*NqBw=cns|=&Qts&3C}-Mo&_>b@+jaj zw6{5r`iz9cQn^L+`=cPY=aHhz8tcnr(N&p%3d8bv)eex3n5hGpaD zyAqz=q8=MR|Lid*>6VS3MhVZiMLjltp7NMJ-LmnsTf(zL)MMjkpU1pQw`}}0NO-o3 zdTjjsz+*n7TQ+`nN_e)4dTjjc0Xzmqn3u6w{4LJ)(q_taRW@T3RSwq`coI+AafbA`SIxCmd@F!lj^%)H87Homq2 zF2dJ!TvxNK>wz!3XO>kyYvXGR=4N}WH<8{@s6)@V8MDvAx=3}kYgikw`mKScpfB2( zE9UdZtf5i))8y8 zwHulk=G}UwaX;0UXw)!kJN3o@we594ZtE2_RmP6a`X1yFbFB$o!CHSOGyhZYx`g(djBD1MyvwyAXpgz_Z8h}-IR(t2Vd|9?x(!g<^kB$??=a-aDO4Ji zAUyY7j%V*6K~8v1K`!xZo)`;xVsH%Pe+JKi+DyomQVlq%GN8jvAWf{!sH$lla98Dq zb02a(F{8x+eYy!6olSvA-&_+~E7C4NhpWzFYB=(=eyy7{?d4JzC7m9csNl!iAonxy zJ*F`0JEmW}~FhI}etb3Sd+T#z=xeW6u=@r@(@Cp9Pbe~_9NR=Y;EZor)NzA*Qx7%kceV8(Z?pJ9$n z=3Z+U4S?6FZq5U|6?)hD*?_j^{|MU9p8o=9147^J{>#w*Co!NVrYhMx7N9OZJSdynPY;3)1H7{6M98a#zRL?Y@O%h zuuKU(N_;A6-f_2;Sp9m_gqpPP=YhjvqC#PF#mSsx@8q{3b zQsN~=xm`c0hieWVZ+FH=;)D5yI*M{r+njcr#qV;PC4)V(&CpK)pJ5F-g6avoAMM?; zA7|42NFG&`4x_|iO)XJr*QoY#Ue}=Ai@*`U5hk2P1pU}^DYyFvRsXyoPv95Gm-hJp7 zES}t!@;7!{!IvdmopxK1y>?rhxnF%5{URK8XSNkQ#^pQykZvpVPb8neC))~KXSWso zR|(e}c3X*mRFs$X@rHKJcOkxh9Y*G?>R7)vWOe7P@{Q!`#6i0m3gTjc-D5@-^>`o? zik=^H&Eemrp-`Y;J0-71W@!C36vaQ`yd}T2p$P3F+^Cz2CNyP}Hl+rOl&0*qmO=wi z^tl0r7(-$dR=}?82+m54lVGdt|8LSQhrUJqXG|wankAtFXQ$dfDBJ&as{O5iRNsp> z9inBDijM3}YF>74s2DgQEeR5-Pa7ib7BKaXg$c40Fr~+?`V_YidnFB%H>O~vWkaP* zu%QWBoVW6qHZ+k2}pTw{=yR#xpgWhHqHrsU9?iY2moT&~NO$`xWi%|^5qtkO4E7EO4~<+x>0-`)wG zF17NxXk&=94fAY~yUDfJeZW;eoo(gGFJe_ItlOZ?325-N-W7QRmu6rkz48d#&b>3* z4|lS?6i_a*P+Y}P1DKR=qNs{PI~pp=<(C&1MqjDrOLQ+%=ypMstpxs zDC47A_ZYCH=Mo&o@mBW% zv);kDj5vON1e`RT*HPToLbJtQHD9`Lcy>@b@1AL0gx${|J5BND8(*b*yq_n1V_}P3 zQxa6;@??#@7+MPY6zX+){4A`l0@CQ7Ib`9RqTa%7o3JL$naMVc#CX_@46FNhhwrS8 z^=hY~pY*_UmBs#u#P_XHANXdA9yYkIUK89h;xWa1JV5XSp11nr!b8)m`%aJz0Dc(p z#Y|{}WR=X+qUM3SH2qMh8c;(1p3%-~=e6N}t%54bciC4G)2j^W`B|mG zXEY~I>&=FW(wILs%gd7&Q)9+y1h3+67k;c?9*lqUI92#yt z7r&r&F`m?2b7oAed^XP`@#Os`TA9Ik3ZORFMOoqqPapKVo*74Y^y-Z)OL}+NvcxQB zpP|-0ttT7ys-ULz@kmU*#cRF{3j?%a_bRF9-uHfAc@6Ge!Qb+O1qzoY8RSChAwiE2q7png#f^a;5gljFwsWWjvz2GS9Ss(OOdY z$1wWlnRXeEc_w(1nkzk)Nmz)v*X^6R*RJgiYQ)Jh)O)?6EYEX6E=n2az!(hKGIB$1 z*;OnjUHx)YIHV1rk9)K{Z$t5lT=o^hKKKT_Q-!TDU(AZe-)w#B(AyXx$xD|YpKkPE zv{-#)(IrbP*=%V9^4Gu;XMtlUB*#?9>*AwRjk1Qa0tI8TfaJwel3+6a-j?$7rnXct%|pQw(9AP6_=L%Y0-P- z@A}^zzUP{|fU|=D3*f&Mtp}X1v3y zQ+c;pEzQzZWy21&R67PsageC`D0z&@ue(CXse72Rq}f0|O`ugO^VYaa4 ztI^4l$0y|*!;@*P3misC?lrH;R|iR{A{qLt%+Vn%WCK<*U(NLvUDf1NgPW!97n+6A zT;g`d9=|1CCz&9q;T844y8x|gT$7Vqk4zRT>ePE;3hIea&V)jAv+bpU3B0PKIdz`Q z5z4po2ClMyg)T4->Wsb%5`tH0mYrkIvR89|>J0LJvvq*hf+PbW6LYl-JKX-E*3PFD z-$)$m!PZmp!A4z3x?i$H3tUWjl0|y)FE~9hn(`#C6!{M@Rm|(I^dv9qS#+ZOlz-4S ztes<=>z{0VoIJ^IeY(ZHz#%=!A;LqX6n$g5+zS3Qmb{zr zAS^XIs1{`o_nUcub#LE@l#h4VyvaSQ2=CFSp+(^1^Ad+%?pu|fIjU!4RFnObaK|`M z7HCOFi_ks=oDre#vTl0?ytj;jw{k4J5lJV8mn`Jvk1rY(R`=1pS+BWU6ox%fVI^ra zVHArsgPk6@TN}|a>SLH8^DvGn28R2Re9s!1nEC#;1)UH%4DN$DRU67Pe|e-(z9$XV z4|#_5K5v05D~(J%%mp4|I((d`v_VhjCKctPgbGgrv`82}px4?YC@!>AA$_ZKr+=y@y zR$?mc>-P7T576vv^G4*uJeGhnj;KL<+HX@o%~empt*o+vgaYz+FAB+S+A2vs?=OQE?X9nIVAN`@+}Fe*$w`Cm3wbiirV|M ze<%KS>XHv`rMWjl!to3*BuQZA*t%Wa3_-xb>Go{7p}2Gbw@dS>>>*|-{$+m1{uNqg z|MG6I=i1_G*E=k?0uxidlgTvqRT)+ieiD=D8~US=wUe8&=K`zeL$jch!7iqf?H>^^ z$X#JzUYtn33Q&SaVe=8IJ1=PUO*F^8ds^iCbyjx)zGHq?v_V7}l#vu~pVe3@Y_zjU zS0PVQok7}SqmU&%*VpG>AisY4 z44F58R#WxX5JfA;uiBn3;K_6Vfm! z7)dD@9%Nq5%o}V>!w?9jaiZMKD*$Nu22-mDT)5#;NkWoJ)14t6ItODH2P|M~ccSztGxAvovG9*uit?_1SYAh#i>WxfRh^ z0`Gz6F*7=tvI#%6E#>qM0l&x-DumV@D!_=GSRFgf<&-TN{Iu>FOi3?F&dK91iGSji zRwibev)owCa9(qMM&3qRqpcl-@dAf?hDYX2mS*IAg5v6KACuR(=$)08qIA8=*JuotjH$PIFkNrRo00dcSB@(69rp}-q?ph*ZCV7PSB|RY z{&e2t%yhkpN3R@J!ISB{-su_jZn|<*^}OYtVUO$(V*CJuz**$sD@T>llg?{GueI|k z@R-rOkcl((&2-)*bYh$5%&RXSRUOCYOtD9m=}Fh>{i=mgHD`);dMiei?~K(Om!m3Z zF^pzx?5JwaZA=ioy?2itRfjJ4yL`PGN|Q_t{!boNFTK)&QT1%bs7l5#lH{lgU7)tP zzQErJ_{FGF!1-rGWf)ahTmBGh%TKk;cx#z?G|2KHajn%A@Aa7F;U{$WL>@zl zdB|~1&cw!2!IhAAS!K0zuvXHt${cgB2F2gn>#+{i&~^dm@&<}Zn{Gh--wh)74Vm-J zLQ_!?1@kFD^69$BrZUG3D1QSYFjt_?6zo+gY;lU?vxH`aOni6IcoeVEJ9pJ8UQE789ZogMRm%TiF&4}9RS!w+1Prm2*; z&w})uq&v_HhIRN~(bh+?5?#>r(HXWLbu68hNn`WxG;sG?BVD>6fp)0$l62{w7t?8( zr6Zpv+u7|IrOTd2JC&mCO1tfXpQO{MwBw_ItRmm#2#Q$TiU!qD=|k-7feN(p32^2o zz_0f<7SjkVevD@}Ws`;#CCwh3-n^01Behzm4>QGDnO^*LnLlEU#D%2qFtqTNu=dE7 zM~apVE-NbS41g*DP$hsCX+%{pRie+djC=M&6G>|nwD8^rT72l~aZHOytDwaaK)xue ztadTV;jd#cuyk{p7RitEERe=#aRhy;#JE_}l)^``MQIa78s_MUc)M$X>rk?2$!m9& zPDbQ&>CqLy$u03daQX_gcrT*%?*(4&1ztYIoL`(J~d4BHmtcMV4>DeGue$F|JEn!1{*M~*$>`bzH?if+!kqiBiaj-t}R zj}W-Nm>Iem`Gz+*(lC;BwrNcZW(9i$ z=D4Ihb-_k*NUv@k)MAs2)?qEydd?SXy`Ww6owv@$&*XOuUuw8z_|l6PThDKt3j6=P zQW zdspvjR;K7$uV1%L!7~1q_9kqKS7H4CUxmHKzsopnkXG-5ExXftNN+IIk=kP4xoGA5 zC-y0j$Ky~RyokOF2l0Lgetlr;#Olg6Ws-iwdR>_xZ4S)XW(~|g+^jq|MA$zxGQa$F^7zB=Qes%6VMBNtMXk+I zuC*j0{QaWV#Lvh}9y9Xq?aA7rzP2siH(tdq3kgTGPQvlcbP2OvQBE6oLADpbl4i^H z@=+n%ldat(+YxWxT_U7nh0&F&+c$ujVF+G3Xq1Titm3*WBeqmmpf%8HQs65&24CF* zU+^RQ`w3t0q4rnlGa&8BqEQ*{4VRzv3%UVvQF~9#v>KW-dcT&2TzO7W;>JCg9ll-T zf8;x-cAePKQ{VY%=n%{E$W96Cp@_I)YXWR13h4)-2iTsFVdY1Zpj^AdZ%Qy^euL#w zluNG8{3dK11KSWYQc&sdXH6x!knIFC(}M@cwPnMm39sewWMR2ayMh5r5~J6ZzfDf+aS?s?i5uyMQ|KsZ6Lv zBu%%ke`#>_>NYoQ5@FuW((IV#!k!aX%rSBM!B~g$(C)hEhGJ#WftC%$xr@Gwr*}~; zo~4VPGB*?l7VX4y#iFH12`wtdbN!-;ct#eLA$`Z9S$LX@R6O@Dnv3+rqC7lbU9=D> z$wjmA99V?)2*q#++7{o>ecq>^v-JT)0aVD?Iau%kalSf`1(>0s{}q@Qw^@LB@%Qlb zE{@_^y7-wrfO+w5JXb9KF;YT{oA6w}cr%`n#RrhSWAS(KG#A(6xqtDENKY&-!1L9` zOOcXXT#Vv zEE6>kJ3v!mU-DwdBGc5Uruozwh!0u2eSP!WniZ`-K2ns^x6ovnpph?%r0R()-=w zeYxYd?N~=pzRFdOmH2k|HfO<|+c@5oqNk0am+u6tLK)-d)txb2|Y7PzSlS_S-`yeBdBbd}AYKisZtt{vRw+ug7-sQ7jt9)?a4 zEtuS@HbjR9=xP66x9zYBog!M0dyG=$b3Xirt9F70h?-ak{}$T-DUxuHzH#OJm2Kd* zcEox9c~5A8@PsM~MU4QHNyKU>{=Nq6>m+@Jqw+%Ev3G|OPx!j6XrT^oFKpi9U7RDi zi}~TvYDyyaP(6CSwoRAT-}&8W{7AsAs6*RDHk;{7YN!U zZl_3?J^H$B#M?piO3sgS<#@YZXc!`|aw~a%?AC<@T}ACzgsXJ-Dzu)8#uHJJ87;TZ z6X18dH`$+V*cND(ATua#y)^+MVGD)}N4=?w0nm zofyR!Wnzr+`T=&yG~ZIB4&p`NtFV&f>B(7x-4#P_#E+6Kh%^+^mQVumTK3GIgq}>c zZ8r597|WtnFxN(pvYX(MY6a}B0klO8=RI1hZskvU}B zWUZEbq~HnE#Pl#v0ZRj9?Q}{gB0nPzCVxAvy`4rETJZH~Cw!+cLi)79Vv$B`WeX8U zG;XX>>Z_*h zXH>@!ZLW#%2bMQkHVkBY&1-QQZg@Tgg%0r-q{x!6+laM(ov~HNE_BlJ z;bn;ieaSe*4vE?WpA@_1y5s$Jiuc|+oj7K>YK=$;?snGDERxe@L7q6UcZ%W~DvaLs z9!PoMa^(1t%b^b3lL@s6n-2X`gO@`cdFFDc&Aa|O)S-`E4t3y;%b^Zc{&lEHUQ-OC z)fdMoY1}U)iQh^RCu^PgY9!kN?g2H{e-wX%I2Dn{EY*fKBhnBleVhW1G;m#^cj*(i zY26m~0n%#iuyM_$C!@wSq#M}JL!>R-Jin~XIiuFXm?7&8OK%!kT95C<#BG#*>M(W* zU~VRh4e(yFBC?0UCl{o8RfH=e4X#2lsRr{$n@VtN2>c+f; zNEjYRgaLw_YB;6?I;9xxkyHl+BXRUi4RX9O?8ivT0>IClp2 zwp8Ls*z)unU9rH|z!wa~;VM z5ziJHWSX%gC$98^XGw>kC_{!N@>?F+QU;)J_KZZkVr?F!vK+lfF(c(8bEN0O1TW!t zDd8;u?C{J?aX|h7U#!kRd`Ya(@Q<`6EsEw5(kob?g*& zcygZ*LqS@K)^kHHyk93Q_!t^jl6Aa&kF0r5%KJ5Z=@McE9_5nBS4ck4$gLA6eH_9* zWYQejhTOAp&UARaa&3>B@_XP>>O$VT5C;N{9(C0_v~sxeG8na`i=rVyFOUat85(yV`1=xG)6>Z7-Lb4w8XL5 zEu^!>bVRrW?p2u%Nyrm!N8i;LCQ63GZjM9|*f5_1^ivqV1pIAB4-1XGjpB^kb=Lor zL7uZM+G!4{oZ4wF_|rR8=tHDAVy~sx7w?jK+N3%|?u!>W6I0I}an>Nxj`zi1sj;sY zvTrYqlWA>PfS~#Bj>^bw@Bbn>LXu&5SguO`QRwd63+yJ~`Gm$?wf>|__1>f^xwXNY zIzVf|k;&~TnJTEtv3%5G1URr)zOEsZb4m`RSX^lLG>b~SU*|D1zL(;AH)-pII&(M0 zl-VPibaPSr^GK6X%c-=#1xGVZmfF7ph`ix6Z|Z9(^)<1={+e8C{|bccU&{UVuTc7H zDoxStuZh&J9 ziUR+CM!c@5DTH0=;*254@@ayX)a6Vyb2dv(#u7!{Qta>^9Xo?!6}lgLE-6xzp-}eo z+G0-)B4T7c(Iv7Tc*Z%#l_Wjw==H^pp}ZEW()|O_Vlej~>XRe>pII&xK5(q2u%^yn zh2J?>TYoitB6Qs)HN zCn3m_DFjEFD}}b2c`}8NZS9}I$rQUu%9Y984+0O_H~;WgPNql-j{Pe9BWaV?J>9D?S9I^x<9)O{&O)C__F80j#mu#x?H!o!#n=_K znNQmzU$ib_BiVLEZEv9xNow7RsC>!WkdoXsY57)?=acqYDJ4!wSx0-O21r|X8mT=~ z{i!`u0`H-{8GEL333KLj*eJxFDW{RzGsQG|nzS42nG%|2vc3Hcp2R;!f+t z8B3$^jX_Q!;!orYt)sOCMO)b#E$xMO1UY&&R7rDS0rdKpb$B)4h4-D4U%tf*qq3B+bp%`FL%wd!fu97#siw`>PDAuihT9T+?GOJmdnHLe#v8je~0CqA_*WpQ)f|LnEQg{uThEbT)U;n zFW|%1U)GEMr8$@PKy%LKa}wW^?VQPAx4vty73T@>1LgVC>ZXq@5+Y;Z#Ud z%mY87^&!Wg`7VmM$(j7c`!vN(A`USn=jWmX#`l>YTd(WB3%*P7H{);FoH7ORB*ZDq zC&|Cn&dqIEYe+f_r#Z#^5q8>>Bo+RPyN^uLRaF~i*>n=}06x6I)eok}YV@~UN9>GE z%LHbdEjWe3Ivqd5ttoD@+}hOFk8_D$I$uIa9J5(bPU?sS;}Lru*?LL3ZV~%bv3i;! zzZ6*)eQ$cqnv^w!PVkrnDXcglgRl9W^$&V{H2!w{o%p-x_d~>iQy@>%{q}xDd&~Fs z+?KHHdCAFi&lO;A5#dtoX$Tv?*W*L+_lQ^GBP8MT$R2uzPCi3qrWbrVyDoy=HQctd zOiJD8zj5zey=jR=%ib_#^ptQ%&30G$6RohpiFyaZ{k^Hz2W|CqpeXuH@6WaGTlrcU%HcD*)r z5`Rz76TFbpYs9Ed^}0azy7+l6wJ({5CQz>^=rhiao#gUMzVm8xVNK<{;XkH(OL^zM zFh$=kq#08?G>7K(xh<1ydGfu-8=BCA@XCj)Olz zj3VWy+B+Wet10S!Rfh)gCtH4aPiXzZlYge5txEs4j`=H>wA|HSqTWt2zK#8lMf=-x zH?`r!PLiM*b5*oO;_G+7m#`TmzCuw3b@~*t<2`XnzawH42}qRBkgn7LuC;d0fnQ!oY{W=aN~lX- zOhZk1>u22H+hIMK?&j>?YSD|4Ig6{?d=HTa_*fMP; zt$KqsjJeAFHs?nw32$|x<&yV;>?! zK*N`jRuL{LZO_dri{^?i_Ng!eik@n&yVnvjis`qE&i^=R&{@>y*Du7{h9NHg66f9b zR61{9v7+#bIJL)7jMP9g`rJ>eHH>!EvzIv=)?ojzWEQZgAKvIGQ#sFc{>m% ztWcW?I^%MH_US+p3MeAW*z#aQv6FVHi+U2@q4i&v0ewyIF+A1Xw3ezPf6A+Zvwwg! z0p=Gvp`GgwVE+fz&1=}@u$hyUgx0cvXoS}Jts{tMpff-QVP%{wPT%wj$bLmTel z8N$jq8K;qmFM*%MY#WDo550Qsh$~!$kt|N%JQpAJcWOPDL%YeI0Bhh10o!MV-LB@C zfu4#rdE)Q5rwnOmDz9#V@BL)A4i!=FP+Iie{0-rrSGVl%;Qgt}mzZYk?Vx^@lNVyh zg6Fw)=n(g9C5xrKZhnY&!lt5=nS~IrZ^1*gnk<2WHr>(1P1Ol^{nQtJ~l zE5T2*uZv_(g@~&>MZT!+te~p!IVYDxXu~Gyp%9e=a?gDFlnb&4aD=n*>&7JI!D*CY z<`>rO%yU$|qJ|dG=JI$H@g)JNl1ZCn%U_8{VcN_SqXbrM!By{&wF&Vk;!T0CP1v*t zsAc6x7%4hiwS^bG-|CYdstHn85v5ESwULR0c*>YJqMgBg>tte=R zh?4rw9U?kPg=GA5Hc_IYdpU7|__d0DrKu9V#8$`1NB$C3lH30rRYH%CrAp*mAA~A_ zf=sGJUd^ORWFV6&fqzO+=57m34*AN=YU77pH){UtR1IdM>jrNNC6+SoSmEG6ys3ij2FwE*edFICoHv z6`bKg9>qPnQ$}PG4s1`QNj`7bNXheGrPFzcSOFpCl_FoojKc8Zloqn7r~6KA;Kl>l zM&Q!>wZS|_+z36eZ$^;p1r_=vl|7-wOMScDtDI4W(ksrZ_@4A0M$VIMuBk=J^>^v* zDf!K-(pwp9ApA8VzLv?a$+zk2LRm7kOtK^&($YymmhlXD;st zaXGE!AZc(C5~SPYwp{39w3{xg4PF!%?WP;Yzjo3YG9s;sR+!?~QHnT#Ey`saUU@4b zOph->Zu!0e@4K_HE6>H>EAM$STGows(1P;c^YJI6!7`j9<>vR>KJjF9Or@SU-i z5H`}mmayLOz}D3}9@zE8?|kVWH?X%O(ndPPQRuxL`qou!jgDMHX$I0N!#P#CVV*@p z&6N6Ss)ce2T!p$R?KUbM-deRIylXAj5I9ch&!lS*xs&TDbtiOU#1P~Xu0zu-cyrdl zer=}&W|MV)xyj$Xvo!Gafs7K7Lb3x-Y~k+#oDkx}S+FHWM@EENM|elot}yrA{GZe& zonux37}M$A-&1<$VHz=&Vf0aOuqjgSJObUv$jlx156Zpf$UfaQrj~^0=WU2@(~=Zb zt@Y;*4^P&*3sd~td=>LA#j9qiszN8*ykN4_?I~iZ+gmImTZJAP*=^^Xtd!CTa|+HH z5?X6?8s~O>2%2b?^gDl>awBIJ)oqs`O$@WPgJgBjkvERe*`x7TdH3GQM-^=V5yZ}X zm8HUgnMUnlPDf=_4 zLG?-qBUsO8)(zf6nPEZrS zC$-%`r>P-7oxL}?%}Zk(<5F!aS;y&gmgI!Ct4J>q`(kF^d06D{M!K*C6;gT@jl@D- zjN|dk4_DMwAu6Haz4lAnRXWe^Cr=!r{alk5;}ogZ)`~O7+HPz6fbi!2XYlJWZ~VWh_s>Fnz?Ns7Ql9lRsEI7r4b7k} zOPWve*M0EI1mxGmN9?b`H~DJ^Y^$%zugT?#()<&gRGQtCE!HX7juw6stCeiAPRYhP zC0mF5SxzUPcGs`ks*{%bsMt5*?p;9U}f|%t|n=>85{C zZKOkRRG_yrtrc;Nq*?t%&nKOpM4r!AX^u=jNN*&Qx}-*lmN4rP+*DI}Qk?CF_9%94 z^@Fb~@S=vv^I0WzpFj@0WNd%=y~G==vpD}*5z+BJ+v6hQEySu8-e=exDDHCglgCkC zmyWgc4uU4ogmqj?mkx`oSTXE-gJ*%{I_YZ@GkpN@P>_+lE=^FmNE7^qBA$*cClu8Y zkL}S#WC)<9*7)?DWDjd!;3q^A?U z^`|%rB1O$tiTcn;QaUbEbL{s({^j4()Jp#%eUbd;q*XAL1F!r=-?iX`#4h-*#V_-Y zw2sQ_$ddQ*T_>>{jC|JugA_-D=nc|O{XOL;ByV*P=7ABiF$#})6|6k5aQUh7L0CjY zTcK@stAUT&Fdma9f)SU65pz(fTSEjveJ*>=O*iH2{0l7yj{NnO6H&WmbIAv8`NMy$ zW%KY~Y*}!R_ZxQ0O4$c(Ia$dq(~5ps_aev=VIPVX8n92L?jXb(XGE@X410~!W63p+ zz<2USg6~m85yQ?SMpNVsN~t!Fg^4Az(w**xuj`9zsI_S zEIxw2V5>6rh0BM_&mqEsN9qGMt^?O<(EZ6))@88WYEQT#+@-r{ueszhoboh4;~T46 z{%?hyM@at&cK)**gLLZNkh`*UIp&r7su9Nx{Kk_!^S~bh zDnja`PT$Zf%%A`N%Hbf()++F@*cUL{gcTJyDAe6+4wi}Ae1yjZXMFOEiWL!}__246 zW^U$J?*qJ#m1MB6b&RHM2(%xRu6 zlCp7p0(qe^t5zEz-*kG129Hsvv2nB3kJM}t;VSG$W}Ss`3`;RbQPc^WIL2Cq(VF5K z8i{lYsx`DT7$3<~*^+iloI(m4E%t#_<3=BUe>_HOG@NxgppERE{2Fe1BtL{ju_=NR zorXMx0A~#2Jis7%g7hy;t0ar#z6XV0Mc^&btSHZ54M(|!m${Et(>Ut_8c2mWyFlx{ z5F}6BQdvvzL9V4^O}ds)6In?27=^-zSl>CD;$TEuyj}3ej_8~8|ECKAu^x;kuSr5LwaX4)YBuUkn6#Xg|E#M4)(#43{TwX~~dA1*>bt}qC zd_X&#xO|`>-6mrGE-ND}>fPAem7ul~H?tn-OldfKbe!l7kBxgeEVv?1;F2wYy@%4e zHjf>bj0dbRtZryTBEPqoat$6~p77376w;iZdwf~t!J?53i$*pq z8riUDWTPiT7WqHYGxh-Kl*xB+#(;Bg&H>;9z7*`MvLy}e@qq;*3!dog`H(cQ4LGry z!E$*?948F(3h^&t zhd3+nTgFZrE50P*g>-I-5zL{$U$_poM>(ROv@t@fAYUKyi@kZU%n=5~-n^>tF<*aJFsF6HyGxM2u15fw}Ummh_n| zc^PN65KoXkh1K7QDAEtOalZGs1KBK9LhsOwAv8HL+pTP=Fm_h%9rs#xE$t0b#K`Ux z^fM^VbG69zDClD0wj^+Pwt&GcEx#w|+%H;<5akfxHPUOuhoZswz--v_==3p4ch+r>hpV9LU}rgf*~ouj{Cr+oXMS6;e|UO=S73jY7M8l^{||XhaOU)y>OK zJqqYGvhj^0+js??<}S{@5!SxRv|F}9hy5@|Sk48WlYOu_0HZi3ZW_-aB{PJrmZ`G{ zJ8(q56TOJ~;(R%BUYpWx$64QuC?Fd?aRLUksL{5=RZ_?8IRZQqo@IZMzvWSCB{#!z z3rj*DFp?BA6V6H&YtRofR~*Ecv_}M;6Dap#y}|z0v{vU{LzESI#eeFT;8Ex+qzQ6A zP25fhj;`q<4iy**%*YrwA(~SidC(oj-B@xY#=5X?gH}NC0n!WHtL)w0iI0nMi+vk~ zh(l>jGG`=zno*+|iLhVO>H_11EXQJ83cn=w%wgoS&Xvev%2VVt`FzN-;l=(B)!aj) zPuSLzByB)>;t2b87NX-a)(6iNhDfSsm~N$$dm2)Mk%ESNC$M z2PlqoDs*aZnb4`pi^NzA!B0j|Y8kf~l$NIV3A$Giy(qud*Bq2o{RNld_yhjdB)=u4 zl*s%BokY;b`|~TyA@V_d3%zvZx7~Jo?N@%=X}9;Uncqk%k#~&y7Jz*vjS-~F8x0bO zx=W{fB&I^AGgDO?e~4h?ytW6L_G)ci?p{v2l*!{y+Bf(a^ND-;R*@<>oKjY8T}AmQ zMR=ceF@BqQwvKeLjt5U2bhV5fZ(mg*CeS!{OFhnfHtl^TjLx<(lw;#U;#qQD65hcyK7nT`J!r@9 zm~@GMI&&nQ?$McA5$I^?)Y&rCt7fL!v`XL{f^=S+R%1tiDr>lW1QdUO5#W_0fO#8t zoH74?FO%2!o6V!4C$Id5v&KX@Q(``IOr*w3cvs=V$f-C%|$4{{G5x&31d6ul#0@d2jud-ww!fA)F0E za*5j$^M#N^Gz-bmoq39h;9~RR98JX>uC#Cs_S^$~B}wDJT+DM?ntyQT0^OWq(tH+r z0=q(kG)milz_VxNGwE5D?*9|>AogQs1)~ncE(#fsGi#$usufII^%>>?ag!aQ{d-cG|3t?1K!i6DJK6;$*2^h;yOy1B$jbE3__`a5Xbr z9Z#Qvo*Fe1G6VoOMKZ7%UoEHc~OVELqW=)0x{tT5ax$oKsf~P9LV) z=|m*XReQ^_voHWrY-l(kLhK;q0|X!Bu2vu#^_KQuUs(U-PF?uF1r3>wa?R6poOKNo2in3&1gQmkPiuCwnsfSZvc;2`sbCl9~ z0!8IfgwlO0yX52N69+Y%n0jjsW?d7^HP*%m^d)!H;_Pov8#?cc}9?!1FilJy*2Iv(SV?O}A6ND19~)gPx53>e45+Q1C#XJDT4ew4JX z)1e!|(V&v#Uh^H+^a}M38hejorbZ-(VedeCKC$(s1XhlmO4x?QAy%j3CYBgR7VNG#mqg$~=}b#M#vYBM*+Jm1 zN4wyFj29TgPT@iwcBdS~WsJuu5okU$E7B+YC8paDN=%6HlBqGJ^C~#~!0sd0#N3WZw2mt!2Swk~9B#yYBrclT3$C0XVU5$VAP*Q5wU!RNe zY$>68nn`-NSE;a29K|YGQuH@=3qqqnq+bs9@nRm4JAC%&@S_ZfQWK6UGJ3oV-jg!Y zPV}YI%JJ9Ly9nNsq`*Hc0BK7lM%D+Z?~PP_H_Q6UQuURk>(gEaH~qWsH<)u?chcQN zLIT<=V63EZn-FHJ-!t}b>dY&Ip{rN6DW`&bwkGT?jwa`fmMs0KqXFq_g0wE8G+F`A zqZ`K|ndY@T9E|EuM(uHxuuqjjeGdm2w}FQQ1j)42VB3HdtpdJi_LP?7Mw*eGbV^H- z=@zomGL312)jXse&2zMaO61q6S41({m-ks8dsDX@ktb&3PU3EYL4$V0r4ko~HNg-T z0J$RqC*%z*#SV8F%X^w+C}y8hqFv~J3ac4ekMzB;zrwDHCt;=*_S2nN3@!8}k=u(C zDk-v$MiAu|7A+^uQiyC9){a%xuJ>r~HsKWU7J_5cYnZ|vh}rW>>vd=vPB&JSY^*)S zDPxs})jP4)8nRA;yR+J|?XuAiaoHH6>9C`j`7NLJJC)Qd56)lN?u34E8c-`uZtU}q zHbm9jI3iGO?n;;Mu}`C#OuGW%P3`7eM@vX!#>|z|vs|?X-Z)$tu7s65j{D;p?p>+a zw|OLSUZ&fVGlNG1`5UmK^TK%Cu&`FQhHuwtcU65Jf5mw+xP^oEGo^F`Q&FBsGb%Ys_jz8v zJE|Fxn^U1fX>V%SA*BYtD(@*TR{R5e*BWUb;JZHBxoTs&$IX}yPfBB2xj=jOw09WR zM2Mu3_O6ZF_K94ga)Lc_mGg+A(PzoMrWJZsIA?t8?oI8g;!7SCsb%0iF4a4sNm3+q zj%;<#aIbMJ{B75v-9^~`T;DVA2y}8GX*$LqwP|;j;_*qQF%LqbMFbaLyh5kBEJpyI z#!PJqH$DYPQjs@lIc7ZEWe@7mY{}yYcLic>(we9W`|Eu;TS3U*Po&2&&zLK#V~Ewk zU4V*!W0cRDs0!Clzrn#}%zLq~#=UjAg!HGN_Lw{9%D@{XhBh2Ce1qYz{}i9<=7+V> zqT7T;yCGNwe0|u}AbRWF%-$R+V?t{HxzOKXS-Eg{7Q8Uz1HoO#PMiN!w1G2>vv50g zR#SE%#av)y;=V|nUP5u@;@be?Y_pxIZ#_e4>$x`i6wW!Y*0Ew~@8`$kX;H>H`yc-pn;qg-3~f?b>U-xY;!Wl*xUe%_%?XE9-) zZXZquNb$LTL6-Ydn$OAqkM)Y-!W!n_?si3-zB?^lruZV4DH% zSkg6L;(Yrqh{&=e^^4B`?+q1$Mx+OA$SoFU84Ib6(=IVPiTwmlM9I_5;Zi5oYzmSj zc4YX%Jit*F{8~gu_%fVj@M(~&rCpI~I`25r#O=EI@1uzBl{JYSSFrw~-h$4#Gs0w?RD0Xjo5E63-$sr|Cfs;wA40s=h z$PbSB7~UqSpLJQ?GR~!iJ+K~lokw1fCP8DPF(OS88Uny>B(mxz<4k!L^U2|Qr0 zgGmFG5;xPTCMbkRD4~}$t{1ZR5w17Gs`e_?Wx80hkJYa++X!ElQ_t8-0?nV^Q+r9U zlB0LIm&C(2K&1APxb1hjmqgrA4!XmGSSxRRXu{pa1Y2YQrQX=W^Q8Cl^oCtFuhKWu zq&Muc84z!e(;G##igHnUqcJ|H*y|9n)|B>b?-+YEB%4eR0CIapl$l>a4>RyUcTSkp zj&~vBF5L!JCIWi_vWJC8j}+3$8(cuY|B@C8YbKYJHU_)2Sg(mMp_G>cS}t)p#rlBL zi4&Yc%bfvFxHcm0gzaxpz}1T2ign<7_~LPrC2ToZqZrU6zCe;Jrq3pAJ|)AO4@r59 zz2{1ngy&(JOR!h=8yWdtl=Arb26X^3fm%s?iB5VzOb=N$24)Av&gdbWj*+UpOqQzr zaf7-;mI^(H)9109Ip2s~nzcpD5&e)EGt;GdUXb#!P0SIZEoBY0CEK8V*(tqNm2J4N zs~j=NBDXh8+7rz~)J6lMJq{k1b5U-(q<)y&31d$Ml`uBnfx5h8!S26Wz8Mf<(>NeS=w8}F$H6(2Fy#Jc;fEM=_XFL7iVM8 zX^l#DChdCuLBhWmHAvb;?!A(BJ$ocR%{1+lPcZFZe;S~ACG9e1cSDwneJ@QrbA?Si z*Jz4zSEun3lw~UaA&t?{ozzmQjWHTTDt}{|b|KsXz_ddf$0gOSO}C-`BlpI&E8T|o z7N%N!gftIP>N1Kof1gY3+mWUS#sAwBYnHX{!>#f*#S+*7U{j2=(?d9u*$11VHdsFF z_5kO0Btto<)`?lBM?2@k=|Nl2Tioa(sAgqSt(aE*(Z?kG^{7Eo&5IKN#_N_&r(oF- zMIYyUbgz;<;!ODdHJn~U)QS&bXJab&Zkc;uU7A`6tp4{IHs<34nYvr^j3Y#5?${IYSWf0N6Ezn(4=`EUkAeVGtNW$xIcY1*1MpoJ7K#JeR#jF)e4 z?XjA4?dDusVU`GelBgOdsrHwwvcwr57gh@19|0^GZA2fI@UKmmF>&`_MjJz!ZKU!)kb$3> z;`ABOir`{8M`TvIABayBRI9u{-3G1y>u|zJit~wT8D-QjaT(XDbl<&K(HN6uKxrRE zu@nf&$oTpqm+81KT_%}J+%Y~J#@e!>?;G-LLOi#lay)+(R@a|AlIR*73GeS^~SrxOk;aTd9D%EF#z=#$XtO7s|RJdG!L z4@e>QHe8TxsedQ&^jW*D0M`DjL#Q9X&#g#5wu+12mgF&;hbe z#wUcZ-zoiOj)@CFy43y@ScuYES1K~$Z9A2!^4SyhradT4XOo8unZujaFPZQ9`Wi zGvQ9)^jBNcO3)&=rb8QkL2 z=l_M4^#8P>z~!vn>Hm#3K>SR4Dk9~ENJ7@qir>W;LZlbyhA0OE{*bJrE{UUWTJYzS ztOGY8HlHZVr8;yvmoBQbxOrqGEUlkTau+$Lw`G49d_%UE&2(mvpbBEY$KYS7Bl$qR z*<;jqV)ssxtZ0xzi1(#+y}f^k>4K^b@ecjww?J?~;o%SJvwV2h5Qx>yTI-KFm_imQc9uPD*EZLWP(9sx{^P zxj4g`{J!j&Cf-;`k<+mEz&a|Z7jd%9v?46L+esQ>ku6e!iU?@I3j=J`hF1bI1=Q3l zbf!dPR(kB%uw?lAr2o!)N!BR1Ad`C(X$980Z4RMbK?D;hEA~$~ZNHzBxX_kFUPJ(r z$C>L#)NQo!`i-#+|&l)%rEu zR( zDZVd|-{;`_9G=xXx~5%^RlvAgPByq!WHF6!szwxbm7q_b67^j_XOgs)%_D3%G&w@& zAx8=NP(ryJ*Q2i`Y>P=A0=(A&+xU`I?kEAY#i%1hT%3FyJ{SA<7PNHpf$IQ0TC!8U z?SS?=KzkkPEw8;EH58+U>(DZC9`)n)V?RTX2xu{+6#8P|gF>|VDYW?+0gbrTJgdC6 zXj8eP2>h@BcXcm7Z68KyFKPreQDVVspF#Q0pyX#z^0U4udQ^y$A#i>jdQ%A7KD6P6 zXwNU%eve)jB7HVvBeVv&y@21lt!3<&!~@nP)aSjgd2D(hY`qu%(^GrLrY7&VaH^=M zX>4j_we?o~?R8I&P4!l3ID2)Ql~v}Ly{W9$EAD;1xoHL2>T6dpTsVLXH@OSGzB`kz z$trxI1^6J`+^ziy(0>+~|15HU78v>*T3P^%Ex--U_b`4VA0i4Me|as+IPO7y2pCW3kO!p4ibP#^)9q zle7+`h>+-(@w;<6Q~X%}O!Kw+c?0m>4qV+XZmYh7ah)Vbnt{oq< z&LY?SfZ=}N`+oHA{!J-d*M3a)&z*_u+K(Z}ohXHqJ`aR9-Bf$$i>I@0a@_UY8T1ht z>I_Sqj>jpz#uG*jPAAO7b>uxh!S{8X?Z`RJjllIqSOmLJ>laY#7d++@;i8*g`$7gR zcX3|w{X7wVxCZ#T3t#^hz5W8QxE65y?Xt6gW5uHLMGFSkLcXq*&^w_27_Aw&{+#}z z4k_|cvha*RdW7-O}S+8MOD7G)nq?gs(ogJ~!ox5ysh6g-ii zx$~AyWwp1U)PsQZA#la5%T9tTZe4U5kUj)RAL3G8oYXwUIHTWl8OB20>}hV*r$~%N z*4lTBqt=H|>v~w)Yalb$XTWkB*P6uad%ET>V9aqF;J6KRUXR|d2OPJ*I0!gye{L8z zqd#1V|xb1t~D;|Xa%>|@xLTyMv-ODe>*wTZN$Cl%)=bM`z z2BZ%cl{S4DP<}ZLW$kiq^M7;qHsDcJ*WUPLg`i zi%PAxcyH~;9TH{`6bsgg_4A!1Oh^#C(156|_dUeIji+`h(GbNdLuzQH)r$88tG9Y5 zA&ChM7%;)00p8!*YoD2ukN~#+pXa{+r%xqw&OUpuz4qE`uf0A)ux}?YR#Ai&#rW!O zKzcXUw)mA!tnD{;_5f1Mv#p%JQXqHT>3_rT9)U5>KG(?zWVT0;9g|!7{uwkjfc<;| zy_Ta__}J_P7ufex6D;50wo&+D?Jai^jeP@e=V8`A#SZ%^;Fx#KVZh;?dlY=-r#Um* z?vv2}7v-frL^zWB`A5N5f}rHN7!9$E`I98R(t!p1M$caxiLaBdNDBL!s|O?AhcE9# z>-zxX0|tyW<9Iyn&t_~{zFsxE;_LY40YLcx*7fRZ+H6-M752KK9L-Rmis5{lzk6s@_uMfdn0a)AjP#ls;+*0{Hy|EK@ zT>~htQI|{|H!hU2*>RBmT8+O_4+5fVU+D%!*Y509Z=33HRHQtXGjmW0FZucE)fHUhrWRbpnV;xofvG_#7Ut{JjjW%=sPn3!4E zG_!DGW+C(kEemw_!!aM-#88Jym0PAD8*bmQ!80DN{j7EQ( z@U-B);A@d{_ak$pICGs1iJJl6iTUm!dZXwkrp-E2PvVI-h3?|GON!eE#lf(af-Fxv zdUqmw%Fe+ZLv!26Lmll9ahVN$h2eEU{<@|9ROy4EeZ{E6BJUgmGUXSe+(sDYQDQIT zY#tls8v(B`eUvvWb&L|NA@P?s);FQLvEF#3A06M5Ce@ujy+rxOUHorOkpDgSQ~CVC zNzW+?-roT~{TTTI?}pvX-EYdCmL=rP0>fVf_f&sP+l$CMR4;O;)wESKOhOyP4_-ZK zqR`)8TSuAGqCy9=Ls9sx_X>VnGDl=i6K`YBlQqNWhwjpJ!>7Dy!s7r{Q~B;0OJN%~ zX-c>P7e9A?2lwP|=)0g-!CjeFIj*-U_ER<0QfLu#V7-^^k$0p5&-j<;GR7eEDGI@= zOeOsvd5u@b<8rkhkcU0p=3Rrhd-r>r--9;AJtAjlPR&*kuO)7lLZ70_7!J~>gyrbq zuIJRJm~XsJ*kFfio6K*OGqPFoy%w52F&o^s#jTb6GmQH-!#y&NgZ3`6<{)2^0V!fx z1TJM3%)t%NLrqt?-`HgKFf_2{OeSpu`E6UvGu3J(wTs&!2eH_l@EP*5*J8WW1d8#1 zrR*T}l<&}E#B(kqFKz+3?;Esk@acumCGBtK2}RIWz=ykyEZAfDS0sqa+hyc|>Xgy2$f&^-i8Uk)@cKauWb!H@eL6=` z;xEvNVc9o4p|$r$QV;T(2#iA4oaE}acyGl1D28Xr|5J75``|UEF-O^IV~&z%5tgTC z1;2s)KO4E$h5f9Tb90RF6BE1&^=1UG3c!~Oc6RZt0xy6w{KT?^^+I>CHiFwLYdTHnSyicVbYIH^;N zB0C%HNfCt>aFn_RQx~PSyZW$`xpo97nIZuAde62raK;nWM|G$Z^P8o*gu*-p)V^ zuENXX6W>eVrJ(OZ`{tOSg*x6h#%P3n#)anv(ytO%qBY=WzMV8D?$Lt1BL0jl7?fEZnqZN=C`+T- zQPv=;`5@YbckP~@{Pe9xHk7Gb8sz(!J|y2G_euQy6p{fN6vV&u@!PJ0Ymw)is49dA z6l6&ee@7pXJJx&D!m)4lkZN5$kr;nfeQ>R8>4a_r@~-&GcQ1W)RMdIKE`cXF!!NVd z@_PT-khkjn+}ADL`RQ8>_{V>*-gsW#S);rtpGVWS>&EkvgAI;f8|_om;?E1)Y9<@= zjHXPF_p|5ye9Oy5`{WbI4j||7S4YNnqyKRWiWXdh%McBSY`vHqk}&#Jelsq95WXnvb5`yQ^lheuSTd{*|7rY;JI% zLNBk^kLby-chxAUu`8Z+nE?axo&Z_NK__?N&V{NOX~CDk>`Zu#8Pm-UQ+-|Br0jyQggOsDpIlKr`6^3z89 z!zbeFZGS!A5~q*9EsQ@uzSogq(1GXB(l{Md{~>>hu};zMaQt~-Pfc>X{|~0c`zd_2 zA;X}vXy+C2_S<$ltgQw-9k0jfpk!BmN*tbcf1D1gf9tq-pV7YU-gx`MoekC|`8@jH zo8r$8G}l~Y^y7K|@_0Wbk%o)o^z>Kk)r(yp@fyX7XpKk)J8Hq*bvo86yE0UBk?Ujm z{#ttfdUJ!-^(jAzUPDiI?{Zx1I?YeCtLe#un1gAJv)D{}_WH}jS&5&H{CDJ870WT7Rm_j; zf~}|B@hW@N3(G;B&q}I{nB=PiiX!5ySx?YQngZlW5&Ul8H`9zY-lfBjhR$lT9y-!> z#9nRgRLJJhGief8hW_K%86^`Y^SnaPxFV~U*n^=|mTjEqrVq^D0C|z%Q^m? zK__JVmca4_-?-rC5T&eNh+_B@H*WmJ^+B_PXrEMvSS-I+RyGskZT%IGm&bK_#GIp1 z+@OsJ=%cP)ksD9M98d%R-<-&=)t)M2AIPghRDsGaFZH)jWlBVS#ou<|EqlF+5mE0; z@RsUr329b)k?-s*9TB#^w~N<&>sE=6|46is;{MO_7sZ*%Y&L)yR=5Anc$e91#52$T zj%TxZliDaD#vJY0QL@>HHlA0gjm&1lPgWUUaW)&Xm6@pkn*W=Gg!sZpiY5wX%89r1 zQA;24?2wf>VS6TR)Mk%(cZSyk_J+KXNgrwag14CPU$A5(i^?)0Zeo$R%gS3_2F1Bq zDSrV;|KLu)fsOel*Z__c9LrBJVAc+}y4>&)ddrXckYX0f&vU-G<)WOt?WnV0^H*GC zNI?{{Zp+<$QBL-j`OWHuZ=&YH5%N@=-T-@ofLtTXL(&6 zr#JizayI-$F1jmN({ppMrc?FSwC&z?B)A~RBm3%doLeU3WN)89BU>gIBMW=Azi0yB zn*XyP(c2uv%Smkg)4k34Df^5ScuhYV8JL2R5N(*WWx_3i^*x0FNcwGCnk4B8PMGw#?7T-!i{d(0F1@=M6K!vA4)ELoGUD_-S@o zgz<@mnB7DbYb6neD=fmtK8KY*=sQ#i!t`j*fj0gK$e#&-ZKEEXk zL}KL7Ja3b*Mu?U2g)onan1|@GVnmO-C%Fz|t!@C;U%Ho$lTU__7b^j${Zsd2n6}~tuu~YB&A^!yCz5plGf}LEAw~zSWj0C+xOKXhk{Q2Y0A*$|U zV-zi_!_x=xV=Cz)JC{tdlPm*U==ptS`O$_)dst(JJYVH@Rod&W}|F_=UpIw zf{ZQLntDl1CcNhDp(Morix#n`;0slLD>V6AJoov5SI@<;sBH0Msue}J=ZiMlmLq|B zv-$nR#uHy^*Md;rz@=sSU8;_Cf{KWSpafzBX z|0@^yVU^D(e~2o0bHEB#Agmr=-(Dbb1gfZQA_)LlqpK@}1^v(v1PcZmyLIFp$+W|x ze5P2bw@B|NFs72n7UfPWE?;CX=uk@#74c%07QgIx!1wr8@XCDg%nMzcfJH zRn|{gt;af>!QmbTH@$o3ksZe()sF^u9M`K0gF8NPeNgZ>*qMZlKHnzyM~Ex0KH)Dn z=ye|U?PTm*-V;-dwGn(SclQ+RhT9-7Kvy)q;TGc?_!WS+-i?uim7zyL&t648MAbBB zG#m&{47xr}E6GuIUtH63vE)6k?K?d;_t;<0Gx0 z#|YB+__KI?`<(dra}?!gTo3UG?NOtpe*e2D$!SzsRTJFvQvE2-D0nGsSw`cb-uM9J`c14r=ucssd&aC||E%{! zsFtwcXLKow_x)kRXW8@14MtJO^FX(O9;lhJ~#%@*g&f#N6 zU)|pn@n1;x>pMUJCn++(7`yW#xvtZUv7J*;)v`R|$9}&9@ZKbLuI?IepD@1JI$pv% z)%Yfsg_`N8mdtDFv$0Q7vi8s!G1JHW7y3_?7xvf+EzW|&ut39yV)vc!A%Ne+?mGe9 z(c!QwFXlF_A-oAVe48kLj{!&SI0?rD0}fvr#XzJ;yv49L*lS8~UZ;5vJ}0zv)Y((Q?T7yZh}v)kE^ zedor$b7O43#cj-uFlEava)bWwlJXeUEE0a(_MjyfwS=rqNr}A}dlGw5<+*FlUz^4Z z<E=-vbTf`J{CI@;#k*DY84
    pAUH%fehS5V9cLDa@0)nbyfdQ4| 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 U=Y=5&Z}P;@0ki5(aM>3A3l{tUGXMYp From 7b815ac2f572a16f804c8c30890550f280f08852 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 18 Jul 2021 00:07:26 +0800 Subject: [PATCH 25/34] rustc 1.55.0-nightly (2f391da2e 2021-07-14) --- rust-toolchain | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain b/rust-toolchain index a14eedc..2c78ef8 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2021-07-01 +nightly-2021-07-15 From fd00e8de3af741415e92d3d9cc2db447ef6daeb6 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 18 Jul 2021 18:59:54 +0800 Subject: [PATCH 26/34] Replace llvm_asm! with asm --- os/src/loader.rs | 2 +- os/src/main.rs | 2 +- os/src/sbi.rs | 11 ++++++----- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/os/src/loader.rs b/os/src/loader.rs index ac017e8..d4ae573 100644 --- a/os/src/loader.rs +++ b/os/src/loader.rs @@ -57,7 +57,7 @@ pub fn load_apps() { core::slice::from_raw_parts(num_app_ptr.add(1), num_app + 1) }; // clear i-cache first - unsafe { llvm_asm!("fence.i" :::: "volatile"); } + unsafe { asm!("fence.i"); } // load apps for i in 0..num_app { let base_i = get_base_i(i); diff --git a/os/src/main.rs b/os/src/main.rs index 9bef144..fbd6fff 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -1,7 +1,7 @@ #![no_std] #![no_main] #![feature(global_asm)] -#![feature(llvm_asm)] +#![feature(asm)] #![feature(panic_info_message)] #[macro_use] diff --git a/os/src/sbi.rs b/os/src/sbi.rs index 36e15fc..276c199 100644 --- a/os/src/sbi.rs +++ b/os/src/sbi.rs @@ -14,11 +14,12 @@ const SBI_SHUTDOWN: usize = 8; fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> usize { let mut ret; unsafe { - llvm_asm!("ecall" - : "={x10}" (ret) - : "{x10}" (arg0), "{x11}" (arg1), "{x12}" (arg2), "{x17}" (which) - : "memory" - : "volatile" + asm!( + "ecall", + inlateout("x10") arg0 => ret, + in("x11") arg1, + in("x12") arg2, + in("x17") which, ); } ret From 93ea7f9d4dcf4da2babeb4c74a55b9527ad18fd4 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Mon, 19 Jul 2021 23:56:32 +0800 Subject: [PATCH 27/34] Exclusive UPSafeCell: A RefCell wrapper --- os/src/main.rs | 2 +- os/src/sync/up.rs | 20 ++++++++++---------- os/src/task/mod.rs | 24 +++++++++++++++--------- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/os/src/main.rs b/os/src/main.rs index fbd6fff..4689f03 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -26,7 +26,7 @@ fn clear_bss() { } unsafe { core::slice::from_raw_parts_mut( - sbss as usize as *mut u8, + sbss as usize as *mut u8, ebss as usize - sbss as usize, ).fill(0); } diff --git a/os/src/sync/up.rs b/os/src/sync/up.rs index 849ac4b..642668c 100644 --- a/os/src/sync/up.rs +++ b/os/src/sync/up.rs @@ -1,13 +1,15 @@ -/// Wrap a static data structure inside it so that we are +use core::cell::{RefCell, RefMut}; + +/// Wrap a static data structure inside it so that we are /// able to access it without any `unsafe`. /// /// We should only use it in uniprocessor. /// -/// In order to get mutable reference of inner data, call -/// `upsafe_access`. +/// In order to get mutable reference of inner data, call +/// `exclusive_access`. pub struct UPSafeCell { /// inner data - data: T, + inner: RefCell, } unsafe impl Sync for UPSafeCell {} @@ -16,12 +18,10 @@ impl UPSafeCell { /// User is responsible to guarantee that inner struct is only used in /// uniprocessor. pub unsafe fn new(value: T) -> Self { - Self { data: value, } + Self { inner: RefCell::new(value) } } - /// Mention that user should hold exactly one &mut T at a time. - pub fn upsafe_access(&self) -> &mut T { - unsafe { - &mut *(&self.data as *const _ as usize as *mut T) - } + /// Panic if the data has been borrowed. + pub fn exclusive_access(&self) -> RefMut<'_, T> { + self.inner.borrow_mut() } } \ No newline at end of file diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index a477865..66c8a79 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -27,12 +27,12 @@ lazy_static! { let mut tasks = [ TaskControlBlock { task_cx: TaskContext::zero_init(), - task_status: TaskStatus::UnInit + task_status: TaskStatus::UnInit }; MAX_APP_NUM ]; for i in 0..num_app { - tasks[i].task_cx = TaskContext::goto_restore(init_app_cx(i)); + tasks[i].task_cx = TaskContext::goto_restore(init_app_cx(i)); tasks[i].task_status = TaskStatus::Ready; } TaskManager { @@ -46,33 +46,37 @@ lazy_static! { } impl TaskManager { - fn run_first_task(&self) { - let task0 = &mut self.inner.upsafe_access().tasks[0]; + fn run_first_task(&self) -> ! { + let mut inner = self.inner.exclusive_access(); + let task0 = &mut inner.tasks[0]; task0.task_status = TaskStatus::Running; - let next_task_cx_ptr = &task0.task_cx as *const TaskContext; + let next_task_cx_ptr = &task0.task_cx as *const TaskContext; + drop(inner); let mut _unused = TaskContext::zero_init(); + // before this, we should drop local variables that must be dropped manually unsafe { __switch( &mut _unused as *mut TaskContext, next_task_cx_ptr, ); } + panic!("unreachable in run_first_task!"); } fn mark_current_suspended(&self) { - let mut inner = self.inner.upsafe_access(); + let mut inner = self.inner.exclusive_access(); let current = inner.current_task; inner.tasks[current].task_status = TaskStatus::Ready; } fn mark_current_exited(&self) { - let mut inner = self.inner.upsafe_access(); + let mut inner = self.inner.exclusive_access(); let current = inner.current_task; inner.tasks[current].task_status = TaskStatus::Exited; } fn find_next_task(&self) -> Option { - let inner = self.inner.upsafe_access(); + let inner = self.inner.exclusive_access(); let current = inner.current_task; (current + 1..current + self.num_app + 1) .map(|id| id % self.num_app) @@ -83,19 +87,21 @@ impl TaskManager { fn run_next_task(&self) { if let Some(next) = self.find_next_task() { - let mut inner = self.inner.upsafe_access(); + let mut inner = self.inner.exclusive_access(); let current = inner.current_task; inner.tasks[next].task_status = TaskStatus::Running; inner.current_task = next; let current_task_cx_ptr = &mut inner.tasks[current].task_cx as *mut TaskContext; let next_task_cx_ptr = &inner.tasks[next].task_cx as *const TaskContext; drop(inner); + // before this, we should drop local variables that must be dropped manually unsafe { __switch( current_task_cx_ptr, next_task_cx_ptr, ); } + // go back to user mode } else { panic!("All applications completed!"); } From 859afce7e3b71250eff07a0ee8e424d4ec7f7819 Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Thu, 29 Jul 2021 16:08:29 +0800 Subject: [PATCH 28/34] update to rustc 1.56.0-nightly (08095fc1f 2021-07-26) --- README.md | 16 +++++++++++++++- rust-toolchain | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index dd356b5..e97de71 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,16 @@ # rCore-Tutorial-v3 -rCore-Tutorial version 3. \ No newline at end of file +rCore-Tutorial version 3.x + +## Dependency + +### Binaries + +* rustc 1.56.0-nightly (08095fc1f 2021-07-26) + +* qemu: 5.0.0 + +* rustsbi-lib: 0.2.0-alpha.4 + + rustsbi-qemu: d4968dd2 + + rustsbi-k210: b689314e diff --git a/rust-toolchain b/rust-toolchain index 2c78ef8..bf867e0 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2021-07-15 +nightly From 5a24228565edd9bf118c6c83e9b4ee26bddd1df1 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Thu, 26 Aug 2021 19:51:08 +0800 Subject: [PATCH 29/34] Update rustc && rustsbi; llvm_asm -> asm in user --- bootloader/rustsbi-k210.bin | Bin 94904 -> 94904 bytes bootloader/rustsbi-qemu.bin | Bin 128712 -> 161528 bytes rust-toolchain | 2 +- user/src/lib.rs | 2 +- user/src/syscall.rs | 11 ++++++----- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/bootloader/rustsbi-k210.bin b/bootloader/rustsbi-k210.bin index 27987d6839be28f8acd13e816e4de1c4548debbe..c53ed1fc198816f8d4a0cfec958eaae3f2976cd0 100755 GIT binary patch delta 148 zcmV;F0Bira#KR3Y A!vFvP diff --git a/bootloader/rustsbi-qemu.bin b/bootloader/rustsbi-qemu.bin index 0e61b8ea1c1e32ed9f23de7cf517d5dd89ebd4bd..ddbf336ac1071bdfed06c14e22430dcea70069d8 100755 GIT binary patch literal 161528 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%0D){{#HSSA-Vg8Rf4pP&Ob_im`~PW(wq3b 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� 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 ICPvr!UzPdW-~a#s delta 53138 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 isize { let mut ret: isize; unsafe { - llvm_asm!("ecall" - : "={x10}" (ret) - : "{x10}" (args[0]), "{x11}" (args[1]), "{x12}" (args[2]), "{x17}" (id) - : "memory" - : "volatile" + asm!( + "ecall", + inlateout("x10") args[0] => ret, + in("x11") args[1], + in("x12") args[2], + in("x17") id ); } ret From 4e22f9d2fc0d42749c200ef2998d42cd41d41766 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Thu, 26 Aug 2021 19:59:51 +0800 Subject: [PATCH 30/34] Update README --- README.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e97de71..e28e783 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,8 @@ rCore-Tutorial version 3.x ### Binaries -* rustc 1.56.0-nightly (08095fc1f 2021-07-26) +* rustc 1.56.0-nightly (b03ccace5 2021-08-24) * qemu: 5.0.0 -* rustsbi-lib: 0.2.0-alpha.4 - - rustsbi-qemu: d4968dd2 - - rustsbi-k210: b689314e +* rustsbi: qemu[7d71bfb7] k210[563144b0] From 92d9170fcada9109291c6c31f5f56852b16648fb Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 20 Oct 2021 13:27:05 -0700 Subject: [PATCH 31/34] rust->nightly-2021-10-15,cargo-binutils->0.3.3 --- os/Makefile | 2 +- rust-toolchain | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/os/Makefile b/os/Makefile index 5330215..35049e0 100644 --- a/os/Makefile +++ b/os/Makefile @@ -40,7 +40,7 @@ endif env: (rustup target list | grep "riscv64gc-unknown-none-elf (installed)") || rustup target add $(TARGET) - cargo install cargo-binutils --vers ~0.2 + cargo install cargo-binutils --vers =0.3.3 rustup component add rust-src rustup component add llvm-tools-preview diff --git a/rust-toolchain b/rust-toolchain index 1c5af26..fd47275 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2021-08-25 +nightly-2021-10-15 From b03d06c330e7db4da9cc824197757f7ae5fa011f Mon Sep 17 00:00:00 2001 From: zhanghx0905 <731931282@qq.com> Date: Fri, 19 Nov 2021 18:50:59 +0800 Subject: [PATCH 32/34] update user module to 2021autumn version --- .gitignore | 14 +- os/Makefile | 4 +- os/build.rs | 24 ++- os/src/config.rs | 2 +- user/Cargo.toml | 4 + user/Makefile | 29 ++- user/build.py | 2 +- user/src/bin/03sleep.rs | 18 -- user/src/bin/{00power_3.rs => power_3.rs} | 0 user/src/bin/{01power_5.rs => power_5.rs} | 0 user/src/bin/{02power_7.rs => power_7.rs} | 0 user/src/bin/sleep.rs | 24 +++ user/src/bin/sleep1.rs | 22 +++ user/src/bin/test1_write0.rs | 53 +++++ user/src/bin/test1_write1.rs | 31 +++ user/src/bin/test2_setprio.rs | 20 ++ user/src/bin/test3_stride0.rs | 43 ++++ user/src/bin/test3_stride1.rs | 39 ++++ user/src/bin/test3_stride2.rs | 39 ++++ user/src/bin/test3_stride3.rs | 39 ++++ user/src/bin/test3_stride4.rs | 39 ++++ user/src/bin/test3_stride5.rs | 39 ++++ user/src/bin/yield0.rs | 30 +++ user/src/bin/yield1.rs | 31 +++ user/src/bin/yield2.rs | 31 +++ user/src/console.rs | 58 +++++- user/src/lang_items.rs | 13 +- user/src/lib.rs | 229 ++++++++++++++++++++-- user/src/syscall.rs | 165 +++++++++++++++- 29 files changed, 964 insertions(+), 78 deletions(-) delete mode 100644 user/src/bin/03sleep.rs rename user/src/bin/{00power_3.rs => power_3.rs} (100%) rename user/src/bin/{01power_5.rs => power_5.rs} (100%) rename user/src/bin/{02power_7.rs => power_7.rs} (100%) create mode 100644 user/src/bin/sleep.rs create mode 100644 user/src/bin/sleep1.rs create mode 100644 user/src/bin/test1_write0.rs create mode 100644 user/src/bin/test1_write1.rs create mode 100644 user/src/bin/test2_setprio.rs create mode 100644 user/src/bin/test3_stride0.rs create mode 100644 user/src/bin/test3_stride1.rs create mode 100644 user/src/bin/test3_stride2.rs create mode 100644 user/src/bin/test3_stride3.rs create mode 100644 user/src/bin/test3_stride4.rs create mode 100644 user/src/bin/test3_stride5.rs create mode 100644 user/src/bin/yield0.rs create mode 100644 user/src/bin/yield1.rs create mode 100644 user/src/bin/yield2.rs diff --git a/.gitignore b/.gitignore index 614368a..896d663 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,8 @@ -.idea/* -os/target/* -os/.idea/* -os/Cargo.lock +.idea +Cargo.lock +target os/src/link_app.S os/last-* -user/target/* -user/.idea/* -user/Cargo.lock -tools/ +user/build +tools + diff --git a/os/Makefile b/os/Makefile index 35049e0..a9ed0b7 100644 --- a/os/Makefile +++ b/os/Makefile @@ -29,6 +29,8 @@ OBJCOPY := rust-objcopy --binary-architecture=riscv64 # Disassembly DISASM ?= -x +TEST ?= 0 + build: env switch-check $(KERNEL_BIN) switch-check: @@ -48,7 +50,7 @@ $(KERNEL_BIN): kernel @$(OBJCOPY) $(KERNEL_ELF) --strip-all -O binary $@ kernel: - @cd ../user && make build + @cd ../user && make build TEST=$(TEST) @echo Platform: $(BOARD) @cp src/linker-$(BOARD).ld src/linker.ld @cargo build --release --features "board_$(BOARD)" diff --git a/os/build.rs b/os/build.rs index 5e03231..4a44c56 100644 --- a/os/build.rs +++ b/os/build.rs @@ -1,5 +1,5 @@ +use std::fs::{read_dir, File}; use std::io::{Result, Write}; -use std::fs::{File, read_dir}; fn main() { println!("cargo:rerun-if-changed=../user/src/"); @@ -7,11 +7,11 @@ fn main() { insert_app_data().unwrap(); } -static TARGET_PATH: &str = "../user/target/riscv64gc-unknown-none-elf/release/"; +static TARGET_PATH: &str = "../user/build/bin/"; fn insert_app_data() -> Result<()> { let mut f = File::create("src/link_app.S").unwrap(); - let mut apps: Vec<_> = read_dir("../user/src/bin") + let mut apps: Vec<_> = read_dir("../user/build/bin/") .unwrap() .into_iter() .map(|dir_entry| { @@ -22,12 +22,16 @@ fn insert_app_data() -> Result<()> { .collect(); apps.sort(); - writeln!(f, r#" + writeln!( + f, + r#" .align 3 .section .data .global _num_app _num_app: - .quad {}"#, apps.len())?; + .quad {}"#, + apps.len() + )?; for i in 0..apps.len() { writeln!(f, r#" .quad app_{}_start"#, i)?; @@ -36,13 +40,17 @@ _num_app: for (idx, app) in apps.iter().enumerate() { println!("app_{}: {}", idx, app); - writeln!(f, r#" + writeln!( + f, + r#" .section .data .global app_{0}_start .global app_{0}_end app_{0}_start: .incbin "{2}{1}.bin" -app_{0}_end:"#, idx, app, TARGET_PATH)?; +app_{0}_end:"#, + idx, app, TARGET_PATH + )?; } Ok(()) -} \ No newline at end of file +} diff --git a/os/src/config.rs b/os/src/config.rs index e50175a..3b994cd 100644 --- a/os/src/config.rs +++ b/os/src/config.rs @@ -1,6 +1,6 @@ pub const USER_STACK_SIZE: usize = 4096 * 2; pub const KERNEL_STACK_SIZE: usize = 4096 * 2; -pub const MAX_APP_NUM: usize = 4; +pub const MAX_APP_NUM: usize = 8; pub const APP_BASE_ADDRESS: usize = 0x80400000; pub const APP_SIZE_LIMIT: usize = 0x20000; diff --git a/user/Cargo.toml b/user/Cargo.toml index 817ca52..01b75c2 100644 --- a/user/Cargo.toml +++ b/user/Cargo.toml @@ -7,3 +7,7 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +buddy_system_allocator = "0.6" +bitflags = "1.2.1" +spin = "0.9" +lazy_static = { version = "1.4.0", features = ["spin_no_std"] } diff --git a/user/Makefile b/user/Makefile index 5ca334e..284b240 100644 --- a/user/Makefile +++ b/user/Makefile @@ -2,22 +2,39 @@ TARGET := riscv64gc-unknown-none-elf MODE := release APP_DIR := src/bin TARGET_DIR := target/$(TARGET)/$(MODE) -APPS := $(wildcard $(APP_DIR)/*.rs) -ELFS := $(patsubst $(APP_DIR)/%.rs, $(TARGET_DIR)/%, $(APPS)) -BINS := $(patsubst $(APP_DIR)/%.rs, $(TARGET_DIR)/%.bin, $(APPS)) - +BUILD_DIR := build OBJDUMP := rust-objdump --arch-name=riscv64 OBJCOPY := rust-objcopy --binary-architecture=riscv64 +PY := python3 + +TEST ?= 0 +ifeq ($(TEST), 0) + APPS := $(filter-out $(wildcard $(APP_DIR)/test*.rs), $(wildcard $(APP_DIR)/*.rs)) +else + APPS := $(wildcard $(APP_DIR)/test$(TEST)*.rs) +endif +ELFS := $(patsubst $(APP_DIR)/%.rs, $(TARGET_DIR)/%, $(APPS)) elf: $(APPS) @python3 build.py binary: elf - $(foreach elf, $(ELFS), $(OBJCOPY) $(elf) --strip-all -O binary $(patsubst $(TARGET_DIR)/%, $(TARGET_DIR)/%.bin, $(elf));) + @$(foreach elf, $(ELFS), \ + $(OBJCOPY) $(elf) --strip-all -O binary $(patsubst $(TARGET_DIR)/%, $(TARGET_DIR)/%.bin, $(elf)); \ + cp $(elf) $(patsubst $(TARGET_DIR)/%, $(TARGET_DIR)/%.elf, $(elf));) -build: binary +pre: + @mkdir -p $(BUILD_DIR)/bin/ + @mkdir -p $(BUILD_DIR)/elf/ + @mkdir -p $(BUILD_DIR)/app/ + @$(foreach t, $(APPS), cp $(t) $(BUILD_DIR)/app/;) + +build: clean pre binary + @$(foreach t, $(ELFS), cp $(t).bin $(BUILD_DIR)/bin/;) + @$(foreach t, $(ELFS), cp $(t).elf $(BUILD_DIR)/elf/;) clean: @cargo clean + @rm -rf $(BUILD_DIR) .PHONY: elf binary build clean \ No newline at end of file diff --git a/user/build.py b/user/build.py index 23c6d05..aababef 100644 --- a/user/build.py +++ b/user/build.py @@ -5,7 +5,7 @@ step = 0x20000 linker = 'src/linker.ld' app_id = 0 -apps = os.listdir('src/bin') +apps = os.listdir('build/app') apps.sort() for app in apps: app = app[:app.find('.')] diff --git a/user/src/bin/03sleep.rs b/user/src/bin/03sleep.rs deleted file mode 100644 index 8341123..0000000 --- a/user/src/bin/03sleep.rs +++ /dev/null @@ -1,18 +0,0 @@ -#![no_std] -#![no_main] - -#[macro_use] -extern crate user_lib; - -use user_lib::{get_time, yield_}; - -#[no_mangle] -fn main() -> i32 { - let current_timer = get_time(); - let wait_for = current_timer + 3000; - while get_time() < wait_for { - yield_(); - } - println!("Test sleep OK!"); - 0 -} \ No newline at end of file diff --git a/user/src/bin/00power_3.rs b/user/src/bin/power_3.rs similarity index 100% rename from user/src/bin/00power_3.rs rename to user/src/bin/power_3.rs diff --git a/user/src/bin/01power_5.rs b/user/src/bin/power_5.rs similarity index 100% rename from user/src/bin/01power_5.rs rename to user/src/bin/power_5.rs diff --git a/user/src/bin/02power_7.rs b/user/src/bin/power_7.rs similarity index 100% rename from user/src/bin/02power_7.rs rename to user/src/bin/power_7.rs diff --git a/user/src/bin/sleep.rs b/user/src/bin/sleep.rs new file mode 100644 index 0000000..1312f6c --- /dev/null +++ b/user/src/bin/sleep.rs @@ -0,0 +1,24 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use user_lib::{get_time, yield_}; + +/// 正确输出:(无报错信息) +/// get_time OK! {...} +/// Test sleep OK! + +#[no_mangle] +fn main() -> i32 { + let current_time = get_time(); + assert!(current_time > 0); + println!("get_time OK! {}", current_time); + let wait_for = current_time + 3000; + while get_time() < wait_for { + yield_(); + } + println!("Test sleep OK!"); + 0 +} diff --git a/user/src/bin/sleep1.rs b/user/src/bin/sleep1.rs new file mode 100644 index 0000000..da0cae3 --- /dev/null +++ b/user/src/bin/sleep1.rs @@ -0,0 +1,22 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use user_lib::{get_time, sleep}; + +#[no_mangle] +pub fn main() -> i32 { + let start = get_time(); + println!("current time_msec = {}", start); + sleep(100); + let end = get_time(); + println!( + "time_msec = {} after sleeping 100 ticks, delta = {}ms!", + end, + end - start + ); + println!("Test sleep1 passed!"); + 0 +} diff --git a/user/src/bin/test1_write0.rs b/user/src/bin/test1_write0.rs new file mode 100644 index 0000000..c4a77cc --- /dev/null +++ b/user/src/bin/test1_write0.rs @@ -0,0 +1,53 @@ +#![no_std] +#![no_main] +#![feature(asm)] + +#[macro_use] +extern crate user_lib; +extern crate core; +use core::slice; +use user_lib::{write, STDOUT}; + +/// 正确输出: +/// Test write0 OK! + +const STACK_SIZE: usize = 0x1000; + +unsafe fn r_sp() -> usize { + let mut sp: usize; + asm!("mv {}, sp", out(reg) sp); + sp +} + +unsafe fn stack_range() -> (usize, usize) { + let sp = r_sp(); + let top = (sp + STACK_SIZE - 1) & (!(STACK_SIZE - 1)); + (top - STACK_SIZE, top) +} + +#[no_mangle] +pub fn main() -> i32 { + assert_eq!( + write(STDOUT, unsafe { + #[allow(clippy::zero_ptr)] + slice::from_raw_parts(0x0 as *const _, 10) + }), + -1 + ); + let (bottom, top) = unsafe { stack_range() }; + assert_eq!( + write(STDOUT, unsafe { + slice::from_raw_parts((top - 5) as *const _, 10) + }), + -1 + ); + assert_eq!( + write(STDOUT, unsafe { + slice::from_raw_parts((bottom - 5) as *const _, 10) + }), + -1 + ); + // TODO: test string located in .data section + println!("Test write0 OK!"); + 0 +} diff --git a/user/src/bin/test1_write1.rs b/user/src/bin/test1_write1.rs new file mode 100644 index 0000000..276ad9c --- /dev/null +++ b/user/src/bin/test1_write1.rs @@ -0,0 +1,31 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; +use user_lib::{write, STDOUT}; +const DATA_STRING: &str = "string from data section\n"; + +/// 正确输出: +/// string from data section +/// strinstring from stack section +/// strin +/// Test write1 OK! + +#[no_mangle] +pub fn main() -> i32 { + assert_eq!(write(1234, DATA_STRING.as_bytes()), -1); + assert_eq!( + write(STDOUT, DATA_STRING.as_bytes()), + DATA_STRING.len() as isize + ); + assert_eq!(write(STDOUT, &DATA_STRING.as_bytes()[..5]), 5); + let stack_string = "string from stack section\n"; + assert_eq!( + write(STDOUT, stack_string.as_bytes()), + stack_string.len() as isize + ); + assert_eq!(write(STDOUT, &stack_string.as_bytes()[..5]), 5); + println!("\nTest write1 OK!"); + 0 +} diff --git a/user/src/bin/test2_setprio.rs b/user/src/bin/test2_setprio.rs new file mode 100644 index 0000000..6aa1064 --- /dev/null +++ b/user/src/bin/test2_setprio.rs @@ -0,0 +1,20 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; +use user_lib::set_priority; + +/// 正确输出:(无报错信息) +/// Test set_priority OK! + +#[no_mangle] +pub fn main() -> i32 { + assert_eq!(set_priority(10), 10); + assert_eq!(set_priority(isize::MAX), isize::MAX); + assert_eq!(set_priority(0), -1); + assert_eq!(set_priority(1), -1); + assert_eq!(set_priority(-10), -1); + println!("Test set_priority OK!"); + 0 +} diff --git a/user/src/bin/test3_stride0.rs b/user/src/bin/test3_stride0.rs new file mode 100644 index 0000000..7fd9764 --- /dev/null +++ b/user/src/bin/test3_stride0.rs @@ -0,0 +1,43 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; +use user_lib::{get_time, set_priority}; + +/* +理想结果:6个进程退出时,输出 count 基本正比于 priority +*/ + +fn spin_delay() { + let mut j = true; + for _ in 0..10 { + j = !j; + } +} + +// to get enough accuracy, MAX_TIME (the running time of each process) should > 1000 mseconds. +const MAX_TIME: isize = 1000; +pub fn count_during(prio: isize) -> isize { + let start_time = get_time(); + let mut acc = 0; + set_priority(prio); + loop { + spin_delay(); + acc += 1; + if acc % 400 == 0 { + let time = get_time() - start_time; + if time > MAX_TIME { + return acc; + } + } + } +} + +#[no_mangle] +pub fn main() -> usize { + let prio = 5; + let count = count_during(prio); + println!("priority = {}, exitcode = {}", prio, count); + 0 +} diff --git a/user/src/bin/test3_stride1.rs b/user/src/bin/test3_stride1.rs new file mode 100644 index 0000000..52eb18a --- /dev/null +++ b/user/src/bin/test3_stride1.rs @@ -0,0 +1,39 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; +use user_lib::{get_time, set_priority}; + +fn spin_delay() { + let mut j = true; + for _ in 0..10 { + j = !j; + } +} + +// to get enough accuracy, MAX_TIME (the running time of each process) should > 1000 mseconds. +const MAX_TIME: isize = 1000; +fn count_during(prio: isize) -> isize { + let start_time = get_time(); + let mut acc = 0; + set_priority(prio); + loop { + spin_delay(); + acc += 1; + if acc % 400 == 0 { + let time = get_time() - start_time; + if time > MAX_TIME { + return acc; + } + } + } +} + +#[no_mangle] +pub fn main() -> usize { + let prio = 6; + let count = count_during(prio); + println!("priority = {}, exitcode = {}", prio, count); + 0 +} \ No newline at end of file diff --git a/user/src/bin/test3_stride2.rs b/user/src/bin/test3_stride2.rs new file mode 100644 index 0000000..e2c032c --- /dev/null +++ b/user/src/bin/test3_stride2.rs @@ -0,0 +1,39 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; +use user_lib::{get_time, set_priority}; + +fn spin_delay() { + let mut j = true; + for _ in 0..10 { + j = !j; + } +} + +// to get enough accuracy, MAX_TIME (the running time of each process) should > 1000 mseconds. +const MAX_TIME: isize = 1000; +fn count_during(prio: isize) -> isize { + let start_time = get_time(); + let mut acc = 0; + set_priority(prio); + loop { + spin_delay(); + acc += 1; + if acc % 400 == 0 { + let time = get_time() - start_time; + if time > MAX_TIME { + return acc; + } + } + } +} + +#[no_mangle] +pub fn main() -> usize { + let prio = 7; + let count = count_during(prio); + println!("priority = {}, exitcode = {}", prio, count); + 0 +} \ No newline at end of file diff --git a/user/src/bin/test3_stride3.rs b/user/src/bin/test3_stride3.rs new file mode 100644 index 0000000..71348cc --- /dev/null +++ b/user/src/bin/test3_stride3.rs @@ -0,0 +1,39 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; +use user_lib::{get_time, set_priority}; + +fn spin_delay() { + let mut j = true; + for _ in 0..10 { + j = !j; + } +} + +// to get enough accuracy, MAX_TIME (the running time of each process) should > 1000 mseconds. +const MAX_TIME: isize = 1000; +fn count_during(prio: isize) -> isize { + let start_time = get_time(); + let mut acc = 0; + set_priority(prio); + loop { + spin_delay(); + acc += 1; + if acc % 400 == 0 { + let time = get_time() - start_time; + if time > MAX_TIME { + return acc; + } + } + } +} + +#[no_mangle] +pub fn main() -> usize { + let prio = 8; + let count = count_during(prio); + println!("priority = {}, exitcode = {}", prio, count); + 0 +} \ No newline at end of file diff --git a/user/src/bin/test3_stride4.rs b/user/src/bin/test3_stride4.rs new file mode 100644 index 0000000..40369e7 --- /dev/null +++ b/user/src/bin/test3_stride4.rs @@ -0,0 +1,39 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; +use user_lib::{get_time, set_priority}; + +fn spin_delay() { + let mut j = true; + for _ in 0..10 { + j = !j; + } +} + +// to get enough accuracy, MAX_TIME (the running time of each process) should > 1000 mseconds. +const MAX_TIME: isize = 1000; +fn count_during(prio: isize) -> isize { + let start_time = get_time(); + let mut acc = 0; + set_priority(prio); + loop { + spin_delay(); + acc += 1; + if acc % 400 == 0 { + let time = get_time() - start_time; + if time > MAX_TIME { + return acc; + } + } + } +} + +#[no_mangle] +pub fn main() -> usize { + let prio = 9; + let count = count_during(prio); + println!("priority = {}, exitcode = {}", prio, count); + 0 +} \ No newline at end of file diff --git a/user/src/bin/test3_stride5.rs b/user/src/bin/test3_stride5.rs new file mode 100644 index 0000000..580494a --- /dev/null +++ b/user/src/bin/test3_stride5.rs @@ -0,0 +1,39 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; +use user_lib::{get_time, set_priority}; + +fn spin_delay() { + let mut j = true; + for _ in 0..10 { + j = !j; + } +} + +// to get enough accuracy, MAX_TIME (the running time of each process) should > 1000 mseconds. +const MAX_TIME: isize = 1000; +fn count_during(prio: isize) -> isize { + let start_time = get_time(); + let mut acc = 0; + set_priority(prio); + loop { + spin_delay(); + acc += 1; + if acc % 400 == 0 { + let time = get_time() - start_time; + if time > MAX_TIME { + return acc; + } + } + } +} + +#[no_mangle] +pub fn main() -> usize { + let prio = 10; + let count = count_during(prio); + println!("priority = {}, exitcode = {}", prio, count); + 0 +} \ No newline at end of file diff --git a/user/src/bin/yield0.rs b/user/src/bin/yield0.rs new file mode 100644 index 0000000..1e09edd --- /dev/null +++ b/user/src/bin/yield0.rs @@ -0,0 +1,30 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use user_lib::yield_; + +const WIDTH: usize = 10; +const HEIGHT: usize = 5; + +/* +理想结果:三个程序交替输出 ABC +*/ + +#[no_mangle] +fn main() -> i32 { + for i in 0..HEIGHT { + let buf = ['A' as u8; WIDTH]; + println!( + "{} [{}/{}]", + core::str::from_utf8(&buf).unwrap(), + i + 1, + HEIGHT + ); + yield_(); + } + println!("Test write A OK!"); + 0 +} diff --git a/user/src/bin/yield1.rs b/user/src/bin/yield1.rs new file mode 100644 index 0000000..3d91adf --- /dev/null +++ b/user/src/bin/yield1.rs @@ -0,0 +1,31 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use user_lib::yield_; + +const WIDTH: usize = 10; +const HEIGHT: usize = 5; + +/* +理想结果:三个程序交替输出 ABC +*/ + +#[no_mangle] +#[no_mangle] +fn main() -> i32 { + for i in 0..HEIGHT { + let buf = ['B' as u8; WIDTH]; + println!( + "{} [{}/{}]", + core::str::from_utf8(&buf).unwrap(), + i + 1, + HEIGHT + ); + yield_(); + } + println!("Test write B OK!"); + 0 +} diff --git a/user/src/bin/yield2.rs b/user/src/bin/yield2.rs new file mode 100644 index 0000000..05ea13a --- /dev/null +++ b/user/src/bin/yield2.rs @@ -0,0 +1,31 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use user_lib::yield_; + +/* +理想结果:三个程序交替输出 ABC +*/ + +const WIDTH: usize = 10; +const HEIGHT: usize = 5; + +#[no_mangle] +#[no_mangle] +fn main() -> i32 { + for i in 0..HEIGHT { + let buf = ['C' as u8; WIDTH]; + println!( + "{} [{}/{}]", + core::str::from_utf8(&buf).unwrap(), + i + 1, + HEIGHT + ); + yield_(); + } + println!("Test write C OK!"); + 0 +} diff --git a/user/src/console.rs b/user/src/console.rs index ac80117..6d6d1f3 100644 --- a/user/src/console.rs +++ b/user/src/console.rs @@ -1,19 +1,52 @@ +use alloc::collections::vec_deque::VecDeque; +use alloc::sync::Arc; use core::fmt::{self, Write}; -use super::write; +use spin::mutex::Mutex; -struct Stdout; +pub const STDIN: usize = 0; +pub const STDOUT: usize = 1; -const STDOUT: usize = 1; +const CONSOLE_BUFFER_SIZE: usize = 256 * 10; -impl Write for Stdout { +use super::{read, write}; +use lazy_static::*; + +struct ConsoleBuffer(VecDeque); + +lazy_static! { + static ref CONSOLE_BUFFER: Arc> = { + let buffer = VecDeque::::with_capacity(CONSOLE_BUFFER_SIZE); + Arc::new(Mutex::new(ConsoleBuffer(buffer))) + }; +} + +impl ConsoleBuffer { + fn flush(&mut self) -> isize { + let s: &[u8] = self.0.make_contiguous(); + let ret = write(STDOUT, s); + self.0.clear(); + ret + } +} + +impl Write for ConsoleBuffer { fn write_str(&mut self, s: &str) -> fmt::Result { - write(STDOUT, s.as_bytes()); + for c in s.as_bytes().iter() { + self.0.push_back(*c); + if (*c == b'\n' || self.0.len() == CONSOLE_BUFFER_SIZE) && -1 == self.flush() { + return Err(fmt::Error); + } + } Ok(()) } } +#[allow(unused)] pub fn print(args: fmt::Arguments) { - Stdout.write_fmt(args).unwrap(); + let mut buf = CONSOLE_BUFFER.lock(); + // buf.write_fmt(args).unwrap(); + // BUG FIX: 关闭 stdout 后,本函数不能触发 panic,否则会造成死锁 + buf.write_fmt(args); } #[macro_export] @@ -28,4 +61,15 @@ macro_rules! println { ($fmt: literal $(, $($arg: tt)+)?) => { $crate::console::print(format_args!(concat!($fmt, "\n") $(, $($arg)+)?)); } -} \ No newline at end of file +} + +pub fn getchar() -> u8 { + let mut c = [0u8; 1]; + read(STDIN, &mut c); + c[0] +} + +pub fn flush() { + let mut buf = CONSOLE_BUFFER.lock(); + buf.flush(); +} diff --git a/user/src/lang_items.rs b/user/src/lang_items.rs index c90d297..2d81a1d 100644 --- a/user/src/lang_items.rs +++ b/user/src/lang_items.rs @@ -1,10 +1,17 @@ +use crate::exit; + #[panic_handler] fn panic_handler(panic_info: &core::panic::PanicInfo) -> ! { let err = panic_info.message().unwrap(); if let Some(location) = panic_info.location() { - println!("Panicked at {}:{}, {}", location.file(), location.line(), err); + println!( + "Panicked at {}:{}, {}", + location.file(), + location.line(), + err + ); } else { println!("Panicked: {}", err); } - loop {} -} \ No newline at end of file + exit(-1); +} diff --git a/user/src/lib.rs b/user/src/lib.rs index 902c542..d97fbf3 100644 --- a/user/src/lib.rs +++ b/user/src/lib.rs @@ -2,18 +2,42 @@ #![feature(asm)] #![feature(linkage)] #![feature(panic_info_message)] +#![feature(alloc_error_handler)] #[macro_use] pub mod console; -mod syscall; mod lang_items; +mod syscall; + +extern crate alloc; +extern crate core; +#[macro_use] +extern crate bitflags; + +use buddy_system_allocator::LockedHeap; +pub use console::{flush, STDIN, STDOUT}; +pub use syscall::*; + +const USER_HEAP_SIZE: usize = 16384; + +static mut HEAP_SPACE: [u8; USER_HEAP_SIZE] = [0; USER_HEAP_SIZE]; + +#[global_allocator] +static HEAP: LockedHeap = LockedHeap::empty(); + +#[alloc_error_handler] +pub fn handle_alloc_error(layout: core::alloc::Layout) -> ! { + panic!("Heap allocation error, layout = {:?}", layout); +} #[no_mangle] #[link_section = ".text.entry"] pub extern "C" fn _start() -> ! { - clear_bss(); + unsafe { + HEAP.lock() + .init(HEAP_SPACE.as_ptr() as usize, USER_HEAP_SIZE); + } exit(main()); - panic!("unreachable after sys_exit!"); } #[linkage = "weak"] @@ -22,19 +46,194 @@ fn main() -> i32 { panic!("Cannot find main!"); } -fn clear_bss() { - extern "C" { - fn start_bss(); - fn end_bss(); +bitflags! { + pub struct OpenFlags: u32 { + const RDONLY = 0; + const WRONLY = 1 << 0; + const RDWR = 1 << 1; + const CREATE = 1 << 9; + const TRUNC = 1 << 10; } - (start_bss as usize..end_bss as usize).for_each(|addr| { - unsafe { (addr as *mut u8).write_volatile(0); } - }); } -use syscall::*; +#[repr(C)] +#[derive(Debug, Default)] +pub struct TimeVal { + pub sec: usize, + pub usec: usize, +} -pub fn write(fd: usize, buf: &[u8]) -> isize { sys_write(fd, buf) } -pub fn exit(exit_code: i32) -> isize { sys_exit(exit_code) } -pub fn yield_() -> isize { sys_yield() } -pub fn get_time() -> isize { sys_get_time() } \ No newline at end of file +impl TimeVal { + pub fn new() -> Self { + Self::default() + } +} + +#[repr(C)] +#[derive(Debug)] +pub struct Stat { + /// ID of device containing file + pub dev: u64, + /// inode number + pub ino: u64, + /// file type and mode + pub mode: StatMode, + /// number of hard links + pub nlink: u32, + /// unused pad + pad: [u64; 7], +} + +impl Stat { + pub fn new() -> Self { + Stat { + dev: 0, + ino: 0, + mode: StatMode::NULL, + nlink: 0, + pad: [0; 7], + } + } +} + +impl Default for Stat { + fn default() -> Self { + Self::new() + } +} + +bitflags! { + pub struct StatMode: u32 { + const NULL = 0; + /// directory + const DIR = 0o040000; + /// ordinary regular file + const FILE = 0o100000; + } +} + +const AT_FDCWD: isize = -100; + +pub fn open(path: &str, flags: OpenFlags) -> isize { + sys_openat(AT_FDCWD as usize, path, flags.bits, OpenFlags::RDWR.bits) +} + +pub fn close(fd: usize) -> isize { + if fd == STDOUT { + console::flush(); + } + sys_close(fd) +} + +pub fn read(fd: usize, buf: &mut [u8]) -> isize { + sys_read(fd, buf) +} + +pub fn write(fd: usize, buf: &[u8]) -> isize { + sys_write(fd, buf) +} + +pub fn link(old_path: &str, new_path: &str) -> isize { + sys_linkat(AT_FDCWD as usize, old_path, AT_FDCWD as usize, new_path, 0) +} + +pub fn unlink(path: &str) -> isize { + sys_unlinkat(AT_FDCWD as usize, path, 0) +} + +pub fn fstat(fd: usize, st: &Stat) -> isize { + sys_fstat(fd, st) +} + +pub fn mail_read(buf: &mut [u8]) -> isize { + sys_mail_read(buf) +} + +pub fn mail_write(pid: usize, buf: &[u8]) -> isize { + sys_mail_write(pid, buf) +} + +pub fn exit(exit_code: i32) -> ! { + console::flush(); + sys_exit(exit_code); +} + +pub fn yield_() -> isize { + sys_yield() +} + +pub fn get_time() -> isize { + let time = TimeVal::new(); + match sys_get_time(&time, 0) { + 0 => ((time.sec & 0xffff) * 1000 + time.usec / 1000) as isize, + _ => -1, + } +} + +pub fn getpid() -> isize { + sys_getpid() +} + +pub fn fork() -> isize { + sys_fork() +} + +pub fn exec(path: &str) -> isize { + sys_exec(path) +} + +pub fn set_priority(prio: isize) -> isize { + sys_set_priority(prio) +} + +pub fn wait(exit_code: &mut i32) -> isize { + loop { + match sys_waitpid(-1, exit_code as *mut _) { + -2 => { + sys_yield(); + } + n => { + return n; + } + } + } +} + +pub fn waitpid(pid: usize, exit_code: &mut i32) -> isize { + loop { + match sys_waitpid(pid as isize, exit_code as *mut _) { + -2 => { + sys_yield(); + } + n => { + return n; + } + } + } +} + +pub fn sleep(period_ms: usize) { + let start = get_time(); + while get_time() < start + period_ms as isize { + sys_yield(); + } +} + +pub fn mmap(start: usize, len: usize, prot: usize) -> isize { + sys_mmap(start, len, prot) +} + +pub fn munmap(start: usize, len: usize) -> isize { + sys_munmap(start, len) +} + +pub fn spawn(path: &str) -> isize { + sys_spawn(path) +} + +pub fn dup(fd: usize) -> isize { + sys_dup(fd) +} +pub fn pipe(pipe_fd: &mut [usize]) -> isize { + sys_pipe(pipe_fd) +} diff --git a/user/src/syscall.rs b/user/src/syscall.rs index ed3d16a..7aaa584 100644 --- a/user/src/syscall.rs +++ b/user/src/syscall.rs @@ -1,9 +1,29 @@ -const SYSCALL_WRITE: usize = 64; -const SYSCALL_EXIT: usize = 93; -const SYSCALL_YIELD: usize = 124; -const SYSCALL_GET_TIME: usize = 169; +use super::{Stat, TimeVal}; -fn syscall(id: usize, args: [usize; 3]) -> isize { +pub const SYSCALL_OPENAT: usize = 56; +pub const SYSCALL_CLOSE: usize = 57; +pub const SYSCALL_READ: usize = 63; +pub const SYSCALL_WRITE: usize = 64; +pub const SYSCALL_UNLINKAT: usize = 35; +pub const SYSCALL_LINKAT: usize = 37; +pub const SYSCALL_FSTAT: usize = 80; +pub const SYSCALL_EXIT: usize = 93; +pub const SYSCALL_YIELD: usize = 124; +pub const SYSCALL_GETTIMEOFDAY: usize = 169; +pub const SYSCALL_GETPID: usize = 172; +pub const SYSCALL_FORK: usize = 220; +pub const SYSCALL_EXEC: usize = 221; +pub const SYSCALL_WAITPID: usize = 260; +pub const SYSCALL_SET_PRIORITY: usize = 140; +pub const SYSCALL_MUNMAP: usize = 215; +pub const SYSCALL_MMAP: usize = 222; +pub const SYSCALL_SPAWN: usize = 400; +pub const SYSCALL_MAIL_READ: usize = 401; +pub const SYSCALL_MAIL_WRITE: usize = 402; +pub const SYSCALL_DUP: usize = 24; +pub const SYSCALL_PIPE: usize = 59; + +pub fn syscall(id: usize, args: [usize; 3]) -> isize { let mut ret: isize; unsafe { asm!( @@ -17,18 +37,143 @@ fn syscall(id: usize, args: [usize; 3]) -> isize { ret } +pub fn syscall6(id: usize, args: [usize; 6]) -> isize { + let mut ret: isize; + unsafe { + asm!( + "ecall", + inlateout("x10") args[0] => ret, + in("x11") args[1], + in("x12") args[2], + in("x13") args[3], + in("x14") args[4], + in("x15") args[5], + in("x17") id + ); + } + ret +} + +pub fn sys_openat(dirfd: usize, path: &str, flags: u32, mode: u32) -> isize { + syscall6( + SYSCALL_OPENAT, + [ + dirfd, + path.as_ptr() as usize, + flags as usize, + mode as usize, + 0, + 0, + ], + ) +} + +pub fn sys_close(fd: usize) -> isize { + syscall(SYSCALL_CLOSE, [fd, 0, 0]) +} + +pub fn sys_read(fd: usize, buffer: &mut [u8]) -> isize { + syscall( + SYSCALL_READ, + [fd, buffer.as_mut_ptr() as usize, buffer.len()], + ) +} + pub fn sys_write(fd: usize, buffer: &[u8]) -> isize { syscall(SYSCALL_WRITE, [fd, buffer.as_ptr() as usize, buffer.len()]) } -pub fn sys_exit(exit_code: i32) -> isize { - syscall(SYSCALL_EXIT, [exit_code as usize, 0, 0]) +pub fn sys_linkat( + old_dirfd: usize, + old_path: &str, + new_dirfd: usize, + new_path: &str, + flags: usize, +) -> isize { + syscall6( + SYSCALL_LINKAT, + [ + old_dirfd, + old_path.as_ptr() as usize, + new_dirfd, + new_path.as_ptr() as usize, + flags, + 0, + ], + ) +} + +pub fn sys_unlinkat(dirfd: usize, path: &str, flags: usize) -> isize { + syscall(SYSCALL_UNLINKAT, [dirfd, path.as_ptr() as usize, flags]) +} + +pub fn sys_fstat(fd: usize, st: &Stat) -> isize { + syscall(SYSCALL_FSTAT, [fd, st as *const _ as usize, 0]) +} + +pub fn sys_mail_read(buffer: &mut [u8]) -> isize { + syscall( + SYSCALL_MAIL_READ, + [buffer.as_ptr() as usize, buffer.len(), 0], + ) +} + +pub fn sys_mail_write(pid: usize, buffer: &[u8]) -> isize { + syscall( + SYSCALL_MAIL_WRITE, + [pid, buffer.as_ptr() as usize, buffer.len()], + ) +} + +pub fn sys_exit(exit_code: i32) -> ! { + syscall(SYSCALL_EXIT, [exit_code as usize, 0, 0]); + panic!("sys_exit never returns!"); } pub fn sys_yield() -> isize { syscall(SYSCALL_YIELD, [0, 0, 0]) } -pub fn sys_get_time() -> isize { - syscall(SYSCALL_GET_TIME, [0, 0, 0]) -} \ No newline at end of file +pub fn sys_get_time(time: &TimeVal, tz: usize) -> isize { + syscall(SYSCALL_GETTIMEOFDAY, [time as *const _ as usize, tz, 0]) +} + +pub fn sys_getpid() -> isize { + syscall(SYSCALL_GETPID, [0, 0, 0]) +} + +pub fn sys_fork() -> isize { + syscall(SYSCALL_FORK, [0, 0, 0]) +} + +pub fn sys_exec(path: &str) -> isize { + syscall(SYSCALL_EXEC, [path.as_ptr() as usize, 0, 0]) +} + +pub fn sys_waitpid(pid: isize, xstatus: *mut i32) -> isize { + syscall(SYSCALL_WAITPID, [pid as usize, xstatus as usize, 0]) +} + +pub fn sys_set_priority(prio: isize) -> isize { + syscall(SYSCALL_SET_PRIORITY, [prio as usize, 0, 0]) +} + +pub fn sys_mmap(start: usize, len: usize, prot: usize) -> isize { + syscall(SYSCALL_MMAP, [start, len, prot]) +} + +pub fn sys_munmap(start: usize, len: usize) -> isize { + syscall(SYSCALL_MUNMAP, [start, len, 0]) +} + +pub fn sys_spawn(path: &str) -> isize { + syscall(SYSCALL_SPAWN, [path.as_ptr() as usize, 0, 0]) +} + +pub fn sys_dup(fd: usize) -> isize { + syscall(SYSCALL_DUP, [fd, 0, 0]) +} + +pub fn sys_pipe(pipe: &mut [usize]) -> isize { + syscall(SYSCALL_PIPE, [pipe.as_mut_ptr() as usize, 0, 0]) +} From 0aaa7bba537f9789fa29df21fa24cc74e24ed383 Mon Sep 17 00:00:00 2001 From: zhanghx0905 <731931282@qq.com> Date: Fri, 19 Nov 2021 19:09:34 +0800 Subject: [PATCH 33/34] os gettime syscall consistent with user mod --- os/src/syscall/mod.rs | 2 +- os/src/syscall/process.rs | 24 +++++++++++++++++++++--- os/src/timer.rs | 10 +++++----- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/os/src/syscall/mod.rs b/os/src/syscall/mod.rs index da41168..8ca22fe 100644 --- a/os/src/syscall/mod.rs +++ b/os/src/syscall/mod.rs @@ -14,7 +14,7 @@ pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize { SYSCALL_WRITE => sys_write(args[0], args[1] as *const u8, args[2]), SYSCALL_EXIT => sys_exit(args[0] as i32), SYSCALL_YIELD => sys_yield(), - SYSCALL_GET_TIME => sys_get_time(), + SYSCALL_GET_TIME => sys_get_time(args[0] as *mut TimeVal, args[1]), _ => panic!("Unsupported syscall_id: {}", syscall_id), } } diff --git a/os/src/syscall/process.rs b/os/src/syscall/process.rs index 23eab1f..d016849 100644 --- a/os/src/syscall/process.rs +++ b/os/src/syscall/process.rs @@ -2,7 +2,14 @@ use crate::task::{ suspend_current_and_run_next, exit_current_and_run_next, }; -use crate::timer::get_time_ms; +use crate::timer::get_time_us; + +#[repr(C)] +#[derive(Debug)] +pub struct TimeVal { + pub sec: usize, + pub usec: usize, +} pub fn sys_exit(exit_code: i32) -> ! { println!("[kernel] Application exited with code {}", exit_code); @@ -15,6 +22,17 @@ pub fn sys_yield() -> isize { 0 } -pub fn sys_get_time() -> isize { - get_time_ms() as isize +// pub fn sys_get_time() -> isize { +// get_time_ms() as isize +// } + +pub fn sys_get_time(ts: *mut TimeVal, _tz: usize) -> isize { + let us = get_time_us(); + unsafe { + *ts = TimeVal { + sec: us / 1_000_000, + usec: us % 1_000_000, + }; + } + 0 } \ No newline at end of file diff --git a/os/src/timer.rs b/os/src/timer.rs index ad226e6..8b908bc 100644 --- a/os/src/timer.rs +++ b/os/src/timer.rs @@ -1,16 +1,16 @@ -use riscv::register::time; -use crate::sbi::set_timer; use crate::config::CLOCK_FREQ; +use crate::sbi::set_timer; +use riscv::register::time; const TICKS_PER_SEC: usize = 100; -const MSEC_PER_SEC: usize = 1000; +const MICRO_PER_SEC: usize = 1_000_000; pub fn get_time() -> usize { time::read() } -pub fn get_time_ms() -> usize { - time::read() / (CLOCK_FREQ / MSEC_PER_SEC) +pub fn get_time_us() -> usize { + time::read() / (CLOCK_FREQ / MICRO_PER_SEC) } pub fn set_next_trigger() { From a91f29c7a37e5762333e2dc739f7f472cce4f93f Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Sat, 20 Nov 2021 15:39:28 +0800 Subject: [PATCH 34/34] update .gitignore, README.md, dev-env-info.md --- .gitignore | 12 +++++++-- README.md | 67 ++++++++++++++++++++++++++++++++++++++++++++----- dev-env-info.md | 18 +++++++++++++ 3 files changed, 89 insertions(+), 8 deletions(-) create mode 100644 dev-env-info.md diff --git a/.gitignore b/.gitignore index 896d663..aa359a4 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,14 @@ Cargo.lock target os/src/link_app.S os/last-* +os/Cargo.lock user/build -tools - +user/target/* +user/.idea/* +user/Cargo.lock +easy-fs/Cargo.lock +easy-fs/target/* +easy-fs-fuse/Cargo.lock +easy-fs-fuse/target/* +tools/ +pushall.sh \ No newline at end of file diff --git a/README.md b/README.md index e28e783..e2dc4e3 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,67 @@ # rCore-Tutorial-v3 -rCore-Tutorial version 3.x +rCore-Tutorial version 3.5. See the [Documentation in Chinese](https://rcore-os.github.io/rCore-Tutorial-Book-v3/). -## Dependency +## news +- 2021.11.20: Now we are updating our labs. Please checkout chX-dev Branches for our current new labs. (Notice: please see the [Dependency] section in the end of this doc) -### Binaries +## Overview -* rustc 1.56.0-nightly (b03ccace5 2021-08-24) +This project aims to show how to write an **Unix-like OS** running on **RISC-V** platforms **from scratch** in **[Rust](https://www.rust-lang.org/)** for **beginners** without any background knowledge about **computer architectures, assembly languages or operating systems**. -* qemu: 5.0.0 +## Features -* rustsbi: qemu[7d71bfb7] k210[563144b0] +* Platform supported: `qemu-system-riscv64` simulator or dev boards based on [Kendryte K210 SoC](https://canaan.io/product/kendryteai) such as [Maix Dock](https://www.seeedstudio.com/Sipeed-MAIX-Dock-p-4815.html) +* OS + * concurrency of multiple processes + * preemptive scheduling(Round-Robin algorithm) + * dynamic memory management in kernel + * virtual memory + * a simple file system with a block cache + * an interactive shell in the userspace +* **only 4K+ LoC** +* [A detailed documentation in Chinese](https://rcore-os.github.io/rCore-Tutorial-Book-v3/) in spite of the lack of comments in the code(English version is not available at present) + +## Run our project + +TODO: + +## Working in progress + +Now we are still updating our project, you can find latest changes on branches `chX-dev` such as `ch1-dev`. We are intended to publish first release 3.5.0 after completing most of the tasks mentioned below. + +Overall progress: ch7 + +### Completed + +* [x] automatically clean up and rebuild before running our project on a different platform +* [x] fix `power` series application in early chapters, now you can find modulus in the output +* [x] use `UPSafeCell` instead of `RefCell` or `spin::Mutex` in order to access static data structures and adjust its API so that it cannot be borrowed twice at a time(mention `& .exclusive_access().task[0]` in `run_first_task`) +* [x] move `TaskContext` into `TaskControlBlock` instead of restoring it in place on kernel stack(since ch3), eliminating annoying `task_cx_ptr2` +* [x] replace `llvm_asm!` with `asm!` +* [x] expand the fs image size generated by `rcore-fs-fuse` to 128MiB +* [x] add a new test named `huge_write` which evaluates the fs performance(qemu\~500KiB/s k210\~50KiB/s) +* [x] flush all block cache to disk after a fs transaction which involves write operation +* [x] replace `spin::Mutex` with `UPSafeCell` before SMP chapter +* [x] add codes for a new chapter about synchronization & mutual exclusion(uniprocessor only) + +### Todo(High priority) + +* [ ] support Allwinner's RISC-V D1 chip +* [ ] bug fix: we should call `find_pte` rather than `find_pte_create` in `PageTable::unmap` +* [ ] bug fix: check validity of level-3 pte in `find_pte` instead of checking it outside this function +* [ ] use old fs image optionally, do not always rebuild the image +* [ ] add new system calls: getdents64/fstat +* [ ] shell functionality improvement(to be continued...) +* [ ] give every non-zero process exit code an unique and clear error type +* [ ] effective error handling of mm module + +### Todo(Low priority) + +* [ ] rewrite practice doc and remove some inproper questions +* [ ] provide smooth debug experience at a Rust source code level +* [ ] format the code using official tools + + +### Crates + +We will add them later. diff --git a/dev-env-info.md b/dev-env-info.md new file mode 100644 index 0000000..f76470a --- /dev/null +++ b/dev-env-info.md @@ -0,0 +1,18 @@ +# rCore-Tutorial-v3 +rCore-Tutorial version 3.x + +## Dependency + +### Binaries + +* rustc: 1.57.0-nightly (e1e9319d9 2021-10-14) + +* cargo-binutils: 0.3.3 + +* qemu: 5.0.0 + +* rustsbi-lib: 0.2.0-alpha.4 + + rustsbi-qemu: d4968dd2 + + rustsbi-k210: b689314e