gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
ubacena verzija 12 i kodovi v12b
authorDoni Pracner <quinnuendo@gmail.com>
Sun, 10 Feb 2013 22:31:25 +0000 (23:31 +0100)
committerDoni Pracner <quinnuendo@gmail.com>
Sun, 10 Feb 2013 22:31:25 +0000 (23:31 +0100)
32 files changed:
.gitignore [new file with mode: 0644]
changes.txt [new file with mode: 0644]
grbPMF.eps [new file with mode: 0644]
grbPMF.jpg [new file with mode: 0644]
grbUNS.eps [new file with mode: 0644]
grbUNS.jpg [new file with mode: 0644]
kodovi/BAFER.MOD [new file with mode: 0755]
kodovi/MaxNiza.MOD [new file with mode: 0644]
kodovi/MaxNiza4.MOD [new file with mode: 0644]
kodovi/QUEUEINFO.DEF [new file with mode: 0755]
kodovi/QUEUEINFO.MOD [new file with mode: 0755]
kodovi/REDOPSL1.DEF [new file with mode: 0755]
kodovi/REDOPSL1.MOD [new file with mode: 0755]
kodovi/br10.txt [new file with mode: 0644]
kodovi/br100.txt [new file with mode: 0644]
kodovi/br20.txt [new file with mode: 0644]
kodovi/br30.txt [new file with mode: 0644]
kodovi/br30b.txt [new file with mode: 0644]
kodovi/izlaz.txt [new file with mode: 0644]
kodovi/nizslog.MOD [new file with mode: 0644]
kodovi/polinomi/POLINOML.DEF [new file with mode: 0644]
kodovi/polinomi/POLINOML.MOD [new file with mode: 0644]
kodovi/polinomi/PROCITAJME.TXT [new file with mode: 0644]
kodovi/polinomi/PolSuma.MOD [new file with mode: 0644]
kodovi/polinomi/m2.mod [new file with mode: 0644]
kodovi/polinomi/mnozenje.MOD [new file with mode: 0644]
kodovi/polinomi/polinom.MOD [new file with mode: 0644]
kodovi/polinomi/polinom2.mod [new file with mode: 0644]
kodovi/polinomi/polinoml-debug.mod [new file with mode: 0644]
kodovi/studenti.txt [new file with mode: 0644]
skripta-spa1.tex [new file with mode: 0644]
todo.txt [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..a1a539f
--- /dev/null
@@ -0,0 +1,18 @@
+*.aux
+*.dvi
+*.log
+*.out
+*.pdf
+*~
+*.toc
+*.xref
+*.nav
+*.vrb
+*.snm
+auto*
+*.zip
+*.class
+_region*
+*.blg
+*.bbl
+*.exe
\ No newline at end of file
diff --git a/changes.txt b/changes.txt
new file mode 100644 (file)
index 0000000..0f5bceb
--- /dev/null
@@ -0,0 +1,49 @@
+Skripta spa1.
+
+12b
+-------------
+-primer za polinom je koristio staro pozivanje UbaciMonom
+-pravljena i single column varijanta
+
+12a
+--------------
+-par bugova u polinomL su ispravljani, pa je to ubaceno
+--PolinomNaN (Igor Sarcevic, student)
+--Deli, Unos dodat DISPOSE zbog memorije (Radacha)
+--Anuliraj brise ako je bilo nesto
+-promene u parametrima za PolinomL, uvek da poslednji
+bude rezultat
+-dodata procedura SaberiNa u PolinomL, radi naglasavanja
+(i izbegavanja) situacija u kojima se gubi memorija
+-adekvatno promenjen primer sa sabiranjem k polinoma
+-Stack preimenovan u StekTip, Queue u RedOpslTip
+-jedan Writeln->WriteLn u demonstraciji listi
+-u glavi 6 (sim-rek) prepravljeni zastareli
+LONGCARD u CARDINAL, da nema cast-ovanja (Radacha)
+-takodje su izbaceni i OK fazoni iz InOut,
+koji su bili petlje da ucitava dok nije OK,
+sto cak ni ne radi kako treba u XDS-u
+-izbaceno Write(ch) posle Read(ch) u dva primera
+u glavi 5, posto su nepotrebni u XDS (Radacha)
+
+11c, 2011-02-09
+---------------
+-iskljuceno je oznacavanje preloma redova zbog nezbunjivanja
+-popravljen veci broj cudnih preloma teksta rucnim modifikacijama
+-izbacen prelom kolone na kraju posto stane na 18 strana
+(postoji bug sa prelomima kolona!)
+
+11c1, 2011-03-08
+------------------
+-dodata nedostajuca opcija u meniju u program u sekciji 3.2
+-promenjeno da se prelomi redova u okviru listinga prikazuju 
+dodatnim simbolima
+
+11B
+---
+-ispravljani neki sitni prelomi redova, stamparske greske i formatiranja
+
+11A
+---
+Prva latexovana verzija starijeg teksta.
+-dodat appendix sa uputstvom za XDS
diff --git a/grbPMF.eps b/grbPMF.eps
new file mode 100644 (file)
index 0000000..5471d02
--- /dev/null
@@ -0,0 +1,769 @@
+%!PS-Adobe-2.0 EPSF-2.0\r
+%%BoundingBox: 0 0 120 120\r
+%\r
+% created by bmeps 1.1.0 (SCCS=1.73)\r
+%\r
+/pstr\r
+  360 string\r
+def\r
+/inputf\r
+  currentfile\r
+  /ASCII85Decode   filter\r
+  /RunLengthDecode filter\r
+def\r
+gsave\r
+0 120 translate\r
+120 120 scale\r
+120 120 8 [120 0 0 -120 0 0]\r
+{ inputf pstr readstring pop }\r
+false\r
+3\r
+colorimage\r
+df'mZrr)lrr;Zcps8Musrr)lrrr;fn"8r/tr;-BtrVulqs8Musrr.BDqsjR]meHSD\r
+rr2Wks8)Qdp@e.Os8Du_kO/BKs6f4FrVHQmqZ$'PpAb*ks8;ohnGi+Ks8W#sq"4U\\r
+oDegds8Mlps8;o`kk>&Ss8MoqkN)+3rVucis75XRo^htQo_e^fs82]nq>('apAb*i\r
+s6AnCrr2renGN:bs7d6%s6oFNrr<#am.()Ts7,^Or;6Kf/ar`>qXa:Fs8Vumq=Xdf\r
+rV?6^s8DrsrVliqs8W&ts8DutrVuors8W&trr2qWrX]&.rVulqs8Musrr)lrrr;fn\r
+#5nK"r;Q]nq>LTurr)lrrVulrI/!C&s8V`Xm,IX.lfmWoqtg*frr;EQnc/Rfp@J4\\r
+qZ$Tos8Dfos8;ofn+QVPs8W#ss8;oVh=:OCs8;Zls8;o`kkA_"E^iAm,Tn_ke)C?*\r
+s6]+Eq"=[erVrIZVep9pi8Eo"rr;Zas8N#tlg+<Err;Zas8N#tlK\BB%KHG,s6T+E\r
+rr<#YjQZ[Bs"4-+hqIu(pAb0ir;66TlfnHLrVlcms8DrsrVliqs8W&ts8DutrVuor\r
+s8W&tMZ+.drr)lrrVulqs8Musrr2rqrXA`(s8)`pqYpNkrr2inrW`E%rr;urs8N!*\r
+qu$0VnEBiMq#CBkrqHElIdZUpp@\CHjmDO(q"jdcrVQWVjQu[9s8W)uBkMHR5Z($>\r
+="#@Un*L)GnGhb8q-$j7&Iolb!"nJYp&G!jmHaQCp]'jTrqlNk!!!B,!"Al+s5rJ7\r
+l07m8pAYa;*s)HR;GgegQ_hjIf(o.Arr2renG<%Zs8N#tjQ5[g%HZ^MrVQWprU]XN\r
+qYL!drr2rsm-suYs8N#trr2qTrXAi+rVulqs8Musrr2rqrY#/.s8)`pqYpNkrr;io\r
+rqucpr;?Nts8Musrr2os#6"2enG2nSrr.BBq#0^Np#=rps8DutrVuors7Gm\H$=j9\r
+:0.Dos6f:GrVQU8)D(ph',hW<XfK;7pAb-is"uQ%#R;4I!"f/.s6/S<p%8:`qu?Qi\r
+s8W#s#6kkB!"A>ar:T^^rr)kZOIcX['CbJh'GDVl!Y>kP*"<;p'bhkkrr;ESqVhtD\r
+mf*4cs8N&dmdT?"kPP8^p@e:\rr)kKrpKais8N#trr2rqrY>A1s8)`pqYpNjrr;fn\r
+s7uZoqYpKlr;I$&rr)lrrVuZfqYpMDlg!ruiTL7?s8Mrrs8Dufn,0Go]GMD/%1="*\r
+/2nUj-0=4Ss8N&urVr7NX8r>@&eHHJ1edQ4s7#OX,U,8O";r7#18h(`oC;kYrVu6M\r
+rVZWo<`Nc4!"]VL+2u1Jrr)llp]!fU=T8:!md9ra%j)/d)Tg(Qo'u_[!"S'<j7A"Z\r
+Pm%:)`5C!qoD\dhs8Dlqs8N&gnFl)/mJ-GRkih=2rr;uss7uX#r;Q]nrr2iprqqQN\r
+!<;lo)#XC5qYpNjrr;fns7uZoq>UEirr;iorqu]nIfKEGs8Musrr)lWip-RBs6f7J\r
+oC;kAip]`;>mLTL)AaeH+YW'Ao`+mi[BmS;7Sa!_s6T+IS=HrH3`Z4\)&3rAp%A@S\r
+o)Aam**69^!!!b%S$;hgs4#Wcr;HZ[m/I%c',DB7"ToTC<bV4"s8Musmd:&RrVufm\r
+rr<$/2#mUerr)lrrVnZ.7fN>ckiVaY'e01`&-i@PoC;h[rVtd2lMUMYs8N&rqu?]q\r
+s8Musrr2rnrXA`(s8)`pqYpNkrr2hKrYte7s8)`pqYpNjrr;fns7cNmq>UEirr;io\r
+rqu]nIfKEGs8MusmdBlLrr;NXr\H;p!!!T0rVuN]s$fFY!!!QH(+B1\s-]7OqYL6,\r
+^W5^-o_SC`IXmi&E/e%*GmFg+IXdparVn,h6&h#,#RVeY?$#?!s7,g_qu-Ol<bcDe\r
+KOe\A#7)=a&h!\Vs75^[p%8:Ll2/!"aTr+h8e2CSoCDqCj7ppDiofG#9hSt5(+p42\r
+./!33rr)jR1IV9D%\0#fq"XmRl1=oRs8DrsrVliqrr;rsrr)lprVu`ms8)]oqYpKl\r
+L]2c#rr;ios8)`pq>UEirr;`ls7cNmq>UEjrr;iorqucps8Musrr)lrrVulrs,2c'\r
+!!!LYIZOsF+'DZ]rqufYjS8iW'a+RSmHji*f][g7MtZlErr2rhp&Fpfs!9'`^r513\r
+"!@aR-FphBItO?8cKPK=+uD8VlL+]Cp]#.,rr2s")"$no\\$9%&gmYZ'E%_,rVQWo\r
+rVuEWs&E$1"9TAb,W>Z"s8;`nrqufgo)B"#+TMK[QBSQPqu>X4oh\Co$4%XV"W)lG\r
+Pl1FYqtpElrVuiqs8DrsrVulqs8;iqqYgHjrVu`nrqqZQ*rQ$:r;Q`mrr;ios7uZo\r
+q>UEirr;fns8)6Tm.Br@rr7H5lg=`Os8Dlq]"#Wh%ikWM&.T3or;HZanGbO2;#L:l\r
+p@nRs%jV2Y(R12_aNE09!"A>drVQToqY^BgqYpNq)u9I4!!=>R&hO(d+2c.YjQQUP\r
+&1Iqr-f="]oD&@]rr2ru'D_Y-TVAms!ZD7G)TBVIqt^9\mf3:brrZ$u&d&1JJ:E^S\r
+oDeabs68_HVkh-;#q,cR*<,j8p@eMc<,M^;)ZTjRNfU"(n,N=brr<$-Uo1Hps8V6H\r
+mIBlCr;Z`ls7uKiq#:<js8W&ss8MH`s8M<_r;Q_grYte7rqucpr;Q`mrr;ios7uZo\r
+q>UEjlKdU4s8DrsIb``8s8N&gnFeC`1CXd2r;6L5*%h3k&k,8nr;HZgpAaUMs7uKj\r
+@:FE`"W@@@&fM]@!!!N,rr;<Oq=*tTqu-Np!#b=ts.u^5!!!fP*&YUOh>.'M!!!`6\r
+"WR@;s5N5=1H%f^3__Ik90GL=#7)=M!#'KrM>-]Crr)lY:ZV-R#8[UL(:U`lrr)lT\r
+hXpgErrN0?"p-#\@>+.:s"#Zm!!!lE$RZ&[*pW%jr;HZanG`Om'*JLP!!!?'s8Von\r
+s7Z<blL4'/p@A.]rVksVs8MZfs8M0[opl!rr;Q]nrr;ios8)`pqYpNkrr;ips8DrZ\r
+Ibif<s8N&_kj\WNs);k&2DmklnG\rLXTJ_@!!!T$oDe[as5W/:p%A@_r;R'1*s`/o\r
+r;HY`R]JnH<U]JWh;@Ymp&>O7..Zs/o_/:b!#5J6'DVD'qu-Np!##\K+T23<qu6Tq\r
+!"ehus75d]o_&5-+#P&X0`qFlqYC0X;!\#Tq>VKV.f]PXrr)ldn,NCbs8)Nj!!!uA\r
+!$U[ks#2`9.k4.g;/HjU/2T1Yq>('\o)A[i&cr.M%M0ZMo)=rCTM\Zkkj7d9s8VNX\r
+oDJOdqrn%VrpB^Zrr;ulQMq<jrr2iprqucpr;Q]nrqQKmIerm?s8N&npAb-is6]+K\r
+?<q@;o`+CMr<<NB)]^IY.Qm"^s8;iqnaZY3f^JqD)A<f6G^5>3kPMEc_>O<4/MB<c\r
+rVnH%6E6utr;HXU2bY>;2>m@Okiqs^(ao@a%ZQF95XJ6S$5i^?s8;cor;6MaR]d84\r
+,6.]Trr)lV<T3D(MO"\\)%6ojrr2rho)JU_s"H&p'G3$";KYf0EBZEjlKS<T#U^2r\r
+/bSf:mHspgC4ZWp*"EK(p\Fjerr8[fXUPgX'GhanZafr5s6T7Ff%8USq#:<mqYp!`\r
+rr2lqr1Erms8N#trr2rhrdOnEqu-Qorr<$(Q^+6AqZ$Tns7Gj]p@\I`rr;EXq6[ZJ\r
+!s]GO'dV\roCDSSp%SL`rVpt_M\?gT!!!\qlM^8Fs7uTm!sBD3oD`N<GUOjrk2l:9\r
+rVlit%0-;+IXR+["qr1)/mr""<E3BW.Q(@3A,lQ.\[fZk&0_)S&mQ"[+uhMOkihXJ\r
+%2T!E#@:_KmdBlLrVu<Qrr`B?*?$j:!$!4*7/m&_>?Z=Q!#kn<)u9@1nalbe$R-K/\r
+0j\:1q>C9irr3B<)uosH%MB_/JVrd_pAFsjrr<#tgACpLnc&Rfli-XQrdOnHrVulq\r
+s8Musrr2rsrr;uss8N#trr)lqr;Z*Jn.H9O'b_]e:1=2#s7c-blg"E<o_n:Pq>($i\r
+!!<W0!"9kj0C/'+qu6W_n,N:`rr<$4!!!`1rVuK_s*9!Q!!*a5<+6@I)?^*PXK&c+\r
+q#@k4_>jK6s8Duko`+sjs)e/7s6Ak;s8N&sr;Z3PoDSUek2l:8rVu!?oXVKOB4l3g\r
+>@RjB$k!IU`l?=#qYueDUBq/G!!!lp1/n2Ks52Z4!!"#Q'Jbi8YP%Vhf\5os!#5J6\r
+(&.P(p%\PrATe7a(]t!Vqu?]Tjm`*Es.Q6hlg4'=s8LgQo`"milMgh_q4dk;s8Mus\r
+rr)lrrVulqs8Musrr)lrrVulqs8W)us8N%QKTQKC'*&"F!!!]4qu?<Zs8)]oqu?]_\r
+nau_Yrs&oI%MBi2e`PlQq!.5Gm-am<6!,*J2#mUk!!!ZB&1+Wg`W,o:p[nLcrVuEU\r
+p](3lo'cALpAb'ds8W&ts8N%?q"FUbrr;uqs6o@Es8N&qqZ$Kjs6f:Srr)ldnGN"R\r
+rqu`pqYU<`oCr7as-K(G!<<ZJ(+]ar,Ok("m-+J:QFe4[4TGI"qu$KRj8\oNrtub2\r
+!!!c*p&Fpgrr<$1!!!RsR]5W@rTEM@qu?\QN0OML$3'u(qYoFPs8MEbrr2lBrYYS4\r
+rqucpr;Q]nrr2iprqucpr;Q]nrr2i^rdOhFs8DrsrVliqrr;rrs8DrsrVliqrr;T]\r
+qsj4Rq>(%0)CPak(_m]7!!!h3VRuX$s6T@Qq>^KZnG"4X1_CHG!!!N+rr;`hs82fq\r
+!!!Qc2+EjuWV,ubr;HZfpAaUMp](6ms8N&sr;ZH^q=s^^s8N&squ?Zns75[Pru_7?\r
+g==mVrVuZap](0iqY:$hrVuHXrq5m_s8N&cm.1&Rrqucq<p&T2rr2qXNLKnJ')qh/\r
+nEp5h&1n(j+C8H"qu-Q^n,N%Rs7H$bH[V%s*]!cr&f2H<+!NT8q#C-ds75sbq"t(;\r
+.5_MB(]XO@bKJB6s8Ua)h>[HSrql]mq>M$,rr2rsrVulqs8Musrr)lrrr;<`,6.E:\r
+s7cNmp\t3err;fns7uZoqYpNks8Vurs8Dfjq"ssarr;uqrpb+0s8Vllqt^3ir;Zfp\r
+s8TaGb"PQ6p\Fj_q>]sUqY^BnnFQQ<4%Gm7YlOkC&eQf""<oBP8F?*Mq#CB^p&F[]\r
+rr<$/)^-d5!Xtm'Z/+F'r;Zfhp\sRLp\t0lrr2rho_A@arT!,$r;Z`ns8DflqsX(E\r
+rr7HHrr;]ap](6ms8;osqZ$Tos8W&ts8Duglgk)Os8W#sp[\.Xp\XsfrVuopk2tOr\r
+q=4LbptOTTs8W&kpA"[es6].G8k;t_!"K)4&AQ',o(;tXqu?Qks8)Wmp%\Qn[`JLO\r
+(BF^Yo(W1[rr;?Ts6K7U1,hf+"rR^T,^1kbObejcqu$K`o)ARes8N&uq"jgVoC2bZ\r
+s6Ak:s8N&rqZ$Qls8VrqrV?KmrVu3_*<5j6s7cNmq>UEirr;fns7uZoqYpNkr;?EQ\r
+jl?@?rr2oXqu;,sg"?6&s7,jXo(W+Wqu6Wr%O<D]o_8C_s8Vurs5`G5qu?[f9j!((\r
+R.pFV0JQ?'!#u%H,ldo_me6\Us8V]erriiK"q;BEX0LXGl1b/Tr;Zfos8M]bq"ag`\r
+rVcclqtfjVnGE7_nb;Y.hqS)/s8;osn*ooEqY^6frVq?Gs7GdQn*9?0l0\'.mf37c\r
+r:^!^oD/%Ip&G!js8MuWi7n;2p](9erVQ'Zq<dD0hZ*WPn*oZ6o(;t]s6Jt@qYC/b\r
+TrC=D8au?Lr;Q`anGVnKs82fq!!!WJ)D+*=<oiNDmIL;AnGd$7IL[)@!!!abJtVf1\r
+s6oLX>@&[sPEhm?s8V-BkktJ\rr;rTio0k7s8W)uq"Fafr;Z`js82Nirr)l[rW)lb\r
+rW;`apAY'nmdBTDs'P[#rSc_qs8N&ts8VHToDARfoCr8;0gHNn/H>bb!X0G;rVu6R\r
+qtBmdlL+E;pAYmG.e`Z;2`Oh\,=2SC-3+)c#S&+;3_^_D2M[<[hrF)#s8W#ss7cEe\r
+q"jgbs8;lp!qu?[rqJbXs8W#ss7#aUp\Xsfs8VcerTNS:o_&([s8W&ss82ZmnaQ5O\r
+rr<#ts6oCBqtg$drqufqs7Q!Ulg!^+oBuYYrqL<to((r=q<dbDkk+N6s8Vupr;-6`\r
+r;Z`qqY1$irVu3MnbN%\rr<#dme6)=qY^?m)]^IX.m*h8(\[Y(q>UEXmJj8m`s2tt\r
+":??&Kq7i.s82cpJq]R#&0(fX&7&[Tq#(*gs8VHRli-q_rr3T#nalbYs7>gXs8;or\r
+qu?Zos6KZ5rVulqs8Musrr)lrrVulqs8Musrr)lsrr;Z`q>'gas8N&ko_JOds8Mus\r
+`Q$*sr;ZZos6]=Uqu6Tr!u`7)3WK-p)BCO/rr;lqs5`D8qu?[%$QKir/#K5^qu$Ki\r
+rVlj$)ZTmR!!*`0s8Vurs82irl0[p5qtfgQn+$!fnG`Ias8Vukq=OFVoD\dgr;Zfk\r
+rVcKfrqufrk3;=3s8W#ss4Z;kr;ZfdoDJ@Ws6An?n*g#Ms8VlirVlisjQ>S's8Drs\r
+qs3\5rr;ciqt'^`o)Ja`s8Vlos8)BZn+H;EqY:$ap&+RSrTWJ5rr5UBg">c_o)A[h\r
+f%Jm[!!s&D)?9aI[CF?MpAaj`s/rZN!!!fI'efUf)j?Vm!!!W3!";Ip=cJQ4r;Zd]\r
+6:\Ak]']%Yqu-H_oCDn\rq$-a#Q+Dss8N&sqrds+rVulqs8Musrr)lrrVulqs8Mus\r
+rr)lsrr;9Jn,NCejlG_'q>^Kos3T*Brr2rjp](0is7uNkp@eN:J"AJQ;ABp$!!!`6\r
+!#"GXp\b$jlKn=P?Z((4NTB1"q"XmdrVlit&s/<Qr;Q`jq>^!Wqr$Purr<#oqtU-h\r
+pjW8CqZ$Tlrr)WhqXs[ZoCr%Nmd]T?s823SmdKc<qu?]^nFl2:qtg9koCi4\r;Xj\\r
+i<0?*$kXlBiV30Is7,j`qZ$T\nEfK1m/6n\n+?&;oBcJVqXjILp\==Zs82Tcp&Fsg\r
+rqZNeo(`7_s8W&tm-O$;s82H^oD\dir`0!uR$jNb*[_X;,Q%K?q>C9^o)BLD1&qD!\r
+7nRJ7*^9W))3^D^qu?]jr;ZQjs5rS8m-jZGs8T[D_Z'T8bg"K(nale\rU][Ms8VrZ\r
+khu=5o`"jfli(i#s8MrrrqufqrVulps8Musrr)lrrVu?So`+pjo^hnQpA=dbs75^R\r
+rr)llq#:O%'lnAOr;?Tgp&Fserr<$?dEqA'*B>,]1D:HLkNV^*m.p>Krr<'7r;?Tm\r
+r;ZQfs8MusoCDq[rVts>m/6h\rsIiJiqW?As8Vrqs8MeBnFZA>r;?3es8)Zlp$_M6\r
+qu?9Yq!RbMoDARfmdg8Prr;<Qs7Z9g'cB+6!$qmY2A$Zj!!4l!-<9^7s6fR[q#CBY\r
+nauYWs75s[mdfuFrVZ3Wo'Po4q>'dbrqufqrVuipp@.SGnal>>mIKf6r;HBerqHEl\r
+qtp?irVlg\n+-3V?"Te*Yke4s"U?(K!#tt=*VT=/!!",]+?T8ls82irqu?]ns8V3E\r
+nbiCdlKn<H!"FmGR/[*bn*]fHq%!H)qY'^Onabc@s7H<jqWn,&rVulqs8Musrr)lr\r
+rVulqs8Musrr)lhoD&=as7uKfrr;uRqu8n]!!O&M,6.]Y!!!tEZIJ@1s/W-G7RUtN\r
+ir8uY'atNn&elMerr;T_rsoYb$Oe2h]$K^-qYU*gs8Dutrr<#trVpR+p\"RdqtKgS\r
+qtg!^qXX@RmeHJEs8;Wkrql`qpAFsXqu?$Zs74duf(8\6jm2[#k5RY5Aci5n!!"eb\r
+&l/K.6i[<_&J\XQ!(d.p6rR?;nG3+Rp]($gs52r.q>^Kls8W#ss8N&urqLU.o^_hN\r
+o)JX]s8Vfmr:L$hpAb0df\+[Os7bO5h>[HOqu-HTkNi'Gs.lNt!!!Q1!Z)1P-2[W?\r
+Q^>5_!$Va[/+N<3oD/4Sq>KI@p&+ghr;HXh9k"PA,6Ir^rr)lnq#BgNoDejfkNUk'\r
+s7--hoD\ddli%Rrs8Musrr)lrrVulqs8N#trr2rprqueFrSZVjs8Vu^m,q;H:I7?:\r
+!<<ZA%k/,'0EM5##6c^WqYqTV6hpEUqtpBn!"],1$k!L^O-,tA%NCh)XT&1us8Dup\r
+q#C<hs6&J/p\"=]rr;NXmf3:_s8VuoqtBsbpAb0is8Moqr;6BcpA"CRq#'RMpuqVT\r
+qYU<mpAFqS0JlK8'KH-n/H>i8%M;YE$<.07=TAM(!!#t$#[m]89`P5K#SAa:/kba0\r
+s7cNmp&"dRmf3%Xs8)]oo(2VRs'Y^'rUKpcmIK`&s8D<To&fuPq#CBhp@n+Ws8)Wk\r
+qYpNpmI'QAqZ$Kmrr`KCUSYX!qYq0@1^=7;=^?@Ns8V9KnGE7cqYgHfp\t3n)$^?l\r
+"pH:V![03K7K<;cs8N&tjpV4hq!mq9qu#m]s8(pX-iEuCr;Q]nrr2ips8)`pqYpNk\r
+s8Vugp$_kYq#CBjoCVJAoBlSXqYpDADJa_8'.^W%eHlC-"99hR!%@sL,mXW"rqufk\r
+p\t^5)?U'N"9]56rr;urs6oFRs8Duno_\[es8W&trVQTkq>0LFlMC>Nqtg*fs8Dut\r
+rTWM/p\"=]rr;$;k5YG\mI9f?p](-irur^M!!"&B">BfV2[Tsb!!#Co$s*FX!)!n<\r
+AH2^.!<u^7&7bbA9)o5^#n]E&#W;Yd0aA+DiT:+8r;Z3Ss8;iqqtpEgq"jd[o)Ja[\r
+s8VB[q;;/KkPtSSqYBd]qtC'iqZ$Tlnac)?p%/1_s7c<enFQSLp&C\Y[_KT3!!!rR\r
+(-&S)d/!V>nFZbXrr9+(`Xrb-0+%t:!!"6hGG"m1s6](NR$=`Mq#B[Fn,NFblg*O+\r
+qXFLaqWn,2s7uZoq>UEirr;fns7uZoq>UEirr;fgq!e=`q!@D0l0@:.s8)cqqXjIL\r
+rr7HHrr6bJIK0?arV?J5Cm5A70FeFC%h'tNO/;@7s2W1-',2>Gk3N$Hs7Gs_q"Ogg\r
+rVuW_q"4%Hq"+7[rVlirs8W)us8N&np@nRcs7>dSqYC0krVu*DoDedhkN;R:r;T_q\r
+H2mpk!!"V_%nH[#4:_p"!!#Lm"]#@0;ZTl#9`P/^&JeO[(0:J949,@A-ST<9!&t>u\r
+9*,Db"q3a##rrM/4o,!To(2nQo`+@IpAY*jrVuH`qr[qYkjIros8Vliq"F7Im.'T3\r
+s8Vurs82irqu64Orr<#ts8Vups8)Wm!!*iB$7#WR+R\^uoC`.Zr;U)2G5qXc"9KqN\r
+!%%R=s7c0cki2XAqYpNq)/3]0s8DusnHescoDejerr2i]r[\$Arr;Zjs7cNmp\t3e\r
+rr;`ls7cNmp\k*ds8Vrqs8)cqqX3h;mdKH9q=O[^,O+F]md0e2MkU1O)>Wn(o^;`F\r
+4'_gd)$U0[s8Du5^W#F"m/I#&kih=3rr;lls7#IHqt^0irr<#ts8W)uoC;hNIe<'q\r
+o)AUfnF65Ip&Fj_s7c3dk2cC<r;UJDMuWi8+WY2#"&Apt8fnsd!!#^o!)F(6>7M-D\r
+!!#%k'hnZ.0E;)#00*:$T"=Rns#3,`!!5Ie!'1`/<r`4\#n'3O.UiAX/0H-.qu$Kb\r
+p&F"3lhgYUoCqM/jjO2/nc/Xf#P.9RnF#iHrr2pprU&t8l0@C+q=j+<l1+?:rr<#l\r
+pAapas"Q8s%hL&YoDeU^s%#^m!!!uI$nsY!?MsX!m-4P#IB#t1EX`=-%1"?^!#(lk\r
+Vs`sDs8N&alKII2*<5^2s7QBkp\t3err;`ls7cNmq>UEjs8VucnF$;Qrr;uhqu7l2\r
+nb2bPr;?Hls8Dt5B7:X00`:\FlK/'Gqu6s,))X36s8McmIcBAJr;?QlqYU<ls8)Nd\r
+s8Droq>0[Qo`+pjrr<#en+ln\s8;iqqtpEkr;UqaQ3@F>!!"Mk)eB!L9G7kH$3jc>\r
+!*TF(<>#dN!WYmo!'^u+8r\tIp\k-ds8V9PrU'CZ!!*]W.9VIebRG.]&f"LY&QAu@\r
+8I#Ml#mj$LFt6l!!%0NZ<;?=iq>L?js8W#sqrR#%na?/Or;Zfqs8Moqp\"=\rVQWp\r
+qtp<cs8Vu_md'lPs6K%@r;Zfkq>X8h@8^$:!!!l:!#u[e2@^3REGq0D!$s9L<sAdY\r
+&I^K$"!e$N*%E<u7RU/Srr;omrVulskl).np\t3err;fns7uZoqYpKlr;IN4lg!s=\r
+rr;ons6oCLrqufhoDdt6nbW([s8Mg1p%81^rVq:kO:DUBmHOZ;l2L_]s6]1Drq[H2\r
+s82E[n+HDEp@e.Ys8DutrVZTinaZ)IoD\T8q>1*bq#0LFp@%POqu-Qiq>ZYCZO7-q\r
+!!";F!%SNi70j,m"U%d>&n:nA8H8`^#R+61!)*Lt8K&LJj5p=9r;SH/:..]T@;0MQ\r
+Y,:mks6]CWB5F=C!&Xi^63%!H$Off2!'UPj8H8`N'GX@M$p>.74%W+]p%n^as8VX&\r
+p&G'gs7PdZn*'QAo)A[es8W)ts%E7hs8(sDj8&QDrr;lps8Drss8N&un+-8T!tk_?\r
++U86$&J6l;(d*7pU&=celfnES"t0]Z,7k;4R?joRr;Zfqs7Z-_jPoA%r;Z![$NKu%\r
+s8)`or;Q]nr;M0Frr)lrrVuins8W&tr;-HlqZ$Tns8MoqqtL-jrVuEXn+QMGp%A(O\r
+o)8Uds)W.5)AaqD(b>4Jr;ZcrqYL!Zp$_q\qXO.Cs8Vrbna,c8m.0c9s8W&or;66`\r
+qY^Bnp\Opes8Viis.ZC,!!",A!$_ID//T:"%1Yc6%RkgN#X]4=:B1AT*$&<#'itJ=\r
+6id<S!WkOp%7Bmbs"Z?/R$t;;iU-OBs8;oo[(3j]'f,gi.1-ML(`Q?d'N>&45nO]5\r
+&._tV%pK/>9EG;a"U@?o!&>'!4uGB/q>C9go`+p`s8Vrqs82imp]'jTo_.tJrVZEi\r
+s7l?amdNL5lL4<0nFGuAqY0d_rUfg`!!!mlLTB_*s7Z0do^i*=LSb%O*!cfo"9KG>\r
+rVu-Fp&G!jq=t!gr;Zfrs75[NiVk2(rr)lrrVulqs8Mrrrqufgnc*iVMBsE*(_eVY\r
+/PCqRUuU;2q=agfIf'0Fo`+sgo'l>Cmem+_rrE*2p@A7[p](*bqu?]np\4.?khbn$\r
+kl1STrr)WjrqYmHkPkM[n+#o:nal\Ys5`>5naui/.6nO^2$F4;*[+8b$:#1:9E5&S\r
+!!"\R#q^.DQE%19BPruUGbZ<&:]USQ!!"SN!%YOeibN7i:]1+irqufcn,:2CbeV*@\r
+2EFbF&2O:d.0'?!$4B6'!C[_;?iU1"!!#ao!)j12=oe_#$P$)R*aJaG2$jXQK7'NO\r
+de*S8s7c!^mca<CrVlgirU'"6q"jIXs75gUl2UeWq"sXAjkg":qtg9kqu-PdT"s7A\r
+s82`o3&jk;!#?:b.foefr;6NMh<4h;s5rG/p\+LUoC`._s7,RIkPbS]rr2ior[%OC\r
+rr)lrr;Zcos8Moq$O@a]$6TEN(]j[U#mMUU!$!!t2dBL'rq:g@s7lEbpAY'kr;$Be\r
+p&G'js7,UPs8N&bmHFTMpZC\qs8Vfms7Y:)ec5[Gs8VuKg=Q?(s75jZqu?][mf#[K\r
+@/p9J":6LW!$`-m6N@*>&.qJ6!&jlX5kk-To(i;40gk^7s3&g]O-I!O!$5rpNgQ<K\r
+!s9tZ#VF!2i/)o<SbVpYp%/4`r;Z9Trr<'6-ndp9g%1T$^An9e',F:B!'D/>B*eoM\r
+!WuI'!E9%!;#pbq#7=<<&QAi75mRKM(_/fNC6RuGs8W#sj5KF[g"u`.rV?Barr;cl\r
+s7PjOkOnW;rr;]RkhZ4;r93DBq>(%*'e^%,-34/a"9f_\2`XFsnGN.Zs8N#tq"ap`\r
+q#13ls8N&uo'uGQrrrE$s8N#tq>Pj@rr;ios8)`pqZ$Thqtp!bs8)]mqt9UWlg"'?\r
+rr6tWJ7N/4lKeEJr;YF&lV1,^"9oSI$Q9!F$k!FXjlYn/rr;uts6f=EmdTWDs82Tg\r
+o)8U\rr;WPkM#q8o_J@Srr;ips82]lqYL-cg"kT`s8VBQs&WHN!!"2C">2tI&jQF$\r
+2#me=!!P:^"??Mc3s,OJ!s(^j!]r1s>R:os!!"\X#X/_02t6M?n+6JSs8VW[s'8rO\r
+oCN!m]"J(CqYp2;G]S]`)`IWns5iV<PFSJ;TrsZOZiC(K%i.P5"Zube7fWTa!!#gq\r
+!)N[r9EG5b!Wk[j!(.(t;?d1r!!#%t),#O3Vss9Wqu6WVkjdm(nb`@dr;Z`gqXaXb\r
+p?_D2q>]gVr9iM#jo>;Z91i:m#SmOF&Vc%'q>('XmJ$Dur;Z]ps5iJ7qYgHjrVu`m\r
+s8;oso_8@Jk3W-Is5iA*rr3f4rV-6hoDej_o(;)Br:':Jk5>2Ns8W&ss*jV3qqKlg\r
+-7(O>SZhtis8;iqnaleJnbr(Rs$o^]!!!B=&0N,=0^.`mp@eLSnFHSYqq^2^q#'R6\r
+hTtupmJd.Xm-j*9s82?Xo'Pl7rr<#foDJLbs*fHe!!"2O&3q0W=o\O_!!l-r#"8Lq\r
+70*Q[!sD!p"%<@p7gK)f#CZ_B`lRr3ir9`-=;r/`!!"GZ'e?u7`o,tBqu$KOi:?jF\r
+s7H$Vs8V`Zmd0uMs5`&:mdL2Mqu?Kls4lZ-\A6_hrr5;XFoVY/!!Gpp"&].#<s&G(\r
+"9;C)!)Nn$9*G>j"9;L)!*0L9<t,X7!!"PT$SZs[SG<-aq>^KMitCbVs8V<NmcNp!\r
+qu?HUnDO<GpAY)@iSNbrr;Q`s#A%C_lfn'3nb`=bs6]=Oo_/=Yq#C9ks82irqu?]V\r
+kO\WNs8;fpjPoS,rr;HUn`]5us8VfirU9ddnc/X_n*fB;s7u?\oB59%s8DusrVoVe\r
+>mh&`o_&7QnGi=\s5iJ=qu?]mrr;TarrrWC!!!S6Y.jmarr;lns4c>crr;rYki)O@\r
+qVpVnrVu`iqtemqg]%3PnaZM?kP:aA]`J3`!!"Q#.q\h^7fWNZ(E%#i"'>O(;uctu\r
+!!,pu!Drq!;Zm)$#67p3!)ZKcL07]AnF$<C5`$s??@[[(!!!R^Kp;3"s7uHirqufq\r
+rr;9KkjIheoDeXdp[S:*`po(K[uHHYFa0ZkB9mIYW=TeE!!#Lh!E]=%?N:(:!WZa5\r
+!+Q-3>m::4"9;O6$"j5<:]LJg'bspn*``OS2uiq)!XBunH'J!us8)]onb)qZs8VHU\r
+o_eaho_.tPpA=mgs68b:s8N%PK9#s/s82]ne^`V'r;Q`orr970_BpZi!!!Q8$6)`;\r
+@eom#rr)lgnGh"dhsKe$rr3T&p$hVHmJm4[o^qMMs7lQlq>To5s8N&emJ?5:r;QZp\r
+!Ws8>!#9g,OSo(Wp\OpVn,DD3o_JFbm-=TQ!>cn%1B.7PiSj,%s8Vfeq>UEolKmj3\r
+qYC-js8;fpj5]V-rVsC:aUen2!!"AX%7Uj;:&t>e#6e6=$t]VE?iU11!Wu^0"Bbg/\r
+=Tnk0"p%p5!+-%]!+H67=U#$qDJuG(J'&60<sAgl(E#OA"<[gN+b>-@lfnHBo)JFU\r
+s7Q$^s8Du`jo:'bZNU=j!!"nW!&X`V1Dgs.!!#&;2h;8C?314:!rus;!,D`<D$L&T\r
+#68BC!+H05?ig=4&eAXd%UK,86N@*G$k>Q2%QaXj,6.gF-6XX%ZaA*Rq>^?ks6fFW\r
+oC`.WpAam\r;Z]pqtg?mrr;lls6/V8qtpElr;ZE_ruE16&ecPk!"pJ$3=uoQ!X'Bf\r
+I$)CcfhP1Js8;osrVu3KnG`H:nF>lAqt9pcp[n(Fs8W&nq#16ls7uEhrr)lioD^g2\r
+;'$c:!!!i9!#MH/])2L,p%\R_r;ZZis8Mrr!!!Z2rVulqs7uKjmdBfCq#1*fs8N#t\r
+mHs`Fq#C?lrr<$4#R)=T![SHh5nFDs$jf`:##td-<WE,!!!$+)"^M7Y"]tm2<sAe/\r
+"pA!4"'>g1>RCI>$3F<0!&YT0:^$nl!WYan!^$_p3=cWX#RE$h"ZHPa1PL@YZEMQe\r
+]Zu+ZPlq(5*>V6N!(%5(;@j:8'GFII!C7;1<>$$O!!#Ll"C)'2@g2sH"p&BC!+uQ;\r
+@gW3D#Qe65!*0(":hp%29*>;h%Lu5I'MT#G5lq-E!s1(T!$i'c2$jR>]XunkpAb'g\r
+s8Dips8N&jo(W+\s5rG/o'uPUrVtg6m/Ht`V5Ca8'.3b['/qjG_o:KjiViZOrr<$:\r
+$3qa^"s<mBs6/S<s8Du`lL=fG#ljr's8VudnEg/SIe<7-lfn&S\]XX<s7#IVr;?R`\r
+7:-#p)%$]r+s]/K!"tWeXmbi\m-=UR=);,GD=mH"q=t!\o)AO`s8N#trr2rio`+ph\r
+rr<$1!!!ZQ)DqKp)%6j*"9C1V!&=QT4pV<a"p@X1%Tj;T>6"^p!!,Cd!C6\e561dN\r
+!WYUiHiQ\?!)3Rr80K*Y!!"\S!'_,/:]LJR&edP2!$_^Q0EhJ6+WOAd"#0cU+:eo-\r
+!!!ZJ&i0Lf-Q*Rp#6I<o!&kZ.:B1AN#R`s!!BM#9=o\Ro!!#^n!)Was;$$_p!WYpt\r
+!(m:m8-fDq$49Z?$r@058,rWM!!"eT!&\!j%6kaJ7fWN;!<FPO"Xt6'2uipuUnbiq\r
+m/R+bs6o@Er;?Qorr;BPo&\p"rr2rfnGb@(8du7Tr;?Tmr;Z0Ps$oUm!<FDI![8$Z\r
+-ia5`O,Kb4r;Yg9me6>Nrr;ucId61\s8W&pqZ$<`rr;rs(DJ5V2GF,Is82]nhr"=Y\r
+d-h5G,QIfZ%1a]f#93^D'+kd"!!!N.rVuBUrVlfrrr2r^l1=T@s7Q'bI=6qR!>,\G\r
+*X`8r%h'gE1f5#'1bpd_'br_K*^qM-<YlTD(E#dn/6=&E:*(WI*[<rlHm:lu,!d:o\r
+7irjI+WjQ)+&NX_4Y83c$OJd?,ubm)7Mck(0/$6='g!W_:DOU1*umcl*Bu858Ll>W\r
+-n.>(+[?MF2Cg4Y-RMY,)a55b57%lP,:Z2&+[[7o8f]'M*["<$+Aj4&;'@#V+s0E#\r
++A<@Z6Q-n@+X'o3,?\S0/RpXqCFq&B)&GaR%Q5FN6UF(I%1Fa-)EB)f5nFGV6U=lO\r
+q>^Kos8N#tnF-#Lrr;fgs7Q$arr)js<bn(iYgUtf$4/-^!@%RE+92Bf'+m,F*B_0O\r
+eiYrfs8;osrVu*EmJd-7l07C2s8D9JlMC>Us8N&inc&Xj&d/7S!!!l:!$7Jm[J9Lr\r
+oCN"ZrVq@uQlmS32E=I.V6g.!s68e>qYL6\n+Z29o)A[hrr<#qqu?*Pq#1-jrr)lr\r
+r;Ym=q=jR^r;?TboDeU^s7cHko(N+WqZ$Bis7Z?ikj\QDr;ZG=rVuQhs7Q<ip&"d^\r
+qZ$<bs7c<gm-XiMr;ZKbs6T.Qp\FjYo)J4Ms8)Wmqt^9[m/QqWs8;conF?PMp&FRR\r
+s8;lrq"Xm[o)JUbs7,a]q>^Kis8Us>nb<(`oDJX[qu?<bs7Q3fp\Fj`qZ$?es7cBi\r
+q>L?]oDe4Hs7>n1s7,[[kir-5lMpMKs7,UYr;?TSj7rQNs7Z*br;-Hdo)J:Ls8;`m\r
+rrE#ss*jV4pAb-lk2c"1rVn2j2cj*u,U>PR!#kq=+q+l8%1G)5`U3Hors8lSrqcZp\r
+r;ZE[s8Musqtp?ls8Dutqss7Hs8Dutrr;NXpnFFa!!!WD%OhDY)[6Hk!s0YK![/F!\r
+21pUSqu-Q_nGiCbs6]4HrVlirs8VrmrUomZqL8A>r;QZhq"jsgs8DrsrVccprVuip\r
+s8DlqrVZ]mrVuQds7lWom.1/Do`+ggs6/kAq#:9gs82Qjo)&IYmIoZ;s7G(,htd<P\r
+pAFserVuN`s8;iqmI0rGq>^$Yr:g'fr;Q`iq#C-ds82cpn+$GHnc.nArql`qqZ$Tk\r
+rFZ!#q#C9ks8;osnb;eBo'PrDoCr:`nGN.Ws8VQarpBFXq#CBfqu6NnrV69\r;ZW_\r
+p%\@_s7H-em-t&Ip&Fpds6/\Hqu$Khq>^9fs8;fprVliqrr;rqs8MrrrVQWjp\Opi\r
+rVl?ds*jJ+p&G$kmHs]V#oNgJ)#sXQ!s0ZK=*a]?s68bIqtg<m!$DIK*6ZFVqt^9l\r
+rr<#ts75aMs8Vrqs7ZKls5Mtsl0.O7rr9jNcN!hBhq[tJ`oBHS@K?HO*#gp=!#Z.R\r
+-3XVq#RVXR!>)B9ZI[[Yqu-<hs82Tfp%S:Sr-nYBrr;rqs8Murs8DrsrVliqrr;rq\r
+s8Dorqu-QjrVuQfs7u]pq>^Kdp](-js7H3\oD@tGq;h2Ik5,,Gqu?9`s80[UbehHN\r
+aj/kW][4jHgAM!Nr;ZQaqXF(MnbW7bpA+^Snb;YLs2)b+l0SHIrr;cks7cNeo(hhI\r
+oOdgprVufqs82inqu?Ngs8(C.h3b"4N0freO-Gp"U@nKbr;Z`ns7Z-]kk>#?m.BK:\r
+s8DH]rHNdOEcd:SBn^JEN0KX/q"k$drVl`oq>L?hrVu]ls8;lqs8Dlqo'u2Ks82<T\r
+mf*5>p\+L[q#C?ms4uJs!!!ZO)`:AbD#F21QBo/k$8Meh0,>6^(`"\#qZ#jEoD/1[\r
+rr7HGrqQ*XlMLPLr;6<irr;ons6oCLQ^+?1k5##Ss75XYr;6M=GEt$?;4F&a!X'MJ\r
+#TjZn.2!C?mI'K?rV$6jqYpNkrr;ios8)]oqXjLOrVu`ms8;iqr;HZprVulqrr;rr\r
+s82fqC2\_0%4;,U(B=FM,:5G2jmi!<qttpCqu6WfqZ$*]s7,7=k1/;G$ka`a"s=!Q\r
+,QIf\+sAVkg<o`qlMghPrVuHds7lBfp\Y!hhW3`+&fq#Q&c_nH%20nQURV)ZpA=gd\r
+rVlimrVlWms7cKjj6Q,]L5cNQ*s)`f!!<uQ*&$=8o_\Xfq>U0fs7?6in+HYCqu8JE\r
+p\jt#'H[ep-3+#`%hC*Q5>h:Ss82firVuEes6fmdnG`IZs8MinrV?Knqu?]nlg*g7\r
+oIp+<s5i>,n*g)OrVoG]?MjX"!WjDC!$;OT/cYkq!!"8E!$:t1s8Mrrs8N&`l0eQ@\r
+Ic]_Ms8Vfbp?:Pri;`fVs8N&urr33,&q>:ikiVmCqZ#[=rs8rYqtg?jr;Z!Gs7uQl\r
+$k=Kt)CGI`s8;olnFQ#4mcX9;o)A[drr;lnrqZNmqYgHjrVu`ms8)]oqYgHjrVufm\r
+rr7"^P6_RP*?R]]&2G(>2#dFQn*g)CIe37(o^DeZqYpNnr;Zforr3-.-3OQ-%hLi@\r
+(Hs2m3r]0Srr;?\roa(Tl21MRqZ$?]qX=:\rXp%n(E51G(c_m3-D7<;qu?QjrVZQi\r
+rV-*`p\Xsbr;ZEcs*&jR!!!r<"""!J+92Hdp\FjdrVuTcq>^Kiq>K[Xs6][_1@k;A\r
+rr<$-"pQ7P!$D7A*AB3;qYU<irq66imJd.Orr;?as7$'gp&=pbs8Mlps82N`rUg'g\r
+/,oS4kjn--qY^<lkir*Dqu<Xoa$rR27n7:1_WLdns7#IVnF$5*eDL<*s8MqDqYU!G\r
+jOsS5o`+sgqtg*^p\AN:D?U+R,pG,F!##P=*d`7#!!!o)mf3(Ws7Z6fn+$GTrr7Y-\r
+Pj.K$oC_\OrVHBgq=j^Yq"ja_rql]prVccorVufos8)]oqYgHjrVu]ls8)Wls)iOW\r
+!!"\a&4-?s-ia5krql`oq?I!"rVuKZpAY(.p%J:XqZ$HjrrE0R!!"h]#=Ak$4p1j2\r
+rq.Z*n(dC(hYdEBr;ZQis826WmIpJU!!!Z5""=Zi5R@iVPFAT9n+$DUs'u$,s8Vuq\r
+s7>saq>L>@J"d)N1(Y!`',*kC#WMYXs7Z3ep@eLcs82ThmeQnPp&+IWqu6j)*YAo@\r
+)AbdD!%0if=8Vgnr;HEhs6oseli7"Os8VTgs7cNkq>0p[q"OC[s8Drr1A^kFs8N&t\r
+rr;uss-K.P$k4Al]@4g@iTB>'qu$Kco`+OSs8)Njs8;osrVuN\rVulsro+=cs8)*L\r
+jmMO#qtg$cs*b=_%o5o%!!!KO*]*s")$gKl"pQ1Z%4>"MBt(Xukj/5[^<c]Vs8N&u\r
+rr<#ts8W)us8N&ur;HZhp\FCOp&4pirVulqs8;iqqYgHjrVu]ls7uQks)iOY!!"e[\r
+"?Qnn2[fpFs8)cqqu?-Op[7A<s8N&clh9r?s7Q!`$kEb1#6dR1&6B5?8dYSWs8Drs\r
+:%\GboD\d^nb2P9lKS3GqtpEn!s^(U"ulS_56qN_Mib1:rVuirqYpNfrr;lns8V6F\r
+p[e%WAn[;,!&"<P2$aFS"Tg^MlMpMIs8)Tks#g/Us75p_oD&=aq"aq(&iTmm1(Xg^\r
+!!"W,/QVcDs8;corVuHfs6fpemf3=Xs8MinrVQWpqsa(?s8W&ss#'64nEfK1o()YM\r
+p&FILr>?M)!!!W8"W[XI*>0&<!!!lC#pfud,QIfX"TfD@!=o53$g[*Hrr39&rqZTo\r
+qXX1Drr.BHrr<#ss6T%Grqudt<G_^9(CLTs(Dee+!#GqL+:8Q#!!!T"o`+pis7#OQ\r
+jlPmqlgsrJs8N#trr2rnqZ$Nns8DrsrVliqs8Musr;HZlrVu]jrr6;4M$ODR'bX"P\r
+'1)[!+MbYAqY'shrVuors8W)us8N&ko`+UVrrRWN1]RM9"9;+&!)sL38F#@9l07Bu\r
+nE9fNqY0mdr;ZfWl06F=gAh:(%h224!(R4q:j%&_q>UEcp?V8AhYR6?r;ZZ_o)&=_\r
+s)E+M&.h;>$:tsG;A0U3j5U+;qu?Tms7Q-Oq#'OWs8Dips7l?g&Igr)!'(;c7g/lW\r
+)A<oWqtC'fqZ$Nnq>UEcs8V]js7cQlrr2iprs&GooC)8@nGE5Lrr)lrrr;iks7Q-d\r
+/MB<Rm/Hq]s&<$7USYX#rVs^MgDq1k"TTS['.at8.X#ocs8DuPg>Mo,rp]CBs8Vuq\r
+r-n;0q"spfq=jpXmf34]s8;iqjlQGsM4QXc9`P2/&JQO0EIduds7c9fqtpEmrr;us\r
+s8)Tlp@eL^qZ$Qps8DrsrVliqrr;rsrr)lrrVufos8)Wls'&c`!sCae!&P?#71]qe\r
+]XcPlqu?Hbqt^!]kN1k+rr;T\s8;fp":kSf!<>@p$!@6.:E:*Pp@J7_If'';s8W&d\r
+nFcPPs82ir]>;kp!%Jg%=Tnh,%1HK@<K#esqu6Wjp%dVAqs++Zp?1i1q>C7u?A\^_\r
+3<0%D!!#+]!&i!AoD8@aqu-H^o&]oOo`"mjq"k$^o)Amr3!K@P&Ihk[&m,>=3VrIL\r
+r;-HlrVQWpp&G'bs8Min&H;_.rVuEWmf3=aq>0dUoC;hY6hpHQrr<#trr;oqs5`>6\r
+p@nU^q>]mPs"?*!:/GX)!#bh;(E+&B#6Pn@p](-ds5i>.s8N&np\b'krVQQi?=7.9\r
+qYpIYs7,XVq=t!bp](6ks6&P>r;6NkqZ$-Vs"H2mdEpbLrr;rrs8N#trr2rsrr;us\r
+s8N#trr2rsrr;uss8N#toDT^,qu-OT4D+j*8H8`^#R=!-#<SEF]Dhg0r;QZor^H__\r
+r;6Hjqu6Wfp\tR-/d)2C!ru7)"'5I&3;`[SoC_bUs8)TcoD87\rr)ljqu==HeGo\'\r
+#Rj9/#Z;$<;+=-#qY^BmrVpU,p\O@Vs7H-eo(DkZ8kOO4!(6ee6OO2m"9:[#^$5@i\r
+s8N&qs8VrorqZNir;Z`qr;6Ko!AOQS561mY!!#4i$U"=as8Dors8Mlps7?3fnbW.S\r
+rVulrs8W)tr;Zclrr;fns8)`or;Q\/rVliqrr;ors6fCTr;HZdo)FDuU(.\c!!"&S\r
+'JKLe&AuE3rr2rgo(r@cs6K%>lg='<s8D9Mnc&Of!s8uG'-B+i6^!S,]"$#Dht?-m\r
+r;QWoo^`%]r;ZZis.5ac_SF^0[)2h@s4@7!qu-OS4D=s+9E5&f"9VL)"?hp5[ep((\r
+q#1$fs8W)us8)`nqu?]fp\tR..L#uG#6S'0"&f1#48]!VpA"C^s8)]ho`"[brVZ]_\r
+nbT>p`W,ud!!POd!Cd.o6odA@o(;t]rr;utrV-0Yqu?6`s6fLUrC08(!!#Rm!_<WH\r
+#YG-u5I%EKp%SL_s7lWorVuorrqZNmrVuN]rr<'P!!>Fd#tb1!5Q_<Qp\=dbqZ$Qn\r
+q#CBbs8V]grUp*frVlisrr;iprqZQnq>UEjrr2iprqu`os8Drsmd^/Fp&>!l&fDQA\r
+'GWD(!#ups5:\9Wo'ubWqu?Tms82^Ys8Drsrr<#ts8DZdp&+[dda71a"sF]o0)ttk\r
+.jmph!$D7A+U%io&I^K+#r+t<CG./8!<=;I!@C9'?N0p'fD^6rrVnf<BE\`:!!#[n\r
+!)<Y!4G\osqYgHfqtL*is8N&uqYpHirr;N]rWro\"p7C%"Bb^);?@(hqu-QjqY^Bm\r
+q>^<bs8;ooqZ$!SqkL7+!!"AH"[2ne8-K2f0Jcu+pAb*is8N&sq>Bj[s7#mbmdp>S\r
+5!F&g!(mG!9*]hK8-/cVT:O9uo`+[`p&=sgs8W&rq#('ds68bI!!+eS"[`A"9E5/\\r
+!=(RVpAasas8;cgs8MThs7H?kq#(*jqYU6js8)cpq>UEjrr;iorqucpr;HWprVlin\r
+rVufps#N59!!!]A%4M8W+2#8EoCW(^r;ZTgs8N#t62:6TmdKfHrr;uts6oLIlfeBJ\r
+qu6Zs)h!%#A70rg!$2XX1+=JB&e-`!!$_ID,6@ik$O/5DMQb@LnG`=brr)lKrdObC\r
+s"l]H"U[p'!)<Op:'CbaH[_Uarr;`jq#(*jr;HZlrr)]ms7,d]#7)[Z!(@(n<r`4t\r
+#7F)sq>^Ems8W&ms82QjrVu]gs7Z<hSY`gr""XH[6NREb#RO*L-rK^5s8;fprVufm\r
+rq6!_med%Qo(r8@1Md*m9Etbq":tZ("TUoLMnJ]Us7uZhrr2ips"=6Dqu6Nni8=M;\r
+#<)Vd6NIHd!!5Ce#WhbVs8;fprVZHir:'adoDejcrVlimqYpJ=r;Zclrr;ios8)`o\r
+r;Q]nrVliqrr;Q^r8Qf,Q'S?K!#%U`?2OR"lK\EGqu?0Rs8MuskN;L$k4JZPs8Dor\r
+q>1-js8Vums.Q*g84QbUpAaUKs82Wlrql`JeaWM4s0&NEH$5<@7:62u)=Hkkrqufe\r
+nc/Ues4@64qu-OG0O4hh9E5&i!Wc(#"?pX?OSf%Wq>L6eqY^9is8;osr;Zfhq#:U*\r
+.K]Z@"T_^*!E0428EoI?rr2pnqtU3fp](3lq=t!br;VkGWrN8S!!kjj!D!@u7hQP#\r
+naleXqu?Tnqu-QhoD._Ls6oOTr$j.)"9D=)#>G4!643uhI=&'lr;Z]pqu6TmrV[]1\r
+r;Z`qf[og($p4Lm63%*X!!5Ch$U+=^s8N#ss*jkDqsXFZnc/Xcrr<#pqu?Zpr;Zcm\r
+rr;ios8)`or;Q]nrVliqrr;]frqufrU85,/BmomWs7H!aio:"2pAaXLs8Moqjl?19\r
+r;ZWhs-K%ITV/=7eDBllqgsHV"pYQiKT+*tfCee9rr)llp]'LAq"FC\rr)ljp&>@*\r
+(CTg)rq,j^n*g#Mrr:UL4T#*W+='eb#"esu<<ND&"U%"o?\&"Os8)`nqu$Kns8W#s\r
+s8;osp%eUo#qH/\8I,H'"9hj/#=R+onG`Fe9`4_ap[nLas82Wlq>L>HN1U(R/cZ/C\r
+!!,Up#=o"(1%Fl8qYL6hrVZZpqXF4Bqu?3WqY_NY=9Sb'#ma9+!'^r"9P\@2r;Q`o\r
+s82fprqmc9qYpNns2`7D#n&fp!^H_f7fWTW"q3]co)J[err7HErVQ'[qXFObqYpNp\r
+r;HZprqufqqYpNkrr;iorqucpr;HZprVlips8VW]rVZZp+<`V@Wkk0p\:/q!9hoOm\r
+5@?&m8K/L(/1Nse!#5J6&;l=4rr)lhp@W-8C0=bE8P2Ya$kN^P%fcS7'GMU(CN[G.\r
+b51u7o_&%\!<ri.rr;uts8N&ueGaporVmKG70!?W"9MU-"B5I)4AAXnp\Fjcrr)fp\r
+s8N&ur;Zfnrr;BUr<*6O"Th7'#@7]D>lXmh_Sk:/rr<#sr;#sUs8)coqu?Nls*KBa\r
+!!b1Z$Ut1#:(%J+!<b(NqZ$Bes8)Zjrr;i_o]H&NnacPT(`-!R"B,^9;ZI7,57Rro\r
+=B:7Sr;ZZoqYpI9rVccrr;ZWgs08fT!<Y.Y!C6bn9`P>c"UdKNi;`H@rr7HGs8;Kb\r
+qXX[dqu6Wqr;HZprqufqqYpNkrr;iorqucpr;HZprVligpA<t8n+ZYX+X/`C!##J>\r
+*to>D!!!uL$SDDZ*XMus"p6%L!#Qh"1i7&Xj5TY.rr;uts6f@JoCMkYrr;KWr;QZp\r
+m-FJ.NgqFB1B[gl:f(=)%2TEFp&4=Io_e[frr2rLrdObCrs0#p!!#@h!E]L-<WN1_\r
+6q;"bp]('frqu`pqu$KfqYTdSpZ(H.!!",B!(@8#?479N!!#*h\'t9Rs8W&qp@.SM\r
+q#CBms7Q3fEI!QE">9`\6NI9`$k6#5!%[pDs7uKjq>1$gs823TkPP;Lo(i;"'28]7\r
+;\'=<!"Aol$jKBu8UL.)s7lQgrr"VOrr<#ss7>d\TV'%#!%e0P63e!"!shL##X$G[\r
+n*B96s8W&trq63eo`+sgrr<#rrVulrGQ7[=rr;ios8)`or;Q]nrVulqrr;ors7Q0e\r
+r;Q]s!tkqL+UJN#.kF4>.7aI>+r_=\G&ippFd@K'Qr6ao2)@f#qZ$?as7l<fp\"R^\r
+pAaIBs8MoqmHX`Jp]'pWs8Moqna?DW!#H1U-q[$<rquflq#C?ls4@7!qu-Ns#;uVf\r
+9`P/l"Tqd5$:YaH4oG<Zqu?]qs8VEOnbiFeqYgHVlLk;^-O0`J#6J-2!ETR:9UD-R\r
+qYU<mrr)loqu6Bjrqufns8Q))EW?(i!!l$r"],I1:&k>KpA"[cr;ZZlrr2rpq#9j[\r
+s6oRUrriNh"9DC#!(R/$"%a1:<\#S(r;Q`os8Drh,5hB<s8;okp&C/9Z2ak[!shL&\r
+$rR'-70X/c\[pJiq#CBnrr;um$1RupqtKmarr<#trceDAr;Q`mrr;ios8)`or;HZp\r
+rVlips8V3EmJ?e]3''Rtnc/Lbs7Q-d!WsSM![eKd0J=qQqY'sgqu>I*o)&7_rr)l]\r
+k5YGXs6f4QS!UVb!#uR[0EM4t$3hpi$SDDZ*eAa2q"=ZmYKR[m/-#Ybrr)lrrVtLK\r
+If'*D!s^^d#>P:"<<NA("p@:'&2sIcs7cEgqu$K]mdpAVs7Z9fdFI1U!$_OF8-8io\r
+!!$"($VQPBXSM_ms8MusqYL0bs8Dipqu?[s??H5N1'.eR"U@p3#u:X-1\^_Fr;?Tl\r
+r;Q]qrV6Baq>^!VqYp^%5Qh*c#6dp,HilqG!_O:E9)&/]o_A1Rp%SLcs8Vurq"=ZI\r
+NNW<^1B@\N!XV^(!^m5#6E-s-p%8:arVlisq"ss[s8Vujq#13ls8N#ts8Mrqs8)`p\r
+qYpNkrr;ins8;iqrq6*`qYgHhqu?Tns7#X[/MKNl!#6Io3<B1(%LOd]881?i!#p?4\r
+Q2^^]ZE_=<nc/CXs5rD=)Ak(=%jq_j,6.]^!!!oC"X40S+TMKZ!s'8A!>j\NoD\^g\r
+qtg?]n,*+_s4@7!qu-Nq"Z6Dg:BU]#"9MU)!'USm0)#)?o_A=[qu?Kgs8;osq"t*$\r
+]?13X.0KWE"p&!0!)s(,8:lJdq"aphrr<#oqu$0fqt^9er;TJkC]FPl!!Paj!_ib!\r
+8HK#On*pATqu?Qkrr2rrq#9p]s7,^WrriNj"9;C/#ZUs8!D3=l64F8dnF?PNq#:#:\r
+q>^Hos8)cmq#?/*W<!)Z!!Gak##5.!6Nmf_PEWEFnc/Rbr;ZflrVZEis8D`grqu`p\r
+rr2rtrqucpr;Q]nrr;ios8)]or;HZpl0[p:s8V-Am4^:Z#7;=`(b677.KBGbCh\_)\r
+qu?Zms8;`n%h0`p%j;)Z'_h>$rr2pN5!DR=!"<ORFfD=LaN*!5rVtX+m.U,PbKAP6\r
+U9Fe)&JPp!nF?5Os8W)us8N#tfD^6rrVlj!1'@k["p8*6"'5I&49Ga<p%SL[qYg6c\r
+s8N#tr;Zfmr;WFbZ3:C^"p.O)!aYj,<<<@oF**T?q>UEns8VolrV-?hq>^-_s$fap\r
+!!P1Z"@E.j9`P/_!sLRCjo>8Us82`orr;rlrV$'eo(2_X"U%'n!)s4-;?M@K8co&^\r
+'+dV.qZ$Kns7uHgqYC0kqZ$Qls+,Zq"U@'g"%<1o:&k>b"U[PGJ>Dl1s8Mrps8Vln\r
+rV6EmrVHEkqtpEmrr<#tr;Q]nrr2ips8)`pqYgHlrVulos8V*@l2:S]5snEX&Kh&R\r
+&/cH@qu-Qoqu>g=rq5m_jPiDup@\H/Fb:GF+T;9=qu-Et#mgP1s8N&ulg4-:qYp9c\r
+rr2rtrr<#pqu?Zqs8N&s!!**!s8(a:h!+1err2iIrdObCrr<$P!s_X-"C269=TAFb\r
+"U?[Uqu?Nls7Q'`rr2rmqu??as,E,6!!">L!DNXr=oeY,!X;,)AV9jUs8W&ts82ir\r
+q>^Ejs8)]o6qh(n$p+Fp7gKH'"9_C*$p<7up\apgqu$Kns8D`kpA+aZoD8Ij"@*(i\r
+<!EG$"$-HT"9:t,&P2ius8;osqtg?fp\k-hs8W#sF`WoT#X/4k8-&um!!Ggr$:/WM\r
+Pl1FYs8DutrV6Bjq>U>Ar;?Tmr;Zcqs8W)rrr2iprqucqqYpNkrVufos8MfkrV-3g\r
+r;Zdr='u"/%K$/)p\OpWnGiIas68bDrr)lrrVulrs5`8-2`Nttr;ZWjr>Zh"k3)(%\r
+o_AFcs7,[Sf\#-]rr;uts7H![gtgles8<`O']7p)rr;cgqt0jgrqtCIIf'*D!!"_T\r
+##>F*?3^X:!WYLl$8MGVs8;osq>('hrVucos7cBiNfg%9!%&'Y;Zm))!WlO+"@lHm\r
+FSbk6s8Dutqu?]ms8Dipq"t(Q6<jR!3<04N$4L&>"%rk*3QB,"r;6Nkr;Zcrs7lQd\r
+q>^$WqYp^$63I9f#R+*03Wi%V!(@8$5P"FGr;Zfqr;Z]ls8Vurs8;n0AVp]u4ob^V\r
+":A*/#"et'5[@ZHrr)lsrr;uppAY$drqq6Err;lms8N#ts8Mrqrqucpr;Q`mrr;in\r
+s8;iqr8d))r;ZfZl0b:BY'tt^mdgAQr;ZNfs5`51rr2rnq>]C2kj7^-rr<#hoC`+_\r
+s7c6e3&aD9#T\SMQasTMbK8Z@r;YC!mCp6]XfK6iJs7&e,QIfQo()_No_e@Sq>LEo\r
+s4@7!qu-Np!&=T[:BU]'"Tqg.!C@)#1Ah%MqYgHnrr;fis8;osqu6V^R]?Dg-5-np\r
+#6J96!EfC'6qBm^q>('jr;Zfnrr;for;-Hdq#<'.;?-kW!!#4i$WmB/7f`]JZ*M[Q\r
+qu?Qks8N&uq#0p^s75dXrriKk"9;F+"&K1_"AJsu7g]Jbn*pATs8W)ss8W)us8)co\r
+qYs]"HisU7!!>^p$WR338cSuV84[Rpqu?Zns8Mohs8Vuqr!NH&s7lBhrr2rtrVleF\r
+r;Q]nrr;ios8)]or;HZnr;Zfep%J7\s%lWt+!WB<!"@)ti;<NRrr2rhoD@e;n,E@e\r
+rr<"6D/91Q!<)rqq=t!hrVm--)[Q`i#mVOZ#9j6M*<6'W!WX,K$mZDq,ldoVrr)lm\r
+q>^?hs82Zms8;osr;Zfprr;rrs8Mp[rr;ios8)`pq>UEirr;fns8)`pqZ$Qms8Mrr\r
+rVZZlrrN0U"p@^)!*0@*<<W@g$jeihq>^<ds8W)unaQ5Ns*jh@s.,X`!!";[%9`r9\r
+=p"b+!!#DS5@jWas8Vrqs7cEjp](6ds82Tk1Gi#4"?HM_64aZ5!Wl$s"$<BZb52&9\r
+qu-Bhs82QipA+a`oD/Ch"[)qi9`P/_"U7O%"@`k35P+UKqu?]ns8;forVHEkp\Fh_\r
+:N?F;2uitK#Ug*^!X26t!'<+t?MX<prVQWpr:g6jqu6Qks8N&mpAY*is8W#ss8Dup\r
+rdOhGr;6Nlqu?Zks8DTdqY^Bn!!!6Y1Hu6V)Tg.Wq"OgfrVuQ`s.,^[0ek`i!!Ol(\r
+0E;+Ur;QZos8VZ]p\t3mL5(ci!"K,5(C13b!!!`?#9<dE&qPRpo^r.\rVulsrV69^\r
+s8Dfop&+j]rr;Zis7c?hqtL*ho_ng[r-n\7rr;NbrpBU]n,NF[s8VloqtU3bp&F[a\r
+$32jt#ZD-3:`'C=#67"%"@)kVs8Vlos7u]prVHQnqu?WpKR9!e!%AHZ9aq)''*;PK\r
+!(nLP9E4bds7-!dn*p>Bn,N1_s7cO@(IS9(2'!<;"TV@4&7GYC98&,/p%nX_s*jD,\r
+qWmeQp%SLdnbW7c"t]fT1_(3p!!"q[#s/.o/bf;FnGDnRs7Gp_mdL2KmJQuZ=`k&a\r
+6NI<_!s2@,"]>L(68'chs8)cpq>^Kkp\adWs8Molo_AI_s82<bs8)cqqu?B]r;Zcr\r
+o(MhQrr2Zls7#m\q>^Khr;Q`s#CZm_'EA%2qXslfUq/QD:]LJ5"To\E!#5hI)Z]pK\r
+5X7s;q>^Hoqs*P4rr<#`lLOfIs8MusoC;k[r;Zcos6o@Tq=t!grVu!AkkkARmd]H>\r
+s7cQeqZ$6gs7cEjqY0sep&+j\qZ$*]s6od`n,*.Tq>]sXqX!qLmec_Ls*XS9s7cNn\r
+!%S0P5l^mM&dhVM##-'O;"X/TqY'sdq>C-eoDAFVrV6;1BS-Ef.N8ap*t;]_!)*h%\r
+9G\%#s7?9algb#Qq#C'ZrUBR]p&>d31BRV9'b+1D!($Yd9E52fOI*rWoCr:boDejc\r
+rr<#qrVu]jrrWET$k>IM!!"tY!&b2o4p_TOp%n^YpA+Ucp@J=PnGi:Ls8Oc:=9&=S\r
+!!#4e!`'@6<XoC+&ILGjnc/Xds8W)qrV6$Yna5r8n,N=cs8)cqqZ$Tms7Z'^rVZ]j\r
+r;ZHeqrmS>mJ$>Eq>9dYr;?Tp/M&p_!"K)2&/Z$2"TT\S#V.!1)a"*#)DNm8C1r#D\r
+-T1o&s7H!Yp%J7]rr62,B+PRs"To\H!?Se[e+r_;q=jpgr;Z!Dp&=sjo(2PRs8DN_\r
+nb<"Xp&=d[s7c3dp[nL[o)JCSs7Z$`o^DhNp&Fg]s8)6\o^hhPrr2qHrr;lprrs-"\r
+!YnE0#t5.<<<*@p!"1s-d.68fs7cQno`+RSr:0[as(?"n%gb0'"%E7j64!ij%M))1\r
+!%.7.s6oUJr;ZBds7?$ap[%DI"UHIa&3pC-6N@*I#8Bf2&k$Y`ScANcs7u]po)ARQ\r
+rUf7Pr9aLe!%AEZ4;%aF7MlG*(C<SG#!;_Ns8Vops82iqrVQ3dq=4Lb+>6+_">'ZZ\r
+6O*li"Tq-m!&=c`./s2Frr2rrrqQHjp%eCSs8N&urr;QXp@IkMq=sscqu?0UoD&7\\r
+r;Zfos8Vurs82irlgFH6nbW1\s7>a[?X.R]$R>iT+USE&`kpbbqtU3jr;Ya6nti.f\r
+rr2rrrr;uss%uX!!s0)L&h!_[)@-Hl!rsP0jo>>Ws6AhJrquf[kOk"$RdTY9qu?]c\r
+s7bp\p?qtTmf3%Ls7l'_q!\7Xnc/IIp@.\Rs7lWopAY*gs8W#ss7lKkiTU+<"XX3\\r
+49,gS!>e<-"#9k*#;<<ug@>4Cht--rpu_#BlhLMY;HRTD&2Xe%63RHZ#73d%$Te=g\r
+*;BL5p](-Yr9N_Jlh1;TlM(;Y!ZV1J1B7\?!"M-q(.&!+/OiTSs8;osqu?]hs8M`l\r
+s82irqYq!10G+dX&.:i;$q:3s0)tu"g!fWjp]('_s6oH+o'H,Bp&G%:.mOFP2%L6f\r
+#m`p#!&srY-NF,as8Dutrr;iko)J[`s8;corVuQ]q>C9mq>^Kjs8DiprU9FLr;Z`p\r
+s8DinqVL,ghr*Sprr5/G8eDUYrqufoqZ$0Vs%Gst(DAVP,=:PQro2l0rr)lrrVuN^\r
+s7Z0dkihYf*#gC.!"t]cZ2XY#rqcY;EL'$ZB)_Z,h:h[pR^)nn&g\eYrVcc\nal2K\r
+pZqkNli6YFs7c!^qXOU`oDed]rr;Nar;6Noqu?]kqu?Qms8;osl0S)bceSR&*<6Bs\r
+!!b+_&ifpr.ffu)NL$EqkNDU>p@nUUq#Bg@m+s4@1H5@7'`\4]&e[S4!%nTf3XQBK\r
+lLb,Ns8V9VmHXT=o`+s`s8N<=0E;,'!!4hS#;lJ_.g-87@W$k_qY][Zp[A.[kPt>5\r
+q")hul2V\F!#6^Y$R#Kg1&r%@!?Nr$ce@7Rr9OC_nGiI^s8Vrls"Q)p#QcCW!&"BR\r
+0,+\@3[5J,*>:!kjmr6:nc/@Us8)Q^kO&<Gs7u9boDeRIqs*;;kNVa)oDS7Xs8)cq\r
+qXjCLs8N&np&'2_KF.u#$Oe-X!#,,&s7#RYr;6NgoD_$;=TAF:)&Fh(!"P!JRGd#g\r
+qYL6krr2ru%fZD+rql`pqu;h>Yt7B!"T]s!&.C8n!#uFT-P[:D"9TD;r;ZKfs763b\r
+n,MtKs7Ps_q"=[bp\k'equ?Qis8Mrrs8Duqqu?Hds8N&ur;Zfgq>'"3lCXcPS=QjH\r
+PGk+I[\Th4R@gP*f[oltp?qtBmf2/3s5NPJl_1heTXD51^sBX>jeTH0ZcpmaZ``SB\r
+s8(XQkM6*sirA>ss6/GArfX^u[FX6Jg?#]ggSi'3Ml!55Z_Z.OiR.\Zec4I<pr'#h\r
+YaF(?3-e7fKj[c@FCV)&@\AQOMf=^"WeSH_LW#RDaI\U)S&4"*NMN/F^;InCkHrCa\r
+YJ\Yc^VJ4Yg@>47j8.U%s691Um,I\ehs1.-m/Q\4pu1N<m-t&Fk5"'4s7>^Pl2CSR\r
+s8MoNf%U0%s*]*F!!!K>&1"s+f^&)-q#16]mf2nJs8;]mrqudL/OBjR)nW`&rr2ri\r
+o_e^fs)2e&!!!Q1!#5J6)$U-e(DA\6"t9NP*ZQ"W)]1G,94J;7*S]<5rVcbFqZ$Bf\r
+s7ZEjq>L6fs7uWnp](9es8V`ks7ZKmp](9hrVcZjrr;ils7Z9goDARZp\4.Op$hG<\r
+m/I"^r;ZZfs7PXRj7<64mJktts3&pla4^L@f)OO_s7=e@p!3U*bl?\?s3?qhS9`8(\r
+>-:t&VbKm`:HOn20o/+YO]+AkNE%?J4re,c4bH0_I6&]n+<#)/&SV=cFpeXj!"*KA\r
+$Z5q[H3t[E(]e1M$Z6OnHQ`i8',l-:$Yp(aF:]F<)&7-0*-We<AKM.c+WGSd%;7=2\r
+FZ(=h2&prl#\X\J:&kiE%RH[R;m0A@`--[TMlP^=ammU5s51ZH^%_PUn*'5tq=a:W\r
+rVQWls82?_q=4K?KU2Z='/DODM3G+9rVucms68\Grql`pr;Z?Xs)iF8[^O!?n+Z_W\r
+s8N&uU8"Xf!"0MU-5$k:!!!g29P]iRYM.V%q"=[bq>^-Zs8)Njrr)lqqu?]ns8Vrm\r
+s7uWnp\t3cs8Vcls7H;>s7H<jp\Y!fq#CBfqu?3Us5i58e_g8Pkl9<)s53MLk3N')\r
+kl9T$rnG-E[ZS+UP/;r^RT!7Q84JJ",ASG@AKhn#-k]o?+)j+VF!2-6%Mj=#$?,tW\r
+HjC()!=F/Y#C-R\G7Y=4)ZX7L*IoFVHQ<rF&Ii:O'PmmpFqG45AcNip$5[dc+bL+/\r
+D?(u?&clYG)12u&D[@,#'G>I$&onQmC'b]"&eoF!'m:AuCCqD1-j=?('RDA3Aet\k\r
+*!p[(#'(4[FUT.A(_:s'#]U1_FqYaB+rtbP+^HHI==laI4\&sKnc.eJs7$'gq#'aU\r
+s7ZEkpA^D:ScAV:s7Gs`M3"Vf3E#nX)ZTjU0J,h[P,e0Fs8Mus[C!gMrr;uss8N&s\r
+r;QT`o(2n^"o\E"rr)lali6t^s8Mrro'l\DkPtJVs6JqKq=stV5uI(8q#C-hs7ZK]\r
+hs171qZ$Bks7lWoqu>d9h<sdoq>]pJrnZH2dcpecS'HtAMo0jp_091W=$D0r+(ZN3\r
+?Pshp*ZJ`4(2"HuC(h4s&/]X-$uHCeGSh0@*sca&%sB<,C`*k)%g$)<)gi#'EW?8Z\r
+!$$e+&:FfjFTiS6()DB:!bMNaMC9'R#U=[0%qYeiG8i)G/M:Nj,$6*DBeCE1(`m'&\r
+-YarBYARTmSRkQY?AcjpONs\K[uH$RP_d5DPKfYP\VQm,U40G(KY*A3cD-03QAWYH\r
+I_CP?R9a6n?sK+#BVT!2L.<k,.S5(Y*)7G#<[]M#/2L?^3`S#3ZCC^jna#Dts8;iq\r
+qZ":8^]siM:.nuoWPRojs7H?kl1=rOr;UeVLen'O'+"m`&eQ9A0g4pkp&>!krr;ii\r
+qt0mfrUfdWn*p#Ep](!]s7Q$am-=WMr;ZNas3&O@4#p%C#o`jE&H;P+rq$0ip&G'g\r
+s8Vurk2GM&r-mAYg%YO=nc/!N`LCP-@3&Ga(g@IiBFlD1(E%9-%r`*cD\*:q'G#:&\r
+%W`EnD\EP!',,U-&9JNmD[Z\Z!t]Pe*.8k9C_$b`%N'4*07>8jAe5kk%5NAX/:/KK\r
+?31^I#U=I7)JKsVPt"oO<ckunEO]b\lCGBZWm1Rbdsh&Ih=p4%s7Y=LjO!MHjo=Q'\r
+s5_Z,g>2epf`1<rs7taUs5X.ZirAl5s7P@NnaHMLh"9Ils7POSmcOQ<f(S(`s6f(M\r
+mc+90g\opbs4Z&rd+Ip8o)Iq7q:Os3iTU=&j8\2qqq:'/htR0@r;ZEdq"+LXq#C0i\r
+B3]6k&Uku*!"oA:)$^Tq!!F34;JE#,^[(.arqufdnG`Ig%'6P?rr2rqrVuZio'Gi-\r
+m-a-;s8W#qs8;fpqtpEmrVsF<b!8-h(`"V+";q1>&fMT=$jn)_Yf$M<s6/S<p@\I_\r
+s8V-Mn+$GTf(e.Us5CusbpdE[-Z^^OC)%+j$[s(E)[UHg#'L=TH4U+)'F'%($\''%\r
+H5Hm-&e&an(3LQDIjcUe+rt>3'O1tkBG`.1(`uum4`N,kO_19"Ss-ICXj!m"pt4[-\r
+j6cm6eb%DQs5i\Kna-;GmJle>s6]7Sp?2JGk5=`Cs8U*bbj>,moDe=Ns6eV2fB3"m\r
+k^NQth"9e!s8V<\qr7>DkP>)Hs8V`ks7QEllhL#/mcX9CrTX1Nl2LGHs8UdAkiVp<\r
+jo+]8s7>g]o],T&nc.hAqr?MqbkM/%jo=6(s6AG7g@G:4m.ol(kM?1<rUT@ImcO$b\r
+*%OWK<>ZH!!!!W<%O),f+USf,%1XTu'RhJ7";Y$<AI]1gq>('grVulss7,aIrr;ie\r
+p@4TAS%H>Ko^r'(Fb'Mm%LECZ'G;bn!##qT,tCC.TqAg;al/#/S`Jf*r;HZjs8V3Q\r
+p[8(]`9Ph's5_)tcE6iN)K$c7E?5g9)?OIU%!3-bD$_#2*XI'1!-8hSD\3:s(Od'C\r
++;])A&nMjh<tIiV7=;IdX4s>]k,d_Fcg^t`hYOqEqoe=)lh(5WhX9_"s8D]ls6odY\r
+mIp5Ks8VEWoC)GLoDS^Uq>]m\s6]dbn,NFSqu?!Qs7H0fq#CBgs8Vcls6T^Wo)JaG\r
+naQ)Ks-BUjDL[_H\BEars7H?kj$rS<kk>&Ks8VZis4HW3^sh:RHAF.C<]a;lkl:\G\r
+rr:jIs6K[alM:APs8V`jpA=m`meQ))o%N[7n)jH-melDAr:B[\q#::>r;$BmrVtp8\r
+meut]o'cVTqu;>)QmF.@%1j[++uTE$&/,[#$k*%PIO5!ms6&V5q>1*hs8)B]oCr(U\r
+p\=S++!_U;+92BM'GDc,&h#e#:s[AKq=aj\nc/Ucs8;]mp@J=`qu>:%mH=$:nGiO=\r
+p#ad(jk'On.W73T?5X;e)&mZC)0I,5B,;>%*tMs#!)j.=B-J^E1.RL)GJ/I*lE8J5\r
+e)12`Ic17birA!.s6]R\mHX8ro(Li8r8%5DeGfL3i;2p!s8D6_s6]jdm/R+Ip%?u"\r
+kOefSp&G'Vq>'=Us6K^bi;`hM_q/ptZttf*NMOJ]s8UR2s5a(Wl2Ue%i9m#Aa?NsQ\r
+(Go"i)F#3$?o(K!<cF>\pAaFXs5a.Yg[tN!I\4ak.9-Hq:E;Z:'KBb1.U3!#=4R$E\r
+j8]/5p]$8Nat?"b`Ra2;q>^3hs6KFHq>^0as7l6`oDARfp%eONlLO<.p8b7'qtg?l\r
+rVu?Sr;QZprr)lrrr:^*kO%X8XK0#a.6.A.$]9h+rr2rQh;\G6s5iG+rr<#`lgOiQ\r
+FoN-i*WQ0K+<N<G#p0<P*DB%<?!2JX=*f:?S>i@-Xf0SV#V::CP5kI[qu?]Wo^V8I\r
+pt,Q)+'Bs&<#63S)*3O;'42OpA037;0NslRYj/^Ps5Mi6iSsn"j8\9#s5`,<ioC(%\r
+jSe<'p?M;Mr:U'fmdfuJs*jqAnEf-6q<@JFm-4QMb4>DTnb\lf`LX?No)Ja_s8VH]\r
+s1Z\*o)JaMqu:o-W>%?l$ohH!5%t3V@2_1:jo>A?r;Y=>s+R8b-qe7m5%50`?j\Mm\r
++[gW+8qR[0B-9H\Z-rZ5YLkU.HN5*_![1Vk7XH":EuRGm!$>H+@"+dT06.U]GnDiR\r
+&M@`D5&Mo:@f[5lo)JaYqY^9jqu$Efrr2ips8W)us82fqp\Fjds8N'!%+*M^r;Q`V\r
+jmrBKs8Dipf[f$]rVuZes7c6ejQ#c#7oRCGchI55rr<#io_A@_s8N&ulK[s>rr8sr\r
+[V9E$hqdu!oDeLRs*jtDs8MioI!;4r$oe4e,m=9#%L+RF-:n1,s8;Tjme$)@s7GLS\r
+jrI)57!h3[F>S*BEK%_jhuDQrs5hu/g["n,n,MnFqX3tRo^r.SoDeLYs82Qjs7cQn\r
+med%Ws8Vcls5<;Eo)JaUr;Z*]rUU!gbi\#`aP/OSFqli4(Odu5+tur[S\Fpts6]7S\r
+q#:;SRC!YR72.=R$nu-*6@B%tI3DIO![CfbMmZK&QlJ;"%PUop2I..`CBH(o?%ft$\r
+LW15tJMgSs,Y*D,6?W\e=V`r(-q/%h10c\9J7j\GM6#Ac</MJPFs',&-:ELu.VBYQ\r
+A.p4a$5bPXm!e[!qtU-iq>^Hms7cB_nFZbZs6]1Fp\Fjds8SO\XpPd`!!X,p3CUKj\r
+a7T$'s8N&qpAOOLpUIZM#m_CIrVuEXrVlfrrr<#nq>L6is8W)uo^r(\rr;cfs7#LW\r
+jPoq5qu?3Ss7u?fX/F077r/eI2%^6R$OJKm""OTV+pTD/0Dt/5s82fqIf&$hgV)+H\r
+S\:9@s3T<palrc\g%j"`s6/2$f(T(8rr<#gn+?YXs8VurqtpEfrVuEcs3p$+R&e>@\r
+H'tYEh!+\8iq*3<s8V$Ls4d2Gg[tM)<GrI+>Q>pE*'.mf7sY[j<d9A.l1G"<R`,LF\r
+4#KEA)D+r.1LDb0JWmS5IU\5Y&3+he</(r=>T>n=%PUor1g(;B<b7)mfD5Hro`*_D\r
+rs^Sj"=7.b2.R(G<t-f^(H#9.JtVH0s5NqUfCJt)s8U=,rt-eb*AqCF/7'PY@sNj4\r
+^WPd7rr;N\q>UEjp@dqMoCr:[s7c$Xs8Du\k3i0Is7lNl!!<T/IL$Gc#n[.;$P!^f\r
+"pP]L?u>rAs7,LSr;$APN1:%S&s&*CrVcc`mdpGXs7H$Xs8N&trVu`is8W&tnEp6O\r
+94F0LX^GF\#6lIa%4hJZ*<?0]!!!cl2b_$'eb/S7s8DusqY0UPmeQeRr;ZQfs7GdY\r
+k4J]<nc.V@s5iSBIc'u$n`fQ,r;ZfqrVuBSq#C<mm-='2rr8\&h]5"*">4Er2fK$W\r
+AI^Cpf^o.3s8VBZs760h3(/!>2KolbDA=pK'fgI_7YVI1F"gOV)a/QQ.:Wf>A/I:?\r
+&2.6/3ao24lfJ-GhtI)8WlGJo6k_I`#r#Ed/5S3+Ga,MZIbXPqli7"KrVu!Rs7$'g\r
+d,k*O4]3Fa:2G]SiV``:rr;3[s6KU_mJm4Us8VZis763ioDej^rr;`ms7H3go_JOb\r
+rr;rqs7c3_q"47Wp\X^Ws8W#sq=jp[nbN1as6K(=qu?S8G]`l`rJHVr%M9N\":tY:\r
+'EeIU#m;G*'.QPm_V+h]rrE*1['II=oDAC[rqueDrVQEgs8N&rqu?*Nq>^BmbfJZV\r
+&hO(`)%@!)!!!lT)Do@Mg&(dKkj/*@rVuNcrVQQgrr;cms8)Hao@M[HqY^*`r:Bme\r
+oD\d[kNpk#s7>jUmITuDrr2rMf'E>5s8Mioqu$I%(d\og@gXo0.pAMj<L4q-N!:q@\r
+j*q%.fC8f1>C7)2:^J.<*].gM/o,-R[c@Dfi;`fW+Aa:SH6Gk+!$>#U5]$KF9QcW4\r
+bNAiWmf2kXs7cQni90VX1I3Za@r@:-[F"<qnc.eIs6'"RmIpSUs8VHVo'lAHq>^KN\r
+kNMI9s6KX`nc/XSs8M<`q<7kNjo=l4rFYN[qsWbHna-5ImeukGq==1Xq==LWm.Tl>\r
+qt'^bq#(0gqZ$Hlrr;HUq9m^Hrr<#kpA4afrr2rrj5o:emd:#Rs8Dor`5BtV/jfmJ\r
++:JQ)$je7++?9E%&fMQ7s8Durr;Zfrs8N"HnF5l<o(2n\s7uHgs8N&\jRW3CrsfG_\r
+'+c[[QEpGds8;fpj5^%6rr;<Ps7cEjq>L?jr;M_<O&&SMmI'QDrr;uts6fCDo(DG-\r
+iR\#.pAY*el0IR.q#C?ls8Moqlg"LZ@A=VXAI9)Q4\LYY3HPc[?jJ&a,"$W,:PC*D\r
+8q$gl<ujkM(.;ID7TCg@@`@s1f_=t"s8:jOq*/(i-::?Q7Sk-f8Sj0Lir&iGs8V`k\r
+s7lWoq>:3TjR*!Fs4l2bq>C9frr;lps8Muss8DutrVuonq"sXJs8DTirUg-io_na[\r
+r;ZK]q=3hGn_s9,g]-3_s4Z-*gtMd?h;&%hhZ)Tns5`2>jlHI'f_jCMo[1eE`iR@_\r
+RCABfe$8-:jn\rQr;QZos8U^'h>[ERN/X&N-oCr%s8MusgY1rlrVtU)lhgPYrr)ji\r
+8mDDu',(p%!!!SB\B4C6s6f:Is8N&tn:(E;rVuopl0.:'pA"[es8W&ts8;m/%jh5P\r
+s82]n=]okI!#Hh'3WK-nqu6Wmrr;cks1>n\'GVMd!"&Z(s8N#tp%A@[q>UBns8Duq\r
+l0IKtmHX]Ns82Zmjl?0tiVt2Q=UlNl2GBhc0QeHiB6/O&o_nf6K<6goEYpNG.Xk!F\r
+!@hOY+\a\$I*honf`1j/s7Gg\o@`E\o`+RSs8&S'Z0VGhkl:\Irr;Ngs604TcIq%H\r
+qYo[AlM:,Fs8DiprVc?^qWdYDmITl<p@.bMmJ[(Rs8VK^rT*PEh":X*n,D5:s6AD6\r
+fYcdjR_GMS\!)?QJnh5u9o2RuCh5:C=s+he*@4r:/7C%dB/1r?-7i@K2.SBt?nXoe\r
+5E*+-jo=3,rTWG-hs0Rmqu$Knrr3`K-OpP184@"\o)J"<s8)Kirqufip&F@Dp\t0l\r
+q"XlJMO5P.0E;"Nq=jpZnG)t[rVm9&qt]71h#IENrVcWms*j1pn,N@dmd0uPqu7ia\r
+4:M`I',)qu!?3gP9E5&+pA+_A1-l$F&J,Hn/1Wj`!"ebls8MusnF->Mp](6ms8Drs\r
+o_&%7gZAG5s/;d0+WWfp11DY3Q2iUX&N==cs8VWbs52c*rVHO2)F5/^=VE)o3)Gp1\r
+\FSDMs60L_idU^lmf2e5l/DF;s5rnAo`+s4g>)5us6p!fj88f9q>0X]s6BLSp&FpV\r
+q<RnWo(i:MmeZ#4s7,1Mm-4Q=huD]Fh6`H^OajEVAX6YBW,=\A4:"[n,]Y^WCb66;\r
+0`kl5,_/0(BdY?B,V3[X/o2sjCb.8U.kbTf0PDsb?<8C2C,%JT/LjsM:OYp*b*LBQ\r
+b2NBRlM068s7?6iqY^<lF``9:!#HUl4TGI,#m2ihZ.f-Ns7>a[l0.p@rVr"DP.J9=\r
+(DS&q=(VC/s8W&tp\+Obrr;uorq-Qss7Z<co)A[crpG78rr;fgs5)T!rqucr!#?e(\r
+4a2+4hVS&)rVmQI/HuJ$%M9rd!"^4n0^e<-Ycc"8mf3:as6f7Rrr)lrrr;9LnG`Fe\r
+rr2rHdc>1WK-hd24\Ttu10b#QC=E4_k5YJWs8V`[p&Fphs8)c=c1^Mqs6][_g["n&\r
+o`+4Hs8IKIs6]48s8W&ss8V'@jn/QNo`+s?lK$dun`9`FjT"tuo\A."k264%i;_`&\r
+`05VJF)[dg5CH-B?n<1%-m`R],%`>XE&'4m1EBsG*Fp32BHRmq)C0Vb'Q#96F>*]'\r
+*XH0t**aULE&V9m?AZ=JUXYj8gnh"&UncA0eGiLoi;_Tfs45?_`R+;%kl9f1s6/A:\r
+g%bU6oCqJAp[\(Rr<s#Tq"=Yn=b7S-6N@*8)AGL>!$gt!s8Musrr2q6DJ]@T!=fPR\r
+p%/4`rVuTarT*#&rr;uUr;V6<s8Vfms8)cqrTie:jQ#S*rVtp;oDek)r;?T[lMmoc\r
+_Z0`U'G`8&"WRLB'X=mZrr)lrr;Z`ms!T0Yrqufqr;Z*JqXa=Wr;?T]mIL8Us7Z-c\r
+Lk_K@))rWb6sYY6g].<#oCq>Ar;6Nor:g0LgZ/,$rVlcqlL=f9mf%\2s8W)ss5r2(\r
+qs3qTqYgHblL=)mq"NnGs6T=Vm,\3-jo=YJiO+!CL/jpW1l"9q=pbpa)A.-.'R^f(\r
+E>/n//c]Q1&pZ;SIQ7R<)@0I]*b?K7=rAf!,AEWTQc+ldetTb6Z/bl=li6&0s5E2A\r
+jQ?L%iqqThpY+R$gu_rCipZp6o)J1BqrR)?k4ScHp&FaYs7YI@jl,Xgnb_nBnE0`M\r
+qY9m`!WidrPc=KPs82QjrqZRW2e*F.2#mUt%h'gX8R(cVrqlWnp%J7[qu?]qs5;et\r
+s8N&`l0eQNrqucl$i^1rp\4"Rs7lHfpAXQ1s8N&]kOJQMrsoYbVl79s79T]m)$^Hj\r
+!!*pIApsORs8Muso'ub=ht>g[o*>LB!!!c5r;ZQds8)Tln*p#Ls8Vrms7>j^St3%r\r
+%OSZtcgUo6mf3.Rs8Vins6T:MpA=mes8VBVlg4N2oDe+Ks6/S;f^Sh"r;Z<aqt'K0\r
+pZ_8KhRqF;R^\-"So-Do/i./r+Bp!<DD)uD,o^bJ$tU.hF<2*:)'O\["`"AUFW20C\r
+1_FX^6^qG0b`\(>T<e!uf`0RUs3U$1h!4pkmf(o:s5X.Zkkk>?q"E\=p#GlJoD8L_\r
+qu?Nis7lKkq"t*cq#0p[qt0a_p\k*lqYp@ap@e:Xq#16ks8W&tr;6Norr:X(h>[ER\r
+!!!GYeEQf's.5^iVkh6(o)B%%-5[IQ#R2=Z$QoHM&6N%F;,LQioDA:Ur;Zcrlg!s<\r
+rrVldp\t0is*jP=s7?6ip&>!err2iprVuips8Dorr;Q]t!u1h<().K50/6#\l2UYZ\r
+s5E#5oCDqRoDaGpPQCh"(`"Y*!Z3712u3:LoCVkQq"k!is6]:CnF?5Mr;Zcps8M`l\r
+s6B%Po_8%?n,<+_p&G'Vs8V3\pYGl2fDj%As0^S\Z[C."WLV4\?]e#ECGd;A,8b89\r
+&9AU!E>K.&'b4sp&o&C*D'^EF/h_?+**XU>B.suf&n6r0S]$eodA#n*i9L@-l2U,/\r
+qr$rCm-+<*q#BaRr8mYJjT#8Ks8D<SleVU@oDed]qXNkNp[J4]qu?WpmHF$=rVuQ[\r
+o`+l's8W#ss8DutqY^Bjs8Vurs82iqoDejcs8VopqX"7]o`+sgs5i;9qtg>?H]8:9\r
+)>Nt+rr)jK/3Et7'+PHnp@SAh=`,&l/-Z4s!!!aXFc-1ss8N#trr2rsrr;uss8N#t\r
+rr2rsrr2qHoDej^rr;`ls7uZnr;Q]qrVliqrVu6PqE[JH!!!SdhX]dkr;-?kjlcR=\r
+rr;urs#N21!!!KA&L.8U')qh/p\+Xdrr;uts6K(;p\FIZrqZQns8;iqnF65QqZ$T]\r
+m/Q52s7>p]s8V'XqT8["^All?d?.7t7P&fs)e8qt+DCg$CBGl#&g_H?(Mb&mAIAQV\r
+%gm@o&To04F=/2R0e7H.1j;97[>:EuVs"*Hm/QJFs7G^SlfINlqu69`qXsdbq"!tB\r
+s8Vroq=ajfqt07?s8;cor;5X3h>dBNkM+nknFlbKpAb$ilf%.*o)8Uds7GdRs8Duo\r
+p%eAbo(N+]rquKbs8DuqpA4XTq>^6irq$0]kkY,Es8Vopna-8^"sa*Ds8MrrKnP[X\r
+6VZb-mIg2LrVlg!!t1-LRe?=QrVQU+%4V>X*<,j8rr)lrrqucpr;$<qs8N#trr2os\r
+%/'Z#p&>!crr;fnrqucpIf99GrVlips8W#rs!]HXpA"[brr;cjs5;r2p%\Oh!tPJ9\r
+%3Q`E77:2Tqu?Ngs6AkC-71@R\@;)&nG`I_nFPr>qXa^drVlisrUfd_n)jZ>i;WcC\r
+g]$&0Qtuq6,7o)O!,WDfJK>MI#p=C!.=)XIC^h%f$km7k(1n^=IV:H%G"?#)BS!OK\r
+UslN`ma'Veki`!>lMp_:qsWPBoBcMVm/I"IpA+C]s5WVBh!+;#s8V]is.um)q>^Kl\r
+s8V]as7#OSo^r.^r;Zfps+l>ls82ilo)JCNs/i91Unk*?f@p'#s82ipm.9T2o'?2Q\r
+p\b'bqZ$3`s7PmQ9C2ZXrVlisrVlirs8V'9mO]nY'G)uT0MVKAs8MusmdKfIs8W)u\r
+rVccop%S04K8]Kts5)Q%)]1HYbOG/os8Musrr;ios8)`or;$<ns8N#srs\Z%s7cNm\r
+q>UEjrr2iprdOhFs8DrspA+aMkje'/qu$HnkN_m?rr;lprsB2T"9]8N'd9c`^Ae*2\r
+rqufYjSAfRrs&c@!!!*"s81'fa8Z,4lgEm6s82Tfq>^Kki7l?Qs5^iIYL3Bt*HNb^\r
+PX#4_$j1\h"`=h]DA4::+=1kJ)IOI?Grg&YI]_eBh1#7YkkjT4s6fIXo^r1Vo)JCP\r
+s7PgZo^2SLf]V2So^DANra9V]"VVQ=WN,^ms82fq?=@jS!>;ZE`<6D_d*q.Srr;]f\r
+s7cBiI".:Z!Z/;Tc-t5.q>:1"%3h"(W;m)1"qVC(l0.pBrV6Ehq#C'WrTrhDjmi97\r
+q#BsSr(cSOs7GaUnF?GMkk"7cI"D=u'b(L!'+cZ$#T`6sp\t3mhr*MZm-43;o_e[f\r
+KS><_rr5_e@/p9Drql`ViqWNOs8N&orr;fns8)`or;?PCs8N#ts8MiorqcWoqYpKl\r
+rr2iprqu`prr)irr;Zfps8W#ss6]=OpA4ft]#F^M%KQ_F"pG\*l1alCs6].PrqueQ\r
+LS"PH&fhrA!!!-%!<E-!qY0jVrr;ios82fqs5<2$l2Tl(s4`^ZN>,V1$=XDD?iqI&\r
+,nb5;'l,"B6]G!/d%o4ljQHR8kPt55s6nY0iqNKHr;ZEgs7QBko`+s`s8V]is7$!e\r
+n+Z\Arr;HZq;\9MP5k^c#n?sfh8f!Njn.I$*WRCDFHlgtrsA`@#65S?p]'jPs#rVK\r
+!!!i.s8VE[s7--h1IbFG%Nj^&s09;Y$l'bVXfq;+rqu0[n`00#p&FUWs7>=Ah=ps>\r
+mJQ5@s7,CLlgauHoDeQAPEc"Es)2b+!!!Q1!"KbZ,O=[irr2rsrr;]crn#cZUSFq"\r
+$lB3R'_h>$o'ubZrr;usr;Q`jrr;`ls7uZnr;?PCs8N#ts8Mrrrqucpr;Q]nrr2ip\r
+rqu`prr)lrq>L<hrr;0Hn*TW=&f)Ph!"0ej/1`J;rr)lrrVuN\s6AeI-R;%p'/0h%\r
++ohTSq"XmUmI0K4lh:/Fp\FIQp%%YDo_8Cah#HWUoZfF64>:M%12eUYX^Q[mFNFL$\r
+h#H>^eGnIXroVr0mbRF%meQhYs8W)us82`fqYKXUq<e(Vn,NCWs8V]js7--hn`Su`\r
+nF#35r9aOao0Yf#%M&T_b.doSrR8I0*<IO#:3#dXr%fE]&-4!Tq>\a^k6_PCIY+'\\r
+qu?<gs3]]l$lgeu%Nb9Bs7Q6g!!!WF(+&ius8Vurs6K4Bqu?NZo]P];kk>&Ho)8%Q\r
+s7l9ep[\4Tq>^Kgrr;N\q>UBnWN!32$5NUA%N$!0R[L5EmJm([s!fHZWi<Q-rVrt#\r
+[f6:+rr<#YjlHF@p\t3crr;`ls7uZoqYpKlrr2rsrr<#srr;rlrdOeErqu`pr;HZp\r
+mdfoGs8VZ`q>C9ml0e0D!!tbQ8bDfXp%8:Ml2U_YrtcA*#QuLT!$53@EW5n9r;6Nn\r
+s8VBNlh1#Err;rrs8V]_pu1Q+mJm3qf$SZ!K"fI@pAX4Os5N&)b4kqqkPX0!s5ibM\r
+p@81[nbr@Yp\b!_s*XP/pAY*cqu?3^s6f[^n,!%QqY]mZq"+4PoDegis8Dutr;ZTb\r
+s"#N]"99:O[FFsCs6]:T!!O;e.R<e.s#<2C#7W!<jo._A@gEDd@q0ie!#?b#2#mIQ\r
+)%e22%3Y]Es8;Bd+Vd'J![Rg?s82Efp[S:`rVucgqZ$PBs8W)us8Drsrr;TZpZ:E#\r
+na65Rrr;]ep%%bDrr<#trr3H;*u>YD!!!s@<He96s8Moq"ToX-PbS0Ws6oLGp\OFZ\r
+s7H<joD\d]rr;Zjs7uZoqYpKlrr2rsrr<#tr;Zcorr2iprqucpr;Q]nrVufos8;Zg\r
+q>C9mrdOnIhrEkrrr:0eeGoXWq>:3kr;X^Pg&M*k#R)I`$S%:!XoA7ulKJ3.jmi?L\r
+s7>mVqY^6is8Vliqsa.Kq>^KZqZ$'bs82irr:g*gqtg?^m/R"To'5'2s7,aZmIUAL\r
+o`+[Xq"Oges8Vrqs7H0brq#mamIpSJqZ$-as*j\@s7lWorVcZorql`en,N1Ss8;Qi\r
+2D.o>#VioshtZpFo)/M;4&#ej,AMO^,;;Ci'IN5?rrNEG!!!r:r;VM%RL&s2a19Rs\r
+q#:[$$jltIIrCPW!$YB1C&72rs7QElqZ$Ths8Vfmp[RqQo_AI_s8DZis82irqu?BY\r
+rrMldrr5+Xrr;iXl0/'Cs7Gp_0.]U""XXT^.P3)CZEMOS!#>D-s7H![rr;liqsF%N\r
+l2L_Srr;Zjs7cNmqYpKlq>M62rr;ios8)`pqYpNkrr;ios8)`or;Q]nrr5^jrVuio\r
+s8;iqqYU<NiT?&WOXMV7G'&QD!Z2ai/.N(3md0uMq>^Hms8;fprr<#go(N%]s8N&u\r
+rr<#ts8W&ss7lNln+Z\Ss8VfhrVcbFr;6*RlhBu=s8Vrqs8)`pqYgHlrVcWmr;HZl\r
+rr;fns7uQls7cNmp&>!arr;Zjs7cNmp](6hs8Droq>U!Tq>C$fr:g4D-peFM-bQk<\r
+p$i"Gl2UYZs6&\Gqu6U"#oGW_8aYsG'b`(t!#P\3s7Pm]"ooW=7pl;ms7Pdrrq,UX\r
+JpERb!$(t1s7c*ao'ZGNp&+jhrr3r9s8W&[jl,t-o`+pjoC;PQqZ$Tos6f:Ip\4L_\r
+s#'H?q;^H#s8;o\jSO%<M[K_7(_eV."!%=;s8W&tq"O^Yo^`%^qXF%@rr;ios8)`o\r
+r;Q]no_r_-q>UEirr;fns7uZoqYpNkrr2iprquTfqt'FPs8N&lp%mq:mf3:dd*L5I\r
+"V:kA(C:<e+sAc4nGiLes7uKjhr*Vqs8V!7ir8uXq"agds8VEOme6DPmdKcGrr;ut\r
+s8N&unac>Iq>9UJnG`FhjlP\(s*jqHs8DrsrVliprVufos82`oqY^BjqZ$Qjs8Vin\r
+s7cQnp](9fs8VinrqZTnqZ$QpnaH,MrVtd0l"O^P!<<bT`SCLjs8W#sgtCumrVo2L\r
+9`P/"qt^9lr;T2P<sSpLnEg2Knc&^l)j-,Uo'cVOoD\dgrrE*1K7K0cr!EE'rVuK[\r
+qY^6jrr*<!p@Rb>lh^MPs8W&smP=Y8r;Zcrq"Oaerr;Q[o^D5>rr)lsrVt^-li6n_\r
+s82i'Yf?_D'?nSRrql`enbi4XrVld%naZ)Js82fpr9O=ts7uZoq>UEjrr;iorqucp\r
+r;Q]nrr2iprrquao_J=[rr7HApA=FNpA"C\p@S@r%j+SB@/g-)q"OgTm.TDsl2L__\r
+nacDQs8V*=jo5;[oCVhEmIC2Us8N&uo(2X5N03r6s8N&up\=^Wo(M##jnSTJs8N&u\r
+rVuors8W&trqufrr;HZmr;ZZls82ZmrqcWoq>UEgrr;`ls7cNmp\k9pq>UEnqI'*i\r
+oC_nQrSH>m&J#li#T50B4Ntq&oC;gu_oi#["UPGEp%8(ZrVu]fs7Gm^!rruu4&AdK\r
+A/#V$rVQWprVq(bHN4$LYH>>%lhL)ArpT7Lrr)lsrr;9JmTNe!6psNDrrV0<j8T'B\r
+f[npOo_DZn?2ss.A7T<Iq"iq+jmqs;s8Drt!"O0nL^!qu?sRgQr;Y^3m/R(bqYC-j\r
+s8DfkpAY*grr2i]rY,>-rr;fns8)`pqYpKlrr2iprqucprql]pIerp=oCMYSrVufm\r
+s7l?es8N&lp&C,7SbDdWp@eOcrr;'@lL+-4q"ajm#72"V(OCFXr;HZanFc8=pYk)s\r
+rr2pn;HjeM+0McXrr2rsrr;fis8W)up\+Oaqu?Zns8Mrrrqufrqu?]orVuforr)`o\r
+rqcWoq>UEirr;`l&HDM(s7cNmq>UEis8VuWjPp1=&V#7_]=GlXqZ#='kI7k9p@\:]\r
+[f6=+p&"b*q"O^drr;fgs/2^!_8"7foDejis2i@,rkJI*0DbMDs8N&qqZ#gDnG;t\\r
+s8N$9(a'1n&p/2Ap@\C\q>^$Up](6ms8N$#!XB5H&cMq3s""*Kqtg?fpAaUKq[NuR\r
+#R)(8mf2\?q;^H#s8N&nq"jsfqu?]mp\==Yrqu*]&HDV+s8)`pqYpNkrr2iprquZm\r
+rr;ujrr7HFr;Q'KnGiLfs8N&9_T;`Us8N#thr!VdnG)hUs8N&urr<#:`Q%u\"rS=#\r
+!!!3%rr;uss7Q'bqtg?lrVlj!&H`1N"pZ#qJWTm0s6/\=p\4^err;rps8Dlqrqufq\r
+r;Zcos8Mrrs8;ipr;HZpr;Q`mrr;ios7uZoq>Ls*q>UEgrr;ffp[S:`qr$DhrVm3'\r
+s6f:Iki_F7rr2p.qrHkpq>0[NnETcCoDejhrqHBk%K?D"oD/Fcs8W)udaHYEq$@$#\r
+qtp<cq"XR^q>L=;rr8+BQiI*m!!!E?%j2/_(]XI6p%/4JkOS!*oD/1[&J5]R!<2'Y\r
+ru1@ooC25Cs8DudmJ?k]s8Dipr;-Hnrr;0Dli-_grr;iep$MeZqYpKlli%IqqYpNk\r
+rr;ios8)`or;Q]nqu6Tprp^'bq"k!iCA7H!k2kn%p%n^fs5`;,p\=^ds8V`aq>'md\r
+l0@X%mI0oKr@BNT"U5@#QCe!Ns4c;krr)l]kkLL1W"Kal!!!]1rVufos,N&3=&rr(\r
+nc/Ufs8;`nr;6NmqZ$Qms8Mrrs8DutrVliqqu.`9rr2ips8)`pqYpNjrr;fns7bF/\r
+gAh3Lq"aRRoC;eXr;Qfss8Ms2lg3^4s7H?kpAb0fp\==Zs82Qbp&=1]q>'pOkj%6i\r
+k5P#Ps"XBHq!RS:o(2;Gqt'geq==+G!!!-%!!iQ&s8W#s!!!ZD$mP`P'EA"1s8Dud\r
+mJ-YXrVul="onW$s8W&si"u@js8W)uh;%)Wl1FuQs6].Gs8N&sr;Zcn%fcS-r;HB_\r
+p[%q[q#:9jlM_+frr2iprqucpr:U'gmJd.bp\sIWs(D</s5Dqsp%A(Ys8V<Ili-qa\r
+o_.t?ki_sFs4Z8_rr<#ts8V<Imf*4crr2rkp&F:?q#:6l!WWu;!ZZlIU#kD9oCN"I\r
+lMh;'+p\DkMi*u$qZ$Kis8;corVZ]pr;Zfqs8W&ss8Drr4TGBZs8DrsrVulqs8;iq\r
+qYgHirVu]ms7kR6h>[HNm-a-6qtU0js5N)#p%S%SrUBLSl/C[Ts8Vran*U,<qu6`o\r
+qY^6jrpTjdrqlWn$2so(p=nEOo_%\Pru<+$-sKefs82ignG`Ig)&*T5ARToHiq<$;\r
+s8)Qis8Mm!mdBH>r;-Ei.Icits8N&urr<#ts8W)us8N&hnb253li7"`s8VulqXXXc\r
+p%\@Qrr2iYrW)lbrr2lqqYU<lp\t0hs',?tqt9^Urr<#ts8DrsrUTUNrr<#XjQ$7>\r
+s8)Wmrr2rcmeZbSs8Mus/1Nja!#>hH-0FCjr;6Nbo)A[i)%I-'!<<h$Q`9lXs8;`n\r
+r;-Hlr;Zcos8W&ts8Dor:&Y(krVliqrr;rrs8DusrVufos8)]oq=OFNnFQ#BqtC$h\r
+qt'LOqu-Hls8W&tqYpNdoC_;Hs7kpGl1XfHs8N&\jmDO)o`+pjlg*s;nG`GIm-O0.\r
+mIL;Vs8)Tilg3^4s7GO>j7`3As8Ds("rZdks8VrqTpr_&"XO-K(]XF5s8Dukp&4=G\r
+o)/Ihr9<J/rr;uc&bl%qp%8([rr;HToDeginF6#Jrt4/Gh>-p>r;H<\p?VbYq#:9j\r
+lM^e`r;H]riViiTr;M0CrVufos8)]or;HZlrVu`ms8)]or;HZpqYU6gr;ZNcs6T+I\r
+oCDq\rVm'))%6p!1Gi"rn,N:_s+lN0!!!oC$7#*3s7,[[q=st;-8Y]&#rt"3s8N&m\r
+pA=@Jo`+pjrr2rcnbW+\s82fql0\!0o_&.^s8;oqnFc>Ls8-]qlK7C"mJR"ar;Zfp\r
+s8W)urUBC>q>9U[s82Qaqt'@Us8DuLe`6].s6oCLs8N&Sh;A#&qZ$Qps8Ds&";TM;\r
+hu3QMrVuNhs8(j<l2U_^['@UN!#bM"s7Pj\$jJ*q&MF7e(]XF5o'uPSr;Zcp"n1pI\r
+p\4@[q>U!bp%\Ogrr2rqrY#/.s8)`pq>UEgrr;Zjs7cNlr9F7is8N#trr2rsrr;us\r
+s6]f5r;Q]nrr2iprqucpr;HZlrVu`ms8)]oqYgHjrVu`ms8;iqr;Q`rmI'QErr;us\r
+s8Mus*ZZg4!"q(D9;A<"!!""'Q*_SS4TGI"AnZbnrVrmu^BF`U$ORaMrr;ESp](:!\r
+lg"!>rr;ESp?_,@iT'M,rr;?Rq"=F^r)NdslgOE0mdL&Qs7,dUr;Zfps8W#ss7lKk\r
+iT07fmI(#Sp@7b:p\4@\rr<#rs5Mo.s82iGdH(9's+Q,`s8N%RL5Ycts8W#s!<<l8\r
+!"d#a`;]f4rr4>Cqu?E`s5W#1$jS)PS@nmts5`);$3hY'-9YC.AGQ!"s8N&rr;Q9e\r
+rqcckp\Fg`r;IH/rr;ios8)`pq>UEgrr;`ls7uZnr9O=nrVulqs8Musrr2rsrr;us\r
+s7?5=r;Q]nrr2ips8)`pqYpNkrVufos8;iqqYgHjrVu`ms8)]oqYgHlrr<#cmdToC\r
+qsEeD_SXS#!YQY!1Aq+No(2nWrVm!+,ldo_$4J6XrVtX.nc8k0!!!Vch<OFrqYpKo\r
+?=%:N#S?Oqq"FF]()8,f94)jdM9jT-qu-OAlgFN;o_\Rds8)]or;Zforr;Zds68nC\r
+n+$ASrr;Wbr93G'p%RbNs'kNer:opam-"E0hu-#2=V2/b7R^#S!seu1#lXZ#s82gI\r
+-:esf0+SL/f@S^=k3W-Hs7Gj]s82icm/I.f*<,d6p@80$CP2Zf&e59h[^<m2iU$UD\r
+s7Q'Zlg*s)m-a]Fqu6QnpAXgcs8;j2r;Q`mrr;ios8)`pq>UEirr;fnrqu*]&H2Y.\r
+rVulqs8Musrr2rsrr;ThIf03Er;Q`mrr;ios8)`pqYgHlrVufos8;iqqYgHjrVu`m\r
+s8)]oqWR5-rr<#Wio^7>rtQ7j$OR_bBR&Cko@M[dmdgAX!#H+X/&oZfgYME)#ojQm\r
+-6jfno_/=^qZ#^?nk)MT1c.Dfnbi(Qs,;r2!!!`=#TZ,p<"T`g-FgY/q>:2GLQa2=\r
+3Drgb='9.A[D]nue3cW)J:Wt[:g(QM\,H?srr6*ckk=W:s8Vop76k5`!#bG"s8W)u\r
+mdBQ['cQN,qW?f7?WhdY!$21A&/lB1f$r[Kn,;\?rqcBhp@A5Z94UmoB)hc.o'ZN'\r
++Z'K0(E45>!!!E,rVuosr;QcrrVlrpq>:0`rqQKm)ZKa6rr2ips8)`pqYpNkrr;io\r
+s8)`pqYpKlli%Rrs8Musrr)lrrVulrs8N#trr2rnrdOeErqucpr;Q`mrr;ios7uZo\r
+qYgHlrVufos8;iqr;HZlrVu`ms8)]oqYpNnk32"-s8N'!"TSN-(De7jq>^Bls7uZo\r
+"UcIX$Qf?O)!C8cVl[W5!u:n?(&\(2l0J3>q#C9krtQ4l!!!E+rr;NXs"cH(',3-/\r
+@sn1Ps*b+V)uosOmI:/Qrr3H?,QIfW/1s<Tm/Qt]rr<$8%1XjO5Y^J/hZ!QCp\4@Y\r
+qZ$Tms8Mfn!!!s&4&Z+Ws5rG.rVcVRNf\jCNW8nUChAWID3Fr"'aY'^!!!Yrk552V\r
+s45Z_s8;oio)A[i'*%n0mHXX12Ff,?20O%o8/=Wp!!!Gdi9:%5rr;utrr)lip%S@\\r
+rVlirr"oA3r;Q]nrr2iprqucpr;Q]nrr2iprqu!Z'E.t1rVulqs8Musrr)lrrr;us\r
+s7uYCr;Q]nrr;ios8)`pqYpNjrr;ins8;iqrr)lrrVufos8;iqqYgHjrVu`ns8D*D\r
+kP+cJq>1)8H%#l!%0$8+k32J`IuadC*ruQ`pAFs_q>V`k3s,['#R_XDp&Fshs5rP<\r
+nalbk%NH/r+o1p5p\=ar$RGcQ*PB)?qu$JA!<X;Y)DT+IgZe&(?=7s\#9[l$MYm>O\r
+jlZRO$n_bi.@Zj1rr;Ths6K7ImJm.bo^Mml[FGQd+uqPSnF-,Os8CO#dJs7FnF-,D\r
+nc+GuVl$*-p[\=u&1\V5/f#'KZ`hCKr;Ys@p\+4YOH,i2;dfk5&e,0el/qa?r"]83\r
+r;WUfZaI-RhVI5gq>^3_r:T^Xqu?Zkr;I-&rr2iprqucpr;Q]nir0Vis8Musrr)lr\r
+rVulqs8Musrr2rnrdOeEs8)`pqYpNkrr;fns7uZoqYgHnrVulqs8Musr;HZnrVufo\r
+s8)]oqW[>0rr;rkq=sshs8N&ur;?TanG$L)E<#tK',i>`6r`dTs75sb$4n6Z#8MuP\r
+Rd]hInaukZrr5>S<!EUE!!!N*q>][Cr=BMk!!"#9r;ZWjs*aqJ)\Wo>qu$KdpAZs,\r
+;#gS9L52Yjl2P7'LCb"T"U$B8NM?%>jT#8BrVuNeqZ#gBqj!;F'bMnr!"\l!r;Q`l\r
+s8Vfms7l$Lo(i"Zbf8ir,>A(1s)Mq9!!!r<!#GtH*NuQZl/qa?rVr%BRfEEpOcQ$m\r
+iU?gEs82Tkq@`Q&s8;oZjRN0Fs8W)us8N&trVc`trVccqoBlMWs5j4nrVulqs8Mus\r
+rr)lrrVulrs8N#tq>Pj@rr2ips8)`pqYpNkrr;ios8)]orr)irrVulqs8Musr;HZn\r
+rVufos8;H[nc&Requ-H]nFH>Kr;Q`roCVjNU8\;&'`\7Fq>^K_o`+OVrs9)Q!!!N+\r
+rr;cis7H$br;Q]r!"L1r1QRQhl0.u;T="Y!*#TVUd*M.\!#p@s%P"$@]'J__o_&5<\r
+0i/Jq1k^O^qtg=,'0?0o,omsnN/XS.rU9acl2(>Js8N&rq>["SY5eP8%1='Rrr;ln\r
+p[.D2qYTs[pA=FMrr;lq!rsAB!#n^+B_h?$$O7^Q!"]_Q*IrTsn*TlX$5*LF%0->,\r
+p\"R_q#C?ks6CNcq>^EnrqufnqZ$?brV#p]q"O^`qu-NnrVuKg$31#(s8N#trr2r\\r
+rXAi+rr;uss8N#trr2rbrXA`(rqucpr;Q]nrr2iMrdOnHrr;uss8Drsrr2q.@r\*2\r
+X7c,brr)is!"T&0%fZG,p%8:Om/Cg:I2*GC#6Yq5m/R+`s!8mO%h'sh<HU8Y;ucn9\r
+aiE<:r;YpAs7Z-c-RVIu&NR;/j3uNX9i$"4<I=oS.]'&Wqu-HVl/D[BrUogYoCDbX\r
+rVlit$X!lF(Z!m-lg"!>rr;9Jme6>Ns8Du]k48re(V@3!s8DuVhsLIBrrN0."pGG<\r
+!XP["X8Vtr!!!0%rr;ons82Zmq=spgrr;urs8Musrr2rsrr;uss8N#tK)Y$6@f??'\r
+q#BpSrVuirr;-HLgZ]Xp-XBnki8*hoo)Jafs!8jH!!!RJCOl3Qs7Z'a'+ZJq"!YIk\r
+g@4M0+<EEB!#=kcs8)Tlr;?RO1fs_X-*jl9-n/6nqu7*92#mV!S=[(drVllrr:i\V\r
+s8N&blgYl1,9IpSF`W*3qu?<ZrVuirmd9]?o_eIWr&Qi&s8N&fn+ZVOs8)Qk)&OEX\r
+OdH+Is8W)us8N%6C2a(LrVulrrqZQnrqM*Eg&>U`s8N&urVta0l1juPqt^9hq>UEp\r
+%0-;+s8Drt!"Ju/%UE7Rs8;osr;ZN`rs/`H"9BSAq>^'Vrt#Yb&eQ@iX1dHMpAFjg\r
+"U-7U""A))RP$6tf@g0T02_cO+etmFrr<#srVQTbrr5%Kn+?>Hqid/4!!!<*!"8i*\r
+s7uEhjPoS,rr4>m0)tqNChn"j!!g-I_Ya30mHjE<pAFsis6Ak:qYC-i#63`Djn8<@\r
+qu?Zjrr;ukK)XI&B)hAhp#tT-s8N&hnbN4`s6JqA^qRnj!!rW*$RI#OQ'7p3n,<(V\r
+s7uEhV4t9r!"oeN-iX#Cmd0r_$m#BK%\9,kr;HZ]li/[p;#gSA!!"7T]]8b^rriZW\r
+&J[!IJ!0g2s7Z0Yrq$-h547h/s8N&ko_^9k2A[)PWi38cj6lsHs(#VT)&OFdo(N_-\r
+'c.W*Jq8dUqZ$Tps8)Qkp@\:^rr:s8jn8<@rr3&hnFHSVrr2oirr;uoK)XI&B)ho1\r
+s6f:Gq=sshrr;6HnGiLfs8N&eme6\Zs7>dYs8Dulp&FUPrQ`X?!!!E<$lr,<A*`CZ\r
+\@9Qg$Q0B_)=m@tnaleYrVno?<r`4A'Gigsn,N1[rrWKO!!!hSaOg%Uq#CBmrpr2G\r
+q"k$is7,UPr;6NSip%'b)$U3SN/Em1@VPlC#QOf's8N%VMN@5oo_%kQp\+ORme#l3\r
+nF?#@s8Mus!qu?_rr;umrquco#kdl^s8W&ts8@QKf_ts2iT'q;!r;Zhrr66jm.'H.\r
+nGE(^s8N&mpAFpgs6oCLo'uPUrr8IUUmmdJ:/"dj!"_+K8H8`!!Wie1Wj;X's4Q/i\r
+qu$I#$R,ZU,)D/WoCi4NnG`Lm*XE2u^VeCnqY^Bnqu?]prq8PPqY^!Wq"spfs8N&Z\r
+ipCf,HiO-O5sS!@rr;fhrV6-bn*]fIrr<#ts7uHhs8N&urr<#ts6K"<kND+/rr;ub\r
+qu7'&rVQHfq#('ds8W%Lrn.5Lr;Q`qkl1ScrVccgo_/:a;t08Jki_=4rr;9Jn,E:c\r
+r;6Norr;T\qZ$Norr)lrrVu`js7lEhrr<#Wiog"0s+Q5m!!!WN*B!lu*r,[5LlA53\r
+!#5J6&.9!crr<#mq"+OcrVlg>lg*s<rr<#ts4lAhs8N&hnbN4as75^Us8N&sr;Z<V\r
+p&=t$k2kn.rr;KVo_8(VoCDYTrrVldp\t3lrVlKfrs\l'qt^9lrUTRJs8W%Lrn.2X\r
+s8W&cmd0oNqu?]pqu6fZj5p7<qYs:hrVu`irq5p[s8N&oq#9pWqtB^_lg"9Err;]d\r
+qrm;3qu$Kls8Vihs82fqiT'e1rVu-Ls4lQ.q>UEequ?Qns7uQgs8Vr_mHafPrVlg8\r
+qYC-^o(`7as82Zmrr)lkpAY*ks6Jt>qYC-irtOqjnc/Ugq"O^]p\b'js6oFHr;?Qn\r
+rrW/ts8MWhrt4tuo`"jfq"XR_s8D9MkPtSZ\c)\r
+~>\r
+grestore\r
+currentdict /inputf undef\r
+currentdict /pstr undef\r
diff --git a/grbPMF.jpg b/grbPMF.jpg
new file mode 100644 (file)
index 0000000..92853b6
Binary files /dev/null and b/grbPMF.jpg differ
diff --git a/grbUNS.eps b/grbUNS.eps
new file mode 100644 (file)
index 0000000..fbbc0d4
--- /dev/null
@@ -0,0 +1,760 @@
+%!PS-Adobe-2.0 EPSF-2.0\r
+%%BoundingBox: 0 0 120 120\r
+%\r
+% created by bmeps 1.1.0 (SCCS=1.73)\r
+%\r
+/pstr\r
+  360 string\r
+def\r
+/inputf\r
+  currentfile\r
+  /ASCII85Decode   filter\r
+  /RunLengthDecode filter\r
+def\r
+gsave\r
+0 120 translate\r
+120 120 scale\r
+120 120 8 [120 0 0 -120 0 0]\r
+{ inputf pstr readstring pop }\r
+false\r
+3\r
+colorimage\r
+ci+%Hrr2rbr\OKPs8DutrVuors8Vurs82irqu?]ns8VuorV6<hq#CBks8Vuqs8)cq\r
+rVuorr;?Eks8DrgrqQKmrqQWjq"jpg$2XZ$p\Od\p%@qUkl1Slq=sshrr;0Dm/R(b\r
+s8N&tm0iggq>^Kklg3^4s8)`j%cud9q"O^drr;0El1O`Drr3&dm-alQrqcWgrr;uk\r
+rqnbUs8DEUli7"^s8Vrkq=4@ZoDejas8Vfep[/"\pAb0fs8VrqrqcZor;Z`qs8Dut\r
+r;Zfqs8N#tMZ*_Xrr2rdr[ImIrVuors8W&ts8Dutqu?]ns8Vurs82irqu?]nr;HEj\r
+s8DutrVuorrqZQ`rr)ihqu7AnkNVd:qZ$QpnaZ5IqtBCDkkY&Krr3]3rr;<Ln+-#C\r
+qtg?iqZ$9^qtTp`rpMTAs8DutqX*_5s8Vrnr;Q`qs7GpYnaQ8Prr;lls6]1Cs8N&o\r
+q>9gVp@S"Nr;?QjqYpBmrql^Nq"OI]s82irqYpHgp@dq?lf7[2mJm4]s8VinrqZTn\r
+qZ$Qms8DrsrVuors8W&trr2qLrq$+3s8W&ts8DutrVlforr2iprqucpr;Q]np%@qV\r
+s8DutrVlirqYpEirtbM.s7uHgs8N&urr<#ts8W)un*]oLrqcX8rVccho_G#HTmqNG\r
+G^"XUDKbaHrUB:Kq"O^XoC`+[C]FG3p\==UqtC'hs8W)us8N&Mf&"6YaN_rYe^WCF\r
+nbN4as8W)us8N&sr;Zfrs7l?eki_@5rr;lkr:fmXq=s[`s8Dutqu?]mrVZEgr:g3h\r
+q#:6es8Mlprqufprr;rss8DutrVulrs+:7ArYPV7rVuorrr2iprqu`nqu$Bgr;?Eh\r
+r;-Elrqlflq#:+\r;Zcrs8N&mpAF1=mf*1bs8Dunp](*bs6f7Lr;-Hhp](9ls7uHi\r
+s8N&[jQrnFZU-oMSXZR;MjS6mFl_QLp%81^rr;lmrVl;"s8W&ts8)?YnbW(]gY(`Y\r
+me`iUY[LmT6pa[O<b%ksXjb\Sp@SCSmeb2LeEcAms8Durqu?]ps8W&ts8N&squ6Kg\r
+qYBm\r;6<is82irqYg?drr)WkrV?Hkq>U?is8DrsrVuors+:7>rql`prr2lqr;QTm\r
+qYp<is&/jqs7GpXo'uGIp&"^cs8W&ts8DutrVuZds8W#snEp6c@!.NhU&Y&jmHXZL\r
+qu??\s6&M8D/+D[3D/Z&qZ$Knq=aj\o)JU_s8W)us8N&lpAXghpAb0irqBb!rVuoq\r
+s22Y$(_nHQJsHB6s1c4mAR]f^r;Zfps/2[%69e:]B6r(Tiq;mBlK@s:oDeges8;]m\r
+qY:$hrr<#ts7c6ZkN:e%qtL$cp\k$brVZHirV?Kmr;Zcos8@QKn,E4arr2op!rMln\r
+rqT[kq"jaZq=s^^oCD\Pq#CBns8W&toC;bBk4Is%q"XO^o^VtSnc.%_k8bEs*#LK/\r
+U:pU(s8VurnEp8Ur;Tl!C)n0GF)ZiP_Un)9qZ$KnqY:*Xm.C>WrVulf8bi)Srr)lm\r
+pAa=9qOa7_+<31^FGo/8p&4^doC)_Bj8/fQs8)Hhai3%E??IJ72H3LcM2%MFakcge\r
+s7l6diSNhin+cq^s8W)trtt_3qY9sapAFg^rVZHirV?KmqZ$Qms8MqJrq-0ks8N#o\r
+s(hW5s8;foqYC-cq"j^WqY'UYq"OgKip,[en,N@dq=jp']ZP_OO'u@9mcsiNq>]dD\r
+s/`-;5W`1",XsdM<TW0=hV%Ymm/QeMs-AhM0eGj1&h?:4<GQ8rb/`0,o)J7KqYg?l\r
+s8N&jo_/:[@f-$%s8;oblMnoBge1.F2`"3BA:N@co(htYs8)c_kl9VsqY0R\LkDBF\r
+*BRe=I=Q^3D.eF[hXpjGs7#CPqtL-gq>]jJnGN.]qYBm_qY9sapAFg^rVZHirV?Km\r
+qZ$ToK)YEA!rr9!qYt@1rVufms7uHgp\+LXp&"FSqYpEmqY:*_o)I%\gO=L.84?X$\r
+DhQ'EfCA8.s8)cqqYuqGZr0S:L4H'C)a@V0HgBens8)cTh>RBMs.>dhCM//U1.`]5\r
+20<hin*U#PrVuZerV-$`q=spfs'kNfpu^W3s82i_kl5mLO$u<?#Ql5lDiNu@s68VE\r
+s8)cqqZ#-onN]0?1G2G_h>d<Cs6f(Mq=FWPOf22R@]l`As8DutrVuoss8)NdqYBm_\r
+qY:!cp\k$brr)ZmrqcZprJCL]s8W&ts8DutrVlfoqu2'CrVuips8W)up@\:Xq#9sY\r
+qZ$QpoCD\Vrr;]brV6*d\@0=W<+R^65=%J12)7[pS?r7ms7c-bs8)cfn,J5sV4*XY\r
+mca[P;0Nfg23!Blki2X8nGiCZs7Pp^p[eEmZH$?YE'Z]_g"5<IjR;s@s8W)uqYC-b\r
+pA=dbs7K^hs8)Hhs82irqu<^p_EBnY)AP'9Yg3+<s8Vrqp@/*HNj'WE4BGC$s7u]Y\r
+irA`@s82Hg5<2^c)DRhOXoJ>!s8;osrVuoss7Q!Us8W&srVQWprVQHds8W&nq"F^e\r
+rquZnrq??`qu<Ah$ig8*s8W&ts8Drrr;Q]nrI4eFrVuQ_q>^Hos8N&urr;rps6]1F\r
+rr)lpqZ$3Xs1GndM2%GQf^"<GR5Qfl;bq#ah=gI/s7#@SmcjamDN7^mELW6&;b_6o\r
+2HgRr.^#bmmcjcOqu=XOgAh*Ns8;nJIuQc[:#+IaqYC0cpAFRSq"OLZs8N&np](9k\r
+s'4I9o!#45mHOZKq#?)#Rk,sTSsm(]o)JLVs5r;?Deb.a/52b-]`7g-p$_q\q>[1Y\r
+]IG-m@U+*FlMp\Qs6](Fna?/HpA=mgs8)NdqY9mdrr;?Mli6taoC;DKp\t-as8MP^\r
+rX8c+rVuorrr2iprquTjIfK?Cs8W)urr)lsrr;T\qZ$Nos8Du4]uZh:WqGr_p%&.@\r
+h=CUDs3]*P76t$61.f6meF2`'qtL-jqu;4qQp!E0G&`S!K;"m)[j3%Y5s8>RX2`&l\r
+eil/lMMIR6BQc?n6'@@unaQ8Prr;ons7uHgn*]fIrr;QZq=!_J>J@_n?<_6,N1J&/\r
+fPte]4uuQEX2=Q"s7l6deBmMA2,H\*?/*s&q=O^eqZ$6Vs&`-=,p#48OKABSs7c-b\r
+s8;osrVrsuY_%CZnF#oJrVuZdq>^Hoo^_\TrqHHlq#:-es8MV^rX&N%rqucpr;HTk\r
+qu(=.qu?Tks8Dlqp\+Obrr;KUq>L3jrque1B65%/-CU:$s8;opq>]dErVucpI<gnj\r
+'.Rg3J,fEGrV?KPh=OoQDL$A`jl-"7qu?0Ps'T)S,p>6L<,'h.j+2]>IXI!QWj8b.\r
+ZM=1lqYC-is)J&;s8W)ul0.O7rr;]bqu?WpnF$+,KTC"eH%gm4F`W,7W4Ds+s7l9e\r
+lKA)?T=+q*)/j;Dp@A7RmJm(Ws.5Re,TT'S<d3lks8Vrqp[\@ar;ZBWrFTPU?X.+@\r
+rVuors68\5s8Dudm.:)KrV60aqu?QkrqcWkrr8Vi$2jf&qYgBirVcWmrVcY&qu?Tk\r
+s75^Ss8N&rqZ$-Uqu?Wpmd0e4O.@!u,>h3Gjl-"!jo#/Us8W#sc-"ot/OD`e;4<iO\r
+s8;opq>YJRJtAI7p[nLcr;ZWfs6f4PQ^"?/jRW?Ls75^Us8N&^kj&0Hrr3&inaHJK\r
+rqHElC[:9Ss8N&sr;Z!Dm/R(bqYC-jrr<#ts6Jt@rVQWfoDedds4uGoKn>L'&gb0"\r
+c2[_Ap[nLLjS`UpIN&tYZE)4LqZ$Tls6&D8o^MmfYeE:_7b,rArVHQkq#C*\rUoaY\r
+s8Dusqu?$Lmf)hWp&"dgr;Q9ds.]K$r;Q]nrVlWkrVQQlqtp:rqtg?iqZ$Tps6&P4\r
+Jq/cNS>l,Ms7uEhrque)?>hYT7ZWJ%p$r(^qu?6Us7Z'aT:E)5,rU!jLA^oJiSX$?\r
+CjN+[[JTe"rqufgo)J=Orr;rsr;-Hgp\k-ks8Mj,s8W&_lfRp8o(`%Qs8VumqY:'_\r
+#k[c_s8N&oq#13l!qc-Urr)`o;Y^%`s8N&pq>^Ejs7uEh`l-8ZKTbuts6o=Qp[nLT\r
+mJfaE@6$)Aq!nCCg\:U=s7l3cqtL,.C3a>tDZB\8o^MkPnG`Ics0],HW2-a!r;Zfr\r
+rVuldrq$$erpg!fUAbT!rVcWlrqZNkqu$Bgrqu`l=Si'pqZ#gDn8r_uAn5h*GD+l0\r
+li$_\s8;o&YJN"G6mNm8eBmCGl2Ue]s7l9ehV7HC+>F]K,g=E_s8Duhnbi=^s8W)u\r
+p%8+QoD/.SrqlQls8N&alg=]D'`7h&o(28Bp[RtOnc/Xcs8Vurs8Drh*<#j9p@\=Y\r
+q>:3lrTWV.rVlT^o'Q/Eo^D89qtpBk9E4kas8W)us8N&emJ-YWs6T%Fn*U#Oqu8f<\r
+;`lp<mcXW=l2Ue\s8Mio]!fXC3_@iJhtcsFqY's_o)Gts]MD1(1G:qoWOM0Wmf*7c\r
+rVl-^qu6TopAY*<rX&N%rqucpr;Q]nh>S#brVQQmq>C3cr;H<drUp'cpAOkRqZ!%S\r
+V_Ttorquf\kPtDRs8Mrre^Na]rVqk8TFD8PEGgWjhtd0Fs7lHjl07l'OdhPtU@%=D\r
+p@eOcs8Vokr;Q^%p@\=Xp\jLGnc&P,nF5lGs82irq"t'`rr;]WmH"9HqXjLOk32"-\r
+rtkV1s8W)ulg"'@rr;opp\=RSs8Vr]m-"BJ!ri6"rq?KkrVZZj;Y'GPp@\:]s8V]]\r
+qYpKonF$,Hp&BSfP;+IUQAqpEqZ#sHs1c.l:J>,*?uc5Es7>a[jPf[ojn:r$:C77C\r
+ARKUnA9EihPN_2ss8N&oq#13krVullrr;Ke#64]%s8N#tkl).nq>UEirr;ios8)`o\r
+r;Q]nq>Lm(rr2rsrr;uss8N#trr2]mIf8^%kl:\Ss8VQRn(@F4kktJSmdKaB:LnH`\r
+PjI`9aiF1h^$2Dnbf@ohnb3"Sq>WWG<WraZPaK)QpAa@Hq""=Wq#CBdq>^-as7Q0e\r
+n+?A@o&fK7lhC/Rqt^9cp%/4`pAb0bk3:OjpuhGPmIU2>r;ZKgs82ThrTNS<I/a-F\r
+q"FaXn,34`s7GpYs8Vl`oB?2RrV63eq"XmYoD8Ids7H*\rr;lns82fqrV?EinacDH\r
+q#10js7>d[q="?EJtQg_HBjGeKR]:U5ur&IK^\@/j5fq3rVu`is&N'3+WN:UBn5R1\r
+rm]0Q;+tAQKU)6%s75[Xs8E6&s8N&cmI0lN!<)`m%0->*s8Musrr)lrrr;<`&HDS*\r
+s7uZoq>UEjrr2iprquTk&-)Y.s8N#trr2rsrr;uss82eEqY9s\o^`%^p?h;)s8VK`\r
+rp0R`qX3eFMMe8R+%\(8?nO'B5<s06.8NE+BUYX$oDJW]VmdK_5rq8Ae_KTfs8V9R\r
+kP5)Sq>^KYmJlYHrqufprr;BVpYkc:pAb*ks82T^n)j97kl:\Trr;]is7l0ZnG3+]\r
+nb2eHoD/;Grr;Q]s8)Qkq=aj`o`+sis5)\irVu`ns8V?Jnac>PoC`.]s8W)us8)Zh\r
+q"s^_s7lQmq=F:Ko_.tWrr5Rgs8Vops7H?@`nul4Sq;BS\$X3AlMUMUs7H'clL"UR\r
+=`#9&1g3pup@/+^q>^Khs/i385<DcBVRum+s7Z*brr)lsrr;Q[o_e[gr;$=#s8Mus\r
+rr)lrrVulrs6KXns8)`pqYpNkrr2iprquKh"98B"s7QBhrI4eHrVuors7Q!Ys8N&o\r
+qXs:Em/$VZrr)l\kl4dgI3B_*,plMR5\<2G?n3m$85<L.aOKVJs,E,HF*F)>o)JOc\r
+s5`Y+qu?BZoD81Vs7Z6^mdT6)o@!R8h>dNIs8Mooq"=LUo`+jhq=ORXo`*_$l*%A-\r
+r;Q`jqZ!In\UKm7Vo[$4md9suG`$fkN4c^FE,^3ajmM^3s2N.0rVZ]prVulqs6f7M\r
+p\+O^qt^9lo_ndWp\!b@n)j93n+cGJs7cQnpAb0es8Vfmq!nCSmf2nLs7c<gq>C8W\r
+QE)A]4Z"od_S4XnmJlP8s7GaZq=XbU5Zqu>Ja_t*mKW%SqY:*jrr)lorV$3ps8N#t\r
+rr2r\rW`<"rqucpr:'[cs82fgrI4\As5r>2mcj]Mqu?Qfs1#JVMMIYKd,t&os8;fp\r
+hqn@E]%XR#e]lD+p\Xu[TX6aF:pRULn+?YKo)J:Ps82irr;ZZfrosF^n+ZVJs8Vrq\r
+s7,dSf(JUQs8U[Ms5`h<h"0gms82irp&Bo"RAlq!N.nDj/lpKNp$D)G>(0^r,:5:b\r
+`ROhas"#Wa@:"5IQErnE?JjZ7b0/UPB6N%`m.'KCs82iKdd5H,h"C4.s8VQfs5a4[\r
+k5YJJs82HcnacPEo)J@Zs82irr;Zfps8Mlpo^i+Km/EQIZPa];*?@#]bi\fts8Vur\r
+q"4Udqu<^o`%!*";bq)kjU_:hr;Zfqs7c6dp@\:[r;QBfhYn&crr2rsrr;uss8N#t\r
+rr2rgrdOhEqu$Bgr;?Egqt^-cs8Vrqs7u]oq#=W$HTErf!!"3fF.;7Ks6JnKp\4^[\r
+p&F^[s5rSDqu6VuZ,BjQETZN\lL"W=mf34_s7uNknFGcBs6BXak5Y>ArqPLQrS.AP\r
+e,THboBWL=fVmZSZ2aR`s8)chk5SdbHW<RfNIHGr"TU]cV;M1Hs*&^R>[_a:l1k/T\r
+s"Z?%@q(*a8oc:*<8um:bKK!U@W_VIs8)HhinFEJ@>8l=K?M'Kq=<,*ke-QS^An/b\r
+s8;9ap$VkRmJm.Ws82N^m-=-,n,<+_s8Dujo`(/@W\#emF*!?;qZ$?cs6f4QnEp7g\r
+[i<jl88&82,@k/0s82inq#CBls8W&tq"OaaqZ$Qlr;7!"rVcWmrqucpr;Q]nkl).l\r
+s8Musrr)lrrVulrs8N#toDX4:rVcWkr;-<fq>0s_qYC0\li6_Ks-/MPG]9FLQ-NT3\r
+M\Q^gZ)cLUqZ$Qms8Musr;Q_aS#B_)EbfKBYHZ":o`+jgs7,RXp%/4`rquQajSer.\r
+s8(7FqUY]=bkUP7n`H_7him-QM;QU8f>j-Un^mg7oDeC]XI@9Q$;u>CMV]a#D5!<S\r
+hqJ*4=F-C,ZLdnlp%SJn@")NlMFL']<`P:RoDbkmb$eb$qtU3cnc-tTn4#<GB39<)\r
+`5M]Ndc]GZgsM2JgSFDr_YWBDs8D*Un(.C-i;`fHs8MffoCV\FqZ$Knr;-GYQ*$%*\r
+Vga)`m-OcMr;Ya7q_fNP:`gQ:;b_8AZd\sNs5Df-R[:%QVR6C%s8)QkqYL-hq[rc(\r
+qYgEhrr;ios8)`pqYpKlli%Ios8Musrr)lrrVulqs8N#tqu.!'s8Drrr;HTkr;?Ej\r
+qtp4Qq=ss[n,JrG\/5cAMLiA)i;_uqs!f-uX.n5AoDeIRs7uKjoCMjIRAFJ,GbCV;\r
+rVHQXkP,#Ts8W&ts8DrsIe3U7hZ*;os7F80pV[%-^]*W!kLPCLe9poKL\^%llI_3^\r
+f;\K*e,T+@l.5k]%p`jIYV[SSIWEC#nc*fWS[H&Sq>^K]nc)QiH8@?g1GNi[@]AVU\r
+s+lN0USY9rrVuons0&0B//q."ZHiLCnc/X5n)KPth1b@SOR:JmAbFlkqs;<%q9f6=\r
+fD>!eq![)>rUp3hs8W#skN)=1p&DqGfnY?V4ZukH=)]lM9EteI3]:-OZe>3Is5Ml5\r
+T:<8<,s4[c=5;Nmq=t!dq>U6er;6Ber;HEhrqZQnq>^Kkrr2i]rXf#-rqufqrVulq\r
+s8Musrr2rqrX&N&s8Drrr;HTkrqucmDu0>.q>'p`q#:<ls(Z.s/gjLi6[Z_Yqo65I\r
+3%],51i%,JOH,6lSXcLSWNO+Rc1:B(s8)cdmf3=bs8)H`p[[eQrq,sRf_OmUs8UFF\r
+qnVROQeff5jN`&KjbWp!L[!9*iQ5ZpdsCu\X8i%Hs8MbAj8X.)Ud["q2C3oY:SI.<\r
+s-oLoR@^_Ajn7g&s&2pF5sT`K.r^]7h"1.;B4ut5_TVQAq"O:XU6E5Z0jOM5q>]sE\r
+kLPdF`+&AuG5^QXmE^j^e"bsOSFYdGs7aS6s4@;Nj8])Cs7c$Xo()hYs8)Hhq=ajG\r
+h=?AYSm#AHF(Am2G'8ttdId8+s7Ys^N/"8^-UeFL+cM8Lr;$Bgp]('as8)Qjrqd3'\r
+r;-Bkq#:<hs8Vrprqu*]&H)S-r;Zcps8Musrr)lrrr;oq$2jJhoD/4Vs8W&srdOD-\r
+oDegigY1Tcrr<#ss6f4PFDd6Q#WkmQLi6e(/L"^j2f:?#:BU\62DdX0A8M;Ds8W#s\r
+s7u]cm/R+^s8W)js7tjXptbuMh#I2no&$;)d#75>K_jY_s5f"0gNW&4D=Q1oqquVp\r
+k()%(E:rP"s7G4FkkK[DUL6`\3drK'<(N2$bl>#Uf6r7:p\b'Ag%Ji`NaQ1a9M(>B\r
+V!@+*s(Q8!cdUJ@p\=dcs+5<VTSooOmJHhEbl@+$pZ?SYcr9AaA,kPLp"5Mec%t)s\r
+M!3Q`s7F)+s4%)EfDkO$s829brVHQms8DforVQWkr;ZHbs7,a]n+$GQoJ$=(g])kQ\r
+U*_!L/h'A]Qa6AWs7c0cr;-HnrVu0In+unYs8W&mq=FRaq#:<hr;?Egr;6HerXJf*\r
+rqufqrVulqs8N#tr;I$#rr2iqs82irrVl)2qtp?lrr;<Lo)J[gNf9=IajKeQs8D`m\r
+M1Vlc-tEtt87Peg\Zt5Dbj^%+OG8@K_S=1_mel&!nGDeVqt'jfrVHQiiqr>ns7XS4\r
+m()-#Pi'Q9qr*e;ie?[BBA'pskf@34l%B$2OT4Bbh8`XYfQQlPT`"<%s7c8kT#,r*\r
+Co1H3OCD=WY,Kpg_;Sm9H*=Nm\[pEd8p#Q0\6iL5O,_B7fDf;kFR\qoq"OBaWN\B3\r
+6bK;0s7cBRd]M'9B^=>Wrp""nk\9hEFm-qjs6Q0Rn=o:'OO1^hhp7Per6,-?f_4XW\r
+qt&bGqXFO`rVl`pp\4^[pAaj^s7uO;s7c-bH?>Sm&iMg/=h1lhs8)cfnGi1Os7Z'a\r
+s8Du^kj\??qu6'mrr;ips8)B\n,3+[qu$?ip\kNts8Mrrrr)lrrVufpIf03Er;Q`m\r
+p@n.Np%/+Zrr;utk2l"&o)GS_Z:%#UhVRJqrr;fes7Pj\XejN32JYK5BROurd)kVK\r
+oDeOQs8W#sr:^0jr;Zfns8W#sqt&bGs4IAJ_X??Skgbm]dZ3eFMYZ"\n'>b7b?Y&'\r
+EW>Tdpt']9YYEuk<<)`MIb2kXl/Ij#m^rMum)$3LEFjuTEM8>EZ]'^@^VAG[2b@Ok\r
+GI"O"BP*77[-D[KVld)Ybg5cV<al"-rVuooCLq&q$le?Wh;ll!s6@5nk_\9C:ufef\r
+p>/pLhJVr8F6Lqkk0ePBfn9"YPl0a;s6QccoXt5'ci<R^s8:pW2ui@FqXsUWq=sje\r
+pA4gYo)E$#H5RAT:J#E&UW;':p%S%WmHFT-g[sL_o_A+Zs8Dutrr;ESnG`(ds8Vur\r
+s82`lqYU3frV6@4rVZ]or;Z`ns8DorrVcWlrqZNlq>L<gs8Vuhp%/.^IfBBAp&G'i\r
+s#Du/MMI`$rVtU)l^!^7inaRnh>bjDngYhV,oo<92cfYBs7c$_nE]Z5kj&3HqY9[N\r
+mcW4%p!Wm<`:rSijjo"Qgl;3jP4?tPk/;$0enG*MGlQZ=gq-PG_.Wf4NrS<nfu.%U\r
+gjAGPQhU!\s8V-7da<VjIZ(Y:b0S/nSXHk6dH4nHEJB14cH>+NXN^5"s.,Lo\@C=q\r
+Y/Nq);V'LNhVHjU5<qh%70!,[rTM`#h5KD^F7S1!rodePbt$m:;#g$<s657#cYr-t\r
+FoUims6#I"a`cdoLB%(Ys8U1?s475IhY[!-r;63es8VW^s4lN&,ldo`<).DE[FbHS\r
+s8Vop\[9jp>^T17@N64>77((?P+_F:r;Zcps8MfqrVcWgr;6HfrWrK#s8DlqrVccp\r
+r=/c%rVlTjrqQHkq#(*crr7HGr;Z0MpAb'jF)Zgd.n&+Bn`f39`51:h1f;`KmI'6=\r
+qtC'Vjo8[iGE%9Js8)cgmJQqWq>^HdqXrhFq:blKgAh,kims.7^gcKZEW5-Yk0%eu\r
+[p\XHC@KJNo?gV;ghZrHI.#1(h7ROleTUuhS+5a1i8'jYfVnT9de8.ZjKYbhkMbms\r
+kks`/qZ$Knm-=BGrVuZbs82Nis7u]dmJm+_s6oOY]"Q&>hW)Sj`&f_3EFNM4aM?NM\r
+WW2FrrTTL(c!BYd=oRSsqqbrVeReX7Gk9O/jiM)h_d;WUD>N7Bn_/EA_f,SHX8i%1\r
+s8:1BqVD/Kn,NFdoCb!=jQ6-_c02mPg#_/ls8)bRL8HIJ7Qrh8/h':M1f$+h9N+bt\r
+N/F"nnbN4as7l?do()GJr;6HfrWW5ss8;for;7*%r;HBfrV-6gp&+d_mI'6<p3uc0\r
+r;Z`qkiMS)4B3=91jX82PE*+O:O'7Ne*lZ's82i_l2J<'bjarurq?Bfo)J(;n,N=\\r
+s8V?Vo?@77ch6q:k2)ETb&kb;:>!TcmFH1BcYrF%G5p]WmE&6!dT?1lA+@i`pX5!"\r
+hjF5sLud!3in9^Ne=kmX[J07AqL82$dE]f.p\Od^s7>d[p@SC^p](9ks5i/(s7cQk\r
+o`+UQq>UBno(DqTp]'pYr;60e^9kQDjQ-=.iSi(aiQd\Sf7s=lLB$O_jN^fda\`#u\r
+DrJQ8o@%UHd:_@P<9hb:s6G+0ics"g>ia@\oAuMBpqZq0gAUp2p\+.Sr%e<OrVu<N\r
+s8Vrqs8)c4^"lFTBb_15?!)?VXN^M4s6StL\[K\/H&AMrZLmbcs8N&np\t'jrqlWj\r
+rV6?nr;?Qlr-nM?rV6<hp\b!_r;H<drV-?lqsa+Glg"'7o`+RQs3]*T@9\.)*(C\S\r
+75?B%^q8\#o)Jafs%c?n@pa-Rr;Zfns7u0aqXF:[rq-*]f)Pcps8TU]fRV`*Ie2]V\r
+kLj4i^Hq)/?iTYTs7_r]mYUqs@-GR"m)WB1jGO!"Ucn.lO6=f9oAPu+l+$BRcN!q)\r
+s8V<_rp01Gjo>AXs8N&urVuWas8Mfnq=FRbq>^Kms8M`as8MokqtfjTrqV$CoC;k\\r
+qu?]ns8VunrpetFm)\bVWT_iijj85EhK](mK`C7Vh82ndjE^d`GQ$?:pXa$DbuiuE\r
+:ZKMplI'4uaCXAZIIcQts8:1Bs5s.NmJHb[rr)lop]'^Js8VurIsRJ&(c[;&U@%.D\r
+s8)cZj8]/Vs7>^ZZ*(oWB6=U>h<=n<s8;cor;?Qkr;6Hfrqu[/qY^<er;HBfrV-6g\r
+p&+d]r;HBYn*U,SIf90DS!^2;iqrK@s7Ys^IWqPD.q1e*E&0%GS<g[oZd(<Z6GU:S\r
+k2GLnlLOuPs8Vcfs8MKer653@Zd[EAh:clKqPaGiV"<ShjjIE5jECRtOT4a.s587T\r
+ZTn<>B)h7UpY1Maac,T;SGqoPs7`r$s4mYNirB&Br;,CLIer1+s6]jdo'Pi)nF,ZB\r
+s8Duss6&G%s8Mohn*09'h>dNHo_%>Gs7?6iqXj@Or:L$hqu?*DjT#/Ls8D*[n]Ln#\r
+]_^fdh91*$b\m:?JH,%lgV..T_IE5mD?'Eas8RZLiagf[8BJ/(ld]t.a`$%bK`(JN\r
+s8UaOs6B=N4Ri(;qtp6iki_d@r;V7nP#kRumHOZGoDeUWs8D`ms82iko`*:_i\<&M\r
+_SFFenGE"Ts8;for;?Ehr;-<hq#2*.rVQQmq>UEjrVlTirV-3epA+RWq"aR]s*i\T\r
+huEZTJ:3M\;f([Xs7Ys^s7lW=`Um2+I6KPn)&"qQ)b6d!_=I*es8VZfq<7kVn,MqI\r
+s8D0Xn>l6KKA>!Uh:,g/l)4RYaS=hekg4YUlA#?(K'giol,dE.fld/LKC[iYjOK@U\r
+hk^/F_#OGPq>SD6s5!YNjS\l5s*Xk-s8V6]s5a+VhXg?js8V6]s6'C[kl:YKs8MKe\r
+s7$'dnG`@IrVk=Hs3q#JhuE`@s8DWjr;HZjs8VZfs75j_p@81]lMpn>q!5EGduiM;\r
+L@O>jn_Tek`d@%(Du]WYs8R9Bs*Oe0ElbFVs6>UDr2&Q/IF?8\s898`s8UO9mF_I=\r
+qYgEnqu6Wdp&'>jN.-25naQSXqu?Kbs8Vrqna$5Qp]%P$_^HfjW26rln,<7brVm-$\r
+rqZ-Vmf3=dr<)rnqY:'irV_3Eq>L<grr;inrqQEip\Xm_q>0dZq"FX_s8W)ukiVNY\r
+`S*gL?;3t(q=FXXmJm4]s6/D@T:!)n<col;9%D>UrVQNiq<J"[m/-G6qsEDCr8./0\r
+RFo\ec+c6sdol_K\GuKMmF[cX_/]&"HM-!5ho&gV_d`/fKD+2lp#LS'n`I@Rn]:Y.\r
+f_kd)qZ#IKpZVYUp](9cs8MK\o\]92f)>R%s8UpTs4RGPf)>U!qu"t>q:#-6eG8pl\r
+qYS\?s3(HBaT):bq"E)1oA0H@mf3.]s7u]pqZ$Tiq>^*Rs7bXTr7q>Ic0XPqg<l5Y\r
+l)X40OlP&+jkEl.j'#:Oi+)E7I/`/js663Vp87HCK%ndkm-'H/s1n[7ir8iIrVu`k\r
+s8Dlqs2N1+@Ua/tbLupns7,OWgt1uoqZ"j^i^Q492)7\6\BF@/s8N#trojpms82ir\r
+qu6Wlo^q_Oqt^6krq@!&rVQQmq>UEjrVlWjrV69erqQQgrqLm3nb<(^s7l<fs8;o8\r
+^tVRSBS(W)p@/+TmJm4^s8Miof$`U.dG4]ss8W#qmcs!8r:^'Zk5Y&+pZ]?VgQ9^p\r
+>gpS_hT]4'l]qD4S`S7Fi66':kCNWqJaCj/m+$g]gR\)u[JoR@s7b[UrUU!gpAY*b\r
+rVZNlq#CBcIfKH>s8Vins8)Tlr:'aajo>84s8C=ErlP3=_YNu:o'rmNm\oXEW:KP`\r
+kio;CoYUY-dJs7%s8V-Zs60LWk4\0"s7GXWrUKpcmf2q=s7bLProF+Uh"L*Hf$/[(\r
+giCrj9\.KZoAaQOeTL#pOT4CUs6d`'o<A)XKA"UU6dEh]oBi=Qroj7MoBbi/o(VbN\r
+q>:0ks*ApBG]nbbb2**ps4Yuj[BIb@5?\Bu+c_GTn*C#JoDeLTs6oFHs8W&ts8Ms9\r
+qtTs[qYL!es8D`fpAOserVcWmrqu`nqu$Bgrql]jI/*I6q=t!WlhL8Js7,LVs8)c.\r
+[b*5^:RREUn`p/SqZ$?_s5rD,s8V`[mGRd3p&Fsiqsa=Zp[8(Ye)/Q;m+RWkgP#@^\r
+HJHPEf"tkRb\cLjDu/XJs8S\jrLa,VScA)]rT_8uldc%,m/Qq^s82irpAb!^qu-3f\r
+s7_!Bs763inGiO]s8Vojs7>CBjNQQ5ZcU%IcGu'rc&^;tM9X.mbK,%Vb^\*gMp0>3\r
+c-)p-aeR2*V:sM)mcqdkq:GZHhuEZ5s8V0[roj@QhtZNls75:Or:0gdiU5g'o';D!\r
+hf7u@ErYcss6$$3^R<KPOT4UZs6ulTi+bO&`'2;Y8)VsHpZ]]sn`g)Rq"4:Mn+#oB\r
+q>K@4ltU3W2`+)\/Oi<!?Q9e;)&+oCAqnUQkO.X8s82irr;Zfrrr2usrp:0mr;-Hn\r
+rV60]rVcWns8)]nrr2lqr$_I>rV?6eq"OabqZ!k*^9k/b^:Me?bNn`cs0]&\=]9I8\r
+S$`.js82Wks*jhEs5X.ZjQkpjqX=Iao`+s]k4n>Qf?&L=l(A"OWrMg^hSs$K[8#;k\r
+>3aUTqWNV4oU>gKUA=)Xrp\&0puVPJnc/:^s7u]pq>^Kes8MTes7cEjp%/4Ync/=K\r
+qrl_re\BeYXOtUlh9DqWdAZ?cYP%(gr9h8sn@\el^4-+V_uK\]lK#nGiPaO([F*6s\r
+d*/-7e>1sUVVp:/s8UOIps/j/df9+#s7u$]oBuYIoDeIRs8D6_o?d="\G56js6[8p\r
+rQ>03al:0um*UL^ics;)6.!S&l/5S'fkKHnN;rY#r:f:Gp[S:`rUB=Is8N&em/<97\r
+W`2f1-Q+*p7mUXUQb3:ns8Vops8)cqqZ#L/oC),@rqlicmdU5Qrr;un"T%uis8Vro\r
+rr.<DrVufnrqlQlq=ssapA^hYXWSW<,p>654BE^I4^M6<GB&rZ#V&#!;6$S&o'uPD\r
+mc=6Bec5[(s8)Njq>^Kjs7,$ogWb]5c?]H[V#U=os6Gp1b%]PE>N*Y5kKn2/d!=Kn\r
+KAtIPn`[gfp#,lKq#C3js7lWop](9hIfKHEr;ZTas7kdWp=&s-_<p-ci6nIVc(O(F\r
+W:/ZRqWl)tm)oA!dJs!ss8:mVq;MAKirAi9s82'\r9OC_m/R+Hs8UpPpW2aeZeF'$\r
+b/oLpestXNV=a)js8V'XrTsRWnGhqIs7ZBjq=sdPj8\`2r9MbtfsLeN_>jPK<VbR3\r
+cF6O0cW/N33p"g^s8RlSm=4$:FT:g9s8:gGo'$,RqXa7Jf%&UNp&FCBs3]'UnEU&A\r
+kl:/;s7Pj\d`h9bW6B0oMb6HGUnY!`oD&@bs82]mr;clsr!!-#rVQKfqu)!Crr;rq\r
+s8;coqtg?gp]($^s/;d&9hJbp<,Gi?F@/2u4>p@e*'u/%7go_H:JY3`me6PSp&G'Q\r
+oCCB'm,e$-lMpVJlIiem]Q`)PF7nINs7Du[i.L+5C%Ki"ptCDrhN@'POke0Kkh`oK\r
+p#H)Mp&=mhs8N&ur;HTho)F1:li7"Ds7t(:m'Q6ESE8XdhUdPFhNRd)XoJC<s8UIG\r
+qptfFirAoAs7c'`o_&7Rq>]jYs6BU_m.gMKn,)e@p[[,1n'Lauao2+Xs8U.>s2N:*\r
+NRcLHjkm96m)AqnfDkO)s82Ber:L$cmJm4Ts8DQhp>tPmZe3BQfumN-gs&UH`^&M,\r
+:#3cmp=k3!s0)IpV!66Jim35Vs4m8:ipZ3ms8Moqrr<#rs8Vurn*9rMp]%t<iM3!b\r
+AmpQe5\_J^6kp.f2_\$QGD58DmJm1cqYC-fqu-Hss8W&qr;-<hrr.BFrVufms82Zm\r
+q=jpapAaC>q>^?lqY'sdpAb*cs52N.aMR/]_;guOXf//*r;-HnrVlH[jo>AIs7ts[\r
+rTa(:`pqricFe8H]k?3AD#a3pr8W7c`a\u8PQ19Qs8KY1oY:+``W,\ns8Vriq#'p^\r
+s8N&urr;`hq;hSSfDg="c27(:iS'73`c'VdKD+u4s8T_2s2G$<aoD.]r:AM>q<.eL\r
+mJQA@r9X1Xmf3=Xs8Vcls7lWoqZ$Tpq#CBcs8VHcs5F"XgAh,uqY8&0rlF<bYfXkL\r
+`4_;ogpd=`i;`i<q=<,-o$IF9i;NE9s7YXTn]o_0L!@J0pZlF"p?#TDe6V=_I/_on\r
+s6[8pn>Z$1DT/kWm,G;Ms6BX\lK7*Zs8N&MeDKuks5)N*?sJ0m$Ss^s>7h6%2_\EJ\r
+@#D4gdauk9JUW[9gZJ>,s8)Qks8N&srVuipqu?]pq>'dbs8DrorVq?Gs7Gp[s8Dud\r
+m/?A<s7Pp^r:p<SiW&lNs7>XXr:^0ep&Fpbs8Muso'lVJmeQn[s8MZ^q<uo7s3pDn\r
+Uts7Ms7*,Oc[X*C:uf`)hoJdni,SepT`=8Imadcoh66kPgAh'=p%A(Oq>^-as7#aS\r
+qu?*as5X.Zd-Khihq3C6jP>g\l`'aZ`;fkbrVt7@qUGQFirB&Ds8DBcs7ZHfpA4FT\r
+s8;osr;ZEUp\jdbs8;osqYpNorVH3Xp[[\Ns7?9elLsc&s8V-Qo@![=g].<(l/fG(\r
+c_'"GVY^&*s8U@Ds2Y0>e,K@/q"!G@nC@3u[JB9Os8IiSreFDOl\=N@L$Q^Bs6$Wd\r
+jHJfN:"dHZgsM>cq:u#MkP4W/s8Vrcme-SVs4Glk6U,$@3+%Z$Z&XXI76YCWQGNUq\r
+s4,Ea4#fs=Y.O8oqt9UZs8Mus%fZJ*s8Vurs82irqt'FLrqLs:pA=mhs8W&tai;qs\r
+Of$.8g[jn6p$i"Xp&FOHs7u9drql`eo`+UYs7,UXoC)_Zp](9gs8ViFs89OjeUmMU\r
+NrSOEp>(_hb[TGK9\I6Lk06ub`a\#PH0WqEoA[4Un_!m>pAY*lqu?]ls8VinrVHQa\r
+q"rk1kIK6pQerS1O6l&-r;P=Droa1XlhpeQs8Vfls82fp'(55[r;6Nns8VfcqsEhC\r
+p%8(Zr;ZccIfK?Grql`jp&=g^s8W&trqZTip%JF`q>'^Ko^Uf7p=]B?e*6)+cd8$-\r
+e!9(]X8)_6p]&Y6p>l,Gnc/UYs7t4?n"fgLNrT-Ds7hlUhidW\OSRFbkJUud]fY<#\r
+<nbfRm,Yk[r7q2BhuE`Kp%.hUrVu9Ns1Q)"p%/4.1!&lg<IQSL;G'8k@9.nh>($ke\r
++I\Xqq"Faer;Z]ls7lBcp%@qVs82Zip&"[\rr;ios*jtGs8W)uf@AkoATf=B2Ej0#\r
+?<VKFS@[Y5q>^<kp[\@Qm/Q\Ls7,^\p@\I]o`+s^s8Vlos8:LCm%)eOBE.dms7iYp\r
+n!iq%B\'j\ilOaXem.(R>hI)4leRg*pr<@6k5YJVq>('Vn,)_Ps82irqu?T\mblmS\r
+_qs%UoR?,Es8V*Xs8)Eds7H'cnFlnMnGhkEs7lHjq>L?`oDe1Is7lKkq>^Khr;ZHh\r
+rV6Efqu?]orr;W]s7c-brV?Kip&Fm]s8Mcmqt:!hqu?Wirr2fcs8VBZpsRjMWQ`_S\r
+dFOuWo@3^<pAY*lq"=[bp&+jhnbMUhd`Ht)i)>$rk]ZLPD!'&NiPepQ]M@Y2<<)-3\r
+lJ.Z^eY<*Cdf9='rqY^Rq!nC`s8DlqnF6JEm/Lg6O!#B/EbgnhGFg`E<%K4^Kn#NG\r
+g$Jb:s8Mrrs8MusIeig6p\=@Zs7Q0_nc/XcrVcWco_/=as7Q!`TUi5o??8_.>ojn?\r
+.jmYD2,J=1Mm'/%rquflqu?<^s8N#ts8)comf3=^s8Vl?jOAq:a^Y24JH,YLs7i/M\r
+cWoDK8H7jes8.KFl[\<ZLAC;<s8URJrTa=Up\k!hq>1-ZIdmC6qu?Wns6oCJkiCjq\r
+l0&$9nGi4]oCN"ElMof's4#[#ZaSnLM7IPEU2P%FK8-^eMQitYbKJ;tf\c/ms8Vcl\r
+s5`M=`lI,4TZ2qI["3\.G&jF>M8-L&jh\Rphq7tsl2USRs8)Ter;H$ZrS[,8bMM9s\r
+hrN_fp](0i3WJjHs7>^Xs8)Keo$Q:DQH[6Wgs]Nccr&6+5Ld;8kf[Q;if!j1WrMh!\r
+h:%\irlG->f_kO#rqu6aq^DCAs82cpD/P:B%52$kJ*5ejs7QE0\(dL=[ccWJrqcZh\r
+o`++9oD8:[rt#)*r:g6ko_SLSs8VllrV6BW-iX)Es8DudmJHSIs1GkfE,:5=@!Ops\r
+;^j"X-R1f[>&X9:s7Z?irr2qHrVulfr;ZWbs744cbCes+FO@a"s7_]VmY0T<;#fa"\r
+s8IuWs.&3)Ie`K2s8U7@pt59-k5P/Us8)cmp&Fp`s8Mlps8)cqqZ$Tjs8Vclmc+8t\r
+bOqa-cu!Wl3B;"+-Xe8E@3$7l)]2j'*Fofp<?`Pm.k5$`11Fd+NT]SUs0fMj5t#9D\r
+3,0HR=;_oU)&??e$W.o\?Sa9V1+dH(0l:K1Pbaqme^Ep[p&G$ks82]hkiqL3rVu<U\r
+s7#RYr;HZmqZ$BbmJm(9r:mhPcZAL:GP13?hT]9S]3k*TMuW%Ws7",0r4Ub.L\C/?\r
+s8ULFqUbcImIpAHqu6VEqu6Ui:M;mR>Jn56qXjg^mJm4]s8Vloq=FXdqu?]os7uEh\r
+qYC0hqu?Qjq>UEjr;Q3\qX"7^pAb0hp%@qRqZ$Nks8W&ts8;osr;Zfos8Vur`5(&F\r
+CkYJN?YO2"p%n[\qt^3jrr;uns8)-_qV_>=_<010pYh(FVa9m&fk'[(?00+,s87uY\r
+oof=8NR>dsrVFM5s53\DkPtGZs7H?.\)Dj]UkaE$MLi!hK<L8g[$$9[N.JZ[@\cad\r
+LFa`b*Z83*)Ib``JPAS#8j\n230?E`O$Ymh5WFZ[0R>#f@Rih5gY)UqRDTXN6S0j.\r
+.k5d,3f?^(SOl8!RQrut2)0e6,]kUeFW_T1+rsrP3cSG/M1'`GXfTh#f`&q3qmEm!\r
+Xf^KVUropE`967Es8V6Wp;-%WR/d)Us8SkonWN"XI.,FCs67)oo"Y%`T@(Z&g<klZ\r
+rPnm9eGoR4p\O@Vs8Vcfs,rVGS"$hZoDejes6o+Mp[%p/s7lWioDe4Bs7#FUs8;os\r
+rVuQ_q=F4Jr;HEjs7-'fn,E@Yn*oQ?rqufqs6JqAq"Fafr;ZBXs6/P@kMuF=qu?Nd\r
+s8;Zlrr)lep\"7Yp%\FVrVYs\s4[MKbP1)/o\?PJlD3I^B]I6,g;#]1aB8K#K(I<8\r
+iP^?0frtC(q;_JJoDeOas7cQ,Xkll?H6j>(3@\Ms.:G"]?8aBI4>Cn;06f#jEZPg,\r
+3\Z=N0T81OP<Laf2(4S;*f)BjN&N5N4Y`3Y.>Ko;K/>-%4ud`+_tK7S]ItgG6U-bq\r
+3L;?JM(0j+0eJ;=/rVYCNC#go4#`*K-@.!^F"o7qH8@*u-6I%O+_rkeHSI+'4#`*d\r
+5*R]LF#GacR$=fFn*'Q>eG&OGnE6\KpTso"\G5$Hl-a_NictLkK]CO&e]DmT_05hQ\r
+])VfWs8V'OqWn%Yrql`ql0SH3jo+oEs7#CTe&pdbZH]k\aHr!lDJFlQG`Tk^eGK(A\r
+s8N$1s8W&ts8)Qhli7"Vs8V`ap@/(]Icok[Ism5[=`.\TH((#)e^3g=eFN>(s7#CT\r
+qtU3cp]'dXoD8L]pA+:VqWRtZh#I#dn(Y;Jj1#'TX8i*ijj$WFZnU=O=Oa]dd&h$8\r
+]oDdReG&V(nET`Ep&Eans%c%5$33=d6&%QZG;q0m0dp`g,\\hSE%N;[1b"2BIP?pQ\r
+2OHW\OYnJF1aS/A.$ZqIRQrQt68P,n/<N:XP"S$'2(Ec520Rs3s.Z".+rj]>.t]c8\r
+Pq=A?/1-*423TaGLa=0i1G+;<08DG>LbpW80IMH1/VlYNPW^jc0I_i<0pj($JMJ[;\r
+2CjUs#Z3B-=fS4"s8MHdp<qF0;3Kn`PQ1N`s7)96cs,MU6L!)rgWa9geqD/[GQ7NR\r
+s8UUDq:bB3k4SWIme-VUs8VW\s08iN>#oJd+>tJ`1+ae70IfNt"<T?N6`?lhp\+Uc\r
+s(M9+pA=d]rr;QbqsOLaq#CBmmd9W9n,8rN\92_TA6k%@G,JYILHIG$8OI&i;JVMZ\r
+UAk/lq>^KaqXX%DnG2kOs8)3`n(RQs`;AT$s7E>kr1DQS:supMq;-hib_G)oO5e?^\r
+p$U]9j*q"+s7Q'b:f2]`+':QaI7m4u.4K=&5)MB[L+4Kn2_KkX5G(G-T0G#p4t_pO\r
+,(DU&M+9Ol5;8-V-\OB*KJk6/1am_k&R[UOH9sT@2D&mk_Z-!bbSLad2_BYB/rW(S\r
+P"7d'6opDj0n_VDKge"[4Y_RR1P\1NM**GH3-Zs/2CO>?.Z6;=OZY=f7m!\2/X\^P\r
+O$PFO-P]QV4C>q-YlFRWm+J#U\7ajIAbP+paL3GZei;C)3;2Ebs7!)Ed$4@r_#OGj\r
+q"NeIs7lEhs7u]po(`6i[`MEIBFbRq<)I+BC3Xi>J!?(mVkgl7\&e@<s8W)srsnJc\r
+lMpnZs8Vfhqt'dcq#:,=lg"'@r;Z?Ts7#:Qs7ZKXiW#O9bsX[2+<!F15$*o/T%VrX\r
+q#C0Zr:':Onbi:Ys8;Wko]5l4`:i/grofXIs.&B)CuruXs7i>gs187"^>R8>mcWL,\r
+rr:U%mq$$g,UH_[5(kOAJKH%[-RaR'1laLONAiVQ4Z&9X.>]I%)LNqMH9a3D/0K*d\r
+*HWt\H79eP-l["Z-?_C#HTa-52_B2K7>s\uJO2AEkMH6R[eDg:F[.d<2Ca53,Bu$n\r
+H8[3s/0SjS(1J6q>qI4:1+.3+/q?/BLHdMM4"c=N/;lM=N@Z324><?`,Eju/NDDR*\r
+9/D>a+C.Ac8\q<'VW#Xnf"QCfb@p%d=k1AKgrM;AhHU$VUAt/*iRX[pm(r`%j7N$)\r
+r;ZZ`q"s[Ys7?*eQCG$;4AV6,VS9^cs8;oal1af=s7Gj]kiVO;rVufmrVmB$p[S:`\r
+q"+.Ep%InTs82fqIerm?s8;ohn,NF_s7PdZR?5HV3c?Af:/4>pXJio.p&Fsis7-$Q\r
+o)InIs6]dbn,NFTs8M!VnA4_UScA8Gn)8BAbZXQ"G5qT6s7iMlosFMZa8bo1mH4Fg\r
+C6fhQ;CNf17mN[t-&jW.QpNj33AR$W.#Tu7N&rYL/KT0lINa#24HquaJMSg$5rOBj\r
+7?U/'Ld!YD4>M7B/Ta-3GV17U-6$;(#"gWuC$FLS`k21).;UX_E%WJY3%]JE4,-Eq\r
+Ma]g_5;daI13PN*E%rh]0I:]g,&\tRE@`>X1amf3/;QJJRmfH;5Vf)l,*k;9R78`q\r
+59te9(gUiM<-HHh\ae:cqVeLFg5>LXGgO#oqriP0s0ht-`oYsRnE\!ls5N_Fk5>8V\r
+mI^87kk=fOs)WFDIXm^_r;Z3Nrr;cnqXaaequ?]os7Z*br;-Hiq>UBkIdlmnr;H<g\r
+s82irqu$Bgkih="mIgMWs5i2<aMI.J<ei+I<%K:rI<M:3c0bQ/s8W&tlL4'-qW[\Q\r
+m/-hSqu?0cs6fpejT#"uoB<(2f7(]O<S#H(s8SDbs.\`9OlP2dj4h'=nF^^2LEIC&\r
+3%f&41kRY8L,goM8Nrq)IOBq#+F>@QCb[8W68s9_4FUd>Q&C1*c,T\)ant,Ws7l6d\r
+na6A9hZ)0Qs2VqHXJOR5N5'1>QTd<A;G)Arg&Jq#lU3jR4ZI=b=HJ>k\Z2O[]!gk@\r
+^[]^srS?3-h:hnQaSN'=hhZos@pYNj5'ek2B-\R.-mWdR)K@YdAW9;FV`cN#1`_]F\r
+.$IC_N?SWuKkl_?g>2f%g&LZVs89(Vb&6q9N;rOQs8'Rqiiqt?a8c2"p\O.Ps82Kc\r
+rqZToq>UD4EJAaaOo5"Sna-;To`+sfs75RWq=aj\o)JR]s8W)qrr`/oqXXXMqu;-D\r
+r;Zfqs82TkU7Sna5@YE<3`8RqUn#Wqk5YJXs8Moqp%81[s8VWcp%SLaq#C?gqYC'd\r
+p](9bs8:gNn\Y>*]%khic,k"H`Gif6H0+(`s8UOIs5pJ\VE$=t-653;4_?Q%?nWg8\r
+6p#]L.:kLpBMqNMDJ4ujM5[ngbLM'djR;4/s8)cep&F=Iqt0dcqu?]jqu?<`s7Z6f\r
+n+$GWrVulqs6T"H^qJ*uWkS2ss7#@S\$X3)eE5u\r;6Knqu?]lrVuBZs7#[\oCr:^\r
+s8Vurs82fqo_8CHkPEEJj0Z8>U8Gb;BT4c(A1]BK5WjlW-%d9OF!_TF.Mc*&//MJ`\r
+2dk7TcM$AIs74)-rO;7UO6PPZjP66pm^MTL]Cbd@rr;'Sr9O.Vp\4Uck3D[.nc-><\r
+e7E-:kMc=7nGiO`s5r,0p@81_r;Zfps7Gm\oCD\UnUC9/o`+sfs8N&qqZ$'Ro`"gh\r
+io'-.>&,B+3A;pVG&Nbj_sRL!s8Vops82ikp&FROpA+R_p&4p`rr;Wfs7Q0eqYC0k\r
+rVZ]omJm%:q=V_Nb)Os&PjRqBqu4S7s4I>NiUQKsp[e%4eDo60k0V93e'.4)aQhI.\r
+oZYG<i<.s,q=jjf/,fDBs8Vurrql`kq>0p]qu?Nas7?!bq>('eoDS=Ws7uQlrVZ]q\r
+nFH,FqYpDArq5pZnEolJrVuors8;`npA4[YrVH3ap[\4Tq>^9ds8)WmqXsm_oD8(O\r
+rqZHks7u]pqu?]ks8VNYpZ(T,q#CBBh;PlYd\s7pPEX+PNmO8YeW,=!Vjte\H][4=\r
+e*>o/lf>2;lCR5"LsX@gf[lGWm^i,eanP__qu>\0pAX=Hq<mqQq>1-kq"k$WlhtmC\r
+L2:CJKm8cXQaEKPYCh:h?X.MF9O2g`J`PkUr;V6CjQ5;!rr;T\q"a^as8N&`kjp\h\r
+64XJJ76k0i?@n&fWii;G[^"6%`SC@ds8W)uo_&%RrVuB_s7#a^p\Fjer;ZZjs8Mof\r
+s8VEbs52;VWS?F9p]&J:s4mMOjRE$*qu?Hhqu?Kbs82Tkn*L#Qr;Z<VrqZBir;Zfc\r
+o'(W#s7#aZkO8!!pA*qIqX=+Ln+HGGn+lD9pZV/Io(N+YnGMkKrUosbqXF.Kr;HZi\r
+q#'RIoCqtXs8Duqq>^3Zs6oCLqu?]ks8DNcp?VGAnG;_Ms8)EgpZqPBpAb!Zr:o^S\r
+o^;MKoDAL[s8Vops7lWjl20$"s4-lDlM#c-p@A.\o_ea]qZ#aEo_eadj6+egs46o@\r
+\`W4El0jV_ght'QB&`!LnbC*"s3pW<e+`n"q#BUIpuh>Jo^DDDpA+agrVu!<nqhm^\r
+G%uV394`BbL6IXoSsusp[`QM+d.$Msn*ffFrqZToqXa7Ts8N&urr;BPo)J^h`56uL\r
+Y,f:'PH&J5LfI5j>ZQ)C7qFM37XoiDjlG\#q"ja`rU':PnFcVRs8W#ss7lH`q>9U[\r
+s6TU^hXpcpr;YLAs3p?3eG0(+lhfZ4s6ojbp?V83qu?K^p@/"[qXXFLqu?9[roNbN\r
+h"^p)o`*J6s4.&IiVWZ:p&="Js6G.-s6/qOiq*36oDe%Aqr78Jlhg_Pq#Bj\s7?6i\r
+p@\.Iq>0a`s82<SmJ6PNs8Vr\oA]BAlM1DJo`+7Hro`qRlhCGKp&FITs7>sanaukN\r
+p&FRWs7H*dp@SCUnc._Cs3L*4_<Lp>mJk`,s5`eOl1Y/Dq#BRJs4@/Je,+Uo`;KYD\r
+m/!.Is.@m%FOT&omeF?es3^`Dg$\[`p&EnGs6B1Pk4nuHr;ZZao(;t]s8)Bfs8)cq\r
+p&G'bs8V]jrV6E`n,N.Ss75[Ys8N&srVufnqYL*^s8DutrVu]gs8W)uo'uJSrr;ii\r
+s8Dfol/hsFqZ$<\s2`.9iSK%T^qS"lrr;fkq"as[me>`<s6m\BZB(?&Od^c[Q#qbC\r
+Bm"u*O.C$AR:Co9@Y9t[I$&#nR<+(PEeKfiTX0!(Snrt@AVuptO.UZOQ#(c(?&tXp\r
+Js9H%Ve1m]?@nMEM4S"*QWf$.>(;c>J<a;hP[&g*?%S>JK9]l#Q"5?!P\,rDDP!hW\r
+]u?T=s4m>Gf_YX)me"s(s4b63S?KefTsT6>Y^E1PJ>BW*TX'*;Xa?nRLSVA5UU>fN\r
+[=tB`Kqu,4V7)5X\;%9+M3OlRX1a@m_3:1`I\4!(ZcSZ-[=+g\GdGMBV7UEC_.]^T\r
+>IhglX12K>\nn=NIDZrJVT7,b^WWP!f<r0-VRF:<q#Bd[s7GpVn,E>,p[\.;fAuD]\r
+p&Fjfs7QEgp&G$fs7#FUs8Dutrr)kGnaZ)Is8)3OqY^3ip@\=Omdo`/m/?k^s8Dut\r
+rVulos6StLq"4Udqu?]os6].Js8N&ts8Dlqn+m"GoDIL[a/Yo9NNBRQXL==n[umVu\r
+NifsVZc&<&Y(WjkRDIL]TXC)LWdp>:D47hKUq(r\a-Nd=R$X_.S#MLJ[[a@H\X8\\\r
+IA*uuT<rs=[s>-sKr;_8UV(oK\pU?bI\jT(VRh8T\:LThJuH54WjmbSXF#AP=e2O=\r
+oDd52rmUlHh#@?0qZ#2kLJWMc=c&VVLRM\,QXGW=A<!0qN1Od:P@B-.@Y9kRK9]r"\r
+P[f?2@>'nSKTp&&O_9uQI?U79I"@AtOeRAeUj[QO@tpRiI@",]OA:+a98B$=K9K9!\r
+U1]d`CPRp\Llu_5PBDJ:DhF'hNgP6LOEH_VK?DWUmdfE8rq#=8jMo$T9gqla;IXri\r
+Jsh[td*(GCoDeges7Q!`mHaKDqtpC!qu6Nns8N&urqcZooR?&gmI]uJs8;o\jSSlM\r
+s8;Zlhq[bsp&G$hs7c9`l0[@#rT<J:g[k='r;Z0WrT<bOk552Iq>^!>k10#$mHXK2\r
+n,MtLs7b"%g[tO;o`*b3s3L<:jR<'8k4/-8q>^9hs7uWnq>UE_p]($gs6fgPjn7?r\r
+s5*5Eg%57"nR;IRo)I\>s5EPKiV!61oDdhAs5N\NjlQ'aRA5S<[$gdjl0J#rmJ#E4\r
+s69.Si09j^^s8tHpXSd4h<XdelhK9,rT*SMk4JZ7oDdtIs601Vl1k;Cp&F1Is5`kO\r
+kktDRrr6a)o_@V:mJ-_]p](-AkL]>*nF-D?k53s,s6B@Yn*^#;o(VbTrr;*Blhg_Z\r
+o`+IPrU'F\oCMnEkO@6sqW7YTnb2hFrr;]ls8DllrM,p]TpVg.Fc'mAGtCA/D/"Ta\r
+Nh`PM[,'L!qtg9k'_qIsqt^9_nb;bNq!mnCmdKFqLP#M/IWBFP;G^\HG`>WtBJM21\r
+PE2U'j7`0;s8W)urVlWls7Z$VlLjr@oChQjF`1;a=]es;Jqf=j@;Tq+L3\<4GCPcf\r
+DM)2)H)@jUp&FLOs5inQor>@.D/tGA@YSH'O$uBR:JGqUH'Q_)ht@!Io`+RVs6]1N\r
+iUHm/o_n(JIf/R*r9X(Sm.C8Ao_n(IrTa"Sl1k;HVmDkdXd.r:fD,C4q#B^Rs68S5\r
+e9?IU]#:TBs60@[mJ?kNqu?3`s7?*eoCMkGo_e+Ns7#g`nG*%QpAaLNr9<kJm)?c\\r
+LjtM9HB+;VVim=DTrGK%\\dn:s6fmco`+s]rr9RI.aki>f=STOf?jQDbkJ]^d'C3s\r
+^rX[Df@7RT^XLrar;ZKes7GmTm-X<,rqR]6q#C6cs8Miop$_q/biihTJh&36$O@b-\r
+/jH_K^$b:Zrr*/hm-=WMs8Muos*jkFs8&OfT7;B<S"#tIVQm5%][P3jXf96D=E.MF\r
+D=mAup\"RVn+utZs7Q$^o^r(TpA[!/7P$)Y6UYE!'KdZd;B[2`+Wso<.Ut%]ALT$9\r
+-n8'Pl0S3FqXs^`@:O3g%jW8;1L!msEc$A7>\AtON8ijNs8V]gs6ojbm=+^-kkkDK\r
+r;Z<ds7?6inbiFWr;Z6_s6]^`m.p\HnGV7Uaf(H"J$?eYmJkl+s44s7WM$PQO.1@8\r
+e$8]Jir&i?pAX4Ms6BL]me-PBqu?0`s7-$en,34Sr;Z0^s6TU^lMLSJV4F)V8Q.l3\r
+7Suig/Lj1%(,I'\7'X>VnQ5YgmeQmSVTUJA>q[gD0I^it/:'9.F#c3j3^-\77U8>L\r
+<\cKsIY!7Do(;D@nGE1^qYU6jrr;ces4,Q\Q]nRM9Pt^]2^9A+4#]u^G)`o8_uK]8\r
+s8Moq"o[u\pAOshrs\l#q""Ibp@S(EoCVJLs*jtIs8;ofmf2nIs7#CT@U=8STsjmp\r
+s75UVrql`qr;ZZis7#FT/Ls++(H=-%=W\P[2DK2)-uLjmG;_(#-m3:[.<70pBS:u8\r
+p%&.WoD^9d4=h^8X.cWpp@\IboDejUrqY@Ls5X.ZiU6*coC_;=p[8%\qt^*]q>0aZ\r
+qL8)3qssLXn+HVFo_n(GroX"UlL4c0^<`jCVgbefR@^pFN2Cf^VgQtM]^PXMrr;9[\r
+s6KCUkPG5Irr;Wgs7H$\me-JGq#'RRrU'@VlLXo8oD%D<p#,lMm/6;1g!7gmce#G)\r
+_,4'H!!4OLZ.nmHs4#d&D/cBf'iQnBF](UhMD?N+,oUJH-"&>Y?SF-9.4In.)Dl\a\r
+MuN_Urr2roqZ$Qos4lAp\@0UM6=28o9ee8'Ec%,"Kr*>IlMpb]s8;omp]'LAme$/F\r
+s8W&qqtpCHqtBdQn+#K=s7H?kq#CBmnF-,FoDeFNs8Vurs82h<E/T[2U&Y&jrql`q\r
+rr<#trVq?9n+D$RLfdYr@pXn6E27DdVgij%LjdBgCUlkpL+FH\8j7tc-$%nhs7kaV\r
+2'bqHDLqZMk4Ro[^p\sTfUC[JQ2L<hs8:=FpuVPRrVucps82irqZ$Tms8Vurrqufo\r
+rVu]ls7lTipAamTqX!qUo'-&3[)f>M`1im7PeA!eYhJQkp&=:Us7QBkp\4OUp@e.S\r
+qtg?ls8N#t!ri6!rr3'!s8MrrH2djBrr;ips6T%1Z2*gthq,*qiQLWQk,5)`%1t.1\r
+Fdr(%s.H7A4[=-0*EFL1@7!&*4#)%3+_ieaE\oFf/h(9j2.nNj;0-];o'ZPFlM]l,\r
+p&=piq"XmCg%\]OHp9f.E,M?;m/QJ;s82Qjlf\91jS/B?s8W)ss8MgTr;6Nmr;ZQe\r
+pAb0hp%IhRs7l<]o_.tSq"Fafqu?Zks6f.ObfAn+Lo,lWSE/Z$r;$Bmrr;6Hk5YGZ\r
+s*jqEs6AkEr;-Hbn,MV2s8Mcmqt'jRiW$X!nPMc+3A#/'*-&Qcq:34Z:,cUiTr@G7\r
+_T]WEe]<'Q[:.G$G5q9Js8UmSpZheUs8)HhrqcZlp](-cs8)NjqYC0eq#:$_r:g!b\r
+p%eOQoCM)4k4nuJpAaLOs6A_Eh=:O4klgqJpAO^aq#^Ehq#:2?rr)lrrVulps8Mrr\r
+qt^9gq#C0bs7c6ap@e:So_J1Pr;-0On)^RuaEY(nA&>p3iSM36mGh)D@o?<MioL,O\r
+B:g+^>;nB_4ZIbKM8e)ns7,FTf[Kl:]_%kec`!S`NJXa:Vo8W4s8Moqrquf`li6>9\r
+s8;cor;-GpWRtVs?B\,VI-]tqr:p<co)Jafs7uEhqYC0ZmdU5UIerj>s8Duqqu?0S\r
+o`+pjrr)lcmJ?k\s8)Egmca]Dmf1YUnlf"=)&"m1WQ4Sus7l<fq"Oa_q#1$aqt^'b\r
+qYL-dqY^3crr;uts8DukoDeCLs7Z$`s8)bdR'oONB-\3gLNB]`d/Q6T45@]Zro^]%\r
+V,cL!DVrWXf>`@/9]!A\rU9dcqtpEmq#C*Yrq,dYs7?*ep&4ITrTj:Wlh^JKr:g3h\r
+p&G'fs8Dimqu5pVs5N\Nht$g-n,MhGrqH6fs8;iqr;QTkrqlZm(B"43qZ$Qjs8W#s\r
+na?/DoC)_Zp>Y,erVq?Es6J_(gWl5-\RF=FDS*AWai/Z-s4Ud_=`\J>e^=Cb5Cspl\r
+CHjb;hUVZ(q#C']s5`>(oCDqTo`+d_s8Moqs8Durqu?Qhs7uEhoC2e[r;Z]is7Gg\\r
+p$i"\q#BsPs.>_$9L`cXMQ#e$rqlKjs8Dudme6YZs8N#qs8>Ujs8Dump](9ms6]1D\r
+O,]Ms6rd&W@m`Fd69J^<1L2CP8f\^28jm:Lh"UX<s8DiprVZ]nqu?QjrV?9`q"aRV\r
+q""1So(VqMmI'6;s*jtIlKIj>rVuN[s,2Q*/0@kX05LUPs)M:^C/[S$n%enbSBA3I\r
+_lmhKiO&XZmHi`pn*BiAq#:$fq"4U[p&G'cs8Vinn,!(HrVu$[rpTmas8Vlos7cQn\r
+qY^BmlMLV>p]'+Bs6'"Qp@A.\q"t*gqZ$KkqY^<drr)Zmr<rZ*qu?]ns7>[Ys8Drs\r
+Ier^1kj7furr<#clMpn]s8VT1i6R2#^1>=$C&e%>gXWP_.P.Zt`iPrf2(NW22i*ob\r
+iqN!Cp\+XZp[8%\mJHeVr;6Nmr;Zcps8Dorqtp?ep\adZr;-3gs8;o\jSO@MQ:!fD\r
+Am^C8C7/pNOukO&*Z?n(5ZaA>WVlVm!WW/trsSf(qu?Zqq=spcqu-Norph:dK7ts2\r
+2D?^H3]9c'6!lT,<'3'@D.n[/XiCD=s7,RUrr)lrrYkb6qu$EfqYTs]qXXFXn+cbJ\r
+s8Vl^n*0]Fq#:;BlKRj-mJ?k\s.,Lg/0SU+!(+c:pU-jA+:f?fQ&#D5ec5*[s7P1I\r
+q!tbc[<?5AiS"5+q#BOGr:g6ko_SU[qu?Bhnb<(HqYoOPrTO4UpAOdcs8)cqqtU-i\r
+l21M?q#BFLs6oUXs7c?hqY9seq"Xmcp](-bs8;TjrVHOlrVuoqs8)Egn*U#Kr;$'a\r
+nGE7\mIL%6P.8$.dIcMMqWPfdiP4R/^\[BXT9Pd:6<`:!s)i4T((a/)4*/irr;69h\r
+r;?T^n)FBInc&Rbrr2rsrr2j%r;?Egr:g'aq#:+=s8N&sr;YL'k"/$H%gs^F2,u7W\r
+9KkF@=&Nu[*&T5p4bA0FkN24/q#13i!r`,orq@rCs8DutqZ$Tjqu$0?g!mI=\?iKP\r
+da-k.g@<\>lf6mtr;$BkqZ$Tos7c6dq]#A.r:^$co_e[\r;Q<crpfseo)8UZrr;Zj\r
+s7uZaIf93Es8Du`l1b5Us1uA/;b36<0T)HbgA:==AQs7/+tRhLBW%8dJT6'.3)Uk1\r
+2`)m^]!:,[lMpe[s8;iqp%JF[p](!aoCr1Hq#'1Iqr[\LnbDnQr;?EhrUp*gl21MD\r
+qZ#gVrV$*as82Wls7cBiq=O^^p]('`s82?dCAd`(qtpEjs8VurqYC0is8MEYkkG,J\r
+o_\Z5H_q#K/RMCYNdQ*)a4&/>cZs;[0d]A1C6-ieqHR!\+<+<W9mZ0ms7>mYrr;ik\r
+r:0CNm/?qZr;?Egqt^-ep\b!arr;`ms8)cqqY'XTrqRc%kO"n4W1ffd`kpE-Uq`n*\r
+^q[M2]!oo%_:7/ijn/0Arr2osIf9<Hqtg3_s8Vlos7GdMj7Ds-s8Vfms8)`os7Q!_\r
+rqufen,N@_s8W&tmd9]5lg=NDp\Xm\qu-*_rUBaanbiCUr;Q3as7-'fo&f/ls8Vuq\r
+rr;]brVuirn*L)NpA_(cc5."#3&-G+@AiMYs3f<d7mp\t%k8qL666k,IS2nDe&V4@\r
+eGkVbX.#0TqssdXlMpnZs8Mlprr)Zks6opdlMU\Jr;ZEes7lKjp\Xs]qu?$[s6BO]\r
+nbr@_rV6Emp](9hq>^<`s7cBiq"XmcmJm(Lrqc*^q>0gTs8;coqu-Bgs7>15e?QTq\r
+^V]BO\a3R!D($5W.Mti.@i&&a%n&rQCu!S@iS4B!4+8Y(Am8AmmHsr>mHX]NpA=a_\r
+qYL-grVQNkq"t!_qYTm]rUTpeo`+s`s8Vfap$2SWqY^9fn*ffDqZ$Qms8Dfos8;os\r
+r;Zfps8W&ts8Dutrql^HqtBdSrr;Zis76-gnc&RXrVu?arp]mcpA=a_qtg?mrVu`h\r
+s8Dipqt^9lrr2p=rVuoorr;Zjs7?3ho)/LVqY]dWqsF1TmJ-PHqu$0es*jqEs7Gm^\r
+oC2e[qu?0Os&`0N1G4,(,BmR)S_)TqnFusIRC>4?Al;N[e'A!Yj8[BClss=D+Vl>D\r
+ASgDVg].*Ls7QElp](6hp\asYqu5pXrpBL[o_8@Zq#0s_s7Q9hnbiCVrr2Wkqu?]k\r
+s8Vins8)TlqtL-cs8Vlns&&X\s8(mUq<7_NoDeagrVQWTjP9b7lH7MX',h392,po`\r
+hu!$F_mn`<<gP6T@8TRDW1hE1p&CPMa?2;-+rY)W2g*!QkP"WLqYU6bo`+a]qu:C-\r
+rVlWir:Kj`nbW1Pqu-$^rp]sfo`+sbq"aO\rqu`ns68b8naH>Jo`+sis7uEhmd0]F\r
+qZ$<aq>^Knp@n+QqXjacp@nCNs8V`ks7?9jnbrLXqYTmYp\"1Mq"a[ao'lYSp]'XI\r
+o`"k2oCVMBoBZATo_ng^r;Q<brUBX[meHYIp\=7Pq""FaI.m71mHaTFp](']s8)Bf\r
+[&qnO6[(m]JI`8e8ksKbk5FuQs6f^_g#;u*qu=@Cmtlh&*#L"b2(Pi(M#[J0s6n85\r
+q;MAFoDeIXrq>s\q!\"Sn+HSJo_S:Pqtg'crV6Biq>U0erV-?iq>^?ks7u]pq#CBj\r
+qu?Kis7]^ss7cQlqXOO^kkt>@qYKXRnbE._s7Gp>r;Y:Hs37REK5G4<1b)48A<+aI\r
+o\J*u`51rbaQMpWs8;fpTUj.f2M!P/IkN*qIWrL!nGiF^s8VrqrV?KmrVulqrqm]3\r
+r:g'boD8CTqY]gYr9s[co^VP:qYTmas82cp&H;_0rr;uqs8W&tr;6NdoD/Cc+T206\r
+s8Vunr:^0jq#CBjrr;`ms7ZBinalG:q>9UZs7uZb%fcP.q=jp`p&G'js7Q$^rr3o0\r
+p@81_qY9mXq"aIUqXjU[o(i.SqYTs^qtC$cIeNI5s8Du`kPk8Js5)B-Lk)ZM(.gSD\r
+Cb[GQ,U-2?1/6K`mcjHFp&G'ar;XUPoKPTW'+lZq<_EDlh#-ZKi6@)0^3otN^]4,m\r
+s7u?fqXsmcp&4g`qu-HfrVuZks7cHkq#16ir;ZcorVucns82`oqY^Bjs8MfkqtU3f\r
+I/![;q#C6hp\XsWqu5pZrU9darU]I@s8Up/fU^[GM?!C`s7"s)I?#6\5#bF4T:X-j\r
+mJlqWs7cEjpA"Z[T#MKT<&u^i1FRu<08@BTrmoEqrqHHipAap]s7l?eq=spbqY^6f\r
+q>C3cr;H<drq$0iq!%)'s8VumqY1cfkNW$Gs7Gp[rVZ]kq#CBns7uKfrr3B$q=O^e\r
+qY0dSr;H<dr?V:<rV6<hp&+g\qu$*`qt^-cs8W&to'cUp^<rjS[J0@os8N&toa(<d\r
+p&4jds8W&srW;okp\t'gs*jtIq=t!ZmJb_dlGC3jK7'OQ/70_E<_c&6.j84[0ks!9\r
+B:><ol1"Q<q#C*gs7cKlf%L'_3*IFH-cEcns8U*sd<r9m5k<QSm*^^Zi4f!Siq2Qt\r
+s8DiSh;SD5s7Gs`r;Q``n,31as6T%Ds82irr;Zfkp&G!_rqGsZq0W,<s8VQYs82fq\r
+q>^E`pZq/6iW&rOs8MoqpuqbRa2u/@]<G8`_JoPJanXoQB46Ds#rHgQPkFqRnFutJ\r
+mJd"\s0/WZ3\kP81OM/5JeSGu7QQW<<Lf83^Z=>Qp%&._rVuins5`5+s8N&pqY^Bn\r
+rVuopnaZ)Js8Drs'_qG#s8N&urVufls7Z*bq=ssdqu-Nn'`\43s8Vurs8)]npA=d[\r
+rVZ]orVulq#lOYrr;HBer:g0e')MXqlhRBO[4Njm,U#"1PbRU5rq-9crr.<?q"jmb\r
+rVH?hp@\:Wp\b!fs82Wlo^`$UT!M9fC-k!m*u@I>5^=b!>osb`-llZWL;<!/s6f4Q\r
+hV[r%rVu'Hs4H'*qtg>7EKEsg:tsO.e]Nio]4CZpIbMMAb-5CJk.gfaj.DX"n`]B?\r
+qu?BZr:osblfds?rVuloIfKHGs8)<dq=+(Wq=jdVjo>APr;Zfir;Z6Zs7cNmn+cSQ\r
+s8Dlqs-/b2ZE:/,r9*"iTXCe(hp-9-e:,]HG5q<qRZsrq,"fMce`lQ"m.(,Qqu?9W\r
+s6f(M_7T#LAXQt/R70/k0dV#l*GIYpC-4I[E,:6*UUL4#s7>d["S_Whs8Mus48AUI\r
+qtp?ir;QQgrr;utp%/4Yp&Fm_s8W&tqYC-fqt^3hqu?]ns8Vuqs7uWmq#(*`rr)lq\r
+r;Z`os8Ms=r;?Ehr;-<frVQHkrql_cRB?Mi&d&+IG]nc5o_e[drVq?Bq#1-fs8;co\r
+qtg?kr;Zfrs8Dipp[nK\T=?0i5UIRE3&"h`'Mr"1P*1RFle_[0i;`E2s-&>L-m;5V\r
+7<-,Vm/?YXq=4KeV91,(/%i*Zs8('saGJ*IBYpZLj3*AUmE_#VK+.qgT9Z)LqZ$Tm\r
+s8Vrop[@MLrVQWgp]#^>s8VinqXF:[rVQKbkPtSNrr;iks8;TioCr:WoD8(8j6#[p\r
+qJ^>">?+bH_63@m\'Dg:jjJkCaaV=0C]EnP@Tm[r.8S:=m-F-?qt^95_>dY5RY#ao\r
+p[S:\p]&.FhG$O\3&#/(/8?U\;`H^=.k!bS6Whpgk5+lQq=d5Us8N&oq#:9ks8W)u\r
+rVZ]jp](*bs/N!,V4tH=_V+tes8;cor;HEgrV6?jq>L<grr;ios8)`pq>U?mrr)lq\r
+rVufo*rGm5qY^9jr;6Nip]%t>c<FCf>?G[>VR,g^p?h89rpG73qY^6es8;corr)ls\r
+rr<#ts8Dipq=ajSkPctY7QE5/5rib:ICZ_ali6SVo]cCiZLBOo?Ps>E9L=1`-tP4d\r
+BT\(gfZjHili1!X@VT+Rs7"tHm`itbMZ;nKs8192Ne&Z+/!#FO_R@TU3Cfj2S,`ET\r
+s8M6XmFD77m.^nPl2UY\s82irrVlhGq"smPrVYs\s6BCWfDYa.rVuJPP+$cBQb0WU\r
+4>oMl3%sRS^[C$bdCbIf\VU:Ya7@s$7R'akFdr4)s82ZmJ9emc-[RBcFtOqPDJ"fc\r
+M44,.s8MrrXfBu]?][cIDF-X!.k!bf<bp"(hZ*QSs8Durr;ZQdrVulsqYC.Hr;6Ne\r
+oD[P!kWCk!,To$aCP:d-o_n^fr;HEgrV6<hq#(*crVlWms82irqu6Qorr)lrrWrK%\r
+q>L<grVlWkr"&])s8DujoDdk/n^c4Ls8Moq"9&/rq#:#:p%A(QpA"IZqu$?kqtg?g\r
+q#C*]s82TkSsm&u?\?/)jo>&Ss7QDhS)%FOPVFUr0e$Qe.;UadDC6B9+;A-E0QLc0\r
+PNq$)fZ`hT3E'9^@bT#Rs7Z'Lg<FYO?R[9XH$5D(cLGFHF[%NAlIjSZkJQH5UAaMh\r
+s8UUKr9X9/m-O9)o`+jhjQ#Ruo^)VSg\^NRmH^G;o<S)\fp.Pc1*p,6Xl[X=g`RIX\r
+B3nZ^^9[e6o`+aXiler%0e-U:E8B@Ma2ILdB;-jrD)EVg82ZGs21RtM@j)dMB4Q;5\r
+bi/Kss82]nXf^&@7;"nN=3&80s8DutrVu`is7c4Fqu?Zqp\+LTnb2eRrq#[Xd*CAd\r
+)D(ph'2_J9eC!@Ur;Z]nq#(*cr;HEgr;-Bjqu?]ps8W&prso&.qYpNjrVlNhrqQHk\r
+q>U:0p\+U^p](9ls6T%Ds8N&ioC;VOnac;;qYU9c#5%T]oD/4VrqucmIerm>r;6No\r
+rVu*CqYU!do'HDIlMl3OVe')!1b<2d,uccZAM,?G3AGta9:\*rH4pTU,T9EtBTqoG\r
+s3\jU<_IQK#;%hc8k_ZR5Wqpu03?-1ork:I1aPhKEdn&Zgud(Qf>`![^22B>JH,/d\r
+P(S4-Cja:@geUd\Z*:D2E;7Z/`H0tfCYI0Xi7"pkf&omnJkeIed)Yd7K:4>;2,["P\r
+E++Q+8Sodi,=OX[o^Vt8g&"uQLB%<3+VS0Z5`cfd<"]4&/fn:q7!V!U?o'H4I=.RK\r
+kl:8Is82]nUnY?urVuZes8W)urVZ]cnalYX.K',Crr)loqZ#jEo6,2.?!;0/NMc"(\r
+qY^6jr;HEgrV6?jq>L9hrr2imrZ_CBrVuops8Vlns7QBkoDS^]rVlNhrqZTns8W)u\r
+s8N&qqYgF7rr;fos7H9inc/Xaq"aOSp@.qUp&4mbr;HEhrVQQnIfBB>o)Iq7rM?1&\r
+4uZjt+AXmI@Q#oJ,q)>a=FHp;h:BsQbJO:HNn7<+KHM."/1*tk;L$j?s8)<dK71@$\r
+6[BLb58P5,U8$Z,hu?;7KIId.n(["$k/F-Z5i^7'f>UhIb]*U]c>mAo@9%$gbjcu,\r
+:8jqfs66c4Y!hF#?q\_U8(b_Ds7ZJ[J']AKC9XPno^DfP88o(I4sV"Y;b*$mC7"V^\r
+s3f9V-m_85-!3)WBL=[qK640&Vr3np`c>=f0,np_*beG?Jibu$BPWX*WRU>(s8Mus\r
+s8N&Pg"uW+$hX)^rVlWms82irrVlg;rr)lsrr:m3ldF,=hqR`%r;ZWir;6EdrVcWn\r
+s8Drsrr*r:rVufnrr<#ss8Vurs8)`pp&>!arr;Zirq?<iq>U'ns8N&joD&@bs8MKq\r
+s8Vukq=4@[o_nacrq([/nF#uCnbDqOp\==Uqt:!hqrd/,s8N&Yi:/oh;(<k\3AOe`\r
+*(Vb7;1j[pdFdd\qu?0Qs6SnJrq?B8`:.GLL-I\(*Z%+XA"<2Zs7>[Y`5DP7P.dWf\r
+dHB]mIXJaO)H10KIf/O's7=[b^i/#QB$nJ$mG<j!lbI=C<I&G#J`u1p3]_/QR^)D5\r
+V:)VFn_7Kp[nti!S,;:=^8LEs5EduWB&hkMU8#Y7@#feb_:$R-qXsmQk5RCt<u;Q.\r
+4uQtS:OM9YrU/eIs7lWdkProDs+YX:0dC]o-Ykb"@PBK8+s]m:L8FhGs8MEboF_-'\r
+rUKFHs8W&rrqZ<`oD8=YrqR0#p\F[]rr;uts8DuqqZ$Tps8Mg%qu$0es8)cqqu?]p\r
+rr;urrqcltrVuips8Ms/rr2iqs82irqu?]ns8W&ts8Drn*;fX3s8N&urr<#ts8W)u\r
+qtg?coDejhs8)Njs8Mus$hj>cqu$0fs7lNjp\t)>m-F2LZb\CL7jK0@:J#JKEffqc\r
+rpodWqYL6gq>^-Zs8Dcnq"+OEg\j;p?pH\a/L4JTJ[O7_s7Z!_k2u^ArVuQ`s*oNb\r
+-6kK-00T$pn+uM/`4^oF^O+PVPgddMi7,h;4?]4$S+#\C1+[*jFef!*hsAg_c+8/N\r
+a,o1bcaa#Os-o%Z6T]0D1g/,Njll4*q>^Kgr;Z?]s6]1QC1`h`,[*/]@qfG0gt;)e\r
+nb3"_qu6Qkp%&"[q>]jCs+l038jRV@(.'c/;_'4dVPLfsp%n@Tnc/Xdn*fZCrsSSq\r
+q=s^^s8N&oq#13l!q>^Mrq\27n*TuJq![_<s8VuorUp*ep&+d_rVlTjrqZQnqYpKl\r
+rr2ior;Z`ns8Dorqu.')s8DutrVuorrr2iqs8MsKs8W)us8N&\jmD-gmJm.boC)_Z\r
+qu>mAq#(!gs8N&alfms1m/-_Qp%IhRs82fq%GTUrAn-"#BS!h*fDkaHs*jhAoD8@W\r
+q"XRToD&1Ws8)Hhl/VenGbdbkE'#jf3\k3UZJ5<Os8W#sjl5n2rVtd3ltU3V5s@kZ\r
+BQa:Ho(ht,qY/5)ld>OtkGXuM,9%u=[^,r3s%,M);au5h`6&&RimkrIpupB1qtK%!\r
+j"MoS9Ls#HH'nL.s7u]ljr!XIq>^<Wo(o,V`;flk4>V(?0Pmhfb5_G>ruh11pZDMU\r
+nb;hJn*ToMqu?Whs3&@MG&Na#-q[lPGQ7X?ruCCmkOnQ=qtp3cqY^Bms8W)ur;6Ne\r
+o_eags8W)ss"*m;o`+sfrr;`]n`KcKoDJUZr;H<erq?<iq#:<hrr2iprqu`ms8Dlq\r
+rVccqrVZX'r;Q]ns8W&srquE\o)8S.rr;HTo`+pjs8DujoDeUXs08]I91N<HM3mf'\r
+p\b$tqt^*Zq"aIMo'HAPIfKEIm-=??p&G$fs7Z'ar;?Qco^;DGnb;eNo^hkSq#C?i\r
+s7Pj\]X6]W/Rg@[>q7.#69Ai2d.IA8s8Vurm-+KKqZ$*Os,2Q,,of!O<+Di"PMOp-\r
+^9t%mGC1SP/.2RpTV%_Mq>YkdWXf7o;En'UOcoJ"k3(CSP_Y_f.P4@_4_M.)gALjJ\r
+p\Fj[qYg6is6T:J_oC4F)*:hqK.eQc:e$0.l2Ub[rVmu'lJ;L?o_e[^s8N&pp](9h\r
+s8D]lnEU%@Pcr$Af)P^Jrs&Glo'Gr=mf*5)n*]f=o(]c)_O[0pbf\Q-n,2nOs7Z-_\r
+o'uGQr?h++nG2qRr;H<drq$'dp&4m`rVlTks7uZnr;Q]nrVZ]or;Z`os7uUXqu6Tm\r
+rr2iqs8DutrT`\7md9TFrr;ons5;bup@J<0Fc]-]@hK8#LP2#gp&F[Uq#CBmrVlTi\r
+rUodSmeQ_Prr3B'qZ$Tos8W#sp\"Rco`amVm.gDKrqh0;o_S@Vs8Dcnp@/+/aS@bI\r
+AP#.476GW3'h6QloDJ=^inj_5q>]R8s8Mcmq=4L@e,Q22]QS79=&Md\4@CqR4Bk^%\r
+Whm>jkN2I5r33<U7Qtg9B7rN%5r9iOJT6rM6#=<EjmD41lfeB=nc/"Es69"Pjm2[<\r
+rr6G<HOi7L0KV+(*"c1e@AX"us6&G?rr)ldna$)No)Jaep\+O]p](9js7c*as82iT\r
+hXgdGs7Z-^hr*8hs8)cqqu6./s8N&urr7_+OVAEN\@'?TqZ$Hfs7#ISs8Dutrr;0D\r
+m/I#-r;HBfrq$'dp&4m`rVlTks8)`or;Q]nrVZ]or;Z`os7uU%qu$Bgr;?E^o'lPR\r
+q>UCWrr)ldn+H_[s1Q%a1bh<r:N%s<:Ga_#]XZAhr;Z-LoChnQr;HEfr:]s_o)A[b\r
+p%@qCm-a9-nc/Ugs8N#t#6"Q$qZ$Torr.B=oD/7Xs8MlpoBcLJQ,l*EDbroU,T9a;\r
+Ha<8/s1c)'91<nK+C$ubGZ%1pIW`/pQeTa$pXILPs82ikn,N+Ls7GXWnE^,Rs8W#s\r
+s8)QkrqQNno`+ODs8MEcime"_ci:V_o<>:UF`X9a?A;<SF(Js;L52Ybi;_3NoK@X`\r
+?9C,X0I:I?;O[4Cs8D`mq=jper;-HnqZ$Tmp%8+\rVuoqs7uBgo^VtUp&G'ks6f=A\r
+s8Vreo^;>Bnbi=anaQ6iCjBQ"ErZ(;k2Q4:qu?9Vs3JmJhq[\no)J[cs8W)ur;?Eh\r
+rUp*ep\k*drVlWls8)`or;Q]nrVQm"rVZ]orVulqr;8AIr;?Egqt^-dq=4"Do^qkW\r
+rr;KVolt\14?>oKCOW@^b!J1$3]'sKZdJgNs8DiprVZ]pp(@9&q==.Ep%InLq""Ib\r
+qu?]prr;uaIfKHHs8Vurs8DchqtKg`s8;osqu>^3s'8T\7Qbr8&5k_LG3@]]n`^!V\r
+;M,eu75QT80e7Am*G,`a:dR*p5rNs[6YqX6V9d6Tk2$(;pAb$as5`D.o(MbLpAaLD\r
+s7Pg[s7ZK,Z1afQiD)b'1FmP_'20f%;_Ke(0JHNP3?h3I-WnO2q8pVM[BJ<o#!#LJ\r
+N%Q;jZDld^q>^0[s7uHgs8W&oqY:*is8W)unF$2RrVu]gs8W)trsASpp$_JCmI9Z3\r
+rqRo9p\b'js+GucDJOdro)J:Ks/i6>IsRJL5$U-,;3Hs;p[eFPlhUMW*<#R.rV-9i\r
+q#13frr;iorqucpr;HQnrVZ]orVucm%f?/!qtp3dqt^3hqu?]prr5C%^VilA;`Qg&\r
+T:Mq\r;W=S]eV*>Am^AMfD5::s7Ps_p%/1Yq#1*eq>L<gs8Vreo^)VXq"+.Err;fo\r
+s8)Wjp](9lrr.B>p%S=Ys8W#shV%XkP.X:KF\"]E,oU+%Yk7tfs/2F@1Fca&6$GFL\r
+Fu1jm6Tp&B'ja<lMA?Ut)\k_36u=J#?X['+]X%;,p&FLOq>('hqu-Q:amX\*VH?cT\r
+3\l+-(iCW>D]9Es84@hZ0io834>AQl6pGlM.r/?dQMqlss6o.N;Fu=+3IrFm@VB):\r
+ccG\Po`+XWs82]lrqU6tnalJIqZ$Qps8N&mp\FU[o^_V>s8Vfls7u0Sm/6e\s8N&h\r
+nGRrgP"eMWR?Y"7KVgmk>::[b*uR-c*^DhH=/M\+md'lMr;QWmp\b!brVlWkrVQTn\r
+r;Q]nrr2ior;Z`ns8Dorrqu]k"o8#kq"jjdpe1>\s8BaK_G<p*=]f"PaO'tcs6T"L\r
+M1VcL(.EUnTCD.Gp@81WoDeUZs8W)unaQ5Gp\"RdqXjIJs8Vfeq<n:_pAb0fs8Vur\r
+s8DrsIeWU4q"OgZn,K2V]/_WN1b2r^*aNJdUAaZ_leqe/2fq8BD^Zc12_o'$K=\Y'\r
+nDW4'[]f:tS_Z@eAKi3i2DB)./pe-7<dAeiq#(0^pA(nsaA,KN*#h6p.UF27@5TZd\r
+<DK'CLWRQTn%??gNfU5"2-_LP>rj`f+;JCm*3&Gtkl8Z9oHP2Y6o]]Y12CiCPQ1O[\r
+s8Dubm.1&R!rDckrr;uj%fcS+s8Vl\mc!p9mf3=arq8tZp\b'js5rD5\@'IR8Rrk[\r
+3=Q3D((`Au7r>)p`R)cq84$i^8SRbas8;cor;HEgrV6?jq>L9hrr2iprqucpr;Zcr\r
+rr)lqrVulprqfXjqY9m^p\FXZmdBHAs8DW`pPt5rs8N&`l1+60q"jab>ZH4f%6h%s\r
+f'))mq""I\p&C5;V59rlrVZ]jq"jmbq=XINoCVDLs7ZKmo_JCRp@n.Ws8MkDm-O0?\r
+rr9I8_cBZN3AXf(3G^5j?dd!ps7H>AFghh`5sm\S>?-BbZeFI!s82Zmo'l\Nnc.q>\r
+s.Q.(6pk`R3I<V9INoeO6U$%ZiqE<Ms+>rr$O\U4-:p?cCI1=6GBL@Ge,Sq*s8;fp\r
+jQ6.6rVs=3eRD^J4u7a.%U`N];4l^rs5r2<Am:fN)-B*]CF:5rbfJi:o)J1HpAY*k\r
+pK%=orU94BrVlWms8)B\mJm4Yo(22GrVPpGn&E>kbK8?#kPG5Us/)L)>ZQ)pF.&2L\r
+[(Ea#o^;bYq#AFPjE#4!gXtoiq>U3cp\=OWqYL!crVQWprVlirr<WH&s8MusrVccq\r
+r;QR'qYL!`qY9m^p](9lq"XR^s$>])kPtP]p@\CarVtj5o1;8a)A5EU]^,Ums/W!>\r
+BOcZT2,Km6YkI_hs8N&trr;`ep&G'gs8VlMhph]+pAb0krqQKhrr7H<nb-U,EZZ5U\r
+3]'l*4Dh!ffCA&(`ObtE7ts#WCF^T3<)%T1o`+phs8Musp%JF`qu?Qks5rPD]"?ZZ\r
+3-[M@L,^iD>Z@9QiVW9>s.#Le7RUrH2HM.P93be`a2n&QqZ#U8s7Q-drr2rbm/#l)\r
+s0Sif0IC]p.<n`\PGT1fh#6pGb/*p:1MSWn=@55]0.TGrYJC2;rVulg<q,VHs8Vun\r
+r:g!^oDejequ$*WoBuYXs7Q$^H$=o`*%dA8VZ6PnoBuYFk5Y,Cs6A\Fs7u]fn,M.n\r
+p1.NYPE2a;oDe^as7uKbq>'d]qY:$fqu?]prr;ur#laf&rr)lrrr;urrqo1]qt^*b\r
+q"jj^p%@qFn*T`<p&G$knF-&>n+ZYPs0JrI%gamT3G@7"s1Yu$69A^L6YE!Y\bc%"\r
+da.!q`mk%es8W)urUgNknc/XcqYTs^qY:'a!rr<!rr6R#o(7s%PsR]5+rra:6>Z8Y\r
+s6/>>AmC`].q_=7F?VTsW1q<3rVuQ`oBu&5nac>Jqu?Tns7cEjn+$F!E2c5gN@Q-!\r
+@ToVrli6hVs.u@(8ORAP2-2n)?ELH\q>1-hrVu<RqYp0er%Id:rVcQllJ_bI;33O]\r
+D(-Q;2_f0j_=dj&s,r;J+rip*/l!N/1U=4"nF-,Hp\ash%/p5+qu?]nr;?E`o^`"N\r
+2?3[UnaH>9j7/q=Z5=<+-R1a'HC3@6oDJ=^s7u]pq>]jGs1l;!P`Vjl,WX2phu!6L\r
+r;6NnqYp<iqu6Tos8N#sr<WE$s8Musrr2rsrVZR^qYU0cqtp3]o^`%^rU'"@s8N&t\r
+rVufms6o@MSXQZ0,=bm7IY)pE5rrOrC6[l=s8VopYH#`B9k[C!A)5l)mHaK@p\k*k\r
+"m+k+s8W&sp&=jms8W&jp%/1_Idlgu\@0=a?$<cbg&LgHZ`;n<.:>S,EA/eDGAs)H\r
+o)Jags7c9Rp@deLrq$-hs8)`ppA=UWq>[1^dRQN\((4bg?)dbrs8W#sW1h*d/m'VQ\r
+;,^D;lK\EIrVu3Mnc&Ocs8Vl`mHFNDrqZ*aqXX["ZfO2$B0nY%/h(.Z)1Sgeq#BpP\r
+s)`4<@9mub[E/%4s7Z-arVZ]ppIG8`rT*&!s8W&lp\F^_s8W)ui83e<_:%8to)&1]\r
+P)cFg,X3@h3dPq6bJiZ3kl:\Zs8VurA79XB2b:Zqao)&9s8N&srVulorqcWkrr2os\r
+rr2oq#laf&rr)lrrr;fm:Ab"gqu$BgrVcWns8DZbq#($hs8N&urr;Z_rdK3Q/LO+J\r
+03BYI9<tVKq==Rcq#?/$W^&UQ,T]383`oZjErZ(;p%/4`rr<#ts6T+?rr4VDp%/4`\r
+qtp<cs8Vukq"k$is6T"Js8)c^jo8XgK,bRm1+QE_/Q]a!i;`]Ss8N#tEqKD3nbW.M\r
+q"aOZrqZKlpAFsjMMJW"0RFoUD1?W?r:U*co)HA-dnW5K0.'se3,7C-qZ$NonF,]C\r
+rUKpfpAb-gqt0dcqu?]ms7Pg[=]9N24_?E$>:h@'^:_norVts;o#o/,r;-HnrVuos\r
+s7GsWrr3/tq=j7BlMgfFio0)#rVu9Mqb'Ic8OZmdWP\>us8;Zl`PC>LCPs5O3BT6%\r
+Z`_O;k5Y>Rs8W&tp@\CUoC_nRp@S"Jrr*0#r;QTjrVZTlrr2rsrr2j%rr)lrrVulr\r
+s7uXgr;HTkrVcWns8D?Pli-n`rVZ]ame$,AqYL!eDJOV-"seM:ReH7Nhq7u/q#?;,\r
+Y?FkQ(D&WMDO9JBs&Dm5>?>e9nc.P(m/R%as8MusI.?aqrVlWgqXj^ap[%83s8N&u\r
+rVuBRs6]"LF)7+@9m.d&7V6%]q"+Obq>^*To)JOWs8;B]p?D;Em/?tVrVuH[p\8E5\r
+O=DAc,Sk9VI`_HVs7YmZb.QP+6#nh2D)j7ed)t_TrVuopo)J[Us8MZjqY:*fs8Vur\r
+s8",Cs82hsW4Nrd1*.K%2)J78YIji6s8W)uqtg?`nbMnOrVulsn*ffErrE#ss"aEF\r
+rVcWno'cT`=E/:qM6!Mlc,f&5k5YJXs7Gd[h:VL;AVD`c7m&b.M2%Mop&FaYqu6O$\r
+s8Vrqs7ZKmq#CBnr<<6!r;QZnqZ$Qorqm'$rVulqs8N#tq>Lg#rr2iprqufrrUojT\r
+rVq9Es7c6bqtg?iq>[e*_6pPljPKq.mJm4]s+5To69Afu'0fSrIFca?kMZBoeG(pV\r
+:Tph;q"=[NjnA]Os7Q'Zp@n.Xs8)6Tl2UeYq>0d_rVu<Pp\t'is8)c]jo<E=k(eMa\r
+\$FH^qu?Ncs7bpUs7Z3erqQNno`+sd<r`3nrVu<Zq"83+LaX?S,o:BZK?=&^s8Vfm\r
+e&:3+.:#(eI7H;RaM$d7o`+sjo)JaWs8DZalg4ZJs82?_oBl#Hrr;lmrG-7qKnl>9\r
+_:[u9mJm4`rr3B)rVuoss8W)uq"O^cs8MKdqD.j@qXX1Ps8;oFcK?Dn531T#s7u][\r
+jo>AWs8MfnmH=NLqZ#^:s,`2;)](+^00l\B[Job5s8VrUjk0V5nbDtIs8Vuqrr;oo\r
+rr)fls8N#sr!<<#s8N#trr2rnrX&N&s8DutrV#sWqu9(Snale[s8MusjQ#S+rVuil\r
+s82NiqXjf5F."3k75cf'E+kS16?/flaoD/9k2?:>q>^*Us8VurqY1$ap&FaXs7c6b\r
+rr38ro^`%^qt'IKrqh0Err;ces7Ps_s82iemf3=as8;Zlp[nLZo)Jaes8VoorV6'c\r
+r:g-dp\+@Op\F7Sr;L)/I5<?]2_8p=P0Emts8VurhpUjT/mCh)Jitc5X.[W2nGiOf\r
+qYTpMs8Dipr;Zfks8W#ss8Dlqs82E[n)<9gr;HZnrr;utrTORPiqiQFqYL!drrVQR\r
+mf*4fqtp?ks#'`PrquZns8Du]jn?3kbrdpdR?P+p\_X'Q_MX#F<`!goKVlc*iUcO<\r
+s82i1]?X2H>3"W+rqdK#na$5To_%tCq"jCXs8Drrs8DorrVcTmrr2op!ri3!m/I"a\r
+rr2oqrqoCcqu-Bfr;$0cq=t!]nGi+Ks,Di33&4Gc-r,26T]+W)NeXrF;LtjCcfO$`\r
+s7u]JeF_GEm`WZ-eC!FGl2Ue\s6T"Jp@SCbrr;uoD?'Y7lg3g'nE]W7n*oi;nF-#D\r
+pAFpgs8W&trr)lsrr;rorqH*Zp@S+YrVuoss6oCJf[f(</k$]p2B*AkWMIK/p&G'h\r
+s5`)/3&+5E$U#@>7#co%s8)cqr;Z`ls8W&tq=ad]o_\[fs8W)ss8Mp7qYL-\o(qS7\r
+mIg2Bs8Vfms7lKhpAb0inaZ)Ir]^5VrVulsp%8+)bL;rKVWHh/rVHP'??H5J).d0/\r
+*#1Xd,=s$t59:\&5<Dp&g@>1>s82Wlqtg?iqZ$KkrquZuqYgEhrVcW@rr2rsrr2lq\r
+r;QTjqH<XhrVl`poC2c=1JBAK7YQ>ep@&%Bh>d09s(Gi#ZE)UVp]#biShr)r<`3cq\r
+2GH(b99kUC]XQMmqu?9Ws6].Iq"O^ds8DutqY^<brr;Zks7lWoqZ$Torpg6\mIL;V\r
+s8Mcjq*k2Vq#10hs8W&tq"FaRl1]UPMf3E[Ch\:8_:%lAs7>d\l0%_`FGF^HL1aqI\r
+Y,TJ;p&Fj]s7Q!`s8Dutrr<#ts8N#trqQKerr)`orqm9+s829Skl(MUqYU!Yo^_nZ\r
+9(MNHnF-,?mJ*ri]d+aVWi*GnkPUL(Ug@5I-6PcN6u@3jR;$/b=As2a+#]4?T_\?^\r
+qt^9hqZ$Hhs8;for;?QmrVuips8DoraSu2;rqucmrVAnWrr;rsk2Z*gf]tCL8nVUb\r
+s7u]pq#CBhs8Vlo_Rnl:>(@k>5WCPs2`"4,UUnq#kY4WZ<)@AH^!uuUs8W&tp\+Uc\r
+ruh.5p](9js8Vr_mc`Tfg\Ug@s8Vuor;-Elr:BOMqYL!dr]C&UrqlQlrVZ]oqu?Qh\r
+s75[Yn*U#<l1Y/Us8W&ts8DutrVu0Hp%.\QkiM[9p&G'js8W&tq=ssfrVulp#QOi&\r
+s8W&ts8Ms!qt9XRrpO+`oC`"XrVQKjl07O*o(W1`s7#LMs8N&clh:AWs8W#ss8;oY\r
+iqJ7^RoN=#['7aPq>^$Qs1Z"uUn5Nnl2Ue[s8Vur;GUh]Lmd)Rkkk5Vqtg?jqu?Tl\r
+rr)fqqu+M5rr)`lr;0.cr;6Nmqu?Tjs3f6Q8k*/V5[N@$qs3ADh:MUdM6ABS80Js8\r
+?Wq^Squ?Qfs5Mo.jP]icI[;uL9!PP:s8;osrVuors6f:Gk2tn,ru(e6qt9[Qs8Vrl\r
+qt9LMm/R+^qYTsbs8)cqrV\AEq>:!_rVQHkrr)lrr;Zfrs8W)uo^hnJn+HDIqY9g_\r
+s8N&sr;Zcos8;corr)]n'E%e)s8Vuhp@7tTp&G'hs8Vurs82aos8W)uq=t!fqZ$To\r
+s4uGos8;o_kkjf6s8;]mgXkl_m/R+_s8Vrq:J,@d3EtY(s8Vopn*0lPq>^6]s7Pp^\r
+o^Mlj?up@-IK0<Hr;6Nlqu?TlrqQH/rq66hr)!4bqtKg]s8N&fmebGYi%ZfOe'I=Z\r
+qZ#g?s",Ti4#U,47V)&Vs6](Ns82irqu?]ns45Wa.jmT)EJW]6p](0kp[nLcr;Zfq\r
+s8Dlqp%8(XrtYG*q!d_?kPtSUs8Vlns7uQipA4[[rq[?)q>:$arqlQls8N&urr<#t\r
+s7Z0]rqn>Is8D]dp&G'jmHs67q"F=On*ol5rVlTks7uB_n+lhNs8Vlns7uHco_\O]\r
+rr,jnqu-9`q=XCXo^Vt]qu>pBr;ZZo`kpJNDMadGZJaL5f@'6WkPtSXs52N0eB[\S\r
+4_BY,Y4hAbnE^,LoDbVZ]:G@o5<M`6SZCT$k5YG\r;6Nnr;?L%qu-Kjrr2iprqucp\r
+r4i7.r<;ogo`+sirr5UirVu*Dnc/Oeh:h>tqu<Xl^cF>O/1<m5c053)s7Gg\r:p<U\r
+jSS&tqU*RO9h8kp:2JJ-mf3.`Mh\$dLniSNlKmd5qY:*bpAFpc(]XO4s8Vlgq<n:_\r
+q"adWp%InNqXjabqtp<jr;uQ\o`"R`q(M@2nc&Rbs8VrdoBl/Am/R+Zs8Vfms7Z6a\r
+n,<:Yr;Q<]p[@nQnbi@[s8Vurs8Drh;sNW8n*]iIrVuors7c-bo^Dgk[FO9mrENEJ\r
+*>^^i.SL]n2*3ZuC1N.,XjaDLci<e?YGfi/10^]O`r,T2p$r'3I$$c];g3A:g"56Y\r
+p\jIEnG`>"rVcWlrVQQmq>UEjrr;ips8DutrOVt7r;?Nfs8VrUj5Kt:CB"8/p](9l\r
+s7,OWmHOX32GJ+*K_"R2rqcZpqu?'Js8Dcns8)btVo]km3AN-`j4s[Q^#pac8g,*?\r
+A6sqbT>13ps8W#so^htVqY^BnqsNq;rr;`eq<mtNn,*%Vrr;imr;-Bjqu?]prqQTp\r
+s8MtGqu?]ns8Vrqs7lWop@e:Io_.M?p#ku@kk4]8p\F7Sr:L$hqZ$Tmk2tb$qY^Bm\r
+s8Musr;-HnrVulps7#FU[^".:0N(1u?*pc]s7u[W2Hi7&>>7V''Fll0$8)nu0.J5>\r
+.3hE&BoaJZ6Zd4-o'ZPGli-n\s2i=2q"F^kkN;.2rr;ui(]F=0rVlWkrqZQnqYpNk\r
+s8Vurs82irrP/@0rsSf(rq?BlpA4[Zqu$EeAb,Bbmd0]JrVu9Mq`6Z.:.o!dnGiI`\r
+s6T"Ls8;opq#B^Ds*T![%gXq3Cmb7ss%Pq,-66!=I^,rKe6H"'H?>J3h=gmHs8)Nj\r
+s8N&srVQWpqYL*\qu$*ds8)`pqYBs]qYL!ds8Mcos8W)sIf'0Fqt9[PnabuFs7Z<e\r
+nc/X]qu-$as7H?kpA+RUp%IqPqY9p`r;ZcrrVZ]_lhKi2qYpBlnEp7HRBSt?<\c7$\r
+^q/CE_rpmgs8VopX/3j&4'dSkU>",j]XQL4ClECON@lYO4#U+k-qG<p1Ljg6iSX&&\r
+rVuios8W)u!r2Nfrph!-s8Doqq>L<grr;fns7uZoqZ$Tms8Vurs8BS/E<#e7s7ZHl\r
+oDS^]r;HBeqt^*br;$-eq=jphrVrCVW*EJ?\[KQSpAap\s8W#siSF-cLT:[].jQ*-\r
+X/"7SXlM>iB2_BVY,("?i;[CqOVncqSs[1jqu<Fa[@<P_eC31Ps82irq#CBjp\=@Z\r
+rquZn!qZ$Vrr3&lo_/:arpLZoo'lJOp&G'gs8VrnrUomYn,NFas8Vuqo3^qQo)J^h\r
+s8DukoDe^_s68YC]=6.@JXiU2^N"(K*Z6t588A2#s7c'`q"+O]o`+URs*o?^3&=Ff\r
+g%>4;s7,LVoC)_1dckssMMHkQ@pjA9M3d>dnGiLfp\+O_qu?Zp*V8mmqYU!cs8)`p\r
+q>UEirr;fns8)`pqYpKlrr2i-rXf,+s8Vfms7H?kpAY*drVlWlr([(crVQHkp%81U\r
+o`'2\KP"b7`59mMdGM"([sE4W,T]>k&O;\D^uaAOK6jjN**@T/YOh#Yp$;WuBqQ@W\r
+6^!A8d)tc;2,c.Y7%^$Nrr*2lnEU#QqZ$Torp1[#q"jROpA=^ds8N&io(qS5mIToD\r
+s8N&nq"jXTpAXXer;?EYmHa`N@K-;tnbN4`s75XY`PU6+V7pSPIR#tt<`*jkJ>2#W\r
+s2)G,2_e;Q(HJk+cg9ipNesZgJY1iSp?_#CB4H73FG]>Iqu?Tos8;ognc/Xfs6o@O\r
+r;-HWkO8HMs8Dlqlg!s<r#Ph;rV?<_s8Vuqs7uZoq>UEirr;ios8)`or;Q]n\,I$<\r
+qu$*_r:0X]nbN%Pq"aRVp\"O[;"jVXq=sp^p&"aes4Go]:ek4=+>$>^=Vhc$4>pA]\r
+BU%rIs45Kq0.'m=%7FN&Nh`&lCLW\b-<i&J<lr5Hc,T3#,"=479@hPUrr)ldnF$2R\r
+Iduq#s8N&8^rqIcOl"mYs8Dunp](9ls7,RUY,o+F]#F^Ks8W)up%8+\rVu3Jp6V&>\r
+VPCSAE/.4^Am/2W/gs=e88PZ9dd?5tqXjgQjSs+2N%$#?5s/=Y>Br:h;Mp4$jP]e4\r
+r;Y'chE*\gJU`[Rp&FXSqX<kEs8N&b&F8icrr<#ts8W)unF-#?o(;k[(&dk#o)Jad\r
+rr;fns7uZoqYpNkrr2i#rY>A,qXjU[o(`%Pq"aOUq"+4Qo_/"Nrq8tVo_/=as5W,&\r
+o'uPUrr9^Fa,uFOWi*GP`oudNs8McmMhJ5O'0g)9MgBE;GAj'81h/X*@=EEqp[J3M\r
+Oh)8<2,Hnap@A7`rr;ueI/X$DqYC0krr;!9m;[#n(DJ6[O/2aMs8Mlpp[eEgX27"\\r
+:LIIKgtD&bnG`%Lrq?!am-4@bCk7CqS[5KC_S+e'pA\]2K+\SHKRTZqq>^Kjs8Vop\r
+Z`VP//PR6&2KEYmeBmO]qu?]ns68\Ap[nKRQ_Z`)7D?ISs8Musrq60g#k@HVp@e:S\r
+p%SIb(]XO6q>0dToBuYYqYpNjrr;ios8)`or;?Nus8N#trr2r/rY>A1rqucqqYpNk\r
+rr;inrVQQlqu-Kjrr)irIeNL1q=spgrr;fhrp]CNqtg?Xkk=oJs8Vop`kgUj02F;R\r
+9[h;RjPU!og%jX`rRK6aqt:!co`%BGAfV[NRZkDaqZ$Tos5rG.q=sshrVuors*oEW\r
+2DRiN,!1-pPkjtOp@/+LkPq]`asJ5t.3h8i?$Q#3s8W#sqtU3e8bW0o?[-m?OnnYL\r
+s7u]io)G)?Zm[+dARL&Xli5hpp[.5Fp$hurAVD*>3/iWjrqZT_li6VHs8W#sqY1$^\r
+o)EZIGC+Xdr;6Nnmf`[jrVuosqZ-HkrVQWoq%WW!p@n@RqYU!ds82fqqYpNkrr2in\r
+rXAi+rVulqs8Musrr2r&rXA`(rqucpr;Q]nrr2ips8;_Br;HQnr;6Norr<#ts8W&t\r
+md'oIoDao2UD4Ch<`<W$n,NFcs8W#ss8;ognGiOcs0SuS&.0sS4(6R\o^D)Fp@SCX\r
+o_SUds8MrrgXth">]WqDD)3e>CLr@hjo>5Ms8)?ed)krD2I\U!=r7l1ARTi+a4f_;\r
+q>^?lB4H<VBOcVnqZ$'Ns8Vrqe'@A=0MWr=4iY@ns82irr;Zfos/`*=-mD,l?\?hQ\r
+md'$8R[14`Xi02Tnc/Rfqt^9MhrXh8rVm0$r;-Hnqtp<cq#C?g&c;J$s8Vurs82Wg\r
+p&>!frr2inrX]&.rVulqs8Musrr)lrrr9Y1#lFMtqtp?hqu-*_rqcBhIfBB8mIK8q\r
+k5P>Zs8Dusqu=:=a)l?MY-#,&nb2t\s7,UOq"Oa\p&4phs,`57-mV$%Eg6:es6SqK\r
+n*L#QrVuT`s6JnEN/4*YJ"!sUeiGWk2D84L]&rhYs7Ym\`kLt(11bZJU.n*r-6bTt\r
+FbnAfiW&fTKn5\&?[D\G5QC$1s8;Wko'ZNd?$7>11RF?(s8;ooq>]jIrT2r:?s/(!\r
+&j'&fEcl;_+rraJ<Gq-drR0$Ms8Dutrr;NXp&=sslK[U5s82fpr;?6gq#:3hrt#).\r
+s8Dutqt0RNrr2iprqu]n&-)Y-s8MusrqufqrVulrs1818s8N#trr2rsrq-6irr2fo\r
+s8Mcpp\4L^rtGD3qYC-`oD\dgs8Muski_@3rVulhrr;ucIe`^7s8N&jo)E91F!Dbb\r
+GB/f;mf3=`s8W#ss8DuFcJRR9njPiLM1h])q>YYXRO&tJXejPEoDeILs2)A58O7=E\r
+bkSo^hDd>d,9JgbDN*<!p4@[`@U+BTnc/Xds7uBgqY1#CJWqc;5&+_Vmd0fGp](9l\r
+s8VurTUWP3*u-S$6="88IE9@]p@J=`qu?E`s8)Njn*]iIrVuK\p&=spqYL!es8Drs\r
+!rMlnqu7/uo^_PBn,3+[s8W&srquTk&-)Y-s8Musrr)lrrVulrs.oYkrV6Bes*jnC\r
+s8;cor;6Nlqu?Tks8;cor;6Nlqu?Qhs8W&t\[KNm&L9J!:>X^pp[eFNkPk&@s8W&t\r
+p@J<.F,UD.,Z@EY>ulPT8pMU!92\B-s7lWoq>]C,r%'3abK&Q9o`)Y:d46P3,900V\r
+;MA@TLLOJAs82igo)J[ds6]1DZ9>G+.OR8<2b_ZGirAuWs8N&urr;9JnYN%]]tD5G\r
+kO&'=rVulsn*]iHr;Z9To^;,;qtp?lrr;uss8;forr:aP$31#(s8N#trr2qbrr2ln\r
+r;6A?r;?Qlr;QWlrquZnr;6Nlqu?Tks8;`nr;-Hbnc-,,`]cIZ1bhCOJX3jTbQ%M?\r
+qt^9fp]%Cs^,\&GX/<n,QFrHA\R\s'(_Anp2Ibk.s75RWgt;-S1.B=*ebf1BqtU2i\r
+UVU#-INB5!1+?[E?]4jXs82Zmrr;ips8C=hce:*+59:^tX/NYtm.C/Nr;$0_s8Vu[\r
+l/_jDqZ$Top%@qUs8M?`rVl?snF6#Hr;Q`qs8Musr;6Hm!ri3!K)YB@qu?Zprqucm\r
+rqcWirqQ3bIfB9Bs8;cor;6Nlqu?]ps8W&to^`$t^!;h'Tj_8I2`+$9@WV><s8W&t\r
+<`<O0;eZ%$s8Vopm,e8e^Ze!D@m)_WccPMQqu?Has%,^\]=Gl[rr;]as7Pp^^q&Gs\r
+6?OCf927urins7klg=<9mf3=aq=suILmDsqJ],CQ!q,IKrr3Sumd0uRqtp<cs8Vur\r
+s8D<NlMgh_q>U?loF:E`p&+aes8N&trVuiorVlrurr7TLoD\ahqu6Tnrqucmqtg6h\r
+!;lTjIfKBFs8DlqrVZ]go_eFTs8W&ts8DutrVuWbs2;b%`l-:&qu>*lf0hr"dE^Y>\r
+mJlkKs5`&:s7u[V2-C@n.><;Dm-+KFpA\5q@Ag!(r;6Norr;oms8D]lUn,Of1gj3T\r
+DXZuhs8W&kq!IeLn,NCenF$2=kP4uOs7uHhrr3T)p\"F]pZ^u)nac)?p%._Dn,E@d\r
+rVlfqpC6iiq#10ks8N&trVuiorVlrurr7TLg\q]]rVQQmq>L9hrVcWlrVQNk*rl3;\r
+s7uHgs8N&urr;QZq=O7Vs8Dunp](0gs75aQrVn)@s8W&tna?GWqu?]ns6A_GMh\$-\r
+;/D\eXmG<Ks8Dt_PaVNc!W2cnq*4W=l0nZLs8VopdED!r^Y&DYrp&h0s8V]`pZhVO\r
+r;Z`qs8DutrVuWcqu?]ps8Vurs82K_nc&Rbs8W&ts8Drsrpp'frqd0$qY^?ls8W)u\r
+s8N&trVc`trr2qLrq$-drVQTfrtYM3s8)`pq>UEjrr;ios8)`or;Q]nrr)rsrVZ[+\r
+rr<#ts8W)us8N&urr;urrr3*!o(2;JruD%<s8Du[jRV?hoDeags8;o^kPFuIs8W&t\r
+s8N&tk=>.9n,E@]s8Vfms82HYs5r><rqcZpr;Zcqr;Zfgqu5j[s7--hrV-$bp%/4]\r
+qZ$Nms7uKbs8Vurs82irqu?]ns8W&ts8Drrrr)Zl$ig5*s8W)us8N&urr)iurr2qL\r
+rp'LSr>YY5s7uZop\t3grr;fns7uZoqYpNkrr2iqs8Dro%eTDer;?Qorr<#ts8W)u\r
+rqd!#s7u]pq"=@Mrq@6/rr<#ts8W&ts8DutrVufls82Zmp@\:]oJ-CGqYgEer;Q6J\r
+kgf_5o`"ghn*L#Qr;Zfqs6f@?qu5pOp"]TImJm4_s8N&rqZ$TprVmT1rqZEfpA"IU\r
+r;HEap[[tKo(r4Xrr2osrr2]m%fZG,s8N&urr;uss8N#tK)YB@qu?ZprqucmrqcQg\r
+*r#[6q>UEgrr;`ls7cNmq>UEirr;ios8)Qep](9lqu6imp%S:Xqu6U>o^q_Ss7lEe\r
+nGiO`rr;ilqu,mInc/Ugl0%X:r;ZWhs8;cmruCt8q#CBhn+#Q<s6fpemJ$JAs8N&t\r
+r;Z*Hq>'gbrs\W#s6Tdckl(PHp%InRrri<#q"Ogfr=o;3qu6WlqYU!ds82irqu?]p\r
+s8W&squ6Hbrso&,s8W)us8N&trr;uss1J=\r
+~>\r
+grestore\r
+currentdict /inputf undef\r
+currentdict /pstr undef\r
diff --git a/grbUNS.jpg b/grbUNS.jpg
new file mode 100644 (file)
index 0000000..00f0161
Binary files /dev/null and b/grbUNS.jpg differ
diff --git a/kodovi/BAFER.MOD b/kodovi/BAFER.MOD
new file mode 100755 (executable)
index 0000000..20552da
--- /dev/null
@@ -0,0 +1,56 @@
+MODULE Bafer;\r
+FROM RedOpsl1 IMPORT RedOpslTip, MakeNull, Empty, First, PopFirst, AddRear;\r
+FROM FIO IMPORT File,WrChar, Create, Close;\r
+IMPORT IO;\r
+\r
+CONST\r
+  ImeIzlaza = 'izlaz.txt';\r
+\r
+VAR\r
+  izlaz : File;\r
+  znak : CHAR;\r
+  buffer : RedOpslTip;\r
+\r
+PROCEDURE IsprazniBafer(VAR dat : File;\r
+                        VAR buf : RedOpslTip);\r
+VAR\r
+  znak : CHAR;\r
+  ok : BOOLEAN;\r
+BEGIN\r
+  WHILE NOT Empty(buf) DO\r
+    First(buf, znak, ok);\r
+    PopFirst(buf, ok);\r
+    WrChar(dat, znak)\r
+  END\r
+END IsprazniBafer;\r
+\r
+PROCEDURE BaferWrite(VAR dat : File;\r
+                     VAR buf : RedOpslTip;\r
+                     znak : CHAR);\r
+VAR\r
+  ok : BOOLEAN;\r
+BEGIN\r
+  AddRear(buf, znak, ok);\r
+  IF NOT ok THEN\r
+    IsprazniBafer(dat, buf);\r
+    AddRear(buf, znak, ok)\r
+  END\r
+END BaferWrite;\r
+\r
+BEGIN\r
+  izlaz := Create(ImeIzlaza);\r
+  MakeNull(buffer);\r
+  IO.WrStr('Unesite tekst, koji treba da se unese u datoteku ');\r
+  IO.WrStr(ImeIzlaza);\r
+  IO.WrChar('.');\r
+  IO.WrLn;\r
+  IO.WrStr('Unos zavrsite tackom.');\r
+  IO.WrLn;\r
+  znak := IO.RdChar();\r
+  WHILE znak # '.' DO\r
+    BaferWrite(izlaz, buffer, znak);\r
+    znak := IO.RdChar();\r
+  END;\r
+  IsprazniBafer(izlaz, buffer);\r
+  Close(izlaz)\r
+END Bafer.\r
diff --git a/kodovi/MaxNiza.MOD b/kodovi/MaxNiza.MOD
new file mode 100644 (file)
index 0000000..cd40678
--- /dev/null
@@ -0,0 +1,125 @@
+MODULE MaxNiza;\r
+FROM InOut IMPORT WriteString,ReadString,\r
+           WriteInt,WriteCard,WriteLn;\r
+FROM FIO IMPORT File, Open, Close, RdInt,EOF;\r
+FROM Str IMPORT Length;\r
+\r
+CONST\r
+  MaxN = 100;\r
+TYPE\r
+  Interval = [1..MaxN];\r
+VAR\r
+  X : ARRAY Interval OF INTEGER;\r
+  f: File;\r
+  N:CARDINAL;\r
+  ime : ARRAY [1..50] OF CHAR;\r
+  \r
+PROCEDURE MaxNiza3();\r
+(* Trece resenje: O(n^2). \r
+   Koristi pomocni niz u kome je na i-tom mestu\r
+   suma podniza x[1..i] *)\r
+VAR\r
+  Max, Suma : INTEGER;\r
+  d,g,i,Ood,Doo : Interval;\r
+  Pom : ARRAY [0..MaxN] OF INTEGER;\r
+  brojOp : CARDINAL;\r
+BEGIN\r
+  brojOp := 0;\r
+  Pom[0] := 0;\r
+  Ood := 1;\r
+  Doo := 1;\r
+  FOR i := 1 TO N DO\r
+    Pom[i] := Pom[i-1] + X[i];\r
+    INC(brojOp);\r
+  END;\r
+  Max := 0;\r
+  FOR d := 1 TO N DO\r
+    FOR g := d TO N DO\r
+      Suma := Pom[g] - Pom[d-1];\r
+      INC(brojOp);\r
+      IF Suma > Max THEN\r
+        Max := Suma;\r
+        Ood := d;\r
+        Doo := g\r
+      END\r
+    END\r
+  END;\r
+  WriteLn;\r
+  WriteString(' Maksimum je ');\r
+  WriteInt(Max,3);\r
+  WriteString(' u intervalu od ');\r
+  WriteCard(Ood,3);\r
+  WriteString(' do ');\r
+  WriteCard(Doo,3);\r
+  WriteLn;\r
+  WriteString('Broj racunskih operacija: ');\r
+  WriteCard(brojOp,1);\r
+  WriteLn;\r
+END MaxNiza3;\r
+  \r
+PROCEDURE MaxNiza4();\r
+(* Cetvrto resenje. Najbolje moguce: O(n)  *)\r
+VAR\r
+  Max, MaxDovde : INTEGER;\r
+  i,d,Ood,Doo : Interval;\r
+  brojOp : CARDINAL;\r
+BEGIN\r
+  Ood := 1;\r
+  Doo := 1;\r
+  brojOp := 0;\r
+  d := 1;\r
+  Max := 0;\r
+  MaxDovde := 0;\r
+  FOR i := 1 TO N DO\r
+    IF MaxDovde = 0 THEN\r
+      d := i\r
+    END;\r
+    MaxDovde := MaxDovde + X[i];\r
+    INC(brojOp);\r
+    IF MaxDovde < 0 THEN\r
+      MaxDovde := 0\r
+    END;\r
+    IF MaxDovde > Max THEN\r
+      Ood := d;\r
+      Doo := i;\r
+      Max := MaxDovde\r
+    END\r
+  END;\r
+  WriteLn;\r
+  WriteString(' Maksimum je ');\r
+  WriteInt(Max,3);\r
+  WriteString(' u intervalu od ');\r
+  WriteCard(Ood,3);\r
+  WriteString(' do ');\r
+  WriteCard(Doo,3);\r
+  WriteLn;\r
+  WriteString('Broj racunskih operacija: ');\r
+  WriteCard(brojOp,1);\r
+  WriteLn;\r
+END MaxNiza4;\r
+  \r
+BEGIN\r
+  WriteString('ime fajla?');\r
+  ReadString(ime);\r
+  IF Length(ime)= 0 THEN\r
+    ime := 'br1.txt';\r
+  END;\r
+  WriteString(' Unos niza X ');\r
+  WriteLn;\r
+  f := Open(ime);\r
+  N:=0;\r
+  EOF:=FALSE;\r
+  WHILE NOT EOF DO\r
+    INC(N);\r
+    X[N] := RdInt(f);\r
+    WriteCard(N,1);\r
+    WriteString(' - ');\r
+    WriteInt(X[N],1);\r
+    WriteLn;\r
+  END;\r
+  Close(f);\r
+  WriteString("metod 3");\r
+  MaxNiza3();\r
+  WriteString("metod 4");\r
+  MaxNiza4();\r
+END MaxNiza.
\ No newline at end of file
diff --git a/kodovi/MaxNiza4.MOD b/kodovi/MaxNiza4.MOD
new file mode 100644 (file)
index 0000000..1a2c664
--- /dev/null
@@ -0,0 +1,62 @@
+MODULE MaxNiza4;\r
+(* Cetvrto resenje. Najbolje moguce: O(n)  *)\r
+FROM InOut IMPORT WriteString,\r
+           WriteInt,WriteCard,WriteLn;\r
+FROM FIO IMPORT File, Open, Close, RdInt,EOF;\r
+CONST\r
+  MaxN = 10;\r
+TYPE\r
+  Interval = [1..MaxN];\r
+VAR\r
+  Max, MaxDovde : INTEGER;\r
+  i,d,Ood,Doo : Interval;\r
+  X : ARRAY Interval OF INTEGER;\r
+  f: File;\r
+  brojOp : CARDINAL;\r
+  N:CARDINAL;\r
+  \r
+BEGIN\r
+  WriteString(' Unos niza X ');\r
+  WriteLn;\r
+  brojOp := 0;\r
+  f := Open('br1.txt');\r
+  N:=0;\r
+  EOF:=FALSE;\r
+  WHILE NOT EOF DO\r
+    INC(N);\r
+    X[N] := RdInt(f);\r
+    WriteCard(N,1);\r
+    WriteString(' - ');\r
+    WriteInt(X[N],1);\r
+    WriteLn;\r
+  END;\r
+  Close(f);\r
+  Max := 0;\r
+  MaxDovde := 0;\r
+  FOR i := 1 TO N DO\r
+    IF MaxDovde = 0 THEN\r
+      d := i\r
+    END;\r
+    MaxDovde := MaxDovde + X[i];\r
+    INC(brojOp);\r
+    IF MaxDovde < 0 THEN\r
+      MaxDovde := 0\r
+    END;\r
+    IF MaxDovde > Max THEN\r
+      Ood := d;\r
+      Doo := i;\r
+      Max := MaxDovde\r
+    END\r
+  END;\r
+  WriteLn;\r
+  WriteString(' Maksimum je ');\r
+  WriteInt(Max,3);\r
+  WriteString(' u intervalu od ');\r
+  WriteCard(Ood,3);\r
+  WriteString(' do ');\r
+  WriteCard(Doo,3);\r
+  WriteLn;\r
+  WriteString('Broj racunskih operacija: ');\r
+  WriteCard(brojOp,1);\r
+  WriteLn;\r
+END MaxNiza4.
\ No newline at end of file
diff --git a/kodovi/QUEUEINFO.DEF b/kodovi/QUEUEINFO.DEF
new file mode 100755 (executable)
index 0000000..e89bec9
--- /dev/null
@@ -0,0 +1,9 @@
+DEFINITION MODULE QueueInfo;\r
+\r
+CONST\r
+  Maxqueue = 100;\r
+\r
+TYPE\r
+  InfoTip = CHAR;\r
+\r
+END QueueInfo.
\ No newline at end of file
diff --git a/kodovi/QUEUEINFO.MOD b/kodovi/QUEUEINFO.MOD
new file mode 100755 (executable)
index 0000000..745b340
--- /dev/null
@@ -0,0 +1,2 @@
+IMPLEMENTATION MODULE QueueInfo;\r
+END QueueInfo.\1a
\ No newline at end of file
diff --git a/kodovi/REDOPSL1.DEF b/kodovi/REDOPSL1.DEF
new file mode 100755 (executable)
index 0000000..71d2fb2
--- /dev/null
@@ -0,0 +1,21 @@
+DEFINITION MODULE RedOpsl1;\r
+FROM QueueInfo IMPORT InfoTip,Maxqueue;\r
+TYPE \r
+  Niz = ARRAY[1..Maxqueue] OF InfoTip;\r
+  RedOpslTip = RECORD\r
+        Prvi, Zadnji : CARDINAL;\r
+        Element : Niz\r
+  END;\r
+\r
+PROCEDURE MakeNull(VAR q : RedOpslTip);\r
+PROCEDURE Empty(VAR q : RedOpslTip) : BOOLEAN;\r
+PROCEDURE First(VAR q : RedOpslTip;\r
+                VAR x : InfoTip;\r
+                VAR ok : BOOLEAN);\r
+PROCEDURE PopFirst(VAR q : RedOpslTip;\r
+                   VAR ok : BOOLEAN);\r
+PROCEDURE AddRear(VAR q : RedOpslTip;\r
+                  x : InfoTip;\r
+                  VAR ok : BOOLEAN);\r
+\r
+END RedOpsl1.\r
diff --git a/kodovi/REDOPSL1.MOD b/kodovi/REDOPSL1.MOD
new file mode 100755 (executable)
index 0000000..1330bbf
--- /dev/null
@@ -0,0 +1,79 @@
+IMPLEMENTATION MODULE RedOpsl1;\r
+FROM QueueInfo IMPORT Maxqueue,InfoTip;\r
+\r
+PROCEDURE MakeNull(VAR q : RedOpslTip);\r
+BEGIN\r
+  WITH q DO\r
+    Prvi := 0;\r
+    Zadnji := 0\r
+  END\r
+END MakeNull;\r
+\r
+PROCEDURE Empty(VAR q : RedOpslTip) : BOOLEAN;\r
+BEGIN\r
+  RETURN q.Zadnji = 0\r
+END Empty;\r
+\r
+\r
+PROCEDURE First(VAR q : RedOpslTip;\r
+                VAR x : InfoTip;\r
+                VAR ok : BOOLEAN);\r
+BEGIN\r
+  IF Empty(q) THEN\r
+    ok := FALSE\r
+  ELSE\r
+    ok := TRUE;\r
+    WITH q DO\r
+      x := Element[Prvi]\r
+    END\r
+  END\r
+END First;\r
+\r
+PROCEDURE AddOne(i : CARDINAL) : CARDINAL;\r
+BEGIN\r
+  IF i = Maxqueue THEN\r
+    RETURN 1\r
+  ELSE\r
+    RETURN i+1\r
+  END\r
+END AddOne;\r
+\r
+PROCEDURE PopFirst(VAR q : RedOpslTip;\r
+                   VAR ok : BOOLEAN);\r
+BEGIN\r
+  IF Empty(q) THEN\r
+    ok := FALSE\r
+  ELSE\r
+    ok := TRUE;\r
+    WITH q DO\r
+      IF Prvi = Zadnji THEN\r
+        MakeNull(q)\r
+      ELSE\r
+        Prvi := AddOne(Prvi)\r
+      END\r
+    END\r
+  END\r
+END PopFirst;\r
+\r
+PROCEDURE AddRear(VAR q : RedOpslTip;\r
+                  x : InfoTip;\r
+                  VAR ok : BOOLEAN);\r
+BEGIN\r
+  WITH q DO\r
+    IF AddOne(Zadnji) = Prvi THEN\r
+      ok := FALSE\r
+    ELSE\r
+      ok := TRUE;\r
+      IF Empty(q) THEN\r
+        Prvi := 1;\r
+        Zadnji := 1\r
+      ELSE\r
+        Zadnji := AddOne(Zadnji)\r
+      END;\r
+      Element[Zadnji] := x\r
+    END\r
+  END\r
+END AddRear;\r
+\r
+END RedOpsl1.\r
+\r
diff --git a/kodovi/br10.txt b/kodovi/br10.txt
new file mode 100644 (file)
index 0000000..c753f3a
--- /dev/null
@@ -0,0 +1,10 @@
+1\r
+4\r
+2\r
+9\r
+3\r
+5\r
+-66\r
+7\r
+8\r
+10
\ No newline at end of file
diff --git a/kodovi/br100.txt b/kodovi/br100.txt
new file mode 100644 (file)
index 0000000..8515c77
--- /dev/null
@@ -0,0 +1,100 @@
+17
+52
+-5
+42
+29
+-35
+-25
+57
+-31
+-43
+5
+-11
+39
+24
+-9
+23
+-45
+49
+-16
+37
+3
+-43
+-32
+-3
+-46
+-16
+20
+15
+27
+-15
+31
+51
+20
+32
+-55
+-31
+54
+-56
+-47
+-1
+-57
+-56
+18
+-3
+-22
+-53
+-16
+-12
+-60
+55
+38
+37
+44
+35
+6
+47
+22
+9
+4
+40
+51
+-13
+-41
+36
+49
+2
+12
+51
+59
+-47
+40
+13
+-19
+56
+42
+-23
+-10
+36
+-52
+-37
+-15
+28
+4
+-53
+26
+47
+-45
+-14
+42
+-39
+-15
+56
+23
+12
+10
+9
+-45
+-13
+57
+-42
\ No newline at end of file
diff --git a/kodovi/br20.txt b/kodovi/br20.txt
new file mode 100644 (file)
index 0000000..897fdb1
--- /dev/null
@@ -0,0 +1,20 @@
+23
+-44
+35
+-10
+35
+-37
+-14
+22
+43
+-24
+47
+33
+-56
+-17
+16
+-11
+-39
+-11
+10
+38
\ No newline at end of file
diff --git a/kodovi/br30.txt b/kodovi/br30.txt
new file mode 100644 (file)
index 0000000..1fae25d
--- /dev/null
@@ -0,0 +1,30 @@
+-14
+3
+-44
+13
+-16
+16
+29
+-52
+-49
+39
+56
+22
+41
+-35
+-58
+-25
+-60
+-31
+-51
+20
+30
+-45
+38
+47
+-11
+43
+-31
+24
+-56
+-34
\ No newline at end of file
diff --git a/kodovi/br30b.txt b/kodovi/br30b.txt
new file mode 100644 (file)
index 0000000..7d56130
--- /dev/null
@@ -0,0 +1,30 @@
+15
+-34
+-7
+-28
+-22
+-1
+42
+32
+35
+56
+-54
+18
+-4
+-50
+-36
+8
+39
+-14
+-22
+51
+54
+7
+-33
+30
+58
+-43
+-11
+4
+-21
+-41
\ No newline at end of file
diff --git a/kodovi/izlaz.txt b/kodovi/izlaz.txt
new file mode 100644 (file)
index 0000000..86f6e2c
--- /dev/null
@@ -0,0 +1,4 @@
+novi tekst\r
+koji ko zna dokle ce da stinge ne?\r
+\r
+kk\r
diff --git a/kodovi/nizslog.MOD b/kodovi/nizslog.MOD
new file mode 100644 (file)
index 0000000..051680d
--- /dev/null
@@ -0,0 +1,122 @@
+MODULE nizslog;\r
+FROM InOut IMPORT WriteString, WriteLn, WriteCard,\r
+    ReadCard, ReadString;\r
+FROM FIO IMPORT File, Open, Create, Close, EOF,\r
+    RdItem, RdCard, WrStr, WrCard, WrLn;\r
+FROM Str IMPORT Compare;\r
+\r
+CONST\r
+    MaxStud = 100;\r
+TYPE\r
+    String = ARRAY[1..30] OF CHAR;\r
+    Student = RECORD\r
+        ime, prez: String;\r
+        god: CARDINAL;\r
+    END;\r
+    Studenti = ARRAY[1..MaxStud] OF Student;\r
+\r
+PROCEDURE UcitajF(fajl:String;\r
+          VAR spisak: Studenti; VAR n:CARDINAL);\r
+VAR\r
+    f:File;\r
+BEGIN\r
+    n:=0;\r
+    f:= Open(fajl);\r
+    EOF := FALSE;\r
+    WHILE NOT EOF DO\r
+        INC(n);\r
+        RdItem(f, spisak[n].prez);\r
+        RdItem(f, spisak[n].ime);\r
+        spisak[n].god := RdCard(f);\r
+    END;\r
+    Close(f);\r
+END UcitajF;\r
+\r
+PROCEDURE Ispisi(spisak:Studenti; n:CARDINAL);\r
+VAR\r
+    i: CARDINAL;\r
+BEGIN\r
+    FOR i:=1 TO n DO\r
+        WriteString(spisak[i].prez);\r
+        WriteString(" ");\r
+        WriteString(spisak[i].ime);\r
+        WriteString(" ");\r
+        WriteCard(spisak[i].god,1);\r
+        WriteLn;\r
+    END;\r
+END Ispisi;\r
+\r
+PROCEDURE IspisiF(fajl:String;\r
+          spisak:Studenti; n:CARDINAL);\r
+VAR\r
+    f:File;\r
+    i: CARDINAL;\r
+BEGIN\r
+    IF (n>0) AND (n<=MaxStud) THEN\r
+        f:=Create(fajl);\r
+        (* pravimo takav fajl da ne\r
+           postoji zadnji prazan red *)\r
+        FOR i:=1 TO n-1 DO\r
+            WrStr(f,spisak[i].prez);\r
+            WrStr(f," ");\r
+            WrStr(f,spisak[i].ime);\r
+            WrStr(f," ");\r
+            WrCard(f,spisak[i].god,1);\r
+            WrLn(f);\r
+        END;\r
+        WrStr(f,spisak[n].prez);\r
+        WrStr(f," ");\r
+        WrStr(f,spisak[n].ime);\r
+        WrStr(f," ");\r
+        WrCard(f,spisak[n].god,1);\r
+        Close(f);\r
+    END;\r
+END IspisiF;\r
+\r
+PROCEDURE NoviStudent(VAR spisak:Studenti; VAR n:CARDINAL);\r
+VAR\r
+    stud,temp:Student;\r
+    i:CARDINAL;\r
+    dodaj:BOOLEAN;\r
+BEGIN\r
+    IF n<MaxStud THEN\r
+        WriteString("Prezime novog studenta?");\r
+        ReadString(stud.prez);\r
+        WriteString("Ime novog studenta?");\r
+        ReadString(stud.ime);\r
+        WriteString("God. rodj. novog studenta?");\r
+        ReadCard(stud.god);\r
+        (* proverimo da li vec postoji *)\r
+        i:=1;\r
+        dodaj := TRUE;\r
+        WHILE (i<=n) AND dodaj DO\r
+            temp := spisak[i];\r
+            IF (temp.god = stud.god) &\r
+              (Compare(temp.prez,stud.prez)=0) &\r
+              (Compare(temp.ime,stud.ime)=0) THEN\r
+                dodaj:=FALSE;\r
+            END;\r
+            INC(i);\r
+        END;\r
+        IF dodaj THEN\r
+            INC(n);\r
+            spisak[n]:=stud;\r
+        ELSE\r
+            WriteString("podaci vec postoje!");\r
+        END;\r
+    ELSE\r
+        WriteString("popunjen kapacitet!");\r
+    END;\r
+END NoviStudent;\r
+\r
+VAR\r
+    spisak : Studenti;\r
+    fajl:String;\r
+    n:CARDINAL;\r
+BEGIN\r
+    fajl:="studenti.txt";\r
+    UcitajF(fajl, spisak, n);\r
+    Ispisi(spisak, n);\r
+    NoviStudent(spisak,n);\r
+    IspisiF(fajl, spisak, n);\r
+END nizslog.
\ No newline at end of file
diff --git a/kodovi/polinomi/POLINOML.DEF b/kodovi/polinomi/POLINOML.DEF
new file mode 100644 (file)
index 0000000..5b50bc1
--- /dev/null
@@ -0,0 +1,35 @@
+(* Modul za rad sa polinomima preko listi\r
+   verzija 2012, rev 1 *)\r
+DEFINITION MODULE PolinomL;\r
+TYPE\r
+  Polinom = POINTER TO Monom;\r
+  Monom = RECORD\r
+            k : REAL;\r
+            st : CARDINAL;\r
+            veza : Polinom\r
+          END;\r
+\r
+PROCEDURE Anuliraj(VAR p: Polinom);\r
+PROCEDURE Unos(VAR p: Polinom);\r
+PROCEDURE Stampaj(p: Polinom; d: CARDINAL);\r
+PROCEDURE Kopiraj(p: Polinom; \r
+                  VAR kopija: Polinom);\r
+PROCEDURE UbaciMonom(mon:Polinom; \r
+                     VAR p: Polinom);\r
+PROCEDURE PromeniZnak(VAR p: Polinom);\r
+PROCEDURE Saberi(p1, p2: Polinom; \r
+                 VAR zbir: Polinom);\r
+PROCEDURE SaberiNa(p: Polinom; VAR rez: Polinom);\r
+PROCEDURE Oduzmi(p1,p2: Polinom; \r
+                 VAR razlika: Polinom);\r
+PROCEDURE MonomPuta(p, mon: Polinom; \r
+                    VAR mp : Polinom);\r
+PROCEDURE Puta(p1, p2: Polinom; VAR pr: Polinom);\r
+PROCEDURE Kolicnik(p1, p2: Polinom;\r
+                   VAR kol, ost: Polinom;\r
+                   VAR ok : BOOLEAN);\r
+PROCEDURE PolinomNaN(p: Polinom; n: CARDINAL;\r
+                     VAR rez: Polinom);\r
+PROCEDURE DisposePolinom(VAR p: Polinom);\r
+\r
+END PolinomL.\r
diff --git a/kodovi/polinomi/POLINOML.MOD b/kodovi/polinomi/POLINOML.MOD
new file mode 100644 (file)
index 0000000..405e485
--- /dev/null
@@ -0,0 +1,289 @@
+(* Modul za rad sa polinomima preko listi\r
+   verzija 2012, rev 1 *)\r
+IMPLEMENTATION MODULE PolinomL;\r
+FROM InOut IMPORT Write, WriteString, WriteLn,\r
+           WriteCard, ReadCard, Done;\r
+FROM RealInOut IMPORT WriteReal, ReadReal;\r
+FROM Storage IMPORT ALLOCATE, DEALLOCATE;\r
+\r
+PROCEDURE Anuliraj(VAR p: Polinom);\r
+BEGIN\r
+  p := NIL;\r
+END Anuliraj;\r
+\r
+PROCEDURE Kopiraj(p: Polinom; VAR kopija: Polinom);\r
+VAR\r
+  pomocni: Polinom;\r
+BEGIN\r
+  IF p = NIL THEN\r
+    kopija := NIL\r
+  ELSE\r
+    NEW(kopija);\r
+    kopija^ := p^;\r
+    p := p^.veza;\r
+    pomocni := kopija;\r
+    WHILE p <> NIL DO\r
+      NEW(pomocni^.veza);\r
+      pomocni := pomocni^.veza;\r
+      pomocni^ := p^;\r
+      p := p^.veza\r
+    END\r
+  END\r
+END Kopiraj;\r
+\r
+PROCEDURE Stampaj(p: Polinom; d: CARDINAL);\r
+\r
+  PROCEDURE StampajMonom(m : Polinom);\r
+  BEGIN\r
+    WITH m^ DO\r
+      IF st <> 0 THEN\r
+        IF ABS(k) <> 1.0 THEN\r
+          WriteReal(ABS(k), d)\r
+        END;\r
+        Write('x');\r
+        IF st <> 1 THEN\r
+          Write('^');\r
+          WriteCard(st, 1)\r
+        END\r
+      ELSE\r
+        WriteReal(ABS(k), d)\r
+      END\r
+    END\r
+  END StampajMonom;\r
+\r
+BEGIN\r
+  IF p = NIL THEN\r
+    WriteReal(0., d)\r
+  ELSE\r
+    IF p^.k < 0.0 THEN\r
+      WriteString(' - ')\r
+    END;\r
+    StampajMonom(p);\r
+    p := p^.veza;\r
+    WHILE p <> NIL DO\r
+      IF p^.k > 0.0 THEN\r
+        WriteString(' + ')\r
+      ELSE\r
+        WriteString(' - ')\r
+      END;\r
+      StampajMonom(p);\r
+      p := p^.veza\r
+    END\r
+  END\r
+END Stampaj;\r
+\r
+PROCEDURE UbaciMonom(mon:Polinom; VAR p: Polinom);\r
+VAR\r
+  stari, tekuci, kopija: Polinom;\r
+BEGIN\r
+  IF mon # NIL THEN\r
+    NEW(kopija);\r
+    kopija^ := mon^;\r
+    tekuci := p;\r
+       stari := NIL;\r
+    WHILE (tekuci#NIL) AND (tekuci^.st>kopija^.st) DO\r
+      stari := tekuci;\r
+      tekuci := tekuci^.veza\r
+    END;\r
+    kopija^.veza := tekuci;\r
+    IF tekuci = p THEN\r
+      p := kopija\r
+    ELSE\r
+      stari^.veza := kopija\r
+    END;\r
+    IF (tekuci#NIL) AND (kopija^.st = tekuci^.st) THEN\r
+      kopija^.k := kopija^.k + tekuci^.k;\r
+      kopija^.veza := tekuci^.veza;\r
+      DISPOSE(tekuci);\r
+      IF kopija^.k = 0.0 THEN\r
+        IF p = kopija THEN\r
+          p := kopija^.veza\r
+        ELSE\r
+          stari^.veza := kopija^.veza\r
+        END;\r
+        DISPOSE(kopija)\r
+      END\r
+    END\r
+  END\r
+END UbaciMonom;\r
+\r
+PROCEDURE Unos(VAR p : Polinom);\r
+VAR\r
+  i, n: CARDINAL;\r
+  novi: Polinom;\r
+BEGIN\r
+  Anuliraj(p);\r
+  REPEAT\r
+    WriteLn;\r
+    WriteString('Unesite broj monoma n (n>=0) ');\r
+    ReadCard(n);\r
+  UNTIL Done;\r
+  WriteLn;\r
+  FOR i := 1 TO n DO\r
+    NEW(novi);\r
+    WITH novi^ DO\r
+      REPEAT\r
+        WriteString('Unesite koeficijent monoma br.');\r
+        WriteCard(i, 1);\r
+        WriteString(' (<> 0) ');\r
+        ReadReal(k);\r
+        WriteLn\r
+      UNTIL k <> 0.0;\r
+      REPEAT\r
+        WriteLn;\r
+        WriteString('Unesite eksponent monoma br.');\r
+        WriteCard(i, 1);\r
+        WriteString(' (>=0) ');\r
+        ReadCard(st);\r
+      UNTIL Done;\r
+      WriteLn;\r
+    END;\r
+    UbaciMonom(novi, p);\r
+    DISPOSE(novi);\r
+  END\r
+END Unos;\r
+\r
+PROCEDURE Saberi(p1, p2: Polinom; VAR zbir: Polinom);\r
+BEGIN\r
+  Kopiraj(p1, zbir);\r
+  WHILE p2 <> NIL DO\r
+    UbaciMonom(p2, zbir);\r
+    p2 := p2^.veza\r
+  END\r
+END Saberi;\r
+\r
+PROCEDURE SaberiNa(p: Polinom; VAR rez: Polinom);\r
+BEGIN\r
+  WHILE p <> NIL DO\r
+    UbaciMonom(p,rez);\r
+    p := p^.veza;\r
+  END;\r
+END SaberiNa;\r
+\r
+PROCEDURE PromeniZnak(VAR p: Polinom);\r
+VAR\r
+  t: Polinom;\r
+BEGIN\r
+  t := p;\r
+  WHILE t <> NIL DO\r
+    t^.k := - t^.k;\r
+    t := t^.veza\r
+  END\r
+END PromeniZnak;\r
+\r
+PROCEDURE Oduzmi(p1,p2: Polinom; VAR razlika: Polinom);\r
+BEGIN\r
+  Kopiraj(p2, razlika);\r
+  PromeniZnak(razlika);\r
+  WHILE p1 <> NIL DO\r
+    UbaciMonom(p1, razlika);\r
+    p1 := p1^.veza\r
+  END\r
+END Oduzmi;\r
+\r
+PROCEDURE MonomPuta(p, mon: Polinom; VAR mp: Polinom);\r
+VAR\r
+  tekuci: Polinom;\r
+BEGIN\r
+  Anuliraj(mp);\r
+  IF (mon <> NIL) AND (p <> NIL) THEN\r
+    NEW(mp);\r
+    mp^.k := p^.k * mon^.k;\r
+    mp^.st := p^.st + mon^.st;\r
+    p := p^.veza;\r
+    tekuci := mp;\r
+    WHILE p <> NIL DO\r
+      NEW(tekuci^.veza);\r
+      tekuci := tekuci^.veza;\r
+      tekuci^.k := p^.k * mon^.k;\r
+      tekuci^.st := p^.st + mon^.st;\r
+      p := p^.veza\r
+    END;\r
+    tekuci^.veza := NIL\r
+  END\r
+END MonomPuta;\r
+\r
+PROCEDURE Puta(p1, p2: Polinom; VAR pr: Polinom);\r
+VAR\r
+  pomocni: Polinom;\r
+BEGIN\r
+  Anuliraj(pr);\r
+  IF (p1 <> NIL) AND (p2 <> NIL) THEN\r
+    MonomPuta(p1, p2, pr);\r
+    p2 := p2^.veza;\r
+    WHILE p2 <> NIL DO\r
+      MonomPuta(p1, p2, pomocni);\r
+      REPEAT\r
+        UbaciMonom(pomocni, pr);\r
+        pomocni := pomocni^.veza\r
+      UNTIL pomocni = NIL;\r
+      p2 := p2^.veza\r
+    END\r
+  END\r
+END Puta;\r
+\r
+PROCEDURE Kolicnik(p1, p2: Polinom; VAR kol, ost: Polinom; VAR ok: BOOLEAN);\r
+\r
+  PROCEDURE Deli(VAR kol, ost: Polinom);\r
+  VAR\r
+    novi, pomocni: Polinom;\r
+  BEGIN\r
+    IF ost <> NIL THEN\r
+      IF ost^.st >= p2^.st THEN\r
+        NEW(novi);\r
+        novi^.k := - ost^.k / p2^.k;\r
+        novi^.st := ost^.st - p2^.st;\r
+        MonomPuta(p2, novi, pomocni);\r
+        Saberi(ost, pomocni, ost);\r
+        novi^.k := - novi^.k;\r
+        UbaciMonom(novi, kol);\r
+        DISPOSE(novi);\r
+        Deli(kol, ost)\r
+      END\r
+    END\r
+  END Deli;\r
+\r
+BEGIN (* Kolicnik *)\r
+  ok := TRUE;\r
+  Anuliraj(kol);\r
+  IF p2 = NIL THEN\r
+    ok := FALSE\r
+  ELSE\r
+    Kopiraj(p1, ost);\r
+    Deli(kol, ost)\r
+  END\r
+END Kolicnik;\r
+\r
+PROCEDURE PolinomNaN(p: Polinom; n: CARDINAL;\r
+                     VAR rez: Polinom);\r
+VAR\r
+  i: CARDINAL;\r
+BEGIN\r
+  IF n = 0 THEN\r
+    NEW(rez);\r
+    rez^.k := 1.0;\r
+    rez^.st := 0;\r
+    rez^.veza := NIL;\r
+  ELSIF n = 1 THEN\r
+       Kopiraj( p, rez );\r
+  ELSE\r
+    rez := p;\r
+    FOR i := 2 TO n DO\r
+      Puta(rez, p, rez)\r
+    END\r
+  END;\r
+END PolinomNaN;\r
+\r
+PROCEDURE DisposePolinom(VAR p: Polinom);\r
+VAR\r
+  pomocni: Polinom;\r
+BEGIN\r
+  pomocni := p;\r
+  WHILE pomocni # NIL DO\r
+    p := p^.veza;\r
+    DISPOSE(pomocni);\r
+    pomocni := p\r
+  END\r
+END DisposePolinom;\r
+\r
+END PolinomL.
\ No newline at end of file
diff --git a/kodovi/polinomi/PROCITAJME.TXT b/kodovi/polinomi/PROCITAJME.TXT
new file mode 100644 (file)
index 0000000..cbd917c
--- /dev/null
@@ -0,0 +1,20 @@
+Modul - polinomi preko listi:\r
+- POLINOML.DEF (definicioni modul)\r
+- POLINOML.MOD (implmentacioni modul) \r
+Primer koriscenja modula:\r
+- polinom.MOD\r
+\r
+Da bi se koristio modul u programu, potrebno je da kompajler\r
+moze da pronadje POLINOML MOD i DEF. Uz standardna\r
+podesavanja to znaci da treba da su oba fajla u istom\r
+folderu gde je i glavni program, tj u folderu projekta.\r
+Opciono se mogu smestiti u odgovarajuce MOD i DEF foldere u\r
+okviru projekta.\r
+\r
+Verzija 2012; rev 1\r
+-promena u Anuliraj da ne brise polinom ako je vec postojao,\r
+posto je pravilo probleme za mnozenje i stepenovanje.\r
+\r
+Materijal za kurs "Strukture podataka i algoritme 1"\r
+Katedra za racunarske nauke, DMI, PMF, UNS\r
+http://perun.dmi.rs
\ No newline at end of file
diff --git a/kodovi/polinomi/PolSuma.MOD b/kodovi/polinomi/PolSuma.MOD
new file mode 100644 (file)
index 0000000..1061398
--- /dev/null
@@ -0,0 +1,43 @@
+MODULE PolSuma;\r
+(* Napisati program koji ucitava broj k (1 <= k <= 50) i k polinoma, a nakon toga izracunava njihovu sumu *)\r
+\r
+FROM PolinomL IMPORT Polinom, Anuliraj, DisposePolinom,\r
+              Unos, Stampaj, SaberiNa;\r
+FROM InOut IMPORT WriteLn, WriteString, ReadCard, WriteCard;\r
+CONST\r
+  maxk = 50;\r
+TYPE\r
+  nizPol = ARRAY [1..maxk] OF Polinom;\r
+VAR\r
+  i, k: CARDINAL;\r
+  suma : Polinom;\r
+  p : nizPol;\r
+BEGIN\r
+  REPEAT\r
+    WriteString('Unesite broj k (1 <= k <= ');\r
+    WriteCard(maxk, 1);\r
+    WriteString(') ');\r
+    ReadCard(k);\r
+    WriteLn;\r
+  UNTIL (1 <= k) AND (k <= maxk);\r
+  FOR i := 1 TO k DO\r
+    WriteLn;\r
+    WriteString('Unos ');\r
+    WriteCard(i, 1);\r
+    WriteString('. polinoma.');\r
+    WriteLn;\r
+    Unos(p[i])\r
+  END;\r
+  Anuliraj(suma);\r
+  FOR i := 1 TO k DO\r
+    SaberiNa(p[i], suma)\r
+  END;\r
+  WriteLn;\r
+  WriteString('Njihova suma je:');\r
+  WriteLn;\r
+  Stampaj(suma, 4);\r
+  DisposePolinom(suma);\r
+  FOR i := 1 TO k DO\r
+    DisposePolinom(p[i]);\r
+  END;\r
+END PolSuma.\r
diff --git a/kodovi/polinomi/m2.mod b/kodovi/polinomi/m2.mod
new file mode 100644 (file)
index 0000000..6735e88
--- /dev/null
@@ -0,0 +1,49 @@
+MODULE m2;
+FROM PolinomL IMPORT Polinom, Stampaj, Anuliraj,
+              DisposePolinom, UbaciMonom, Unos, Puta,PolinomNaN;
+FROM InOut IMPORT WriteString, WriteLn;
+FROM Storage IMPORT ALLOCATE, DEALLOCATE;
+
+VAR
+  p,q,rez,pom : Polinom;
+
+BEGIN
+       (*sa ova dva ispod radi, bez real overflow*)
+       NEW(p);
+       p^.veza:=NIL;
+
+  Anuliraj(q); (* isto sto i q:=NIL; *)
+  NEW(pom);
+  pom^.st:=5;
+  pom^.k:=1.0;
+  UbaciMonom(pom,q);
+  DISPOSE(pom);
+  (* -3 x^4 *)
+  NEW(pom);
+  pom^.st := 4;
+  pom^.k := -3.0;
+  UbaciMonom(pom,q);
+  DISPOSE(pom);
+  (* 4 x *)    
+  NEW(pom);
+  pom^.st := 1;
+  pom^.k := 4.0;
+  UbaciMonom(pom,q);
+  DISPOSE(pom);
+  (* 7 (x^0) *)
+  NEW(pom);
+  pom^.st := 0;
+  pom^.k := 7.0;
+  UbaciMonom(pom,q);
+  DISPOSE(pom);
+  WriteString("q: ");
+  Stampaj(q,0);
+  WriteLn;
+  
+  Puta(q, q, rez);
+  (* odstampamo rezultat *)
+  WriteString("q*q: ");
+  Stampaj(rez,0);
+  WriteLn;
+  
+END m2.
diff --git a/kodovi/polinomi/mnozenje.MOD b/kodovi/polinomi/mnozenje.MOD
new file mode 100644 (file)
index 0000000..2072063
--- /dev/null
@@ -0,0 +1,72 @@
+MODULE mnozenje;\r
+FROM PolinomL IMPORT Polinom, Stampaj, Anuliraj,\r
+              DisposePolinom, UbaciMonom, Unos, Puta;\r
+FROM InOut IMPORT WriteString, WriteLn;\r
+FROM Storage IMPORT ALLOCATE, DEALLOCATE;\r
+\r
+VAR\r
+  p,q,rez,pom : Polinom;\r
+\r
+BEGIN\r
+  (* korisnik unosi prvi polinom *)\r
+  WriteString("Unesite polinom:");\r
+  WriteLn;\r
+  (*Unos(p);*)\r
+  \r
+  NEW(p);\r
+  p^.k:=1.;\r
+  p^.st:=2;\r
+  p^.veza:=NIL;\r
+    \r
+  WriteString("p: ");\r
+  Stampaj(p,0);\r
+  WriteLn;\r
+    \r
+  (* drugi polinom kreiramo mi, \r
+     monom po monom *)\r
+  Anuliraj(q); (* isto sto i q:=NIL; *)\r
+  (* formiramo monom x^5 *)\r
+  NEW(pom);\r
+  pom^.st:=5;\r
+  pom^.k:=1.0;\r
+  (* dodajemo ga u polinom *)\r
+  UbaciMonom(pom,q);\r
+  DISPOSE(pom);\r
+  (* -3 x^4 *)\r
+  NEW(pom);\r
+  pom^.st := 4;\r
+  pom^.k := -3.0;\r
+  UbaciMonom(pom,q);\r
+  DISPOSE(pom);\r
+  (* 4 x *)\r
+  NEW(pom);\r
+  pom^.st := 1;\r
+  pom^.k := 4.0;\r
+  UbaciMonom(pom,q);\r
+  DISPOSE(pom);\r
+  (* 7 (x^0) *)\r
+  NEW(pom);\r
+  pom^.st := 0;\r
+  pom^.k := 7.0;\r
+  UbaciMonom(pom,q);\r
+  DISPOSE(pom);\r
+  WriteString("q: ");\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+  \r
+  Puta(q, q, rez);\r
+  (* odstampamo rezultat *)\r
+  WriteString("q*q: ");\r
+  Stampaj(rez,0);\r
+  WriteLn;\r
+  \r
+  (*Puta(p, p, rez);\r
+  WriteString("p*p: ");\r
+  Stampaj(rez,0);\r
+  WriteLn;\r
+  *)\r
+  \r
+  DisposePolinom(p);\r
+  DisposePolinom(q);\r
+  DisposePolinom(rez);\r
+END mnozenje.\r
diff --git a/kodovi/polinomi/polinom.MOD b/kodovi/polinomi/polinom.MOD
new file mode 100644 (file)
index 0000000..3e46e54
--- /dev/null
@@ -0,0 +1,58 @@
+MODULE polinom;\r
+FROM PolinomL IMPORT Polinom, Stampaj, Anuliraj,\r
+              DisposePolinom, UbaciMonom, Unos, Saberi;\r
+FROM InOut IMPORT WriteString, WriteLn;\r
+FROM Storage IMPORT ALLOCATE, DEALLOCATE;\r
+\r
+VAR\r
+  p,q,rez,pom : Polinom;\r
+\r
+BEGIN\r
+  (* korisnik unosi prvi polinom *)\r
+  WriteString("Unesite polinom:");\r
+  WriteLn;\r
+  Unos(p);\r
+  (* drugi polinom kreiramo mi, \r
+     monom po monom *)\r
+  Anuliraj(q); (* isto sto i q:=NIL; *)\r
+  (* formiramo monom x^5 *)\r
+  NEW(pom);\r
+  pom^.st:=5;\r
+  pom^.k:=1.0;\r
+  (* dodajemo ga u polinom *)\r
+  UbaciMonom(pom,q);\r
+  DISPOSE(pom);\r
+  (* -3 x^4 *)\r
+  NEW(pom);\r
+  pom^.st := 4;\r
+  pom^.k := -3.0;\r
+  UbaciMonom(pom,q);\r
+  DISPOSE(pom);\r
+  (* 4 x *)\r
+  NEW(pom);\r
+  pom^.st := 1;\r
+  pom^.k := 4.0;\r
+  UbaciMonom(pom,q);\r
+  DISPOSE(pom);\r
+  (* 7 (x^0) *)\r
+  NEW(pom);\r
+  pom^.st := 0;\r
+  pom^.k := 7.0;\r
+  UbaciMonom(pom,q);\r
+  DISPOSE(pom);\r
+  (* saberemo polinome *)\r
+  Saberi(p, q, rez);\r
+  (* odstampamo rezultat i polinome *)\r
+  WriteString("p: ");\r
+  Stampaj(p,0);\r
+  WriteLn;\r
+  WriteString("q: ");\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+  WriteString("rez: ");\r
+  Stampaj(rez,0);\r
+  WriteLn;\r
+  DisposePolinom(p);\r
+  DisposePolinom(q);\r
+  DisposePolinom(rez);\r
+END polinom.\r
diff --git a/kodovi/polinomi/polinom2.mod b/kodovi/polinomi/polinom2.mod
new file mode 100644 (file)
index 0000000..ec8db12
--- /dev/null
@@ -0,0 +1,56 @@
+MODULE polinom2;
+FROM PolinomL IMPORT Polinom, Stampaj, Anuliraj,
+              DisposePolinom, UbaciMonom, Unos, Saberi;
+FROM InOut IMPORT WriteString, WriteLn;
+FROM Storage IMPORT ALLOCATE, DEALLOCATE;
+
+VAR
+  p,q,rez,pom : Polinom;
+
+BEGIN
+  Anuliraj(p);
+       NEW(p);
+       p^.st := 2;
+       p^.k := 1.0;
+       p^.veza := NIL;
+  Stampaj(p,0);
+  WriteLn;
+
+  Anuliraj(q); (* ovde isto sto i q:=NIL; *)
+  (* formiramo monom x^5 *)
+  NEW(pom);
+  pom^.st:=5;
+  pom^.k:=1.0;
+  (* dodajemo ga u polinom *)
+  UbaciMonom(pom,q);
+  DISPOSE(pom);
+  (* -3 x^4 *)
+  NEW(pom);
+  pom^.st := 4;
+  pom^.k := -3.0;
+  UbaciMonom(pom,q);
+  DISPOSE(pom);
+  (* 4 x *)
+  NEW(pom);
+  pom^.st := 1;
+  pom^.k := 4.0;
+  UbaciMonom(pom,q);
+  DISPOSE(pom);
+  (* 7 (x^0) *)
+  NEW(pom);
+  pom^.st := 0;
+  pom^.k := 7.0;
+  UbaciMonom(pom,q);
+  DISPOSE(pom);
+  (* saberemo polinome *)
+  Stampaj(q,0);
+  WriteLn;
+  
+  Saberi(q, q, q);
+  (* odstampamo rezultat *)
+  Stampaj(q,4);
+  WriteLn;
+  DisposePolinom(p);
+  DisposePolinom(q);
+  DisposePolinom(rez);
+END polinom2.
diff --git a/kodovi/polinomi/polinoml-debug.mod b/kodovi/polinomi/polinoml-debug.mod
new file mode 100644 (file)
index 0000000..255c539
--- /dev/null
@@ -0,0 +1,305 @@
+(*polinomL - debug verzija *)
+IMPLEMENTATION MODULE PolinomL;
+FROM InOut IMPORT Write, WriteString, WriteLn,
+           WriteCard, ReadCard, Done;
+FROM RealInOut IMPORT WriteReal, ReadReal;
+FROM Storage IMPORT ALLOCATE, DEALLOCATE;
+
+PROCEDURE Anuliraj(VAR p: Polinom);
+BEGIN
+(*  IF p # NIL THEN
+       DisposePolinom(p);
+  END;*)
+  p := NIL;
+       
+END Anuliraj;
+
+PROCEDURE Kopiraj(p: Polinom; VAR kopija: Polinom);
+VAR
+  pomocni: Polinom;
+BEGIN
+  IF p = NIL THEN
+    kopija := NIL
+  ELSE
+    NEW(kopija);
+    kopija^ := p^;
+    p := p^.veza;
+    pomocni := kopija;
+    WHILE p <> NIL DO
+      NEW(pomocni^.veza);
+      pomocni := pomocni^.veza;
+      pomocni^ := p^;
+      p := p^.veza
+    END
+  END
+END Kopiraj;
+
+PROCEDURE Stampaj(p: Polinom; d: CARDINAL);
+
+  PROCEDURE StampajMonom(m : Polinom);
+  BEGIN
+    WITH m^ DO
+      IF st <> 0 THEN
+        IF ABS(k) <> 1.0 THEN
+          WriteReal(ABS(k), d)
+        END;
+        Write('x');
+        IF st <> 1 THEN
+          Write('^');
+          WriteCard(st, 1)
+        END
+      ELSE
+        WriteReal(ABS(k), d)
+      END
+    END
+  END StampajMonom;
+
+BEGIN
+  IF p = NIL THEN
+    WriteReal(0., d)
+  ELSE
+    IF p^.k < 0.0 THEN
+      WriteString(' - ')
+    END;
+    StampajMonom(p);
+    p := p^.veza;
+    WHILE p <> NIL DO
+      IF p^.k > 0.0 THEN
+        WriteString(' + ')
+      ELSE
+        WriteString(' - ')
+      END;
+      StampajMonom(p);
+      p := p^.veza
+    END
+  END
+END Stampaj;
+
+PROCEDURE UbaciMonom(mon:Polinom; VAR p: Polinom);
+VAR
+  stari, tekuci, kopija: Polinom;
+BEGIN
+  WriteString("um ( ");
+  IF mon # NIL THEN
+    NEW(kopija);
+    kopija^ := mon^;
+    tekuci := p;
+       stari := NIL;
+    WHILE (tekuci#NIL) AND (tekuci^.st>kopija^.st) DO
+      stari := tekuci;
+      tekuci := tekuci^.veza
+    END;
+    kopija^.veza := tekuci;
+    IF tekuci = p THEN
+      p := kopija
+    ELSE
+      stari^.veza := kopija
+    END;
+    IF (tekuci#NIL) AND (kopija^.st = tekuci^.st) THEN
+      kopija^.k := kopija^.k + tekuci^.k;
+      kopija^.veza := tekuci^.veza;
+      DISPOSE(tekuci);
+      IF kopija^.k = 0.0 THEN
+        IF p = kopija THEN
+          p := kopija^.veza
+        ELSE
+          stari^.veza := kopija^.veza
+        END;
+        DISPOSE(kopija)
+      END
+    END
+  END;
+               WriteString("um ) ");
+END UbaciMonom;
+
+PROCEDURE Unos(VAR p : Polinom);
+VAR
+  i, n: CARDINAL;
+  novi: Polinom;
+BEGIN
+  Anuliraj(p);
+  REPEAT
+    WriteLn;
+    WriteString('Unesite broj monoma n (n>=0) ');
+    ReadCard(n);
+  UNTIL Done;
+  WriteLn;
+  FOR i := 1 TO n DO
+    NEW(novi);
+    WITH novi^ DO
+      REPEAT
+        WriteString('Unesite koeficijent monoma br.');
+        WriteCard(i, 1);
+        WriteString(' (<> 0) ');
+        ReadReal(k);
+        WriteLn
+      UNTIL k <> 0.0;
+      REPEAT
+        WriteLn;
+        WriteString('Unesite eksponent monoma br.');
+        WriteCard(i, 1);
+        WriteString(' (>=0) ');
+        ReadCard(st);
+      UNTIL Done;
+      WriteLn;
+    END;
+    UbaciMonom(novi, p);
+    DISPOSE(novi);
+  END
+END Unos;
+
+PROCEDURE Saberi(p1, p2: Polinom; VAR zbir: Polinom);
+BEGIN
+  Kopiraj(p1, zbir);
+  WHILE p2 <> NIL DO
+    UbaciMonom(p2, zbir);
+    p2 := p2^.veza
+  END
+END Saberi;
+
+PROCEDURE SaberiNa(p: Polinom; VAR rez: Polinom);
+BEGIN
+  WHILE p <> NIL DO
+    UbaciMonom(p,rez);
+    p := p^.veza;
+  END;
+END SaberiNa;
+
+PROCEDURE PromeniZnak(VAR p: Polinom);
+VAR
+  t: Polinom;
+BEGIN
+  t := p;
+  WHILE t <> NIL DO
+    t^.k := - t^.k;
+    t := t^.veza
+  END
+END PromeniZnak;
+
+PROCEDURE Oduzmi(p1,p2: Polinom; VAR razlika: Polinom);
+BEGIN
+  Kopiraj(p2, razlika);
+  PromeniZnak(razlika);
+  WHILE p1 <> NIL DO
+    UbaciMonom(p1, razlika);
+    p1 := p1^.veza
+  END
+END Oduzmi;
+
+PROCEDURE MonomPuta(p, mon: Polinom; VAR mp: Polinom);
+VAR
+  tekuci: Polinom;
+BEGIN
+  WriteString("mp [ ");
+  Anuliraj(mp);
+  IF (mon <> NIL) AND (p <> NIL) THEN
+    NEW(mp);
+    mp^.k := p^.k * mon^.k;
+    mp^.st := p^.st + mon^.st;
+    p := p^.veza;
+    tekuci := mp;
+    WHILE p <> NIL DO
+      WriteString("mp w {");
+      WriteReal(p^.k,0);
+      WriteCard(p^.st,5);
+      WriteString("} ");
+WriteLn;
+      NEW(tekuci^.veza);
+      tekuci := tekuci^.veza;
+      tekuci^.k := p^.k * mon^.k;
+      tekuci^.st := p^.st + mon^.st;
+      p := p^.veza
+    END;
+    tekuci^.veza := NIL
+  END;
+    WriteString("mp ] ");
+END MonomPuta;
+
+PROCEDURE Puta(p1, p2: Polinom; VAR pr: Polinom);
+VAR
+  pomocni: Polinom;
+BEGIN
+  WriteString("puta ");
+WriteInt(p1,0);
+  Anuliraj(pr);
+  IF (p1 <> NIL) AND (p2 <> NIL) THEN
+    MonomPuta(p1, p2, pr);
+    p2 := p2^.veza;
+    WHILE p2 <> NIL DO
+      MonomPuta(p1, p2, pomocni);
+      WriteString(" puta posle mp2+ ");
+      WriteLn;
+      REPEAT
+        UbaciMonom(pomocni, pr);
+        pomocni := pomocni^.veza
+      UNTIL pomocni = NIL;
+      p2 := p2^.veza
+    END
+  END
+END Puta;
+
+PROCEDURE Kolicnik(p1, p2: Polinom; VAR kol, ost: Polinom; VAR ok: BOOLEAN);
+
+  PROCEDURE Deli(VAR kol, ost: Polinom);
+  VAR
+    novi, pomocni: Polinom;
+  BEGIN
+    IF ost <> NIL THEN
+      IF ost^.st >= p2^.st THEN
+        NEW(novi);
+        novi^.k := - ost^.k / p2^.k;
+        novi^.st := ost^.st - p2^.st;
+        MonomPuta(p2, novi, pomocni);
+        Saberi(ost, pomocni, ost);
+        novi^.k := - novi^.k;
+        UbaciMonom(novi, kol);
+        DISPOSE(novi);
+        Deli(kol, ost)
+      END
+    END
+  END Deli;
+
+BEGIN (* Kolicnik *)
+  ok := TRUE;
+  Anuliraj(kol);
+  IF p2 = NIL THEN
+    ok := FALSE
+  ELSE
+    Kopiraj(p1, ost);
+    Deli(kol, ost)
+  END
+END Kolicnik;
+
+PROCEDURE PolinomNaN(p: Polinom; n: CARDINAL;
+                     VAR rez: Polinom);
+VAR
+  i: CARDINAL;
+BEGIN
+  IF n = 0 THEN
+    NEW(rez);
+    rez^.k := 1.0;
+    rez^.st := 0;
+    rez^.veza := NIL;
+  ELSIF n = 1 THEN
+       Kopiraj( p, rez );
+  ELSE
+    rez := p;
+    FOR i := 2 TO n DO
+      Puta(rez, p, rez)
+    END
+  END;
+END PolinomNaN;
+
+PROCEDURE DisposePolinom(VAR p: Polinom);
+VAR
+  pomocni: Polinom;
+BEGIN
+  pomocni := p;
+  WHILE pomocni # NIL DO
+    p := p^.veza;
+    DISPOSE(pomocni);
+    pomocni := p
+  END
+END DisposePolinom;
+
+END PolinomL.
\ No newline at end of file
diff --git a/kodovi/studenti.txt b/kodovi/studenti.txt
new file mode 100644 (file)
index 0000000..6105e56
--- /dev/null
@@ -0,0 +1,6 @@
+Prezime Ime 1980\r
+Dva Tri 4\r
+a b 2\r
+alfa beta 3\r
+4 4 0\r
+ha hhha 13
\ No newline at end of file
diff --git a/skripta-spa1.tex b/skripta-spa1.tex
new file mode 100644 (file)
index 0000000..44efda8
--- /dev/null
@@ -0,0 +1,2950 @@
+% skripta-spa1.tex
+% Skripta za predmet Strukture podataka i algoritmi 1, DMI, PMF, NS
+
+\documentclass[a4paper,twoside]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}%definišemo da je ulaz utf-8 fajl
+
+% osnovne informacije koje ce se prikazati na naslovnoj strani,
+% kao i u informacijama u generisanom pdfu
+\newcommand{\autor}{Vladimir Kurbalija, Milos Radovanovic, Doni Pracner}
+\newcommand{\naslov}{Skripta za vezbe iz predmeta strukture podataka
+  i algoritmi 1} 
+\newcommand{\datum}{April 2012, Novi Sad}
+\newcommand{\verzija}{ver 12b}
+%sc=single-column
+\usepackage[serbian]{babel}
+\usepackage{fancyhdr}
+\pagestyle{fancy}
+
+\title{\naslov -- \verzija}
+\author{\autor}
+\date{\datum}
+
+%change the default font
+\usepackage{lmodern}
+\renewcommand{\familydefault}{\sfdefault}
+
+\usepackage{pifont}
+
+%podesavanja outputa za pdf verzije
+\usepackage[bookmarks,pdffitwindow=false,unicode=true,%
+pdftitle={\naslov -- \verzija},%
+pdfauthor={\autor}%
+]{hyperref}
+
+\usepackage{graphicx}
+\usepackage{listings}
+\usepackage{amsthm}
+\usepackage{amsmath}
+\usepackage{latexsym}
+\usepackage{multicol}
+
+%margine
+%experiment 
+%\usepackage[top=2.5cm, bottom=1.5cm, left=3cm, right=2cm]{geometry}
+%staro: 
+\usepackage[top=1.5cm, bottom=1cm, left=2cm, right=1cm]{geometry}
+
+\begin{document}
+
+%customize the itemize environments
+
+\let\olditemize=\itemize
+\def\itemize{
+\olditemize
+  \setlength{\itemsep}{1pt}
+  \setlength{\parskip}{0pt}
+  \setlength{\parsep}{0pt}
+  \setlength{\topsep}{-1cm}
+  \setlength{\partopsep}{1pt}
+}
+
+%% ovi redovi daju header i footer
+
+\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
+\fancyhf{} % delete current setting for header and footer
+%\fancyfoot[C]{\thepage}
+\fancyhead[LO]{\bfseries\rightmark}
+\fancyhead[RO]{\thepage}
+\fancyhead[RE]{Strukture podataka i algoritmi 1 -- skripta}
+\fancyhead[LE]{\thepage}
+\renewcommand{\headrulewidth}{0.5pt}
+\renewcommand{\headwidth}{\textwidth}
+%\renewcommand{\footrulewidth}{0.5pt}
+%\addtolength{\headheight}{0.5pt} % make space for the rule
+\fancypagestyle{plain}{%
+\fancyhead{} % get rid of headers on plain pages
+\fancyfoot{}
+\renewcommand{\headrulewidth}{0pt} % and the line
+\renewcommand{\footrulewidth}{0pt} % and the line
+}
+\renewcommand{\headheight}{15pt}
+
+%promene u marginama:
+%\setlength{\marginparwidth}{32pt}
+%\setlength{\textwidth}{620pt}
+%\setlength{\textheight}{620pt}
+
+
+%% specijalni blokovi koji služe kao podsetnici u radu ili napomene
+\newcommand{\skica}[1]{
+    \noindent \framebox{\parbox[c]{0.9\textwidth}{  {\small** \textit{#1}  }}
+    \newline }
+}
+
+\newcommand{\skicas}[1]{
+    \framebox{* \textit{#1} *}
+}
+
+%boldovane skice visokog prioriteta
+\newcommand{\skicab}[1]{
+  \noindent \framebox{\parbox[c]{0.9\textwidth}{ {\small***
+        \textbf{#1} }} \newline } }
+
+\newcommand{\kod}[1]{{\small\texttt{#1}}}
+
+% ako je sledeci red odkomentarisan nista od skica nece biti ispisano
+% u finalni dokument
+
+% \renewcommand{\skica}[1]{}
+
+% title u skladu sa uobičajenim na Departmanu
+\newcommand{\makemytitle}{
+  \begin{center}
+       \makebox{%
+       \includegraphics[width=2cm]{grbPMF} 
+       \parbox[b]{65ex}{\centering 
+               Univerzitet u Novom Sadu\\
+                Prirodno-matematički fakultet\\
+                Departman za matematiku i informatiku}
+       \includegraphics[width=2cm]{grbUNS}
+       }
+       \vspace{10ex} 
+
+       \parbox[b]{\textwidth}{{\Large {\bf 
+              Vladimir Kurbalija, \href{mailto:kurba@dmi.rs}{kurba@dmi.rs}\\ 
+              Miloš Radovanović, \href{mailto:radacha@dmi.rs}{radacha@dmi.rs}\\ 
+              Doni Pracner, \href{mailto:doni.pracner@dmi.rs}{doni.pracner@dmi.rs}}}}
+       \vspace{5ex}
+       
+        {\Large {\bf Skripta za vežbe iz predmeta }} 
+        
+        {\Huge {\bf
+            \setlength{\baselineskip}{1.5\baselineskip}Strukture
+              podataka i algoritmi 1}}
+                       
+       \vspace{5ex}
+       %\vfill
+
+       \verzija \ -- \datum
+       
+       \end{center}
+       \thispagestyle{plain}
+%      \newpage
+}
+
+\makemytitle
+
+% theorems, definition etc.
+%''''''''''''''''''''''''''
+
+\theoremstyle{definition}
+\newtheorem{def1}{Definicija}
+\theoremstyle{plain}
+\newtheorem{theo}{Teorema}
+\newtheorem{lema}{Lema}
+
+\lstloadlanguages{Modula-2}
+
+\lstset{
+       basicstyle=\footnotesize\ttfamily,
+        showstringspaces=false,
+       breaklines=true
+}
+
+\lstdefinestyle{codeblock}{
+       basicstyle=\footnotesize,
+        keywordstyle=\textbf,
+        columns=[l]fixed,
+        breakatwhitespace=true,
+%        prebreak=\P,
+%        postbreak=\ding{229}\space,
+        language=Modula-2
+}
+
+\lstdefinestyle{numcodeblock}{
+  style=codeblock,
+  numbers=left
+}
+
+\lstnewenvironment{codeblock}{\lstset{style=codeblock}}{}
+
+% ----------------==================--------------------------------------
+%                 Pravi pocetak rada
+
+
+Programi u ovoj skripti su testirani sa kompajlerom 'Native XDS Modula
+2' sa instaliranim dodatnim paketom TSCP (Top Speed Compatibility
+Pack), potrebnim za neke od modula koji se ne nalaze u ISO standardu
+Module 2.
+
+\tableofcontents
+
+\newpage
+
+\begin{multicols}{2}
+\section{Ilustracija efikasnosti algoritma}
+
+\subsection{Zadatak: Pronaći sve pitagorine
+trojke do zadate granice}
+
+
+\begin{lstlisting}[style=codeblock]
+MODULE Trojke1;
+(* Pitagorine trojke koriscenjem "Brute-force" *)
+FROM InOut IMPORT WriteString, WriteLn, WriteCard;
+CONST
+  Gr = 100;
+VAR
+  a, b, c : [1 .. Gr];
+BEGIN
+  FOR a := 1 TO Gr DO
+    FOR b := 1 TO Gr DO
+      FOR c := 1 TO Gr DO
+        IF a*a + b*b = c*c THEN
+          WriteLn;
+          WriteString('a = ');
+          WriteCard(a,2);
+          WriteString(', b = ');
+          WriteCard(b,2);
+          WriteString(', c = ');
+          WriteCard(c,2)
+        END
+      END
+    END
+  END
+END Trojke1.
+\end{lstlisting}
+
+\begin{codeblock}
+MODULE Trojke2;
+(*Pitagorine trojke koriscenjem zaokrugljivanja*)
+FROM InOut IMPORT WriteString, WriteLn, WriteCard;
+FROM MathLib0 IMPORT sqrt;
+CONST
+  Gr = 100;
+VAR
+  a, b, c : CARDINAL;
+  creal : REAL;
+BEGIN
+  FOR a := 1 TO Gr DO
+    FOR b := 1 TO Gr DO
+      creal := FLOAT(a*a) + FLOAT(b*b);
+      creal := sqrt(creal);
+      c := TRUNC(creal);
+      IF creal = FLOAT(c) THEN
+        WriteLn;
+        WriteString(' a = ');
+        WriteCard(a,2);
+        WriteString(', b = ');
+        WriteCard(b,2);
+        WriteString(', c = ');
+        WriteCard(c,2)
+      END
+    END
+  END
+END Trojke2.
+\end{codeblock}
+
+\begin{codeblock}
+MODULE Trojke3;
+(* Pitagorine trojke koriscenjem teoreme *)
+FROM InOut IMPORT WriteString, WriteLn, WriteCard;
+CONST
+  Gr = 10;
+VAR
+  a, b, c, m, n : CARDINAL;
+BEGIN
+  FOR m := 1 TO Gr DO
+    FOR n := 1 TO m-1 DO
+      a := 2*m*n;
+      b := m*m - n*n;
+      c := m*m + n*n;
+      WriteLn;
+      WriteString('a = ');
+      WriteCard(a,2);
+      WriteString(', b = ');
+      WriteCard(b,2);
+      WriteString(', c = ');
+      WriteCard(c,2)
+    END
+  END
+END Trojke3.
+\end{codeblock}
+
+\begin{codeblock}
+MODULE Trojke4;
+(* Pitagorine trojke kod kojih je razlika
+   izmedju katete i hipotenuze tacno 1 *)
+FROM InOut IMPORT WriteString, WriteLn, WriteCard;
+CONST
+  Gr = 10;
+VAR
+  a, b, c, m, n : CARDINAL;
+BEGIN
+  FOR m := 2 TO Gr DO
+    n := m - 1;
+    a := 2*m*n;
+    b := m*m - n*n;
+    c := m*m + n*n;
+    WriteLn;
+    WriteString('a = ');
+    WriteCard(a,2);
+    WriteString(', b = ');
+    WriteCard(b,2);
+    WriteString(', c = ');
+    WriteCard(c,2)
+  END
+END Trojke4.
+\end{codeblock}
+
+\begin{lstlisting}[style=codeblock]
+MODULE Trojke5;
+(* Pitagorine trojke kod kojih je razlika 
+   izmedju kateta jedan *)
+FROM InOut IMPORT WriteString, WriteLn, WriteCard;
+CONST
+  Gr = 7;
+VAR
+  a, b, c, m, n, w, i, temp : CARDINAL;
+BEGIN
+  w := 1;
+  n := 0;
+  FOR i := 1 TO Gr DO
+    m := n + w;
+    a := 2*m*n;
+    b := m*m - n*n;
+    c := m*m + n*n;
+    WriteLn;
+    WriteString('a = ');
+    WriteCard(a,2);
+    WriteString(', b = ');
+    WriteCard(b,2);
+    WriteString(', c = ');
+    WriteCard(c,2);
+    temp := w;
+    w := 3*w + 4*n;
+    n := 2*temp + 3*n
+  END
+END Trojke5.
+\end{lstlisting}
+
+
+\subsection[Zadatak: Maksimalna suma susednih elemenata u
+nizu]{Zadatak: Maksimalna suma proizvoljnog broja susednih elemenata u
+  nizu celih brojeva}
+
+\begin{lstlisting}[style=codeblock]
+MODULE MaxNiza1;
+(* Prvo resenje. Brute Force: O(n^3)  *)
+FROM InOut IMPORT WriteString,ReadInt,
+           WriteInt,WriteCard,WriteLn;
+CONST
+  N = 10;
+TYPE
+  Interval = [1..N];
+VAR
+  Max, Suma : INTEGER;
+  d,g,i,Ood,Doo : Interval;
+  X : ARRAY Interval OF INTEGER;
+BEGIN
+  WriteString(' Unesite niz X ');
+  WriteLn;
+  FOR i := 1 TO N DO
+    ReadInt(X[i]);
+    WriteLn
+  END;
+  Max := 0;
+  FOR d := 1 TO N DO
+    FOR g := 1 TO N DO
+      Suma := 0;
+      FOR i := d TO g DO
+        Suma := Suma + X[i]
+      END;
+      IF Suma > Max THEN
+        Max := Suma;
+        Ood := d;
+        Doo := g
+      END
+    END
+  END;
+  WriteLn;
+  WriteString(' Maksimum je ');
+  WriteInt(Max,3);
+  WriteString(' u intervalu od ');
+  WriteCard(Ood,3);
+  WriteString(' do ');
+  WriteCard(Doo,3)
+END MaxNiza1.
+
+MODULE MaxNiza2;
+(* Drugo resenje: O(n^2). 
+   Koristi se cinjenica da je suma X[d..g]
+   izracunljiva iz X[d..g-1].  *)
+FROM InOut IMPORT WriteString,ReadInt, 
+           WriteInt,WriteCard,WriteLn;
+CONST
+  N = 10;
+TYPE
+  Interval = [1..N];
+VAR
+  Max, Suma : INTEGER;
+  d,g,i,Ood,Doo : Interval;
+  X : ARRAY Interval OF INTEGER;
+BEGIN
+  WriteString(' Unesite niz X ');
+  WriteLn;
+  FOR i := 1 TO N DO
+    ReadInt(X[i]);
+    WriteLn
+  END;
+  Max := 0;
+  FOR d := 1 TO N DO
+    Suma := 0;
+    FOR g := d TO N DO
+      Suma := Suma + X[g];
+      IF Suma > Max THEN
+        Max := Suma;
+        Ood := d;
+        Doo := g
+      END
+    END
+  END;
+  WriteLn;
+  WriteString(' Maksimum je ');
+  WriteInt(Max,3);
+  WriteString(' u intervalu od ');
+  WriteCard(Ood,3);
+  WriteString(' do ');
+  WriteCard(Doo,3)
+END MaxNiza2.
+\end{lstlisting}
+
+\begin{codeblock}
+MODULE MaxNiza3;
+(* Trece resenje: O(n^2). 
+   Koristi pomocni niz u kome je na i-tom mestu
+   suma podniza x[1..i] *)
+FROM InOut IMPORT WriteString,ReadInt,
+           WriteInt,WriteCard,WriteLn;
+CONST
+  N = 10;
+TYPE
+  Interval = [1..N];
+VAR
+  Max, Suma : INTEGER;
+  d,g,i,Ood,Doo : Interval;
+  X : ARRAY Interval OF INTEGER;
+  Pom : ARRAY [0..N] OF INTEGER;
+BEGIN
+  WriteString(' Unesite niz X ');
+  WriteLn;
+  FOR i := 1 TO N DO
+    ReadInt(X[i]);
+    WriteLn
+  END;
+  Pom[0] := 0;
+  FOR i := 1 TO N DO
+    Pom[i] := Pom[i-1] + X[i]
+  END;
+  Max := 0;
+  FOR d := 1 TO N DO
+    FOR g := d TO N DO
+      Suma := Pom[g] - Pom[d-1];
+      IF Suma > Max THEN
+        Max := Suma;
+        Ood := d;
+        Doo := g
+      END
+    END
+  END;
+  WriteLn;
+  WriteString(' Maksimum je ');
+  WriteInt(Max,3);
+  WriteString(' u intervalu od ');
+  WriteCard(Ood,3);
+  WriteString(' do ');
+  WriteCard(Doo,3)
+END MaxNiza3.
+\end{codeblock}
+
+\begin{codeblock}
+MODULE MaxNiza4;
+(* Cetvrto resenje. Najbolje moguce: O(n)  *)
+FROM InOut IMPORT WriteString,ReadInt,
+           WriteInt,WriteCard,WriteLn;
+CONST
+  N = 10;
+TYPE
+  Interval = [1..N];
+VAR
+  Max, MaxDovde : INTEGER;
+  i,d,Ood,Doo : Interval;
+  X : ARRAY Interval OF INTEGER;
+BEGIN
+  WriteString(' Unesite niz X ');
+  WriteLn;
+  FOR i := 1 TO N DO
+    ReadInt(X[i]);
+    WriteLn
+  END;
+  Max := 0;
+  MaxDovde := 0;
+  FOR i := 1 TO N DO
+    IF MaxDovde = 0 THEN
+      d := i
+    END;
+    MaxDovde := MaxDovde + X[i];
+    IF MaxDovde < 0 THEN
+      MaxDovde := 0
+    END;
+    IF MaxDovde > Max THEN
+      Ood := d;
+      Doo := i;
+      Max := MaxDovde
+    END
+  END;
+  WriteLn;
+  WriteString(' Maksimum je ');
+  WriteInt(Max,3);
+  WriteString(' u intervalu od ');
+  WriteCard(Ood,3);
+  WriteString(' do ');
+  WriteCard(Doo,3)
+END MaxNiza4.
+\end{codeblock}
+
+\section{Rad sa fajlovima}
+
+\subsection{Modul FIO}
+
+U ovom modulu je definisan tip \kod{File}, koji predstavlja jedan fajl
+sa kojim radimo.
+
+U primerima se pretpostavlja da je „f“ tipa \kod{File}, „str“ niz
+znakova, „i“ tipa \kod{INTEGER}, „c“ tipa \kod{CARDINAL} i „ch“ tipa
+\kod{CHAR}. Dodatna promenljiva „n“ tipa \kod{INTEGER} služi za
+formatiranje slično kao u modulu \kod{InOut}.
+
+Promenljiva tipa \kod{File} se mora vezati za neki fajl
+jednom od sledećih komandi:\\
+\kod{f := Open(str);} -- otvara se postojeci fajl za čitanje\\
+\kod{f := Create(str);} -- kreira se fajl za pisanje\\
+\kod{f := Append(str);} -- otvara se postojeći za dopisivanje na kraj
+
+\kod{Close(f);} -- po završetku rada fajl se mora zatvoriti
+
+Procedure za čitanje i pisanje imaju parametar „\kod{f}“ koji označava
+ fajl sa kojim se radi.\\
+\kod{RdStr(f,str)} -- učitava ceo red u string str\\
+\kod{RdItem(f,str)} -- učitava jednu reč u string str (učitava znakove iz fajla dok ne naiđe na separator)\\
+\kod{i:= RdInt(f); c:= RdCard(f)} -- učitava broj, koji se dobija kao rezultat procedure\\
+\kod{ch:= RdChar(f)} -- vraća jedan znak iz fajla
+
+Procedure za pisanje različitih tipova u fajl:
+\kod{WrStr(f,str); WrInt(f,i,n); WrCard(f,c,n);WrChar(f,ch);}
+
+\kod{WrLn(f);} -- upisuje prelom reda u fajl
+
+\kod{EOF} -- logička promenljiva, označava da li smo poslednjom
+operacijom čitanja stigli do kraja fajla.  Ne menja joj se vrednost
+pri operacijama otvaranja i zatvaranja fajlova, odnosno neće se pri
+tome resetovati na \kod{FALSE}.
+
+
+\subsection{Zadatak: ispis sadržaja fajla na ekran}
+
+Potrebno je sve redove iz fajla učitati i ispisati ih na ekran.
+
+\begin{lstlisting}[style=codeblock]
+MODULE ispis;
+FROM FIO IMPORT File, Open, Close, EOF, RdStr;
+FROM InOut IMPORT WriteString, WriteLn, ReadString;
+
+PROCEDURE ispisF(ime: ARRAY OF CHAR);
+VAR
+  f:File;
+  s : ARRAY[1..100] OF CHAR;
+BEGIN
+  f:=Open(ime);
+  EOF := FALSE;
+  WHILE NOT EOF DO
+      RdStr(f,s);
+      WriteString(s);
+      WriteLn;
+  END;
+  Close(f);
+END ispisF;
+
+VAR
+  ime: ARRAY[1..100] OF CHAR;
+BEGIN
+  WriteString("unesite ime fajla:");
+  ReadString(ime);
+  ispisF(ime);
+END ispis.
+\end{lstlisting}
+
+\subsection{Zadatak: spisak studenata}
+
+Napraviti program koji iz fajla učitava podatke o studentima, dodaje
+novog studenta u spisak i snima fajl.  U fajlu se u svakom redu nalazi
+podatak o jednom studentu, redom prezime, ime i godina rođenja,
+razdvojeni razmacima.
+
+\begin{lstlisting}[style=codeblock]
+MODULE nizslog;
+FROM InOut IMPORT WriteString, WriteLn, 
+     WriteCard, ReadCard, ReadString;
+FROM FIO IMPORT File, Open, Create, Close, EOF,
+    RdItem, RdCard, WrStr, WrCard, WrLn;
+FROM Str IMPORT Compare;
+
+CONST
+    MaxStud = 100;
+TYPE
+    String = ARRAY[1..30] OF CHAR;
+    Student = RECORD
+        ime, prez: String;
+        god: CARDINAL;
+    END;
+    Studenti = ARRAY[1..MaxStud] OF Student;
+
+PROCEDURE UcitajF(fajl:String;
+          VAR spisak: Studenti; VAR n:CARDINAL);
+VAR
+    f:File;
+BEGIN
+    n:=0;
+    f:= Open(fajl);
+    EOF := FALSE;
+    WHILE NOT EOF DO
+        INC(n);
+        RdItem(f, spisak[n].prez);
+        RdItem(f, spisak[n].ime);
+        spisak[n].god := RdCard(f);
+    END;
+    Close(f);
+END UcitajF;
+
+PROCEDURE Ispisi(spisak:Studenti; n:CARDINAL);
+VAR
+    i: CARDINAL;
+BEGIN
+    FOR i:=1 TO n DO
+        WriteString(spisak[i].prez);
+        WriteString(" ");
+        WriteString(spisak[i].ime);
+        WriteString(" ");
+        WriteCard(spisak[i].god,1);
+        WriteLn;
+    END;
+END Ispisi;
+
+PROCEDURE IspisiF(fajl:String;
+          spisak:Studenti; n:CARDINAL);
+VAR
+    f:File;
+    i: CARDINAL;
+BEGIN
+    IF (n>0) AND (n<=MaxStud) THEN
+        f:=Create(fajl);
+        (* pravimo takav fajl da ne
+           postoji zadnji prazan red *)
+        FOR i:=1 TO n-1 DO
+            WrStr(f,spisak[i].prez);
+            WrStr(f," ");
+            WrStr(f,spisak[i].ime);
+            WrStr(f," ");
+            WrCard(f,spisak[i].god,1);
+            WrLn(f);
+        END;
+        WrStr(f,spisak[n].prez);
+        WrStr(f," ");
+        WrStr(f,spisak[n].ime);
+        WrStr(f," ");
+        WrCard(f,spisak[n].god,1);
+        Close(f);
+    END;
+END IspisiF;
+
+PROCEDURE NoviStudent(VAR spisak:Studenti;
+                      VAR n:CARDINAL);
+VAR
+    stud,temp:Student;
+    i:CARDINAL;
+    dodaj:BOOLEAN;
+BEGIN
+    IF n<MaxStud THEN
+        WriteString("Prezime novog studenta?");
+        ReadString(stud.prez);
+        WriteString("Ime novog studenta?");
+        ReadString(stud.ime);
+        WriteString("Godina rodjenja");
+        WriteString("novog studenta?");
+        ReadCard(stud.god);
+        (* proverimo da li vec postoji *)
+        i:=1;
+        dodaj := TRUE;
+        WHILE (i<=n) AND dodaj DO
+            temp := spisak[i];
+            IF (temp.god = stud.god) &
+              (Compare(temp.prez,stud.prez)=0) &
+              (Compare(temp.ime,stud.ime)=0) THEN
+                dodaj:=FALSE;
+            END;
+            INC(i);
+        END;
+        IF dodaj THEN
+            INC(n);
+            spisak[n]:=stud;
+        ELSE
+            WriteString("podaci vec postoje!");
+        END;
+    ELSE
+        WriteString("popunjen kapacitet!");
+    END;
+END NoviStudent;
+
+VAR
+    spisak : Studenti;
+    fajl:String;
+    n:CARDINAL;
+BEGIN
+    fajl:="studenti.txt";
+    UcitajF(fajl, spisak, n);
+    Ispisi(spisak, n);
+    NoviStudent(spisak,n);
+    IspisiF(fajl, spisak, n);
+END nizslog.
+\end{lstlisting}
+
+\section{Liste i pokazivači}
+
+Za rad sa pokazivačima je potrebno iz modula Storage uvesti procedure
+\kod{ALLOCATE} i \kod{DEALLOCATE}. U kodu se tada mogu koristiti i njihovi
+skraćeni oblici \kod{NEW} i \kod{DISPOSE}.
+
+\subsection{Zadatak: Formiranje, štampanje i brisanje listi}
+
+
+\begin{lstlisting}[style=codeblock]
+MODULE liste;
+FROM InOut IMPORT WriteString, WriteLn, WriteInt,
+       ReadInt, ReadCard;
+FROM Storage IMPORT ALLOCATE, DEALLOCATE;
+TYPE
+  brojevi = POINTER TO brojSlog;
+  brojSlog = RECORD
+      info:INTEGER;
+      veza:brojevi;
+  END;
+VAR
+  n,i:CARDINAL;
+  lista : brojevi;
+  br:INTEGER;
+
+PROCEDURE DodajPoc(VAR lista:brojevi; br:INTEGER);
+(* dodaje broj br na pocetak liste *)
+VAR
+  temp:brojevi;
+BEGIN
+  NEW(temp);
+  temp^.info := br;
+  temp^.veza := lista;
+  lista := temp;
+END DodajPoc;
+
+PROCEDURE Stampaj(lista:brojevi);
+VAR
+  temp:brojevi;
+BEGIN
+  temp:=lista;
+  WHILE temp # NIL DO
+      WriteInt(temp^.info,0);
+      WriteLn;
+      temp := temp^.veza;
+  END;
+END Stampaj;
+
+PROCEDURE Unisti(VAR lista:brojevi);
+VAR
+  temp:brojevi;
+BEGIN
+  temp:=lista;
+  WHILE temp # NIL DO
+        lista:=lista^.veza;
+        DISPOSE(temp);
+        temp:=lista;
+  END;
+END Unisti;
+
+BEGIN
+  lista := NIL;
+  WriteString('unesite n (broj brojeva): ');
+  ReadCard(n);
+  WriteString('unesite brojeve: ');
+  WriteLn;
+  FOR i:= 1 TO n DO
+      ReadInt(br);
+      DodajPoc(lista,br);
+  END;
+  WriteString('sadrzaj liste:');
+  WriteLn;
+  Stampaj(lista);
+  Unisti(lista);
+  WriteString('memorija je oslobodjena');
+  WriteLn;
+END liste.
+\end{lstlisting}
+
+Alternativno je poziv \kod{DodajPoc} moguće zameniti pozivom jedne od
+sledeće dve procedure čime se dobija dodavanje elementa na kraj liste,
+ili kreiranje sortirane liste:
+
+\begin{lstlisting}[style=codeblock]
+PROCEDURE DodajKraj(VAR lista:brojevi; br:INTEGER);
+(* dodaje element na kraj liste *)
+VAR
+  tekuci, temp :brojevi;
+BEGIN
+  NEW(temp);
+  temp^.info := br;
+  temp^.veza := NIL;
+  IF lista = NIL THEN
+     (* prazna lista *)
+     lista:=temp;
+  ELSE
+     tekuci := lista;
+     WHILE tekuci^.veza#NIL DO
+        tekuci:=tekuci^.veza;
+     END;
+     tekuci^.veza := temp;
+  END;
+END DodajKraj;
+
+PROCEDURE DodajSort(VAR lista:brojevi; br:CARDINAL);
+(* dodaje broj tako da lista ostane sortirana 
+   (podrazumeva se da je vec sortirana) *)
+VAR
+  temp, tekuci : brojevi;
+BEGIN
+  NEW(temp);
+  temp^.info:=br;
+  temp^.veza:=NIL;
+  IF (lista = NIL) OR (lista^.info>=br) THEN
+  (*prazna lista ili na pocetak*)
+    temp^.veza:=lista;
+    lista := temp;
+  ELSE
+  (*negde u listi*)
+    tekuci:= lista;
+    WHILE (tekuci^.veza # NIL) AND 
+          (tekuci^.veza^.info<=br) DO
+      tekuci:=tekuci^.veza;
+    END;
+    temp^.veza := tekuci^.veza;
+    tekuci^.veza:=temp;
+  END;
+END DodajSort;
+\end{lstlisting}
+
+\subsection{Zadatak: Prikaz osnovih operacija nad listama}
+
+\begin{lstlisting}[style=codeblock]
+MODULE liste2;
+FROM InOut IMPORT WriteString, WriteLn,
+           WriteCard, ReadCard;
+FROM IO IMPORT RdKey;
+FROM Storage IMPORT ALLOCATE, DEALLOCATE;
+TYPE
+  skupZn = SET OF CHAR;
+  brojevi = POINTER TO brojSlog;
+  brojSlog = RECORD
+      info:CARDINAL;
+      veza:brojevi;
+  END;
+VAR
+  lista : brojevi;
+  menu,prazno:CHAR;
+
+PROCEDURE DodajPoc(VAR lista:brojevi; br:INTEGER);
+(* dodaje broj pom na pocetak liste *)
+VAR
+  temp:brojevi;
+BEGIN
+  (* kreiramo novi element *)
+  NEW(temp);
+  temp^.info := br;
+  (* treba da pokazuje na ostatak liste *)
+  temp^.veza := lista;
+  (* pocetak liste je novi element *)
+  lista := temp;
+END DodajPoc;
+
+PROCEDURE Unos(VAR lista:brojevi);
+(* dodaje n brojeva u listu *)
+VAR
+  n,i,br:CARDINAL;
+BEGIN
+  WriteString('unesite n (broj brojeva): ');
+  ReadCard(n);
+  FOR i:= 1 TO n DO
+      WriteString("unesite broj ");
+      WriteCard(i,0);
+      WriteString(": ");
+      ReadCard(br);
+      DodajPoc(lista,br);
+  END;
+END Unos;
+
+(* -- procedure za stampu -- *)
+
+PROCEDURE Stampaj(lista:brojevi);
+(* stampa sadrzaj liste na ekran *)
+VAR
+  temp:brojevi;
+BEGIN
+  WriteLn;
+  WriteString("Sadrzaj liste:");
+  WriteLn;
+  temp:=lista;
+  WHILE temp # NIL DO
+      WriteCard(temp^.info,0);
+      WriteLn;
+      temp := temp^.veza;
+  END;
+END Stampaj;
+
+PROCEDURE StampajK(VAR lista:brojevi);
+(* stampa k-ti element (k unosi korisnik) *)
+VAR
+  temp:brojevi;
+  k,brojac:CARDINAL;
+BEGIN
+  WriteString("unesite redni broj elementa:");
+  ReadCard(k);
+  temp:=lista;
+  brojac := 1;
+  WHILE (temp# NIL) AND (k>brojac) DO
+    temp:=temp^.veza;
+    INC(brojac);
+  END;
+  IF (temp#NIL) THEN
+    WriteCard(temp^.info,2);
+  ELSE
+    WriteString("greska! - ne postoji element");
+    WriteString(" u listi sa rednim brojem ");
+    WriteCard(k,2);
+  END;
+  WriteLn();
+END StampajK;
+
+PROCEDURE StampajMinimum(VAR lista:brojevi);
+(* nalazi i stampa minimalni element liste *)
+VAR
+  temp:brojevi;
+  min:CARDINAL;
+BEGIN
+  IF (lista=NIL) THEN
+    WriteString("prazna lista!");
+  ELSE
+    min:=lista^.info;
+    temp:=lista^.veza;
+    WHILE temp # NIL DO
+      IF temp^.info < min THEN
+        min := temp^.info;
+      END;
+      temp := temp^.veza;
+    END;
+    WriteString("Minimalni element liste je ");
+    WriteCard(min,0);
+  END;
+  WriteLn;
+END StampajMinimum;
+
+(* -- pomocne procedure, bez ispisa  -- *)
+
+PROCEDURE UListi(lista:brojevi; 
+                 br: CARDINAL):BOOLEAN;
+(* vraca da li se 'br' nalazi u listi 'lista' *)
+VAR
+  temp:brojevi;
+BEGIN
+  temp:=lista;
+  WHILE (temp # NIL) AND (temp^.info # br) DO
+    (* dok ne dodjemo do kraja liste 
+       ili ne nadjemo broj *)
+      temp := temp^.veza;
+  END;
+  IF temp#NIL THEN
+    (* znaci da nismo na kraju liste, 
+       tj da je nadjen broj *)
+    RETURN TRUE;
+  ELSE (* temp = NIL *)
+    RETURN FALSE;
+  END;
+END UListi;
+
+PROCEDURE IzbaciIzListe(VAR lista:brojevi; 
+                        br: CARDINAL):BOOLEAN;
+(* izbacuje broj 'br' iz liste, naravno ako 
+   postoji i vraca da li je operacija uspesno 
+   obavljena *)
+VAR
+  temp,prethodni:brojevi;
+BEGIN
+  (* proverimo da li je prvi element *)
+  IF (lista # NIL) AND (lista^.info = br) THEN
+    temp:=lista;
+    lista :=lista^.veza;
+    DISPOSE(temp);
+    RETURN TRUE;
+  ELSE
+  (* trazimo u ostatku liste *)
+    temp:=lista;
+    prethodni:=NIL;
+    WHILE (temp # NIL) AND (temp^.info # br) DO
+        (* dok ne dodjemo do kraja liste 
+           ili ne nadjemo broj *)
+        prethodni:=temp;
+        temp := temp^.veza;
+    END;
+    IF temp#NIL THEN
+      (* znaci da nismo na kraju liste, 
+         odnosno da smo nasli broj *)
+      (* prevezemo listu oko elementa *)
+      prethodni^.veza:=temp^.veza;
+      DISPOSE(temp);
+      RETURN TRUE;
+    ELSE
+      RETURN FALSE;
+    END;
+  END;
+END IzbaciIzListe;
+
+(* - procedure sa interakcijom sa korisnikom - *)
+
+PROCEDURE IzbacivanjeEl(VAR lista:brojevi);
+(* izbacuje uneti broj iz liste koristeci proceduru IzbaciIzListe *)
+VAR
+  br:CARDINAL;
+BEGIN
+  WriteString("unesite broj za izbacivanje: ");
+  ReadCard(br);
+  IF IzbaciIzListe(lista,br) THEN
+    WriteString("broj je izbacen iz liste");
+  ELSE
+    WriteString("greska! - broj ne postoji");
+  END;
+  WriteLn;
+END IzbacivanjeEl;
+
+PROCEDURE IzbacivanjeK(VAR lista:brojevi);
+(* izbacuje k-ti element iz liste *)
+VAR
+  temp,tekuci:brojevi;
+  k,brojac:CARDINAL;
+BEGIN
+  IF lista=NIL THEN
+    WriteString("lista je prazna, nema ");
+    WriteString("elemenata za izbacivanje");
+  ELSE
+    WriteString("unesite redni broj elementa");
+    WriteString(" koji zelite izbaciti:");
+    ReadCard(k);
+    IF k=1 THEN (*izbacivanje prvog *)
+      temp:=lista;
+      lista := lista^.veza;
+      DISPOSE(temp);
+    ELSE
+      tekuci := lista;
+      brojac := 2; (*gledamo jedan unapred*)
+      WHILE (tekuci^.veza# NIL) AND (k>brojac) DO
+        (* idemo kroz listu do k-tog el *)
+        tekuci:=tekuci^.veza;
+        INC(brojac);
+      END;
+      IF (tekuci^.veza#NIL) THEN
+         (* pamtimo element za brisanje *)
+         temp:=tekuci^.veza;
+         (* prevezujemo listu oko njega*)
+         tekuci^.veza:=tekuci^.veza^.veza;
+         DISPOSE(temp);
+      ELSE
+        WriteString("greska! - ne postoji el ");
+        WriteString("u listi sa rednim brojem ");
+        WriteCard(k,2);
+      END;
+      WriteLn();
+    END;
+  END;
+END IzbacivanjeK;
+
+PROCEDURE Pretraga(lista:brojevi);
+(* provera da li se uneti broj nalazi u listi *)
+VAR
+  br:CARDINAL;
+BEGIN
+  WriteString("unesite trazeni broj");
+  ReadCard(br);
+  IF UListi(lista,br) THEN
+    WriteString("broj postoji u listi");
+  ELSE
+    WriteString("broj ne postoji u listi");
+  END;
+  WriteLn;
+END Pretraga;
+
+(* -- oslobadjanje memorije -- *)
+
+PROCEDURE Unisti(VAR lista:brojevi);
+VAR
+  temp:brojevi;
+BEGIN
+  temp:=lista;
+  WHILE temp # NIL DO
+        lista:=lista^.veza;
+        DISPOSE(temp);
+        temp:=lista;
+  END;
+END Unisti;
+
+BEGIN
+  (* pocinjemo od prazne liste *)
+  lista := NIL;
+  REPEAT
+     WriteLn;
+     WriteString("Ilustracija rada sa");
+     WriteString(" listama brojeva");
+     WriteLn;
+     WriteString("=============================");
+     WriteLn;
+     WriteString("s - stampa");WriteLn;
+     WriteString("u - unos");WriteLn;
+     WriteString("i - izbacivanje br iz liste");
+     WriteLn;
+     WriteString("e - izbacivanje k-tog el.");
+     WriteLn;
+     WriteString("k - stampanje k-tog elementa");
+     WriteLn;
+     WriteString("m - minimalni broj u listi");
+     WriteLn;
+     WriteString("p - pretraga el. u listi");
+     WriteLn;
+     WriteLn;
+     WriteString("q - kraj rada (quit)");WriteLn;
+      REPEAT
+        menu := CAP(RdKey());
+      UNTIL menu IN skupZn{'S','U','E','I',
+                           'M','K','P','Q'};
+      IF menu#'Q' THEN
+        CASE menu OF
+         'S' : Stampaj(lista);|
+         'U' : Unos(lista);|
+         'I' : IzbacivanjeEl(lista);|
+         'E' : IzbacivanjeK(lista);|
+         'K' : StampajK(lista); |
+         'M' : StampajMinimum(lista); |
+         'P' : Pretraga(lista);|
+        END;
+        WriteLn;
+        WriteString("--- pritisnite bilo koji ");
+        WriteString("taster za povratak u meni");
+        prazno:=RdKey();
+      ELSE
+        WriteString("Kraj rada")
+      END;
+      WriteLn;
+  UNTIL menu='Q';
+  Unisti(lista);
+END liste2.
+\end{lstlisting}
+
+
+\subsection{Zadatak: Prikaz operacija nad listama sa jedinstvenim ključem}
+
+\begin{lstlisting}[style=codeblock]
+MODULE Radnici;
+
+FROM InOut IMPORT WriteString, ReadString,
+           WriteLn, WriteCard, ReadCard, Done;
+FROM IO IMPORT RdKey;
+FROM Storage IMPORT ALLOCATE, DEALLOCATE;
+
+TYPE
+  skupZn = SET OF CHAR;
+  str = ARRAY [1..20] OF CHAR;
+  radnici = POINTER TO slog;
+  slog = RECORD
+           ime, prez : str;
+           broj : CARDINAL;
+           sled : radnici
+         END;
+VAR
+  meni, pom : CHAR;
+  rad : radnici;
+
+  PROCEDURE Clear();
+  VAR
+    br: CARDINAL;
+  BEGIN
+    FOR br:=1 TO 100 DO
+      WriteLn;
+    END;
+  END Clear;
+
+  PROCEDURE Spisak(rad : radnici);
+  BEGIN
+    WHILE rad # NIL DO
+      WriteString(rad^.ime);
+      WriteString(' ');
+      WriteString(rad^.prez);
+      WriteCard(rad^.broj, 8);
+      WriteLn;
+      rad := rad^.sled
+    END
+  END Spisak;
+
+  PROCEDURE Zaposli(VAR rad : radnici);
+  VAR
+    novi, tek : radnici;
+    nadjen : BOOLEAN;
+  BEGIN
+    NEW(novi);
+    REPEAT
+      WriteString('Ime, prezime i jedinstveni');
+      WriteString(' broj novog radnika: ');
+      WriteLn;
+      ReadString(novi^.ime);
+      ReadString(novi^.prez);
+      ReadCard(novi^.broj);
+      nadjen := FALSE;
+      tek := rad;
+      WHILE NOT nadjen AND (tek # NIL) AND
+            (tek^.broj <= novi^.broj) DO
+        IF novi^.broj = tek^.broj THEN
+          nadjen := TRUE
+        ELSE
+          tek := tek^.sled
+        END
+      END
+    UNTIL Done AND NOT nadjen;
+    IF (rad = NIL) OR (novi^.broj<rad^.broj) THEN
+      novi^.sled := rad;
+      rad := novi
+    ELSE
+      tek := rad;
+      WHILE (tek^.sled # NIL) AND
+            (tek^.sled^.broj < novi^.broj) DO
+        tek := tek^.sled
+      END;
+      novi^.sled := tek^.sled;
+      tek^.sled := novi
+    END
+  END Zaposli;
+
+  PROCEDURE Otpusti(VAR rad : radnici);
+  VAR
+    tek, pom : radnici;
+    br : CARDINAL;
+  BEGIN
+    REPEAT
+      WriteLn;
+      WriteString('Unesite redni broj radnika:');
+      ReadCard(br)
+    UNTIL Done;
+    WriteLn;
+    IF rad = NIL THEN
+      WriteString('Greska.')
+    ELSIF br = rad^.broj THEN
+      pom := rad;
+      rad := rad^.sled;
+      DISPOSE(pom)
+    ELSE
+      tek := rad;
+      WHILE (tek^.sled # NIL) AND
+            (tek^.sled^.broj < br) DO
+        tek := tek^.sled
+      END;
+      IF (tek^.sled = NIL) OR
+         (tek^.sled^.broj > br) THEN
+        WriteString('Greska.')
+      ELSE
+        pom := tek^.sled;
+        tek^.sled := tek^.sled^.sled;
+        DISPOSE(pom)
+      END
+    END
+  END Otpusti;
+
+  PROCEDURE Inform(rad : radnici);
+  VAR
+    br : CARDINAL;
+  BEGIN
+    REPEAT
+      WriteLn;
+      WriteString('Unesite redni broj radnika:');
+      ReadCard(br)
+    UNTIL Done;
+    WriteLn;
+    WHILE (rad # NIL) AND (rad^.broj < br) DO
+      rad := rad^.sled
+    END;
+    IF (rad = NIL) OR (rad^.broj # br) THEN
+      WriteString('Greska.')
+    ELSE
+      WriteString(rad^.ime);
+      WriteString(' ');
+      WriteString(rad^.prez)
+    END
+  END Inform;
+
+  PROCEDURE Bankrot(VAR rad : radnici);
+  VAR
+    pom : radnici;
+  BEGIN
+    WHILE rad # NIL DO
+      pom := rad;
+      rad := rad^.sled;
+      DISPOSE(pom)
+    END
+  END Bankrot;
+
+BEGIN
+  rad := NIL;
+  REPEAT
+    Clear;
+    WriteString('s - spisak svih zaposlenih');
+    WriteLn;
+    WriteString('z - zaposljavanje radnika');
+    WriteLn;
+    WriteString('o - otpustanje radnika');
+    WriteLn;
+    WriteString('i - informacije o radniku');
+    WriteLn;
+    WriteString('b - bankrot firme');
+    WriteLn;
+    WriteString('k - kraj rada');
+    WriteLn;
+    REPEAT
+      meni := RdKey();
+    UNTIL CAP(meni) IN skupZn{'S', 'Z', 'O', 
+                              'I', 'B', 'K'};
+    Clear;
+    IF CAP(meni) # 'K' THEN
+      CASE CAP(meni) OF
+        'S' : Spisak(rad)|
+        'Z' : Zaposli(rad)|
+        'O' : Otpusti(rad)|
+        'I' : Inform(rad)|
+        'B' : Bankrot(rad)
+      END;
+      WriteLn;
+      WriteString('-- pritisnite bilo koji ');
+      WriteString('taster za nastavak --');
+      pom := RdKey()
+    END
+  UNTIL CAP(meni) = 'K'
+END Radnici.
+\end{lstlisting}
+
+Procedura \kod{Spisak} se može realizovati i u rekurzivnoj verziji:
+
+\begin{lstlisting}[style=codeblock]
+  PROCEDURE Spisak(rad : radnici);
+  BEGIN
+    IF rad # NIL THEN
+      WriteString(rad^.ime);
+      WriteString(' ');
+      WriteString(rad^.prez);
+      WriteCard(rad^.broj, 8);
+      WriteLn;
+      Spisak(rad^.sled)
+    END
+  END Spisak;
+\end{lstlisting}
+
+\subsection[Zadatak: Dve liste osoba sa istim sadržajem]{Zadatak: Dve
+  liste osoba koje dele sadržaj, jedna sortirana po visini, druga po
+  težini}
+
+Sa tastature ucitavati po dva broja koji opisiuju osobu (visina i
+tezina) i smestati ih u povezane listu, tako da postoji neopadajuce
+uredjenje i po visini i po tezini.
+
+\begin{lstlisting}[style=codeblock]
+MODULE VisTez;
+FROM Storage IMPORT ALLOCATE, DEALLOCATE;
+FROM IO IMPORT WrLn, WrStr, RdCard, WrCard;
+FROM SYSTEM IMPORT TSIZE;
+TYPE
+  pok = POINTER TO element;
+  element = RECORD
+              visina, tezina : CARDINAL;
+              Vveza, Tveza : pok
+            END;
+VAR
+  pocV, pocT : pok;
+  vis, tez : CARDINAL;
+PROCEDURE Ispisi(pocV, pocT : pok);
+VAR
+  tek : pok;
+BEGIN
+  tek := pocV;
+  WrStr('Po visini:');
+  WrLn;
+  WHILE tek # NIL DO
+    WrCard(tek^.visina, 6);
+    tek := tek^.Vveza
+  END;
+  WrLn;
+  tek := pocT;
+  WrStr('Po tezini:');
+  WrLn;
+  WHILE tek # NIL DO
+    WrCard(tek^.tezina,6);
+    tek := tek^.Tveza
+  END
+END Ispisi;
+
+PROCEDURE Ubaci(VAR pocV, pocT : pok;
+                vis, tez : CARDINAL);
+VAR
+  novi, tek, iza : pok;
+  nadjen : BOOLEAN;
+BEGIN
+  IF pocV = NIL THEN
+    ALLOCATE(pocV, TSIZE(element));
+    pocV^.visina := vis;
+    pocV^.tezina := tez;
+    pocV^.Vveza := NIL;
+    pocV^.Tveza := NIL;
+    pocT := pocV
+  ELSE
+    ALLOCATE(novi, TSIZE(element));
+    novi^.visina := vis;
+    novi^.tezina := tez;
+    tek := pocV;
+    nadjen := FALSE;
+    WHILE (tek # NIL) AND NOT nadjen DO
+      nadjen := vis <= tek^.visina;
+      IF NOT nadjen THEN
+        iza := tek;
+        tek := tek^.Vveza
+      END
+    END;
+    novi^.Vveza := tek;
+    IF tek = pocV THEN
+      pocV := novi
+    ELSE
+      iza^.Vveza := novi
+    END;
+    tek := pocT;
+    nadjen := FALSE;
+    WHILE (tek # NIL) AND NOT nadjen DO
+      nadjen := tez <= tek^.tezina;
+      IF NOT nadjen THEN
+        iza := tek;
+        tek := tek^.Tveza
+      END
+    END;
+    novi^.Tveza := tek;
+    IF tek = pocT THEN
+      pocT := novi
+    ELSE
+      iza^.Tveza := novi
+    END
+  END
+END Ubaci;
+
+BEGIN
+  pocV := NIL;
+  pocT := NIL;
+  WrStr('Unesite visinu ---- ');
+  vis := RdCard();
+  WHILE vis > 0 DO
+    WrStr('Unesite tezinu ---- ');
+    tez := RdCard();
+    Ubaci(pocV, pocT, vis, tez);
+    WrLn;
+    WrStr('Unesite visinu ---- ');
+    vis := RdCard()
+  END;
+  WrLn;
+  Ispisi(pocV, pocT)
+END VisTez.
+\end{lstlisting}
+
+\section{Polinomi preko listi}
+
+\subsection{Moduli}
+
+Polinomi su predstavljeni pomoću pokazivača. Apstraktni tip podataka
+\kod{Polinom} je definisan u globalnom modulu.
+
+\begin{lstlisting}[style=codeblock]
+DEFINITION MODULE PolinomL;
+TYPE
+  Polinom = POINTER TO Monom;
+  Monom = RECORD
+            k : REAL;
+            st : CARDINAL;
+            veza : Polinom
+          END;
+
+PROCEDURE Anuliraj(VAR p: Polinom);
+PROCEDURE Unos(VAR p: Polinom);
+PROCEDURE Stampaj(p: Polinom; d: CARDINAL);
+PROCEDURE Kopiraj(p: Polinom; 
+                  VAR kopija: Polinom);
+PROCEDURE UbaciMonom(mon:Polinom; 
+                     VAR p: Polinom);
+PROCEDURE PromeniZnak(VAR p: Polinom);
+PROCEDURE Saberi(p1, p2: Polinom; 
+                 VAR zbir: Polinom);
+PROCEDURE SaberiNa(p: Polinom; VAR rez: Polinom);
+PROCEDURE Oduzmi(p1,p2: Polinom; 
+                 VAR razlika: Polinom);
+PROCEDURE MonomPuta(p, mon: Polinom; 
+                    VAR mp : Polinom);
+PROCEDURE Puta(p1, p2: Polinom; VAR pr: Polinom);
+PROCEDURE Kolicnik(p1, p2: Polinom;
+                   VAR kol, ost: Polinom;
+                   VAR ok : BOOLEAN);
+PROCEDURE PolinomNaN(p: Polinom; n: CARDINAL;
+                     VAR rez: Polinom);
+PROCEDURE DisposePolinom(VAR p: Polinom);
+
+END PolinomL.
+(* --- kraj definicionog modula --- *)
+
+IMPLEMENTATION MODULE PolinomL;
+FROM InOut IMPORT Write, WriteString, WriteLn,
+           WriteCard, ReadCard, Done;
+FROM RealInOut IMPORT WriteReal, ReadReal;
+FROM Storage IMPORT ALLOCATE, DEALLOCATE;
+
+PROCEDURE Anuliraj(VAR p: Polinom);
+BEGIN
+  IF p # NIL THEN
+    DisposePolinom(p);
+  END;
+END Anuliraj;
+
+PROCEDURE Kopiraj(p: Polinom;
+                  VAR kopija: Polinom);
+VAR
+  pomocni: Polinom;
+BEGIN
+  IF p = NIL THEN
+    kopija := NIL
+  ELSE
+    NEW(kopija);
+    kopija^ := p^;
+    p := p^.veza;
+    pomocni := kopija;
+    WHILE p <> NIL DO
+      NEW(pomocni^.veza);
+      pomocni := pomocni^.veza;
+      pomocni^ := p^;
+      p := p^.veza
+    END
+  END
+END Kopiraj;
+
+PROCEDURE Stampaj(p: Polinom; d: CARDINAL);
+
+  PROCEDURE StampajMonom(m : Polinom);
+  BEGIN
+    WITH m^ DO
+      IF st <> 0 THEN
+        IF ABS(k) <> 1.0 THEN
+          WriteReal(ABS(k), d)
+        END;
+        Write('x');
+        IF st <> 1 THEN
+          Write('^');
+          WriteCard(st, 1)
+        END
+      ELSE
+        WriteReal(ABS(k), d)
+      END
+    END
+  END StampajMonom;
+
+BEGIN
+  IF p = NIL THEN
+    WriteReal(0., d)
+  ELSE
+    IF p^.k < 0.0 THEN
+      WriteString(' - ')
+    END;
+    StampajMonom(p);
+    p := p^.veza;
+    WHILE p <> NIL DO
+      IF p^.k > 0.0 THEN
+        WriteString(' + ')
+      ELSE
+        WriteString(' - ')
+      END;
+      StampajMonom(p);
+      p := p^.veza
+    END
+  END
+END Stampaj;
+
+PROCEDURE UbaciMonom(mon :Polinom; 
+                     VAR p: Polinom);
+VAR
+  stari, tekuci, kopija: Polinom;
+BEGIN
+  IF mon # NIL THEN
+    NEW(kopija);
+    kopija^ := mon^;
+    tekuci := p;
+       stari := NIL;
+    WHILE (tekuci#NIL) AND (tekuci^.st>kopija^.st) DO
+      stari := tekuci;
+      tekuci := tekuci^.veza
+    END;
+    kopija^.veza := tekuci;
+    IF tekuci = p THEN
+      p := kopija
+    ELSE
+      stari^.veza := kopija
+    END;
+    IF (tekuci#NIL) AND 
+           (kopija^.st = tekuci^.st) THEN
+      kopija^.k := kopija^.k + tekuci^.k;
+      kopija^.veza := tekuci^.veza;
+      DISPOSE(tekuci);
+      IF kopija^.k = 0.0 THEN
+        IF p = kopija THEN
+          p := kopija^.veza
+        ELSE
+          stari^.veza := kopija^.veza
+        END;
+        DISPOSE(kopija)
+      END
+    END
+  END
+END UbaciMonom;
+
+PROCEDURE Unos(VAR p : Polinom);
+VAR
+  i, n: CARDINAL;
+  novi: Polinom;
+BEGIN
+  Anuliraj(p);
+  REPEAT
+    WriteLn;
+    WriteString('Unesite broj monoma n (n>=0) ');
+    ReadCard(n);
+  UNTIL Done;
+  WriteLn;
+  FOR i := 1 TO n DO
+    NEW(novi);
+    WITH novi^ DO
+      REPEAT
+        WriteString('koeficijent monoma br.');
+        WriteCard(i, 1);
+        WriteString(' (<> 0):');
+        ReadReal(k);
+        WriteLn
+      UNTIL k <> 0.0;
+      REPEAT
+        WriteLn;
+        WriteString('eksponent monoma br.');
+        WriteCard(i, 1);
+        WriteString(' (>= 0): ');
+        ReadCard(st);
+      UNTIL Done;
+      WriteLn;
+    END;
+    UbaciMonom(novi, p);
+    DISPOSE(novi);
+  END
+END Unos;
+
+PROCEDURE Saberi(p1, p2: Polinom; 
+                 VAR zbir: Polinom);
+BEGIN
+  Kopiraj(p1, zbir);
+  WHILE p2 <> NIL DO
+    UbaciMonom(p2, zbir);
+    p2 := p2^.veza
+  END
+END Saberi;
+
+PROCEDURE SaberiNa(p: Polinom; 
+                   VAR rez: Polinom);
+BEGIN
+  WHILE p <> NIL DO
+    UbaciMonom(p,rez);
+    p := p^.veza;
+  END;
+END SaberiNa;
+
+PROCEDURE PromeniZnak(VAR p: Polinom);
+VAR
+  t: Polinom;
+BEGIN
+  t := p;
+  WHILE t <> NIL DO
+    t^.k := - t^.k;
+    t := t^.veza
+  END
+END PromeniZnak;
+
+PROCEDURE Oduzmi(p1,p2: Polinom; 
+                 VAR razlika: Polinom);
+BEGIN
+  Kopiraj(p2, razlika);
+  PromeniZnak(razlika);
+  WHILE p1 <> NIL DO
+    UbaciMonom(p1, razlika);
+    p1 := p1^.veza
+  END
+END Oduzmi;
+
+PROCEDURE MonomPuta(p, mon: Polinom; 
+                    VAR mp: Polinom);
+VAR
+  tekuci: Polinom;
+BEGIN
+  Anuliraj(mp);
+  IF (mon <> NIL) AND (p <> NIL) THEN
+    NEW(mp);
+    mp^.k := p^.k * mon^.k;
+    mp^.st := p^.st + mon^.st;
+    p := p^.veza;
+    tekuci := mp;
+    WHILE p <> NIL DO
+      NEW(tekuci^.veza);
+      tekuci := tekuci^.veza;
+      tekuci^.k := p^.k * mon^.k;
+      tekuci^.st := p^.st + mon^.st;
+      p := p^.veza
+    END;
+    tekuci^.veza := NIL
+  END
+END MonomPuta;
+
+PROCEDURE Puta(p1, p2: Polinom; VAR pr: Polinom);
+VAR
+  pomocni: Polinom;
+BEGIN
+  Anuliraj(pr);
+  IF (p1 <> NIL) AND (p2 <> NIL) THEN
+    MonomPuta(p1, p2, pr);
+    p2 := p2^.veza;
+    WHILE p2 <> NIL DO
+      MonomPuta(p1, p2, pomocni);
+      REPEAT
+        UbaciMonom(pomocni, pr);
+        pomocni := pomocni^.veza
+      UNTIL pomocni = NIL;
+      p2 := p2^.veza
+    END
+  END
+END Puta;
+
+PROCEDURE Kolicnik(p1, p2: Polinom; 
+                   VAR kol, ost: Polinom; 
+                   VAR ok: BOOLEAN);
+
+  PROCEDURE Deli(VAR kol, ost: Polinom);
+  VAR
+    novi, pomocni: Polinom;
+  BEGIN
+    IF ost <> NIL THEN
+      IF ost^.st >= p2^.st THEN
+        NEW(novi);
+        novi^.k := - ost^.k / p2^.k;
+        novi^.st := ost^.st - p2^.st;
+        MonomPuta(p2, novi, pomocni);
+        Saberi(ost, pomocni, ost);
+        novi^.k := - novi^.k;
+        UbaciMonom(novi, kol);
+        DISPOSE(novi);
+        Deli(kol, ost)
+      END
+    END
+  END Deli;
+
+BEGIN (* Kolicnik *)
+  ok := TRUE;
+  Anuliraj(kol);
+  IF p2 = NIL THEN
+    ok := FALSE
+  ELSE
+    Kopiraj(p1, ost);
+    Deli(kol, ost)
+  END
+END Kolicnik;
+
+PROCEDURE PolinomNaN(p: Polinom; n: CARDINAL;
+                     VAR rez: Polinom);
+VAR
+  i: CARDINAL;
+BEGIN
+  IF n = 0 THEN
+    NEW(rez);
+    rez^.k := 1.0;
+    rez^.st := 0;
+    rez^.veza := NIL;
+  ELSIF n = 1 THEN
+    Kopiraj( rez, p );
+  ELSE
+    rez := p;
+    FOR i := 2 TO n DO
+      Puta(rez, p, rez)
+    END
+  END;
+END PolinomNaN;
+
+PROCEDURE DisposePolinom(VAR p: Polinom);
+VAR
+  pomocni: Polinom;
+BEGIN
+  pomocni := p;
+  WHILE pomocni # NIL DO
+    p := p^.veza;
+    DISPOSE(pomocni);
+    pomocni := p
+  END
+END DisposePolinom;
+
+END PolinomL.
+\end{lstlisting}
+
+
+\subsection{Zadatak: Sabiranje sa unapred određenim polinomom}
+
+Želimo da ispišemo uneti polinom uvećan za\\ $x^5 - 3x^4 + 4x + 7$.
+
+\begin{lstlisting}[style=codeblock]
+MODULE polinom;
+FROM PolinomL IMPORT Polinom, Stampaj, Anuliraj, DisposePolinom, UbaciMonom, Unos, Saberi;
+FROM InOut IMPORT WriteString, WriteLn;
+FROM Storage IMPORT ALLOCATE, DEALLOCATE;
+
+VAR
+  p,q,rez,pom : Polinom;
+
+BEGIN
+  (* korisnik unosi prvi polinom *)
+  WriteString("Unesite polinom:");
+  WriteLn;
+  Unos(p);
+  (* drugi polinom kreiramo mi, 
+     monom po monom *)
+  Anuliraj(q); (* isto sto i q:=NIL; *)
+  (* formiramo monom x^5 *)
+  NEW(pom);
+  pom^.st:=5;
+  pom^.k:=1.0;
+  (* dodajemo ga u polinom *)
+  UbaciMonom(pom,q);
+  DISPOSE(pom);
+  (* -3 x^4 *)
+  NEW(pom);
+  pom^.st := 4;
+  pom^.k := -3.0;
+  UbaciMonom(pom,q);
+  DISPOSE(pom);
+  (* 4 x *)
+  NEW(pom);
+  pom^.st := 1;
+  pom^.k := 4.0;
+  UbaciMonom(pom,q);
+  DISPOSE(pom);
+  (* 7 (x^0) *)
+  NEW(pom);
+  pom^.st := 0;
+  pom^.k := 7.0;
+  UbaciMonom(pom,q);
+  DISPOSE(pom);
+  (* saberemo polinome *)
+  Saberi(p, q, rez);
+  (* odstampamo rezultat *)
+  Stampaj(rez,0);
+  WriteLn;
+  (* oslobadjanje zauzete memorije *)
+  DisposePolinom(p);
+  DisposePolinom(q);
+  DisposePolinom(rez);
+END polinom.
+\end{lstlisting}
+
+\subsection{Zadatak: Suma k polinoma}
+
+Napisati program koji ucitava broj k (1<=k<=50) i k polinoma, a nakon
+toga izracunava njihovu sumu
+
+\begin{lstlisting}[style=codeblock]
+MODULE PolSuma;
+
+FROM PolinomL IMPORT Polinom, Anuliraj, DisposePolinom, Unos, Stampaj, SaberiNa;
+FROM InOut IMPORT WriteLn, WriteString, ReadCard, WriteCard;
+CONST
+  maxk = 50;
+TYPE
+  nizPol = ARRAY [1..maxk] OF Polinom;
+VAR
+  i, k: CARDINAL;
+  suma : Polinom;
+  p : nizPol;
+BEGIN
+  REPEAT
+    WriteString('Unesite broj k (1 <= k <= ');
+    WriteCard(maxk, 1);
+    WriteString(') ');
+    ReadCard(k);
+    WriteLn;
+  UNTIL (1 <= k) AND (k <= maxk);
+  FOR i := 1 TO k DO
+    WriteLn;
+    WriteString('Unos ');
+    WriteCard(i, 1);
+    WriteString('. polinoma.');
+    WriteLn;
+    Unos(p[i])
+  END;
+  Anuliraj(suma);
+  FOR i := 1 TO k DO
+    SaberiNa(suma, p[i])
+  END;
+  WriteLn;
+  WriteString('Njihova suma je:');
+  WriteLn;
+  Stampaj(suma, 4);
+  DisposePolinom(suma);
+  FOR i := 1 TO k DO
+    DisposePolinom(p[i]);
+  END;
+END PolSuma.
+\end{lstlisting}
+
+\section{Stek i red opsluživanja}
+
+\subsection{Zadatak: Ilustracija pisanja u fajl uz pomoć bafera}
+
+\begin{lstlisting}[style=codeblock]
+DEFINITION MODULE QueueInfo;
+CONST
+  Maxqueue = 100;
+TYPE
+  InfoTip = CHAR;
+
+END QueueInfo.
+
+IMPLEMENTATION MODULE QueueInfo;
+END QueueInfo.
+
+DEFINITION MODULE RedOpsl1;
+FROM QueueInfo IMPORT InfoTip,Maxqueue;
+TYPE 
+  Niz = ARRAY[1..Maxqueue] OF InfoTip;
+  RedOpslTip = RECORD
+        Prvi, Zadnji : CARDINAL;
+        Element : Niz
+  END;
+
+PROCEDURE MakeNull(VAR q : RedOpslTip);
+PROCEDURE Empty(VAR q : RedOpslTip) : BOOLEAN;
+PROCEDURE First(VAR q : RedOpslTip;
+                VAR x : InfoTip;
+                VAR ok : BOOLEAN);
+PROCEDURE PopFirst(VAR q : RedOpslTip;
+                   VAR ok : BOOLEAN);
+PROCEDURE AddRear(VAR q : RedOpslTip;
+                  x : InfoTip;
+                  VAR ok : BOOLEAN);
+
+END RedOpsl1.
+
+IMPLEMENTATION MODULE RedOpsl1;
+FROM QueueInfo IMPORT Maxqueue,InfoTip;
+
+PROCEDURE MakeNull(VAR q : RedOpslTip);
+BEGIN
+  WITH q DO
+    Prvi := 0;
+    Zadnji := 0
+  END
+END MakeNull;
+
+PROCEDURE Empty(VAR q : RedOpslTip) : BOOLEAN;
+BEGIN
+  RETURN q.Zadnji = 0
+END Empty;
+
+
+PROCEDURE First(VAR q : RedOpslTip;
+                VAR x : InfoTip;
+                VAR ok : BOOLEAN);
+BEGIN
+  IF Empty(q) THEN
+    ok := FALSE
+  ELSE
+    ok := TRUE;
+    WITH q DO
+      x := Element[Prvi]
+    END
+  END
+END First;
+
+PROCEDURE AddOne(i : CARDINAL) : CARDINAL;
+BEGIN
+  IF i = Maxqueue THEN
+    RETURN 1
+  ELSE
+    RETURN i+1
+  END
+END AddOne;
+
+PROCEDURE PopFirst(VAR q : RedOpslTip;
+                   VAR ok : BOOLEAN);
+BEGIN
+  IF Empty(q) THEN
+    ok := FALSE
+  ELSE
+    ok := TRUE;
+    WITH q DO
+      IF Prvi = Zadnji THEN
+        MakeNull(q)
+      ELSE
+        Prvi := AddOne(Prvi)
+      END
+    END
+  END
+END PopFirst;
+
+PROCEDURE AddRear(VAR q : RedOpslTip;
+                  x : InfoTip;
+                  VAR ok : BOOLEAN);
+BEGIN
+  WITH q DO
+    IF AddOne(Zadnji) = Prvi THEN
+      ok := FALSE
+    ELSE
+      ok := TRUE;
+      IF Empty(q) THEN
+        Prvi := 1;
+        Zadnji := 1
+      ELSE
+        Zadnji := AddOne(Zadnji)
+      END;
+      Element[Zadnji] := x
+    END
+  END
+END AddRear;
+
+END RedOpsl1.
+
+MODULE Bafer;
+FROM RedOpsl1 IMPORT RedOpslTip, MakeNull, Empty, First, PopFirst, AddRear;
+FROM FIO IMPORT File,WrChar, Create, Close;
+IMPORT IO;
+
+CONST
+  ImeIzlaza = 'izlaz.txt';
+
+VAR
+  izlaz : File;
+  znak : CHAR;
+  buffer : RedOpslTip;
+
+PROCEDURE IsprazniBafer(VAR dat : File;
+                        VAR buf : RedOpslTip);
+VAR
+  znak : CHAR;
+  ok : BOOLEAN;
+BEGIN
+  WHILE NOT Empty(buf) DO
+    First(buf, znak, ok);
+    PopFirst(buf, ok);
+    WrChar(dat, znak)
+  END
+END IsprazniBafer;
+
+PROCEDURE BaferWrite(VAR dat : File;
+                     VAR buf : RedOpslTip;
+                     znak : CHAR);
+VAR
+  ok : BOOLEAN;
+BEGIN
+  AddRear(buf, znak, ok);
+  IF NOT ok THEN
+    IsprazniBafer(dat, buf);
+    AddRear(buf, znak, ok)
+  END
+END BaferWrite;
+
+BEGIN
+  izlaz := Create(ImeIzlaza);
+  MakeNull(buffer);
+  IO.WrStr('Unesite tekst, koji treba da se unese u datoteku ');
+  IO.WrStr(ImeIzlaza);
+  IO.WrChar('.');
+  IO.WrLn;
+  IO.WrStr('Unos zavrsite tackom.');
+  IO.WrLn;
+  znak := IO.RdChar();
+  WHILE znak # '.' DO
+    BaferWrite(izlaz, buffer, znak);
+    znak := IO.RdChar();
+  END;
+  IsprazniBafer(izlaz, buffer);
+  Close(izlaz)
+END Bafer.
+\end{lstlisting}
+
+\subsection%
+{Zadatak: Ispitivanje da li reč pripada gramatici wcw$^+$}
+
+Reč pripada ovoj gramatici ako joj se prvi deo (w) sastoji samo od
+slova 'a' i 'b', sledi slovo 'c' a nakon njega obrnuta reč reči w.
+
+\begin{lstlisting}[style=codeblock]
+DEFINITION MODULE Stek;
+CONST
+  Maxstack = 100;
+TYPE
+  Niz = ARRAY [1..Maxstack] OF CHAR;
+  StekTip = RECORD
+            Top : CARDINAL;
+            Element : Niz
+          END;
+PROCEDURE MakeNull(VAR s : StekTip);
+PROCEDURE Empty(VAR s : StekTip) : BOOLEAN;
+
+PROCEDURE Top(VAR s : StekTip;
+              VAR x : CHAR;
+              VAR ok : BOOLEAN);
+PROCEDURE Pop(VAR s : StekTip;
+              VAR ok : BOOLEAN);
+PROCEDURE Push(VAR s : StekTip;
+               x : CHAR;
+               VAR ok : BOOLEAN);
+END Stek.
+
+
+IMPLEMENTATION MODULE Stek;
+
+PROCEDURE MakeNull(VAR s : StekTip);
+BEGIN
+  s.Top := 0
+END MakeNull;
+
+PROCEDURE Empty(VAR s : StekTip) : BOOLEAN;
+BEGIN
+  RETURN s.Top = 0
+END Empty;
+
+PROCEDURE Top(VAR s : StekTip;
+              VAR x : CHAR;
+              VAR ok : BOOLEAN);
+BEGIN
+  IF Empty(s) THEN
+    ok := FALSE
+  ELSE
+    ok := TRUE;
+    WITH s DO
+      x := Element[Top]
+    END
+  END
+END Top;
+
+PROCEDURE Pop(VAR s : StekTip;
+              VAR ok : BOOLEAN);
+BEGIN
+  IF Empty(s) THEN
+    ok := FALSE
+  ELSE
+    ok := TRUE;
+    DEC(s.Top)
+  END
+END Pop;
+
+PROCEDURE Push(VAR s : StekTip;
+               x : CHAR;
+               VAR ok : BOOLEAN);
+BEGIN
+  WITH s DO
+    IF Top = Maxstack THEN
+      ok := FALSE
+    ELSE
+      ok := TRUE;
+      INC(Top);
+      Element[Top] := x
+    END
+  END
+END Push;
+END Stek.
+
+MODULE wcw;
+(* Da li rec pripada gramatici wcw+. *)
+FROM Stek IMPORT StekTip, MakeNull, Empty,
+                 Top, Pop, Push;
+FROM InOut IMPORT Read, Write, WriteString, EOL;
+TYPE
+  slova = SET OF CHAR;
+VAR
+  S : StekTip;
+  Ch, C : CHAR;
+  ok : BOOLEAN;
+BEGIN
+  MakeNull(S);
+  Read(Ch);
+  ok := TRUE;
+  WHILE ok AND (Ch IN slova{'a', 'b'}) DO
+    Push(S, Ch, ok);
+    Read(Ch);
+  END;
+  IF NOT ok THEN
+    WriteString('Greska - mali stek')
+  ELSIF Ch # 'c' THEN
+    WriteString('Pogresan string')
+  ELSE
+    Read(Ch);
+    WHILE ok AND (Ch # EOL) DO
+      Top(S, C, ok);
+      ok := ok AND (C = Ch);
+      IF ok THEN
+        Pop(S, ok);
+        Read(Ch);
+      END
+    END;
+    IF NOT (ok AND Empty(S)) THEN
+      WriteString('Pogresan string')
+    ELSE
+      WriteString('String pripada jeziku L')
+    END
+  END
+END wcw.
+\end{lstlisting}
+
+\subsection{Zadatak: Kalkulator za izračunavanje postfiksnih izraza}
+
+
+Napraviti kalkulator za izračunavanje postfiksnih izraza. Svi brojevi
+koji figurišu u izrazu su jednocifreni.
+
+\begin{lstlisting}[style=codeblock]
+MODULE PostFix;
+
+FROM StekI IMPORT StekTip, MakeNull, Empty, Top, Pop, Push;
+FROM InOut IMPORT Read, Write, WriteInt, EOL;
+TYPE
+  slova = SET OF CHAR;
+VAR
+  S : StekTip;
+  Ch : CHAR;
+  Op1, Op2 : INTEGER;
+  ok : BOOLEAN;
+PROCEDURE Conv(Ch : CHAR) : INTEGER;
+BEGIN
+  RETURN  ORD(Ch) - ORD('0') 
+END Conv;
+
+BEGIN
+  MakeNull(S);
+  Read(Ch);
+  WHILE Ch # EOL DO
+    IF Ch IN slova{'+', '-', '/', '*', '%'} THEN
+      Top(S, Op2, ok);
+      Pop(S, ok);
+      Top(S, Op1, ok);
+      Pop(S, ok);
+      CASE Ch OF
+        '+' : Op1 := Op1 + Op2 |
+        '-' : Op1 := Op1 - Op2 |
+        '*' : Op1 := Op1 * Op2 |
+        '/' : Op1 := Op1 DIV Op2 |
+        '%' : Op1 := Op1 MOD Op2
+      END;
+      Push(S, Op1, ok)
+    ELSE
+      Push(S, Conv(Ch), ok)
+    END;
+    Read(Ch);
+  END;
+  Top(S, Op1, ok);
+  Write('=');
+  WriteInt(Op1,5)
+END PostFix.
+\end{lstlisting}
+
+
+\section{Simulacija rekurzije}
+
+
+Na početku označiti sve rekurzivne pozive u originalnoj proceduri
+adresama (npr. 1,2,3... ili konstante nabrojivog tipa podataka).  
+
+Na steku se čuvaju lokalne promenljive, parametri procedure i adresa
+mesta poziva, a u skladu sa tim se kreira InfoTip.
+
+Trivijalnim pozivom se smatra onaj koji se izračunava bez dodatnih
+rekurzivnih poziva.  
+
+U kodu ispod, \kod{treba\_rekurzija} znači da je poziv netrivijalan,
+odnosno treba naći uslove pod kojima se sigurno dešavaju rekurzivni
+pozivi.
+
+\begin{lstlisting}
+MakeNull(S);
+REPEAT
+  WHILE treba_rekurzija DO
+    -prepisati sve od pocetka originalne 
+     procedure do prvog rekurzivnog poziva
+    -staviti na stek potrebne
+     lokalne promenljive, parametre procedure i
+     adresu mesta poziva
+    -podesiti vrednosti parametara da budu
+     kao u rekurzivnom pozivu procedure
+  END;
+  trivijalan poziv
+  umesto RETURN x pisati rez := x 
+  jos := TRUE;
+  WHILE jos AND NOT Empty(S) DO
+    Top(S, el, ok);
+    Pop(S, ok);
+    -restauriramo vrednosti sa steka
+    -u zavisnosti od adrese poziva nastavimo
+     prepisivanje originalne procedure sa 
+     tog mesta
+    -ako se dodje do novog rek. poziva tada: 
+       -sacuvati na steku vrednosti
+       -podesiti vrednosti parametara da budu 
+        kao u rekurzivnom pozivu procedure
+       -ici na pocetak koda 
+        (ovo se postize sa jos := FALSE)
+    -inace
+       ako se naidje na RETURN x pisati rez := x
+  END
+UNTIL Empty(S);
+\end{lstlisting}
+
+Ako je procedura funkcijska tada se na kraj dodaje \kod{RETURN rez}.
+
+\subsection*{ZADACI}
+
+Simulirati ponašanje sledećih rekurzivnih procedura (funkcija) upotrebom steka:
+
+\subsection{Primer 1 -- faktorijel}
+
+
+\begin{lstlisting}[style=codeblock]
+MODULE Fakto;
+(* InfoTip = CARDINAL; *)
+
+FROM IO IMPORT WrStr, WrLn, WrCard, RdCard;
+FROM StekC IMPORT StekTip, MakeNull, Empty,
+                  Top, Pop, Push;
+VAR
+  n : CARDINAL;
+PROCEDURE RFakto(n : CARDINAL) : CARDINAL;
+BEGIN
+  IF n <= 1 THEN
+    RETURN 1
+  ELSE
+    RETURN n * RFakto(n-1)
+  END
+END RFakto;
+
+
+PROCEDURE SFakto(n : CARDINAL) : CARDINAL;
+VAR
+  s : StekTip;
+  rez : CARDINAL;
+  OK : BOOLEAN;
+BEGIN
+  MakeNull(s);
+  WHILE n > 1 DO
+    Push(s,n,OK);
+    DEC(n)
+  END;
+  rez := 1;
+  WHILE NOT Empty(s) DO
+    Top(s, n, OK);
+    Pop(s, OK);
+    rez := n * rez
+  END;
+  RETURN rez
+END SFakto;
+
+BEGIN
+  WrStr('n = ');
+  n := RdCard();
+  WrLn
+  WrStr('n! = ');
+  WrCard(RFakto(n), 1);
+  WrStr(' = ');
+  WrCard(SFakto(n), 1)
+END Fakto.
+\end{lstlisting}
+
+\subsection{Primer 2 -- stepenovanje}
+
+\begin{lstlisting}[style=codeblock]
+MODULE Step;
+(* InfoTip = RECORD
+                x : REAL;
+                n : CARDINAL;
+                adr : (par, nepar)
+             END;
+*)
+
+FROM IO IMPORT WrStr, WrLn, WrReal,
+        RdReal, RdCard;
+FROM StekStep IMPORT StekTip, MakeNull, Empty,
+             Top, Pop, Push, InfoTip, AdrTip;
+
+VAR
+  n : CARDINAL;
+  x : REAL;
+
+PROCEDURE Sqr(y : REAL) : REAL;
+BEGIN
+  RETURN y * y
+END Sqr;
+
+PROCEDURE RStep(x : REAL;
+                n : CARDINAL) : REAL;
+BEGIN
+  IF n = 0 THEN
+    RETURN 1.
+  ELSIF ODD(n) THEN
+    RETURN x * Sqr( RStep(x, n DIV 2) )
+  ELSE
+    RETURN Sqr( RStep(x, n DIV 2) )
+  END
+END RStep;
+
+PROCEDURE SStep(x : REAL;
+                n : CARDINAL ) : REAL;
+VAR
+  s : StekTip;
+  OK : BOOLEAN;
+  rez : REAL;
+  el : InfoTip;
+BEGIN
+  MakeNull(s);
+  WHILE n > 0 DO
+    el.x := x;
+    el.n := n;
+    IF ODD(n) THEN
+      el.adr := nepar;
+    ELSE
+      el.adr := par
+    END;
+    Push(s,el,OK);
+    n := n DIV 2
+  END;
+  rez := 1.;
+  WHILE NOT Empty(s) DO
+    Top(s, el, OK);
+    Pop(s, OK);
+    x := el.x;
+    n := el.n;
+    IF el.adr = nepar THEN
+      rez := x * Sqr(rez)
+    ELSE
+      rez := Sqr(rez)
+    END
+  END;
+  RETURN rez
+END SStep;
+
+BEGIN
+  WrStr('x =? ');
+  x := RdReal();
+  WrLn;
+  WrStr('n =? ');
+  n := RdCard();
+  WrStr('x^n = ');
+  WrReal(RStep(x, n), 10, 1);
+  WrStr(' = ');
+  WrReal(SStep(x, n), 10, 1)
+END Step.
+\end{lstlisting}
+
+\subsection{Primer 3 -- Fibonači}
+
+\begin{lstlisting}[style=codeblock]
+MODULE Fib;
+(* InfoTip = RECORD
+                n : CARDINAL;
+                PrviSab : CARDINAL;
+                adr : (prvi, drugi)
+             END;
+*)
+
+FROM IO IMPORT WrStr, WrLn, WrCard, RdCard;
+FROM StekFib IMPORT StekTip, MakeNull, Empty,
+       Top, Pop, Push, InfoTip, AdrTip;
+VAR
+  n : CARDINAL;
+
+PROCEDURE RFib(n : CARDINAL) : CARDINAL;
+BEGIN
+  IF n <= 1 THEN
+    RETURN n
+  ELSE
+    RETURN RFib(n-1) + RFib(n-2)
+  END
+END RFib;
+
+PROCEDURE SFib(n : CARDINAL ) : CARDINAL;
+VAR
+  s : StekTip;
+  OK, jos : BOOLEAN;
+  rez, PrviSab : CARDINAL;
+  el : InfoTip;
+BEGIN
+  MakeNull(s);
+  REPEAT
+    WHILE n > 1 DO
+      el.n := n;
+      el.adr := prvi;
+      Push(s,el,OK);
+      DEC(n)
+    END;
+    rez := (n);
+    jos := TRUE;
+    WHILE (NOT Empty(s)) AND jos DO
+      Top(s, el, OK);
+      Pop(s, OK);
+      n := el.n;
+      IF el.adr = prvi THEN
+        PrviSab := rez;
+        el.n := n;
+        el.adr := drugi;
+        el.PrviSab := PrviSab;
+        Push(s, el, OK);
+        DEC(n, 2);
+        jos := FALSE
+      ELSE
+        PrviSab := el.PrviSab;
+        rez := PrviSab + rez
+      END
+    END
+  UNTIL Empty(s);
+  RETURN rez
+END SFib;
+
+BEGIN
+  WrStr('n =? ');
+  n := RdCard();
+  WrStr('F(n) = ');
+  WrCard(RFib(n), 1);
+  WrStr(' = ');
+  WrCard(SFib(n), 1)
+END Fib.
+\end{lstlisting}
+
+\subsection{Primer 4 -- faktorijel 2}
+
+
+\begin{lstlisting}[style=codeblock]
+MODULE Faktor;
+(* InfoTip = CARDINAL; *)
+FROM IO IMPORT WrStr, WrLn, WrCard, RdCard;
+FROM StekC IMPORT StekTip, MakeNull, Empty,
+                  Top, Pop, Push;
+
+VAR
+  n,rez : CARDINAL;
+
+PROCEDURE RFakto(n : CARDINAL;
+                 VAR rez : CARDINAL);
+BEGIN
+  IF n = 0 THEN
+    rez := 1
+  ELSE
+    RFakto(n-1, rez);
+    rez := n * rez
+  END
+END RFakto;
+
+PROCEDURE SFakto(n : CARDINAL;
+                 VAR rez : CARDINAL);
+VAR
+  s : StekTip;
+  OK : BOOLEAN;
+BEGIN
+  MakeNull(s);
+  WHILE n > 0 DO
+    Push(s,n,OK);
+    DEC(n)
+  END;
+  rez := 1;
+  WHILE NOT Empty(s) DO
+    Top(s, n, OK);
+    Pop(s, OK);
+    rez := n * rez
+  END
+END SFakto;
+
+BEGIN
+  WrStr('n =? ');
+  n := RdCard();
+  WrLn;
+  WrStr('n! = ');
+  RFakto(n, rez);
+  WrCard(rez, 1);
+  WrStr(' = ');
+  SFakto(n, rez);
+  WrCard(rez, 1)
+END Faktor.
+\end{lstlisting}
+
+\subsection{Primer 5 (ispitni)}
+
+
+\begin{lstlisting}[style=codeblock]
+MODULE Rek1;
+(* InfoTip = RECORD
+                d, g, m1, m2 : INTEGER; 
+                adr : (prvi, drugi)
+             END;
+*)
+FROM Stek1 IMPORT StekTip, adresa, InfoTip,
+         MakeNull, Empty, Top, Pop, Push;
+IMPORT IO;
+VAR
+  X : ARRAY [1..20] OF INTEGER;
+
+PROCEDURE Max(d, g: INTEGER) : INTEGER;
+VAR
+  m1, m2 : INTEGER;
+BEGIN
+  IF d>g THEN
+    RETURN MIN(INTEGER)
+  ELSIF d=g THEN
+    RETURN X[d]
+  ELSE
+    m1 := Max(d, (d+g) DIV 2);
+    m2 := Max((d+g) DIV 2 +1, g);
+    IF m1 > m2 THEN
+      RETURN m1
+    ELSE
+      RETURN m2
+    END
+  END
+END Max;
+
+PROCEDURE SMax(d, g: INTEGER) : INTEGER;
+VAR
+  S : StekTip;
+  el : InfoTip;
+  ok, jos : BOOLEAN;
+  m1, m2, rez : INTEGER;
+BEGIN
+  MakeNull(S);
+  REPEAT
+    WHILE d<g DO
+      el.d := d;
+      el.g := g;
+      el.adr := prvi;
+      Push(S, el, ok);
+      g := (d+g) DIV 2
+    END;
+    IF d>g THEN
+      rez := MIN(INTEGER)
+    ELSE (* d=g *)
+      rez := X[d]
+    END;
+    jos := TRUE;
+    WHILE jos AND NOT Empty(S) DO
+      Top(S, el, ok);
+      Pop(S, ok);
+      d := el.d;
+      g := el.g;
+      m1 := el.m1;
+      IF el.adr = prvi THEN
+        m1 := rez;
+        el.m1 := m1;
+        el.adr := drugi;
+        Push(S, el, ok);
+        d := (d+g) DIV 2 + 1;
+        jos := FALSE
+      ELSE (*el.adr = drugi*)
+        m2 := rez;
+        IF m1 > m2 THEN
+          rez := m1
+        ELSE
+          rez := m2
+        END
+      END
+    END
+  UNTIL Empty(S);
+  RETURN rez
+END SMax;
+
+BEGIN (* glavni program *)
+  X[1] := 3;
+  X[2] := 2;
+  X[3] := 5;
+  X[4] := -7;
+  X[5] := 0;
+  IO.WrCard(Max(1, 5), 3);
+  IO.WrLn;
+  IO.WrCard(SMax(1, 5), 3);
+  IO.WrLn
+END Rek1.
+\end{lstlisting}
+
+\subsection{Primer 6 (ispitni)}
+
+
+\begin{lstlisting}[style=codeblock]
+MODULE Rek2;
+(* InfoTip = RECORD
+                x, y, n : CARDINAL; 
+                adr : (prvi, drugi, treci, cetvrti)
+             END;
+*)
+FROM Stek2 IMPORT StekTip, adresa, InfoTip, 
+           MakeNull, Empty, Top, Pop, Push;
+IMPORT IO;
+
+PROCEDURE g(x : CARDINAL; y : CARDINAL;
+            n : CARDINAL) : CARDINAL;
+BEGIN
+  IF n < 3 THEN
+    RETURN x + y
+  ELSIF ODD(n) THEN
+    RETURN g(g(x+1, y, n-2), y, n-3)
+  ELSE
+    RETURN g(x, g(x, y+1, n-2), n-3)
+  END
+END g;
+
+PROCEDURE Sg(x : CARDINAL; y : CARDINAL;
+             n : CARDINAL) : CARDINAL;
+VAR
+  S : StekTip;
+  el : InfoTip;
+  ok, jos : BOOLEAN;
+  rez : CARDINAL;
+BEGIN
+  MakeNull(S);
+  REPEAT
+    WHILE n >= 3 DO
+      IF ODD(n) THEN
+        el.x := x;
+        el.y := y;
+        el.n := n;
+        el.adr := prvi;
+        Push(S, el, ok);
+        INC(x);
+        DEC(n, 2)
+      ELSE
+        el.x := x;
+        el.y := y;
+        el.n := n;
+        el.adr := treci;
+        Push(S, el, ok);
+        INC(y);
+        DEC(n, 2)
+      END
+    END;
+    rez := x+y;
+    jos := TRUE;
+    WHILE jos AND NOT Empty(S) DO
+      Top(S, el, ok);
+      Pop(S, ok);
+      x := el.x;
+      y := el.y;
+      n := el.n;
+      IF el.adr = prvi THEN
+        el.adr := drugi;
+        Push(S, el, ok);
+        x := rez;
+        DEC(n, 3);
+        jos := FALSE
+      ELSIF el.adr = treci THEN
+        el.adr := cetvrti;
+        Push(S, el, ok);
+        y := rez;
+        DEC(n, 3);
+        jos := FALSE
+      END
+    END
+  UNTIL Empty(S);
+  RETURN rez
+END Sg;
+
+BEGIN (* glavni program *)
+  IO.WrCard(g(2, 3, 10), 3);
+  IO.WrCard(Sg(2, 3, 10), 3);
+END Rek2.
+\end{lstlisting}
+
+%\columnbreak
+
+\appendix
+
+\section{Native XDS Modula 2 -- kratko uputstvo}
+
+
+Ovo uputstvo ukratko pokriva kako se može nabaviti XDS Modula 2 za Windows
+sistem, njenu instalaciju, te kako napraviti i pokretnuti jednostavan program.
+
+\subsection*{Dobavljanje instalacije}
+
+
+Native XDS Modula 2 se može besplatno skinuti sa sajta proizvođača,
+\url{http://www.excelsior-usa.com/}, tačnije na adresi:
+
+\url{http://www.excelsior-usa.com/xdsdl.html}
+
+Prvo se prikazuje ugovor o korišćenju koji na dnu treba potvrditi da ste
+razumeli i da ćete ga se pridržavati.
+
+Na stranici koja se potom otvara je potrebno odabrati sledeće pakete za
+download:
+
+* Native XDS-x86 2.51 for Windows (6.5MB)
+\url{http://www.excelsior-usa.com/download/xds25x/xds-x86-251-enduser-win32.exe}
+
+* TSCP add-on (2.4MB)
+\url{http://www.excelsior-usa.com/download/xds25x/tscp-x86-251-enduser-win32.exe}
+
+\subsection*{Instalacija okruženja}
+
+Prvo treba instalirati osnovno okruženje (xds-x86...), a potom i Top
+Speed Compatibility Pack (tscp-x86...), koji je potreban za neke
+module koji se koriste.
+
+\emph{Korisnicima Windows-a 7 preporučujemo da pokrenu instalacione
+  pakete pomoću opcije ``Run as administrator'' do koje se stiže desnim
+  klikom miša.}
+
+Pretpostavićemo u daljem tekstu da je program instaliran u
+\kod{C:/XDS/}
+
+\subsection*{Pokretanje okruženja}
+
+Po uspešnoj instalaciji bi trebalo da postoji ikonica na desktopu, kao
+i grupa sa programom u start meniju.
+
+Ukoliko iz bilo kakvog razloga ne postoje odgovarajuće prečice,
+okruženje se može pokrenuti uz pomoć izvršnog fajla
+\kod{C:/XDS/BIN/xds.exe} (ako je instalirano na podrazumevanoj
+lokaciji).
+
+\subsection*{Prvi projekat}
+
+Da bismo mogli da pišemo i pokrećemo svoj program, potrebno je prvo
+napraviti projekat za njega, što se radi na sledeći način:
+
+\begin{itemize}
+
+\item 
+ Iz menija se odabere Project->New.
+\item U dijalogu se klikne na gornje dugme ``Browse'', odabere se putanja gde
+  će se kreirati projekat i ukuca se ime novog projekta.
+
+\item U drugom polju ``Template'' ne treba da piše ništa. Ukoliko
+  postoji neki tekst, obrisati ga.
+
+\item Kliknuti na ``OK''
+
+\item Iskočiće dijalog na kome piše da ne postoji fajl za editovanje,
+  kliknuti na ``OK'' da se on napravi.
+
+\item Pojavljuje se forma za kucanje programa, ukucati (na primer):
+
+\begin{minipage}{\columnwidth}
+\begin{lstlisting}[style=codeblock]
+  MODULE Hello;
+  FROM InOut IMPORT WriteString,WriteLn;
+  BEGIN
+    WriteString("Hello World");
+    WriteLn;
+  END Hello.
+\end{lstlisting} 
+\end{minipage}
+
+\item Program se može pokrenuti na različite načine, pri čemu se
+  automatski prevodi:
+
+  \begin{itemize}
+
+  \item Klik na ``Run'' ikonicu u toolbaru (plavi čovečuljak koji trči)
+
+  \item Meni Debug->Run
+
+  \item Prečica Ctrl+F9 na tastaturi
+
+  \end{itemize}
+
+\item Ako je sve u redu sa programom, treba da se pojavi novi terminal
+  u kome se ispisuje rezultat izvršavanja programa, u našem slučaju
+  jednostavna pozdravna poruka.
+\end{itemize}  
+
+Naravno moguće je i samo prevesti (kompajlirati) program, tako da se
+samo prikažu greške (ako ih ima) i bez pokretanja programa:
+\begin{itemize}
+\item Klik na ``Compile'' ikonicu u toolbaru
+\item Meni Tools->Compile
+\item Prečica F9 na tastaturi
+\end{itemize}
+
+Ukoliko u programu postoje greške, on neće biti pokrenut, već će se
+dobiti lista grešaka u donjem delu prozora. Na primer ako obrišemo ``S''
+u četvrtom redu i probamo da pokrenemo program, taj red će biti
+označen svetlo plavom bojom i dobićemo poruku:
+\kod{- Error in pro1.mod [4:5]: Undeclared identifier "Writeting"}
+
+Što znači da u četvrtom redu, kod petog karatkera postoji problem, da
+identifikator nije deklarisan, što najčešće znači da ga nismo uvezli,
+ili, kao u našem slučaju, da smo napravili grešku u kucanju.
+
+Stvar na koju isto treba obratiti pažnju je da se nekad greška
+prijavljue nešto kasnije u tekstu nego što je napravljena. Na primer,
+ako obrišemo ``;'' na kraju četvrtog reda i probamo da pokrenemo
+program, peti red će biti označen svetlo plavom bojom i dobićemo
+poruku:
+
+\kod{- Error in pro1.mod [5:5]: Expected symbol ";" }
+
+Ovo se desilo jer nedostaje tačka zarez na kraju četvrtog reda, ali će
+kompajler probati da je traži i dalje, pa će tek na početku petog reda
+prijaviti grešku.
+
+U spisku se takođe pojavljuje i upozorenje (Warning) o tome da se
+uvezena komanda WriteString ne koristi nigde u programu. Često se
+upozorenja mogu ignorisati, a pažnju uglavnom treba obraćati na
+greške, odnosno poruke koje počinju sa ``Error''.
+
+Takođe se često dešava da su druge prijavljene greške posledica prve,
+te je poželjno ponovo kompajlirati (ili pokretati) program posle svake
+ispravljene greške.
+
+\paragraph{Napomena o template-ovima pri kreiranju projekta:} 
+Moguće je namestiti da u dijalogu za novi projekat drugo polje ``Template''
+ uvek bude prazno. Potrebno je u tom istom dijalogu kliknuti na
+ ``Configure'', a potom isprazniti polje ``default template''.
+\end{multicols}
+
+\end{document}
diff --git a/todo.txt b/todo.txt
new file mode 100644 (file)
index 0000000..59e0615
--- /dev/null
+++ b/todo.txt
@@ -0,0 +1,203 @@
+--------------------------------------------------
+Aleksandar Sarac
+mail1:
+Starija verzija procedure Anuliraj bi mogla da ostane, ako bi se napravile
+promene u Puta i PolinomNaN.
+Na primer, ovo je kod mene radilo:
+PROCEDURE Puta(p1, p2: Polinom; VAR pr: Polinom);
+VAR
+  pomocni: Polinom;
+BEGIN
+  Anuliraj(pr);
+  pomocni := NIL;
+  IF (p1 <> NIL) AND (p2 <> NIL) THEN
+Linija "pomocni := NIL;": bez nje je promenljiva "pomocni" imala neku
+neobičnu vrednost s kojom se
+procedura DisposePolinom bezveze prošetala memorijom, saplela se i oborila
+program.
+Ovakva procedura PolinomNaN mi je radila:
+PROCEDURE PolinomNaN(p: Polinom; n: CARDINAL;
+                     VAR rez: Polinom);
+VAR
+  i: CARDINAL;
+  pom : Polinom;
+BEGIN
+  IF n = 0 THEN
+    NEW(rez);
+    rez^.k := 1.0;
+    rez^.st := 0;
+    rez^.veza := NIL;
+(*  ELSIF n = 1 THEN
+   Kopiraj( p, rez );*)
+  ELSE
+    (*rez := p;*)
+    Kopiraj(p, rez); (* za n = 1 *)
+    FOR i := 2 TO n DO
+      Kopiraj(rez, pom);
+      (*Puta(rez, p, rez)*)
+      Puta(pom, p, rez);
+      Anuliraj(pom)
+    END
+  END
+END PolinomNaN;
+
+mail2:
+U proceduri Puta je deklarisana promenljiva pomocni, koja, izgleda, dobije
+vrednost koja god se našla u memoriji u tom trenutku. Zatim se
+pozove MonomPuta(p1, p2, pomocni); i na samom početku te procedure se
+poziva Anuliraj. Ako se u memoriji našlo nešto, pa pomocni nije NIL,
+DisposePolinom pokuša da oslobodi memoriju s ko zna kakvim vrednostima
+pokazivača i padne program. Mislim da je to problem jer procedura "proradi"
+čim se na samom početku izvrši pomocni := NIL. Čini mi se da je glavni
+problem to što kompajler dozvoljava upotrebu neinicijalizovanih promenljiva.
+Isto, u proceduri Puta: poziva se MonomPuta(p1, p2, pomocni); u kojoj se
+napravi novi polinom na koji pokazuje pomocni, pa se ubacuju monomi, ali se
+ne oslobađa memorija.
+REPEAT
+  UbaciMonom(pomocni, pr);
+  pomocni := pomocni^.veza
+UNTIL pomocni = NIL;
+Možda bi moglo, na primer, da se napiše procedura koja bi radila isto što
+i pomocni := pomocni^.veza, ali bi i oslobađala memoriju:
+PROCEDURE AnulirajPrvi(VAR p : Polinom);
+VAR
+  pom : Polinom;
+BEGIN
+  IF p # NIL THEN
+    pom := p;
+    p := p^.veza;
+    DISPOSE(pom)
+  END
+END AnulirajPrvi;
+pa bi kod ubacivanja monoma moglo da stoji:
+REPEAT
+  UbaciMonom(pomocni, pr);
+  (*pomocni := pomocni^.veza*)
+  AnulirajPrvi(pomocni)
+UNTIL pomocni = NIL;
+
+doni:
+zapravo bolje ovo poslednje sa SaberiNa i DisposePolinom
+--------------------------------------------------
+
+doni:srediti polinome jos malo
+
+doni: liste - dodati nesto gde se brise vise elemenata u istom
+prolazu.
+
+vlada:dodati teoremu o pitagorinim trojkama i mozda jos
+neka objasnjenja
+
+doni:ubaciti negde primer kako radi Compare za stringove
+
+----------------------------
+mils:mozda bi to dodatu funkciju SaberiNa
+trebalo inkorporirati u zadatak 4.2 (jedan polinom manje sto se potrosnje
+memorije tice i jedan Dispose manje sto se procesora tice).
+
+----------------------------
+da li dodati i druge slicne procedure osim SaberiNa?
+
+doni:diskuijom zakljuceno da je ovo valjda i dosta, tj da je dovoljno
+za demonstraciju.
+---------------------------
+StekTip i RedOpslTip umesto Stack i Queue
+
+doni:uradjeno
+----------------------------
+Polinomi - redosled parametara jos malo unormaliti? kopija je nekako kontra?
+optimizacije u vezi oslobadjanja memorije - Anuliraj bi mogao zvati Dispose
+za svaki slucaj. Saberi i slicno bi isto mogli biti izmenjeni.
+Mozda cak da bude SaberiNa(sab:Polinom; VAR rez:Polinom) pa da 
+sve bude u tom jednom, da se ne bi bacala memorija kad je sab(rez,sab,rez).
+
+doni:uradjeno
+
+----------------------
+Radacha:
+- na vise mesta imamo niz naredbi:
+Read(ch);
+Write(ch);
+Sve Write-ove treba pobrisati da bi kod imao smisla na XDS Moduli.
+- ponegde se javlja tip LONGCARD, pa se jos mixuje sa CARDINAL tako
+sto se radi cast oblika LONGCARD(x), sto na XDS Moduli ne moze.
+Valjalo bi sve LONGCARD-e izbaciti, posto su na XDS-u ionako isti
+kao CARDINAL.
+
+doni:ovo je sredjeno
+------------------------
+Igor Sarcevic - bug submit: (patched)
+--------------
+Pozivom *PolinomNaN( p, 1 , rez )* procedura vraca *rez* koji je pokazivac
+na strukturu na koju pokazuje *p*
+*
+*
+greshka se nalazi u 12. redu poshto u sluchaju da je n = 1 for petlja ne
+izvrshi ni jednom pa se stim ni ne kopira p u rez
+PROCEDURE PolinomNaN(p: Polinom; n: CARDINAL;
+                     VAR rez: Polinom);
+VAR
+     i: CARDINAL;
+BEGIN
+     IF n = 0 THEN
+            NEW(rez);
+            rez^.k := 1.0;
+            rez^.st := 0;
+            rez^.veza := NIL;
+     ELSE
+            *rez := p;*
+            FOR i := 2 TO n DO
+                    Puta(rez, p, rez)
+            END
+     END;
+END PolinomNaN;
+jednostavan patch :
+PROCEDURE PolinomNaN(p: Polinom; n: CARDINAL;
+                     VAR rez: Polinom);
+VAR
+     i: CARDINAL;
+BEGIN
+     IF n = 0 THEN
+            NEW(rez);
+            rez^.k := 1.0;
+            rez^.st := 0;
+            rez^.veza := NIL;
+*     ELSIF n = 1 THEN*
+*            Kopiraj( rez, p );*
+     ELSE
+            rez := p;
+            FOR i := 2 TO n DO
+                    Puta(rez, p, rez)
+            END
+     END;
+END PolinomNaN;
+mozda u sushtini nema smisla stepenovati na stepen 1 , ali recimo u
+izvodjenju procedure kompozicija ima ( inache pochne program da brljavi kao
+meni na vezbama  )
+
+doni:patchovano
+
+-----------------------
+Radacha2:
+
+evo necega za PolinomL: u procedurama Unos i Deli posle poziva
+procedure UbaciMonom treba ubaciti DISPOSE(novi), da ne curi memorija.
+doni:patchovano
+-----------------------
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner