From 5067f033226cbc0b923f019f93a55bc0eb5381dc Mon Sep 17 00:00:00 2001 From: karthikmurakonda Date: Sat, 17 Sep 2022 21:34:42 +0530 Subject: [PATCH] init for assignment-3 --- .gitignore | 1 + assignment-1/assignment1-1.pdf | Bin 0 -> 91406 bytes assignment-1/src/descending.asm | 40 ++ assignment-1/src/even-odd.asm | 13 + assignment-1/src/fibonacci.asm | 30 ++ assignment-1/src/palindrome.asm | 32 ++ assignment-1/src/prime.asm | 23 + .../bin/configuration/Configuration.class | Bin 0 -> 4154 bytes .../bin/configuration/config.xml | 43 ++ ...java_74fc5dae77a3b9a48197eb148ed1e37a.prob | 1 + .../generic/Instruction$OperationType.class | Bin 0 -> 2473 bytes .../bin/generic/Instruction.class | Bin 0 -> 2663 bytes .../supporting_files/bin/generic/Misc.class | Bin 0 -> 535 bytes .../bin/generic/Operand$OperandType.class | Bin 0 -> 1137 bytes .../bin/generic/Operand.class | Bin 0 -> 1565 bytes .../bin/generic/ParsedProgram.class | Bin 0 -> 7531 bytes .../bin/generic/Simulator.class | Bin 0 -> 7217 bytes .../bin/generic/Statistics.class | Bin 0 -> 402 bytes .../supporting_files/bin/main/Main.class | Bin 0 -> 664 bytes assignment-2/supporting_files/build.xml | 44 ++ .../src/configuration/Configuration.class | Bin 0 -> 3909 bytes .../src/configuration/Configuration.java | 116 +++++ .../src/configuration/config.xml | 43 ++ ...java_74fc5dae77a3b9a48197eb148ed1e37a.prob | 1 + .../generic/Instruction$OperationType.class | Bin 0 -> 2412 bytes .../src/generic/Instruction.class | Bin 0 -> 2716 bytes .../src/generic/Instruction.java | 96 +++++ .../supporting_files/src/generic/Misc.class | Bin 0 -> 423 bytes .../supporting_files/src/generic/Misc.java | 10 + .../src/generic/Operand$OperandType.class | Bin 0 -> 1076 bytes .../src/generic/Operand.class | Bin 0 -> 1622 bytes .../supporting_files/src/generic/Operand.java | 41 ++ .../src/generic/ParsedProgram$1.class | Bin 0 -> 2007 bytes .../src/generic/ParsedProgram.class | Bin 0 -> 5297 bytes .../src/generic/ParsedProgram.java | 268 ++++++++++++ .../src/generic/Simulator$1.class | Bin 0 -> 1465 bytes .../src/generic/Simulator.class | Bin 0 -> 4358 bytes .../src/generic/Simulator.java | 196 +++++++++ .../src/generic/Statistics.class | Bin 0 -> 283 bytes .../src/generic/Statistics.java | 13 + .../supporting_files/src/main/Main.class | Bin 0 -> 557 bytes .../supporting_files/src/main/Main.java | 19 + .../submissions/1.observedoutput | Bin 0 -> 20 bytes .../submissions/2.observedoutput | Bin 0 -> 68 bytes .../submissions/3.observedoutput | Bin 0 -> 72 bytes .../supporting_files/submissions/bin/1.asm | 9 + .../supporting_files/submissions/bin/1.out | Bin 0 -> 20 bytes .../bin/configuration/Configuration.class | Bin 0 -> 3909 bytes .../submissions/bin/configuration/config.xml | 43 ++ ...java_74fc5dae77a3b9a48197eb148ed1e37a.prob | 1 + .../generic/Instruction$OperationType.class | Bin 0 -> 2412 bytes .../submissions/bin/generic/Instruction.class | Bin 0 -> 2716 bytes .../submissions/bin/generic/Misc.class | Bin 0 -> 423 bytes .../bin/generic/Operand$OperandType.class | Bin 0 -> 1076 bytes .../submissions/bin/generic/Operand.class | Bin 0 -> 1622 bytes .../bin/generic/ParsedProgram$1.class | Bin 0 -> 2007 bytes .../bin/generic/ParsedProgram.class | Bin 0 -> 5297 bytes .../submissions/bin/generic/Simulator$1.class | Bin 0 -> 1465 bytes .../submissions/bin/generic/Simulator.class | Bin 0 -> 4358 bytes .../submissions/bin/generic/Statistics.class | Bin 0 -> 283 bytes .../submissions/bin/main/Main.class | Bin 0 -> 557 bytes .../supporting_files/submissions/build.xml | 44 ++ .../submissions/jars/assembler.jar | Bin 0 -> 36726 bytes .../supporting_files/submissions/src/1.asm | 9 + .../supporting_files/submissions/src/1.out | Bin 0 -> 20 bytes .../submissions/src/configuration/.gitignore | 1 + .../src/configuration/Configuration.java | 116 +++++ .../submissions/src/configuration/config.xml | 43 ++ ...java_74fc5dae77a3b9a48197eb148ed1e37a.prob | 1 + .../submissions/src/generic/.gitignore | 8 + .../submissions/src/generic/Instruction.java | 96 +++++ .../submissions/src/generic/Misc.java | 10 + .../submissions/src/generic/Operand.java | 41 ++ .../src/generic/ParsedProgram$1.class | Bin 0 -> 2007 bytes .../src/generic/ParsedProgram.java | 268 ++++++++++++ .../submissions/src/generic/Simulator$1.class | Bin 0 -> 1465 bytes .../submissions/src/generic/Simulator.java | 153 +++++++ .../submissions/src/generic/Statistics.java | 13 + .../submissions/src/main/.gitignore | 1 + .../submissions/src/main/Main.java | 19 + .../supporting_files/submissions/tmp.output | 398 ++++++++++++++++++ .../supporting_files/test_cases/1.asm | 9 + .../supporting_files/test_cases/1.out | Bin 0 -> 20 bytes .../supporting_files/test_cases/2.asm | 22 + .../supporting_files/test_cases/2.out | Bin 0 -> 68 bytes .../supporting_files/test_cases/3.asm | 24 ++ .../supporting_files/test_cases/3.out | Bin 0 -> 72 bytes .../supporting_files/test_cases/test.out | Bin 0 -> 72 bytes assignment-2/supporting_files/test_zip.py | 76 ++++ .../src/configuration/Configuration.java | 116 +++++ assignment-3/src/configuration/config.xml | 43 ++ assignment-3/src/generic/Instruction.java | 96 +++++ assignment-3/src/generic/Misc.java | 10 + assignment-3/src/generic/Operand.java | 41 ++ assignment-3/src/generic/Simulator.java | 57 +++ assignment-3/src/generic/Statistics.java | 39 ++ assignment-3/src/main/Main.java | 50 +++ assignment-3/src/processor/Clock.java | 15 + assignment-3/src/processor/Processor.java | 97 +++++ .../processor/memorysystem/MainMemory.java | 35 ++ .../processor/pipeline/EX_IF_LatchType.java | 10 + .../processor/pipeline/EX_MA_LatchType.java | 20 + .../src/processor/pipeline/Execute.java | 24 ++ .../pipeline/IF_EnableLatchType.java | 20 + .../processor/pipeline/IF_OF_LatchType.java | 29 ++ .../processor/pipeline/InstructionFetch.java | 34 ++ .../processor/pipeline/MA_RW_LatchType.java | 20 + .../src/processor/pipeline/MemoryAccess.java | 22 + .../processor/pipeline/OF_EX_LatchType.java | 20 + .../src/processor/pipeline/OperandFetch.java | 28 ++ .../src/processor/pipeline/RegisterFile.java | 52 +++ .../src/processor/pipeline/RegisterWrite.java | 31 ++ isa_specification-1.pdf | Bin 0 -> 144014 bytes 113 files changed, 3344 insertions(+) create mode 100644 .gitignore create mode 100644 assignment-1/assignment1-1.pdf create mode 100644 assignment-1/src/descending.asm create mode 100644 assignment-1/src/even-odd.asm create mode 100644 assignment-1/src/fibonacci.asm create mode 100644 assignment-1/src/palindrome.asm create mode 100644 assignment-1/src/prime.asm create mode 100644 assignment-2/supporting_files/bin/configuration/Configuration.class create mode 100644 assignment-2/supporting_files/bin/configuration/config.xml create mode 100644 assignment-2/supporting_files/bin/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob create mode 100644 assignment-2/supporting_files/bin/generic/Instruction$OperationType.class create mode 100644 assignment-2/supporting_files/bin/generic/Instruction.class create mode 100644 assignment-2/supporting_files/bin/generic/Misc.class create mode 100644 assignment-2/supporting_files/bin/generic/Operand$OperandType.class create mode 100644 assignment-2/supporting_files/bin/generic/Operand.class create mode 100644 assignment-2/supporting_files/bin/generic/ParsedProgram.class create mode 100644 assignment-2/supporting_files/bin/generic/Simulator.class create mode 100644 assignment-2/supporting_files/bin/generic/Statistics.class create mode 100644 assignment-2/supporting_files/bin/main/Main.class create mode 100644 assignment-2/supporting_files/build.xml create mode 100644 assignment-2/supporting_files/src/configuration/Configuration.class create mode 100644 assignment-2/supporting_files/src/configuration/Configuration.java create mode 100644 assignment-2/supporting_files/src/configuration/config.xml create mode 100644 assignment-2/supporting_files/src/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob create mode 100644 assignment-2/supporting_files/src/generic/Instruction$OperationType.class create mode 100644 assignment-2/supporting_files/src/generic/Instruction.class create mode 100644 assignment-2/supporting_files/src/generic/Instruction.java create mode 100644 assignment-2/supporting_files/src/generic/Misc.class create mode 100644 assignment-2/supporting_files/src/generic/Misc.java create mode 100644 assignment-2/supporting_files/src/generic/Operand$OperandType.class create mode 100644 assignment-2/supporting_files/src/generic/Operand.class create mode 100644 assignment-2/supporting_files/src/generic/Operand.java create mode 100644 assignment-2/supporting_files/src/generic/ParsedProgram$1.class create mode 100644 assignment-2/supporting_files/src/generic/ParsedProgram.class create mode 100644 assignment-2/supporting_files/src/generic/ParsedProgram.java create mode 100644 assignment-2/supporting_files/src/generic/Simulator$1.class create mode 100644 assignment-2/supporting_files/src/generic/Simulator.class create mode 100644 assignment-2/supporting_files/src/generic/Simulator.java create mode 100644 assignment-2/supporting_files/src/generic/Statistics.class create mode 100644 assignment-2/supporting_files/src/generic/Statistics.java create mode 100644 assignment-2/supporting_files/src/main/Main.class create mode 100644 assignment-2/supporting_files/src/main/Main.java create mode 100644 assignment-2/supporting_files/submissions/1.observedoutput create mode 100644 assignment-2/supporting_files/submissions/2.observedoutput create mode 100644 assignment-2/supporting_files/submissions/3.observedoutput create mode 100644 assignment-2/supporting_files/submissions/bin/1.asm create mode 100644 assignment-2/supporting_files/submissions/bin/1.out create mode 100644 assignment-2/supporting_files/submissions/bin/configuration/Configuration.class create mode 100644 assignment-2/supporting_files/submissions/bin/configuration/config.xml create mode 100644 assignment-2/supporting_files/submissions/bin/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob create mode 100644 assignment-2/supporting_files/submissions/bin/generic/Instruction$OperationType.class create mode 100644 assignment-2/supporting_files/submissions/bin/generic/Instruction.class create mode 100644 assignment-2/supporting_files/submissions/bin/generic/Misc.class create mode 100644 assignment-2/supporting_files/submissions/bin/generic/Operand$OperandType.class create mode 100644 assignment-2/supporting_files/submissions/bin/generic/Operand.class create mode 100644 assignment-2/supporting_files/submissions/bin/generic/ParsedProgram$1.class create mode 100644 assignment-2/supporting_files/submissions/bin/generic/ParsedProgram.class create mode 100644 assignment-2/supporting_files/submissions/bin/generic/Simulator$1.class create mode 100644 assignment-2/supporting_files/submissions/bin/generic/Simulator.class create mode 100644 assignment-2/supporting_files/submissions/bin/generic/Statistics.class create mode 100644 assignment-2/supporting_files/submissions/bin/main/Main.class create mode 100644 assignment-2/supporting_files/submissions/build.xml create mode 100644 assignment-2/supporting_files/submissions/jars/assembler.jar create mode 100644 assignment-2/supporting_files/submissions/src/1.asm create mode 100644 assignment-2/supporting_files/submissions/src/1.out create mode 100644 assignment-2/supporting_files/submissions/src/configuration/.gitignore create mode 100644 assignment-2/supporting_files/submissions/src/configuration/Configuration.java create mode 100644 assignment-2/supporting_files/submissions/src/configuration/config.xml create mode 100644 assignment-2/supporting_files/submissions/src/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob create mode 100644 assignment-2/supporting_files/submissions/src/generic/.gitignore create mode 100644 assignment-2/supporting_files/submissions/src/generic/Instruction.java create mode 100644 assignment-2/supporting_files/submissions/src/generic/Misc.java create mode 100644 assignment-2/supporting_files/submissions/src/generic/Operand.java create mode 100644 assignment-2/supporting_files/submissions/src/generic/ParsedProgram$1.class create mode 100644 assignment-2/supporting_files/submissions/src/generic/ParsedProgram.java create mode 100644 assignment-2/supporting_files/submissions/src/generic/Simulator$1.class create mode 100644 assignment-2/supporting_files/submissions/src/generic/Simulator.java create mode 100644 assignment-2/supporting_files/submissions/src/generic/Statistics.java create mode 100644 assignment-2/supporting_files/submissions/src/main/.gitignore create mode 100644 assignment-2/supporting_files/submissions/src/main/Main.java create mode 100644 assignment-2/supporting_files/submissions/tmp.output create mode 100755 assignment-2/supporting_files/test_cases/1.asm create mode 100755 assignment-2/supporting_files/test_cases/1.out create mode 100755 assignment-2/supporting_files/test_cases/2.asm create mode 100755 assignment-2/supporting_files/test_cases/2.out create mode 100755 assignment-2/supporting_files/test_cases/3.asm create mode 100755 assignment-2/supporting_files/test_cases/3.out create mode 100644 assignment-2/supporting_files/test_cases/test.out create mode 100644 assignment-2/supporting_files/test_zip.py create mode 100644 assignment-3/src/configuration/Configuration.java create mode 100644 assignment-3/src/configuration/config.xml create mode 100644 assignment-3/src/generic/Instruction.java create mode 100644 assignment-3/src/generic/Misc.java create mode 100644 assignment-3/src/generic/Operand.java create mode 100644 assignment-3/src/generic/Simulator.java create mode 100644 assignment-3/src/generic/Statistics.java create mode 100644 assignment-3/src/main/Main.java create mode 100644 assignment-3/src/processor/Clock.java create mode 100644 assignment-3/src/processor/Processor.java create mode 100644 assignment-3/src/processor/memorysystem/MainMemory.java create mode 100644 assignment-3/src/processor/pipeline/EX_IF_LatchType.java create mode 100644 assignment-3/src/processor/pipeline/EX_MA_LatchType.java create mode 100644 assignment-3/src/processor/pipeline/Execute.java create mode 100644 assignment-3/src/processor/pipeline/IF_EnableLatchType.java create mode 100644 assignment-3/src/processor/pipeline/IF_OF_LatchType.java create mode 100644 assignment-3/src/processor/pipeline/InstructionFetch.java create mode 100644 assignment-3/src/processor/pipeline/MA_RW_LatchType.java create mode 100644 assignment-3/src/processor/pipeline/MemoryAccess.java create mode 100644 assignment-3/src/processor/pipeline/OF_EX_LatchType.java create mode 100644 assignment-3/src/processor/pipeline/OperandFetch.java create mode 100644 assignment-3/src/processor/pipeline/RegisterFile.java create mode 100644 assignment-3/src/processor/pipeline/RegisterWrite.java create mode 100644 isa_specification-1.pdf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6f66c74 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.zip \ No newline at end of file diff --git a/assignment-1/assignment1-1.pdf b/assignment-1/assignment1-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8d64f818e936048c09efbd3d16dc4853a8010f21 GIT binary patch literal 91406 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 zda⁢4oPDX$M{WUQ}-h#mA$NSmK=9_?{e6EGhXZn_qH=xAL~QH%Bx2Byfpvu!#OF z(6y5c}*ts2Toq&s~DcWwbzCPB4l@RY?zm zkp|>>MB0^Q1kYkx3GlS%ezMfiK4MruNt$#z=h374|bg5%pdsLZk*0MF99RPM|%xIGg zXVDs^VWM5G5|~FX7nEa!583p3@0lkOJ|}MuHv3vOyzlk2zS7#Ns}wi2+v@(nS;|=B{;RucRPer z=ZonKRKy%(h9}jFx^N0`ntJJ&6nnrN+;}g2pLU-X5E&R_@LP@^5kplcX_c;nnDMsP zxk-f2zyU3m;8+sN>fsU7K_9Ofc^LD5{S^-tZdMQQ{63nRsLUl@CF|uOTngrT2nr@= zuw8JswP0}+Q=~UJS5wt(?DAaK>N^bd6f4(ZAsVH%MI>OtUj543c=P(AqGYyVnEK@L z>}s!;UT6;}Aqs|EWsi_q5>ba(3?jfE15D~b{T$sdz8kuPaoxhElZ^)pv7i%-`?GbH zs1>)AA~C8EX%dPcZw4%^P9*c`PG#? z4$3=YyI*N|VU@oqeTfIJ5UTTMqAdJjjhRJ`34xKe4#zo#LI+W$gkl&)8~vsvx$qOe z-j@OOfVwEJz0`s$k>*TvAy<>*+U8tH&$*O3QKoE(wosn902km3rqYtZ)5e(?x$An5 zfCAZUtFp>l=l7&D`SDs_j2fqW2de#F_+RYk~DjU95XuibuVZO&jCA6vJB#7Ed zez55(v3FNjDChM9A$dB8a?N#vA#EwM(6R97yv{{Aa5XWbQ_nV#nvwnbqs<=Uvy2qr zgy+#}IEz0=00FVaC#Gh%zv>}|YX?JSOJ*=vKQ#NA>x6BpRi3$^xB0Cf6n(hl*wd-Gnk0KgPPS zw=CK#wh?WiX)euVF`3I@vZ#~wy!-ks+7o(2Wu$d#>6rQza&VSQK6)%O_p~4p zurVmiqhOO+s_^NG$(#AQ6T+w9&P$vnusbzkt6=FUteXb}SpF*eLcCCxcqw;{40ZVH zYOJLi3d8NP(`HQn`uDl%F%;aVp*eAPNZrUj+&$OGfE6!yl^Q2y_O^q!etxB?n$Lv2 z3gJgyBoOw_4{xq21pR8$v0SjpC@%D)eCg_LAc^+|P>4zHLIr}X$D$4de+Z#d)_Q+J zME{H(BFIAqA>595cIpw}D0QJARt+~FUDS5%j#-G*Qu0nFU_ok-^X!zCbxPjz7bXpn zj7#sedWw4g#eKSC6Vb-v55f$#+Mj8Z% z6GuH7z9z4eiaI(@ubsO-qhsGcnTmY_EO#4lzsgW_asjJXJ4?fWmiC^dgObN^D-RpX zFe|g$iM)QQY+^pz5}jecJXXGuEBesTEwBh{rIszLD5EUc@a3D=FwFTmWL858KoJ8M zgaAZ|e{-8ZyZLo7g$TpXD@E(+raC>0NURUyw75Qx6#U@Eb$C5}cE<&=_^MLTkudcj*A@Bs~p!!DAdQD`F5MXO>%DIy6s z=MP$Y;wq)NTrpao3c@x|S5N13) zg-05^u-~Xf+*m!mXHjYBj&CTg-={$SLUDVg>%sy?*4_glWdhzIAW|A{)~!z(1t*-F z5nl@=0B6iP<~zuF%*Rb5Uq4`qUx?eHqvg_3v`Uw2iHcAnVwQaDD~a#q_E}X|=4b#( zmc01E#)Mc)He``c!O$L*tht%Uc%e6Z-5CCjXX$rXfLo2rnOPgy=^72R*qOq+!t7j>d^>;X=qM1f&+-6F<&<_9A>gWe#R zXjkYyFRw|iEgud|?YChE*9<8;in3G%4%N>Y@)BWiQpjB+}+!@=x#9kW2)p7UTB z>UE&62_l!Z_FIEXTU#5UCErMk2lHBs)-4sA+d9Q6a!0GJTE{#fZwUDED> z$973bcFrXaB)nGv@c}ue;XNMvLdj8P@%SSRjN34S9=~qzj7H1@kV=wMf&1;QqtOjq z#g%XRKEqd`z$iLsHu$f-ph39)EHYGjeTUVG@~I77mywR#U|)K-$?Z~lv}4+3_LwN*bvdpH>I$k6 ze@7q!xTJ#p)CE^9?zQF{fR}_W_XELve7^Q~O4Lgg;D3OH;OCf5sWT%<072V?FWKto zsFe#c0Rbxwp%#=<+VHZ_ehw>g^Wchnp3~ZSh|K)_O*|5Mkjky+aMpr!C-%%q3*4&C zN8IFljkId6_6p4{ydFo;$FIa25Tq15d9r#bFhGCRx+0JUV&6PAyVP~CnF2IN+Rl+w zry|uVjD_(!5odVz?ChE_uc$mXlYbm`1nAX+6|WP=oj3OTu13A2h99fR%q}Jc;)yLn z@{;=Nif6@+FpX5+5DrKA*;{!vx~Ka`=63($ZdZ4eB7B_K(7RfH=83hhCxO&_zHLAZ zXaSb5gXAs0gt-V)aw(01hp%=YJtTw0G)u@Jd<0mA!%Uu2zdwuAO+zx5-s*gT-1Kx| zgujPZE<^n0EN>zQ#=XAvSBO2FnC%%bQx!To+>b1OT~Fnn&V$aICTxzGm#>BYM8b8M zrALaXW(UHj%JADeJZUm0E*_$)chofj4S%0`w zRA$dQ%lUjyFf1Ziv&k+#)?O6S`}*R3Wz#=h1;%*0H!r5j@m zYm|dNmem-6sB=qlU~9Rzuq6MZe#UFFshI+#tv%&QUZ4<(i^|MzF@qWy*iV1~Cyke0 z%I5lI?v2P5_g}{KNRDp+;*7XG0n@uMfIzLSFQuo(Twp_>)_r2!T+eyrnPSIA-W^~} z*F^di#Wm(+*{4NRWxo{Y`#`YyW8$+M%YuyCME425XMFlv$%^SGa36K%1;{FOkt!+4 zLJ7gTcU>_4VMo~8w0I)3WB7fN+^5VuQ(dV>f_PQDLYHfx*TRS)tHxE1S;}{0OLEa; z-%j@9_-;PGYUiZ(Nk%{6yPVYgV%S6g{&dz>O$~D|(V^HZ%m{kQy{RuL#>Q4UpQL8U zCs39oREKxuiphXUlAQPw;jS`7&wbR1_$=H#`h!h0un4wx)enwW9 z#eiI;NAIxzDz^ zjni!xxvUvMXSJL~Lg2pOsHQ2>r5CaZzo;4P!mf*8Qmb>=l$a791W9rB_Iw`HwR6z#cX!1&>M%>)dLs&D861!9?)_R8&>ejN4g zMZxirsF<5kI|*f4gu+l8yy7h%>B?4ngyW1rkZ0YpMK{VQ?@LK6AZmY^12`;c3>Hm84VweCw6r&*zjl1NFTe-ABcpDU=z*dHZM6z7^Ix1mdu? zf65{k1>1QQc9^H}L)u2X2xu1`L?K)9K=FpNTI}`c4V)Ww2f@tsB#S()FLuXNw_}O{w*;ziKGp7`mWu4H&Z-Y++<;Bo~R5;(|B+JXY zpNSYqY$mX!l$^^sA0jtbr^2oOC&7^1b1ZA};Dba(Pk7KD4BA5VU#zHi3?B-FWc-V% z5Hhv%s$(oYsr3H1sM_@y5N)S_Yb+%Ln#a9J)c}0ApX*ljk@KdpjUP4c(5z#5vJlAZ z{R|2+CD-N*asW_sZ3qi!GM%hIdlYlnM6D+z%+5^`&$T5iTht+DyNPjQ%~#5nzq&qrLp z%Z4+R&w1Ph$SKnHgxotJiVi$n?U^?=n_Rl=O_K$@FQ43VDTkXVp*6eKGRFhwW(Qf6 zvgJ3sg;@|>H{UWeo40?5>#JkZUC^BM2K;f z-U|ay5bcVo3bKh;_HReC4`0?gBOWx55iJd-90U(;wI6`u!a2FYTA@7ix&I4;N$5UH zX&}{I4KOK40LjRGlq{oMXzLc%RvVS2z~|0dJN2o4vXH*X@mlzp_8pl*8+KG=NG#%A zB`2XZbI-J=mF8%F9bzVMvL~AOII<$}Xh}!;vLMb5>L?=A^aHD%Mg3;SVR9)~_%m-A zXejaMwxh>aM&Cl`H4?tUB7JDI9_@A}XW{xp2bW1{tgLVfX1+yf5`1ql!9klad`&q4XO8zb2LyrvwYEhiMo6yS*M6Sw76pG(0yS z0-uz?Eq@`e&i!OLu>(h%q{okQl}kM?4NsI_0V$tqZa0eIv0<5Sq8FBkO1YN|PHjVx zS(5L>-P)N=@;y1_+H%&!5nk-%hRZC-`9{6yUX#T@wQJAI=d=>cX>OzJ2*o<&VzzYa zWG`c%xn$=%su05u`RMVw0J$<(*Kjh7$Ikmsn>)_><})RAu4`1wq_{|`N$*~YhEd(b z$IHZ6s7qtt=YoW}J%xP2j4?Rj+#`gp|072`+N?bq!#pr!fUcx5GeTFscc4z8WaA@H zikvV_=4dNmCHfZWPj~$xm|v_EU{&n}m>yh$tSWEaxRMD|j`ur)Z-98IL)Sxp^2lb_0I!BPH9QSXYrVRB|{V{NY(2sHQ+XFKRr-mX*y4RN_EF$N%QMsra;G8y)r%= zpbNLW;Jgp1+lIKx0Er^jRqTAe2G_qv$66K~Spd>^kJ4eE2NQulP7!4SbRXMhJBFyk zrKa}5B02NxyYC< zK#ktGN~M#3XgpIB{)J14$H6enkSsqB2S-`}8|qSY|HIZfLedl%9%1b2t@n^^!;S%OfGa3ol_c)%FlUL7^JE$d^()N`;rBMW_GJFpe=F*_a& zPJq+OW;)GLAu)EMe;|z$KP{B?EBMNo;AHVII_PxMeaM>hj_>a<+xCZ|{B4n4%m<_c ziIZzf1;}c8R`=0B5Gq>=*@!vhB)22;2qT14o^oI1FnEwsC3A(j6?Jupgx4wC7JIft>iMZ@+-I~+-=u@=CmS=R$MN`OG>y<0F?aB8&NIg`vGZmaS&x1_Ir22;m z&@*QiF#CeJcAXVAt@@FuRQLtRls;pfO6NJ6N{3xTfVW?Puql%x+OH@NRGn#>aL&OF z?cj*iO@%ZBj$3PS^>obk`BW>}h6gr)o3j&t@rJ)OEyS;WyIfeo>ulzWZXonuqNet! zIFw-ch_a^UA`u2mbPvar;Cr_v;YMPcv>4)Ea?Ki0O7dIiG_+_OyXb=1YfEs8w@YUZ zHTOzcW(#1bsJeS1J-V(C5Rhq|R{FL%LB@t_Ke7~h0@sSL&CHRbg>Otb175cU`&(^|)`+8(q64ah8lFSc-h&a=bZxhCgCp4gx8#B!3(AZku zLL4?Eujs)=A%R|{szX#^WRCwb&%xDD@QQ}Y0JKfQHxgxkk*OT1-AQ$q&Lko{ZEK7S zL|_eH7Y3TRK38G_3B3B!*k;_**;|)lmZcuPTJ!EtQ(H_>?i&?{O+mn>Z9wba99zW% zr`j{-x0%znBNUmAu=&KvptmGLj(Hz+7I7pJ3l`Qd2rPuy@N3ifRoxv|y|pjF6DI{; z>Rv}MT%$ZbT|EE1@+qw`JYgnb23hf=YPA#sZFqbONBj>7XWWSgl7ksl3v@gp=UDE2 zIy9`po?#w#_=89*mQ8Z)-B3Mnbg%UQl3D}r7 zUz(Uoj_-&9Tu0Y6c9=OW(p0{@L>C57KK$`4q{iwe)Rzi4{2N=+I%4Fpv(?3eh-2sL z_yhwl=u(yDrbWJly_lUk2u?nE?#dIB*~3UgHQ?DIQ-9}bI^;K)P4Vxvf;Z`}tW}eb zDoi5<9c7(D`5eFF3v^p(OFgoH&k7t4Y-j4+nwL`nP6Id{o5Co*FiV{hQBsL?3lp8J zZFN=oSGyYFT3}L#hE?0+PkFio5XETPPVo6DuozM5gMpv>Au)iu>{Ed~*Bs@o0L!hyi-6~;ysswiLZ&=sI@|a#uI(Ap-iBARB#z!S^7vaoF4fy*g{IdP~6eO+N}g*3s9<41DXa zzA-Cm=HK15$!t7eKSp0uK$mA_5n~5EE-!Q5IgY{LxY3!_J%H*PREiSXdjIuK$H86I zpU#3tJ>;4Bdde$678xrgTb=BFaKKD`?I&~@II%D65JdKNLV+pu+lM0JY1wyyKB|Id zY-K4=e;m2~i7@u7VNxPjtxefgfxm#v(%#pDwb%Ba2*N}L5dlQN6>P_oJxyf$zjung zU44VqG=nBYc}WKTp@&gBQe)rKBJ7;@J441`-cG!K&7jeh5an)}%)wR5zvf*4uYf3V zTX)=%`#=?&2Z^|yT`9YSehD&pVW|h32iO>dYnzXnRl@fUI*B6gD7Wv#HRxYSd_Kr) zqr^t(!x^%&#oGFw4=t=CzJvy`NjYg)Wyz67kl(i{=OIhix%TbrPb+dCw3(2)8#I5m ziV>`*a&%sws^9YQ7 z?+&XVW@$4bZq%-KAp(s~rZ2M2GB98&G${>#!b3)HNor5Di-=pOQ9-Df?kaU?!*x`s zY$*;3gr_AgqKg?235gWu8UJu!%c|?9vlNbkxds91=hCzO(pB8yCUc+Uku*Wvi88e9 zk<&V((Cg)gFypO_WDmvf1!>6$Iu$&G#Y$^(M7`O9jepws^2QrV#yDN zWI&t_rJ@<;(zv+a)D~b~lvf*+5E>x|EUHmhY3OZ}^=e-$4SIsIUKMNsrMz&jdR7QZ z?^YKbO}}EN4B|uFG4s|>K>YOw8PA3{9>@Bnh{k(imnX7fC+{V9mviVYti$16EXqLF zqA{7%xtf|E!{EC3w;eBzqet?p#y1%Hgox6fp270>UIJjhiHLDj_V%T0DyZWFIhu(( ziqAvT_Sy=S&DV^uOj^OJP;B+TAgT)v?9@cvlcl{~dudGtA`Q z`zW@7K(Gua0J8O^%U3VTdNpNHIWK~pR?ELB z>(GEWp^o{_4|VHFBQ%tTg47z#+Ng+ai$_1i#>1?|q_%0X2jv2SwCA&@-`NAEF){s4e!__(1(s{|;ht7sodP*Pf zGNt<~tv=!~xrnchb=aO`hwc>twPuzwvmyzXxxSmSYx|y3wmkk+j>7$)eZSouu~ zY8_8;YGG@HfuA|4@R^X;Zp&gOM3C|_u%u;34*J^mG=W!(r#`^sDc!N*NQ*~u>fxDS z(}ig&={6|Vr;Y6NI_w$5(1Z5Y+Z$B2aa`d#I-SJLYSfEL*xgKi&_+m>DJ0~MJ$Tia zT3jB8-?Kz-#w?r@7kUy1QY0KTwr>G35ESyJE3&>ZlI7g_2b&~43gTG~wASNrdelc|IA7C3JfIlhGRXwnFRFR$5mNC(-rYQgQR?M)iS#84>XvZoeknxBB2YO; z8i(}M)uY}rWK2`*EF6$!=$>H7O%+}Ltnzm?%J)O`J3l&T7>wxSa#{AOC#Z!h841lK zIQgj8L9W!m#~unE8sHxowAUv@PLSLc)9Ynz6LzfJJ{nyGCojPbLx!aD7`zI@-D@l5 zJ59Z{_&fL2h5z1-#R>{vbx%EKNeLjX$xa;>&u~k17D}@6wy(BVhV#tD!`<6U#j3G# zu44+|$Ic-ypjx;tv2&OUgxkvRr_3+Rb7D+02g!*gyyxjRs3hvHP$BW~q&gC{Kzdvb zpLKXRzKY|G*3u(%;|qO&X=U1Vn3Jja=(-@6iw3<5e3%6k&$w< zh7GG}gz`@7H-!eyGxzSE-wc7l7T=c-2ZAbaXzx||0fdUnmh_AxDHsxBD@D7?h-Kkd za9p0vV^9r_e?vL#Txf(V&z~{Jh;z5W&gjF<^Y-Xh~q}scG%p!!VPZo!i**ZhuYyW z%0`Y%*P;Nry#~T+!hoBJssR&bQ5it(x{U8k7|T`~Q?mtxZdA+$fxC?o1}BW`HV_juu09{*<23vZ)i+*E+W%*P0zzWa}B_f@OE6h314XL`FsXvaFUwMCxY%uc<%CeJK2w<5_G) zmRll$qm8C5XG#&aICTX!J)veHsN7<+>ew$u;kx6!sb!Q3TRE$wK>r(UIA zDDCQkO5Yf-YMP;g62_RyMJ zs}DV=B+1U90KZk^gC~n;J&Zy2iwf=ZP^ajB!)=KP%=_NA2Jg^V&~7!`CmUj;##+mw z^&q(UERuXE>3#|la|M_|%I-!$wS@0cU$k0LxW@152HyH=u>BhEV7eo1*<=;}mvFp< z9+uVdnvLy8^y}K)dnh7d{MeMB_4&Ne1K>bWcI6QpfOBgLpdhX;71#QBu5#7#+NL#A}Til*bCF~w~#nnu_fc|x~h0{ z5`e|ABr~ir4W>f!NMqa}g<-hxRv<9hLM$4(!K-v6EF5m-$>hQno) zp$*aa&n&qVj5LMz_^6CTOBEK3tGpGt=Fu|1r__L!$&M;rI{^N=05>(itZ+@Z?OeUm z0Yu7(f%S3@3#xEl0a zsk_#yw6EjQEaR$hPXV0^#c=WyQ%=4U{sz)zk`X-}{KolDN>_?W$lM-4B|(d#hNb&t zoa)y1bIFN(nupx$`846R*nhr{DO>t#EWN=k_I|p3U`|Ru0byi3ve4`i^lYxC{qrqH zyD|EOB&?=!z5snSE#77F@7D}(I6$+Nf%J22tGB*(SSHR8YiY8kjh>Nn?q7 z-KI}2mO@qN8#S{3O0TWOco}2XGS95D`SZ$I>!Rep$2F%m(W>j!ynLLz<}o9eI@H>* zpd@Z+4v0U$rEoRktVpA+@9}po*VG@2|E@KLL<*I}jXa{5>y;Gr8@!?}Yr5D=a`N0S ziVZeZd2Q$09kJ;1g(ODqU;k3v0>Wyrh;C842QpQw$a9-zTc6-eJ&=P^uSVWf3z3E6 z+V^yLt{;M%H|7>Ot+v3P#wyp3Ou51vK1I0j~|eCWNft!xq5`| zV|UJsII6W)2OZzYjzk=i*xI_%AL%U8GzSBLi8y4tqgyH4={E@Gk*f4^DoWVKzv8PP zlI_0xJM1#+53d}VS?B>2k(8sYTYRMfEb=;xz}6ZhEWTu_%Hhwf@JeD+G+j59zo@Tv zo|+22xG5~@=(ze)kaU|hIVHg5X7Jk~K@Uc(-@z&V&6iYDk{DY~(qSG8eL2KUSr5Rr zOQ{GfD=clFU3=@QNg}sp>dGPkEj7im2msk&R{X;*>xp5B(b*n&?cf%zve$47G@8gQr=vi(>qcW6evuNCz;yv(`-Ni+o ztw4@QKaIlpyd5uT;+wYpt*Vd0{j2MINt@XODN2DL$SWj47a#_85E=pjlukrPf(V;j zT1&ixgp7-y&ApfT-(IZort8+9-rfUI$ba+HoCkGyA52Kc$gC=Bos$A4NWV&C`m*eu zOV>zjeL)UpO5SAc!p9JM3hf|IQ6VIZZ{GCsJ?_)_%#BettYVplHb#+%G{xX!XU_fj zelC9LwXxv%vEmKp0wswX_&I)J7&ux?{glr;1F)I zJZSUtt;^DDWn+V{R|VQWPEpxy(F>_mXqsbqwZzVkap-xe6c8c?=HFFD&6i8Vz?+?d zeg8p{y>f(pgF~(=-9~j|Q)ju3k-;+0Y8J;4`SO&~&X>Zd8luXDH5bmA+sOfq1o79s zFb6cNH~+2Km#V3|%~!^I+;AIO8)Q^!_Rb3;`#=&myp0 z3m&`syw*DyqdOd1g(i#gv(3WpdVa-gyHMI?+z0T8ku}^$f|Jv19`cw!ROmu!^d`O2 zZM8Tv{(F1?pjs1qt3A|?PoGQ;4k8JJV$?C+4}PBUF`H>K5i!Prh2)6Z*2!)I%?SR| z+t(1}^nyR2j@doB+=vO#E2&JFx5`}K#B1sIg0;vyrkjIkG#%5?h@~{W!z{4m`w;y^ z5Im*a{E9|X=0Zsdl_Y6#)|6KhlMa)>!uAShp(Lj7BFP@X{p)4^qhS!`REgGp@&Pm)?3XXsw2y28Hm&l zQh@YQyLPpwN6~_@dYfQ#qBdS|#PvCoufdg$Fwu1ZlSM-5sE^mm1pbpHlf#D7@|tMk0%s5tjpL7on$_be-wX`m_9HpH%Q+ao}12 zEs$#-AsCm_WNT!LFHL_O8d35ad^FtKDC)?dyJZ{x{L~Azu~)^HwOq2z-a8s}%ImNY zNs40<#mxG5MjK_j$)*GbFB#x?xe=i1jw9z7wC?`_oc%{EBd{~HgyP}(KcpEW0V5j= z^Z)Ib2sl|7|9`$20}DF~!T&BOdQl5&XA?&PdQocwXA@x)BRgXgC_X+YCuc_!0~;v! z&6qY&`RofcTBre?ASrN2*`k4+ogi*lmcvP-T{#$FRyt3*w|!M+1TKeH8o}G zqj1mZ8L4ix;**#$pbq}h0)mmpmrpdvEG{3d%RoW^j&*JTuCoDN*}t!OzOAhR;MmxD z|1gAd-T@O!ZS|r3{~Ocrpa40G79|C6d2;$ySLx;~exD%n+06jzpB^3<{tn;}n!q^& zW@HEfNR`m7;(we(os_u!!Ip7g93Q^x5S{~9>FD6T1@gPPxT`99n5ma1B+~;h_u*U{ zz{-QN1!Zjsp!@Ga0Vhje^ZB`rL`p!-HG^{glC1=2b+%=41pLhcaMy7_9DHBxL)87V z0p=zEu^b}-P{9$7<%~x7VbcNqa$x;)Qhx62{XG8QKtjI{tSxQfTHF{y+yeea$$eVw^0aaOTid?Z13w{vuASp;pk?o zXZ5@GXo38~Joro~!$Uxpckw_R97KO~@<`SpjeotbbNl)2R?&c5!rXsAX$BCWr}kvj z+qnQ*2=v9&;b-4&j)7Z2c>nS}IkP$g0O(|E3GnOusDH5w8k>M=`cLTqnB!3~0zc)R%^1fY z<-WZ?WcA_w`L>wf)&Z^i`2F}X`Ie@DpcVJ-?z#D>r-hXLcKaziy>bLaXzbV%~d5vB5A;eKHVSam50BEkQt^bO=a%r5l&Snn2r^oq~^Unr8?vfP|oXSV; zAdmKaff-yJnO=lVyvUHi+1dM}emqcU1@QdrF#wE11axwB0OoE!0B8zi%lqt}Vc7vF zUbUXd4*>y4e?@uh00c(*5cis9pYeyG0WyDr-T?%j`VhaEECfCfAPm>!2pDQLGy_J{e{lafbr3<`c-fO2!#0!oJq_61LV7e*z+>w?FyiWkU0TF$ub zzKuFuB6H7_KOKSe7=3^nuJ9gH7}I1H?)Bi~^z4DH53&yWCY8;&I-iUv&x~}r-laa2 z-%@H|`SN!az5ZNbgEoI9N~D_CPz3o8T5RGpMPm|C38SMq8jEft!&hHKO;K)FH;_wy zaF8kIUv(`;MMu&z)hkYtQ(TU!T{t|;fSRi`}1-c1aWC5(=j z(asFFF94;#1_Z7tG%aRIX1N*JK}RMV>sia&&B?f5PBfEc{zZD0XcROhc%K-VT#cs@ zMoGOR2NB#3R(%6foT9qYdjIJ19^Zrg8J%6x-emkh*ZTKJiN?uXO{B8c&TBeyzQw^| z1U&?1Bz8BEcV^o`zHKjllJ)Y8E7b3XZT}ln8*HwGNh$8SOut)u{mN|KDh%{xv{Idu z&wL@ws&0g{)Fevm?HDO&YbQ-oItxNXHKxeune#G+BePlymu!EmGni~-!qrjcFO)>! zX-IpR)4wOq+AJR>qP${33lbc>dU&S-C1cl5Y5ery(r{|d;=`!D?4|}Vvs3wKIZ?V> zC=5#$m9{+e=#rz0QK>FBDPl6lWA<5kW=70U&}e%?25%+;2yGoHH%b<@T`Ftj*Sdm6 z;C~aDdU31LiBw(5t1Fl_N`UPJEJGB!i-e_|I#4yeo;`%|T)=}uI_xGg{;UHdwyh7| zMpF+4XL!GN__}rQ5y6fpnrTpi6@xjESPc*5YhHyYurDzE%X90Yu5$S72bC%1?VRu3A`R22;SNEN(%D^f5RpnfD;MEb?@PxOR#m<48P&9j6H;QBu zVXuPmkqky&p{sn_9&se1<9)G#U|LV}4Z--_kRA?+u2)S4$lof|$boG3U~B_|RHUsv zF`OL4>aA-V_Ktdngn2T=cI5d$mbDn0f=R86L2n;Pm_>9f0p-oK%@lbHM~u=s^OLV~ zL+hNI2h19Kq2=K7cKeRH=uORdYD(sps%N!-Kc|k&z6mC)}fB{0~8# zY+_Ug=D~)$S(usGgN73qCYdBIo^h<0;w8@-xIvOi<5~0up2T=VM506`cwv5)Ijog zb^(&CmC&GKWLgW>KiRAqE0-oY)6XXb@k2aG+FbV&m0|I4j$Ez=;1-uBC?dGi-!>W0 zqn7z7JIS*&=v~c3#HxxC=7ebCuxMUra@?d!yjPnHR9TcSdUhg@F@LV0%wc*D&6S{$ zfZF%-+chp6K(*e@AUk4eKp8<%wbjJ^pQX%LyL`FiOdyd@FOO>*6lN_$M;jNVrWse=a z7%z5N*=`%?p3eN*2SqEb4xX=j{FDfkDt?Uutk|+PH~Uq=Huf?QZmY{ZZK+dQZ$1*y87n|kGRK;+-S!|TTn>sV^kFTbo#r?rx@D$&* zv(aXRPXV*0YOxpzoY`RAz&l5sS?ib9MmpJ8r{iV_D|B;3N~=^mPz9(M(HvUQ@CJs+ ziG~yg#_}?{^K(r|ja3HOE9wE9T^CMvAH~>m2zF(qyf+i?0EPg?L-zi6>r1Ey-ZH+F zlY5xWLO!I{DAn+4-bz_~GNZLy$XqazbLF{N6mO$+%HacPp!*Cz#&76TL*4>!s8=q~ zfq<{kl%(tciV-j|{`&4zHj~}RSxrL9=7p<=-2^AmAFp%Yo7lLIs;>F_E>&VXaH+FN z!kVf3Qpt9!7Aa+CON9Mythq3p}QY zIogt}mqy|!QW41bI0p%PwSsN^2N^EWeoSv%jo6Lj4M&THLHmA{s^yGc?&?obuFvYd ziiVw5C(5&84ZLL9|N3gaS2YQ3Z0HNZqjVdxz9}5~c$hHhqgv{tBjdwpr|33LZ`9S7 zj8VmJV>gWI|7DETSzXvfj=@)_gbuIAZ}|I`p_)`nVwcl)tE=lM*-)L32pH>2-;3tV zi1~$(`%r~V-(7_Y8pUvz*K=P?=Qs&5d;PNt`UeK@J84(0XPc%t@*u=cVNu|{K>~84 z3E)ID6ML*gB{zWmU!{aLgKJQ}EW1Ze&NMT`(4=C640+4c1$5mU6y*DAY;X|LTQ7U+ z2U#H0%v<8iaPnsxTysOqA)Uvg9a7KOE!TdI*62DNB7k;>&n}6?yMN*-PD)bZBPJ89 zl{+RjX66zIO!bOC$$F{ke^W^ZX0&XClDNd4>EXUvE9{#O!6o9A_e%YR^q#>x=ZYWP zBHhUfzuad+Ppd|h!#TzUcyh{i7(L{uhNUm`LtD{E`P(c;m(m7mc_{9^CVW>hhI}n3 z+tX*bzrdKii{Zj<(P0CC5=~AsByH})S;%5jH@*l}w=w0RU`Em+WgHZXbS^yeck$js z8Edt0^~jgVcN8+djTxZ80w^_|{X4#g*cnu0WR6;kP%5bXusqsi(!CzSPsTeJ?g6|u z5|3yLFbSxh-0;J1p5{8Sqk}j}xpz zQN(g5x);Ethqc!BD#GTvCI22Q`&x&%JsJ6HjWW^`C<}igF|O!Sb$#X0Htw+Vnb8T^L#vkZ9ERE%-PTYrJj|F2kyXK4 z4U-A;d7wNs`oJTsg|9QFIT|j2j30?ksGo&G7sVTy)gt9=%jMk zB;tzHDfkfr^W@hz%@M|Uqv*p39w}YqeB`*P>IE`xe2t!$qV>U>%ajz3C*1!1K)M>v z@!=#iS4v9)8f&Yh(<*?SPa1wm!XJr|_jZ2*f@c<>|16|pcuAb4vLC?EyF$|_T-A?9M66Z^A~2(HEHG8e{9!ujV2B#jF{!?k>H zO5ODZ=e|zPYj96GK+w~O@B>l(MNXei@mk@uG}oCIq^&Yw(!2d75!t}9i_4zvmW9t7 zvO4>vW#njjyYq}xth|qqH3(kKrhgLdtFIyY!?BdHzy1y6d|cI3qfz$>NmSBiUuTS> z!0e|-wXts}>DIatP#b_KI__HgU11KSAXMDyptFI_>#rNh)3_?6DPONfX=`*h*aaFR zw&XIuDBVRdIOttqgKr(rgF<%_%X)Upj#aSS9$xJ+1`(U2|Lzq9uDi z6JC9)w;{bxjJ#HprK?AMamN( z@BN!)D+l4ZuXp4G@Y~)9pYci*oX%vI4g>Hl=~flFMYI_Y7QcBn@T=`o`x}XrNSg5e zm975fME^6M_E{;}m#wCllF03-nvd6)2%)&2sFc)xq3{bV_oS+kE=a@H?WaDk8WEC7 z7H~=x5HHg3CN)5?PeP~}S(=q&HnHFe{dHcKOAcxF17e!9mGIGHb#PW~xc)N zNt68Ca^W1Yt1gM3B66gUk$}kw1N~fghcrBir7)JF-X~WdmLyh&kaxpv(r5Q5a-wjd zq{4D`U)s>o20f@AH>8JH&ZGh9e&@*Bz;uer$TnCeWBdsG4dpqG`)4DoJggPpl=MTx z4KBEWYrdDPno&Tj&sT2Fbn^W9F;iltGB=kGvUGe(yj|n8-U#BXP;nf$x)x*%H?miz z1QlqViZwoh4dhni8Y8uwktVU}fXS)pUJ#iNV^X2alD)BUPJVB6K4;o0kbbH`4Z+Z6 zGZj(@)#RO3rpFs?9)ppOh-3pJVVj#o!jK;@4k$i@GR`M6=>a@7y*h$&nL8M7rZz)I zmFG4q*%ELwGprU&u8vC(k#D2$H&st#v7cRP#4#&W<}BuVn=nR`7xCU}SUqm?S&1i~ zj$hUnWd;Bqrurj73&o@IQ(KMW`v#Rxqx@$AEti68pVp>DRR zG5}P9<=-Z)cg$27cNx@RKb&XcCjCj@hw|>*5Jt0mWp{t!&ou?J-69frsrB;rZSp(zhJ3b)R%0$du(faiTm0}h| z`l}boWh+;wgtz63;5wqzkq`vxIeag6bQsA0z9M{pBO1FCwy`G0Mr479ze#$ylP+2E zpUl*YE%jnpl*+9Xx^1ZE#s;anSkOUfU988UQ~-uDbi7=+Mi`Q+(4;9H5NBW}1$7+< z;BmSIH`1}swl2;v?f!tBMY+|j^QqQl-PC-JXL5l?Z_f) z>6X<-(6^*$^KG+#q)PEzry2P%Dn*vrEL((t7L8I_!a1k z*SW`D`^DUWGnD;i!x+=@b%JNPrbtJK1ViIW8!?!G%pME4uju#PdsY%TM{oZQ7CNkp z3N+bXy39!B^8x8u$~+a1fS(v{QOeYXV$qF{F0yRCa7n6KlNP?1N)j9dEwXFwV)S56 zM5U5+CKOk@$&Zsu{|-Vx)h$>CR;qNz(+Odz3Ucw_t(|!|SlNJfWjOjNmINH2>aSuIZ7x%2rTFYD&&)h-5P!yjJ9P zSHi`rH#cRJV;9#W)Lp-vQ543=n~4sRS={YGS7M`S_9mk8I;Y})u@No!e8e=u=2q!n zFb=SuiCS*H2-yZ2`no=lmJEK0Eg!vw6+M)g-(^9D268_QY-2o}MGnzPB?+JgK49r+ zrFYL8O`==L~|;ko|u|EiMp1lAESK)>4p4o({~sF0`+DAlBJOoq0lxC!LX&9H1+R&^^uXf4|M=cm zT)BDgxP5X-6&Qc2`6q#yqNu%r!yY$;M*X4^7D=kiB97GoE*AfbVr-ujT4QfL-mL-S zO-}vh53pi=q70QrH$iUFg&Z>6qL7qOpZ*s-ycwZ%qrA*O^=~}wxfoNkeLgKmkO>ia zbWxROtF`6DAeIQ0VK~&}jNqE6+~~%V*x}2w5Q!{kk$0@udLw++Tjwyhd`#N6*`vmm z@B2S*5aaP`Mz(o$(+884pI@zst2+0bS*!^BL+{ucwkx<7*u@zGBh#3b6pH5~L3BtC zs0>qPsaMRA_vm^y%7#B^Bcfkybhu4jxI0;NxT48}iel!~2(jp3kfaq8Oe+^ z71jD;gn5HvyNb)$1Ul5igRrEev|*Btsg5eB1h@Baqgb4?Z!ts*Oz9bVXx3!Xy!dbG z&NE<6q``b)PinH18TdbB0e}+*xLt*_wdH%$J)#AKccDutvFFleJG~8$P^v=rx?l?( z;GdxFCS&=@SK&8~nA*k0XfL~B8eh!^{;2k5Qyir9`oCyMOUzIUr5^)8{$3}A9NxUU6>o6t4;VzUqjDGWf=Oo?s~ zfUH8k0l#%x)nHBW9k+Q*=3{13O$;0^6?=rC-7{C&$F0P!2f!-~K|KBkUs9XDRECl9 z9JrTRVF+%79 zvPz)(q)rpMAwAPSjgiId_Ud1Nk&uye4AGGy{}ugbz@C;KvxbOhaw#$N9V?f}4WW@4 z#tU_LvH{&(dKtL1IX-2XfDYa)w>gBZ(9C6Wk(yyYlgh@eS%rbg@%XtZPu=mto@7}<{KDY#&2FuSi)I)A=h9!PBBZW;xb z|7eJ5230Ilv^S28vR~CP%uLBB-~Ft;R(P3AYNfx{1T_X>k>Xze5ZPCE_%;veJ;;(0 zb|g*htE}ihRZPg8Z!r5Pe8Gqv!$|Gd{aoLu&i^IANs%FeYo~m%<2M_gtlhKUdp+gz zwa#p_XYzB>jjB}5_|p*?>r-Z~mY^;$px z!|fsVDyIqyifY^SCtoSi4seK~4hqK?!KT>|?x%qt%6FvJ&}qpX zJVl*35!li-YVk7Vy1oNOp&ui+PWR@;^-At;<4TJhxgx0wUHD!k>gXtpC$x-=#E^Xu z^siI6e*tjnveh?b!-U13JWBjSK8i0~SVrjZ?QF?;U81vnh0bEmWZBfSe``qmK#N%` zlB(B|(HcejKjOmxuD%Ak#4RP(qnbSN_@gMN67T~N;i9$45MBx`EoFDuw_-CCVboA zKF~2{#Ck+}fu`a#n}NUH$lu=8;RhbJ2$3}RfJTchS1{4$FqC}U0F<=z7^>#3nH)qPdvtCW@!sk%{LwD@GYFl@x3G9Bx@-0(25y5eOpmQb zof^i00I#(_m}_qEFX;B-4aG&eQ-=9#6HIW&(#+a*u6wHi12Dc_)*os-yL7_?YOPV=ByqzSU39{0*Bcd ze(d9L=UVW#68tPEWkG-_T^?t}I!3bvvaOInvLM9TYCV5p7~ z8hlnV#|FcLv1L=*5j|Hkj2{rg%ZlA9l@e=bb`s+(ID_9w6WfT2)6_C_3oT&#@X102 z!|e>pm;$#dIF6x(rI%O@0x!PCw~VL)I-@C6xsG_nXLcT{15$cfz}zwiwK{hz7~GNA z_MXJ4M*5i}%4HE#okG2;XOadVr_?tMQ!s6(gT%Op{c?s{!rF4v=rzTTf!o1Xqb`R5 zf~yp>W&<_7 zU!*|?J>_(%bHWJDY2@{y_Pt7LdmY_2MS>O_mRbS=W|Me4Vo#-il`rl?Z&{Kr^GMLO zQdzhvhVn)v=brw1UVYgd1fPFGD(c-kW*4%|tVljWWXdn%e;7NbAWedH-L~D+wl!_r zwr$(C?P;6Swr$(CZGY|F6X(Q^voHP=u`lzYt}-j4>Rl_JXCa~n+&~uQ?R!Yk{Mv4d zDTBZ{6#CTOzI`bt05R2-%nuyaSdi0({HSji2cMs?>Z{*!f;jZ`*fWXN|7wPOK;v~P z2onhpivH4t8|@dDUGa^9ZXVw(RM|Fd4}yD|FxtIq-u2bd%ocZ(MPcRjYRv_716*Li z!oqr~J?nuYeTdeEHh)~%g8#|ej1FoxGI8#z$Ugt`0j`LJj@g*czxbKO;FL55!$IP~ zWjia{=vK+(SK<4svSpm;gmz*6fw@eD-8QBi(gCL=&Qx=oJoac46iIwh13jUz9ZGI}^rA+;Db$B{ zMJ5AwrRgy-Ka@Q8>s}A5sh-M)YecgXIlz|D3aPET6RpX`tnpgno7pwq_eRJS%`U0$ z?(5>|o4J(w&a0;-rqEjGa*T=2yd_e4cpjD6fTnt*8UoZdEv|iBR1C#UAG*uL3Ao?q zZdJH?p)(^;7SRaQ@wr^qF1s}S7$!1<`n2X?c+|oY?Mn9!Hk($c7G;vBW~3XVr?lmL zIR-0Z>DVFuaNF50Xk!13`PUIS@bSlw$HSTPjNKc!Mcva8quum#JyGCnVkDkDjfcW8 z0B5f(eSAj6SA6JB(&#;25<^6mVYDeqkCBh{r`bIfZdg6g-}LmKFGpyFH^ePWY|1{1 ztIOV$ygNG{9u=q@gvcz7a_w}EI@T?B%_}NrkDSuWUx0^f+*q8+l{-8$xaem@vG|FW z-Fzd*BC>)tdRCTY?lJ&;)>4mM>#?CJTrooDjmRXAxYz0EaJX4L2Z1va6Jt# zy~1f?-b=0DtbuO;I0gRnf(Ae%Im2%nwa>|V-b9_88Ahqehl^#%J+oP@(D1Ugu9R^n z4%l6YGF@7$Xee<9+DAHpZL$txp!PfCfQ|UN9nX;#mf4RI6PX3Nu7iHP00tB|X9NMU zeY}EL%nAC)pcfXY;CHFI9G6b85}%9M=6lxgKjE+vMSLs429h4Q zbH<(>YtA_xTP87{_h%YPY&rw4I9oihV&g9h6zkO;{>$!L${n>jC(-l+P{kI@A1DzS zOAZPqEl+jAIFTweEc-0X%^3WZ?!Pd6T467nr_k7Mw&&v;YcUUK*U5^*epeZ1u%t?T z0fD`}pg$}4dPm_x8+2xL6;Ceai=S-qh&770*+LB9ZpSdl@5mjKNvVeQF1|ld9KKp8 z=Ur}@d&FYIGsNC_HYIaz=BV&6WrzM5#ye&i3y9TKb*~(6UjJR}YP>z#Do!A83$rgX z5W8$PxJqVQ%FZyI`F?a9IATL!{n=FMLWXK{f=j-MY%9<1*U68cY0^$;-;a-ujshLg zpWAXE>u%EY<+ilr4YOJ=O}n+4b2IQXhbjTCG7H`^jAEf(7N3Jm4BLaV)F|_MmGFS> zj88o>8hquFAOrSu$}^SU6i}c#ZEkHKxlL4Z;#pk8sj+!Q^-rSNJ7vezg)w(U3(Dd$?IEYfsIrQR|Q6EqKQWq&Zwc$=gSyCqEWN=uGH{P?mKb`8-ZmWS^4cnyl^#4JOPrsU#>U{b zo-ff=%Bzx#Dny9T53N>hYA?_E^UD_n?z~J*q{7BlVBpUSRywO>+(u6%v&XuGW&QXx zY>!=*DSO4@iR1(gr%}h^=F$91#)U}EHRiMcGhP!82+-6TJ`^^(QcHxC%?kQlB`oKu z7jVL9>Kk8m)cpMzCAfLF)Q4|vp{(Ohy~T2T!Y9O|L8#z;6!t&pE_TOc;W#VK_SNCj<(&XU1M7YYwbDtGwe_Sb zOfrGH$u?4BClDssezx%!HhFxx3veUY%-AJML#N33m_k-vyxuY5%gLCJD*~?fWc$j( zF7D<(-g}9uB@^+d4x4REelv3j-voypa-07_uw?yDf+aKi{}3$M7@3*=Tetk51+wf6 z?9Bhiul(N#mTurGC^jGLWQ-l!zlo;VloUET$%;lW84Pf2NW`I|l0%vZDXSxhB_x6a zBqSv$DE}70NKE*@^W1)X=K(%u-g+9HTRtu>J8E}t`A|BH%qYum!rVeH^A$NHBTzM< z%PejF0)Yja7WEle2E@msft-T=NW&s_K#v+AStKv~G*}z$Dc}m0f)68Y#mrOW2lgT$ z5`%_}Q469b_Zj4~U{<}-i?fJ9mx03zv;oH!2S8Y$;=&>>hAt3Ebl3z}b`<&J|um20VueTNgDk12TdwX}j7llZ{Kj<$5CiXe3 zC^(4%zJPlO0XHE8ujOTpXljYmOps@2BlYlTKn=W_M;o{Y!nMEhNR5ZK>d|H$4b0^}!S z5=>Tr2AAT2Ab>mIxQ}4~w2j40xf>PP)E=F}j7 zm^L@2rt_d`JurR^vcPO#oH;cx{Mm2KuUE_T~cMWVWsu3b1&avUEL* z(GLT31jnbf4@V(F6Tf|`Bc|kl0}V=WnxSRxBr;RAvOt5DUc7g1Wt$*-ll)PX8xDwf zb#to$7;UNSUJe^~^HPsWcFBOUYw^F^CMaBc>ZeF(JFCS`c>=5n(cLom;fuXA*mx{a zvVLdgrE+HUjc)a`PDyKtx$bsyJJa$Fntt?rEvlby=YN?<|JJ&YsV7>F@p^#Lpcp=V zQq9ssaM8YyyLcmA-OR+O$%(Meb+}U0uIA)DIGPb?tSXaJykK+|INTfzPcUO)cUPlc zD^ce1LE0&grPJ$7^3K!ca=PShuB;ZFPv+LYw0$Y-W|7%K;X38QE}Vv_LM|Q8n%oi2 z0eA0Z;3>wtTXiyy%t)1FD&?74*lTKaL3l|kULUK4y3nGr*3-gd=IptzBt&AG{_<-d za~tOt4)oRGZZo? z=&CE+rfz&*Mz-^qeSm{{&W>%DPBu>DUNknt4&IKXU~Ygb&DAIaPe0Nacw`N7?(+H0 zvpK3O($jO;8XPVFPhDk*LG`3nuH{I0?w9q$BmX=n-3S}{upbGBXKvQ1dDPLC&=-{pU+2AQ#TR&1~zkBk*80^DoC&||rMB?~#t zGHxhyeo0^uZ4)G=#M49ux%+za?kEYB!!$%_uTLn+E>t`Qf4G{tG4gfjPYY|3YpQ4n zVik3FgQD`hru*j67Hh~re0i1s=AN(T-3Td&s*=g$#Tf6d7--Z&uz<;o1~*d!D)ww2bJDM zIz7~NGaB3ClT_Yvu|jw>DC#vBr>=Y@HXmG^naSz<$3E^Up@FlLvx zBTg&VE8Q%k?8zkk1@2{?;*({97V&bNwo6AIZm`t*F{(a~4V3U}sxW|34mNJ!ZMOx~ zJY(Cd95V;+adZ#s)uF zVI+kobnHxh=JXybvLC2xid#<5*~mJ?h=NU7_uT#|l+l?39I#b2OiiCh5qSTdEfz4j zJzRK^MtRaTaOcOwCWkGOG7!fXna%9HmV*53UC^h@#*2k5xY&p|UiYGTu7DTpimO>bqW$W%=rL#e583B)oK87USkGMnJABpXAqL>D0V9 zEsB&|g-T&&!@a_HR}nlaR)#0Hh5mhwDNTj8g-Ez(?x!M6YSVD0=$ zs^vsj|EhC6xJFw}8BJIeNn_p!7|4WzRU~w_ONxVAdrkiv)zocZXFD#KMUmV13$$&G z(6e12!+FoUhc{&N*SE-UbHGlCIwu6;;iSJ{PGfF&1JBi270A}YM0x7OR)6d{vzfC+ zT7GPS5R*cZ1)f^|XoBb647cY#Fml{^2NaFR7k^w@;RDb+-1y3pDkff@RL= zGK=-i3cKP6UUz9NF`^~tkISH^sj zofN-fy4amk)JEg7Gq?zBYl7Y5hC=Wn=xdB>WFY44YHi5VK# z?95|{vz2`bU?(}9_Ld7Xghu>!*}v;&1yg`IKEg!%*baM1DN9!2R2uq7Bta%}x zqR8vVbng%yw#e%5D`z*G?W-hoEhBx_I3utL=$A-+o9c0<@(9G+-v*=wy6oF)cZtkl z^4OB`k+SRcQuaAEr0l&^Mp!Y*;QjZcJs+P&Eh+9a&oX)nyEl`bc^rIsJ8Y+~O9Jz? zWY6pdj#n^WM6Bv-(R6Iv`vbjgPT^u$!oZ(M)O#@G7Xq!>*i8ROe1VKL6uDSsd)h8D zN4pICLOHTw3CfYc96+{J`8`rBEW`Y{GBzO z^vIRGSCqz>Hh*!@Q-HW@|EV-D*^L4*)Q>&Ul*}LRuNBViyByp5q95iBIZy8)1|{V9 z(A6+?A(F)F$ubKG`^Vop-*e0?g7z4ttcGLBc_nUIIU!-A;=(Rhn_w;Gznw1?uAAB$VFA;eQ5%X5t4BCNkUYz)&v`XQaO^gJlsD8vh?*gF!oM?3Qz>18=VLCfhU6!Xo z20oHu3O!6UH2=G(v@?U;3zFG^?g21T$Y`>580pfZ!XeARxh2xfOQgZcRvN;h%En=6 zEV_>XFIHBUL57R5B=g(mC6U|da(S+U;6SFSJeUT)Xsxvc*gLjVJPhhoBVm)?^^yBt zLQM7h>65WF%ToMVQkbNg9^8Jc(geya!xqXaBlP(a>87TXk{J+a?4j z^AI&ofS%dTp@xLz=P@twgUTrgv_Q2E$|V0`JxLI68U(m}If8roG!~%lh5*?MkD@)!Qwv z%Z8PcPdOni;$zd-&JKz|Jjmn)wX|&udizEq+~Vi?yzXVIRK;1TAB!s-+pnkIod!Sc zW9qwTa!O-!c5Onh=uXGJ3&}2}-DUPB6C$KL8KOYF%@m3X_v&@MKcX3z0>#__j%Z@@ zT6e0r<1&$e=HbP}aiMNIY0(bzT%ODY7p3L!++BOU5I>pAO3SHkQ2$#{CCyWYp7tJ} zKq>43C5)t(HIzC@R#8;p=*E+aB&=AR$%$qBtgsRn#5w4u=ZTjTZxl;nI*4F-eg`V4 z?aM|AtSYE51rNn!-$y}HtmQ8kPDg%x!|1B00}n1VK9%ELWc#}uZ+@xCh7Zth&2N5IXtsxe>b9_vk!= zGpiBj0WXZ_TWy!fHfH4BqQJRII&&XIq|!R(qP>+S^LA>Lls~3O&%XQ*&U_ZPcS5tt zx|0XNr+9_RiETsP&M}iIDHT9?k+tDg&b3PTFRmXFbg4~)|kxPyRp5(ED|Zb(&Yrc9 zsNZnhj_Mbd%99RAm2P6lARGGr;35ceIqZ7Mu|?`Q-S?sQAmv)^o4%*}PU?qm9-Z5A z=-%N2MM`@D5L37`ULXh=Pa~QT8k2&yLnS}^4=#b~8L`L3J^5P> zOYUybuqRaAe%auR+~CM2nnf=(;rq=do&zpt{-Ux_IDR_}eV@9F;?k@yCVON5$lrqm zBgQidK3tXwLrSR)cF&lJ`ahVjlBO7qNWSS=?Ra?}y5>&}H!5%J`;TmT#TeZwWOh~B zHZ1@#g}?8$2)N-?QbC^rm$--%-saO9A{mkSmG)*w-n;7TRk{d$AfV+bUR+t;qpkzK z1d-QkNqNt4QppJDDNl9Xu@?PHJ84o$nLUkziSP=W zAM>{C;i4uWk~>xJil ze!$WJwAKXdYaDcv33dl#J84+qV?|EwpLW!pH$&S!UE1N|m`}B5zhffFJ3)neRKFst zWTlkw!!O8pc(hekl=qx!%}Sw}P{RfGCh60~;;OT-YteTcfwC?-&PzGP6hlp#>$d!4 zybC=^KCteVHE09QKzdnzMMkPTwr+K3UF%n|5Q@D+J3Sp%(bjoj2+#6cGY{)wz0zhlFg7r9sWEcGYbv@z zCC;O+l!;S!mtw-_;>s_f^h_*d{LWz*cT+0mFAQrNzWPa*5cP?XmRvb0Ad_pxgZgJ* zO2g`GzM@+)+I4rfXqp-Xw&~W`h6q?rjn`TIsail!Iw2Xsunzy`^p5atBA&Ln z=2ERoFb#2hwAik0hKf|$)!2@uYrxzmYF*RIfqT1Tr?O&rdabE5=ayOVv*H*RS#NxM zcz3%)fVV&=hO|aWCOZ7ffxrR2+gsi>(2TVZ*kIIJu4V;E_8{H+E^$$2qY?F~-;7ym z=|#Iw$2$|xU@zwBBgR8~!!_A(C&;L9{#x#22%9n0D$Q*C12I$L{m(((d?kAQ->D&yxiMI`6 z@pXsd>Q5;ptpHlOzMrA}1B9@tVp^ZlYhd zQs+_MrnRlfBMI{H^iRM?uul6bkpvgx=XjL0&_kfxwC*rLJxC5$hD2xk#Pgj33hi#G zrW%jh!;8?aocME@0i1a^M{UI|5fiv)G#*O40@m2KI zl*+OjRl@$~I&*0U)CC#VsxA>c9cw?8acdZDzcq2zS`%1fD_b2?XEZO_c?@Gx@tDMfm)<;zFNJ<#s)>q3{?F+^+^1H6J zs_84i&!-`JED}Dt&?DElE^%L1&02QaF`X&+THaGMz^{B=JkR5R5h8T#YMh|d7h(fyztH-5xC||TdtZ;exI1>NZ}jldsYNG zjO+7RUXp(a&}aAp%Cwx!T@u7BS^8F9-a3O9C!kDj-4mSLZuh_RgBhgz2Kr!&?6ZJN zWn_i}wzr)v7*kJ_1u->TX>UG4HxlZtZhnVGEFupQv8Zeod z@Tt)gVf98G-Agh2h#v_eNcw0*pah2$GsSn{usNTm5M!XFukoc%C93s0Dcg1r9}|0@ z1GkbHV4HGFc``z#JMGPJR`<^c(IH@5uDLjLA#O6xkhA^hKCN6U6VUK(XFARKbr&4` zx}@9KQ^ei^Y{HgmOncScgD=vm)vwjy!FDnfai{3S}IzJ;Z7u7Y3 z`Lv*wTO@cEdsI)tB5IEA$@J1Z7&mhnNN4}+>V*2J>jvU@isWwl`KYh?4za~E8d}r) zcEywgPI>^g-!rrHG9GdQLG6t~y@OVy){$Ada*9U5#M*#~z?Rn8yw)_#SkIdAm~TLu zO4EO^-m*2z6TQb$2J;L1*Hs*MEb_qzuOHL6D|{D3tS|X%1Qdlm=e>k;f(Hl?fw;LDQ@}vH zZOZl8!Q2Z8Avuiy2vB$mUMX5+HSof~FA4SmXYMcnNnipYr+`IDf&>B)5h@(m6Anlt z=iA(Zx`LfS0kI%CKqUs~LhtY2g1fp2{=NM4h1~;j1{FX?HuC8m1ctdmq^DTJ|20=H z-Y&2;kJkUf5P$>%7n=Y1lMp1m0Ur7gkBa*A{ESxTE)GN3m2KMo2GpaF4BLko6yotF zfD7C!26490Df}JtTcGb3gIgf+j}s{u{P5~1vzqEoj;6eBv z_-g-8Z@>!!DF~kZtuaFAI(I&BuXZbB85Jhb)jY~~1_Ja;kXL>@hy=yeYD`e?LVl|z z_)S@egL`kN zh9Kd>4kUAfb=+EN)EE+Hrm_taAA`oN*GpgL(?Ue=d(0MKE`)7B)ACNR*rXL~D z-Rh~n`-(*vC-EM`kN==QL4AH$XjDtVuiLzYpJNpjkyl`lw@^}`PvimtASf_o@QBDr zprD@&@m>7)(zu_9nABN zL@1%k1*8K&))bH+Fb7EJFW`K0I0z1+E+{`d8VNAMvw$5Emj3yd-QR=)b9gWSv2V7| zLd>w3Px?c|Rkh`DbeIo+@kg&Np! z{VVC5C=R>4?TYgJO#RJ`N6WX8>eG}EBJXVJq$Gc3Pf%Sm%`-7-*u-4w0i*x@S?eO7 zIaCr!(2S=P4YytNm2(9!Nn{RL3z>Px`haV)M(^ECW6nYr{?QF+BxnG4{%3YFSu}o1 znZlZLz}r|*s4Xa~nW1Q=$c<^np>35RlWXuBRHn<{wG@GmY5z$kN_QLAXVv~Yg_b+X z$Q6NZ3tbj)TGN2v()%78P_(L6fhVw}5a9)5?MkXdN^wA zz7jK#J(lOH&!r4u6%{=V3*#PJ**;%PBAZ5LU%&z#BRv|aNe(3_3W4X3ilPd^$Pwd> z$;*ot7m9%3sNCP$z~ae+j(uLgIQhNHMIwt>PG_!9o7!vDRSo|s#-Qter3f|}QJ(HQ z{d;~Fu?S2VR0U;X)uJM`wC+xZ4>}QsibO4b=5d)zpq`P%mMbR8hKWYT4Wh=^ zx-q!AKCt5yp>v!{Mlh}Nsxh-WD^Wdu#3(zzlPK|FeA<|NeWcg-7&4k1FaHSsv~IFd z{?Z!_67pcv66HnExuSC6WK{$x=T}2gu6jqIHyVx_!CH$(@yiI=P*M?Sp>dM=$-j4a zuROGm>HMX90j8lVbZ0Y}d^xusxq%#%gyW5lzjX*gu(idpW{#6H(GM?E@V zm0GTFb4-dR@l-!8{jw6*dKb!e9j1A=+`3k%%p3waz~a-)l2RPN>D}378O((wl6IYiUG{RaV|XHRqece_89{#*+}-DHQvh&{d+;kwds+Fa36%IwNzSGAkTRz{xI9c*9066MA*OarL%$=wHwiXQ2| zS9g>9X;KvDD44(HQt6#MDhopVxCxj3D(`p%F}mmX3R z@s&UN4BAXr(fvl_ax#~Nbiz5u=YdTy;v0%)VWNH~G`UN~mhA8;x66!}u6HoYz7PNH zSo+5TD5qD@Q%0l{-`#{+kygRR&O9}T1BPEIw(f~)nqiM}_`G~^v@hKfhsiX}-F#t_ zEU>*jD=Opg1GZnCK0FOJK}arJs`T4B3%-S9_9S;)J2+!#5oh1UC^s9aiMzGQsP?w= ze0&b~t1LmE0k}xDC-}blfsghlHs?p25_4F^oHI_;t{rjCY>$MC`is_`C%EqRx(F#i;zK zd&=4#2dRjTG5T~F7}=}-m3dTB}&Ewq_%2Fzc=!Qg7@uFPj% z2mO{LjECaBI*Y3As|eD^#kA7%=F7)`HNj4mW5gW8?Wpx4ZZs4q=4BXuTj}EN8lkzw zzLi{@*z3CTp=$Q!=;RHGF-{IwVYu!I7ei@&DbK5(@2drkBaA?wU9t!h*rx6&P6LjI z?(ReBjDDkAgudgwXd)Beb43d0{;<)cerCGlWrcOhw;Xp(t!z^~kr@?kCyzLB?er z?anx7VM?$|XDb!NQVNSn|2S2~o~W#$>L8&bDF$QMb(qnj)5oc#6#-C#vl{q1SgYao zYH;u!yL0jykhK1V?Hf_)?BaHayBU$nB>IGaw~G^==;5htm$JUj394dfUj3vKQ}Di3 zBQU?2?}Sqpi^>FJQPJ)dvCpQ}FSvvupo3q|V3i{%NGocrUc`5unfex=#PN0HxoIwo z1Vc|EMDp#UqiMAUM4?$I>HRjjgScjMux-tn@z;z~udE7<47KK*&r*b_@)y!MwNhT2vADey>-WMYU$&2;WsDj8j8Ebsi&1=cz2Eyp0L6hnrH184#Y<=GelMkT4uQahA{vf>yzH_Vjc{s zF<^*M{r>4Nq`4}|Ui#D|3gG$`@`Fg~A(^c}ik{k6NbE$v$#^17NlZySr&X?%dJUOM zpL5=Vqty|1nw7xIFTb$MjXMrC}My41~L7qxXhW)EOfsK1*p9-e&3Lo8v@(K3Um z_ZSRu5+g?GIUXZlrs02w+FqdwKev#IR8}sz~bIY-xw=~swS1zvk!;pHv@>ynl>l+< zAm6lVR2pM^1qx>HEbo^Z(X?m2V6-{^lujjq^KerNv%y>cxi$Dm>(=X?{Hd~g=1FWP z(-?%4vRV`QY9uQHU!G5sVwl>FMk;|caWO%!HOhtgn^3zMvNKw8T!JgYX;y^gQQ%^X zHm^zUP#R20(cU$}IS*J&*9<<)UmtiMUnapC zRv}^&slt7uH~mxSf8UwQttRx0@nKLts4CS(r3AJFkf|nr;b7Ug4j92TuzZL@=vMaiZ+%kh^Zx8NLvjrFYBrnWoy$k8*kr+5yxmq9p!I(s;R z9m5XrbRH%r;~qdF`fRr!Ks#`;Z`MOA&gf+T16%q>hD{T=B@n(~NE6DQc<3CKJgwupavKT@!K5k**p+g1d9oBcYr z+JR$m)U~K|xfk}A0|*zn)QpcZKqH`U;!nW@*R<-la!$HFE@$%FZ_Ol-jo?;fdz@Qs z%lzU;V@q46`4z9N#s`x!-yPGjd<{fyBm?(UcF`RAc!YbzyyD^NzkmaEX(yP3DNe@Cvpd?te||VCu?14>*g-8% zoKJWe2`Y?_DVri;or#tutE~EkV0XoJ4KfyB^%(bw1YRN9m*|{(El;EssaaT&(ca`h=MQX|}-`rWq z5L-&O{&_VX7Rpr!O3`iFsO(ExH_dJ|G&f@OJ1#XnZVx)k>NtzW_4pV?nTs|XjiFQ|;be<#H@O3^d@MVRK;2L- zfhNEAFAK?pP+1Yr0VQt__wyY3 zmYOnPKo^9bJ6*s+`*w@~MbhR)9tHOQiPn|2$NaSBJwf=x1%m zE@(>?N4t`vOL%0exX0LAtP3;e1ka_ob+-lsf|-5X>tI#H>qS15sM0fzI3}dXj~G1y zrJbM?wAu1*wZx-D|kxK+>-=3i3FN zy_5ELf7KhnUFYo67lr0TORAXuap7xcV5%0*$jnzlvcok`jzTCXBiZNK0*5&8*?+u*0g0r%_ie3R-?)>Wl-HRvfpscc)+@s3tk$kBo5~`lc$wx~v6x(cq9&;VsplmDN_D5< zC>RBa*Ism$?yQcL*`dI=LW&gv^^J4}&YxO1m&ijI>^UOjG*Q3=t zp3iK;yKq}3)2*PT8f|0EZFc@LlpsBv^8#70=w8UM^|oTB6Z1NaA5V^AENiuM>@)Ac z_*=RCYepR~c=+2}quB&^vp9FGhtnN+YNT zK5m=R(RwEqtJ~1q>@LSrO!A}Zh^0ApgMJj_$5)=yIN54b>)ZBML3mZdCe?WZ%DiB; zlG_@oa0uV-I(^3O3XV2@AcjK~f4DHiq2_Xf?3oVAsKr5%J% zTgp5f?uHU|e%HP2>&1UDQ$frBAPVX;?>aK8e~rjSWz}#|xb!B*Ve;%T&8_vdid`o6 zj(t19!yO@T(fc(?5`1J(ojmRLSczWGtPQVl02w! zBj{)8!pV9aQT_&6t7n3ZxNxX2cg4@}+ie+nC!f=qHVIYJ(4We`Z08HgKF-K2NJv(Cq=Sx1*jOsvYNuJ@KOnx8V+5 zKE&A>pg5S(!dSXja1G31c#gNwUYLJ$YG`|_%(|(U4rJpCK_pSykMMNt1k`vq_KOA! zZER{^Gavm{iB|SFx7Qtmkz%^WT+eXhg`_b8E`_57JJ37c;&lUrsQaYS8aViz0A80t zTBZbP_OM1&EYiOVg@g0=N{$c~!Q#?;=u@(bnKjWfEtBxThv|Bx%*oDK87@7L|GGcA z{(k0*)9VBL0(RIer{*Xe2|D!p+Fn>d6@A$6nF_@83>)6wI(eK_AN}xwA--dbbzOdy z=?7`QT)l6{5m|YW2sG2}&ocqf5Hyl5XV|XPIt|XJRrPf&sWNR29}(!H^ZBD)8pB(B z)dR6End%N>w$;lrW$4enRZe^1hVbr7UV%&#ShbdJ3;7Jw#<%fHNr`>!x z4x)L~nKO#e>Wt9;3ud>74zEqeYCF;v`ze6qo{+uIy$Z7#C8J=sxWuR5w)fRD$jO8@gVS&y{Q^MVVKvWUE3i% zRPfM&z5VTtS+#nwc3!PA{|=+E3F;3+hUhoYF5>?A(6Z{KUDdo7a3c1rdjUPZZ!7dk zozH=R9OIT+^*vf*$*ew3dfF2a(*vCl5a2W;Pl+yRI4f5Sz!{=X%Pvh0%5-VUUr z)0M5G!=n)s(_zqta;EP_Bjy`V4F?w*@d+usf@T8k-!!f{KoDuA0JRsIg%Xg3(ML-- zKua+&4E`^mANd;t>4FL*zR?A86KIJ8m_8p75iVL0{o>#lrlm2Qzvi)494MNVIzU@P zBmPjHLtq2z2&Sba1Zat7|Ap{$6s?*z2Z&3-ngQzOS)Wp4=xW~q1Bq~Ma4>jr0c!-> zwK>V)7|0`F{{_ev5$@>XR|D`T9ag^GIox|EiyVzuKn*YEOPVmG6)d361soV3Ue3T8 z5$px?0HPka9Ryz;@{FPqghfXnzIUv`ABh9VpB=Jqdi?9w#b5kK?q3B1bW2l97+0r; zP*)!!cL41gG}xSi!f}ZA04Go?V%DyRG&$xIsRcZ+fXZfL_+V z2S7j_$TxQy*OOv9A2qBk zJ~Hpi{<6ItqLc~Xn*u)cDg)2y7FL2a0CsZx)~aFJytBhDAasg}@SUC<9vys6!i7-y z@d&VH=(RO}>sGu^*1US|Wc4A$k)nY8cn@-m+S`A}-rA2<;o{pOt`#!>w(-X@J?&mj z2vy~?_J&4>>H_GUUs#+6KfA5OhT-oGezPaD63p@$fB|q2%D)*x?A43%`Oz$)UcUB2 zK>+zR^vd|g5zqmYecApQ0tT@74aD>2{3YN8kbm73e`AO|=KI$RZ~9?7@JXUWc*2*5 z0C4&M=Y<1B_`sJ300{a8c5egVpZ)cVHLB&i>&?)+KDqdCBmPpjGz|R-{{72G5JxtK zW$A-vL4$Q5kG$ZbK_YW}|Mf`@k8ks9zeEwzU&3AdnW7q3wYCgt>+_WLRCfWbQYcD)vm|ZWzzELaZ;DknM z&RlEE5{+uDF6M}7Uix_Y-mv&^8pGJSleE~M<){b6XuY}hDbzA;VLeB6YIjO_o%1+C ztKcNj3A)?;Jzc7EasnlM7?r->^OPQy)F))g&IGyQtwI%Eb|~|FAc3(|5t<`pAsn08 zS=Ot^K~CKeP6WJjB!I(cBi9DR44l|#IFHNAnNb%GD^Tqcwdr|}N}p+AUkrD9?urL` zfiCX_6=M@$6$R`xp#)|ZU^C5sIyd~l-xFf_GYOc7b(LdI<0kP(Cotd4aX4&8qv~d? z%0ddqRmB5c$|(Et=yX^F#oa{XjsWXBVPeW~M4kmCuI=c(w^UM!ta3Jjf?lq>>mKIP>WcDX;6s!Q2ZS13!NK z=I7}9YHJOx0CE~R56gNsNa)I+iIS_CK<-A3!j`}re|JzfobD1 ze-15xjHdiZ(t>tn(yfxs9fnDDF&q0<@+x3;OfnpdBR1+MCxtvijGVia5`rsYLzVgR z5An{|_cO(2w#N@}Bz;E^?#|!&M{Re zJ8st0m1%LnMO4t@M`#^8M6^C**lg$JrZ;8_KH1;3`?oKZhZ7``^S(ibmYr4_Ro^fT zNYl3ZZ@1m>2UT87=vZ&~Pupe2+kQICMT8`J6zYcvwdOP3dgh&q2tA<@xhQEmn*wO0 zoZ3D#A58T>PE3Qt9IV7(fQzj$g?GEUq#Xc<2e2SOA3%6@o@|+#i+E)H#gOs)IONz( zlr$F}5V1f&-b4&YoPi+!=H4^s5E6tKAdNKSru|%;eICfZFjSpPU+ny~UG45^qlm%7 zYmfWAJ3H}!fz-QyOQ6fbV~O*XdOC;HFl{Uw+!~48^L&|XH!&mCeo{3@tW@JJO~+su z8M1j9Y)a4WNbDJ#w+TafSzwU@9A~)>0tPygW|>Vv2a4Yn4CP{R9gvl7x@Uj#eV%#1@mA* z4^2wHZ9cwE)dY*PH7nBsMkI8i{e1V?TbW^#txZaUJ|HQGbE}!XOWD8Qv zInB0;eazLRiu#xV^oRmjTi6;!(bxQzcvIoe@g($vJD1&fT}jZ+)0jw#?ty_Dk(v}3 z2teOymXQqqYj2aDS>(Tb$Qd0u$Hq?#?PS8G>XSfM%tb`1BJlFIE*f4FaqT2Atpl)s zfw_w3DSSC~%{l48b-NIuLVmpF304lFM0nK|yS||X`%s!u>MREK;@l14NPN9h0tHeu z;n<$N6WP4Ur!3}uZhTzH{bl51^wf-gqim;g$Jn0L7W!Zw-UeIN^=igv96BcZ+3A`y zJCF~d(JVkjkUa! z=PU|M%EJ?b5LJV9$YH7lhHhsZV zWa!0en#2ze4tS{|$6B!B(9!WLfKrfW)Brd~L!{)E!EO}(>gB@#hUBEfMWn*h5!S|) zymVz}AOZYeCts&^nYsYq(Y+$o=Q;?5ct z!#w3WY9D?aOin4o%Ue709j>edP2H6Pg-jAhaYgR=DJ4$*w0$rDCZ8ihKL>nYuU^&b{HsySWMN!q_X@P8#HE1kK+N;F$ z6QQpdB(AD+>9}=Ed`O3lu786=HY8ug=EsuSokJ`|sDbfP$KxCQ0H>l_S8`POI@?{! z8oA_fGK#Ib18d|_PwKee=Uc+W-HtRtr6vND9zhe4JJZAKkC`oMmn?NOj6t#|3Cf^# zp+v~D=#_$!91Mf(Uyb&~^O3Sfujl1?hE|Y+C_QzCP!&DqCC(mg<({EVK8OMEHyeBttib(6MqlY`LZ~LQ` z7o>@ssWu9qr)0MTT%&pd?d`wz9H0zI{*{s&etKp`7h6?5zor+p-=icWCG1#b{gycX zQ>qXPe_Gv#>`DdNFnOPRkz@UrvTgsCyKE} zy#iJ1^$6q&@bRTQwyMeuNO?_SanW6;I%$0a$pUmZ1i?uouVBtlphZIYzE{v+L4OL5 zL2C^Ie|ilj>=B8^G6I^3h$tUcj7{NE?mhwOKKsR;T;np0e`vL+|H{!hA05}__5B=i z%@v-o6W58w#ktLYs)Z+^)`CZqcwd)E`60^GW)Iy|x(r#I1IJ(%;YPg|v-|YU$9MS@ zmuCkvFyiM>h=iC;TM=-8Usg!PIt{Qpa&wJ_VE%ncaWlEo&3W+or6odLk~Ir-le!TR zeW&gx&wAvUklI5SRMu&aX))ZEOvzJ-uTj&*Y@!#Z1F!_24j76RGTp;Z%eQcM^L>#6#E%W%PF=FE{@<1bbJ(2-1alx&8* zYOtwY^=^$L>`Gz`$K0%`u4r0>=^OPadhDW0iJMDjHY8H3%Jc9oc-^mob|8|lX~wu# z7F!DI4K+pQD6+NUH8dW`22w@Sa>Jme<8haxo1U0=+3+iDr`MG>7a%Tf{I1BKB0@mg z)sDXPcT&>9(6#gaf#WTaZFM+`?LB#gSjMZ*$OQ9=tM3ZM+gWQR5lbV(&Yiq;XqY48 zQ8!EbTmM0($!RK*NK9z3ha<-xodHX)s`@h)qGETEMi>GnoWZ^RJ)48c>yt02016Z1q!}$ z96or)%ZhM`b7_#^A>}463#fI)6c#D*6zkliP&nY8OQJiF3V_SiR!$X889Nfy+!6XB z=~;MD@9a;N>Wadc$=zy#o&l_Nx!0>o1fnrlJDWfH8#SDe(|@}SRH4hm->f8#By8+W z5G_Op3c_=qtWBvaqSKN%-cvh{BZR7)zY!Fgvyv5jY~OeiG9CpSc-nq@zD0&s+btG( z;OiV$U1Bff6>i=;p23?(!g0jH-AIld02~mbHo6)%zD!on5CGNr|BaiEl`)6tW2ft3 z>B$BO;djKaPyVK8tNVB*go(AHd$*lG!moD>sz;xs>NhhDp(>@ejV404s2%JZgeqD# zb60qMn`DpSGKnDkX~f89LE4#<3pKv&&Gtojw0PQTeD|r`#K@UEa0hn;E#qRoUaK0_ zVWiV4^nQlT?Pr_%*ht}QfL=KJz)IR8q%E(j7ft0Q3oG{44bwa6b@7hv*>wS4SWraW z;v&eggZMm8+DS~mV-pQj7NGNu#uC+(%>_gXD zmq7z;zqpZ?fp0YUUU?wR8T9u6vxK-P$RhmdcBMeRs9p?%*wL1ReCC7}U0&>CzL{1?nsO4&c`M_r`>lI^hM1OE zY=2tW+=d$W3h_KWS^Ry8Ob>lj>ct6DY-NJYqbslgCo`{}MWxAuSR!t%o{F$u zkLll7wp{3E+xPbgwA8-Gt#P1S-BIg_pe}^WD7$HU1 z=GcTl*4!f{T$kGTLf|%}l(>Uu{4|%>1!J)d#%L~U*WTOVP6;i3CLcP<0{RH4qofP` zsGPDaaB5bH4krzhu~j@bVZ_o)EYn?F{v=;?Z<~MG3v@lzqbEi>Wjiw6a#Q5RJbYIv z53G)7p{&GwbCBec*O+S-9&5`~OVo-d>5XC5yOJCM+(gX;djqwPnlt2>fkm}5J`AbT zBb6s;CDe!VRQ_|dWWJ(er_lU5BXIMh17z3Bk!MN~dd%u|j!NBWTQy$$#U?wjV09!A z#TR{d@hK2$-f;H&37U&>!^Y2_H^OXxnqskEpTfqb4?C^Ai;r_rribkNsQI9af|2>q z0O(qD{AMKeaz1k+qDKPyFig0nb*4!Ji#g@|D5V4At3}?W1PLLX0-2z2FAsDw2zGKi z=?3DEFTbvWbt!>p^1+5wMD{WkN3$J`ycaJf5`7X(<-#up9pWVTh(?DGnM0BLeUX0m z>u=R4%ZaBX9ET$DH9v%C!$+Q2Blch$$_d`l<`wWl8tLPc%k-v7 zBi#ySrw@_RZ(RxqEngp(_x!01&fo@P*5*M`=e)j%NOj5DgWeF+w~i^yW448>?2M!>SZWd0W~Emt8|kqmS$zre_9RwC~dP8v;j1~!D_ zP}AqS{>aUE@FR_=NWc1q3`BIg{H(xPsRXqGrZ$P@&yyJdYC{z7@o!Y%CHvcq7W3;j zGct>}EI)1Ukd3jc!=8y2RYKnOmqPZ3c0_@auYNj0obw*R66WLv4xA%vMy9Zjz$dE< zf#8wFXy8B!m+)jND>UbX)=1lVCTNzy0;76kAi=VAXxwo*3#x>;mzQ}0}}!ddJ+Y<+q7(!%jnH{Ntty{~0v{in*>PyXRO+MG{z9upFGDs;0Wh}4U*eH6GozMcn! z%XuIIJ-*fz0l2$vIoOB8et|NlMW$Hn7TTL@ic+tUv51-_XQB@UqgVbF4T|K3{2aBK zXG1)dR>uM09gIoXi>55OTS1m%OQ=T3py?_AK}hc6a_wNa%N4#oAsWQ{-c*KpMO z2X@3ogy99GK;~5oY2xCV1Pltp>eD%t>l#0T^TYI(oTpyIqko&8$4fSq90<0u%8@&( zO9qUH$w|nRhz|1uiFo#RT9yJQCX@$O5B5_yt=;4STZ-N030mp1&l}Hqa)ee$PmtJz zNE|Tw;=aK;is`8gTN=_@UGM~5a<goZ3;YP}=?0WCH9vFJWF~mK(@I*m1?cP{|Ft8Oug9 z$6}&_PMr!!uN4cF>GwNYD~{?qbt0|XcBh-*WWm@&KOT0^dlmA9c2n)SvOEE3j9Hs% zkdA zv6W3?!dI0ivsxIH+mv47CQD;%@7BkiWh}!gDxONfrhs~>S?~=auY$_iK)7_zEAyT5Zyz;}Fv`DItRl#&YDp1=-3ReDCn+}dAt9q;vRn7%8E z^{+82Ro`Fij{K3?Qg3lU@LMs!c=xP)dR>i(xkpy1oiRc@yMAcboHu$7w<0diz$}-_ z3;|P(joyxMN_tt9!AHZ0_e9l3d>cTYkZ#;5sWZ5ixfhuXh)n{U1N;5rU`E@oMKE3| zg>q-gfc`!*b<>&ArP@vBQsXX9MU=dmyrvN1{q(mG#~*bw7X9O29dO+2XiT2tTv`4;%Ia-P!2rKv1^KXLcVHtr;T|y@rO!l})DZ0_0c)Q{U)l9-{3qu3b_~R*_jUI;(Zd zuG3Bx_3Z&IIig(Je;ZSXacQ)GPuG={nq=#Rzi_1S(`|@^GpV*H9j_@X*Y`q9&3wAU z68@g>+C?+KXjuDx?R5UR_=QbFvJb_}*#mQYr>_5wiY6RD!FWM<8vA`}Tn6?DnFqW$Tyd`Uqq2f^t$0U8rEo2Nt_bFT4JE2W7CK{`F2g1k3#cJdM4v*+iZ(;kTn3G>%mM2SEk^M8L(pmp|1Y^Y*@8c9DF$9Ut(di)cRfZ682&Bcwj*apL#l_m_VH({EBV{2DZ)qM|z6< z=sapxuaX^{M`gu<)mQGOnF-923XEs5oQQXa{sMNb7nnCU+cdqc0}BXO#~5lmvm;Rn z$cVvIW}LXeQS%CmKx!b|MG;ojv}gs+SEnf2Ph=-j8Km}_8DzTD_P`R3~V;z`KD>`s;Zh4%7#i7jNA0&O*k| za?$lRfS+z$s(V0Lpju~fSJ7|%On?MY${js4!{7jf>p#9j44=jkUm-U#ofj=5Su)+A z@KZH!S6Q%)md(Pj94^ez1P=J2pJmJ59c%!`!9@MY80;Uc+>sF1S&9Z5-usc`8=fYl z?XO&sn*EPA7z_%MIwgNpr(~qkp!%%nn9;0gtwvI3GY7m+EQ-}725-wBK^(Z9pV?Kc zVJVE`qS3GweWhi!Rkvw8>{Zda6_4JI9ol!)<8utMxiFk)-)X zfoIg$6)TF4mnS%6jOqqHa`>Si8iUYLT9fBp$+KzvES(I1NZ6Y23%cYC?O;l&%CU%d z#@LlgyZCZtlhZv{wvB^psox*_Bv{2x9%X3Re2hxpyx$=99tl#)^I9m!)$cR#88_*w z(6`61^Jr2)(O$YAYdC`$zN;_d{n|QPuhu))+54U*4LK>6`K{wb!635SD zveaC5_0&;gEl1bvj5Ra{m2ytEkPap`cc-nC%+4&aeQjk)I0b|(ugs=FbJO(39wMAZ z1=Y@0#igS^Qn$!a=B`>iaBt8;36XhqF+{m@W{}|cEore2dS$a#3NN-~&$Oq>F-#0G z%@nQ;y*v>YC`LCSOc)WOALnj1QCcrpTd*5gn7Ezt7cu8SSSZ`kBMg|mjEQ$=dm{7Z za%*btToxS+<1b_lkq^5;^MBM8%2cV3Gm+6HWis}lb*LulAA?G+aZB1{J`O&utWH>3 ze!~!J&mMbJNr*BWAs=R-#$LsDpH}wMGY0LWG=$3BE>ngQUM&AGc|7Ui)^0(LAM%ip zm1IIBODA+=u7t_e)}eXp(}G3JH@;rh}_lul$kN>*Nw*9M*huqKueByMb?lTTNFuvymx#1r<0#}@ZSetQ(VTTc z<)#c6b9xA{4>LOEXu`Fi9+(&B)W+<*aC#ElEAS1H+H2H@3YIDXzHAXsjnoosc+pXc z$xPd`t5SV&Ab=EcRN06aidyix{k4C*kS z7gRpJewb`vtsr?J4#>#C2r-h$q&cM!lIII??4o>O8;6-h|2i|a94;GPVA`Px`JyE; zSO}cah%rPtSE$hl*E~Xg=lbVFS}L@ls0bH*f-o1EC=5@Yw@i14+i~3M%_W&DKrKQT z5=kV>hne{qyJQO|U5jP%+c{AOe_fZZEFE`Hg?f?MT9LBN{Fp~oNe;k{K}S)*y38vk zTPF$5PjoYF?@3s*8H+(CeGtC&j;zEify_^*Az?cxr%y?M{D=q8>@*s+3hQsZnZcxZ z)60<NAaZqM2-$=M?68{*{WZsPxAIpALC^3$nQ7(n8<*@F^ycI=#N!vaxQE-ax;+cnm2xFZUF;LA)phIW(6~yuv;7X$`s7ibdE2k(mo>4MQGS z)f7T$nua}@t~mPjCnJ-}X>2&LXG7W!$Lv(4p{8Ax?Zn-%_FTXkjCI{}?0Z&ik+)mj zAOee&r)G6AN2ivl#8DAT=jFG_v*%!x=zGS~WN=w+@~Pz9aB#}*gRNO}6AzF&S-yf= zA<5_CHHkxn6Qs^MtQ!XH+bp`I`zaO9!9gUW?`n(vt|*kl|Dm>TYoL?|489%kS&yMh zGO)4;JC%bd1DG^EtfN({d5m6wt8KLmopjcZbp+W`(aqsMs3FewUUmfoiPlx`zLr6&83ZjH6bQD zknemaU-Ua%IAA?TQLIJ?i09l8@%zrXzC9ThjcScc>>=MaiOZ?zNgqF+Z2x zW%z#l9htZbr=G zCvcO=6D-6V?aPjnHLAEiTnGyvkcIekWLO17L>8r!!^}0FIHbKlWN=Zx_K2ZAhBo!e zg5OGdwC+!IG_xetgadfCE7}?*#mQ*nNGzF*Y>PF+TDX|HmIR)UUDv%lk%6~~D(}>|Rq>FAT|6$ce_FA;gA%`p zo5D>$s->9dzzFf0%x#pY?u`PAb3KU8Dt3i_AtN&b%l{WPd;*onSz7^xA_ffT1hs^?`Ome&kDQlp?+S_bHvl=H zv-2N+7{C>Tz|6lFpWg23(ED5KQQJ|`xw_IktMMrxUui)ft`RWpzn}+>PReSc>f;xb zP(q4L<(Hfsn4X-B8y+Evd}ILr6^k1#i49>7=8yaK8y4pWF#T7@D#3)7&Rx@O3&2z_*0GmV*oym*%4R+C@Br_K@U8S>7R&XZ5|n@p~c?){4uu| zKogo102?14{!sTEfWeah#7O@HK%UXD9&n@AsfoT3*vyZHpC5hpmqLKb?C{`VY+pO0ccBrmKDG`j|t%btO?``4>Qlo1pdpE+2jwUUkU8kyKN}g+QjfS z3=l{c#uYyrKlo`XiW;~S0m$6~ZXRJNguFcn=NE3(n=1hEUhW`Z9Yf=H>lWX7FSI|- zk0fhj9l$1628UY!P8Fak0T%(kh-Uoy@L({a-ih8j*WA<$=2wF4i3wN(6O%9GTVw|& zzos;--V5VC-y??>KYtAE%+w4)=Ppyj7wx0NlpLkptLm(c7VS)+yFMbHh#CistPRs;ua5Lr8&T<=>2YO z8|X@(@CR&u$^Bk(pYwpfY-x<|B5nKuHhhh3#wLa>?jMF?YZ-rg zql&bzuYMjDe{k=957`>Q*WG`R?+dilQd4o|fqJb127h6f0e`yNB>AP{D!+f9C)(4x zuL9Bno40-8k&dWg9{@Bf0{&84{Va^^npE$4nt(e1R0L!T^y;DkAY)Tq{@!;}rw(_f zt`5G7B>1-b(RDud;uhmj_oeivMrB80>w)>Fxf9j*kcVeSLhnt#G(@NH$My=t=;^xv zbaoX1=#)Hys{0d)_tqxGg7+D`Y(B9afYzn`M!o@1qy38XuGg#o0Ima2_wf;M`3+yd zj{)k{{{TAxsayR(bF}Nkl@?An_bah?S>) z8vy=pUXi>UgZ>PD4=mm5zDf~~q7w%EVnkmD(;UIS2~NMmza{KHfO~NWtn%$aE4BI( zenPXv{yVbF{@YM%eapLwJOBxOm40)zTI_=Pb#gj-(e6cne*1m9EBW)l=YY)J5v>Rj z479KpeAH+}k7k49}^RqEwso_2#)%a@<#d071K;k;g4Ps&4Vl z9#`2M)j5=AjUMh{#Cu8^aB{n!+13qxY2B(*EgQI8krk0HkmLGv45Me|JtOf;#t!M+ z(a}Y1A!v*n7Z`-Bqu}G-qnzV&@3F}z^!FP#1XA9OMku^DFVumYKjjgaUYVtF&nW@IM5vFboyLKhuM3^g3$hc@v`k(-`9$#)r1;iv9V=nJ z6G-w;Y7w&WiJV^|w4XSp_V}T(Z}KxOQ_eXQKe5Ul-|*Linu;snqd5>X6x4kmIDF1c zSP?lFc7(Lt(eNnFlLH>z##X-2bzf-?(h6r+gGGcKTiHl)Kb$Wn>ZdH>2DM&QPK~^r z$%7A(tc;-)Yia8{>L>rJanAX?rJvni_n<-HS*y3n{<|ITn=YpiZ%}2vd7tH9ILlH3 z*uA5eJm!)*tYzGRW1BdHiE%$gVfUePmzj$KJF&MI{&}QpT@1QfcHDIM>Hy*g&6!?v=4QrdQ ze@jfoM3q!|MOIBC*8UcYv1Xdu@XXUC_Q``0Xu$cfMi+sUg%kvtbe+NvaN0xkkAcwY1j!C_7=T38onrv7j_-G3U`maVF&h$c?VMRjO{P?+}Ml zQgv8~-4P_~LI63Geh4+g@L;uk-2{HQ;g(Gq*vc}Ap`CBA9<;!#Rbi?<#AH1n?s%1% z$~@nt11>D$4tO%t43)BtZ6_+C`3lCd;#zOzLfb>9v4cC@T9-G#yB&e&0Ge_m!CHqd%r!5f++I za26`?QPS>Sbo`5F>r`2jqdE;lf zVUykAS}nEzwk;?IyqxLjK~|t>@+MW^koRpEL_^;ONkyT8zZUmgjYZcmM!Gn#^%zlk ztaCD_3+yrEgI9uK@!kh%(uu)XJR1a`4xg;MrivdH;$?tgo9xy7p_aa|Hmi<%PB6wZ zn1A$&NX+UGrS}O%Kynr;^YV!%ubDJY@{K?k(^VYW-p?@3>TQq|-oqClH$tiqFjQ{J zl@@~P$~f|HFSRt3t_uQtoYQXuUFaper*5Q zi{|EMV&bOlcsWdGE`>g7z>I}D%I zhtc&l>AL`xpu=_C!F9P%2Zb+yZuF7v@!us-3qUAqZy%j<%14|N1#5H_d>~Ip+3@!r zx5`slTfWG7B|6A!Wud37`-&udMJ2tBNrr z$UruLl%wzJIYqH(HSd=4J9857;S;rv^)M63Lqr%GkbrGnriL9$NJH^c-Mm*+jY}GO zYjUxnnkEVeIACo0wd%yIl-=XbWd{zA8sa1GY!7VoTZ*pq_u9Kit~ZB}^DWZbWm@3E zm(GB&+`Oj%W%+|YfJE7>&J=G+s+-+gtO|}TO*DOqa;_g6qzz8a%+r)BfW%5` z7O3>Oe;xD>iRs`+P;C!`AfbuHM_Ad~8Yrsrk2!7MEZZZk3QjVHYRgIZ8zTCe7G3fX zZ{;L$W=}}(A?k=gSo*ZaDmv@462J(&+4iJ-asQcFc%fh~d!BZN7dY_ggn%^HCkyJY z4d;arQloZ*ep7c&tO)kfcp{8;8lo_uIUPpFw$>v{EYo~#C#1!ydYHA-68!+r(WMDf zFGJ$E%THoIBZSu>{+jI=bXSvdhnifSQ{0YXmGD2kbbhX`)6O>bRK%7_(0;eQi#*^t zk9SE8I$jJ_YE8X`>=c&NT+V{EAqpG8il`}z(cthP;^PUqd%&U-zzOJ2JQ%@_$|)%E zE%+Wws&!G-iqr&t&X*f(CU4xAI2an|=Hm%~znSQ7v6@Ta>T1EK7JQmnD<1rsR&Y)36mYlcahrS~_aHr}d4*$1-aU20M4|GY8of@0Pv&{AG0FRqia^-mbyOI>KBI zj;Ke3Wf}d`3Kzvmj#0T1fe~^V4)DYIP_nJS<;4qo?w%J5p?Jv%+s!siavVy%RZmPN zHUUtB&(ds~Xa2fTPZ$PSHAx51XPFIOn&BPYE1ICa9$*&NQqqwj#TVXC#1rw%7Py;r zuG3JNM?QBd97IV5E6lcYqkqlrKf}xi5X-Z5f1~Nqdvd~*zQYcHA$0_~}c}KP)E-$u^ zX*?`1EUSS6gK8_v{W5Ey<-PQ_BbXG1R>I2t%E=(oYzKST^^^;(UuwDi-gsE2;>p60 zq#R4?!ZYQ`2;61D^qTyj?v;BCYjXP?Y3dwmL$FxXRZ z0Ys^OyMghh6gK&I7HnMLpgVSNVZ)vhw&(UcX9QmJ1Sz;OiM#(GyMjm0k^Bj2Mz*s7 zWyJGN41~UE1y}f8Gt7jFy^lYF@zsr|$OLur6rWq(`?Q3WIr-zBRU=_ zx4_}4F_`H~zKoO}(Q)aYwV&^Yi>l|^(7RUV9p;i&8KcH$4<$=-dKgE8)87h-oX{XG z?R4psczGYKC(ksy~BDNo@F%W10pQ z>$RZGCdz|46H`z7L6wd82xZCu!h{`}WoHJwFw)pC$`GYUVqxZ1cR@uKE!Dyfo<-r|Z|;K?%~+{IjVYYJ<3 zWUdYijPT#N>J2@Bo`NqP~72{B!>rkgnt|fIFb&wN?QIKA)%X0&v2X;lzWGk zaMUAEAFS0gJ(O_zDVk0D3ds6o4XbC-$LUfyAJ8L%gPf7y2IMNEIoi)CJ?<*0JW~ixH#B4@wf$&a`Lq;;To=FnGxW>48dS5v$0fEV|fQ7x@to@f2T4 zNLa_&XD3Rs&1C2dJmXYn0#q^zgwk}^bUzfP!zUb*CgGk5(JQEB0zM8T4>SYs{YAFy zAELC~NwXWNxz~J_8}xpM$c>P1h)U5s5t+;VG7R8E*l(~zrA_*S2{}25zo06^%oANV zXOf7@5HN~gHuK`~g(!q|(~iZbBtKf=Cc$`aKuR9u^(D?P7(+Co`D@ zWcnjNY#(rif4qk=aX!1}`_An*W?5DOb^G9h+pYl!CzPIZWo9{Goy<0 z&{~Rdf(2Bs#3vwOzi^O{?13mT3T;pVe%uC~4T!u1wIBCQARR#lci3NFB@M0PquG{v zB0k}2G=hIXayir-n_x%SFw-7o1gB#oDYR`S4%TAQvAxC6LQg!XP4FtaTqi+5nYLtY zS2Nh|M!L~z2S9J*$?|9wLrVFoh3=z;_Ii<+K@^QLz}uNiVoMY}@MKbHPt0?HqMQ^V zJkU)~gZZj&>jq2=bv_fz(Za}>&*u`)q@rLA)AI!cf0PP8@~6*1pLbeEOQc}A%>x1fxR$#dE`=SU`=sM=uC zfbxZxW1?KH0K>7FIwwhz-{lXbPh-JfNURe88MOq9ei8%Y0;#=ZhJj%Mrf zi#cYDVGLttW@cuFG23J2F;mQrnVDl|W{R1anJJE$W5-#)eY>kC?Jxbm)KXPmqc^@YF=WXY-`fal))dM5pI z11KvH+d%mFhN-Lj{znudQQW%G=~mc7aFf>#)>alLlC}j2NzV%K_VU$J*s}L zIr}p6v6GCWDp7@7ZfO*Rt${t{Z-5lR`b znjwA%-L!NSqN=Q3LXNmbMmEs0^grcXgVgSboessf>&-#g?gYVSkTS8idB#9x=@r zTl}<|wNoe{XcUWTy?;gxxVZ7(cw5jSIMXdL3xx+SX6+3iUk0YSJ zEy`B+S=QVkT&LQ(iHLr#URmLs`xS}SX$0%t)2qWjGef1VQ8!dAfYxE?Q+hjjd!Nl|jQDo`0D33IrOdFzlazTlo9Kk_z zI~LP#OcSse^k}#zs4Qj7M`BD40A3Bpa$iFfye2%`l){jP$OTCIO0XBv+oNbKd+%_J z<}{F)5Cf#rz{D#R=>cn%QCqF}4$Ql63e|S_3Py02maT~yWQ3l*az(5AEva!Tpb@UX z{VZjl+JtDkd>-fR-=xZBI#ywQZw77&UKe)de~8*hKG(;PQkrnQiBF3O2#tAGmQ=7D z%*!lI&G@cB27HQ@#MBT9!h=4I3}V|iu~Z^8H}FLiSj-IV4J`hOS-c$!Yyl~k7j+J) zu`}QV?Go};-G5p;AvR)WC)R6re1D~GR|zD>Ghd%f>zr#@rW%)`Lf;6GGczLWehlF2 zT@&KFEvc_fqE~HDhqR+UTBj>TW0f~$848;i*RgoPSdLSVQ~8UW)U{j?PA5|1VW%8$ zgJjYZvj9JT-EIFM_07R|Pjc-wiTfqTj1<&mmVkjWJ$)lLRkSq=jpPpAr-TckC!r|V zDSfx9zRwEYAg16G-fn57NI0mh76ZFHRIR_Zk!M6Mi<@+$wrRvhs4y$cp;#0zx7%&& z`DaZLq>vkD9YnD+>98yfe1C#Y&WvY;;4(y%8fqk5)>nlgpoFUtUc-Q(px?b0o%R-iUDT5zTw2J!Xz~A<-wUvyLvR5BF&IQ1%35i+g$aD6;~+`pm2Y| zF|WHQc|1Fx(|lYpb9pWf@B2---TbQbE=mqcO_^+VNe;PK;m`%vH`OElc=5~MS`lQV z%vH*B4CTo!$HI%u16#VOUk2QtS6Ri2B=Bz;o1TcG<88B*NHdlN%1`agM<0nM{57;< zlBQ=LQ(vf#I(1Z!Nl8`Z-8mc#d^feo%CyTts^-E?2=kH>FinP6gpB$_9BHt-sKWy(hYL&^V#alPGSxLVK`24qj7BDs6Ui(lnv<@V@Yff< zy+#B%%7x*%3q6)Rh~*Wdyx+fpCaW7gtMTgZA94O>TJa8OdnzU^neYqvz7>un`R3>Q zidGH>rCc~oP#ad1rCd;cS8OofW`mEEc~Y99(Tx=8c@pL7oj=W~`cNo>7Raco3@%{S zrwiHC(n!vfgs*bpLo)C7q2gG{Yx~*bgn293&&TywYhahtg*H_BvnIc z#Ts%DwR5fC*{rExWQed%p5l)2KIJMRTBx@D5&Y8=?d?yfn?+}?un>LqhY1?PVS9m^ zMgs$@5ZJP+=gUW}6S4oZE~77IK0=-!B|kUkSCxKwSNE1mh<##Ap+^!Pk*EmhG z{~bF82_tdp(k$^Krw^8?Hf+u3W9y-I1)&EdC0y>cgnc;oiQ8XU4^SXT0gQ^@|}wR>@CgJ7OQ4^!@j;L6+C zXk7Q^>*i45&Q2j~KI-D>RqHqpEE^f|{xw?+sE*E0G;+?Y#TNB}k`DGzgvcxL4M*Sq zVWsu=7nR~W)`0nwtL-iBDB7elu&V6t!=IOi072-vCYfN``&m+Y0o0wWYpEo#FXSM( ziH@_FbE#HtB)6H_FC&?s*7i+xuC#q*nV3<9{aMH8G!4AOx=_w>mFX=dlJAhJU{+Y< zZ{eTCn!h8MaqHpNR_}O%y<<1#$xA|O$|RUwyknKoh_5LrFi4shpLFb9Oa4K6A9or& zy8>^1_^8ViZwkDq{ETIlV55a3paGz4EH7HTi$sN}NH@JGb&ET@GT>R7e)A-$ ze6nn%bm&;DHS>5Y8ZjwyoV$fKB~7Li#`M9xcA^%9i?ajV49PMSe-+_$wjs1uM2VJU z)nz`#DmTC%Y@b_9Up3O5#zubGexRJXuy3JMl^OSpu(apVr;hBsE92dKl~A;~ctSoo zjwjRG3!`~Ml3Ailw?S}h6V2R_e5L)znprYl28+lVox3SU96lUO3XO|??Ye*!*G#tL zwQSJWrzRzsEvF+&()ge^B;7;Mf$VNilp*-7RpT)7C>fzoHTeMmE#@FP=+Q-yMW891 z+1YOYJCR?)D{?9oh6$Pi^I_B$7`SXS^q0AgmWq6?pBkmE#ht*Z*;+(TaN*X0$ zWB8LgDo(R5lob~%RF5_Ha|!@+;>D@R*o-UnANABd zL0_bE=7d;2Rt3W7Iih%E6&9NM1Z;WpW4u(suwa;N&%x;piV(DEeNJTq+r zDAjMvj@*n2Gp1}Ayi1y^3-N6IM4F1kFdbfC<44?1rc9y8A2QbV_XGp64YoX&v7|;J z42N`ALh@`%gN@8>5bvmlJ#0n^uqoCvpA-Mx;Bi5&b)ogRY zhx$}YC=r>)g&(AN(T3lZlXPQO$F@f3$VCPOk27Ap0VbkOGqEtl?M^toMt~o?eIbJet+$AXY zO69h_Nnplze6~eFH60=nr6#C%^NDcgf&etJ?r7?R}+>hWqLCmI+x2{ zr7L(`5Zbo;9}wM6PxuXGhbj2P#?@h`eBVwai%{mYD;)`Sp^v$y!gjk)YEZvkmHgcx%*{Y)189^u0s6LS{eH(%L_9m`-EA2vy*e6EACa zjph&XHNCDa1-AGO#+ChjFo~sIGFtYRzX9%#LpMr&K?Yf<1|xT?&Mv8Cr-h!WB6r0M zLOEZ|_{iNQOoapCgsd29e-gHb@A=RUjKM+HF1m_qwc-Z9;5cPgZ!C3*Vem=mRcXAW#)N)ncHOxX?MxCGZskrg6pwz0>{hJ|o1TxrL^L&zC-$qTV_rgrFzsr1v zksVS3LTC8+Z?thV!bqxY#K)U)H2tGGsM-`9TBiGt9=2sp14TV+U=}GXbGvyEt>!w| zuUg?6c&Q0M9PRT$ML^1@wu z)k$pueG0zaNY?#ZOs2f=vUR0XLDLaP1+i$nB)ZJcP%GC-ptr6?;=xV!#4>7oSMJ9~ z$L?2RQyIQh?~vxte|ef1af!GfpzLcUkdTh8n*7wq5`uBxxWtC4x2eP?}#|Hi$|XVVz9d#wOznfAZ5M^AHKV)VSDaJtpo9sdvB=D9&1w#v)(MQy@X@9@?!@Pn)UX&0tM- zC^4r0&E&9IhpPm_l$3?Mjyyd`lk4=i@39;UI^^~AJ2DHT(A_U95DDtL7;j7b4Au zqNwYjcuvY-Prr`5B&2$OU#EkqnLH0qVuWHruhv3a<Rf{MlG+3 zHye7C6Z{=wQ$cd9Q^Y-05SvUr%fW>UsQS>Og*nnS{Vhq)+HN0j6j&%~Str51LROA==URm+x21 z;bV)1T#M~;X3Y`%21#qKh+_cxTHF|SAso0$Yn|Y-ei_%Q2%B`0!TySo_a&Jxn@%f4 zI`!doGq31^Sb11@SlC!O*||A5 z=vg?a*;%MRaEgxR{~bib#l*=8Yz}0WGO>ez5t&sqBz2gi-0bX3O&lD+EL6V#>Dl1{rtdx%uT`C9Sr<%ii=qSY-(-dKnt{W zGI6znfK7nz|7SQC6B`p7EuxUnzvAg=YJv=}~exqIgq z*AE&*E+&$XOxNzz29ln{pT^4)x5@>7B8a(s?*O1!(PS8BT8|MX(Xq@Fr73*mR5ej! z2Q!K*4+VTKK{C!angsLZWc?qjNgIhQB53gR_Ps!bQ^I#f+` zyhFx9fHBcFhL`|EYP~N`n9YCqS@`4xG90%ijY86E@n)`O(2(cfe;<(dwUZfNm}n;% z+Mgp&^QcOXP2Ly!y+ePRq?7h*X z_D#e8EYSGeH0U`ewQcmrU*S$6Y#!?b$6Qoul6bP|3T#A0jif{>bolE0uHq&+YZ8M! zThyzvyp@w4ZH#t>F>&c&gNbqbXo^xrXI??r>LFSEbT=c@kNkOArr9#e?Bk6n)!kub zZJDz@iL|6i1{t-K%Ch@7=78xlG7=H5W{7!`bD3ourwHbeeq#DY{@DBGv0}btroD^T zAI}a4yu>sqx)-Z%)$c0SSTbr$+nP30iAx;aTxqCdZ;M>7HMzDKPst`(#1Es93`?GD zf~^mza2(8P1m-$pCa6oZ)tE?2^VC8Y4X=P~4e)o@2VX^bTiY{)@G2t1iPp6owX$Y! z0j8m*PwQ9B`tc!4b5;+aIr&8;1x@lo)X)nTOH?A-JXeKV7ZJTie38o&E^8@6e86Zd z5eRHr`@oi{p$IF`nz3)X?wlIS7~U9Bvlk0hBqpk@4ZGuYWX0udBPlREp$8=(i3@cL z$*e6dS#l#0EhLv#xlRhxv$P@S*gzd3Q#7}C15BBjXCzVrbnN;3LZP``J%2W5HFkCMt&xdor1Cn-7nkQQ5C@Nn> z|2lK<`7+~Bl^g){*Vso)Ivg(!Dw=9fg+G^*Q?k{7;3w!i9NH143vd41xwt^0Oq|*X zQ@k9E<`3%#l&Q7h8?&s(1_M66!7b3QD4yM`bIDQW(KaIH)1bTPylZv;;h7g$k~`(D zL+-a!<>%y`8~nUGSfkrW;a}iaC93!ezt{06X{Q+`B_*^Ss7ouFp#`U#-q{|x&Xo}1 zfXZHY52H*R<61q>X1jxK-QoE?f0oY`%dV9zW8?;VgKUT- zaJfzScEjJkk=*5BOp*S@CAmp^!}*%C|2wR=(#&V5_ITk1`C@A;-H3cS@8#t4dryA& z##h8Y7p<=wE@8;eGkoyJjfp#VuP&?^Mt6UOCM$1$FSzRY*DMFa;-^TX2x8F&rY_vv zezDfrVj54>?wxvp{@efc!03hh-G?7e>Jl?}&guDa$~rP|CtjCt1W1s~fYpi`xP=Z? zxj~A)g-&>b+nlAHRd&(iO@8A@)a8xa1z$Q4#m)Tr3a)K@g_b(yH%M*TQHfWqIotOl zzrHgc-|+2i-wB4p5;vFqSds#A;v;k~7td%q2m!!Oo@oPkZ|>Lsl|)Gu&Fj zB7>KWJPi7-j3H|7=<`l7Dzwc$7ZV^R?M9_fuTKlGcFh>QhqnV?nQ`x0=zoO~z^D@o zX$75xSAI_&j(}9Vt;+M1(si}Pv1Liwps&cUgK{B!&O>Kjm<01+#6L~)>g`st&;Lfp$5CVdWE3# z@x1gLr5}!8zH%n?`^2Gl`|qwSVS$=nW;NKs&BlY5rFUIULk%B>9JF6+=qVNPKKJZ0 z>{>qeJ~HgfKKBDM>|8$gNV4oLKKJUfYNJL9msFa{E0O03f=>Y=>v!7I0wFG%acM`I zoEbCzGH}DhG0(nnaNf?byI7JE6&WNF#Oz%rco1_T9lsueySykeE2U2+ke)?_&3+kQ3G2b zGRr!cgFS&D79bak0V1=ywKw>qhsdlA1hE3yfvg|b)EpgMft=hQTt)3)a0^Eu=fBwB zzfL58AOR_MZZ2^tHeNO!4lXfH7I6tS7D*Oy9xgUs9#$@HZVn;fe-HVvq5yWV{9uP4 zL;klS7Wh9PI7G98N@6DHp?eS^Z1j{$pc4+v+tK$~wf4`LSpazep!HDBPWF`6UKcjz zTIudE$CPbMX8vnp;;%T0@!7iMq4azxG$*tfCm1ZAFgk&Lti^m(YL+m58ep(`WlIFW z(g{_uEkNE%6i|~7ZE&hPRl7P>ElKQV&*-7by*y*2v7^^3iBfgpvshitW@Ck0S%#so v2Ww~o2kCqh6gas9`D{a@BmV!d0^(}o;_CUqfDw6FczJjcDJdnDr4auYwr$Bt literal 0 HcmV?d00001 diff --git a/assignment-1/src/descending.asm b/assignment-1/src/descending.asm new file mode 100644 index 0000000..0445108 --- /dev/null +++ b/assignment-1/src/descending.asm @@ -0,0 +1,40 @@ + .data +a: + 70 + 80 + 40 + 20 + 10 + 30 + 50 + 60 +n: + 8 + .text +main: + load %x0, $n, %x3 + load %x0, $n, %x9 +init: + subi %x9, 1, %x9 + addi %x0, 0, %x4 +loopi: + addi %x0, 0, %x5 +loopj: + addi %x5, 1, %x6 + load %x6, $a, %x8 + load %x5, $a, %x7 + addi %x5, 1, %x5 +check: + beq %x5, %x3, loopout + blt %x8, %x7, loopj + subi %x5, 1, %x30 + addi %x30, 1, %x29 + store %x8, $a, %x30 + store %x7, $a, %x29 + jmp loopj +loopout: + addi %x4, 1, %x4 + beq %x4, %x9, escape + jmp loopi +escape: + end \ No newline at end of file diff --git a/assignment-1/src/even-odd.asm b/assignment-1/src/even-odd.asm new file mode 100644 index 0000000..08e7a4e --- /dev/null +++ b/assignment-1/src/even-odd.asm @@ -0,0 +1,13 @@ + .data +a: + 11 + .text +main: + load 0, $a, %x3 + divi %x3, 2, %x3 + beq %x31, 0, even + addi %x0, 1, %x10 + end +even: + subi %x0, 1, %x10 + end \ No newline at end of file diff --git a/assignment-1/src/fibonacci.asm b/assignment-1/src/fibonacci.asm new file mode 100644 index 0000000..797756a --- /dev/null +++ b/assignment-1/src/fibonacci.asm @@ -0,0 +1,30 @@ + .data +n: + 10 + .text +main: + addi %x0, 65535, %x10 + load %x0, $n, %x11 + addi %x0, 0, %x12 + addi %x0, 0, %x13 + addi %x0, 1, %x14 + addi %x12, 1, %x12 + add %x13, %x14, %x8 + store %x13, $n, %x10 + subi %x10, 1, %x10 + beq %x11, %x12, endl + addi %x12, 1, %x12 + store %x14, $n, %x10 + subi %x10, 1, %x10 + beq %x11, %x12, endl +forloop: + store %x8, $n, %x10 + subi %x10, 1, %x10 + addi %x12, 1, %x12 + beq %x11, %x12, endl + addi %x14, 0, %x13 + addi %x8, 0, %x14 + add %x13, %x14, %x8 + jmp forloop +endl: + end \ No newline at end of file diff --git a/assignment-1/src/palindrome.asm b/assignment-1/src/palindrome.asm new file mode 100644 index 0000000..deb75a6 --- /dev/null +++ b/assignment-1/src/palindrome.asm @@ -0,0 +1,32 @@ + .data +a: + 177771 + .text +main: + load %x0, $a, %x3 +init: + addi %x3, 0, %x11 + addi %x3, 0, %x17 + addi %x0, 1, %x15 + addi %x0, 0, %x17 +forloop: + divi %x3, 10, %x3 + muli %x15, 10, %x15 + beq %x3, 0, end1 + jmp forloop +end1: + divi %x15, 10, %x15 +forloop1: + divi %x11, 10, %x11 + mul %x31, %x15, %x3 + add %x17, %x3, %x17 + divi %x15, 10, %x15 + beq %x11, 0, end2 + jmp forloop1 +end2: + beq %x17, %x17, write1 + subi %x10, 1, %x10 + end +write1: + addi %x10, 1, %x10 + end \ No newline at end of file diff --git a/assignment-1/src/prime.asm b/assignment-1/src/prime.asm new file mode 100644 index 0000000..d95d6d4 --- /dev/null +++ b/assignment-1/src/prime.asm @@ -0,0 +1,23 @@ +.data +a: + 20 + .text +main: + addi %x0, 2, $x3 + load %x0, $a, %x11 + blt %x11, 2, notAnswer +camparision: + beq %x11, 2, Answer + beq %x11, 3, Answer +round: + div %x11, %x3, %x12 +check: + beq %x31, 0, notAnswer + addi %x3, 1, %x3 + blt %x3, %x4, round +Answer: + addi %x0, 1, %x10 + end +notAnswer: + subi %x0, 1, %x10 + end \ No newline at end of file diff --git a/assignment-2/supporting_files/bin/configuration/Configuration.class b/assignment-2/supporting_files/bin/configuration/Configuration.class new file mode 100644 index 0000000000000000000000000000000000000000..9ddf3a1d07950b6d0c153bb26ec93ee8a1172f49 GIT binary patch literal 4154 zcma)8d3;<|75?rd&6`YbX**p~EXXt!nq(TrEGKmYY#f9QAbo0+^UE&b=6`|dsW+;h%7 z-*@gaFFtt&z^m{t0}+AMS=Sl0^A*qZZP!Wlg#QdQ3M@Hj9yU`2)5)iH9yn-aeSzj} z>03s!ZpGnP^b0Ih{{_>xoa|A7OVpodW$lvZX3fHgJ38Wzd2S^?R;qBrl47Oc+oghS zc{LmH&{W;b+R)^=tu4yghwa?7sl~Pbx}8LA=G;b>rZ?ClPNjIj@^+4v4B4B;>am;I%HFZ(ZUB zY-0#{%ddsdSI~7W(83VHd#VdG*@Hd}!(4-i$o#VB?PT-N7#u9vW#glCyK!YvUL zTw;{fk?2aqkVaB{_DJl-kU*1JDp^iWpfg-z0l6`I=QxX3l*X{cKHMr0_1(Y`X0v*~ z0Yz2;AH!{Uje%FQR`Zr)d3H9HvCCPB+p&&hpkvf-Z*y{e%MD_PToB%=;N6VAFQl=LK2F8yKB+=e2c-G1vsS?OR0!xc<3j zx}!M6QtMG+q!hsvqNq@0u<;aItEfwAKcs6h0%uO=0dl$+EJZ5M50{R`_%3Gd< zj|!8n3!Zc5Acy{DI(S540h*#95gS!TQ`4`NFx2$x1y=5<_okhrL-o$2wCokb%NGB^CvvcS&5NRNuoW*fx61 z?3fkB`vevRJX&o#YWoKy76+R?B(X$o`Y_eDg?o=u`-sF+wfHe6Y|rc_q!d0O5y!G9 zKBbS$=_A$rXC#&f_CG7JA{ad?u`(EaUZO?q`l3qT#`>nmBvu6qUy-;t7@d%KSui>& zv082V8XXN2xf8`Hx|f;VVw4+G5|^M!;GzJmiphiWZpgW;{gpH7rp8EQy+(ytU6u)K* zYfboOUNN##4KBF)z|^F?W{ukYTZ!M{_Y9c3d&bz6Rg(B%ST(EL)N{8GFW^rG{>X%c z+l^Y6__K0^Wb3QnVY5)-EgAG8D5@q>2b(|3L@oCPHxTozGC{6p7{gw-;$}tHYas33Y zPA8{u9RZH*0*_*KhI2QbMtXmI@Dz6OXZHkdnZ*8N{EjKy89`=!!xVB6d<#8;@q?X{ zC`_Vs5{KjC_3^Rz>+0h-B;)s-Z{M3j``#SdcW*NO*7NOqduZSNp?wb|`BW+@@*i6d4ih5U5^BN>^Ew#F^ zollklT#sRF<-6quz7MwH81a1^y?6k9c!=-7M{pyaKtE37W_+L8&y$s2KnDNDPW%VE z@FI4L81{&j*ehE3MoVH?Y{ovZm8c%Tez6a?i7cN}1>7zwxI^5-_tO2iQ#=S$Jd6Y4 zG33MqEb$cII%kpBRlJA2oRx|vH5ek|S)TrNM!Jwud;@0~+hR7gZ?fHw-Nd>j;HYh>iv*eS%%2}n1G0ZXAFie4BXVhCjp;D0Z4E*00~RH zV+zksSNPLt*El#!9CS?J$MNU+Ay|Gcp#FZvPXLV&B08t=8vzBa03}oSgTUkTBDkjj z@P`;_fe|>^f)X=-7c=bX9Bfu-#eV!n=Rl4A$~f5cu)7*t4+-sWI<^5mQU1<&8+DXX Si2q`X!3U(kKWHO@fBqi?nnKM0 literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/bin/configuration/config.xml b/assignment-2/supporting_files/bin/configuration/config.xml new file mode 100644 index 0000000..002c97c --- /dev/null +++ b/assignment-2/supporting_files/bin/configuration/config.xml @@ -0,0 +1,43 @@ + + + + + 2 + 1 + 1 + + + 1 + 4 + 1 + + + 1 + 10 + 1 + + + + + 256 + 2 + 4 + LRU + + + + 256 + 2 + 4 + LRU + + + + 2048 + 10 + 4 + LRU + + + 40 + \ No newline at end of file diff --git a/assignment-2/supporting_files/bin/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob b/assignment-2/supporting_files/bin/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob new file mode 100644 index 0000000..2fec9c8 --- /dev/null +++ b/assignment-2/supporting_files/bin/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob @@ -0,0 +1 @@ +{"name":"Local: Simulator","url":"c:\\Users\\karth\\OneDrive\\Desktop\\new\\src\\generic\\Simulator.java","tests":[{"id":1662603879409,"input":"","output":""},{"id":1662603899098,"input":"","output":""}],"interactive":false,"memoryLimit":1024,"timeLimit":3000,"srcPath":"c:\\Users\\karth\\OneDrive\\Desktop\\new\\src\\generic\\Simulator.java","group":"local","local":true} \ No newline at end of file diff --git a/assignment-2/supporting_files/bin/generic/Instruction$OperationType.class b/assignment-2/supporting_files/bin/generic/Instruction$OperationType.class new file mode 100644 index 0000000000000000000000000000000000000000..f719b5b359f1e16e6ce4ae253690d48826cbf4f8 GIT binary patch literal 2473 zcma*o>sK2^7zXfXNgyE%Fx>CGVg*`@XfIl5r6RRh3fdHGtX4N+OM@Yyy9pMpR;#t% zZ}onwmw!OFAMDX%kDvXcJU;IWw(*>Lgb(xVZ`hg4Zswi*`PZ*E0PM$)F;qC%Jn!W_ zKbskx$OlEglqqHl`QGUz&v)hO_{x$OL)1atg1hVv=G^@J;CQ~Y=pf?G%{kaQ`M<-5 z9YlF=mP3M4nqVtfEaeEcg1PK6!B*hrIdhaPQBm;OQ}Ct#oLooQ3W8jbV7m&LE6C|w zfv@n_;L3k|m$yZ81(!2d2E~H!af*e-CAMkrth9OQNz0^>^t`m5tfFRoYUXI~?7_*I z@uY*^lk0li_(&#~&1Z`TI7?suEI)XxFz3ZlnSg`s20L(*Jt2o4z32#nyMff3XS9x|vE z)CnFos1wu+9xA8ATTvxfZy5CA4hQv<*}OMZT1u1HW1`^3a$I0Z8 zJWbY|Cd*Bem8Que(`0>Vva~c=Rhld)P1ceo%Se+Iq{-sZWZh`8WHebVnk*De)`%v{ zLz9)E$)eC?J!rBNG+70jEC5aJeNAqAP40M2Zg#+S%2wx-M|rkv!<~E&eL%$(ntv6+ zZ*WqL{gGcVa1A>ZcSjXNihC;+yA*q>6nho-#}xY%BXPxk#RGQrzERbKcJ;6%ERL5b&YD z+oigodc}6DE~;L$J*rD~!|(ilA|ZArQ_&DZ$y8;CUCC5ch`q^FEX2NKDjs5gGG*B{ z%3$9ZgPn&M)gdMri4c>Fnh?_r6XF=7HpC30F2o5&eTb6`8{!nBA%x3l3^B)O3Ng=U z4za*!39-m%4Y9;%3lT8dLo72oLaZ=4L!4)Hg}A`z4snsu6XH_x8ZQ4V`wnlit>R_` z%keGkkzW3Yu5M5av0SBKV*}gyX5PO2Afpq+@Q&LU;RCV9*=Qk6671uyG$ig@tO>@ert-`=@%`S-uS{sFLp z-55dw<2BvXEu)evnJwFDS8StU#t;!0eWLxOPSjjEnN7-I^~V?^LW*)a93_S1dcdZ_K!iI^-mDq4L{vkdv} zE=KGhjF!OUF^4B1WErdJ_KxrK8L%`AflCU85apg$|DH&?B&kLzKam50`Lr4o%a%|-*HOSO$CZnP4aX5cL>Do#;$D{W=&v%U(l=5?rI^1TLM%5<@L5vuj*DDAG1<+ ziYp1^aa)$ir;L>DcTxA`jynnpSZ0xF&8BWv1>WO%_HA~(3vsXv#jq6KmBKZFY>@Rp z1F0-Zp4;O2ZtC*pwQ!9m8)oAfa(+=hA*MVva&bbuG027$xC~y%|e4Z4) z!1V9@qgOltdlzV6+Mu}mzeQ`OflT_01%mI3345C0U#+q$mKwg1$^L&Pk^NSAXf=8GXO-M zv;;{9f~bCw*+7uRU=Y<0GDncq01#Pf668i8NY)Rs5D1bB2FdzCRDxs%fXG^xAiT1C z@|Z)yQ_{5SI7CqH_HPxwCF!Dq>p4nF66ri1mPdCD_a zJ@c%b-{<}gzIc8nqY}l(4qc-Ar#5oLF7DY-90xxGlk>}IP`u&QGi9aE!H>cNT773a z9D^m*t>Pef&32s@o{)#-FuHq{)P<`R40Ej-3;Ji{`6WAAv4b&A+L^}EgA*LN@B J8@@;6`&*PkBcT8Q literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/bin/generic/Misc.class b/assignment-2/supporting_files/bin/generic/Misc.class new file mode 100644 index 0000000000000000000000000000000000000000..f0604acdf63dc95b84719aff9eace41ddfe80e10 GIT binary patch literal 535 zcmZWl+fKqj5IqZp(ptHS_q#8^gZ%)M#28FW>LtPOUdjfS^kTNf=x6DJ8Xx=sKgu{; zOn~?@v$J!~nKSeK^Z5nf6h}HT4AzK;Tnf*=60xU4V4l@=*-V- zGgKa=2$Qaqkvt2B-6ugK>kVh-qn8k1)Nb|-R8Z4VU2xfZjuReOSV5f}aw&;DC5yiq;fBd6_B$ sMU?1AkvpjvAzo2#yeOu@b0YY#Ng!mz#Q}+hC5umY+jW+79cep~{VN?0 z5RJrVf0Xgun<|ab*@xbq)AN1(&N*Md|M+|b;1yo#m|)0sg(F<6T|7J$E_XWF;5-_h z3LO!K=@Wj&i#B(<#i}#tF~r}BuI2f{Wmv3_L6;dOYrUT6Slky3(K>Gln_;SYaJ-*w z?9`8|Cd1OZ|4_s$ZQF7ze~UrOJ5lw(0Y2YSO46#a3lFrqy<(j^0Io)zC z-@})Cq z-wCrnaNAs)IqJp#v?nYHG7yC+e+6c2|GcrQjY(__zGtZIvL?jbfqML@VLx5i-p;TH&f$k$U#E%q1SKexx^H y3H0ZwjO56p5O5TzM)D_8tZ<2yZ(#q%MX;tAig>2Z5}r#W;ThJkK{MV|`SqVrxA*P< literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/bin/generic/Operand.class b/assignment-2/supporting_files/bin/generic/Operand.class new file mode 100644 index 0000000000000000000000000000000000000000..47fb03a4e10ef7eee7d98bd23c91a23232cbf7c2 GIT binary patch literal 1565 zcmaJ=+fEZv6kVq+y-v9lC?Z9mf|MfED=Ie;6m3!<5kg{&57YLf4wklQrzHN3FZ$#I z8Yzh;et;ikTxU9lGA(_WbJ=I@wb#DPpT9qU16V`a2bVx!L6&6I$ffowvZ|NzK6nKB zkMt8gRn$v`)L!;T=1hT5x%qzZu_6V=GY+?D+g&}c2=tuj#X4~!Ef6f~Sy?=68X}ns z>V30nlnO+9SB;Wkt_!#mbB6++t#V!l;YOc^5HxDc7$vz|KhDbPfu1drH>CA0NxSp_|f&JFJaU-)7w?=4I87d+hq#AX0dsx;GOf z$C8Fym{PXK8lGU89oH)rS;`A6bW+}yj7`4c$12&E71O$6dMXfO3A^B*5&ur%msquZ zQ_p?a(JS`61ozAJYEEt&YN9lIJQh`AyrxV1Ew+k!ttL5Bp-aOP+LbkPN2+?>8P?=;!LSjBX6@te}c4fer+jR64tI3EhEdyjooE+*yvg}9L@z=IEo(mm4pgyQmASCwH zA!M+lkQ1kRwVAM$Y@6))0k-!!ivP5LShs$euWU# zStW#XZF7C%1gN&867A9 literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/bin/generic/ParsedProgram.class b/assignment-2/supporting_files/bin/generic/ParsedProgram.class new file mode 100644 index 0000000000000000000000000000000000000000..53356838c70a91d57f93dd185dbf8b3c5415b520 GIT binary patch literal 7531 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 literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/bin/generic/Simulator.class b/assignment-2/supporting_files/bin/generic/Simulator.class new file mode 100644 index 0000000000000000000000000000000000000000..af46ed64ebee84330c4d47fa3c181574fe1ccc85 GIT binary patch literal 7217 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 literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/bin/main/Main.class b/assignment-2/supporting_files/bin/main/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..1d66845c85235f923982794e4651a667a5f1bebc GIT binary patch literal 664 zcmZuu%Wl&^6g`tTapJh-QJOw@r7tOs6fCi%r4p*zRRW7ZHeF5J!JX9hSmQB*ui+b5 zQL*R;@KK06X&@}Rxz9Q0-Z}Tz@1J)7-r&$hiJ_iwnFeDrE*yr|oPXv)%+n}%Kbwot zFjP-uD$OZFxqmceaL&|~@K8qGM+H@e=18XEU6IU${=jFkVCalg$m1#3(&o#eW3FY+ z&=~z2cuZtAVd(ZRN2|dTqh%T$A5Cj$Gkh#^9*NgI+wTqMT=z~gZmx$$*<|=h#^Q8U z;(0ETS^RaFX%%Un{MS;8|J(yS59`=)@tDDnL@KllgR#s*A6;xRv@_bkoNKN0+w|)E zizFE~`VXz>VH;0e>=5QJ&qO9g%#G4Mo?5bIE=-Xvt5T&F^4!M@+p8`2CD9zNBhqL6 z0VNpLCWePMW1cO=^d_p%p}3&W(+TbMURr&y3px{B7bsCg=OOD-7LaG;D}x`XeP6Ua zvbGI+&>-vIKOnzGSsjniq>2S!F35nb!CmDWYMs_CI)n17TPiqYpIN>#EMJ#Kf}$$1 dGzi~D3!7wD{9EYJlEB^q!x}VVpTZIj{s36kkg5Ox literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/build.xml b/assignment-2/supporting_files/build.xml new file mode 100644 index 0000000..f8164cd --- /dev/null +++ b/assignment-2/supporting_files/build.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assignment-2/supporting_files/src/configuration/Configuration.class b/assignment-2/supporting_files/src/configuration/Configuration.class new file mode 100644 index 0000000000000000000000000000000000000000..469528b8309b14926b81f09f5b42ec74058de455 GIT binary patch literal 3909 zcma)9YkVA4760E&+L>%_NjiPdLcvX2Aju}IZLO3p6q0Q!3%f~aLfTR>OlEI3)6C8+ zv$JV}PY?xPh~NVe1x0x%K5C_HidGa9#P{pFU;XY!f9kn+U$faX@*#U><~;6s-Tygx z`#%>h0yu!bM-f4rhIWoMSj*6T(wsLFj_KwTW78*v6)>#5$#(7F07F}E-=qeefh!@~ zOB}Kt5ru}R)b3>1)SGGOj|aZ(=97JsQLMvd8oD^Tv7Vt_=mw6B*u-FvnPo>XT=Pz> zk(tY}MZ;E(D{v)4&;RwEVU3E4;o534s(DKGWjsHhIJL)0pt5OuqhipFWxHi=>vc5B$f@gCVpJTF|~+g2iLmn??$>huxc_xvF@H?m*{I^Ihi zIh46e=5HUzjo44gqbyaEP#RvGF!Q5kff}bj>_x3Dn=&`*6-*_)_s+4pS<27wVrYu1TiF zk&{d##H>0b*)tq@$=(rSU;1pDqC9BN+k{I}d5*)8%Ik8KZ;ex34o`BrYMjuK_i^}= z7pw6ueI6xO&+M{OrZp>c%+pDu<-)Y^$7V9ND@xLb1&&2&Z9U0Nxy!j9U&;L<$Cs*(z#qpdxehuod@u87V0ZdtOiqe6yGp!K{}nb*;s(qj(cWDou&tdpV6;m16>rqiam&X*`qMoQ + + + + 2 + 1 + 1 + + + 1 + 4 + 1 + + + 1 + 10 + 1 + + + + + 256 + 2 + 4 + LRU + + + + 256 + 2 + 4 + LRU + + + + 2048 + 10 + 4 + LRU + + + 40 + \ No newline at end of file diff --git a/assignment-2/supporting_files/src/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob b/assignment-2/supporting_files/src/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob new file mode 100644 index 0000000..2fec9c8 --- /dev/null +++ b/assignment-2/supporting_files/src/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob @@ -0,0 +1 @@ +{"name":"Local: Simulator","url":"c:\\Users\\karth\\OneDrive\\Desktop\\new\\src\\generic\\Simulator.java","tests":[{"id":1662603879409,"input":"","output":""},{"id":1662603899098,"input":"","output":""}],"interactive":false,"memoryLimit":1024,"timeLimit":3000,"srcPath":"c:\\Users\\karth\\OneDrive\\Desktop\\new\\src\\generic\\Simulator.java","group":"local","local":true} \ No newline at end of file diff --git a/assignment-2/supporting_files/src/generic/Instruction$OperationType.class b/assignment-2/supporting_files/src/generic/Instruction$OperationType.class new file mode 100644 index 0000000000000000000000000000000000000000..071572bd5549bba56ab7460171052d23133a3332 GIT binary patch literal 2412 zcma)+=~EO(7{;Gr7q(d&X+e-niHZ?0ipDDnB1$k42}Bps)o3y-6I@(oadwwzE_2_v zxy)sb%J*cfidIsl{G5;ZGxA5I^7b>EgcMcfouO8zclAn!$Dl55>*aj?$nfn^&|f~sn^a@8r61I zTxMnMz%mWZWeTN9>&rE284zb+g+?6%v!$F3tkh^=K%9Y98chsLW#?_6MWdAgaRydv ztYN_Qr)=OZjkOGjGq7Hx!wyvB1N-^i8XK9<2mH88qnmy)`urY^&73dJK##^&1`4^N zUEp4g?F@)Buv24KIlw*Kr?ICTi1yH{(H8{*2KqJjM}Z&;9MCve4!HIa_iGH511=x& zfW~1C!TWv!F7=6m^d(Ud?@9h7KF4881`pP2wD~3Cw7mM@}xwzkwmYG%JsucXK6gOqSW%xnTBS&Mg#r z7Yw9|LDrw{UHAmM0N3|5@|bf_)tB|N#eN5k3zsU-9PXM>s7%VK`3ltvTA@~h-3pr(wkm8_*rl*Xp-*AI!a;>0g~JL*6h;+}DvT?fP&lP<#;*Oo z#s|1!Pn7#A$ldJhTFRNqxBq)ad@w&H$5}g)^}W&3?4%cryOTK?*?os?buHn2IjBx$ zr+v3r3S^a7XV-+3bzde|KCPV#j@h1R-x8MW?{$z&hI8Q9Oz+RIv3xzCx=z@pQbgiO-}Tj^ttwdX4|>|p)?~>dJrkShm@8> zN~ZSIT}r#1%P*kHppq?N2hq*`F|Z8<`)(9DFQ) ztN5ACpT{Tvw%v*s3@bSy+Hm5zrDnxxMZDgoXAY;t}8Eg|& zhiDhb=GF<8h1ej_Avy&$AvOt?hu9*h4Y5sNLhKN%2(epG7h@d z)YJCSUNI|a1GHC718tD@nrWmRqP=cb(S~Vnm?qi??M>568>78tT4={;Z<|)yaoRgZ w?yS6mleBluYTD_Wc<(ySF22ffM3?z@g;Un=p?xBj83-|Q~-dcAF;s0SpR^KUSZpxteMm=XQ=BYh_zt@Rn}q_NqXCCi`F*Ll{;Njo}<(0u#rYp*8e! zu4q_xqgl3f(-0V~H_YRPdQvc(hOIROL{Zv}#xRC)ff2K=HB<@Re_GcB7D^#3=^Z~P zFYOaCOkk4qmf38SH3wi+t_#H51fI@;pO0ax7rr8yrenAuw-Oc2vUS6W#WPLtST4md zgIR&86Sb-pOrxyY2fF=;E6Y|5+Y+c|ify01PY(p$hMa}Nx+`n(2e7K0s?a~ zqIrRb|C8TPH+`5(pdV@JYf+&1-+YBqM3qHC22jrr3eykSrdyK&lZ>&a zQhBxaY_(k7QtMtSqHe?+y3EVC?+~v_V}Wzqbibv^w7hDLuODVU(z9?`NIm&M6ODMktprZs`!*vgO znK8+z2A40sg3_Ut4=)g>f7#$y@LmY@$nya8Bth@vgC6QDuP_p%o+5RM$Pe*R2z5M2 zeSx4G_&AI@9;BWj^(>J$L#dNN>N!I5;nc|>^#ZBW#NP^~P6er#2)!LnoeENCNxe+` zDn6lP8pSngWODypeu?-g>YS3NxXCGXiWyD{#|TH9Bgv6!;Ue&ytFE0E-g31xn+|N! z2x;ts8cq2!X6;tTNK&`aATCt!pz7h>HDal%25-jqruSp2gAVcEMuWb zr1PVa+aU?1XZ`NjCkq<_Eo?Hl@tzp{`AtQ7-mg x!JepK*rjO4fCCSEXi#mTM>!P`&)~fmth;Y${xT|r1~}a^t<@vWKJ^8(zX7|=QqBMX literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/src/generic/Misc.java b/assignment-2/supporting_files/src/generic/Misc.java new file mode 100644 index 0000000..0be690a --- /dev/null +++ b/assignment-2/supporting_files/src/generic/Misc.java @@ -0,0 +1,10 @@ +package generic; + +public class Misc { + + public static void printErrorAndExit(String message) + { + System.err.println(message); + System.exit(1); + } +} diff --git a/assignment-2/supporting_files/src/generic/Operand$OperandType.class b/assignment-2/supporting_files/src/generic/Operand$OperandType.class new file mode 100644 index 0000000000000000000000000000000000000000..92d3d37d9caa57e9a5199358b48acb423e4137f2 GIT binary patch literal 1076 zcmaJkGH9>)!18?VGORb| zsn%b>kux4r(F@Za^X5B-gX~oHp>29zc`DHIUCSAirz;2o$-i!31Dg!dise{-m0@L? zD#)zo+8QD{&AYB4roj+@9~yXs9WlCW!(-UW=H?GiWqxCo!%?5+UTRnlKN%0Z+&wkB zHbqMRsh^v>Qo2&h8aSpub}2uc&9&)%m7X08RGiv`7`rl;tXgK!Tcfet6Ylx1MxL+Y8MXh9jtE|NNR9FYoK~_hCB|Bbww5I2Dz%i5BtVu_CN1d-h^K{` z2oa%p7CVH`k+)4&Jo*HSpK$vIi4Wv4CeH@S#DrMNm H^IGaBolW4@ literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/src/generic/Operand.class b/assignment-2/supporting_files/src/generic/Operand.class new file mode 100644 index 0000000000000000000000000000000000000000..376bd1a45997dddae590f0a2c08b361923137580 GIT binary patch literal 1622 zcmaJ>+fEZf82$!I3uVi(fQSephk}QC7Omo;iZm&Z2*C?u;=ppfj_$(}QmGB#^Yw3rnECs$5mK%h}DEs!O*b(CY=#_WPO=m@GB{ zW<#Jk&Ka^k3;h@n=sJ|n0WCzqXooBeBQ210WJx(Y!O>9h#JMe9x7{ikMlqJa84Kga zorzO!6X<@asy7u+C_&MdaxJH+J8Sh$E; zfw6tLr}Ca#mim>gcPaT=y4n|5$h2A({=+tJ*cJqq+t{?Sv>_3Q<-H0s*k80=wQ;at zQuS?Fa;WL6DjmtYz!YOTB~>|^_)R9$nNuwmcbGI@6PAjtQlNq)p(2(k7)XkcVx*)g zBBK8zZK7}3ZE0EFTbH#kqU4r$P%o=h+k|I@v0XLo!4BL|zFt=*e%4^%spn~5*JW*8 z>0Phl_s5Y-;sG8euwrulNMQD)uWa|w+f&(~_(4%uWm$Xm_W~cH&V|5$bd9a=D1Wx- zd3y)7Tx-1|ntu!%V-PtE+xm4x6^vmnTJew~FCAyg)+*PHCmf*H;=XvpY!qCMWZsd! zuNZ%Cr0@wm7no}awp|Pfybw5lI+RaC5HK!qWIH$#o&5MNaD|!b#?CqB-VJ()IM)pS zCbbZ&=f(JaV3P#&cM8O#|gTLTP@V|da#-L9H~vV z_$r0?w~WT5>CO@p@(m*&kqV@}VvruTiaOR%eC> v^SI5E7&_7eT<jAVJ?v^x63Pomp~9Lew{#X1??JopWY>Gdt&( zzka$2U>ILEAc15WDTNx;5_T3H&k5YZ;G`EuL8TD6zL%XXJAox<^JmKrp?1|ORh*E} z*FUf@^{)$#)T0jdX*4Kof+Dm(S}|t@p<~Ylelf6Cvik_Tv$->FR9Kp}%Gv6q>_7C8 zSeUHm?l&tmAwx)7woT~$4-LsPH!HNDm5}xW+x4sxukRn2Ok*pdYuQ@021}M#9GvlU zmBP}5>y+&AAn*gZUxz}czF%0$i?=Ck*IucV#N7%{Y1{6qc&EbCaetmI&MG`3PQ;hn zrO>a3*J3}b@SJv7ie&op3VW*7m*1Uf zwGiLrO@+7OLJ$|`72d8EEWPBU!aKT9@-6+Q-cwkRLQNR?fg{iIfx?GUN#>o?;zb23 zwx`Dn3U=)H<$bJBj9t_((^Xj3US287`jWzmw&U4p_=Jr4?Pv4LP9Y-H4HZhR=SIW& z6FI?ecGS0d8#GP1o-Fhp#d2 z6-s{Sdc|ocTJpJvvxK%MZV+x{#tEZie#kwkNsqVbXvqpgCrsmWLd&B?8#WAg^w`$T z^zcsfc;8c|L-wMaaixsYoB@#h8c99_{q`g1=Fbi5NPjQ?jXz*ZYW7>Cj%&6vYYe-X zwT3&GX~Q07onbFCvtf3hc*FDo@rL=k#r0Tn?IJ2Gr~EX=e&T6 zxWsuGS8$c{8m?oV^9F9=Hs>AO#XZjZcz}nTzv6fN!TBeFl4zq8WvGR-m3pX`GfR8v z0Ovs(p;68;nxh=&JS|dz)21?ooDrR)^PCsxB3zp^}7TxB&LwD&O z=Y4uW5Ba_c?jER>j~rj|Qvly!=wzBlrk`+_k=p-tKnfM^FM(B@;Y?wTkDutu8b0N0 S=CK4m!xtl+yovcQQ};LW;+drY literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/src/generic/ParsedProgram.class b/assignment-2/supporting_files/src/generic/ParsedProgram.class new file mode 100644 index 0000000000000000000000000000000000000000..8103baa2b78b3cf19db090298e5da01b03758213 GIT binary patch literal 5297 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 literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/src/generic/ParsedProgram.java b/assignment-2/supporting_files/src/generic/ParsedProgram.java new file mode 100644 index 0000000..7cc69f0 --- /dev/null +++ b/assignment-2/supporting_files/src/generic/ParsedProgram.java @@ -0,0 +1,268 @@ +package generic; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Scanner; +import java.util.regex.Pattern; +import generic.Instruction.OperationType; +import generic.Operand.OperandType; + +public class ParsedProgram { + static ArrayList code = new ArrayList(); + static int mainFunctionAddress; + static int firstCodeAddress; + static ArrayList data = new ArrayList(); + + public static void setMainFunctionAddress(int addr) + { + mainFunctionAddress = addr; + } + + public static void setFirstCodeAddress(int addr) + { + firstCodeAddress = addr; + } + + public static Instruction getInstructionAt(int programCounter) + { + return code.get(programCounter - firstCodeAddress); + } + + + static HashMap symtab = new HashMap(); + + + public static int parseDataSection(String assemblyProgramFile) + { + FileInputStream inputStream = null; + try + { + inputStream = new FileInputStream(assemblyProgramFile); + } + catch(FileNotFoundException e) { + Misc.printErrorAndExit(e.toString()); + } + + Scanner sc=new Scanner(inputStream); + int address = 0; //Store data staring from 1st memory location. At 0th location we denote the start of the code section. + + + while(sc.hasNextLine()) //TODO 3 loops? + { + String line=sc.nextLine(); + + if(line.contains(".data")) //Processing the .data section + { + line=sc.next(); + + do + { + if(Pattern.matches("[a-zA-Z]+([0-9]*)(:)", line)) + { + ParsedProgram.symtab.put(line.replaceAll("[^a-zA-Z]",""), address);//TODO removed statements that were adding data to the code arraylist + + while(Pattern.matches("-?\\d+", line=sc.next())) + { + data.add(Integer.parseInt(line)); + address++; + + } + } + }while(!line.contains(".text")); + + break; + } + } + + sc.close(); + + setFirstCodeAddress(address); + + return address; + } + + public static void parseCodeSection(String assemblyProgramFile, int firstCodeAddress) + { + FileInputStream inputStream = null; + try + { + inputStream = new FileInputStream(assemblyProgramFile); + } + catch(FileNotFoundException e) { + Misc.printErrorAndExit(e.toString()); + } + + Scanner sc=new Scanner(inputStream); + int address = firstCodeAddress; + + while(sc.hasNextLine()) + { + String line=sc.nextLine(); + if(line.contains(".text")) + { + break; + } + } + + while(sc.hasNextLine()) + { + String line; + if(Pattern.matches("[a-zA-Z]+([0-9]*)(:)", line=sc.nextLine())) + { + ParsedProgram.symtab.put(line.replaceAll(":",""), address); + if(line.replaceAll(":","").compareTo("main") == 0) + { + ParsedProgram.setMainFunctionAddress(address); + } + } + else + { + ParsedProgram.code.add(address-firstCodeAddress, getInstructionFromString(line, address)); + address++; + } + } + sc.close(); + } + + private static Instruction getInstructionFromString(String line, int address) + { + Instruction newInstruction = new Instruction(); + newInstruction.setProgramCounter(address); + + Scanner sc = new Scanner(line); + newInstruction.setOperationType(OperationType.valueOf(sc.next())); + + switch(newInstruction.getOperationType()) + { + //R3I type + case add : + case sub : + case mul : + case div : + case and : + case or : + case xor : + case slt : + case sll : + case srl : + case sra : { + newInstruction.setSourceOperand1(getRegisterOperandFromString(sc.next())); + newInstruction.setSourceOperand2(getRegisterOperandFromString(sc.next())); + newInstruction.setDestinationOperand(getRegisterOperandFromString(sc.next())); + break; + } + + //R2I type + case addi : + case subi : + case muli : + case divi : + case andi : + case ori : + case xori : + case slti : + case slli : + case srli : + case srai : + case load : + case store : { + newInstruction.setSourceOperand1(getRegisterOperandFromString(sc.next())); + String str = sc.next(); + if(Pattern.matches("-?\\d+(,)",str)) + { + //absolute immediate + newInstruction.setSourceOperand2(getImmediateOperandFromString(str)); + } + else + { + //label / symbol + newInstruction.setSourceOperand2(getLabelOperandFromString(str)); + } + newInstruction.setDestinationOperand(getRegisterOperandFromString(sc.next())); + break; + } + + case beq : + case bne : + case blt : + case bgt : { + newInstruction.setSourceOperand1(getRegisterOperandFromString(sc.next())); + newInstruction.setSourceOperand2(getRegisterOperandFromString(sc.next())); + String str = sc.next(); + if(Pattern.matches("[0-9]+(,)",str)) + { + //absolute immediate + newInstruction.setDestinationOperand(getImmediateOperandFromString(str)); + } + else + { + //label / symbol + newInstruction.setDestinationOperand(getLabelOperandFromString(str)); + } + break; + } + + //RI type : + case jmp : { + String str = sc.next(); + if(Pattern.matches("[0-9]+(,)",str)) + { + //absolute immediate + newInstruction.setDestinationOperand(getImmediateOperandFromString(str)); + } + else if(Pattern.matches("%x([0-9]{1,2})",str)) { + newInstruction.setDestinationOperand(getRegisterOperandFromString(str)); + } + else + { + //label / symbol + newInstruction.setDestinationOperand(getLabelOperandFromString(str)); + } + break; + } + + case end : break; + + default: Misc.printErrorAndExit("unknown instruction!!"); + } + + sc.close(); + + return newInstruction; + } + + private static Operand getRegisterOperandFromString(String str) + { + Operand operand = new Operand(); + operand.setOperandType(OperandType.Register); + operand.setValue(Integer.parseInt(str.replaceAll("[^0-9]", ""))); + return operand; + } + + private static Operand getImmediateOperandFromString(String str) + { + Operand operand = new Operand(); + operand.setOperandType(OperandType.Immediate); + operand.setValue(Integer.parseInt(str.replaceAll("[^-?\\d+]",""))); + return operand; + } + + private static Operand getLabelOperandFromString(String str) + { + Operand operand = new Operand(); + operand.setOperandType(OperandType.Label); + operand.setLabelValue(str.replaceAll("[$,]", "")); + return operand; + } + + static void printState() + { + System.out.println("Symbol Table :"); + System.out.println(Arrays.asList(symtab)); + System.out.println("\nParsed instructions :"); + System.out.println(Arrays.asList(code)); + } +} diff --git a/assignment-2/supporting_files/src/generic/Simulator$1.class b/assignment-2/supporting_files/src/generic/Simulator$1.class new file mode 100644 index 0000000000000000000000000000000000000000..da583e3c7d7abcea3e84b2becf0c0229180054b8 GIT binary patch literal 1465 zcmZXTOK=ob6o&s!0=XFnkQ+tb&j85)nHk=Y7=`c%k_2^l_(XeV+DXSwcj)d3;9Ep_ zh>rzZx3Z+%DCNQ`w`|?AW$V_R<$vx;S*c1_P2YdM`p-GH&%NjIzrX(hU<5xF(1Ffw zbQQ4#OFgWd_UHU^I}fAsn4e8e__H3C4u^4=k9g?pAGl~>DEwyApx|LiMV<6DGmHQ_r7tAv*c*=xf09b_qkIw6})*iuMsk%6#qzID)1A9;{41(pYRI@UCtXU z9?1FM6ee}(8cmvkhZW;t989)n>Op$muSX<3wXhZYc{`;(qBn8jKnyRqoV7d+?kQgO_VsyJy+t2krNs+h3n zRJ>+uDlXVdD&Dkjt9aMGr^2@l6@hK32(Gz&sA2<-Vk1UL#_79&Ex3%WXki;>(TD5U&iEbp z7CUjD5kFx7Kcj?)*o8;fjX$vmk1>e9P{tEf@RS+<#$Nn`eLR=_UJnj<7KeCbx44H6 c+{PWZ-epE`NB8*t-jRFwfop-sS>(#+KQMkAApigX literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/src/generic/Simulator.class b/assignment-2/supporting_files/src/generic/Simulator.class new file mode 100644 index 0000000000000000000000000000000000000000..6484c6916b8f9bea7e0c3a5b3d45347ce724429d GIT binary patch literal 4358 zcmai1d3+S*8GgRaCbPRt$RUYY!eQhv2N;7AHA@i^2rSKkB;{1;WOtG*+3c>fvj|pA zTd^RuS`R#^woqEqyAtdYpjvBf5qe=S+uFOdw)Xy~f7B{{zM0w0rrDq7_sh=g`@Q$^ zeD9un>(p}qmg8SOxKN2ri43Qrni*%z)tQ*P`+E|4DAFGZtvC2gM&dE)M=*abt8s;j zTGTOVH0jvy-JPJ}xwUm28AHy&{2YdW7Y$gXV6loT(MSj0hF74lL+jI{0<+&iWfPVt zxLU4#dWw| zpqMdPhMio_U`P}Fl5MB}mMM6b%0|8+(@?o8Sp(`3SeV-!c{;%%$p&4iqE%Mb6N%Y% z^q~o>RIElj8!#cmS*4j;4@bkQPerb3$1hp-CahHv#JY@7TRg01g(~w11?x6SsSXvL zau9t9&Wzb(YNoEBTcFB{J`!(ik3{wEl$l8J(9pGEAG&a(oZby`?xrS5s_n&l6l_$n z37eUEOH+)hT6ddzYpTCrPM$}LM&q1hwog@ddM7inZI)Bxx%85MnE7hN0~iaM#vtYn6WMD*7?NgWHUVv|L!bt+j5W zG!s#=14CpDGuaF*r(IS`B^{BZ$%Yw5OhH^l0=H%Yv+AGak%crln%1OMW}3+22|Dz^ zG$dgvNU7L~+XTw3{7hmYFbrzRE`1k!iBr8*O6*o~JKjeRV-|UGgE|c*Be_$>T~;I^ z=1Rf)>1Sp*f&@$>Wi^rq9~2<0j$n_9d+;GnKwLtKY%+VO=Vj+FN6a4U3=Qem~p#ny+o>ysJI^wFvejmL2%1Sx}48xcuYWf4a)f%!N*iQDJPYfYB~VZ7EkdeG34pT zReS=6?9-lj$_VKW0yeP#Q}L0htHCE#9KojqyrFn(r*4?r$xGW~yyhYP0PRL{xMfKQ#IVeddRh*Ldus50NV;}N{_Tj5|R>5;BzJ}*{ zuUJ*Kc7cv~jAQDx>SDj=FU&eQ)i0>{hJ>)fP&A%o%YT!Xho#CvudcY+&O(J(?+WP& znFAkQ#2FPYNuiPq?uCYW4c^2G&SfT>;=%45p|dz6oA$dZzK8EqG7=-?$SJddQNVBa zj$<|`kL{y?f|qmVFnbx#Z}Qr(M($)rAPF?*JUqR#&1v-?{E7NTVmsqQ zdLy&LHn3N^b}dBEBw9b7JAw|Qt#mCno~WLj-w}@wr4oUuX~>~W5|oIRhy5M)HAh7o zZ>k=GdccD}5~>!6qz8Wza0wxx24mdE+M+Ul%)&Hhx@-h3w!US+Qo-K@7EDP&zQ`2( zLtxI^vvRcTG_WIUxKo4w9@&_D^GZ}DNdC~G{s;=+xoz|F$E3{Wlh}{K`V$bx_#*HV ze#&E@96q@@@?EmFP^^H@In}4A1ny_y+EOrc9MgKnQCfOg=~Zb|b}o9F9JUU*+)Jrh z2v85P&Cw$rlqcT$G-g(hutk@;}SS7d**xA4|}48eLnM*YzC@$~bz)uqBO~(|B(h z;V}%R5$#-b65M{Cz(T(45?~Bnl5;U5u~}Q(4SqNIM=!oIhC6aZ#D$E=NLTp>THK4D z!QE->Z7KA-$8ev&@FYI!qQ0_Ic$hVqOe-A6qs>J$avxm- zlxG}=9XX5e>HjBuW)h*GRAmtzfl<*wm9r0_!tX99mF37Dl=GnK5KOxId8>e5K8l5w z0jX~+Yq6lTGDi%rQW4KHdg!3VE`z90!p)uvkHz2O^}GFEzc-Dqlvak*7|+d9#JyBWjjea#+O@(Pbr zaBqW*Aw2q)zafpUkD|15Q5xSGg-1TWeN0Y{tJSrdmzI2X;w&k0V$Wd-KR2@xw_+x4 z;xD0_+3dGq9T(zGXc*uYJcJNTgt4EC?^C24L4-H>5MDr(@Gy)Eh~eM36>qXDOJIsh z>=g63m0rW mapping = new HashMap(); + static { + mapping.put(Instruction.OperationType.add, "00000"); + mapping.put(Instruction.OperationType.addi, "00001"); + mapping.put(Instruction.OperationType.sub, "00010"); + mapping.put(Instruction.OperationType.subi, "00011"); + mapping.put(Instruction.OperationType.mul, "00100"); + mapping.put(Instruction.OperationType.muli, "00101"); + mapping.put(Instruction.OperationType.div, "00110"); + mapping.put(Instruction.OperationType.divi, "00111"); + mapping.put(Instruction.OperationType.and, "01000"); + mapping.put(Instruction.OperationType.andi, "01001"); + mapping.put(Instruction.OperationType.or, "01010"); + mapping.put(Instruction.OperationType.ori, "01011"); + mapping.put(Instruction.OperationType.xor, "01100"); + mapping.put(Instruction.OperationType.xori, "01101"); + mapping.put(Instruction.OperationType.slt, "01110"); + mapping.put(Instruction.OperationType.slti, "01111"); + mapping.put(Instruction.OperationType.sll, "10000"); + mapping.put(Instruction.OperationType.slli, "10001"); + mapping.put(Instruction.OperationType.srl, "10010"); + mapping.put(Instruction.OperationType.srli, "10011"); + mapping.put(Instruction.OperationType.sra, "10100"); + mapping.put(Instruction.OperationType.srai, "10101"); + mapping.put(Instruction.OperationType.load, "10110"); + mapping.put(Instruction.OperationType.end, "11101"); + mapping.put(Instruction.OperationType.beq, "11001"); + mapping.put(Instruction.OperationType.jmp, "11000"); + mapping.put(Instruction.OperationType.bne, "11010"); + mapping.put(Instruction.OperationType.blt, "11011"); + mapping.put(Instruction.OperationType.bgt, "11100"); + } + + + public static void setupSimulation(String assemblyProgramFile) { + int firstCodeAddress = ParsedProgram.parseDataSection(assemblyProgramFile); + ParsedProgram.parseCodeSection(assemblyProgramFile, firstCodeAddress); + ParsedProgram.printState(); + } + + private static String toBinaryOfSpecificPrecision(int num, int lenOfTargetString) { + String binary = String.format("%" + lenOfTargetString + "s", Integer.toBinaryString(num)).replace(' ', '0'); + return binary; + } + + private static int toSignedInteger(String binary) { + int n = 32 - binary.length(); + char[] sign_ext = new char[n]; + Arrays.fill(sign_ext, binary.charAt(0)); + int signedInteger = (int) Long.parseLong(new String(sign_ext) + binary, 2); + return signedInteger; + } + + private static String toBinaryString(int n) { + // Remove this conditional statement + // if (n >= 0) return String.valueOf(n); + + Stack bits = new Stack<>(); + do { + bits.push(n % 2); + n /= 2; + } while (n != 0); + + StringBuilder builder = new StringBuilder(); + while (!bits.isEmpty()) { + builder.append(bits.pop()); + } + return " " + builder.toString(); + } + + private static String convert(Operand inst, int precision) { + if (inst == null) + return toBinaryOfSpecificPrecision(0, precision); + + if (inst.getOperandType() == Operand.OperandType.Label) + return toBinaryOfSpecificPrecision(ParsedProgram.symtab.get(inst.getLabelValue()), precision); + + // write logic for converting to binary/ hex + return toBinaryOfSpecificPrecision(inst.getValue(), precision); + // check if inst is a label, in that case, use its value + // return String.valueOf(inst.getValue()); + } + + public static void assemble(String objectProgramFile) { + FileOutputStream file; + try { + //1. open the objectProgramFile in binary mode + file = new FileOutputStream(objectProgramFile); + BufferedOutputStream bfile = new BufferedOutputStream(file); + + //2. write the firstCodeAddress to the file + byte[] addressCode = ByteBuffer.allocate(4).putInt(ParsedProgram.firstCodeAddress).array(); + bfile.write(addressCode); + + //3. write the data to the file + for (int value: ParsedProgram.data) { + byte[] dataValue = ByteBuffer.allocate(4).putInt(value).array(); + bfile.write(dataValue); + } + + //4. assemble one instruction at a time, and write to the file + for (Instruction inst: ParsedProgram.code) { + /** + * inst.getSourceOperand().getValue() will be passed to a function as f() + * that will change decimal to binary and then will return the string + * form of the binary. It will also check if the value is a label, + * in case it is a label, it would call ParsedProgram.symtab.get() + * to get the address corresponding to the label + */ + String binaryRep = ""; + + // print operation type, use toBinaryString() instead of convert() + // file.write(mapping.get(inst.getOperationType())); + binaryRep += mapping.get(inst.getOperationType()); + int opCode = Integer.parseInt(binaryRep, 2); + // System.out.println(inst.getOperationType() + " " + mapping.get(inst.getOperationType())); + // System.out.println(mapping); + // System.out.println(inst.getProgramCounter()); + int pc = inst.getProgramCounter(); + + if (opCode <= 20 && opCode % 2 == 0) { + // R3 Type + binaryRep += convert(inst.getSourceOperand1(), 5); + binaryRep += convert(inst.getSourceOperand2(), 5); + binaryRep += convert(inst.getDestinationOperand(), 5); + binaryRep += toBinaryOfSpecificPrecision(0, 12); + } + else if (opCode == 24) { + // RI Type + if (inst.destinationOperand.getOperandType() == Operand.OperandType.Register) { + binaryRep += convert(inst.getDestinationOperand(), 5); + binaryRep += toBinaryOfSpecificPrecision(0, 22); + } + else { + binaryRep += toBinaryOfSpecificPrecision(0, 5); + int value = Integer.parseInt(convert(inst.getDestinationOperand(), 5), 2) - pc; + String bin = toBinaryOfSpecificPrecision(value, 22); + binaryRep += bin.substring(bin.length() - 22); + } + } + else if (opCode == 29) { + binaryRep += toBinaryOfSpecificPrecision(0, 27); + } + else { + // R2I Type + if (opCode >= 25 && opCode <= 28) { + int value = Integer.parseInt(convert(inst.getDestinationOperand(), 5), 2) - pc; + binaryRep += convert(inst.getSourceOperand1(), 5); + binaryRep += convert(inst.getSourceOperand2(), 5); + String bin = toBinaryOfSpecificPrecision(value, 17); + binaryRep += bin.substring(bin.length() - 17); + } + else { + binaryRep += convert(inst.getSourceOperand1(), 5); + binaryRep += convert(inst.getDestinationOperand(), 5); + binaryRep += convert(inst.getSourceOperand2(), 17); + } + } + int instInteger = (int) Long.parseLong(binaryRep, 2); + byte[] instBinary = ByteBuffer.allocate(4).putInt(instInteger).array(); + bfile.write(instBinary); + + // System.out.println(instInteger); + // if (inst.getSourceOperand1() != null) + // file.write(convert(inst.getSourceOperand1())); + // if (inst.getSourceOperand2() != null) + // file.write(convert(inst.getSourceOperand2())); + // if (inst.getDestinationOperand() != null) + // file.write(convert(inst.getDestinationOperand())); + // file.write(inst.toString()); + } + + //5. close the file + bfile.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} + diff --git a/assignment-2/supporting_files/src/generic/Statistics.class b/assignment-2/supporting_files/src/generic/Statistics.class new file mode 100644 index 0000000000000000000000000000000000000000..863e86baa031c969c16efb310ff7fe0ebcfb60b4 GIT binary patch literal 283 zcmZ9GyAAhr&Jp(MVK6v7(<{lg(@xvWE9kNfaKyLy0pQ;uPoh zf9LXi-5&s^2z)qjJrrsvqC{wB;v&MG&}q1eGnp7dX`-|;Q-a$cY&?_+tyF56t0at! zFzRGfav~IFhpi+83#H}qypLtR7V*w@j=9q27j5?!-!qY6IUNr+1V1{Q^F+?oXY4yM yvNU?|_*ZKV$bQSd!c~_eaV!pRperZ5h`p5omys%JoLjW>QJMJ1EKq0BLE{bAD>iok literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/src/generic/Statistics.java b/assignment-2/supporting_files/src/generic/Statistics.java new file mode 100644 index 0000000..059cb7a --- /dev/null +++ b/assignment-2/supporting_files/src/generic/Statistics.java @@ -0,0 +1,13 @@ +package generic; + +public class Statistics { + + // TODO add your statistics here + + // TODO write functions to update statistics + + public static void printStatistics(String statFile) + { + // TODO add code here to print statistics in the output file + } +} diff --git a/assignment-2/supporting_files/src/main/Main.class b/assignment-2/supporting_files/src/main/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..80b924a4617a7d9e537a85a5114185369c090c96 GIT binary patch literal 557 zcmZuu$xZ@65Pi)yFpMHDxGUa}1W7z9Au&c16VU_e#Zxo3W8-Y;=`s2>euF2C2R^`$ zGFBr-5BA~J((hGOSATrIj{tO0w~;~CLe4=R1%{a+f8cGOhhF=9Fchw4D0E~fb(bOA z*uE;F$Z(k^+!K3s!>zZ5T-7@<*LN))nV@wmebN0*@gxz!z<+ARD)JN${#-@l7T*Hf zhK;fX$H5e)85~c9LP@vXlZnevjg<`bky4R52yc!aB~7-_IQ<>BuZiI8Z(rG%LDj;n zgE>>D`ctPbgVg6bQVf+u=ro=rWE2|7f`gjj7bo)y3rh^8fXlGmBVfoKMmK`Qr!o|0 zX)qA#f)9Mk \n"); + } + + Simulator.setupSimulation(args[0]); + Simulator.assemble(args[1]); + } + +} diff --git a/assignment-2/supporting_files/submissions/1.observedoutput b/assignment-2/supporting_files/submissions/1.observedoutput new file mode 100644 index 0000000000000000000000000000000000000000..57736dd0bdcc8b87d9e2925568fb6536c128c5b0 GIT binary patch literal 20 YcmZQzU|?ckVBi8`kqsOS3@?BT01Ctb!2kdN literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/submissions/2.observedoutput b/assignment-2/supporting_files/submissions/2.observedoutput new file mode 100644 index 0000000000000000000000000000000000000000..d4fbf393baf1112024f728db61f184cc56c40f89 GIT binary patch literal 68 zcmZQzU|?imFi_mU#=szWu7JVf1Ou1mIR-Aqe?ayz2CfGO|Nq&*#lUdVkAX#K$^r(d QDGZD+7#J8pY%VAp08l3p^#A|> literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/submissions/3.observedoutput b/assignment-2/supporting_files/submissions/3.observedoutput new file mode 100644 index 0000000000000000000000000000000000000000..b157782b1f1988d687c2a76895fb0d9d44fecba3 GIT binary patch literal 72 zcmZQzU|?imVBp@s#=s!R;lN;Vf`Lh}CxL;phk@x~2Lr3YnF59rb_{GlKH~xV|9^z0 SEMVZ8!oc_fs0qZDg0cY;{}9pu literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/submissions/bin/1.asm b/assignment-2/supporting_files/submissions/bin/1.asm new file mode 100644 index 0000000..613ab49 --- /dev/null +++ b/assignment-2/supporting_files/submissions/bin/1.asm @@ -0,0 +1,9 @@ + .data +a: + 10 +b: + 20 + .text +main: + load %x0, $a, %x4 + end diff --git a/assignment-2/supporting_files/submissions/bin/1.out b/assignment-2/supporting_files/submissions/bin/1.out new file mode 100644 index 0000000000000000000000000000000000000000..57736dd0bdcc8b87d9e2925568fb6536c128c5b0 GIT binary patch literal 20 YcmZQzU|?ckVBi8`kqsOS3@?BT01Ctb!2kdN literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/submissions/bin/configuration/Configuration.class b/assignment-2/supporting_files/submissions/bin/configuration/Configuration.class new file mode 100644 index 0000000000000000000000000000000000000000..469528b8309b14926b81f09f5b42ec74058de455 GIT binary patch literal 3909 zcma)9YkVA4760E&+L>%_NjiPdLcvX2Aju}IZLO3p6q0Q!3%f~aLfTR>OlEI3)6C8+ zv$JV}PY?xPh~NVe1x0x%K5C_HidGa9#P{pFU;XY!f9kn+U$faX@*#U><~;6s-Tygx z`#%>h0yu!bM-f4rhIWoMSj*6T(wsLFj_KwTW78*v6)>#5$#(7F07F}E-=qeefh!@~ zOB}Kt5ru}R)b3>1)SGGOj|aZ(=97JsQLMvd8oD^Tv7Vt_=mw6B*u-FvnPo>XT=Pz> zk(tY}MZ;E(D{v)4&;RwEVU3E4;o534s(DKGWjsHhIJL)0pt5OuqhipFWxHi=>vc5B$f@gCVpJTF|~+g2iLmn??$>huxc_xvF@H?m*{I^Ihi zIh46e=5HUzjo44gqbyaEP#RvGF!Q5kff}bj>_x3Dn=&`*6-*_)_s+4pS<27wVrYu1TiF zk&{d##H>0b*)tq@$=(rSU;1pDqC9BN+k{I}d5*)8%Ik8KZ;ex34o`BrYMjuK_i^}= z7pw6ueI6xO&+M{OrZp>c%+pDu<-)Y^$7V9ND@xLb1&&2&Z9U0Nxy!j9U&;L<$Cs*(z#qpdxehuod@u87V0ZdtOiqe6yGp!K{}nb*;s(qj(cWDou&tdpV6;m16>rqiam&X*`qMoQ + + + + 2 + 1 + 1 + + + 1 + 4 + 1 + + + 1 + 10 + 1 + + + + + 256 + 2 + 4 + LRU + + + + 256 + 2 + 4 + LRU + + + + 2048 + 10 + 4 + LRU + + + 40 + \ No newline at end of file diff --git a/assignment-2/supporting_files/submissions/bin/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob b/assignment-2/supporting_files/submissions/bin/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob new file mode 100644 index 0000000..2fec9c8 --- /dev/null +++ b/assignment-2/supporting_files/submissions/bin/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob @@ -0,0 +1 @@ +{"name":"Local: Simulator","url":"c:\\Users\\karth\\OneDrive\\Desktop\\new\\src\\generic\\Simulator.java","tests":[{"id":1662603879409,"input":"","output":""},{"id":1662603899098,"input":"","output":""}],"interactive":false,"memoryLimit":1024,"timeLimit":3000,"srcPath":"c:\\Users\\karth\\OneDrive\\Desktop\\new\\src\\generic\\Simulator.java","group":"local","local":true} \ No newline at end of file diff --git a/assignment-2/supporting_files/submissions/bin/generic/Instruction$OperationType.class b/assignment-2/supporting_files/submissions/bin/generic/Instruction$OperationType.class new file mode 100644 index 0000000000000000000000000000000000000000..071572bd5549bba56ab7460171052d23133a3332 GIT binary patch literal 2412 zcma)+=~EO(7{;Gr7q(d&X+e-niHZ?0ipDDnB1$k42}Bps)o3y-6I@(oadwwzE_2_v zxy)sb%J*cfidIsl{G5;ZGxA5I^7b>EgcMcfouO8zclAn!$Dl55>*aj?$nfn^&|f~sn^a@8r61I zTxMnMz%mWZWeTN9>&rE284zb+g+?6%v!$F3tkh^=K%9Y98chsLW#?_6MWdAgaRydv ztYN_Qr)=OZjkOGjGq7Hx!wyvB1N-^i8XK9<2mH88qnmy)`urY^&73dJK##^&1`4^N zUEp4g?F@)Buv24KIlw*Kr?ICTi1yH{(H8{*2KqJjM}Z&;9MCve4!HIa_iGH511=x& zfW~1C!TWv!F7=6m^d(Ud?@9h7KF4881`pP2wD~3Cw7mM@}xwzkwmYG%JsucXK6gOqSW%xnTBS&Mg#r z7Yw9|LDrw{UHAmM0N3|5@|bf_)tB|N#eN5k3zsU-9PXM>s7%VK`3ltvTA@~h-3pr(wkm8_*rl*Xp-*AI!a;>0g~JL*6h;+}DvT?fP&lP<#;*Oo z#s|1!Pn7#A$ldJhTFRNqxBq)ad@w&H$5}g)^}W&3?4%cryOTK?*?os?buHn2IjBx$ zr+v3r3S^a7XV-+3bzde|KCPV#j@h1R-x8MW?{$z&hI8Q9Oz+RIv3xzCx=z@pQbgiO-}Tj^ttwdX4|>|p)?~>dJrkShm@8> zN~ZSIT}r#1%P*kHppq?N2hq*`F|Z8<`)(9DFQ) ztN5ACpT{Tvw%v*s3@bSy+Hm5zrDnxxMZDgoXAY;t}8Eg|& zhiDhb=GF<8h1ej_Avy&$AvOt?hu9*h4Y5sNLhKN%2(epG7h@d z)YJCSUNI|a1GHC718tD@nrWmRqP=cb(S~Vnm?qi??M>568>78tT4={;Z<|)yaoRgZ w?yS6mleBluYTD_Wc<(ySF22ffM3?z@g;Un=p?xBj83-|Q~-dcAF;s0SpR^KUSZpxteMm=XQ=BYh_zt@Rn}q_NqXCCi`F*Ll{;Njo}<(0u#rYp*8e! zu4q_xqgl3f(-0V~H_YRPdQvc(hOIROL{Zv}#xRC)ff2K=HB<@Re_GcB7D^#3=^Z~P zFYOaCOkk4qmf38SH3wi+t_#H51fI@;pO0ax7rr8yrenAuw-Oc2vUS6W#WPLtST4md zgIR&86Sb-pOrxyY2fF=;E6Y|5+Y+c|ify01PY(p$hMa}Nx+`n(2e7K0s?a~ zqIrRb|C8TPH+`5(pdV@JYf+&1-+YBqM3qHC22jrr3eykSrdyK&lZ>&a zQhBxaY_(k7QtMtSqHe?+y3EVC?+~v_V}Wzqbibv^w7hDLuODVU(z9?`NIm&M6ODMktprZs`!*vgO znK8+z2A40sg3_Ut4=)g>f7#$y@LmY@$nya8Bth@vgC6QDuP_p%o+5RM$Pe*R2z5M2 zeSx4G_&AI@9;BWj^(>J$L#dNN>N!I5;nc|>^#ZBW#NP^~P6er#2)!LnoeENCNxe+` zDn6lP8pSngWODypeu?-g>YS3NxXCGXiWyD{#|TH9Bgv6!;Ue&ytFE0E-g31xn+|N! z2x;ts8cq2!X6;tTNK&`aATCt!pz7h>HDal%25-jqruSp2gAVcEMuWb zr1PVa+aU?1XZ`NjCkq<_Eo?Hl@tzp{`AtQ7-mg x!JepK*rjO4fCCSEXi#mTM>!P`&)~fmth;Y${xT|r1~}a^t<@vWKJ^8(zX7|=QqBMX literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/submissions/bin/generic/Operand$OperandType.class b/assignment-2/supporting_files/submissions/bin/generic/Operand$OperandType.class new file mode 100644 index 0000000000000000000000000000000000000000..92d3d37d9caa57e9a5199358b48acb423e4137f2 GIT binary patch literal 1076 zcmaJkGH9>)!18?VGORb| zsn%b>kux4r(F@Za^X5B-gX~oHp>29zc`DHIUCSAirz;2o$-i!31Dg!dise{-m0@L? zD#)zo+8QD{&AYB4roj+@9~yXs9WlCW!(-UW=H?GiWqxCo!%?5+UTRnlKN%0Z+&wkB zHbqMRsh^v>Qo2&h8aSpub}2uc&9&)%m7X08RGiv`7`rl;tXgK!Tcfet6Ylx1MxL+Y8MXh9jtE|NNR9FYoK~_hCB|Bbww5I2Dz%i5BtVu_CN1d-h^K{` z2oa%p7CVH`k+)4&Jo*HSpK$vIi4Wv4CeH@S#DrMNm H^IGaBolW4@ literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/submissions/bin/generic/Operand.class b/assignment-2/supporting_files/submissions/bin/generic/Operand.class new file mode 100644 index 0000000000000000000000000000000000000000..376bd1a45997dddae590f0a2c08b361923137580 GIT binary patch literal 1622 zcmaJ>+fEZf82$!I3uVi(fQSephk}QC7Omo;iZm&Z2*C?u;=ppfj_$(}QmGB#^Yw3rnECs$5mK%h}DEs!O*b(CY=#_WPO=m@GB{ zW<#Jk&Ka^k3;h@n=sJ|n0WCzqXooBeBQ210WJx(Y!O>9h#JMe9x7{ikMlqJa84Kga zorzO!6X<@asy7u+C_&MdaxJH+J8Sh$E; zfw6tLr}Ca#mim>gcPaT=y4n|5$h2A({=+tJ*cJqq+t{?Sv>_3Q<-H0s*k80=wQ;at zQuS?Fa;WL6DjmtYz!YOTB~>|^_)R9$nNuwmcbGI@6PAjtQlNq)p(2(k7)XkcVx*)g zBBK8zZK7}3ZE0EFTbH#kqU4r$P%o=h+k|I@v0XLo!4BL|zFt=*e%4^%spn~5*JW*8 z>0Phl_s5Y-;sG8euwrulNMQD)uWa|w+f&(~_(4%uWm$Xm_W~cH&V|5$bd9a=D1Wx- zd3y)7Tx-1|ntu!%V-PtE+xm4x6^vmnTJew~FCAyg)+*PHCmf*H;=XvpY!qCMWZsd! zuNZ%Cr0@wm7no}awp|Pfybw5lI+RaC5HK!qWIH$#o&5MNaD|!b#?CqB-VJ()IM)pS zCbbZ&=f(JaV3P#&cM8O#|gTLTP@V|da#-L9H~vV z_$r0?w~WT5>CO@p@(m*&kqV@}VvruTiaOR%eC> v^SI5E7&_7eT<jAVJ?v^x63Pomp~9Lew{#X1??JopWY>Gdt&( zzka$2U>ILEAc15WDTNx;5_T3H&k5YZ;G`EuL8TD6zL%XXJAox<^JmKrp?1|ORh*E} z*FUf@^{)$#)T0jdX*4Kof+Dm(S}|t@p<~Ylelf6Cvik_Tv$->FR9Kp}%Gv6q>_7C8 zSeUHm?l&tmAwx)7woT~$4-LsPH!HNDm5}xW+x4sxukRn2Ok*pdYuQ@021}M#9GvlU zmBP}5>y+&AAn*gZUxz}czF%0$i?=Ck*IucV#N7%{Y1{6qc&EbCaetmI&MG`3PQ;hn zrO>a3*J3}b@SJv7ie&op3VW*7m*1Uf zwGiLrO@+7OLJ$|`72d8EEWPBU!aKT9@-6+Q-cwkRLQNR?fg{iIfx?GUN#>o?;zb23 zwx`Dn3U=)H<$bJBj9t_((^Xj3US287`jWzmw&U4p_=Jr4?Pv4LP9Y-H4HZhR=SIW& z6FI?ecGS0d8#GP1o-Fhp#d2 z6-s{Sdc|ocTJpJvvxK%MZV+x{#tEZie#kwkNsqVbXvqpgCrsmWLd&B?8#WAg^w`$T z^zcsfc;8c|L-wMaaixsYoB@#h8c99_{q`g1=Fbi5NPjQ?jXz*ZYW7>Cj%&6vYYe-X zwT3&GX~Q07onbFCvtf3hc*FDo@rL=k#r0Tn?IJ2Gr~EX=e&T6 zxWsuGS8$c{8m?oV^9F9=Hs>AO#XZjZcz}nTzv6fN!TBeFl4zq8WvGR-m3pX`GfR8v z0Ovs(p;68;nxh=&JS|dz)21?ooDrR)^PCsxB3zp^}7TxB&LwD&O z=Y4uW5Ba_c?jER>j~rj|Qvly!=wzBlrk`+_k=p-tKnfM^FM(B@;Y?wTkDutu8b0N0 S=CK4m!xtl+yovcQQ};LW;+drY literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/submissions/bin/generic/ParsedProgram.class b/assignment-2/supporting_files/submissions/bin/generic/ParsedProgram.class new file mode 100644 index 0000000000000000000000000000000000000000..8103baa2b78b3cf19db090298e5da01b03758213 GIT binary patch literal 5297 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 literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/submissions/bin/generic/Simulator$1.class b/assignment-2/supporting_files/submissions/bin/generic/Simulator$1.class new file mode 100644 index 0000000000000000000000000000000000000000..da583e3c7d7abcea3e84b2becf0c0229180054b8 GIT binary patch literal 1465 zcmZXTOK=ob6o&s!0=XFnkQ+tb&j85)nHk=Y7=`c%k_2^l_(XeV+DXSwcj)d3;9Ep_ zh>rzZx3Z+%DCNQ`w`|?AW$V_R<$vx;S*c1_P2YdM`p-GH&%NjIzrX(hU<5xF(1Ffw zbQQ4#OFgWd_UHU^I}fAsn4e8e__H3C4u^4=k9g?pAGl~>DEwyApx|LiMV<6DGmHQ_r7tAv*c*=xf09b_qkIw6})*iuMsk%6#qzID)1A9;{41(pYRI@UCtXU z9?1FM6ee}(8cmvkhZW;t989)n>Op$muSX<3wXhZYc{`;(qBn8jKnyRqoV7d+?kQgO_VsyJy+t2krNs+h3n zRJ>+uDlXVdD&Dkjt9aMGr^2@l6@hK32(Gz&sA2<-Vk1UL#_79&Ex3%WXki;>(TD5U&iEbp z7CUjD5kFx7Kcj?)*o8;fjX$vmk1>e9P{tEf@RS+<#$Nn`eLR=_UJnj<7KeCbx44H6 c+{PWZ-epE`NB8*t-jRFwfop-sS>(#+KQMkAApigX literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/submissions/bin/generic/Simulator.class b/assignment-2/supporting_files/submissions/bin/generic/Simulator.class new file mode 100644 index 0000000000000000000000000000000000000000..6484c6916b8f9bea7e0c3a5b3d45347ce724429d GIT binary patch literal 4358 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 literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/submissions/bin/main/Main.class b/assignment-2/supporting_files/submissions/bin/main/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..80b924a4617a7d9e537a85a5114185369c090c96 GIT binary patch literal 557 zcmZuu$xZ@65Pi)yFpMHDxGUa}1W7z9Au&c16VU_e#Zxo3W8-Y;=`s2>euF2C2R^`$ zGFBr-5BA~J((hGOSATrIj{tO0w~;~CLe4=R1%{a+f8cGOhhF=9Fchw4D0E~fb(bOA z*uE;F$Z(k^+!K3s!>zZ5T-7@<*LN))nV@wmebN0*@gxz!z<+ARD)JN${#-@l7T*Hf zhK;fX$H5e)85~c9LP@vXlZnevjg<`bky4R52yc!aB~7-_IQ<>BuZiI8Z(rG%LDj;n zgE>>D`ctPbgVg6bQVf+u=ro=rWE2|7f`gjj7bo)y3rh^8fXlGmBVfoKMmK`Qr!o|0 zX)qA#f)9Mk + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assignment-2/supporting_files/submissions/jars/assembler.jar b/assignment-2/supporting_files/submissions/jars/assembler.jar new file mode 100644 index 0000000000000000000000000000000000000000..7e5ec0440bd98c768757eb2bc2efd38518e06cf8 GIT binary patch literal 36726 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 + + + + 2 + 1 + 1 + + + 1 + 4 + 1 + + + 1 + 10 + 1 + + + + + 256 + 2 + 4 + LRU + + + + 256 + 2 + 4 + LRU + + + + 2048 + 10 + 4 + LRU + + + 40 + \ No newline at end of file diff --git a/assignment-2/supporting_files/submissions/src/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob b/assignment-2/supporting_files/submissions/src/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob new file mode 100644 index 0000000..2fec9c8 --- /dev/null +++ b/assignment-2/supporting_files/submissions/src/generic/.cph/.Simulator.java_74fc5dae77a3b9a48197eb148ed1e37a.prob @@ -0,0 +1 @@ +{"name":"Local: Simulator","url":"c:\\Users\\karth\\OneDrive\\Desktop\\new\\src\\generic\\Simulator.java","tests":[{"id":1662603879409,"input":"","output":""},{"id":1662603899098,"input":"","output":""}],"interactive":false,"memoryLimit":1024,"timeLimit":3000,"srcPath":"c:\\Users\\karth\\OneDrive\\Desktop\\new\\src\\generic\\Simulator.java","group":"local","local":true} \ No newline at end of file diff --git a/assignment-2/supporting_files/submissions/src/generic/.gitignore b/assignment-2/supporting_files/submissions/src/generic/.gitignore new file mode 100644 index 0000000..d78f9a2 --- /dev/null +++ b/assignment-2/supporting_files/submissions/src/generic/.gitignore @@ -0,0 +1,8 @@ +/Instruction$OperationType.class +/Instruction.class +/Misc.class +/Operand$OperandType.class +/Operand.class +/ParsedProgram.class +/Simulator.class +/Statistics.class diff --git a/assignment-2/supporting_files/submissions/src/generic/Instruction.java b/assignment-2/supporting_files/submissions/src/generic/Instruction.java new file mode 100644 index 0000000..ec3ef99 --- /dev/null +++ b/assignment-2/supporting_files/submissions/src/generic/Instruction.java @@ -0,0 +1,96 @@ +package generic; + +public class Instruction { + + public enum OperationType {add, addi, sub, subi, mul, muli, div, divi, and, andi, or, ori, xor, xori, slt, slti, sll, slli, srl, srli, sra, srai, load, store, jmp, beq, bne, blt, bgt, end}; + + int programCounter; + OperationType operationType; + Operand sourceOperand1; + Operand sourceOperand2; + Operand destinationOperand; + + public int getProgramCounter() { + return programCounter; + } + public void setProgramCounter(int programCounter) { + this.programCounter = programCounter; + } + public OperationType getOperationType() { + return operationType; + } + public void setOperationType(OperationType operationType) { + this.operationType = operationType; + } + public Operand getSourceOperand1() { + return sourceOperand1; + } + public void setSourceOperand1(Operand sourceOperand1) { + this.sourceOperand1 = sourceOperand1; + } + public Operand getSourceOperand2() { + return sourceOperand2; + } + public void setSourceOperand2(Operand sourceOperand2) { + this.sourceOperand2 = sourceOperand2; + } + public Operand getDestinationOperand() { + return destinationOperand; + } + public void setDestinationOperand(Operand destinationOperand) { + this.destinationOperand = destinationOperand; + } + public String toString() + { + if(sourceOperand1 != null) + { + if(sourceOperand2 != null) + { + if(destinationOperand != null) + { + return "PC="+ programCounter + "\t" + operationType + "\t" + sourceOperand1 + "\t" + sourceOperand2 + "\t" + destinationOperand + "\n"; + } + else + { + return "PC="+ programCounter + "\t" + operationType + "\t" + sourceOperand1 + "\t" + sourceOperand2 + "\tnull" + "\n"; + } + } + else + { + if(destinationOperand != null) + { + return "PC="+ programCounter + "\t" + operationType + "\t" + sourceOperand1 + "\tnull" + "\t" + destinationOperand + "\n"; + } + else + { + return "PC="+ programCounter + "\t" + operationType + "\t" + sourceOperand1 + "\tnull" + "\tnull" + "\n"; + } + } + } + else + { + if(sourceOperand2 != null) + { + if(destinationOperand != null) + { + return "PC="+ programCounter + "\t" + operationType + "\tnull" + "\t" + sourceOperand2 + "\t" + destinationOperand + "\n"; + } + else + { + return "PC="+ programCounter + "\t" + operationType + "\tnull" + "\t" + sourceOperand2 + "\tnull" + "\n"; + } + } + else + { + if(destinationOperand != null) + { + return "PC="+ programCounter + "\t" + operationType + "\tnull" + "\tnull" + "\t" + destinationOperand + "\n"; + } + else + { + return "PC="+ programCounter + "\t" + operationType + "\tnull" + "\tnull" + "\tnull" + "\n"; + } + } + } + } +} diff --git a/assignment-2/supporting_files/submissions/src/generic/Misc.java b/assignment-2/supporting_files/submissions/src/generic/Misc.java new file mode 100644 index 0000000..0be690a --- /dev/null +++ b/assignment-2/supporting_files/submissions/src/generic/Misc.java @@ -0,0 +1,10 @@ +package generic; + +public class Misc { + + public static void printErrorAndExit(String message) + { + System.err.println(message); + System.exit(1); + } +} diff --git a/assignment-2/supporting_files/submissions/src/generic/Operand.java b/assignment-2/supporting_files/submissions/src/generic/Operand.java new file mode 100644 index 0000000..3224099 --- /dev/null +++ b/assignment-2/supporting_files/submissions/src/generic/Operand.java @@ -0,0 +1,41 @@ +package generic; + +public class Operand { + + public enum OperandType {Register, Immediate, Label}; + + OperandType operandType; + int value; + String labelValue; //only applicable for Label type; + //Note that Label type is only applicable for functional emulation of assembly file + + public OperandType getOperandType() { + return operandType; + } + public void setOperandType(OperandType operandType) { + this.operandType = operandType; + } + public int getValue() { + return value; + } + public void setValue(int value) { + this.value = value; + } + public String getLabelValue() { + return labelValue; + } + public void setLabelValue(String labelValue) { + this.labelValue = labelValue; + } + public String toString() + { + if(operandType == OperandType.Register || operandType == OperandType.Immediate) + { + return "[" + operandType.toString() + ":" + value + "]"; + } + else + { + return "[" + operandType.toString() + ":" + labelValue + "]"; + } + } +} diff --git a/assignment-2/supporting_files/submissions/src/generic/ParsedProgram$1.class b/assignment-2/supporting_files/submissions/src/generic/ParsedProgram$1.class new file mode 100644 index 0000000000000000000000000000000000000000..b3efba65b31b2554bfe53b5475c0b62321a3bca0 GIT binary patch literal 2007 zcmc)J+iw(A90&04Z+F{m%PC!Yp%jAVJ?v^x63Pomp~9Lew{#X1??JopWY>Gdt&( zzka$2U>ILEAc15WDTNx;5_T3H&k5YZ;G`EuL8TD6zL%XXJAox<^JmKrp?1|ORh*E} z*FUf@^{)$#)T0jdX*4Kof+Dm(S}|t@p<~Ylelf6Cvik_Tv$->FR9Kp}%Gv6q>_7C8 zSeUHm?l&tmAwx)7woT~$4-LsPH!HNDm5}xW+x4sxukRn2Ok*pdYuQ@021}M#9GvlU zmBP}5>y+&AAn*gZUxz}czF%0$i?=Ck*IucV#N7%{Y1{6qc&EbCaetmI&MG`3PQ;hn zrO>a3*J3}b@SJv7ie&op3VW*7m*1Uf zwGiLrO@+7OLJ$|`72d8EEWPBU!aKT9@-6+Q-cwkRLQNR?fg{iIfx?GUN#>o?;zb23 zwx`Dn3U=)H<$bJBj9t_((^Xj3US287`jWzmw&U4p_=Jr4?Pv4LP9Y-H4HZhR=SIW& z6FI?ecGS0d8#GP1o-Fhp#d2 z6-s{Sdc|ocTJpJvvxK%MZV+x{#tEZie#kwkNsqVbXvqpgCrsmWLd&B?8#WAg^w`$T z^zcsfc;8c|L-wMaaixsYoB@#h8c99_{q`g1=Fbi5NPjQ?jXz*ZYW7>Cj%&6vYYe-X zwT3&GX~Q07onbFCvtf3hc*FDo@rL=k#r0Tn?IJ2Gr~EX=e&T6 zxWsuGS8$c{8m?oV^9F9=Hs>AO#XZjZcz}nTzv6fN!TBeFl4zq8WvGR-m3pX`GfR8v z0Ovs(p;68;nxh=&JS|dz)21?ooDrR)^PCsxB3zp^}7TxB&LwD&O z=Y4uW5Ba_c?jER>j~rj|Qvly!=wzBlrk`+_k=p-tKnfM^FM(B@;Y?wTkDutu8b0N0 S=CK4m!xtl+yovcQQ};LW;+drY literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/submissions/src/generic/ParsedProgram.java b/assignment-2/supporting_files/submissions/src/generic/ParsedProgram.java new file mode 100644 index 0000000..7cc69f0 --- /dev/null +++ b/assignment-2/supporting_files/submissions/src/generic/ParsedProgram.java @@ -0,0 +1,268 @@ +package generic; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Scanner; +import java.util.regex.Pattern; +import generic.Instruction.OperationType; +import generic.Operand.OperandType; + +public class ParsedProgram { + static ArrayList code = new ArrayList(); + static int mainFunctionAddress; + static int firstCodeAddress; + static ArrayList data = new ArrayList(); + + public static void setMainFunctionAddress(int addr) + { + mainFunctionAddress = addr; + } + + public static void setFirstCodeAddress(int addr) + { + firstCodeAddress = addr; + } + + public static Instruction getInstructionAt(int programCounter) + { + return code.get(programCounter - firstCodeAddress); + } + + + static HashMap symtab = new HashMap(); + + + public static int parseDataSection(String assemblyProgramFile) + { + FileInputStream inputStream = null; + try + { + inputStream = new FileInputStream(assemblyProgramFile); + } + catch(FileNotFoundException e) { + Misc.printErrorAndExit(e.toString()); + } + + Scanner sc=new Scanner(inputStream); + int address = 0; //Store data staring from 1st memory location. At 0th location we denote the start of the code section. + + + while(sc.hasNextLine()) //TODO 3 loops? + { + String line=sc.nextLine(); + + if(line.contains(".data")) //Processing the .data section + { + line=sc.next(); + + do + { + if(Pattern.matches("[a-zA-Z]+([0-9]*)(:)", line)) + { + ParsedProgram.symtab.put(line.replaceAll("[^a-zA-Z]",""), address);//TODO removed statements that were adding data to the code arraylist + + while(Pattern.matches("-?\\d+", line=sc.next())) + { + data.add(Integer.parseInt(line)); + address++; + + } + } + }while(!line.contains(".text")); + + break; + } + } + + sc.close(); + + setFirstCodeAddress(address); + + return address; + } + + public static void parseCodeSection(String assemblyProgramFile, int firstCodeAddress) + { + FileInputStream inputStream = null; + try + { + inputStream = new FileInputStream(assemblyProgramFile); + } + catch(FileNotFoundException e) { + Misc.printErrorAndExit(e.toString()); + } + + Scanner sc=new Scanner(inputStream); + int address = firstCodeAddress; + + while(sc.hasNextLine()) + { + String line=sc.nextLine(); + if(line.contains(".text")) + { + break; + } + } + + while(sc.hasNextLine()) + { + String line; + if(Pattern.matches("[a-zA-Z]+([0-9]*)(:)", line=sc.nextLine())) + { + ParsedProgram.symtab.put(line.replaceAll(":",""), address); + if(line.replaceAll(":","").compareTo("main") == 0) + { + ParsedProgram.setMainFunctionAddress(address); + } + } + else + { + ParsedProgram.code.add(address-firstCodeAddress, getInstructionFromString(line, address)); + address++; + } + } + sc.close(); + } + + private static Instruction getInstructionFromString(String line, int address) + { + Instruction newInstruction = new Instruction(); + newInstruction.setProgramCounter(address); + + Scanner sc = new Scanner(line); + newInstruction.setOperationType(OperationType.valueOf(sc.next())); + + switch(newInstruction.getOperationType()) + { + //R3I type + case add : + case sub : + case mul : + case div : + case and : + case or : + case xor : + case slt : + case sll : + case srl : + case sra : { + newInstruction.setSourceOperand1(getRegisterOperandFromString(sc.next())); + newInstruction.setSourceOperand2(getRegisterOperandFromString(sc.next())); + newInstruction.setDestinationOperand(getRegisterOperandFromString(sc.next())); + break; + } + + //R2I type + case addi : + case subi : + case muli : + case divi : + case andi : + case ori : + case xori : + case slti : + case slli : + case srli : + case srai : + case load : + case store : { + newInstruction.setSourceOperand1(getRegisterOperandFromString(sc.next())); + String str = sc.next(); + if(Pattern.matches("-?\\d+(,)",str)) + { + //absolute immediate + newInstruction.setSourceOperand2(getImmediateOperandFromString(str)); + } + else + { + //label / symbol + newInstruction.setSourceOperand2(getLabelOperandFromString(str)); + } + newInstruction.setDestinationOperand(getRegisterOperandFromString(sc.next())); + break; + } + + case beq : + case bne : + case blt : + case bgt : { + newInstruction.setSourceOperand1(getRegisterOperandFromString(sc.next())); + newInstruction.setSourceOperand2(getRegisterOperandFromString(sc.next())); + String str = sc.next(); + if(Pattern.matches("[0-9]+(,)",str)) + { + //absolute immediate + newInstruction.setDestinationOperand(getImmediateOperandFromString(str)); + } + else + { + //label / symbol + newInstruction.setDestinationOperand(getLabelOperandFromString(str)); + } + break; + } + + //RI type : + case jmp : { + String str = sc.next(); + if(Pattern.matches("[0-9]+(,)",str)) + { + //absolute immediate + newInstruction.setDestinationOperand(getImmediateOperandFromString(str)); + } + else if(Pattern.matches("%x([0-9]{1,2})",str)) { + newInstruction.setDestinationOperand(getRegisterOperandFromString(str)); + } + else + { + //label / symbol + newInstruction.setDestinationOperand(getLabelOperandFromString(str)); + } + break; + } + + case end : break; + + default: Misc.printErrorAndExit("unknown instruction!!"); + } + + sc.close(); + + return newInstruction; + } + + private static Operand getRegisterOperandFromString(String str) + { + Operand operand = new Operand(); + operand.setOperandType(OperandType.Register); + operand.setValue(Integer.parseInt(str.replaceAll("[^0-9]", ""))); + return operand; + } + + private static Operand getImmediateOperandFromString(String str) + { + Operand operand = new Operand(); + operand.setOperandType(OperandType.Immediate); + operand.setValue(Integer.parseInt(str.replaceAll("[^-?\\d+]",""))); + return operand; + } + + private static Operand getLabelOperandFromString(String str) + { + Operand operand = new Operand(); + operand.setOperandType(OperandType.Label); + operand.setLabelValue(str.replaceAll("[$,]", "")); + return operand; + } + + static void printState() + { + System.out.println("Symbol Table :"); + System.out.println(Arrays.asList(symtab)); + System.out.println("\nParsed instructions :"); + System.out.println(Arrays.asList(code)); + } +} diff --git a/assignment-2/supporting_files/submissions/src/generic/Simulator$1.class b/assignment-2/supporting_files/submissions/src/generic/Simulator$1.class new file mode 100644 index 0000000000000000000000000000000000000000..da583e3c7d7abcea3e84b2becf0c0229180054b8 GIT binary patch literal 1465 zcmZXTOK=ob6o&s!0=XFnkQ+tb&j85)nHk=Y7=`c%k_2^l_(XeV+DXSwcj)d3;9Ep_ zh>rzZx3Z+%DCNQ`w`|?AW$V_R<$vx;S*c1_P2YdM`p-GH&%NjIzrX(hU<5xF(1Ffw zbQQ4#OFgWd_UHU^I}fAsn4e8e__H3C4u^4=k9g?pAGl~>DEwyApx|LiMV<6DGmHQ_r7tAv*c*=xf09b_qkIw6})*iuMsk%6#qzID)1A9;{41(pYRI@UCtXU z9?1FM6ee}(8cmvkhZW;t989)n>Op$muSX<3wXhZYc{`;(qBn8jKnyRqoV7d+?kQgO_VsyJy+t2krNs+h3n zRJ>+uDlXVdD&Dkjt9aMGr^2@l6@hK32(Gz&sA2<-Vk1UL#_79&Ex3%WXki;>(TD5U&iEbp z7CUjD5kFx7Kcj?)*o8;fjX$vmk1>e9P{tEf@RS+<#$Nn`eLR=_UJnj<7KeCbx44H6 c+{PWZ-epE`NB8*t-jRFwfop-sS>(#+KQMkAApigX literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/submissions/src/generic/Simulator.java b/assignment-2/supporting_files/submissions/src/generic/Simulator.java new file mode 100644 index 0000000..7384637 --- /dev/null +++ b/assignment-2/supporting_files/submissions/src/generic/Simulator.java @@ -0,0 +1,153 @@ +package generic; + +import java.io.FileInputStream; +import generic.Operand.OperandType; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Scanner; +import java.io.ByteArrayInputStream; +import java.nio.ByteBuffer; + +public class Simulator { + + static FileInputStream inputcodeStream = null; + + public static Map map = new HashMap<>() { + { + put("add", "00000"); + put("sub", "00010"); + put("mul", "00100"); + put("div", "00110"); + put("and", "01000"); + put("or", "01010"); + put("xor", "01100"); + put("slt", "01110"); + put("sll", "10000"); + put("srl", "10010"); + put("sra", "10100"); + put("beq", "11001"); + put("bne", "11010"); + put("blt", "11011"); + put("bgt", "11100"); + put("load", "10110"); + put("store", "10111"); + put("jmp", "11000"); + put("addi", "00001"); + put("subi", "00011"); + put("muli", "00101"); + put("divi", "00111"); + put("andi", "01001"); + put("ori", "01011"); + put("xori", "01101"); + put("slti", "01111"); + put("slli", "10001"); + put("srli", "10011"); + put("srai", "10101"); + put("end", "11101"); + + } + }; + private static String toBinaryOfSpecificPrecision(int num, int lenOfTargetString) { + String binary = String.format("%" + lenOfTargetString + "s", Integer.toBinaryString(num)).replace(' ', '0'); + return binary; + } + private static String convert_1(Operand inst, int precision) { + + return toBinaryOfSpecificPrecision(inst.getValue(), precision); + + } + private static String convert(Operand inst, int precision) { + if (inst == null) + return toBinaryOfSpecificPrecision(0, precision); + + if (inst.getOperandType() == Operand.OperandType.Label) + return toBinaryOfSpecificPrecision(ParsedProgram.symtab.get(inst.getLabelValue()), precision); + + return toBinaryOfSpecificPrecision(inst.getValue(), precision); + + } + public static void setupSimulation(String assemblyProgramFile) + { + int firstCodeAddress = ParsedProgram.parseDataSection(assemblyProgramFile); + ParsedProgram.parseCodeSection(assemblyProgramFile, firstCodeAddress); + ParsedProgram.printState(); + } + + public static void assemble(String objectProgramFile) + { + + FileOutputStream file; + try { + file = new FileOutputStream(objectProgramFile); + //write the firstCodeAddress to the file + file.write(ByteBuffer.allocate(4).putInt(ParsedProgram.firstCodeAddress).array()); + //write the data to the file + for (var value : ParsedProgram.data) { + byte[] dataValue = ByteBuffer.allocate(4).putInt(value).array(); + file.write(dataValue); + } + //assemble one instruction at a time, and write to the file + for (var instruction : ParsedProgram.code) { + String line = ""; + String optype=(instruction.operationType).toString(); + line += map.get(optype); + // int op = Integer.parseInt(line, 2); + int op=Integer.parseInt(map.get(optype),2); + int pc = instruction.getProgramCounter(); + + if (op <= 20 && op % 2 == 0) { + // R3 Type + line += convert_1(instruction.getSourceOperand1(), 5); + line += convert_1(instruction.getSourceOperand2(), 5); + line += convert_1(instruction.getDestinationOperand(), 5); + line += toBinaryOfSpecificPrecision(0, 12); + + } + else if (op == 29) { + line += toBinaryOfSpecificPrecision(0, 27); + } + else if (op == 24) { + // RI Type + if (instruction.destinationOperand.getOperandType() == Operand.OperandType.Register) { + line += convert(instruction.getDestinationOperand(), 5); + line += toBinaryOfSpecificPrecision(0, 22); + } else { + line += toBinaryOfSpecificPrecision(0, 5); + int value = Integer.parseInt(convert(instruction.getDestinationOperand(), 5), 2) - pc; + String bin = toBinaryOfSpecificPrecision(value, 22); + line += bin.substring(bin.length() - 22); + } + } + else { + // R2I Type + if (op >= 25 && op <= 28) { + int value = Integer.parseInt(convert(instruction.getDestinationOperand(), 5), 2) - pc; + line += convert(instruction.getSourceOperand1(), 5); + line += convert(instruction.getSourceOperand2(), 5); + String bin = toBinaryOfSpecificPrecision(value, 17); + line += bin.substring(bin.length() - 17); + } else { + line += convert(instruction.getSourceOperand1(), 5); + line += convert(instruction.getDestinationOperand(), 5); + line += convert(instruction.getSourceOperand2(), 17); + } + } + int instInteger = (int) Long.parseLong(line, 2); + byte[] instBinary = ByteBuffer.allocate(4).putInt(instInteger).array(); + file.write(instBinary); + } + file.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/assignment-2/supporting_files/submissions/src/generic/Statistics.java b/assignment-2/supporting_files/submissions/src/generic/Statistics.java new file mode 100644 index 0000000..059cb7a --- /dev/null +++ b/assignment-2/supporting_files/submissions/src/generic/Statistics.java @@ -0,0 +1,13 @@ +package generic; + +public class Statistics { + + // TODO add your statistics here + + // TODO write functions to update statistics + + public static void printStatistics(String statFile) + { + // TODO add code here to print statistics in the output file + } +} diff --git a/assignment-2/supporting_files/submissions/src/main/.gitignore b/assignment-2/supporting_files/submissions/src/main/.gitignore new file mode 100644 index 0000000..a66c73a --- /dev/null +++ b/assignment-2/supporting_files/submissions/src/main/.gitignore @@ -0,0 +1 @@ +/Main.class diff --git a/assignment-2/supporting_files/submissions/src/main/Main.java b/assignment-2/supporting_files/submissions/src/main/Main.java new file mode 100644 index 0000000..fcb74c3 --- /dev/null +++ b/assignment-2/supporting_files/submissions/src/main/Main.java @@ -0,0 +1,19 @@ +package main; +import configuration.Configuration; +import generic.Misc; +import generic.Statistics; +import generic.Simulator; + +public class Main { + + public static void main(String[] args) { + if(args.length != 2) + { + Misc.printErrorAndExit("usage: java -jar \n"); + } + + Simulator.setupSimulation(args[0]); + Simulator.assemble(args[1]); + } + +} diff --git a/assignment-2/supporting_files/submissions/tmp.output b/assignment-2/supporting_files/submissions/tmp.output new file mode 100644 index 0000000..df70aab --- /dev/null +++ b/assignment-2/supporting_files/submissions/tmp.output @@ -0,0 +1,398 @@ +Buildfile: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build-subprojects: + +init: + [copy] Copying 14 files to /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/bin + +build-project: + [echo] CustomISAAssembler: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build: + +make-jar: + [jar] Building jar: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/jars/assembler.jar + +BUILD SUCCESSFUL +Total time: 0 seconds +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Buildfile: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build-subprojects: + +init: + [copy] Copying 14 files to /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/bin + +build-project: + [echo] CustomISAAssembler: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build: + +make-jar: + [jar] Building jar: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/jars/assembler.jar + +BUILD SUCCESSFUL +Total time: 0 seconds +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Buildfile: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build-subprojects: + +init: + [copy] Copying 12 files to /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/bin + +build-project: + [echo] CustomISAAssembler: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build: + +make-jar: + [jar] Building jar: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/jars/assembler.jar + +BUILD SUCCESSFUL +Total time: 0 seconds +Symbol Table : +[{a=0, b=1, main=2}] + +Parsed instructions : +[[PC=2 load [Register:0] [Label:a] [Register:4] +, PC=3 end null null null +]] +Symbol Table : +[{prime=11, a=0, for=6, main=1, notprime=14}] + +Parsed instructions : +[[PC=1 load [Register:0] [Label:a] [Register:3] +, PC=2 sub [Register:4] [Register:4] [Register:4] +, PC=3 divi [Register:3] [Immediate:2] [Register:4] +, PC=4 sub [Register:6] [Register:6] [Register:6] +, PC=5 addi [Register:6] [Immediate:2] [Register:6] +, PC=6 bgt [Register:6] [Register:4] [Label:prime] +, PC=7 div [Register:3] [Register:6] [Register:7] +, PC=8 beq [Register:0] [Register:31] [Label:notprime] +, PC=9 addi [Register:6] [Immediate:1] [Register:6] +, PC=10 jmp null null [Label:for] +, PC=11 sub [Register:10] [Register:10] [Register:10] +, PC=12 addi [Register:10] [Immediate:1] [Register:10] +, PC=13 end null null null +, PC=14 sub [Register:10] [Register:10] [Register:10] +, PC=15 subi [Register:10] [Immediate:1] [Register:10] +, PC=16 end null null null +]] +Symbol Table : +[{a=0, palindrome=13, loop=3, main=1}] + +Parsed instructions : +[[PC=1 load [Register:0] [Label:a] [Register:3] +, PC=2 sub [Register:7] [Register:7] [Register:7] +, PC=3 divi [Register:3] [Immediate:10] [Register:4] +, PC=4 muli [Register:7] [Immediate:10] [Register:7] +, PC=5 add [Register:7] [Register:31] [Register:7] +, PC=6 divi [Register:3] [Immediate:10] [Register:3] +, PC=7 bgt [Register:3] [Register:0] [Label:loop] +, PC=8 load [Register:0] [Label:a] [Register:5] +, PC=9 beq [Register:5] [Register:7] [Label:palindrome] +, PC=10 sub [Register:10] [Register:10] [Register:10] +, PC=11 subi [Register:10] [Immediate:1] [Register:10] +, PC=12 end null null null +, PC=13 sub [Register:10] [Register:10] [Register:10] +, PC=14 addi [Register:10] [Immediate:1] [Register:10] +, PC=15 end null null null +]] +Buildfile: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build-subprojects: + +init: + [copy] Copying 14 files to /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/bin + +build-project: + [echo] CustomISAAssembler: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build: + +make-jar: + [jar] Building jar: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/jars/assembler.jar + +BUILD SUCCESSFUL +Total time: 0 seconds +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Buildfile: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build-subprojects: + +init: + [copy] Copying 12 files to /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/bin + +build-project: + [echo] CustomISAAssembler: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build: + +make-jar: + [jar] Building jar: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/jars/assembler.jar + +BUILD SUCCESSFUL +Total time: 0 seconds +Symbol Table : +[{a=0, b=1, main=2}] + +Parsed instructions : +[[PC=2 load [Register:0] [Label:a] [Register:4] +, PC=3 end null null null +]] +Symbol Table : +[{prime=11, a=0, for=6, main=1, notprime=14}] + +Parsed instructions : +[[PC=1 load [Register:0] [Label:a] [Register:3] +, PC=2 sub [Register:4] [Register:4] [Register:4] +, PC=3 divi [Register:3] [Immediate:2] [Register:4] +, PC=4 sub [Register:6] [Register:6] [Register:6] +, PC=5 addi [Register:6] [Immediate:2] [Register:6] +, PC=6 bgt [Register:6] [Register:4] [Label:prime] +, PC=7 div [Register:3] [Register:6] [Register:7] +, PC=8 beq [Register:0] [Register:31] [Label:notprime] +, PC=9 addi [Register:6] [Immediate:1] [Register:6] +, PC=10 jmp null null [Label:for] +, PC=11 sub [Register:10] [Register:10] [Register:10] +, PC=12 addi [Register:10] [Immediate:1] [Register:10] +, PC=13 end null null null +, PC=14 sub [Register:10] [Register:10] [Register:10] +, PC=15 subi [Register:10] [Immediate:1] [Register:10] +, PC=16 end null null null +]] +Symbol Table : +[{a=0, palindrome=13, loop=3, main=1}] + +Parsed instructions : +[[PC=1 load [Register:0] [Label:a] [Register:3] +, PC=2 sub [Register:7] [Register:7] [Register:7] +, PC=3 divi [Register:3] [Immediate:10] [Register:4] +, PC=4 muli [Register:7] [Immediate:10] [Register:7] +, PC=5 add [Register:7] [Register:31] [Register:7] +, PC=6 divi [Register:3] [Immediate:10] [Register:3] +, PC=7 bgt [Register:3] [Register:0] [Label:loop] +, PC=8 load [Register:0] [Label:a] [Register:5] +, PC=9 beq [Register:5] [Register:7] [Label:palindrome] +, PC=10 sub [Register:10] [Register:10] [Register:10] +, PC=11 subi [Register:10] [Immediate:1] [Register:10] +, PC=12 end null null null +, PC=13 sub [Register:10] [Register:10] [Register:10] +, PC=14 addi [Register:10] [Immediate:1] [Register:10] +, PC=15 end null null null +]] +Buildfile: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build-subprojects: + +init: + [copy] Copying 12 files to /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/bin + +build-project: + [echo] CustomISAAssembler: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build: + +make-jar: + [jar] Building jar: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/jars/assembler.jar + +BUILD SUCCESSFUL +Total time: 0 seconds +Symbol Table : +[{a=0, b=1, main=2}] + +Parsed instructions : +[[PC=2 load [Register:0] [Label:a] [Register:4] +, PC=3 end null null null +]] +Symbol Table : +[{prime=11, a=0, for=6, main=1, notprime=14}] + +Parsed instructions : +[[PC=1 load [Register:0] [Label:a] [Register:3] +, PC=2 sub [Register:4] [Register:4] [Register:4] +, PC=3 divi [Register:3] [Immediate:2] [Register:4] +, PC=4 sub [Register:6] [Register:6] [Register:6] +, PC=5 addi [Register:6] [Immediate:2] [Register:6] +, PC=6 bgt [Register:6] [Register:4] [Label:prime] +, PC=7 div [Register:3] [Register:6] [Register:7] +, PC=8 beq [Register:0] [Register:31] [Label:notprime] +, PC=9 addi [Register:6] [Immediate:1] [Register:6] +, PC=10 jmp null null [Label:for] +, PC=11 sub [Register:10] [Register:10] [Register:10] +, PC=12 addi [Register:10] [Immediate:1] [Register:10] +, PC=13 end null null null +, PC=14 sub [Register:10] [Register:10] [Register:10] +, PC=15 subi [Register:10] [Immediate:1] [Register:10] +, PC=16 end null null null +]] +Symbol Table : +[{a=0, palindrome=13, loop=3, main=1}] + +Parsed instructions : +[[PC=1 load [Register:0] [Label:a] [Register:3] +, PC=2 sub [Register:7] [Register:7] [Register:7] +, PC=3 divi [Register:3] [Immediate:10] [Register:4] +, PC=4 muli [Register:7] [Immediate:10] [Register:7] +, PC=5 add [Register:7] [Register:31] [Register:7] +, PC=6 divi [Register:3] [Immediate:10] [Register:3] +, PC=7 bgt [Register:3] [Register:0] [Label:loop] +, PC=8 load [Register:0] [Label:a] [Register:5] +, PC=9 beq [Register:5] [Register:7] [Label:palindrome] +, PC=10 sub [Register:10] [Register:10] [Register:10] +, PC=11 subi [Register:10] [Immediate:1] [Register:10] +, PC=12 end null null null +, PC=13 sub [Register:10] [Register:10] [Register:10] +, PC=14 addi [Register:10] [Immediate:1] [Register:10] +, PC=15 end null null null +]] +Buildfile: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build-subprojects: + +init: + [copy] Copying 12 files to /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/bin + +build-project: + [echo] CustomISAAssembler: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build: + +make-jar: + [jar] Building jar: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/jars/assembler.jar + +BUILD SUCCESSFUL +Total time: 0 seconds +Symbol Table : +[{a=0, b=1, main=2}] + +Parsed instructions : +[[PC=2 load [Register:0] [Label:a] [Register:4] +, PC=3 end null null null +]] +Symbol Table : +[{prime=11, a=0, for=6, main=1, notprime=14}] + +Parsed instructions : +[[PC=1 load [Register:0] [Label:a] [Register:3] +, PC=2 sub [Register:4] [Register:4] [Register:4] +, PC=3 divi [Register:3] [Immediate:2] [Register:4] +, PC=4 sub [Register:6] [Register:6] [Register:6] +, PC=5 addi [Register:6] [Immediate:2] [Register:6] +, PC=6 bgt [Register:6] [Register:4] [Label:prime] +, PC=7 div [Register:3] [Register:6] [Register:7] +, PC=8 beq [Register:0] [Register:31] [Label:notprime] +, PC=9 addi [Register:6] [Immediate:1] [Register:6] +, PC=10 jmp null null [Label:for] +, PC=11 sub [Register:10] [Register:10] [Register:10] +, PC=12 addi [Register:10] [Immediate:1] [Register:10] +, PC=13 end null null null +, PC=14 sub [Register:10] [Register:10] [Register:10] +, PC=15 subi [Register:10] [Immediate:1] [Register:10] +, PC=16 end null null null +]] +Symbol Table : +[{a=0, palindrome=13, loop=3, main=1}] + +Parsed instructions : +[[PC=1 load [Register:0] [Label:a] [Register:3] +, PC=2 sub [Register:7] [Register:7] [Register:7] +, PC=3 divi [Register:3] [Immediate:10] [Register:4] +, PC=4 muli [Register:7] [Immediate:10] [Register:7] +, PC=5 add [Register:7] [Register:31] [Register:7] +, PC=6 divi [Register:3] [Immediate:10] [Register:3] +, PC=7 bgt [Register:3] [Register:0] [Label:loop] +, PC=8 load [Register:0] [Label:a] [Register:5] +, PC=9 beq [Register:5] [Register:7] [Label:palindrome] +, PC=10 sub [Register:10] [Register:10] [Register:10] +, PC=11 subi [Register:10] [Immediate:1] [Register:10] +, PC=12 end null null null +, PC=13 sub [Register:10] [Register:10] [Register:10] +, PC=14 addi [Register:10] [Immediate:1] [Register:10] +, PC=15 end null null null +]] +Buildfile: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build-subprojects: + +init: + [copy] Copying 14 files to /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/bin + +build-project: + [echo] CustomISAAssembler: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build: + +make-jar: + [jar] Building jar: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/jars/assembler.jar + +BUILD SUCCESSFUL +Total time: 0 seconds +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Buildfile: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build-subprojects: + +init: + [copy] Copying 17 files to /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/bin + +build-project: + [echo] CustomISAAssembler: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build: + +make-jar: + [jar] Building jar: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/jars/assembler.jar + +BUILD SUCCESSFUL +Total time: 0 seconds +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Buildfile: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build-subprojects: + +init: + [copy] Copying 17 files to /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/bin + +build-project: + [echo] CustomISAAssembler: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/build.xml + +build: + +make-jar: + [jar] Building jar: /home/chasingcar/acad/sem-5/ca/cs311-lab/assignment-2/supporting_files/submissions/jars/assembler.jar + +BUILD SUCCESSFUL +Total time: 0 seconds +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 +Error: LinkageError occurred while loading main class main.Main + java.lang.UnsupportedClassVersionError: main/Main has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 diff --git a/assignment-2/supporting_files/test_cases/1.asm b/assignment-2/supporting_files/test_cases/1.asm new file mode 100755 index 0000000..ee2d17a --- /dev/null +++ b/assignment-2/supporting_files/test_cases/1.asm @@ -0,0 +1,9 @@ + .data +a: + 10 +b: + 20 + .text +main: + load %x0, $a, %x4 + end diff --git a/assignment-2/supporting_files/test_cases/1.out b/assignment-2/supporting_files/test_cases/1.out new file mode 100755 index 0000000000000000000000000000000000000000..57736dd0bdcc8b87d9e2925568fb6536c128c5b0 GIT binary patch literal 20 YcmZQzU|?ckVBi8`kqsOS3@?BT01Ctb!2kdN literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/test_cases/2.asm b/assignment-2/supporting_files/test_cases/2.asm new file mode 100755 index 0000000..20993c2 --- /dev/null +++ b/assignment-2/supporting_files/test_cases/2.asm @@ -0,0 +1,22 @@ + .data +a: + 12321 + .text +main: + load %x0, $a, %x3 + sub %x7, %x7, %x7 +loop: + divi %x3, 10, %x4 + muli %x7, 10, %x7 + add %x7, %x31, %x7 + divi %x3, 10, %x3 + bgt %x3, %x0, loop + load %x0, $a, %x5 + beq %x5, %x7, palindrome + sub %x10, %x10, %x10 + subi %x10, 1, %x10 + end +palindrome: + sub %x10, %x10, %x10 + addi %x10, 1, %x10 + end diff --git a/assignment-2/supporting_files/test_cases/2.out b/assignment-2/supporting_files/test_cases/2.out new file mode 100755 index 0000000000000000000000000000000000000000..d4fbf393baf1112024f728db61f184cc56c40f89 GIT binary patch literal 68 zcmZQzU|?imFi_mU#=szWu7JVf1Ou1mIR-Aqe?ayz2CfGO|Nq&*#lUdVkAX#K$^r(d QDGZD+7#J8pY%VAp08l3p^#A|> literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/test_cases/3.asm b/assignment-2/supporting_files/test_cases/3.asm new file mode 100755 index 0000000..e857ac6 --- /dev/null +++ b/assignment-2/supporting_files/test_cases/3.asm @@ -0,0 +1,24 @@ +.data +a: + 11 + .text +main: + load %x0, $a, %x3 + sub %x4, %x4, %x4 + divi %x3, 2, %x4 + sub %x6, %x6, %x6 + addi %x6, 2, %x6 +for: + bgt %x6, %x4, prime + div %x3, %x6, %x7 + beq %x0, %x31, notprime + addi %x6, 1, %x6 + jmp for +prime: + sub %x10, %x10, %x10 + addi %x10, 1, %x10 + end +notprime: + sub %x10, %x10, %x10 + subi %x10, 1, %x10 + end diff --git a/assignment-2/supporting_files/test_cases/3.out b/assignment-2/supporting_files/test_cases/3.out new file mode 100755 index 0000000000000000000000000000000000000000..b157782b1f1988d687c2a76895fb0d9d44fecba3 GIT binary patch literal 72 zcmZQzU|?imVBp@s#=s!R;lN;Vf`Lh}CxL;phk@x~2Lr3YnF59rb_{GlKH~xV|9^z0 SEMVZ8!oc_fs0qZDg0cY;{}9pu literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/test_cases/test.out b/assignment-2/supporting_files/test_cases/test.out new file mode 100644 index 0000000000000000000000000000000000000000..b157782b1f1988d687c2a76895fb0d9d44fecba3 GIT binary patch literal 72 zcmZQzU|?imVBp@s#=s!R;lN;Vf`Lh}CxL;phk@x~2Lr3YnF59rb_{GlKH~xV|9^z0 SEMVZ8!oc_fs0qZDg0cY;{}9pu literal 0 HcmV?d00001 diff --git a/assignment-2/supporting_files/test_zip.py b/assignment-2/supporting_files/test_zip.py new file mode 100644 index 0000000..76cdb87 --- /dev/null +++ b/assignment-2/supporting_files/test_zip.py @@ -0,0 +1,76 @@ +#!/bin/python + +import sys +import os +import zipfile +import shutil +import filecmp +import subprocess +from threading import Timer + +zip_file = sys.argv[1] + +l = len(zip_file.split("/")) +print("Students :\t" + zip_file.split("/")[l-1].split("_")[0] + " and " + zip_file.split("/")[l-1].split("_")[1].split(".")[0]) +print("") + +submissions_temp_dir = "./submissions/" + +if not os.path.exists(submissions_temp_dir): + os.mkdir(submissions_temp_dir) + +zip_ref = zipfile.ZipFile(zip_file, 'r') +zip_ref.extractall(submissions_temp_dir) +zip_ref.close() + +shutil.copyfile("build.xml", submissions_temp_dir + "/build.xml") + +os.chdir(submissions_temp_dir) + +stdout_file = open("./tmp.output", 'a') +popen_args = ["ant", "make-jar"] +proc = subprocess.Popen(popen_args, stdout = stdout_file, stderr = stdout_file) +timer = Timer(5, proc.kill) +try: + timer.start() + stdout, stderr = proc.communicate() +finally: + timer.cancel() +stdout_file.close() + +if not os.path.exists("jars/assembler.jar"): + print("compilation failed. jar file not created") + sys.exit(0) + +test_cases_dir = "../test_cases" +total_marks = 0 +scored_marks = 0 +for testcase in os.listdir(test_cases_dir): + if ".asm" in testcase: + total_marks = total_marks + 1 + + stdout_file = open("./tmp.output", 'a') + popen_args = ["java", "-Xmx1g", "-jar", "jars/assembler.jar", test_cases_dir + "/" + testcase, "./" + testcase.split(".")[0] + ".observedoutput"] + proc = subprocess.Popen(popen_args, stdout = stdout_file, stderr = stdout_file) + timer = Timer(5, proc.kill) + try: + timer.start() + stdout, stderr = proc.communicate() + finally: + timer.cancel() + stdout_file.close() + + if os.path.exists("./" + testcase.split(".")[0] + ".observedoutput"): + if filecmp.cmp(test_cases_dir + "/" + testcase.split(".")[0] + ".out", "./" + testcase.split(".")[0] + ".observedoutput") == True: + scored_marks = scored_marks + 1 + print(testcase + " : PASS!") + else: + print(testcase + " : fail - incorrect object file contents") + else: + print(testcase + " : fail - file not created") + +os.chdir("..") + +# shutil.rmtree(submissions_temp_dir) + +print("\ntotal score = " + str(scored_marks) + " out of " + str(total_marks)) diff --git a/assignment-3/src/configuration/Configuration.java b/assignment-3/src/configuration/Configuration.java new file mode 100644 index 0000000..d7b43e1 --- /dev/null +++ b/assignment-3/src/configuration/Configuration.java @@ -0,0 +1,116 @@ +package configuration; + +import java.io.File; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import generic.Misc; + +public class Configuration { + public static int ALU_count; + public static int ALU_latency; + public static int ALU_reciprocal_of_throughput; + public static int multiplier_count; + public static int multiplier_latency; + public static int multiplier_reciprocal_of_throughput; + public static int divider_count; + public static int divider_latency; + public static int divider_reciprocal_of_throughput; + + public static int L1i_numberOfLines; + public static int L1i_latency; + public static int L1i_associativity; + public static String L1i_replacementPolicy; + + public static int L1d_numberOfLines; + public static int L1d_latency; + public static int L1d_associativity; + public static String L1d_replacementPolicy; + + public static int L2_numberOfLines; + public static int L2_latency; + public static int L2_associativity; + public static String L2_replacementPolicy; + + public static int mainMemoryLatency; + + public static void parseConfiguratioFile(String configFileName) + { + Document doc = null; + + try + { + File file = new File(configFileName); + DocumentBuilderFactory DBFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder DBuilder = DBFactory.newDocumentBuilder(); + doc = DBuilder.parse(file); + doc.getDocumentElement().normalize(); + } + catch(Exception e) + { + e.printStackTrace(); + Misc.printErrorAndExit("Error in reading config file : " + e); + } + + NodeList nodeLst = doc.getElementsByTagName("ALU"); + Element elmnt = (Element) nodeLst.item(0); + ALU_count = Integer.parseInt(getImmediateString("Count", elmnt)); + ALU_latency = Integer.parseInt(getImmediateString("Latency", elmnt)); + ALU_reciprocal_of_throughput = Integer.parseInt(getImmediateString("ReciprocalOfThroughput", elmnt)); + + nodeLst = doc.getElementsByTagName("Multiplier"); + elmnt = (Element) nodeLst.item(0); + multiplier_count = Integer.parseInt(getImmediateString("Count", elmnt)); + multiplier_latency = Integer.parseInt(getImmediateString("Latency", elmnt)); + multiplier_reciprocal_of_throughput = Integer.parseInt(getImmediateString("ReciprocalOfThroughput", elmnt)); + + nodeLst = doc.getElementsByTagName("Divider"); + elmnt = (Element) nodeLst.item(0); + divider_count = Integer.parseInt(getImmediateString("Count", elmnt)); + divider_latency = Integer.parseInt(getImmediateString("Latency", elmnt)); + divider_reciprocal_of_throughput = Integer.parseInt(getImmediateString("ReciprocalOfThroughput", elmnt)); + + nodeLst = doc.getElementsByTagName("L1iCache"); + elmnt = (Element) nodeLst.item(0); + L1i_numberOfLines = Integer.parseInt(getImmediateString("NumberOfLines", elmnt)); + L1i_latency = Integer.parseInt(getImmediateString("Latency", elmnt)); + L1i_associativity = Integer.parseInt(getImmediateString("Associativity", elmnt)); + L1i_replacementPolicy = getImmediateString("ReplacementPolicy", elmnt); + + nodeLst = doc.getElementsByTagName("L1dCache"); + elmnt = (Element) nodeLst.item(0); + L1d_numberOfLines = Integer.parseInt(getImmediateString("NumberOfLines", elmnt)); + L1d_latency = Integer.parseInt(getImmediateString("Latency", elmnt)); + L1d_associativity = Integer.parseInt(getImmediateString("Associativity", elmnt)); + L1d_replacementPolicy = getImmediateString("ReplacementPolicy", elmnt); + + nodeLst = doc.getElementsByTagName("L2Cache"); + elmnt = (Element) nodeLst.item(0); + L2_numberOfLines = Integer.parseInt(getImmediateString("NumberOfLines", elmnt)); + L2_latency = Integer.parseInt(getImmediateString("Latency", elmnt)); + L2_associativity = Integer.parseInt(getImmediateString("Associativity", elmnt)); + L2_replacementPolicy = getImmediateString("ReplacementPolicy", elmnt); + + nodeLst = doc.getElementsByTagName("Configuration"); + elmnt = (Element) nodeLst.item(0); + mainMemoryLatency = Integer.parseInt(getImmediateString("MainMemoryLatency", elmnt)); + } + + private static String getImmediateString(String tagName, Element parent) // Get the immediate string value of a particular tag name under a particular parent tag + { + NodeList nodeLst = parent.getElementsByTagName(tagName); + if (nodeLst.item(0) == null) + { + Misc.printErrorAndExit("XML Configuration error : Item \"" + tagName + "\" not found inside the \"" + parent.getTagName() + "\" tag in the configuration file!!"); + } + Element NodeElmnt = (Element) nodeLst.item(0); + NodeList resultNode = NodeElmnt.getChildNodes(); + return ((Node) resultNode.item(0)).getNodeValue(); + } +} diff --git a/assignment-3/src/configuration/config.xml b/assignment-3/src/configuration/config.xml new file mode 100644 index 0000000..002c97c --- /dev/null +++ b/assignment-3/src/configuration/config.xml @@ -0,0 +1,43 @@ + + + + + 2 + 1 + 1 + + + 1 + 4 + 1 + + + 1 + 10 + 1 + + + + + 256 + 2 + 4 + LRU + + + + 256 + 2 + 4 + LRU + + + + 2048 + 10 + 4 + LRU + + + 40 + \ No newline at end of file diff --git a/assignment-3/src/generic/Instruction.java b/assignment-3/src/generic/Instruction.java new file mode 100644 index 0000000..ec3ef99 --- /dev/null +++ b/assignment-3/src/generic/Instruction.java @@ -0,0 +1,96 @@ +package generic; + +public class Instruction { + + public enum OperationType {add, addi, sub, subi, mul, muli, div, divi, and, andi, or, ori, xor, xori, slt, slti, sll, slli, srl, srli, sra, srai, load, store, jmp, beq, bne, blt, bgt, end}; + + int programCounter; + OperationType operationType; + Operand sourceOperand1; + Operand sourceOperand2; + Operand destinationOperand; + + public int getProgramCounter() { + return programCounter; + } + public void setProgramCounter(int programCounter) { + this.programCounter = programCounter; + } + public OperationType getOperationType() { + return operationType; + } + public void setOperationType(OperationType operationType) { + this.operationType = operationType; + } + public Operand getSourceOperand1() { + return sourceOperand1; + } + public void setSourceOperand1(Operand sourceOperand1) { + this.sourceOperand1 = sourceOperand1; + } + public Operand getSourceOperand2() { + return sourceOperand2; + } + public void setSourceOperand2(Operand sourceOperand2) { + this.sourceOperand2 = sourceOperand2; + } + public Operand getDestinationOperand() { + return destinationOperand; + } + public void setDestinationOperand(Operand destinationOperand) { + this.destinationOperand = destinationOperand; + } + public String toString() + { + if(sourceOperand1 != null) + { + if(sourceOperand2 != null) + { + if(destinationOperand != null) + { + return "PC="+ programCounter + "\t" + operationType + "\t" + sourceOperand1 + "\t" + sourceOperand2 + "\t" + destinationOperand + "\n"; + } + else + { + return "PC="+ programCounter + "\t" + operationType + "\t" + sourceOperand1 + "\t" + sourceOperand2 + "\tnull" + "\n"; + } + } + else + { + if(destinationOperand != null) + { + return "PC="+ programCounter + "\t" + operationType + "\t" + sourceOperand1 + "\tnull" + "\t" + destinationOperand + "\n"; + } + else + { + return "PC="+ programCounter + "\t" + operationType + "\t" + sourceOperand1 + "\tnull" + "\tnull" + "\n"; + } + } + } + else + { + if(sourceOperand2 != null) + { + if(destinationOperand != null) + { + return "PC="+ programCounter + "\t" + operationType + "\tnull" + "\t" + sourceOperand2 + "\t" + destinationOperand + "\n"; + } + else + { + return "PC="+ programCounter + "\t" + operationType + "\tnull" + "\t" + sourceOperand2 + "\tnull" + "\n"; + } + } + else + { + if(destinationOperand != null) + { + return "PC="+ programCounter + "\t" + operationType + "\tnull" + "\tnull" + "\t" + destinationOperand + "\n"; + } + else + { + return "PC="+ programCounter + "\t" + operationType + "\tnull" + "\tnull" + "\tnull" + "\n"; + } + } + } + } +} diff --git a/assignment-3/src/generic/Misc.java b/assignment-3/src/generic/Misc.java new file mode 100644 index 0000000..0be690a --- /dev/null +++ b/assignment-3/src/generic/Misc.java @@ -0,0 +1,10 @@ +package generic; + +public class Misc { + + public static void printErrorAndExit(String message) + { + System.err.println(message); + System.exit(1); + } +} diff --git a/assignment-3/src/generic/Operand.java b/assignment-3/src/generic/Operand.java new file mode 100644 index 0000000..3224099 --- /dev/null +++ b/assignment-3/src/generic/Operand.java @@ -0,0 +1,41 @@ +package generic; + +public class Operand { + + public enum OperandType {Register, Immediate, Label}; + + OperandType operandType; + int value; + String labelValue; //only applicable for Label type; + //Note that Label type is only applicable for functional emulation of assembly file + + public OperandType getOperandType() { + return operandType; + } + public void setOperandType(OperandType operandType) { + this.operandType = operandType; + } + public int getValue() { + return value; + } + public void setValue(int value) { + this.value = value; + } + public String getLabelValue() { + return labelValue; + } + public void setLabelValue(String labelValue) { + this.labelValue = labelValue; + } + public String toString() + { + if(operandType == OperandType.Register || operandType == OperandType.Immediate) + { + return "[" + operandType.toString() + ":" + value + "]"; + } + else + { + return "[" + operandType.toString() + ":" + labelValue + "]"; + } + } +} diff --git a/assignment-3/src/generic/Simulator.java b/assignment-3/src/generic/Simulator.java new file mode 100644 index 0000000..d093f82 --- /dev/null +++ b/assignment-3/src/generic/Simulator.java @@ -0,0 +1,57 @@ +package generic; + +import processor.Clock; +import processor.Processor; + +public class Simulator { + + static Processor processor; + static boolean simulationComplete; + + public static void setupSimulation(String assemblyProgramFile, Processor p) + { + Simulator.processor = p; + loadProgram(assemblyProgramFile); + + simulationComplete = false; + } + + static void loadProgram(String assemblyProgramFile) + { + /* + * TODO + * 1. load the program into memory according to the program layout described + * in the ISA specification + * 2. set PC to the address of the first instruction in the main + * 3. set the following registers: + * x0 = 0 + * x1 = 65535 + * x2 = 65535 + */ + } + + public static void simulate() + { + while(simulationComplete == false) + { + processor.getIFUnit().performIF(); + Clock.incrementClock(); + processor.getOFUnit().performOF(); + Clock.incrementClock(); + processor.getEXUnit().performEX(); + Clock.incrementClock(); + processor.getMAUnit().performMA(); + Clock.incrementClock(); + processor.getRWUnit().performRW(); + Clock.incrementClock(); + } + + // TODO + // set statistics + } + + public static void setSimulationComplete(boolean value) + { + simulationComplete = value; + } +} diff --git a/assignment-3/src/generic/Statistics.java b/assignment-3/src/generic/Statistics.java new file mode 100644 index 0000000..20125e6 --- /dev/null +++ b/assignment-3/src/generic/Statistics.java @@ -0,0 +1,39 @@ +package generic; + +import java.io.PrintWriter; + +public class Statistics { + + // TODO add your statistics here + static int numberOfInstructions; + static int numberOfCycles; + + + public static void printStatistics(String statFile) + { + try + { + PrintWriter writer = new PrintWriter(statFile); + + writer.println("Number of instructions executed = " + numberOfInstructions); + writer.println("Number of cycles taken = " + numberOfCycles); + + // TODO add code here to print statistics in the output file + + writer.close(); + } + catch(Exception e) + { + Misc.printErrorAndExit(e.getMessage()); + } + } + + // TODO write functions to update statistics + public void setNumberOfInstructions(int numberOfInstructions) { + Statistics.numberOfInstructions = numberOfInstructions; + } + + public void setNumberOfCycles(int numberOfCycles) { + Statistics.numberOfCycles = numberOfCycles; + } +} diff --git a/assignment-3/src/main/Main.java b/assignment-3/src/main/Main.java new file mode 100644 index 0000000..237c66e --- /dev/null +++ b/assignment-3/src/main/Main.java @@ -0,0 +1,50 @@ +package main; +import java.util.ArrayList; + +import configuration.Configuration; +import generic.Misc; +import generic.Statistics; +import processor.Processor; +import processor.memorysystem.MainMemory; +import processor.pipeline.RegisterFile; +import generic.Simulator; + +public class Main { + + public static void main(String[] args) { + if(args.length != 3) + { + Misc.printErrorAndExit("usage: java -jar \n"); + } + + Configuration.parseConfiguratioFile(args[0]); + + Processor processor = new Processor(); + + Simulator.setupSimulation(args[2], processor); + Simulator.simulate(); + + processor.printState(0, 30); // ((0, 0) refers to the range of main memory addresses we wish to print. this is an empty set. + + Statistics.printStatistics(args[1]); + + System.out.println("Hash of the Processor State = "+getHashCode(processor.getRegisterFile(), processor.getMainMemory())); + } + + static int getHashCode(RegisterFile registerState, MainMemory memoryState) { + ArrayList hash = new ArrayList(); + + hash.add(registerState.getProgramCounter()); + + for(int i=0;i<32;i++) { + hash.add(registerState.getValue(i)); + } + + for(int i=0;i<65536;i++) { + hash.add(memoryState.getWord(i)); + } + + return hash.hashCode(); + } + +} diff --git a/assignment-3/src/processor/Clock.java b/assignment-3/src/processor/Clock.java new file mode 100644 index 0000000..a19b8a8 --- /dev/null +++ b/assignment-3/src/processor/Clock.java @@ -0,0 +1,15 @@ +package processor; + +public class Clock { + static long currentTime = 0; + + public static void incrementClock() + { + currentTime++; + } + + public static long getCurrentTime() + { + return currentTime; + } +} diff --git a/assignment-3/src/processor/Processor.java b/assignment-3/src/processor/Processor.java new file mode 100644 index 0000000..33e8188 --- /dev/null +++ b/assignment-3/src/processor/Processor.java @@ -0,0 +1,97 @@ +package processor; + +import processor.memorysystem.MainMemory; +import processor.pipeline.EX_IF_LatchType; +import processor.pipeline.EX_MA_LatchType; +import processor.pipeline.Execute; +import processor.pipeline.IF_EnableLatchType; +import processor.pipeline.IF_OF_LatchType; +import processor.pipeline.InstructionFetch; +import processor.pipeline.MA_RW_LatchType; +import processor.pipeline.MemoryAccess; +import processor.pipeline.OF_EX_LatchType; +import processor.pipeline.OperandFetch; +import processor.pipeline.RegisterFile; +import processor.pipeline.RegisterWrite; + +public class Processor { + + RegisterFile registerFile; + MainMemory mainMemory; + + IF_EnableLatchType IF_EnableLatch; + IF_OF_LatchType IF_OF_Latch; + OF_EX_LatchType OF_EX_Latch; + EX_MA_LatchType EX_MA_Latch; + EX_IF_LatchType EX_IF_Latch; + MA_RW_LatchType MA_RW_Latch; + + InstructionFetch IFUnit; + OperandFetch OFUnit; + Execute EXUnit; + MemoryAccess MAUnit; + RegisterWrite RWUnit; + + public Processor() + { + registerFile = new RegisterFile(); + mainMemory = new MainMemory(); + + IF_EnableLatch = new IF_EnableLatchType(); + IF_OF_Latch = new IF_OF_LatchType(); + OF_EX_Latch = new OF_EX_LatchType(); + EX_MA_Latch = new EX_MA_LatchType(); + EX_IF_Latch = new EX_IF_LatchType(); + MA_RW_Latch = new MA_RW_LatchType(); + + IFUnit = new InstructionFetch(this, IF_EnableLatch, IF_OF_Latch, EX_IF_Latch); + OFUnit = new OperandFetch(this, IF_OF_Latch, OF_EX_Latch); + EXUnit = new Execute(this, OF_EX_Latch, EX_MA_Latch, EX_IF_Latch); + MAUnit = new MemoryAccess(this, EX_MA_Latch, MA_RW_Latch); + RWUnit = new RegisterWrite(this, MA_RW_Latch, IF_EnableLatch); + } + + public void printState(int memoryStartingAddress, int memoryEndingAddress) + { + System.out.println(registerFile.getContentsAsString()); + + System.out.println(mainMemory.getContentsAsString(memoryStartingAddress, memoryEndingAddress)); + } + + public RegisterFile getRegisterFile() { + return registerFile; + } + + public void setRegisterFile(RegisterFile registerFile) { + this.registerFile = registerFile; + } + + public MainMemory getMainMemory() { + return mainMemory; + } + + public void setMainMemory(MainMemory mainMemory) { + this.mainMemory = mainMemory; + } + + public InstructionFetch getIFUnit() { + return IFUnit; + } + + public OperandFetch getOFUnit() { + return OFUnit; + } + + public Execute getEXUnit() { + return EXUnit; + } + + public MemoryAccess getMAUnit() { + return MAUnit; + } + + public RegisterWrite getRWUnit() { + return RWUnit; + } + +} diff --git a/assignment-3/src/processor/memorysystem/MainMemory.java b/assignment-3/src/processor/memorysystem/MainMemory.java new file mode 100644 index 0000000..94b7bd4 --- /dev/null +++ b/assignment-3/src/processor/memorysystem/MainMemory.java @@ -0,0 +1,35 @@ +package processor.memorysystem; + +public class MainMemory { + int[] memory; + + public MainMemory() + { + memory = new int[65536]; + } + + public int getWord(int address) + { + return memory[address]; + } + + public void setWord(int address, int value) + { + memory[address] = value; + } + + public String getContentsAsString(int startingAddress, int endingAddress) + { + if(startingAddress == endingAddress) + return ""; + + StringBuilder sb = new StringBuilder(); + sb.append("\nMain Memory Contents:\n\n"); + for(int i = startingAddress; i <= endingAddress; i++) + { + sb.append(i + "\t\t: " + memory[i] + "\n"); + } + sb.append("\n"); + return sb.toString(); + } +} diff --git a/assignment-3/src/processor/pipeline/EX_IF_LatchType.java b/assignment-3/src/processor/pipeline/EX_IF_LatchType.java new file mode 100644 index 0000000..6ca9646 --- /dev/null +++ b/assignment-3/src/processor/pipeline/EX_IF_LatchType.java @@ -0,0 +1,10 @@ +package processor.pipeline; + +public class EX_IF_LatchType { + + public EX_IF_LatchType() + { + + } + +} diff --git a/assignment-3/src/processor/pipeline/EX_MA_LatchType.java b/assignment-3/src/processor/pipeline/EX_MA_LatchType.java new file mode 100644 index 0000000..cf74f38 --- /dev/null +++ b/assignment-3/src/processor/pipeline/EX_MA_LatchType.java @@ -0,0 +1,20 @@ +package processor.pipeline; + +public class EX_MA_LatchType { + + boolean MA_enable; + + public EX_MA_LatchType() + { + MA_enable = false; + } + + public boolean isMA_enable() { + return MA_enable; + } + + public void setMA_enable(boolean mA_enable) { + MA_enable = mA_enable; + } + +} diff --git a/assignment-3/src/processor/pipeline/Execute.java b/assignment-3/src/processor/pipeline/Execute.java new file mode 100644 index 0000000..df6e251 --- /dev/null +++ b/assignment-3/src/processor/pipeline/Execute.java @@ -0,0 +1,24 @@ +package processor.pipeline; + +import processor.Processor; + +public class Execute { + Processor containingProcessor; + OF_EX_LatchType OF_EX_Latch; + EX_MA_LatchType EX_MA_Latch; + EX_IF_LatchType EX_IF_Latch; + + public Execute(Processor containingProcessor, OF_EX_LatchType oF_EX_Latch, EX_MA_LatchType eX_MA_Latch, EX_IF_LatchType eX_IF_Latch) + { + this.containingProcessor = containingProcessor; + this.OF_EX_Latch = oF_EX_Latch; + this.EX_MA_Latch = eX_MA_Latch; + this.EX_IF_Latch = eX_IF_Latch; + } + + public void performEX() + { + //TODO + } + +} diff --git a/assignment-3/src/processor/pipeline/IF_EnableLatchType.java b/assignment-3/src/processor/pipeline/IF_EnableLatchType.java new file mode 100644 index 0000000..e0198a5 --- /dev/null +++ b/assignment-3/src/processor/pipeline/IF_EnableLatchType.java @@ -0,0 +1,20 @@ +package processor.pipeline; + +public class IF_EnableLatchType { + + boolean IF_enable; + + public IF_EnableLatchType() + { + IF_enable = true; + } + + public boolean isIF_enable() { + return IF_enable; + } + + public void setIF_enable(boolean iF_enable) { + IF_enable = iF_enable; + } + +} diff --git a/assignment-3/src/processor/pipeline/IF_OF_LatchType.java b/assignment-3/src/processor/pipeline/IF_OF_LatchType.java new file mode 100644 index 0000000..e3fb477 --- /dev/null +++ b/assignment-3/src/processor/pipeline/IF_OF_LatchType.java @@ -0,0 +1,29 @@ +package processor.pipeline; + +public class IF_OF_LatchType { + + boolean OF_enable; + int instruction; + + public IF_OF_LatchType() + { + OF_enable = false; + } + + public boolean isOF_enable() { + return OF_enable; + } + + public void setOF_enable(boolean oF_enable) { + OF_enable = oF_enable; + } + + public int getInstruction() { + return instruction; + } + + public void setInstruction(int instruction) { + this.instruction = instruction; + } + +} diff --git a/assignment-3/src/processor/pipeline/InstructionFetch.java b/assignment-3/src/processor/pipeline/InstructionFetch.java new file mode 100644 index 0000000..f6d85d0 --- /dev/null +++ b/assignment-3/src/processor/pipeline/InstructionFetch.java @@ -0,0 +1,34 @@ +package processor.pipeline; + +import processor.Processor; + +public class InstructionFetch { + + Processor containingProcessor; + IF_EnableLatchType IF_EnableLatch; + IF_OF_LatchType IF_OF_Latch; + EX_IF_LatchType EX_IF_Latch; + + public InstructionFetch(Processor containingProcessor, IF_EnableLatchType iF_EnableLatch, IF_OF_LatchType iF_OF_Latch, EX_IF_LatchType eX_IF_Latch) + { + this.containingProcessor = containingProcessor; + this.IF_EnableLatch = iF_EnableLatch; + this.IF_OF_Latch = iF_OF_Latch; + this.EX_IF_Latch = eX_IF_Latch; + } + + public void performIF() + { + if(IF_EnableLatch.isIF_enable()) + { + int currentPC = containingProcessor.getRegisterFile().getProgramCounter(); + int newInstruction = containingProcessor.getMainMemory().getWord(currentPC); + IF_OF_Latch.setInstruction(newInstruction); + containingProcessor.getRegisterFile().setProgramCounter(currentPC + 1); + + IF_EnableLatch.setIF_enable(false); + IF_OF_Latch.setOF_enable(true); + } + } + +} diff --git a/assignment-3/src/processor/pipeline/MA_RW_LatchType.java b/assignment-3/src/processor/pipeline/MA_RW_LatchType.java new file mode 100644 index 0000000..7e9f76a --- /dev/null +++ b/assignment-3/src/processor/pipeline/MA_RW_LatchType.java @@ -0,0 +1,20 @@ +package processor.pipeline; + +public class MA_RW_LatchType { + + boolean RW_enable; + + public MA_RW_LatchType() + { + RW_enable = false; + } + + public boolean isRW_enable() { + return RW_enable; + } + + public void setRW_enable(boolean rW_enable) { + RW_enable = rW_enable; + } + +} diff --git a/assignment-3/src/processor/pipeline/MemoryAccess.java b/assignment-3/src/processor/pipeline/MemoryAccess.java new file mode 100644 index 0000000..1f1684c --- /dev/null +++ b/assignment-3/src/processor/pipeline/MemoryAccess.java @@ -0,0 +1,22 @@ +package processor.pipeline; + +import processor.Processor; + +public class MemoryAccess { + Processor containingProcessor; + EX_MA_LatchType EX_MA_Latch; + MA_RW_LatchType MA_RW_Latch; + + public MemoryAccess(Processor containingProcessor, EX_MA_LatchType eX_MA_Latch, MA_RW_LatchType mA_RW_Latch) + { + this.containingProcessor = containingProcessor; + this.EX_MA_Latch = eX_MA_Latch; + this.MA_RW_Latch = mA_RW_Latch; + } + + public void performMA() + { + //TODO + } + +} diff --git a/assignment-3/src/processor/pipeline/OF_EX_LatchType.java b/assignment-3/src/processor/pipeline/OF_EX_LatchType.java new file mode 100644 index 0000000..0339fae --- /dev/null +++ b/assignment-3/src/processor/pipeline/OF_EX_LatchType.java @@ -0,0 +1,20 @@ +package processor.pipeline; + +public class OF_EX_LatchType { + + boolean EX_enable; + + public OF_EX_LatchType() + { + EX_enable = false; + } + + public boolean isEX_enable() { + return EX_enable; + } + + public void setEX_enable(boolean eX_enable) { + EX_enable = eX_enable; + } + +} diff --git a/assignment-3/src/processor/pipeline/OperandFetch.java b/assignment-3/src/processor/pipeline/OperandFetch.java new file mode 100644 index 0000000..9620261 --- /dev/null +++ b/assignment-3/src/processor/pipeline/OperandFetch.java @@ -0,0 +1,28 @@ +package processor.pipeline; + +import processor.Processor; + +public class OperandFetch { + Processor containingProcessor; + IF_OF_LatchType IF_OF_Latch; + OF_EX_LatchType OF_EX_Latch; + + public OperandFetch(Processor containingProcessor, IF_OF_LatchType iF_OF_Latch, OF_EX_LatchType oF_EX_Latch) + { + this.containingProcessor = containingProcessor; + this.IF_OF_Latch = iF_OF_Latch; + this.OF_EX_Latch = oF_EX_Latch; + } + + public void performOF() + { + if(IF_OF_Latch.isOF_enable()) + { + //TODO + + IF_OF_Latch.setOF_enable(false); + OF_EX_Latch.setEX_enable(true); + } + } + +} diff --git a/assignment-3/src/processor/pipeline/RegisterFile.java b/assignment-3/src/processor/pipeline/RegisterFile.java new file mode 100644 index 0000000..4b95b95 --- /dev/null +++ b/assignment-3/src/processor/pipeline/RegisterFile.java @@ -0,0 +1,52 @@ +package processor.pipeline; + +public class RegisterFile { + int[] registerFile; + int programCounter; + + public RegisterFile() + { + registerFile = new int[32]; + registerFile[0]=0; //%xo is always 0 [RISC V] + } + + public int getValue(int registerNumber) + { + return registerFile[registerNumber]; + } + + public void setValue(int registerNumber, int value) + { + registerFile[registerNumber] = value; + } + + public int getProgramCounter() + { + return programCounter; + } + + public void setProgramCounter(int programCounter) + { + this.programCounter = programCounter; + } + + public void incrementProgramCounter() + { + this.programCounter++; + } + + public String getContentsAsString() + { + StringBuilder sb = new StringBuilder(); + sb.append("\nRegister File Contents:\n\n"); + sb.append("PC" + "\t: " + programCounter + "\n\n"); + + sb.append("x" + 0 + "\t: " + registerFile[0]+ "\n"); //%xo is always 0 [RISC V] + for(int i = 1; i < 32; i++) + { + sb.append("x" + i + "\t: " + registerFile[i] + "\n"); + } + sb.append("\n"); + return sb.toString(); + } +} diff --git a/assignment-3/src/processor/pipeline/RegisterWrite.java b/assignment-3/src/processor/pipeline/RegisterWrite.java new file mode 100644 index 0000000..21cba98 --- /dev/null +++ b/assignment-3/src/processor/pipeline/RegisterWrite.java @@ -0,0 +1,31 @@ +package processor.pipeline; + +import generic.Simulator; +import processor.Processor; + +public class RegisterWrite { + Processor containingProcessor; + MA_RW_LatchType MA_RW_Latch; + IF_EnableLatchType IF_EnableLatch; + + public RegisterWrite(Processor containingProcessor, MA_RW_LatchType mA_RW_Latch, IF_EnableLatchType iF_EnableLatch) + { + this.containingProcessor = containingProcessor; + this.MA_RW_Latch = mA_RW_Latch; + this.IF_EnableLatch = iF_EnableLatch; + } + + public void performRW() + { + if(MA_RW_Latch.isRW_enable()) + { + //TODO + + // if instruction being processed is an end instruction, remember to call Simulator.setSimulationComplete(true); + + MA_RW_Latch.setRW_enable(false); + IF_EnableLatch.setIF_enable(true); + } + } + +} diff --git a/isa_specification-1.pdf b/isa_specification-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9f76463c35e2f55e805e5be9886afaafbf30cdf3 GIT binary patch literal 144014 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�Q;mjW=4SDST1 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