Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 1087 → Rev 1084

/demos/tags/start/simcity/draw.c
File deleted
/demos/tags/start/simcity/keyboard.c
File deleted
\ No newline at end of file
/demos/tags/start/simcity/include/draw.h
File deleted
/demos/tags/start/simcity/include/simcity.h
File deleted
/demos/tags/start/simcity/include/proc.h
File deleted
/demos/tags/start/simcity/include/states.h
File deleted
/demos/tags/start/simcity/include/car.h
File deleted
/demos/tags/start/simcity/include/keyfunct.h
File deleted
\ No newline at end of file
/demos/tags/start/simcity/include/constant.h
File deleted
/demos/tags/start/simcity/include/misc.h
File deleted
/demos/tags/start/simcity/proc.c
File deleted
/demos/tags/start/simcity/initfile.c
File deleted
/demos/tags/start/simcity/sem/yellow_l.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sem/red_r.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sem/green_l.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sem/yellow_r.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sem/red_d.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sem/red_u.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sem/yellow_d.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sem/yellow_u.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sem/green_r.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sem/green_d.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sem/green_u.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sem/red_l.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/car.c
File deleted
\ No newline at end of file
/demos/tags/start/simcity/reading.c
File deleted
/demos/tags/start/simcity/simcity.c
File deleted
/demos/tags/start/simcity/tasks.c
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sprite/sp_1.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sprite/sp_2.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sprite/sp_3.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sprite/sp_4.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sprite/sp_5.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sprite/sp_6.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sprite/sp_7.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sprite/sp_0.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/keyfunct.c
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_210n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_120n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_030n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_300n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/street.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_240n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_015n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_150n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_060n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_105n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_330n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_045n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/old_sk.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_180n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_090n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_270n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_135n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_225n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_315n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_075n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_165n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_255n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_345n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/old.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_195n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_285n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/car_000n.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/Bb0.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/img/bb1.raw
File deleted
\ No newline at end of file
/demos/tags/start/simcity/misc.c
File deleted
\ No newline at end of file
/demos/tags/start/simcity/sem.raw
File deleted
/demos/tags/start/simcity/makefile
File deleted
/demos/tags/start/edfact/initfile.c
File deleted
/demos/tags/start/edfact/edfact.c
File deleted
/demos/tags/start/edfact/testact.c
File deleted
/demos/tags/start/edfact/edfact.h
File deleted
/demos/tags/start/edfact/readme
File deleted
/demos/tags/start/edfact/makefile
File deleted
/demos/tags/start/myapp/initfile.c
File deleted
/demos/tags/start/myapp/mymod.c
File deleted
/demos/tags/start/myapp/myapp.c
File deleted
/demos/tags/start/myapp/readme.txt
File deleted
/demos/tags/start/myapp/mymod.h
File deleted
/demos/tags/start/myapp/makefile
File deleted
/demos/tags/start/static/static.c
File deleted
/demos/tags/start/static/test1st.c
File deleted
/demos/tags/start/static/static.h
File deleted
/demos/tags/start/static/readme
File deleted
/demos/tags/start/static/makefile
File deleted
/demos/tags/start/static/initfile.c
File deleted
/demos/tags/start/lights/simlight.c
File deleted
/demos/tags/start/lights/blaster.h
File deleted
/demos/tags/start/lights/initfile.c
File deleted
/demos/tags/start/lights/param.dat
File deleted
/demos/tags/start/lights/readme.txt
File deleted
/demos/tags/start/lights/makefile
File deleted
/demos/tags/start/pse51/ptest1
File deleted
\ No newline at end of file
Property changes:
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: start/pse51/ptest2
===================================================================
--- start/pse51/ptest2 (revision 1087)
+++ start/pse51/ptest2 (nonexistent)
@@ -1,437 +0,0 @@
-ELF"4`d4 ( €""È@È@ HAÈP#ÈP# Pî 덶°­üORäe‹Ká€uU¿€ Ç–eÆG1GeÆGGeÆG2GeÆG¸Ôæ"fe£èP#Áèfe£îP#ÈX#¿€ Ç’eÆG0GeÆGf¸0ŽØŽÀŽÐŽàŽè¼àƒ#Ç°¹%àc#Ç´¹%àƒ#£ÔX#‰ØX#ÈX#êµ"8ÎX#üèâÒê U‰å‹Eê ‰öU‰åƒì0ÆEéxÆEê-ÆEèh0"ƒì‹Eèf‰$ÆD$-èiÇ$’-#èaæƒÄh@"hLÞ#èã>ƒÄÿ5LÞ#h¬-#è<æÇ$À-#è0æh†h°"jEäPèMƒÄ …Àtƒì hÓ-#èæƒÄƒìÿuähæ-#èôåÇ$û-#èèåhE h°"jEàPèGMƒÄ …Àtƒì h.#è¿åƒÄƒìÿuàh!.#è¬åÇ$6.#è åƒÄƒì jèn<ƒÄ=vìƒì hM.#è{åƒÄÿuäè˜NƒÄÿuàèNÇ$c.#èY布ÄÉÍvU‰åƒìÿ5lÞ#hp-#è6åƒÄÉÐU‰åSƒì‹]Sÿ5lÞ#h€.#è庅ëQ‰Ø÷êÁúÁû)ڃÄRÿ5LÞ#è9>ƒÄ‹]üÉÐU‰åƒìÿ5LÞ#èû=ƒÄ Pÿ5lÞ#hÀ.#èÇäƒÄÉÉöU‰åSƒì ‹]h$"hÜX#è¯OƒÄÿ5lÞ#hà.#è”äƒÄSÿ5LÞ#èÉ=ƒÄÿ5LÞ#è—=ƒÄ Pÿ5lÞ#hÀ.#ècäƒÄÿ5lÞ#h€-#èP七Ä‹]üÉÍvU‰åƒìèÁ:ÉÍvU‰åƒìj ÿujh'èMè‰è‡¬è¶²è1™ƒÄ jjjèÿLèîv¸èƒÄÉÃU‰åWVSƒìX‹]}¨¾àX#ü¹ó¥E¸‰E¨fÇE¸ÇE¼ÇEÀfÇEÄÇEÐÇEÔÇEÜÇEà‰]ÈÇEØÇEÌjè8L‰EÐÇEÜÇEàƒMÌ
-è֜E¨‰$ècƒÄ…Àyƒì h /#è»ãƒÄƒì SèoE¸ƒÄeô[^_]ÍvU‰åƒìŠU€=ðY#„¶€ú*t€úªt
-€ú6t€ú¶uÆðY#¸é›„Òy,ÆðY#€ú¸uÆüY#ÆòY#ëՀúuÐÆüY#ëljöÆðY#€ú8u€ -üY#ÆòY#멀úu € -üY#뛉ö€ú5uf¾•„#·Àé)v€ú…•f¾|„#·Àé -v€úàuÆðY#éTÿÿÿv€ú*t€ú6u2ÆñY#€ú*u€ -üY#é/ÿÿÿ‰ö€ú6…$ÿÿÿ€ -üY# éÿÿÿv€úªt€ú¶u"ÆñY#€úªt €ú¶…öþÿÿÆüY#éêþÿÿ€úFu€=õY#•õY#ë.v€ú:u€=óY#•óY#ëv€úEu;€=ôY#•ôY#ƒì¶õY#P¶óY#P¶ôY#Pèõ¸ƒÄé€úu€ -üY#éhþÿÿv€ú8u€ -üY#éTþÿÿv€út€ú¸uÆüY#é;þÿÿ‰ö¸„҈рúRt2€úOt-€úSt(€úPt#€úQt€úKt€úLt€úMt€úGt
-€úHt€úIu€=ôY#uT€=ñY#uK·Â -ÿë~€=óY#t/Bð< vBâ<vBÔ<w€=ñY#t¶Âf¾€`„#·ÀëG€=ñY#t¶Âf¾€…#·Àë-v€=òY#t¶Âf¾€ …#·Àëv¶Âf¾€`„#·ÀÉÃU‰åWVSƒì,}؃ìjE×PèòƒÄ…À„¡ƒì ¶E×Pèöüÿÿ‰ÂƒÄf…Ò„†÷Âÿt  üY#ƒÈ@ë‰ö üY#ˆE؈UيE׈EÚ±»;X„#}8¾àƒ#v݊D2:EÚuŠ2:EØuƒì Wÿ’äƒ#±ƒÄC;X„#|ЄÉuƒìjW¿"†#Pèý¡ƒÄè-é<ÿÿÿU‰å‹E£ìY#Šˆb„#ŠPˆc„#ŠPˆd„#ŠPˆe„#ŠPˆf„#ŠPˆg„#ŠPˆh„#ŠPˆi„#ŠPˆj„#ŠP ˆk„#ŠP
-ˆ…#ŠP ˆ…#ŠP ˆ…#ŠP -ˆ…#ŠPˆ…#ŠPˆ…#ŠPˆ…#ŠPˆ …#ŠPˆ
-…#ŠPˆ …#ŠPˆl„#ŠPˆ …#ŠPˆm„#ŠPˆ -…#ŠPˆz„#ŠPˆ…#ŠPˆ{„#ŠPˆ…#ŠPˆ‡„#ŠPˆ'…#ŠPˆˆ„#ŠPˆ(…#ŠP ˆ‰„#ŠP!ˆ)…#ŠP"ˆ•„#ŠP#ˆ5…#ŠP$ˆ“„#ŠP%ˆ3…#ŠP&ˆ”„#ŠP'ˆ4…#ŠP(ˆ‹„#ŠP)ˆ+…#ŠP*ˆ™„#ŠP+ˆ9…#ŠP,ˆn„#ŠP-ˆ…#ŠP.ˆo„#ŠÖˆ…#ŠP0ˆa„#ŠP1ˆ…#ŠP2ˆ|„#ŠP3ˆ…#ŠP4ˆd…#ŠP5ˆO…#ŠP6ˆP…#ŠP7ˆQ…#ŠP8ˆK…#ŠP9ˆL…#ŠP:ˆM…#ŠP;ˆG…#ŠP<ˆH…#ŠP=ˆI…#ŠP>ˆR…#ŠP?ˆS…#ŠP@ˆ®„#ŠPAˆ—„#ŠPBˆ•„#ŠPCˆª„#ŠPDˆN…#ŠPEˆ7…#ŠPFˆJ…#ŠPGˆ~„#ŠPHˆ…#ŠPIˆ„#ŠPJˆ0…#ŠPKˆŽ„#ŠPLˆ.…#ŠPMˆ€„#ŠPNˆ …#ŠPOˆr„#ŠPPˆ…#ŠPQˆ„#ŠPRˆ!…#ŠPSˆ‚„#ŠPTˆ"…#ŠPUˆƒ„#ŠPVˆ#…#ŠPWˆw„#ŠPXˆ…#ŠPYˆ„„#ŠPZˆ$…#ŠP[ˆ…„#ŠPRˆ%…#ŠP]ˆ†„#ŠP^ˆ&…#ŠP_ˆ’„#ŠP`ˆ2…#ŠPaˆ‘„#ŠPbˆ1…#ŠPcˆx„#ŠPdˆ…#ŠPeˆy„#ŠPfˆ…#ŠPgˆp„#ŠPhˆ…#ŠPiˆs„#ŠPjˆ…#ŠPkˆ„#ŠPlˆ…#ŠPmˆt„#ŠPnˆ…#ŠPoˆv„#ŠPpˆ…#ŠPqˆ„#ŠPrˆ/…#ŠPsˆq„#ŠPtˆ…#ŠPuˆ„#ŠPvˆ-…#ŠPwˆu„#ŠPxˆ…#ŠPyˆŒ„#ŠPzˆ,…#ŠP{ˆº…#ŠP|ˆ»…#ŠP}ˆDž#Š@~¢È…#]ÍvU‰åWVSƒì\‹]}ؾZ#ü¹󥿸ƒ=øY#…Qº¾`„#¹…#‰ö·ÂÆ0ÆBfúví…Ûu]؃{ÿuÇCìX#ƒì ÿsèûÿÿÇ$jjjhY/#èϔf£"†#ƒÄ fƒøÿu ¸þÿÿÿéÞ‰öjjjhY/#è0˜f£$†#ƒÄfƒøÿuƒì ¿"†#P蕛¸ýÿÿÿ頍vÇX„#ƒ{ÿuÇC "ƒ{tIÆE™cÆEš.ÆE˜ƒìÿsƒì‹E˜f‰$ÆD$.èÅÆE˜ƒÄÿsƒì‹E˜f‰$ŠEšˆD$襃ă;ÿuQfÇE¨ÇE¬ÇE°fÇE´ÇE¸ÇEÐÇEÈÐÇEÄ ÇEÀ¨aÇE¼
-ÇE̍E¨ë‹ƒì jjPh("hb/#èÿ‰ÃƒÄ ‰(†#ƒøÿu'ƒì ¿"†#P蓚¿$†#‰$脚‰Ø钐ƒ=Z#uWƒì ÿ5(†#艉ǃąÿt4ƒì ¿"†#PèLš¿$†#‰$è=šƒÄÿ5(†#èg5¸üÿÿÿë=ÇZ#ëèƒì¶õY#P¶óY#P¶ôY#PèûÇøY#‰øƒÄeô[^_]ÃU‰åƒì¶EPEèP¿$†#Pè0œƒÄ„Àt÷Eè@u¶Eéë‰ö¸ÉÐU‰åƒì ¶E Pÿu¿$†#Pèõ›·ÀƒÄÉÐU‰åSƒ=X„#0‹ -X„#Í»àƒ#‹Ef‰ŠE
-ˆD‹E ‰‚äƒ#A‰ -X„#‹$ÉÉöU‰åƒìèÉÍvU‰åƒìè±ÉÍvU‰åƒì¸ÿÿÿÿƒ=øY#t9蓃ì ÿ5(†#è-4¿"†#‰$è昿$†#‰$èט¸ƒÄÉÐU‰åƒìjèoÔÇ$è+ÔÇ$H/#èóÓè²-ƒÄÉÐU‰åWVSƒìŠEˆEó¿1¾d»`‰ö¹v‰òì©t"‰ÈA=þÿÿvì¸ÿÿÿÿ…Àu‰ÚŠEóî¸ë‰ö¸ë搸ÿÿÿÿÇEì¹d…Àt¸ÿÿÿÿët¸ë‰Êì©uî‹EìÿEì=þÿÿvé¸ÿÿÿÿ…Àu‰Úì¶Àë¸ÿÿÿÿƒøÿu
-¸þÿÿÿë3v=úu ¸ë"‰ö=þt ¸ýÿÿÿë‰ö‰øO…À9ÿÿÿ¸üÿÿÿƒÄ[^_]ÃU‰åVSƒìŠEˆE÷³Ô¾¹d‰ö‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë -¸ë搸ÿÿÿÿ…Àt¸ÿÿÿÿëL¸ë&»¹d‰ö‰Êì©tâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àuº`ŠE÷î¸ëv¸ÿÿÿÿ…Àt¸ÿÿÿÿëj¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àuºdì© tº`ì¶Ðëvºÿÿÿÿ‰Ð…Òx¸úú”ÀDþƒÄ[^]ÃU‰åWVSƒì »¾`‰ØK…À~^ƒì hÿè¼ýÿÿ‰ÂƒÄ…Òu{¿¹d‰Êì©u‰øG=þÿÿvì¸ÿÿÿÿ…Àu‰òì¶Ðëv¸ëꐺÿÿÿÿúªu›¸üÿÿÿúª…ƃì hõèMýÿÿ‰ÂƒÄ…Òt(¸ûÿÿÿ馉ö¸ýÿÿÿ隉ö¸ë.¸ëZ³`¾¹d‰Êì©tډðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî³e¾¹dv‰Êì©t®‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØîƒì hôèªüÿÿ‰ÂƒÄ¸…Ò•ÀHƒàƒèeô[^_]ÃU‰åWVSƒì ¾»d¹`‰Úì©t -‰Êì‰ðF=þÿvé³­¾¹d‰Êì©„‚‰ðF=þÿÿvè¸ÿÿÿÿ…ÀuºdˆØî¾»d¹`‰Úì©t -‰Êì‰ðF=þÿv鳪¾¹d‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ë搸놐¸ÿÿÿÿ…Àt¸÷ÿÿÿéݐ¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àu º`ì¶Àë¸ÿÿÿÿƒøUt¸ÿÿÿÿ錸ë&³«¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸öÿÿÿé9¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àu º`ì¶Àë¸ÿÿÿÿ…Àt¸þÿÿÿé鐸ë&³®¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…À…<èzüÿÿ…À…Žƒì hóèIúÿÿƒÄ…Àt
-¸ùÿÿÿépƒì jè.úÿÿƒÄ…Àt¸øÿÿÿéU¸ë.ÆZ#³©¾¹d‰Êì©tډðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸ôÿÿÿéù¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àu º`ì¶Àë¸ÿÿÿÿ…Àt¸óÿÿÿ驐¸ë&³¨¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸õÿÿÿéU¸ë&³Ó¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸ðÿÿÿ鐸ë&³Z¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî¸ë¸ÿÿÿÿ…Àt¸ïÿÿÿ魐ÆZ#ëBv¸ë^¹þÿ¾d»`‰òì¶ø÷Çt‰Úì¶À÷Ç tƒøZt»IƒùÿuÙ³§¾¹d‰Êì©tª‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àté»þÿÿ‰ö¸ë:€=Z#„þÆZ#³¨¾¹d‰Êì©tΉðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸îÿÿÿ鱐¸ëvƒì hóèWøÿÿ‰ÃÇ$dèIøÿÿÃÇ$èè;øÿÿÃÇ$è-øÿÿÃÇ$çèøÿÿþ§ƒÄ¿¹dv‰Êì©t’‰øG=þÿÿvì¸ÿÿÿÿ…Àuºd‰ðî¸ë¸ÿÿÿÿ…Àt¸íÿÿÿë…ÛuÆZ#¸eô[^_]ÃU‰åVS¡$Z#…Àt¡$Z#H£$Z#¸é²¸ë6ƒ=Z#uKŠ Z#¾¹dv‰Êì©t҉ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØîÿZ#뤍v¸ë:ƒ=Z#uGÇZ#³ô¾¹d‰Êì©tΉðF=þÿÿvì¸ÿÿÿÿ…À…Xÿÿÿº`ˆØîéKÿÿÿ‰ö¸[^]ÍvU‰åWVSƒì ¡(Z#@£(Z#¾õ³Ô¿¹dv‰Êì©t"‰øG=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ë搸ë.¸ÿÿÿÿ…Àu0»¹d‰Êì©tډØC=þÿÿvì¸ÿÿÿÿ…Àuº`‰ðîœúX‰Çƒì hõè5õÿÿ‰ÃƒÄ…Ût¸ûÿÿÿéù‰ö¸ë1¾§ÇEð¹dv‰Êì©tڋEðÿEð=þÿÿvé¸ÿÿÿÿ…Àu ºd‰ðî¸ë¸ë=¸ëq¸ÿÿÿÿþ`ÇEð¹d‰Êì©t΋EðÿEð=þÿÿvé¸ÿÿÿÿ…Àuºd‰ðî¾eÇEð¹dv‰Êì©tš‹EðÿEð=þÿÿvé¸ÿÿÿÿ…Àuº`‰ðîƒì hôè;ôÿÿÃĉøPÆZ#‰Øeô[^_]ÐU‰åWVSƒì ¸ÿÿÿÿ€=Z#„ºœúX‰Æƒì hõèóóÿÿƒÄ…Àt(¸ûÿÿÿé—‰ö¸ë:¸ëf¸é“‰ö³`¿¹d‰Êì©tΉøG=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî³G¿¹dv‰Êì©t¢‰øG=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØ¿¹dv‰Êì©„rÿÿÿ‰øG=þÿÿvè¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt ¸îÿÿÿ鐃ì hôèÿòÿÿƒÄ…Àt¸Ûÿÿÿ飉ö¸ë:‰ðP¡(Z#@£(Z#¾ô³Ô¿¹d‰Êì©tΉøG=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë -¸ë.¸ÿÿÿÿ…Àu0»¹d‰Êì©tډØC=þÿÿvì¸ÿÿÿÿ…Àuº`‰ðîÆZ#¸eô[^_]ÍvU‰åƒìÇD‡#Ç@‡#ƒ=Z#t!úè‹õÿÿ£Z#ÇZ#û…Àtúèôÿÿû¡Z#…Àuƒìÿuh ""jèQ¸ƒÄÉÍvU‰åVS¡$Z#@£$Z#³õ¾¹d‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî¸ë -¸ë搸ÿÿÿÿ[^]ÍvU‰åVS¡$Z#@£$Z#³ô¾¹d‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî¸ë -¸ë搸ÿÿÿÿ[^]ÍvU‰åƒì‹MœúX‰Â¡@‡#@%ÿ£@‡#Š€@†#ˆ‰ÐP€9úu è(úÿÿë‰ö¸ÉÐU‰åƒìƒ=0Z#t(Ǥ‡#Ç ‡#Ǩ‡#Ç0Z#‹E£,Z#ƒ=Z#t!úèôÿÿ£Z#ÇZ#û…Àtúèòÿÿû¡Z#…Àu.¸ìÿÿÿ€=Z#t ƒìjÿhH""j èOÆZ#¸ƒÄÉÉöU‰åS‹MœúX‰Ã¡ ‡#@ƒà?£ ‡#º`‡#ŠˆA¡ ‡#@ƒà?£ ‡#Šˆ¡ ‡#@ƒà?£ ‡#ŠˆA‰ØP¸‹$ÉÉöU‰åƒì€=Z#tèäùÿÿƒì j èŽOÆZ#¸ƒÄÉÐU‰åƒìƒ=Z#t!úè óÿÿ£Z#ÇZ#û…Àtúè™ñÿÿû¡Z#…Àt¸ë¶Z#ÉÍvU‰åVSŠEŠU€} t ƒ - Z#ë ‰öƒ% Z#„Àt ƒ - Z#ëƒ% Z#„Òtƒ - Z#ë¸ë6¸ëbƒ% Z#³õ¾¹d‰Êì©t҉ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî³í¾¹dv‰Êì©t¦‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØîÿZ#[^]ÐU‰åSƒìœúX‰Ã€=Z#tè–øÿÿè‘ðÿÿƒì hóèhîÿÿƒÄ…Àuƒì jèWîÿÿƒÄ…Àu‰ØP‹]üÉÍvU‰åº`ì¶ÈœúX‰Â¡@‡#;D‡#t¡D‡#ˆˆ@†#@%ÿ£D‡#‰ÐP]ÉöU‰åƒìº`ì¶Ðƒ=¨‡#u €úúu¡(Z#H£(Z#郍v÷ÂÀuxÿ¨‡#œúX‰Á¡ ‡#;¤‡#t¡¤‡#ˆ`‡#@ƒà?£¤‡#ë"‰ö¡¤‡#+¨‡#ƒÀAƒà?£¤‡#Ǩ‡#‰ÈPƒ=¨‡#uǨ‡#ƒì ÿ5,Z#èƒÄÉÉöU‰åSƒì}™w‹UÑâU‰ÐÁà)Ðfƒ<Åhß#uèùÝNj¸ÿÿÿÿ鏐ƒ=@Þ#tcœúX‰Ã‹UÑâU‰ÐÁà)ЍÅ0ö€Aß# t ÿ€Dß#ë-v‹EÑàE‰ÂÁâ)‹ÕDß#ƒì‹• Þ#ÿuRÿP@ƒÄ‰ØPéèƒ¡…ÀtgœúX‰Ã‹UÑâU‰ÐÁà)ЍÅ0ö€Aß# t ÿ€Dß#ë2v‹EÑàE‰ÂÁâ)‹ÕDß#ƒì‹• Þ#ÿuRÿP@蔃ĉØPé­úèJ²‹lÞ#R‰ÑÁá)Ñ»@ß#f‰DË‹UÑâU‰ÐÁà)ЍÅ0öD t ÿ€Dß#ë?vƒìU‰ÐPjÿlZ#‹MI‰ÐÁà)ЋÅDß#ƒÄ‹• Þ#QRÿP@è/ƒÄ¡lÞ#@‰ÂÁâ)ƒì ¿ÕHß#P踱èƒÄû¸‹]üÉÐU‰åWVSƒì ‹]f…Ûuè>Ünj¸ÿÿÿÿé"‰öƒ=@Þ#„“œúX‰ÇÇEð}ð™s¾@ß#‹UðÑâUð‰ÐÁà)ÐÁàf9\,uHƒÀ0öD0 t ÿ€Dß#ë6ƒìEðPjÿlZ#‹MðI‰ÐÁà)ЋÅDß#ƒÄ‹• Þ#QRÿP@ƒÄÿEð}ð™~“‰øPé}‰ö蓟…À„›œúX‰ÇÇEð}ð™w¾@ß#‹Eð@‰ÂÁâ)Õf9\,uJƒÀ0öD0 t ÿ€Dß#ë8vƒìEðPjÿlZ#‹MðI‰ÐÁà)ЋÅDß#ƒÄ‹• Þ#QRÿP@ƒÄÿEð}ð™~èj‰øPéԐúè"°‹lÞ#R‰ÑÁá)Ñf‰ÍHß#ÇEð}ð™w¾@ß#‹Eð@‰ÂÁâ)Õf9\,uJƒÀ0öD0 t ÿ€Dß#ë8v‹MðI‰ÐÁà)ЋÅDß#ƒì‹• Þ#QRÿP@ƒÄEðPjÿlZ#ƒÄÿEð}ð™~èÞ ¡lÞ#@‰ÂÁâ)ƒì ¿ÕHß#Pèj¯èÁƒÄû¸eô[^_]ÃU‰åSƒìúè;¯‹lÞ#R‰ÑÁá)Ñf‰ÍHß#ƒìh$ß#jèl–ƒÄUð¡(ß#;xÞ#|¡$ß#+tÞ#‰Eð¡(ß#+xÞ#ë!‰ö¡$ß#+tÞ#H‰Eð¡(ß#+xÞ#ʚ;‰B‹Mð ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ôºÓMb‰Ø÷êÁú‰ØÁø)ÂыlÞ#R‰ÐÁà)Ð) Ōß#ƒì Qè. ƒÄƒ=|Þ#ÿtƒì ÿ5|Þ#ÿHÞ#Ç|Þ#ÿÿÿÿƒÄ‹ -lÞ#I‰ÐÁà)ЋÅDß#ƒì‹… Þ#QPÿRLè{ ƒÄhlÞ#jÿlZ#ÇlÞ#ÿÿÿÿÇ€Þ#ÿÿÿÿèV ¡lÞ#@‰ÂÁâ)¿ÕHß#‰$èã­è:ƒÄû‹]üÉÐU‰åƒìhÌ("è( ƒÄÉÍvU‰åƒìjè ƒÄÉÉöU‰åƒìƒ=8Z#u(èè
-ƒì ¡lÞ#@‰ÂÁâ)¿ÕHß#Pèt­ƒÄÉÍvU‰åWVSƒìhj/#è]$ƒÄ»@ß#ëv‹Eð@‰ÐÁà)ЁLÃ0€ƒì häÞ#èÊ+‰EðƒÄƒøÿ„“@‰ÐÁà)ÐöDÃ1@u¾‹UðR‰ÃÁã)ÃÁã¾@ß#¡4Z#‰3@£4Z#‹E ‰DƒìjÿuƒTß#Pè ¾ÆD'ƒÃ fÇD3‹Mf‹%ÿf‰D3
-f‹A f‰D3 ƒÄ‰Ø‰ñº‹]ƒ{tf‹Sf‰T‹UðR‰ÁÁá)ÁÁáY0‹U‹B -‰ƒ@ß#¿Dß#Ç;¾Hß#¡lÞ#@‰ÂÁâ)‹DÖ0‰3ºLß#ǍAP‹]ð‰˜@ß#Ç8ÇÿÿÿÿÇ0ÿÿÿÿǁ ß#°Ç8Ç0ǁÁÀǁ@ß#Ç9ºۍƒ€ 
-Ç…¤ß#Bƒúvì‹Eð@‰ÐÁà)ÐÁàÀǂHß#ÿÿÿÿǂLß#”ß#‰à#º‹Mðɍ€ ‰ö
-Ç…à#Bƒú~ì»ëC;pÞ#sƒì‹ Þ#ÿuSÿPƒÄ…Àxß;pÞ#u7‹]ð[‰ÂÁâ)ÂfÇÕhß#ƒìhäÞ#SèÚ)è¡ÕDŽ鄉ö‹Eð@‰ÐÁà)Ѝ4ʼnžDß#ƒì‹ Þ#ÿuÿuðSÿP,ƒÄ…ÀyWfdžhß#ƒìhäÞ#ÿuðèz)èAÕDžë'è3Õǃ釃ì ÿuðè9èÕdž¸ÿÿÿÿƒÄëjƒE‹U‹zü…ÿtY‰ö¾ëF;5dÞ#s0ƒìµ‹ƒß#WVÿP ƒÄ…Àxۃ싃ß#WÿuðVÿP$ƒÄ;5dÞ#t‡ƒE‹M‹yü…ÿu©‹Eðeô[^_]ÉöU‰åƒìEPÿuÿu ÿuè`üÿÿƒÄÉÍvU‰åWVSƒì ‹} ƒt6‹EÑàE‰ÂÁâ)‹G‰ÕLß#‰Æ‹UÑâU‰ÐÁà)Ѓ Åpß#@ën‰öƒì ‹UÑâU‰ÐÁà)зÅnß#Pè@‹UÑâU‰ÑÁá)Ñ»Lß#‰ˉƋEÑàE‰ÂÁâ)ƒÄƒ<Óuƒì ÿuèìèËÓLjëtv‹EÑàE‰ÂÁâ)»@ß#·DÓ.ƃì ·GPjÿwVh¸/"è-‰ÁƒÄ f…Éu?ƒì‹UÑâU‰ÐÁà)зDÃ.PVèƒÄÿuèvèUÓlj¸ÿÿÿÿƒÄëN‹EÑàE‰ÂÁâ)Âf‰ ÕHß#ƒìU‰ÐPjÿlZ#ƒÄöGu ÿ`Þ#ëvöGuÿ ß#¸eô[^_]ÍvU‰åWVSƒì ‹M‹U ‹]œúX‰ÇEPSRQè­úÿÿ‰ÆƒÄƒþÿ„ɍv‰ÐÁà)ЋÅDß#‹… Þ#ƒx(„èà…À‰€»;dÞ#svƒì‹ß#VSÿP(ƒÄC;dÞ#råv‰ÃÁã)ÃÁ㋃Dß#ƒì‹… Þ#VPÿR0fǃhß#ƒÄhäÞ#Vè\&ƒÄè ÒLJ‰øP¸ÿÿÿÿë#vƒìSVèŽýÿÿƒÄº…À”ÂJ ։øP‰ðeô[^_]ÃU‰åVS‹u»;dÞ#svƒì‹ß#VSÿP(ƒÄC;dÞ#råv‰ÃÁã)ÃÁ㋃Dß#ƒì‹… Þ#VPÿR0fǃhß#ƒÄhäÞ#Vè¬%ƒÄeø[^]ÉöU‰åVS‹]è ƒì ¡lÞ#@‰ÂÁâ)¾@ß#SÿTÖú‰$èn¡lÞ#@‰ÂÁâ)¿DÖ‰$èn¦ƒÄeø[^]ÃU‰åWVSƒì‹]‹}úû™w! [‰ÈÁà)ÈÁàº@ß#öD0tfƒ|(u û¸ÿÿÿÿéDžÿy$[‰ÁÁá)Á Í°¸Dß#‹<Çë ‰öƒÿv¿[‰ÁÁá)Á Í°‰Mä¹Hß#‰Mì‹Uä‹
-‰Â)úƒÂ‰Ð¾º÷ö‰Eð‹uä;tMۍƒ€4‹MðىÈÁà)ȍ Å°‰ö2‹…¤ß#‹] ‰ƒÃ‰] B»‰Ðº÷ó‹]ì;uÔû‰øƒÄ[^_]ÐU‰åSƒì‹]‹ -lÞ#I‰ÐÁà)ЍÅö‚pß#tɍ€È‚øß#…¤ß#¡$ß#;tÞ#|;tÞ#uA¡(ß#;xÞ#}4ƒìSÿ5lÞ#ÿ5xÞ#ÿ5tÞ#ÿ5(ß#ÿ5$ß#h€/#è8¶ƒÄ è@ ‹]üÉÍvU‰åWVS‹ -lÞ#I‰ÐÁà)ЍÅöƒpß#„›ɍ€ȍ‹°Hß#ºDß#‹t‚`‹”À¸Lß#94s‰4‹lÞ#[‰ÁÁá)ÁÁፁÀ°@ß#¿Dß#B‰8±°‹†Hß#@º‰Ñº÷ñ‰–Hß#ۍƒ€ØÐÇD‡`ƒ<>wÿ>[^_]ÉöU‰åWVS‹M‹] ‹u‹}úù™w!I‰ÐÁà)ÐÁàº@ß#öD0tfƒ|(uû¸ÿÿÿÿëy…ÛtI‰ÂÁâ)‹Õà#‰…ötI‰ÂÁâ)‹Õüß#‰…ÿtI‰ÂÁâ)‹Õà#‰ƒ}t(ɍ€ȍ I‰ÊÁâ)ÊÕøß#‹…¤ß#‹U‰û¸[^_]ÉöU‰å‹Múù™w!I‰ÐÁà)ÐÁàº@ß#öD0tfƒ|(uû¸ÿÿÿÿë7I‰ÂÁâ)ÂÁ⍂Àǀ@ß#ǀDß#ǂüß#û¸]ÍvU‰åWVSƒì ƒ=lÞ#ÿt¡lÞ#@‰ÂÁâ)ÂöÕpß#…3ƒ=lÞ#ÿ„ƒìh$ß#j證ƒÄUè¡(ß#;xÞ#|¡$ß#+tÞ#‰Eè¡(ß#+xÞ#ë"v¡$ß#+tÞ#H‰Eè¡(ß#+xÞ#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыlÞ#R‰ÐÁà)Ð) Ōß#ƒì QènüÿÿƒÄƒ=|Þ#ÿtƒì ÿ5|Þ#ÿHÞ#Ç|Þ#ÿÿÿÿƒÄ‹ -lÞ#I‰ÐÁà)Ћ<ÅDß#ƒì‹½ Þ#QWÿP<ƒÄ¿4½ƒì ‹† Þ#WÿP$‰ÃƒÄƒûÿt%ƒì[‰ÐÁà)ЋÅDß#‹… Þ#SPÿR4ƒÄ븅Àx»ƒûÿuG뫍v‹5lÞ#‰€Þ#‰lÞ#[‰ÐÁà)Ð;Őß#t0»@ß#‰ö¡lÞ#@‰ÂÁâ)‹TÓP‰lÞ# R‰ÈÁà)È;TÃPu×;5lÞ#tƒìhlÞ#jÿlZ#ƒÄ‹ -lÞ#I‰ÐÁà)ÐÁà¾@ß#fÇD(‹¸Dß#ƒì‹½ Þ#‹€Þ#¸;lÞ#•ÀPQWÿS8¡lÞ#@‰ÂÁâ)ƒÄöDÖ1„Ü¡€Þ#;lÞ#…Ë¡$ß#‰EèMè¡lÞ#@‰ÂÁâ)»Lß#‹DÓ@º@B‰Ö™÷þ’’’Áâ‰Ö5(ß#‰q¿¡/¸D‰ø÷î‰×Áÿ‰ð™‰þ)Ö¡lÞ#@‰ÂÁâ)‹\Ó@ºƒÞC‰Ø÷êÁú‰ØÁø)2Eè‹AºÊš;‰Ó™÷û‰Qjhä="ÿuìÿuèÿDÞ#‰ÃƒÄƒûÿuƒìÿ5lÞ#jèû7ƒÄ‰|Þ#¡$ß#£tÞ#¡(ß#£xÞ#eô[^_]ÉöU‰åWVSƒìÇО%úÿuèD»ƒÄ¿Dß#¾@ß#‰ö[‰ÂÁâ)ÂÁâÇ:ÿÿÿÿǂLß#ÆDB fÇD0fÇD0
-fÇD0 fÇD0B0Ç0Ç8ǀHß#ǀLß#‚„ß#Ç@ÇǂŒß#BP‰0Ç8ÇD`DŽÐ‚â#Ç@Ǎ‚àÇ0ÿÿÿÿÇ8ÿÿÿÿ‚°Ç8ǀHß#ǀLß#ÂÀÇ2Ç:ºۍƒ€ v
-ÇD‡`Bƒúvï[‰ÐÁà)ЍÅÀǀHß#ÿÿÿÿǀLß#ºۍƒ€ 
-DŽ†ÐBƒú~ìCû™Žƒþÿÿ»¹Hß#[‰ÂÁâ)C‰DÑP‰Ãû˜~åÇ@œ%ÿÿÿÿ»™¹Lß#[‰ÂÁâ)Cÿ‰DÑP‰Ã…ÛéÇœß#ÿÿÿÿÇäÞ#ÇhÞ#Ç`Þ#Ç ß#Ç€Þ#ÿÿÿÿÇlÞ#ÿÿÿÿÇ|Þ#ÿÿÿÿÇxÞ#ÇtÞ#ÇpÞ#ÇdÞ#Ç@Þ#èÚè}è42ƒì ÿuèqÉÿÿ£èÞ#ƒÄ=×Övƒì hà/#èÇ$è »ƒÄ¸ƒ=èÞ#”À‰Eè]è¡èÞ#‰CÇО%躂ƒì S豌Ç$x>"èÇÇ$¸("聎Ç$Ð="蕎ƒÄjjèEÿtZ#ƒÄh$ß#jèLƒèOùÿÿèê›f£àÞ#¡lÞ#@‰ÂÁâ)¾@ß#¿DÖ‰$èϛÇ$è7ŽÿpZ#ÇО%ƒÄ»ƒ=hÞ#ŸÃSjèɃă= ß#teè„ Ç8Z#ƒìh$ß#j軂è^›f£àÞ#è³øÿÿÇ$Ð="èǍ¡lÞ#@‰ÂÁâ)¿DÖ‰$è7›Ç$蟍ƒÄÇО%ƒìSjèCèÇО%ƒÄjjè(ƒÄúƒ=hÞ#t"ƒìÿ5hÞ#h 0#èP¬Ç$ÿÿÿÿèX¹ƒÄƒì jèK¹ƒÄeô[^_]ÃU‰åSƒìƒ=8Z#…•èW‰…Àuú腚‹lÞ#R‰ÑÁá)Ñf‰ÍHß#‹E£hÞ#Ç8Z#ƒ=lÞ#ÿ„ƒìh$ß#j藁ƒÄUð¡(ß#;xÞ#|¡$ß#+tÞ#‰Eð¡(ß#+xÞ#ë ¡$ß#+tÞ#H‰Eð¡(ß#+xÞ#ʚ;‰B‹Mð ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ôºÓMb‰Ø÷êÁú‰ØÁø)ÂыlÞ#R‰ÐÁà)Ð) Ōß#ƒì QèZôÿÿƒÄƒ=|Þ#ÿtƒì ÿ5|Þ#ÿHÞ#Ç|Þ#ÿÿÿÿƒÄ‹ -lÞ#I‰ÐÁà)ЋÅDß#ƒì‹… Þ#QPÿR<Ç€Þ#ÿÿÿÿÇlÞ#ÿÿÿÿƒÄèü‡…Àtƒì ¿àÞ#Pè,™ƒÄëvƒì ¿àÞ#Pè™èkƒÄû‹]üÉÉöU‰åSƒìÇEøÿÿÿÿ»º Þ#¡ Þ#ƒx(t1ƒì‹šUøRSÿP(ƒÄ…Àu¸ÿÿÿÿëCƒûwº Þ#‹šƒx(uи‹]üÉÉöU‰åƒìè è+ÉÉöU‰åƒìÇ|Þ#ÿÿÿÿè§êÿÿÉÐU‰åSƒìœúX‰Ãƒ=О%tƒ= ß#t‰ØPëƒì jè–ýÿÿƒÄ‰ØP‹]üÉÉöU‰åƒìÿuèzýÿÿƒÄÉÐU‰åSƒì‹UœúX‰ÃƒìRjèZ‰ÂƒÄ‰ØP‰Ð‹]üÉÉöU‰å¸hÞ#ƒ=lÞ#ÿt‹lÞ#R‰ÐÁà)ЍÅ ß#]ÉöU‰åSƒìœúX‰Ãƒ=О%tƒ= ß#t‰ØPëƒì ÿuèíüÿÿƒÄ‰ØP‹]üÉÐU‰å]ÍvU‰åWVSƒì ÇEðÇE컍[ …ƒ¹È‡#t[¿À‡#ƒ<9tP‹lÞ#ҍ‚€Ð؍…о@ß#ƒ<0t+ûƒì ÿ40ÿ9ƒÄú‹lÞ#ҍ‚€Ð؋´†Ð uìCƒû~Œƒ}ìt -ÿEðƒ}ðŽmÿÿÿeô[^_]ÐU‰åVSº¾À‡#»Ä‡#¹È‡#vRÁàÇ0B‰Çƒú~ãǸ#ÿÿÿÿÇÀ#Çȇ#ÇÀ‡#Çć#ÿÿÿÿ[^]ÐU‰åS‹Múƒ=À#ÿu û¸ ënv¡À#@Ǖȇ#‰¡À#@‹…ć#£À#‹@‹U ‰…À‡#º»@ß#‰öҍ‚€ÐDŽƒÐBú™~ßû¸‹$ÉÃU‰åú¡lÞ#À’ÂU‹•à#û]ÍvU‰å‹Múƒùw -Iƒ<…ȇ#u û¸ë%v¡lÞ#À’ÂʋE ‰•à#û¸]ÃU‰åS‹]œúX‰Áƒûw -[ƒ<…ȇ#u‰ÈP¸ë.v[Áà‹À#‰Ä‡#ǀȇ#‰À#‰ÈP¸‹$ÉÃU‰åWVSƒì ¡lÞ#‰Eð‰ÂÑâ‰ÐÁà)ЍÅ¿@ß#öD0 tm‹E‰‚ à#‹UðÑâUð‰ÐÁà)ЁLÇ0@‹UðÑâUð‰ÐÁà)ЍÅÀºHß#ƒ<ÿt,‹4v‰ÃÁã)ÃÁ㋃Dß#ƒì‹… Þ#VPÿRD‰tPƒÄ¹»@ß#;MðtI‰ÐÁà)ЋUð9TÃP„ˆAù™~ۋUðÑâUð‰ÐÁà)Ѓ<Ŕß#t[»Dß#ûƒì ‹UðÑâUð‰ÐÁà)ЋDÃPÿpÿƒÄú‹EðÑàEð‰ÂÁâ)ÕP‹‹@‰‹UðÑâUð‰ÐÁà)Ѓ|ÃPu«èJüÿÿƒì ‹EðÑàEð‰ÂÁâ)»@ß#¿DÓPèÔyƒÄEðPjÿlZ#‹Eð@‰ÂÁâ)ՃÄöD0@u%ƒì·D.P‹Eð@‰ÂÁâ)Âÿ4ÕLß#èÁ ƒÄ»;dÞ#sƒì‹ß#ÿuðSÿP(ƒÄC;dÞ#rã‹MðI‰ÐÁà)ЋÅDß#ƒì‹… Þ#QPÿRPÇlÞ#ÿÿÿÿÇ€Þ#ÿÿÿÿ‹Eð@‰ÂÁâ)ƒÄöÕpß#u&ÿ -`Þ#ƒ=`Þ#uBèZúÿÿë;ƒìRjèY+ƒÄëg‹Eð@‰ÂÁâ)ÂöÕpß#uÿ - ß#ƒ= ß#uèúÿÿƒìh$ß#jèÒyƒÄƒ=|Þ#ÿtƒì ÿ5|Þ#ÿHÞ#Ç|Þ#ÿÿÿÿƒÄè­ïÿÿeô[^_]ÐU‰åVS‹uúv‰ÐÁà)ÐÁàº@ß#öD0ufƒ|(uèѼNJû¸ÿÿÿÿ麍v‰ÐÁà)ÐöÅqß#tû雉ö;5lÞ#uJv‰ÐÁà)л@ß#‹DÃ0©t0©u)ƒì jè¥üÿÿ¡lÞ#@‰ÂÁâ)¿DÓ‰$襑ƒÄ»ëvC;<Z#}ƒìÝÿ°ä#Vÿà#ƒÄ…Àtٍv‰ÐÁà)Ё Åpß#û¸eø[^]ÍvU‰åWVSƒì ‹Ef‰Eòf…Àuèâ»ÇŒ¸ÿÿÿÿé‰öú¡€Þ#@‰ÂÁâ)Âf‹Mòf; Õlß#”Eñ¾¿@ß#‰öv‰ÐÁà)ÐÁà‹T0÷Â…ˆƒÀ fƒ|8t}÷Âuuf‹Mòf9L8 uj;5lÞ#u!÷Ât÷Âuƒì jè{ûÿÿƒÄëC‰ö»ëC;<Z#}ƒìÝÿ°ä#Vÿà#ƒÄ…Àtٍv‰ÐÁà)ЁLÇ0Fþ™ŽNÿÿÿ€}ñt(ƒì ¡€Þ#@‰ÂÁâ)¿ÕHß#P萃Äëvû¸eô[^_]ÉöU‰åWVSƒì ¾¿@ß#v‰ÐÁà)ÐÁàfƒ|(tL÷D0
-uB»ë‰öC;<Z#}ƒìÝÿ°ä#Vÿà#ƒÄ…Àtٍv‰ÐÁà)ЁLÇ0Fþ™~–eô[^_]ÉöU‰åSƒì¡lÞ#@‰ÂÁâ)»@ß#‹DÓ0©t7©u0©t)ƒì jè"úÿÿ¡lÞ#@‰ÂÁâ)¿DÓ‰$è"ƒÄ‹]üÉÉöU‰åS‹M‹] ¡<Z#ʼnŠà#‰šä#@£<Z#‹$ÉÍvU‰åƒìúÿuè½ùÿÿ¡lÞ#@‰ÂÁâ)¿ÕHß#‰$躎ƒÄÉÐU‰åVS¶uœúX‰Ãƒ=‘#ÿuèH¹Ç‚‰ØP¸ÿÿÿÿéۋ -‘#‰ÊÁâ‹‚ŒŽ#£‘#‹E‰‚€Ž#‹E ‰‚„Ž#‰ðƒà‰‚ˆŽ#‰ðƒàƒøtOƒø
-ƒøt -ësvƒøtSëi‰ÈÁàǀŒŽ#ÿÿÿÿƒ=‘#ÿu‰ -‘#ë¡‘#Áà‰ˆŒŽ#‰ -‘#ëH‰ö‰ÊÁâ¡‘#‰‚ŒŽ#‰ -‘#ë.‰ÊÁâ¡ ‘#‰‚ŒŽ#‰ - ‘#ë‰ÊÁâ¡‘#‰‚ŒŽ#‰ -‘#‰ØP¸[^]ÐU‰åƒìƒ=pÞ#uƒì h@0#èŒÇ$謃ġpÞ#P‰pÞ#ÉÐU‰åƒìƒ=dÞ#uƒì h_0#èPÇ$èÌ«ƒÄ¡dÞ#P‰dÞ#ÉÐU‰åWVS‹E‹u ‹}»‹HÇöt<€9t5‹ ‰‡€: t€:t‰öC€< t€< uó€< uÆ Cÿ€< uÌÿ[^_]ÐU‰åWVSì¬‹EµTþÿÿ½Xþÿÿ»‹HDžTþÿÿöt<€9t5‹ ‰‡€: t€:t‰öC€< t€< uó€< uÆ Cÿ€< uÌÿƒì…XþÿÿPÿµTþÿÿ詶ÿÿƒÄeô[^_]ÉöU‰å¸¹ŒŽ#v‰ÂÁâ@‰
-ƒø&~òÇü#ÿÿÿÿÇ‘#ÿÿÿÿÇ‘#ÿÿÿÿÇ‘#ÿÿÿÿÇ ‘#ÿÿÿÿÇ‘#ÿÿÿÿÇ‘#]ÉöU‰åWVSƒì ‹E‹} ƒøt4ƒø ƒøtéЃøt3ƒøtB鳐‹‘#Ç‘#ÿÿÿÿë:‰ö‹‘#Ç‘#ÿÿÿÿë&‰ö‹ ‘#Ç ‘#ÿÿÿÿë‰ö‹‘#Ç‘#ÿÿÿÿÇ@Þ#ƒûÿtM¾ŒŽ#…ÿt‰ØÁàƒ¸ˆŽ#uƒì ‰ØÁàÿ°„Ž#ÿ€Ž#ƒÄ‰Ù‰ØÁà‹0‰Â¡‘#‰2‰ -‘#ƒûÿu¸Ç@Þ#eô[^_]ÉöU‰åƒìEüPEøPEôPEðPèI‡Ç$ ‘#èÅӃÄjjhÿÿjh$‘#h ‘#èðɃÄjjhÿÿÿhh@‘#h ‘#èÐɃÄjjhÿÿÿþhh\‘#h ‘#è°ÉƒÄ ƒ}ütƒì‹EüHPÿuøh ‘#èzȃă}ôtƒìÿuôÿuðh ‘#è^ȃÄÉÐU‰åƒì‹E…Àu¸ëƒìjPh ‘#èʃÄÉÍvU‰åƒìÿuÿuÿu ÿuh ‘#è¸ËƒÄ ÉÍvU‰åƒì ÿuÿuÿuÿuÿu ÿuh ‘#è²ËƒÄ ÉÐU‰åƒì ÿu ÿuh ‘#èfЃÄÉÐU‰åƒìÿuh ‘#èM΃ÄÉÃU‰åƒìÿuh ‘#èM҃ÄÉÃU‰åƒì jÿuh ‘#èSɃÄÉÉöU‰åƒì ÿu ÿuh ‘#èþσÄÉÐU‰åƒìh ‘#è ÎÇ$ ‘#è ҃ÄÉÍvU‰åWVSƒì} ‹uEðPh´0#VèÖ¥‰ÃƒÄƒûuƒ}ðvÇEðƒÆë ‰öÇEð‹Eðº;@Z#~hƒìWVh€‘#蜃Äj
-VèK›ƒÄ»…À•ÃœúX‰Æƒìh€‘#‹Eðÿ4…DZ#h¹0#è]™ƒÄ…Ûuƒì h\1#èI™ƒÄ‰ðPº‰Ðeô[^_]ÍvU‰åVSƒìu ‹]EôPh´0#S襃ăøuƒ}ôvÇEôƒÃëÇEô‹Eôº;@Z#~JƒìVSh€‘#èB›ƒÄj
-S臚ƒÄœúX‰Ãƒìh€‘#‹Eôÿ4…DZ#h¹0#裘ƒÄ‰ØPº‰Ðeø[^]ÉöU‰åVSƒì@‹u‹] ‹EfÇEÈÇEÌÇEÐfÇEÔÇEàÇEäÇEìÇEð‰EØÇEÜÇEè…ÛtT‹C‰E̋C‰EЃ{u
-ÇEÜ1됃eÜߋC ‰EàÇEÀƒì ÿ5€•#è)7ƒÄ+C ‰EċC‰Eì‹C‰EðëD‰öÇEÌÇEЃMÜ ÇEàÇEÀƒì ÿ5€•#èâ6ƒÄ‰EÄÇEìÇEðèI±‹ƒì jEÀPEÈPÿuhÁ0#èAÞÿÿ‰ƒÄ ƒøÿt ƒì PèòÒÿÿƒÄ豉¸ƒ>ÿ”ÀHƒàêƒÀeø[^]ÍvU‰åƒìÿ5€•#èc6ƒÄÉÉöU‰åƒìÿ5€•#èc6ƒÄÉÉöU‰åƒìÿ5€•#è{5ƒÄÉÉöU‰å‹E‹U ‹M£€•#‰„•#‰ -ˆ•#]ÐU‰åVS‹]è°‹0ƒì Sètóÿÿ‰Ãèm°‰0ƒÄ¸…Û•À@eø[^]ÃU‰åƒìúÿuÿu ÿuÿ5€•#èé5ƒÄûÉÍvU‰åWVSƒì ‹}‹uúÿ6ÿu Wÿ5€•#è3‰ÃƒÄ…Ûu#ƒìÿ5€•#èx5ƒÄ+PWÿ5ˆ•#èffƒÄû‰Øeô[^_]ÃU‰åSƒì ‹] Sÿuè¡eƒÄÿ5€•#è75ƒÄ+‰¸‹]üÉÉöU‰åVSƒì‹u‹] …Ûtƒ;uÇEôƒìEôPë7ƒ;uÇEðƒìEðPë!vÇEèƒì jè_þÿÿ+CUè‰BƒÄRVèT*ƒÄeø[^]ÉöU‰åWVSƒì‹u ‹}ÇEðÿ5€•#è“4‰ÃƒÄ9Þƒþ} ¸ëG‰öƒì ÿuèµ*ƒÄ W‰Ø)ðPÿuè eƒÄ…ÀtÇEð…ÿt‰Ø+‰ƒì ÿuèÙ*‹EðƒÄeô[^_]ÍvU‰åƒì‹Eúƒ8u -ÇûÿU ëû¸ÉÃU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)ÐÁà‹â#‰U苀â#‰Eìƒùÿtw ‰ÆȉÂÁâ)‹Eè‰Ã;Õâ#|[‰Eäv1‰ÐÁà)ЍÅ;šâ#u ‹Eì;‚â#|1‰Ï‰ÐÁà)Ћ Řß#ƒùÿt4 1‰ÐÁà)Ћ]ä;Åâ#}«ƒÿÿt‰ÐÁà)ЋU‰Řß#ë‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰Ŝß#‹E@‰ÐÁà)ЍÅP‰ˆHß#‰¸Lß#ƒÄ[^_]ÍvU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)лDß#‰]ð‹´ÃЃùÿtCI‰ÐÁà)Ð;´ÃÐr0»Hß#‰Ï‰ÐÁà)ЋLÃPƒùÿtI‰ÐÁà)ЋUð;´ÂÐsՃÿÿt‰ÐÁà)ЋU‰Řß#ë
-‰ö‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰Ŝß#‹E@‰ÐÁà)ЍÅP‰ˆHß#‰¸Lß#ƒÄ[^_]ÍvU‰åWVS‹}‰ÐÁà)ЍÅP‹Lß#‹°Hß#ƒúÿu ‹E ‰0ë#‰öR‰ÁÁá)Á»Hß#‰ÐÁà)ЋDÃP‰DËPƒþÿt!v‰ÁÁá)Á»Lß#‰ÐÁà)ЋDÃP‰DËP[^_]ÃU‰åS‹]‹ ‰Èƒùÿt/I‰ÐÁà)ЋŘß#‰ƒøÿt@‰ÐÁà)ÐÇŜß#ÿÿÿÿ‰È‹$ÉÃU‰åS‹]‹M ƒ9ÿt‹@‰ÂÁâ)‰՜ß#[‰ÂÁâ)ÕP‹‰‚Hß#ǂLß#ÿÿÿÿ‰‹$ÉÃU‰åWVSƒì ‹M‹] ‹}ÇEðú¡lÞ#@‰ÂÁâ)4Õ@ß#…ÿt‹F8‰…ÛtBƒùt"ƒù ƒùt ë*‰öƒùtë!‹F8 ‰F8ë‰ö‹÷Ð!F8ëv‹‰F8ëÇEð‹F8‰Ã÷Ћ —#‰Ñ…ÂtB‰ö‰Ø÷л!Ètv‰Ú©u
-CÑøuòºƒì R范ċ^8‰Ø÷Ћ - —#…ÁuÀ‹F8‰Ã÷ЋV<‰Ñ…Ât=‰Ø÷л!Ètv‰Ú©u
-CÑøuòºƒì Rè|ƒÄ‹^8‰Ø÷ЋN<…ÁuÃû‹Eðeô[^_]ÍvU‰åVS‹u‹M ¸…É„¸ƒù‡òv‰ÐÁà)Ðfƒ<Åhß#u -¸éӍvú‰ÈÁàö€¨•#uƒ¸ •#uû魉öv‰ÐÁà)ЍÅ|ß#ƒùvèÍ©Çë
-¸Óà »ëC;hZ#}ƒìÝÿ°d˜#Vÿ`˜#ƒÄ…Àtٍv‰ÐÁà)ЍÅfƒ»hß#u&ƒìh¤—#VèÔüÿÿ‹ƒDß#ƒÄ‹… Þ#VPÿRDƒÄèSm…Àuèû¸eø[^]ÐU‰åWVSƒì‹]‹U ƒûvè©Ç¸ÿÿÿÿévœúX‰Á‰Mðƒ}t‰ÞÁæÆ •#ü¹‹}ó¥…Òt‰ßÁçÇ •#ü¹‰Öó¥…Ò„ºöB…°ƒ:‡§ƒ<À—#ÿtq4‰uìºÀ—#‹@Áà‰Eè‰ÇƒÇ‹ -à¤%¸àž%‹U苉E䋇äž%©t -ƒàý‰‡äž%ë‰ö¾À—#‹Uì‹2@‰ Õàž%‰Áƒ}äÿu»‰ -à¤%ǝÀ—#ÿÿÿÿƒûv -è¨Çë¸þÿÿÿˆÙÓÀ! —#‹uð‰ðP¸ƒÄ[^_]ÐU‰åWVSƒì,‹] ¸…Û„~¸ƒû‡pœúX‰Â‰UԉÞÁæ}؁Ơ•#ü¹ó¥÷Eàuƒ}Øu ‰ÐPé5vƒûv膧Ǹÿÿÿÿ됸ˆÙÓà# —#…Àt -‹UԉÐPéûƒûvèN§Çë‰ö¸ˆÙÓà  —#‹5¤—#ƒþÿ„ô¸‰ÇˆÙÓçvv‰ÐÁà)Ѝŀß#ƒûvèý¦Ç¸ÿÿÿÿë‰ú#‰Ð…À„–v‰ÐÁà)ÐÁàfƒ¸hß#u|ß#ƒûv -輦Çë 8ƒìh¤—#Vèúÿÿv‰ÃÁã)ÃÁ㋃Dß#ƒÄ‹… Þ#VPÿRDÃà¾@ß#ƒÄƒ<3ÿtƒì ÿ43ÿHÞ#Ç3ÿÿÿÿƒÄ‹MԉÈPéîv‰ÐÁà)Ћ4Řß#ƒþÿ…ÿÿÿ¾¸‰ÇˆÙÓç‰öv‰ÐÁà)ÐÁàfƒ¸hß#„…xß#ƒûvèö¥Ç¸ÿÿÿÿ됉ú#‰Ð…Àu^v‰ÐÁà)ЍÅ|ß#ƒûvèÃ¥Çëv 8»ëvC;hZ#}0ƒìÝÿ°d˜#Vÿ`˜#ƒÄ…ÀtÙëvFþ™ŽSÿÿÿèzi…Àuè9 -‹MԉÈP¸eô[^_]ÐU‰åWVSƒì,¸ƒ} „T¸ƒ} ‡EœúX‰Â‰Uԋu Áæ}؁Ơ•#ü¹ó¥÷Eàuƒ}Øu ‰ÐPé ‰ö÷Eàu;ƒ} vèܤǸÿÿÿÿëv¸ŠM Óà# —#…Àt ‹UԉÐPéÃ=à¤%ÿu‹MԉÈP¸ 鮉ö‹5à¤%vÁà¹àž%‹‰à¤%‹U ‰äž%‹U‰èž%‹U‰ìž%‹lÞ#‰ðž%Çÿÿÿÿ‹E ÁàºÀ—#ƒ<ÿu‰4ë>‰ö‹M ‹À—#‰ÁЃ<Åàž%ÿt»àž%
-‹Í 
-ƒ<ÃÿuîR‰4Åàž%ƒ} vèé£Ç됸ŠM Óà  —#‹5¤—#ƒþÿ„û¸‰ÃŠM Ó㐍v‰ÐÁà)Ѝŀß#ƒ} v蘣Ǹÿÿÿÿë v‰Ú#‰Ð…À„šv‰ÐÁà)ÐÁàfƒ¸hß#u|ß#ƒ} vèS£Çëv ƒìh¤—#Vè¨öÿÿv‰ÃÁã)ÃÁ㋃Dß#ƒÄ‹… Þ#VPÿRDÃà¾@ß#ƒÄƒ<3ÿtƒì ÿ43ÿHÞ#Ç3ÿÿÿÿƒÄ‹MԉÈPé÷v‰ÐÁà)Ћ4Řß#ƒþÿ…ÿÿÿ¾¸‰ÃŠM Ó㐍v‰ÐÁà)ÐÁàfƒ¸hß#„…xß#ƒ} v艢Ǹÿÿÿÿë‰Ú#‰Ð…Àu^v‰ÐÁà)ЍÅ|ß#ƒ} vèV¢Çë‰ö »ëvC;hZ#}0ƒìÝÿ°d˜#Vÿ`˜#ƒÄ…ÀtÙëvFþ™ŽSÿÿÿèf…Àuƒ=dZ#uèÄ ‹MԉÈP¸eô[^_]ÃU‰åWVSƒì‹u‹]¡lÞ#@‰ÂÁâ)<Õ@ß#èŠú¡ —##„Hºv©u=BÑøuô¾ƒ<µÀ—#ÿue‹E ‰0Ç@Ç@W<ƒþvèa¡Ç됉Öëɸþÿÿÿ‰ñÓÀ!ƒþvè?¡Çëv¸þÿÿÿ‰ñÓÀ! —#ûév µºÀ—#‹[‹Åàž%‰ƒøÿu"ƒþvèñ Ç됸þÿÿÿ‰ñÓÀ! —#W<ƒþv -èÌ Çë ¸þÿÿÿ‰ñÓÀ![Áâ¹äž%‹
-‹u ‰‹‚èž%‰F‹‚ìž%‰FƒÂ‹
-©t ƒàý‰
-ëv[¡à¤%‰Õàž%‰à¤%ûéI‰Öë‹G<#tUº©uéBÑøuô¾‹E ‰0Ç@Ç@W<ƒþvè Çëv¸þÿÿÿ‰ñÓÀ!ûéëv…Ûtƒ;uƒ{u -û¸ éÓ‰ö‹‰G@úèu‹lÞ#R‰ÑÁá)Ñf‰ÍHß#ƒìh$ß#jèN\ƒÄUè¡(ß#;xÞ#|¡$ß#+tÞ#‰Eè¡(ß#+xÞ#ë¡$ß#+tÞ#H‰Eè¡(ß#+xÞ#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰ÁáºÓMb‹Eì÷êÁú‹EìÁø)ÂыlÞ#R‰ÐÁà)Ð) Ōß#ƒì QèÏÿÿƒÄƒ=|Þ#ÿtƒì ÿ5|Þ#ÿHÞ#Ç|Þ#ÿÿÿÿƒÄ‹ -lÞ#I‰ÐÁà)ЋÅDß#ƒì‹… Þ#QPÿRHƒÄh¤—#ÿ5lÞ#èæòÿÿ¡lÞ#@‰ÂÁâ)ÂfÇÕhß#ƒÄ…Û„’ƒìEàPjè[U؃Ä‹Eà‰E؋EäC‰B…Ày -ÿM؁Bʚ;됁zÿɚ;~ ÿjʚ;ÿ5lÞ#hdp"ÿuÜÿuØÿDÞ#‰ÃƒÄƒûÿuƒìÿ5lÞ#jèù ƒÄ¡lÞ#@‰ÂÁâ)‰Õ â#ÇlÞ#ÿÿÿÿÇ€Þ#ÿÿÿÿè‡Ðÿÿƒì ¡lÞ#@‰ÂÁâ)»@ß#¿DÓPèsè”ÇG@¡lÞ#@‰ÂÁâ)ƒÄöDÓ2tû¸ é~‰Öë%¡ —##„ûº‰ö©uáBÑøuô¾ƒ<µÀ—#ÿu=‹M ‰1ÇAÇAƒþv -è@Çë¸þÿÿÿ‰ñÓÀ! —#ûé vƒì µƒÀ—#Pèúðÿÿ‰ÇƒÄƒ»À—#ÿu#ƒþvèòœÇë‰ö¸þÿÿÿ‰ñÓÀ! —#Áâ¹äž%‹
-‹] ‰‹‚èž%‰C‹‚ìž%‰CƒÂ‹
-©t ƒàý‰
-ëv¡à¤%‰Õàž%‰=à¤%ûël‹G<#…Àuû¸ë`v‰Öë‹G<º#t ©uéBÑøuô¾‹E ‰0Ç@Ç@W<ƒþvè/œÇëv¸þÿÿÿ‰ñÓÀ!û¸eô[^_]ÍvU‰åWVSƒì ‹}¡lÞ#@‰ÂÁâ)4Õ@ß#è¹ú‹F<#…Àt è¦û颋‰F@úèq‹lÞ#R‰ÑÁá)Ñf‰ÍHß#ƒìh$ß#jè6XƒÄUè¡(ß#;xÞ#|¡$ß#+tÞ#‰Eè¡(ß#+xÞ#ë¡$ß#+tÞ#H‰Eè¡(ß#+xÞ#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыlÞ#R‰ÐÁà)Ð) Ōß#ƒì QèúÊÿÿƒÄƒ=|Þ#ÿtƒì ÿ5|Þ#ÿHÞ#Ç|Þ#ÿÿÿÿƒÄ‹ -lÞ#I‰ÐÁà)ЋÅDß#ƒì‹… Þ#QPÿRHƒÄh¤—#ÿ5lÞ#èÍîÿÿ¡lÞ#@‰ÂÁâ)»@ß#fÇDÓ(ÇlÞ#ÿÿÿÿÇ€Þ#ÿÿÿÿè Íÿÿ¡lÞ#@‰ÂÁâ)¿DÓ‰$è™oè‹F<#ƒÄ…Àuû¸ë èÿû¸eô[^_]ÐU‰åSƒì‹]úEðPjè¢VƒÄƒ=H˜#ÿu
-ÇEèëWMèUð¡D˜#;B|¡@˜#+Eð‰Eè¡D˜#+Bëv¡@˜#+EðH‰Eè¡D˜#+Eôʚ;‰Aƒì ÿ5H˜#ÿHÞ#ƒÄ…ÛtN]ð‹Eð£@˜#‹Eô£D˜#jhÄp"ÿuôÿuðÿDÞ#‰ÃƒÄƒûÿuƒìÿ5lÞ#jè:ƒÄ‰H˜#ë -vÇH˜#ÿÿÿÿû‹Eè‹]üÉÐU‰åVSƒì‹uƒ<µÀ—#ÿuC‰uèÇEìÇEð¡lÞ#‰Eôƒþvèü˜Ç鮐¸þÿÿÿ‰ñÓÀ! —#降 µºÀ—#‹[‹Åàž%‰ƒøÿu"ƒþv豘Ç됸þÿÿÿ‰ñÓÀ! —#[Áà¹äž%‹‰U苐èž%‰U싐ìž%‰Uð‹ðž%‰UôP‹
-©tƒàý‰
-ë[¡à¤%‰Õàž%‰à¤%ƒìEèPVè
-ƒÄeø[^]ÃU‰åVSƒì¡lÞ#@‰ÂÁâ)4Õ@ß#‹F0©…Í -‰F0‹F8‰Ã÷Ћ —#‰Ñ…ÂtA‰Ø÷л!Ètv‰Ú©u
-CÑøuòºƒì Rè„þÿÿƒÄ‹^8‰Ø÷Ћ - —#…ÁuÀ‹F8‰Ã÷ЋV<‰Ñ…ÂtZ‰Ø÷л!Ètv‰Ú©u
-CÑøuòº‰UèÇEìÇEð¡lÞ#‰EôƒìEèPRèƒÄ‹^8‰Ø÷ЋN<…Áu¦f0ÿïÿÿeø[^]ÃU‰åWVSƒì,‹]œúX‰Â‰UÌ¡lÞ#@‰ÂÁâ)Õ@ß#‰UЉÞÁæ}؁Ơ•#ü¹ó¥÷Eàuƒ}Ø„îƒ}Øÿ„ä÷EàuCƒ}Øu=ƒìShÌ0#èw}ƒÄ÷Eàtƒì‹M ÿqhâ0#èX}ƒÄƒì jè—ÓÿÿƒÄ‹UЋB8‰EԉƍUԃûv -èh–Çë ¸ˆÙÓà ‹EÔ E܉EԋUЃÂ<ƒûv -è<–Çë ¸þÿÿÿˆÙÓÀ!‹EԋUЉB8û÷Eàtƒìjÿu SÿUäëƒìj‹M ÿqSÿU؃Äú‹EЉp8‹ỦÐPeô[^_]ÃU‰åWVSƒì ‹}‰ÐÁà)ÐÁà¾@ß#fƒ|(uF˜àƒ<3ÿtƒì ÿ43ÿHÞ#Ç3ÿÿÿÿƒÄƒìh¤—#Wèúèÿÿ‰ÂÁâ)‹ÕDß#ƒÄë ‰ÐÁà)ÐÁàfƒ¸hß#u!‹Dß#ƒì‹• Þ#WRÿPD¸ƒÄë‰ö¸eô[^_]ÍvU‰åWVSƒì º¿¨•#¾¤•#»¬•#¹À—#‰ö‰ÐÁàǀ •#Ç8Ç0ÇÇ‘ÿÿÿÿBƒúvϺ»àž%¹äž%RÁàB‰ÇDƒú>~éÇȤ%ÿÿÿÿÇܤ%Çà¤%Ç —#Ǥ—#ÿÿÿÿÇH˜#ÿÿÿÿº¹™#»™#‰öRÁàÇÇÿÿÿÿÆDBƒú~áƒìjhDk"ènÚÿÿƒÄeô[^_]ÍvU‰å‹EǸ]ÐU‰å‹EÇÿÿÿÿ¸]ÐU‰åƒì‹U‹M ƒùvèê“Ǹÿÿÿÿ됸Óà ¸ÉÃU‰åƒì‹U‹M ƒùv趓Ǹÿÿÿÿ됸þÿÿÿÓÀ!¸ÉÃU‰åƒì‹M ƒùv腓Ǹÿÿÿÿë ¸Óà‹U#ÉÉöU‰åƒì ÿuÿu ÿuèÔçÿÿƒÄÉÍvU‰åWƒì$‹UEè‰E丹‹}äüó«ƒìjÿuäRèBñÿÿƒÄ…Àu -‹Uè‹E ‰¸‹}üÉÐU‰åƒì jÿu ÿuèñÿÿƒÄÉÃU‰åƒì‹E…Àu¸ëƒìPÿu ÿuèíðÿÿƒÄÉÃU‰åƒìÿuÿ5lÞ#è`èÿÿƒÄÉÍvU‰åVSƒì ‹]‹E ‰EèÇEìÇEð脒‹0ƒìEØPEèPSèAéÿÿƒÄ»ÿÿÿÿ…Àu ÷Eàu‹]ØèT’‰0‰Øeø[^]ÐU‰å‹M¡lÞ#@‰ÂÁâ)¡ —# Õ|ß#‰¸]ÉöU‰åSƒì‹E‹U ú‹lÞ#‰lÞ#ÇdZ#jPj jèœìÿÿƒÄÇdZ#‰lÞ#û‹]üÉÍvU‰åS‹M‹] ¡hZ#ʼnŠ`˜#‰šd˜#@£hZ#‹$ÉÍvU‰åVS‹]Cÿƒøv苑Ç~¸ÿÿÿÿëp‰öœúX‰Æ[€<…™#u‰ðPèa‘ǸÿÿÿÿëF[Áâ¹™#‹E ‰
-‹E‰‚™#ÆD
-ƒìjhq"Sè¹T·Ã‰$èÒeƒÄ‰ðP¸eø[^]ÍvU‰åƒì¸ÉÍvU‰åƒì ‹E‰EèÇEìÇEð‹lÞ#‰UôUèRPè›ùÿÿƒÄÉÉöU‰åVS‹uv‰ÃÁã)ÃÁã¸@ß#DŽàÿÿÿÿL0ƒìh¤—#Vèõãÿÿ‹ƒDß#ƒÄ‹… Þ#VPÿRDèç·ÿÿƒÄeø[^]ÐU‰åƒìÇH˜#ÿÿÿÿjjèWèÿÿè¾·ÿÿƒÄÉÐU‰åƒìEüÇEüÿÿÿÿPèôÿÿƒÄÉÐU‰åƒì‹E‹‰EüEüPjÿlZ#‹UüRÁ๙#ƒÄƒ<t ûƒì RÿƒÄú‹Eü@ƒì ÿ4…™#覱ÿÿƒÄÉÐU‰åWVSƒì ‹u ‹]ƒ}t讏Ǹÿÿÿÿén‰öúƒ=À #ÿt ƒ=à¤%ÿuûèƒÇ ¸ÿÿÿÿéCv¡À #‰‹À #Õ)пę#‹DÇ0£À #‹Õ)йÀ™#ÇDÁ0…öu8‹Õ)ÐÇÁ‹Õ)ÐÇÇ‹Õ)ЉÅș#닍<Å)Ǎ<ýÀ™#ü¹ó¥‹Õ)ЍŃºÀ™#u#¡à¤%‰‚è™#@Áàƒˆôž%‹€àž%£à¤%‹Õ)ÐÇÅԙ#ÿÿÿÿ‹Õ)ЍÅؙ#Ç@NjÕ)ЍÅà™#Ç@NjÕ)ÐÇÅì™#û¸ƒÄ [^_]ÃU‰åSƒì‹]ƒûwúÝ)؃<Åð™#uûèÿÇ¸ÿÿÿÿ閍vÝ)ØÁàǀð™#ƒÀºÄ™#ƒ<ÿtƒì ÿ4ÿHÞ#ƒÄÝ)ØÁàƒ¸À™#uE‹è™#R Åöôž%u¡à¤%‰àž%‰à¤%Ý)؋Åè™#@ƒ$Åôž%üû¸‹]üÉÃU‰åWVSƒìL‹E‰E´Áà+E´Áàƒ¸À™#…‹P ‹‚È™#@öÅôž%t¸Ì™#ƒ< „ôÿéì‰ö‹M´Áá+M´Ááy LJ̙#¾È™#‹7@‹à¤%‰Ýàž%£à¤%jÿ41ÿ±Ä™#jèhçÿÿ‹7@ƒ Åôž%錐‹E´Áà+E´Áà¹À™#ƒ<uwPƒ<
-tÿ°È™#ÿ°Ì™#ÿ4
-ëQvÇEÈÇEÌÇEÐÇEÔÇEØÇEÜÇEà‹E´Áà+E´ÁàÈ™#Rÿ°Ì™#EÈPEÄPèÙÙÿÿƒÄ‹E´Áà+E´Åƒ¸È™#u -ƒ¸Ì™#„Àºà™#‹E´Áà+E´ŋ‰E¸M¸‹D‰A‹E¸ƒØ™#‰ƒà™#‹AƒÜ™#‰B…Àyÿ‹à™#Bʚ;ë‰özÿɚ;~ ÿjʚ;‹E´Áà+E´ÿu´hÐs"ÿ4Åä™#ÿ4Åà™#ÿDÞ#‰ÃƒÄƒûÿuƒìÿ5lÞ#jè+ùÿÿƒÄ‹E´Áà+E´‰Åԙ#ë‰ö‹E´Áà+E´ÇÅԙ#ÿÿÿÿeô[^_]ÃU‰åWVSƒì‹u‹}ÇEäƒþw3ƒ}t-‹Exÿɚ;w!‹]{ ÿɚ;wúõ)ðƒ<Åð™#uûèÁŠÇ¸ÿÿÿÿ鐅ÿ„·õ)ðƒ<Åԙ#ÿuÇG ÇGëwƒìEèPjèGÇEäƒÄ¹à™#õ)ðō]è‹D;C|‹+Eè‰G‹D+Cë(¹à™#õ)òÁâ‹+EèH‰G‹D+Eìʚ;‰G ¹Ø™#õ)ðÁà‹‰‹D‰Gõ)ðÅºÄ™#ƒ<ÿtƒì ÿ4ÿHÞ#ƒÄ‹Eƒxu
-ƒx „þºØ™#õ)ð ŋ]‹‰
-‹C‰D
-÷E t¸à™#‹S‰‹S ‰Tëmvƒ}äuƒìEèPjèøEƒÄõ)ð ō‘à™#‹Eè‹]C‰à™#‹EìC ‰B…Àyÿ‰à™#Bʚ;ëzÿɚ;~ ÿjʚ;õ)ðVhÐs"ÿ4Åä™#ÿ4Åà™#ÿDÞ#‰ÃƒÄƒûÿuƒìÿ5lÞ#jè­öÿÿƒÄõ)ð‰Åԙ#û¸eô[^_]ÃU‰åWVSƒì ‹]‹} ƒûwúÝ)؃<Åð™#uûèzˆÇ¸ÿÿÿÿ鷉öÝ)؃<Åԙ#ÿuÇG ÇGëoƒìEèPjèÒDƒÄ¹à™#Ý)؍ōuè‹D;F|‹+Eè‰G‹D+Fë'¹à™#Ý)ÚÁâ‹+EèH‰G‹D+Eìʚ;‰G ¹Ø™#Ý)ØÁà‹‰‹D‰Gû¸eô[^_]ÍvU‰åƒìƒ}t藇Çëv臇ǸÿÿÿÿÉÉöU‰åƒìƒ}tèg‡Ç¸ÿÿÿÿë‰öƒì ÿu èuÄÿÿ¸ƒÄÉÍvU‰åƒì‹E ƒ}tè,‡Ç¸ÿÿÿÿëv…Àt -ÇÇ@è¸ÉÃU‰åƒì‹UƒúwúÕ)Ѓ<Åð™#uûè܆ǸÿÿÿÿëvÕ)ЋÅì™#ûÉÐU‰åWVS¹»Ä™#¿À™#¾Ì™#‰öÍ)ÈÁàÇDÿÿÿÿØ™#ÇBǍP0Ç:ÇD A‰‰Áƒù~ºÇ¼ #ÿÿÿÿÇÀ #[^_]ÐU‰å]ÍvU‰å¸]ÉöU‰åVSœúX‰Ã¡lÞ#@‰ÂÁâ)¾@ß#‹DÖ0©t0©t)ƒì jè"Æÿÿ¡lÞ#@‰ÂÁâ)¿DÖ‰$è"[ƒÄ‰ØPeø[^]ÃU‰åS‹]úût ¸ÿÿÿÿ…ÛuL¡lÞ#@‰ÂÁâ)¹@ß#‹DÑ0Áèƒà‹U ‰¡lÞ#@‰ÂÁâ)Õ0‹
-%ÿþÿÿ ؉
-û¸‹$ÉÉöU‰åS‹]úût ¸ÿÿÿÿ…ÛuL¡lÞ#@‰ÂÁâ)¹@ß#‹DÑ0Áè ƒà‹U ‰¡lÞ#@‰ÂÁâ)Õ0‹
-%ÿýÿÿ ؉
-û¸‹$ÉÉöU‰åWVSƒì ‹} ÇEðú‹EÇÿÿÿÿÇ@¾;5dÞ#s9v‹µß#ƒ{u ƒìWVÿS,ƒÄ…ÀxƒìWÿuVÿS0‰EðƒÄF;5dÞ#rÊû‹Eðeô[^_]ÉöU‰åƒì‹U¸ƒ:ÿt ¸ƒzu‹‹…ß#ƒìRÿ2ÿP4ƒÄÉÍvU‰åƒì‹U¸ƒ:ÿt‹‹…ß#ƒìRÿ2ÿP8ƒÄÉÉöU‰åƒì‹U¸ƒ:ÿt‹‹…ß#ƒìRÿ2ÿP<ƒÄÉÉöU‰åƒì‹U¸ƒ:ÿt‹‹…ß#ƒìRÿ2ÿP@ƒÄÉÉöU‰åVS‹u‹µ Þ#ƒìÿ°ôh1#è^j»ƒÄ‰ö[‰ÐÁà)ÐÁà9°Dß#……ƒÀ º@ß#f|€ttfƒ|tlƒì f‹Dfƒøwƒì ·ÀP訃Äë%v·Ð¸ó0#ú€t¸ÿ0#út¸ 1#P[‰ÐÁà)ÐÁàÿ°â#Tß#PSh€1#è¹iƒÄ Cû™ŽUÿÿÿeø[^]ÉöU‰åWVSƒì ‹E‹… Þ#‰Eð‹¸üƒì ‹Uð‹‚ðøPèk§‰ÆƒÄƒþÿu -¸ÿÿÿÿ…ÿtrOëՐv‰ÐÁà)Ѝ Åöqß#tRQ@»Lß#ƒ<D‹$â#‰ƒìý‰Ø‹Uð‚ðPVèX¥ƒÄ‹Eð˜ðSV聦ƒÄéiÿÿÿ‰ðeô[^_]ÉöU‰åWVSƒì‹E‹… Þ#‰Eð‹Mƒy(…©‹=lÞ#‰ÐÁà)ЍžDß#‹U93…‹M I‰ÂÁâ)ÂÁ⋄Љ„йLß#‹D@‰D@‹„à‰„àƒÂ0¹@ß#‹
-%ÿ÷ÿÿ‹\0ã ؉
-‹UðƒÂ¸ƒ¼º€ÿ•ÀH‹] ‰„š€é¢v‹U R‰ÂÁâ)ÂÁâ»Dß#‹A‰„Ѓyt‹A‰‚Œß#‹A‰„àë-‰ö‹] [‰ÐÁà)ÐÁà‹]ð‹“ô‰Œß#‹“ô‰$â#ƒy$u‹E @‰ÐÁà)Ё Åpß#¸ƒy ”ÀH‹U ‹Mð‰„‘ˆ¸ƒÄ[^_]ÃU‰åWVSƒì ‹U‹<• Þ#ƒ¿t8LJƒì‹E @‰ÐÁà)ЋÅâ#‹—ðÂPÿu 襤酋E @‰ÐÁà)ЍÅöƒqß#t?K@¾Lß#ƒ<11ºDß#‹1„à‰1ƒì‹„Ћ—ðÂPÿu èG¤ë*ƒì‹E @‰ÐÁà)ЋÅâ#‹—ðÂPÿu 诣ƒÄ‹E @‰ÐÁà)ÐfÇÅhß#€eô[^_]ÐU‰åWVSƒìH‹]ÇE¼ÇEÀfÇEÄÇEÈÇEÌÇEÐÇEÔÇEØÇEÜÇEà¶Ã -f‰E¸‹ Þ#‹€ø‰EÈÇE̍E¸jjPhˆ"h%1#è-¬ÿÿ‰ÆƒÄ ƒþÿuƒì hÀ1#èVËÿÿƒÄ‹< Þ#v‰ÐÁà)Ðfƒ<Åhß#tµ€Gƒ<ÿtJÿëE‰öƒìv‰ÃÁã)ÃÁ㍃„ß#PjèJ;fǃhß#€ƒÄ‹ƒâ#‹—ðÂPVèࢃčeô[^_]ÐU‰åWVSƒì‹}h*1#è¾ÊÿÿèÆÿÿ‰EðƒÄ hPh@1#è£ÊÿÿÇ$èwÉÿÿ‰ÃƒÄSh^1#è‡Êÿÿ‹Eð‰… Þ#ƒÄ jhj1#Sè=efÇCÆCÇCx‡"ÇC¤‡"ÇC l}"ÇC$L~"ÇC(°‡"ÇC, "ÇC0¼‡"ÇC4ć"ÇC8Ї"ÇC<„€"ÇC@ˆ"ÇCDœˆ"ÇCHäˆ"ÇCLìˆ"ÇCP„‰"ÇCT̉"ÇCXŠ"ÇC\äŠ"ÇC`‹"ÇCd‹"ÇCh4‹"ÇClL‹"ÇCpd‹"ÇCt|‹"ÇCx”‹"ÇC|¬‹"ǃ€Ä‹"ǃ„Ü‹"¸ƒÄS‰öDŽ‚€ÿÿÿÿ@=™~í‹EH‰ƒüƒì ‹EÁàPè@Èÿÿ‰ƒð¾ƒÄ;u}ƒì ‹ƒððPè柃ÄF;u|åÿçw¿èÿ ¡v¿ ¡‰»ô‹E‰ƒøƒ} tƒìjÿuðh€"è8ÃÿÿƒÄeô[^_]ÐU‰åWVSƒì ‹M‹u ‹]‹ Þ#‰Eð…Éx[; -pÞ#sS‹ Þ#‹@%ÿÿÿ=u=þ™wv‰ÐÁà)Ðfƒ<Åhß#u -¸éèvv‰ÐÁà)Ð9 ÅDß#t -¸&éȍv…Ûuv‰ÐÁà)Ё Åpß#ë)ƒûuv‰ÐÁà)Ё$Åpß#ÿ÷ÿÿë ¸郉öv‰ÐÁà)ÐÁà˜Ð¿Dß#‹U9;t\f¸hß#€u=ƒì‹;‹Mð‹‘ðÂPV蘞‹E‰;ƒÄ‹Uð‹‚ð‹MÈPV赟ƒÄëv‰ÐÁà)ЋU‰Åâ#¸eô[^_]ÍvU‰åVS‹M‹4 Þ#…Éx; -pÞ#s‹ Þ#‹@%ÿÿÿ=t¸ÿÿÿÿëw¡lÞ#@‰ÂÁâ)¸ÿÿÿÿ9 ÕDß#uZúè!P‹lÞ#R‰ÑÁá)Ñ»@ß#f‰DËdžèX­ÿÿ¡lÞ#@‰ÂÁâ)ƒì ¿DÓPèçOè>·ÿÿƒÄû¸eø[^]ÉöU‰å‹E‹… Þ#‹€ü]ÍvU‰å‹E‹… Þ#‹€ô]ÍvU‰åS‹]‹M …ÛxU;pÞ#sM‹ Þ#‹@%ÿÿÿ=u7ù™wI‰ÐÁà)Ðfƒ<Åhß#u¸ëMI‰ÐÁà)Ð9ÅDß#t ¸&ë3‰öI‰ÁÁá)ÁÁá¸öqß#”À‹U‰‹‘â#‹E‰¸‹$ÉÉöU‰å‹E f8t·‹E -9Âu¸ë¸ÿÿÿÿ]ÐU‰å¸ÿÿÿÿ]ÉöU‰å¸]ÉöU‰å]ÍvU‰å¸]ÉöU‰åSƒì ‹E‹M ‹… Þ#I‰ÐÁà)ЋÅâ#‹“ðÂPQè7œƒÄ‹]üÉÍvU‰åWVSƒì ‹E‹u ‹<… Þ#v‰ÐÁà)Ðfƒ<Åhß#tµ€Gƒ<ÿtHÿëCƒìv‰ÃÁã)ÃÁ㍃„ß#PjèR5fǃhß#€ƒÄ‹ƒâ#‹—ðÂPVè蜃čeô[^_]ÐU‰åSƒì ‹E‹M ‹… Þ#I‰ÐÁà)ÐÁàfǀhß#€‹€â#‹“ðÂPQ蜜ƒÄ‹]üÉÃU‰å]ÍvU‰åWVSƒì ‹U‹• Þ#‰Eð‹U <•€‰ÆƒÆƒ<7~MƒìR‰ÃÁã)ÃÁ㍃„ß#Pjè‹4ÿ 7ƒÄ‹ƒâ#‹Mð‹‘ðÂPÿu 趛fǃhß#€ƒÄë‹E @‰ÐÁà)ÐfÇÅhß#eô[^_]ÐU‰åƒì‹E‹M ‹… Þ#ƒÀDŽˆ€ÿÿÿÿI‰ÐÁà)ÐfÇÅhß#häÞ#QèðÉÿÿƒÄÉÍvU‰å‹E‹U ‹… Þ#ƒÀDŽ€R‰ÐÁà)ÐfÇÅhß#]ÃU‰åWVSƒì4‹u v‰EäÁà+EäfÇÅhß#EèPjè“3Mè»@B‹Eº÷ó‰Uà’€€‰E܋A‹U܍ЉE؉A»¡/¸D÷ë‰ÓÁû‹EØÁø)ÿƒÞC‹E÷ç‰×‰øÁèEè‹A»Êš;™÷û‰Ó‰YƒÄVhô‹"ÿuìÿuèÿDÞ#‰ÃƒÄƒûÿuƒìÿ5lÞ#jèAäÿÿƒÄ v‰ÈÁà)ȉÅ â#eô[^_]ÐU‰åƒìÿ5lÞ#jèäÿÿ¸ƒÄÉÍvU‰åƒìÿ5lÞ#jèñãÿÿƒÄÉÃU‰åƒìÿ5lÞ#jèÙãÿÿƒÄÉÃU‰åƒìÿ5lÞ#jèÁãÿÿƒÄÉÃU‰åƒìÿ5lÞ#jè©ãÿÿƒÄÉÃU‰åƒìÿ5lÞ#jè‘ãÿÿƒÄÉÃU‰åƒìÿ5lÞ#jèyãÿÿƒÄÉÃU‰åƒìÿ5lÞ#jèaãÿÿƒÄÉÃU‰åƒìÿ5lÞ#jèIãÿÿƒÄÉÃU‰åƒìÿ5lÞ#jè1ãÿÿƒÄÉÃU‰åƒìÿ5lÞ#jèãÿÿƒÄÉÃU‰åWVSƒì‹MI‰ÃÁã)ÃÁãºDß#‹‹4… Þ#¿@ß#fÇD(€‹„Ћ–ðÂPQè9™Ç„àÿÿÿÿèQœÿÿƒÄeô[^_]ÉöU‰åVSƒì hà2#è
-Áÿÿè]¼ÿÿ‰ÆÇ$Œè׿ÿÿ‰Ã‰µ Þ#ƒÄ jhx2#Sè®[fÇCÆCÇC "ÇCԍ"ÇC à"ÇC$Ž"ÇC(ÇC, Ž"ÇC0,Ž"ÇC44Ž"ÇC8@Ž"ÇC<HŽ"ÇC@dŽ"ÇCDŒŽ"ÇCH´Ž"ÇCL܎"ÇCP"ÇCT,"ÇCXT"ÇC\|"ÇC`¨"ÇCdЏ"ÇChø"ÇCl "ÇCpH"ÇCtp"ÇCx˜"ÇC|À"ǃ€è"ǃ„‘"ǃˆÿÿÿÿÇ$ƒ2#èô¿ÿÿƒÄ jVh8‘"è,ºÿÿƒÄeø[^]ÉöU‰å‹M‹E ‹ Þ#fƒ8t·9Èu¸ƒºˆÿt¸ÿÿÿÿ]ÉöU‰å¸ÿÿÿÿ]ÉöU‰åƒì‹E‹… Þ#ÿ°ˆhå1#èìYƒÄÉÍvU‰å‹E‹… Þ#‹€ˆ]ÍvU‰å¸]ÉöU‰å]ÍvU‰å¸]ÉöU‰å]ÍvU‰å‹E @‰ÂÁâ)ÂfÇÕhß#]ÃU‰åƒìhô1#èxYƒÄÿ5lÞ#j è„àÿÿƒÄÉÍvU‰åƒìhû1#èPYƒÄÿ5lÞ#j è\àÿÿƒÄÉÍvU‰åƒìh2#è(YƒÄÿ5lÞ#j è4àÿÿƒÄÉÍvU‰åƒìh 2#èYƒÄÿ5lÞ#j è àÿÿƒÄÉÍvU‰åƒìh2#èØXƒÄÿ5lÞ#j èäßÿÿƒÄÉÍvU‰åƒìh2#è°XƒÄÿ5lÞ#j è¼ßÿÿƒÄÉÍvU‰åƒìh2#èˆXƒÄÿ5lÞ#j è”ßÿÿƒÄÉÍvU‰åƒìh%2#è`XƒÄÿ5lÞ#jèlßÿÿ¸ƒÄÉÉöU‰åƒìh,2#è4XƒÄÿ5lÞ#jè@ßÿÿƒÄÉÍvU‰åƒìh32#è XƒÄÿ5lÞ#jèßÿÿƒÄÉÍvU‰åƒìh:2#èäWƒÄÿ5lÞ#jèðÞÿÿƒÄÉÍvU‰åƒìhA2#è¼WƒÄÿ5lÞ#jèÈÞÿÿƒÄÉÍvU‰åƒìhH2#è”WƒÄÿ5lÞ#jè ÞÿÿƒÄÉÍvU‰åƒìhO2#èlWƒÄÿ5lÞ#jèxÞÿÿƒÄÉÍvU‰åƒìhV2#èDWƒÄÿ5lÞ#jèPÞÿÿƒÄÉÍvU‰åƒìh]2#èWƒÄÿ5lÞ#jè(ÞÿÿƒÄÉÍvU‰åƒìhd2#èôVƒÄÿ5lÞ#jèÞÿÿƒÄÉÍvU‰åƒìhk2#èÌVƒÄÿ5lÞ#jèØÝÿÿƒÄÉÍvU‰åSƒì0‹]ÇEÜÇEàfÇEäÇEè¶Ãf‰EØÇEìEØjjPhđ"hr2#趜ÿÿƒÄ ‹ Þ#‰Ã‰šˆƒûÿuƒì h 2#èÒ»ÿÿƒÄ[‰ÐÁà)ÐÇÅxß#ÿÿÿÿ‹]üÉÐU‰åôëýU‰åWVSƒì ‹} ¾ú»ëvCûÿ2Ý)ØÁàºà #€|t߃ìÿ4ÿuèaVƒÄ…Àuʾ…öt1ÿÀuèðnÇûéÜûÝ)؍…ä #éˉö÷Ç@uè¿nÇû髍v‹E‰Eð=ÿ~èžnÇû銉ö‹°Á#ƒúÿtqÕ)Ѝ<…w‹†ä #£°Á#ƒì ÿuèV@‰$臹ÿÿ»à #‰ƒÄÿuPè7U‹Eð‰‡è #‡ì #‰$è(‘ÆDƒÄû‡ä #ëvènÇû¸eô[^_]ÍvU‰åWVSƒì ¾ú¿»à #vý)øÁà€|tƒìÿ4ÿuèUƒÄ…Àu¾Gÿÿ~ʅötJƒì ÿuèOUƒÄ@Pý)ûÁã¾à #ÿ43è%¹ÿÿƒÃÆD3¡°Á#‰ƒä #‰=°Á#ƒÄûë‰öèSmÇû¸eô[^_]ÍvU‰åWVSƒì ‹}?ÿw‹Õ)Ѐ<…ø #uèmǸÿÿÿÿé‰öèÏæÿÿúè5B‹lÞ#R‰ÑÁá)Ñf‰ÍHß#‹Õ)Ѝ4…à #ƒ~ ÿu
-ƒ~…“ƒìWjÿlZ#ƒÄh$ß#jè8)ƒÄUè¡(ß#;xÞ#|¡$ß#+tÞ#‰Eè¡(ß#+xÞ#ë!‰ö¡$ß#+tÞ#H‰Eè¡(ß#+xÞ#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыlÞ#R‰ÐÁà)Ð) Ōß#ƒì Qèú›ÿÿƒÄƒ=|Þ#ÿtƒì ÿ5|Þ#ÿHÞ#Ç|Þ#ÿÿÿÿƒÄ‹ -lÞ#I‰ÐÁà)ЋÅDß#ƒì‹… Þ#QPÿRH‹ -lÞ#I‰ÐÁà)л@ß#fÇDÃ(Íǂà¼#‹‰‚ä¼#ƒÄF PQ辏ÇlÞ#ÿÿÿÿÇ€Þ#ÿÿÿÿèõÿÿ¡lÞ#@‰ÂÁâ)¿DÓ‰$è…@èܧÿÿƒÄûèÿäÿÿë8ÿNƒìWjÿlZ#¡lÞ#@‰ÂÁâ)¿ÕHß#‰$èF@蝧ÿÿƒÄû¸eô[^_]ÃU‰åWVSƒì ‹}‹]?ÿw‹Õ)Ѐ<…ø #uè¯jǸÿÿÿÿéVv…ÛuúëúèÒ?‹lÞ#R‰ÑÁá)Ñf‰ÍHß#‹Õ)Ѝ4…à #…Ûu0ƒ~ ÿu‹E 9F}èMjÇ û¸ÿÿÿÿéó‹E )Fûéâèäÿÿƒ~ ÿu ‹E 9F‘ƒìWjÿlZ#ƒÄh$ß#jèš&ƒÄUè¡(ß#;xÞ#|¡$ß#+tÞ#‰Eè¡(ß#+xÞ#ë¡$ß#+tÞ#H‰Eè¡(ß#+xÞ#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыlÞ#R‰ÐÁà)Ð) Ōß#ƒì Qè^™ÿÿƒÄƒ=|Þ#ÿtƒì ÿ5|Þ#ÿHÞ#Ç|Þ#ÿÿÿÿƒÄ‹ -lÞ#I‰ÐÁà)ЋÅDß#ƒì‹… Þ#QPÿRH‹ -lÞ#I‰ÐÁà)л@ß#fÇDÃ(͋E ‰‚à¼#‹‰‚ä¼#ƒÄF PQè#ÇlÞ#ÿÿÿÿÇ€Þ#ÿÿÿÿèZ›ÿÿ¡lÞ#@‰ÂÁâ)¿DÓ‰$èê=èA¥ÿÿƒÄûèdâÿÿë<‰ö‹E )FƒìWjÿlZ#¡lÞ#@‰ÂÁâ)¿ÕHß#‰$è§=èþ¤ÿÿƒÄû¸eô[^_]ÐU‰åWVSƒì ‹}?ÿw‹Õ)Ѐ<…ø #uèhǸÿÿÿÿéU‰öè,…À„‡œúX‰Æ‹Õ)Ѝ…à #‹JA‰J‹Z ƒûÿtG‹Ýà¼#9È<)Á‰È‰BƒìB PSèƊ[‰ÐÁà)ЋÅDß#ƒÄ‹• Þ#SRÿPDèÿÿƒÄƒìWjÿlZ#ƒÄ‰ðPé¼‰öúèª<‹€Þ#R‰ÑÁá)Ñf‰ÍHß#‹Õ)Ѝ…à #‹JA‰J‹Z ƒûÿtG‹Ýà¼#9È<)Á‰È‰BƒìB PSè&Š[‰ÐÁà)ЋÅDß#ƒÄ‹• Þ#SRÿPD荙ÿÿƒÄƒìWjÿlZ#¡lÞ#@‰ÂÁâ)¿ÕHß#‰$è <èb£ÿÿƒÄû¸eô[^_]ÐU‰åWVSƒì ‹] ÇEð‹E8ÿw‹Õ)Ѐ<…ø #uèlfǸÿÿÿÿéÊèc*…À„ÃœúX‰Â‰Uì‹E‹Õ)Ѝ4…à #^‹^ ƒûÿts݉‹€à¼#;F_¿à¼#ÇEðv‹F+:‰FƒìF PS艍[‰ÐÁà)ЋÅDß#ƒÄ‹• Þ#SRÿPD‹^ ƒÄƒûÿt݋:;F~°ƒìÿujÿlZ#ƒÄƒ}ðtèÿÿ‹Uì‰ÐPéõúèÊ:‹€Þ#R‰ÑÁá)Ñf‰ÍHß#‹E‹Õ)Ѝ4…à #^‹^ ƒûÿtr݉‹€à¼#;F^¿à¼#ÇEð‰ö‹F+:‰FƒìF PSè.ˆ[‰ÐÁà)ЋÅDß#ƒÄ‹• Þ#SRÿPD‹^ ƒÄƒûÿt݋:;F~°ƒìÿujÿlZ#ƒÄƒ}ðtèd—ÿÿ¡lÞ#@‰ÂÁâ)ƒì ¿ÕHß#Pèð9èG¡ÿÿƒÄû¸eô[^_]ÉöU‰åWVSƒì ¾¿ä #õ)óÁãǃà #‰4;ǃè #ƒì ƒì #PèB‡ƒÃF‰;ƃè #ƒÄ‰Æþÿ~±Çؼ#ÿÿÿÿÇ°Á#ƒìjhx "è:ªÿÿƒÄeô[^_]ÍvU‰åVS‹uú>ÿw‹Õ)Ѐ<…ø #uèÉcÇû¸ÿÿÿÿënvƒì ‹Õ)лà #ÿ4ƒèUKƒÄ@P‹Õ)Ðÿ4ƒè1¯ÿÿ‹Õ)ÐÆDƒ‹Õ)Ћ°Á#‰…ô #‹£°Á#ƒÄû¸eø[^]ÉöU‰åƒì‹Mú9ÿw‹Õ)Ѐ<…ø #uècÇû¸ÿÿÿÿëb‰ö‹Õ)Ѓ<…ì #ÿtèîbÇû¸ÿÿÿÿë8‹Õ)ÐÆ…ø #‹Õ)Ћ°Á#‰…ô #‹£°Á#û¸ÉÉöU‰åSƒì‹M‹] 9ÿw‹Õ)Ѐ<…ø #uèubǸÿÿÿÿë_ú‹Õ)ÐÁàƒ¸ì #ÿu ‹€è #‰ë7‰öÇ‹Õ)Ћ…ì #¹Hß#vÿ @‰ÐÁà)ЋDÁPƒøÿuëû¸‹]üÉÃU‰åVS‹u‹M¸ùÿ‡–ú‹°Á#‰ƒúÿtnÕ)Ћ…ô #£°Á#‹Õ)лà #ǃ‹Õ)Љ …è #ƒì ‹Õ)Ѝ…ì #P聄‹Õ)ÐÆDƒƒÄëègaÇû¸ÿÿÿÿëû¸eø[^]ÍvU‰åƒì‹M9ÿw‹Õ)Ѐ<…ø #uèaǸÿÿÿÿë=ú‹Õ)Ѝ…à #ƒx ÿuƒxuèì`Ç û¸ÿÿÿÿë ‰öÿHû¸ÉÐU‰å‹E@‰ÂÁâ)¸fƒ<Õhß#”À]ÐU‰åVS‹][‰ÐÁà)Ѝ4Åfƒ¾hß#uAƒì‹Ýä¼#Õ)Ѝ…ì #PS考‹†Dß#ƒÄ‹… Þ#SPÿRD¸ƒÄ됸eø[^]ÃU‰åVSƒ=xZ#…ÚÇxZ#¹»¥%¾¥%‰ÁàP ÆÇ2ÿÿÿÿÆDAƒùváƒìjjhÀÁ#èÜýÿÿ¹ƒÄ¾d§%»`§%‰ö‰ÁàQ‰0Ɖуù -véÇ”©%ÿÿÿÿƐ©%ÇX§%¹¾Ä©%»À©%vÍ)ÈÁàQ‰0ƉуùvãÇð¬%ÿÿÿÿÆì¬%Ç­%eø[^]ÐU‰åWVSƒìŠEˆEóŠUˆUòfÇEæ¾<u€út €}óu€}òuè_Ǐ¸ÿÿÿÿé7‰öúƒ=X§%ÿuèí^ǍûÇEìÿÿÿÿ됡X§%€‹Õd§%‰X§%û‰Eìƒ}ìÿu -¸ÿÿÿÿéìvƒì hÀÁ#ègñÿÿƒÄ‹]¾¹º÷ñ‰×ëf‰ö¿€<Å ¥%t0ƒìÿu¿ōƒ¥%Pè³EƒÄ…Àu€»¥%„Ÿ¾ëG¹‰øº÷ñ‰×fÿEæfƒ}懜‰ó„Ût–¿Áãƃ ¥%ƒìÿuƒ¥%Pè÷D‹E쉃¥%ƒÄ€}óu‰Â’‹] f‰Åh§%ëv‹E썀‹E ¯Ef‰Õh§%úƒì ‹U썒Áã·ƒh§%Pèݨÿÿºl§%‰ƒÄû…Àu%è”]ǒƒì hÀÁ#èAõÿÿ¸ÿÿÿÿ魍v‹E썀ÁãS‰Uà¾`§%‹ƒl§%‰‚d§%‰2ƒìjjƒ|§%Pè:ûÿÿƒÄ ·D3Pjƒ€§%Pè#ûÿÿƒÄ jjÃ„§%SèûÿÿŠ]ó‹Eàˆ\0ƒÄúƒ=­%ÿuèø\ǎûÇEèÿÿÿÿë¡­%Å)‹•Ä©%‰­%û‰Eèƒ}èÿu_ƒì hÀÁ#èvôÿÿ‹Eèéä‰öè§\ǐƒì hÀÁ#èTôÿÿ¸ÿÿÿÿéÀ‰öèƒ\Ǒƒì hÀÁ#è0ôÿÿ¸ÿÿÿÿ霉ö‹EèÁà+EèÁà¹À©%ŠUòˆT P‹]ì‰
-‹] f‰\
-ǀĩ%ÿÿÿÿ‰ºÈ©%‹]썛ÆÕ`§%ƍ¿ōr¿¥%€|>t%ƒì¶D>Pš¥%SèGõÿÿÆD>‰$èšøÿÿƒÄƒì hÀÁ#èŽóÿÿ¿EèƒÄeô[^_]ÍvU‰åWVSƒìŠEˆEóŠ]ÇEè¿ÆEç<u„Ût €}óu€ûuè‚[Ǐ¸ÿÿÿÿé0‰öúƒ=­%ÿuèa[ǎûÇEìÿÿÿÿë ¡­%Å)‹•Ä©%‰­%û‰Eìƒ}ìÿu ¸ÿÿÿÿéߐ‹EìÁà+EìÁàºÀ©%ˆ\ ‹M f‰Lǀĩ%ÿÿÿÿƒì hÀÁ#è°íÿÿƒÄ‹U¾¹º÷ñ‰Öë]v¶€<Å ¥%u ¿ÆEçë8ƒìÿu¶Å¥%PèöAƒÄ…Àu¿ëF¹‰ðº÷ñ‰ÖÿEèƒ}è‡Ò‰ù„Ét €}çuR¶Á㸥%ÆD ÆDƒìÿuPè>AƒÄ jjÃ¥%Sè/øÿÿÇ$ÀÁ#èçñÿÿƒÄ jjSè:ïÿÿëM¶ōCº¥%€|t'þDƒì hÀÁ#è®ñÿÿƒÄ jjƒ¥%Pèûîÿÿ됃ì hÀÁ#è‹ñÿÿƒÄ¶‹<Å¥%¿ŠUó:Åx§%tèªYǓ¸ÿÿÿÿéX‰ö€}óu¿·Åh§%9E u€}ót(¿·Åh§%™÷} …ÒtèdYǔ¸ÿÿÿÿéƒì hÀÁ#è ìÿÿ¶‹Å$¥%ƒÄƒúÿ„­€}óu#è&YǕƒì hÀÁ#èÓðÿÿ¸ÿÿÿÿéЍÕ)з…Ô©%9E t"èíXǔƒì hÀÁ#èšðÿÿ¸ÿÿÿÿ鋋MìÁá+M썶Å »¥%‹‰Ä©%‹Mì‰ ë/‰öèŸXǑƒì hÀÁ#èLðÿÿ¸ÿÿÿÿë@¶‹Uì‰Å$¥%ƒì hÀÁ#è*ðÿÿ‹EìÁà+EìÁàH‰±È©%ºÀ©%‰<Æ¿EìƒÄeô[^_]ÉöU‰åWVSƒì¿E‰Eì‰ÇÁç)ÇÁ獗À©%‰UðhÀÁ#èÏêÿÿ‹Mð‹Y›ÁãC‰E躥%‹€Áà°`§%ƀ`§%F‰$èôÿÿF ‰$è„ôÿÿF$‰$èyôÿÿƒÄú·FPÿv èX£ÿÿû¹¥%‹Eè‹ú ’¡X§%‰Íd§%‰X§%ûƇÀ©%ƒÃ ‹Uð‹B‰ƒ¥%ú¡­%‰‡Ä©%‹Mì‰ -­%ûƃ¥%Ç$ÀÁ#è
-ïÿÿƒÄeô[^_]ÍvU‰åWVSƒì ‹u ŠM¿UÕ)Ѝ…À©%‰Eð‹@€Å`§%‹Eð€x uèûVǔ¸ÿÿév€;uèÞVǖ¸ÿÿéù‰ö€{tQ€{u,ƒì¶ÁP‹Uð·BPC PèÈëÿÿƒÄ…Àt;¸évƒì¶ÁP‹Uð·BPC PèœëÿÿƒÄ…ÀuÔƒì CPè-éÿÿƒÄ‹Uð·B‹{‰ÁÁéüó¥¨tf¥¨t¤·B‰ÁK‰K·S‰ÐC 9Ár‰È)ЉC€{u ƒì CPë8‰ö€{uƒì‹Uð·BPC$PèZïÿÿëƒì‹Uð·BPC$PèDïÿÿC‰$èíÿÿƒÄ¸eô[^_]ÐU‰åWVSƒì ‹} ŠM¿UÕ)Ѝ…À©%‰Eð‹@€Å`§%‹Eð€x uè‹Uǔ¸ÿÿév€;uènUǖ¸ÿÿéù‰ö€{tQ€{u,ƒì¶ÁP‹Uð·BPC$PèXêÿÿƒÄ…Àt;¸évƒì¶ÁP‹Uð·BPC$Pè,êÿÿƒÄ…ÀuÔƒì CPè½çÿÿƒÄ‹Uð·B‹s‰ÁÁéüó¥¨tf¥¨t¤·B‰ÁK‰K·S‰ÐC 9Ár‰È)ЉC€{u ƒì CPë8‰ö€{uƒì‹Uð·BPC Pèêíÿÿëƒì‹Uð·BPC PèÔíÿÿC‰$è-ìÿÿƒÄ¸eô[^_]ÐU‰åSƒìhÿ2#è;ƒÄÿ5X§%h 3#è;»ƒÄÝ)ØÁà€¸À©%t8À©%‹B€Å`§%ƒì ÿp ÿp$‹B€Å¥%PSh3#è®:ƒÄ Cƒûv­‹]üÉÃU‰åƒì`¿MÍ)ȋ…Щ%’Å`§%ÿp ÿp$RQh@3#E¨Pèf:ƒÄ ÉÐU‰åSƒì‹]hÀÁ#èHæÿÿ¿ÓÕ)Ѝ …‹Ø©%€Å ƒÄ€º¥%u ‹Ä©%‰‚¥%¿ÃÅ)ÂÁâƂÀ©%ú‹ -­%‰ŠÄ©%£­%ûƒì hÀÁ#èÓêÿÿƒÄ‹]üÉÍvU‰åWVSƒì ‹u ‹E‹<…ß#ú‹^…Ûu-ƒì j èžÿÿƒÄ…ÀtÇÿÿÿÿÇ@Ç@ÿÿÿÿ‹U‰‰F‹;lÞ#u û¸#é~ƒ;ÿtc¾@ß#‰ö‹ -lÞ#I‰ÐÁà)Ћ‰TÆP‹C‰„¬¡lÞ#‰CÿCè…ÿÿ¡lÞ#@‰ÂÁâ)ƒì ¿DÖPèŸ'èöŽÿÿƒÄûúƒ;ÿu¤¡lÞ#ÿD‡D¡lÞ#‰û¸eô[^_]ÉöU‰åWVSƒì ‹E ‹x¸…ÿ„À‹;lÞ#tû¸髍vúè*'‹lÞ# [‰ÊÁâ)Êf‰ÕHß#‹E‹…ß#ÿL˜DÇÿÿÿÿ‹_ÇGÿÿÿÿƒûÿt-p ‰Ù[‰ÐÁà)ЉŐß#‹œž DŽŽ ÿÿÿÿƒûÿuÖÇGè„ÿÿ¡lÞ#@‰ÂÁâ)ƒì ¿ÕHß#Pè¢&èùÿÿƒÄû¸eô[^_]ÃU‰åVSƒì h¤3#è~ÿÿè -™ÿÿ‰ÆÇ$èKœÿÿ‰Ã‰µß#ƒÄ jh¸3#Sè"8fÇCÍÆCÇCÇC¸°"ÇC ±"ÇC$±"ÇC(±"ÇC,H±"ÇC0t±"ÇC4¼±"ÇC8®"ÇC<²"ÇC@¯"ºƒÄsK •ÇD@DŽ ÿÿÿÿBú™~ݍeø[^]ÉöU‰åVS‹E‹…ß#ƒì h€3#è7¾ƒÄƒÃƒìÿt³@hŸ3#èû6ƒÄFþ™~ãeø[^]ÃU‰å¸ÿÿÿÿ]ÉöU‰å]ÍvU‰åƒì‹E‹U ‹…ß#ƒÀƒ|@tƒìRj
-èȽÿÿƒÄÉÍvU‰å‹U :t ‹E -9u
-¸ëv¸ÿÿÿÿ]ÐU‰åSƒì‹] j èӚÿÿ‰ÂƒÄ¸ …Òt!ÇÿÿÿÿÇBÇBÿÿÿÿ‹E‰‰S¸‹]üÉÍvU‰åSƒì‹] ‹Cƒxt ¸ë&‰öúƒ{tƒìj ÿsèäšÿÿÇCƒÄû¸‹]üÉÍvU‰åWVSƒì ‹}‹u ú‹^…Ûu*ƒì j è3šÿÿƒÄ…ÀtÇÿÿÿÿÇ@Ç@ÿÿÿÿ‰>‰Fƒ;ÿt
-û¸ë"‰ö¡lÞ#‹½ß#ƒÂÿD‚@¡lÞ#‰û¸eô[^_]ÃU‰åWVSƒì ‹E ‹U‹•ß#ú‹p¸…ö„V‹;lÞ#u û¸#éA‹lÞ#‹F ¿@ß#;„“°v -¸é v¡lÞ#‹Œƒ°‹“¬…Òt‰ö‹;lÞ#…Š‹R…Òu븅À…†‹ -lÞ#I‰ÂÁâ)‹ƒ¬‹‰D×P‹ƒ¬‹@‰„‹‹“¬¡lÞ#‰B‹ƒ¬ÿ@èj€ÿÿ¡lÞ#@‰ÂÁâ)ƒì ¿D×Pèù"èPŠÿÿƒÄûúéRÿÿÿ‰ö¸;J ’Àérÿÿÿ‹E‹…ß#¡lÞ#ÿDƒD¡lÞ#‰¹‹ƒ¬‹V ë‰ö‰Á‹A…Àt;P sò…Ét‰q됉³¬…Àt‰p‰F‰Nû¸eô[^_]ÍvU‰åWVS‹}‹E ‹ ½ß#ú‹X¸…Û„Ù‹;lÞ#uû¸#éčv‹lÞ#‹C ;„‘°s
-¸饡lÞ#‹´°‹‘¬…Òt‰ö‹;lÞ#u‹R…Òu︅Àuû¸ëk‰ö¸;r ’Àëåv‹ ½ß#¡lÞ#ÿDD¡lÞ#‰¾‹¬‹S 됉ƋF…Àt;P sò…öt‰^됉™¬…Àt‰X‰C‰sû¸[^_]ÉöU‰åWVSƒì ‹E ‹x¸…ÿ„ï‹;lÞ#tû¸éڍvúè&!‹lÞ# [‰ÊÁâ)Êf‰ÕHß#‹E‹…ß#‰EðÿL˜DÇÿÿÿÿ‹_ÇGÿÿÿÿƒûÿt2‰ÆƒÆv‰Ù[‰ÐÁà)ЉŐß#‹œžDŽŽÿÿÿÿƒûÿuÖÇG‹O‹W…Éu -‹Eð‰¬ë‰ö‹G‰A…Òt‹G‰Bèã}ÿÿ¡lÞ#@‰ÂÁâ)ƒì ¿ÕHß#Pèo èƇÿÿƒÄû¸eô[^_]ÐU‰åVSƒì hä3#èJ—ÿÿèْÿÿ‰ÃÇ$€è–ÿÿ‰Æ‰4ß#ƒÄ jhø3#Vèî1fÇFÌÆFÇFÇFÀ·"ÇF D¸"ÇF$p¸"ÇF( ¸"ÇF,è¸"ÇF0¹"ÇF4l¹"ÇF8|²"ÇF<´"ÇF@µ"ºƒÄ^N•ÇD@DŽ°ÿÿÿÿDŽÿÿÿÿBú™~Òdž¬eø[^]ÐU‰å‹U‹M ¸ÿÿÿÿ…Òt;‹‹…ß#ƒxu‹@%ÿÿÿ=Ìu…Ét ‹B‹@ ‰ë
-‰ö¸ÿÿÿÿ됸]ÐU‰å‹U‹M¸ÿÿÿÿ…Òt@‹‹…ß#ƒxu‹@%ÿÿÿ=Ìt¸ÿÿÿÿ됅Ét‹B‹@ ‰‹R‹E ‰B ¸]ÃU‰å‹E‹M ‹U‹…ß#‰”ˆ°]ÃU‰åWVSƒì‹E‹<…ß#h€3#è0»ƒÄwƒìÿtž@hŸ3#èó/ƒÄCû™~ãƒì hÂ3#èÚ/»ƒÄ‰öƒìÿ´Ÿ°hÞ3#è¼/ƒÄCû™~àeô[^_]ÃU‰å‹U :t ‹E -9u
-¸ëv¸ÿÿÿÿ]ÐU‰åS‹E‹U ‹]‹ …ß#Áâ‹C‰„°ÇD
-D‹$ÉÉöU‰åVS‹E‹u ‹…ß#ƒ|³DtƒìVj
-èD¶ÿÿƒÄë vÇD³DDŽ³°ÿÿÿÿeø[^]ÉöU‰å‹U :t ‹E -9u
-¸ëv¸ÿÿÿÿ]ÐU‰åSƒì‹] jè3“ÿÿ‰ÂƒÄ¸ …Òt1ÇÿÿÿÿÇBÇBÿÿÿÿ‹E‹@‰B ÇB‹E‰‰S¸‹]üÉÍvU‰åSƒì‹] ‹Cƒxt ¸ë&‰öúƒ{tƒìjÿsè4“ÿÿÇCƒÄû¸‹]üÉÍvU‰åWVSƒì$·]Sh4#è .‰Ø-yƒÀÁèƒÄ ·À‰Eè@ÛÁã¿À¹%ÿt8CP‰Eä·8Ph 4#èá-ƒÄ ÿt;·D;Ph4#èÊ-ƒÄ ÿt; s·>Ph(4#è±-ƒÄ ÿt>·D>Ph94#èš-ƒÄ ‹Uä·D:P·DLPhJ4#è~-‹UèÕƒÄ·ØSh[4#èc-EóPEòPEìPS蹃ĶUóR¶UòRÿuìPh 4#è6-ƒÄ eô[^_]ÍvU‰åWVSƒì ‹E‹U‹]¹‹u ƒî‰ƒî‰º <&fƒ= <&yA¿Áfƒ<Byfù™~îfù™~ƒì hp4#èÎ,¸ƒÄé ¿Á<¹ <&‰Úf Ê€f‰Ǎ<ÿÁçºÀ¹%‰tÇD _ÇDfŒÙf‰LfÇfÇDÇD _ ‹M‰ ÇDÇDO0ÇDÇD Ǎ_@ÇÇD‰t‰t fŒÉf‰L fŒÙf‰LfŒÛOPf‰\fŒÛf‰fÇD 0fÇD0O`fÇfÇDfÇDÇ,º%¾à=&¹üó¥Å˜eô[^_]ÐU‰åVS‹u ¿E-‰Â…ÀyP‰ÐÁø@ÀÁà¹À¹%f‰tX@Vf‰T f‰t ƒÀPf‰tf‰4[^]ÉöU‰å¿E-‰Â…ÀyP‰ÐÁøfDŽ <&]ÉöU‰åSƒì‹]¿E Phˆ4#Sè~3‰ØƒÄ‹]üÉÃU‰åVS趉Æès»‰öƒìh¬Ã"SèƒÄh8½"SèìƒÄCƒû~ۉðeø[^]ÉöU‰åƒìèaÉÍvU‰åSƒì‹]‹|Z#€82uºð°îƒìShâ5#èˆ*ƒÄÁ㋃|Z#@Ph=@#èp*ƒÄÿ³ÀZ#ènƒÄ‹]üÉÉöU‰åƒìÿuhù5#èE*èèûÇ$èG7ƒÄÉÉöU‰åWVSƒì‹E‹} ƒ=¸%„à…ÿ„Ø¡€®%€€€ źm¶‰È÷â‰È)ÐÑ草ÁÁé
-‰O¡„®%ÀP‰ÐÁà)кè‰Ó™÷û’’’щW¡„®%ÀP‰ÑÁá)ѾÓMb‰È÷îÁú‰ÈÁø‰Ó)øƒÞC÷o‰ÑÁù‹GÁø)Á‰È؉‹OÁú‰ÈÁø)’’’’’’Áâ)э ‰ ‰ ‰Áá‰O‹éԉö]血®%€€€ źm¶‰È÷â‰È)ÐÑ草ÁÁé
-¡„®%ÀP‰ÐÁà)кè‰Ö™÷þ’’’щS¡„®%ÀP‰ÑÁá)ѾÓMb‰È÷îÁú‰ÈÁø)‰Uè‹{¸ƒÞC÷ï‰ÑÁù‰øÁø)Á‰ÈEè‰ùÁú‰ÈÁø)’’’’’’Áâ)э ‰ ‰ ‰Áá‰K‹E荀€€€€€‰ÃÁã‰È÷îÁúÁù)ʍéèvƒøuc¸ƒ=t®%…Ρx®%€€€€€€‰ÃÁã‹ -|®%ºÓMb‰È÷êÁúÁù)ÊӅÿ„…¡x®%‰¡|®%éqvƒø…ç¶d®%ƒøtƒø…Àt
-ë,ƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹ -p®%f)Ù·É -€®%º×®¬]‰È÷êÁú‰ÈÁø)„®%’BÁà)Ѝ‚‰ÂÁâ Ð)Á‰È£€®%f‰p®%…ÿ„̍€€€ źm¶‰È÷â‰È)ÐÑ草ÁÁé
-‰O¡„®%ÀP‰ÐÁà)кè‰Ó™÷û’’’щW¡„®%ÀP‰ÑÁá)ѺÓMb‰È÷êÁú‰ÈÁø‰Ó)Ëw¸ƒÞC÷î‰ÑÁù‰ðÁø)Á‰È؉‰óÁú‰ÙÁù)ʍ’’’’’’Áâ‰Ø)Ѝ€€€Áà‰G‹€®%’’’4Õ¹Á6ۉð÷é‰Ó3‰ÁÁù
-‰ð™‰È)Ћ -„®%ɍ‘ÑÁâ)ʉÑÁá)эÈ鍃ø…ƒ=t®%…rUè¡x®%‰¡|®%‰B»@¹C°Ò‰Êî‰Úì¶ÈìÁàf¶Ñ зð·¸%9Æv%h6#j_h6#h6#èm%Ç$èmƒÄ·¸%)ó¯h®%·¸%‰Ø‰Ñº÷ñ‰Ãº °
-îì©t‹ -h®%;ÍÌÌ̉ð÷âÁê9Ós‰Ëu荛€€‹V‰Eä‰F¸¡/¸D÷mä‰ÑÁù‹EäÁø)Á‰ÈEè‹N¸¡/¸D÷éÁú‰ÈÁø)’’’’’’’’’Áâ )щN¡x®%€€€€€€Áà‰Eä‹ -|®%ºÓMb‰È÷êÁúÁù)ʋEäÐÅÿt ‰ð‹‰‹@‰G‰Øëv¸eô[^_]ÍvU‰åVSƒìŠEˆE÷ÿ([#ƒ=([#uƒ=[#tÿ[#¶E÷€Áàº,­%ƒ<uIÇö€0­%tûƒì ¶]÷›Áã¾ ­%ÿ43ÿ“$­%ƒÄöDtú¶E÷€Ç…,­%ÿ [#ƒ=([#uƒ=[#tÿ[#ÿ -([#eø[^]ÍvU‰åWVSº¿,­%¾(­%»$­%¹ ­%’ÁàÇ8‰0ÇÇBƒú~ÜÇ([#[^_]ÐU‰åVS‹U‹] ‹uú’ƒ<…,­%t÷Æu¸ÿÿÿÿëH’ …ǁ,­%û…Ût‰™$­%º ­%(­%‰‰t
-됍’Ç…,­%¸[^]ÐU‰å¡([#]ÉöU‰åSƒì¶d®%ƒøt!ƒø…Àt ë.‰öƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹ -p®%f)Ù·É -€®%º×®¬]‰È÷êÁú‰ÈÁø)„®%’BÁà)Ѝ‚‰ÂÁâ Ð)Á‰ -€®%f‰p®%ÿ([#ƒ=([#uƒ=[#tÿ[#¡|®%‰ÃÄÁ#º¡/¸D‰Ø÷êÁú‰ÙÁù)Êx®%’’’’’’’’’Á⠉Ø)У|®%‹`®%ë$‹¡l®%‰‰l®%‰`®%ƒì ÿrÿRƒÄ‰Ú…Òt‹B ;x®%;x®%uƋB;|®%~»ƒ=([#uƒ=[#tÿ[#ÿ -([#‹]üÉÃU‰åWVSƒì‹uhÒ"j@èØ -ƒÄƒ>t,ƒì h96#èß »ÿÿƒÄ¿@¹C°8‰ÊîˆØ‰úîëaƒì hU6#è³ ‹N‰ -h®%ɍA‰ÂÁâ‰Ñ)ÁºÓMb‰È÷âƒÄ‰ÑÁéu¹f‰ -¸%‰Ë¿@¹C°4‰Êî‰úˆØî‰ØfÁèî‹£t®%ƒ=d>&~»A¹C°p‰ÊÚîîÆd®%ë%Æd®%»B¹C°°‰ÊÚîîºa°îº!ì%þî¹¾ ®%»¤®%ƒùbIÁà¸®%‰0I‰LÃAƒùc~ßÇè·%Çl®% ®%Ç[#Ç[#¡h®%€€€Áà£ÄÁ#Ç|®%Çx®%Ç€®%Ç„®%fÇp®%ƒ=t®%uÇDÞ#øÈ"ÇHÞ#É"ëÇDÞ#àÉ"ÇHÞ#lÐ"eô[^_]ÃU‰å‹E£[#]ÍvU‰å‹E£[#]ÍvU‰å‹E£[#]ÍvU‰åWVSƒì ‹E‹U ‰Eè‰Uì¸ÿÿÿÿƒ=l®%tl‹ -l®%‹£l®%‹E‰A‹Eè‰A ‹Eì‰A‹E‰A»‹`®%}è‹uè됋…Òt‰ð;B  -;B u‹G;B~‰Óëâ‰ö…Ût‰ ë‰ -`®%‰‹AƒÄ [^_]ÐU‰å‹E¹‹`®%됉ы…Òt;Buó¸ÿÿÿÿ…Òt$…Éu
-‹£`®%됋‰¡l®%‰‰l®%¸]ÃU‰åWVSƒì,‹E‹U ‰Eè‰Uì¸ÿÿÿÿƒ=l®%„q‹5l®%‹£l®%‹E‰F‹Eè‰F ‹Eì‰F‹E‰Fº‹`®%}è‹Mè됋…Ût‰È;C  -;C u‹G;C~‰Úëâ‰ö…Òt‰2鐉5`®%ƒ=¸%…ôƒìEàPjè3óÿÿ‹`®%ƒÄ‹Eà;B  -;B u‹Eä;B~ÇEÜÇEØëK}؋`®%Mà‹B;A|‹B +Eà‰E؉Ћ@+Aë ¡`®%‹@ +EàH‰EØ¡`®%‹@+Eäʚ;‰G‹E؍€€€€€€Áà‰EԋMÜ¿ÓMb‰È÷ïÁúÁù)ÊUԍҍB‰ÂÁâ)‰Ð÷çÁê¸ðúðw¸ÈúÇv‰Ðº@îfÁèFeô[^_]ÃU‰åWVSƒì¶d®%ƒøtƒø…Àt
-ë,ƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹p®%f)Ú·Ò‰Ö5€®%¹×®¬]‰È÷î‰ÑÁù‰ðÁø)Á -„®%‰AÁà)ȍÁ‰ÁÁá ȉò)‰€®%f‰p®%]荒’’ Õ¾m¶‰ð÷á‰Ö‰Ê)òÑê2‰ÁÁé
-¡„®%ÀP‰ÐÁà)кè‰Ö™÷þ’’’щS¡„®%ÀP‰ÑÁá)ѺÓMb‰È÷êÁú‰ÈÁø)‰Uè‹s¿ƒÞC‰ð÷ï‰ÑÁù‰ðÁø)Á‰ÈEè‰ðÁú‰ñÁù)ʍ’’’’’’Áâ)Ѝ€€€Áà‰Cƒ=`®%„/Ǹ%‹`®%‹Eè;B ;B …Œ‹C;BŽ€ƒ=([#uƒ=[#tÿ[#ÿ([#‹`®%ë#‹¡l®%‰‰l®%‰`®%ƒì ÿrÿRƒÄ‰Ú…Òt‹B ;Eè -;EèűB;Eì~ă=([#uƒ=[#tÿ[#ÿ -([#¶d®%ƒøt"ƒø …Àt -ë/vƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹p®%f)Ú·Ò‰Ö5€®%¹×®¬]‰È÷î‰ÑÁù‰ðÁø)Á -„®%‰AÁà)ȍÁ‰ÁÁá ȉò)‰€®%f‰p®%]荒’’ Õ¾m¶‰ð÷á‰Ö‰Ê)òÑê2‰ÁÁé
-¡„®%ÀP‰ÐÁà)кè‰Ö™÷þ’’’щS¡„®%ÀP‰ÑÁá)ѺÓMb‰È÷êÁú‰ÈÁø)‰Uè‹s¿ƒÞC‰ð÷ï‰ÑÁù‰ðÁø)Á‰ÈEè‰ðÁú‰ñÁù)ʍ’’’’’’Áâ)Ѝ€€€Áà‰C‹`®%‹Mè;J 
-;J u;B~ÇEäÇEàëJ]à‹`®%Mè‹B;A|‹B +Eè‰Eà‰Ð‹@+Aë ¡`®%‹@ +EèH‰Eà¡`®%‹@+Eìʚ;‰C‹Eà€€€€€€‰ÆÁæ‹Mä»ÓMb‰È÷ëÁúÁù)ʍ2ҍB‰ÂÁâ)‰Ð÷ãÁê¸ðúðw¸ÈúÇv‰Ðº@îfÁèîǸ%ë -‰öº@°î°ðîeô[^_]ÐU‰åVSƒì‹E»¹‹`®%ëv‰Ñ‹…Òt;Buó¸ÿÿÿÿ…Ò„I…Éu‹£`®%»ë‹‰¡l®%‰‰l®%ƒ=¸%…ƒ=`®%uº@°î°ðéû‰ö…Û„òƒìEðPjèºìÿÿ‹`®%ƒÄ‹Eð;B  -;B u‹Eô;B~ÇEìÇEèëJ]è‹`®%Mð‹B;A|‹B +Eð‰Eè‰Ð‹@+Aë ¡`®%‹@ +EðH‰Eè¡`®%‹@+Eôʚ;‰C‹E荀€€€€€‰ÆÁæ‹Mì»ÓMb‰È÷ëÁúÁù)ʍ2ҍB‰ÂÁâ)‰Ð÷ãÁê¸ðúðw¸ÈúÇv‰Ðº@îfÁèeø[^]Éöú‹D$¼ÈÑ#PèŒëÿÿ`fff f¨f¸0ŽØŽÀ° º î¡[#@£[#1ÛfŒÓü¡t®%ƒøtèùòÿÿëè6ùÿÿ°
-º îì¨t ¸@Pè–ÿÿÿf¡[#f9[#t f£[#ÿ-[#ƒ=[#t‹[#ÿÓf©f¡ffaωöU‰å‹EØf£[#f£[#]Ã1ÀÈÃU‰åf¸0ŽØŽÀ‹Ef;[#t f£[#ÿ-[#]ÉöU‰åƒìjjjj@èaƒÄÉÃU‰åWVSƒì ‹]‹u ‹}聉€:y"…Ût‹B8‰…öt‹BÁà
-‰…ÿt)‹B4‰ë"‰ö…ÛtÇ…öt‹BÁà
-‰…ÿtÇ@ƒ}t ‹BÁà
-‹U‰ƒÄ [^_]ÍvU‰åƒìjjjj@è̓Ä·@0ÉÃU‰å¡ØX#]ÉöU‰å]ÍvU‰åSƒì‹ØX#誃ì Sèucÿÿè ƒÄ‹]üÉÃU‰åWVS‹M ‹u‹}Š]‰ÈÁàeèÿÿ Eè‰ÈÁèUèˆBáÿbÿÿÿ J‰ðˆB‹Ef‰Eè‹EÁè‰EäŠEäƒà ÃË@¶ÃÁàbÿÿÿ Bçüÿ=ÊX#‹‰‹B‰G[^_]ÐU‰åWVSƒì ‹] ‹u‹}·EMèÊX#‹‰‹@‰A‰Ê¶JÁá¶B ÁÁá·B Á…ÛtŠBƒà¶ÐÁâ·Eè Љ…ötŠE툅ÿt
-ŠEî%ðˆ‰ÈƒÄ [^_]ÉöU‰å‹E ¶UÁâ¹à[#fÇD
-8Ƃå[#îƂä[#f‰
-Áèf‰D
-]ÍvU‰åº °îº!°@î°î°î°ÿ°°pî°î°î°ÿî]ÐU‰åº °îº!°î°î°î°ÿ°°pî°î°î°ÿî]ÐU‰å‹Mf…ÉtWfƒùw¸Óà
-$[#ë7fƒùw<·Éƒé¸Óà
-%[#¢%[#º¡î<ÿu $[#©uƒÈ¢$[#º!î]ÃU‰å‹Mf…ÉtUfƒùw¸þÿÿÿÓÀ"$[#ë5fƒùw:·Éƒé¸þÿÿÿÓÀ"%[#¢%[#º¡î $[#©t%û¢$[#º!î]ÉöU‰å¿[#]ÃU‰åƒì‹Ef£[#˜PèWüÿÿƒÄÉÐU‰å¿[#]ÃU‰åƒì‹E‰Âf£[#ƒ=([#uƒì ¿ÂPèüÿÿƒÄÉÐU‰åWVì¾¹0[#ºp[#‰öµÇ(Ú"Ç(Ú"Fƒþ~åƒì EÈPèÅèºÇ`>&¡6#‹EÈ£d>&¶,[#£h>&ƒÄ‹EУp>&‹EÔ£t>&‹EØ£x>&hÑÛ"jè£ýÿÿƒÄhÛÛ"jè”ýÿÿƒÄhåÛ"jè…ýÿÿƒÄhìÛ"jèvýÿÿƒÄhóÛ"jègýÿÿƒÄhúÛ"jèXýÿÿƒÄhÜ"jèIýÿÿƒÄhGÜ"jè:ýÿÿƒÄhÜ"jè+ýÿÿƒÄhÜ"j èýÿÿƒÄhÜ"j
-è -ýÿÿƒÄhÜ"j èþüÿÿƒÄh$Ü"j èïüÿÿƒÄh+Ü"j -èàüÿÿƒÄh2Ü"jèÑüÿÿƒÄh9Ü"jèÂüÿÿƒÄh@Ü"jè³üÿÿƒÄhÛ"jAè¤üÿÿƒÄhÛ"jBè•üÿÿƒÄhÛ"jCè†üÿÿƒÄhÛ"jDèwüÿÿƒÄh Û"jEèhüÿÿƒÄh(Û"jFèYüÿÿƒÄh0Û"jGèJüÿÿƒÄh8Û"jpè;üÿÿƒÄh@Û"jqè,üÿÿƒÄhHÛ"jrèüÿÿƒÄhPÛ"jsèüÿÿƒÄhXÛ"jtèÿûÿÿƒÄh`Û"juèðûÿÿƒÄhhÛ"jvèáûÿÿƒÄhpÛ"jwèÒûÿÿf -Ô=&€¾ƒÄvÀÅÀ¹%ƒì jh‰hØPõ·ÀPèúÿÿƒÄ Fþš~ǃì hÐèFùÿÿƒÄÛãݵTÿÿÿ›¿à=&µTÿÿÿ¹üó¥ ÀƒÈ""ÀÛãèƒûÿÿèúÿÿeø^_]ÍvU‰åSƒìº!°ÿîè’ûÿÿ¹@ºC°6Êîîƒ=d>&~¹AºC°tî°‰Êî°ë»B¹C°°‰ÊÚîîºaî‹]üÉÃU‰å‹U‹E ‰•p[#]ÉöU‰å‹U‹E ‰•0[#]ÉöU‰åƒìh€6#è
-è— ƒÄÉÉöœX‰Á5PœX9ÈtQ¸Ã¸ÜX‰Á5 PœX1ÈtQ¸øÃf1Àžf¸f»öóŸ€üu¸øÃÆ,[#Ûã¹âþfÇ.[#ZZÝ=.[#¹âþf¡.[#<u+Ù=.[#¹âþf¡.[#f%?fƒø?uÆ,[#Æ,[#Éö`¸ëp`¸ëh`¸ë``¸ëX`¸ëP`¸ëH`¸ë@`¸ë8`¸ ë0`¸
-ë(`¸ ë `¸ ë`¸ -ë`¸ë`¸ë ¨Pf¸0ŽÀŽØüX1ÛfŒÓP‹…0[#ÿÓ[° ƒûrº îº îf¡[#f;[#t f£[#ÿ-[#©¡aϸ鋸選ëz¸ës¸ël¸ëe¸ë^¸ëW¸ ëP¸
-ëI¸ ëB¸ ë;¸ -ë4¸ë-¸ë&¸ë` ¨f¸0ŽÀŽØüèש¡aÏPf¸0ŽØŽÀXfŒÓ‹=ÊX#ß1ۊŠ_Áãf‹_ÜfŒÒfŒÛŽÓSRPÿ…p[#ƒÄX[ŽÐ)ÜÏU‰åWVSƒì ‹u¸¹ ‰÷üó«è|ýÿÿ…ÀtÇëUèŠýÿÿ…Àt7ÇFǸ¢‰^‰N‰V …Àt+¸¢‰F‰^‰N‰V ëÇècýÿÿ…ÀtÇ ƒÄ [^_]ÍvU‰åWV¿°[#È·À-yƒÀÁø9ÂtU¿°[#@ÀÝ4Å,º%›È·À-yƒÀÁøf£°[#¿5°[#¿ >&4v4ö4õ,º%¹üó¥Ý% >&^_]ÉöU‰å¿°[#]ÃU‰åWVSƒì(ŠM¡´[#Áà ˜€ f¶?&f£ÊÑ#f¶ -?&f£ÌÑ#€ù t%€ù €ù„óé‰ö€ù
-„#é‰öfƒÊÑ#·ÊÑ#;?&Œ½fÇÊÑ#·ÌÑ#¡?&H9Â…¿¡?&H‰Eì‰Uèf¾ ?&Áâf‰Uò¡´[#Áà °€ ¿;}è:¹;Mì*_ÿv‰ø¯?&È·F‰Ø¯?&Èf‰FA;Mì~ÜG;}è~ƹ;MìKWÿ‰Ð¯?&Èf‹]òf‰FA;Mì~çé)‰öfÇÈÑ#·ÊÑ#‰Áƒø~ºƒÂ·ÂƒÀ9È|óf‰ÈÑ#f¡ÈÑ#f£ÊÑ#éævfÇÊÑ#·ÌÑ#¡?&H9Â…¾¡?&H‰Eà‰UÜf¾ ?&Áâf‰Uæ¡´[#Áà °€ ¿;}Ü=v¹;Mà*_ÿv‰ø¯?&È·F‰Ø¯?&Èf‰FA;Mà~ÜG;}Ü~ƹ;MàGWÿ‰Ð¯?&Èf‹]æf‰FA;Mà~çé%‰öfÿ -ÊÑ#·ÊÑ#·ÌÑ#¯?&ÂÆS fÿÊÑ#éõ‰ö·ÊÑ#·ÌÑ#¯?&Ј CfÿÊÑ#·ÊÑ#;?&Ž¿fÇÊÑ#·ÌÑ#¡?&H9Â…š¡?&H‰EԉUÐf¾ ?&Áâf‰UÚ¡´[#Áà °€ ¿;}Ð=v¹;MÔ*_ÿv‰ø¯?&È·F‰Ø¯?&Èf‰FA;MÔ~ÜG;}Ð~ƹ;MÔ'Wÿ‰Ð¯?&Èf‹]Úf‰FA;MÔ~çëfÿÌÑ#·5ÊÑ#·=ÌÑ#‰øf¯?&f‰EΡ´[#Áà fEÎfuλÔ°‰Úî¹Õ‰ÊŠEÎî°‰Úîf‹EÎfÁè‰Êî‰óˆ?&‰ø¢ -?&ƒÄ([^_]ÐU‰åWVSƒì‹u‹} ‰øf¯?&f‰Eò¡´[#Áà fEòfuò»Ô°‰Úî¹Õ‰ÊŠEòî°‰Úîf‹EòfÁè‰Êî‰ð¢?&‰úˆ -?&ƒÄ[^_]ÍvU‰åS¹Ô°
-‰Êî»Õ‰ÚŠEî° ‰Êî‰ÚŠE î‹$ÉÍvU‰åWVSƒìf¾EÁàf‰Eò¡´[#Áà ¸€ ‹]ë0‹M ;M(sÿ‰Ø¯?&È·G‰ð¯?&Èf‰GA;M~ÜC;]~ʋM ;MSÿv‰Ð¯?&Èf‹]òf‰GA;M~çƒÄ[^_]ÍvU‰åWVSƒì ¡?&H‰Eð‹?&K‰]ìf¾ ?&Áàf‰Eê¡´[#Áà °€ ¿9ß<‰ö¹;Mð*_ÿv‰ø¯?&È·F‰Ø¯?&Èf‰FA;Mð~ÜG;}ì~ƹ;MðWÿ‰Ð¯?&Èf‹]êf‰FA;Mð~çƒÄ [^_]ÍvU‰å·J‰?&¶„@£?&¶„ÿ ¢ ?&¶P¢?&¶Q¢ -?&¶`¢ÏÑ#¶a¢ÎÑ#Ǹ[#Ç´[#]ÃU‰åWVSƒì ?&¢P  -?&¢Q¶ÀP¶?&PèŠýÿÿ¶ÎÑ#¶5ÏÑ#ƒÄ¹Ô°
-‰Êî¿Õ‰úˆØî° ‰Êî‰ú‰ðîeô[^_]ÍvU‰åSƒì‹]€;tŠCƒì ¾ÀPèiùÿÿƒÄ€;ué‹]üÉÃU‰åVS‹E‰ÃÁã £¸[#¹Ô° -‰Êî¾Õ‰òˆØî° ‰Êî‰ØfÁè‰òî[^]ÃU‰åVS‹u‹´[#Áâ»àÑ#¶?&‰¹Ò#¶ -?&‰
-µŠ¢?&Š
-¢ -?&‰5´[#[^]ÃU‰å¡¸[#]ÉöU‰å¡´[#]ÉöU‰åWVSƒì ‹}f¾u Áæf¾E Ƌ]‹E9Ã3v‹M9ù#‰Ê¯?&¡´[#Áà ÐØf‰´€ A9ù~ÞC;]~ЃìÿuÿuèüÿÿŠE¢ -?&ŠE¢?&ƒÄeô[^_]ÍvU‰åWVSƒì ¡?&H‰Eð‹=?&Of¾ ?&ÁãƒË ¾9Æ4¹9ù%v‰Ê¯?&¡´[#Áà Ððf‰œ€ A9ù~ÞF;uð~̃ìjjèûÿÿÆ -?&Æ?&ƒÄeô[^_]ÍvU‰åS‹U ‹]‹M¯?&¡´[#Áà ÂU”€ ˆ
-ˆZ‹$ÉÉöU‰åS‹E ‹]‹M‰Â¯?&¡´[#Áà ÂU”€ ¶B…Étˆ¶‰Â…Ûtˆ¾Â‹$ÉÐU‰åS‹E ‹MŠ]‰Â¯?&¡´[#Áà ÂU”€ €9tŠˆABˆB€9uò‹$ÉÐU‰åƒìh¼6#èTýÿÿôƒÄÉÉöU‰åƒìjèƒÄÉÉöU‰åƒìh4èƒÄÉÍvU‰åVS‹Ef£r¹d»þ¾v‰Êì©t Fþÿÿ~í¸@=Ÿ†~ø‰ÚˆÈö@=Ÿ†~øë‰öU‰åSƒìE Pÿuh Ò#èX‰ÃÇ$ Ò#è¢üÿÿ‰ØƒÄ‹]üÉÃU‰åWVSìð‹} ŠEˆ…ÿÿÿEPÿuÿÿÿSè‰ÆS¾…ÿÿÿPWÿuè±þÿÿ‰ðƒÄ eô[^_]ÃU‰åSƒìE Pÿuh Ô#謉ÃÇ$ Ô#è&üÿÿ‰ØƒÄ‹]üÉÃU‰åS‹M‹U ‰Ë€:tvŠˆBA€:uõƉ؋$ÉÍvU‰åVS‹]‹U ‹M‰Þë‰öŠˆBC€:t‰ÈI…ÀîƉð[^]ÐU‰å‹U‹M ë -¸€:tBAŠ:t)Ð]ÃU‰åS‹U‹] ‹M…Éëv¶¶Sÿ)Ð됊C8uíŠB„ÀtIu︋$ÉÐU‰å‹U¸€:tB@€:uù]ÍvU‰åS‹E‹] €8t‰Ú€:tŠv:
-tB€:uö@€8u下$ÉÉöU‰å‹E‹U €8t ‰ö8t @€8uö¸]ÍvU‰åS‹]‰Ú€;t‰öŠ
-AŸ<wAàˆB€:uì‰Ø‹$ÉÐU‰åS‹]‰Ú€;t‰öŠ
-A¿<wA ˆB€:uì‰Ø‹$ÉÐU‰åS‹U‹M ‰Ó€;tvB€:uú늈AB€9uõƉ؋$ÉÍvU‰åWVSƒì<‹u‹]ÇEèÇEäÇEàÇEÜÇEØÇEÔÇEпÇEÌÙîÝ]À‰uì‹E €8„D‹U €:%t…ÿuŠˆB‰U FÿEèév‹E €8%u%@‰E ¿ÇEä
-ÇEàÇEØÇE̋U ¾ƒè%ƒøS‡Ñÿ$… '#‰öÆ%FÿEè鼃ÉòFŠCüˆÿEè驐ƒ}Øt"ƒ}؃}Øtëƒ}ØuƒÃ‹Cü‰EÔë -vƒÃ¿Sü‰Uԃì ÿuÌÿuäj
-VÿuÔè¾ éœƒ}Øt"ƒ}؃}Øtëƒ}ØuƒÃ‹Cü‰EÐë -vƒÃ·Sü‰UЃì ÿuÌÿuäj
-VÿuÐè.éPƒ}Øt"ƒ}؃}Øtëƒ}ØuƒÃ‹Cü‰EÐë -vƒÃ·Sü‰UЃì ÿuÌÿuäjVÿuÐèâ鐃ËCü‰EЃì jÿuäjVPèÂé䐃ËSü€:tŠˆBFÿE܀:uò‹UÜUèévƒ}Øtƒ}؃}Øtëƒ}Øu ƒÃÝCøÝ]ÀƒìÿuÌÿuàÿuäVÿuÄÿuÀèYë~vƒ}Øtƒ}؃}Øtëƒ}Øu ƒÃÝCøÝ]ÀƒìÿuÌÿuàÿuäVÿuÄÿuÀè} -ë>vƒ}Øtƒ}؃}Øtëƒ}Øu ƒÃÝCøÝ]ÀƒìÿuÌÿuàÿuäVÿuÄÿuÀèa‰EÜEèÆ¿ƒÄ é±ÇEØé¥ÇEØ陃MÌ鐍vƒMÌ鄍v¿ƒMÌëvƒÿu?ƒìEìPj
-ÿu èb
-‰EäƒÄ‹E €80u ÷EÌtƒMÌ됃MÌ‹UìJ‰U ë4vƒÿu,ƒìEìPj
-ÿu è
-‰Eà‹EìH‰E ¿ƒÄë‰ö¿ÿE ‹U €:…¼üÿÿÆ‹Eèeô[^_]ÉöU‰åƒì EPÿu ÿuè7üÿÿƒÄÉÉöU‰åWVSƒì,‹u‹} ‹]ÇEìÇEèÇEäÇEàÇEÜÇEØÇEÔÇEЉuð€?„>€?%tƒ}Ôu ŠˆGFÿEìëá€?%uGÇEÔÇEè
-ÇEàÇEоƒè%ƒøS‡çÿ$…p(#Æ%FÿEìéԃÉòFŠCüˆÿEìéÁƒ}àt&ƒ}àƒ}àt
-ë"ƒ}àt
-ëƒÃ‹CüëƒÃ‹CüëƒÃ¿Cü‰E܃ì ÿuÐÿuèj
-VÿuÜè鏐ƒ}àt&ƒ}àƒ}àt
-ë"ƒ}àt
-ëƒÃ‹CüëƒÃ‹CüëƒÃ·Cü‰E؃ì ÿuÐÿuèj
-ëBƒ}àt&ƒ}àƒ}àt
-ë"ƒ}àt
-ëƒÃ‹CüëƒÃ‹CüëƒÃ·Cü‰E؃ì ÿuÐÿuèjVÿuØè6‰EäEìÆÇEÔƒÄ éҍvƒÃ‹Sü€:tŠˆBFÿEä€:uò‹EäEì飍vÇEàé›ÇEà鏃MÐ醍vƒMÐë}‰öÇEÔƒMÐënvƒ}Ôu6ƒìEðPj
-W蓉EèƒÄ€?0u ÷EÐtƒMÐ됃MЋ}ðOë1‰öƒ}Ôu)ƒìEðPj
-WèW‹}ðOÇEÔƒÄë
-vÇEÔGé¼ýÿÿvÆ‹Eìeô[^_]ÉöU‰åƒì EPÿu ÿuèGýÿÿƒÄÉÉöU‰åWVSƒì,‹}‹uÇEèÇEäÇEàÇEÜÇEØ»‰}ì饐‹U €:%t…Ûu B‰U 鏍v‹E €8%u%@‰E »ÇEäÇEàÇEÜÇE؋U ¾ƒè*ƒøN‡Eÿ$…À)#‰öƒû…8ƒìEìPj
-ÿu èN‰E܃MØ‹EìH‰E ƒÄéŠGƒÆ‹^üˆëÝØÿEèéõƒÆ‹^üëG€?tƒì ¾PèBƒÄ…ÀuçÇEÔë#‰ö÷EØuŠˆCë‹UÜ9UÔ}ŠˆCÿEÔG€?tƒì ¾PèþƒÄ…ÀtÇÆ덉öƒìhÈ6#Wè&÷ÿÿ‰ÇƒÄ EìPj
-WèՉ‹}ìƒÄƒ}à…Wƒ}ät)ƒ}ä ƒ}ätéCÿÿÿƒ}ä…9ÿÿÿƒÆ‹Fü‰é,ÿÿÿƒÆ‹Füf‰éÿÿÿ‰öƒìhÕ6#Wè¶öÿÿ‰ÇƒÄ EìPj
-됃ìhà6#Wèšöÿÿ‰ÇƒÄ EìPjWè ‹}ìƒÄƒ}à…̓}ät+ƒ}ä -ƒ}äté¹þÿÿ‰öƒ}ä…­þÿÿƒÆ‹Vü‰é þÿÿƒÆ‹Vüf‰é‘þÿÿ‰öƒìhø6#Wè*öÿÿ‰ÇƒÄEìPWè;‹}ìƒÄƒ}àu`ƒ}ät)ƒ}ä ƒ}ätéMþÿÿƒ}ä…CþÿÿƒÆ‹FüÝé8þÿÿƒÆ‹FüÙé*þÿÿvÇEäë vÇEäëvÇEàëÝؐ»ÿE ‹E €8…Pýÿÿ‹Eèeô[^_]ÐU‰åƒì EPÿu ÿuèïüÿÿƒÄÉÉöU‰åWVSƒì,‹u ÇEп‹Eƒð‰EԋU‰U̅Òy‰Ñ÷ىM̃}y ‹E…Ày÷Ø됋E÷EÔu ƒ}yƒ}yGƒ}u‹EÐÆD(Ø0@‰EÐë8v…Àt1U؉Uȉöƒì º÷ủÃRèI‹MȋUЈ
-B‰UЉ؃Ä…Àu×}ЋEԃàƒøu‰ú;}} -‰öÆ FGB;U|õƒ}y ƒ}yÆ-ë ÷EÔtÆ+F‹Eԃàƒøu‰ú;}} Æ0FGB;U|õ‹UÐJx M؊
-ˆFJy÷‹Eԃàƒøu‰ú;}} Æ FGB;U|õƉøeô[^_]ÃU‰åƒì‹Eÿuÿu÷ØPÿu ÿuèŸþÿÿƒÄ ÉÉöU‰å‹E…Ày÷Ø]ÉöU‰åSƒì‹]èÁîÿÿƒì Sè± ÿÿU‰åWVSƒì‹M‹} ÙîÙÀÙ軀9-u ¾ÿÿÿÿë
-‰ö¾ëA€90túŠƒè0< w(Ý+#ëÙˍv¾ƒè0AÜËÙËPÚ$XŠƒè0< vâÝۀ9.u9AŠƒè0< w/Ý+#ëÙÉÙʉö¾ƒè0AÜÊÙÊPÚ$ÙÉXØʊƒè0< vÝÝÚÙÉÞùÞÁVÚ $^€9et €9E…“A€9-u
-¾ÿÿÿÿAë‰ö€9+u ¾Aëv¾Šƒè0< weÝ+#¾ƒê0A·ÃÙÀPÚ $Ù}ð‹]ðÆEñ Ùmð‰]ðÛ]ìÙmð‹Eì·À‰$Û$‰$Ú$ZÙ}ð‹UðÆEñ Ùmð‰UðÛ]ìÙmð‹Eì‰ÃŠƒè0< v£Ý؅ö~!ºf…Ût4Ý+#·Ã‰öÜÉB9Â|ùëvº·Ã‰Ã9Â}Ý+#ÜùB9Ú|ùÝ؅ÿt‰ƒÄ[^_]ÐU‰åWVSƒì ‹]‹} ÇE쾀;-u ÇEðÿÿÿÿCë‰ö€;+u ÇEðCëÇEð€;0u>C€;0túë6ƒì ¾PCè‰ÂƒÄ9ú…Òy
-¸ëEv‰ð¯÷Ö9ð~ÇEìƒìW¾P聃ąÀu¶ƒ}t‹E‰ƒ}ìt¾ÿÿÿ¯uð‰ðeô[^_]ÉöU‰åWVSƒì ‹]‹} ÇEð¾€;0uC€;0tú€;xuKƒÿuFC€;0u@‰öC€;0túë6ƒì ¾PCè_‰ÂƒÄ9ú…Òy
-¸ëAv‰ð¯÷Ö9ðvÇEðƒìW¾PèуÄ…Àu¶ƒ}t‹E‰ƒ}ðt¾ÿÿÿ‰ðeô[^_]ÉöU‰åŠUBÐ< w ¾Âƒè0ë&vB¿<w ¾Âƒè7됍BŸ<w ¾ÂƒèW됾Â]ÍvU‰å‹Uƒú w B0¾À됍BöƒøwB7¾Àë¾Â]ÍvU‰åŠUƒê0¸€ú –À]ÉöU‰åŠUBÐ<vBŸ<w¸ë¸]ÐU‰åŠU€ú/~‹E ¼[#:Pÿ¸ë¸]ÐU‰åŠUBŸ<w Bà¾Àëv¾Â]ÍvU‰åŠUB¿<w B ¾Àëv¾Â]ÍvU‰åVS¾ƒì ¾]Sè%ƒÄ…Àuƒì Sè5ÿÿÿƒÄ…Àt¾‰ðeø[^]ÃU‰åŠUƒêA¸€ú9–À]ÉöU‰å¸€}/žÀ]ÍvU‰åŠUƒêa¸€ú–À]ÉöU‰åŠUB÷<v
-¸€ú u¸]ÉöU‰åŠUƒêA¸€ú–À]ÉöU‰åWVSƒì ÝEÝUè‹]‹}ÇEäSd$øÝ$èoƒÄ…Àtƒì Sè·îÿÿƒÄéPvÙîÝEèÚéßà€äE€üu Æ-C€uï€ë÷EtÆ+CÿEäÝ+#ÝEèÚéßà€äE€üuÆ0ÆC¸éû‰öÙèÝEèÝáßà€äE€üu3¾Ýéßà€äE€üuHÝ7#ÝEèØÉÝUèNÝêßà€äE€ütëÝØë)vÝØÝؾÝ7#ÝEèë ÝEèØñÝUèFÝéßàöÄtîÝ؃ì Vè÷ùÿÿƒÄƒøc~ƒïë‰öƒø ~ƒïë‰ö…ö~Oƒì‹EƒÈPÿuWSÿuìÿuèèUEäƒÄ …öu‹Eäë;‰ö]äÆeCƒì jºgfff‰ð÷êÁú‰ðÁø)ƒÂRj
-SVè\ùÿÿ‹UäD‰EäƒÄ eô[^_]ÍvU‰åWVSìŒÝEݝþÿÿ‹]Dž€þÿÿ½¸þÿÿ¹K¸üó«ƒìSÿµ”þÿÿÿµþÿÿ貃ąÀtƒì SèúìÿÿƒÄé‰öÙî݅þÿÿÚéßà€äE€üuÆ-C€µ—þÿÿ€ëv÷Et
-Æ+Cÿ…€þÿÿƒì…˜þÿÿPÿµ”þÿÿÿµþÿÿèþݝpþÿÿ‹…pþÿÿ‹•tþÿÿ‰Æ‰×DžŒþÿÿƒÄ݅˜þÿÿÙèÙÉÝáßàöÄ…ø重vh$@jÿµœþÿÿÿµ˜þÿÿè$݅˜þÿÿÜ5+#ݝ˜þÿÿÙ½´þÿÿ‹´þÿÿƅµþÿÿ Ù­´þÿÿ‰´þÿÿß½¨þÿÿÙ­´þÿÿ‹…¨þÿÿ‰$èûÿÿ‹•Œþÿÿˆ„*¸þÿÿB‰•ŒþÿÿƒÄ݅˜þÿÿÙèÙÉÚéßàöÄ„oÿÿÿ‹•Œþÿÿ•€þÿÿ‰ÑI…¸þÿÿ‰…|þÿÿë‰ö‹•|þÿÿŠˆCI‹•Œþÿÿƒê‰ÐÁèH!Â9Ñ}ޅÉx‹Œþÿÿƒéx
-vÆ0CIyùÆëÝØÝØÆ0Cÿ…€þÿÿÝ 7#‰µpþÿÿ‰½tþÿÿ݅pþÿÿÚéßàöÄE…\‹E@9…€þÿÿLÆ.Cÿ…€þÿÿ‹Eƒà‰…ˆþÿÿDž„þÿÿDžŒþÿÿv‰µpþÿÿ‰½tþÿÿ݅pþÿÿÜ(7#Ü -+#ݝpþÿÿ‹µpþÿÿ‹½tþÿÿƒì…˜þÿÿPWVèݝpþÿÿ‹•pþÿÿ‹tþÿÿ‰Ö‰Ï݅˜þÿÿÙ½´þÿÿ‹´þÿÿƅµþÿÿ Ù­´þÿÿ‰´þÿÿ۝¤þÿÿÙ­´þÿÿ‹…¤þÿÿƒÄ…Àtƒ½ˆþÿÿu
-Džˆþÿÿƒì PèÓùÿÿˆCÿ…€þÿÿÿ…ŒþÿÿƒÄƒ½ˆþÿÿt‹E9…Œþÿÿ~
-Dž„þÿÿ‹•€þÿÿ9U}
-Dž„þÿÿƒ½„þÿÿ„ýþÿÿKë
-‰öÿ€þÿÿ‰Ã€;0u Cÿ€{ÿ.uêCÆ‹…€þÿÿeô[^_]ÃU‰åWVSƒì‹]‹u ‹}WVSèZƒÄ…Àtƒì Wè¢éÿÿƒÄéñ‰öÙî‰]è‰uìÝEèÝáßàÝـäE€üuÙàëvÝ؉]è‰uìÝEèÝ+#ÙÉÝáßàÝـäE€üuÝØÆ0ÆG¸雺ÙèÙÉÝáßà€äE€üu/Ýáßà€äE€üu?Ý7#ëÙɐÜÉÙÉJÝâßà€äE€ütìÝØëvÝÙÝ7#ë‰öØñÙÉBÙÉÝáßàöÄtðÝØÝ؍BƒøvƒìÿuÿuÿuWVSèÔùÿÿë‰öƒìÿuÿuÿuWVSèXûÿÿƒÄ eô[^_]ÐU‰åƒìSÙ}ü›f‹Eüf -? f‰EøÙmø›ÝEÙüÝ]ð›‹Uð‹Mô‹]‰‰KÝEÜeðeì›ÛâÙmü›[ÉÍvU‰åƒì‹E‹U ‰Eø‰Uü‹MUøf‹BfÁè%ÿ=ÿt¸ëk÷Bÿÿuƒ:t…Étƒìh07#QèDçÿÿƒÄ¸ë@‰ö€zy…Étƒìh47#Qè çÿÿƒÄ¸ë‰ö…Étƒìh97#QèçÿÿƒÄ¸ÉÃU‰åƒì¸ Ö#ƒ=È[#tÿÈ[#ÉÃU‰å‹E£È[#]ÍvU‰åƒì‹E‹U ‰Eø‰UüUø¹f‹BfÁè%ÿ=ÿu÷Bÿÿuƒ}øt¹‰ÈÉÉöU‰åSƒì‹E ‹]ÆPè‰âÿÿ‰ØƒÄ‹]üÉÍvU‰åVSƒì ÝEÝUð‹]‹uVSd$øÝ$èrÝ]èƒÄƒ=Ì[#ÿtWƒìVSèYÿÿÿƒÄ…ÀuFƒìÿuôÿuðèDÿÿÿƒÄ…Àu1Ùî‰]à‰uäÝEàÚéßà€äE€ô@uƒì jVSÿuôÿuðè4ƒÄ ëvÝEèeø[^]ÉöÝD$ ÝD$Ùø›ßàžzøÝÙͶ¼'U‰åVSƒì0ÝE‹]‹u‹EÝUà‰]è‰uìPÿú‡Èÿ$•0+#ÝØÇEغ>7#ƒøc~ºC7#‰UÜÇEðÇEôƒ=Ì[#„}ƒì EØP誃ąÀ…uƒ=Ì[#…YƒìjhI7#éëvÝØÇEغ]7#ƒøc~ºb7#‰UÜÇEðÇEôƒ=Ì[#„ƒì EØPè>ƒÄ…À… ƒ=Ì[#…íƒìjhh7#év‰]à‰uäÝ]èÇEغ|7#ƒøc~º‚7#‰UÜÇEðÇEôƒ=Ì[#„žƒì EØPè˃ąÀ…–ƒ=Ì[#…zƒìjh‰7#é ÝØÇEغž7#ƒøc~º¤7#‰U܃=Ì[#uÇEðàÇEôÿÿïGé¸ -¡À[#‹Ä[#‰Eð‰Uôé¡ -‰öÝØÇEغ29#ƒøc~º89#‰U܃=Ì[#uÇEðàÇEôÿÿïGéh -¡À[#‹Ä[#‰Eð‰UôéQ -‰öÝØÇEغ«7#ƒøc~º¯7#‰U܃=Ì[#uÇEðàÇEôÿÿïGé -¡À[#‹Ä[#‰Eð‰Uôé -‰öÝØÇEغ«7#ƒøc~º¯7#‰UÜÇEðÇEôéÑ ‰öÝØÇEغ72#ƒøc~º´7#‰U܃=Ì[#uÇEðàÇEôÿÿïÇë¡À[#‹Ä[#ò€‰Eð‰Uôƒ=Ì[#„óƒì EØPè ƒÄ…À…ëƒ=Ì[#…σìjh¸7#éaÝØÇEغ72#ƒøc~º´7#‰U܃=Ì[#uÇEðàÇEôÿÿïÇë¡À[#‹Ä[#ò€‰Eð‰Uôƒ=Ì[#„gƒì EØP蔃ąÀ…_ƒ=Ì[#…Cƒìjh¸7#éÕ -ÝØÇEغø1#ƒøc~ºÊ7#‰U܃=Ì[#uÇEðàÇEôÿÿïÇë¡À[#‹Ä[#ò€‰Eð‰Uôƒ=Ì[#„Û -ƒì EØPèƒÄ…À…Ó -ƒ=Ì[#…· -ƒìjhÎ7#éI -ÝØÇEغø1#ƒøc~ºÊ7#‰U܃=Ì[#uÇEðàÇEôÿÿïÇë¡À[#‹Ä[#ò€‰Eð‰Uôƒ=Ì[#„O -ƒì EØPè| -ƒÄ…À…G -ƒ=Ì[#…+ -ƒìjhÎ7#é½ ÝØÇEغà7#ƒøc~ºã7#‰U܃=Ì[#uÇEðàÇEôÿÿïÇë¡À[#‹Ä[#ò€‰Eð‰Uôƒ=Ì[#„à ƒì EØPèð ƒÄ…À…» ƒ=Ì[#…Ÿ ƒìjhç7#é1 ÝØÇEغà7#ƒøc~ºã7#‰U܃=Ì[#uÇEðàÇEôÿÿïÇë¡À[#‹Ä[#ò€‰Eð‰Uôƒ=Ì[#„7 ƒì EØPèd ƒÄ…À…/ ƒ=Ì[#… ƒìjhç7#é¥ ÝØÇEغù7#ƒøc~º8#‰U܃=Ì[#uÇEðàÇEôÿÿïGéP ¡À[#‹Ä[#‰Eð‰Uôé9 ‰öÝØÇEغù7#ƒøc~º8#‰U܃=Ì[#uÇEðàÇEôÿÿïGë¡À[#‹Ä[#‰Eð‰Uôƒ=Ì[#„a ƒì EØPèŽ ƒÄ…À…Y ƒ=Ì[#…= ƒìjh8#éÏ
-vÝØÇEغ8#ƒøc~º 8#‰U܃=Ì[#uÇEðàÇEôÿÿïÇë¡À[#‹Ä[#ò€‰Eð‰Uôƒ=Ì[#„å ƒì EØPè ƒÄ…À…Ë
-ƒ=Ì[#…¯
-ƒìjh%8#éA
-ÝØÇEغ8#ƒøc~º 8#‰U܃=Ì[#uÇEðàÇEôÿÿïÇë¡À[#‹Ä[#ò€‰Eð‰Uôƒ=Ì[#„G
-ƒì EØPèt
-ƒÄ…À…?
-ƒ=Ì[#…#
-ƒìjh68#éµ ÝØÇEغI8#ƒøc~ºO8#‰U܃=Ì[#uÇEðàÇEôÿÿïÇë¡À[#‹Ä[#ò€‰Eð‰Uôƒ=Ì[#„Íƒì EØPèè ƒÄ…À…³ ƒ=Ì[#…— ƒìjhV8#é) ÝØÇEغI8#ƒøc~ºO8#‰U܃=Ì[#uÇEðàÇEôÿÿïÇë¡À[#‹Ä[#ò€‰Eð‰Uôƒ=Ì[#„/ ƒì EØPè\ ƒÄ…À…' ƒ=Ì[#… ƒìjhi8#靐ÝØÇEغ~8#ƒøc~º‚8#‰UÜÇEðÇEôƒ=Ì[#… ƒì EØPèòƒÄ…À…½ƒìjh‡8#jèÞõÿÿèeõÿÿÇ!ƒÄ降vÇEغ~8#ƒøc~º‚8#‰U܃=Ì[#uvÇEðàÇEôÿÿïG‰]ЉuÔÝEÐÜ -è9#Ý]Ћ]ЋuÔÙîÙÉÚéßà€äE€ü…¯ƒìVSèjƒÄ‰]ЉuÔÝEÐÙÉÚéßà€äE€ü@„‡ÇEðàÇEôÿÿïÇét¡À[#‹Ä[#‰Eð‰Uô‰]ЉuÔÝEÐÜ -è9#Ý]Ћ]ЋuÔÙîÙÉÚéßà€äE€ü…6ƒìVSèñƒÄ‰]ЉuÔÝEÐÙÉÚéßà€äE€ü@„¡À[#‹Ä[#ò€‰Eð‰UôéòvÝØÇEغ~8#ƒøc~º‚8#‰UÜÇEðÇEôéÁ‰öÝØÇEغ~8#ƒøc~º‚8#‰U܃=Ì[#uÇEðÇEôë¡À[#‹Ä[#ò€‰Eð‰Uôƒ=Ì[#„ãƒì EØPèƒÄ…À…Ûƒ=Ì[#…¿ƒìjhŸ8#éQÝØÇEغ~8#ƒøc~º‚8#‰U܃=Ì[#uÇEðÇEôëÇEðÇEôøƒ=Ì[#„`ƒì EØP荃ąÀ…Xƒ=Ì[#…<ƒìj hÀ9#éΉöÇEغ¹8#ƒøc~º¾8#‰U܃=Ì[#u6ÙîÙÉÚéßàöÄEuÇEðàÇEôÿÿïGém‰öÇEðàÇEôÿÿïÇéX‹ -À[#‹Ä[#‰Mð‰]ôÙîÙÉÚéßàöÄE„4‰È‰Úò€‰Eð‰UôéÝØÇEغÄ8#ƒøc~ºÉ8#‰U܃=Ì[#uÇEðÇEôëÇEðÇEôøƒ=Ì[#„Lƒì EØPèyƒÄ…À…Dƒ=Ì[#…(ƒìjhÏ8#麉öÇEغã8#ƒøc~ºè8#‰U܃=Ì[#uÝ]ðëÝØÇEðÇEôøƒ=Ì[#„Òƒì EØPèÿƒÄ…À…ʃ=Ì[#…®ƒìjhî8#é@ÝØÇEغ9#ƒøc~º -9#‰UÜÇEðÇEôøƒ=Ì[#„iƒì EØP薃ąÀ…aƒ=Ì[#…Eƒìjh9#é׍vÝØÇEغ19#ƒøc~º79#‰UÜÇEðÇEôøƒ=Ì[#„ýƒì EØPè*ƒÄ…À…õƒ=Ì[#…Ùƒìjh>9#ékvÝØÇEغS9#ƒøc~ºY9#‰UÜÇEðÇEôøƒ=Ì[#„‘ƒì EØP较ąÀ…‰ƒ=Ì[#…mƒìjh`9#éÿvÇEغS9#ƒøc~ºY9#‰UÜÜ5ð9#Ý]ðƒ=Ì[#„,ƒì EØPèYƒÄ…À…$ƒ=Ì[#…ƒìjhu9#隉öÇEغˆ9#ƒøc~ºŽ9#‰U܋ -À[#‹Ä[#‰Mð‰]ôÙîÙÉÚéßàöÄEtC‰È‰Úò€‰Eð‰Uôë1‰öÇEغˆ9#ƒøc~ºŽ9#‰U܍d$øÝ$jjè›Ý]ðƒÄƒ=Ì[#…jé|vÝØÇEغ•9#ƒøcŽ•º˜9#鋍vÝØÇEغ72#ƒøc~uº´7#ën‰öÝØÇEغ«9#ƒøc~Yº®9#ëR‰öÝØÇEغø1#ƒøc~=ºÊ7#ë6‰öÝØÇEغ²9#ƒøc~!ºµ9#ë‰öÝØÇEغà7#ƒøc~ºã7#‰UÜÇEðÇEôƒ=Ì[#„¯ƒì EØPèʃąÀ…•ƒ=Ì[#…‹ƒìjÿuÜjè«îÿÿƒÄ jhœ9#jèšîÿÿƒÄëfÝØÇEغú7#ƒøc~º8#‰U܃=Ì[#uÇEðàÇEôÿÿïGë¡À[#‹Ä[#‰Eð‰Uôƒ=Ì[#tƒì EØPè2ƒÄ…À…ýè¶íÿÿÇ"éívÝØÇEغú7#ƒøc~º8#‰U܃=Ì[#uÇEðàÇEôÿÿïGë¡À[#‹Ä[#‰Eð‰Uôƒ=Ì[#„‰ƒì EØP趃Ä…À…ƒ=Ì[#uiƒìjh 8#jè™íÿÿƒÄëSÇEغ~8#ƒøc~º‚8#‰UÜÝ]ðƒ=Ì[#ÿt ƒ=Ì[#uÇEðÇEôð?ë$‰öƒì EØPè@ƒÄ…ÀuèÈìÿÿÇ!ëÝØÝEðeø[^]ËT$â€‹D$%ÿÿÿ ЉD$ÝD$ÉöU‰å¸]ÉöÝD$ÙüÉö¼'U‰åWVSƒì ‹E ‰EðEƒEðƒeðøƒàø‰Eì‹Eð9EìsƒìjUhø9#h:#è˜ ƒÄ‹Eð9Eì„Ä‹E‹…Û„·‹C;C rƒìj`hø9#h -:#è` ƒÄöCtƒìjahø9#h@:#èC ƒÄöC tƒìjbhø9#h€:#è& ƒÄ‹Eì;CvL‹Eð;C sD‰Æ‹}ì;ss‹s;{ v‹{ 9÷wƒìjnhø9#h!:#èæ ƒÄƒì‰ø)ðPVÿu蚃ċ…Û…Iÿÿÿeô[^_]ÐU‰åWVSƒì ‹u ‹E‹}‰ÂUƒÀƒàøƒâø9†ŒÇF‰F‰V ‹E‰F‰~ÇF‹MëF‰ö9óuƒìjlh°:#h»:#èX ƒÄ‹F ;Cv‹F;C sƒìjmh°:#hà:#è1 ƒÄ‰Ù‹…Ût9{±9{u‹S +S‹F +F9Âwœ‰‰1eô[^_]ÃU‰åWVSƒì ‹]‹} …ÛuƒìjLh -;#h;#èÙ
-ƒÄ…ÿuƒìjMh -;#h;#è¾
-ƒÄƒÇƒçø‹3…ö„rvƒ~uƒ~t‹F;FsƒìjUh -;#h`;#è€
-ƒÄƒ~t‹F;F rƒìjUh -;#hÀ;#è[
-ƒÄ‹F +F9FvƒìjUh -;#h<#è9
-ƒÄ‹F÷ЅE…åF‰Eð‹^…Û„ԍv÷Ãtƒìj^h -;#h@<#èø ƒÄöCtƒìj_h -;#h€<#èÛ ƒÄƒ;t9wƒìj`h -;#hÀ<#è» ƒÄ;^ rƒìjah -;#h6;#èŸ ƒÄ9{rGv‹‰‹C)ø‰B‹Eð‰ë
-v‹‹Uð‰9~sƒìjwh -;#hM;#è\ ƒÄ)~‰Øë‰ö‰]ð‹…Û…/ÿÿÿ‹6…ö…‘þÿÿ¸eô[^_]ÃU‰åƒì jÿjÿuÿuÿuÿu ÿuèƒÄ ÉÐU‰åWVSƒì‹]‹EE ‰Eð…ÛuƒìjThé<#h;#èۃă} uƒìjUhé<#h;#较ċ;…ÿ„lƒuƒt‹G;Gsƒìj[hé<#h`;#舃ăt‹G;G rƒìj[hé<#hÀ;#ècƒÄ‹G +G9Gvƒìj[hé<#h<#èAƒÄ‹G÷ЅE…á‹Uð9WƒÕ‹M9O †ÉG‰Eì‹_…Û„¸v÷Ãtƒìjkhé<#h@<#èèƒÄöCtƒìjlhé<#h€<#è˃ă;t9wƒìjmhé<#hÀ<#諃Ä;_ rƒìjnhé<#h6;#菃ċU 9S‚$‰Þ;]s‹u¹;M}ºÓâ‹E1ð…ÂtÖA;M|è‰ð)ØE ;C‡è‹M 1;Eð‡æ‰ðƒàø‰Eè9Øsƒìh‘hé<#hô<#èƒÄ9]èvC‹Uè)ډUä÷Âtƒìh–hé<#h =#èãƒÄ‹‹M艋C+Eä‰A‹Eä‰C‰]ì‰ðƒà‹U Tƒâø‰U ‹Mè9Qv‰ÊU ‹‰‹A+E ‰B‹Eì‰ë
-‹Uè‹‹M쉋E 9Gsƒìh´hé<#hM;#èkƒÄ‹U )W‰ðë‰ö‰]ì‹…Û…Kþÿÿ‹?…ÿ…•ýÿÿ¸eô[^_]ÃU‰åƒì jÿjjj ÿu hÿuèýÿÿƒÄ ÉÐU‰åWVSƒì‹]ShR=#èeÌÿÿ‹3ƒÄ…ö„ƒìÿvÿvÿv‹F +FPÿv ÿvhà=#è5ÌÿÿƒÄ ƒ~uƒ~t‹F;Fsƒìjahd=#h`;#袃ă~t‹F;F rƒìjahd=#hÀ;#è}ƒÄ‹F +F9Fvƒìjahd=#h<#è[ƒÄ¿‹^…Û„¾ƒì ÿ3ÿs‰ØCPSh >#è—ËÿÿƒÄ ÷Ãtƒìjihd=#h@<#èƒÄöCtƒìjjhd=#h`>#èóƒÄƒ{wƒìjkhd=#hk=#èփă;t9wƒìjlhd=#hÀ<#趃Ä;^ rƒìjmhd=#h6;#蚃Ä{‹…Û…BÿÿÿƒìWh‡=#èäÊÿÿƒÄ9~tƒìjshd=#hš=#è`ƒÄ‹6…ö…cþÿÿƒì h²=#è®ÊÿÿƒÄeô[^_]ÍvU‰åWVSƒì ‹u‹] ‰ßƒçø…öuƒìjNhû9#h;#è ƒÄ…ÛuƒìjOhû9#h’>#èñƒÄƒ}uƒìjPhû9#h;#èԃĉ؃à‹UTƒâø‰U‹ëv‹…ÛuƒìjXhû9#h>#螃ă{uƒ{t‹C;CsƒìjYhû9#h`;#èsƒÄƒ{t‹C;C rƒìjYhû9#hÀ;#èNƒÄ‹C +C9CvƒìjYhû9#h<#è,ƒÄ;{‚hÿÿÿ;{ ƒ_ÿÿÿ‹EC‹C +C9Cvƒìjbhû9#h<#èòƒÄÇEð‹sëv‰uð‹6…öt9þróƒ}ðtm‹Eð@9ørc9øtƒìjnhû9#hÀ>#諃ąöt8‹U:9ðr.9ðtƒìjuhû9#h?#肃ċEF‹UðB‹‰ëE‹E‹UðBë9ƒ}ðt
-‹Eð‰8ëv‰{…öt‹U:9ðr‰ÐF‰G‹‰ë ‹E‰G‰7eô[^_]ÃU‰åƒì hÿu ÿuèÒýÿÿƒÄÉÐU‰å‹EÇ]ÉöU‰åWVSƒì ÇEèÇEìÇEð‹E‹0…ö„Zƒ~uƒ~t‹F;Fsƒìj]h&?#h`;#蠃ă~t‹F;F rƒìj]h&?#hÀ;#è{ƒÄ‹F +F9Fvƒìj]h&?#h<#èYƒÄÿEð¿‹^…Û„¨v÷Ãtƒìjdh&?#h@<#è$ƒÄöCtƒìjeh&?#h`>#èƒÄƒ{wƒìjfh&?#hk=#èêƒÄƒ;t9wƒìjgh&?#hÀ<#èʃÄ;^ rƒìjhh&?#h6;#讃ÄÿEì{‹…Û…[ÿÿÿ9~tƒìjnh&?#hš=#肃Ä‹FEè‹6…ö…§þÿÿƒì ÿuìÿuðÿuèÿuh@?#è¾ÆÿÿƒÄ eô[^_]ÍvU‰åVS‹u‹] EƒìPÿuh@Ö#è…ÈÿÿƒÄh@Ö#ÿ5€Þ#jSVhÀ?#è5ƒÄ eø[^]ÍvU‰åƒìÿ5lÞ#jÿuÿu ÿuh€?#èƒÄ ÉÉöU‰åƒì E Pÿuh@Ú#èÈÿÿƒÄ jjhø!#èì%ÿÿƒÄh@Ú#h#@#èŠÅÿÿÇ$MèFÿÿƒÄÉÐU‰åƒìh@Ú#h@#ècÅÿÿƒÄÉÉöU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)лDß#‰]ð‹´ÃЃùÿtCI‰ÐÁà)Ð;´ÃÐr0»Hß#‰Ï‰ÐÁà)ЋLÃPƒùÿtI‰ÐÁà)ЋUð;´ÂÐsՃÿÿt‰ÐÁà)ЋU‰Řß#ë
-‰ö‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰Ŝß#ë
-‹E‹U ‰B‹E@‰ÐÁà)ЍÅP‰ˆHß#‰¸Lß#ƒÄ[^_]ÍvU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)ÐÁà‹â#‰U苀â#‰Eìƒùÿtw ‰ÆȉÂÁâ)‹Eè‰Ã;Õâ#|[‰Eäv1‰ÐÁà)ЍÅ;šâ#u ‹Eì;‚â#|1‰Ï‰ÐÁà)Ћ Řß#ƒùÿt4 1‰ÐÁà)Ћ]ä;Åâ#}«ƒÿÿt‰ÐÁà)ЋU‰Řß#ë‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰Ŝß#ë
-‹E‹U ‰B‹E@‰ÐÁà)ЍÅP‰ˆHß#‰¸Lß#ƒÄ[^_]ÍvU‰å‹EÇÿÿÿÿÇ@ÿÿÿÿ]ÍvU‰åWVS‹uv‰ÐÁà)ЍÅP‹˜Lß#¿Hß#‹ 8ƒûÿt[‰ÐÁà)ЉLÇPëv‹E ‰ƒùÿt&I‰ÁÁá)Á»Lß#v‰ÐÁà)ЋDÃP‰DËPë v‹E ‰X[^_]ÐU‰åS‹M‹‰Øƒûÿt=‹@‰ÂÁâ)‹՘ß#‰ƒøÿt@‰ÐÁà)ÐÇŜß#ÿÿÿÿë
-vÇAÿÿÿÿ‰Ø‹$ÉÉöU‰åS‹M‹] ƒ;ÿt)I‰ÐÁà)Ћ‰Řß#‹@‰ÂÁâ)‰ ՜ß#됉KI‰ÐÁà)ÐÇŘß#ÿÿÿÿI‰ÐÁà)ÐÇŜß#ÿÿÿÿ‰ ‹$ÉÃU‰åS‹M‹] ƒ{ÿt,I‰ÐÁà)ЋS‰Ŝß#‹C@‰ÂÁâ)‰ ՘ß#ë‰ö‰ I‰ÐÁà)ÐÇŜß#ÿÿÿÿI‰ÐÁà)ÐÇŘß#ÿÿÿÿ‰K‹$ÉÃU‰å‹E‹]ÉöU‰å‹E‹@]ÐU‰å·Eƒøt ƒø…Àtë-ƒøtƒøtë ¸A@#됸F@#됸J@#됸P@#됸1#]ÐU‰åWVSƒìœúX‰Â‰Uä÷Et$ƒìEèPjèL—ÿÿƒÄ ÿuìÿuèh`@#èeÁÿÿƒÄ÷EtN¾;5pÞ#sA¿ Þ#vƒì µ‹;¶BP·BPRVh @#è!ÁÿÿƒÄ‹;VÿP ƒÄF;5pÞ#rÇ÷Etƒì h{@#èõÀÿÿèX&ÿÿƒÄ‹Uä‰ÐPeô[^_]Éö¨ê"pí"pí"pí"pí"pí"Üì"pí"èì"ôì"pí"í"í"í"í"í"í"í"í"í"í"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"pí"´ê"Èê"4ì"ôë"tì"Ðì"Èê"pí"pí"Äì"pí"Ðì"pí"¬ë"pí"pí"Ìë"pí"ë"pí"pí"`ë"Tî"4ð"4ð"4ð"4ð"4ð"¬ï"4ð"¸ï"Àï"4ð"Ðï"Ðï"Ðï"Ðï"Ðï"Ðï"Ðï"Ðï"Ðï"Ðï"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"4ð"`î"tî"4ð"4ð"4ð" ï"tî"4ð"4ð"”ï"4ð" ï"4ð"4ð"4ð"4ð"lï"4ð"Äî"4ð"4ð"ï"@ó"Ló"Ló"Ló"Ló"Ló"ñ"ñ"ñ"ñ"ñ"ñ"ñ"ñ"ñ"ñ"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"Ló"@ñ"Äñ"Àò"Àò"Àò"4ó"Äñ"Ló"Ló"(ó"Ló"4ó"Ló"Ló"Ló"Ló"Xñ"Ló"4ò"Ló"Ló"Pò"$@$@¤##|#ì#<#Œ#Ü# #˜#$#°#<#È#T#¤#, #¸ #D
-#Ð
-#\ #Ð #ì # -#¨ -#,#¼#@#¸#$##ü#`#¬#ð##0#L#h#„##|##d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#¤##|#ì#<#Œ#Ü# #˜#$#°#<#È#T#¤#, #¸ #D
-#Ð
-#\ #Ð #ì # -#¨ -#,#¼#@#¸#$##ü#`#¬#ð##0#L#h#„##|##ONCE: (pid=%d)
-J (pid=%d) exits
-main: creating prova_key
-main: provakey =%d
-main: creating J1
-Error creating J1
-main: J1 has PID %d
-main: creating J2
-Error creating J2
-main: J2 has PID %d
-main: waiting 0.4 sec
-main: kill J1 and J2
-main: ending...
-J (pid=%d) destructor called with value %d
-J (pid=%d) printtest value=%d
-J (pid=%d) starts and call setspecific
-Error during Keyboard Initialization!!!Ctrl-C pressed!
-KeybPortKeyTasktask_create
-scheduletime %lus %luns * caplasttime %lus %luns * exec=%d TIME = %lu
-The system tick must be less than 55 mSec!Abort detected
-Code : %u
-Too many scheduling levels!!!
-Too many resource levels!!!
-debug info noticewarn err crit alert emerg <%i>[%s] %sPosix task
-Signal number %d...
-with value : %d
-POSIX_ReadyPOSIX_DelayPOSIX_UnknownSlice: %d
-MainPOSIX_register_level
- alloco descrittore %d %d
- lev=%d
-POSIX schedulerPid: %d Name: %20s Prio: %3ld Status: %s
-
-Panic!!! can't create main task...
-dummy PID: %d
-Dummy1Dummy2Dummy3Dummy4Dummy5Dummy6Dummy7Dummy8Dummy9Dummy0DummyaDummybDummycDummydDummyeDummyfDummygDummyhDummyDummy (RR) Posto dummy_create
-
-Panic!!! can't create dummy task...
-Entro in dummy_register_level
-Port des :
-Free port des : %d
-%d %s vt: %d pn: %d
-%d pd: %d vt: %d pn: %d Resources owned by the tasks:
-%-4dPI_register_module
-PI module
-PC priority of the tasks:
-%-4ldPC_register_module
-PC moduleTR %x
-SS:SP %x:%lx
-Stack0 : %x:%lx
-Stack1 : %x:%lx
-Stack2 : %x:%lx
-CS : %x DS : %x
-Descriptor [%x] InfoNo more Descriptors...
-%x (Hex)Base : %lx Lim : %lx Acc : %x Gran %x
-2Coprocessor error#Page fault*General protection fault*Stack exception*Segment not present*Unvalid TSS#INTEL reserved*Double defect1FPU context switch*Unvalid opcode#BOUND limit exceeded#Overflow detected on INTO#Breakpoint trap#NMI detected#Debug fault#Division by 0Exception %d occurred
-ABORT %d !!!LL Time Panic!!!
-time.cError! File:%s Line:%d %sOne-shot timer selected...
-Periodic timer selected...
-Unhandled Exc or Int occured!!!
-32/LINUX CrossCompiled/ELFHalt called1234567890-+12345678901234567890xabcdefABCDEF1234567890.e+-0123456789ABCDEF$@ -Æ@,ú1°<NaN+Inf-Infacosacosfacos: DOMAIN error
-asinasinfasin: DOMAIN error
-atan2atan2fatan2: DOMAIN error
-hypothypotfexpexpfy0fy0: DOMAIN error
-y1fy1: DOMAIN error
-ynynfyn: DOMAIN error
-lgammalgammaflgamma: SING error
-loglogflog: SING error
-log: DOMAIN error
-log10log10flog10: SING error
-log10: DOMAIN error
-powpowfpow(0,0): DOMAIN error
-pow(0,neg): DOMAIN error
-sinhsinhfsqrtsqrtfsqrt: DOMAIN error
-fmodfmodffmod: DOMAIN error
-remainderremainderfremainder: DOMAIN error
-acoshacoshfacosh: DOMAIN error
-atanhatanhfatanh: DOMAIN error
-atanh: SING error
-scalbscalbfj0j0f: TLOSS error
-j1j1fjnjnfneg**non-integral: DOMAIN error
-à?addfree.cmax >= minreg->min < reg->maxnew_max > new_min(reg->min & (sizeof(struct lmm_node) - 1)) == 0(reg->max & (sizeof(struct lmm_node) - 1)) == 0addregio.cr != reg(reg->max <= r->min) || (reg->min >= r->max)alloc.clmm != 0size > 0reg->free >= 0(DWORD)node < reg->maxreg->free >= size(reg->nodes == 0 && reg->free == 0) || (DWORD)reg->nodes >= reg->minreg->nodes == 0 || (DWORD)reg->nodes < reg->maxreg->free <= reg->max - reg->min((DWORD)node & (sizeof(struct lmm_node) - 1)) == 0((DWORD)node->size & (sizeof(struct lmm_node) - 1)) == 0(node->next == 0) || (node->next > node)alloc_ge.canode >= node(split_size & (sizeof(struct lmm_node) - 1)) == 0lmm_dump(lmm=%p)
-dump.cnode->size >= sizeof(*node) free_check=%08lx
-reg->free == free_checklmm_dump done
- region %08lx-%08lx size=%08lx flags=%08lx pri=%d free=%08lx
- node %p-%08lx size=%08lx next=%p
-(node->size & (sizeof(struct lmm_node) - 1)) == 0block != 0reg != 0(DWORD)prevnode + prevnode->size == (DWORD)node(DWORD)node + size == (DWORD)nextnodestats.cLMM=%p: %u bytes in %u regions, %d nodes
-assertion %s failed in %s at line %i (task:%i_%i)
-MAGIC assertion failed in %s at line %i (task:%i_%i): %s
-KERNEL PANIC (sys_panic_stub): %s
-KERNEL PANIC (sys_panic): %s
-FreeExeSleepWaiting on joinTime (EXACT) : %lus %luns
-< Memory Dump >
-< Level %d : %s Code: %d Version: %d >
-8Œÿÿ’ÏÿÿšÏÿÈP#ÿà[#ÿÿÿÿÿÿÿÿÿÿÿÿ1234567890!@#$%^&*()-_=+[{]};:'"`~/?,<.>\|   - -1234567890.+*/-+*-aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 1234567890!"œ$%&/()='?^Š‚+*•‡…ø\|<_,:.;—õ   - -1234567890.+*/-+*-aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ[]@#ìX#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­0#¦0#Ÿ0#˜0#‘0#Š0#ƒ0#|0#èz"ðz"ðz"Ó5#Æ5#¸5#§5#Œ5#v5#f5#R5#C5#35#&5#5#5#æ4#Ú4#35#Ç4#þþAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAš7#ðÿÿÿÿGCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)01.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.text.rodata.data.sbss.bss.comment.note"€'! '# '¨ )ÈP#HA /Ð[#`L5à[#`L8ã :`LLC¬]hdI
\ No newline at end of file
/start/pse51/ptest2
Property changes:
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: start/pse51/ptest1.c
===================================================================
--- start/pse51/ptest1.c (revision 1087)
+++ start/pse51/ptest1.c (nonexistent)
@@ -1,221 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: ptest1.c,v 1.1.1.1 2002-09-02 09:37:47 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:47 $
- ------------
-
- Posix test 1:
-
- the main task create 4 tasks, J1, J2, J3, J4
- at t = 0.2 sec. it raise a signal to J1
- at t = 0.4 sec. it raise a signal to J2
- at t = 0.8 sec. it kill J4
-
- J1: it simply calls sigwait
-
- J2: it simply calls sigwaitinfo
-
- J3: it simply calls sigtimedwait with a timeout of 0.5 sec.
-
- J4: it simply calls sigtimedwait with a -long- timeout
- (J4 will be killed by main)
-
- non standard function used:
- cprintf
- sys_gettime
- keyboard stuffs
- sys_end
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <sys/types.h>
-#include <pthread.h>
-#include <signal.h>
-
-#include <kernel/kern.h>
-#include <drivers/keyb.h>
-
-void *J1(void *arg)
-{
- int sig, err;
- sigset_t mask;
-
- cprintf("J1 starts and call sigwait(31)\n");
-
- sigemptyset(&mask);
- sigaddset(&mask,31);
- err = sigwait(&mask,&sig);
-
- cprintf("J1 exit from sigwait(), err=%d, sig=%d\n", err, sig);
-
- return 0;
-}
-
-void *J2(void *arg)
-{
- int err;
- siginfo_t info;
- sigset_t mask;
-
- cprintf("J2 starts and call sigwaitinfo(30)\n");
-
- sigemptyset(&mask);
- sigaddset(&mask,30);
- err = sigwaitinfo(&mask,&info);
-
- cprintf("J2 exit from sigwaitinfo(), err=%d, signo=%d code=%d value=%d\n",
- err, info.si_signo, info.si_code, info.si_value.sival_int);
-
- return 0;
-}
-
-void *J3(void *arg)
-{
- int err;
- siginfo_t info;
- sigset_t mask;
- struct timespec t;
-
- cprintf("J3 starts and call sigtimedwait(29)\n");
-
- sigemptyset(&mask);
- sigaddset(&mask,29);
- t.tv_sec = 0;
- t.tv_nsec = 300000000;
- err = sigtimedwait(&mask,&info,&t);
-
- cprintf("J3 exit from sigtimedwait(), err=%d, signo=%d code=%d value=%d\n",
- err, info.si_signo, info.si_code, info.si_value.sival_int);
-
- return 0;
-}
-
-void uscitaJ4(void *arg)
-{
- cprintf("J4: AAAARRRRGGGHHH!!! killed by someone...\n");
-}
-
-void *J4(void *arg)
-{
- int err;
- siginfo_t info;
- sigset_t mask;
- struct timespec t;
-
- cprintf("J4 starts and call sigtimedwait(28)\n");
-
- sigemptyset(&mask);
- sigaddset(&mask,28);
- t.tv_sec = 10;
- t.tv_nsec = 0;
-
- pthread_cleanup_push(uscitaJ4,NULL);
- err = sigtimedwait(&mask,&info,&t);
- pthread_cleanup_pop(0);
-
- cprintf("J4 exit from sigtimedwait(), err=%d, signo=%d code=%d value=%d\n",
- err, info.si_signo, info.si_code, info.si_value.sival_int);
-
- return 0;
-}
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-
-int main(int argc, char **argv)
-{
- int err;
- sigset_t mask;
- pthread_t j1, j2, j3, j4;
- union sigval value;
-
- KEY_EVT emerg;
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
-
- /* main blocks signals for all the tasks */
- sigfillset(&mask);
- pthread_sigmask(SIG_BLOCK, &mask, NULL);
-
- cprintf("main: creating J1\n");
- err = pthread_create(&j1, NULL, J1, NULL);
- if (err) cprintf("Error creating J1\n");
-
- cprintf("main: creating J2\n");
- err = pthread_create(&j2, NULL, J2, NULL);
- if (err) cprintf("Error creating J2\n");
-
- cprintf("main: creating J3\n");
- err = pthread_create(&j3, NULL, J3, NULL);
- if (err) cprintf("Error creating J3\n");
-
- cprintf("main: creating J4\n");
- err = pthread_create(&j4, NULL, J4, NULL);
- if (err) cprintf("Error creating J4\n");
-
- cprintf("main: waiting 0.2 sec\n");
- while (sys_gettime(NULL) < 200000);
-
- cprintf("main: kill(31), then wait until t=0.4 sec \n");
- kill(0, 31);
-
- while (sys_gettime(NULL) < 400000);
- cprintf("main: sigqueue(30), then wait until t=0.8 sec \n");
- value.sival_int = 300;
- sigqueue(0, 30, value);
-
- while (sys_gettime(NULL) < 800000);
- cprintf("main: kill(J4)\n");
- pthread_cancel(j4);
-
- cprintf("main: ending...\n");
-
- return 0;
-}
Index: start/pse51/ptest3
===================================================================
--- start/pse51/ptest3 (revision 1087)
+++ start/pse51/ptest3 (nonexistent)
@@ -1,423 +0,0 @@
-ELF"4Àg4 ( €""(D(D ¨D(T#(T# Pî 덶°­üORäe‹Ká€uU¿€ Ç–eÆG1GeÆGGeÆG2GeÆG¸@é"fe£HT#Áèfe£NT#(\#¿€ Ç’eÆG0GeÆGf¸0ŽØŽÀŽÐŽàŽè¼@‡#ǽ%@g#ǽ%@‡#£4\#‰8\#(\#êµ"8.\#üèNÕê U‰å‹Eê ‰öU‰åSìüƅÿÿÿxƅÿÿÿ-ƅÿÿÿht"ƒì‹…ÿÿÿf‰$ÆD$-èÅÇE´"ÇE°]¨E¬‰$è9nƒÄ jSjè$YƒÄ jSjèYÇEˆÇEŒÇE+DžhÿÿÿDžlÿÿÿDžpÿÿÿšDžHÿÿÿDžPÿÿÿ DžTÿÿÿ„"…(ÿÿÿ‰…XÿÿÿƒÄ Dž(ÿÿÿDž,ÿÿÿDž8ÿÿÿDž<ÿÿÿDž@ÿÿÿDž0ÿÿÿDž4ÿÿÿ
-ÇEèÇEìeÍÇEðÇEôÇEØÇEÜÂë ÇEàÇEäÇEÈÇEÌ£áÇEÐÇEÔÇEÄÇEÀÇE¼ÇE¸…ÿÿÿPEˆPjèWqƒÄƒøÿuƒì h`1#èVçƒÄƒì…ÿÿÿP…hÿÿÿPjè'qƒÄƒøÿuƒì h€1#è&çƒÄƒì… ÿÿÿP…HÿÿÿPjè÷pƒÄƒøÿuƒì h 1#èöæƒÄjEèPjÿµÿÿÿè€uƒÄƒøÿuƒì hÜ/#èËæƒÄjEØPjÿµÿÿÿèUuƒÄƒøÿuƒì hù/#è æƒÄjEÈPjÿµ ÿÿÿè*uƒÄƒøÿuƒì h0#èuæƒÄƒì h30#èeæƒÄ‰öƒì jè2=ƒÄ=³vìƒì hM0#è?æEØPE¸PjÿµÿÿÿèÊtƒÄ ƒøÿuƒì hÀ1#èæƒÄƒì‹MäºÓMb‰È÷êÁú‰ÈÁø)ÂRÿuàhà1#èëåƒÄƒì jèº<ƒÄ=–˜vìƒì hf0#èÇåEèPE¸PjÿµÿÿÿèRtƒÄ ƒøÿuƒì h 2#èåƒÄƒì‹MôºÓMb‰È÷êÁú‰ÈÁø)ÂRÿuðh@2#èsåƒÄƒì jèB<ƒÄ=ÿ·vìƒì h0#èOåÇEèÇEìÇEð -ÇEôjEèPjÿµÿÿÿèÀsƒÄ ƒøÿuƒì h‘0#è åƒÄƒì jèÚ;ƒÄ=ŸÕvìƒì h®0#èç七Ä‹]üÉÉöU‰åSƒì‹E‹] ƒøt
-ƒøt -ëvÿ<\#ëÿ@\#ƒì jè€;ƒÄPÿ5@\#ÿ5<\#ÿs ÿs¸Ð/#ƒ{t¸Ö/#Pÿ3hÀ0#èqäƒÄ ‹]üÉÐU‰åƒìèé:ÉÍvU‰åSƒì‹]jè#;ƒÄ PSh 1#è8äƒÄ‹]üÉÃU‰åƒìj ÿujh'èMè‰è‡¬è¶²è1™ƒÄ jjjèÿLèîv¸èƒÄÉÃU‰åWVSƒìX‹]}¨¾D\#ü¹ó¥E¸‰E¨fÇE¸ÇE¼ÇEÀfÇEÄÇEÐÇEÔÇEÜÇEà‰]ÈÇEØÇEÌjè8L‰EÐÇEÜÇEàƒMÌ
-è֜E¨‰$ècƒÄ…Àyƒì h€2#è»ãƒÄƒì SèoE¸ƒÄeô[^_]ÍvU‰åƒìŠU€=T]#„¶€ú*t€úªt
-€ú6t€ú¶uÆT]#¸é›„Òy,ÆT]#€ú¸uÆ`]#ÆV]#ëՀúuÐÆ`]#ëljöÆT]#€ú8u€ -`]#ÆV]#멀úu € -`]#뛉ö€ú5uf¾õ‡#·Àé)v€ú…•f¾܇#·Àé -v€úàuÆT]#éTÿÿÿv€ú*t€ú6u2ÆU]#€ú*u€ -`]#é/ÿÿÿ‰ö€ú6…$ÿÿÿ€ -`]# éÿÿÿv€úªt€ú¶u"ÆU]#€úªt €ú¶…öþÿÿÆ`]#éêþÿÿ€úFu€=Y]#•Y]#ë.v€ú:u€=W]#•W]#ëv€úEu;€=X]#•X]#ƒì¶Y]#P¶W]#P¶X]#Pèõ¸ƒÄé€úu€ -`]#éhþÿÿv€ú8u€ -`]#éTþÿÿv€út€ú¸uÆ`]#é;þÿÿ‰ö¸„҈рúRt2€úOt-€úSt(€úPt#€úQt€úKt€úLt€úMt€úGt
-€úHt€úIu€=X]#uT€=U]#uK·Â -ÿë~€=W]#t/Bð< vBâ<vBÔ<w€=U]#t¶Âf¾€À‡#·ÀëG€=U]#t¶Âf¾€`ˆ#·Àë-v€=V]#t¶Âf¾€‰#·Àëv¶Âf¾€À‡#·ÀÉÃU‰åWVSƒì,}؃ìjE×PèòƒÄ…À„¡ƒì ¶E×Pèöüÿÿ‰ÂƒÄf…Ò„†÷Âÿt  `]#ƒÈ@ë‰ö `]#ˆE؈UيE׈EÚ±»;¸‡#}8¾@‡#v݊D2:EÚuŠ2:EØuƒì Wÿ’D‡#±ƒÄC;¸‡#|ЄÉuƒìjW¿‚‰#Pèý¡ƒÄè-é<ÿÿÿU‰å‹E£P]#Šˆ‡#ŠPˆÇ#ŠPˆć#ŠPˆŇ#ŠPˆƇ#ŠPˆLJ#ŠPˆȇ#ŠPˆɇ#ŠPˆʇ#ŠP ˆˇ#ŠP
-ˆbˆ#ŠP ˆcˆ#ŠP ˆdˆ#ŠP -ˆeˆ#ŠPˆfˆ#ŠPˆgˆ#ŠPˆhˆ#ŠPˆiˆ#ŠPˆjˆ#ŠPˆkˆ#ŠPˆ̇#ŠPˆlˆ#ŠPˆ͇#ŠPˆmˆ#ŠPˆڇ#ŠPˆzˆ#ŠPˆۇ#ŠPˆ{ˆ#ŠPˆç‡#ŠPˆ‡ˆ#ŠPˆè‡#ŠPˆˆˆ#ŠP ˆé‡#ŠP!ˆ‰ˆ#ŠP"ˆõ‡#ŠP#ˆ•ˆ#ŠP$ˆó‡#ŠP%ˆ“ˆ#ŠP&ˆô‡#ŠP'ˆ”ˆ#ŠP(ˆë‡#ŠP)ˆ‹ˆ#ŠP*ˆù‡#ŠP+ˆ™ˆ#ŠP,ˆ·#ŠP-ˆnˆ#ŠP.ˆχ#ŠÖˆoˆ#ŠP0ˆÁ‡#ŠP1ˆaˆ#ŠP2ˆ܇#ŠP3ˆ|ˆ#ŠP4ˆĈ#ŠP5ˆ¯ˆ#ŠP6ˆ°ˆ#ŠP7ˆ±ˆ#ŠP8ˆ«ˆ#ŠP9ˆ¬ˆ#ŠP:ˆ­ˆ#ŠP;ˆ§ˆ#ŠP<ˆ¨ˆ#ŠP=ˆ©ˆ#ŠP>ˆ²ˆ#ŠP?ˆ³ˆ#ŠP@ˆˆ#ŠPAˆ÷‡#ŠPBˆõ‡#ŠPCˆ
-ˆ#ŠPDˆ®ˆ#ŠPEˆ—ˆ#ŠPFˆªˆ#ŠPGˆއ#ŠPHˆ~ˆ#ŠPIˆð‡#ŠPJˆˆ#ŠPKˆî‡#ŠPLˆŽˆ#ŠPMˆà‡#ŠPNˆ€ˆ#ŠPOˆ҇#ŠPPˆrˆ#ŠPQˆá‡#ŠPRˆˆ#ŠPSˆâ‡#ŠPTˆ‚ˆ#ŠPUˆã‡#ŠPVˆƒˆ#ŠPWˆׇ#ŠPXˆwˆ#ŠPYˆä‡#ŠPZˆ„ˆ#ŠP[ˆå‡#ŠPRˆ…ˆ#ŠP]ˆæ‡#ŠP^ˆ†ˆ#ŠP_ˆò‡#ŠP`ˆ’ˆ#ŠPaˆñ‡#ŠPbˆ‘ˆ#ŠPcˆ؇#ŠPdˆxˆ#ŠPeˆه#ŠPfˆyˆ#ŠPgˆЇ#ŠPhˆpˆ#ŠPiˆӇ#ŠPjˆsˆ#ŠPkˆ߇#ŠPlˆˆ#ŠPmˆԇ#ŠPnˆtˆ#ŠPoˆև#ŠPpˆvˆ#ŠPqˆï‡#ŠPrˆˆ#ŠPsˆч#ŠPtˆqˆ#ŠPuˆí‡#ŠPvˆˆ#ŠPwˆՇ#ŠPxˆuˆ#ŠPyˆì‡#ŠPzˆŒˆ#ŠP{ˆ‰#ŠP|ˆ‰#ŠP}ˆ'‰#Š@~¢(‰#]ÍvU‰åWVSƒì\‹]}ؾh]#ü¹󥿸ƒ=\]#…Qº¾À‡#¹`ˆ#‰ö·ÂÆ0ÆBfúví…Ûu]؃{ÿuÇCP\#ƒì ÿsèûÿÿÇ$jjjh¹2#èϔf£‚‰#ƒÄ fƒøÿu ¸þÿÿÿéÞ‰öjjjh¹2#è0˜f£„‰#ƒÄfƒøÿuƒì ¿‚‰#P蕛¸ýÿÿÿ頍vǸ‡#ƒ{ÿuÇCŒ"ƒ{tIÆE™cÆEš.ÆE˜ƒìÿsƒì‹E˜f‰$ÆD$.èÅÆE˜ƒÄÿsƒì‹E˜f‰$ŠEšˆD$襃ă;ÿuQfÇE¨ÇE¬ÇE°fÇE´ÇE¸ÇEÐÇEÈÐÇEÄ ÇEÀ¨aÇE¼
-ÇE̍E¨ë‹ƒì jjPh” "hÂ2#èÿ‰ÃƒÄ ‰ˆ‰#ƒøÿu'ƒì ¿‚‰#P蓚¿„‰#‰$脚‰Ø钐ƒ=d]#uWƒì ÿ5ˆ‰#艉ǃąÿt4ƒì ¿‚‰#PèLš¿„‰#‰$è=šƒÄÿ5ˆ‰#èg5¸üÿÿÿë=Çd]#ëèƒì¶Y]#P¶W]#P¶X]#PèûÇ\]#‰øƒÄeô[^_]ÃU‰åƒì¶EPEèP¿„‰#Pè0œƒÄ„Àt÷Eè@u¶Eéë‰ö¸ÉÐU‰åƒì ¶E Pÿu¿„‰#Pèõ›·ÀƒÄÉÐU‰åSƒ=¸‡#0‹ -¸‡#Í»@‡#‹Ef‰ŠE
-ˆD‹E ‰‚D‡#A‰ -¸‡#‹$ÉÉöU‰åƒìèÉÍvU‰åƒìè±ÉÍvU‰åƒì¸ÿÿÿÿƒ=\]#t9蓃ì ÿ5ˆ‰#è-4¿‚‰#‰$è昿„‰#‰$èט¸ƒÄÉÐU‰åƒìjèoÔÇ$è+ÔÇ$¨2#èóÓè²-ƒÄÉÐU‰åWVSƒìŠEˆEó¿1¾d»`‰ö¹v‰òì©t"‰ÈA=þÿÿvì¸ÿÿÿÿ…Àu‰ÚŠEóî¸ë‰ö¸ë搸ÿÿÿÿÇEì¹d…Àt¸ÿÿÿÿët¸ë‰Êì©uî‹EìÿEì=þÿÿvé¸ÿÿÿÿ…Àu‰Úì¶Àë¸ÿÿÿÿƒøÿu
-¸þÿÿÿë3v=úu ¸ë"‰ö=þt ¸ýÿÿÿë‰ö‰øO…À9ÿÿÿ¸üÿÿÿƒÄ[^_]ÃU‰åVSƒìŠEˆE÷³Ô¾¹d‰ö‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë -¸ë搸ÿÿÿÿ…Àt¸ÿÿÿÿëL¸ë&»¹d‰ö‰Êì©tâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àuº`ŠE÷î¸ëv¸ÿÿÿÿ…Àt¸ÿÿÿÿëj¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àuºdì© tº`ì¶Ðëvºÿÿÿÿ‰Ð…Òx¸úú”ÀDþƒÄ[^]ÃU‰åWVSƒì »¾`‰ØK…À~^ƒì hÿè¼ýÿÿ‰ÂƒÄ…Òu{¿¹d‰Êì©u‰øG=þÿÿvì¸ÿÿÿÿ…Àu‰òì¶Ðëv¸ëꐺÿÿÿÿúªu›¸üÿÿÿúª…ƃì hõèMýÿÿ‰ÂƒÄ…Òt(¸ûÿÿÿ馉ö¸ýÿÿÿ隉ö¸ë.¸ëZ³`¾¹d‰Êì©tډðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî³e¾¹dv‰Êì©t®‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØîƒì hôèªüÿÿ‰ÂƒÄ¸…Ò•ÀHƒàƒèeô[^_]ÃU‰åWVSƒì ¾»d¹`‰Úì©t -‰Êì‰ðF=þÿvé³­¾¹d‰Êì©„‚‰ðF=þÿÿvè¸ÿÿÿÿ…ÀuºdˆØî¾»d¹`‰Úì©t -‰Êì‰ðF=þÿv鳪¾¹d‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ë搸놐¸ÿÿÿÿ…Àt¸÷ÿÿÿéݐ¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àu º`ì¶Àë¸ÿÿÿÿƒøUt¸ÿÿÿÿ錸ë&³«¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸öÿÿÿé9¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àu º`ì¶Àë¸ÿÿÿÿ…Àt¸þÿÿÿé鐸ë&³®¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…À…<èzüÿÿ…À…Žƒì hóèIúÿÿƒÄ…Àt
-¸ùÿÿÿépƒì jè.úÿÿƒÄ…Àt¸øÿÿÿéU¸ë.Æt]#³©¾¹d‰Êì©tډðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸ôÿÿÿéù¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àu º`ì¶Àë¸ÿÿÿÿ…Àt¸óÿÿÿ驐¸ë&³¨¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸õÿÿÿéU¸ë&³Ó¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸ðÿÿÿ鐸ë&³Z¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî¸ë¸ÿÿÿÿ…Àt¸ïÿÿÿ魐Æt]#ëBv¸ë^¹þÿ¾d»`‰òì¶ø÷Çt‰Úì¶À÷Ç tƒøZt»IƒùÿuÙ³§¾¹d‰Êì©tª‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àté»þÿÿ‰ö¸ë:€=t]#„þÆt]#³¨¾¹d‰Êì©tΉðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸îÿÿÿ鱐¸ëvƒì hóèWøÿÿ‰ÃÇ$dèIøÿÿÃÇ$èè;øÿÿÃÇ$è-øÿÿÃÇ$çèøÿÿþ§ƒÄ¿¹dv‰Êì©t’‰øG=þÿÿvì¸ÿÿÿÿ…Àuºd‰ðî¸ë¸ÿÿÿÿ…Àt¸íÿÿÿë…ÛuÆt]#¸eô[^_]ÃU‰åVS¡ˆ]#…Àt¡ˆ]#H£ˆ]#¸é²¸ë6ƒ=€]#uKŠ„]#¾¹dv‰Êì©t҉ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØîÿ€]#뤍v¸ë:ƒ=€]#uGÇ€]#³ô¾¹d‰Êì©tΉðF=þÿÿvì¸ÿÿÿÿ…À…Xÿÿÿº`ˆØîéKÿÿÿ‰ö¸[^]ÍvU‰åWVSƒì ¡Œ]#@£Œ]#¾õ³Ô¿¹dv‰Êì©t"‰øG=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ë搸ë.¸ÿÿÿÿ…Àu0»¹d‰Êì©tډØC=þÿÿvì¸ÿÿÿÿ…Àuº`‰ðîœúX‰Çƒì hõè5õÿÿ‰ÃƒÄ…Ût¸ûÿÿÿéù‰ö¸ë1¾§ÇEð¹dv‰Êì©tڋEðÿEð=þÿÿvé¸ÿÿÿÿ…Àu ºd‰ðî¸ë¸ë=¸ëq¸ÿÿÿÿþ`ÇEð¹d‰Êì©t΋EðÿEð=þÿÿvé¸ÿÿÿÿ…Àuºd‰ðî¾eÇEð¹dv‰Êì©tš‹EðÿEð=þÿÿvé¸ÿÿÿÿ…Àuº`‰ðîƒì hôè;ôÿÿÃĉøPÆu]#‰Øeô[^_]ÐU‰åWVSƒì ¸ÿÿÿÿ€=t]#„ºœúX‰Æƒì hõèóóÿÿƒÄ…Àt(¸ûÿÿÿé—‰ö¸ë:¸ëf¸é“‰ö³`¿¹d‰Êì©tΉøG=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî³G¿¹dv‰Êì©t¢‰øG=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØ¿¹dv‰Êì©„rÿÿÿ‰øG=þÿÿvè¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt ¸îÿÿÿ鐃ì hôèÿòÿÿƒÄ…Àt¸Ûÿÿÿ飉ö¸ë:‰ðP¡Œ]#@£Œ]#¾ô³Ô¿¹d‰Êì©tΉøG=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë -¸ë.¸ÿÿÿÿ…Àu0»¹d‰Êì©tډØC=þÿÿvì¸ÿÿÿÿ…Àuº`‰ðîÆu]#¸eô[^_]ÍvU‰åƒìǤŠ#Ç Š#ƒ=|]#t!úè‹õÿÿ£x]#Ç|]#û…Àtúèôÿÿû¡x]#…Àuƒìÿuhx$"jèQ¸ƒÄÉÍvU‰åVS¡ˆ]#@£ˆ]#³õ¾¹d‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî¸ë -¸ë搸ÿÿÿÿ[^]ÍvU‰åVS¡ˆ]#@£ˆ]#³ô¾¹d‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî¸ë -¸ë搸ÿÿÿÿ[^]ÍvU‰åƒì‹MœúX‰Â¡ Š#@%ÿ£ Š#Š€ ‰#ˆ‰ÐP€9úu è(úÿÿë‰ö¸ÉÐU‰åƒìƒ=”]#t(Ç‹#Ç‹#Ç‹#Ç”]#‹E£]#ƒ=|]#t!úèôÿÿ£x]#Ç|]#û…Àtúèòÿÿû¡x]#…Àu.¸ìÿÿÿ€=t]#t ƒìjÿh´$"j èOÆu]#¸ƒÄÉÉöU‰åS‹MœúX‰Ã¡‹#@ƒà?£‹#ºÀŠ#ŠˆA¡‹#@ƒà?£‹#Šˆ¡‹#@ƒà?£‹#ŠˆA‰ØP¸‹$ÉÉöU‰åƒì€=u]#tèäùÿÿƒì j èŽOÆu]#¸ƒÄÉÐU‰åƒìƒ=|]#t!úè óÿÿ£x]#Ç|]#û…Àtúè™ñÿÿû¡x]#…Àt¸ë¶t]#ÉÍvU‰åVSŠEŠU€} t ƒ -„]#ë ‰öƒ%„]#„Àt ƒ -„]#ëƒ%„]#„Òtƒ -„]#ë¸ë6¸ëbƒ%„]#³õ¾¹d‰Êì©t҉ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî³í¾¹dv‰Êì©t¦‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØîÿ€]#[^]ÐU‰åSƒìœúX‰Ã€=u]#tè–øÿÿè‘ðÿÿƒì hóèhîÿÿƒÄ…Àuƒì jèWîÿÿƒÄ…Àu‰ØP‹]üÉÍvU‰åº`ì¶ÈœúX‰Â¡ Š#;¤Š#t¡¤Š#ˆˆ ‰#@%ÿ£¤Š#‰ÐP]ÉöU‰åƒìº`ì¶Ðƒ=‹#u €úúu¡Œ]#H£Œ]#郍v÷ÂÀuxÿ‹#œúX‰Á¡‹#;‹#t¡‹#ˆÀŠ#@ƒà?£‹#ë"‰ö¡‹#+‹#ƒÀAƒà?£‹#Ç‹#‰ÈPƒ=‹#uÇ‹#ƒì ÿ5]#èƒÄÉÉöU‰åSƒì}™w‹UÑâU‰ÐÁà)Ðfƒ<ÅÈâ#uèùÝNj¸ÿÿÿÿ鏐ƒ= á#tcœúX‰Ã‹UÑâU‰ÐÁà)ЍÅ0ö€¡â# t ÿ€¤â#ë-v‹EÑàE‰ÂÁâ)‹Õ¤â#ƒì‹•â#ÿuRÿP@ƒÄ‰ØPéèƒ¡…ÀtgœúX‰Ã‹UÑâU‰ÐÁà)ЍÅ0ö€¡â# t ÿ€¤â#ë2v‹EÑàE‰ÂÁâ)‹Õ¤â#ƒì‹•â#ÿuRÿP@蔃ĉØPé­úèJ²‹Ìá#R‰ÑÁá)Ñ» â#f‰DË‹UÑâU‰ÐÁà)ЍÅ0öD t ÿ€¤â#ë?vƒìU‰ÐPjÿÐ]#‹MI‰ÐÁà)ЋŤâ#ƒÄ‹•â#QRÿP@è/ƒÄ¡Ìá#@‰ÂÁâ)ƒì ¿Õ¨â#P踱èƒÄû¸‹]üÉÐU‰åWVSƒì ‹]f…Ûuè>Ünj¸ÿÿÿÿé"‰öƒ= á#„“œúX‰ÇÇEð}ð™s¾ â#‹UðÑâUð‰ÐÁà)ÐÁàf9\,uHƒÀ0öD0 t ÿ€¤â#ë6ƒìEðPjÿÐ]#‹MðI‰ÐÁà)ЋŤâ#ƒÄ‹•â#QRÿP@ƒÄÿEð}ð™~“‰øPé}‰ö蓟…À„›œúX‰ÇÇEð}ð™w¾ â#‹Eð@‰ÂÁâ)Õf9\,uJƒÀ0öD0 t ÿ€¤â#ë8vƒìEðPjÿÐ]#‹MðI‰ÐÁà)ЋŤâ#ƒÄ‹•â#QRÿP@ƒÄÿEð}ð™~èj‰øPéԐúè"°‹Ìá#R‰ÑÁá)Ñf‰ͨâ#ÇEð}ð™w¾ â#‹Eð@‰ÂÁâ)Õf9\,uJƒÀ0öD0 t ÿ€¤â#ë8v‹MðI‰ÐÁà)ЋŤâ#ƒì‹•â#QRÿP@ƒÄEðPjÿÐ]#ƒÄÿEð}ð™~èÞ ¡Ìá#@‰ÂÁâ)ƒì ¿Õ¨â#Pèj¯èÁƒÄû¸eô[^_]ÃU‰åSƒìúè;¯‹Ìá#R‰ÑÁá)Ñf‰ͨâ#ƒìh„â#jèl–ƒÄUð¡ˆâ#;Øá#|¡„â#+Ôá#‰Eð¡ˆâ#+Øá#ë!‰ö¡„â#+Ôá#H‰Eð¡ˆâ#+Øá#ʚ;‰B‹Mð ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ôºÓMb‰Ø÷êÁú‰ØÁø)ÂыÌá#R‰ÐÁà)Ð) Åìâ#ƒì Qè. ƒÄƒ=Üá#ÿtƒì ÿ5Üá#ÿ¨á#ÇÜá#ÿÿÿÿƒÄ‹ -Ìá#I‰ÐÁà)ЋŤâ#ƒì‹…â#QPÿRLè{ ƒÄhÌá#jÿÐ]#ÇÌá#ÿÿÿÿÇàá#ÿÿÿÿèV ¡Ìá#@‰ÂÁâ)¿ըâ#‰$èã­è:ƒÄû‹]üÉÐU‰åƒìh8+"è( ƒÄÉÍvU‰åƒìjè ƒÄÉÉöU‰åƒìƒ=œ]#u(èè
-ƒì ¡Ìá#@‰ÂÁâ)¿ըâ#Pèt­ƒÄÉÍvU‰åWVSƒìhÊ2#è]$ƒÄ» â#ëv‹Eð@‰ÐÁà)ЁLÃ0€ƒì hDâ#èÊ+‰EðƒÄƒøÿ„“@‰ÐÁà)ÐöDÃ1@u¾‹UðR‰ÃÁã)ÃÁã¾ â#¡˜]#‰3@£˜]#‹E ‰Dƒìjÿuƒ´â#Pè ¾ÆD'ƒÃ fÇD3‹Mf‹%ÿf‰D3
-f‹A f‰D3 ƒÄ‰Ø‰ñº‹]ƒ{tf‹Sf‰T‹UðR‰ÁÁá)ÁÁáY0‹U‹B -‰ƒ â#¿¤â#Ç;¾¨â#¡Ìá#@‰ÂÁâ)‹DÖ0‰3º¬â#ǍAP‹]ð‰˜ â#Ç8ÇÿÿÿÿÇ0ÿÿÿÿǁã#°Ç8Ç0ǁÁÀǁ â#Ç9ºۍƒ€ 
-Ç…ã#Bƒúvì‹Eð@‰ÐÁà)ÐÁàÀǂ¨â#ÿÿÿÿǂ¬â#ôâ#‰pã#º‹Mðɍ€ ‰ö
-Ç…pã#Bƒú~ì»ëC;Ðá#sƒì‹â#ÿuSÿPƒÄ…Àxß;Ðá#u7‹]ð[‰ÂÁâ)ÂfÇÕÈâ#ƒìhDâ#SèÚ)è¡ÕDŽ鄉ö‹Eð@‰ÐÁà)Ѝ4ʼnž¤â#ƒì‹â#ÿuÿuðSÿP,ƒÄ…ÀyWfdžÈâ#ƒìhDâ#ÿuðèz)èAÕDžë'è3Õǃ釃ì ÿuðè9èÕdž¸ÿÿÿÿƒÄëjƒE‹U‹zü…ÿtY‰ö¾ëF;5Äá#s0ƒìµ‹ƒ`â#WVÿP ƒÄ…Àxۃ싃`â#WÿuðVÿP$ƒÄ;5Äá#t‡ƒE‹M‹yü…ÿu©‹Eðeô[^_]ÉöU‰åƒìEPÿuÿu ÿuè`üÿÿƒÄÉÍvU‰åWVSƒì ‹} ƒt6‹EÑàE‰ÂÁâ)‹G‰Õ¬â#‰Æ‹UÑâU‰ÐÁà)Ѓ ÅÐâ#@ën‰öƒì ‹UÑâU‰ÐÁà)зÅÎâ#Pè@‹UÑâU‰ÑÁá)Ñ»¬â#‰ˉƋEÑàE‰ÂÁâ)ƒÄƒ<Óuƒì ÿuèìèËÓLjëtv‹EÑàE‰ÂÁâ)» â#·DÓ.ƃì ·GPjÿwVh$2"è-‰ÁƒÄ f…Éu?ƒì‹UÑâU‰ÐÁà)зDÃ.PVèƒÄÿuèvèUÓlj¸ÿÿÿÿƒÄëN‹EÑàE‰ÂÁâ)Âf‰ Õ¨â#ƒìU‰ÐPjÿÐ]#ƒÄöGu ÿÀá#ëvöGuÿ€â#¸eô[^_]ÍvU‰åWVSƒì ‹M‹U ‹]œúX‰ÇEPSRQè­úÿÿ‰ÆƒÄƒþÿ„ɍv‰ÐÁà)ЋŤâ#‹…â#ƒx(„èà…À‰€»;Äá#svƒì‹`â#VSÿP(ƒÄC;Äá#råv‰ÃÁã)ÃÁ㋃¤â#ƒì‹…â#VPÿR0fǃÈâ#ƒÄhDâ#Vè\&ƒÄè ÒLJ‰øP¸ÿÿÿÿë#vƒìSVèŽýÿÿƒÄº…À”ÂJ ։øP‰ðeô[^_]ÃU‰åVS‹u»;Äá#svƒì‹`â#VSÿP(ƒÄC;Äá#råv‰ÃÁã)ÃÁ㋃¤â#ƒì‹…â#VPÿR0fǃÈâ#ƒÄhDâ#Vè¬%ƒÄeø[^]ÉöU‰åVS‹]è ƒì ¡Ìá#@‰ÂÁâ)¾ â#SÿTÖú‰$èn¡Ìá#@‰ÂÁâ)¿DÖ‰$èn¦ƒÄeø[^]ÃU‰åWVSƒì‹]‹}úû™w! [‰ÈÁà)ÈÁຠâ#öD0tfƒ|(u û¸ÿÿÿÿéDžÿy$[‰ÁÁá)Á Í°¸¤â#‹<Çë ‰öƒÿv¿[‰ÁÁá)Á Í°‰M乨â#‰Mì‹Uä‹
-‰Â)úƒÂ‰Ð¾º÷ö‰Eð‹uä;tMۍƒ€4‹MðىÈÁà)ȍ Å°‰ö2‹…ã#‹] ‰ƒÃ‰] B»‰Ðº÷ó‹]ì;uÔû‰øƒÄ[^_]ÐU‰åSƒì‹]‹ -Ìá#I‰ÐÁà)ЍÅö‚Ðâ#tɍ€È‚Xã#…ã#¡„â#;Ôá#|;Ôá#uA¡ˆâ#;Øá#}4ƒìSÿ5Ìá#ÿ5Øá#ÿ5Ôá#ÿ5ˆâ#ÿ5„â#hà2#è8¶ƒÄ è@ ‹]üÉÍvU‰åWVS‹ -Ìá#I‰ÐÁà)ЍÅöƒÐâ#„›ɍ€ȍ‹°¨â#º¤â#‹t‚`‹”À¸¬â#94s‰4‹Ìá#[‰ÁÁá)ÁÁፁÀ° â#¿¤â#B‰8±°‹†¨â#@º‰Ñº÷ñ‰–¨â#ۍƒ€ØÐÇD‡`ƒ<>wÿ>[^_]ÉöU‰åWVS‹M‹] ‹u‹}úù™w!I‰ÐÁà)ÐÁຠâ#öD0tfƒ|(uû¸ÿÿÿÿëy…ÛtI‰ÂÁâ)‹Õ`ã#‰…ötI‰ÂÁâ)‹Õ\ã#‰…ÿtI‰ÂÁâ)‹Õdã#‰ƒ}t(ɍ€ȍ I‰ÊÁâ)ÊÕXã#‹…ã#‹U‰û¸[^_]ÉöU‰å‹Múù™w!I‰ÐÁà)ÐÁຠâ#öD0tfƒ|(uû¸ÿÿÿÿë7I‰ÂÁâ)ÂÁ⍂Àǀ â#ǀ¤â#ǂ\ã#û¸]ÍvU‰åWVSƒì ƒ=Ìá#ÿt¡Ìá#@‰ÂÁâ)ÂöÕÐâ#…3ƒ=Ìá#ÿ„ƒìh„â#j證ƒÄU衈â#;Øá#|¡„â#+Ôá#‰E衈â#+Øá#ë"v¡„â#+Ôá#H‰E衈â#+Øá#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыÌá#R‰ÐÁà)Ð) Åìâ#ƒì QènüÿÿƒÄƒ=Üá#ÿtƒì ÿ5Üá#ÿ¨á#ÇÜá#ÿÿÿÿƒÄ‹ -Ìá#I‰ÐÁà)Ћ<Ťâ#ƒì‹½â#QWÿP<ƒÄ¿4½ƒì ‹†â#WÿP$‰ÃƒÄƒûÿt%ƒì[‰ÐÁà)ЋŤâ#‹…â#SPÿR4ƒÄ븅Àx»ƒûÿuG뫍v‹5Ìá#‰àá#‰Ìá#[‰ÐÁà)Ð;Åðâ#t0» â#‰ö¡Ìá#@‰ÂÁâ)‹TÓP‰Ìá# R‰ÈÁà)È;TÃPu×;5Ìá#tƒìhÌá#jÿÐ]#ƒÄ‹ -Ìá#I‰ÐÁà)ÐÁྠâ#fÇD(‹¸¤â#ƒì‹½â#‹àá#¸;Ìá#•ÀPQWÿS8¡Ìá#@‰ÂÁâ)ƒÄöDÖ1„Ü¡àá#;Ìá#…Ë¡„â#‰EèMè¡Ìá#@‰ÂÁâ)»¬â#‹DÓ@º@B‰Ö™÷þ’’’Áâ‰Ö5ˆâ#‰q¿¡/¸D‰ø÷î‰×Áÿ‰ð™‰þ)Ö¡Ìá#@‰ÂÁâ)‹\Ó@ºƒÞC‰Ø÷êÁú‰ØÁø)2Eè‹AºÊš;‰Ó™÷û‰QjhP@"ÿuìÿuèÿ¤á#‰ÃƒÄƒûÿuƒìÿ5Ìá#jèû7ƒÄ‰Üá#¡„â#£Ôá#¡ˆâ#£Øá#eô[^_]ÉöU‰åWVSƒìÇ0¢%úÿuèD»ƒÄ¿¤â#¾ â#‰ö[‰ÂÁâ)ÂÁâÇ:ÿÿÿÿǂ¬â#ÆDB fÇD0fÇD0
-fÇD0 fÇD0B0Ç0Ç8ǀ¨â#ǀ¬â#‚äâ#Ç@Çǂìâ#BP‰0Ç8ÇD`DŽÐ‚xå#Ç@Ǎ‚àÇ0ÿÿÿÿÇ8ÿÿÿÿ‚°Ç8ǀ¨â#ǀ¬â#ÂÀÇ2Ç:ºۍƒ€ v
-ÇD‡`Bƒúvï[‰ÐÁà)ЍÅÀǀ¨â#ÿÿÿÿǀ¬â#ºۍƒ€ 
-DŽ†ÐBƒú~ìCû™Žƒþÿÿ»¹¨â#[‰ÂÁâ)C‰DÑP‰Ãû˜~åÇ Ÿ%ÿÿÿÿ»™¹¬â#[‰ÂÁâ)Cÿ‰DÑP‰Ã…ÛéÇüâ#ÿÿÿÿÇDâ#ÇÈá#ÇÀá#Ç€â#Çàá#ÿÿÿÿÇÌá#ÿÿÿÿÇÜá#ÿÿÿÿÇØá#ÇÔá#ÇÐá#ÇÄá#Ç á#èÚè}è42ƒì ÿuèqÉÿÿ£Hâ#ƒÄ=×Övƒì h@3#èÇ$è »ƒÄ¸ƒ=Hâ#”À‰Eè]è¡Hâ#‰CÇ0¢%躂ƒì S豌Ç$ä@"èÇÇ$$+"聎Ç$<@"蕎ƒÄjjèEÿØ]#ƒÄh„â#jèLƒèOùÿÿèê›f£@â#¡Ìá#@‰ÂÁâ)¾ â#¿DÖ‰$èϛÇ$è7ŽÿÔ]#Ç0¢%ƒÄ»ƒ=Èá#ŸÃSjèɃă=€â#teè„ Çœ]#ƒìh„â#j軂è^›f£@â#è³øÿÿÇ$<@"èǍ¡Ìá#@‰ÂÁâ)¿DÖ‰$è7›Ç$蟍ƒÄÇ0¢%ƒìSjèCèÇ0¢%ƒÄjjè(ƒÄúƒ=Èá#t"ƒìÿ5Èá#hk3#èP¬Ç$ÿÿÿÿèX¹ƒÄƒì jèK¹ƒÄeô[^_]ÃU‰åSƒìƒ=œ]#…•èW‰…Àuú腚‹Ìá#R‰ÑÁá)Ñf‰ͨâ#‹E£Èá#Çœ]#ƒ=Ìá#ÿ„ƒìh„â#j藁ƒÄUð¡ˆâ#;Øá#|¡„â#+Ôá#‰Eð¡ˆâ#+Øá#ë ¡„â#+Ôá#H‰Eð¡ˆâ#+Øá#ʚ;‰B‹Mð ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ôºÓMb‰Ø÷êÁú‰ØÁø)ÂыÌá#R‰ÐÁà)Ð) Åìâ#ƒì QèZôÿÿƒÄƒ=Üá#ÿtƒì ÿ5Üá#ÿ¨á#ÇÜá#ÿÿÿÿƒÄ‹ -Ìá#I‰ÐÁà)ЋŤâ#ƒì‹…â#QPÿR<Çàá#ÿÿÿÿÇÌá#ÿÿÿÿƒÄèü‡…Àtƒì ¿@â#Pè,™ƒÄëvƒì ¿@â#Pè™èkƒÄû‹]üÉÉöU‰åSƒìÇEøÿÿÿÿ»ºâ#¡â#ƒx(t1ƒì‹šUøRSÿP(ƒÄ…Àu¸ÿÿÿÿëCƒûwºâ#‹šƒx(uи‹]üÉÉöU‰åƒìè è+ÉÉöU‰åƒìÇÜá#ÿÿÿÿè§êÿÿÉÐU‰åSƒìœúX‰Ãƒ=0¢%tƒ=€â#t‰ØPëƒì jè–ýÿÿƒÄ‰ØP‹]üÉÉöU‰åƒìÿuèzýÿÿƒÄÉÐU‰åSƒì‹UœúX‰ÃƒìRjèZ‰ÂƒÄ‰ØP‰Ð‹]üÉÉöU‰å¸Èá#ƒ=Ìá#ÿt‹Ìá#R‰ÐÁà)ЍÅã#]ÉöU‰åSƒìœúX‰Ãƒ=0¢%tƒ=€â#t‰ØPëƒì ÿuèíüÿÿƒÄ‰ØP‹]üÉÐU‰å]ÍvU‰åWVSƒì ÇEðÇE컍[ …ƒ¹(‹#t[¿ ‹#ƒ<9tP‹Ìá#ҍ‚€Ð؍…о â#ƒ<0t+ûƒì ÿ40ÿ9ƒÄú‹Ìá#ҍ‚€Ð؋´†Ð uìCƒû~Œƒ}ìt -ÿEðƒ}ðŽmÿÿÿeô[^_]ÐU‰åVSº¾ ‹#»$‹#¹(‹#vRÁàÇ0B‰Çƒú~ãÇ‘#ÿÿÿÿÇ ‘#Ç(‹#Ç ‹#Ç$‹#ÿÿÿÿ[^]ÐU‰åS‹Múƒ= ‘#ÿu û¸ ënv¡ ‘#@Ç•(‹#‰¡ ‘#@‹…$‹#£ ‘#‹@‹U ‰… ‹#º» â#‰öҍ‚€ÐDŽƒÐBú™~ßû¸‹$ÉÃU‰åú¡Ìá#À’ÂU‹•pã#û]ÍvU‰å‹Múƒùw -Iƒ<…(‹#u û¸ë%v¡Ìá#À’ÂʋE ‰•pã#û¸]ÃU‰åS‹]œúX‰Áƒûw -[ƒ<…(‹#u‰ÈP¸ë.v[Áà‹ ‘#‰$‹#ǀ(‹#‰ ‘#‰ÈP¸‹$ÉÃU‰åWVSƒì ¡Ìá#‰Eð‰ÂÑâ‰ÐÁà)ЍÅ¿ â#öD0 tm‹E‰‚lã#‹UðÑâUð‰ÐÁà)ЁLÇ0@‹UðÑâUð‰ÐÁà)ЍÅÀº¨â#ƒ<ÿt,‹4v‰ÃÁã)ÃÁ㋃¤â#ƒì‹…â#VPÿRD‰tPƒÄ¹» â#;MðtI‰ÐÁà)ЋUð9TÃP„ˆAù™~ۋUðÑâUð‰ÐÁà)Ѓ<Åôâ#t[»¤â#ûƒì ‹UðÑâUð‰ÐÁà)ЋDÃPÿpÿƒÄú‹EðÑàEð‰ÂÁâ)ÕP‹‹@‰‹UðÑâUð‰ÐÁà)Ѓ|ÃPu«èJüÿÿƒì ‹EðÑàEð‰ÂÁâ)» â#¿DÓPèÔyƒÄEðPjÿÐ]#‹Eð@‰ÂÁâ)ՃÄöD0@u%ƒì·D.P‹Eð@‰ÂÁâ)Âÿ4Õ¬â#èÁ ƒÄ»;Äá#sƒì‹`â#ÿuðSÿP(ƒÄC;Äá#rã‹MðI‰ÐÁà)ЋŤâ#ƒì‹…â#QPÿRPÇÌá#ÿÿÿÿÇàá#ÿÿÿÿ‹Eð@‰ÂÁâ)ƒÄöÕÐâ#u&ÿ -Àá#ƒ=Àá#uBèZúÿÿë;ƒìRjèY+ƒÄëg‹Eð@‰ÂÁâ)ÂöÕÐâ#uÿ -€â#ƒ=€â#uèúÿÿƒìh„â#jèÒyƒÄƒ=Üá#ÿtƒì ÿ5Üá#ÿ¨á#ÇÜá#ÿÿÿÿƒÄè­ïÿÿeô[^_]ÐU‰åVS‹uúv‰ÐÁà)ÐÁຠâ#öD0ufƒ|(uèѼNJû¸ÿÿÿÿ麍v‰ÐÁà)ÐöÅÑâ#tû雉ö;5Ìá#uJv‰ÐÁà)л â#‹DÃ0©t0©u)ƒì jè¥üÿÿ¡Ìá#@‰ÂÁâ)¿DÓ‰$襑ƒÄ»ëvC; ]#}ƒìÝÿ°D‘#Vÿ@‘#ƒÄ…Àtٍv‰ÐÁà)Ё ÅÐâ#û¸eø[^]ÍvU‰åWVSƒì ‹Ef‰Eòf…Àuèâ»ÇŒ¸ÿÿÿÿé‰öú¡àá#@‰ÂÁâ)Âf‹Mòf; ÕÌâ#”Eñ¾¿ â#‰öv‰ÐÁà)ÐÁà‹T0÷Â…ˆƒÀ fƒ|8t}÷Âuuf‹Mòf9L8 uj;5Ìá#u!÷Ât÷Âuƒì jè{ûÿÿƒÄëC‰ö»ëC; ]#}ƒìÝÿ°D‘#Vÿ@‘#ƒÄ…Àtٍv‰ÐÁà)ЁLÇ0Fþ™ŽNÿÿÿ€}ñt(ƒì ¡àá#@‰ÂÁâ)¿ըâ#P萃Äëvû¸eô[^_]ÉöU‰åWVSƒì ¾¿ â#v‰ÐÁà)ÐÁàfƒ|(tL÷D0
-uB»ë‰öC; ]#}ƒìÝÿ°D‘#Vÿ@‘#ƒÄ…Àtٍv‰ÐÁà)ЁLÇ0Fþ™~–eô[^_]ÉöU‰åSƒì¡Ìá#@‰ÂÁâ)» â#‹DÓ0©t7©u0©t)ƒì jè"úÿÿ¡Ìá#@‰ÂÁâ)¿DÓ‰$è"ƒÄ‹]üÉÉöU‰åS‹M‹] ¡ ]#ʼnŠ@‘#‰šD‘#@£ ]#‹$ÉÍvU‰åƒìúÿuè½ùÿÿ¡Ìá#@‰ÂÁâ)¿ըâ#‰$躎ƒÄÉÐU‰åVS¶uœúX‰Ãƒ=t”#ÿuèH¹Ç‚‰ØP¸ÿÿÿÿéۋ -t”#‰ÊÁâ‹‚ì‘#£t”#‹E‰‚à‘#‹E ‰‚ä‘#‰ðƒà‰‚è‘#‰ðƒàƒøtOƒø
-ƒøt -ësvƒøtSëi‰ÈÁàǀì‘#ÿÿÿÿƒ=`”#ÿu‰ -`”#ë¡d”#Áà‰ˆì‘#‰ -d”#ëH‰ö‰ÊÁâ¡h”#‰‚ì‘#‰ -h”#ë.‰ÊÁâ¡l”#‰‚ì‘#‰ -l”#ë‰ÊÁâ¡p”#‰‚ì‘#‰ -p”#‰ØP¸[^]ÐU‰åƒìƒ=Ðá#uƒì h 3#èŒÇ$謃ġÐá#P‰Ðá#ÉÐU‰åƒìƒ=Äá#uƒì h¿3#èPÇ$èÌ«ƒÄ¡Äá#P‰Äá#ÉÐU‰åWVS‹E‹u ‹}»‹HÇöt<€9t5‹ ‰‡€: t€:t‰öC€< t€< uó€< uÆ Cÿ€< uÌÿ[^_]ÐU‰åWVSì¬‹EµTþÿÿ½Xþÿÿ»‹HDžTþÿÿöt<€9t5‹ ‰‡€: t€:t‰öC€< t€< uó€< uÆ Cÿ€< uÌÿƒì…XþÿÿPÿµTþÿÿè=´ÿÿƒÄeô[^_]ÉöU‰å¸¹ì‘#v‰ÂÁâ@‰
-ƒø&~òÇ\”#ÿÿÿÿÇ`”#ÿÿÿÿÇd”#ÿÿÿÿÇh”#ÿÿÿÿÇl”#ÿÿÿÿÇp”#ÿÿÿÿÇt”#]ÉöU‰åWVSƒì ‹E‹} ƒøt4ƒø ƒøtéЃøt3ƒøtB鳐‹`”#Ç`”#ÿÿÿÿë:‰ö‹h”#Çh”#ÿÿÿÿë&‰ö‹l”#Çl”#ÿÿÿÿë‰ö‹p”#Çp”#ÿÿÿÿÇ á#ƒûÿtM¾ì‘#…ÿt‰ØÁàƒ¸è‘#uƒì ‰ØÁàÿ°ä‘#ÿà‘#ƒÄ‰Ù‰ØÁà‹0‰Â¡t”#‰2‰ -t”#ƒûÿu¸Ç á#eô[^_]ÉöU‰åƒìEüPEøPEôPEðPèI‡Ç$€”#èÉӃÄjjhÿÿjh„”#h€”#èôɃÄjjhÿÿÿhh ”#h€”#èÔɃÄjjhÿÿÿþhh¼”#h€”#è´ÉƒÄ ƒ}ütƒì‹EüHPÿuøh€”#è~ȃă}ôtƒìÿuôÿuðh€”#èbȃÄÉÐU‰åƒì‹E…Àu¸ëƒìjPh€”#è ʃÄÉÍvU‰åƒìÿuÿuÿu ÿuh€”#è¼ËƒÄ ÉÍvU‰åƒì ÿuÿuÿuÿuÿu ÿuh€”#è¶ËƒÄ ÉÐU‰åƒì ÿu ÿuh€”#èjЃÄÉÐU‰åƒìÿuh€”#èQ΃ÄÉÃU‰åƒìÿuh€”#èQ҃ÄÉÃU‰åƒì jÿuh€”#èWɃÄÉÉöU‰åƒì ÿu ÿuh€”#èЃÄÉÐU‰åƒìh€”#èÎÇ$€”#è$҃ÄÉÍvU‰åWVSƒì} ‹uEðPh4#VèÖ¥‰ÃƒÄƒûuƒ}ðvÇEðƒÆë ‰öÇEð‹Eðº;¤]#~hƒìWVhà”#蜃Äj
-VèK›ƒÄ»…À•ÃœúX‰Æƒìhà”#‹Eðÿ4…¨]#h4#è]™ƒÄ…Ûuƒì h¼4#èI™ƒÄ‰ðPº‰Ðeô[^_]ÍvU‰åVSƒìu ‹]EôPh4#S襃ăøuƒ}ôvÇEôƒÃëÇEô‹Eôº;¤]#~JƒìVShà”#èB›ƒÄj
-S臚ƒÄœúX‰Ãƒìhà”#‹Eôÿ4…¨]#h4#裘ƒÄ‰ØPº‰Ðeø[^]ÉöU‰åVSƒì@‹u‹] ‹EfÇEÈÇEÌÇEÐfÇEÔÇEàÇEäÇEìÇEð‰EØÇEÜÇEè…ÛtT‹C‰E̋C‰EЃ{u
-ÇEÜ1됃eÜߋC ‰EàÇEÀƒì ÿ5à˜#è)7ƒÄ+C ‰EċC‰Eì‹C‰EðëD‰öÇEÌÇEЃMÜ ÇEàÇEÀƒì ÿ5à˜#èâ6ƒÄ‰EÄÇEìÇEðèI±‹ƒì jEÀPEÈPÿuh!4#èAÞÿÿ‰ƒÄ ƒøÿt ƒì PèòÒÿÿƒÄ豉¸ƒ>ÿ”ÀHƒàêƒÀeø[^]ÍvU‰åƒìÿ5à˜#èc6ƒÄÉÉöU‰åƒìÿ5à˜#èc6ƒÄÉÉöU‰åƒìÿ5à˜#è{5ƒÄÉÉöU‰å‹E‹U ‹M£à˜#‰ä˜#‰ -è˜#]ÐU‰åVS‹]è°‹0ƒì Sètóÿÿ‰Ãèm°‰0ƒÄ¸…Û•À@eø[^]ÃU‰åƒìúÿuÿu ÿuÿ5à˜#èé5ƒÄûÉÍvU‰åWVSƒì ‹}‹uúÿ6ÿu Wÿ5à˜#è3‰ÃƒÄ…Ûu#ƒìÿ5à˜#èx5ƒÄ+PWÿ5è˜#èffƒÄû‰Øeô[^_]ÃU‰åSƒì ‹] Sÿuè¡eƒÄÿ5à˜#è75ƒÄ+‰¸‹]üÉÉöU‰åVSƒì‹u‹] …Ûtƒ;uÇEôƒìEôPë7ƒ;uÇEðƒìEðPë!vÇEèƒì jè_þÿÿ+CUè‰BƒÄRVèT*ƒÄeø[^]ÉöU‰åWVSƒì‹u ‹}ÇEðÿ5à˜#è“4‰ÃƒÄ9Þƒþ} ¸ëG‰öƒì ÿuèµ*ƒÄ W‰Ø)ðPÿuè eƒÄ…ÀtÇEð…ÿt‰Ø+‰ƒì ÿuèÙ*‹EðƒÄeô[^_]ÍvU‰åƒì‹Eúƒ8u -ÇûÿU ëû¸ÉÃU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)ÐÁà‹xå#‰U苀|å#‰Eìƒùÿtw ‰ÆȉÂÁâ)‹Eè‰Ã;Õxå#|[‰Eäv1‰ÐÁà)ЍÅ;šxå#u ‹Eì;‚|å#|1‰Ï‰ÐÁà)Ћ Åøâ#ƒùÿt4 1‰ÐÁà)Ћ]ä;Åxå#}«ƒÿÿt‰ÐÁà)ЋU‰Åøâ#ë‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰Åüâ#‹E@‰ÐÁà)ЍÅP‰ˆ¨â#‰¸¬â#ƒÄ[^_]ÍvU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)л¤â#‰]ð‹´ÃЃùÿtCI‰ÐÁà)Ð;´ÃÐr0»¨â#‰Ï‰ÐÁà)ЋLÃPƒùÿtI‰ÐÁà)ЋUð;´ÂÐsՃÿÿt‰ÐÁà)ЋU‰Åøâ#ë
-‰ö‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰Åüâ#‹E@‰ÐÁà)ЍÅP‰ˆ¨â#‰¸¬â#ƒÄ[^_]ÍvU‰åWVS‹}‰ÐÁà)ЍÅP‹¬â#‹°¨â#ƒúÿu ‹E ‰0ë#‰öR‰ÁÁá)Á»¨â#‰ÐÁà)ЋDÃP‰DËPƒþÿt!v‰ÁÁá)Á»¬â#‰ÐÁà)ЋDÃP‰DËP[^_]ÃU‰åS‹]‹ ‰Èƒùÿt/I‰ÐÁà)ЋÅøâ#‰ƒøÿt@‰ÐÁà)ÐÇÅüâ#ÿÿÿÿ‰È‹$ÉÃU‰åS‹]‹M ƒ9ÿt‹@‰ÂÁâ)‰Õüâ#[‰ÂÁâ)ÕP‹‰‚¨â#ǂ¬â#ÿÿÿÿ‰‹$ÉÃU‰åWVSƒì ‹M‹] ‹}ÇEðú¡Ìá#@‰ÂÁâ)4Õ â#…ÿt‹F8‰…ÛtBƒùt"ƒù ƒùt ë*‰öƒùtë!‹F8 ‰F8ë‰ö‹÷Ð!F8ëv‹‰F8ëÇEð‹F8‰Ã÷Ћ›#‰Ñ…ÂtB‰ö‰Ø÷л!Ètv‰Ú©u
-CÑøuòºƒì R范ċ^8‰Ø÷Ћ -›#…ÁuÀ‹F8‰Ã÷ЋV<‰Ñ…Ât=‰Ø÷л!Ètv‰Ú©u
-CÑøuòºƒì Rè|ƒÄ‹^8‰Ø÷ЋN<…ÁuÃû‹Eðeô[^_]ÍvU‰åVS‹u‹M ¸…É„¸ƒù‡òv‰ÐÁà)Ðfƒ<ÅÈâ#u -¸éӍvú‰ÈÁàö€™#uƒ¸™#uû魉öv‰ÐÁà)ЍÅÜâ#ƒùvèÍ©Çë
-¸Óà »ëC;Ì]#}ƒìÝÿ°Ä›#VÿÀ›#ƒÄ…Àtٍv‰ÐÁà)ЍÅfƒ»Èâ#u&ƒìh›#VèÔüÿÿ‹ƒ¤â#ƒÄ‹…â#VPÿRDƒÄèSm…Àuèû¸eø[^]ÐU‰åWVSƒì‹]‹U ƒûvè©Ç¸ÿÿÿÿévœúX‰Á‰Mðƒ}t‰ÞÁæÆ™#ü¹‹}ó¥…Òt‰ßÁçÇ™#ü¹‰Öó¥…Ò„ºöB…°ƒ:‡§ƒ< ›#ÿtq4‰uìº ›#‹@Áà‰Eè‰ÇƒÇ‹ -@¨%¸@¢%‹U苉E䋇D¢%©t -ƒàý‰‡D¢%ë‰ö¾ ›#‹Uì‹2@‰ Õ@¢%‰Áƒ}äÿu»‰ -@¨%ǝ ›#ÿÿÿÿƒûv -è¨Çë¸þÿÿÿˆÙÓÀ!›#‹uð‰ðP¸ƒÄ[^_]ÐU‰åWVSƒì,‹] ¸…Û„~¸ƒû‡pœúX‰Â‰UԉÞÁæ}؁ƙ#ü¹ó¥÷Eàuƒ}Øu ‰ÐPé5vƒûv膧Ǹÿÿÿÿ됸ˆÙÓà#›#…Àt -‹UԉÐPéûƒûvèN§Çë‰ö¸ˆÙÓà ›#‹5›#ƒþÿ„ô¸‰ÇˆÙÓçvv‰ÐÁà)ЍÅàâ#ƒûvèý¦Ç¸ÿÿÿÿë‰ú#‰Ð…À„–v‰ÐÁà)ÐÁàfƒ¸Èâ#uÜâ#ƒûv -輦Çë 8ƒìh›#Vèúÿÿv‰ÃÁã)ÃÁ㋃¤â#ƒÄ‹…â#VPÿRDÃྠâ#ƒÄƒ<3ÿtƒì ÿ43ÿ¨á#Ç3ÿÿÿÿƒÄ‹MԉÈPéîv‰ÐÁà)Ћ4Åøâ#ƒþÿ…ÿÿÿ¾¸‰ÇˆÙÓç‰öv‰ÐÁà)ÐÁàfƒ¸Èâ#„…Øâ#ƒûvèö¥Ç¸ÿÿÿÿ됉ú#‰Ð…Àu^v‰ÐÁà)ЍÅÜâ#ƒûvèÃ¥Çëv 8»ëvC;Ì]#}0ƒìÝÿ°Ä›#VÿÀ›#ƒÄ…ÀtÙëvFþ™ŽSÿÿÿèzi…Àuè9 -‹MԉÈP¸eô[^_]ÐU‰åWVSƒì,¸ƒ} „T¸ƒ} ‡EœúX‰Â‰Uԋu Áæ}؁ƙ#ü¹ó¥÷Eàuƒ}Øu ‰ÐPé ‰ö÷Eàu;ƒ} vèܤǸÿÿÿÿëv¸ŠM Óà#›#…Àt ‹UԉÐPéÃ=@¨%ÿu‹MԉÈP¸ 鮉ö‹5@¨%vÁà¹@¢%‹‰@¨%‹U ‰D¢%‹U‰H¢%‹U‰L¢%‹Ìá#‰P¢%Çÿÿÿÿ‹E Áຠ›#ƒ<ÿu‰4ë>‰ö‹M ‹ ›#‰ÁЃ<Å@¢%ÿt»@¢%
-‹Í 
-ƒ<ÃÿuîR‰4Å@¢%ƒ} vèé£Ç됸ŠM Óà ›#‹5›#ƒþÿ„û¸‰ÃŠM Ó㐍v‰ÐÁà)ЍÅàâ#ƒ} v蘣Ǹÿÿÿÿë v‰Ú#‰Ð…À„šv‰ÐÁà)ÐÁàfƒ¸Èâ#uÜâ#ƒ} vèS£Çëv ƒìh›#Vè¨öÿÿv‰ÃÁã)ÃÁ㋃¤â#ƒÄ‹…â#VPÿRDÃྠâ#ƒÄƒ<3ÿtƒì ÿ43ÿ¨á#Ç3ÿÿÿÿƒÄ‹MԉÈPé÷v‰ÐÁà)Ћ4Åøâ#ƒþÿ…ÿÿÿ¾¸‰ÃŠM Ó㐍v‰ÐÁà)ÐÁàfƒ¸Èâ#„…Øâ#ƒ} v艢Ǹÿÿÿÿë‰Ú#‰Ð…Àu^v‰ÐÁà)ЍÅÜâ#ƒ} vèV¢Çë‰ö »ëvC;Ì]#}0ƒìÝÿ°Ä›#VÿÀ›#ƒÄ…ÀtÙëvFþ™ŽSÿÿÿèf…Àuƒ=È]#uèÄ ‹MԉÈP¸eô[^_]ÃU‰åWVSƒì‹u‹]¡Ìá#@‰ÂÁâ)<Õ â#èŠú¡›##„Hºv©u=BÑøuô¾ƒ<µ ›#ÿue‹E ‰0Ç@Ç@W<ƒþvèa¡Ç됉Öëɸþÿÿÿ‰ñÓÀ!ƒþvè?¡Çëv¸þÿÿÿ‰ñÓÀ!›#ûév µº ›#‹[‹Å@¢%‰ƒøÿu"ƒþvèñ Ç됸þÿÿÿ‰ñÓÀ!›#W<ƒþv -èÌ Çë ¸þÿÿÿ‰ñÓÀ![Áâ¹D¢%‹
-‹u ‰‹‚H¢%‰F‹‚L¢%‰FƒÂ‹
-©t ƒàý‰
-ëv[¡@¨%‰Õ@¢%‰@¨%ûéI‰Öë‹G<#tUº©uéBÑøuô¾‹E ‰0Ç@Ç@W<ƒþvè Çëv¸þÿÿÿ‰ñÓÀ!ûéëv…Ûtƒ;uƒ{u -û¸ éÓ‰ö‹‰G@úèu‹Ìá#R‰ÑÁá)Ñf‰ͨâ#ƒìh„â#jèN\ƒÄU衈â#;Øá#|¡„â#+Ôá#‰E衈â#+Øá#ë¡„â#+Ôá#H‰E衈â#+Øá#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰ÁáºÓMb‹Eì÷êÁú‹EìÁø)ÂыÌá#R‰ÐÁà)Ð) Åìâ#ƒì QèÏÿÿƒÄƒ=Üá#ÿtƒì ÿ5Üá#ÿ¨á#ÇÜá#ÿÿÿÿƒÄ‹ -Ìá#I‰ÐÁà)ЋŤâ#ƒì‹…â#QPÿRHƒÄh›#ÿ5Ìá#èæòÿÿ¡Ìá#@‰ÂÁâ)ÂfÇÕÈâ#ƒÄ…Û„’ƒìEàPjè[U؃Ä‹Eà‰E؋EäC‰B…Ày -ÿM؁Bʚ;됁zÿɚ;~ ÿjʚ;ÿ5Ìá#hÐr"ÿuÜÿuØÿ¤á#‰ÃƒÄƒûÿuƒìÿ5Ìá#jèù ƒÄ¡Ìá#@‰ÂÁâ)‰Հå#ÇÌá#ÿÿÿÿÇàá#ÿÿÿÿè‡Ðÿÿƒì ¡Ìá#@‰ÂÁâ)» â#¿DÓPèsè”ÇG@¡Ìá#@‰ÂÁâ)ƒÄöDÓ2tû¸ é~‰Öë%¡›##„ûº‰ö©uáBÑøuô¾ƒ<µ ›#ÿu=‹M ‰1ÇAÇAƒþv -è@Çë¸þÿÿÿ‰ñÓÀ!›#ûé vƒì µƒ ›#Pèúðÿÿ‰ÇƒÄƒ» ›#ÿu#ƒþvèòœÇë‰ö¸þÿÿÿ‰ñÓÀ!›#Áâ¹D¢%‹
-‹] ‰‹‚H¢%‰C‹‚L¢%‰CƒÂ‹
-©t ƒàý‰
-ëv¡@¨%‰Õ@¢%‰=@¨%ûël‹G<#…Àuû¸ë`v‰Öë‹G<º#t ©uéBÑøuô¾‹E ‰0Ç@Ç@W<ƒþvè/œÇëv¸þÿÿÿ‰ñÓÀ!û¸eô[^_]ÍvU‰åWVSƒì ‹}¡Ìá#@‰ÂÁâ)4Õ â#è¹ú‹F<#…Àt è¦û颋‰F@úèq‹Ìá#R‰ÑÁá)Ñf‰ͨâ#ƒìh„â#jè6XƒÄU衈â#;Øá#|¡„â#+Ôá#‰E衈â#+Øá#ë¡„â#+Ôá#H‰E衈â#+Øá#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыÌá#R‰ÐÁà)Ð) Åìâ#ƒì QèúÊÿÿƒÄƒ=Üá#ÿtƒì ÿ5Üá#ÿ¨á#ÇÜá#ÿÿÿÿƒÄ‹ -Ìá#I‰ÐÁà)ЋŤâ#ƒì‹…â#QPÿRHƒÄh›#ÿ5Ìá#èÍîÿÿ¡Ìá#@‰ÂÁâ)» â#fÇDÓ(ÇÌá#ÿÿÿÿÇàá#ÿÿÿÿè Íÿÿ¡Ìá#@‰ÂÁâ)¿DÓ‰$è™oè‹F<#ƒÄ…Àuû¸ë èÿû¸eô[^_]ÐU‰åSƒì‹]úEðPjè¢VƒÄƒ=¨›#ÿu
-ÇEèëWMèU𡤛#;B|¡ ›#+Eð‰E衤›#+Bëv¡ ›#+EðH‰E衤›#+Eôʚ;‰Aƒì ÿ5¨›#ÿ¨á#ƒÄ…ÛtN]ð‹E𣠛#‹Eô£¤›#jh0s"ÿuôÿuðÿ¤á#‰ÃƒÄƒûÿuƒìÿ5Ìá#jè:ƒÄ‰¨›#ë -vǨ›#ÿÿÿÿû‹Eè‹]üÉÐU‰åVSƒì‹uƒ<µ ›#ÿuC‰uèÇEìÇEð¡Ìá#‰Eôƒþvèü˜Ç鮐¸þÿÿÿ‰ñÓÀ!›#降 µº ›#‹[‹Å@¢%‰ƒøÿu"ƒþv豘Ç됸þÿÿÿ‰ñÓÀ!›#[Áà¹D¢%‹‰U苐H¢%‰U싐L¢%‰Uð‹P¢%‰UôP‹
-©tƒàý‰
-ë[¡@¨%‰Õ@¢%‰@¨%ƒìEèPVè
-ƒÄeø[^]ÃU‰åVSƒì¡Ìá#@‰ÂÁâ)4Õ â#‹F0©…Í -‰F0‹F8‰Ã÷Ћ›#‰Ñ…ÂtA‰Ø÷л!Ètv‰Ú©u
-CÑøuòºƒì Rè„þÿÿƒÄ‹^8‰Ø÷Ћ -›#…ÁuÀ‹F8‰Ã÷ЋV<‰Ñ…ÂtZ‰Ø÷л!Ètv‰Ú©u
-CÑøuòº‰UèÇEìÇEð¡Ìá#‰EôƒìEèPRèƒÄ‹^8‰Ø÷ЋN<…Áu¦f0ÿïÿÿeø[^]ÃU‰åWVSƒì,‹]œúX‰Â‰UÌ¡Ìá#@‰ÂÁâ)Õ â#‰UЉÞÁæ}؁ƙ#ü¹ó¥÷Eàuƒ}Ø„îƒ}Øÿ„ä÷EàuCƒ}Øu=ƒìSh,4#èw}ƒÄ÷Eàtƒì‹M ÿqhB4#èX}ƒÄƒì jè—ÓÿÿƒÄ‹UЋB8‰EԉƍUԃûv -èh–Çë ¸ˆÙÓà ‹EÔ E܉EԋUЃÂ<ƒûv -è<–Çë ¸þÿÿÿˆÙÓÀ!‹EԋUЉB8û÷Eàtƒìjÿu SÿUäëƒìj‹M ÿqSÿU؃Äú‹EЉp8‹ỦÐPeô[^_]ÃU‰åWVSƒì ‹}‰ÐÁà)ÐÁྠâ#fƒ|(uF˜àƒ<3ÿtƒì ÿ43ÿ¨á#Ç3ÿÿÿÿƒÄƒìh›#Wèúèÿÿ‰ÂÁâ)‹Õ¤â#ƒÄë ‰ÐÁà)ÐÁàfƒ¸Èâ#u!‹¤â#ƒì‹•â#WRÿPD¸ƒÄë‰ö¸eô[^_]ÍvU‰åWVSƒì º¿™#¾™#» ™#¹ ›#‰ö‰ÐÁàǀ™#Ç8Ç0ÇÇ‘ÿÿÿÿBƒúvϺ»@¢%¹D¢%RÁàB‰ÇDƒú>~éÇ(¨%ÿÿÿÿÇ<¨%Ç@¨%Ç›#Ç›#ÿÿÿÿǨ›#ÿÿÿÿº¹`œ#»dœ#‰öRÁàÇÇÿÿÿÿÆDBƒú~áƒìjh°m"ènÚÿÿƒÄeô[^_]ÍvU‰å‹EǸ]ÐU‰å‹EÇÿÿÿÿ¸]ÐU‰åƒì‹U‹M ƒùvèê“Ǹÿÿÿÿ됸Óà ¸ÉÃU‰åƒì‹U‹M ƒùv趓Ǹÿÿÿÿ됸þÿÿÿÓÀ!¸ÉÃU‰åƒì‹M ƒùv腓Ǹÿÿÿÿë ¸Óà‹U#ÉÉöU‰åƒì ÿuÿu ÿuèÔçÿÿƒÄÉÍvU‰åWƒì$‹UEè‰E丹‹}äüó«ƒìjÿuäRèBñÿÿƒÄ…Àu -‹Uè‹E ‰¸‹}üÉÐU‰åƒì jÿu ÿuèñÿÿƒÄÉÃU‰åƒì‹E…Àu¸ëƒìPÿu ÿuèíðÿÿƒÄÉÃU‰åƒìÿuÿ5Ìá#è`èÿÿƒÄÉÍvU‰åVSƒì ‹]‹E ‰EèÇEìÇEð脒‹0ƒìEØPEèPSèAéÿÿƒÄ»ÿÿÿÿ…Àu ÷Eàu‹]ØèT’‰0‰Øeø[^]ÐU‰å‹M¡Ìá#@‰ÂÁâ)¡›# ÕÜâ#‰¸]ÉöU‰åSƒì‹E‹U ú‹Ìá#‰Ìá#ÇÈ]#jPj jèœìÿÿƒÄÇÈ]#‰Ìá#û‹]üÉÍvU‰åS‹M‹] ¡Ì]#ʼnŠÀ›#‰šÄ›#@£Ì]#‹$ÉÍvU‰åVS‹]Cÿƒøv苑Ç~¸ÿÿÿÿëp‰öœúX‰Æ[€<…hœ#u‰ðPèa‘ǸÿÿÿÿëF[Áâ¹`œ#‹E ‰
-‹E‰‚dœ#ÆD
-ƒìjhps"Sè¹T·Ã‰$èÒeƒÄ‰ðP¸eø[^]ÍvU‰åƒì¸ÉÍvU‰åƒì ‹E‰EèÇEìÇEð‹Ìá#‰UôUèRPè›ùÿÿƒÄÉÉöU‰åVS‹uv‰ÃÁã)ÃÁ㸠â#DŽàÿÿÿÿL0ƒìh›#Vèõãÿÿ‹ƒ¤â#ƒÄ‹…â#VPÿRDèç·ÿÿƒÄeø[^]ÐU‰åƒìǨ›#ÿÿÿÿjjèWèÿÿè¾·ÿÿƒÄÉÐU‰åƒìEüÇEüÿÿÿÿPèôÿÿƒÄÉÐU‰åƒì‹E‹‰EüEüPjÿÐ]#‹UüRÁà¹`œ#ƒÄƒ<t ûƒì RÿƒÄú‹Eü@ƒì ÿ4…dœ#覱ÿÿƒÄÉÐU‰åWVSƒì ‹u ‹]ƒ}t讏Ǹÿÿÿÿén‰öúƒ= ¤#ÿt ƒ=@¨%ÿuûèƒÇ ¸ÿÿÿÿéCv¡ ¤#‰‹ ¤#Õ)п$#‹DÇ0£ ¤#‹Õ)й #ÇDÁ0…öu8‹Õ)ÐÇÁ‹Õ)ÐÇÇ‹Õ)ЉÅ(#닍<Å)Ǎ<ý #ü¹ó¥‹Õ)ЍŃº #u#¡@¨%‰‚H#@ÁàƒˆT¢%‹€@¢%£@¨%‹Õ)ÐÇÅ4#ÿÿÿÿ‹Õ)ЍÅ8#Ç@NjÕ)ЍÅ@#Ç@NjÕ)ÐÇÅL#û¸ƒÄ [^_]ÃU‰åSƒì‹]ƒûwúÝ)؃<ÅP#uûèÿÇ¸ÿÿÿÿ閍vÝ)ØÁàǀP#ƒÀº$#ƒ<ÿtƒì ÿ4ÿ¨á#ƒÄÝ)ØÁàƒ¸ #uE‹H#R ÅöT¢%u¡@¨%‰@¢%‰@¨%Ý)؋ÅH#@ƒ$ÅT¢%üû¸‹]üÉÃU‰åWVSƒìL‹E‰E´Áà+E´Áàƒ¸ #…‹P ‹‚(#@öÅT¢%t¸,#ƒ< „ôÿéì‰ö‹M´Áá+M´Ááy LJ,#¾(#‹7@‹@¨%‰Ý@¢%£@¨%jÿ41ÿ±$#jèhçÿÿ‹7@ƒ ÅT¢%錐‹E´Áà+E´Á๠#ƒ<uwPƒ<
-tÿ°(#ÿ°,#ÿ4
-ëQvÇEÈÇEÌÇEÐÇEÔÇEØÇEÜÇEà‹E´Áà+E´Áà(#Rÿ°,#EÈPEÄPèÙÙÿÿƒÄ‹E´Áà+E´Åƒ¸(#u -ƒ¸,#„Àº@#‹E´Áà+E´ŋ‰E¸M¸‹D‰A‹E¸ƒ8#‰ƒ@#‹Aƒ<#‰B…Àyÿ‹@#Bʚ;ë‰özÿɚ;~ ÿjʚ;‹E´Áà+E´ÿu´h<v"ÿ4ÅD#ÿ4Å@#ÿ¤á#‰ÃƒÄƒûÿuƒìÿ5Ìá#jè+ùÿÿƒÄ‹E´Áà+E´‰Å4#ë‰ö‹E´Áà+E´ÇÅ4#ÿÿÿÿeô[^_]ÃU‰åWVSƒì‹u‹}ÇEäƒþw3ƒ}t-‹Exÿɚ;w!‹]{ ÿɚ;wúõ)ðƒ<ÅP#uûèÁŠÇ¸ÿÿÿÿ鐅ÿ„·õ)ðƒ<Å4#ÿuÇG ÇGëwƒìEèPjèGÇEäƒÄ¹@#õ)ðō]è‹D;C|‹+Eè‰G‹D+Cë(¹@#õ)òÁâ‹+EèH‰G‹D+Eìʚ;‰G ¹8#õ)ðÁà‹‰‹D‰Gõ)ðÅº$#ƒ<ÿtƒì ÿ4ÿ¨á#ƒÄ‹Eƒxu
-ƒx „þº8#õ)ð ŋ]‹‰
-‹C‰D
-÷E t¸@#‹S‰‹S ‰Tëmvƒ}äuƒìEèPjèøEƒÄõ)ð ō‘@#‹Eè‹]C‰@#‹EìC ‰B…Àyÿ‰@#Bʚ;ëzÿɚ;~ ÿjʚ;õ)ðVh<v"ÿ4ÅD#ÿ4Å@#ÿ¤á#‰ÃƒÄƒûÿuƒìÿ5Ìá#jè­öÿÿƒÄõ)ð‰Å4#û¸eô[^_]ÃU‰åWVSƒì ‹]‹} ƒûwúÝ)؃<ÅP#uûèzˆÇ¸ÿÿÿÿ鷉öÝ)؃<Å4#ÿuÇG ÇGëoƒìEèPjèÒDƒÄ¹@#Ý)؍ōuè‹D;F|‹+Eè‰G‹D+Fë'¹@#Ý)ÚÁâ‹+EèH‰G‹D+Eìʚ;‰G ¹8#Ý)ØÁà‹‰‹D‰Gû¸eô[^_]ÍvU‰åƒìƒ}t藇Çëv臇ǸÿÿÿÿÉÉöU‰åƒìƒ}tèg‡Ç¸ÿÿÿÿë‰öƒì ÿu èuÄÿÿ¸ƒÄÉÍvU‰åƒì‹E ƒ}tè,‡Ç¸ÿÿÿÿëv…Àt -ÇÇ@è¸ÉÃU‰åƒì‹UƒúwúÕ)Ѓ<ÅP#uûè܆ǸÿÿÿÿëvÕ)ЋÅL#ûÉÐU‰åWVS¹»$#¿ #¾,#‰öÍ)ÈÁàÇDÿÿÿÿ8#ÇBǍP0Ç:ÇD A‰‰Áƒù~ºÇ¤#ÿÿÿÿÇ ¤#[^_]ÐU‰å]ÍvU‰å¸]ÉöU‰åVSœúX‰Ã¡Ìá#@‰ÂÁâ)¾ â#‹DÖ0©t0©t)ƒì jè"Æÿÿ¡Ìá#@‰ÂÁâ)¿DÖ‰$è"[ƒÄ‰ØPeø[^]ÃU‰åS‹]úût ¸ÿÿÿÿ…ÛuL¡Ìá#@‰ÂÁâ)¹ â#‹DÑ0Áèƒà‹U ‰¡Ìá#@‰ÂÁâ)Õ0‹
-%ÿþÿÿ ؉
-û¸‹$ÉÉöU‰åS‹]úût ¸ÿÿÿÿ…ÛuL¡Ìá#@‰ÂÁâ)¹ â#‹DÑ0Áè ƒà‹U ‰¡Ìá#@‰ÂÁâ)Õ0‹
-%ÿýÿÿ ؉
-û¸‹$ÉÉöU‰åWVSƒì ‹} ÇEðú‹EÇÿÿÿÿÇ@¾;5Äá#s9v‹µ`â#ƒ{u ƒìWVÿS,ƒÄ…ÀxƒìWÿuVÿS0‰EðƒÄF;5Äá#rÊû‹Eðeô[^_]ÉöU‰åƒì‹U¸ƒ:ÿt ¸ƒzu‹‹…`â#ƒìRÿ2ÿP4ƒÄÉÍvU‰åƒì‹U¸ƒ:ÿt‹‹…`â#ƒìRÿ2ÿP8ƒÄÉÉöU‰åƒì‹U¸ƒ:ÿt‹‹…`â#ƒìRÿ2ÿP<ƒÄÉÉöU‰åƒì‹U¸ƒ:ÿt‹‹…`â#ƒìRÿ2ÿP@ƒÄÉÉöU‰åVS‹u‹µâ#ƒìÿ°ôhy4#è^j»ƒÄ‰ö[‰ÐÁà)ÐÁà9°¤â#……ƒÀ º â#f|€ttfƒ|tlƒì f‹Dfƒøwƒì ·ÀPè ¨ƒÄë%v·Ð¸S4#ú€t¸_4#út¸k4#P[‰ÐÁà)ÐÁàÿ°tå#´â#PShà4#è¹iƒÄ Cû™ŽUÿÿÿeø[^]ÉöU‰åWVSƒì ‹E‹…â#‰Eð‹¸üƒì ‹Uð‹‚ðøPèo§‰ÆƒÄƒþÿu -¸ÿÿÿÿ…ÿtrOëՐv‰ÐÁà)Ѝ ÅöÑâ#tRQ@»¬â#ƒ<D‹„å#‰ƒìý‰Ø‹Uð‚ðPVè\¥ƒÄ‹Eð˜ðSV腦ƒÄéiÿÿÿ‰ðeô[^_]ÉöU‰åWVSƒì‹E‹…â#‰Eð‹Mƒy(…©‹=Ìá#‰ÐÁà)Ѝž¤â#‹U93…‹M I‰ÂÁâ)ÂÁ⋄Љ„й¬â#‹D@‰D@‹„à‰„àƒÂ0¹ â#‹
-%ÿ÷ÿÿ‹\0ã ؉
-‹UðƒÂ¸ƒ¼º€ÿ•ÀH‹] ‰„š€é¢v‹U R‰ÂÁâ)ÂÁ⻤â#‹A‰„Ѓyt‹A‰‚ìâ#‹A‰„àë-‰ö‹] [‰ÐÁà)ÐÁà‹]ð‹“ô‰ìâ#‹“ô‰„å#ƒy$u‹E @‰ÐÁà)Ё ÅÐâ#¸ƒy ”ÀH‹U ‹Mð‰„‘ˆ¸ƒÄ[^_]ÃU‰åWVSƒì ‹U‹<•â#ƒ¿t8LJƒì‹E @‰ÐÁà)ЋÅtå#‹—ðÂPÿu 詤酋E @‰ÐÁà)ЍÅöƒÑâ#t?K@¾¬â#ƒ<11º¤â#‹1„à‰1ƒì‹„Ћ—ðÂPÿu èK¤ë*ƒì‹E @‰ÐÁà)ЋÅtå#‹—ðÂPÿu è³£ƒÄ‹E @‰ÐÁà)ÐfÇÅÈâ#€eô[^_]ÐU‰åWVSƒìH‹]ÇE¼ÇEÀfÇEÄÇEÈÇEÌÇEÐÇEÔÇEØÇEÜÇEà¶Ã -f‰E¸‹â#‹€ø‰EÈÇE̍E¸jjPhô"h…4#è-¬ÿÿ‰ÆƒÄ ƒþÿuƒì h 5#èVËÿÿƒÄ‹<â#v‰ÐÁà)Ðfƒ<ÅÈâ#tµ€Gƒ<ÿtJÿëE‰öƒìv‰ÃÁã)ÃÁ㍃äâ#PjèJ;fǃÈâ#€ƒÄ‹ƒtå#‹—ðÂPVè䢃čeô[^_]ÐU‰åWVSƒì‹}hŠ4#è¾ÊÿÿèÆÿÿ‰EðƒÄ hPh 4#è£ÊÿÿÇ$èwÉÿÿ‰ÃƒÄSh¾4#è‡Êÿÿ‹Eð‰…â#ƒÄ jhÊ4#Sè=efÇCÆCÇCä‰"ÇCŠ"ÇC Ø"ÇC$¸€"ÇC(Š"ÇC,x"ÇC0(Š"ÇC40Š"ÇC8<Š"ÇC<ð‚"ÇC@|Š"ÇCD‹"ÇCHP‹"ÇCLX‹"ÇCPð‹"ÇCT8Œ"ÇCXlŒ"ÇC\P"ÇC`p"ÇCdˆ"ÇCh "ÇCl¸"ÇCpЍ"ÇCtè"ÇCxŽ"ÇC|Ž"ǃ€0Ž"ǃ„HŽ"¸ƒÄS‰öDŽ‚€ÿÿÿÿ@=™~í‹EH‰ƒüƒì ‹EÁàPè@Èÿÿ‰ƒð¾ƒÄ;u}ƒì ‹ƒððPèꟃÄF;u|åÿçw¿èÿ ¡v¿ ¡‰»ô‹E‰ƒøƒ} tƒìjÿuðhìƒ"è8ÃÿÿƒÄeô[^_]ÐU‰åWVSƒì ‹M‹u ‹]‹â#‰Eð…Éx[; -Ðá#sS‹â#‹@%ÿÿÿ=u=þ™wv‰ÐÁà)Ðfƒ<ÅÈâ#u -¸éèvv‰ÐÁà)Ð9 Ťâ#t -¸&éȍv…Ûuv‰ÐÁà)Ё ÅÐâ#ë)ƒûuv‰ÐÁà)Ё$ÅÐâ#ÿ÷ÿÿë ¸郉öv‰ÐÁà)ÐÁà˜Ð¿¤â#‹U9;t\f¸Èâ#€u=ƒì‹;‹Mð‹‘ðÂPV蜞‹E‰;ƒÄ‹Uð‹‚ð‹MÈPV蹟ƒÄëv‰ÐÁà)ЋU‰Åtå#¸eô[^_]ÍvU‰åVS‹M‹4â#…Éx; -Ðá#s‹â#‹@%ÿÿÿ=t¸ÿÿÿÿëw¡Ìá#@‰ÂÁâ)¸ÿÿÿÿ9 Õ¤â#uZúè!P‹Ìá#R‰ÑÁá)Ñ» â#f‰DËdžèX­ÿÿ¡Ìá#@‰ÂÁâ)ƒì ¿DÓPèçOè>·ÿÿƒÄû¸eø[^]ÉöU‰å‹E‹…â#‹€ü]ÍvU‰å‹E‹…â#‹€ô]ÍvU‰åS‹]‹M …ÛxU;Ðá#sM‹â#‹@%ÿÿÿ=u7ù™wI‰ÐÁà)Ðfƒ<ÅÈâ#u¸ëMI‰ÐÁà)Ð9Ťâ#t ¸&ë3‰öI‰ÁÁá)ÁÁá¸öÑâ#”À‹U‰‹‘tå#‹E‰¸‹$ÉÉöU‰å‹E f8t·‹E -9Âu¸ë¸ÿÿÿÿ]ÐU‰å¸ÿÿÿÿ]ÉöU‰å¸]ÉöU‰å]ÍvU‰å¸]ÉöU‰åSƒì ‹E‹M ‹…â#I‰ÐÁà)ЋÅtå#‹“ðÂPQè;œƒÄ‹]üÉÍvU‰åWVSƒì ‹E‹u ‹<…â#v‰ÐÁà)Ðfƒ<ÅÈâ#tµ€Gƒ<ÿtHÿëCƒìv‰ÃÁã)ÃÁ㍃äâ#PjèR5fǃÈâ#€ƒÄ‹ƒtå#‹—ðÂPVè윃čeô[^_]ÐU‰åSƒì ‹E‹M ‹…â#I‰ÐÁà)ÐÁàfǀÈâ#€‹€tå#‹“ðÂPQ蠜ƒÄ‹]üÉÃU‰å]ÍvU‰åWVSƒì ‹U‹•â#‰Eð‹U <•€‰ÆƒÆƒ<7~MƒìR‰ÃÁã)ÃÁ㍃äâ#Pjè‹4ÿ 7ƒÄ‹ƒtå#‹Mð‹‘ðÂPÿu 躛fǃÈâ#€ƒÄë‹E @‰ÐÁà)ÐfÇÅÈâ#eô[^_]ÐU‰åƒì‹E‹M ‹…â#ƒÀDŽˆ€ÿÿÿÿI‰ÐÁà)ÐfÇÅÈâ#hDâ#QèðÉÿÿƒÄÉÍvU‰å‹E‹U ‹…â#ƒÀDŽ€R‰ÐÁà)ÐfÇÅÈâ#]ÃU‰åWVSƒì4‹u v‰EäÁà+EäfÇÅÈâ#EèPjè“3Mè»@B‹Eº÷ó‰Uà’€€‰E܋A‹U܍ЉE؉A»¡/¸D÷ë‰ÓÁû‹EØÁø)ÿƒÞC‹E÷ç‰×‰øÁèEè‹A»Êš;™÷û‰Ó‰YƒÄVh`Ž"ÿuìÿuèÿ¤á#‰ÃƒÄƒûÿuƒìÿ5Ìá#jèAäÿÿƒÄ v‰ÈÁà)ȉŀå#eô[^_]ÐU‰åƒìÿ5Ìá#jèäÿÿ¸ƒÄÉÍvU‰åƒìÿ5Ìá#jèñãÿÿƒÄÉÃU‰åƒìÿ5Ìá#jèÙãÿÿƒÄÉÃU‰åƒìÿ5Ìá#jèÁãÿÿƒÄÉÃU‰åƒìÿ5Ìá#jè©ãÿÿƒÄÉÃU‰åƒìÿ5Ìá#jè‘ãÿÿƒÄÉÃU‰åƒìÿ5Ìá#jèyãÿÿƒÄÉÃU‰åƒìÿ5Ìá#jèaãÿÿƒÄÉÃU‰åƒìÿ5Ìá#jèIãÿÿƒÄÉÃU‰åƒìÿ5Ìá#jè1ãÿÿƒÄÉÃU‰åƒìÿ5Ìá#jèãÿÿƒÄÉÃU‰åWVSƒì‹MI‰ÃÁã)ÃÁ㺤â#‹‹4…â#¿ â#fÇD(€‹„Ћ–ðÂPQè=™Ç„àÿÿÿÿèQœÿÿƒÄeô[^_]ÉöU‰åVSƒì h@6#è
-Áÿÿè]¼ÿÿ‰ÆÇ$Œè׿ÿÿ‰Ã‰µâ#ƒÄ jhØ5#Sè®[fÇCÆCÇC "ÇC@"ÇC L"ÇC$t"ÇC(ÇC,Œ"ÇC0˜"ÇC4 "ÇC8¬"ÇC<´"ÇC@А"ÇCDø"ÇCH ‘"ÇCLH‘"ÇCPp‘"ÇCT˜‘"ÇCXÀ‘"ÇC\è‘"ÇC`’"ÇCd<’"ÇChd’"ÇClŒ’"ÇCp´’"ÇCtܒ"ÇCx“"ÇC|,“"ǃ€T“"ǃ„|“"ǃˆÿÿÿÿÇ$ã5#èô¿ÿÿƒÄ jVh¤“"è,ºÿÿƒÄeø[^]ÉöU‰å‹M‹E ‹â#fƒ8t·9Èu¸ƒºˆÿt¸ÿÿÿÿ]ÉöU‰å¸ÿÿÿÿ]ÉöU‰åƒì‹E‹…â#ÿ°ˆhE5#èìYƒÄÉÍvU‰å‹E‹…â#‹€ˆ]ÍvU‰å¸]ÉöU‰å]ÍvU‰å¸]ÉöU‰å]ÍvU‰å‹E @‰ÂÁâ)ÂfÇÕÈâ#]ÃU‰åƒìhT5#èxYƒÄÿ5Ìá#j è„àÿÿƒÄÉÍvU‰åƒìh[5#èPYƒÄÿ5Ìá#j è\àÿÿƒÄÉÍvU‰åƒìhb5#è(YƒÄÿ5Ìá#j è4àÿÿƒÄÉÍvU‰åƒìhi5#èYƒÄÿ5Ìá#j è àÿÿƒÄÉÍvU‰åƒìhp5#èØXƒÄÿ5Ìá#j èäßÿÿƒÄÉÍvU‰åƒìhw5#è°XƒÄÿ5Ìá#j è¼ßÿÿƒÄÉÍvU‰åƒìh~5#èˆXƒÄÿ5Ìá#j è”ßÿÿƒÄÉÍvU‰åƒìh…5#è`XƒÄÿ5Ìá#jèlßÿÿ¸ƒÄÉÉöU‰åƒìhŒ5#è4XƒÄÿ5Ìá#jè@ßÿÿƒÄÉÍvU‰åƒìh“5#è XƒÄÿ5Ìá#jèßÿÿƒÄÉÍvU‰åƒìhš5#èäWƒÄÿ5Ìá#jèðÞÿÿƒÄÉÍvU‰åƒìh¡5#è¼WƒÄÿ5Ìá#jèÈÞÿÿƒÄÉÍvU‰åƒìh¨5#è”WƒÄÿ5Ìá#jè ÞÿÿƒÄÉÍvU‰åƒìh¯5#èlWƒÄÿ5Ìá#jèxÞÿÿƒÄÉÍvU‰åƒìh¶5#èDWƒÄÿ5Ìá#jèPÞÿÿƒÄÉÍvU‰åƒìh½5#èWƒÄÿ5Ìá#jè(ÞÿÿƒÄÉÍvU‰åƒìhÄ5#èôVƒÄÿ5Ìá#jèÞÿÿƒÄÉÍvU‰åƒìhË5#èÌVƒÄÿ5Ìá#jèØÝÿÿƒÄÉÍvU‰åSƒì0‹]ÇEÜÇEàfÇEäÇEè¶Ãf‰EØÇEìEØjjPh0”"hÒ5#趜ÿÿƒÄ ‹â#‰Ã‰šˆƒûÿuƒì h6#èÒ»ÿÿƒÄ[‰ÐÁà)ÐÇÅØâ#ÿÿÿÿ‹]üÉÐU‰åôëýU‰åWVSƒì ‹} ¾ú»ëvCûÿ2Ý)ØÁàº@¤#€|t߃ìÿ4ÿuèaVƒÄ…Àuʾ…öt1ÿÀuèðnÇûéÜûÝ)؍…D¤#éˉö÷Ç@uè¿nÇû髍v‹E‰Eð=ÿ~èžnÇû銉ö‹Å#ƒúÿtqÕ)Ѝ<…w‹†D¤#£Å#ƒì ÿuèV@‰$臹ÿÿ»@¤#‰ƒÄÿuPè7U‹Eð‰‡H¤#‡L¤#‰$è,‘ÆDƒÄû‡D¤#ëvènÇû¸eô[^_]ÍvU‰åWVSƒì ¾ú¿»@¤#vý)øÁà€|tƒìÿ4ÿuèUƒÄ…Àu¾Gÿÿ~ʅötJƒì ÿuèOUƒÄ@Pý)ûÁã¾@¤#ÿ43è%¹ÿÿƒÃÆD3¡Å#‰ƒD¤#‰=Å#ƒÄûë‰öèSmÇû¸eô[^_]ÍvU‰åWVSƒì ‹}?ÿw‹Õ)Ѐ<…X¤#uèmǸÿÿÿÿé‰öèÏæÿÿúè5B‹Ìá#R‰ÑÁá)Ñf‰ͨâ#‹Õ)Ѝ4…@¤#ƒ~ ÿu
-ƒ~…“ƒìWjÿÐ]#ƒÄh„â#jè8)ƒÄU衈â#;Øá#|¡„â#+Ôá#‰E衈â#+Øá#ë!‰ö¡„â#+Ôá#H‰E衈â#+Øá#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыÌá#R‰ÐÁà)Ð) Åìâ#ƒì Qèú›ÿÿƒÄƒ=Üá#ÿtƒì ÿ5Üá#ÿ¨á#ÇÜá#ÿÿÿÿƒÄ‹ -Ìá#I‰ÐÁà)ЋŤâ#ƒì‹…â#QPÿRH‹ -Ìá#I‰ÐÁà)л â#fÇDÃ(Íǂ@À#‹‰‚DÀ#ƒÄF PQèÇÌá#ÿÿÿÿÇàá#ÿÿÿÿèõÿÿ¡Ìá#@‰ÂÁâ)¿DÓ‰$è…@èܧÿÿƒÄûèÿäÿÿë8ÿNƒìWjÿÐ]#¡Ìá#@‰ÂÁâ)¿ըâ#‰$èF@蝧ÿÿƒÄû¸eô[^_]ÃU‰åWVSƒì ‹}‹]?ÿw‹Õ)Ѐ<…X¤#uè¯jǸÿÿÿÿéVv…ÛuúëúèÒ?‹Ìá#R‰ÑÁá)Ñf‰ͨâ#‹Õ)Ѝ4…@¤#…Ûu0ƒ~ ÿu‹E 9F}èMjÇ û¸ÿÿÿÿéó‹E )Fûéâèäÿÿƒ~ ÿu ‹E 9F‘ƒìWjÿÐ]#ƒÄh„â#jèš&ƒÄU衈â#;Øá#|¡„â#+Ôá#‰E衈â#+Øá#ë¡„â#+Ôá#H‰E衈â#+Øá#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыÌá#R‰ÐÁà)Ð) Åìâ#ƒì Qè^™ÿÿƒÄƒ=Üá#ÿtƒì ÿ5Üá#ÿ¨á#ÇÜá#ÿÿÿÿƒÄ‹ -Ìá#I‰ÐÁà)ЋŤâ#ƒì‹…â#QPÿRH‹ -Ìá#I‰ÐÁà)л â#fÇDÃ(͋E ‰‚@À#‹‰‚DÀ#ƒÄF PQè'ÇÌá#ÿÿÿÿÇàá#ÿÿÿÿèZ›ÿÿ¡Ìá#@‰ÂÁâ)¿DÓ‰$èê=èA¥ÿÿƒÄûèdâÿÿë<‰ö‹E )FƒìWjÿÐ]#¡Ìá#@‰ÂÁâ)¿ըâ#‰$è§=èþ¤ÿÿƒÄû¸eô[^_]ÐU‰åWVSƒì ‹}?ÿw‹Õ)Ѐ<…X¤#uèhǸÿÿÿÿéU‰öè,…À„‡œúX‰Æ‹Õ)Ѝ…@¤#‹JA‰J‹Z ƒûÿtG‹Ý@À#9È<)Á‰È‰BƒìB PSèʊ[‰ÐÁà)ЋŤâ#ƒÄ‹•â#SRÿPDèÿÿƒÄƒìWjÿÐ]#ƒÄ‰ðPé¼‰öúèª<‹àá#R‰ÑÁá)Ñf‰ͨâ#‹Õ)Ѝ…@¤#‹JA‰J‹Z ƒûÿtG‹Ý@À#9È<)Á‰È‰BƒìB PSè*Š[‰ÐÁà)ЋŤâ#ƒÄ‹•â#SRÿPD荙ÿÿƒÄƒìWjÿÐ]#¡Ìá#@‰ÂÁâ)¿ըâ#‰$è <èb£ÿÿƒÄû¸eô[^_]ÐU‰åWVSƒì ‹] ÇEð‹E8ÿw‹Õ)Ѐ<…X¤#uèlfǸÿÿÿÿéÊèc*…À„ÃœúX‰Â‰Uì‹E‹Õ)Ѝ4…@¤#^‹^ ƒûÿts݉‹€@À#;F_¿@À#ÇEðv‹F+:‰FƒìF PSè
-‰[‰ÐÁà)ЋŤâ#ƒÄ‹•â#SRÿPD‹^ ƒÄƒûÿt݋:;F~°ƒìÿujÿÐ]#ƒÄƒ}ðtèÿÿ‹Uì‰ÐPéõúèÊ:‹àá#R‰ÑÁá)Ñf‰ͨâ#‹E‹Õ)Ѝ4…@¤#^‹^ ƒûÿtr݉‹€@À#;F^¿@À#ÇEð‰ö‹F+:‰FƒìF PSè2ˆ[‰ÐÁà)ЋŤâ#ƒÄ‹•â#SRÿPD‹^ ƒÄƒûÿt݋:;F~°ƒìÿujÿÐ]#ƒÄƒ}ðtèd—ÿÿ¡Ìá#@‰ÂÁâ)ƒì ¿Õ¨â#Pèð9èG¡ÿÿƒÄû¸eô[^_]ÉöU‰åWVSƒì ¾¿D¤#õ)óÁãǃ@¤#‰4;ǃH¤#ƒì ƒL¤#PèF‡ƒÃF‰;ƃH¤#ƒÄ‰Æþÿ~±Ç8À#ÿÿÿÿÇÅ#ƒìjhä¢"è:ªÿÿƒÄeô[^_]ÍvU‰åVS‹uú>ÿw‹Õ)Ѐ<…X¤#uèÉcÇû¸ÿÿÿÿënvƒì ‹Õ)л@¤#ÿ4ƒèUKƒÄ@P‹Õ)Ðÿ4ƒè1¯ÿÿ‹Õ)ÐÆDƒ‹Õ)ЋÅ#‰…T¤#‹£Å#ƒÄû¸eø[^]ÉöU‰åƒì‹Mú9ÿw‹Õ)Ѐ<…X¤#uècÇû¸ÿÿÿÿëb‰ö‹Õ)Ѓ<…L¤#ÿtèîbÇû¸ÿÿÿÿë8‹Õ)ÐÆ…X¤#‹Õ)ЋÅ#‰…T¤#‹£Å#û¸ÉÉöU‰åSƒì‹M‹] 9ÿw‹Õ)Ѐ<…X¤#uèubǸÿÿÿÿë_ú‹Õ)ÐÁàƒ¸L¤#ÿu ‹€H¤#‰ë7‰öÇ‹Õ)Ћ…L¤#¹¨â#vÿ @‰ÐÁà)ЋDÁPƒøÿuëû¸‹]üÉÃU‰åVS‹u‹M¸ùÿ‡–ú‹Å#‰ƒúÿtnÕ)Ћ…T¤#£Å#‹Õ)л@¤#ǃ‹Õ)Љ …H¤#ƒì ‹Õ)Ѝ…L¤#P腄‹Õ)ÐÆDƒƒÄëègaÇû¸ÿÿÿÿëû¸eø[^]ÍvU‰åƒì‹M9ÿw‹Õ)Ѐ<…X¤#uèaǸÿÿÿÿë=ú‹Õ)Ѝ…@¤#ƒx ÿuƒxuèì`Ç û¸ÿÿÿÿë ‰öÿHû¸ÉÐU‰å‹E@‰ÂÁâ)¸fƒ<ÕÈâ#”À]ÐU‰åVS‹][‰ÐÁà)Ѝ4Åfƒ¾Èâ#uAƒì‹ÝDÀ#Õ)Ѝ…L¤#PS脃‹†¤â#ƒÄ‹…â#SPÿRD¸ƒÄ됸eø[^]ÃU‰åVSƒ=Ü]#…ÚÇÜ]#¹»`¨%¾d¨%‰ÁàP ÆÇ2ÿÿÿÿÆDAƒùváƒìjjh Å#èÜýÿÿ¹ƒÄ¾Äª%»Àª%‰ö‰ÁàQ‰0Ɖуù -véÇô¬%ÿÿÿÿÆð¬%Ǹª%¹¾$­%» ­%vÍ)ÈÁàQ‰0ƉуùvãÇP°%ÿÿÿÿÆL°%Çh°%eø[^]ÐU‰åWVSƒìŠEˆEóŠUˆUòfÇEæ¾<u€út €}óu€}òuè_Ǐ¸ÿÿÿÿé7‰öúƒ=¸ª%ÿuèí^ǍûÇEìÿÿÿÿ됡¸ª%€‹ÕĪ%‰¸ª%û‰Eìƒ}ìÿu -¸ÿÿÿÿéìvƒì h Å#ègñÿÿƒÄ‹]¾¹º÷ñ‰×ëf‰ö¿€<ŀ¨%t0ƒìÿu¿ōƒ`¨%Pè³EƒÄ…Àu€»x¨%„Ÿ¾ëG¹‰øº÷ñ‰×fÿEæfƒ}懜‰ó„Ût–¿Áãƃ€¨%ƒìÿuƒ`¨%Pè÷D‹E쉃t¨%ƒÄ€}óu‰Â’‹] f‰ÅȪ%ëv‹E썀‹E ¯Ef‰ÕȪ%úƒì ‹U썒Á㷃Ȫ%PèݨÿÿºÌª%‰ƒÄû…Àu%è”]ǒƒì h Å#èAõÿÿ¸ÿÿÿÿ魍v‹E썀ÁãS‰Uà¾Àª%‹ƒÌª%‰‚Ī%‰2ƒìjjƒÜª%Pè:ûÿÿƒÄ ·D3Pjƒàª%Pè#ûÿÿƒÄ jjÃäª%SèûÿÿŠ]ó‹Eàˆ\0ƒÄúƒ=h°%ÿuèø\ǎûÇEèÿÿÿÿë¡h°%Å)‹•$­%‰h°%û‰Eèƒ}èÿu_ƒì h Å#èvôÿÿ‹Eèéä‰öè§\ǐƒì h Å#èTôÿÿ¸ÿÿÿÿéÀ‰öèƒ\Ǒƒì h Å#è0ôÿÿ¸ÿÿÿÿ霉ö‹EèÁà+EèÁ๠­%ŠUòˆT P‹]ì‰
-‹] f‰\
-ǀ$­%ÿÿÿÿ‰º(­%‹]썛ÆÕÀª%ƍ¿ōr¿`¨%€|>t%ƒì¶D>Pš|¨%SèGõÿÿÆD>‰$èšøÿÿƒÄƒì h Å#èŽóÿÿ¿EèƒÄeô[^_]ÍvU‰åWVSƒìŠEˆEóŠ]ÇEè¿ÆEç<u„Ût €}óu€ûuè‚[Ǐ¸ÿÿÿÿé0‰öúƒ=h°%ÿuèa[ǎûÇEìÿÿÿÿë ¡h°%Å)‹•$­%‰h°%û‰Eìƒ}ìÿu ¸ÿÿÿÿéߐ‹EìÁà+EìÁຠ­%ˆ\ ‹M f‰Lǀ$­%ÿÿÿÿƒì h Å#è°íÿÿƒÄ‹U¾¹º÷ñ‰Öë]v¶€<ŀ¨%u ¿ÆEçë8ƒìÿu¶Å`¨%PèöAƒÄ…Àu¿ëF¹‰ðº÷ñ‰ÖÿEèƒ}è‡Ò‰ù„Ét €}çuR¶Áã¸`¨%ÆD ÆDƒìÿuPè>AƒÄ jjÃ|¨%Sè/øÿÿÇ$ Å#èçñÿÿƒÄ jjSè:ïÿÿëM¶ōCº`¨%€|t'þDƒì h Å#è®ñÿÿƒÄ jjƒ|¨%Pèûîÿÿ됃ì h Å#è‹ñÿÿƒÄ¶‹<Åt¨%¿ŠUó:Åت%tèªYǓ¸ÿÿÿÿéX‰ö€}óu¿·ÅȪ%9E u€}ót(¿·ÅȪ%™÷} …ÒtèdYǔ¸ÿÿÿÿéƒì h Å#è ìÿÿ¶‹ń¨%ƒÄƒúÿ„­€}óu#è&YǕƒì h Å#èÓðÿÿ¸ÿÿÿÿéЍÕ)з…4­%9E t"èíXǔƒì h Å#èšðÿÿ¸ÿÿÿÿ鋋MìÁá+M썶Å »d¨%‹‰$­%‹Mì‰ ë/‰öèŸXǑƒì h Å#èLðÿÿ¸ÿÿÿÿë@¶‹Uì‰ń¨%ƒì h Å#è*ðÿÿ‹EìÁà+EìÁàH‰±(­%º ­%‰<Æ¿EìƒÄeô[^_]ÉöU‰åWVSƒì¿E‰Eì‰ÇÁç)ÇÁ獗 ­%‰Uðh Å#èÏêÿÿ‹Mð‹Y›ÁãC‰Eèºd¨%‹€Áà°Àª%ƀÀª%F‰$èôÿÿF ‰$è„ôÿÿF$‰$èyôÿÿƒÄú·FPÿv èX£ÿÿû¹d¨%‹Eè‹ú ’¡¸ª%‰ÍĪ%‰¸ª%ûƇ ­%ƒÃ ‹Uð‹B‰ƒd¨%ú¡h°%‰‡$­%‹Mì‰ -h°%ûƃ`¨%Ç$ Å#è
-ïÿÿƒÄeô[^_]ÍvU‰åWVSƒì ‹u ŠM¿UÕ)Ѝ… ­%‰Eð‹@€ÅÀª%‹Eð€x uèûVǔ¸ÿÿév€;uèÞVǖ¸ÿÿéù‰ö€{tQ€{u,ƒì¶ÁP‹Uð·BPC PèÈëÿÿƒÄ…Àt;¸évƒì¶ÁP‹Uð·BPC PèœëÿÿƒÄ…ÀuÔƒì CPè-éÿÿƒÄ‹Uð·B‹{‰ÁÁéüó¥¨tf¥¨t¤·B‰ÁK‰K·S‰ÐC 9Ár‰È)ЉC€{u ƒì CPë8‰ö€{uƒì‹Uð·BPC$PèZïÿÿëƒì‹Uð·BPC$PèDïÿÿC‰$èíÿÿƒÄ¸eô[^_]ÐU‰åWVSƒì ‹} ŠM¿UÕ)Ѝ… ­%‰Eð‹@€ÅÀª%‹Eð€x uè‹Uǔ¸ÿÿév€;uènUǖ¸ÿÿéù‰ö€{tQ€{u,ƒì¶ÁP‹Uð·BPC$PèXêÿÿƒÄ…Àt;¸évƒì¶ÁP‹Uð·BPC$Pè,êÿÿƒÄ…ÀuÔƒì CPè½çÿÿƒÄ‹Uð·B‹s‰ÁÁéüó¥¨tf¥¨t¤·B‰ÁK‰K·S‰ÐC 9Ár‰È)ЉC€{u ƒì CPë8‰ö€{uƒì‹Uð·BPC Pèêíÿÿëƒì‹Uð·BPC PèÔíÿÿC‰$è-ìÿÿƒÄ¸eô[^_]ÐU‰åSƒìh_6#è;ƒÄÿ5¸ª%hk6#è;»ƒÄÝ)ØÁà€¸ ­%t8 ­%‹B€ÅÀª%ƒì ÿp ÿp$‹B€Å`¨%PSh6#è®:ƒÄ Cƒûv­‹]üÉÃU‰åƒì`¿MÍ)ȋ…0­%’ÅÀª%ÿp ÿp$RQh 6#E¨Pèf:ƒÄ ÉÐU‰åSƒì‹]h Å#èHæÿÿ¿ÓÕ)Ѝ …‹8­%€Å ƒÄ€º`¨%u ‹$­%‰‚d¨%¿ÃÅ)ÂÁâƂ ­%ú‹ -h°%‰Š$­%£h°%ûƒì h Å#èÓêÿÿƒÄ‹]üÉÍvU‰åWVSƒì ‹u ‹E‹<…`â#ú‹^…Ûu-ƒì j èžÿÿƒÄ…ÀtÇÿÿÿÿÇ@Ç@ÿÿÿÿ‹U‰‰F‹;Ìá#u û¸#é~ƒ;ÿtc¾ â#‰ö‹ -Ìá#I‰ÐÁà)Ћ‰TÆP‹C‰„¬¡Ìá#‰CÿCè…ÿÿ¡Ìá#@‰ÂÁâ)ƒì ¿DÖPèŸ'èöŽÿÿƒÄûúƒ;ÿu¤¡Ìá#ÿD‡D¡Ìá#‰û¸eô[^_]ÉöU‰åWVSƒì ‹E ‹x¸…ÿ„À‹;Ìá#tû¸髍vúè*'‹Ìá# [‰ÊÁâ)Êf‰Õ¨â#‹E‹…`â#ÿL˜DÇÿÿÿÿ‹_ÇGÿÿÿÿƒûÿt-p ‰Ù[‰ÐÁà)ЉÅðâ#‹œž DŽŽ ÿÿÿÿƒûÿuÖÇGè„ÿÿ¡Ìá#@‰ÂÁâ)ƒì ¿Õ¨â#Pè¢&èùÿÿƒÄû¸eô[^_]ÃU‰åVSƒì h7#è~ÿÿè -™ÿÿ‰ÆÇ$èKœÿÿ‰Ã‰µ`â#ƒÄ jh7#Sè"8fÇCÍÆCÇCÇC$³"ÇC p³"ÇC$|³"ÇC(„³"ÇC,´³"ÇC0à³"ÇC4(´"ÇC8ˆ°"ÇC<p´"ÇC@p±"ºƒÄsK •ÇD@DŽ ÿÿÿÿBú™~ݍeø[^]ÉöU‰åVS‹E‹…`â#ƒì hà6#è7¾ƒÄƒÃƒìÿt³@hÿ6#èû6ƒÄFþ™~ãeø[^]ÃU‰å¸ÿÿÿÿ]ÉöU‰å]ÍvU‰åƒì‹E‹U ‹…`â#ƒÀƒ|@tƒìRj
-èȽÿÿƒÄÉÍvU‰å‹U :t ‹E -9u
-¸ëv¸ÿÿÿÿ]ÐU‰åSƒì‹] j èӚÿÿ‰ÂƒÄ¸ …Òt!ÇÿÿÿÿÇBÇBÿÿÿÿ‹E‰‰S¸‹]üÉÍvU‰åSƒì‹] ‹Cƒxt ¸ë&‰öúƒ{tƒìj ÿsèäšÿÿÇCƒÄû¸‹]üÉÍvU‰åWVSƒì ‹}‹u ú‹^…Ûu*ƒì j è3šÿÿƒÄ…ÀtÇÿÿÿÿÇ@Ç@ÿÿÿÿ‰>‰Fƒ;ÿt
-û¸ë"‰ö¡Ìá#‹½`â#ƒÂÿD‚@¡Ìá#‰û¸eô[^_]ÃU‰åWVSƒì ‹E ‹U‹•`â#ú‹p¸…ö„V‹;Ìá#u û¸#éA‹Ìá#‹F ¿ â#;„“°v -¸é v¡Ìá#‹Œƒ°‹“¬…Òt‰ö‹;Ìá#…Š‹R…Òu븅À…†‹ -Ìá#I‰ÂÁâ)‹ƒ¬‹‰D×P‹ƒ¬‹@‰„‹‹“¬¡Ìá#‰B‹ƒ¬ÿ@èj€ÿÿ¡Ìá#@‰ÂÁâ)ƒì ¿D×Pèù"èPŠÿÿƒÄûúéRÿÿÿ‰ö¸;J ’Àérÿÿÿ‹E‹…`â#¡Ìá#ÿDƒD¡Ìá#‰¹‹ƒ¬‹V ë‰ö‰Á‹A…Àt;P sò…Ét‰q됉³¬…Àt‰p‰F‰Nû¸eô[^_]ÍvU‰åWVS‹}‹E ‹ ½`â#ú‹X¸…Û„Ù‹;Ìá#uû¸#éčv‹Ìá#‹C ;„‘°s
-¸饡Ìá#‹´°‹‘¬…Òt‰ö‹;Ìá#u‹R…Òu︅Àuû¸ëk‰ö¸;r ’Àëåv‹ ½`â#¡Ìá#ÿDD¡Ìá#‰¾‹¬‹S 됉ƋF…Àt;P sò…öt‰^됉™¬…Àt‰X‰C‰sû¸[^_]ÉöU‰åWVSƒì ‹E ‹x¸…ÿ„ï‹;Ìá#tû¸éڍvúè&!‹Ìá# [‰ÊÁâ)Êf‰Õ¨â#‹E‹…`â#‰EðÿL˜DÇÿÿÿÿ‹_ÇGÿÿÿÿƒûÿt2‰ÆƒÆv‰Ù[‰ÐÁà)ЉÅðâ#‹œžDŽŽÿÿÿÿƒûÿuÖÇG‹O‹W…Éu -‹Eð‰¬ë‰ö‹G‰A…Òt‹G‰Bèã}ÿÿ¡Ìá#@‰ÂÁâ)ƒì ¿Õ¨â#Pèo èƇÿÿƒÄû¸eô[^_]ÐU‰åVSƒì hD7#èJ—ÿÿèْÿÿ‰ÃÇ$€è–ÿÿ‰Æ‰4`â#ƒÄ jhX7#Vèî1fÇFÌÆFÇFÇF,º"ÇF °º"ÇF$ܺ"ÇF( »"ÇF,T»"ÇF0€»"ÇF4Ø»"ÇF8è´"ÇF<p¶"ÇF@t·"ºƒÄ^N•ÇD@DŽ°ÿÿÿÿDŽÿÿÿÿBú™~Òdž¬eø[^]ÐU‰å‹U‹M ¸ÿÿÿÿ…Òt;‹‹…`â#ƒxu‹@%ÿÿÿ=Ìu…Ét ‹B‹@ ‰ë
-‰ö¸ÿÿÿÿ됸]ÐU‰å‹U‹M¸ÿÿÿÿ…Òt@‹‹…`â#ƒxu‹@%ÿÿÿ=Ìt¸ÿÿÿÿ됅Ét‹B‹@ ‰‹R‹E ‰B ¸]ÃU‰å‹E‹M ‹U‹…`â#‰”ˆ°]ÃU‰åWVSƒì‹E‹<…`â#hà6#è0»ƒÄwƒìÿtž@hÿ6#èó/ƒÄCû™~ãƒì h"7#èÚ/»ƒÄ‰öƒìÿ´Ÿ°h>7#è¼/ƒÄCû™~àeô[^_]ÃU‰å‹U :t ‹E -9u
-¸ëv¸ÿÿÿÿ]ÐU‰åS‹E‹U ‹]‹ …`â#Áâ‹C‰„°ÇD
-D‹$ÉÉöU‰åVS‹E‹u ‹…`â#ƒ|³DtƒìVj
-èD¶ÿÿƒÄë vÇD³DDŽ³°ÿÿÿÿeø[^]ÉöU‰å‹U :t ‹E -9u
-¸ëv¸ÿÿÿÿ]ÐU‰åSƒì‹] jè3“ÿÿ‰ÂƒÄ¸ …Òt1ÇÿÿÿÿÇBÇBÿÿÿÿ‹E‹@‰B ÇB‹E‰‰S¸‹]üÉÍvU‰åSƒì‹] ‹Cƒxt ¸ë&‰öúƒ{tƒìjÿsè4“ÿÿÇCƒÄû¸‹]üÉÍvU‰åWVSƒì$·]Shb7#è .‰Ø-yƒÀÁèƒÄ ·À‰Eè@ÛÁã¿ ½%ÿt8CP‰Eä·8Phi7#èá-ƒÄ ÿt;·D;Phw7#èÊ-ƒÄ ÿt; s·>Phˆ7#è±-ƒÄ ÿt>·D>Ph™7#èš-ƒÄ ‹Uä·D:P·DLPhª7#è~-‹UèÕƒÄ·ØSh»7#èc-EóPEòPEìPS蹃ĶUóR¶UòRÿuìPh8#è6-ƒÄ eô[^_]ÍvU‰åWVSƒì ‹E‹U‹]¹‹u ƒî‰ƒî‰º@&fƒ=@&yA¿Áfƒ<Byfù™~îfù™~ƒì hÐ7#èÎ,¸ƒÄé ¿Á<¹@&‰Úf Ê€f‰Ǎ<ÿÁçº ½%‰tÇD _ÇDfŒÙf‰LfÇfÇDÇD _ ‹M‰ ÇDÇDO0ÇDÇD Ǎ_@ÇÇD‰t‰t fŒÉf‰L fŒÙf‰LfŒÛOPf‰\fŒÛf‰fÇD 0fÇD0O`fÇfÇDfÇDÇŒ½%¾@A&¹üó¥Å˜eô[^_]ÐU‰åVS‹u ¿E-‰Â…ÀyP‰ÐÁø@ÀÁ๠½%f‰tX@Vf‰T f‰t ƒÀPf‰tf‰4[^]ÉöU‰å¿E-‰Â…ÀyP‰ÐÁøfDŽ@&]ÉöU‰åSƒì‹]¿E Phè7#Sè~3‰ØƒÄ‹]üÉÃU‰åVS趉Æès»‰öƒìhÆ"SèƒÄh¤¿"SèìƒÄCƒû~ۉðeø[^]ÉöU‰åƒìèaÉÍvU‰åSƒì‹]‹à]#€82uºð°îƒìShB9#èˆ*ƒÄÁ㋃à]#@PhC#èp*ƒÄÿ³$^#ènƒÄ‹]üÉÉöU‰åƒìÿuhY9#èE*èèûÇ$èG7ƒÄÉÉöU‰åWVSƒì‹E‹} ƒ=d»%„à…ÿ„Ø¡à±%€€€ źm¶‰È÷â‰È)ÐÑ草ÁÁé
-‰O¡ä±%ÀP‰ÐÁà)кè‰Ó™÷û’’’щW¡ä±%ÀP‰ÑÁá)ѾÓMb‰È÷îÁú‰ÈÁø‰Ó)øƒÞC÷o‰ÑÁù‹GÁø)Á‰È؉‹OÁú‰ÈÁø)’’’’’’Áâ)э ‰ ‰ ‰Áá‰O‹éԉö]è¡à±%€€€ źm¶‰È÷â‰È)ÐÑ草ÁÁé
-¡ä±%ÀP‰ÐÁà)кè‰Ö™÷þ’’’щS¡ä±%ÀP‰ÑÁá)ѾÓMb‰È÷îÁú‰ÈÁø)‰Uè‹{¸ƒÞC÷ï‰ÑÁù‰øÁø)Á‰ÈEè‰ùÁú‰ÈÁø)’’’’’’Áâ)э ‰ ‰ ‰Áá‰K‹E荀€€€€€‰ÃÁã‰È÷îÁúÁù)ʍéèvƒøuc¸ƒ=Ô±%…Ρر%€€€€€€‰ÃÁã‹ -ܱ%ºÓMb‰È÷êÁúÁù)ÊӅÿ„…¡Ø±%‰¡Ü±%éqvƒø…ç¶ı%ƒøtƒø…Àt
-ë,ƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹ -б%f)Ù·É -à±%º×®¬]‰È÷êÁú‰ÈÁø)Âä±%’BÁà)Ѝ‚‰ÂÁâ Ð)Á‰È£à±%f‰б%…ÿ„̍€€€ źm¶‰È÷â‰È)ÐÑ草ÁÁé
-‰O¡ä±%ÀP‰ÐÁà)кè‰Ó™÷û’’’щW¡ä±%ÀP‰ÑÁá)ѺÓMb‰È÷êÁú‰ÈÁø‰Ó)Ëw¸ƒÞC÷î‰ÑÁù‰ðÁø)Á‰È؉‰óÁú‰ÙÁù)ʍ’’’’’’Áâ‰Ø)Ѝ€€€Áà‰G‹à±%’’’4Õ¹Á6ۉð÷é‰Ó3‰ÁÁù
-‰ð™‰È)Ћ -ä±%ɍ‘ÑÁâ)ʉÑÁá)эÈ鍃ø…ƒ=Ô±%…rUè¡Ø±%‰¡Ü±%‰B»@¹C°Ò‰Êî‰Úì¶ÈìÁàf¶Ñ зð·`»%9Æv%hf9#j_hx9#h9#èm%Ç$èmƒÄ·`»%)ó¯ȱ%·`»%‰Ø‰Ñº÷ñ‰Ãº °
-îì©t‹ -ȱ%;ÍÌÌ̉ð÷âÁê9Ós‰Ëu荛€€‹V‰Eä‰F¸¡/¸D÷mä‰ÑÁù‹EäÁø)Á‰ÈEè‹N¸¡/¸D÷éÁú‰ÈÁø)’’’’’’’’’Áâ )щN¡Ø±%€€€€€€Áà‰Eä‹ -ܱ%ºÓMb‰È÷êÁúÁù)ʋEäÐÅÿt ‰ð‹‰‹@‰G‰Øëv¸eô[^_]ÍvU‰åVSƒìŠEˆE÷ÿŒ^#ƒ=Œ^#uƒ=h^#tÿh^#¶E÷€Áຌ°%ƒ<uIÇö€°%tûƒì ¶]÷›Áã¾€°%ÿ43ÿ“„°%ƒÄöDtú¶E÷€Ç…Œ°%ÿp^#ƒ=Œ^#uƒ=l^#tÿl^#ÿ -Œ^#eø[^]ÍvU‰åWVSº¿Œ°%¾ˆ°%»„°%¹€°%’ÁàÇ8‰0ÇÇBƒú~ÜÇŒ^#[^_]ÐU‰åVS‹U‹] ‹uú’ƒ<…Œ°%t÷Æu¸ÿÿÿÿëH’ …ǁŒ°%û…Ût‰™„°%º€°%ˆ°%‰‰t
-됍’Ç…Œ°%¸[^]ÐU‰å¡Œ^#]ÉöU‰åSƒì¶ı%ƒøt!ƒø…Àt ë.‰öƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹ -б%f)Ù·É -à±%º×®¬]‰È÷êÁú‰ÈÁø)Âä±%’BÁà)Ѝ‚‰ÂÁâ Ð)Á‰ -à±%f‰б%ÿŒ^#ƒ=Œ^#uƒ=h^#tÿh^#¡Ü±%‰Ã$Å#º¡/¸D‰Ø÷êÁú‰ÙÁù)Êر%’’’’’’’’’Á⠉Ø)Уܱ%‹À±%ë$‹¡Ì±%‰‰̱%‰À±%ƒì ÿrÿRƒÄ‰Ú…Òt‹B ;ر%;ر%uƋB;ܱ%~»ƒ=Œ^#uƒ=l^#tÿl^#ÿ -Œ^#‹]üÉÃU‰åWVSƒì‹uhtÔ"j@èØ -ƒÄƒ>t,ƒì h™9#èß »ÿÿƒÄ¿@¹C°8‰ÊîˆØ‰úîëaƒì hµ9#è³ ‹N‰ -ȱ%ɍA‰ÂÁâ‰Ñ)ÁºÓMb‰È÷âƒÄ‰ÑÁéu¹f‰ -`»%‰Ë¿@¹C°4‰Êî‰úˆØî‰ØfÁèî‹£Ô±%ƒ=ÄA&~»A¹C°p‰ÊÚîîÆı%ë%Æı%»B¹C°°‰ÊÚîîºa°îº!ì%þî¹¾²%»²%ƒùbIÁà²%‰0I‰LÃAƒùc~ßÇH»%Ç̱%²%Çh^#Çl^#¡È±%€€€Áà£$Å#Çܱ%Çر%Çà±%Çä±%fÇб%ƒ=Ô±%uǤá#dË"Ǩá#üË"ëÇ¤á#LÌ"Ǩá#ØÒ"eô[^_]ÃU‰å‹E£h^#]ÍvU‰å‹E£l^#]ÍvU‰å‹E£x^#]ÍvU‰åWVSƒì ‹E‹U ‰Eè‰Uì¸ÿÿÿÿƒ=̱%tl‹ -̱%‹£Ì±%‹E‰A‹Eè‰A ‹Eì‰A‹E‰A»‹À±%}è‹uè됋…Òt‰ð;B  -;B u‹G;B~‰Óëâ‰ö…Ût‰ ë‰ -À±%‰‹AƒÄ [^_]ÐU‰å‹E¹‹À±%됉ы…Òt;Buó¸ÿÿÿÿ…Òt$…Éu
-‹£À±%됋‰¡Ì±%‰‰̱%¸]ÃU‰åWVSƒì,‹E‹U ‰Eè‰Uì¸ÿÿÿÿƒ=̱%„q‹5̱%‹£Ì±%‹E‰F‹Eè‰F ‹Eì‰F‹E‰Fº‹À±%}è‹Mè됋…Ût‰È;C  -;C u‹G;C~‰Úëâ‰ö…Òt‰2鐉5À±%ƒ=d»%…ôƒìEàPjè3óÿÿ‹À±%ƒÄ‹Eà;B  -;B u‹Eä;B~ÇEÜÇEØëK}؋À±%Mà‹B;A|‹B +Eà‰E؉Ћ@+Aë ¡À±%‹@ +EàH‰EØ¡À±%‹@+Eäʚ;‰G‹E؍€€€€€€Áà‰EԋMÜ¿ÓMb‰È÷ïÁúÁù)ÊUԍҍB‰ÂÁâ)‰Ð÷çÁê¸ðúðw¸ÈúÇv‰Ðº@îfÁèFeô[^_]ÃU‰åWVSƒì¶ı%ƒøtƒø…Àt
-ë,ƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹б%f)Ú·Ò‰Ö5à±%¹×®¬]‰È÷î‰ÑÁù‰ðÁø)Á -ä±%‰AÁà)ȍÁ‰ÁÁá ȉò)‰à±%f‰б%]荒’’ Õ¾m¶‰ð÷á‰Ö‰Ê)òÑê2‰ÁÁé
-¡ä±%ÀP‰ÐÁà)кè‰Ö™÷þ’’’щS¡ä±%ÀP‰ÑÁá)ѺÓMb‰È÷êÁú‰ÈÁø)‰Uè‹s¿ƒÞC‰ð÷ï‰ÑÁù‰ðÁø)Á‰ÈEè‰ðÁú‰ñÁù)ʍ’’’’’’Áâ)Ѝ€€€Áà‰Cƒ=À±%„/Çd»%‹À±%‹Eè;B ;B …Œ‹C;BŽ€ƒ=Œ^#uƒ=h^#tÿh^#ÿŒ^#‹À±%ë#‹¡Ì±%‰‰̱%‰À±%ƒì ÿrÿRƒÄ‰Ú…Òt‹B ;Eè -;EèűB;Eì~ă=Œ^#uƒ=l^#tÿl^#ÿ -Œ^#¶ı%ƒøt"ƒø …Àt -ë/vƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹б%f)Ú·Ò‰Ö5à±%¹×®¬]‰È÷î‰ÑÁù‰ðÁø)Á -ä±%‰AÁà)ȍÁ‰ÁÁá ȉò)‰à±%f‰б%]荒’’ Õ¾m¶‰ð÷á‰Ö‰Ê)òÑê2‰ÁÁé
-¡ä±%ÀP‰ÐÁà)кè‰Ö™÷þ’’’щS¡ä±%ÀP‰ÑÁá)ѺÓMb‰È÷êÁú‰ÈÁø)‰Uè‹s¿ƒÞC‰ð÷ï‰ÑÁù‰ðÁø)Á‰ÈEè‰ðÁú‰ñÁù)ʍ’’’’’’Áâ)Ѝ€€€Áà‰C‹À±%‹Mè;J 
-;J u;B~ÇEäÇEàëJ]à‹À±%Mè‹B;A|‹B +Eè‰Eà‰Ð‹@+Aë ¡À±%‹@ +EèH‰Eà¡À±%‹@+Eìʚ;‰C‹Eà€€€€€€‰ÆÁæ‹Mä»ÓMb‰È÷ëÁúÁù)ʍ2ҍB‰ÂÁâ)‰Ð÷ãÁê¸ðúðw¸ÈúÇv‰Ðº@îfÁèîÇd»%ë -‰öº@°î°ðîeô[^_]ÐU‰åVSƒì‹E»¹‹À±%ëv‰Ñ‹…Òt;Buó¸ÿÿÿÿ…Ò„I…Éu‹£À±%»ë‹‰¡Ì±%‰‰̱%ƒ=d»%…ƒ=À±%uº@°î°ðéû‰ö…Û„òƒìEðPjèºìÿÿ‹À±%ƒÄ‹Eð;B  -;B u‹Eô;B~ÇEìÇEèëJ]è‹À±%Mð‹B;A|‹B +Eð‰Eè‰Ð‹@+Aë ¡À±%‹@ +EðH‰Eè¡À±%‹@+Eôʚ;‰C‹E荀€€€€€‰ÆÁæ‹Mì»ÓMb‰È÷ëÁúÁù)ʍ2ҍB‰ÂÁâ)‰Ð÷ãÁê¸ðúðw¸ÈúÇv‰Ðº@îfÁèeø[^]Éöú‹D$¼(Õ#PèŒëÿÿ`fff f¨f¸0ŽØŽÀ° º î¡t^#@£t^#1ÛfŒÓü¡Ô±%ƒøtèùòÿÿëè6ùÿÿ°
-º îì¨t ¸@Pè–ÿÿÿf¡|^#f9‚^#t f£‚^#ÿ-~^#ƒ=x^#t‹x^#ÿÓf©f¡ffaωöU‰å‹EØf£‚^#f£|^#]Ã1ÀÈÃU‰åf¸0ŽØŽÀ‹Ef;‚^#t f£‚^#ÿ-~^#]ÉöU‰åƒìjjjj@èaƒÄÉÃU‰åWVSƒì ‹]‹u ‹}聉€:y"…Ût‹B8‰…öt‹BÁà
-‰…ÿt)‹B4‰ë"‰ö…ÛtÇ…öt‹BÁà
-‰…ÿtÇ@ƒ}t ‹BÁà
-‹U‰ƒÄ [^_]ÍvU‰åƒìjjjj@è̓Ä·@0ÉÃU‰å¡8\#]ÉöU‰å]ÍvU‰åSƒì‹8\#誃ì Sèucÿÿè ƒÄ‹]üÉÃU‰åWVS‹M ‹u‹}Š]‰ÈÁàeèÿÿ Eè‰ÈÁèUèˆBáÿbÿÿÿ J‰ðˆB‹Ef‰Eè‹EÁè‰EäŠEäƒà ÃË@¶ÃÁàbÿÿÿ Bçüÿ=*\#‹‰‹B‰G[^_]ÐU‰åWVSƒì ‹] ‹u‹}·EMè*\#‹‰‹@‰A‰Ê¶JÁá¶B ÁÁá·B Á…ÛtŠBƒà¶ÐÁâ·Eè Љ…ötŠE툅ÿt
-ŠEî%ðˆ‰ÈƒÄ [^_]ÉöU‰å‹E ¶UÁâ¹@_#fÇD
-8ƂE_#îƂD_#f‰
-Áèf‰D
-]ÍvU‰åº °îº!°@î°î°î°ÿ°°pî°î°î°ÿî]ÐU‰åº °îº!°î°î°î°ÿ°°pî°î°î°ÿî]ÐU‰å‹Mf…ÉtWfƒùw¸Óà
-ˆ^#ë7fƒùw<·Éƒé¸Óà
-‰^#¢‰^#º¡î<ÿu ˆ^#©uƒÈ¢ˆ^#º!î]ÃU‰å‹Mf…ÉtUfƒùw¸þÿÿÿÓÀ"ˆ^#ë5fƒùw:·Éƒé¸þÿÿÿÓÀ"‰^#¢‰^#º¡î ˆ^#©t%û¢ˆ^#º!î]ÉöU‰å¿|^#]ÃU‰åƒì‹Ef£|^#˜PèWüÿÿƒÄÉÐU‰å¿|^#]ÃU‰åƒì‹E‰Âf£|^#ƒ=Œ^#uƒì ¿ÂPèüÿÿƒÄÉÐU‰åWVì¾¹”^#ºÔ^#‰öµÇ”Ü"Ç”Ü"Fƒþ~åƒì EÈPèÅèºÇÀA&:#‹EÈ£ÄA&¶^#£ÈA&ƒÄ‹EУÐA&‹EÔ£ÔA&‹EØ£ØA&h=Þ"jè£ýÿÿƒÄhGÞ"jè”ýÿÿƒÄhQÞ"jè…ýÿÿƒÄhXÞ"jèvýÿÿƒÄh_Þ"jègýÿÿƒÄhfÞ"jèXýÿÿƒÄhmÞ"jèIýÿÿƒÄh³Þ"jè:ýÿÿƒÄhtÞ"jè+ýÿÿƒÄh{Þ"j èýÿÿƒÄh‚Þ"j
-è -ýÿÿƒÄh‰Þ"j èþüÿÿƒÄhÞ"j èïüÿÿƒÄh—Þ"j -èàüÿÿƒÄhžÞ"jèÑüÿÿƒÄh¥Þ"jèÂüÿÿƒÄh¬Þ"jè³üÿÿƒÄhlÝ"jAè¤üÿÿƒÄhtÝ"jBè•üÿÿƒÄh|Ý"jCè†üÿÿƒÄh„Ý"jDèwüÿÿƒÄhŒÝ"jEèhüÿÿƒÄh”Ý"jFèYüÿÿƒÄhœÝ"jGèJüÿÿƒÄh¤Ý"jpè;üÿÿƒÄh¬Ý"jqè,üÿÿƒÄh´Ý"jrèüÿÿƒÄh¼Ý"jsèüÿÿƒÄhÄÝ"jtèÿûÿÿƒÄhÌÝ"juèðûÿÿƒÄhÔÝ"jvèáûÿÿƒÄhÜÝ"jwèÒûÿÿf -4A&€¾ƒÄvÀÅ ½%ƒì jh‰hØPõ·ÀPèúÿÿƒÄ Fþš~ǃì hÐèFùÿÿƒÄÛãݵTÿÿÿ›¿@A&µTÿÿÿ¹üó¥ ÀƒÈ""ÀÛãèƒûÿÿèúÿÿeø^_]ÍvU‰åSƒìº!°ÿîè’ûÿÿ¹@ºC°6Êîîƒ=ÄA&~¹AºC°tî°‰Êî°ë»B¹C°°‰ÊÚîîºaî‹]üÉÃU‰å‹U‹E ‰•Ô^#]ÉöU‰å‹U‹E ‰•”^#]ÉöU‰åƒìhà9#è
-è— ƒÄÉÉöœX‰Á5PœX9ÈtQ¸Ã¸ÜX‰Á5 PœX1ÈtQ¸øÃf1Àžf¸f»öóŸ€üu¸øÃƐ^#Ûã¹âþfÇ’^#ZZÝ=’^#¹âþf¡’^#<u+Ù=’^#¹âþf¡’^#f%?fƒø?uƐ^#Ɛ^#Éö`¸ëp`¸ëh`¸ë``¸ëX`¸ëP`¸ëH`¸ë@`¸ë8`¸ ë0`¸
-ë(`¸ ë `¸ ë`¸ -ë`¸ë`¸ë ¨Pf¸0ŽÀŽØüX1ÛfŒÓP‹…”^#ÿÓ[° ƒûrº îº îf¡|^#f;‚^#t f£‚^#ÿ-~^#©¡aϸ鋸選ëz¸ës¸ël¸ëe¸ë^¸ëW¸ ëP¸
-ëI¸ ëB¸ ë;¸ -ë4¸ë-¸ë&¸ë` ¨f¸0ŽÀŽØüèש¡aÏPf¸0ŽØŽÀXfŒÓ‹=*\#ß1ۊŠ_Áãf‹_ÜfŒÒfŒÛŽÓSRPÿ…Ô^#ƒÄX[ŽÐ)ÜÏU‰åWVSƒì ‹u¸¹ ‰÷üó«è|ýÿÿ…ÀtÇëUèŠýÿÿ…Àt7ÇFǸ¢‰^‰N‰V …Àt+¸¢‰F‰^‰N‰V ëÇècýÿÿ…ÀtÇ ƒÄ [^_]ÍvU‰åWV¿_#È·À-yƒÀÁø9ÂtU¿_#@ÀÝ4Ō½%›È·À-yƒÀÁøf£_#¿5_#¿B&4v4ö4õŒ½%¹üó¥Ý%B&^_]ÉöU‰å¿_#]ÃU‰åWVSƒì(ŠM¡_#Áà ˜€ f¶nB&f£*Õ#f¶mB&f£,Õ#€ù t%€ù €ù„óé‰ö€ù
-„#é‰öfƒ*Õ#·*Õ#;pB&Œ½fÇ*Õ#·,Õ#¡tB&H9Â…¿¡pB&H‰Eì‰Uèf¾lB&Áâf‰Uò¡_#Áà °€ ¿;}è:¹;Mì*_ÿv‰ø¯pB&È·F‰Ø¯pB&Èf‰FA;Mì~ÜG;}è~ƹ;MìKWÿ‰Ð¯pB&Èf‹]òf‰FA;Mì~çé)‰öfÇ(Õ#·*Õ#‰Áƒø~ºƒÂ·ÂƒÀ9È|óf‰(Õ#f¡(Õ#f£*Õ#éævfÇ*Õ#·,Õ#¡tB&H9Â…¾¡pB&H‰Eà‰UÜf¾lB&Áâf‰Uæ¡_#Áà °€ ¿;}Ü=v¹;Mà*_ÿv‰ø¯pB&È·F‰Ø¯pB&Èf‰FA;Mà~ÜG;}Ü~ƹ;MàGWÿ‰Ð¯pB&Èf‹]æf‰FA;Mà~çé%‰öfÿ -*Õ#·*Õ#·,Õ#¯pB&ÂÆS fÿ*Õ#éõ‰ö·*Õ#·,Õ#¯pB&Ј Cfÿ*Õ#·*Õ#;pB&Ž¿fÇ*Õ#·,Õ#¡tB&H9Â…š¡pB&H‰EԉUÐf¾lB&Áâf‰UÚ¡_#Áà °€ ¿;}Ð=v¹;MÔ*_ÿv‰ø¯pB&È·F‰Ø¯pB&Èf‰FA;MÔ~ÜG;}Ð~ƹ;MÔ'Wÿ‰Ð¯pB&Èf‹]Úf‰FA;MÔ~çëfÿ,Õ#·5*Õ#·=,Õ#‰øf¯pB&f‰EΡ_#Áà fEÎfuλÔ°‰Úî¹Õ‰ÊŠEÎî°‰Úîf‹EÎfÁè‰Êî‰óˆnB&‰ø¢mB&ƒÄ([^_]ÐU‰åWVSƒì‹u‹} ‰øf¯pB&f‰Eò¡_#Áà fEòfuò»Ô°‰Úî¹Õ‰ÊŠEòî°‰Úîf‹EòfÁè‰Êî‰ð¢nB&‰úˆmB&ƒÄ[^_]ÍvU‰åS¹Ô°
-‰Êî»Õ‰ÚŠEî° ‰Êî‰ÚŠE î‹$ÉÍvU‰åWVSƒìf¾EÁàf‰Eò¡_#Áà ¸€ ‹]ë0‹M ;M(sÿ‰Ø¯pB&È·G‰ð¯pB&Èf‰GA;M~ÜC;]~ʋM ;MSÿv‰Ð¯pB&Èf‹]òf‰GA;M~çƒÄ[^_]ÍvU‰åWVSƒì ¡pB&H‰Eð‹tB&K‰]ìf¾lB&Áàf‰Eê¡_#Áà °€ ¿9ß<‰ö¹;Mð*_ÿv‰ø¯pB&È·F‰Ø¯pB&Èf‰FA;Mð~ÜG;}ì~ƹ;MðWÿ‰Ð¯pB&Èf‹]êf‰FA;Mð~çƒÄ [^_]ÍvU‰å·J‰pB&¶„@£tB&¶„ÿ ¢lB&¶P¢nB&¶Q¢mB&¶`¢/Õ#¶a¢.Õ#Ç_#Ç_#]ÃU‰åWVSƒì nB&¢P mB&¢Q¶ÀP¶nB&PèŠýÿÿ¶.Õ#¶5/Õ#ƒÄ¹Ô°
-‰Êî¿Õ‰úˆØî° ‰Êî‰ú‰ðîeô[^_]ÍvU‰åSƒì‹]€;tŠCƒì ¾ÀPèiùÿÿƒÄ€;ué‹]üÉÃU‰åVS‹E‰ÃÁã £_#¹Ô° -‰Êî¾Õ‰òˆØî° ‰Êî‰ØfÁè‰òî[^]ÃU‰åVS‹u‹_#Áâ»@Õ#¶nB&‰¹`Õ#¶mB&‰
-µŠ¢nB&Š
-¢mB&‰5_#[^]ÃU‰å¡_#]ÉöU‰å¡_#]ÉöU‰åWVSƒì ‹}f¾u Áæf¾E Ƌ]‹E9Ã3v‹M9ù#‰Ê¯pB&¡_#Áà ÐØf‰´€ A9ù~ÞC;]~ЃìÿuÿuèüÿÿŠE¢mB&ŠE¢nB&ƒÄeô[^_]ÍvU‰åWVSƒì ¡pB&H‰Eð‹=tB&Of¾lB&ÁãƒË ¾9Æ4¹9ù%v‰Ê¯pB&¡_#Áà Ððf‰œ€ A9ù~ÞF;uð~̃ìjjèûÿÿÆmB&ÆnB&ƒÄeô[^_]ÍvU‰åS‹U ‹]‹M¯pB&¡_#Áà ÂU”€ ˆ
-ˆZ‹$ÉÉöU‰åS‹E ‹]‹M‰Â¯pB&¡_#Áà ÂU”€ ¶B…Étˆ¶‰Â…Ûtˆ¾Â‹$ÉÐU‰åS‹E ‹MŠ]‰Â¯pB&¡_#Áà ÂU”€ €9tŠˆABˆB€9uò‹$ÉÐU‰åƒìh:#èTýÿÿôƒÄÉÉöU‰åƒìjèƒÄÉÉöU‰åƒìh4èƒÄÉÍvU‰åVS‹Ef£r¹d»þ¾v‰Êì©t Fþÿÿ~í¸@=Ÿ†~ø‰ÚˆÈö@=Ÿ†~øë‰öU‰åSƒìE Pÿuh€Õ#èX‰ÃÇ$€Õ#è¢üÿÿ‰ØƒÄ‹]üÉÃU‰åWVSìð‹} ŠEˆ…ÿÿÿEPÿuÿÿÿSè‰ÆS¾…ÿÿÿPWÿuè±þÿÿ‰ðƒÄ eô[^_]ÃU‰åSƒìE Pÿuh€×#謉ÃÇ$€×#è&üÿÿ‰ØƒÄ‹]üÉÃU‰åS‹M‹U ‰Ë€:tvŠˆBA€:uõƉ؋$ÉÍvU‰åVS‹]‹U ‹M‰Þë‰öŠˆBC€:t‰ÈI…ÀîƉð[^]ÐU‰å‹U‹M ë -¸€:tBAŠ:t)Ð]ÃU‰åS‹U‹] ‹M…Éëv¶¶Sÿ)Ð됊C8uíŠB„ÀtIu︋$ÉÐU‰å‹U¸€:tB@€:uù]ÍvU‰åS‹E‹] €8t‰Ú€:tŠv:
-tB€:uö@€8u下$ÉÉöU‰å‹E‹U €8t ‰ö8t @€8uö¸]ÍvU‰åS‹]‰Ú€;t‰öŠ
-AŸ<wAàˆB€:uì‰Ø‹$ÉÐU‰åS‹]‰Ú€;t‰öŠ
-A¿<wA ˆB€:uì‰Ø‹$ÉÐU‰åS‹U‹M ‰Ó€;tvB€:uú늈AB€9uõƉ؋$ÉÍvU‰åWVSƒì<‹u‹]ÇEèÇEäÇEàÇEÜÇEØÇEÔÇEпÇEÌÙîÝ]À‰uì‹E €8„D‹U €:%t…ÿuŠˆB‰U FÿEèév‹E €8%u%@‰E ¿ÇEä
-ÇEàÇEØÇE̋U ¾ƒè%ƒøS‡Ñÿ$…€)#‰öÆ%FÿEè鼃ÉòFŠCüˆÿEè驐ƒ}Øt"ƒ}؃}Øtëƒ}ØuƒÃ‹Cü‰EÔë -vƒÃ¿Sü‰Uԃì ÿuÌÿuäj
-VÿuÔè¾ éœƒ}Øt"ƒ}؃}Øtëƒ}ØuƒÃ‹Cü‰EÐë -vƒÃ·Sü‰UЃì ÿuÌÿuäj
-VÿuÐè.éPƒ}Øt"ƒ}؃}Øtëƒ}ØuƒÃ‹Cü‰EÐë -vƒÃ·Sü‰UЃì ÿuÌÿuäjVÿuÐèâ鐃ËCü‰EЃì jÿuäjVPèÂé䐃ËSü€:tŠˆBFÿE܀:uò‹UÜUèévƒ}Øtƒ}؃}Øtëƒ}Øu ƒÃÝCøÝ]ÀƒìÿuÌÿuàÿuäVÿuÄÿuÀèYë~vƒ}Øtƒ}؃}Øtëƒ}Øu ƒÃÝCøÝ]ÀƒìÿuÌÿuàÿuäVÿuÄÿuÀè} -ë>vƒ}Øtƒ}؃}Øtëƒ}Øu ƒÃÝCøÝ]ÀƒìÿuÌÿuàÿuäVÿuÄÿuÀèa‰EÜEèÆ¿ƒÄ é±ÇEØé¥ÇEØ陃MÌ鐍vƒMÌ鄍v¿ƒMÌëvƒÿu?ƒìEìPj
-ÿu èb
-‰EäƒÄ‹E €80u ÷EÌtƒMÌ됃MÌ‹UìJ‰U ë4vƒÿu,ƒìEìPj
-ÿu è
-‰Eà‹EìH‰E ¿ƒÄë‰ö¿ÿE ‹U €:…¼üÿÿÆ‹Eèeô[^_]ÉöU‰åƒì EPÿu ÿuè7üÿÿƒÄÉÉöU‰åWVSƒì,‹u‹} ‹]ÇEìÇEèÇEäÇEàÇEÜÇEØÇEÔÇEЉuð€?„>€?%tƒ}Ôu ŠˆGFÿEìëá€?%uGÇEÔÇEè
-ÇEàÇEоƒè%ƒøS‡çÿ$…Ð*#Æ%FÿEìéԃÉòFŠCüˆÿEìéÁƒ}àt&ƒ}àƒ}àt
-ë"ƒ}àt
-ëƒÃ‹CüëƒÃ‹CüëƒÃ¿Cü‰E܃ì ÿuÐÿuèj
-VÿuÜè鏐ƒ}àt&ƒ}àƒ}àt
-ë"ƒ}àt
-ëƒÃ‹CüëƒÃ‹CüëƒÃ·Cü‰E؃ì ÿuÐÿuèj
-ëBƒ}àt&ƒ}àƒ}àt
-ë"ƒ}àt
-ëƒÃ‹CüëƒÃ‹CüëƒÃ·Cü‰E؃ì ÿuÐÿuèjVÿuØè6‰EäEìÆÇEÔƒÄ éҍvƒÃ‹Sü€:tŠˆBFÿEä€:uò‹EäEì飍vÇEàé›ÇEà鏃MÐ醍vƒMÐë}‰öÇEÔƒMÐënvƒ}Ôu6ƒìEðPj
-W蓉EèƒÄ€?0u ÷EÐtƒMÐ됃MЋ}ðOë1‰öƒ}Ôu)ƒìEðPj
-WèW‹}ðOÇEÔƒÄë
-vÇEÔGé¼ýÿÿvÆ‹Eìeô[^_]ÉöU‰åƒì EPÿu ÿuèGýÿÿƒÄÉÉöU‰åWVSƒì,‹}‹uÇEèÇEäÇEàÇEÜÇEØ»‰}ì饐‹U €:%t…Ûu B‰U 鏍v‹E €8%u%@‰E »ÇEäÇEàÇEÜÇE؋U ¾ƒè*ƒøN‡Eÿ$… ,#‰öƒû…8ƒìEìPj
-ÿu èN‰E܃MØ‹EìH‰E ƒÄéŠGƒÆ‹^üˆëÝØÿEèéõƒÆ‹^üëG€?tƒì ¾PèBƒÄ…ÀuçÇEÔë#‰ö÷EØuŠˆCë‹UÜ9UÔ}ŠˆCÿEÔG€?tƒì ¾PèþƒÄ…ÀtÇÆ덉öƒìh(:#Wè&÷ÿÿ‰ÇƒÄ EìPj
-WèՉ‹}ìƒÄƒ}à…Wƒ}ät)ƒ}ä ƒ}ätéCÿÿÿƒ}ä…9ÿÿÿƒÆ‹Fü‰é,ÿÿÿƒÆ‹Füf‰éÿÿÿ‰öƒìh5:#Wè¶öÿÿ‰ÇƒÄ EìPj
-됃ìh@:#Wèšöÿÿ‰ÇƒÄ EìPjWè ‹}ìƒÄƒ}à…̓}ät+ƒ}ä -ƒ}äté¹þÿÿ‰öƒ}ä…­þÿÿƒÆ‹Vü‰é þÿÿƒÆ‹Vüf‰é‘þÿÿ‰öƒìhX:#Wè*öÿÿ‰ÇƒÄEìPWè;‹}ìƒÄƒ}àu`ƒ}ät)ƒ}ä ƒ}ätéMþÿÿƒ}ä…CþÿÿƒÆ‹FüÝé8þÿÿƒÆ‹FüÙé*þÿÿvÇEäë vÇEäëvÇEàëÝؐ»ÿE ‹E €8…Pýÿÿ‹Eèeô[^_]ÐU‰åƒì EPÿu ÿuèïüÿÿƒÄÉÉöU‰åWVSƒì,‹u ÇEп‹Eƒð‰EԋU‰U̅Òy‰Ñ÷ىM̃}y ‹E…Ày÷Ø됋E÷EÔu ƒ}yƒ}yGƒ}u‹EÐÆD(Ø0@‰EÐë8v…Àt1U؉Uȉöƒì º÷ủÃRèI‹MȋUЈ
-B‰UЉ؃Ä…Àu×}ЋEԃàƒøu‰ú;}} -‰öÆ FGB;U|õƒ}y ƒ}yÆ-ë ÷EÔtÆ+F‹Eԃàƒøu‰ú;}} Æ0FGB;U|õ‹UÐJx M؊
-ˆFJy÷‹Eԃàƒøu‰ú;}} Æ FGB;U|õƉøeô[^_]ÃU‰åƒì‹Eÿuÿu÷ØPÿu ÿuèŸþÿÿƒÄ ÉÉöU‰å‹E…Ày÷Ø]ÉöU‰åSƒì‹]èÁîÿÿƒì SèE ÿÿU‰åWVSƒì‹M‹} ÙîÙÀÙ軀9-u ¾ÿÿÿÿë
-‰ö¾ëA€90túŠƒè0< w(Ý`-#ëÙˍv¾ƒè0AÜËÙËPÚ$XŠƒè0< vâÝۀ9.u9AŠƒè0< w/Ý`-#ëÙÉÙʉö¾ƒè0AÜÊÙÊPÚ$ÙÉXØʊƒè0< vÝÝÚÙÉÞùÞÁVÚ $^€9et €9E…“A€9-u
-¾ÿÿÿÿAë‰ö€9+u ¾Aëv¾Šƒè0< weÝ`-#¾ƒê0A·ÃÙÀPÚ $Ù}ð‹]ðÆEñ Ùmð‰]ðÛ]ìÙmð‹Eì·À‰$Û$‰$Ú$ZÙ}ð‹UðÆEñ Ùmð‰UðÛ]ìÙmð‹Eì‰ÃŠƒè0< v£Ý؅ö~!ºf…Ût4Ý`-#·Ã‰öÜÉB9Â|ùëvº·Ã‰Ã9Â}Ý`-#ÜùB9Ú|ùÝ؅ÿt‰ƒÄ[^_]ÐU‰åWVSƒì ‹]‹} ÇE쾀;-u ÇEðÿÿÿÿCë‰ö€;+u ÇEðCëÇEð€;0u>C€;0túë6ƒì ¾PCè‰ÂƒÄ9ú…Òy
-¸ëEv‰ð¯÷Ö9ð~ÇEìƒìW¾P聃ąÀu¶ƒ}t‹E‰ƒ}ìt¾ÿÿÿ¯uð‰ðeô[^_]ÉöU‰åWVSƒì ‹]‹} ÇEð¾€;0uC€;0tú€;xuKƒÿuFC€;0u@‰öC€;0túë6ƒì ¾PCè_‰ÂƒÄ9ú…Òy
-¸ëAv‰ð¯÷Ö9ðvÇEðƒìW¾PèуÄ…Àu¶ƒ}t‹E‰ƒ}ðt¾ÿÿÿ‰ðeô[^_]ÉöU‰åŠUBÐ< w ¾Âƒè0ë&vB¿<w ¾Âƒè7됍BŸ<w ¾ÂƒèW됾Â]ÍvU‰å‹Uƒú w B0¾À됍BöƒøwB7¾Àë¾Â]ÍvU‰åŠUƒê0¸€ú –À]ÉöU‰åŠUBÐ<vBŸ<w¸ë¸]ÐU‰åŠU€ú/~‹E  _#:Pÿ¸ë¸]ÐU‰åŠUBŸ<w Bà¾Àëv¾Â]ÍvU‰åŠUB¿<w B ¾Àëv¾Â]ÍvU‰åVS¾ƒì ¾]Sè%ƒÄ…Àuƒì Sè5ÿÿÿƒÄ…Àt¾‰ðeø[^]ÃU‰åŠUƒêA¸€ú9–À]ÉöU‰å¸€}/žÀ]ÍvU‰åŠUƒêa¸€ú–À]ÉöU‰åŠUB÷<v
-¸€ú u¸]ÉöU‰åŠUƒêA¸€ú–À]ÉöU‰åWVSƒì ÝEÝUè‹]‹}ÇEäSd$øÝ$èoƒÄ…Àtƒì Sè·îÿÿƒÄéPvÙîÝEèÚéßà€äE€üu Æ-C€uï€ë÷EtÆ+CÿEäÝh-#ÝEèÚéßà€äE€üuÆ0ÆC¸éû‰öÙèÝEèÝáßà€äE€üu3¾Ýéßà€äE€üuHÝx:#ÝEèØÉÝUèNÝêßà€äE€ütëÝØë)vÝØÝؾÝx:#ÝEèë ÝEèØñÝUèFÝéßàöÄtîÝ؃ì Vè÷ùÿÿƒÄƒøc~ƒïë‰öƒø ~ƒïë‰ö…ö~Oƒì‹EƒÈPÿuWSÿuìÿuèèUEäƒÄ …öu‹Eäë;‰ö]äÆeCƒì jºgfff‰ð÷êÁú‰ðÁø)ƒÂRj
-SVè\ùÿÿ‹UäD‰EäƒÄ eô[^_]ÍvU‰åWVSìŒÝEݝþÿÿ‹]Dž€þÿÿ½¸þÿÿ¹K¸üó«ƒìSÿµ”þÿÿÿµþÿÿ貃ąÀtƒì SèúìÿÿƒÄé‰öÙî݅þÿÿÚéßà€äE€üuÆ-C€µ—þÿÿ€ëv÷Et
-Æ+Cÿ…€þÿÿƒì…˜þÿÿPÿµ”þÿÿÿµþÿÿèþݝpþÿÿ‹…pþÿÿ‹•tþÿÿ‰Æ‰×DžŒþÿÿƒÄ݅˜þÿÿÙèÙÉÝáßàöÄ…ø重vh$@jÿµœþÿÿÿµ˜þÿÿè$݅˜þÿÿÜ5p-#ݝ˜þÿÿÙ½´þÿÿ‹´þÿÿƅµþÿÿ Ù­´þÿÿ‰´þÿÿß½¨þÿÿÙ­´þÿÿ‹…¨þÿÿ‰$èûÿÿ‹•Œþÿÿˆ„*¸þÿÿB‰•ŒþÿÿƒÄ݅˜þÿÿÙèÙÉÚéßàöÄ„oÿÿÿ‹•Œþÿÿ•€þÿÿ‰ÑI…¸þÿÿ‰…|þÿÿë‰ö‹•|þÿÿŠˆCI‹•Œþÿÿƒê‰ÐÁèH!Â9Ñ}ޅÉx‹Œþÿÿƒéx
-vÆ0CIyùÆëÝØÝØÆ0Cÿ…€þÿÿÝ€:#‰µpþÿÿ‰½tþÿÿ݅pþÿÿÚéßàöÄE…\‹E@9…€þÿÿLÆ.Cÿ…€þÿÿ‹Eƒà‰…ˆþÿÿDž„þÿÿDžŒþÿÿv‰µpþÿÿ‰½tþÿÿ݅pþÿÿ܈:#Ü -p-#ݝpþÿÿ‹µpþÿÿ‹½tþÿÿƒì…˜þÿÿPWVèݝpþÿÿ‹•pþÿÿ‹tþÿÿ‰Ö‰Ï݅˜þÿÿÙ½´þÿÿ‹´þÿÿƅµþÿÿ Ù­´þÿÿ‰´þÿÿ۝¤þÿÿÙ­´þÿÿ‹…¤þÿÿƒÄ…Àtƒ½ˆþÿÿu
-Džˆþÿÿƒì PèÓùÿÿˆCÿ…€þÿÿÿ…ŒþÿÿƒÄƒ½ˆþÿÿt‹E9…Œþÿÿ~
-Dž„þÿÿ‹•€þÿÿ9U}
-Dž„þÿÿƒ½„þÿÿ„ýþÿÿKë
-‰öÿ€þÿÿ‰Ã€;0u Cÿ€{ÿ.uêCÆ‹…€þÿÿeô[^_]ÃU‰åWVSƒì‹]‹u ‹}WVSèZƒÄ…Àtƒì Wè¢éÿÿƒÄéñ‰öÙî‰]è‰uìÝEèÝáßàÝـäE€üuÙàëvÝ؉]è‰uìÝEèÝx-#ÙÉÝáßàÝـäE€üuÝØÆ0ÆG¸雺ÙèÙÉÝáßà€äE€üu/Ýáßà€äE€üu?Ýx:#ëÙɐÜÉÙÉJÝâßà€äE€ütìÝØëvÝÙÝx:#ë‰öØñÙÉBÙÉÝáßàöÄtðÝØÝ؍BƒøvƒìÿuÿuÿuWVSèÔùÿÿë‰öƒìÿuÿuÿuWVSèXûÿÿƒÄ eô[^_]ÐU‰åƒìSÙ}ü›f‹Eüf -? f‰EøÙmø›ÝEÙüÝ]ð›‹Uð‹Mô‹]‰‰KÝEÜeðeì›ÛâÙmü›[ÉÍvU‰åƒì‹E‹U ‰Eø‰Uü‹MUøf‹BfÁè%ÿ=ÿt¸ëk÷Bÿÿuƒ:t…Étƒìh:#QèDçÿÿƒÄ¸ë@‰ö€zy…Étƒìh”:#Qè çÿÿƒÄ¸ë‰ö…Étƒìh™:#QèçÿÿƒÄ¸ÉÃU‰åƒì¸€Ù#ƒ=,_#tÿ,_#ÉÃU‰å‹E£,_#]ÍvU‰åƒì‹E‹U ‰Eø‰UüUø¹f‹BfÁè%ÿ=ÿu÷Bÿÿuƒ}øt¹‰ÈÉÉöU‰åSƒì‹E ‹]ÆPè‰âÿÿ‰ØƒÄ‹]üÉÍvU‰åVSƒì ÝEÝUð‹]‹uVSd$øÝ$èvÝ]èƒÄƒ=0_#ÿtWƒìVSèYÿÿÿƒÄ…ÀuFƒìÿuôÿuðèDÿÿÿƒÄ…Àu1Ùî‰]à‰uäÝEàÚéßà€äE€ô@uƒì jVSÿuôÿuðè8ƒÄ ëvÝEèeø[^]ÉöÝD$ ÝD$Ùø›ßàžzøÝÙͶ¼'U‰åVSƒì0ÝE‹]‹u‹EÝUà‰]è‰uìPÿú‡Èÿ$•-#ÝØÇEغž:#ƒøc~º£:#‰UÜÇEðÇEôƒ=0_#„}ƒì EØP誃ąÀ…uƒ=0_#…Yƒìjh©:#éëvÝØÇEغ½:#ƒøc~ºÂ:#‰UÜÇEðÇEôƒ=0_#„ƒì EØPè>ƒÄ…À… ƒ=0_#…íƒìjhÈ:#év‰]à‰uäÝ]èÇEغÜ:#ƒøc~ºâ:#‰UÜÇEðÇEôƒ=0_#„žƒì EØPè˃ąÀ…–ƒ=0_#…zƒìjhé:#é ÝØÇEغþ:#ƒøc~º;#‰U܃=0_#uÇEðàÇEôÿÿïGé¸ -¡$_#‹(_#‰Eð‰Uôé¡ -‰öÝØÇEغ’<#ƒøc~º˜<#‰U܃=0_#uÇEðàÇEôÿÿïGéh -¡$_#‹(_#‰Eð‰UôéQ -‰öÝØÇEغ ;#ƒøc~º;#‰U܃=0_#uÇEðàÇEôÿÿïGé -¡$_#‹(_#‰Eð‰Uôé -‰öÝØÇEغ ;#ƒøc~º;#‰UÜÇEðÇEôéÑ ‰öÝØÇEغ—5#ƒøc~º;#‰U܃=0_#uÇEðàÇEôÿÿïÇë¡$_#‹(_#ò€‰Eð‰Uôƒ=0_#„óƒì EØPè ƒÄ…À…ëƒ=0_#…σìjh;#éaÝØÇEغ—5#ƒøc~º;#‰U܃=0_#uÇEðàÇEôÿÿïÇë¡$_#‹(_#ò€‰Eð‰Uôƒ=0_#„gƒì EØP蔃ąÀ…_ƒ=0_#…Cƒìjh;#éÕ -ÝØÇEغX5#ƒøc~º*;#‰U܃=0_#uÇEðàÇEôÿÿïÇë¡$_#‹(_#ò€‰Eð‰Uôƒ=0_#„Û -ƒì EØPèƒÄ…À…Ó -ƒ=0_#…· -ƒìjh.;#éI -ÝØÇEغX5#ƒøc~º*;#‰U܃=0_#uÇEðàÇEôÿÿïÇë¡$_#‹(_#ò€‰Eð‰Uôƒ=0_#„O -ƒì EØPè| -ƒÄ…À…G -ƒ=0_#…+ -ƒìjh.;#é½ ÝØÇEغ@;#ƒøc~ºC;#‰U܃=0_#uÇEðàÇEôÿÿïÇë¡$_#‹(_#ò€‰Eð‰Uôƒ=0_#„à ƒì EØPèð ƒÄ…À…» ƒ=0_#…Ÿ ƒìjhG;#é1 ÝØÇEغ@;#ƒøc~ºC;#‰U܃=0_#uÇEðàÇEôÿÿïÇë¡$_#‹(_#ò€‰Eð‰Uôƒ=0_#„7 ƒì EØPèd ƒÄ…À…/ ƒ=0_#… ƒìjhG;#é¥ ÝØÇEغY;#ƒøc~º`;#‰U܃=0_#uÇEðàÇEôÿÿïGéP ¡$_#‹(_#‰Eð‰Uôé9 ‰öÝØÇEغY;#ƒøc~º`;#‰U܃=0_#uÇEðàÇEôÿÿïGë¡$_#‹(_#‰Eð‰Uôƒ=0_#„a ƒì EØPèŽ ƒÄ…À…Y ƒ=0_#…= ƒìjhh;#éÏ
-vÝØÇEغ|;#ƒøc~º€;#‰U܃=0_#uÇEðàÇEôÿÿïÇë¡$_#‹(_#ò€‰Eð‰Uôƒ=0_#„å ƒì EØPè ƒÄ…À…Ë
-ƒ=0_#…¯
-ƒìjh…;#éA
-ÝØÇEغ|;#ƒøc~º€;#‰U܃=0_#uÇEðàÇEôÿÿïÇë¡$_#‹(_#ò€‰Eð‰Uôƒ=0_#„G
-ƒì EØPèt
-ƒÄ…À…?
-ƒ=0_#…#
-ƒìjh–;#éµ ÝØÇEغ©;#ƒøc~º¯;#‰U܃=0_#uÇEðàÇEôÿÿïÇë¡$_#‹(_#ò€‰Eð‰Uôƒ=0_#„Íƒì EØPèè ƒÄ…À…³ ƒ=0_#…— ƒìjh¶;#é) ÝØÇEغ©;#ƒøc~º¯;#‰U܃=0_#uÇEðàÇEôÿÿïÇë¡$_#‹(_#ò€‰Eð‰Uôƒ=0_#„/ ƒì EØPè\ ƒÄ…À…' ƒ=0_#… ƒìjhÉ;#靐ÝØÇEغÞ;#ƒøc~ºâ;#‰UÜÇEðÇEôƒ=0_#… ƒì EØPèòƒÄ…À…½ƒìjhç;#jèÚõÿÿèaõÿÿÇ!ƒÄ降vÇEغÞ;#ƒøc~ºâ;#‰U܃=0_#uvÇEðàÇEôÿÿïG‰]ЉuÔÝEÐÜ -H=#Ý]Ћ]ЋuÔÙîÙÉÚéßà€äE€ü…¯ƒìVSèjƒÄ‰]ЉuÔÝEÐÙÉÚéßà€äE€ü@„‡ÇEðàÇEôÿÿïÇét¡$_#‹(_#‰Eð‰Uô‰]ЉuÔÝEÐÜ -H=#Ý]Ћ]ЋuÔÙîÙÉÚéßà€äE€ü…6ƒìVSèñƒÄ‰]ЉuÔÝEÐÙÉÚéßà€äE€ü@„¡$_#‹(_#ò€‰Eð‰UôéòvÝØÇEغÞ;#ƒøc~ºâ;#‰UÜÇEðÇEôéÁ‰öÝØÇEغÞ;#ƒøc~ºâ;#‰U܃=0_#uÇEðÇEôë¡$_#‹(_#ò€‰Eð‰Uôƒ=0_#„ãƒì EØPèƒÄ…À…Ûƒ=0_#…¿ƒìjhÿ;#éQÝØÇEغÞ;#ƒøc~ºâ;#‰U܃=0_#uÇEðÇEôëÇEðÇEôøƒ=0_#„`ƒì EØP荃ąÀ…Xƒ=0_#…<ƒìj h =#éΉöÇEغ<#ƒøc~º<#‰U܃=0_#u6ÙîÙÉÚéßàöÄEuÇEðàÇEôÿÿïGém‰öÇEðàÇEôÿÿïÇéX‹ -$_#‹(_#‰Mð‰]ôÙîÙÉÚéßàöÄE„4‰È‰Úò€‰Eð‰UôéÝØÇEغ$<#ƒøc~º)<#‰U܃=0_#uÇEðÇEôëÇEðÇEôøƒ=0_#„Lƒì EØPèyƒÄ…À…Dƒ=0_#…(ƒìjh/<#麉öÇEغC<#ƒøc~ºH<#‰U܃=0_#uÝ]ðëÝØÇEðÇEôøƒ=0_#„Òƒì EØPèÿƒÄ…À…ʃ=0_#…®ƒìjhN<#é@ÝØÇEغc<#ƒøc~ºm<#‰UÜÇEðÇEôøƒ=0_#„iƒì EØP薃ąÀ…aƒ=0_#…Eƒìjhx<#é׍vÝØÇEغ‘<#ƒøc~º—<#‰UÜÇEðÇEôøƒ=0_#„ýƒì EØPè*ƒÄ…À…õƒ=0_#…Ùƒìjhž<#ékvÝØÇEغ³<#ƒøc~º¹<#‰UÜÇEðÇEôøƒ=0_#„‘ƒì EØP较ąÀ…‰ƒ=0_#…mƒìjhÀ<#éÿvÇEغ³<#ƒøc~º¹<#‰UÜÜ5P=#Ý]ðƒ=0_#„,ƒì EØPèYƒÄ…À…$ƒ=0_#…ƒìjhÕ<#隉öÇEغè<#ƒøc~ºî<#‰U܋ -$_#‹(_#‰Mð‰]ôÙîÙÉÚéßàöÄEtC‰È‰Úò€‰Eð‰Uôë1‰öÇEغè<#ƒøc~ºî<#‰U܍d$øÝ$jjè›Ý]ðƒÄƒ=0_#…jé|vÝØÇEغõ<#ƒøcŽ•ºø<#鋍vÝØÇEغ—5#ƒøc~uº;#ën‰öÝØÇEغ =#ƒøc~Yº=#ëR‰öÝØÇEغX5#ƒøc~=º*;#ë6‰öÝØÇEغ=#ƒøc~!º=#ë‰öÝØÇEغ@;#ƒøc~ºC;#‰UÜÇEðÇEôƒ=0_#„¯ƒì EØPèʃąÀ…•ƒ=0_#…‹ƒìjÿuÜjè§îÿÿƒÄ jhü<#jè–îÿÿƒÄëfÝØÇEغZ;#ƒøc~ºa;#‰U܃=0_#uÇEðàÇEôÿÿïGë¡$_#‹(_#‰Eð‰Uôƒ=0_#tƒì EØPè2ƒÄ…À…ýè²íÿÿÇ"éívÝØÇEغZ;#ƒøc~ºa;#‰U܃=0_#uÇEðàÇEôÿÿïGë¡$_#‹(_#‰Eð‰Uôƒ=0_#„‰ƒì EØP趃Ä…À…ƒ=0_#uiƒìjhi;#jè•íÿÿƒÄëSÇEغÞ;#ƒøc~ºâ;#‰UÜÝ]ðƒ=0_#ÿt ƒ=0_#uÇEðÇEôð?ë$‰öƒì EØPè@ƒÄ…ÀuèÄìÿÿÇ!ëÝØÝEðeø[^]ËT$â€‹D$%ÿÿÿ ЉD$ÝD$ÉöU‰å¸]ÉöÝD$ÙüÉö¼'U‰åWVSƒì ‹E ‰EðEƒEðƒeðøƒàø‰Eì‹Eð9EìsƒìjUhX=#hb=#è˜ ƒÄ‹Eð9Eì„Ä‹E‹…Û„·‹C;C rƒìj`hX=#hm=#è` ƒÄöCtƒìjahX=#h =#èC ƒÄöC tƒìjbhX=#hà=#è& ƒÄ‹Eì;CvL‹Eð;C sD‰Æ‹}ì;ss‹s;{ v‹{ 9÷wƒìjnhX=#h=#èæ ƒÄƒì‰ø)ðPVÿu蚃ċ…Û…Iÿÿÿeô[^_]ÐU‰åWVSƒì ‹u ‹E‹}‰ÂUƒÀƒàøƒâø9†ŒÇF‰F‰V ‹E‰F‰~ÇF‹MëF‰ö9óuƒìjlh>#h>#èX ƒÄ‹F ;Cv‹F;C sƒìjmh>#h@>#è1 ƒÄ‰Ù‹…Ût9{±9{u‹S +S‹F +F9Âwœ‰‰1eô[^_]ÃU‰åWVSƒì ‹]‹} …ÛuƒìjLhm>#hu>#èÙ
-ƒÄ…ÿuƒìjMhm>#h~>#è¾
-ƒÄƒÇƒçø‹3…ö„rvƒ~uƒ~t‹F;FsƒìjUhm>#hÀ>#è€
-ƒÄƒ~t‹F;F rƒìjUhm>#h ?#è[
-ƒÄ‹F +F9FvƒìjUhm>#h`?#è9
-ƒÄ‹F÷ЅE…åF‰Eð‹^…Û„ԍv÷Ãtƒìj^hm>#h ?#èø ƒÄöCtƒìj_hm>#hà?#èÛ ƒÄƒ;t9wƒìj`hm>#h @#è» ƒÄ;^ rƒìjahm>#h–>#èŸ ƒÄ9{rGv‹‰‹C)ø‰B‹Eð‰ë
-v‹‹Uð‰9~sƒìjwhm>#h­>#è\ ƒÄ)~‰Øë‰ö‰]ð‹…Û…/ÿÿÿ‹6…ö…‘þÿÿ¸eô[^_]ÃU‰åƒì jÿjÿuÿuÿuÿu ÿuèƒÄ ÉÐU‰åWVSƒì‹]‹EE ‰Eð…ÛuƒìjThI@#hu>#èۃă} uƒìjUhI@#h~>#较ċ;…ÿ„lƒuƒt‹G;Gsƒìj[hI@#hÀ>#舃ăt‹G;G rƒìj[hI@#h ?#ècƒÄ‹G +G9Gvƒìj[hI@#h`?#èAƒÄ‹G÷ЅE…á‹Uð9WƒÕ‹M9O †ÉG‰Eì‹_…Û„¸v÷ÃtƒìjkhI@#h ?#èèƒÄöCtƒìjlhI@#hà?#è˃ă;t9wƒìjmhI@#h @#諃Ä;_ rƒìjnhI@#h–>#菃ċU 9S‚$‰Þ;]s‹u¹;M}ºÓâ‹E1ð…ÂtÖA;M|è‰ð)ØE ;C‡è‹M 1;Eð‡æ‰ðƒàø‰Eè9Øsƒìh‘hI@#hT@#èƒÄ9]èvC‹Uè)ډUä÷Âtƒìh–hI@#h€@#èãƒÄ‹‹M艋C+Eä‰A‹Eä‰C‰]ì‰ðƒà‹U Tƒâø‰U ‹Mè9Qv‰ÊU ‹‰‹A+E ‰B‹Eì‰ë
-‹Uè‹‹M쉋E 9Gsƒìh´hI@#h­>#èkƒÄ‹U )W‰ðë‰ö‰]ì‹…Û…Kþÿÿ‹?…ÿ…•ýÿÿ¸eô[^_]ÃU‰åƒì jÿjjj ÿu hÿuèýÿÿƒÄ ÉÐU‰åWVSƒì‹]Sh²@#èaÌÿÿ‹3ƒÄ…ö„ƒìÿvÿvÿv‹F +FPÿv ÿvh@A#è1ÌÿÿƒÄ ƒ~uƒ~t‹F;FsƒìjahÄ@#hÀ>#袃ă~t‹F;F rƒìjahÄ@#h ?#è}ƒÄ‹F +F9FvƒìjahÄ@#h`?#è[ƒÄ¿‹^…Û„¾ƒì ÿ3ÿs‰ØCPSh€A#è“ËÿÿƒÄ ÷ÃtƒìjihÄ@#h ?#èƒÄöCtƒìjjhÄ@#hÀA#èóƒÄƒ{wƒìjkhÄ@#hË@#èփă;t9wƒìjlhÄ@#h @#趃Ä;^ rƒìjmhÄ@#h–>#蚃Ä{‹…Û…BÿÿÿƒìWhç@#èàÊÿÿƒÄ9~tƒìjshÄ@#hú@#è`ƒÄ‹6…ö…cþÿÿƒì hA#èªÊÿÿƒÄeô[^_]ÍvU‰åWVSƒì ‹u‹] ‰ßƒçø…öuƒìjNh[=#hu>#è ƒÄ…ÛuƒìjOh[=#hòA#èñƒÄƒ}uƒìjPh[=#h~>#èԃĉ؃à‹UTƒâø‰U‹ëv‹…ÛuƒìjXh[=#hýA#螃ă{uƒ{t‹C;CsƒìjYh[=#hÀ>#èsƒÄƒ{t‹C;C rƒìjYh[=#h ?#èNƒÄ‹C +C9CvƒìjYh[=#h`?#è,ƒÄ;{‚hÿÿÿ;{ ƒ_ÿÿÿ‹EC‹C +C9Cvƒìjbh[=#h`?#èòƒÄÇEð‹sëv‰uð‹6…öt9þróƒ}ðtm‹Eð@9ørc9øtƒìjnh[=#h B#諃ąöt8‹U:9ðr.9ðtƒìjuh[=#h`B#肃ċEF‹UðB‹‰ëE‹E‹UðBë9ƒ}ðt
-‹Eð‰8ëv‰{…öt‹U:9ðr‰ÐF‰G‹‰ë ‹E‰G‰7eô[^_]ÃU‰åƒì hÿu ÿuèÒýÿÿƒÄÉÐU‰å‹EÇ]ÉöU‰åWVSƒì ÇEèÇEìÇEð‹E‹0…ö„Zƒ~uƒ~t‹F;Fsƒìj]h†B#hÀ>#蠃ă~t‹F;F rƒìj]h†B#h ?#è{ƒÄ‹F +F9Fvƒìj]h†B#h`?#èYƒÄÿEð¿‹^…Û„¨v÷Ãtƒìjdh†B#h ?#è$ƒÄöCtƒìjeh†B#hÀA#èƒÄƒ{wƒìjfh†B#hË@#èêƒÄƒ;t9wƒìjgh†B#h @#èʃÄ;^ rƒìjhh†B#h–>#讃ÄÿEì{‹…Û…[ÿÿÿ9~tƒìjnh†B#hú@#肃Ä‹FEè‹6…ö…§þÿÿƒì ÿuìÿuðÿuèÿuh B#èºÆÿÿƒÄ eô[^_]ÍvU‰åVS‹u‹] EƒìPÿuh Ù#èÈÿÿƒÄh Ù#ÿ5àá#jSVh C#è5ƒÄ eø[^]ÍvU‰åƒìÿ5Ìá#jÿuÿu ÿuhàB#èƒÄ ÉÉöU‰åƒì E Pÿuh Ý#èÈÿÿƒÄ jjhh$#èè%ÿÿƒÄh Ý#hƒC#è†ÅÿÿÇ$MèBÿÿƒÄÉÐU‰åƒìh Ý#h`C#è_ÅÿÿƒÄÉÉöU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)л¤â#‰]ð‹´ÃЃùÿtCI‰ÐÁà)Ð;´ÃÐr0»¨â#‰Ï‰ÐÁà)ЋLÃPƒùÿtI‰ÐÁà)ЋUð;´ÂÐsՃÿÿt‰ÐÁà)ЋU‰Åøâ#ë
-‰ö‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰Åüâ#ë
-‹E‹U ‰B‹E@‰ÐÁà)ЍÅP‰ˆ¨â#‰¸¬â#ƒÄ[^_]ÍvU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)ÐÁà‹xå#‰U苀|å#‰Eìƒùÿtw ‰ÆȉÂÁâ)‹Eè‰Ã;Õxå#|[‰Eäv1‰ÐÁà)ЍÅ;šxå#u ‹Eì;‚|å#|1‰Ï‰ÐÁà)Ћ Åøâ#ƒùÿt4 1‰ÐÁà)Ћ]ä;Åxå#}«ƒÿÿt‰ÐÁà)ЋU‰Åøâ#ë‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰Åüâ#ë
-‹E‹U ‰B‹E@‰ÐÁà)ЍÅP‰ˆ¨â#‰¸¬â#ƒÄ[^_]ÍvU‰å‹EÇÿÿÿÿÇ@ÿÿÿÿ]ÍvU‰åWVS‹uv‰ÐÁà)ЍÅP‹˜¬â#¿¨â#‹ 8ƒûÿt[‰ÐÁà)ЉLÇPëv‹E ‰ƒùÿt&I‰ÁÁá)Á»¬â#v‰ÐÁà)ЋDÃP‰DËPë v‹E ‰X[^_]ÐU‰åS‹M‹‰Øƒûÿt=‹@‰ÂÁâ)‹Õøâ#‰ƒøÿt@‰ÐÁà)ÐÇÅüâ#ÿÿÿÿë
-vÇAÿÿÿÿ‰Ø‹$ÉÉöU‰åS‹M‹] ƒ;ÿt)I‰ÐÁà)Ћ‰Åøâ#‹@‰ÂÁâ)‰ Õüâ#됉KI‰ÐÁà)ÐÇÅøâ#ÿÿÿÿI‰ÐÁà)ÐÇÅüâ#ÿÿÿÿ‰ ‹$ÉÃU‰åS‹M‹] ƒ{ÿt,I‰ÐÁà)ЋS‰Åüâ#‹C@‰ÂÁâ)‰ Õøâ#ë‰ö‰ I‰ÐÁà)ÐÇÅüâ#ÿÿÿÿI‰ÐÁà)ÐÇÅøâ#ÿÿÿÿ‰K‹$ÉÃU‰å‹E‹]ÉöU‰å‹E‹@]ÐU‰å·Eƒøt ƒø…Àtë-ƒøtƒøtë ¸¡C#됸¦C#됸ªC#됸°C#됸q4#]ÐU‰åWVSƒìœúX‰Â‰Uä÷Et$ƒìEèPjèH—ÿÿƒÄ ÿuìÿuèhÀC#èaÁÿÿƒÄ÷EtN¾;5Ðá#sA¿â#vƒì µ‹;¶BP·BPRVhD#èÁÿÿƒÄ‹;VÿP ƒÄF;5Ðá#rÇ÷Etƒì hÛC#èñÀÿÿèT&ÿÿƒÄ‹Uä‰ÐPeô[^_]Éöí"Üï"Üï"Üï"Üï"Üï"Hï"Üï"Tï"`ï"Üï"lï"lï"lï"lï"lï"lï"lï"lï"lï"lï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï"Üï" í"4í" î"`î"àî"<ï"4í"Üï"Üï"0ï"Üï"<ï"Üï"î"Üï"Üï"8î"Üï"€í"Üï"Üï"Ìí"Àð" ò" ò" ò" ò" ò"ò" ò"$ò",ò" ò"<ò"<ò"<ò"<ò"<ò"<ò"<ò"<ò"<ò"<ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò" ò"Ìð"àð" ò" ò" ò" ò"àð" ò" ò"ò" ò" ò" ò" ò" ò" ò"Øñ" ò"0ñ" ò" ò"tñ"¬õ"¸õ"¸õ"¸õ"¸õ"¸õ"|ó"|ó"|ó"|ó"|ó"|ó"|ó"|ó"|ó"|ó"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¸õ"¬ó"0ô",õ",õ",õ" õ"0ô"¸õ"¸õ"”õ"¸õ" õ"¸õ"¸õ"¸õ"¸õ"Äó"¸õ" ô"¸õ"¸õ"¼ô"$@$@#€#ì#\#¬#ü#L#|##”# #¬ #8
-#Ä
-# #œ #( #´ #@ -#Ì -#@#\#Œ##œ#,#°#(#”##l#Ð##`#„# #¼#Ø#ô#t#ì#t#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô#Ô##€#ì#\#¬#ü#L#|##”# #¬ #8
-#Ä
-# #œ #( #´ #@ -#Ì -#@#\#Œ##œ#,#°#(#”##l#Ð##`#„# #¼#Ø#ô#t#ì#t#TimerOthermain: unable to set timer 1
-main: unable to set timer 2
-main: unable to set timer 3
-main: waiting signals...
-main: disarm the timer2
-main: disarm the timer1
-main: arm timer1
-main: unable to arm timer 1
-main: ending...
-Signal %d code=%s value=%d task=%d count25=%d count26=%d time=%ldusec
-task_timer: value = %d, time = %ldusec
-main: unable to create timer 1
-main: unable to create timer 2
-main: unable to create timer 3
-main: unable to disarm timer 2
-main: timer2 disarmed, itvalue=%ld.%ld
-main: unable to disarm timer 1
-main: timer1 disarmed, itvalue=%ld.%ld
-Error during Keyboard Initialization!!!Ctrl-C pressed!
-KeybPortKeyTasktask_create
-scheduletime %lus %luns * caplasttime %lus %luns * exec=%d TIME = %lu
-The system tick must be less than 55 mSec!Abort detected
-Code : %u
-Too many scheduling levels!!!
-Too many resource levels!!!
-debug info noticewarn err crit alert emerg <%i>[%s] %sPosix task
-Signal number %d...
-with value : %d
-POSIX_ReadyPOSIX_DelayPOSIX_UnknownSlice: %d
-MainPOSIX_register_level
- alloco descrittore %d %d
- lev=%d
-POSIX schedulerPid: %d Name: %20s Prio: %3ld Status: %s
-
-Panic!!! can't create main task...
-dummy PID: %d
-Dummy1Dummy2Dummy3Dummy4Dummy5Dummy6Dummy7Dummy8Dummy9Dummy0DummyaDummybDummycDummydDummyeDummyfDummygDummyhDummyDummy (RR) Posto dummy_create
-
-Panic!!! can't create dummy task...
-Entro in dummy_register_level
-Port des :
-Free port des : %d
-%d %s vt: %d pn: %d
-%d pd: %d vt: %d pn: %d Resources owned by the tasks:
-%-4dPI_register_module
-PI module
-PC priority of the tasks:
-%-4ldPC_register_module
-PC moduleTR %x
-SS:SP %x:%lx
-Stack0 : %x:%lx
-Stack1 : %x:%lx
-Stack2 : %x:%lx
-CS : %x DS : %x
-Descriptor [%x] InfoNo more Descriptors...
-%x (Hex)Base : %lx Lim : %lx Acc : %x Gran %x
-2Coprocessor error#Page fault*General protection fault*Stack exception*Segment not present*Unvalid TSS#INTEL reserved*Double defect1FPU context switch*Unvalid opcode#BOUND limit exceeded#Overflow detected on INTO#Breakpoint trap#NMI detected#Debug fault#Division by 0Exception %d occurred
-ABORT %d !!!LL Time Panic!!!
-time.cError! File:%s Line:%d %sOne-shot timer selected...
-Periodic timer selected...
-Unhandled Exc or Int occured!!!
-32/LINUX CrossCompiled/ELFHalt called1234567890-+12345678901234567890xabcdefABCDEF1234567890.e+-0123456789ABCDEF$@ -Æ@,ú1°<NaN+Inf-Infacosacosfacos: DOMAIN error
-asinasinfasin: DOMAIN error
-atan2atan2fatan2: DOMAIN error
-hypothypotfexpexpfy0fy0: DOMAIN error
-y1fy1: DOMAIN error
-ynynfyn: DOMAIN error
-lgammalgammaflgamma: SING error
-loglogflog: SING error
-log: DOMAIN error
-log10log10flog10: SING error
-log10: DOMAIN error
-powpowfpow(0,0): DOMAIN error
-pow(0,neg): DOMAIN error
-sinhsinhfsqrtsqrtfsqrt: DOMAIN error
-fmodfmodffmod: DOMAIN error
-remainderremainderfremainder: DOMAIN error
-acoshacoshfacosh: DOMAIN error
-atanhatanhfatanh: DOMAIN error
-atanh: SING error
-scalbscalbfj0j0f: TLOSS error
-j1j1fjnjnfneg**non-integral: DOMAIN error
-à?addfree.cmax >= minreg->min < reg->maxnew_max > new_min(reg->min & (sizeof(struct lmm_node) - 1)) == 0(reg->max & (sizeof(struct lmm_node) - 1)) == 0addregio.cr != reg(reg->max <= r->min) || (reg->min >= r->max)alloc.clmm != 0size > 0reg->free >= 0(DWORD)node < reg->maxreg->free >= size(reg->nodes == 0 && reg->free == 0) || (DWORD)reg->nodes >= reg->minreg->nodes == 0 || (DWORD)reg->nodes < reg->maxreg->free <= reg->max - reg->min((DWORD)node & (sizeof(struct lmm_node) - 1)) == 0((DWORD)node->size & (sizeof(struct lmm_node) - 1)) == 0(node->next == 0) || (node->next > node)alloc_ge.canode >= node(split_size & (sizeof(struct lmm_node) - 1)) == 0lmm_dump(lmm=%p)
-dump.cnode->size >= sizeof(*node) free_check=%08lx
-reg->free == free_checklmm_dump done
- region %08lx-%08lx size=%08lx flags=%08lx pri=%d free=%08lx
- node %p-%08lx size=%08lx next=%p
-(node->size & (sizeof(struct lmm_node) - 1)) == 0block != 0reg != 0(DWORD)prevnode + prevnode->size == (DWORD)node(DWORD)node + size == (DWORD)nextnodestats.cLMM=%p: %u bytes in %u regions, %d nodes
-assertion %s failed in %s at line %i (task:%i_%i)
-MAGIC assertion failed in %s at line %i (task:%i_%i): %s
-KERNEL PANIC (sys_panic_stub): %s
-KERNEL PANIC (sys_panic): %s
-FreeExeSleepWaiting on joinTime (EXACT) : %lus %luns
-< Memory Dump >
-< Level %d : %s Code: %d Version: %d >
-8Œÿÿ’ÏÿÿšÏÿ(T#ÿ@_#ÿÿÿÿÿÿÿÿÿÿÿÿ1234567890!@#$%^&*()-_=+[{]};:'"`~/?,<.>\|   - -1234567890.+*/-+*-aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 1234567890!"œ$%&/()='?^Š‚+*•‡…ø\|<_,:.;—õ   - -1234567890.+*/-+*-aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ[]@#P\#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -4#4#ÿ3#ø3#ñ3#ê3#ã3#Ü3#T}"\}"\}"39#&9#9#9#ì8#Ö8#Æ8#²8#£8#“8#†8#q8#`8#F8#:8#“8#'8#þþAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAšg:#ðÿÿÿÿGCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)01.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.text.rodata.data.sbss.bss.comment.note"€€)!€)#*¨ )(T#¨D /4_#ÀO5@_#ÀO8ã :ÀOLC ahtgI
\ No newline at end of file
/start/pse51/ptest3
Property changes:
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: start/pse51/ptest2.c
===================================================================
--- start/pse51/ptest2.c (revision 1087)
+++ start/pse51/ptest2.c (nonexistent)
@@ -1,152 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: ptest2.c,v 1.1.1.1 2002-09-02 09:37:47 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:47 $
- ------------
-
- Posix test 2:
-
- pthread_once + thread_specific_data
-
- the main task:
- creates a key
- creates 2 tasks, J1, J2
- at t = 0.4 sec. it kills J1 and J2
-
- J1 and J2 will set and check the thread specific data
- and when the die, a destructor is called (twice, because the value
- is not set to null...)
-
- non standard function used:
- cprintf
- sys_gettime
- keyboard stuffs
- sys_end
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <sys/types.h>
-#include <pthread.h>
-
-#include <kernel/kern.h>
-#include <drivers/keyb.h>
-
-pthread_key_t prova_key;
-
-pthread_once_t once = PTHREAD_ONCE_INIT;
-
-void once_init()
-{
- cprintf("ONCE: (pid=%d)\n", exec_shadow);
-}
-
-void destr_key(void *arg)
-{
- cprintf("J (pid=%d) destructor called with value %d\n", exec_shadow,(int)arg);
- pthread_setspecific(prova_key,(void *)((int)arg/100));
-}
-
-void print_test()
-{
- int val;
-
- val = (int)pthread_getspecific(prova_key);
- cprintf("J (pid=%d) printtest value=%d\n", exec_shadow, val);
-}
-
-void *J(void *arg)
-{
- pthread_once(&once, once_init);
- cprintf("J (pid=%d) starts and call setspecific\n", exec_shadow);
- pthread_setspecific(prova_key,arg);
- print_test();
- cprintf("J (pid=%d) exits\n", exec_shadow);
-
- return 0;
-}
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-
-int main(int argc, char **argv)
-{
- int err;
- pthread_t j1, j2;
-
- KEY_EVT emerg;
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
-
- cprintf("main: creating prova_key\n");
- pthread_key_create(&prova_key, destr_key);
-
- cprintf("main: provakey =%d\n", prova_key);
-
- cprintf("main: creating J1\n");
- err = pthread_create(&j1, NULL, J, (void *)1414);
- if (err) cprintf("Error creating J1\n");
- cprintf("main: J1 has PID %d\n",j1);
-
- cprintf("main: creating J2\n");
- err = pthread_create(&j2, NULL, J, (void *)3141);
- if (err) cprintf("Error creating J2\n");
- cprintf("main: J2 has PID %d\n",j2);
-
- cprintf("main: waiting 0.4 sec\n");
- while (sys_gettime(NULL) < 400000);
-
- cprintf("main: kill J1 and J2\n");
- pthread_cancel(j1);
- pthread_cancel(j2);
-
- cprintf("main: ending...\n");
-
- return 0;
-}
Index: start/pse51/ptest4
===================================================================
--- start/pse51/ptest4 (revision 1087)
+++ start/pse51/ptest4 (nonexistent)
@@ -1,418 +0,0 @@
-ELF"4ˆi4 ( €""¨E¨E (F¨U#¨U# 0ó 덶°­üORäe‹Ká€uU¿€ Ç–eÆG1GeÆGGeÆG2GeÆG¸ë"fe£ÈU#Áèfe£ÎU#¨]#¿€ Ç’eÆG0GeÆGf¸0ŽØŽÀŽÐŽàŽè¼Àˆ#ÇpÃ%Àh#ÇtÃ%Àˆ#£´]#‰¸]#¨]#êµ"8®]#üèž×ê U‰å‹Eê ‰öU‰åSƒì<ÆEÙxÆEÚ-ÆEØhD"ƒì‹EØf‰$ÆD$-è|ÇEô("ÇEð]èEì‰$è˜pƒÄ jSjèƒ[Ç$L3#èóêjhx"jEÔPèURƒÄ …Àtƒì h_3#èÍêƒÄƒì hr3#è½êjhx"jEÐPèRƒÄ …Àtƒì h…3#è—êƒÄƒì h˜3#è‡êjhx"jEÌPèéQƒÄ …Àtƒì h«3#èaêƒÄƒì h¾3#èQêƒÄ‰öƒì jèv<ƒÄ=?Bvìƒì h3#è+êƒÄjÿuÔè‚YƒÄvƒì jèB<ƒÄ=„vìƒì hÓ3#è÷éƒÄÿuÐèSÇ$í3#èà鸃Ä‹]üÉÍvU‰åƒìÿ5Lã#h@2#èºéƒÄÉÐU‰åWVSƒì4ÿ5Lã#h€2#è›éÇEЍ}ÐÇGuÈÇFÇEÈÇEØ\"ÇEÜÇ$è×=‰Ã‹‰EàE؉ƒÄVWèK‰Ç‹Uà‰‹NºÓMb‰È÷êÁúÁù)ʉ$ÿuÈWÿ5Lã#hÀ2#èé¸ƒÄ eô[^_]ÍvU‰åƒìÿ5Lã#h43#èîèƒÄÉÐU‰åƒìèÁ:ÉÍvU‰åƒìj ÿujh'èõƒè¨è/±è^·èٝƒÄ jjjè§Qè–{¸èƒÄÉÃU‰åWVSƒìX‹]}¨¾¼]#ü¹ó¥E¸‰E¨fÇE¸ÇE¼ÇEÀfÇEÄÇEÐÇEÔÇEÜÇEà‰]ÈÇEØÇEÌjèàP‰EÐÇEÜÇEàƒMÌ
-è~¡E¨‰$ècƒÄ…Àyƒì h4#ècèƒÄƒì SèoE¸ƒÄeô[^_]ÍvU‰åƒìŠU€=Ì^#„¶€ú*t€úªt
-€ú6t€ú¶uÆÌ^#¸é›„Òy,ÆÌ^#€ú¸uÆØ^#ÆÎ^#ëՀúuÐÆØ^#ëljöÆÌ^#€ú8u€ -Ø^#ÆÎ^#멀úu € -Ø^#뛉ö€ú5uf¾u‰#·Àé)v€ú…•f¾\‰#·Àé -v€úàuÆÌ^#éTÿÿÿv€ú*t€ú6u2ÆÍ^#€ú*u€ -Ø^#é/ÿÿÿ‰ö€ú6…$ÿÿÿ€ -Ø^# éÿÿÿv€úªt€ú¶u"ÆÍ^#€úªt €ú¶…öþÿÿÆØ^#éêþÿÿ€úFu€=Ñ^#•Ñ^#ë.v€ú:u€=Ï^#•Ï^#ëv€úEu;€=Ð^#•Ð^#ƒì¶Ñ^#P¶Ï^#P¶Ð^#Pèõ¸ƒÄé€úu€ -Ø^#éhþÿÿv€ú8u€ -Ø^#éTþÿÿv€út€ú¸uÆØ^#é;þÿÿ‰ö¸„҈рúRt2€úOt-€úSt(€úPt#€úQt€úKt€úLt€úMt€úGt
-€úHt€úIu€=Ð^#uT€=Í^#uK·Â -ÿë~€=Ï^#t/Bð< vBâ<vBÔ<w€=Í^#t¶Âf¾€@‰#·ÀëG€=Í^#t¶Âf¾€à‰#·Àë-v€=Î^#t¶Âf¾€€Š#·Àëv¶Âf¾€@‰#·ÀÉÃU‰åWVSƒì,}؃ìjE×PèòƒÄ…À„¡ƒì ¶E×Pèöüÿÿ‰ÂƒÄf…Ò„†÷Âÿt  Ø^#ƒÈ@ë‰ö Ø^#ˆE؈UيE׈EÚ±»;8‰#}8¾Àˆ#v݊D2:EÚuŠ2:EØuƒì Wÿ’Ĉ#±ƒÄC;8‰#|ЄÉuƒìjW¿‹#P襦ƒÄè-é<ÿÿÿU‰å‹E£È^#ŠˆB‰#ŠPˆC‰#ŠPˆD‰#ŠPˆE‰#ŠPˆF‰#ŠPˆG‰#ŠPˆH‰#ŠPˆI‰#ŠPˆJ‰#ŠP ˆK‰#ŠP
-ˆâ‰#ŠP ˆã‰#ŠP ˆä‰#ŠP -ˆå‰#ŠPˆæ‰#ŠPˆç‰#ŠPˆè‰#ŠPˆé‰#ŠPˆê‰#ŠPˆë‰#ŠPˆL‰#ŠPˆì‰#ŠPˆM‰#ŠPˆí‰#ŠPˆZ‰#ŠPˆú‰#ŠPˆ[‰#ŠPˆû‰#ŠPˆg‰#ŠPˆŠ#ŠPˆh‰#ŠPˆŠ#ŠP ˆi‰#ŠP!ˆ Š#ŠP"ˆu‰#ŠP#ˆŠ#ŠP$ˆs‰#ŠP%ˆŠ#ŠP&ˆt‰#ŠP'ˆŠ#ŠP(ˆk‰#ŠP)ˆ Š#ŠP*ˆy‰#ŠP+ˆŠ#ŠP,ˆN‰#ŠP-ˆî‰#ŠP.ˆO‰#ŠÖˆï‰#ŠP0ˆA‰#ŠP1ˆá‰#ŠP2ˆ\‰#ŠP3ˆü‰#ŠP4ˆDŠ#ŠP5ˆ/Š#ŠP6ˆ0Š#ŠP7ˆ1Š#ŠP8ˆ+Š#ŠP9ˆ,Š#ŠP:ˆ-Š#ŠP;ˆ'Š#ŠP<ˆ(Š#ŠP=ˆ)Š#ŠP>ˆ2Š#ŠP?ˆ3Š#ŠP@ˆŽ‰#ŠPAˆw‰#ŠPBˆu‰#ŠPCˆŠ‰#ŠPDˆ.Š#ŠPEˆŠ#ŠPFˆ*Š#ŠPGˆ^‰#ŠPHˆþ‰#ŠPIˆp‰#ŠPJˆŠ#ŠPKˆn‰#ŠPLˆŠ#ŠPMˆ`‰#ŠPNˆŠ#ŠPOˆR‰#ŠPPˆò‰#ŠPQˆa‰#ŠPRˆŠ#ŠPSˆb‰#ŠPTˆŠ#ŠPUˆc‰#ŠPVˆŠ#ŠPWˆW‰#ŠPXˆ÷‰#ŠPYˆd‰#ŠPZˆŠ#ŠP[ˆe‰#ŠPRˆŠ#ŠP]ˆf‰#ŠP^ˆŠ#ŠP_ˆr‰#ŠP`ˆŠ#ŠPaˆq‰#ŠPbˆŠ#ŠPcˆX‰#ŠPdˆø‰#ŠPeˆY‰#ŠPfˆù‰#ŠPgˆP‰#ŠPhˆð‰#ŠPiˆS‰#ŠPjˆó‰#ŠPkˆ_‰#ŠPlˆÿ‰#ŠPmˆT‰#ŠPnˆô‰#ŠPoˆV‰#ŠPpˆö‰#ŠPqˆo‰#ŠPrˆŠ#ŠPsˆQ‰#ŠPtˆñ‰#ŠPuˆm‰#ŠPvˆ -Š#ŠPwˆU‰#ŠPxˆõ‰#ŠPyˆl‰#ŠPzˆ Š#ŠP{ˆšŠ#ŠP|ˆ›Š#ŠP}ˆ§Š#Š@~¢¨Š#]ÍvU‰åWVSƒì\‹]}ؾà^#ü¹󥿸ƒ=Ô^#…Qº¾@‰#¹à‰#‰ö·ÂÆ0ÆBfúví…Ûu]؃{ÿuÇCÈ]#ƒì ÿsèûÿÿÇ$jjjh94#èw™f£‹#ƒÄ fƒøÿu ¸þÿÿÿéÞ‰öjjjh94#è؜f£‹#ƒÄfƒøÿuƒì ¿‹#Pè= ¸ýÿÿÿ頍vÇ8‰#ƒ{ÿuÇC4"ƒ{tIÆE™cÆEš.ÆE˜ƒìÿsƒì‹E˜f‰$ÆD$.èÅÆE˜ƒÄÿsƒì‹E˜f‰$ŠEšˆD$襃ă;ÿuQfÇE¨ÇE¬ÇE°fÇE´ÇE¸ÇEÐÇEÈÐÇEÄ ÇEÀ¨aÇE¼
-ÇE̍E¨ë‹ƒì jjPh<"hB4#èÿ‰ÃƒÄ ‰‹#ƒøÿu'ƒì ¿‹#Pè;Ÿ¿‹#‰$è,Ÿ‰Ø钐ƒ=Ü^#uWƒì ÿ5‹#艉ǃąÿt4ƒì ¿‹#Pèôž¿‹#‰$è垃Äÿ5‹#èg5¸üÿÿÿë=ÇÜ^#ëèƒì¶Ñ^#P¶Ï^#P¶Ð^#PèûÇÔ^#‰øƒÄeô[^_]ÃU‰åƒì¶EPEèP¿‹#PèØ ƒÄ„Àt÷Eè@u¶Eéë‰ö¸ÉÐU‰åƒì ¶E Pÿu¿‹#P蝠·ÀƒÄÉÐU‰åSƒ=8‰#0‹ -8‰#Í»Àˆ#‹Ef‰ŠE
-ˆD‹E ‰‚Ĉ#A‰ -8‰#‹$ÉÉöU‰åƒìèÉÍvU‰åƒìè±ÉÍvU‰åƒì¸ÿÿÿÿƒ=Ô^#t9蓃ì ÿ5‹#è-4¿‹#‰$莝¿‹#‰$蝸ƒÄÉÐU‰åƒìjèÙÇ$èÓØÇ$(4#è›Øè²-ƒÄÉÐU‰åWVSƒìŠEˆEó¿1¾d»`‰ö¹v‰òì©t"‰ÈA=þÿÿvì¸ÿÿÿÿ…Àu‰ÚŠEóî¸ë‰ö¸ë搸ÿÿÿÿÇEì¹d…Àt¸ÿÿÿÿët¸ë‰Êì©uî‹EìÿEì=þÿÿvé¸ÿÿÿÿ…Àu‰Úì¶Àë¸ÿÿÿÿƒøÿu
-¸þÿÿÿë3v=úu ¸ë"‰ö=þt ¸ýÿÿÿë‰ö‰øO…À9ÿÿÿ¸üÿÿÿƒÄ[^_]ÃU‰åVSƒìŠEˆE÷³Ô¾¹d‰ö‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë -¸ë搸ÿÿÿÿ…Àt¸ÿÿÿÿëL¸ë&»¹d‰ö‰Êì©tâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àuº`ŠE÷î¸ëv¸ÿÿÿÿ…Àt¸ÿÿÿÿëj¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àuºdì© tº`ì¶Ðëvºÿÿÿÿ‰Ð…Òx¸úú”ÀDþƒÄ[^]ÃU‰åWVSƒì »¾`‰ØK…À~^ƒì hÿè¼ýÿÿ‰ÂƒÄ…Òu{¿¹d‰Êì©u‰øG=þÿÿvì¸ÿÿÿÿ…Àu‰òì¶Ðëv¸ëꐺÿÿÿÿúªu›¸üÿÿÿúª…ƃì hõèMýÿÿ‰ÂƒÄ…Òt(¸ûÿÿÿ馉ö¸ýÿÿÿ隉ö¸ë.¸ëZ³`¾¹d‰Êì©tډðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî³e¾¹dv‰Êì©t®‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØîƒì hôèªüÿÿ‰ÂƒÄ¸…Ò•ÀHƒàƒèeô[^_]ÃU‰åWVSƒì ¾»d¹`‰Úì©t -‰Êì‰ðF=þÿvé³­¾¹d‰Êì©„‚‰ðF=þÿÿvè¸ÿÿÿÿ…ÀuºdˆØî¾»d¹`‰Úì©t -‰Êì‰ðF=þÿv鳪¾¹d‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ë搸놐¸ÿÿÿÿ…Àt¸÷ÿÿÿéݐ¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àu º`ì¶Àë¸ÿÿÿÿƒøUt¸ÿÿÿÿ錸ë&³«¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸öÿÿÿé9¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àu º`ì¶Àë¸ÿÿÿÿ…Àt¸þÿÿÿé鐸ë&³®¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…À…<èzüÿÿ…À…Žƒì hóèIúÿÿƒÄ…Àt
-¸ùÿÿÿépƒì jè.úÿÿƒÄ…Àt¸øÿÿÿéU¸ë.Æì^#³©¾¹d‰Êì©tډðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸ôÿÿÿéù¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àu º`ì¶Àë¸ÿÿÿÿ…Àt¸óÿÿÿ驐¸ë&³¨¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸õÿÿÿéU¸ë&³Ó¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸ðÿÿÿ鐸ë&³Z¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî¸ë¸ÿÿÿÿ…Àt¸ïÿÿÿ魐Æì^#ëBv¸ë^¹þÿ¾d»`‰òì¶ø÷Çt‰Úì¶À÷Ç tƒøZt»IƒùÿuÙ³§¾¹d‰Êì©tª‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àté»þÿÿ‰ö¸ë:€=ì^#„þÆì^#³¨¾¹d‰Êì©tΉðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸îÿÿÿ鱐¸ëvƒì hóèWøÿÿ‰ÃÇ$dèIøÿÿÃÇ$èè;øÿÿÃÇ$è-øÿÿÃÇ$çèøÿÿþ§ƒÄ¿¹dv‰Êì©t’‰øG=þÿÿvì¸ÿÿÿÿ…Àuºd‰ðî¸ë¸ÿÿÿÿ…Àt¸íÿÿÿë…ÛuÆì^#¸eô[^_]ÃU‰åVS¡_#…Àt¡_#H£_#¸é²¸ë6ƒ=ø^#uKŠü^#¾¹dv‰Êì©t҉ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØîÿø^#뤍v¸ë:ƒ=ø^#uGÇø^#³ô¾¹d‰Êì©tΉðF=þÿÿvì¸ÿÿÿÿ…À…Xÿÿÿº`ˆØîéKÿÿÿ‰ö¸[^]ÍvU‰åWVSƒì ¡_#@£_#¾õ³Ô¿¹dv‰Êì©t"‰øG=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ë搸ë.¸ÿÿÿÿ…Àu0»¹d‰Êì©tډØC=þÿÿvì¸ÿÿÿÿ…Àuº`‰ðîœúX‰Çƒì hõè5õÿÿ‰ÃƒÄ…Ût¸ûÿÿÿéù‰ö¸ë1¾§ÇEð¹dv‰Êì©tڋEðÿEð=þÿÿvé¸ÿÿÿÿ…Àu ºd‰ðî¸ë¸ë=¸ëq¸ÿÿÿÿþ`ÇEð¹d‰Êì©t΋EðÿEð=þÿÿvé¸ÿÿÿÿ…Àuºd‰ðî¾eÇEð¹dv‰Êì©tš‹EðÿEð=þÿÿvé¸ÿÿÿÿ…Àuº`‰ðîƒì hôè;ôÿÿÃĉøPÆí^#‰Øeô[^_]ÐU‰åWVSƒì ¸ÿÿÿÿ€=ì^#„ºœúX‰Æƒì hõèóóÿÿƒÄ…Àt(¸ûÿÿÿé—‰ö¸ë:¸ëf¸é“‰ö³`¿¹d‰Êì©tΉøG=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî³G¿¹dv‰Êì©t¢‰øG=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØ¿¹dv‰Êì©„rÿÿÿ‰øG=þÿÿvè¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt ¸îÿÿÿ鐃ì hôèÿòÿÿƒÄ…Àt¸Ûÿÿÿ飉ö¸ë:‰ðP¡_#@£_#¾ô³Ô¿¹d‰Êì©tΉøG=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë -¸ë.¸ÿÿÿÿ…Àu0»¹d‰Êì©tډØC=þÿÿvì¸ÿÿÿÿ…Àuº`‰ðîÆí^#¸eô[^_]ÍvU‰åƒìÇ$Œ#Ç Œ#ƒ=ô^#t!úè‹õÿÿ£ð^#Çô^#û…Àtúèôÿÿû¡ð^#…Àuƒìÿuh ""jè½U¸ƒÄÉÍvU‰åVS¡_#@£_#³õ¾¹d‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî¸ë -¸ë搸ÿÿÿÿ[^]ÍvU‰åVS¡_#@£_#³ô¾¹d‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî¸ë -¸ë搸ÿÿÿÿ[^]ÍvU‰åƒì‹MœúX‰Â¡ Œ#@%ÿ£ Œ#Š€ ‹#ˆ‰ÐP€9úu è(úÿÿë‰ö¸ÉÐU‰åƒìƒ= _#t(Ç„Œ#Ç€Œ#LjŒ#Ç _#‹E£_#ƒ=ô^#t!úèôÿÿ£ð^#Çô^#û…Àtúèòÿÿû¡ð^#…Àu.¸ìÿÿÿ€=ì^#t ƒìjÿh\""j è'TÆí^#¸ƒÄÉÉöU‰åS‹MœúX‰Ã¡€Œ#@ƒà?£€Œ#º@Œ#ŠˆA¡€Œ#@ƒà?£€Œ#Šˆ¡€Œ#@ƒà?£€Œ#ŠˆA‰ØP¸‹$ÉÉöU‰åƒì€=í^#tèäùÿÿƒì j è6TÆí^#¸ƒÄÉÐU‰åƒìƒ=ô^#t!úè óÿÿ£ð^#Çô^#û…Àtúè™ñÿÿû¡ð^#…Àt¸ë¶ì^#ÉÍvU‰åVSŠEŠU€} t ƒ -ü^#ë ‰öƒ%ü^#„Àt ƒ -ü^#ëƒ%ü^#„Òtƒ -ü^#ë¸ë6¸ëbƒ%ü^#³õ¾¹d‰Êì©t҉ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî³í¾¹dv‰Êì©t¦‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØîÿø^#[^]ÐU‰åSƒìœúX‰Ã€=í^#tè–øÿÿè‘ðÿÿƒì hóèhîÿÿƒÄ…Àuƒì jèWîÿÿƒÄ…Àu‰ØP‹]üÉÍvU‰åº`ì¶ÈœúX‰Â¡ Œ#;$Œ#t¡$Œ#ˆˆ ‹#@%ÿ£$Œ#‰ÐP]ÉöU‰åƒìº`ì¶Ðƒ=ˆŒ#u €úúu¡_#H£_#郍v÷ÂÀuxÿˆŒ#œúX‰Á¡€Œ#;„Œ#t¡„Œ#ˆ@Œ#@ƒà?£„Œ#ë"‰ö¡„Œ#+ˆŒ#ƒÀAƒà?£„Œ#LjŒ#‰ÈPƒ=ˆŒ#uLjŒ#ƒì ÿ5_#èƒÄÉÉöU‰åSƒì}™w‹UÑâU‰ÐÁà)Ðfƒ<ÅHä#uè¡âNj¸ÿÿÿÿ鏐ƒ= ã#tcœúX‰Ã‹UÑâU‰ÐÁà)ЍÅ0ö€!ä# t ÿ€$ä#ë-v‹EÑàE‰ÂÁâ)‹Õ$ä#ƒì‹•€ã#ÿuRÿP@ƒÄ‰ØPéè+¦…ÀtgœúX‰Ã‹UÑâU‰ÐÁà)ЍÅ0ö€!ä# t ÿ€$ä#ë2v‹EÑàE‰ÂÁâ)‹Õ$ä#ƒì‹•€ã#ÿuRÿP@蔃ĉØPé­úèò¶‹Lã#R‰ÑÁá)Ñ» ä#f‰DË‹UÑâU‰ÐÁà)ЍÅ0öD t ÿ€$ä#ë?vƒìU‰ÐPjÿL_#‹MI‰ÐÁà)ЋÅ$ä#ƒÄ‹•€ã#QRÿP@è/ƒÄ¡Lã#@‰ÂÁâ)ƒì ¿Õ(ä#Pè`¶èƒÄû¸‹]üÉÐU‰åWVSƒì ‹]f…Ûuèæànj¸ÿÿÿÿé"‰öƒ= ã#„“œúX‰ÇÇEð}ð™s¾ ä#‹UðÑâUð‰ÐÁà)ÐÁàf9\,uHƒÀ0öD0 t ÿ€$ä#ë6ƒìEðPjÿL_#‹MðI‰ÐÁà)ЋÅ$ä#ƒÄ‹•€ã#QRÿP@ƒÄÿEð}ð™~“‰øPé}‰öè;¤…À„›œúX‰ÇÇEð}ð™w¾ ä#‹Eð@‰ÂÁâ)Õf9\,uJƒÀ0öD0 t ÿ€$ä#ë8vƒìEðPjÿL_#‹MðI‰ÐÁà)ЋÅ$ä#ƒÄ‹•€ã#QRÿP@ƒÄÿEð}ð™~èj‰øPéԐúèÊ´‹Lã#R‰ÑÁá)Ñf‰Í(ä#ÇEð}ð™w¾ ä#‹Eð@‰ÂÁâ)Õf9\,uJƒÀ0öD0 t ÿ€$ä#ë8v‹MðI‰ÐÁà)ЋÅ$ä#ƒì‹•€ã#QRÿP@ƒÄEðPjÿL_#ƒÄÿEð}ð™~èÞ ¡Lã#@‰ÂÁâ)ƒì ¿Õ(ä#Pè´èÁƒÄû¸eô[^_]ÃU‰åSƒìúè㳋Lã#R‰ÑÁá)Ñf‰Í(ä#ƒìhä#j蛃čUð¡ä#;Xã#|¡ä#+Tã#‰Eð¡ä#+Xã#ë!‰ö¡ä#+Tã#H‰Eð¡ä#+Xã#ʚ;‰B‹Mð ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ôºÓMb‰Ø÷êÁú‰ØÁø)ÂыLã#R‰ÐÁà)Ð) Ålä#ƒì Qè. ƒÄƒ=\ã#ÿtƒì ÿ5\ã#ÿ(ã#Ç\ã#ÿÿÿÿƒÄ‹ -Lã#I‰ÐÁà)ЋÅ$ä#ƒì‹…€ã#QPÿRLè{ ƒÄhLã#jÿL_#ÇLã#ÿÿÿÿÇ`ã#ÿÿÿÿèV ¡Lã#@‰ÂÁâ)¿Õ(ä#‰$苲è:ƒÄû‹]üÉÐU‰åƒìhà("èФƒÄÉÍvU‰åƒìj軤ƒÄÉÉöU‰åƒìƒ=_#u(èè
-ƒì ¡Lã#@‰ÂÁâ)¿Õ(ä#P貃ÄÉÍvU‰åWVSƒìhJ4#è)ƒÄ» ä#ëv‹Eð@‰ÐÁà)ЁLÃ0€ƒì hÄã#èr0‰EðƒÄƒøÿ„“@‰ÐÁà)ÐöDÃ1@u¾‹UðR‰ÃÁã)ÃÁã¾ ä#¡_#‰3@£_#‹E ‰Dƒìjÿuƒ4ä#PèHÃÆD'ƒÃ fÇD3‹Mf‹%ÿf‰D3
-f‹A f‰D3 ƒÄ‰Ø‰ñº‹]ƒ{tf‹Sf‰T‹UðR‰ÁÁá)ÁÁáY0‹U‹B -‰ƒ ä#¿$ä#Ç;¾(ä#¡Lã#@‰ÂÁâ)‹DÖ0‰3º,ä#ǍAP‹]ð‰˜ ä#Ç8ÇÿÿÿÿÇ0ÿÿÿÿǁ€ä#°Ç8Ç0ǁÁÀǁ ä#Ç9ºۍƒ€ 
-Ç…„ä#Bƒúvì‹Eð@‰ÐÁà)ÐÁàÀǂ(ä#ÿÿÿÿǂ,ä#tä#‰ðä#º‹Mðɍ€ ‰ö
-Ç…ðä#Bƒú~ì»ëC;Pã#sƒì‹€ã#ÿuSÿPƒÄ…Àxß;Pã#u7‹]ð[‰ÂÁâ)ÂfÇÕHä#ƒìhÄã#Sè‚.èIÚDŽ鄉ö‹Eð@‰ÐÁà)Ѝ4ʼnž$ä#ƒì‹€ã#ÿuÿuðSÿP,ƒÄ…ÀyWfdžHä#ƒìhÄã#ÿuðè".èéÙDžë'èÛÙǃ釃ì ÿuðè9èÀÙdž¸ÿÿÿÿƒÄëjƒE‹U‹zü…ÿtY‰ö¾ëF;5Dã#s0ƒìµ‹ƒàã#WVÿP ƒÄ…Àxۃ싃àã#WÿuðVÿP$ƒÄ;5Dã#t‡ƒE‹M‹yü…ÿu©‹Eðeô[^_]ÉöU‰åƒìEPÿuÿu ÿuè`üÿÿƒÄÉÍvU‰åWVSƒì ‹} ƒt6‹EÑàE‰ÂÁâ)‹G‰Õ,ä#‰Æ‹UÑâU‰ÐÁà)Ѓ ÅPä#@ën‰öƒì ‹UÑâU‰ÐÁà)зÅNä#Pè@‹UÑâU‰ÑÁá)Ñ»,ä#‰ˉƋEÑàE‰ÂÁâ)ƒÄƒ<Óuƒì ÿuèìèsØLjëtv‹EÑàE‰ÂÁâ)» ä#·DÓ.ƃì ·GPjÿwVhÌ/"èՑ‰ÁƒÄ f…Éu?ƒì‹UÑâU‰ÐÁà)зDÃ.PVèƒÄÿuèvèý×lj¸ÿÿÿÿƒÄëN‹EÑàE‰ÂÁâ)Âf‰ Õ(ä#ƒìU‰ÐPjÿL_#ƒÄöGu ÿ@ã#ëvöGuÿä#¸eô[^_]ÍvU‰åWVSƒì ‹M‹U ‹]œúX‰ÇEPSRQè­úÿÿ‰ÆƒÄƒþÿ„ɍv‰ÐÁà)ЋÅ$ä#‹…€ã#ƒx(„èà…À‰€»;Dã#svƒì‹àã#VSÿP(ƒÄC;Dã#råv‰ÃÁã)ÃÁ㋃$ä#ƒì‹…€ã#VPÿR0fǃHä#ƒÄhÄã#Vè+ƒÄèÈÖLJ‰øP¸ÿÿÿÿë#vƒìSVèŽýÿÿƒÄº…À”ÂJ ։øP‰ðeô[^_]ÃU‰åVS‹u»;Dã#svƒì‹àã#VSÿP(ƒÄC;Dã#råv‰ÃÁã)ÃÁ㋃$ä#ƒì‹…€ã#VPÿR0fǃHä#ƒÄhÄã#VèT*ƒÄeø[^]ÉöU‰åVS‹]è ƒì ¡Lã#@‰ÂÁâ)¾ ä#SÿTÖú‰$èn¡Lã#@‰ÂÁâ)¿DÖ‰$諃čeø[^]ÃU‰åWVSƒì‹]‹}úû™w! [‰ÈÁà)ÈÁຠä#öD0tfƒ|(u û¸ÿÿÿÿéDžÿy$[‰ÁÁá)Á Í°¸$ä#‹<Çë ‰öƒÿv¿[‰ÁÁá)Á Í°‰Mä¹(ä#‰Mì‹Uä‹
-‰Â)úƒÂ‰Ð¾º÷ö‰Eð‹uä;tMۍƒ€4‹MðىÈÁà)ȍ Å°‰ö2‹…„ä#‹] ‰ƒÃ‰] B»‰Ðº÷ó‹]ì;uÔû‰øƒÄ[^_]ÐU‰åSƒì‹]‹ -Lã#I‰ÐÁà)ЍÅö‚Pä#tɍ€È‚Øä#…„ä#¡ä#;Tã#|;Tã#uA¡ä#;Xã#}4ƒìSÿ5Lã#ÿ5Xã#ÿ5Tã#ÿ5ä#ÿ5ä#h`4#èàºƒÄ è@ ‹]üÉÍvU‰åWVS‹ -Lã#I‰ÐÁà)ЍÅöƒPä#„›ɍ€ȍ‹°(ä#º$ä#‹t‚`‹”À¸,ä#94s‰4‹Lã#[‰ÁÁá)ÁÁፁÀ° ä#¿$ä#B‰8±°‹†(ä#@º‰Ñº÷ñ‰–(ä#ۍƒ€ØÐÇD‡`ƒ<>wÿ>[^_]ÉöU‰åWVS‹M‹] ‹u‹}úù™w!I‰ÐÁà)ÐÁຠä#öD0tfƒ|(uû¸ÿÿÿÿëy…ÛtI‰ÂÁâ)‹Õàä#‰…ötI‰ÂÁâ)‹ÕÜä#‰…ÿtI‰ÂÁâ)‹Õää#‰ƒ}t(ɍ€ȍ I‰ÊÁâ)ÊÕØä#‹…„ä#‹U‰û¸[^_]ÉöU‰å‹Múù™w!I‰ÐÁà)ÐÁຠä#öD0tfƒ|(uû¸ÿÿÿÿë7I‰ÂÁâ)ÂÁ⍂Àǀ ä#ǀ$ä#ǂÜä#û¸]ÍvU‰åWVSƒì ƒ=Lã#ÿt¡Lã#@‰ÂÁâ)ÂöÕPä#…3ƒ=Lã#ÿ„ƒìhä#jèUŽƒÄUè¡ä#;Xã#|¡ä#+Tã#‰Eè¡ä#+Xã#ë"v¡ä#+Tã#H‰Eè¡ä#+Xã#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыLã#R‰ÐÁà)Ð) Ålä#ƒì QènüÿÿƒÄƒ=\ã#ÿtƒì ÿ5\ã#ÿ(ã#Ç\ã#ÿÿÿÿƒÄ‹ -Lã#I‰ÐÁà)Ћ<Å$ä#ƒì‹½€ã#QWÿP<ƒÄ¿4½ƒì ‹†€ã#WÿP$‰ÃƒÄƒûÿt%ƒì[‰ÐÁà)ЋÅ$ä#‹…€ã#SPÿR4ƒÄ븅Àx»ƒûÿuG뫍v‹5Lã#‰`ã#‰Lã#[‰ÐÁà)Ð;Åpä#t0» ä#‰ö¡Lã#@‰ÂÁâ)‹TÓP‰Lã# R‰ÈÁà)È;TÃPu×;5Lã#tƒìhLã#jÿL_#ƒÄ‹ -Lã#I‰ÐÁà)ÐÁྠä#fÇD(‹¸$ä#ƒì‹½€ã#‹`ã#¸;Lã#•ÀPQWÿS8¡Lã#@‰ÂÁâ)ƒÄöDÖ1„Ü¡`ã#;Lã#…Ë¡ä#‰EèMè¡Lã#@‰ÂÁâ)»,ä#‹DÓ@º@B‰Ö™÷þ’’’Áâ‰Ö5ä#‰q¿¡/¸D‰ø÷î‰×Áÿ‰ð™‰þ)Ö¡Lã#@‰ÂÁâ)‹\Ó@ºƒÞC‰Ø÷êÁú‰ØÁø)2Eè‹AºÊš;‰Ó™÷û‰Qjhø="ÿuìÿuèÿ$ã#‰ÃƒÄƒûÿuƒìÿ5Lã#jè£<ƒÄ‰\ã#¡ä#£Tã#¡ä#£Xã#eô[^_]ÉöU‰åWVSƒìÇ°£%úÿuèD»ƒÄ¿$ä#¾ ä#‰ö[‰ÂÁâ)ÂÁâÇ:ÿÿÿÿǂ,ä#ÆDB fÇD0fÇD0
-fÇD0 fÇD0B0Ç0Ç8ǀ(ä#ǀ,ä#‚dä#Ç@Çǂlä#BP‰0Ç8ÇD`DŽÐ‚øæ#Ç@Ǎ‚àÇ0ÿÿÿÿÇ8ÿÿÿÿ‚°Ç8ǀ(ä#ǀ,ä#ÂÀÇ2Ç:ºۍƒ€ v
-ÇD‡`Bƒúvï[‰ÐÁà)ЍÅÀǀ(ä#ÿÿÿÿǀ,ä#ºۍƒ€ 
-DŽ†ÐBƒú~ìCû™Žƒþÿÿ»¹(ä#[‰ÂÁâ)C‰DÑP‰Ãû˜~åÇ ¡%ÿÿÿÿ»™¹,ä#[‰ÂÁâ)Cÿ‰DÑP‰Ã…ÛéÇ|ä#ÿÿÿÿÇÄã#ÇHã#Ç@ã#Çä#Ç`ã#ÿÿÿÿÇLã#ÿÿÿÿÇ\ã#ÿÿÿÿÇXã#ÇTã#ÇPã#ÇDã#Ç ã#èÚè}èÜ6ƒì ÿuèqÉÿÿ£Èã#ƒÄ=×Övƒì hÀ4#è5Ç$豿ƒÄ¸ƒ=Èã#”À‰Eè]è¡Èã#‰CÇ°£%èb‡ƒì SèY‘Ç$Œ>"è­ËÇ$Ì("è)“Ç$ä="è=“ƒÄjjèEÿT_#ƒÄhä#jèô‡èOùÿÿ蒠f£Àã#¡Lã#@‰ÂÁâ)¾ ä#¿DÖ‰$èw Ç$èߒÿP_#Ç°£%ƒÄ»ƒ=Hã#ŸÃSjèɃă=ä#teè„ Ç_#ƒìhä#jèc‡è f£Àã#è³øÿÿÇ$ä="èo’¡Lã#@‰ÂÁâ)¿DÖ‰$èߟÇ$èG’ƒÄÇ°£%ƒìSjèCèj†Ç°£%ƒÄjjè(ƒÄúƒ=Hã#t"ƒìÿ5Hã#hë4#èø°Ç$ÿÿÿÿ较ăì jèó½ƒÄeô[^_]ÃU‰åSƒìƒ=_#…•èÿ…Àuúè-Ÿ‹Lã#R‰ÑÁá)Ñf‰Í(ä#‹E£Hã#Ç_#ƒ=Lã#ÿ„ƒìhä#jè?†ƒÄUð¡ä#;Xã#|¡ä#+Tã#‰Eð¡ä#+Xã#ë ¡ä#+Tã#H‰Eð¡ä#+Xã#ʚ;‰B‹Mð ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ôºÓMb‰Ø÷êÁú‰ØÁø)ÂыLã#R‰ÐÁà)Ð) Ålä#ƒì QèZôÿÿƒÄƒ=\ã#ÿtƒì ÿ5\ã#ÿ(ã#Ç\ã#ÿÿÿÿƒÄ‹ -Lã#I‰ÐÁà)ЋÅ$ä#ƒì‹…€ã#QPÿR<Ç`ã#ÿÿÿÿÇLã#ÿÿÿÿƒÄ褌…Àtƒì ¿Àã#PèԝƒÄëvƒì ¿Àã#P輝èkƒÄû‹]üÉÉöU‰åSƒìÇEøÿÿÿÿ»º€ã#¡€ã#ƒx(t1ƒì‹šUøRSÿP(ƒÄ…Àu¸ÿÿÿÿëCƒûwº€ã#‹šƒx(uи‹]üÉÉöU‰åƒìè èÀ/ÉÉöU‰åƒìÇ\ã#ÿÿÿÿè§êÿÿÉÐU‰åSƒìœúX‰Ãƒ=°£%tƒ=ä#t‰ØPëƒì jè–ýÿÿƒÄ‰ØP‹]üÉÉöU‰åƒìÿuèzýÿÿƒÄÉÐU‰åSƒì‹UœúX‰ÃƒìRj脉ƒĉØP‰Ð‹]üÉÉöU‰å¸Hã#ƒ=Lã#ÿt‹Lã#R‰ÐÁà)Ѝŀä#]ÉöU‰åSƒìœúX‰Ãƒ=°£%tƒ=ä#t‰ØPëƒì ÿuèíüÿÿƒÄ‰ØP‹]üÉÐU‰å]ÍvU‰åWVSƒì ÇEðÇE컍[ …ƒ¹¨Œ#t[¿ Œ#ƒ<9tP‹Lã#ҍ‚€Ð؍…о ä#ƒ<0t+ûƒì ÿ40ÿ9ƒÄú‹Lã#ҍ‚€Ð؋´†Ð uìCƒû~Œƒ}ìt -ÿEðƒ}ðŽmÿÿÿeô[^_]ÐU‰åVSº¾ Œ#»¤Œ#¹¨Œ#vRÁàÇ0B‰Çƒú~ãǘ’#ÿÿÿÿÇ ’#ǨŒ#Ç Œ#ǤŒ#ÿÿÿÿ[^]ÐU‰åS‹Múƒ= ’#ÿu û¸ ënv¡ ’#@Ç•¨Œ#‰¡ ’#@‹…¤Œ#£ ’#‹@‹U ‰… Œ#º» ä#‰öҍ‚€ÐDŽƒÐBú™~ßû¸‹$ÉÃU‰åú¡Lã#À’ÂU‹•ðä#û]ÍvU‰å‹Múƒùw -Iƒ<…¨Œ#u û¸ë%v¡Lã#À’ÂʋE ‰•ðä#û¸]ÃU‰åS‹]œúX‰Áƒûw -[ƒ<…¨Œ#u‰ÈP¸ë.v[Áà‹ ’#‰¤Œ#ǀ¨Œ#‰ ’#‰ÈP¸‹$ÉÃU‰åWVSƒì ¡Lã#‰Eð‰ÂÑâ‰ÐÁà)ЍÅ¿ ä#öD0 tm‹E‰‚ìä#‹UðÑâUð‰ÐÁà)ЁLÇ0@‹UðÑâUð‰ÐÁà)ЍÅÀº(ä#ƒ<ÿt,‹4v‰ÃÁã)ÃÁ㋃$ä#ƒì‹…€ã#VPÿRD‰tPƒÄ¹» ä#;MðtI‰ÐÁà)ЋUð9TÃP„ˆAù™~ۋUðÑâUð‰ÐÁà)Ѓ<Åtä#t[»$ä#ûƒì ‹UðÑâUð‰ÐÁà)ЋDÃPÿpÿƒÄú‹EðÑàEð‰ÂÁâ)ÕP‹‹@‰‹UðÑâUð‰ÐÁà)Ѓ|ÃPu«èJüÿÿƒì ‹EðÑàEð‰ÂÁâ)» ä#¿DÓPè|~ƒÄEðPjÿL_#‹Eð@‰ÂÁâ)ՃÄöD0@u%ƒì·D.P‹Eð@‰ÂÁâ)Âÿ4Õ,ä#èÁ ƒÄ»;Dã#sƒì‹àã#ÿuðSÿP(ƒÄC;Dã#rã‹MðI‰ÐÁà)ЋÅ$ä#ƒì‹…€ã#QPÿRPÇLã#ÿÿÿÿÇ`ã#ÿÿÿÿ‹Eð@‰ÂÁâ)ƒÄöÕPä#u&ÿ -@ã#ƒ=@ã#uBèZúÿÿë;ƒìRjè0ƒÄëg‹Eð@‰ÂÁâ)ÂöÕPä#uÿ -ä#ƒ=ä#uèúÿÿƒìhä#jèz~ƒÄƒ=\ã#ÿtƒì ÿ5\ã#ÿ(ã#Ç\ã#ÿÿÿÿƒÄè­ïÿÿeô[^_]ÐU‰åVS‹uúv‰ÐÁà)ÐÁຠä#öD0ufƒ|(uèyÁNJû¸ÿÿÿÿ麍v‰ÐÁà)ÐöÅQä#tû雉ö;5Lã#uJv‰ÐÁà)л ä#‹DÃ0©t0©u)ƒì jè¥üÿÿ¡Lã#@‰ÂÁâ)¿DÓ‰$èM–ƒÄ»ëvC;_#}ƒìÝÿ°Ä’#VÿÀ’#ƒÄ…Àtٍv‰ÐÁà)Ё ÅPä#û¸eø[^]ÍvU‰åWVSƒì ‹Ef‰Eòf…ÀuèŠÀnj¸ÿÿÿÿé‰öú¡`ã#@‰ÂÁâ)Âf‹Mòf; ÕLä#”Eñ¾¿ ä#‰öv‰ÐÁà)ÐÁà‹T0÷Â…ˆƒÀ fƒ|8t}÷Âuuf‹Mòf9L8 uj;5Lã#u!÷Ât÷Âuƒì jè{ûÿÿƒÄëC‰ö»ëC;_#}ƒìÝÿ°Ä’#VÿÀ’#ƒÄ…Àtٍv‰ÐÁà)ЁLÇ0Fþ™ŽNÿÿÿ€}ñt(ƒì ¡`ã#@‰ÂÁâ)¿Õ(ä#PèĔƒÄëvû¸eô[^_]ÉöU‰åWVSƒì ¾¿ ä#v‰ÐÁà)ÐÁàfƒ|(tL÷D0
-uB»ë‰öC;_#}ƒìÝÿ°Ä’#VÿÀ’#ƒÄ…Àtٍv‰ÐÁà)ЁLÇ0Fþ™~–eô[^_]ÉöU‰åSƒì¡Lã#@‰ÂÁâ)» ä#‹DÓ0©t7©u0©t)ƒì jè"úÿÿ¡Lã#@‰ÂÁâ)¿DÓ‰$èʓƒÄ‹]üÉÉöU‰åS‹M‹] ¡_#ʼnŠÀ’#‰šÄ’#@£_#‹$ÉÍvU‰åƒìúÿuè½ùÿÿ¡Lã#@‰ÂÁâ)¿Õ(ä#‰$èb“ƒÄÉÐU‰åVS¶uœúX‰Ãƒ=ô•#ÿuèð½Ç‚‰ØP¸ÿÿÿÿéۋ -ô•#‰ÊÁâ‹‚l“#£ô•#‹E‰‚`“#‹E ‰‚d“#‰ðƒà‰‚h“#‰ðƒàƒøtOƒø
-ƒøt -ësvƒøtSëi‰ÈÁàǀl“#ÿÿÿÿƒ=à•#ÿu‰ -à•#ë¡ä•#Áà‰ˆl“#‰ -ä•#ëH‰ö‰ÊÁâ¡è•#‰‚l“#‰ -è•#ë.‰ÊÁâ¡ì•#‰‚l“#‰ -ì•#ë‰ÊÁâ¡ð•#‰‚l“#‰ -ð•#‰ØP¸[^]ÐU‰åƒìƒ=Pã#uƒì h 5#è4 Ç$è°°ƒÄ¡Pã#P‰Pã#ÉÐU‰åƒìƒ=Dã#uƒì h?5#èøÇ$èt°ƒÄ¡Dã#P‰Dã#ÉÐU‰åWVS‹E‹u ‹}»‹HÇöt<€9t5‹ ‰‡€: t€:t‰öC€< t€< uó€< uÆ Cÿ€< uÌÿ[^_]ÐU‰åWVSì¬‹EµTþÿÿ½Xþÿÿ»‹HDžTþÿÿöt<€9t5‹ ‰‡€: t€:t‰öC€< t€< uó€< uÆ Cÿ€< uÌÿƒì…XþÿÿPÿµTþÿÿ蕶ÿÿƒÄeô[^_]ÉöU‰å¸¹l“#v‰ÂÁâ@‰
-ƒø&~òÇܕ#ÿÿÿÿÇà•#ÿÿÿÿÇä•#ÿÿÿÿÇè•#ÿÿÿÿÇì•#ÿÿÿÿÇð•#ÿÿÿÿÇô•#]ÉöU‰åWVSƒì ‹E‹} ƒøt4ƒø ƒøtéЃøt3ƒøtB鳐‹à•#Çà•#ÿÿÿÿë:‰ö‹è•#Çè•#ÿÿÿÿë&‰ö‹ì•#Çì•#ÿÿÿÿë‰ö‹ð•#Çð•#ÿÿÿÿÇ ã#ƒûÿtM¾l“#…ÿt‰ØÁàƒ¸h“#uƒì ‰ØÁàÿ°d“#ÿ`“#ƒÄ‰Ù‰ØÁà‹0‰Â¡ô•#‰2‰ -ô•#ƒûÿu¸Ç ã#eô[^_]ÉöU‰åƒìEüPEøPEôPEðPèñ‹Ç$–#èq؃Äjjhÿÿjh–#h–#èœÎƒÄjjhÿÿÿhh –#h–#è|΃Äjjhÿÿÿþhh<–#h–#è\ÎƒÄ ƒ}ütƒì‹EüHPÿuøh–#è&̓ă}ôtƒìÿuôÿuðh–#è
-̓ÄÉÐU‰åƒì‹E…Àu¸ëƒìjPh–#è´ÎƒÄÉÍvU‰åƒìÿuÿuÿu ÿuh–#èdÐƒÄ ÉÍvU‰åƒì ÿuÿuÿuÿuÿu ÿuh–#è^ÐƒÄ ÉÐU‰åƒì ÿu ÿuh–#èՃÄÉÐU‰åƒìÿuh–#èù҃ÄÉÃU‰åƒìÿuh–#èùփÄÉÃU‰åƒì jÿuh–#èÿ̓ÄÉÉöU‰åƒì ÿu ÿuh–#èªÔƒÄÉÐU‰åƒìh–#è¸ÒÇ$–#èÌփÄÉÍvU‰åWVSƒì‹E@‰ÐÁà)Ðfƒ<ÅHä#…¿ƒìEèPjè½tƒÄ]àºÀ£%Mè‹u‹Dò;A|‹ò+Eè‰Eà‹Dò+A됸À£%‹M‹È+UèJ‰Uà‹DÈ+Eìʚ;‰CºÀ£%‹Eà‹u‰ò‹Eä‰Dòƒì v‰ÃÁã)ÃÁ㍻ྠä#ÿ47ÿ(ã#Ç7ÿÿÿÿ‹ƒ$ä#ƒÄ‹…€ã#ÿuPÿRD¸ƒÄë‰ö¸eô[^_]ÍvU‰åWVSƒì ‹u‹} ƒ>x ~ʚ;~ ¸é–úèvŒ‹Lã#R‰ÑÁá)Ñf‰Í(ä#ƒ=_#t+Ç_#ƒìjhHQ"èˆøÿÿƒÄjhŒM"è%ƒÄƒìhä#jèssƒÄUè¡ä#;Xã#|¡ä#+Tã#‰Eè¡ä#+Xã#ë ¡ä#+Tã#H‰Eè¡ä#+Xã#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыLã#R‰ÐÁà)Ð) Ålä#ƒì QèŽáÿÿƒÄƒ=\ã#ÿtƒì ÿ5\ã#ÿ(ã#Ç\ã#ÿÿÿÿƒÄ‹ -Lã#I‰ÐÁà)ЋÅ$ä#ƒì‹…€ã#QPÿRH‹Lã# R‰ÈÁà)ÈfÇÅHä#ÕÀ£%ƒÄ¡ä#‰Ã‰¡ä#‰ÁN‰J…ÉyCÿ‰Êš;‰Bëzÿɚ;~ ÿjʚ;¡Lã#Ph¼Q"ÿ4ÅÄ£%ÿ4ÅÀ£%ÿ$ã#‰ÆƒÄƒþÿuƒìÿ5Lã#jè1#ƒÄ¡Lã#@‰ÂÁâ)» ä#‰´ÓàÇLã#ÿÿÿÿÇ`ã#ÿÿÿÿèãÿÿ¡Lã#@‰ÂÁâ)ƒì ¿DÓPèIŠèøìÿÿƒÄûèÃ.¡Lã#Áàƒ¸À£%u ƒ¸Ä£%t)…ÿt¡Lã#ºÀ£%‹‰¡Lã#‹D‰G¸ëv¸eô[^_]ÍvU‰åWVSƒì ‹E@‰ÐÁà)Ѝ4Å¿ ä#fƒ|7(u:ƒì žàÿ4;ÿ(ã#Ç;ÿÿÿÿ‹†$ä#ƒÄ‹…€ã#ÿuPÿRD¸ƒÄ븍eô[^_]ÍvU‰åƒì‹M¸À£%ÇDÈÇȍI‰ÐÁà)ÐÁàǀç#ÿÿÿÿ‹€$ä#‹…€ã#QPÿRDè­ÖÿÿƒÄÉÃU‰åƒì ‹E‰EøUøÇBEðPRèTüÿÿ‹EðƒÄÉÃU‰åWVSƒì} ‹uEðPh”5#VèÖ¥‰ÃƒÄƒûuƒ}ðvÇEðƒÆë ‰öÇEð‹Eðº; _#~hƒìWVh`–#蜃Äj
-VèK›ƒÄ»…À•ÃœúX‰Æƒìh`–#‹Eðÿ4…$_#h™5#è]™ƒÄ…Ûuƒì h<6#èI™ƒÄ‰ðPº‰Ðeô[^_]ÍvU‰åVSƒìu ‹]EôPh”5#S襃ăøuƒ}ôvÇEôƒÃëÇEô‹Eôº; _#~JƒìVSh`–#èB›ƒÄj
-S臚ƒÄœúX‰Ãƒìh`–#‹Eôÿ4…$_#h™5#裘ƒÄ‰ØPº‰Ðeø[^]ÉöU‰åVSƒì@‹u‹] ‹EfÇEÈÇEÌÇEÐfÇEÔÇEàÇEäÇEìÇEð‰EØÇEÜÇEè…ÛtT‹C‰E̋C‰EЃ{u
-ÇEÜ1됃eÜߋC ‰EàÇEÀƒì ÿ5`š#è)7ƒÄ+C ‰EċC‰Eì‹C‰EðëD‰öÇEÌÇEЃMÜ ÇEàÇEÀƒì ÿ5`š#èâ6ƒÄ‰EÄÇEìÇEðèI±‹ƒì jEÀPEÈPÿuh¡5#è™Ùÿÿ‰ƒÄ ƒøÿt ƒì PèJÎÿÿƒÄ豉¸ƒ>ÿ”ÀHƒàêƒÀeø[^]ÍvU‰åƒìÿ5`š#èc6ƒÄÉÉöU‰åƒìÿ5`š#èc6ƒÄÉÉöU‰åƒìÿ5`š#è{5ƒÄÉÉöU‰å‹E‹U ‹M£`š#‰dš#‰ -hš#]ÐU‰åVS‹]è°‹0ƒì SèÌîÿÿ‰Ãèm°‰0ƒÄ¸…Û•À@eø[^]ÃU‰åƒìúÿuÿu ÿuÿ5`š#èé5ƒÄûÉÍvU‰åWVSƒì ‹}‹uúÿ6ÿu Wÿ5`š#è3‰ÃƒÄ…Ûu#ƒìÿ5`š#èx5ƒÄ+PWÿ5hš#èffƒÄû‰Øeô[^_]ÃU‰åSƒì ‹] Sÿuè¡eƒÄÿ5`š#è75ƒÄ+‰¸‹]üÉÉöU‰åVSƒì‹u‹] …Ûtƒ;uÇEôƒìEôPë7ƒ;uÇEðƒìEðPë!vÇEèƒì jè_þÿÿ+CUè‰BƒÄRVèT*ƒÄeø[^]ÉöU‰åWVSƒì‹u ‹}ÇEðÿ5`š#è“4‰ÃƒÄ9Þƒþ} ¸ëG‰öƒì ÿuèµ*ƒÄ W‰Ø)ðPÿuè eƒÄ…ÀtÇEð…ÿt‰Ø+‰ƒì ÿuèÙ*‹EðƒÄeô[^_]ÍvU‰åƒì‹Eúƒ8u -ÇûÿU ëû¸ÉÃU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)ÐÁà‹øæ#‰U苀üæ#‰Eìƒùÿtw ‰ÆȉÂÁâ)‹Eè‰Ã;Õøæ#|[‰Eäv1‰ÐÁà)ЍÅ;šøæ#u ‹Eì;‚üæ#|1‰Ï‰ÐÁà)Ћ Åxä#ƒùÿt4 1‰ÐÁà)Ћ]ä;Åøæ#}«ƒÿÿt‰ÐÁà)ЋU‰Åxä#ë‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰Å|ä#‹E@‰ÐÁà)ЍÅP‰ˆ(ä#‰¸,ä#ƒÄ[^_]ÍvU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)л$ä#‰]ð‹´ÃЃùÿtCI‰ÐÁà)Ð;´ÃÐr0»(ä#‰Ï‰ÐÁà)ЋLÃPƒùÿtI‰ÐÁà)ЋUð;´ÂÐsՃÿÿt‰ÐÁà)ЋU‰Åxä#ë
-‰ö‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰Å|ä#‹E@‰ÐÁà)ЍÅP‰ˆ(ä#‰¸,ä#ƒÄ[^_]ÍvU‰åWVS‹}‰ÐÁà)ЍÅP‹,ä#‹°(ä#ƒúÿu ‹E ‰0ë#‰öR‰ÁÁá)Á»(ä#‰ÐÁà)ЋDÃP‰DËPƒþÿt!v‰ÁÁá)Á»,ä#‰ÐÁà)ЋDÃP‰DËP[^_]ÃU‰åS‹]‹ ‰Èƒùÿt/I‰ÐÁà)ЋÅxä#‰ƒøÿt@‰ÐÁà)ÐÇÅ|ä#ÿÿÿÿ‰È‹$ÉÃU‰åS‹]‹M ƒ9ÿt‹@‰ÂÁâ)‰Õ|ä#[‰ÂÁâ)ÕP‹‰‚(ä#ǂ,ä#ÿÿÿÿ‰‹$ÉÃU‰åWVSƒì ‹M‹] ‹}ÇEðú¡Lã#@‰ÂÁâ)4Õ ä#…ÿt‹F8‰…ÛtBƒùt"ƒù ƒùt ë*‰öƒùtë!‹F8 ‰F8ë‰ö‹÷Ð!F8ëv‹‰F8ëÇEð‹F8‰Ã÷Ћ€œ#‰Ñ…ÂtB‰ö‰Ø÷л!Ètv‰Ú©u
-CÑøuòºƒì R范ċ^8‰Ø÷Ћ -€œ#…ÁuÀ‹F8‰Ã÷ЋV<‰Ñ…Ât=‰Ø÷л!Ètv‰Ú©u
-CÑøuòºƒì Rè|ƒÄ‹^8‰Ø÷ЋN<…ÁuÃû‹Eðeô[^_]ÍvU‰åVS‹u‹M ¸…É„¸ƒù‡òv‰ÐÁà)Ðfƒ<ÅHä#u -¸éӍvú‰ÈÁàö€ˆš#uƒ¸€š#uû魉öv‰ÐÁà)ЍÅ\ä#ƒùvèÍ©Çë
-¸Óà »ëC;H_#}ƒìÝÿ°D#Vÿ@#ƒÄ…Àtٍv‰ÐÁà)ЍÅfƒ»Hä#u&ƒìh„œ#VèÔüÿÿ‹ƒ$ä#ƒÄ‹…€ã#VPÿRDƒÄèSm…Àuèû¸eø[^]ÐU‰åWVSƒì‹]‹U ƒûvè©Ç¸ÿÿÿÿévœúX‰Á‰Mðƒ}t‰ÞÁæÆ€š#ü¹‹}ó¥…Òt‰ßÁçÇ€š#ü¹‰Öó¥…Ò„ºöB…°ƒ:‡§ƒ< œ#ÿtq4‰u캠œ#‹@Áà‰Eè‰ÇƒÇ‹ - ®%¸ ¨%‹U苉E䋇¤¨%©t -ƒàý‰‡¤¨%ë‰ö¾ œ#‹Uì‹2@‰ Õ ¨%‰Áƒ}äÿu»‰ - ®%ǝ œ#ÿÿÿÿƒûv -è¨Çë¸þÿÿÿˆÙÓÀ!€œ#‹uð‰ðP¸ƒÄ[^_]ÐU‰åWVSƒì,‹] ¸…Û„~¸ƒû‡pœúX‰Â‰UԉÞÁæ}؁ƀš#ü¹ó¥÷Eàuƒ}Øu ‰ÐPé5vƒûv膧Ǹÿÿÿÿ됸ˆÙÓà#€œ#…Àt -‹UԉÐPéûƒûvèN§Çë‰ö¸ˆÙÓà €œ#‹5„œ#ƒþÿ„ô¸‰ÇˆÙÓçvv‰ÐÁà)ЍÅ`ä#ƒûvèý¦Ç¸ÿÿÿÿë‰ú#‰Ð…À„–v‰ÐÁà)ÐÁàfƒ¸Hä#u\ä#ƒûv -輦Çë 8ƒìh„œ#Vèúÿÿv‰ÃÁã)ÃÁ㋃$ä#ƒÄ‹…€ã#VPÿRDÃྠä#ƒÄƒ<3ÿtƒì ÿ43ÿ(ã#Ç3ÿÿÿÿƒÄ‹MԉÈPéîv‰ÐÁà)Ћ4Åxä#ƒþÿ…ÿÿÿ¾¸‰ÇˆÙÓç‰öv‰ÐÁà)ÐÁàfƒ¸Hä#„…Xä#ƒûvèö¥Ç¸ÿÿÿÿ됉ú#‰Ð…Àu^v‰ÐÁà)ЍÅ\ä#ƒûvèÃ¥Çëv 8»ëvC;H_#}0ƒìÝÿ°D#Vÿ@#ƒÄ…ÀtÙëvFþ™ŽSÿÿÿèzi…Àuè9 -‹MԉÈP¸eô[^_]ÐU‰åWVSƒì,¸ƒ} „T¸ƒ} ‡EœúX‰Â‰Uԋu Áæ}؁ƀš#ü¹ó¥÷Eàuƒ}Øu ‰ÐPé ‰ö÷Eàu;ƒ} vèܤǸÿÿÿÿëv¸ŠM Óà#€œ#…Àt ‹UԉÐPéÃ= ®%ÿu‹MԉÈP¸ 鮉ö‹5 ®%vÁ๠¨%‹‰ ®%‹U ‰¤¨%‹U‰¨¨%‹U‰¬¨%‹Lã#‰°¨%Çÿÿÿÿ‹E Áຠœ#ƒ<ÿu‰4ë>‰ö‹M ‹ œ#‰ÁЃ<Å ¨%ÿt» ¨%
-‹Í 
-ƒ<ÃÿuîR‰4Å ¨%ƒ} vèé£Ç됸ŠM Óà €œ#‹5„œ#ƒþÿ„û¸‰ÃŠM Ó㐍v‰ÐÁà)ЍÅ`ä#ƒ} v蘣Ǹÿÿÿÿë v‰Ú#‰Ð…À„šv‰ÐÁà)ÐÁàfƒ¸Hä#u\ä#ƒ} vèS£Çëv ƒìh„œ#Vè¨öÿÿv‰ÃÁã)ÃÁ㋃$ä#ƒÄ‹…€ã#VPÿRDÃྠä#ƒÄƒ<3ÿtƒì ÿ43ÿ(ã#Ç3ÿÿÿÿƒÄ‹MԉÈPé÷v‰ÐÁà)Ћ4Åxä#ƒþÿ…ÿÿÿ¾¸‰ÃŠM Ó㐍v‰ÐÁà)ÐÁàfƒ¸Hä#„…Xä#ƒ} v艢Ǹÿÿÿÿë‰Ú#‰Ð…Àu^v‰ÐÁà)ЍÅ\ä#ƒ} vèV¢Çë‰ö »ëvC;H_#}0ƒìÝÿ°D#Vÿ@#ƒÄ…ÀtÙëvFþ™ŽSÿÿÿèf…Àuƒ=D_#uèÄ ‹MԉÈP¸eô[^_]ÃU‰åWVSƒì‹u‹]¡Lã#@‰ÂÁâ)<Õ ä#èŠú¡€œ##„Hºv©u=BÑøuô¾ƒ<µ œ#ÿue‹E ‰0Ç@Ç@W<ƒþvèa¡Ç됉Öëɸþÿÿÿ‰ñÓÀ!ƒþvè?¡Çëv¸þÿÿÿ‰ñÓÀ!€œ#ûév µº œ#‹[‹Å ¨%‰ƒøÿu"ƒþvèñ Ç됸þÿÿÿ‰ñÓÀ!€œ#W<ƒþv -èÌ Çë ¸þÿÿÿ‰ñÓÀ![Á⹤¨%‹
-‹u ‰‹‚¨¨%‰F‹‚¬¨%‰FƒÂ‹
-©t ƒàý‰
-ëv[¡ ®%‰Õ ¨%‰ ®%ûéI‰Öë‹G<#tUº©uéBÑøuô¾‹E ‰0Ç@Ç@W<ƒþvè Çëv¸þÿÿÿ‰ñÓÀ!ûéëv…Ûtƒ;uƒ{u -û¸ éÓ‰ö‹‰G@úèu‹Lã#R‰ÑÁá)Ñf‰Í(ä#ƒìhä#jèN\ƒÄUè¡ä#;Xã#|¡ä#+Tã#‰Eè¡ä#+Xã#ë¡ä#+Tã#H‰Eè¡ä#+Xã#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰ÁáºÓMb‹Eì÷êÁú‹EìÁø)ÂыLã#R‰ÐÁà)Ð) Ålä#ƒì QèkÊÿÿƒÄƒ=\ã#ÿtƒì ÿ5\ã#ÿ(ã#Ç\ã#ÿÿÿÿƒÄ‹ -Lã#I‰ÐÁà)ЋÅ$ä#ƒì‹…€ã#QPÿRHƒÄh„œ#ÿ5Lã#èæòÿÿ¡Lã#@‰ÂÁâ)ÂfÇÕHä#ƒÄ…Û„’ƒìEàPjè[U؃Ä‹Eà‰E؋EäC‰B…Ày -ÿM؁Bʚ;됁zÿɚ;~ ÿjʚ;ÿ5Lã#h u"ÿuÜÿuØÿ$ã#‰ÃƒÄƒûÿuƒìÿ5Lã#jèù ƒÄ¡Lã#@‰ÂÁâ)‰Õç#ÇLã#ÿÿÿÿÇ`ã#ÿÿÿÿèßËÿÿƒì ¡Lã#@‰ÂÁâ)» ä#¿DÓPèsè”ÇG@¡Lã#@‰ÂÁâ)ƒÄöDÓ2tû¸ é~‰Öë%¡€œ##„ûº‰ö©uáBÑøuô¾ƒ<µ œ#ÿu=‹M ‰1ÇAÇAƒþv -è@Çë¸þÿÿÿ‰ñÓÀ!€œ#ûé vƒì µƒ œ#Pèúðÿÿ‰ÇƒÄƒ» œ#ÿu#ƒþvèòœÇë‰ö¸þÿÿÿ‰ñÓÀ!€œ#Á⹤¨%‹
-‹] ‰‹‚¨¨%‰C‹‚¬¨%‰CƒÂ‹
-©t ƒàý‰
-ëv¡ ®%‰Õ ¨%‰= ®%ûël‹G<#…Àuû¸ë`v‰Öë‹G<º#t ©uéBÑøuô¾‹E ‰0Ç@Ç@W<ƒþvè/œÇëv¸þÿÿÿ‰ñÓÀ!û¸eô[^_]ÍvU‰åWVSƒì ‹}¡Lã#@‰ÂÁâ)4Õ ä#è¹ú‹F<#…Àt è¦û颋‰F@úèq‹Lã#R‰ÑÁá)Ñf‰Í(ä#ƒìhä#jè6XƒÄUè¡ä#;Xã#|¡ä#+Tã#‰Eè¡ä#+Xã#ë¡ä#+Tã#H‰Eè¡ä#+Xã#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыLã#R‰ÐÁà)Ð) Ålä#ƒì QèRÆÿÿƒÄƒ=\ã#ÿtƒì ÿ5\ã#ÿ(ã#Ç\ã#ÿÿÿÿƒÄ‹ -Lã#I‰ÐÁà)ЋÅ$ä#ƒì‹…€ã#QPÿRHƒÄh„œ#ÿ5Lã#èÍîÿÿ¡Lã#@‰ÂÁâ)» ä#fÇDÓ(ÇLã#ÿÿÿÿÇ`ã#ÿÿÿÿèaÈÿÿ¡Lã#@‰ÂÁâ)¿DÓ‰$è™oè‹F<#ƒÄ…Àuû¸ë èÿû¸eô[^_]ÐU‰åSƒì‹]úEðPjè¢VƒÄƒ=(#ÿu
-ÇEèëWMèUð¡$#;B|¡ #+Eð‰Eè¡$#+Bëv¡ #+EðH‰Eè¡$#+Eôʚ;‰Aƒì ÿ5(#ÿ(ã#ƒÄ…ÛtN]ð‹E𣠝#‹Eô£$#jh€u"ÿuôÿuðÿ$ã#‰ÃƒÄƒûÿuƒìÿ5Lã#jè:ƒÄ‰(#ë -vÇ(#ÿÿÿÿû‹Eè‹]üÉÐU‰åVSƒì‹uƒ<µ œ#ÿuC‰uèÇEìÇEð¡Lã#‰Eôƒþvèü˜Ç鮐¸þÿÿÿ‰ñÓÀ!€œ#降 µº œ#‹[‹Å ¨%‰ƒøÿu"ƒþv豘Ç됸þÿÿÿ‰ñÓÀ!€œ#[Á๤¨%‹‰U苐¨¨%‰U싐¬¨%‰Uð‹°¨%‰UôP‹
-©tƒàý‰
-ë[¡ ®%‰Õ ¨%‰ ®%ƒìEèPVè
-ƒÄeø[^]ÃU‰åVSƒì¡Lã#@‰ÂÁâ)4Õ ä#‹F0©…Í -‰F0‹F8‰Ã÷Ћ€œ#‰Ñ…ÂtA‰Ø÷л!Ètv‰Ú©u
-CÑøuòºƒì Rè„þÿÿƒÄ‹^8‰Ø÷Ћ -€œ#…ÁuÀ‹F8‰Ã÷ЋV<‰Ñ…ÂtZ‰Ø÷л!Ètv‰Ú©u
-CÑøuòº‰UèÇEìÇEð¡Lã#‰EôƒìEèPRèƒÄ‹^8‰Ø÷ЋN<…Áu¦f0ÿïÿÿeø[^]ÃU‰åWVSƒì,‹]œúX‰Â‰UÌ¡Lã#@‰ÂÁâ)Õ ä#‰UЉÞÁæ}؁ƀš#ü¹ó¥÷Eàuƒ}Ø„îƒ}Øÿ„ä÷EàuCƒ}Øu=ƒìSh¬5#èw}ƒÄ÷Eàtƒì‹M ÿqhÂ5#èX}ƒÄƒì jèïÎÿÿƒÄ‹UЋB8‰EԉƍUԃûv -èh–Çë ¸ˆÙÓà ‹EÔ E܉EԋUЃÂ<ƒûv -è<–Çë ¸þÿÿÿˆÙÓÀ!‹EԋUЉB8û÷Eàtƒìjÿu SÿUäëƒìj‹M ÿqSÿU؃Äú‹EЉp8‹ỦÐPeô[^_]ÃU‰åWVSƒì ‹}‰ÐÁà)ÐÁྠä#fƒ|(uF˜àƒ<3ÿtƒì ÿ43ÿ(ã#Ç3ÿÿÿÿƒÄƒìh„œ#Wèúèÿÿ‰ÂÁâ)‹Õ$ä#ƒÄë ‰ÐÁà)ÐÁàfƒ¸Hä#u!‹$ä#ƒì‹•€ã#WRÿPD¸ƒÄë‰ö¸eô[^_]ÍvU‰åWVSƒì º¿ˆš#¾„š#»Œš#¹ œ#‰ö‰ÐÁàǀ€š#Ç8Ç0ÇÇ‘ÿÿÿÿBƒúvϺ» ¨%¹¤¨%RÁàB‰ÇDƒú>~éLj®%ÿÿÿÿÇœ®%Ç ®%Ç€œ#Ç„œ#ÿÿÿÿÇ(#ÿÿÿÿº¹à#»ä#‰öRÁàÇÇÿÿÿÿÆDBƒú~áƒìjhp"èÆÕÿÿƒÄeô[^_]ÍvU‰å‹EǸ]ÐU‰å‹EÇÿÿÿÿ¸]ÐU‰åƒì‹U‹M ƒùvèê“Ǹÿÿÿÿ됸Óà ¸ÉÃU‰åƒì‹U‹M ƒùv趓Ǹÿÿÿÿ됸þÿÿÿÓÀ!¸ÉÃU‰åƒì‹M ƒùv腓Ǹÿÿÿÿë ¸Óà‹U#ÉÉöU‰åƒì ÿuÿu ÿuèÔçÿÿƒÄÉÍvU‰åWƒì$‹UEè‰E丹‹}äüó«ƒìjÿuäRèBñÿÿƒÄ…Àu -‹Uè‹E ‰¸‹}üÉÐU‰åƒì jÿu ÿuèñÿÿƒÄÉÃU‰åƒì‹E…Àu¸ëƒìPÿu ÿuèíðÿÿƒÄÉÃU‰åƒìÿuÿ5Lã#è`èÿÿƒÄÉÍvU‰åVSƒì ‹]‹E ‰EèÇEìÇEð脒‹0ƒìEØPEèPSèAéÿÿƒÄ»ÿÿÿÿ…Àu ÷Eàu‹]ØèT’‰0‰Øeø[^]ÐU‰å‹M¡Lã#@‰ÂÁâ)¡€œ# Õ\ä#‰¸]ÉöU‰åSƒì‹E‹U ú‹Lã#‰Lã#ÇD_#jPj jèœìÿÿƒÄÇD_#‰Lã#û‹]üÉÍvU‰åS‹M‹] ¡H_#ʼnŠ@#‰šD#@£H_#‹$ÉÍvU‰åVS‹]Cÿƒøv苑Ç~¸ÿÿÿÿëp‰öœúX‰Æ[€<…è#u‰ðPèa‘ǸÿÿÿÿëF[Áâ¹à#‹E ‰
-‹E‰‚ä#ÆD
-ƒìjhÀu"Sè¹T·Ã‰$èÒeƒÄ‰ðP¸eø[^]ÍvU‰åƒì¸ÉÍvU‰åƒì ‹E‰EèÇEìÇEð‹Lã#‰UôUèRPè›ùÿÿƒÄÉÉöU‰åVS‹uv‰ÃÁã)ÃÁ㸠ä#DŽàÿÿÿÿL0ƒìh„œ#Vèõãÿÿ‹ƒ$ä#ƒÄ‹…€ã#VPÿRDè?³ÿÿƒÄeø[^]ÐU‰åƒìÇ(#ÿÿÿÿjjèWèÿÿè³ÿÿƒÄÉÐU‰åƒìEüÇEüÿÿÿÿPèôÿÿƒÄÉÐU‰åƒì‹E‹‰EüEüPjÿL_#‹UüRÁà¹à#ƒÄƒ<t ûƒì RÿƒÄú‹Eü@ƒì ÿ4…ä#èþ¬ÿÿƒÄÉÐU‰åWVSƒì ‹u ‹]ƒ}t讏Ǹÿÿÿÿén‰öúƒ= ¥#ÿt ƒ= ®%ÿuûèƒÇ ¸ÿÿÿÿéCv¡ ¥#‰‹ ¥#Õ)п¤ž#‹DÇ0£ ¥#‹Õ)й ž#ÇDÁ0…öu8‹Õ)ÐÇÁ‹Õ)ÐÇÇ‹Õ)ЉŨž#닍<Å)Ǎ<ý ž#ü¹ó¥‹Õ)ЍŃº ž#u#¡ ®%‰‚Èž#@Áàƒˆ´¨%‹€ ¨%£ ®%‹Õ)ÐÇÅ´ž#ÿÿÿÿ‹Õ)ЍŸž#Ç@NjÕ)ЍÅÀž#Ç@NjÕ)ÐÇÅ̞#û¸ƒÄ [^_]ÃU‰åSƒì‹]ƒûwúÝ)؃<ÅО#uûèÿÇ¸ÿÿÿÿ閍vÝ)ØÁàǀО#ƒÀº¤ž#ƒ<ÿtƒì ÿ4ÿ(ã#ƒÄÝ)ØÁàƒ¸ ž#uE‹Èž#R Åö´¨%u¡ ®%‰ ¨%‰ ®%Ý)؋ÅȞ#@ƒ$Å´¨%üû¸‹]üÉÃU‰åWVSƒìL‹E‰E´Áà+E´Áàƒ¸ ž#…‹P ‹‚¨ž#@öÅ´¨%t¸¬ž#ƒ< „ôÿéì‰ö‹M´Áá+M´Ááy LJ¬ž#¾¨ž#‹7@‹ ®%‰Ý ¨%£ ®%jÿ41ÿ±¤ž#jèhçÿÿ‹7@ƒ Å´¨%錐‹E´Áà+E´Á๠ž#ƒ<uwPƒ<
-tÿ°¨ž#ÿ°¬ž#ÿ4
-ëQvÇEÈÇEÌÇEÐÇEÔÇEØÇEÜÇEà‹E´Áà+E´Áà¨ž#Rÿ°¬ž#EÈPEÄPèÙÙÿÿƒÄ‹E´Áà+E´Åƒ¸¨ž#u -ƒ¸¬ž#„ÀºÀž#‹E´Áà+E´ŋ‰E¸M¸‹D‰A‹E¸ƒ¸ž#‰ƒÀž#‹Aƒ¼ž#‰B…Àyÿ‹Àž#Bʚ;ë‰özÿɚ;~ ÿjʚ;‹E´Áà+E´ÿu´hŒx"ÿ4ÅĞ#ÿ4ÅÀž#ÿ$ã#‰ÃƒÄƒûÿuƒìÿ5Lã#jè+ùÿÿƒÄ‹E´Áà+E´‰Å´ž#ë‰ö‹E´Áà+E´ÇÅ´ž#ÿÿÿÿeô[^_]ÃU‰åWVSƒì‹u‹}ÇEäƒþw3ƒ}t-‹Exÿɚ;w!‹]{ ÿɚ;wúõ)ðƒ<ÅО#uûèÁŠÇ¸ÿÿÿÿ鐅ÿ„·õ)ðƒ<Å´ž#ÿuÇG ÇGëwƒìEèPjèGÇEäƒÄ¹Àž#õ)ðō]è‹D;C|‹+Eè‰G‹D+Cë(¹Àž#õ)òÁâ‹+EèH‰G‹D+Eìʚ;‰G ¹¸ž#õ)ðÁà‹‰‹D‰Gõ)ðÅº¤ž#ƒ<ÿtƒì ÿ4ÿ(ã#ƒÄ‹Eƒxu
-ƒx „þº¸ž#õ)ð ŋ]‹‰
-‹C‰D
-÷E t¸Àž#‹S‰‹S ‰Tëmvƒ}äuƒìEèPjèøEƒÄõ)ð ō‘Àž#‹Eè‹]C‰Àž#‹EìC ‰B…Àyÿ‰Àž#Bʚ;ëzÿɚ;~ ÿjʚ;õ)ðVhŒx"ÿ4ÅĞ#ÿ4ÅÀž#ÿ$ã#‰ÃƒÄƒûÿuƒìÿ5Lã#jè­öÿÿƒÄõ)ð‰Å´ž#û¸eô[^_]ÃU‰åWVSƒì ‹]‹} ƒûwúÝ)؃<ÅО#uûèzˆÇ¸ÿÿÿÿ鷉öÝ)؃<Å´ž#ÿuÇG ÇGëoƒìEèPjèÒDƒÄ¹Àž#Ý)؍ōuè‹D;F|‹+Eè‰G‹D+Fë'¹Àž#Ý)ÚÁâ‹+EèH‰G‹D+Eìʚ;‰G ¹¸ž#Ý)ØÁà‹‰‹D‰Gû¸eô[^_]ÍvU‰åƒìƒ}t藇Çëv臇ǸÿÿÿÿÉÉöU‰åƒìƒ}tèg‡Ç¸ÿÿÿÿë‰öƒì ÿu èÍ¿ÿÿ¸ƒÄÉÍvU‰åƒì‹E ƒ}tè,‡Ç¸ÿÿÿÿëv…Àt -ÇÇ@è¸ÉÃU‰åƒì‹UƒúwúÕ)Ѓ<ÅО#uûè܆ǸÿÿÿÿëvÕ)ЋÅ̞#ûÉÐU‰åWVS¹»¤ž#¿ ž#¾¬ž#‰öÍ)ÈÁàÇDÿÿÿÿ¸ž#ÇBǍP0Ç:ÇD A‰‰Áƒù~ºÇœ¥#ÿÿÿÿÇ ¥#[^_]ÐU‰å]ÍvU‰å¸]ÉöU‰åVSœúX‰Ã¡Lã#@‰ÂÁâ)¾ ä#‹DÖ0©t0©t)ƒì jèzÁÿÿ¡Lã#@‰ÂÁâ)¿DÖ‰$è"[ƒÄ‰ØPeø[^]ÃU‰åS‹]úût ¸ÿÿÿÿ…ÛuL¡Lã#@‰ÂÁâ)¹ ä#‹DÑ0Áèƒà‹U ‰¡Lã#@‰ÂÁâ)Õ0‹
-%ÿþÿÿ ؉
-û¸‹$ÉÉöU‰åS‹]úût ¸ÿÿÿÿ…ÛuL¡Lã#@‰ÂÁâ)¹ ä#‹DÑ0Áè ƒà‹U ‰¡Lã#@‰ÂÁâ)Õ0‹
-%ÿýÿÿ ؉
-û¸‹$ÉÉöU‰åWVSƒì ‹} ÇEðú‹EÇÿÿÿÿÇ@¾;5Dã#s9v‹µàã#ƒ{u ƒìWVÿS,ƒÄ…ÀxƒìWÿuVÿS0‰EðƒÄF;5Dã#rÊû‹Eðeô[^_]ÉöU‰åƒì‹U¸ƒ:ÿt ¸ƒzu‹‹…àã#ƒìRÿ2ÿP4ƒÄÉÍvU‰åƒì‹U¸ƒ:ÿt‹‹…àã#ƒìRÿ2ÿP8ƒÄÉÉöU‰åƒì‹U¸ƒ:ÿt‹‹…àã#ƒìRÿ2ÿP<ƒÄÉÉöU‰åƒì‹U¸ƒ:ÿt‹‹…àã#ƒìRÿ2ÿP@ƒÄÉÉöU‰åVS‹u‹µ€ã#ƒìÿ°ôhù5#è^j»ƒÄ‰ö[‰ÐÁà)ÐÁà9°$ä#……ƒÀ º ä#f|€ttfƒ|tlƒì f‹Dfƒøwƒì ·ÀPè ¨ƒÄë%v·Ð¸Ó5#ú€t¸ß5#út¸ë5#P[‰ÐÁà)ÐÁàÿ°ôæ#4ä#PSh`6#è¹iƒÄ Cû™ŽUÿÿÿeø[^]ÉöU‰åWVSƒì ‹E‹…€ã#‰Eð‹¸üƒì ‹Uð‹‚ðøPèo§‰ÆƒÄƒþÿu -¸ÿÿÿÿ…ÿtrOëՐv‰ÐÁà)Ѝ ÅöQä#tRQ@»,ä#ƒ<D‹ç#‰ƒìý‰Ø‹Uð‚ðPVè\¥ƒÄ‹Eð˜ðSV腦ƒÄéiÿÿÿ‰ðeô[^_]ÉöU‰åWVSƒì‹E‹…€ã#‰Eð‹Mƒy(…©‹=Lã#‰ÐÁà)Ѝž$ä#‹U93…‹M I‰ÂÁâ)ÂÁ⋄Љ„й,ä#‹D@‰D@‹„à‰„àƒÂ0¹ ä#‹
-%ÿ÷ÿÿ‹\0ã ؉
-‹UðƒÂ¸ƒ¼º€ÿ•ÀH‹] ‰„š€é¢v‹U R‰ÂÁâ)ÂÁâ»$ä#‹A‰„Ѓyt‹A‰‚lä#‹A‰„àë-‰ö‹] [‰ÐÁà)ÐÁà‹]ð‹“ô‰lä#‹“ô‰ç#ƒy$u‹E @‰ÐÁà)Ё ÅPä#¸ƒy ”ÀH‹U ‹Mð‰„‘ˆ¸ƒÄ[^_]ÃU‰åWVSƒì ‹U‹<•€ã#ƒ¿t8LJƒì‹E @‰ÐÁà)ЋÅôæ#‹—ðÂPÿu 詤酋E @‰ÐÁà)ЍÅöƒQä#t?K@¾,ä#ƒ<11º$ä#‹1„à‰1ƒì‹„Ћ—ðÂPÿu èK¤ë*ƒì‹E @‰ÐÁà)ЋÅôæ#‹—ðÂPÿu è³£ƒÄ‹E @‰ÐÁà)ÐfÇÅHä#€eô[^_]ÐU‰åWVSƒìH‹]ÇE¼ÇEÀfÇEÄÇEÈÇEÌÇEÐÇEÔÇEØÇEÜÇEà¶Ã -f‰E¸‹€ã#‹€ø‰EÈÇE̍E¸jjPhœ"h6#腧ÿÿ‰ÆƒÄ ƒþÿuƒì h 6#èVËÿÿƒÄ‹<€ã#v‰ÐÁà)Ðfƒ<ÅHä#tµ€Gƒ<ÿtJÿëE‰öƒìv‰ÃÁã)ÃÁ㍃dä#PjèJ;fǃHä#€ƒÄ‹ƒôæ#‹—ðÂPVè䢃čeô[^_]ÐU‰åWVSƒì‹}h
-6#è¾ÊÿÿèiÁÿÿ‰EðƒÄ hPh 6#è£ÊÿÿÇ$èÏÄÿÿ‰ÃƒÄSh>6#è‡Êÿÿ‹Eð‰…€ã#ƒÄ jhJ6#Sè=efÇCÆCÇC4Œ"ÇC`Œ"ÇC (‚"ÇC$ƒ"ÇC(lŒ"ÇC,ȃ"ÇC0xŒ"ÇC4€Œ"ÇC8ŒŒ"ÇC<@…"ÇC@̌"ÇCDX"ÇCH "ÇCL¨"ÇCP@Ž"ÇCTˆŽ"ÇCX¼Ž"ÇC\ "ÇC`À"ÇCd؏"ÇChð"ÇCl"ÇCp "ÇCt8"ÇCxP"ÇC|h"ǃ€€"ǃ„˜"¸ƒÄS‰öDŽ‚€ÿÿÿÿ@=™~í‹EH‰ƒüƒì ‹EÁàPè˜Ãÿÿ‰ƒð¾ƒÄ;u}ƒì ‹ƒððPèꟃÄF;u|åÿçw¿èÿ ¡v¿ ¡‰»ô‹E‰ƒøƒ} tƒìjÿuðh<†"萾ÿÿƒÄeô[^_]ÐU‰åWVSƒì ‹M‹u ‹]‹€ã#‰Eð…Éx[; -Pã#sS‹€ã#‹@%ÿÿÿ=u=þ™wv‰ÐÁà)Ðfƒ<ÅHä#u -¸éèvv‰ÐÁà)Ð9 Å$ä#t -¸&éȍv…Ûuv‰ÐÁà)Ё ÅPä#ë)ƒûuv‰ÐÁà)Ё$ÅPä#ÿ÷ÿÿë ¸郉öv‰ÐÁà)ÐÁà˜Ð¿$ä#‹U9;t\f¸Hä#€u=ƒì‹;‹Mð‹‘ðÂPV蜞‹E‰;ƒÄ‹Uð‹‚ð‹MÈPV蹟ƒÄëv‰ÐÁà)ЋU‰Åôæ#¸eô[^_]ÍvU‰åVS‹M‹4€ã#…Éx; -Pã#s‹€ã#‹@%ÿÿÿ=t¸ÿÿÿÿëw¡Lã#@‰ÂÁâ)¸ÿÿÿÿ9 Õ$ä#uZúè!P‹Lã#R‰ÑÁá)Ñ» ä#f‰DËdžè°¨ÿÿ¡Lã#@‰ÂÁâ)ƒì ¿DÓPèçO薲ÿÿƒÄû¸eø[^]ÉöU‰å‹E‹…€ã#‹€ü]ÍvU‰å‹E‹…€ã#‹€ô]ÍvU‰åS‹]‹M …ÛxU;Pã#sM‹€ã#‹@%ÿÿÿ=u7ù™wI‰ÐÁà)Ðfƒ<ÅHä#u¸ëMI‰ÐÁà)Ð9Å$ä#t ¸&ë3‰öI‰ÁÁá)ÁÁá¸öQä#”À‹U‰‹‘ôæ#‹E‰¸‹$ÉÉöU‰å‹E f8t·‹E -9Âu¸ë¸ÿÿÿÿ]ÐU‰å¸ÿÿÿÿ]ÉöU‰å¸]ÉöU‰å]ÍvU‰å¸]ÉöU‰åSƒì ‹E‹M ‹…€ã#I‰ÐÁà)ЋÅôæ#‹“ðÂPQè;œƒÄ‹]üÉÍvU‰åWVSƒì ‹E‹u ‹<…€ã#v‰ÐÁà)Ðfƒ<ÅHä#tµ€Gƒ<ÿtHÿëCƒìv‰ÃÁã)ÃÁ㍃dä#PjèR5fǃHä#€ƒÄ‹ƒôæ#‹—ðÂPVè윃čeô[^_]ÐU‰åSƒì ‹E‹M ‹…€ã#I‰ÐÁà)ÐÁàfǀHä#€‹€ôæ#‹“ðÂPQ蠜ƒÄ‹]üÉÃU‰å]ÍvU‰åWVSƒì ‹U‹•€ã#‰Eð‹U <•€‰ÆƒÆƒ<7~MƒìR‰ÃÁã)ÃÁ㍃dä#Pjè‹4ÿ 7ƒÄ‹ƒôæ#‹Mð‹‘ðÂPÿu 躛fǃHä#€ƒÄë‹E @‰ÐÁà)ÐfÇÅHä#eô[^_]ÐU‰åƒì‹E‹M ‹…€ã#ƒÀDŽˆ€ÿÿÿÿI‰ÐÁà)ÐfÇÅHä#hÄã#QèðÉÿÿƒÄÉÍvU‰å‹E‹U ‹…€ã#ƒÀDŽ€R‰ÐÁà)ÐfÇÅHä#]ÃU‰åWVSƒì4‹u v‰EäÁà+EäfÇÅHä#EèPjè“3Mè»@B‹Eº÷ó‰Uà’€€‰E܋A‹U܍ЉE؉A»¡/¸D÷ë‰ÓÁû‹EØÁø)ÿƒÞC‹E÷ç‰×‰øÁèEè‹A»Êš;™÷û‰Ó‰YƒÄVh°"ÿuìÿuèÿ$ã#‰ÃƒÄƒûÿuƒìÿ5Lã#jèAäÿÿƒÄ v‰ÈÁà)ȉÅç#eô[^_]ÐU‰åƒìÿ5Lã#jèäÿÿ¸ƒÄÉÍvU‰åƒìÿ5Lã#jèñãÿÿƒÄÉÃU‰åƒìÿ5Lã#jèÙãÿÿƒÄÉÃU‰åƒìÿ5Lã#jèÁãÿÿƒÄÉÃU‰åƒìÿ5Lã#jè©ãÿÿƒÄÉÃU‰åƒìÿ5Lã#jè‘ãÿÿƒÄÉÃU‰åƒìÿ5Lã#jèyãÿÿƒÄÉÃU‰åƒìÿ5Lã#jèaãÿÿƒÄÉÃU‰åƒìÿ5Lã#jèIãÿÿƒÄÉÃU‰åƒìÿ5Lã#jè1ãÿÿƒÄÉÃU‰åƒìÿ5Lã#jèãÿÿƒÄÉÃU‰åWVSƒì‹MI‰ÃÁã)ÃÁãº$ä#‹‹4…€ã#¿ ä#fÇD(€‹„Ћ–ðÂPQè=™Ç„àÿÿÿÿ詗ÿÿƒÄeô[^_]ÉöU‰åVSƒì hÀ7#è
-Áÿÿèµ·ÿÿ‰ÆÇ$Œè/»ÿÿ‰Ã‰µ€ã#ƒÄ jhX7#Sè®[fÇCÆCÇC\’"ÇC’"ÇC œ’"ÇC$Ē"ÇC(ÇC,ܒ"ÇC0è’"ÇC4ð’"ÇC8ü’"ÇC<“"ÇC@ “"ÇCDH“"ÇCHp“"ÇCL˜“"ÇCPÀ“"ÇCTè“"ÇCX”"ÇC\8”"ÇC`d”"ÇCdŒ”"ÇCh´”"ÇClܔ"ÇCp•"ÇCt,•"ÇCxT•"ÇC||•"ǃ€¤•"ǃ„Ì•"ǃˆÿÿÿÿÇ$c7#èô¿ÿÿƒÄ jVhô•"脵ÿÿƒÄeø[^]ÉöU‰å‹M‹E ‹€ã#fƒ8t·9Èu¸ƒºˆÿt¸ÿÿÿÿ]ÉöU‰å¸ÿÿÿÿ]ÉöU‰åƒì‹E‹…€ã#ÿ°ˆhÅ6#èìYƒÄÉÍvU‰å‹E‹…€ã#‹€ˆ]ÍvU‰å¸]ÉöU‰å]ÍvU‰å¸]ÉöU‰å]ÍvU‰å‹E @‰ÂÁâ)ÂfÇÕHä#]ÃU‰åƒìhÔ6#èxYƒÄÿ5Lã#j è„àÿÿƒÄÉÍvU‰åƒìhÛ6#èPYƒÄÿ5Lã#j è\àÿÿƒÄÉÍvU‰åƒìhâ6#è(YƒÄÿ5Lã#j è4àÿÿƒÄÉÍvU‰åƒìhé6#èYƒÄÿ5Lã#j è àÿÿƒÄÉÍvU‰åƒìhð6#èØXƒÄÿ5Lã#j èäßÿÿƒÄÉÍvU‰åƒìh÷6#è°XƒÄÿ5Lã#j è¼ßÿÿƒÄÉÍvU‰åƒìhþ6#èˆXƒÄÿ5Lã#j è”ßÿÿƒÄÉÍvU‰åƒìh7#è`XƒÄÿ5Lã#jèlßÿÿ¸ƒÄÉÉöU‰åƒìh 7#è4XƒÄÿ5Lã#jè@ßÿÿƒÄÉÍvU‰åƒìh7#è XƒÄÿ5Lã#jèßÿÿƒÄÉÍvU‰åƒìh7#èäWƒÄÿ5Lã#jèðÞÿÿƒÄÉÍvU‰åƒìh!7#è¼WƒÄÿ5Lã#jèÈÞÿÿƒÄÉÍvU‰åƒìh(7#è”WƒÄÿ5Lã#jè ÞÿÿƒÄÉÍvU‰åƒìh/7#èlWƒÄÿ5Lã#jèxÞÿÿƒÄÉÍvU‰åƒìh67#èDWƒÄÿ5Lã#jèPÞÿÿƒÄÉÍvU‰åƒìh=7#èWƒÄÿ5Lã#jè(ÞÿÿƒÄÉÍvU‰åƒìhD7#èôVƒÄÿ5Lã#jèÞÿÿƒÄÉÍvU‰åƒìhK7#èÌVƒÄÿ5Lã#jèØÝÿÿƒÄÉÍvU‰åSƒì0‹]ÇEÜÇEàfÇEäÇEè¶Ãf‰EØÇEìEØjjPh€–"hR7#è˜ÿÿƒÄ ‹€ã#‰Ã‰šˆƒûÿuƒì h€7#èÒ»ÿÿƒÄ[‰ÐÁà)ÐÇÅXä#ÿÿÿÿ‹]üÉÐU‰åôëýU‰åWVSƒì ‹} ¾ú»ëvCûÿ2Ý)ØÁàºÀ¥#€|t߃ìÿ4ÿuèaVƒÄ…Àuʾ…öt1ÿÀuèðnÇûéÜûÝ)؍…Ä¥#éˉö÷Ç@uè¿nÇû髍v‹E‰Eð=ÿ~èžnÇû銉ö‹Æ#ƒúÿtqÕ)Ѝ<…w‹†Ä¥#£Æ#ƒì ÿuèV@‰$èß´ÿÿ»À¥#‰ƒÄÿuPè7U‹Eð‰‡È¥#‡Ì¥#‰$è,‘ÆDƒÄû‡Ä¥#ëvènÇû¸eô[^_]ÍvU‰åWVSƒì ¾ú¿»À¥#vý)øÁà€|tƒìÿ4ÿuèUƒÄ…Àu¾Gÿÿ~ʅötJƒì ÿuèOUƒÄ@Pý)ûÁã¾À¥#ÿ43è}´ÿÿƒÃÆD3¡Æ#‰ƒÄ¥#‰=Æ#ƒÄûë‰öèSmÇû¸eô[^_]ÍvU‰åWVSƒì ‹}?ÿw‹Õ)Ѐ<…Ø¥#uèmǸÿÿÿÿé‰öèÏæÿÿúè5B‹Lã#R‰ÑÁá)Ñf‰Í(ä#‹Õ)Ѝ4…À¥#ƒ~ ÿu
-ƒ~…“ƒìWjÿL_#ƒÄhä#jè8)ƒÄUè¡ä#;Xã#|¡ä#+Tã#‰Eè¡ä#+Xã#ë!‰ö¡ä#+Tã#H‰Eè¡ä#+Xã#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыLã#R‰ÐÁà)Ð) Ålä#ƒì QèR—ÿÿƒÄƒ=\ã#ÿtƒì ÿ5\ã#ÿ(ã#Ç\ã#ÿÿÿÿƒÄ‹ -Lã#I‰ÐÁà)ЋÅ$ä#ƒì‹…€ã#QPÿRH‹ -Lã#I‰ÐÁà)л ä#fÇDÃ(ÍǂÀÁ#‹‰‚ÄÁ#ƒÄF PQèÇLã#ÿÿÿÿÇ`ã#ÿÿÿÿèM™ÿÿ¡Lã#@‰ÂÁâ)¿DÓ‰$è…@è4£ÿÿƒÄûèÿäÿÿë8ÿNƒìWjÿL_#¡Lã#@‰ÂÁâ)¿Õ(ä#‰$èF@èõ¢ÿÿƒÄû¸eô[^_]ÃU‰åWVSƒì ‹}‹]?ÿw‹Õ)Ѐ<…Ø¥#uè¯jǸÿÿÿÿéVv…ÛuúëúèÒ?‹Lã#R‰ÑÁá)Ñf‰Í(ä#‹Õ)Ѝ4…À¥#…Ûu0ƒ~ ÿu‹E 9F}èMjÇ û¸ÿÿÿÿéó‹E )Fûéâèäÿÿƒ~ ÿu ‹E 9F‘ƒìWjÿL_#ƒÄhä#jèš&ƒÄUè¡ä#;Xã#|¡ä#+Tã#‰Eè¡ä#+Xã#ë¡ä#+Tã#H‰Eè¡ä#+Xã#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыLã#R‰ÐÁà)Ð) Ålä#ƒì Q趔ÿÿƒÄƒ=\ã#ÿtƒì ÿ5\ã#ÿ(ã#Ç\ã#ÿÿÿÿƒÄ‹ -Lã#I‰ÐÁà)ЋÅ$ä#ƒì‹…€ã#QPÿRH‹ -Lã#I‰ÐÁà)л ä#fÇDÃ(͋E ‰‚ÀÁ#‹‰‚ÄÁ#ƒÄF PQè'ÇLã#ÿÿÿÿÇ`ã#ÿÿÿÿ貖ÿÿ¡Lã#@‰ÂÁâ)¿DÓ‰$èê=虠ÿÿƒÄûèdâÿÿë<‰ö‹E )FƒìWjÿL_#¡Lã#@‰ÂÁâ)¿Õ(ä#‰$è§=èV ÿÿƒÄû¸eô[^_]ÐU‰åWVSƒì ‹}?ÿw‹Õ)Ѐ<…Ø¥#uèhǸÿÿÿÿéU‰öè,…À„‡œúX‰Æ‹Õ)Ѝ…À¥#‹JA‰J‹Z ƒûÿtG‹ÝÀÁ#9È<)Á‰È‰BƒìB PSèʊ[‰ÐÁà)ЋÅ$ä#ƒÄ‹•€ã#SRÿPDè]ŠÿÿƒÄƒìWjÿL_#ƒÄ‰ðPé¼‰öúèª<‹`ã#R‰ÑÁá)Ñf‰Í(ä#‹Õ)Ѝ…À¥#‹JA‰J‹Z ƒûÿtG‹ÝÀÁ#9È<)Á‰È‰BƒìB PSè*Š[‰ÐÁà)ЋÅ$ä#ƒÄ‹•€ã#SRÿPDèå”ÿÿƒÄƒìWjÿL_#¡Lã#@‰ÂÁâ)¿Õ(ä#‰$è <躞ÿÿƒÄû¸eô[^_]ÐU‰åWVSƒì ‹] ÇEð‹E8ÿw‹Õ)Ѐ<…Ø¥#uèlfǸÿÿÿÿéÊèc*…À„ÃœúX‰Â‰Uì‹E‹Õ)Ѝ4…À¥#^‹^ ƒûÿts݉‹€ÀÁ#;F_¿ÀÁ#ÇEðv‹F+:‰FƒìF PSè
-‰[‰ÐÁà)ЋÅ$ä#ƒÄ‹•€ã#SRÿPD‹^ ƒÄƒûÿt݋:;F~°ƒìÿujÿL_#ƒÄƒ}ðtèlˆÿÿ‹Uì‰ÐPéõúèÊ:‹`ã#R‰ÑÁá)Ñf‰Í(ä#‹E‹Õ)Ѝ4…À¥#^‹^ ƒûÿtr݉‹€ÀÁ#;F^¿ÀÁ#ÇEð‰ö‹F+:‰FƒìF PSè2ˆ[‰ÐÁà)ЋÅ$ä#ƒÄ‹•€ã#SRÿPD‹^ ƒÄƒûÿt݋:;F~°ƒìÿujÿL_#ƒÄƒ}ðt輒ÿÿ¡Lã#@‰ÂÁâ)ƒì ¿Õ(ä#Pèð9蟜ÿÿƒÄû¸eô[^_]ÉöU‰åWVSƒì ¾¿Ä¥#õ)óÁãǃÀ¥#‰4;ǃȥ#ƒì ƒÌ¥#PèF‡ƒÃF‰;ƃȥ#ƒÄ‰Æþÿ~±Ç¸Á#ÿÿÿÿǐÆ#ƒìjh4¥"蒥ÿÿƒÄeô[^_]ÍvU‰åVS‹uú>ÿw‹Õ)Ѐ<…Ø¥#uèÉcÇû¸ÿÿÿÿënvƒì ‹Õ)лÀ¥#ÿ4ƒèUKƒÄ@P‹Õ)Ðÿ4ƒè‰ªÿÿ‹Õ)ÐÆDƒ‹Õ)ЋÆ#‰…Ô¥#‹£Æ#ƒÄû¸eø[^]ÉöU‰åƒì‹Mú9ÿw‹Õ)Ѐ<…Ø¥#uècÇû¸ÿÿÿÿëb‰ö‹Õ)Ѓ<…Ì¥#ÿtèîbÇû¸ÿÿÿÿë8‹Õ)ÐÆ…Ø¥#‹Õ)ЋÆ#‰…Ô¥#‹£Æ#û¸ÉÉöU‰åSƒì‹M‹] 9ÿw‹Õ)Ѐ<…Ø¥#uèubǸÿÿÿÿë_ú‹Õ)ÐÁàƒ¸Ì¥#ÿu ‹€È¥#‰ë7‰öÇ‹Õ)Ћ…Ì¥#¹(ä#vÿ @‰ÐÁà)ЋDÁPƒøÿuëû¸‹]üÉÃU‰åVS‹u‹M¸ùÿ‡–ú‹Æ#‰ƒúÿtnÕ)Ћ…Ô¥#£Æ#‹Õ)лÀ¥#ǃ‹Õ)Љ …È¥#ƒì ‹Õ)Ѝ…Ì¥#P腄‹Õ)ÐÆDƒƒÄëègaÇû¸ÿÿÿÿëû¸eø[^]ÍvU‰åƒì‹M9ÿw‹Õ)Ѐ<…Ø¥#uèaǸÿÿÿÿë=ú‹Õ)Ѝ…À¥#ƒx ÿuƒxuèì`Ç û¸ÿÿÿÿë ‰öÿHû¸ÉÐU‰å‹E@‰ÂÁâ)¸fƒ<ÕHä#”À]ÐU‰åVS‹][‰ÐÁà)Ѝ4Åfƒ¾Hä#uAƒì‹ÝÄÁ#Õ)Ѝ…Ì¥#PS脃‹†$ä#ƒÄ‹…€ã#SPÿRD¸ƒÄ됸eø[^]ÃU‰åVSƒ=X_#…ÚÇX_#¹»À®%¾Ä®%‰ÁàP ÆÇ2ÿÿÿÿÆDAƒùváƒìjjh Æ#èÜýÿÿ¹ƒÄ¾$±%» ±%‰ö‰ÁàQ‰0Ɖуù -véÇT³%ÿÿÿÿÆP³%DZ%¹¾„³%»€³%vÍ)ÈÁàQ‰0ƉуùvãÇ°¶%ÿÿÿÿƬ¶%Çȶ%eø[^]ÐU‰åWVSƒìŠEˆEóŠUˆUòfÇEæ¾<u€út €}óu€}òuè_Ǐ¸ÿÿÿÿé7‰öúƒ=±%ÿuèí^ǍûÇEìÿÿÿÿ됡±%€‹Õ$±%‰±%û‰Eìƒ}ìÿu -¸ÿÿÿÿéìvƒì h Æ#ègñÿÿƒÄ‹]¾¹º÷ñ‰×ëf‰ö¿€<Åà®%t0ƒìÿu¿ōƒÀ®%Pè³EƒÄ…Àu€»Ø®%„Ÿ¾ëG¹‰øº÷ñ‰×fÿEæfƒ}懜‰ó„Ût–¿Áãƃà®%ƒìÿuƒÀ®%Pè÷D‹E쉃Ԯ%ƒÄ€}óu‰Â’‹] f‰Å(±%ëv‹E썀‹E ¯Ef‰Õ(±%úƒì ‹U썒Áã·ƒ(±%Pè5¤ÿÿº,±%‰ƒÄû…Àu%è”]ǒƒì h Æ#èAõÿÿ¸ÿÿÿÿ魍v‹E썀ÁãS‰Uྠ±%‹ƒ,±%‰‚$±%‰2ƒìjjƒ<±%Pè:ûÿÿƒÄ ·D3Pjƒ@±%Pè#ûÿÿƒÄ jjÃD±%SèûÿÿŠ]ó‹Eàˆ\0ƒÄúƒ=ȶ%ÿuèø\ǎûÇEèÿÿÿÿë¡È¶%Å)‹•„³%‰ȶ%û‰Eèƒ}èÿu_ƒì h Æ#èvôÿÿ‹Eèéä‰öè§\ǐƒì h Æ#èTôÿÿ¸ÿÿÿÿéÀ‰öèƒ\Ǒƒì h Æ#è0ôÿÿ¸ÿÿÿÿ霉ö‹EèÁà+EèÁเ³%ŠUòˆT P‹]ì‰
-‹] f‰\
-ǀ„³%ÿÿÿÿ‰ºˆ³%‹]썛ÆÕ ±%ƍ¿ōr¿À®%€|>t%ƒì¶D>PšÜ®%SèGõÿÿÆD>‰$èšøÿÿƒÄƒì h Æ#èŽóÿÿ¿EèƒÄeô[^_]ÍvU‰åWVSƒìŠEˆEóŠ]ÇEè¿ÆEç<u„Ût €}óu€ûuè‚[Ǐ¸ÿÿÿÿé0‰öúƒ=ȶ%ÿuèa[ǎûÇEìÿÿÿÿë ¡È¶%Å)‹•„³%‰ȶ%û‰Eìƒ}ìÿu ¸ÿÿÿÿéߐ‹EìÁà+EìÁ຀³%ˆ\ ‹M f‰Lǀ„³%ÿÿÿÿƒì h Æ#è°íÿÿƒÄ‹U¾¹º÷ñ‰Öë]v¶€<Åà®%u ¿ÆEçë8ƒìÿu¶ÅÀ®%PèöAƒÄ…Àu¿ëF¹‰ðº÷ñ‰ÖÿEèƒ}è‡Ò‰ù„Ét €}çuR¶Áã¸À®%ÆD ÆDƒìÿuPè>AƒÄ jjÃÜ®%Sè/øÿÿÇ$ Æ#èçñÿÿƒÄ jjSè:ïÿÿëM¶ōCºÀ®%€|t'þDƒì h Æ#è®ñÿÿƒÄ jjƒÜ®%Pèûîÿÿ됃ì h Æ#è‹ñÿÿƒÄ¶‹<ÅÔ®%¿ŠUó:Å8±%tèªYǓ¸ÿÿÿÿéX‰ö€}óu¿·Å(±%9E u€}ót(¿·Å(±%™÷} …ÒtèdYǔ¸ÿÿÿÿéƒì h Æ#è ìÿÿ¶‹Åä®%ƒÄƒúÿ„­€}óu#è&YǕƒì h Æ#èÓðÿÿ¸ÿÿÿÿéЍÕ)з…”³%9E t"èíXǔƒì h Æ#èšðÿÿ¸ÿÿÿÿ鋋MìÁá+M썶Å »Ä®%‹‰„³%‹Mì‰ ë/‰öèŸXǑƒì h Æ#èLðÿÿ¸ÿÿÿÿë@¶‹Uì‰Åä®%ƒì h Æ#è*ðÿÿ‹EìÁà+EìÁàH‰±ˆ³%º€³%‰<Æ¿EìƒÄeô[^_]ÉöU‰åWVSƒì¿E‰Eì‰ÇÁç)ÇÁ獗€³%‰Uðh Æ#èÏêÿÿ‹Mð‹Y›ÁãC‰EèºÄ®%‹€Áà° ±%ƀ ±%F‰$èôÿÿF ‰$è„ôÿÿF$‰$èyôÿÿƒÄú·FPÿv 谞ÿÿû¹Ä®%‹Eè‹ú ’¡±%‰Í$±%‰±%ûƇ€³%ƒÃ ‹Uð‹B‰ƒÄ®%ú¡È¶%‰‡„³%‹Mì‰ -ȶ%ûƃÀ®%Ç$ Æ#è
-ïÿÿƒÄeô[^_]ÍvU‰åWVSƒì ‹u ŠM¿UÕ)Ѝ…€³%‰Eð‹@€Å ±%‹Eð€x uèûVǔ¸ÿÿév€;uèÞVǖ¸ÿÿéù‰ö€{tQ€{u,ƒì¶ÁP‹Uð·BPC PèÈëÿÿƒÄ…Àt;¸évƒì¶ÁP‹Uð·BPC PèœëÿÿƒÄ…ÀuÔƒì CPè-éÿÿƒÄ‹Uð·B‹{‰ÁÁéüó¥¨tf¥¨t¤·B‰ÁK‰K·S‰ÐC 9Ár‰È)ЉC€{u ƒì CPë8‰ö€{uƒì‹Uð·BPC$PèZïÿÿëƒì‹Uð·BPC$PèDïÿÿC‰$èíÿÿƒÄ¸eô[^_]ÐU‰åWVSƒì ‹} ŠM¿UÕ)Ѝ…€³%‰Eð‹@€Å ±%‹Eð€x uè‹Uǔ¸ÿÿév€;uènUǖ¸ÿÿéù‰ö€{tQ€{u,ƒì¶ÁP‹Uð·BPC$PèXêÿÿƒÄ…Àt;¸évƒì¶ÁP‹Uð·BPC$Pè,êÿÿƒÄ…ÀuÔƒì CPè½çÿÿƒÄ‹Uð·B‹s‰ÁÁéüó¥¨tf¥¨t¤·B‰ÁK‰K·S‰ÐC 9Ár‰È)ЉC€{u ƒì CPë8‰ö€{uƒì‹Uð·BPC Pèêíÿÿëƒì‹Uð·BPC PèÔíÿÿC‰$è-ìÿÿƒÄ¸eô[^_]ÐU‰åSƒìhß7#è;ƒÄÿ5±%hë7#è;»ƒÄÝ)ØÁà€¸€³%t8€³%‹B€Å ±%ƒì ÿp ÿp$‹B€ÅÀ®%PShÿ7#è®:ƒÄ Cƒûv­‹]üÉÃU‰åƒì`¿MÍ)ȋ…³%’Å ±%ÿp ÿp$RQh 8#E¨Pèf:ƒÄ ÉÐU‰åSƒì‹]h Æ#èHæÿÿ¿ÓÕ)Ѝ …‹˜³%€Å ƒÄ€ºÀ®%u ‹„³%‰‚Ä®%¿ÃÅ)ÂÁâƂ€³%ú‹ -ȶ%‰Š„³%£È¶%ûƒì h Æ#èÓêÿÿƒÄ‹]üÉÍvU‰åWVSƒì ‹u ‹E‹<…àã#ú‹^…Ûu-ƒì j èl™ÿÿƒÄ…ÀtÇÿÿÿÿÇ@Ç@ÿÿÿÿ‹U‰‰F‹;Lã#u û¸#é~ƒ;ÿtc¾ ä#‰ö‹ -Lã#I‰ÐÁà)Ћ‰TÆP‹C‰„¬¡Lã#‰CÿCèh€ÿÿ¡Lã#@‰ÂÁâ)ƒì ¿DÖPèŸ'èNŠÿÿƒÄûúƒ;ÿu¤¡Lã#ÿD‡D¡Lã#‰û¸eô[^_]ÉöU‰åWVSƒì ‹E ‹x¸…ÿ„À‹;Lã#tû¸髍vúè*'‹Lã# [‰ÊÁâ)Êf‰Õ(ä#‹E‹…àã#ÿL˜DÇÿÿÿÿ‹_ÇGÿÿÿÿƒûÿt-p ‰Ù[‰ÐÁà)ЉÅpä#‹œž DŽŽ ÿÿÿÿƒûÿuÖÇGènÿÿ¡Lã#@‰ÂÁâ)ƒì ¿Õ(ä#Pè¢&èQ‰ÿÿƒÄû¸eô[^_]ÃU‰åVSƒì h„8#è~ÿÿèe”ÿÿ‰ÆÇ$裗ÿÿ‰Ã‰µàã#ƒÄ jh˜8#Sè"8fÇCÍÆCÇCÇCtµ"ÇC Àµ"ÇC$̵"ÇC(Ôµ"ÇC,¶"ÇC00¶"ÇC4x¶"ÇC8ز"ÇC<À¶"ÇC@À³"ºƒÄsK •ÇD@DŽ ÿÿÿÿBú™~ݍeø[^]ÉöU‰åVS‹E‹…àã#ƒì h`8#è7¾ƒÄƒÃƒìÿt³@h8#èû6ƒÄFþ™~ãeø[^]ÃU‰å¸ÿÿÿÿ]ÉöU‰å]ÍvU‰åƒì‹E‹U ‹…àã#ƒÀƒ|@tƒìRj
-èȽÿÿƒÄÉÍvU‰å‹U :t ‹E -9u
-¸ëv¸ÿÿÿÿ]ÐU‰åSƒì‹] j è+–ÿÿ‰ÂƒÄ¸ …Òt!ÇÿÿÿÿÇBÇBÿÿÿÿ‹E‰‰S¸‹]üÉÍvU‰åSƒì‹] ‹Cƒxt ¸ë&‰öúƒ{tƒìj ÿsè<–ÿÿÇCƒÄû¸‹]üÉÍvU‰åWVSƒì ‹}‹u ú‹^…Ûu*ƒì j 苕ÿÿƒÄ…ÀtÇÿÿÿÿÇ@Ç@ÿÿÿÿ‰>‰Fƒ;ÿt
-û¸ë"‰ö¡Lã#‹½àã#ƒÂÿD‚@¡Lã#‰û¸eô[^_]ÃU‰åWVSƒì ‹E ‹U‹•àã#ú‹p¸…ö„V‹;Lã#u û¸#éA‹Lã#‹F ¿ ä#;„“°v -¸é v¡Lã#‹Œƒ°‹“¬…Òt‰ö‹;Lã#…Š‹R…Òu븅À…†‹ -Lã#I‰ÂÁâ)‹ƒ¬‹‰D×P‹ƒ¬‹@‰„‹‹“¬¡Lã#‰B‹ƒ¬ÿ@èÂ{ÿÿ¡Lã#@‰ÂÁâ)ƒì ¿D×Pèù"訅ÿÿƒÄûúéRÿÿÿ‰ö¸;J ’Àérÿÿÿ‹E‹…àã#¡Lã#ÿDƒD¡Lã#‰¹‹ƒ¬‹V ë‰ö‰Á‹A…Àt;P sò…Ét‰q됉³¬…Àt‰p‰F‰Nû¸eô[^_]ÍvU‰åWVS‹}‹E ‹ ½àã#ú‹X¸…Û„Ù‹;Lã#uû¸#éčv‹Lã#‹C ;„‘°s
-¸饡Lã#‹´°‹‘¬…Òt‰ö‹;Lã#u‹R…Òu︅Àuû¸ëk‰ö¸;r ’Àëåv‹ ½àã#¡Lã#ÿDD¡Lã#‰¾‹¬‹S 됉ƋF…Àt;P sò…öt‰^됉™¬…Àt‰X‰C‰sû¸[^_]ÉöU‰åWVSƒì ‹E ‹x¸…ÿ„ï‹;Lã#tû¸éڍvúè&!‹Lã# [‰ÊÁâ)Êf‰Õ(ä#‹E‹…àã#‰EðÿL˜DÇÿÿÿÿ‹_ÇGÿÿÿÿƒûÿt2‰ÆƒÆv‰Ù[‰ÐÁà)ЉÅpä#‹œžDŽŽÿÿÿÿƒûÿuÖÇG‹O‹W…Éu -‹Eð‰¬ë‰ö‹G‰A…Òt‹G‰Bè;yÿÿ¡Lã#@‰ÂÁâ)ƒì ¿Õ(ä#Pèo èƒÿÿƒÄû¸eô[^_]ÐU‰åVSƒì hÄ8#èJ—ÿÿè1Žÿÿ‰ÃÇ$€èo‘ÿÿ‰Æ‰4àã#ƒÄ jhØ8#Vèî1fÇFÌÆFÇFÇF|¼"ÇF ½"ÇF$,½"ÇF(\½"ÇF,¤½"ÇF0н"ÇF4(¾"ÇF88·"ÇF<À¸"ÇF@Ĺ"ºƒÄ^N•ÇD@DŽ°ÿÿÿÿDŽÿÿÿÿBú™~Òdž¬eø[^]ÐU‰å‹U‹M ¸ÿÿÿÿ…Òt;‹‹…àã#ƒxu‹@%ÿÿÿ=Ìu…Ét ‹B‹@ ‰ë
-‰ö¸ÿÿÿÿ됸]ÐU‰å‹U‹M¸ÿÿÿÿ…Òt@‹‹…àã#ƒxu‹@%ÿÿÿ=Ìt¸ÿÿÿÿ됅Ét‹B‹@ ‰‹R‹E ‰B ¸]ÃU‰å‹E‹M ‹U‹…àã#‰”ˆ°]ÃU‰åWVSƒì‹E‹<…àã#h`8#è0»ƒÄwƒìÿtž@h8#èó/ƒÄCû™~ãƒì h¢8#èÚ/»ƒÄ‰öƒìÿ´Ÿ°h¾8#è¼/ƒÄCû™~àeô[^_]ÃU‰å‹U :t ‹E -9u
-¸ëv¸ÿÿÿÿ]ÐU‰åS‹E‹U ‹]‹ …àã#Áâ‹C‰„°ÇD
-D‹$ÉÉöU‰åVS‹E‹u ‹…àã#ƒ|³DtƒìVj
-èD¶ÿÿƒÄë vÇD³DDŽ³°ÿÿÿÿeø[^]ÉöU‰å‹U :t ‹E -9u
-¸ëv¸ÿÿÿÿ]ÐU‰åSƒì‹] j苎ÿÿ‰ÂƒÄ¸ …Òt1ÇÿÿÿÿÇBÇBÿÿÿÿ‹E‹@‰B ÇB‹E‰‰S¸‹]üÉÍvU‰åSƒì‹] ‹Cƒxt ¸ë&‰öúƒ{tƒìjÿs茎ÿÿÇCƒÄû¸‹]üÉÍvU‰åWVSƒì$·]Shâ8#è .‰Ø-yƒÀÁèƒÄ ·À‰Eè@ÛÁã¿€Ã%ÿt8CP‰Eä·8Phé8#èá-ƒÄ ÿt;·D;Ph÷8#èÊ-ƒÄ ÿt; s·>Ph9#è±-ƒÄ ÿt>·D>Ph9#èš-ƒÄ ‹Uä·D:P·DLPh*9#è~-‹UèÕƒÄ·ØSh;9#èc-EóPEòPEìPS蹃ĶUóR¶UòRÿuìPh€9#è6-ƒÄ eô[^_]ÍvU‰åWVSƒì ‹E‹U‹]¹‹u ƒî‰ƒî‰º`F&fƒ=`F&yA¿Áfƒ<Byfù™~îfù™~ƒì hP9#èÎ,¸ƒÄé ¿Á<¹`F&‰Úf Ê€f‰Ǎ<ÿÁ纀Ã%‰tÇD _ÇDfŒÙf‰LfÇfÇDÇD _ ‹M‰ ÇDÇDO0ÇDÇD Ǎ_@ÇÇD‰t‰t fŒÉf‰L fŒÙf‰LfŒÛOPf‰\fŒÛf‰fÇD 0fÇD0O`fÇfÇDfÇDÇìÃ%¾ G&¹üó¥Å˜eô[^_]ÐU‰åVS‹u ¿E-‰Â…ÀyP‰ÐÁø@ÀÁเÃ%f‰tX@Vf‰T f‰t ƒÀPf‰tf‰4[^]ÉöU‰å¿E-‰Â…ÀyP‰ÐÁøfDŽ`F&]ÉöU‰åSƒì‹]¿E Phh9#Sè~3‰ØƒÄ‹]üÉÃU‰åVS趉Æès»‰öƒìhhÈ"SèƒÄhôÁ"SèìƒÄCƒû~ۉðeø[^]ÉöU‰åƒìèaÉÍvU‰åSƒì‹]‹\_#€82uºð°îƒìShÂ:#èˆ*ƒÄÁ㋃\_#@PhE#èp*ƒÄÿ³ _#ènƒÄ‹]üÉÉöU‰åƒìÿuhÙ:#èE*èèûÇ$èG7ƒÄÉÉöU‰åWVSƒì‹E‹} ƒ=ÄÁ%„à…ÿ„Ø¡@¸%€€€ źm¶‰È÷â‰È)ÐÑ草ÁÁé
-‰O¡D¸%ÀP‰ÐÁà)кè‰Ó™÷û’’’щW¡D¸%ÀP‰ÑÁá)ѾÓMb‰È÷îÁú‰ÈÁø‰Ó)øƒÞC÷o‰ÑÁù‹GÁø)Á‰È؉‹OÁú‰ÈÁø)’’’’’’Áâ)э ‰ ‰ ‰Áá‰O‹éԉö]è¡@¸%€€€ źm¶‰È÷â‰È)ÐÑ草ÁÁé
-¡D¸%ÀP‰ÐÁà)кè‰Ö™÷þ’’’щS¡D¸%ÀP‰ÑÁá)ѾÓMb‰È÷îÁú‰ÈÁø)‰Uè‹{¸ƒÞC÷ï‰ÑÁù‰øÁø)Á‰ÈEè‰ùÁú‰ÈÁø)’’’’’’Áâ)э ‰ ‰ ‰Áá‰K‹E荀€€€€€‰ÃÁã‰È÷îÁúÁù)ʍéèvƒøuc¸ƒ=4¸%…Ρ8¸%€€€€€€‰ÃÁã‹ -<¸%ºÓMb‰È÷êÁúÁù)ÊӅÿ„…¡8¸%‰¡<¸%éqvƒø…ç¶$¸%ƒøtƒø…Àt
-ë,ƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹ -0¸%f)Ù·É -@¸%º×®¬]‰È÷êÁú‰ÈÁø)ÂD¸%’BÁà)Ѝ‚‰ÂÁâ Ð)Á‰È£@¸%f‰0¸%…ÿ„̍€€€ źm¶‰È÷â‰È)ÐÑ草ÁÁé
-‰O¡D¸%ÀP‰ÐÁà)кè‰Ó™÷û’’’щW¡D¸%ÀP‰ÑÁá)ѺÓMb‰È÷êÁú‰ÈÁø‰Ó)Ëw¸ƒÞC÷î‰ÑÁù‰ðÁø)Á‰È؉‰óÁú‰ÙÁù)ʍ’’’’’’Áâ‰Ø)Ѝ€€€Áà‰G‹@¸%’’’4Õ¹Á6ۉð÷é‰Ó3‰ÁÁù
-‰ð™‰È)Ћ -D¸%ɍ‘ÑÁâ)ʉÑÁá)эÈ鍃ø…ƒ=4¸%…rUè¡8¸%‰¡<¸%‰B»@¹C°Ò‰Êî‰Úì¶ÈìÁàf¶Ñ зð·ÀÁ%9Æv%hæ:#j_hø:#hÿ:#èm%Ç$èmƒÄ·ÀÁ%)ó¯(¸%·ÀÁ%‰Ø‰Ñº÷ñ‰Ãº °
-îì©t‹ -(¸%;ÍÌÌ̉ð÷âÁê9Ós‰Ëu荛€€‹V‰Eä‰F¸¡/¸D÷mä‰ÑÁù‹EäÁø)Á‰ÈEè‹N¸¡/¸D÷éÁú‰ÈÁø)’’’’’’’’’Áâ )щN¡8¸%€€€€€€Áà‰Eä‹ -<¸%ºÓMb‰È÷êÁúÁù)ʋEäÐÅÿt ‰ð‹‰‹@‰G‰Øëv¸eô[^_]ÍvU‰åVSƒìŠEˆE÷ÿ`#ƒ=`#uƒ=ä_#tÿä_#¶E÷€Áàºì¶%ƒ<uIÇö€ð¶%tûƒì ¶]÷›Áã¾à¶%ÿ43ÿ“ä¶%ƒÄöDtú¶E÷€Ç…ì¶%ÿì_#ƒ=`#uƒ=è_#tÿè_#ÿ -`#eø[^]ÍvU‰åWVSº¿ì¶%¾è¶%»ä¶%¹à¶%’ÁàÇ8‰0ÇÇBƒú~ÜÇ`#[^_]ÐU‰åVS‹U‹] ‹uú’ƒ<…ì¶%t÷Æu¸ÿÿÿÿëH’ …ǁì¶%û…Ût‰™ä¶%ºà¶%è¶%‰‰t
-됍’Ç…ì¶%¸[^]ÐU‰å¡`#]ÉöU‰åSƒì¶$¸%ƒøt!ƒø…Àt ë.‰öƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹ -0¸%f)Ù·É -@¸%º×®¬]‰È÷êÁú‰ÈÁø)ÂD¸%’BÁà)Ѝ‚‰ÂÁâ Ð)Á‰ -@¸%f‰0¸%ÿ`#ƒ=`#uƒ=ä_#tÿä_#¡<¸%‰Ã¤Æ#º¡/¸D‰Ø÷êÁú‰ÙÁù)Ê8¸%’’’’’’’’’Á⠉Ø)У<¸%‹ ¸%ë$‹¡,¸%‰‰,¸%‰ ¸%ƒì ÿrÿRƒÄ‰Ú…Òt‹B ;8¸%;8¸%uƋB;<¸%~»ƒ=`#uƒ=è_#tÿè_#ÿ -`#‹]üÉÃU‰åWVSƒì‹uhÄÖ"j@èØ -ƒÄƒ>t,ƒì h;#èß »ÿÿƒÄ¿@¹C°8‰ÊîˆØ‰úîëaƒì h5;#è³ ‹N‰ -(¸%ɍA‰ÂÁâ‰Ñ)ÁºÓMb‰È÷âƒÄ‰ÑÁéu¹f‰ -ÀÁ%‰Ë¿@¹C°4‰Êî‰úˆØî‰ØfÁèî‹£4¸%ƒ=$H&~»A¹C°p‰ÊÚîîÆ$¸%ë%Æ$¸%»B¹C°°‰ÊÚîîºa°îº!ì%þî¹¾`¸%»d¸%ƒùbIÁàx¸%‰0I‰LÃAƒùc~ßǨÁ%Ç,¸%`¸%Çä_#Çè_#¡(¸%€€€ÁࣤÆ#Ç<¸%Ç8¸%Ç@¸%ÇD¸%fÇ0¸%ƒ=4¸%uÇ$ã#´Í"Ç(ã#LÎ"ëÇ$ã#œÎ"Ç(ã#(Õ"eô[^_]ÃU‰å‹E£ä_#]ÍvU‰å‹E£è_#]ÍvU‰å‹E£ô_#]ÍvU‰åWVSƒì ‹E‹U ‰Eè‰Uì¸ÿÿÿÿƒ=,¸%tl‹ -,¸%‹£,¸%‹E‰A‹Eè‰A ‹Eì‰A‹E‰A»‹ ¸%}è‹uè됋…Òt‰ð;B  -;B u‹G;B~‰Óëâ‰ö…Ût‰ ë‰ - ¸%‰‹AƒÄ [^_]ÐU‰å‹E¹‹ ¸%됉ы…Òt;Buó¸ÿÿÿÿ…Òt$…Éu
-‹£ ¸%됋‰¡,¸%‰‰,¸%¸]ÃU‰åWVSƒì,‹E‹U ‰Eè‰Uì¸ÿÿÿÿƒ=,¸%„q‹5,¸%‹£,¸%‹E‰F‹Eè‰F ‹Eì‰F‹E‰Fº‹ ¸%}è‹Mè됋…Ût‰È;C  -;C u‹G;C~‰Úëâ‰ö…Òt‰2鐉5 ¸%ƒ=ÄÁ%…ôƒìEàPjè3óÿÿ‹ ¸%ƒÄ‹Eà;B  -;B u‹Eä;B~ÇEÜÇEØëK}؋ ¸%Mà‹B;A|‹B +Eà‰E؉Ћ@+Aë ¡ ¸%‹@ +EàH‰EØ¡ ¸%‹@+Eäʚ;‰G‹E؍€€€€€€Áà‰EԋMÜ¿ÓMb‰È÷ïÁúÁù)ÊUԍҍB‰ÂÁâ)‰Ð÷çÁê¸ðúðw¸ÈúÇv‰Ðº@îfÁèFeô[^_]ÃU‰åWVSƒì¶$¸%ƒøtƒø…Àt
-ë,ƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹0¸%f)Ú·Ò‰Ö5@¸%¹×®¬]‰È÷î‰ÑÁù‰ðÁø)Á -D¸%‰AÁà)ȍÁ‰ÁÁá ȉò)‰@¸%f‰0¸%]荒’’ Õ¾m¶‰ð÷á‰Ö‰Ê)òÑê2‰ÁÁé
-¡D¸%ÀP‰ÐÁà)кè‰Ö™÷þ’’’щS¡D¸%ÀP‰ÑÁá)ѺÓMb‰È÷êÁú‰ÈÁø)‰Uè‹s¿ƒÞC‰ð÷ï‰ÑÁù‰ðÁø)Á‰ÈEè‰ðÁú‰ñÁù)ʍ’’’’’’Áâ)Ѝ€€€Áà‰Cƒ= ¸%„/ÇÄÁ%‹ ¸%‹Eè;B ;B …Œ‹C;BŽ€ƒ=`#uƒ=ä_#tÿä_#ÿ`#‹ ¸%ë#‹¡,¸%‰‰,¸%‰ ¸%ƒì ÿrÿRƒÄ‰Ú…Òt‹B ;Eè -;EèűB;Eì~ă=`#uƒ=è_#tÿè_#ÿ -`#¶$¸%ƒøt"ƒø …Àt -ë/vƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹0¸%f)Ú·Ò‰Ö5@¸%¹×®¬]‰È÷î‰ÑÁù‰ðÁø)Á -D¸%‰AÁà)ȍÁ‰ÁÁá ȉò)‰@¸%f‰0¸%]荒’’ Õ¾m¶‰ð÷á‰Ö‰Ê)òÑê2‰ÁÁé
-¡D¸%ÀP‰ÐÁà)кè‰Ö™÷þ’’’щS¡D¸%ÀP‰ÑÁá)ѺÓMb‰È÷êÁú‰ÈÁø)‰Uè‹s¿ƒÞC‰ð÷ï‰ÑÁù‰ðÁø)Á‰ÈEè‰ðÁú‰ñÁù)ʍ’’’’’’Áâ)Ѝ€€€Áà‰C‹ ¸%‹Mè;J 
-;J u;B~ÇEäÇEàëJ]à‹ ¸%Mè‹B;A|‹B +Eè‰Eà‰Ð‹@+Aë ¡ ¸%‹@ +EèH‰Eà¡ ¸%‹@+Eìʚ;‰C‹Eà€€€€€€‰ÆÁæ‹Mä»ÓMb‰È÷ëÁúÁù)ʍ2ҍB‰ÂÁâ)‰Ð÷ãÁê¸ðúðw¸ÈúÇv‰Ðº@îfÁèîÇÄÁ%ë -‰öº@°î°ðîeô[^_]ÐU‰åVSƒì‹E»¹‹ ¸%ëv‰Ñ‹…Òt;Buó¸ÿÿÿÿ…Ò„I…Éu‹£ ¸%»ë‹‰¡,¸%‰‰,¸%ƒ=ÄÁ%…ƒ= ¸%uº@°î°ðéû‰ö…Û„òƒìEðPjèºìÿÿ‹ ¸%ƒÄ‹Eð;B  -;B u‹Eô;B~ÇEìÇEèëJ]è‹ ¸%Mð‹B;A|‹B +Eð‰Eè‰Ð‹@+Aë ¡ ¸%‹@ +EðH‰Eè¡ ¸%‹@+Eôʚ;‰C‹E荀€€€€€‰ÆÁæ‹Mì»ÓMb‰È÷ëÁúÁù)ʍ2ҍB‰ÂÁâ)‰Ð÷ãÁê¸ðúðw¸ÈúÇv‰Ðº@îfÁèeø[^]Éöú‹D$¼¨Ö#PèŒëÿÿ`fff f¨f¸0ŽØŽÀ° º î¡ð_#@£ð_#1ÛfŒÓü¡4¸%ƒøtèùòÿÿëè6ùÿÿ°
-º îì¨t ¸@Pè–ÿÿÿf¡ø_#f9þ_#t f£þ_#ÿ-ú_#ƒ=ô_#t‹ô_#ÿÓf©f¡ffaωöU‰å‹EØf£þ_#f£ø_#]Ã1ÀÈÃU‰åf¸0ŽØŽÀ‹Ef;þ_#t f£þ_#ÿ-ú_#]ÉöU‰åƒìjjjj@èaƒÄÉÃU‰åWVSƒì ‹]‹u ‹}聉€:y"…Ût‹B8‰…öt‹BÁà
-‰…ÿt)‹B4‰ë"‰ö…ÛtÇ…öt‹BÁà
-‰…ÿtÇ@ƒ}t ‹BÁà
-‹U‰ƒÄ [^_]ÍvU‰åƒìjjjj@è̓Ä·@0ÉÃU‰å¡¸]#]ÉöU‰å]ÍvU‰åSƒì‹¸]#誃ì SèÍ^ÿÿè ƒÄ‹]üÉÃU‰åWVS‹M ‹u‹}Š]‰ÈÁàeèÿÿ Eè‰ÈÁèUèˆBáÿbÿÿÿ J‰ðˆB‹Ef‰Eè‹EÁè‰EäŠEäƒà ÃË@¶ÃÁàbÿÿÿ Bçüÿ=ª]#‹‰‹B‰G[^_]ÐU‰åWVSƒì ‹] ‹u‹}·EMèª]#‹‰‹@‰A‰Ê¶JÁá¶B ÁÁá·B Á…ÛtŠBƒà¶ÐÁâ·Eè Љ…ötŠE툅ÿt
-ŠEî%ðˆ‰ÈƒÄ [^_]ÉöU‰å‹E ¶UÁâ¹À`#fÇD
-8ƂÅ`#îƂÄ`#f‰
-Áèf‰D
-]ÍvU‰åº °îº!°@î°î°î°ÿ°°pî°î°î°ÿî]ÐU‰åº °îº!°î°î°î°ÿ°°pî°î°î°ÿî]ÐU‰å‹Mf…ÉtWfƒùw¸Óà
-`#ë7fƒùw<·Éƒé¸Óà
-`#¢`#º¡î<ÿu `#©uƒÈ¢`#º!î]ÃU‰å‹Mf…ÉtUfƒùw¸þÿÿÿÓÀ"`#ë5fƒùw:·Éƒé¸þÿÿÿÓÀ"`#¢`#º¡î `#©t%û¢`#º!î]ÉöU‰å¿ø_#]ÃU‰åƒì‹Ef£ø_#˜PèWüÿÿƒÄÉÐU‰å¿ø_#]ÃU‰åƒì‹E‰Âf£ø_#ƒ=`#uƒì ¿ÂPèüÿÿƒÄÉÐU‰åWVì¾¹`#ºP`#‰öµÇäÞ"ÇäÞ"Fƒþ~åƒì EÈPèÅèºÇ H&;#‹EÈ£$H&¶ `#£(H&ƒÄ‹EУ0H&‹EÔ£4H&‹EØ£8H&hà"jè£ýÿÿƒÄh—à"jè”ýÿÿƒÄh¡à"jè…ýÿÿƒÄh¨à"jèvýÿÿƒÄh¯à"jègýÿÿƒÄh¶à"jèXýÿÿƒÄh½à"jèIýÿÿƒÄhá"jè:ýÿÿƒÄhÄà"jè+ýÿÿƒÄhËà"j èýÿÿƒÄhÒà"j
-è -ýÿÿƒÄhÙà"j èþüÿÿƒÄhàà"j èïüÿÿƒÄhçà"j -èàüÿÿƒÄhîà"jèÑüÿÿƒÄhõà"jèÂüÿÿƒÄhüà"jè³üÿÿƒÄh¼ß"jAè¤üÿÿƒÄhÄß"jBè•üÿÿƒÄhÌß"jCè†üÿÿƒÄhÔß"jDèwüÿÿƒÄhÜß"jEèhüÿÿƒÄhäß"jFèYüÿÿƒÄhìß"jGèJüÿÿƒÄhôß"jpè;üÿÿƒÄhüß"jqè,üÿÿƒÄhà"jrèüÿÿƒÄh à"jsèüÿÿƒÄhà"jtèÿûÿÿƒÄhà"juèðûÿÿƒÄh$à"jvèáûÿÿƒÄh,à"jwèÒûÿÿf -”G&€¾ƒÄvÀŀÃ%ƒì jh‰hØPõ·ÀPèúÿÿƒÄ Fþš~ǃì hÐèFùÿÿƒÄÛãݵTÿÿÿ›¿ G&µTÿÿÿ¹üó¥ ÀƒÈ""ÀÛãèƒûÿÿèúÿÿeø^_]ÍvU‰åSƒìº!°ÿîè’ûÿÿ¹@ºC°6Êîîƒ=$H&~¹AºC°tî°‰Êî°ë»B¹C°°‰ÊÚîîºaî‹]üÉÃU‰å‹U‹E ‰•P`#]ÉöU‰å‹U‹E ‰•`#]ÉöU‰åƒìh`;#è
-è— ƒÄÉÉöœX‰Á5PœX9ÈtQ¸Ã¸ÜX‰Á5 PœX1ÈtQ¸øÃf1Àžf¸f»öóŸ€üu¸øÃÆ `#Ûã¹âþfÇ`#ZZÝ=`#¹âþf¡`#<u+Ù=`#¹âþf¡`#f%?fƒø?uÆ `#Æ `#Éö`¸ëp`¸ëh`¸ë``¸ëX`¸ëP`¸ëH`¸ë@`¸ë8`¸ ë0`¸
-ë(`¸ ë `¸ ë`¸ -ë`¸ë`¸ë ¨Pf¸0ŽÀŽØüX1ÛfŒÓP‹…`#ÿÓ[° ƒûrº îº îf¡ø_#f;þ_#t f£þ_#ÿ-ú_#©¡aϸ鋸選ëz¸ës¸ël¸ëe¸ë^¸ëW¸ ëP¸
-ëI¸ ëB¸ ë;¸ -ë4¸ë-¸ë&¸ë` ¨f¸0ŽÀŽØüèש¡aÏPf¸0ŽØŽÀXfŒÓ‹=ª]#ß1ۊŠ_Áãf‹_ÜfŒÒfŒÛŽÓSRPÿ…P`#ƒÄX[ŽÐ)ÜÏU‰åWVSƒì ‹u¸¹ ‰÷üó«è|ýÿÿ…ÀtÇëUèŠýÿÿ…Àt7ÇFǸ¢‰^‰N‰V …Àt+¸¢‰F‰^‰N‰V ëÇècýÿÿ…ÀtÇ ƒÄ [^_]ÍvU‰åWV¿`#È·À-yƒÀÁø9ÂtU¿`#@ÀÝ4ÅìÃ%›È·À-yƒÀÁøf£`#¿5`#¿`H&4v4ö4õìÃ%¹üó¥Ý%`H&^_]ÉöU‰å¿`#]ÃU‰åWVSƒì(ŠM¡”`#Áà ˜€ f¶ÎH&f£ªÖ#f¶ÍH&f£¬Ö#€ù t%€ù €ù„óé‰ö€ù
-„#é‰öfƒªÖ#·ªÖ#;ÐH&Œ½fǪÖ#·¬Ö#¡ÔH&H9Â…¿¡ÐH&H‰Eì‰Uèf¾ÌH&Áâf‰Uò¡”`#Áà °€ ¿;}è:¹;Mì*_ÿv‰ø¯ÐH&È·F‰Ø¯ÐH&Èf‰FA;Mì~ÜG;}è~ƹ;MìKWÿ‰Ð¯ÐH&Èf‹]òf‰FA;Mì~çé)‰öfǨÖ#·ªÖ#‰Áƒø~ºƒÂ·ÂƒÀ9È|óf‰¨Ö#f¡¨Ö#f£ªÖ#éævfǪÖ#·¬Ö#¡ÔH&H9Â…¾¡ÐH&H‰Eà‰UÜf¾ÌH&Áâf‰U桔`#Áà °€ ¿;}Ü=v¹;Mà*_ÿv‰ø¯ÐH&È·F‰Ø¯ÐH&Èf‰FA;Mà~ÜG;}Ü~ƹ;MàGWÿ‰Ð¯ÐH&Èf‹]æf‰FA;Mà~çé%‰öfÿ -ªÖ#·ªÖ#·¬Ö#¯ÐH&ÂÆS fÿªÖ#éõ‰ö·ªÖ#·¬Ö#¯ÐH&Ј CfÿªÖ#·ªÖ#;ÐH&Ž¿fǪÖ#·¬Ö#¡ÔH&H9Â…š¡ÐH&H‰EԉUÐf¾ÌH&Áâf‰UÚ¡”`#Áà °€ ¿;}Ð=v¹;MÔ*_ÿv‰ø¯ÐH&È·F‰Ø¯ÐH&Èf‰FA;MÔ~ÜG;}Ð~ƹ;MÔ'Wÿ‰Ð¯ÐH&Èf‹]Úf‰FA;MÔ~çëfÿ¬Ö#·5ªÖ#·=¬Ö#‰øf¯ÐH&f‰EΡ”`#Áà fEÎfuλÔ°‰Úî¹Õ‰ÊŠEÎî°‰Úîf‹EÎfÁè‰Êî‰óˆÎH&‰ø¢ÍH&ƒÄ([^_]ÐU‰åWVSƒì‹u‹} ‰øf¯ÐH&f‰Eò¡”`#Áà fEòfuò»Ô°‰Úî¹Õ‰ÊŠEòî°‰Úîf‹EòfÁè‰Êî‰ð¢ÎH&‰úˆÍH&ƒÄ[^_]ÍvU‰åS¹Ô°
-‰Êî»Õ‰ÚŠEî° ‰Êî‰ÚŠE î‹$ÉÍvU‰åWVSƒìf¾EÁàf‰Eò¡”`#Áà ¸€ ‹]ë0‹M ;M(sÿ‰Ø¯ÐH&È·G‰ð¯ÐH&Èf‰GA;M~ÜC;]~ʋM ;MSÿv‰Ð¯ÐH&Èf‹]òf‰GA;M~çƒÄ[^_]ÍvU‰åWVSƒì ¡ÐH&H‰Eð‹ÔH&K‰]ìf¾ÌH&Áàf‰Eꡔ`#Áà °€ ¿9ß<‰ö¹;Mð*_ÿv‰ø¯ÐH&È·F‰Ø¯ÐH&Èf‰FA;Mð~ÜG;}ì~ƹ;MðWÿ‰Ð¯ÐH&Èf‹]êf‰FA;Mð~çƒÄ [^_]ÍvU‰å·J‰ÐH&¶„@£ÔH&¶„ÿ ¢ÌH&¶P¢ÎH&¶Q¢ÍH&¶`¢¯Ö#¶a¢®Ö#ǘ`#Ç”`#]ÃU‰åWVSƒì ÎH&¢P ÍH&¢Q¶ÀP¶ÎH&PèŠýÿÿ¶®Ö#¶5¯Ö#ƒÄ¹Ô°
-‰Êî¿Õ‰úˆØî° ‰Êî‰ú‰ðîeô[^_]ÍvU‰åSƒì‹]€;tŠCƒì ¾ÀPèiùÿÿƒÄ€;ué‹]üÉÃU‰åVS‹E‰ÃÁã £˜`#¹Ô° -‰Êî¾Õ‰òˆØî° ‰Êî‰ØfÁè‰òî[^]ÃU‰åVS‹u‹”`#Áâ»ÀÖ#¶ÎH&‰¹àÖ#¶ÍH&‰
-µŠ¢ÎH&Š
-¢ÍH&‰5”`#[^]ÃU‰å¡˜`#]ÉöU‰å¡”`#]ÉöU‰åWVSƒì ‹}f¾u Áæf¾E Ƌ]‹E9Ã3v‹M9ù#‰Ê¯ÐH&¡”`#Áà ÐØf‰´€ A9ù~ÞC;]~ЃìÿuÿuèüÿÿŠE¢ÍH&ŠE¢ÎH&ƒÄeô[^_]ÍvU‰åWVSƒì ¡ÐH&H‰Eð‹=ÔH&Of¾ÌH&ÁãƒË ¾9Æ4¹9ù%v‰Ê¯ÐH&¡”`#Áà Ððf‰œ€ A9ù~ÞF;uð~̃ìjjèûÿÿÆÍH&ÆÎH&ƒÄeô[^_]ÍvU‰åS‹U ‹]‹M¯ÐH&¡”`#Áà ÂU”€ ˆ
-ˆZ‹$ÉÉöU‰åS‹E ‹]‹M‰Â¯ÐH&¡”`#Áà ÂU”€ ¶B…Étˆ¶‰Â…Ûtˆ¾Â‹$ÉÐU‰åS‹E ‹MŠ]‰Â¯ÐH&¡”`#Áà ÂU”€ €9tŠˆABˆB€9uò‹$ÉÐU‰åƒìhœ;#èTýÿÿôƒÄÉÉöU‰åƒìjèƒÄÉÉöU‰åƒìh4èƒÄÉÍvU‰åVS‹Ef£r¹d»þ¾v‰Êì©t Fþÿÿ~í¸@=Ÿ†~ø‰ÚˆÈö@=Ÿ†~øë‰öU‰åSƒìE Pÿuh×#èX‰ÃÇ$×#è¢üÿÿ‰ØƒÄ‹]üÉÃU‰åWVSìð‹} ŠEˆ…ÿÿÿEPÿuÿÿÿSè‰ÆS¾…ÿÿÿPWÿuè±þÿÿ‰ðƒÄ eô[^_]ÃU‰åSƒìE PÿuhÙ#謉ÃÇ$Ù#è&üÿÿ‰ØƒÄ‹]üÉÃU‰åS‹M‹U ‰Ë€:tvŠˆBA€:uõƉ؋$ÉÍvU‰åVS‹]‹U ‹M‰Þë‰öŠˆBC€:t‰ÈI…ÀîƉð[^]ÐU‰å‹U‹M ë -¸€:tBAŠ:t)Ð]ÃU‰åS‹U‹] ‹M…Éëv¶¶Sÿ)Ð됊C8uíŠB„ÀtIu︋$ÉÐU‰å‹U¸€:tB@€:uù]ÍvU‰åS‹E‹] €8t‰Ú€:tŠv:
-tB€:uö@€8u下$ÉÉöU‰å‹E‹U €8t ‰ö8t @€8uö¸]ÍvU‰åS‹]‰Ú€;t‰öŠ
-AŸ<wAàˆB€:uì‰Ø‹$ÉÐU‰åS‹]‰Ú€;t‰öŠ
-A¿<wA ˆB€:uì‰Ø‹$ÉÐU‰åS‹U‹M ‰Ó€;tvB€:uú늈AB€9uõƉ؋$ÉÍvU‰åWVSƒì<‹u‹]ÇEèÇEäÇEàÇEÜÇEØÇEÔÇEпÇEÌÙîÝ]À‰uì‹E €8„D‹U €:%t…ÿuŠˆB‰U FÿEèév‹E €8%u%@‰E ¿ÇEä
-ÇEàÇEØÇE̋U ¾ƒè%ƒøS‡Ñÿ$…à+#‰öÆ%FÿEè鼃ÉòFŠCüˆÿEè驐ƒ}Øt"ƒ}؃}Øtëƒ}ØuƒÃ‹Cü‰EÔë -vƒÃ¿Sü‰Uԃì ÿuÌÿuäj
-VÿuÔè¾ éœƒ}Øt"ƒ}؃}Øtëƒ}ØuƒÃ‹Cü‰EÐë -vƒÃ·Sü‰UЃì ÿuÌÿuäj
-VÿuÐè.éPƒ}Øt"ƒ}؃}Øtëƒ}ØuƒÃ‹Cü‰EÐë -vƒÃ·Sü‰UЃì ÿuÌÿuäjVÿuÐèâ鐃ËCü‰EЃì jÿuäjVPèÂé䐃ËSü€:tŠˆBFÿE܀:uò‹UÜUèévƒ}Øtƒ}؃}Øtëƒ}Øu ƒÃÝCøÝ]ÀƒìÿuÌÿuàÿuäVÿuÄÿuÀèYë~vƒ}Øtƒ}؃}Øtëƒ}Øu ƒÃÝCøÝ]ÀƒìÿuÌÿuàÿuäVÿuÄÿuÀè} -ë>vƒ}Øtƒ}؃}Øtëƒ}Øu ƒÃÝCøÝ]ÀƒìÿuÌÿuàÿuäVÿuÄÿuÀèa‰EÜEèÆ¿ƒÄ é±ÇEØé¥ÇEØ陃MÌ鐍vƒMÌ鄍v¿ƒMÌëvƒÿu?ƒìEìPj
-ÿu èb
-‰EäƒÄ‹E €80u ÷EÌtƒMÌ됃MÌ‹UìJ‰U ë4vƒÿu,ƒìEìPj
-ÿu è
-‰Eà‹EìH‰E ¿ƒÄë‰ö¿ÿE ‹U €:…¼üÿÿÆ‹Eèeô[^_]ÉöU‰åƒì EPÿu ÿuè7üÿÿƒÄÉÉöU‰åWVSƒì,‹u‹} ‹]ÇEìÇEèÇEäÇEàÇEÜÇEØÇEÔÇEЉuð€?„>€?%tƒ}Ôu ŠˆGFÿEìëá€?%uGÇEÔÇEè
-ÇEàÇEоƒè%ƒøS‡çÿ$…0-#Æ%FÿEìéԃÉòFŠCüˆÿEìéÁƒ}àt&ƒ}àƒ}àt
-ë"ƒ}àt
-ëƒÃ‹CüëƒÃ‹CüëƒÃ¿Cü‰E܃ì ÿuÐÿuèj
-VÿuÜè鏐ƒ}àt&ƒ}àƒ}àt
-ë"ƒ}àt
-ëƒÃ‹CüëƒÃ‹CüëƒÃ·Cü‰E؃ì ÿuÐÿuèj
-ëBƒ}àt&ƒ}àƒ}àt
-ë"ƒ}àt
-ëƒÃ‹CüëƒÃ‹CüëƒÃ·Cü‰E؃ì ÿuÐÿuèjVÿuØè6‰EäEìÆÇEÔƒÄ éҍvƒÃ‹Sü€:tŠˆBFÿEä€:uò‹EäEì飍vÇEàé›ÇEà鏃MÐ醍vƒMÐë}‰öÇEÔƒMÐënvƒ}Ôu6ƒìEðPj
-W蓉EèƒÄ€?0u ÷EÐtƒMÐ됃MЋ}ðOë1‰öƒ}Ôu)ƒìEðPj
-WèW‹}ðOÇEÔƒÄë
-vÇEÔGé¼ýÿÿvÆ‹Eìeô[^_]ÉöU‰åƒì EPÿu ÿuèGýÿÿƒÄÉÉöU‰åWVSƒì,‹}‹uÇEèÇEäÇEàÇEÜÇEØ»‰}ì饐‹U €:%t…Ûu B‰U 鏍v‹E €8%u%@‰E »ÇEäÇEàÇEÜÇE؋U ¾ƒè*ƒøN‡Eÿ$…€.#‰öƒû…8ƒìEìPj
-ÿu èN‰E܃MØ‹EìH‰E ƒÄéŠGƒÆ‹^üˆëÝØÿEèéõƒÆ‹^üëG€?tƒì ¾PèBƒÄ…ÀuçÇEÔë#‰ö÷EØuŠˆCë‹UÜ9UÔ}ŠˆCÿEÔG€?tƒì ¾PèþƒÄ…ÀtÇÆ덉öƒìh¨;#Wè&÷ÿÿ‰ÇƒÄ EìPj
-WèՉ‹}ìƒÄƒ}à…Wƒ}ät)ƒ}ä ƒ}ätéCÿÿÿƒ}ä…9ÿÿÿƒÆ‹Fü‰é,ÿÿÿƒÆ‹Füf‰éÿÿÿ‰öƒìhµ;#Wè¶öÿÿ‰ÇƒÄ EìPj
-됃ìhÀ;#Wèšöÿÿ‰ÇƒÄ EìPjWè ‹}ìƒÄƒ}à…̓}ät+ƒ}ä -ƒ}äté¹þÿÿ‰öƒ}ä…­þÿÿƒÆ‹Vü‰é þÿÿƒÆ‹Vüf‰é‘þÿÿ‰öƒìhØ;#Wè*öÿÿ‰ÇƒÄEìPWè;‹}ìƒÄƒ}àu`ƒ}ät)ƒ}ä ƒ}ätéMþÿÿƒ}ä…CþÿÿƒÆ‹FüÝé8þÿÿƒÆ‹FüÙé*þÿÿvÇEäë vÇEäëvÇEàëÝؐ»ÿE ‹E €8…Pýÿÿ‹Eèeô[^_]ÐU‰åƒì EPÿu ÿuèïüÿÿƒÄÉÉöU‰åWVSƒì,‹u ÇEп‹Eƒð‰EԋU‰U̅Òy‰Ñ÷ىM̃}y ‹E…Ày÷Ø됋E÷EÔu ƒ}yƒ}yGƒ}u‹EÐÆD(Ø0@‰EÐë8v…Àt1U؉Uȉöƒì º÷ủÃRèI‹MȋUЈ
-B‰UЉ؃Ä…Àu×}ЋEԃàƒøu‰ú;}} -‰öÆ FGB;U|õƒ}y ƒ}yÆ-ë ÷EÔtÆ+F‹Eԃàƒøu‰ú;}} Æ0FGB;U|õ‹UÐJx M؊
-ˆFJy÷‹Eԃàƒøu‰ú;}} Æ FGB;U|õƉøeô[^_]ÃU‰åƒì‹Eÿuÿu÷ØPÿu ÿuèŸþÿÿƒÄ ÉÉöU‰å‹E…Ày÷Ø]ÉöU‰åSƒì‹]èÁîÿÿƒì SèõÿÿU‰åWVSƒì‹M‹} ÙîÙÀÙ軀9-u ¾ÿÿÿÿë
-‰ö¾ëA€90túŠƒè0< w(ÝÀ/#ëÙˍv¾ƒè0AÜËÙËPÚ$XŠƒè0< vâÝۀ9.u9AŠƒè0< w/ÝÀ/#ëÙÉÙʉö¾ƒè0AÜÊÙÊPÚ$ÙÉXØʊƒè0< vÝÝÚÙÉÞùÞÁVÚ $^€9et €9E…“A€9-u
-¾ÿÿÿÿAë‰ö€9+u ¾Aëv¾Šƒè0< weÝÀ/#¾ƒê0A·ÃÙÀPÚ $Ù}ð‹]ðÆEñ Ùmð‰]ðÛ]ìÙmð‹Eì·À‰$Û$‰$Ú$ZÙ}ð‹UðÆEñ Ùmð‰UðÛ]ìÙmð‹Eì‰ÃŠƒè0< v£Ý؅ö~!ºf…Ût4ÝÀ/#·Ã‰öÜÉB9Â|ùëvº·Ã‰Ã9Â}ÝÀ/#ÜùB9Ú|ùÝ؅ÿt‰ƒÄ[^_]ÐU‰åWVSƒì ‹]‹} ÇE쾀;-u ÇEðÿÿÿÿCë‰ö€;+u ÇEðCëÇEð€;0u>C€;0túë6ƒì ¾PCè‰ÂƒÄ9ú…Òy
-¸ëEv‰ð¯÷Ö9ð~ÇEìƒìW¾P聃ąÀu¶ƒ}t‹E‰ƒ}ìt¾ÿÿÿ¯uð‰ðeô[^_]ÉöU‰åWVSƒì ‹]‹} ÇEð¾€;0uC€;0tú€;xuKƒÿuFC€;0u@‰öC€;0túë6ƒì ¾PCè_‰ÂƒÄ9ú…Òy
-¸ëAv‰ð¯÷Ö9ðvÇEðƒìW¾PèуÄ…Àu¶ƒ}t‹E‰ƒ}ðt¾ÿÿÿ‰ðeô[^_]ÉöU‰åŠUBÐ< w ¾Âƒè0ë&vB¿<w ¾Âƒè7됍BŸ<w ¾ÂƒèW됾Â]ÍvU‰å‹Uƒú w B0¾À됍BöƒøwB7¾Àë¾Â]ÍvU‰åŠUƒê0¸€ú –À]ÉöU‰åŠUBÐ<vBŸ<w¸ë¸]ÐU‰åŠU€ú/~‹E œ`#:Pÿ¸ë¸]ÐU‰åŠUBŸ<w Bà¾Àëv¾Â]ÍvU‰åŠUB¿<w B ¾Àëv¾Â]ÍvU‰åVS¾ƒì ¾]Sè%ƒÄ…Àuƒì Sè5ÿÿÿƒÄ…Àt¾‰ðeø[^]ÃU‰åŠUƒêA¸€ú9–À]ÉöU‰å¸€}/žÀ]ÍvU‰åŠUƒêa¸€ú–À]ÉöU‰åŠUB÷<v
-¸€ú u¸]ÉöU‰åŠUƒêA¸€ú–À]ÉöU‰åWVSƒì ÝEÝUè‹]‹}ÇEäSd$øÝ$èoƒÄ…Àtƒì Sè·îÿÿƒÄéPvÙîÝEèÚéßà€äE€üu Æ-C€uï€ë÷EtÆ+CÿEäÝÈ/#ÝEèÚéßà€äE€üuÆ0ÆC¸éû‰öÙèÝEèÝáßà€äE€üu3¾Ýéßà€äE€üuHÝø;#ÝEèØÉÝUèNÝêßà€äE€ütëÝØë)vÝØÝؾÝø;#ÝEèë ÝEèØñÝUèFÝéßàöÄtîÝ؃ì Vè÷ùÿÿƒÄƒøc~ƒïë‰öƒø ~ƒïë‰ö…ö~Oƒì‹EƒÈPÿuWSÿuìÿuèèUEäƒÄ …öu‹Eäë;‰ö]äÆeCƒì jºgfff‰ð÷êÁú‰ðÁø)ƒÂRj
-SVè\ùÿÿ‹UäD‰EäƒÄ eô[^_]ÍvU‰åWVSìŒÝEݝþÿÿ‹]Dž€þÿÿ½¸þÿÿ¹K¸üó«ƒìSÿµ”þÿÿÿµþÿÿ貃ąÀtƒì SèúìÿÿƒÄé‰öÙî݅þÿÿÚéßà€äE€üuÆ-C€µ—þÿÿ€ëv÷Et
-Æ+Cÿ…€þÿÿƒì…˜þÿÿPÿµ”þÿÿÿµþÿÿèþݝpþÿÿ‹…pþÿÿ‹•tþÿÿ‰Æ‰×DžŒþÿÿƒÄ݅˜þÿÿÙèÙÉÝáßàöÄ…ø重vh$@jÿµœþÿÿÿµ˜þÿÿè$݅˜þÿÿÜ5Ð/#ݝ˜þÿÿÙ½´þÿÿ‹´þÿÿƅµþÿÿ Ù­´þÿÿ‰´þÿÿß½¨þÿÿÙ­´þÿÿ‹…¨þÿÿ‰$èûÿÿ‹•Œþÿÿˆ„*¸þÿÿB‰•ŒþÿÿƒÄ݅˜þÿÿÙèÙÉÚéßàöÄ„oÿÿÿ‹•Œþÿÿ•€þÿÿ‰ÑI…¸þÿÿ‰…|þÿÿë‰ö‹•|þÿÿŠˆCI‹•Œþÿÿƒê‰ÐÁèH!Â9Ñ}ޅÉx‹Œþÿÿƒéx
-vÆ0CIyùÆëÝØÝØÆ0Cÿ…€þÿÿÝ<#‰µpþÿÿ‰½tþÿÿ݅pþÿÿÚéßàöÄE…\‹E@9…€þÿÿLÆ.Cÿ…€þÿÿ‹Eƒà‰…ˆþÿÿDž„þÿÿDžŒþÿÿv‰µpþÿÿ‰½tþÿÿ݅pþÿÿÜ<#Ü -Ð/#ݝpþÿÿ‹µpþÿÿ‹½tþÿÿƒì…˜þÿÿPWVèݝpþÿÿ‹•pþÿÿ‹tþÿÿ‰Ö‰Ï݅˜þÿÿÙ½´þÿÿ‹´þÿÿƅµþÿÿ Ù­´þÿÿ‰´þÿÿ۝¤þÿÿÙ­´þÿÿ‹…¤þÿÿƒÄ…Àtƒ½ˆþÿÿu
-Džˆþÿÿƒì PèÓùÿÿˆCÿ…€þÿÿÿ…ŒþÿÿƒÄƒ½ˆþÿÿt‹E9…Œþÿÿ~
-Dž„þÿÿ‹•€þÿÿ9U}
-Dž„þÿÿƒ½„þÿÿ„ýþÿÿKë
-‰öÿ€þÿÿ‰Ã€;0u Cÿ€{ÿ.uêCÆ‹…€þÿÿeô[^_]ÃU‰åWVSƒì‹]‹u ‹}WVSèZƒÄ…Àtƒì Wè¢éÿÿƒÄéñ‰öÙî‰]è‰uìÝEèÝáßàÝـäE€üuÙàëvÝ؉]è‰uìÝEèÝØ/#ÙÉÝáßàÝـäE€üuÝØÆ0ÆG¸雺ÙèÙÉÝáßà€äE€üu/Ýáßà€äE€üu?Ýø;#ëÙɐÜÉÙÉJÝâßà€äE€ütìÝØëvÝÙÝø;#ë‰öØñÙÉBÙÉÝáßàöÄtðÝØÝ؍BƒøvƒìÿuÿuÿuWVSèÔùÿÿë‰öƒìÿuÿuÿuWVSèXûÿÿƒÄ eô[^_]ÐU‰åƒìSÙ}ü›f‹Eüf -? f‰EøÙmø›ÝEÙüÝ]ð›‹Uð‹Mô‹]‰‰KÝEÜeðeì›ÛâÙmü›[ÉÍvU‰åƒì‹E‹U ‰Eø‰Uü‹MUøf‹BfÁè%ÿ=ÿt¸ëk÷Bÿÿuƒ:t…Étƒìh<#QèDçÿÿƒÄ¸ë@‰ö€zy…Étƒìh<#Qè çÿÿƒÄ¸ë‰ö…Étƒìh<#QèçÿÿƒÄ¸ÉÃU‰åƒì¸Û#ƒ=¨`#tÿ¨`#ÉÃU‰å‹E£¨`#]ÍvU‰åƒì‹E‹U ‰Eø‰UüUø¹f‹BfÁè%ÿ=ÿu÷Bÿÿuƒ}øt¹‰ÈÉÉöU‰åSƒì‹E ‹]ÆPè‰âÿÿ‰ØƒÄ‹]üÉÍvU‰åVSƒì ÝEÝUð‹]‹uVSd$øÝ$èvÝ]èƒÄƒ=¬`#ÿtWƒìVSèYÿÿÿƒÄ…ÀuFƒìÿuôÿuðèDÿÿÿƒÄ…Àu1Ùî‰]à‰uäÝEàÚéßà€äE€ô@uƒì jVSÿuôÿuðè8ƒÄ ëvÝEèeø[^]ÉöÝD$ ÝD$Ùø›ßàžzøÝÙͶ¼'U‰åVSƒì0ÝE‹]‹u‹EÝUà‰]è‰uìPÿú‡Èÿ$•ð/#ÝØÇEغ<#ƒøc~º#<#‰UÜÇEðÇEôƒ=¬`#„}ƒì EØP誃ąÀ…uƒ=¬`#…Yƒìjh)<#éëvÝØÇEغ=<#ƒøc~ºB<#‰UÜÇEðÇEôƒ=¬`#„ƒì EØPè>ƒÄ…À… ƒ=¬`#…íƒìjhH<#év‰]à‰uäÝ]èÇEغ\<#ƒøc~ºb<#‰UÜÇEðÇEôƒ=¬`#„žƒì EØPè˃ąÀ…–ƒ=¬`#…zƒìjhi<#é ÝØÇEغ~<#ƒøc~º„<#‰U܃=¬`#uÇEðàÇEôÿÿïGé¸ -¡ `#‹¤`#‰Eð‰Uôé¡ -‰öÝØÇEغ>#ƒøc~º>#‰U܃=¬`#uÇEðàÇEôÿÿïGéh -¡ `#‹¤`#‰Eð‰UôéQ -‰öÝØÇEغ‹<#ƒøc~º<#‰U܃=¬`#uÇEðàÇEôÿÿïGé -¡ `#‹¤`#‰Eð‰Uôé -‰öÝØÇEغ‹<#ƒøc~º<#‰UÜÇEðÇEôéÑ ‰öÝØÇEغ7#ƒøc~º”<#‰U܃=¬`#uÇEðàÇEôÿÿïÇë¡ `#‹¤`#ò€‰Eð‰Uôƒ=¬`#„óƒì EØPè ƒÄ…À…ëƒ=¬`#…σìjh˜<#éaÝØÇEغ7#ƒøc~º”<#‰U܃=¬`#uÇEðàÇEôÿÿïÇë¡ `#‹¤`#ò€‰Eð‰Uôƒ=¬`#„gƒì EØP蔃ąÀ…_ƒ=¬`#…Cƒìjh˜<#éÕ -ÝØÇEغØ6#ƒøc~ºª<#‰U܃=¬`#uÇEðàÇEôÿÿïÇë¡ `#‹¤`#ò€‰Eð‰Uôƒ=¬`#„Û -ƒì EØPèƒÄ…À…Ó -ƒ=¬`#…· -ƒìjh®<#éI -ÝØÇEغØ6#ƒøc~ºª<#‰U܃=¬`#uÇEðàÇEôÿÿïÇë¡ `#‹¤`#ò€‰Eð‰Uôƒ=¬`#„O -ƒì EØPè| -ƒÄ…À…G -ƒ=¬`#…+ -ƒìjh®<#é½ ÝØÇEغÀ<#ƒøc~ºÃ<#‰U܃=¬`#uÇEðàÇEôÿÿïÇë¡ `#‹¤`#ò€‰Eð‰Uôƒ=¬`#„à ƒì EØPèð ƒÄ…À…» ƒ=¬`#…Ÿ ƒìjhÇ<#é1 ÝØÇEغÀ<#ƒøc~ºÃ<#‰U܃=¬`#uÇEðàÇEôÿÿïÇë¡ `#‹¤`#ò€‰Eð‰Uôƒ=¬`#„7 ƒì EØPèd ƒÄ…À…/ ƒ=¬`#… ƒìjhÇ<#é¥ ÝØÇEغÙ<#ƒøc~ºà<#‰U܃=¬`#uÇEðàÇEôÿÿïGéP ¡ `#‹¤`#‰Eð‰Uôé9 ‰öÝØÇEغÙ<#ƒøc~ºà<#‰U܃=¬`#uÇEðàÇEôÿÿïGë¡ `#‹¤`#‰Eð‰Uôƒ=¬`#„a ƒì EØPèŽ ƒÄ…À…Y ƒ=¬`#…= ƒìjhè<#éÏ
-vÝØÇEغü<#ƒøc~º=#‰U܃=¬`#uÇEðàÇEôÿÿïÇë¡ `#‹¤`#ò€‰Eð‰Uôƒ=¬`#„å ƒì EØPè ƒÄ…À…Ë
-ƒ=¬`#…¯
-ƒìjh=#éA
-ÝØÇEغü<#ƒøc~º=#‰U܃=¬`#uÇEðàÇEôÿÿïÇë¡ `#‹¤`#ò€‰Eð‰Uôƒ=¬`#„G
-ƒì EØPèt
-ƒÄ…À…?
-ƒ=¬`#…#
-ƒìjh=#éµ ÝØÇEغ)=#ƒøc~º/=#‰U܃=¬`#uÇEðàÇEôÿÿïÇë¡ `#‹¤`#ò€‰Eð‰Uôƒ=¬`#„Íƒì EØPèè ƒÄ…À…³ ƒ=¬`#…— ƒìjh6=#é) ÝØÇEغ)=#ƒøc~º/=#‰U܃=¬`#uÇEðàÇEôÿÿïÇë¡ `#‹¤`#ò€‰Eð‰Uôƒ=¬`#„/ ƒì EØPè\ ƒÄ…À…' ƒ=¬`#… ƒìjhI=#靐ÝØÇEغ^=#ƒøc~ºb=#‰UÜÇEðÇEôƒ=¬`#… ƒì EØPèòƒÄ…À…½ƒìjhg=#jèÚõÿÿèaõÿÿÇ!ƒÄ降vÇEغ^=#ƒøc~ºb=#‰U܃=¬`#uvÇEðàÇEôÿÿïG‰]ЉuÔÝEÐÜ -È>#Ý]Ћ]ЋuÔÙîÙÉÚéßà€äE€ü…¯ƒìVSèjƒÄ‰]ЉuÔÝEÐÙÉÚéßà€äE€ü@„‡ÇEðàÇEôÿÿïÇét¡ `#‹¤`#‰Eð‰Uô‰]ЉuÔÝEÐÜ -È>#Ý]Ћ]ЋuÔÙîÙÉÚéßà€äE€ü…6ƒìVSèñƒÄ‰]ЉuÔÝEÐÙÉÚéßà€äE€ü@„¡ `#‹¤`#ò€‰Eð‰UôéòvÝØÇEغ^=#ƒøc~ºb=#‰UÜÇEðÇEôéÁ‰öÝØÇEغ^=#ƒøc~ºb=#‰U܃=¬`#uÇEðÇEôë¡ `#‹¤`#ò€‰Eð‰Uôƒ=¬`#„ãƒì EØPèƒÄ…À…Ûƒ=¬`#…¿ƒìjh=#éQÝØÇEغ^=#ƒøc~ºb=#‰U܃=¬`#uÇEðÇEôëÇEðÇEôøƒ=¬`#„`ƒì EØP荃ąÀ…Xƒ=¬`#…<ƒìj h >#éΉöÇEغ™=#ƒøc~ºž=#‰U܃=¬`#u6ÙîÙÉÚéßàöÄEuÇEðàÇEôÿÿïGém‰öÇEðàÇEôÿÿïÇéX‹ - `#‹¤`#‰Mð‰]ôÙîÙÉÚéßàöÄE„4‰È‰Úò€‰Eð‰UôéÝØÇEغ¤=#ƒøc~º©=#‰U܃=¬`#uÇEðÇEôëÇEðÇEôøƒ=¬`#„Lƒì EØPèyƒÄ…À…Dƒ=¬`#…(ƒìjh¯=#麉öÇEغÃ=#ƒøc~ºÈ=#‰U܃=¬`#uÝ]ðëÝØÇEðÇEôøƒ=¬`#„Òƒì EØPèÿƒÄ…À…ʃ=¬`#…®ƒìjhÎ=#é@ÝØÇEغã=#ƒøc~ºí=#‰UÜÇEðÇEôøƒ=¬`#„iƒì EØP薃ąÀ…aƒ=¬`#…Eƒìjhø=#é׍vÝØÇEغ>#ƒøc~º>#‰UÜÇEðÇEôøƒ=¬`#„ýƒì EØPè*ƒÄ…À…õƒ=¬`#…Ùƒìjh>#ékvÝØÇEغ3>#ƒøc~º9>#‰UÜÇEðÇEôøƒ=¬`#„‘ƒì EØP较ąÀ…‰ƒ=¬`#…mƒìjh@>#éÿvÇEغ3>#ƒøc~º9>#‰UÜÜ5Ð>#Ý]ðƒ=¬`#„,ƒì EØPèYƒÄ…À…$ƒ=¬`#…ƒìjhU>#隉öÇEغh>#ƒøc~ºn>#‰U܋ - `#‹¤`#‰Mð‰]ôÙîÙÉÚéßàöÄEtC‰È‰Úò€‰Eð‰Uôë1‰öÇEغh>#ƒøc~ºn>#‰U܍d$øÝ$jjè›Ý]ðƒÄƒ=¬`#…jé|vÝØÇEغu>#ƒøcŽ•ºx>#鋍vÝØÇEغ7#ƒøc~uº”<#ën‰öÝØÇEغ‹>#ƒøc~YºŽ>#ëR‰öÝØÇEغØ6#ƒøc~=ºª<#ë6‰öÝØÇEغ’>#ƒøc~!º•>#ë‰öÝØÇEغÀ<#ƒøc~ºÃ<#‰UÜÇEðÇEôƒ=¬`#„¯ƒì EØPèʃąÀ…•ƒ=¬`#…‹ƒìjÿuÜjè§îÿÿƒÄ jh|>#jè–îÿÿƒÄëfÝØÇEغÚ<#ƒøc~ºá<#‰U܃=¬`#uÇEðàÇEôÿÿïGë¡ `#‹¤`#‰Eð‰Uôƒ=¬`#tƒì EØPè2ƒÄ…À…ýè²íÿÿÇ"éívÝØÇEغÚ<#ƒøc~ºá<#‰U܃=¬`#uÇEðàÇEôÿÿïGë¡ `#‹¤`#‰Eð‰Uôƒ=¬`#„‰ƒì EØP趃Ä…À…ƒ=¬`#uiƒìjhé<#jè•íÿÿƒÄëSÇEغ^=#ƒøc~ºb=#‰UÜÝ]ðƒ=¬`#ÿt ƒ=¬`#uÇEðÇEôð?ë$‰öƒì EØPè@ƒÄ…ÀuèÄìÿÿÇ!ëÝØÝEðeø[^]ËT$â€‹D$%ÿÿÿ ЉD$ÝD$ÉöU‰å¸]ÉöÝD$ÙüÉö¼'U‰åWVSƒì ‹E ‰EðEƒEðƒeðøƒàø‰Eì‹Eð9EìsƒìjUhØ>#hâ>#è˜ ƒÄ‹Eð9Eì„Ä‹E‹…Û„·‹C;C rƒìj`hØ>#hí>#è` ƒÄöCtƒìjahØ>#h ?#èC ƒÄöC tƒìjbhØ>#h`?#è& ƒÄ‹Eì;CvL‹Eð;C sD‰Æ‹}ì;ss‹s;{ v‹{ 9÷wƒìjnhØ>#h?#èæ ƒÄƒì‰ø)ðPVÿu蚃ċ…Û…Iÿÿÿeô[^_]ÐU‰åWVSƒì ‹u ‹E‹}‰ÂUƒÀƒàøƒâø9†ŒÇF‰F‰V ‹E‰F‰~ÇF‹MëF‰ö9óuƒìjlh?#h›?#èX ƒÄ‹F ;Cv‹F;C sƒìjmh?#hÀ?#è1 ƒÄ‰Ù‹…Ût9{±9{u‹S +S‹F +F9Âwœ‰‰1eô[^_]ÃU‰åWVSƒì ‹]‹} …ÛuƒìjLhí?#hõ?#èÙ
-ƒÄ…ÿuƒìjMhí?#hþ?#è¾
-ƒÄƒÇƒçø‹3…ö„rvƒ~uƒ~t‹F;FsƒìjUhí?#h@@#è€
-ƒÄƒ~t‹F;F rƒìjUhí?#h @#è[
-ƒÄ‹F +F9FvƒìjUhí?#hà@#è9
-ƒÄ‹F÷ЅE…åF‰Eð‹^…Û„ԍv÷Ãtƒìj^hí?#h A#èø ƒÄöCtƒìj_hí?#h`A#èÛ ƒÄƒ;t9wƒìj`hí?#h A#è» ƒÄ;^ rƒìjahí?#h@#èŸ ƒÄ9{rGv‹‰‹C)ø‰B‹Eð‰ë
-v‹‹Uð‰9~sƒìjwhí?#h-@#è\ ƒÄ)~‰Øë‰ö‰]ð‹…Û…/ÿÿÿ‹6…ö…‘þÿÿ¸eô[^_]ÃU‰åƒì jÿjÿuÿuÿuÿu ÿuèƒÄ ÉÐU‰åWVSƒì‹]‹EE ‰Eð…ÛuƒìjThÉA#hõ?#èۃă} uƒìjUhÉA#hþ?#较ċ;…ÿ„lƒuƒt‹G;Gsƒìj[hÉA#h@@#舃ăt‹G;G rƒìj[hÉA#h @#ècƒÄ‹G +G9Gvƒìj[hÉA#hà@#èAƒÄ‹G÷ЅE…á‹Uð9WƒÕ‹M9O †ÉG‰Eì‹_…Û„¸v÷ÃtƒìjkhÉA#h A#èèƒÄöCtƒìjlhÉA#h`A#è˃ă;t9wƒìjmhÉA#h A#諃Ä;_ rƒìjnhÉA#h@#菃ċU 9S‚$‰Þ;]s‹u¹;M}ºÓâ‹E1ð…ÂtÖA;M|è‰ð)ØE ;C‡è‹M 1;Eð‡æ‰ðƒàø‰Eè9Øsƒìh‘hÉA#hÔA#èƒÄ9]èvC‹Uè)ډUä÷Âtƒìh–hÉA#hB#èãƒÄ‹‹M艋C+Eä‰A‹Eä‰C‰]ì‰ðƒà‹U Tƒâø‰U ‹Mè9Qv‰ÊU ‹‰‹A+E ‰B‹Eì‰ë
-‹Uè‹‹M쉋E 9Gsƒìh´hÉA#h-@#èkƒÄ‹U )W‰ðë‰ö‰]ì‹…Û…Kþÿÿ‹?…ÿ…•ýÿÿ¸eô[^_]ÃU‰åƒì jÿjjj ÿu hÿuèýÿÿƒÄ ÉÐU‰åWVSƒì‹]Sh2B#èaÌÿÿ‹3ƒÄ…ö„ƒìÿvÿvÿv‹F +FPÿv ÿvhÀB#è1ÌÿÿƒÄ ƒ~uƒ~t‹F;FsƒìjahDB#h@@#袃ă~t‹F;F rƒìjahDB#h @#è}ƒÄ‹F +F9FvƒìjahDB#hà@#è[ƒÄ¿‹^…Û„¾ƒì ÿ3ÿs‰ØCPShC#è“ËÿÿƒÄ ÷ÃtƒìjihDB#h A#èƒÄöCtƒìjjhDB#h@C#èóƒÄƒ{wƒìjkhDB#hKB#èփă;t9wƒìjlhDB#h A#趃Ä;^ rƒìjmhDB#h@#蚃Ä{‹…Û…BÿÿÿƒìWhgB#èàÊÿÿƒÄ9~tƒìjshDB#hzB#è`ƒÄ‹6…ö…cþÿÿƒì h’B#èªÊÿÿƒÄeô[^_]ÍvU‰åWVSƒì ‹u‹] ‰ßƒçø…öuƒìjNhÛ>#hõ?#è ƒÄ…ÛuƒìjOhÛ>#hrC#èñƒÄƒ}uƒìjPhÛ>#hþ?#èԃĉ؃à‹UTƒâø‰U‹ëv‹…ÛuƒìjXhÛ>#h}C#螃ă{uƒ{t‹C;CsƒìjYhÛ>#h@@#èsƒÄƒ{t‹C;C rƒìjYhÛ>#h @#èNƒÄ‹C +C9CvƒìjYhÛ>#hà@#è,ƒÄ;{‚hÿÿÿ;{ ƒ_ÿÿÿ‹EC‹C +C9CvƒìjbhÛ>#hà@#èòƒÄÇEð‹sëv‰uð‹6…öt9þróƒ}ðtm‹Eð@9ørc9øtƒìjnhÛ>#h C#諃ąöt8‹U:9ðr.9ðtƒìjuhÛ>#hàC#肃ċEF‹UðB‹‰ëE‹E‹UðBë9ƒ}ðt
-‹Eð‰8ëv‰{…öt‹U:9ðr‰ÐF‰G‹‰ë ‹E‰G‰7eô[^_]ÃU‰åƒì hÿu ÿuèÒýÿÿƒÄÉÐU‰å‹EÇ]ÉöU‰åWVSƒì ÇEèÇEìÇEð‹E‹0…ö„Zƒ~uƒ~t‹F;Fsƒìj]hD#h@@#蠃ă~t‹F;F rƒìj]hD#h @#è{ƒÄ‹F +F9Fvƒìj]hD#hà@#èYƒÄÿEð¿‹^…Û„¨v÷ÃtƒìjdhD#h A#è$ƒÄöCtƒìjehD#h@C#èƒÄƒ{wƒìjfhD#hKB#èêƒÄƒ;t9wƒìjghD#h A#èʃÄ;^ rƒìjhhD#h@#讃ÄÿEì{‹…Û…[ÿÿÿ9~tƒìjnhD#hzB#肃Ä‹FEè‹6…ö…§þÿÿƒì ÿuìÿuðÿuèÿuh D#èºÆÿÿƒÄ eô[^_]ÍvU‰åVS‹u‹] EƒìPÿuh Û#èÈÿÿƒÄh Û#ÿ5`ã#jSVh D#è5ƒÄ eø[^]ÍvU‰åƒìÿ5Lã#jÿuÿu ÿuh`D#èƒÄ ÉÉöU‰åƒì E Pÿuh ß#èÈÿÿƒÄ jjh¸&#è@!ÿÿƒÄh ß#hE#è†ÅÿÿÇ$MèšÿÿƒÄÉÐU‰åƒìh ß#hàD#è_ÅÿÿƒÄÉÉöU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)л$ä#‰]ð‹´ÃЃùÿtCI‰ÐÁà)Ð;´ÃÐr0»(ä#‰Ï‰ÐÁà)ЋLÃPƒùÿtI‰ÐÁà)ЋUð;´ÂÐsՃÿÿt‰ÐÁà)ЋU‰Åxä#ë
-‰ö‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰Å|ä#ë
-‹E‹U ‰B‹E@‰ÐÁà)ЍÅP‰ˆ(ä#‰¸,ä#ƒÄ[^_]ÍvU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)ÐÁà‹øæ#‰U苀üæ#‰Eìƒùÿtw ‰ÆȉÂÁâ)‹Eè‰Ã;Õøæ#|[‰Eäv1‰ÐÁà)ЍÅ;šøæ#u ‹Eì;‚üæ#|1‰Ï‰ÐÁà)Ћ Åxä#ƒùÿt4 1‰ÐÁà)Ћ]ä;Åøæ#}«ƒÿÿt‰ÐÁà)ЋU‰Åxä#ë‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰Å|ä#ë
-‹E‹U ‰B‹E@‰ÐÁà)ЍÅP‰ˆ(ä#‰¸,ä#ƒÄ[^_]ÍvU‰å‹EÇÿÿÿÿÇ@ÿÿÿÿ]ÍvU‰åWVS‹uv‰ÐÁà)ЍÅP‹˜,ä#¿(ä#‹ 8ƒûÿt[‰ÐÁà)ЉLÇPëv‹E ‰ƒùÿt&I‰ÁÁá)Á»,ä#v‰ÐÁà)ЋDÃP‰DËPë v‹E ‰X[^_]ÐU‰åS‹M‹‰Øƒûÿt=‹@‰ÂÁâ)‹Õxä#‰ƒøÿt@‰ÐÁà)ÐÇÅ|ä#ÿÿÿÿë
-vÇAÿÿÿÿ‰Ø‹$ÉÉöU‰åS‹M‹] ƒ;ÿt)I‰ÐÁà)Ћ‰Åxä#‹@‰ÂÁâ)‰ Õ|ä#됉KI‰ÐÁà)ÐÇÅxä#ÿÿÿÿI‰ÐÁà)ÐÇÅ|ä#ÿÿÿÿ‰ ‹$ÉÃU‰åS‹M‹] ƒ{ÿt,I‰ÐÁà)ЋS‰Å|ä#‹C@‰ÂÁâ)‰ Õxä#ë‰ö‰ I‰ÐÁà)ÐÇÅ|ä#ÿÿÿÿI‰ÐÁà)ÐÇÅxä#ÿÿÿÿ‰K‹$ÉÃU‰å‹E‹]ÉöU‰å‹E‹@]ÐU‰å·Eƒøt ƒø…Àtë-ƒøtƒøtë ¸!E#됸&E#됸*E#됸0E#됸ñ5#]ÐU‰åWVSƒìœúX‰Â‰Uä÷Et$ƒìEèPjèH—ÿÿƒÄ ÿuìÿuèh@E#èaÁÿÿƒÄ÷EtN¾;5Pã#sA¿€ã#vƒì µ‹;¶BP·BPRVh€E#èÁÿÿƒÄ‹;VÿP ƒÄF;5Pã#rÇ÷Etƒì h[E#èñÀÿÿè¬!ÿÿƒÄ‹Uä‰ÐPeô[^_]Éödï",ò",ò",ò",ò",ò"˜ñ",ò"¤ñ"°ñ",ò"¼ñ"¼ñ"¼ñ"¼ñ"¼ñ"¼ñ"¼ñ"¼ñ"¼ñ"¼ñ",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò",ò"pï"„ï"ðð"°ð"0ñ"Œñ"„ï",ò",ò"€ñ",ò"Œñ",ò"hð",ò",ò"ˆð",ò"Ðï",ò",ò"ð"ó"ðô"ðô"ðô"ðô"ðô"hô"ðô"tô"|ô"ðô"Œô"Œô"Œô"Œô"Œô"Œô"Œô"Œô"Œô"Œô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ðô"ó"0ó"ðô"ðô"ðô"\ô"0ó"ðô"ðô"Pô"ðô"\ô"ðô"ðô"ðô"ðô"(ô"ðô"€ó"ðô"ðô"Äó"ü÷"ø"ø"ø"ø"ø"Ìõ"Ìõ"Ìõ"Ìõ"Ìõ"Ìõ"Ìõ"Ìõ"Ìõ"Ìõ"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"üõ"€ö"|÷"|÷"|÷"ð÷"€ö"ø"ø"ä÷"ø"ð÷"ø"ø"ø"ø"ö"ø"ðö"ø"ø" ÷"$@$@d#Ð#<#¬#ü#L #œ #Ì #X
-#ä
-#p #ü #ˆ # -#d -#ì -#x#####¬#Ü#h#ì#|##x#ä#P#¼# #l#°#Ô#ð# #(#D#Ä#<#Ä#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#d#Ð#<#¬#ü#L #œ #Ì #X
-#ä
-#p #ü #ˆ # -#d -#ì -#x#####¬#Ü#h#ì#|##x#ä#P#¼# #l#°#Ô#ð# #(#D#Ä#<#Ä#J: (pid=%d) AAAARRRRGGGHHH!!! killed by someone...
-J (pid=%d) starts and call nanosleep
-J (pid=%d) ending, nanosleep returns errno=%d, t2=%ld.%ld
-main: pthread_kill on j1, then wait until t=2 sec
-SIGNAL HANDLER: pid=%d
-main: creating J1
-Error creating J1
-main: creating J2
-Error creating J2
-main: creating J3
-Error creating J3
-main: waiting 1 sec
-main: pthread_cancel(J2)
-main: ending...
-Error during Keyboard Initialization!!!Ctrl-C pressed!
-KeybPortKeyTasktask_create
-scheduletime %lus %luns * caplasttime %lus %luns * exec=%d TIME = %lu
-The system tick must be less than 55 mSec!Abort detected
-Code : %u
-Too many scheduling levels!!!
-Too many resource levels!!!
-debug info noticewarn err crit alert emerg <%i>[%s] %sPosix task
-Signal number %d...
-with value : %d
-POSIX_ReadyPOSIX_DelayPOSIX_UnknownSlice: %d
-MainPOSIX_register_level
- alloco descrittore %d %d
- lev=%d
-POSIX schedulerPid: %d Name: %20s Prio: %3ld Status: %s
-
-Panic!!! can't create main task...
-dummy PID: %d
-Dummy1Dummy2Dummy3Dummy4Dummy5Dummy6Dummy7Dummy8Dummy9Dummy0DummyaDummybDummycDummydDummyeDummyfDummygDummyhDummyDummy (RR) Posto dummy_create
-
-Panic!!! can't create dummy task...
-Entro in dummy_register_level
-Port des :
-Free port des : %d
-%d %s vt: %d pn: %d
-%d pd: %d vt: %d pn: %d Resources owned by the tasks:
-%-4dPI_register_module
-PI module
-PC priority of the tasks:
-%-4ldPC_register_module
-PC moduleTR %x
-SS:SP %x:%lx
-Stack0 : %x:%lx
-Stack1 : %x:%lx
-Stack2 : %x:%lx
-CS : %x DS : %x
-Descriptor [%x] InfoNo more Descriptors...
-%x (Hex)Base : %lx Lim : %lx Acc : %x Gran %x
-2Coprocessor error#Page fault*General protection fault*Stack exception*Segment not present*Unvalid TSS#INTEL reserved*Double defect1FPU context switch*Unvalid opcode#BOUND limit exceeded#Overflow detected on INTO#Breakpoint trap#NMI detected#Debug fault#Division by 0Exception %d occurred
-ABORT %d !!!LL Time Panic!!!
-time.cError! File:%s Line:%d %sOne-shot timer selected...
-Periodic timer selected...
-Unhandled Exc or Int occured!!!
-32/LINUX CrossCompiled/ELFHalt called1234567890-+12345678901234567890xabcdefABCDEF1234567890.e+-0123456789ABCDEF$@ -Æ@,ú1°<NaN+Inf-Infacosacosfacos: DOMAIN error
-asinasinfasin: DOMAIN error
-atan2atan2fatan2: DOMAIN error
-hypothypotfexpexpfy0fy0: DOMAIN error
-y1fy1: DOMAIN error
-ynynfyn: DOMAIN error
-lgammalgammaflgamma: SING error
-loglogflog: SING error
-log: DOMAIN error
-log10log10flog10: SING error
-log10: DOMAIN error
-powpowfpow(0,0): DOMAIN error
-pow(0,neg): DOMAIN error
-sinhsinhfsqrtsqrtfsqrt: DOMAIN error
-fmodfmodffmod: DOMAIN error
-remainderremainderfremainder: DOMAIN error
-acoshacoshfacosh: DOMAIN error
-atanhatanhfatanh: DOMAIN error
-atanh: SING error
-scalbscalbfj0j0f: TLOSS error
-j1j1fjnjnfneg**non-integral: DOMAIN error
-à?addfree.cmax >= minreg->min < reg->maxnew_max > new_min(reg->min & (sizeof(struct lmm_node) - 1)) == 0(reg->max & (sizeof(struct lmm_node) - 1)) == 0addregio.cr != reg(reg->max <= r->min) || (reg->min >= r->max)alloc.clmm != 0size > 0reg->free >= 0(DWORD)node < reg->maxreg->free >= size(reg->nodes == 0 && reg->free == 0) || (DWORD)reg->nodes >= reg->minreg->nodes == 0 || (DWORD)reg->nodes < reg->maxreg->free <= reg->max - reg->min((DWORD)node & (sizeof(struct lmm_node) - 1)) == 0((DWORD)node->size & (sizeof(struct lmm_node) - 1)) == 0(node->next == 0) || (node->next > node)alloc_ge.canode >= node(split_size & (sizeof(struct lmm_node) - 1)) == 0lmm_dump(lmm=%p)
-dump.cnode->size >= sizeof(*node) free_check=%08lx
-reg->free == free_checklmm_dump done
- region %08lx-%08lx size=%08lx flags=%08lx pri=%d free=%08lx
- node %p-%08lx size=%08lx next=%p
-(node->size & (sizeof(struct lmm_node) - 1)) == 0block != 0reg != 0(DWORD)prevnode + prevnode->size == (DWORD)node(DWORD)node + size == (DWORD)nextnodestats.cLMM=%p: %u bytes in %u regions, %d nodes
-assertion %s failed in %s at line %i (task:%i_%i)
-MAGIC assertion failed in %s at line %i (task:%i_%i): %s
-KERNEL PANIC (sys_panic_stub): %s
-KERNEL PANIC (sys_panic): %s
-FreeExeSleepWaiting on joinTime (EXACT) : %lus %luns
-< Memory Dump >
-< Level %d : %s Code: %d Version: %d >
-8Œÿÿ’ÏÿÿšÏÿ¨U#ÿÀ`#ÿÿÿÿÿÿÿÿÿÿÿÿ1234567890!@#$%^&*()-_=+[{]};:'"`~/?,<.>\|   - -1234567890.+*/-+*-aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 1234567890!"œ$%&/()='?^Š‚+*•‡…ø\|<_,:.;—õ   - -1234567890.+*/-+*-aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ[]@#È]#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ5#†5#5#x5#q5#j5#c5#\5#¤"¬"¬"³:#¦:#˜:#‡:#l:#V:#F:#2:##:#:#:#ñ9#à9#Æ9#º9#:#§9#þþAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAšç;#ðÿÿÿÿGCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)01.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.text.rodata.data.sbss.bss.comment.note"€Ð+!à+#`,È )¨U#(F /°`#@Q5À`#@Qè :@Q‚CÂb|>iI
\ No newline at end of file
/start/pse51/ptest4
Property changes:
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: start/pse51/ptest3.c
===================================================================
--- start/pse51/ptest3.c (revision 1087)
+++ start/pse51/ptest3.c (nonexistent)
@@ -1,229 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: ptest3.c,v 1.1.1.1 2002-09-02 09:37:47 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:47 $
- ------------
-
- Posix test 3:
-
- timers...
- it creates two periodic timers that queues signals, a periodic timer
- that create tasks and an one-shot timer.
-
- non standard function used:
- cprintf
- sys_gettime
- keyboard stuffs
- sys_end
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <sys/types.h>
-#include <pthread.h>
-#include <time.h>
-
-#include <kernel/kern.h>
-#include <drivers/keyb.h>
-
-int count25 = 0, count26 = 0;
-
-void signal_handler(int signo, siginfo_t *info, void *extra)
-{
- switch (signo) {
- case 25:
- count25++;
- break;
- case 26:
- count26++;
- break;
- }
-
- cprintf("Signal %d code=%s value=%d task=%d count25=%d count26=%d time=%ldusec\n",
- info->si_signo,
- (info->si_code == SI_TIMER) ? "Timer" : "Other",
- info->si_value.sival_int,
- info->si_task,
- count25,
- count26,
- sys_gettime(NULL));
-}
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-void task_timer(union sigval value)
-{
- cprintf("task_timer: value = %d, time = %ldusec\n",
- value.sival_int, sys_gettime(NULL));
-}
-
-int main(int argc, char **argv)
-{
- int err;
- timer_t timer1, timer2, timer3;
- struct itimerspec timeout1, timeout2, timeout3, nulltimeout;
- struct sigaction sig_act;
- struct sigevent ev25, ev26, evtask;
- pthread_attr_t task_attr;
- struct sched_param task_param;
-
- KEY_EVT emerg;
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
- sig_act.sa_sigaction = (void *) signal_handler;
- sig_act.sa_flags = SA_SIGINFO;
- sigemptyset(&sig_act.sa_mask);
-
- sigaction(25, &sig_act, NULL);
- sigaction(26, &sig_act, NULL);
-
- // set ev25, ev26, evtask
- ev25.sigev_notify = SIGEV_SIGNAL;
- ev25.sigev_signo = 25;
- ev25.sigev_value.sival_int = 555;
-
- ev26.sigev_notify = SIGEV_SIGNAL;
- ev26.sigev_signo = 26;
- ev26.sigev_value.sival_int = 666;
-
- evtask.sigev_notify = SIGEV_THREAD;
- evtask.sigev_value.sival_int = 777;
- evtask.sigev_notify_function = task_timer;
- evtask.sigev_notify_attributes = &task_attr;
-
- pthread_attr_init(&task_attr);
- pthread_attr_setdetachstate(&task_attr, PTHREAD_CREATE_DETACHED);
- pthread_attr_setschedpolicy(&task_attr, SCHED_FIFO);
- task_param.sched_priority = 10;
- pthread_attr_setschedparam(&task_attr, &task_param);
-
- // set timeout1, timeout2, nulltimeout
- timeout1.it_interval.tv_sec = 0;
- timeout1.it_interval.tv_nsec = 500000000;
- timeout1.it_value.tv_sec = 3;
- timeout1.it_value.tv_nsec = 0;
-
- timeout2.it_interval.tv_sec = 0;
- timeout2.it_interval.tv_nsec = 200000000;
- timeout2.it_value.tv_sec = 7;
- timeout2.it_value.tv_nsec = 0;
-
- timeout3.it_interval.tv_sec = 0;
- timeout3.it_interval.tv_nsec = 300000000;
- timeout3.it_value.tv_sec = 5;
- timeout3.it_value.tv_nsec = 0;
-
- NULL_TIMESPEC(&nulltimeout.it_value);
- NULL_TIMESPEC(&nulltimeout.it_interval);
-
- // create the timers
- err = timer_create(CLOCK_REALTIME, &ev25, &timer1);
- if (err == -1) { cprintf("main: unable to create timer 1\n"); }
-
- err = timer_create(CLOCK_REALTIME, &ev26, &timer2);
- if (err == -1) { cprintf("main: unable to create timer 2\n"); }
-
- err = timer_create(CLOCK_REALTIME, &evtask, &timer3);
- if (err == -1) { cprintf("main: unable to create timer 3\n"); }
-
- // arm the timers
- err = timer_settime(timer1, TIMER_ABSTIME, &timeout1, NULL);
- if (err == -1) { cprintf("main: unable to set timer 1\n"); }
-
- err = timer_settime(timer2, 0, &timeout2, NULL);
- if (err == -1) { cprintf("main: unable to set timer 2\n"); }
-
- err = timer_settime(timer3, TIMER_ABSTIME, &timeout3, NULL);
- if (err == -1) { cprintf("main: unable to set timer 3\n"); }
-
- cprintf("main: waiting signals...\n");
- while (sys_gettime(NULL) < 8500000) {
- //kern_deliver_pending_signals();
- }
-
- cprintf("main: disarm the timer2\n");
- err = timer_settime(timer2, 0, &nulltimeout, &timeout2);
- if (err == -1) { cprintf("main: unable to disarm timer 2\n"); }
-
- cprintf("main: timer2 disarmed, itvalue=%ld.%ld\n",
- timeout2.it_value.tv_sec,timeout2.it_value.tv_nsec/1000);
-
- while (sys_gettime(NULL) < 10000000) {
- //kern_deliver_pending_signals();
- }
-
- cprintf("main: disarm the timer1\n");
- err = timer_settime(timer1, TIMER_ABSTIME, &nulltimeout, &timeout1);
- if (err == -1) { cprintf("main: unable to disarm timer 1\n"); }
-
- cprintf("main: timer1 disarmed, itvalue=%ld.%ld\n",
- timeout1.it_value.tv_sec,timeout1.it_value.tv_nsec/1000);
-
- while (sys_gettime(NULL) < 12000000) {
- //kern_deliver_pending_signals();
- }
-
- cprintf("main: arm timer1\n");
- timeout1.it_interval.tv_sec = 0;
- timeout1.it_interval.tv_nsec = 0;
- timeout1.it_value.tv_sec = 13;
- timeout1.it_value.tv_nsec = 0;
- err = timer_settime(timer1, TIMER_ABSTIME, &timeout1, NULL);
- if (err == -1) { cprintf("main: unable to arm timer 1\n"); }
-
- while (sys_gettime(NULL) < 14000000) {
- //kern_deliver_pending_signals();
- }
-
-
-
- cprintf("main: ending...\n");
-
- return 0;
-}
Index: start/pse51/ptest5
===================================================================
--- start/pse51/ptest5 (revision 1087)
+++ start/pse51/ptest5 (nonexistent)
@@ -1,403 +0,0 @@
-ELF"4àa4 ( €""H>H> È>HN#HN# Pî 덶°­üORäe‹Ká€uU¿€ Ç–eÆG1GeÆGGeÆG2GeÆG¸Tå"fe£hN#Áèfe£nN#HV#¿€ Ç’eÆG0GeÆGf¸0ŽØŽÀŽÐŽàŽè¼`#Ç0·%`a#Ç4·%`#£TV#‰XV#HV#êµ"8NV#üèbÑê U‰å‹Eê ‰öU‰åƒìÿ5ìÛ#hð+#èåƒÄÉÐU‰åƒìè};ÉÍvU‰åSƒì,ÆEÙxÆEÚ-ÆEØhô"ƒì‹EØf‰$ÆD$-è¼ ÇEôØ"ÇEð]èEì‰$è0jƒÄ jSjèUÇ$ ,#è‹äÇ$èdƒÄƒì jèN;ƒÄ=„vìƒì jèöcƒÄPh`,#èPäèÃmÇ$,#è?七Ä‹]üÉÉöU‰åƒìj ÿujh'èMè‰è‡¬è¶²è1™ƒÄ jjjèÿLèîv¸èƒÄÉÃU‰åWVSƒìX‹]}¨¾\V#ü¹ó¥E¸‰E¨fÇE¸ÇE¼ÇEÀfÇEÄÇEÐÇEÔÇEÜÇEà‰]ÈÇEØÇEÌjè8L‰EÐÇEÜÇEàƒMÌ
-è֜E¨‰$ècƒÄ…Àyƒì h ,#è»ãƒÄƒì SèoE¸ƒÄeô[^_]ÍvU‰åƒìŠU€=lW#„¶€ú*t€úªt
-€ú6t€ú¶uÆlW#¸é›„Òy,ÆlW#€ú¸uÆxW#ÆnW#ëՀúuÐÆxW#ëljöÆlW#€ú8u€ -xW#ÆnW#멀úu € -xW#뛉ö€ú5uf¾‚#·Àé)v€ú…•f¾ü#·Àé -v€úàuÆlW#éTÿÿÿv€ú*t€ú6u2ÆmW#€ú*u€ -xW#é/ÿÿÿ‰ö€ú6…$ÿÿÿ€ -xW# éÿÿÿv€úªt€ú¶u"ÆmW#€úªt €ú¶…öþÿÿÆxW#éêþÿÿ€úFu€=qW#•qW#ë.v€ú:u€=oW#•oW#ëv€úEu;€=pW#•pW#ƒì¶qW#P¶oW#P¶pW#Pèõ¸ƒÄé€úu€ -xW#éhþÿÿv€ú8u€ -xW#éTþÿÿv€út€ú¸uÆxW#é;þÿÿ‰ö¸„҈рúRt2€úOt-€úSt(€úPt#€úQt€úKt€úLt€úMt€úGt
-€úHt€úIu€=pW#uT€=mW#uK·Â -ÿë~€=oW#t/Bð< vBâ<vBÔ<w€=mW#t¶Âf¾€à#·ÀëG€=mW#t¶Âf¾€€‚#·Àë-v€=nW#t¶Âf¾€ ƒ#·Àëv¶Âf¾€à#·ÀÉÃU‰åWVSƒì,}؃ìjE×PèòƒÄ…À„¡ƒì ¶E×Pèöüÿÿ‰ÂƒÄf…Ò„†÷Âÿt  xW#ƒÈ@ë‰ö xW#ˆE؈UيE׈EÚ±»;؁#}8¾`#v݊D2:EÚuŠ2:EØuƒì Wÿ’d#±ƒÄC;؁#|ЄÉuƒìjW¿¢ƒ#Pèý¡ƒÄè-é<ÿÿÿU‰å‹E£hW#Šˆâ#ŠPˆã#ŠPˆä#ŠPˆå#ŠPˆæ#ŠPˆç#ŠPˆè#ŠPˆé#ŠPˆê#ŠP ˆë#ŠP
-ˆ‚‚#ŠP ˆƒ‚#ŠP ˆ„‚#ŠP -ˆ…‚#ŠPˆ†‚#ŠPˆ‡‚#ŠPˆˆ‚#ŠPˆ‰‚#ŠPˆŠ‚#ŠPˆ‹‚#ŠPˆì#ŠPˆŒ‚#ŠPˆí#ŠPˆ‚#ŠPˆú#ŠPˆš‚#ŠPˆû#ŠPˆ›‚#ŠPˆ‚#ŠPˆ§‚#ŠPˆ‚#ŠPˆ¨‚#ŠP ˆ ‚#ŠP!ˆ©‚#ŠP"ˆ‚#ŠP#ˆµ‚#ŠP$ˆ‚#ŠP%ˆ³‚#ŠP&ˆ‚#ŠP'ˆ´‚#ŠP(ˆ ‚#ŠP)ˆ«‚#ŠP*ˆ‚#ŠP+ˆ¹‚#ŠP,ˆî#ŠP-ˆŽ‚#ŠP.ˆï#ŠÖˆ‚#ŠP0ˆá#ŠP1ˆ‚#ŠP2ˆü#ŠP3ˆœ‚#ŠP4ˆä‚#ŠP5ˆς#ŠP6ˆЂ#ŠP7ˆт#ŠP8ˆ˂#ŠP9ˆ̂#ŠP:ˆ͂#ŠP;ˆǂ#ŠP<ˆȂ#ŠP=ˆɂ#ŠP>ˆ҂#ŠP?ˆӂ#ŠP@ˆ.‚#ŠPAˆ‚#ŠPBˆ‚#ŠPCˆ*‚#ŠPDˆ΂#ŠPEˆ·‚#ŠPFˆʂ#ŠPGˆþ#ŠPHˆž‚#ŠPIˆ‚#ŠPJˆ°‚#ŠPKˆ‚#ŠPLˆ®‚#ŠPMˆ‚#ŠPNˆ ‚#ŠPOˆò#ŠPPˆ’‚#ŠPQˆ‚#ŠPRˆ¡‚#ŠPSˆ‚#ŠPTˆ¢‚#ŠPUˆ‚#ŠPVˆ£‚#ŠPWˆ÷#ŠPXˆ—‚#ŠPYˆ‚#ŠPZˆ¤‚#ŠP[ˆ‚#ŠPRˆ¥‚#ŠP]ˆ‚#ŠP^ˆ¦‚#ŠP_ˆ‚#ŠP`ˆ²‚#ŠPaˆ‚#ŠPbˆ±‚#ŠPcˆø#ŠPdˆ˜‚#ŠPeˆù#ŠPfˆ™‚#ŠPgˆð#ŠPhˆ‚#ŠPiˆó#ŠPjˆ“‚#ŠPkˆÿ#ŠPlˆŸ‚#ŠPmˆô#ŠPnˆ”‚#ŠPoˆö#ŠPpˆ–‚#ŠPqˆ‚#ŠPrˆ¯‚#ŠPsˆñ#ŠPtˆ‘‚#ŠPuˆ -‚#ŠPvˆ­‚#ŠPwˆõ#ŠPxˆ•‚#ŠPyˆ ‚#ŠPzˆ¬‚#ŠP{ˆ:ƒ#ŠP|ˆ;ƒ#ŠP}ˆGƒ#Š@~¢Hƒ#]ÍvU‰åWVSƒì\‹]}ؾ€W#ü¹󥿸ƒ=tW#…Qº¾à#¹€‚#‰ö·ÂÆ0ÆBfúví…Ûu]؃{ÿuÇChV#ƒì ÿsèûÿÿÇ$jjjhÙ,#èϔf£¢ƒ#ƒÄ fƒøÿu ¸þÿÿÿéÞ‰öjjjhÙ,#è0˜f£¤ƒ#ƒÄfƒøÿuƒì ¿¢ƒ#P蕛¸ýÿÿÿ頍vÇ؁#ƒ{ÿuÇC "ƒ{tIÆE™cÆEš.ÆE˜ƒìÿsƒì‹E˜f‰$ÆD$.èÅÆE˜ƒÄÿsƒì‹E˜f‰$ŠEšˆD$襃ă;ÿuQfÇE¨ÇE¬ÇE°fÇE´ÇE¸ÇEÐÇEÈÐÇEÄ ÇEÀ¨aÇE¼
-ÇE̍E¨ë‹ƒì jjPh¨"hâ,#èÿ‰ÃƒÄ ‰¨ƒ#ƒøÿu'ƒì ¿¢ƒ#P蓚¿¤ƒ#‰$脚‰Ø钐ƒ=|W#uWƒì ÿ5¨ƒ#艉ǃąÿt4ƒì ¿¢ƒ#PèLš¿¤ƒ#‰$è=šƒÄÿ5¨ƒ#èg5¸üÿÿÿë=Ç|W#ëèƒì¶qW#P¶oW#P¶pW#PèûÇtW#‰øƒÄeô[^_]ÃU‰åƒì¶EPEèP¿¤ƒ#Pè0œƒÄ„Àt÷Eè@u¶Eéë‰ö¸ÉÐU‰åƒì ¶E Pÿu¿¤ƒ#Pèõ›·ÀƒÄÉÐU‰åSƒ=؁#0‹ -؁#Í»`#‹Ef‰ŠE
-ˆD‹E ‰‚d#A‰ -؁#‹$ÉÉöU‰åƒìèÉÍvU‰åƒìè±ÉÍvU‰åƒì¸ÿÿÿÿƒ=tW#t9蓃ì ÿ5¨ƒ#è-4¿¢ƒ#‰$è昿¤ƒ#‰$èט¸ƒÄÉÐU‰åƒìjèoÔÇ$è+ÔÇ$È,#èóÓè²-ƒÄÉÐU‰åWVSƒìŠEˆEó¿1¾d»`‰ö¹v‰òì©t"‰ÈA=þÿÿvì¸ÿÿÿÿ…Àu‰ÚŠEóî¸ë‰ö¸ë搸ÿÿÿÿÇEì¹d…Àt¸ÿÿÿÿët¸ë‰Êì©uî‹EìÿEì=þÿÿvé¸ÿÿÿÿ…Àu‰Úì¶Àë¸ÿÿÿÿƒøÿu
-¸þÿÿÿë3v=úu ¸ë"‰ö=þt ¸ýÿÿÿë‰ö‰øO…À9ÿÿÿ¸üÿÿÿƒÄ[^_]ÃU‰åVSƒìŠEˆE÷³Ô¾¹d‰ö‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë -¸ë搸ÿÿÿÿ…Àt¸ÿÿÿÿëL¸ë&»¹d‰ö‰Êì©tâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àuº`ŠE÷î¸ëv¸ÿÿÿÿ…Àt¸ÿÿÿÿëj¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àuºdì© tº`ì¶Ðëvºÿÿÿÿ‰Ð…Òx¸úú”ÀDþƒÄ[^]ÃU‰åWVSƒì »¾`‰ØK…À~^ƒì hÿè¼ýÿÿ‰ÂƒÄ…Òu{¿¹d‰Êì©u‰øG=þÿÿvì¸ÿÿÿÿ…Àu‰òì¶Ðëv¸ëꐺÿÿÿÿúªu›¸üÿÿÿúª…ƃì hõèMýÿÿ‰ÂƒÄ…Òt(¸ûÿÿÿ馉ö¸ýÿÿÿ隉ö¸ë.¸ëZ³`¾¹d‰Êì©tډðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî³e¾¹dv‰Êì©t®‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØîƒì hôèªüÿÿ‰ÂƒÄ¸…Ò•ÀHƒàƒèeô[^_]ÃU‰åWVSƒì ¾»d¹`‰Úì©t -‰Êì‰ðF=þÿvé³­¾¹d‰Êì©„‚‰ðF=þÿÿvè¸ÿÿÿÿ…ÀuºdˆØî¾»d¹`‰Úì©t -‰Êì‰ðF=þÿv鳪¾¹d‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ë搸놐¸ÿÿÿÿ…Àt¸÷ÿÿÿéݐ¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àu º`ì¶Àë¸ÿÿÿÿƒøUt¸ÿÿÿÿ錸ë&³«¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸öÿÿÿé9¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àu º`ì¶Àë¸ÿÿÿÿ…Àt¸þÿÿÿé鐸ë&³®¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…À…<èzüÿÿ…À…Žƒì hóèIúÿÿƒÄ…Àt
-¸ùÿÿÿépƒì jè.úÿÿƒÄ…Àt¸øÿÿÿéU¸ë.ÆŒW#³©¾¹d‰Êì©tډðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸ôÿÿÿéù¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àu º`ì¶Àë¸ÿÿÿÿ…Àt¸óÿÿÿ驐¸ë&³¨¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸õÿÿÿéU¸ë&³Ó¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸ðÿÿÿ鐸ë&³Z¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî¸ë¸ÿÿÿÿ…Àt¸ïÿÿÿ魐ƌW#ëBv¸ë^¹þÿ¾d»`‰òì¶ø÷Çt‰Úì¶À÷Ç tƒøZt»IƒùÿuÙ³§¾¹d‰Êì©tª‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àté»þÿÿ‰ö¸ë:€=ŒW#„þÆŒW#³¨¾¹d‰Êì©tΉðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸îÿÿÿ鱐¸ëvƒì hóèWøÿÿ‰ÃÇ$dèIøÿÿÃÇ$èè;øÿÿÃÇ$è-øÿÿÃÇ$çèøÿÿþ§ƒÄ¿¹dv‰Êì©t’‰øG=þÿÿvì¸ÿÿÿÿ…Àuºd‰ðî¸ë¸ÿÿÿÿ…Àt¸íÿÿÿë…ÛuÆŒW#¸eô[^_]ÃU‰åVS¡ W#…Àt¡ W#H£ W#¸é²¸ë6ƒ=˜W#uKŠœW#¾¹dv‰Êì©t҉ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØîÿ˜W#뤍v¸ë:ƒ=˜W#uGǘW#³ô¾¹d‰Êì©tΉðF=þÿÿvì¸ÿÿÿÿ…À…Xÿÿÿº`ˆØîéKÿÿÿ‰ö¸[^]ÍvU‰åWVSƒì ¡¤W#@£¤W#¾õ³Ô¿¹dv‰Êì©t"‰øG=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ë搸ë.¸ÿÿÿÿ…Àu0»¹d‰Êì©tډØC=þÿÿvì¸ÿÿÿÿ…Àuº`‰ðîœúX‰Çƒì hõè5õÿÿ‰ÃƒÄ…Ût¸ûÿÿÿéù‰ö¸ë1¾§ÇEð¹dv‰Êì©tڋEðÿEð=þÿÿvé¸ÿÿÿÿ…Àu ºd‰ðî¸ë¸ë=¸ëq¸ÿÿÿÿþ`ÇEð¹d‰Êì©t΋EðÿEð=þÿÿvé¸ÿÿÿÿ…Àuºd‰ðî¾eÇEð¹dv‰Êì©tš‹EðÿEð=þÿÿvé¸ÿÿÿÿ…Àuº`‰ðîƒì hôè;ôÿÿÃĉøPÆW#‰Øeô[^_]ÐU‰åWVSƒì ¸ÿÿÿÿ€=ŒW#„ºœúX‰Æƒì hõèóóÿÿƒÄ…Àt(¸ûÿÿÿé—‰ö¸ë:¸ëf¸é“‰ö³`¿¹d‰Êì©tΉøG=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî³G¿¹dv‰Êì©t¢‰øG=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØ¿¹dv‰Êì©„rÿÿÿ‰øG=þÿÿvè¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt ¸îÿÿÿ鐃ì hôèÿòÿÿƒÄ…Àt¸Ûÿÿÿ飉ö¸ë:‰ðP¡¤W#@£¤W#¾ô³Ô¿¹d‰Êì©tΉøG=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë -¸ë.¸ÿÿÿÿ…Àu0»¹d‰Êì©tډØC=þÿÿvì¸ÿÿÿÿ…Àuº`‰ðîƍW#¸eô[^_]ÍvU‰åƒìÇĄ#ÇÀ„#ƒ=”W#t!úè‹õÿÿ£W#Ç”W#û…Àtúèôÿÿû¡W#…ÀuƒìÿuhŒ "jèQ¸ƒÄÉÍvU‰åVS¡ W#@£ W#³õ¾¹d‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî¸ë -¸ë搸ÿÿÿÿ[^]ÍvU‰åVS¡ W#@£ W#³ô¾¹d‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî¸ë -¸ë搸ÿÿÿÿ[^]ÍvU‰åƒì‹MœúX‰Â¡À„#@%ÿ£À„#Š€Àƒ#ˆ‰ÐP€9úu è(úÿÿë‰ö¸ÉÐU‰åƒìƒ=¬W#t(Ç$…#Ç …#Ç(…#ǬW#‹E£¨W#ƒ=”W#t!úèôÿÿ£W#Ç”W#û…Àtúèòÿÿû¡W#…Àu.¸ìÿÿÿ€=ŒW#t ƒìjÿhÈ "j èOƍW#¸ƒÄÉÉöU‰åS‹MœúX‰Ã¡ …#@ƒà?£ …#ºà„#ŠˆA¡ …#@ƒà?£ …#Šˆ¡ …#@ƒà?£ …#ŠˆA‰ØP¸‹$ÉÉöU‰åƒì€=W#tèäùÿÿƒì j èŽOƍW#¸ƒÄÉÐU‰åƒìƒ=”W#t!úè óÿÿ£W#Ç”W#û…Àtúè™ñÿÿû¡W#…Àt¸ë¶ŒW#ÉÍvU‰åVSŠEŠU€} t ƒ -œW#ë ‰öƒ%œW#„Àt ƒ -œW#ëƒ%œW#„Òtƒ -œW#ë¸ë6¸ëbƒ%œW#³õ¾¹d‰Êì©t҉ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî³í¾¹dv‰Êì©t¦‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØîÿ˜W#[^]ÐU‰åSƒìœúX‰Ã€=W#tè–øÿÿè‘ðÿÿƒì hóèhîÿÿƒÄ…Àuƒì jèWîÿÿƒÄ…Àu‰ØP‹]üÉÍvU‰åº`ì¶ÈœúX‰Â¡À„#;Ą#t¡Ä„#ˆˆÀƒ#@%ÿ£Ä„#‰ÐP]ÉöU‰åƒìº`ì¶Ðƒ=(…#u €úúu¡¤W#H£¤W#郍v÷ÂÀuxÿ(…#œúX‰Á¡ …#;$…#t¡$…#ˆà„#@ƒà?£$…#ë"‰ö¡$…#+(…#ƒÀAƒà?£$…#Ç(…#‰ÈPƒ=(…#uÇ(…#ƒì ÿ5¨W#èƒÄÉÉöU‰åSƒì}™w‹UÑâU‰ÐÁà)Ðfƒ<ÅèÜ#uèùÝNj¸ÿÿÿÿ鏐ƒ=ÀÛ#tcœúX‰Ã‹UÑâU‰ÐÁà)ЍÅ0ö€ÁÜ# t ÿ€ÄÜ#ë-v‹EÑàE‰ÂÁâ)‹ÕÄÜ#ƒì‹• Ü#ÿuRÿP@ƒÄ‰ØPéèƒ¡…ÀtgœúX‰Ã‹UÑâU‰ÐÁà)ЍÅ0ö€ÁÜ# t ÿ€ÄÜ#ë2v‹EÑàE‰ÂÁâ)‹ÕÄÜ#ƒì‹• Ü#ÿuRÿP@蔃ĉØPé­úèJ²‹ìÛ#R‰ÑÁá)Ñ»ÀÜ#f‰DË‹UÑâU‰ÐÁà)ЍÅ0öD t ÿ€ÄÜ#ë?vƒìU‰ÐPjÿèW#‹MI‰ÐÁà)ЋÅÄÜ#ƒÄ‹• Ü#QRÿP@è/ƒÄ¡ìÛ#@‰ÂÁâ)ƒì ¿ÕÈÜ#P踱èƒÄû¸‹]üÉÐU‰åWVSƒì ‹]f…Ûuè>Ünj¸ÿÿÿÿé"‰öƒ=ÀÛ#„“œúX‰ÇÇEð}ð™s¾ÀÜ#‹UðÑâUð‰ÐÁà)ÐÁàf9\,uHƒÀ0öD0 t ÿ€ÄÜ#ë6ƒìEðPjÿèW#‹MðI‰ÐÁà)ЋÅÄÜ#ƒÄ‹• Ü#QRÿP@ƒÄÿEð}ð™~“‰øPé}‰ö蓟…À„›œúX‰ÇÇEð}ð™w¾ÀÜ#‹Eð@‰ÂÁâ)Õf9\,uJƒÀ0öD0 t ÿ€ÄÜ#ë8vƒìEðPjÿèW#‹MðI‰ÐÁà)ЋÅÄÜ#ƒÄ‹• Ü#QRÿP@ƒÄÿEð}ð™~èj‰øPéԐúè"°‹ìÛ#R‰ÑÁá)Ñf‰ÍÈÜ#ÇEð}ð™w¾ÀÜ#‹Eð@‰ÂÁâ)Õf9\,uJƒÀ0öD0 t ÿ€ÄÜ#ë8v‹MðI‰ÐÁà)ЋÅÄÜ#ƒì‹• Ü#QRÿP@ƒÄEðPjÿèW#ƒÄÿEð}ð™~èÞ ¡ìÛ#@‰ÂÁâ)ƒì ¿ÕÈÜ#Pèj¯èÁƒÄû¸eô[^_]ÃU‰åSƒìúè;¯‹ìÛ#R‰ÑÁá)Ñf‰ÍÈÜ#ƒìh¤Ü#jèl–ƒÄUð¡¨Ü#;øÛ#|¡¤Ü#+ôÛ#‰Eð¡¨Ü#+øÛ#ë!‰ö¡¤Ü#+ôÛ#H‰Eð¡¨Ü#+øÛ#ʚ;‰B‹Mð ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ôºÓMb‰Ø÷êÁú‰ØÁø)ÂыìÛ#R‰ÐÁà)Ð) Å Ý#ƒì Qè. ƒÄƒ=üÛ#ÿtƒì ÿ5üÛ#ÿÈÛ#ÇüÛ#ÿÿÿÿƒÄ‹ -ìÛ#I‰ÐÁà)ЋÅÄÜ#ƒì‹… Ü#QPÿRLè{ ƒÄhìÛ#jÿèW#ÇìÛ#ÿÿÿÿÇÜ#ÿÿÿÿèV ¡ìÛ#@‰ÂÁâ)¿ÕÈÜ#‰$èã­è:ƒÄû‹]üÉÐU‰åƒìhL'"è( ƒÄÉÍvU‰åƒìjè ƒÄÉÉöU‰åƒìƒ=´W#u(èè
-ƒì ¡ìÛ#@‰ÂÁâ)¿ÕÈÜ#Pèt­ƒÄÉÍvU‰åWVSƒìhê,#è]$ƒÄ»ÀÜ#ëv‹Eð@‰ÐÁà)ЁLÃ0€ƒì hdÜ#èÊ+‰EðƒÄƒøÿ„“@‰ÐÁà)ÐöDÃ1@u¾‹UðR‰ÃÁã)ÃÁã¾ÀÜ#¡°W#‰3@£°W#‹E ‰DƒìjÿuƒÔÜ#Pè ¾ÆD'ƒÃ fÇD3‹Mf‹%ÿf‰D3
-f‹A f‰D3 ƒÄ‰Ø‰ñº‹]ƒ{tf‹Sf‰T‹UðR‰ÁÁá)ÁÁáY0‹U‹B -‰ƒÀÜ#¿ÄÜ#Ç;¾ÈÜ#¡ìÛ#@‰ÂÁâ)‹DÖ0‰3ºÌÜ#ǍAP‹]ð‰˜ÀÜ#Ç8ÇÿÿÿÿÇ0ÿÿÿÿǁ Ý#°Ç8Ç0ǁÁÀǁÀÜ#Ç9ºۍƒ€ 
-Ç…$Ý#Bƒúvì‹Eð@‰ÐÁà)ÐÁàÀǂÈÜ#ÿÿÿÿǂÌÜ#Ý#‰Ý#º‹Mðɍ€ ‰ö
-Ç…Ý#Bƒú~ì»ëC;ðÛ#sƒì‹ Ü#ÿuSÿPƒÄ…Àxß;ðÛ#u7‹]ð[‰ÂÁâ)ÂfÇÕèÜ#ƒìhdÜ#SèÚ)è¡ÕDŽ鄉ö‹Eð@‰ÐÁà)Ѝ4ʼnžÄÜ#ƒì‹ Ü#ÿuÿuðSÿP,ƒÄ…ÀyWfdžèÜ#ƒìhdÜ#ÿuðèz)èAÕDžë'è3Õǃ釃ì ÿuðè9èÕdž¸ÿÿÿÿƒÄëjƒE‹U‹zü…ÿtY‰ö¾ëF;5äÛ#s0ƒìµ‹ƒ€Ü#WVÿP ƒÄ…Àxۃ싃€Ü#WÿuðVÿP$ƒÄ;5äÛ#t‡ƒE‹M‹yü…ÿu©‹Eðeô[^_]ÉöU‰åƒìEPÿuÿu ÿuè`üÿÿƒÄÉÍvU‰åWVSƒì ‹} ƒt6‹EÑàE‰ÂÁâ)‹G‰ÕÌÜ#‰Æ‹UÑâU‰ÐÁà)Ѓ ÅðÜ#@ën‰öƒì ‹UÑâU‰ÐÁà)зÅîÜ#Pè@‹UÑâU‰ÑÁá)Ñ»ÌÜ#‰ˉƋEÑàE‰ÂÁâ)ƒÄƒ<Óuƒì ÿuèìèËÓLjëtv‹EÑàE‰ÂÁâ)»ÀÜ#·DÓ.ƃì ·GPjÿwVh8."è-‰ÁƒÄ f…Éu?ƒì‹UÑâU‰ÐÁà)зDÃ.PVèƒÄÿuèvèUÓlj¸ÿÿÿÿƒÄëN‹EÑàE‰ÂÁâ)Âf‰ ÕÈÜ#ƒìU‰ÐPjÿèW#ƒÄöGu ÿàÛ#ëvöGuÿ Ü#¸eô[^_]ÍvU‰åWVSƒì ‹M‹U ‹]œúX‰ÇEPSRQè­úÿÿ‰ÆƒÄƒþÿ„ɍv‰ÐÁà)ЋÅÄÜ#‹… Ü#ƒx(„èà…À‰€»;äÛ#svƒì‹€Ü#VSÿP(ƒÄC;äÛ#råv‰ÃÁã)ÃÁ㋃ÄÜ#ƒì‹… Ü#VPÿR0fǃèÜ#ƒÄhdÜ#Vè\&ƒÄè ÒLJ‰øP¸ÿÿÿÿë#vƒìSVèŽýÿÿƒÄº…À”ÂJ ։øP‰ðeô[^_]ÃU‰åVS‹u»;äÛ#svƒì‹€Ü#VSÿP(ƒÄC;äÛ#råv‰ÃÁã)ÃÁ㋃ÄÜ#ƒì‹… Ü#VPÿR0fǃèÜ#ƒÄhdÜ#Vè¬%ƒÄeø[^]ÉöU‰åVS‹]è ƒì ¡ìÛ#@‰ÂÁâ)¾ÀÜ#SÿTÖú‰$èn¡ìÛ#@‰ÂÁâ)¿DÖ‰$èn¦ƒÄeø[^]ÃU‰åWVSƒì‹]‹}úû™w! [‰ÈÁà)ÈÁàºÀÜ#öD0tfƒ|(u û¸ÿÿÿÿéDžÿy$[‰ÁÁá)Á Í°¸ÄÜ#‹<Çë ‰öƒÿv¿[‰ÁÁá)Á Í°‰Mä¹ÈÜ#‰Mì‹Uä‹
-‰Â)úƒÂ‰Ð¾º÷ö‰Eð‹uä;tMۍƒ€4‹MðىÈÁà)ȍ Å°‰ö2‹…$Ý#‹] ‰ƒÃ‰] B»‰Ðº÷ó‹]ì;uÔû‰øƒÄ[^_]ÐU‰åSƒì‹]‹ -ìÛ#I‰ÐÁà)ЍÅö‚ðÜ#tɍ€È‚xÝ#…$Ý#¡¤Ü#;ôÛ#|;ôÛ#uA¡¨Ü#;øÛ#}4ƒìSÿ5ìÛ#ÿ5øÛ#ÿ5ôÛ#ÿ5¨Ü#ÿ5¤Ü#h-#è8¶ƒÄ è@ ‹]üÉÍvU‰åWVS‹ -ìÛ#I‰ÐÁà)ЍÅöƒðÜ#„›ɍ€ȍ‹°ÈÜ#ºÄÜ#‹t‚`‹”À¸ÌÜ#94s‰4‹ìÛ#[‰ÁÁá)ÁÁፁÀ°ÀÜ#¿ÄÜ#B‰8±°‹†ÈÜ#@º‰Ñº÷ñ‰–ÈÜ#ۍƒ€ØÐÇD‡`ƒ<>wÿ>[^_]ÉöU‰åWVS‹M‹] ‹u‹}úù™w!I‰ÐÁà)ÐÁàºÀÜ#öD0tfƒ|(uû¸ÿÿÿÿëy…ÛtI‰ÂÁâ)‹ՀÝ#‰…ötI‰ÂÁâ)‹Õ|Ý#‰…ÿtI‰ÂÁâ)‹ՄÝ#‰ƒ}t(ɍ€ȍ I‰ÊÁâ)ÊÕxÝ#‹…$Ý#‹U‰û¸[^_]ÉöU‰å‹Múù™w!I‰ÐÁà)ÐÁàºÀÜ#öD0tfƒ|(uû¸ÿÿÿÿë7I‰ÂÁâ)ÂÁ⍂ÀǀÀÜ#ǀÄÜ#ǂ|Ý#û¸]ÍvU‰åWVSƒì ƒ=ìÛ#ÿt¡ìÛ#@‰ÂÁâ)ÂöÕðÜ#…3ƒ=ìÛ#ÿ„ƒìh¤Ü#j證ƒÄU表Ü#;øÛ#|¡¤Ü#+ôÛ#‰E表Ü#+øÛ#ë"v¡¤Ü#+ôÛ#H‰E表Ü#+øÛ#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыìÛ#R‰ÐÁà)Ð) Å Ý#ƒì QènüÿÿƒÄƒ=üÛ#ÿtƒì ÿ5üÛ#ÿÈÛ#ÇüÛ#ÿÿÿÿƒÄ‹ -ìÛ#I‰ÐÁà)Ћ<ÅÄÜ#ƒì‹½ Ü#QWÿP<ƒÄ¿4½ƒì ‹† Ü#WÿP$‰ÃƒÄƒûÿt%ƒì[‰ÐÁà)ЋÅÄÜ#‹… Ü#SPÿR4ƒÄ븅Àx»ƒûÿuG뫍v‹5ìÛ#‰Ü#‰ìÛ#[‰ÐÁà)Ð;ÅÝ#t0»ÀÜ#‰ö¡ìÛ#@‰ÂÁâ)‹TÓP‰ìÛ# R‰ÈÁà)È;TÃPu×;5ìÛ#tƒìhìÛ#jÿèW#ƒÄ‹ -ìÛ#I‰ÐÁà)ÐÁà¾ÀÜ#fÇD(‹¸ÄÜ#ƒì‹½ Ü#‹Ü#¸;ìÛ#•ÀPQWÿS8¡ìÛ#@‰ÂÁâ)ƒÄöDÖ1„Ü¡Ü#;ìÛ#…Ë¡¤Ü#‰EèMè¡ìÛ#@‰ÂÁâ)»ÌÜ#‹DÓ@º@B‰Ö™÷þ’’’Áâ‰Ö5¨Ü#‰q¿¡/¸D‰ø÷î‰×Áÿ‰ð™‰þ)Ö¡ìÛ#@‰ÂÁâ)‹\Ó@ºƒÞC‰Ø÷êÁú‰ØÁø)2Eè‹AºÊš;‰Ó™÷û‰Qjhd<"ÿuìÿuèÿÄÛ#‰ÃƒÄƒûÿuƒìÿ5ìÛ#jèû7ƒÄ‰üÛ#¡¤Ü#£ôÛ#¡¨Ü#£øÛ#eô[^_]ÉöU‰åWVSƒìÇPœ%úÿuèD»ƒÄ¿ÄÜ#¾ÀÜ#‰ö[‰ÂÁâ)ÂÁâÇ:ÿÿÿÿǂÌÜ#ÆDB fÇD0fÇD0
-fÇD0 fÇD0B0Ç0Ç8ǀÈÜ#ǀÌÜ#‚Ý#Ç@Çǂ Ý#BP‰0Ç8ÇD`DŽÐ‚˜ß#Ç@Ǎ‚àÇ0ÿÿÿÿÇ8ÿÿÿÿ‚°Ç8ǀÈÜ#ǀÌÜ#ÂÀÇ2Ç:ºۍƒ€ v
-ÇD‡`Bƒúvï[‰ÐÁà)ЍÅÀǀÈÜ#ÿÿÿÿǀÌÜ#ºۍƒ€ 
-DŽ†ÐBƒú~ìCû™Žƒþÿÿ»¹ÈÜ#[‰ÂÁâ)C‰DÑP‰Ãû˜~åÇÀ™%ÿÿÿÿ»™¹ÌÜ#[‰ÂÁâ)Cÿ‰DÑP‰Ã…ÛéÇÝ#ÿÿÿÿÇdÜ#ÇèÛ#ÇàÛ#Ç Ü#ÇÜ#ÿÿÿÿÇìÛ#ÿÿÿÿÇüÛ#ÿÿÿÿÇøÛ#ÇôÛ#ÇðÛ#ÇäÛ#ÇÀÛ#èÚè}è42ƒì ÿuèqÉÿÿ£hÜ#ƒÄ=×Övƒì h`-#èÇ$è »ƒÄ¸ƒ=hÜ#”À‰Eè]è¡hÜ#‰CÇPœ%躂ƒì S豌Ç$ø<"èÇÇ$8'"聎Ç$P<"蕎ƒÄjjèEÿðW#ƒÄh¤Ü#jèLƒèOùÿÿèê›f£`Ü#¡ìÛ#@‰ÂÁâ)¾ÀÜ#¿DÖ‰$èϛÇ$è7ŽÿìW#ÇPœ%ƒÄ»ƒ=èÛ#ŸÃSjèɃă= Ü#teè„ Ç´W#ƒìh¤Ü#j軂è^›f£`Ü#è³øÿÿÇ$P<"èǍ¡ìÛ#@‰ÂÁâ)¿DÖ‰$è7›Ç$蟍ƒÄÇPœ%ƒìSjèCèÇPœ%ƒÄjjè(ƒÄúƒ=èÛ#t"ƒìÿ5èÛ#h‹-#èP¬Ç$ÿÿÿÿèX¹ƒÄƒì jèK¹ƒÄeô[^_]ÃU‰åSƒìƒ=´W#…•èW‰…Àuú腚‹ìÛ#R‰ÑÁá)Ñf‰ÍÈÜ#‹E£èÛ#Ç´W#ƒ=ìÛ#ÿ„ƒìh¤Ü#j藁ƒÄUð¡¨Ü#;øÛ#|¡¤Ü#+ôÛ#‰Eð¡¨Ü#+øÛ#ë ¡¤Ü#+ôÛ#H‰Eð¡¨Ü#+øÛ#ʚ;‰B‹Mð ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ôºÓMb‰Ø÷êÁú‰ØÁø)ÂыìÛ#R‰ÐÁà)Ð) Å Ý#ƒì QèZôÿÿƒÄƒ=üÛ#ÿtƒì ÿ5üÛ#ÿÈÛ#ÇüÛ#ÿÿÿÿƒÄ‹ -ìÛ#I‰ÐÁà)ЋÅÄÜ#ƒì‹… Ü#QPÿR<ÇÜ#ÿÿÿÿÇìÛ#ÿÿÿÿƒÄèü‡…Àtƒì ¿`Ü#Pè,™ƒÄëvƒì ¿`Ü#Pè™èkƒÄû‹]üÉÉöU‰åSƒìÇEøÿÿÿÿ»º Ü#¡ Ü#ƒx(t1ƒì‹šUøRSÿP(ƒÄ…Àu¸ÿÿÿÿëCƒûwº Ü#‹šƒx(uи‹]üÉÉöU‰åƒìè è+ÉÉöU‰åƒìÇüÛ#ÿÿÿÿè§êÿÿÉÐU‰åSƒìœúX‰Ãƒ=Pœ%tƒ= Ü#t‰ØPëƒì jè–ýÿÿƒÄ‰ØP‹]üÉÉöU‰åƒìÿuèzýÿÿƒÄÉÐU‰åSƒì‹UœúX‰ÃƒìRjèZ‰ÂƒÄ‰ØP‰Ð‹]üÉÉöU‰å¸èÛ#ƒ=ìÛ#ÿt‹ìÛ#R‰ÐÁà)ЍÅ Ý#]ÉöU‰åSƒìœúX‰Ãƒ=Pœ%tƒ= Ü#t‰ØPëƒì ÿuèíüÿÿƒÄ‰ØP‹]üÉÐU‰å]ÍvU‰åWVSƒì ÇEðÇE컍[ …ƒ¹H…#t[¿@…#ƒ<9tP‹ìÛ#ҍ‚€Ð؍…оÀÜ#ƒ<0t+ûƒì ÿ40ÿ9ƒÄú‹ìÛ#ҍ‚€Ð؋´†Ð uìCƒû~Œƒ}ìt -ÿEðƒ}ðŽmÿÿÿeô[^_]ÐU‰åVSº¾@…#»D…#¹H…#vRÁàÇ0B‰Çƒú~ãÇ8‹#ÿÿÿÿÇ@‹#ÇH…#Ç@…#ÇD…#ÿÿÿÿ[^]ÐU‰åS‹Múƒ=@‹#ÿu û¸ ënv¡@‹#@Ç•H…#‰¡@‹#@‹…D…#£@‹#‹@‹U ‰…@…#º»ÀÜ#‰öҍ‚€ÐDŽƒÐBú™~ßû¸‹$ÉÃU‰åú¡ìÛ#À’ÂU‹•Ý#û]ÍvU‰å‹Múƒùw -Iƒ<…H…#u û¸ë%v¡ìÛ#À’ÂʋE ‰•Ý#û¸]ÃU‰åS‹]œúX‰Áƒûw -[ƒ<…H…#u‰ÈP¸ë.v[Áà‹@‹#‰D…#ǀH…#‰@‹#‰ÈP¸‹$ÉÃU‰åWVSƒì ¡ìÛ#‰Eð‰ÂÑâ‰ÐÁà)ЍÅ¿ÀÜ#öD0 tm‹E‰‚ŒÝ#‹UðÑâUð‰ÐÁà)ЁLÇ0@‹UðÑâUð‰ÐÁà)ЍÅÀºÈÜ#ƒ<ÿt,‹4v‰ÃÁã)ÃÁ㋃ÄÜ#ƒì‹… Ü#VPÿRD‰tPƒÄ¹»ÀÜ#;MðtI‰ÐÁà)ЋUð9TÃP„ˆAù™~ۋUðÑâUð‰ÐÁà)Ѓ<ÅÝ#t[»ÄÜ#ûƒì ‹UðÑâUð‰ÐÁà)ЋDÃPÿpÿƒÄú‹EðÑàEð‰ÂÁâ)ÕP‹‹@‰‹UðÑâUð‰ÐÁà)Ѓ|ÃPu«èJüÿÿƒì ‹EðÑàEð‰ÂÁâ)»ÀÜ#¿DÓPèÔyƒÄEðPjÿèW#‹Eð@‰ÂÁâ)ՃÄöD0@u%ƒì·D.P‹Eð@‰ÂÁâ)Âÿ4ÕÌÜ#èÁ ƒÄ»;äÛ#sƒì‹€Ü#ÿuðSÿP(ƒÄC;äÛ#rã‹MðI‰ÐÁà)ЋÅÄÜ#ƒì‹… Ü#QPÿRPÇìÛ#ÿÿÿÿÇÜ#ÿÿÿÿ‹Eð@‰ÂÁâ)ƒÄöÕðÜ#u&ÿ -àÛ#ƒ=àÛ#uBèZúÿÿë;ƒìRjèY+ƒÄëg‹Eð@‰ÂÁâ)ÂöÕðÜ#uÿ - Ü#ƒ= Ü#uèúÿÿƒìh¤Ü#jèÒyƒÄƒ=üÛ#ÿtƒì ÿ5üÛ#ÿÈÛ#ÇüÛ#ÿÿÿÿƒÄè­ïÿÿeô[^_]ÐU‰åVS‹uúv‰ÐÁà)ÐÁàºÀÜ#öD0ufƒ|(uèѼNJû¸ÿÿÿÿ麍v‰ÐÁà)ÐöÅñÜ#tû雉ö;5ìÛ#uJv‰ÐÁà)лÀÜ#‹DÃ0©t0©u)ƒì jè¥üÿÿ¡ìÛ#@‰ÂÁâ)¿DÓ‰$襑ƒÄ»ëvC;¸W#}ƒìÝÿ°d‹#Vÿ`‹#ƒÄ…Àtٍv‰ÐÁà)Ё ÅðÜ#û¸eø[^]ÍvU‰åWVSƒì ‹Ef‰Eòf…Àuèâ»ÇŒ¸ÿÿÿÿé‰öú¡Ü#@‰ÂÁâ)Âf‹Mòf; ÕìÜ#”Eñ¾¿ÀÜ#‰öv‰ÐÁà)ÐÁà‹T0÷Â…ˆƒÀ fƒ|8t}÷Âuuf‹Mòf9L8 uj;5ìÛ#u!÷Ât÷Âuƒì jè{ûÿÿƒÄëC‰ö»ëC;¸W#}ƒìÝÿ°d‹#Vÿ`‹#ƒÄ…Àtٍv‰ÐÁà)ЁLÇ0Fþ™ŽNÿÿÿ€}ñt(ƒì ¡Ü#@‰ÂÁâ)¿ÕÈÜ#P萃Äëvû¸eô[^_]ÉöU‰åWVSƒì ¾¿ÀÜ#v‰ÐÁà)ÐÁàfƒ|(tL÷D0
-uB»ë‰öC;¸W#}ƒìÝÿ°d‹#Vÿ`‹#ƒÄ…Àtٍv‰ÐÁà)ЁLÇ0Fþ™~–eô[^_]ÉöU‰åSƒì¡ìÛ#@‰ÂÁâ)»ÀÜ#‹DÓ0©t7©u0©t)ƒì jè"úÿÿ¡ìÛ#@‰ÂÁâ)¿DÓ‰$è"ƒÄ‹]üÉÉöU‰åS‹M‹] ¡¸W#ʼnŠ`‹#‰šd‹#@£¸W#‹$ÉÍvU‰åƒìúÿuè½ùÿÿ¡ìÛ#@‰ÂÁâ)¿ÕÈÜ#‰$躎ƒÄÉÐU‰åVS¶uœúX‰Ãƒ=”Ž#ÿuèH¹Ç‚‰ØP¸ÿÿÿÿéۋ -”Ž#‰ÊÁâ‹‚ Œ#£”Ž#‹E‰‚Œ#‹E ‰‚Œ#‰ðƒà‰‚Œ#‰ðƒàƒøtOƒø
-ƒøt -ësvƒøtSëi‰ÈÁàǀ Œ#ÿÿÿÿƒ=€Ž#ÿu‰ -€Ž#ë¡„Ž#Áà‰ˆ Œ#‰ -„Ž#ëH‰ö‰ÊÁ⡈Ž#‰‚ Œ#‰ -ˆŽ#ë.‰ÊÁâ¡ŒŽ#‰‚ Œ#‰ -ŒŽ#ë‰ÊÁ⡐Ž#‰‚ Œ#‰ -Ž#‰ØP¸[^]ÐU‰åƒìƒ=ðÛ#uƒì hÀ-#èŒÇ$謃ġðÛ#P‰ðÛ#ÉÐU‰åƒìƒ=äÛ#uƒì hß-#èPÇ$èÌ«ƒÄ¡äÛ#P‰äÛ#ÉÐU‰åWVS‹E‹u ‹}»‹HÇöt<€9t5‹ ‰‡€: t€:t‰öC€< t€< uó€< uÆ Cÿ€< uÌÿ[^_]ÐU‰åWVSì¬‹EµTþÿÿ½Xþÿÿ»‹HDžTþÿÿöt<€9t5‹ ‰‡€: t€:t‰öC€< t€< uó€< uÆ Cÿ€< uÌÿƒì…XþÿÿPÿµTþÿÿèU¸ÿÿƒÄeô[^_]ÉöU‰å¸¹ Œ#v‰ÂÁâ@‰
-ƒø&~òÇ|Ž#ÿÿÿÿÇ€Ž#ÿÿÿÿÇ„Ž#ÿÿÿÿLjŽ#ÿÿÿÿÇŒŽ#ÿÿÿÿǐŽ#ÿÿÿÿÇ”Ž#]ÉöU‰åWVSƒì ‹E‹} ƒøt4ƒø ƒøtéЃøt3ƒøtB鳐‹€Ž#Ç€Ž#ÿÿÿÿë:‰ö‹ˆŽ#LjŽ#ÿÿÿÿë&‰ö‹ŒŽ#ÇŒŽ#ÿÿÿÿë‰ö‹Ž#ǐŽ#ÿÿÿÿÇÀÛ#ƒûÿtM¾ Œ#…ÿt‰ØÁàƒ¸Œ#uƒì ‰ØÁàÿ°Œ#ÿŒ#ƒÄ‰Ù‰ØÁà‹0‰Â¡”Ž#‰2‰ -”Ž#ƒûÿu¸ÇÀÛ#eô[^_]ÉöU‰åƒìEüPEøPEôPEðPèI‡Ç$ Ž#èÅӃÄjjhÿÿjh¤Ž#h Ž#èðɃÄjjhÿÿÿhhÀŽ#h Ž#èÐɃÄjjhÿÿÿþhh܎#h Ž#è°ÉƒÄ ƒ}ütƒì‹EüHPÿuøh Ž#èzȃă}ôtƒìÿuôÿuðh Ž#è^ȃÄÉÐU‰åƒì‹E…Àu¸ëƒìjPh Ž#èʃÄÉÍvU‰åƒìÿuÿuÿu ÿuh Ž#è¸ËƒÄ ÉÍvU‰åƒì ÿuÿuÿuÿuÿu ÿuh Ž#è²ËƒÄ ÉÐU‰åƒì ÿu ÿuh Ž#èfЃÄÉÐU‰åƒìÿuh Ž#èM΃ÄÉÃU‰åƒìÿuh Ž#èM҃ÄÉÃU‰åƒì jÿuh Ž#èSɃÄÉÉöU‰åƒì ÿu ÿuh Ž#èþσÄÉÐU‰åƒìh Ž#è ÎÇ$ Ž#è ҃ÄÉÍvU‰åWVSƒì} ‹uEðPh4.#VèÖ¥‰ÃƒÄƒûuƒ}ðvÇEðƒÆë ‰öÇEð‹Eðº;¼W#~hƒìWVh#蜃Äj
-VèK›ƒÄ»…À•ÃœúX‰Æƒìh#‹Eðÿ4…ÀW#h9.#è]™ƒÄ…Ûuƒì hÜ.#èI™ƒÄ‰ðPº‰Ðeô[^_]ÍvU‰åVSƒìu ‹]EôPh4.#S襃ăøuƒ}ôvÇEôƒÃëÇEô‹Eôº;¼W#~JƒìVSh#èB›ƒÄj
-S臚ƒÄœúX‰Ãƒìh#‹Eôÿ4…ÀW#h9.#裘ƒÄ‰ØPº‰Ðeø[^]ÉöU‰åVSƒì@‹u‹] ‹EfÇEÈÇEÌÇEÐfÇEÔÇEàÇEäÇEìÇEð‰EØÇEÜÇEè…ÛtT‹C‰E̋C‰EЃ{u
-ÇEÜ1됃eÜߋC ‰EàÇEÀƒì ÿ5“#è)7ƒÄ+C ‰EċC‰Eì‹C‰EðëD‰öÇEÌÇEЃMÜ ÇEàÇEÀƒì ÿ5“#èâ6ƒÄ‰EÄÇEìÇEðèI±‹ƒì jEÀPEÈPÿuhA.#èAÞÿÿ‰ƒÄ ƒøÿt ƒì PèòÒÿÿƒÄ豉¸ƒ>ÿ”ÀHƒàêƒÀeø[^]ÍvU‰åƒìÿ5“#èc6ƒÄÉÉöU‰åƒìÿ5“#èc6ƒÄÉÉöU‰åƒìÿ5“#è{5ƒÄÉÉöU‰å‹E‹U ‹M£“#‰“#‰ -“#]ÐU‰åVS‹]è°‹0ƒì Sètóÿÿ‰Ãèm°‰0ƒÄ¸…Û•À@eø[^]ÃU‰åƒìúÿuÿu ÿuÿ5“#èé5ƒÄûÉÍvU‰åWVSƒì ‹}‹uúÿ6ÿu Wÿ5“#è3‰ÃƒÄ…Ûu#ƒìÿ5“#èx5ƒÄ+PWÿ5“#èffƒÄû‰Øeô[^_]ÃU‰åSƒì ‹] Sÿuè¡eƒÄÿ5“#è75ƒÄ+‰¸‹]üÉÉöU‰åVSƒì‹u‹] …Ûtƒ;uÇEôƒìEôPë7ƒ;uÇEðƒìEðPë!vÇEèƒì jè_þÿÿ+CUè‰BƒÄRVèT*ƒÄeø[^]ÉöU‰åWVSƒì‹u ‹}ÇEðÿ5“#è“4‰ÃƒÄ9Þƒþ} ¸ëG‰öƒì ÿuèµ*ƒÄ W‰Ø)ðPÿuè eƒÄ…ÀtÇEð…ÿt‰Ø+‰ƒì ÿuèÙ*‹EðƒÄeô[^_]ÍvU‰åƒì‹Eúƒ8u -ÇûÿU ëû¸ÉÃU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)ÐÁà‹˜ß#‰U苀œß#‰Eìƒùÿtw ‰ÆȉÂÁâ)‹Eè‰Ã;՘ß#|[‰Eäv1‰ÐÁà)ЍÅ;š˜ß#u ‹Eì;‚œß#|1‰Ï‰ÐÁà)Ћ ÅÝ#ƒùÿt4 1‰ÐÁà)Ћ]ä;Řß#}«ƒÿÿt‰ÐÁà)ЋU‰ÅÝ#ë‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰ÅÝ#‹E@‰ÐÁà)ЍÅP‰ˆÈÜ#‰¸ÌÜ#ƒÄ[^_]ÍvU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)лÄÜ#‰]ð‹´ÃЃùÿtCI‰ÐÁà)Ð;´ÃÐr0»ÈÜ#‰Ï‰ÐÁà)ЋLÃPƒùÿtI‰ÐÁà)ЋUð;´ÂÐsՃÿÿt‰ÐÁà)ЋU‰ÅÝ#ë
-‰ö‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰ÅÝ#‹E@‰ÐÁà)ЍÅP‰ˆÈÜ#‰¸ÌÜ#ƒÄ[^_]ÍvU‰åWVS‹}‰ÐÁà)ЍÅP‹ÌÜ#‹°ÈÜ#ƒúÿu ‹E ‰0ë#‰öR‰ÁÁá)Á»ÈÜ#‰ÐÁà)ЋDÃP‰DËPƒþÿt!v‰ÁÁá)Á»ÌÜ#‰ÐÁà)ЋDÃP‰DËP[^_]ÃU‰åS‹]‹ ‰Èƒùÿt/I‰ÐÁà)ЋÅÝ#‰ƒøÿt@‰ÐÁà)ÐÇÅÝ#ÿÿÿÿ‰È‹$ÉÃU‰åS‹]‹M ƒ9ÿt‹@‰ÂÁâ)‰ÕÝ#[‰ÂÁâ)ÕP‹‰‚ÈÜ#ǂÌÜ#ÿÿÿÿ‰‹$ÉÃU‰åWVSƒì ‹M‹] ‹}ÇEðú¡ìÛ#@‰ÂÁâ)4ÕÀÜ#…ÿt‹F8‰…ÛtBƒùt"ƒù ƒùt ë*‰öƒùtë!‹F8 ‰F8ë‰ö‹÷Ð!F8ëv‹‰F8ëÇEð‹F8‰Ã÷Ћ •#‰Ñ…ÂtB‰ö‰Ø÷л!Ètv‰Ú©u
-CÑøuòºƒì R范ċ^8‰Ø÷Ћ - •#…ÁuÀ‹F8‰Ã÷ЋV<‰Ñ…Ât=‰Ø÷л!Ètv‰Ú©u
-CÑøuòºƒì Rè|ƒÄ‹^8‰Ø÷ЋN<…ÁuÃû‹Eðeô[^_]ÍvU‰åVS‹u‹M ¸…É„¸ƒù‡òv‰ÐÁà)Ðfƒ<ÅèÜ#u -¸éӍvú‰ÈÁàö€(“#uƒ¸ “#uû魉öv‰ÐÁà)ЍÅüÜ#ƒùvèÍ©Çë
-¸Óà »ëC;äW#}ƒìÝÿ°ä•#Vÿà•#ƒÄ…Àtٍv‰ÐÁà)ЍÅfƒ»èÜ#u&ƒìh$•#VèÔüÿÿ‹ƒÄÜ#ƒÄ‹… Ü#VPÿRDƒÄèSm…Àuèû¸eø[^]ÐU‰åWVSƒì‹]‹U ƒûvè©Ç¸ÿÿÿÿévœúX‰Á‰Mðƒ}t‰ÞÁæÆ “#ü¹‹}ó¥…Òt‰ßÁçÇ “#ü¹‰Öó¥…Ò„ºöB…°ƒ:‡§ƒ<@•#ÿtq4‰uìº@•#‹@Áà‰Eè‰ÇƒÇ‹ -`¢%¸`œ%‹U苉E䋇dœ%©t -ƒàý‰‡dœ%ë‰ö¾@•#‹Uì‹2@‰ Õ`œ%‰Áƒ}äÿu»‰ -`¢%ǝ@•#ÿÿÿÿƒûv -è¨Çë¸þÿÿÿˆÙÓÀ! •#‹uð‰ðP¸ƒÄ[^_]ÐU‰åWVSƒì,‹] ¸…Û„~¸ƒû‡pœúX‰Â‰UԉÞÁæ}ØÆ “#ü¹ó¥÷Eàuƒ}Øu ‰ÐPé5vƒûv膧Ǹÿÿÿÿ됸ˆÙÓà# •#…Àt -‹UԉÐPéûƒûvèN§Çë‰ö¸ˆÙÓà  •#‹5$•#ƒþÿ„ô¸‰ÇˆÙÓçvv‰ÐÁà)ЍÅÝ#ƒûvèý¦Ç¸ÿÿÿÿë‰ú#‰Ð…À„–v‰ÐÁà)ÐÁàfƒ¸èÜ#uüÜ#ƒûv -輦Çë 8ƒìh$•#Vèúÿÿv‰ÃÁã)ÃÁ㋃ÄÜ#ƒÄ‹… Ü#VPÿRDÃà¾ÀÜ#ƒÄƒ<3ÿtƒì ÿ43ÿÈÛ#Ç3ÿÿÿÿƒÄ‹MԉÈPéîv‰ÐÁà)Ћ4ÅÝ#ƒþÿ…ÿÿÿ¾¸‰ÇˆÙÓç‰öv‰ÐÁà)ÐÁàfƒ¸èÜ#„…øÜ#ƒûvèö¥Ç¸ÿÿÿÿ됉ú#‰Ð…Àu^v‰ÐÁà)ЍÅüÜ#ƒûvèÃ¥Çëv 8»ëvC;äW#}0ƒìÝÿ°ä•#Vÿà•#ƒÄ…ÀtÙëvFþ™ŽSÿÿÿèzi…Àuè9 -‹MԉÈP¸eô[^_]ÐU‰åWVSƒì,¸ƒ} „T¸ƒ} ‡EœúX‰Â‰Uԋu Áæ}ØÆ “#ü¹ó¥÷Eàuƒ}Øu ‰ÐPé ‰ö÷Eàu;ƒ} vèܤǸÿÿÿÿëv¸ŠM Óà# •#…Àt ‹UԉÐPéÃ=`¢%ÿu‹MԉÈP¸ 鮉ö‹5`¢%vÁà¹`œ%‹‰`¢%‹U ‰dœ%‹U‰hœ%‹U‰lœ%‹ìÛ#‰pœ%Çÿÿÿÿ‹E Áàº@•#ƒ<ÿu‰4ë>‰ö‹M ‹@•#‰ÁЃ<Å`œ%ÿt»`œ%
-‹Í 
-ƒ<ÃÿuîR‰4Å`œ%ƒ} vèé£Ç됸ŠM Óà  •#‹5$•#ƒþÿ„û¸‰ÃŠM Ó㐍v‰ÐÁà)ЍÅÝ#ƒ} v蘣Ǹÿÿÿÿë v‰Ú#‰Ð…À„šv‰ÐÁà)ÐÁàfƒ¸èÜ#uüÜ#ƒ} vèS£Çëv ƒìh$•#Vè¨öÿÿv‰ÃÁã)ÃÁ㋃ÄÜ#ƒÄ‹… Ü#VPÿRDÃà¾ÀÜ#ƒÄƒ<3ÿtƒì ÿ43ÿÈÛ#Ç3ÿÿÿÿƒÄ‹MԉÈPé÷v‰ÐÁà)Ћ4ÅÝ#ƒþÿ…ÿÿÿ¾¸‰ÃŠM Ó㐍v‰ÐÁà)ÐÁàfƒ¸èÜ#„…øÜ#ƒ} v艢Ǹÿÿÿÿë‰Ú#‰Ð…Àu^v‰ÐÁà)ЍÅüÜ#ƒ} vèV¢Çë‰ö »ëvC;äW#}0ƒìÝÿ°ä•#Vÿà•#ƒÄ…ÀtÙëvFþ™ŽSÿÿÿèf…Àuƒ=àW#uèÄ ‹MԉÈP¸eô[^_]ÃU‰åWVSƒì‹u‹]¡ìÛ#@‰ÂÁâ)<ÕÀÜ#èŠú¡ •##„Hºv©u=BÑøuô¾ƒ<µ@•#ÿue‹E ‰0Ç@Ç@W<ƒþvèa¡Ç됉Öëɸþÿÿÿ‰ñÓÀ!ƒþvè?¡Çëv¸þÿÿÿ‰ñÓÀ! •#ûév µº@•#‹[‹Å`œ%‰ƒøÿu"ƒþvèñ Ç됸þÿÿÿ‰ñÓÀ! •#W<ƒþv -èÌ Çë ¸þÿÿÿ‰ñÓÀ![Áâ¹dœ%‹
-‹u ‰‹‚hœ%‰F‹‚lœ%‰FƒÂ‹
-©t ƒàý‰
-ëv[¡`¢%‰Õ`œ%‰`¢%ûéI‰Öë‹G<#tUº©uéBÑøuô¾‹E ‰0Ç@Ç@W<ƒþvè Çëv¸þÿÿÿ‰ñÓÀ!ûéëv…Ûtƒ;uƒ{u -û¸ éÓ‰ö‹‰G@úèu‹ìÛ#R‰ÑÁá)Ñf‰ÍÈÜ#ƒìh¤Ü#jèN\ƒÄU表Ü#;øÛ#|¡¤Ü#+ôÛ#‰E表Ü#+øÛ#롤Ü#+ôÛ#H‰E表Ü#+øÛ#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰ÁáºÓMb‹Eì÷êÁú‹EìÁø)ÂыìÛ#R‰ÐÁà)Ð) Å Ý#ƒì QèÏÿÿƒÄƒ=üÛ#ÿtƒì ÿ5üÛ#ÿÈÛ#ÇüÛ#ÿÿÿÿƒÄ‹ -ìÛ#I‰ÐÁà)ЋÅÄÜ#ƒì‹… Ü#QPÿRHƒÄh$•#ÿ5ìÛ#èæòÿÿ¡ìÛ#@‰ÂÁâ)ÂfÇÕèÜ#ƒÄ…Û„’ƒìEàPjè[U؃Ä‹Eà‰E؋EäC‰B…Ày -ÿM؁Bʚ;됁zÿɚ;~ ÿjʚ;ÿ5ìÛ#hän"ÿuÜÿuØÿÄÛ#‰ÃƒÄƒûÿuƒìÿ5ìÛ#jèù ƒÄ¡ìÛ#@‰ÂÁâ)‰Õ ß#ÇìÛ#ÿÿÿÿÇÜ#ÿÿÿÿè‡Ðÿÿƒì ¡ìÛ#@‰ÂÁâ)»ÀÜ#¿DÓPèsè”ÇG@¡ìÛ#@‰ÂÁâ)ƒÄöDÓ2tû¸ é~‰Öë%¡ •##„ûº‰ö©uáBÑøuô¾ƒ<µ@•#ÿu=‹M ‰1ÇAÇAƒþv -è@Çë¸þÿÿÿ‰ñÓÀ! •#ûé vƒì µƒ@•#Pèúðÿÿ‰ÇƒÄƒ»@•#ÿu#ƒþvèòœÇë‰ö¸þÿÿÿ‰ñÓÀ! •#Áâ¹dœ%‹
-‹] ‰‹‚hœ%‰C‹‚lœ%‰CƒÂ‹
-©t ƒàý‰
-ëv¡`¢%‰Õ`œ%‰=`¢%ûël‹G<#…Àuû¸ë`v‰Öë‹G<º#t ©uéBÑøuô¾‹E ‰0Ç@Ç@W<ƒþvè/œÇëv¸þÿÿÿ‰ñÓÀ!û¸eô[^_]ÍvU‰åWVSƒì ‹}¡ìÛ#@‰ÂÁâ)4ÕÀÜ#è¹ú‹F<#…Àt è¦û颋‰F@úèq‹ìÛ#R‰ÑÁá)Ñf‰ÍÈÜ#ƒìh¤Ü#jè6XƒÄU表Ü#;øÛ#|¡¤Ü#+ôÛ#‰E表Ü#+øÛ#롤Ü#+ôÛ#H‰E表Ü#+øÛ#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыìÛ#R‰ÐÁà)Ð) Å Ý#ƒì QèúÊÿÿƒÄƒ=üÛ#ÿtƒì ÿ5üÛ#ÿÈÛ#ÇüÛ#ÿÿÿÿƒÄ‹ -ìÛ#I‰ÐÁà)ЋÅÄÜ#ƒì‹… Ü#QPÿRHƒÄh$•#ÿ5ìÛ#èÍîÿÿ¡ìÛ#@‰ÂÁâ)»ÀÜ#fÇDÓ(ÇìÛ#ÿÿÿÿÇÜ#ÿÿÿÿè Íÿÿ¡ìÛ#@‰ÂÁâ)¿DÓ‰$è™oè‹F<#ƒÄ…Àuû¸ë èÿû¸eô[^_]ÐU‰åSƒì‹]úEðPjè¢VƒÄƒ=ȕ#ÿu
-ÇEèëWMèUð¡Ä•#;B|¡À•#+Eð‰Eè¡Ä•#+Bëv¡À•#+EðH‰Eè¡Ä•#+Eôʚ;‰Aƒì ÿ5ȕ#ÿÈÛ#ƒÄ…ÛtN]ð‹Eð£À•#‹Eô£Ä•#jhDo"ÿuôÿuðÿÄÛ#‰ÃƒÄƒûÿuƒìÿ5ìÛ#jè:ƒÄ‰ȕ#ë -vÇȕ#ÿÿÿÿû‹Eè‹]üÉÐU‰åVSƒì‹uƒ<µ@•#ÿuC‰uèÇEìÇEð¡ìÛ#‰Eôƒþvèü˜Ç鮐¸þÿÿÿ‰ñÓÀ! •#降 µº@•#‹[‹Å`œ%‰ƒøÿu"ƒþv豘Ç됸þÿÿÿ‰ñÓÀ! •#[Áà¹dœ%‹‰U苐hœ%‰U싐lœ%‰Uð‹pœ%‰UôP‹
-©tƒàý‰
-ë[¡`¢%‰Õ`œ%‰`¢%ƒìEèPVè
-ƒÄeø[^]ÃU‰åVSƒì¡ìÛ#@‰ÂÁâ)4ÕÀÜ#‹F0©…Í -‰F0‹F8‰Ã÷Ћ •#‰Ñ…ÂtA‰Ø÷л!Ètv‰Ú©u
-CÑøuòºƒì Rè„þÿÿƒÄ‹^8‰Ø÷Ћ - •#…ÁuÀ‹F8‰Ã÷ЋV<‰Ñ…ÂtZ‰Ø÷л!Ètv‰Ú©u
-CÑøuòº‰UèÇEìÇEð¡ìÛ#‰EôƒìEèPRèƒÄ‹^8‰Ø÷ЋN<…Áu¦f0ÿïÿÿeø[^]ÃU‰åWVSƒì,‹]œúX‰Â‰UÌ¡ìÛ#@‰ÂÁâ)ÕÀÜ#‰UЉÞÁæ}ØÆ “#ü¹ó¥÷Eàuƒ}Ø„îƒ}Øÿ„ä÷EàuCƒ}Øu=ƒìShL.#èw}ƒÄ÷Eàtƒì‹M ÿqhb.#èX}ƒÄƒì jè—ÓÿÿƒÄ‹UЋB8‰EԉƍUԃûv -èh–Çë ¸ˆÙÓà ‹EÔ E܉EԋUЃÂ<ƒûv -è<–Çë ¸þÿÿÿˆÙÓÀ!‹EԋUЉB8û÷Eàtƒìjÿu SÿUäëƒìj‹M ÿqSÿU؃Äú‹EЉp8‹ỦÐPeô[^_]ÃU‰åWVSƒì ‹}‰ÐÁà)ÐÁà¾ÀÜ#fƒ|(uF˜àƒ<3ÿtƒì ÿ43ÿÈÛ#Ç3ÿÿÿÿƒÄƒìh$•#Wèúèÿÿ‰ÂÁâ)‹ÕÄÜ#ƒÄë ‰ÐÁà)ÐÁàfƒ¸èÜ#u!‹ÄÜ#ƒì‹• Ü#WRÿPD¸ƒÄë‰ö¸eô[^_]ÍvU‰åWVSƒì º¿(“#¾$“#»,“#¹@•#‰ö‰ÐÁàǀ “#Ç8Ç0ÇÇ‘ÿÿÿÿBƒúvϺ»`œ%¹dœ%RÁàB‰ÇDƒú>~éÇH¢%ÿÿÿÿÇ\¢%Ç`¢%Ç •#Ç$•#ÿÿÿÿÇȕ#ÿÿÿÿº¹€–#»„–#‰öRÁàÇÇÿÿÿÿÆDBƒú~áƒìjhÄi"ènÚÿÿƒÄeô[^_]ÍvU‰å‹EǸ]ÐU‰å‹EÇÿÿÿÿ¸]ÐU‰åƒì‹U‹M ƒùvèê“Ǹÿÿÿÿ됸Óà ¸ÉÃU‰åƒì‹U‹M ƒùv趓Ǹÿÿÿÿ됸þÿÿÿÓÀ!¸ÉÃU‰åƒì‹M ƒùv腓Ǹÿÿÿÿë ¸Óà‹U#ÉÉöU‰åƒì ÿuÿu ÿuèÔçÿÿƒÄÉÍvU‰åWƒì$‹UEè‰E丹‹}äüó«ƒìjÿuäRèBñÿÿƒÄ…Àu -‹Uè‹E ‰¸‹}üÉÐU‰åƒì jÿu ÿuèñÿÿƒÄÉÃU‰åƒì‹E…Àu¸ëƒìPÿu ÿuèíðÿÿƒÄÉÃU‰åƒìÿuÿ5ìÛ#è`èÿÿƒÄÉÍvU‰åVSƒì ‹]‹E ‰EèÇEìÇEð脒‹0ƒìEØPEèPSèAéÿÿƒÄ»ÿÿÿÿ…Àu ÷Eàu‹]ØèT’‰0‰Øeø[^]ÐU‰å‹M¡ìÛ#@‰ÂÁâ)¡ •# ÕüÜ#‰¸]ÉöU‰åSƒì‹E‹U ú‹ìÛ#‰ìÛ#ÇàW#jPj jèœìÿÿƒÄÇàW#‰ìÛ#û‹]üÉÍvU‰åS‹M‹] ¡äW#ʼnŠà•#‰šä•#@£äW#‹$ÉÍvU‰åVS‹]Cÿƒøv苑Ç~¸ÿÿÿÿëp‰öœúX‰Æ[€<…ˆ–#u‰ðPèa‘ǸÿÿÿÿëF[Áâ¹€–#‹E ‰
-‹E‰‚„–#ÆD
-ƒìjh„o"Sè¹T·Ã‰$èÒeƒÄ‰ðP¸eø[^]ÍvU‰åƒì¸ÉÍvU‰åƒì ‹E‰EèÇEìÇEð‹ìÛ#‰UôUèRPè›ùÿÿƒÄÉÉöU‰åVS‹uv‰ÃÁã)ÃÁã¸ÀÜ#DŽàÿÿÿÿL0ƒìh$•#Vèõãÿÿ‹ƒÄÜ#ƒÄ‹… Ü#VPÿRDèç·ÿÿƒÄeø[^]ÐU‰åƒìÇȕ#ÿÿÿÿjjèWèÿÿè¾·ÿÿƒÄÉÐU‰åƒìEüÇEüÿÿÿÿPèôÿÿƒÄÉÐU‰åƒì‹E‹‰EüEüPjÿèW#‹UüRÁเ–#ƒÄƒ<t ûƒì RÿƒÄú‹Eü@ƒì ÿ4…„–#覱ÿÿƒÄÉÐU‰åWVSƒì ‹u ‹]ƒ}t讏Ǹÿÿÿÿén‰öúƒ=@ž#ÿt ƒ=`¢%ÿuûèƒÇ ¸ÿÿÿÿéCv¡@ž#‰‹@ž#Õ)пD—#‹DÇ0£@ž#‹Õ)й@—#ÇDÁ0…öu8‹Õ)ÐÇÁ‹Õ)ÐÇÇ‹Õ)ЉÅH—#닍<Å)Ǎ<ý@—#ü¹ó¥‹Õ)ЍŃº@—#u#¡`¢%‰‚h—#@Áàƒˆtœ%‹€`œ%£`¢%‹Õ)ÐÇÅT—#ÿÿÿÿ‹Õ)ЍÅX—#Ç@NjÕ)ЍÅ`—#Ç@NjÕ)ÐÇÅl—#û¸ƒÄ [^_]ÃU‰åSƒì‹]ƒûwúÝ)؃<Åp—#uûèÿÇ¸ÿÿÿÿ閍vÝ)ØÁàǀp—#ƒÀºD—#ƒ<ÿtƒì ÿ4ÿÈÛ#ƒÄÝ)ØÁàƒ¸@—#uE‹h—#R Åötœ%u¡`¢%‰`œ%‰`¢%Ý)؋Åh—#@ƒ$Åtœ%üû¸‹]üÉÃU‰åWVSƒìL‹E‰E´Áà+E´Áàƒ¸@—#…‹P ‹‚H—#@öÅtœ%t¸L—#ƒ< „ôÿéì‰ö‹M´Áá+M´Ááy LJL—#¾H—#‹7@‹`¢%‰Ý`œ%£`¢%jÿ41ÿ±D—#jèhçÿÿ‹7@ƒ Åtœ%錐‹E´Áà+E´Áà¹@—#ƒ<uwPƒ<
-tÿ°H—#ÿ°L—#ÿ4
-ëQvÇEÈÇEÌÇEÐÇEÔÇEØÇEÜÇEà‹E´Áà+E´ÁàH—#Rÿ°L—#EÈPEÄPèÙÙÿÿƒÄ‹E´Áà+E´Åƒ¸H—#u -ƒ¸L—#„Àº`—#‹E´Áà+E´ŋ‰E¸M¸‹D‰A‹E¸ƒX—#‰ƒ`—#‹Aƒ\—#‰B…Àyÿ‹`—#Bʚ;ë‰özÿɚ;~ ÿjʚ;‹E´Áà+E´ÿu´hPr"ÿ4Åd—#ÿ4Å`—#ÿÄÛ#‰ÃƒÄƒûÿuƒìÿ5ìÛ#jè+ùÿÿƒÄ‹E´Áà+E´‰ÅT—#ë‰ö‹E´Áà+E´ÇÅT—#ÿÿÿÿeô[^_]ÃU‰åWVSƒì‹u‹}ÇEäƒþw3ƒ}t-‹Exÿɚ;w!‹]{ ÿɚ;wúõ)ðƒ<Åp—#uûèÁŠÇ¸ÿÿÿÿ鐅ÿ„·õ)ðƒ<ÅT—#ÿuÇG ÇGëwƒìEèPjèGÇEäƒÄ¹`—#õ)ðō]è‹D;C|‹+Eè‰G‹D+Cë(¹`—#õ)òÁâ‹+EèH‰G‹D+Eìʚ;‰G ¹X—#õ)ðÁà‹‰‹D‰Gõ)ðÅºD—#ƒ<ÿtƒì ÿ4ÿÈÛ#ƒÄ‹Eƒxu
-ƒx „þºX—#õ)ð ŋ]‹‰
-‹C‰D
-÷E t¸`—#‹S‰‹S ‰Tëmvƒ}äuƒìEèPjèøEƒÄõ)ð ō‘`—#‹Eè‹]C‰`—#‹EìC ‰B…Àyÿ‰`—#Bʚ;ëzÿɚ;~ ÿjʚ;õ)ðVhPr"ÿ4Åd—#ÿ4Å`—#ÿÄÛ#‰ÃƒÄƒûÿuƒìÿ5ìÛ#jè­öÿÿƒÄõ)ð‰ÅT—#û¸eô[^_]ÃU‰åWVSƒì ‹]‹} ƒûwúÝ)؃<Åp—#uûèzˆÇ¸ÿÿÿÿ鷉öÝ)؃<ÅT—#ÿuÇG ÇGëoƒìEèPjèÒDƒÄ¹`—#Ý)؍ōuè‹D;F|‹+Eè‰G‹D+Fë'¹`—#Ý)ÚÁâ‹+EèH‰G‹D+Eìʚ;‰G ¹X—#Ý)ØÁà‹‰‹D‰Gû¸eô[^_]ÍvU‰åƒìƒ}t藇Çëv臇ǸÿÿÿÿÉÉöU‰åƒìƒ}tèg‡Ç¸ÿÿÿÿë‰öƒì ÿu èuÄÿÿ¸ƒÄÉÍvU‰åƒì‹E ƒ}tè,‡Ç¸ÿÿÿÿëv…Àt -ÇÇ@è¸ÉÃU‰åƒì‹UƒúwúÕ)Ѓ<Åp—#uûè܆ǸÿÿÿÿëvÕ)ЋÅl—#ûÉÐU‰åWVS¹»D—#¿@—#¾L—#‰öÍ)ÈÁàÇDÿÿÿÿX—#ÇBǍP0Ç:ÇD A‰‰Áƒù~ºÇ<ž#ÿÿÿÿÇ@ž#[^_]ÐU‰å]ÍvU‰å¸]ÉöU‰åVSœúX‰Ã¡ìÛ#@‰ÂÁâ)¾ÀÜ#‹DÖ0©t0©t)ƒì jè"Æÿÿ¡ìÛ#@‰ÂÁâ)¿DÖ‰$è"[ƒÄ‰ØPeø[^]ÃU‰åS‹]úût ¸ÿÿÿÿ…ÛuL¡ìÛ#@‰ÂÁâ)¹ÀÜ#‹DÑ0Áèƒà‹U ‰¡ìÛ#@‰ÂÁâ)Õ0‹
-%ÿþÿÿ ؉
-û¸‹$ÉÉöU‰åS‹]úût ¸ÿÿÿÿ…ÛuL¡ìÛ#@‰ÂÁâ)¹ÀÜ#‹DÑ0Áè ƒà‹U ‰¡ìÛ#@‰ÂÁâ)Õ0‹
-%ÿýÿÿ ؉
-û¸‹$ÉÉöU‰åWVSƒì ‹} ÇEðú‹EÇÿÿÿÿÇ@¾;5äÛ#s9v‹µ€Ü#ƒ{u ƒìWVÿS,ƒÄ…ÀxƒìWÿuVÿS0‰EðƒÄF;5äÛ#rÊû‹Eðeô[^_]ÉöU‰åƒì‹U¸ƒ:ÿt ¸ƒzu‹‹…€Ü#ƒìRÿ2ÿP4ƒÄÉÍvU‰åƒì‹U¸ƒ:ÿt‹‹…€Ü#ƒìRÿ2ÿP8ƒÄÉÉöU‰åƒì‹U¸ƒ:ÿt‹‹…€Ü#ƒìRÿ2ÿP<ƒÄÉÉöU‰åƒì‹U¸ƒ:ÿt‹‹…€Ü#ƒìRÿ2ÿP@ƒÄÉÉöU‰åVS‹u‹µ Ü#ƒìÿ°ôh™.#è^j»ƒÄ‰ö[‰ÐÁà)ÐÁà9°ÄÜ#……ƒÀ ºÀÜ#f|€ttfƒ|tlƒì f‹Dfƒøwƒì ·ÀP訃Äë%v·Ð¸s.#ú€t¸.#út¸‹.#P[‰ÐÁà)ÐÁàÿ°”ß#ÔÜ#PSh/#è¹iƒÄ Cû™ŽUÿÿÿeø[^]ÉöU‰åWVSƒì ‹E‹… Ü#‰Eð‹¸üƒì ‹Uð‹‚ðøPèk§‰ÆƒÄƒþÿu -¸ÿÿÿÿ…ÿtrOëՐv‰ÐÁà)Ѝ ÅöñÜ#tRQ@»ÌÜ#ƒ<D‹¤ß#‰ƒìý‰Ø‹Uð‚ðPVèX¥ƒÄ‹Eð˜ðSV聦ƒÄéiÿÿÿ‰ðeô[^_]ÉöU‰åWVSƒì‹E‹… Ü#‰Eð‹Mƒy(…©‹=ìÛ#‰ÐÁà)ЍžÄÜ#‹U93…‹M I‰ÂÁâ)ÂÁ⋄Љ„йÌÜ#‹D@‰D@‹„à‰„àƒÂ0¹ÀÜ#‹
-%ÿ÷ÿÿ‹\0ã ؉
-‹UðƒÂ¸ƒ¼º€ÿ•ÀH‹] ‰„š€é¢v‹U R‰ÂÁâ)ÂÁâ»ÄÜ#‹A‰„Ѓyt‹A‰‚ Ý#‹A‰„àë-‰ö‹] [‰ÐÁà)ÐÁà‹]ð‹“ô‰ Ý#‹“ô‰¤ß#ƒy$u‹E @‰ÐÁà)Ё ÅðÜ#¸ƒy ”ÀH‹U ‹Mð‰„‘ˆ¸ƒÄ[^_]ÃU‰åWVSƒì ‹U‹<• Ü#ƒ¿t8LJƒì‹E @‰ÐÁà)ЋŔß#‹—ðÂPÿu 襤酋E @‰ÐÁà)ЍÅöƒñÜ#t?K@¾ÌÜ#ƒ<11ºÄÜ#‹1„à‰1ƒì‹„Ћ—ðÂPÿu èG¤ë*ƒì‹E @‰ÐÁà)ЋŔß#‹—ðÂPÿu 诣ƒÄ‹E @‰ÐÁà)ÐfÇÅèÜ#€eô[^_]ÐU‰åWVSƒìH‹]ÇE¼ÇEÀfÇEÄÇEÈÇEÌÇEÐÇEÔÇEØÇEÜÇEà¶Ã -f‰E¸‹ Ü#‹€ø‰EÈÇE̍E¸jjPh"h¥.#è-¬ÿÿ‰ÆƒÄ ƒþÿuƒì h@/#èVËÿÿƒÄ‹< Ü#v‰ÐÁà)Ðfƒ<ÅèÜ#tµ€Gƒ<ÿtJÿëE‰öƒìv‰ÃÁã)ÃÁ㍃Ý#PjèJ;fǃèÜ#€ƒÄ‹ƒ”ß#‹—ðÂPVèࢃčeô[^_]ÐU‰åWVSƒì‹}hª.#è¾ÊÿÿèÆÿÿ‰EðƒÄ hPhÀ.#è£ÊÿÿÇ$èwÉÿÿ‰ÃƒÄShÞ.#è‡Êÿÿ‹Eð‰… Ü#ƒÄ jhê.#Sè=efÇCÆCÇCø…"ÇC$†"ÇC ì{"ÇC$Ì|"ÇC(0†"ÇC,Œ}"ÇC0<†"ÇC4D†"ÇC8P†"ÇC<"ÇC@†"ÇCD‡"ÇCHd‡"ÇCLl‡"ÇCPˆ"ÇCTLˆ"ÇCX€ˆ"ÇC\d‰"ÇC`„‰"ÇCdœ‰"ÇCh´‰"ÇCl̉"ÇCpä‰"ÇCtü‰"ÇCxŠ"ÇC|,Š"ǃ€DŠ"ǃ„\Š"¸ƒÄS‰öDŽ‚€ÿÿÿÿ@=™~í‹EH‰ƒüƒì ‹EÁàPè@Èÿÿ‰ƒð¾ƒÄ;u}ƒì ‹ƒððPè柃ÄF;u|åÿçw¿èÿ ¡v¿ ¡‰»ô‹E‰ƒøƒ} tƒìjÿuðh€"è8ÃÿÿƒÄeô[^_]ÐU‰åWVSƒì ‹M‹u ‹]‹ Ü#‰Eð…Éx[; -ðÛ#sS‹ Ü#‹@%ÿÿÿ=u=þ™wv‰ÐÁà)Ðfƒ<ÅèÜ#u -¸éèvv‰ÐÁà)Ð9 ÅÄÜ#t -¸&éȍv…Ûuv‰ÐÁà)Ё ÅðÜ#ë)ƒûuv‰ÐÁà)Ё$ÅðÜ#ÿ÷ÿÿë ¸郉öv‰ÐÁà)ÐÁà˜Ð¿ÄÜ#‹U9;t\f¸èÜ#€u=ƒì‹;‹Mð‹‘ðÂPV蘞‹E‰;ƒÄ‹Uð‹‚ð‹MÈPV赟ƒÄëv‰ÐÁà)ЋU‰Ŕß#¸eô[^_]ÍvU‰åVS‹M‹4 Ü#…Éx; -ðÛ#s‹ Ü#‹@%ÿÿÿ=t¸ÿÿÿÿëw¡ìÛ#@‰ÂÁâ)¸ÿÿÿÿ9 ÕÄÜ#uZúè!P‹ìÛ#R‰ÑÁá)Ñ»ÀÜ#f‰DËdžèX­ÿÿ¡ìÛ#@‰ÂÁâ)ƒì ¿DÓPèçOè>·ÿÿƒÄû¸eø[^]ÉöU‰å‹E‹… Ü#‹€ü]ÍvU‰å‹E‹… Ü#‹€ô]ÍvU‰åS‹]‹M …ÛxU;ðÛ#sM‹ Ü#‹@%ÿÿÿ=u7ù™wI‰ÐÁà)Ðfƒ<ÅèÜ#u¸ëMI‰ÐÁà)Ð9ÅÄÜ#t ¸&ë3‰öI‰ÁÁá)ÁÁá¸öñÜ#”À‹U‰‹‘”ß#‹E‰¸‹$ÉÉöU‰å‹E f8t·‹E -9Âu¸ë¸ÿÿÿÿ]ÐU‰å¸ÿÿÿÿ]ÉöU‰å¸]ÉöU‰å]ÍvU‰å¸]ÉöU‰åSƒì ‹E‹M ‹… Ü#I‰ÐÁà)ЋŔß#‹“ðÂPQè7œƒÄ‹]üÉÍvU‰åWVSƒì ‹E‹u ‹<… Ü#v‰ÐÁà)Ðfƒ<ÅèÜ#tµ€Gƒ<ÿtHÿëCƒìv‰ÃÁã)ÃÁ㍃Ý#PjèR5fǃèÜ#€ƒÄ‹ƒ”ß#‹—ðÂPVè蜃čeô[^_]ÐU‰åSƒì ‹E‹M ‹… Ü#I‰ÐÁà)ÐÁàfǀèÜ#€‹€”ß#‹“ðÂPQ蜜ƒÄ‹]üÉÃU‰å]ÍvU‰åWVSƒì ‹U‹• Ü#‰Eð‹U <•€‰ÆƒÆƒ<7~MƒìR‰ÃÁã)ÃÁ㍃Ý#Pjè‹4ÿ 7ƒÄ‹ƒ”ß#‹Mð‹‘ðÂPÿu 趛fǃèÜ#€ƒÄë‹E @‰ÐÁà)ÐfÇÅèÜ#eô[^_]ÐU‰åƒì‹E‹M ‹… Ü#ƒÀDŽˆ€ÿÿÿÿI‰ÐÁà)ÐfÇÅèÜ#hdÜ#QèðÉÿÿƒÄÉÍvU‰å‹E‹U ‹… Ü#ƒÀDŽ€R‰ÐÁà)ÐfÇÅèÜ#]ÃU‰åWVSƒì4‹u v‰EäÁà+EäfÇÅèÜ#EèPjè“3Mè»@B‹Eº÷ó‰Uà’€€‰E܋A‹U܍ЉE؉A»¡/¸D÷ë‰ÓÁû‹EØÁø)ÿƒÞC‹E÷ç‰×‰øÁèEè‹A»Êš;™÷û‰Ó‰YƒÄVhtŠ"ÿuìÿuèÿÄÛ#‰ÃƒÄƒûÿuƒìÿ5ìÛ#jèAäÿÿƒÄ v‰ÈÁà)ȉÅ ß#eô[^_]ÐU‰åƒìÿ5ìÛ#jèäÿÿ¸ƒÄÉÍvU‰åƒìÿ5ìÛ#jèñãÿÿƒÄÉÃU‰åƒìÿ5ìÛ#jèÙãÿÿƒÄÉÃU‰åƒìÿ5ìÛ#jèÁãÿÿƒÄÉÃU‰åƒìÿ5ìÛ#jè©ãÿÿƒÄÉÃU‰åƒìÿ5ìÛ#jè‘ãÿÿƒÄÉÃU‰åƒìÿ5ìÛ#jèyãÿÿƒÄÉÃU‰åƒìÿ5ìÛ#jèaãÿÿƒÄÉÃU‰åƒìÿ5ìÛ#jèIãÿÿƒÄÉÃU‰åƒìÿ5ìÛ#jè1ãÿÿƒÄÉÃU‰åƒìÿ5ìÛ#jèãÿÿƒÄÉÃU‰åWVSƒì‹MI‰ÃÁã)ÃÁãºÄÜ#‹‹4… Ü#¿ÀÜ#fÇD(€‹„Ћ–ðÂPQè9™Ç„àÿÿÿÿèQœÿÿƒÄeô[^_]ÉöU‰åVSƒì h`0#è
-Áÿÿè]¼ÿÿ‰ÆÇ$Œè׿ÿÿ‰Ã‰µ Ü#ƒÄ jhø/#Sè®[fÇCÆCÇC Œ"ÇCTŒ"ÇC `Œ"ÇC$ˆŒ"ÇC(ÇC, Œ"ÇC0¬Œ"ÇC4´Œ"ÇC8ÀŒ"ÇC<Ȍ"ÇC@äŒ"ÇCD "ÇCH4"ÇCL\"ÇCP„"ÇCT¬"ÇCXԍ"ÇC\ü"ÇC`(Ž"ÇCdPŽ"ÇChxŽ"ÇCl Ž"ÇCpȎ"ÇCtðŽ"ÇCx"ÇC|@"ǃ€h"ǃ„"ǃˆÿÿÿÿÇ$0#èô¿ÿÿƒÄ jVh¸"è,ºÿÿƒÄeø[^]ÉöU‰å‹M‹E ‹ Ü#fƒ8t·9Èu¸ƒºˆÿt¸ÿÿÿÿ]ÉöU‰å¸ÿÿÿÿ]ÉöU‰åƒì‹E‹… Ü#ÿ°ˆhe/#èìYƒÄÉÍvU‰å‹E‹… Ü#‹€ˆ]ÍvU‰å¸]ÉöU‰å]ÍvU‰å¸]ÉöU‰å]ÍvU‰å‹E @‰ÂÁâ)ÂfÇÕèÜ#]ÃU‰åƒìht/#èxYƒÄÿ5ìÛ#j è„àÿÿƒÄÉÍvU‰åƒìh{/#èPYƒÄÿ5ìÛ#j è\àÿÿƒÄÉÍvU‰åƒìh‚/#è(YƒÄÿ5ìÛ#j è4àÿÿƒÄÉÍvU‰åƒìh‰/#èYƒÄÿ5ìÛ#j è àÿÿƒÄÉÍvU‰åƒìh/#èØXƒÄÿ5ìÛ#j èäßÿÿƒÄÉÍvU‰åƒìh—/#è°XƒÄÿ5ìÛ#j è¼ßÿÿƒÄÉÍvU‰åƒìhž/#èˆXƒÄÿ5ìÛ#j è”ßÿÿƒÄÉÍvU‰åƒìh¥/#è`XƒÄÿ5ìÛ#jèlßÿÿ¸ƒÄÉÉöU‰åƒìh¬/#è4XƒÄÿ5ìÛ#jè@ßÿÿƒÄÉÍvU‰åƒìh³/#è XƒÄÿ5ìÛ#jèßÿÿƒÄÉÍvU‰åƒìhº/#èäWƒÄÿ5ìÛ#jèðÞÿÿƒÄÉÍvU‰åƒìhÁ/#è¼WƒÄÿ5ìÛ#jèÈÞÿÿƒÄÉÍvU‰åƒìhÈ/#è”WƒÄÿ5ìÛ#jè ÞÿÿƒÄÉÍvU‰åƒìhÏ/#èlWƒÄÿ5ìÛ#jèxÞÿÿƒÄÉÍvU‰åƒìhÖ/#èDWƒÄÿ5ìÛ#jèPÞÿÿƒÄÉÍvU‰åƒìhÝ/#èWƒÄÿ5ìÛ#jè(ÞÿÿƒÄÉÍvU‰åƒìhä/#èôVƒÄÿ5ìÛ#jèÞÿÿƒÄÉÍvU‰åƒìhë/#èÌVƒÄÿ5ìÛ#jèØÝÿÿƒÄÉÍvU‰åSƒì0‹]ÇEÜÇEàfÇEäÇEè¶Ãf‰EØÇEìEØjjPhD"hò/#趜ÿÿƒÄ ‹ Ü#‰Ã‰šˆƒûÿuƒì h 0#èÒ»ÿÿƒÄ[‰ÐÁà)ÐÇÅøÜ#ÿÿÿÿ‹]üÉÐU‰åôëýU‰åWVSƒì ‹} ¾ú»ëvCûÿ2Ý)ØÁàº`ž#€|t߃ìÿ4ÿuèaVƒÄ…Àuʾ…öt1ÿÀuèðnÇûéÜûÝ)؍…dž#éˉö÷Ç@uè¿nÇû髍v‹E‰Eð=ÿ~èžnÇû銉ö‹0¿#ƒúÿtqÕ)Ѝ<…w‹†dž#£0¿#ƒì ÿuèV@‰$臹ÿÿ»`ž#‰ƒÄÿuPè7U‹Eð‰‡hž#‡lž#‰$è(‘ÆDƒÄû‡dž#ëvènÇû¸eô[^_]ÍvU‰åWVSƒì ¾ú¿»`ž#vý)øÁà€|tƒìÿ4ÿuèUƒÄ…Àu¾Gÿÿ~ʅötJƒì ÿuèOUƒÄ@Pý)ûÁã¾`ž#ÿ43è%¹ÿÿƒÃÆD3¡0¿#‰ƒdž#‰=0¿#ƒÄûë‰öèSmÇû¸eô[^_]ÍvU‰åWVSƒì ‹}?ÿw‹Õ)Ѐ<…xž#uèmǸÿÿÿÿé‰öèÏæÿÿúè5B‹ìÛ#R‰ÑÁá)Ñf‰ÍÈÜ#‹Õ)Ѝ4…`ž#ƒ~ ÿu
-ƒ~…“ƒìWjÿèW#ƒÄh¤Ü#jè8)ƒÄU表Ü#;øÛ#|¡¤Ü#+ôÛ#‰E表Ü#+øÛ#ë!‰ö¡¤Ü#+ôÛ#H‰E表Ü#+øÛ#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыìÛ#R‰ÐÁà)Ð) Å Ý#ƒì Qèú›ÿÿƒÄƒ=üÛ#ÿtƒì ÿ5üÛ#ÿÈÛ#ÇüÛ#ÿÿÿÿƒÄ‹ -ìÛ#I‰ÐÁà)ЋÅÄÜ#ƒì‹… Ü#QPÿRH‹ -ìÛ#I‰ÐÁà)лÀÜ#fÇDÃ(Íǂ`º#‹‰‚dº#ƒÄF PQ辏ÇìÛ#ÿÿÿÿÇÜ#ÿÿÿÿèõÿÿ¡ìÛ#@‰ÂÁâ)¿DÓ‰$è…@èܧÿÿƒÄûèÿäÿÿë8ÿNƒìWjÿèW#¡ìÛ#@‰ÂÁâ)¿ÕÈÜ#‰$èF@蝧ÿÿƒÄû¸eô[^_]ÃU‰åWVSƒì ‹}‹]?ÿw‹Õ)Ѐ<…xž#uè¯jǸÿÿÿÿéVv…ÛuúëúèÒ?‹ìÛ#R‰ÑÁá)Ñf‰ÍÈÜ#‹Õ)Ѝ4…`ž#…Ûu0ƒ~ ÿu‹E 9F}èMjÇ û¸ÿÿÿÿéó‹E )Fûéâèäÿÿƒ~ ÿu ‹E 9F‘ƒìWjÿèW#ƒÄh¤Ü#jèš&ƒÄU表Ü#;øÛ#|¡¤Ü#+ôÛ#‰E表Ü#+øÛ#롤Ü#+ôÛ#H‰E表Ü#+øÛ#ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыìÛ#R‰ÐÁà)Ð) Å Ý#ƒì Qè^™ÿÿƒÄƒ=üÛ#ÿtƒì ÿ5üÛ#ÿÈÛ#ÇüÛ#ÿÿÿÿƒÄ‹ -ìÛ#I‰ÐÁà)ЋÅÄÜ#ƒì‹… Ü#QPÿRH‹ -ìÛ#I‰ÐÁà)лÀÜ#fÇDÃ(͋E ‰‚`º#‹‰‚dº#ƒÄF PQè#ÇìÛ#ÿÿÿÿÇÜ#ÿÿÿÿèZ›ÿÿ¡ìÛ#@‰ÂÁâ)¿DÓ‰$èê=èA¥ÿÿƒÄûèdâÿÿë<‰ö‹E )FƒìWjÿèW#¡ìÛ#@‰ÂÁâ)¿ÕÈÜ#‰$è§=èþ¤ÿÿƒÄû¸eô[^_]ÐU‰åWVSƒì ‹}?ÿw‹Õ)Ѐ<…xž#uèhǸÿÿÿÿéU‰öè,…À„‡œúX‰Æ‹Õ)Ѝ…`ž#‹JA‰J‹Z ƒûÿtG‹Ý`º#9È<)Á‰È‰BƒìB PSèƊ[‰ÐÁà)ЋÅÄÜ#ƒÄ‹• Ü#SRÿPDèÿÿƒÄƒìWjÿèW#ƒÄ‰ðPé¼‰öúèª<‹Ü#R‰ÑÁá)Ñf‰ÍÈÜ#‹Õ)Ѝ…`ž#‹JA‰J‹Z ƒûÿtG‹Ý`º#9È<)Á‰È‰BƒìB PSè&Š[‰ÐÁà)ЋÅÄÜ#ƒÄ‹• Ü#SRÿPD荙ÿÿƒÄƒìWjÿèW#¡ìÛ#@‰ÂÁâ)¿ÕÈÜ#‰$è <èb£ÿÿƒÄû¸eô[^_]ÐU‰åWVSƒì ‹] ÇEð‹E8ÿw‹Õ)Ѐ<…xž#uèlfǸÿÿÿÿéÊèc*…À„ÃœúX‰Â‰Uì‹E‹Õ)Ѝ4…`ž#^‹^ ƒûÿts݉‹€`º#;F_¿`º#ÇEðv‹F+:‰FƒìF PS艍[‰ÐÁà)ЋÅÄÜ#ƒÄ‹• Ü#SRÿPD‹^ ƒÄƒûÿt݋:;F~°ƒìÿujÿèW#ƒÄƒ}ðtèÿÿ‹Uì‰ÐPéõúèÊ:‹Ü#R‰ÑÁá)Ñf‰ÍÈÜ#‹E‹Õ)Ѝ4…`ž#^‹^ ƒûÿtr݉‹€`º#;F^¿`º#ÇEð‰ö‹F+:‰FƒìF PSè.ˆ[‰ÐÁà)ЋÅÄÜ#ƒÄ‹• Ü#SRÿPD‹^ ƒÄƒûÿt݋:;F~°ƒìÿujÿèW#ƒÄƒ}ðtèd—ÿÿ¡ìÛ#@‰ÂÁâ)ƒì ¿ÕÈÜ#Pèð9èG¡ÿÿƒÄû¸eô[^_]ÉöU‰åWVSƒì ¾¿dž#õ)óÁãǃ`ž#‰4;ǃhž#ƒì ƒlž#PèB‡ƒÃF‰;ƃhž#ƒÄ‰Æþÿ~±ÇXº#ÿÿÿÿÇ0¿#ƒìjhøž"è:ªÿÿƒÄeô[^_]ÍvU‰åVS‹uú>ÿw‹Õ)Ѐ<…xž#uèÉcÇû¸ÿÿÿÿënvƒì ‹Õ)л`ž#ÿ4ƒèUKƒÄ@P‹Õ)Ðÿ4ƒè1¯ÿÿ‹Õ)ÐÆDƒ‹Õ)Ћ0¿#‰…tž#‹£0¿#ƒÄû¸eø[^]ÉöU‰åƒì‹Mú9ÿw‹Õ)Ѐ<…xž#uècÇû¸ÿÿÿÿëb‰ö‹Õ)Ѓ<…lž#ÿtèîbÇû¸ÿÿÿÿë8‹Õ)ÐÆ…xž#‹Õ)Ћ0¿#‰…tž#‹£0¿#û¸ÉÉöU‰åSƒì‹M‹] 9ÿw‹Õ)Ѐ<…xž#uèubǸÿÿÿÿë_ú‹Õ)ÐÁàƒ¸lž#ÿu ‹€hž#‰ë7‰öÇ‹Õ)Ћ…lž#¹ÈÜ#vÿ @‰ÐÁà)ЋDÁPƒøÿuëû¸‹]üÉÃU‰åVS‹u‹M¸ùÿ‡–ú‹0¿#‰ƒúÿtnÕ)Ћ…tž#£0¿#‹Õ)л`ž#ǃ‹Õ)Љ …hž#ƒì ‹Õ)Ѝ…lž#P聄‹Õ)ÐÆDƒƒÄëègaÇû¸ÿÿÿÿëû¸eø[^]ÍvU‰åƒì‹M9ÿw‹Õ)Ѐ<…xž#uèaǸÿÿÿÿë=ú‹Õ)Ѝ…`ž#ƒx ÿuƒxuèì`Ç û¸ÿÿÿÿë ‰öÿHû¸ÉÐU‰å‹E@‰ÂÁâ)¸fƒ<ÕèÜ#”À]ÐU‰åVS‹][‰ÐÁà)Ѝ4Åfƒ¾èÜ#uAƒì‹Ýdº#Õ)Ѝ…lž#PS考‹†ÄÜ#ƒÄ‹… Ü#SPÿRD¸ƒÄ됸eø[^]ÃU‰åVSƒ=ôW#…ÚÇôW#¹»€¢%¾„¢%‰ÁàP ÆÇ2ÿÿÿÿÆDAƒùváƒìjjh@¿#èÜýÿÿ¹ƒÄ¾ä¤%»à¤%‰ö‰ÁàQ‰0Ɖуù -véǧ%ÿÿÿÿƧ%Çؤ%¹¾D§%»@§%vÍ)ÈÁàQ‰0ƉуùvãÇpª%ÿÿÿÿÆlª%Ljª%eø[^]ÐU‰åWVSƒìŠEˆEóŠUˆUòfÇEæ¾<u€út €}óu€}òuè_Ǐ¸ÿÿÿÿé7‰öúƒ=ؤ%ÿuèí^ǍûÇEìÿÿÿÿ됡ؤ%€‹Õä¤%‰ؤ%û‰Eìƒ}ìÿu -¸ÿÿÿÿéìvƒì h@¿#ègñÿÿƒÄ‹]¾¹º÷ñ‰×ëf‰ö¿€<Å ¢%t0ƒìÿu¿ōƒ€¢%Pè³EƒÄ…Àu€»˜¢%„Ÿ¾ëG¹‰øº÷ñ‰×fÿEæfƒ}懜‰ó„Ût–¿Áãƃ ¢%ƒìÿuƒ€¢%Pè÷D‹E쉃”¢%ƒÄ€}óu‰Â’‹] f‰Åè¤%ëv‹E썀‹E ¯Ef‰Õè¤%úƒì ‹U썒Áã·ƒè¤%Pèݨÿÿºì¤%‰ƒÄû…Àu%è”]ǒƒì h@¿#èAõÿÿ¸ÿÿÿÿ魍v‹E썀ÁãS‰Uà¾à¤%‹ƒì¤%‰‚ä¤%‰2ƒìjjƒü¤%Pè:ûÿÿƒÄ ·D3Pjƒ¥%Pè#ûÿÿƒÄ jjÃ¥%SèûÿÿŠ]ó‹Eàˆ\0ƒÄúƒ=ˆª%ÿuèø\ǎûÇEèÿÿÿÿ롈ª%Å)‹•D§%‰ˆª%û‰Eèƒ}èÿu_ƒì h@¿#èvôÿÿ‹Eèéä‰öè§\ǐƒì h@¿#èTôÿÿ¸ÿÿÿÿéÀ‰öèƒ\Ǒƒì h@¿#è0ôÿÿ¸ÿÿÿÿ霉ö‹EèÁà+EèÁà¹@§%ŠUòˆT P‹]ì‰
-‹] f‰\
-ǀD§%ÿÿÿÿ‰ºH§%‹]썛ÆÕà¤%ƍ¿ōr¿€¢%€|>t%ƒì¶D>Pšœ¢%SèGõÿÿÆD>‰$èšøÿÿƒÄƒì h@¿#èŽóÿÿ¿EèƒÄeô[^_]ÍvU‰åWVSƒìŠEˆEóŠ]ÇEè¿ÆEç<u„Ût €}óu€ûuè‚[Ǐ¸ÿÿÿÿé0‰öúƒ=ˆª%ÿuèa[ǎûÇEìÿÿÿÿë ¡ˆª%Å)‹•D§%‰ˆª%û‰Eìƒ}ìÿu ¸ÿÿÿÿéߐ‹EìÁà+EìÁàº@§%ˆ\ ‹M f‰LǀD§%ÿÿÿÿƒì h@¿#è°íÿÿƒÄ‹U¾¹º÷ñ‰Öë]v¶€<Å ¢%u ¿ÆEçë8ƒìÿu¶ŀ¢%PèöAƒÄ…Àu¿ëF¹‰ðº÷ñ‰ÖÿEèƒ}è‡Ò‰ù„Ét €}çuR¶Á㸀¢%ÆD ÆDƒìÿuPè>AƒÄ jjÃœ¢%Sè/øÿÿÇ$@¿#èçñÿÿƒÄ jjSè:ïÿÿëM¶ōCº€¢%€|t'þDƒì h@¿#è®ñÿÿƒÄ jjƒœ¢%Pèûîÿÿ됃ì h@¿#è‹ñÿÿƒÄ¶‹<Ŕ¢%¿ŠUó:Åø¤%tèªYǓ¸ÿÿÿÿéX‰ö€}óu¿·Åè¤%9E u€}ót(¿·Åè¤%™÷} …ÒtèdYǔ¸ÿÿÿÿéƒì h@¿#è ìÿÿ¶‹Ť¢%ƒÄƒúÿ„­€}óu#è&YǕƒì h@¿#èÓðÿÿ¸ÿÿÿÿéЍÕ)з…T§%9E t"èíXǔƒì h@¿#èšðÿÿ¸ÿÿÿÿ鋋MìÁá+M썶Å »„¢%‹‰D§%‹Mì‰ ë/‰öèŸXǑƒì h@¿#èLðÿÿ¸ÿÿÿÿë@¶‹Uì‰Ť¢%ƒì h@¿#è*ðÿÿ‹EìÁà+EìÁàH‰±H§%º@§%‰<Æ¿EìƒÄeô[^_]ÉöU‰åWVSƒì¿E‰Eì‰ÇÁç)ÇÁ獗@§%‰Uðh@¿#èÏêÿÿ‹Mð‹Y›ÁãC‰E躄¢%‹€Áà°à¤%ƀà¤%F‰$èôÿÿF ‰$è„ôÿÿF$‰$èyôÿÿƒÄú·FPÿv èX£ÿÿû¹„¢%‹Eè‹ú ’¡Ø¤%‰Íä¤%‰ؤ%ûƇ@§%ƒÃ ‹Uð‹B‰ƒ„¢%ú¡ˆª%‰‡D§%‹Mì‰ -ˆª%ûƃ€¢%Ç$@¿#è
-ïÿÿƒÄeô[^_]ÍvU‰åWVSƒì ‹u ŠM¿UÕ)Ѝ…@§%‰Eð‹@€Åà¤%‹Eð€x uèûVǔ¸ÿÿév€;uèÞVǖ¸ÿÿéù‰ö€{tQ€{u,ƒì¶ÁP‹Uð·BPC PèÈëÿÿƒÄ…Àt;¸évƒì¶ÁP‹Uð·BPC PèœëÿÿƒÄ…ÀuÔƒì CPè-éÿÿƒÄ‹Uð·B‹{‰ÁÁéüó¥¨tf¥¨t¤·B‰ÁK‰K·S‰ÐC 9Ár‰È)ЉC€{u ƒì CPë8‰ö€{uƒì‹Uð·BPC$PèZïÿÿëƒì‹Uð·BPC$PèDïÿÿC‰$èíÿÿƒÄ¸eô[^_]ÐU‰åWVSƒì ‹} ŠM¿UÕ)Ѝ…@§%‰Eð‹@€Åà¤%‹Eð€x uè‹Uǔ¸ÿÿév€;uènUǖ¸ÿÿéù‰ö€{tQ€{u,ƒì¶ÁP‹Uð·BPC$PèXêÿÿƒÄ…Àt;¸évƒì¶ÁP‹Uð·BPC$Pè,êÿÿƒÄ…ÀuÔƒì CPè½çÿÿƒÄ‹Uð·B‹s‰ÁÁéüó¥¨tf¥¨t¤·B‰ÁK‰K·S‰ÐC 9Ár‰È)ЉC€{u ƒì CPë8‰ö€{uƒì‹Uð·BPC Pèêíÿÿëƒì‹Uð·BPC PèÔíÿÿC‰$è-ìÿÿƒÄ¸eô[^_]ÐU‰åSƒìh0#è;ƒÄÿ5ؤ%h‹0#è;»ƒÄÝ)ØÁà€¸@§%t8@§%‹B€Åà¤%ƒì ÿp ÿp$‹B€ŀ¢%PShŸ0#è®:ƒÄ Cƒûv­‹]üÉÃU‰åƒì`¿MÍ)ȋ…P§%’Åà¤%ÿp ÿp$RQhÀ0#E¨Pèf:ƒÄ ÉÐU‰åSƒì‹]h@¿#èHæÿÿ¿ÓÕ)Ѝ …‹X§%€Å ƒÄ€º€¢%u ‹D§%‰‚„¢%¿ÃÅ)ÂÁâƂ@§%ú‹ -ˆª%‰ŠD§%£ˆª%ûƒì h@¿#èÓêÿÿƒÄ‹]üÉÍvU‰åWVSƒì ‹u ‹E‹<…€Ü#ú‹^…Ûu-ƒì j èžÿÿƒÄ…ÀtÇÿÿÿÿÇ@Ç@ÿÿÿÿ‹U‰‰F‹;ìÛ#u û¸#é~ƒ;ÿtc¾ÀÜ#‰ö‹ -ìÛ#I‰ÐÁà)Ћ‰TÆP‹C‰„¬¡ìÛ#‰CÿCè…ÿÿ¡ìÛ#@‰ÂÁâ)ƒì ¿DÖPèŸ'èöŽÿÿƒÄûúƒ;ÿu¤¡ìÛ#ÿD‡D¡ìÛ#‰û¸eô[^_]ÉöU‰åWVSƒì ‹E ‹x¸…ÿ„À‹;ìÛ#tû¸髍vúè*'‹ìÛ# [‰ÊÁâ)Êf‰ÕÈÜ#‹E‹…€Ü#ÿL˜DÇÿÿÿÿ‹_ÇGÿÿÿÿƒûÿt-p ‰Ù[‰ÐÁà)ЉÅÝ#‹œž DŽŽ ÿÿÿÿƒûÿuÖÇGè„ÿÿ¡ìÛ#@‰ÂÁâ)ƒì ¿ÕÈÜ#Pè¢&èùÿÿƒÄû¸eô[^_]ÃU‰åVSƒì h$1#è~ÿÿè -™ÿÿ‰ÆÇ$èKœÿÿ‰Ã‰µ€Ü#ƒÄ jh81#Sè"8fÇCÍÆCÇCÇC8¯"ÇC „¯"ÇC$¯"ÇC(˜¯"ÇC,ȯ"ÇC0ô¯"ÇC4<°"ÇC8œ¬"ÇC<„°"ÇC@„­"ºƒÄsK •ÇD@DŽ ÿÿÿÿBú™~ݍeø[^]ÉöU‰åVS‹E‹…€Ü#ƒì h1#è7¾ƒÄƒÃƒìÿt³@h1#èû6ƒÄFþ™~ãeø[^]ÃU‰å¸ÿÿÿÿ]ÉöU‰å]ÍvU‰åƒì‹E‹U ‹…€Ü#ƒÀƒ|@tƒìRj
-èȽÿÿƒÄÉÍvU‰å‹U :t ‹E -9u
-¸ëv¸ÿÿÿÿ]ÐU‰åSƒì‹] j èӚÿÿ‰ÂƒÄ¸ …Òt!ÇÿÿÿÿÇBÇBÿÿÿÿ‹E‰‰S¸‹]üÉÍvU‰åSƒì‹] ‹Cƒxt ¸ë&‰öúƒ{tƒìj ÿsèäšÿÿÇCƒÄû¸‹]üÉÍvU‰åWVSƒì ‹}‹u ú‹^…Ûu*ƒì j è3šÿÿƒÄ…ÀtÇÿÿÿÿÇ@Ç@ÿÿÿÿ‰>‰Fƒ;ÿt
-û¸ë"‰ö¡ìÛ#‹½€Ü#ƒÂÿD‚@¡ìÛ#‰û¸eô[^_]ÃU‰åWVSƒì ‹E ‹U‹•€Ü#ú‹p¸…ö„V‹;ìÛ#u û¸#éA‹ìÛ#‹F ¿ÀÜ#;„“°v -¸é v¡ìÛ#‹Œƒ°‹“¬…Òt‰ö‹;ìÛ#…Š‹R…Òu븅À…†‹ -ìÛ#I‰ÂÁâ)‹ƒ¬‹‰D×P‹ƒ¬‹@‰„‹‹“¬¡ìÛ#‰B‹ƒ¬ÿ@èj€ÿÿ¡ìÛ#@‰ÂÁâ)ƒì ¿D×Pèù"èPŠÿÿƒÄûúéRÿÿÿ‰ö¸;J ’Àérÿÿÿ‹E‹…€Ü#¡ìÛ#ÿDƒD¡ìÛ#‰¹‹ƒ¬‹V ë‰ö‰Á‹A…Àt;P sò…Ét‰q됉³¬…Àt‰p‰F‰Nû¸eô[^_]ÍvU‰åWVS‹}‹E ‹ ½€Ü#ú‹X¸…Û„Ù‹;ìÛ#uû¸#éčv‹ìÛ#‹C ;„‘°s
-¸饡ìÛ#‹´°‹‘¬…Òt‰ö‹;ìÛ#u‹R…Òu︅Àuû¸ëk‰ö¸;r ’Àëåv‹ ½€Ü#¡ìÛ#ÿDD¡ìÛ#‰¾‹¬‹S 됉ƋF…Àt;P sò…öt‰^됉™¬…Àt‰X‰C‰sû¸[^_]ÉöU‰åWVSƒì ‹E ‹x¸…ÿ„ï‹;ìÛ#tû¸éڍvúè&!‹ìÛ# [‰ÊÁâ)Êf‰ÕÈÜ#‹E‹…€Ü#‰EðÿL˜DÇÿÿÿÿ‹_ÇGÿÿÿÿƒûÿt2‰ÆƒÆv‰Ù[‰ÐÁà)ЉÅÝ#‹œžDŽŽÿÿÿÿƒûÿuÖÇG‹O‹W…Éu -‹Eð‰¬ë‰ö‹G‰A…Òt‹G‰Bèã}ÿÿ¡ìÛ#@‰ÂÁâ)ƒì ¿ÕÈÜ#Pèo èƇÿÿƒÄû¸eô[^_]ÐU‰åVSƒì hd1#èJ—ÿÿèْÿÿ‰ÃÇ$€è–ÿÿ‰Æ‰4€Ü#ƒÄ jhx1#Vèî1fÇFÌÆFÇFÇF@¶"ÇF Ķ"ÇF$ð¶"ÇF( ·"ÇF,h·"ÇF0”·"ÇF4ì·"ÇF8ü°"ÇF<„²"ÇF@ˆ³"ºƒÄ^N•ÇD@DŽ°ÿÿÿÿDŽÿÿÿÿBú™~Òdž¬eø[^]ÐU‰å‹U‹M ¸ÿÿÿÿ…Òt;‹‹…€Ü#ƒxu‹@%ÿÿÿ=Ìu…Ét ‹B‹@ ‰ë
-‰ö¸ÿÿÿÿ됸]ÐU‰å‹U‹M¸ÿÿÿÿ…Òt@‹‹…€Ü#ƒxu‹@%ÿÿÿ=Ìt¸ÿÿÿÿ됅Ét‹B‹@ ‰‹R‹E ‰B ¸]ÃU‰å‹E‹M ‹U‹…€Ü#‰”ˆ°]ÃU‰åWVSƒì‹E‹<…€Ü#h1#è0»ƒÄwƒìÿtž@h1#èó/ƒÄCû™~ãƒì hB1#èÚ/»ƒÄ‰öƒìÿ´Ÿ°h^1#è¼/ƒÄCû™~àeô[^_]ÃU‰å‹U :t ‹E -9u
-¸ëv¸ÿÿÿÿ]ÐU‰åS‹E‹U ‹]‹ …€Ü#Áâ‹C‰„°ÇD
-D‹$ÉÉöU‰åVS‹E‹u ‹…€Ü#ƒ|³DtƒìVj
-èD¶ÿÿƒÄë vÇD³DDŽ³°ÿÿÿÿeø[^]ÉöU‰å‹U :t ‹E -9u
-¸ëv¸ÿÿÿÿ]ÐU‰åSƒì‹] jè3“ÿÿ‰ÂƒÄ¸ …Òt1ÇÿÿÿÿÇBÇBÿÿÿÿ‹E‹@‰B ÇB‹E‰‰S¸‹]üÉÍvU‰åSƒì‹] ‹Cƒxt ¸ë&‰öúƒ{tƒìjÿsè4“ÿÿÇCƒÄû¸‹]üÉÍvU‰åWVSƒì$·]Sh‚1#è .‰Ø-yƒÀÁèƒÄ ·À‰Eè@ÛÁã¿@·%ÿt8CP‰Eä·8Ph‰1#èá-ƒÄ ÿt;·D;Ph—1#èÊ-ƒÄ ÿt; s·>Ph¨1#è±-ƒÄ ÿt>·D>Ph¹1#èš-ƒÄ ‹Uä·D:P·DLPhÊ1#è~-‹UèÕƒÄ·ØShÛ1#èc-EóPEòPEìPS蹃ĶUóR¶UòRÿuìPh 2#è6-ƒÄ eô[^_]ÍvU‰åWVSƒì ‹E‹U‹]¹‹u ƒî‰ƒî‰º :&fƒ= :&yA¿Áfƒ<Byfù™~îfù™~ƒì hð1#èÎ,¸ƒÄé ¿Á<¹ :&‰Úf Ê€f‰Ǎ<ÿÁçº@·%‰tÇD _ÇDfŒÙf‰LfÇfÇDÇD _ ‹M‰ ÇDÇDO0ÇDÇD Ǎ_@ÇÇD‰t‰t fŒÉf‰L fŒÙf‰LfŒÛOPf‰\fŒÛf‰fÇD 0fÇD0O`fÇfÇDfÇDÇ¬·%¾`;&¹üó¥Å˜eô[^_]ÐU‰åVS‹u ¿E-‰Â…ÀyP‰ÐÁø@ÀÁà¹@·%f‰tX@Vf‰T f‰t ƒÀPf‰tf‰4[^]ÉöU‰å¿E-‰Â…ÀyP‰ÐÁøfDŽ :&]ÉöU‰åSƒì‹]¿E Ph2#Sè~3‰ØƒÄ‹]üÉÃU‰åVS趉Æès»‰öƒìh,Â"SèƒÄh¸»"SèìƒÄCƒû~ۉðeø[^]ÉöU‰åƒìèaÉÍvU‰åSƒì‹]‹øW#€82uºð°îƒìShb3#èˆ*ƒÄÁ㋃øW#@Ph½=#èp*ƒÄÿ³<X#ènƒÄ‹]üÉÉöU‰åƒìÿuhy3#èE*èèûÇ$èG7ƒÄÉÉöU‰åWVSƒì‹E‹} ƒ=„µ%„à…ÿ„Ø¡¬%€€€ źm¶‰È÷â‰È)ÐÑ草ÁÁé
-‰O¡¬%ÀP‰ÐÁà)кè‰Ó™÷û’’’щW¡¬%ÀP‰ÑÁá)ѾÓMb‰È÷îÁú‰ÈÁø‰Ó)øƒÞC÷o‰ÑÁù‹GÁø)Á‰È؉‹OÁú‰ÈÁø)’’’’’’Áâ)э ‰ ‰ ‰Áá‰O‹éԉö]衬%€€€ źm¶‰È÷â‰È)ÐÑ草ÁÁé
-¡¬%ÀP‰ÐÁà)кè‰Ö™÷þ’’’щS¡¬%ÀP‰ÑÁá)ѾÓMb‰È÷îÁú‰ÈÁø)‰Uè‹{¸ƒÞC÷ï‰ÑÁù‰øÁø)Á‰ÈEè‰ùÁú‰ÈÁø)’’’’’’Áâ)э ‰ ‰ ‰Áá‰K‹E荀€€€€€‰ÃÁã‰È÷îÁúÁù)ʍéèvƒøuc¸ƒ=ô«%…Ρø«%€€€€€€‰ÃÁã‹ -ü«%ºÓMb‰È÷êÁúÁù)ÊӅÿ„…¡ø«%‰¡ü«%éqvƒø…ç¶ä«%ƒøtƒø…Àt
-ë,ƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹ -ð«%f)Ù·É -¬%º×®¬]‰È÷êÁú‰ÈÁø)¬%’BÁà)Ѝ‚‰ÂÁâ Ð)Á‰È£¬%f‰ð«%…ÿ„̍€€€ źm¶‰È÷â‰È)ÐÑ草ÁÁé
-‰O¡¬%ÀP‰ÐÁà)кè‰Ó™÷û’’’щW¡¬%ÀP‰ÑÁá)ѺÓMb‰È÷êÁú‰ÈÁø‰Ó)Ëw¸ƒÞC÷î‰ÑÁù‰ðÁø)Á‰È؉‰óÁú‰ÙÁù)ʍ’’’’’’Áâ‰Ø)Ѝ€€€Áà‰G‹¬%’’’4Õ¹Á6ۉð÷é‰Ó3‰ÁÁù
-‰ð™‰È)Ћ -¬%ɍ‘ÑÁâ)ʉÑÁá)эÈ鍃ø…ƒ=ô«%…rUè¡ø«%‰¡ü«%‰B»@¹C°Ò‰Êî‰Úì¶ÈìÁàf¶Ñ з𷀵%9Æv%h†3#j_h˜3#hŸ3#èm%Ç$èmƒÄ·€µ%)ó¯è«%·€µ%‰Ø‰Ñº÷ñ‰Ãº °
-îì©t‹ -è«%;ÍÌÌ̉ð÷âÁê9Ós‰Ëu荛€€‹V‰Eä‰F¸¡/¸D÷mä‰ÑÁù‹EäÁø)Á‰ÈEè‹N¸¡/¸D÷éÁú‰ÈÁø)’’’’’’’’’Áâ )щN¡ø«%€€€€€€Áà‰Eä‹ -ü«%ºÓMb‰È÷êÁúÁù)ʋEäÐÅÿt ‰ð‹‰‹@‰G‰Øëv¸eô[^_]ÍvU‰åVSƒìŠEˆE÷ÿ¤X#ƒ=¤X#uƒ=€X#tÿ€X#¶E÷€Áຬª%ƒ<uIÇö€°ª%tûƒì ¶]÷›Áã¾ ª%ÿ43ÿ“¤ª%ƒÄöDtú¶E÷€Ç…¬ª%ÿˆX#ƒ=¤X#uƒ=„X#tÿ„X#ÿ -¤X#eø[^]ÍvU‰åWVSº¿¬ª%¾¨ª%»¤ª%¹ ª%’ÁàÇ8‰0ÇÇBƒú~ÜǤX#[^_]ÐU‰åVS‹U‹] ‹uú’ƒ<…¬ª%t÷Æu¸ÿÿÿÿëH’ …ǁ¬ª%û…Ût‰™¤ª%º ª%¨ª%‰‰t
-됍’Ç…¬ª%¸[^]ÐU‰å¡¤X#]ÉöU‰åSƒì¶ä«%ƒøt!ƒø…Àt ë.‰öƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹ -ð«%f)Ù·É -¬%º×®¬]‰È÷êÁú‰ÈÁø)¬%’BÁà)Ѝ‚‰ÂÁâ Ð)Á‰ -¬%f‰ð«%ÿ¤X#ƒ=¤X#uƒ=€X#tÿ€X#¡ü«%‰ÃD¿#º¡/¸D‰Ø÷êÁú‰ÙÁù)Êø«%’’’’’’’’’Á⠉Ø)Уü«%‹à«%ë$‹¡ì«%‰‰ì«%‰à«%ƒì ÿrÿRƒÄ‰Ú…Òt‹B ;ø«%;ø«%uƋB;ü«%~»ƒ=¤X#uƒ=„X#tÿ„X#ÿ -¤X#‹]üÉÃU‰åWVSƒì‹uhˆÐ"j@èØ -ƒÄƒ>t,ƒì h¹3#èß »ÿÿƒÄ¿@¹C°8‰ÊîˆØ‰úîëaƒì hÕ3#è³ ‹N‰ -è«%ɍA‰ÂÁâ‰Ñ)ÁºÓMb‰È÷âƒÄ‰ÑÁéu¹f‰ -€µ%‰Ë¿@¹C°4‰Êî‰úˆØî‰ØfÁèî‹£ô«%ƒ=ä;&~»A¹C°p‰ÊÚîîÆä«%ë%Æä«%»B¹C°°‰ÊÚîîºa°îº!ì%þî¹¾ ¬%»$¬%ƒùbIÁà8¬%‰0I‰LÃAƒùc~ßÇhµ%Çì«% ¬%Ç€X#Ç„X#¡è«%€€€Áà£D¿#Çü«%Çø«%Ǭ%Ǭ%fÇð«%ƒ=ô«%uÇÄÛ#xÇ"ÇÈÛ#È"ëÇÄÛ#`È"ÇÈÛ#ìÎ"eô[^_]ÃU‰å‹E£€X#]ÍvU‰å‹E£„X#]ÍvU‰å‹E£X#]ÍvU‰åWVSƒì ‹E‹U ‰Eè‰Uì¸ÿÿÿÿƒ=ì«%tl‹ -ì«%‹£ì«%‹E‰A‹Eè‰A ‹Eì‰A‹E‰A»‹à«%}è‹uè됋…Òt‰ð;B  -;B u‹G;B~‰Óëâ‰ö…Ût‰ ë‰ -à«%‰‹AƒÄ [^_]ÐU‰å‹E¹‹à«%됉ы…Òt;Buó¸ÿÿÿÿ…Òt$…Éu
-‹£à«%됋‰¡ì«%‰‰ì«%¸]ÃU‰åWVSƒì,‹E‹U ‰Eè‰Uì¸ÿÿÿÿƒ=ì«%„q‹5ì«%‹£ì«%‹E‰F‹Eè‰F ‹Eì‰F‹E‰Fº‹à«%}è‹Mè됋…Ût‰È;C  -;C u‹G;C~‰Úëâ‰ö…Òt‰2鐉5à«%ƒ=„µ%…ôƒìEàPjè3óÿÿ‹à«%ƒÄ‹Eà;B  -;B u‹Eä;B~ÇEÜÇEØëK}؋à«%Mà‹B;A|‹B +Eà‰E؉Ћ@+Aë ¡à«%‹@ +EàH‰EØ¡à«%‹@+Eäʚ;‰G‹E؍€€€€€€Áà‰EԋMÜ¿ÓMb‰È÷ïÁúÁù)ÊUԍҍB‰ÂÁâ)‰Ð÷çÁê¸ðúðw¸ÈúÇv‰Ðº@îfÁèFeô[^_]ÃU‰åWVSƒì¶ä«%ƒøtƒø…Àt
-ë,ƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹ð«%f)Ú·Ò‰Ö5¬%¹×®¬]‰È÷î‰ÑÁù‰ðÁø)Á -¬%‰AÁà)ȍÁ‰ÁÁá ȉò)‰¬%f‰ð«%]荒’’ Õ¾m¶‰ð÷á‰Ö‰Ê)òÑê2‰ÁÁé
-¡¬%ÀP‰ÐÁà)кè‰Ö™÷þ’’’щS¡¬%ÀP‰ÑÁá)ѺÓMb‰È÷êÁú‰ÈÁø)‰Uè‹s¿ƒÞC‰ð÷ï‰ÑÁù‰ðÁø)Á‰ÈEè‰ðÁú‰ñÁù)ʍ’’’’’’Áâ)Ѝ€€€Áà‰Cƒ=à«%„/Ç„µ%‹à«%‹Eè;B ;B …Œ‹C;BŽ€ƒ=¤X#uƒ=€X#tÿ€X#ÿ¤X#‹à«%ë#‹¡ì«%‰‰ì«%‰à«%ƒì ÿrÿRƒÄ‰Ú…Òt‹B ;Eè -;EèűB;Eì~ă=¤X#uƒ=„X#tÿ„X#ÿ -¤X#¶ä«%ƒøt"ƒø …Àt -ë/vƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹ð«%f)Ú·Ò‰Ö5¬%¹×®¬]‰È÷î‰ÑÁù‰ðÁø)Á -¬%‰AÁà)ȍÁ‰ÁÁá ȉò)‰¬%f‰ð«%]荒’’ Õ¾m¶‰ð÷á‰Ö‰Ê)òÑê2‰ÁÁé
-¡¬%ÀP‰ÐÁà)кè‰Ö™÷þ’’’щS¡¬%ÀP‰ÑÁá)ѺÓMb‰È÷êÁú‰ÈÁø)‰Uè‹s¿ƒÞC‰ð÷ï‰ÑÁù‰ðÁø)Á‰ÈEè‰ðÁú‰ñÁù)ʍ’’’’’’Áâ)Ѝ€€€Áà‰C‹à«%‹Mè;J 
-;J u;B~ÇEäÇEàëJ]à‹à«%Mè‹B;A|‹B +Eè‰Eà‰Ð‹@+Aë ¡à«%‹@ +EèH‰Eà¡à«%‹@+Eìʚ;‰C‹Eà€€€€€€‰ÆÁæ‹Mä»ÓMb‰È÷ëÁúÁù)ʍ2ҍB‰ÂÁâ)‰Ð÷ãÁê¸ðúðw¸ÈúÇv‰Ðº@îfÁèîÇ„µ%ë -‰öº@°î°ðîeô[^_]ÐU‰åVSƒì‹E»¹‹à«%ëv‰Ñ‹…Òt;Buó¸ÿÿÿÿ…Ò„I…Éu‹£à«%»ë‹‰¡ì«%‰‰ì«%ƒ=„µ%…ƒ=à«%uº@°î°ðéû‰ö…Û„òƒìEðPjèºìÿÿ‹à«%ƒÄ‹Eð;B  -;B u‹Eô;B~ÇEìÇEèëJ]è‹à«%Mð‹B;A|‹B +Eð‰Eè‰Ð‹@+Aë ¡à«%‹@ +EðH‰Eè¡à«%‹@+Eôʚ;‰C‹E荀€€€€€‰ÆÁæ‹Mì»ÓMb‰È÷ëÁúÁù)ʍ2ҍB‰ÂÁâ)‰Ð÷ãÁê¸ðúðw¸ÈúÇv‰Ðº@îfÁèeø[^]Éöú‹D$¼HÏ#PèŒëÿÿ`fff f¨f¸0ŽØŽÀ° º X#@£ŒX#1ÛfŒÓü¡ô«%ƒøtèùòÿÿëè6ùÿÿ°
-º îì¨t ¸@Pè–ÿÿÿf¡”X#f9šX#t f£šX#ÿ-–X#ƒ=X#t‹X#ÿÓf©f¡ffaωöU‰å‹EØf£šX#f£”X#]Ã1ÀÈÃU‰åf¸0ŽØŽÀ‹Ef;šX#t f£šX#ÿ-–X#]ÉöU‰åƒìjjjj@èaƒÄÉÃU‰åWVSƒì ‹]‹u ‹}聉€:y"…Ût‹B8‰…öt‹BÁà
-‰…ÿt)‹B4‰ë"‰ö…ÛtÇ…öt‹BÁà
-‰…ÿtÇ@ƒ}t ‹BÁà
-‹U‰ƒÄ [^_]ÍvU‰åƒìjjjj@è̓Ä·@0ÉÃU‰å¡XV#]ÉöU‰å]ÍvU‰åSƒì‹XV#誃ì Sèucÿÿè ƒÄ‹]üÉÃU‰åWVS‹M ‹u‹}Š]‰ÈÁàeèÿÿ Eè‰ÈÁèUèˆBáÿbÿÿÿ J‰ðˆB‹Ef‰Eè‹EÁè‰EäŠEäƒà ÃË@¶ÃÁàbÿÿÿ Bçüÿ=JV#‹‰‹B‰G[^_]ÐU‰åWVSƒì ‹] ‹u‹}·EMèJV#‹‰‹@‰A‰Ê¶JÁá¶B ÁÁá·B Á…ÛtŠBƒà¶ÐÁâ·Eè Љ…ötŠE툅ÿt
-ŠEî%ðˆ‰ÈƒÄ [^_]ÉöU‰å‹E ¶UÁâ¹`Y#fÇD
-8ƂeY#îƂdY#f‰
-Áèf‰D
-]ÍvU‰åº °îº!°@î°î°î°ÿ°°pî°î°î°ÿî]ÐU‰åº °îº!°î°î°î°ÿ°°pî°î°î°ÿî]ÐU‰å‹Mf…ÉtWfƒùw¸Óà
- X#ë7fƒùw<·Éƒé¸Óà
-¡X#¢¡X#º¡î<ÿu  X#©uƒÈ¢ X#º!î]ÃU‰å‹Mf…ÉtUfƒùw¸þÿÿÿÓÀ" X#ë5fƒùw:·Éƒé¸þÿÿÿÓÀ"¡X#¢¡X#º¡î  X#©t%û¢ X#º!î]ÉöU‰å¿”X#]ÃU‰åƒì‹Ef£”X#˜PèWüÿÿƒÄÉÐU‰å¿”X#]ÃU‰åƒì‹E‰Âf£”X#ƒ=¤X#uƒì ¿ÂPèüÿÿƒÄÉÐU‰åWVì¾¹¬X#ºìX#‰öµÇ¨Ø"ǨØ"Fƒþ~åƒì EÈPèÅèºÇà;&!4#‹EÈ£ä;&¶¨X#£è;&ƒÄ‹EУð;&‹EÔ£ô;&‹EØ£ø;&hQÚ"jè£ýÿÿƒÄh[Ú"jè”ýÿÿƒÄheÚ"jè…ýÿÿƒÄhlÚ"jèvýÿÿƒÄhsÚ"jègýÿÿƒÄhzÚ"jèXýÿÿƒÄhÚ"jèIýÿÿƒÄhÇÚ"jè:ýÿÿƒÄhˆÚ"jè+ýÿÿƒÄhÚ"j èýÿÿƒÄh–Ú"j
-è -ýÿÿƒÄhÚ"j èþüÿÿƒÄh¤Ú"j èïüÿÿƒÄh«Ú"j -èàüÿÿƒÄh²Ú"jèÑüÿÿƒÄh¹Ú"jèÂüÿÿƒÄhÀÚ"jè³üÿÿƒÄh€Ù"jAè¤üÿÿƒÄhˆÙ"jBè•üÿÿƒÄhÙ"jCè†üÿÿƒÄh˜Ù"jDèwüÿÿƒÄh Ù"jEèhüÿÿƒÄh¨Ù"jFèYüÿÿƒÄh°Ù"jGèJüÿÿƒÄh¸Ù"jpè;üÿÿƒÄhÀÙ"jqè,üÿÿƒÄhÈÙ"jrèüÿÿƒÄhÐÙ"jsèüÿÿƒÄhØÙ"jtèÿûÿÿƒÄhàÙ"juèðûÿÿƒÄhèÙ"jvèáûÿÿƒÄhðÙ"jwèÒûÿÿf -T;&€¾ƒÄvÀÅ@·%ƒì jh‰hØPõ·ÀPèúÿÿƒÄ Fþš~ǃì hÐèFùÿÿƒÄÛãݵTÿÿÿ›¿`;&µTÿÿÿ¹üó¥ ÀƒÈ""ÀÛãèƒûÿÿèúÿÿeø^_]ÍvU‰åSƒìº!°ÿîè’ûÿÿ¹@ºC°6Êîîƒ=ä;&~¹AºC°tî°‰Êî°ë»B¹C°°‰ÊÚîîºaî‹]üÉÃU‰å‹U‹E ‰•ìX#]ÉöU‰å‹U‹E ‰•¬X#]ÉöU‰åƒìh4#è
-è— ƒÄÉÉöœX‰Á5PœX9ÈtQ¸Ã¸ÜX‰Á5 PœX1ÈtQ¸øÃf1Àžf¸f»öóŸ€üu¸øÃƨX#Ûã¹âþfǪX#ZZÝ=ªX#¹âþf¡ªX#<u+Ù=ªX#¹âþf¡ªX#f%?fƒø?uƨX#ƨX#Éö`¸ëp`¸ëh`¸ë``¸ëX`¸ëP`¸ëH`¸ë@`¸ë8`¸ ë0`¸
-ë(`¸ ë `¸ ë`¸ -ë`¸ë`¸ë ¨Pf¸0ŽÀŽØüX1ÛfŒÓP‹…¬X#ÿÓ[° ƒûrº îº îf¡”X#f;šX#t f£šX#ÿ-–X#©¡aϸ鋸選ëz¸ës¸ël¸ëe¸ë^¸ëW¸ ëP¸
-ëI¸ ëB¸ ë;¸ -ë4¸ë-¸ë&¸ë` ¨f¸0ŽÀŽØüèש¡aÏPf¸0ŽØŽÀXfŒÓ‹=JV#ß1ۊŠ_Áãf‹_ÜfŒÒfŒÛŽÓSRPÿ…ìX#ƒÄX[ŽÐ)ÜÏU‰åWVSƒì ‹u¸¹ ‰÷üó«è|ýÿÿ…ÀtÇëUèŠýÿÿ…Àt7ÇFǸ¢‰^‰N‰V …Àt+¸¢‰F‰^‰N‰V ëÇècýÿÿ…ÀtÇ ƒÄ [^_]ÍvU‰åWV¿,Y#È·À-yƒÀÁø9ÂtU¿,Y#@ÀÝ4Ŭ·%›È·À-yƒÀÁøf£,Y#¿5,Y#¿ <&4v4ö4õ¬·%¹üó¥Ý% <&^_]ÉöU‰å¿,Y#]ÃU‰åWVSƒì(ŠM¡0Y#Áà ˜€ f¶Ž<&f£JÏ#f¶<&f£LÏ#€ù t%€ù €ù„óé‰ö€ù
-„#é‰öfƒJÏ#·JÏ#;<&Œ½fÇJÏ#·LÏ#¡”<&H9Â…¿¡<&H‰Eì‰Uèf¾Œ<&Áâf‰Uò¡0Y#Áà °€ ¿;}è:¹;Mì*_ÿv‰ø¯<&È·F‰Ø¯<&Èf‰FA;Mì~ÜG;}è~ƹ;MìKWÿ‰Ð¯<&Èf‹]òf‰FA;Mì~çé)‰öfÇHÏ#·JÏ#‰Áƒø~ºƒÂ·ÂƒÀ9È|óf‰HÏ#f¡HÏ#f£JÏ#éævfÇJÏ#·LÏ#¡”<&H9Â…¾¡<&H‰Eà‰UÜf¾Œ<&Áâf‰Uæ¡0Y#Áà °€ ¿;}Ü=v¹;Mà*_ÿv‰ø¯<&È·F‰Ø¯<&Èf‰FA;Mà~ÜG;}Ü~ƹ;MàGWÿ‰Ð¯<&Èf‹]æf‰FA;Mà~çé%‰öfÿ -JÏ#·JÏ#·LÏ#¯<&ÂÆS fÿJÏ#éõ‰ö·JÏ#·LÏ#¯<&Ј CfÿJÏ#·JÏ#;<&Ž¿fÇJÏ#·LÏ#¡”<&H9Â…š¡<&H‰EԉUÐf¾Œ<&Áâf‰UÚ¡0Y#Áà °€ ¿;}Ð=v¹;MÔ*_ÿv‰ø¯<&È·F‰Ø¯<&Èf‰FA;MÔ~ÜG;}Ð~ƹ;MÔ'Wÿ‰Ð¯<&Èf‹]Úf‰FA;MÔ~çëfÿLÏ#·5JÏ#·=LÏ#‰øf¯<&f‰EΡ0Y#Áà fEÎfuλÔ°‰Úî¹Õ‰ÊŠEÎî°‰Úîf‹EÎfÁè‰Êî‰óˆŽ<&‰ø¢<&ƒÄ([^_]ÐU‰åWVSƒì‹u‹} ‰øf¯<&f‰Eò¡0Y#Áà fEòfuò»Ô°‰Úî¹Õ‰ÊŠEòî°‰Úîf‹EòfÁè‰Êî‰ð¢Ž<&‰úˆ<&ƒÄ[^_]ÍvU‰åS¹Ô°
-‰Êî»Õ‰ÚŠEî° ‰Êî‰ÚŠE î‹$ÉÍvU‰åWVSƒìf¾EÁàf‰Eò¡0Y#Áà ¸€ ‹]ë0‹M ;M(sÿ‰Ø¯<&È·G‰ð¯<&Èf‰GA;M~ÜC;]~ʋM ;MSÿv‰Ð¯<&Èf‹]òf‰GA;M~çƒÄ[^_]ÍvU‰åWVSƒì ¡<&H‰Eð‹”<&K‰]ìf¾Œ<&Áàf‰Eê¡0Y#Áà °€ ¿9ß<‰ö¹;Mð*_ÿv‰ø¯<&È·F‰Ø¯<&Èf‰FA;Mð~ÜG;}ì~ƹ;MðWÿ‰Ð¯<&Èf‹]êf‰FA;Mð~çƒÄ [^_]ÍvU‰å·J‰<&¶„@£”<&¶„ÿ ¢Œ<&¶P¢Ž<&¶Q¢<&¶`¢OÏ#¶a¢NÏ#Ç4Y#Ç0Y#]ÃU‰åWVSƒì Ž<&¢P <&¢Q¶ÀP¶Ž<&PèŠýÿÿ¶NÏ#¶5OÏ#ƒÄ¹Ô°
-‰Êî¿Õ‰úˆØî° ‰Êî‰ú‰ðîeô[^_]ÍvU‰åSƒì‹]€;tŠCƒì ¾ÀPèiùÿÿƒÄ€;ué‹]üÉÃU‰åVS‹E‰ÃÁã £4Y#¹Ô° -‰Êî¾Õ‰òˆØî° ‰Êî‰ØfÁè‰òî[^]ÃU‰åVS‹u‹0Y#Áâ»`Ï#¶Ž<&‰¹€Ï#¶<&‰
-µŠ¢Ž<&Š
-¢<&‰50Y#[^]ÃU‰å¡4Y#]ÉöU‰å¡0Y#]ÉöU‰åWVSƒì ‹}f¾u Áæf¾E Ƌ]‹E9Ã3v‹M9ù#‰Ê¯<&¡0Y#Áà ÐØf‰´€ A9ù~ÞC;]~ЃìÿuÿuèüÿÿŠE¢<&ŠE¢Ž<&ƒÄeô[^_]ÍvU‰åWVSƒì ¡<&H‰Eð‹=”<&Of¾Œ<&ÁãƒË ¾9Æ4¹9ù%v‰Ê¯<&¡0Y#Áà Ððf‰œ€ A9ù~ÞF;uð~̃ìjjèûÿÿƍ<&ÆŽ<&ƒÄeô[^_]ÍvU‰åS‹U ‹]‹M¯<&¡0Y#Áà ÂU”€ ˆ
-ˆZ‹$ÉÉöU‰åS‹E ‹]‹M‰Â¯<&¡0Y#Áà ÂU”€ ¶B…Étˆ¶‰Â…Ûtˆ¾Â‹$ÉÐU‰åS‹E ‹MŠ]‰Â¯<&¡0Y#Áà ÂU”€ €9tŠˆABˆB€9uò‹$ÉÐU‰åƒìh<4#èTýÿÿôƒÄÉÉöU‰åƒìjèƒÄÉÉöU‰åƒìh4èƒÄÉÍvU‰åVS‹Ef£r¹d»þ¾v‰Êì©t Fþÿÿ~í¸@=Ÿ†~ø‰ÚˆÈö@=Ÿ†~øë‰öU‰åSƒìE Pÿuh Ï#èX‰ÃÇ$ Ï#è¢üÿÿ‰ØƒÄ‹]üÉÃU‰åWVSìð‹} ŠEˆ…ÿÿÿEPÿuÿÿÿSè‰ÆS¾…ÿÿÿPWÿuè±þÿÿ‰ðƒÄ eô[^_]ÃU‰åSƒìE Pÿuh Ñ#謉ÃÇ$ Ñ#è&üÿÿ‰ØƒÄ‹]üÉÃU‰åS‹M‹U ‰Ë€:tvŠˆBA€:uõƉ؋$ÉÍvU‰åVS‹]‹U ‹M‰Þë‰öŠˆBC€:t‰ÈI…ÀîƉð[^]ÐU‰å‹U‹M ë -¸€:tBAŠ:t)Ð]ÃU‰åS‹U‹] ‹M…Éëv¶¶Sÿ)Ð됊C8uíŠB„ÀtIu︋$ÉÐU‰å‹U¸€:tB@€:uù]ÍvU‰åS‹E‹] €8t‰Ú€:tŠv:
-tB€:uö@€8u下$ÉÉöU‰å‹E‹U €8t ‰ö8t @€8uö¸]ÍvU‰åS‹]‰Ú€;t‰öŠ
-AŸ<wAàˆB€:uì‰Ø‹$ÉÐU‰åS‹]‰Ú€;t‰öŠ
-A¿<wA ˆB€:uì‰Ø‹$ÉÐU‰åS‹U‹M ‰Ó€;tvB€:uú늈AB€9uõƉ؋$ÉÍvU‰åWVSƒì<‹u‹]ÇEèÇEäÇEàÇEÜÇEØÇEÔÇEпÇEÌÙîÝ]À‰uì‹E €8„D‹U €:%t…ÿuŠˆB‰U FÿEèév‹E €8%u%@‰E ¿ÇEä
-ÇEàÇEØÇE̋U ¾ƒè%ƒøS‡Ñÿ$… %#‰öÆ%FÿEè鼃ÉòFŠCüˆÿEè驐ƒ}Øt"ƒ}؃}Øtëƒ}ØuƒÃ‹Cü‰EÔë -vƒÃ¿Sü‰Uԃì ÿuÌÿuäj
-VÿuÔè¾ éœƒ}Øt"ƒ}؃}Øtëƒ}ØuƒÃ‹Cü‰EÐë -vƒÃ·Sü‰UЃì ÿuÌÿuäj
-VÿuÐè.éPƒ}Øt"ƒ}؃}Øtëƒ}ØuƒÃ‹Cü‰EÐë -vƒÃ·Sü‰UЃì ÿuÌÿuäjVÿuÐèâ鐃ËCü‰EЃì jÿuäjVPèÂé䐃ËSü€:tŠˆBFÿE܀:uò‹UÜUèévƒ}Øtƒ}؃}Øtëƒ}Øu ƒÃÝCøÝ]ÀƒìÿuÌÿuàÿuäVÿuÄÿuÀèYë~vƒ}Øtƒ}؃}Øtëƒ}Øu ƒÃÝCøÝ]ÀƒìÿuÌÿuàÿuäVÿuÄÿuÀè} -ë>vƒ}Øtƒ}؃}Øtëƒ}Øu ƒÃÝCøÝ]ÀƒìÿuÌÿuàÿuäVÿuÄÿuÀèa‰EÜEèÆ¿ƒÄ é±ÇEØé¥ÇEØ陃MÌ鐍vƒMÌ鄍v¿ƒMÌëvƒÿu?ƒìEìPj
-ÿu èb
-‰EäƒÄ‹E €80u ÷EÌtƒMÌ됃MÌ‹UìJ‰U ë4vƒÿu,ƒìEìPj
-ÿu è
-‰Eà‹EìH‰E ¿ƒÄë‰ö¿ÿE ‹U €:…¼üÿÿÆ‹Eèeô[^_]ÉöU‰åƒì EPÿu ÿuè7üÿÿƒÄÉÉöU‰åWVSƒì,‹u‹} ‹]ÇEìÇEèÇEäÇEàÇEÜÇEØÇEÔÇEЉuð€?„>€?%tƒ}Ôu ŠˆGFÿEìëá€?%uGÇEÔÇEè
-ÇEàÇEоƒè%ƒøS‡çÿ$…ð&#Æ%FÿEìéԃÉòFŠCüˆÿEìéÁƒ}àt&ƒ}àƒ}àt
-ë"ƒ}àt
-ëƒÃ‹CüëƒÃ‹CüëƒÃ¿Cü‰E܃ì ÿuÐÿuèj
-VÿuÜè鏐ƒ}àt&ƒ}àƒ}àt
-ë"ƒ}àt
-ëƒÃ‹CüëƒÃ‹CüëƒÃ·Cü‰E؃ì ÿuÐÿuèj
-ëBƒ}àt&ƒ}àƒ}àt
-ë"ƒ}àt
-ëƒÃ‹CüëƒÃ‹CüëƒÃ·Cü‰E؃ì ÿuÐÿuèjVÿuØè6‰EäEìÆÇEÔƒÄ éҍvƒÃ‹Sü€:tŠˆBFÿEä€:uò‹EäEì飍vÇEàé›ÇEà鏃MÐ醍vƒMÐë}‰öÇEÔƒMÐënvƒ}Ôu6ƒìEðPj
-W蓉EèƒÄ€?0u ÷EÐtƒMÐ됃MЋ}ðOë1‰öƒ}Ôu)ƒìEðPj
-WèW‹}ðOÇEÔƒÄë
-vÇEÔGé¼ýÿÿvÆ‹Eìeô[^_]ÉöU‰åƒì EPÿu ÿuèGýÿÿƒÄÉÉöU‰åWVSƒì,‹}‹uÇEèÇEäÇEàÇEÜÇEØ»‰}ì饐‹U €:%t…Ûu B‰U 鏍v‹E €8%u%@‰E »ÇEäÇEàÇEÜÇE؋U ¾ƒè*ƒøN‡Eÿ$…@(#‰öƒû…8ƒìEìPj
-ÿu èN‰E܃MØ‹EìH‰E ƒÄéŠGƒÆ‹^üˆëÝØÿEèéõƒÆ‹^üëG€?tƒì ¾PèBƒÄ…ÀuçÇEÔë#‰ö÷EØuŠˆCë‹UÜ9UÔ}ŠˆCÿEÔG€?tƒì ¾PèþƒÄ…ÀtÇÆ덉öƒìhH4#Wè&÷ÿÿ‰ÇƒÄ EìPj
-WèՉ‹}ìƒÄƒ}à…Wƒ}ät)ƒ}ä ƒ}ätéCÿÿÿƒ}ä…9ÿÿÿƒÆ‹Fü‰é,ÿÿÿƒÆ‹Füf‰éÿÿÿ‰öƒìhU4#Wè¶öÿÿ‰ÇƒÄ EìPj
-됃ìh`4#Wèšöÿÿ‰ÇƒÄ EìPjWè ‹}ìƒÄƒ}à…̓}ät+ƒ}ä -ƒ}äté¹þÿÿ‰öƒ}ä…­þÿÿƒÆ‹Vü‰é þÿÿƒÆ‹Vüf‰é‘þÿÿ‰öƒìhx4#Wè*öÿÿ‰ÇƒÄEìPWè;‹}ìƒÄƒ}àu`ƒ}ät)ƒ}ä ƒ}ätéMþÿÿƒ}ä…CþÿÿƒÆ‹FüÝé8þÿÿƒÆ‹FüÙé*þÿÿvÇEäë vÇEäëvÇEàëÝؐ»ÿE ‹E €8…Pýÿÿ‹Eèeô[^_]ÐU‰åƒì EPÿu ÿuèïüÿÿƒÄÉÉöU‰åWVSƒì,‹u ÇEп‹Eƒð‰EԋU‰U̅Òy‰Ñ÷ىM̃}y ‹E…Ày÷Ø됋E÷EÔu ƒ}yƒ}yGƒ}u‹EÐÆD(Ø0@‰EÐë8v…Àt1U؉Uȉöƒì º÷ủÃRèI‹MȋUЈ
-B‰UЉ؃Ä…Àu×}ЋEԃàƒøu‰ú;}} -‰öÆ FGB;U|õƒ}y ƒ}yÆ-ë ÷EÔtÆ+F‹Eԃàƒøu‰ú;}} Æ0FGB;U|õ‹UÐJx M؊
-ˆFJy÷‹Eԃàƒøu‰ú;}} Æ FGB;U|õƉøeô[^_]ÃU‰åƒì‹Eÿuÿu÷ØPÿu ÿuèŸþÿÿƒÄ ÉÉöU‰å‹E…Ày÷Ø]ÉöU‰åSƒì‹]èÁîÿÿƒì Sè1 -ÿÿU‰åWVSƒì‹M‹} ÙîÙÀÙ軀9-u ¾ÿÿÿÿë
-‰ö¾ëA€90túŠƒè0< w(Ý€)#ëÙˍv¾ƒè0AÜËÙËPÚ$XŠƒè0< vâÝۀ9.u9AŠƒè0< w/Ý€)#ëÙÉÙʉö¾ƒè0AÜÊÙÊPÚ$ÙÉXØʊƒè0< vÝÝÚÙÉÞùÞÁVÚ $^€9et €9E…“A€9-u
-¾ÿÿÿÿAë‰ö€9+u ¾Aëv¾Šƒè0< weÝ€)#¾ƒê0A·ÃÙÀPÚ $Ù}ð‹]ðÆEñ Ùmð‰]ðÛ]ìÙmð‹Eì·À‰$Û$‰$Ú$ZÙ}ð‹UðÆEñ Ùmð‰UðÛ]ìÙmð‹Eì‰ÃŠƒè0< v£Ý؅ö~!ºf…Ût4Ý€)#·Ã‰öÜÉB9Â|ùëvº·Ã‰Ã9Â}Ý€)#ÜùB9Ú|ùÝ؅ÿt‰ƒÄ[^_]ÐU‰åWVSƒì ‹]‹} ÇE쾀;-u ÇEðÿÿÿÿCë‰ö€;+u ÇEðCëÇEð€;0u>C€;0túë6ƒì ¾PCè‰ÂƒÄ9ú…Òy
-¸ëEv‰ð¯÷Ö9ð~ÇEìƒìW¾P聃ąÀu¶ƒ}t‹E‰ƒ}ìt¾ÿÿÿ¯uð‰ðeô[^_]ÉöU‰åWVSƒì ‹]‹} ÇEð¾€;0uC€;0tú€;xuKƒÿuFC€;0u@‰öC€;0túë6ƒì ¾PCè_‰ÂƒÄ9ú…Òy
-¸ëAv‰ð¯÷Ö9ðvÇEðƒìW¾PèуÄ…Àu¶ƒ}t‹E‰ƒ}ðt¾ÿÿÿ‰ðeô[^_]ÉöU‰åŠUBÐ< w ¾Âƒè0ë&vB¿<w ¾Âƒè7됍BŸ<w ¾ÂƒèW됾Â]ÍvU‰å‹Uƒú w B0¾À됍BöƒøwB7¾Àë¾Â]ÍvU‰åŠUƒê0¸€ú –À]ÉöU‰åŠUBÐ<vBŸ<w¸ë¸]ÐU‰åŠU€ú/~‹E 8Y#:Pÿ¸ë¸]ÐU‰åŠUBŸ<w Bà¾Àëv¾Â]ÍvU‰åŠUB¿<w B ¾Àëv¾Â]ÍvU‰åVS¾ƒì ¾]Sè%ƒÄ…Àuƒì Sè5ÿÿÿƒÄ…Àt¾‰ðeø[^]ÃU‰åŠUƒêA¸€ú9–À]ÉöU‰å¸€}/žÀ]ÍvU‰åŠUƒêa¸€ú–À]ÉöU‰åŠUB÷<v
-¸€ú u¸]ÉöU‰åŠUƒêA¸€ú–À]ÉöU‰åWVSƒì ÝEÝUè‹]‹}ÇEäSd$øÝ$èoƒÄ…Àtƒì Sè·îÿÿƒÄéPvÙîÝEèÚéßà€äE€üu Æ-C€uï€ë÷EtÆ+CÿEä݈)#ÝEèÚéßà€äE€üuÆ0ÆC¸éû‰öÙèÝEèÝáßà€äE€üu3¾Ýéßà€äE€üuHݘ4#ÝEèØÉÝUèNÝêßà€äE€ütëÝØë)vÝØÝؾݘ4#ÝEèë ÝEèØñÝUèFÝéßàöÄtîÝ؃ì Vè÷ùÿÿƒÄƒøc~ƒïë‰öƒø ~ƒïë‰ö…ö~Oƒì‹EƒÈPÿuWSÿuìÿuèèUEäƒÄ …öu‹Eäë;‰ö]äÆeCƒì jºgfff‰ð÷êÁú‰ðÁø)ƒÂRj
-SVè\ùÿÿ‹UäD‰EäƒÄ eô[^_]ÍvU‰åWVSìŒÝEݝþÿÿ‹]Dž€þÿÿ½¸þÿÿ¹K¸üó«ƒìSÿµ”þÿÿÿµþÿÿ貃ąÀtƒì SèúìÿÿƒÄé‰öÙî݅þÿÿÚéßà€äE€üuÆ-C€µ—þÿÿ€ëv÷Et
-Æ+Cÿ…€þÿÿƒì…˜þÿÿPÿµ”þÿÿÿµþÿÿèþݝpþÿÿ‹…pþÿÿ‹•tþÿÿ‰Æ‰×DžŒþÿÿƒÄ݅˜þÿÿÙèÙÉÝáßàöÄ…ø重vh$@jÿµœþÿÿÿµ˜þÿÿè$݅˜þÿÿÜ5)#ݝ˜þÿÿÙ½´þÿÿ‹´þÿÿƅµþÿÿ Ù­´þÿÿ‰´þÿÿß½¨þÿÿÙ­´þÿÿ‹…¨þÿÿ‰$èûÿÿ‹•Œþÿÿˆ„*¸þÿÿB‰•ŒþÿÿƒÄ݅˜þÿÿÙèÙÉÚéßàöÄ„oÿÿÿ‹•Œþÿÿ•€þÿÿ‰ÑI…¸þÿÿ‰…|þÿÿë‰ö‹•|þÿÿŠˆCI‹•Œþÿÿƒê‰ÐÁèH!Â9Ñ}ޅÉx‹Œþÿÿƒéx
-vÆ0CIyùÆëÝØÝØÆ0Cÿ…€þÿÿÝ 4#‰µpþÿÿ‰½tþÿÿ݅pþÿÿÚéßàöÄE…\‹E@9…€þÿÿLÆ.Cÿ…€þÿÿ‹Eƒà‰…ˆþÿÿDž„þÿÿDžŒþÿÿv‰µpþÿÿ‰½tþÿÿ݅pþÿÿܨ4#Ü -)#ݝpþÿÿ‹µpþÿÿ‹½tþÿÿƒì…˜þÿÿPWVèݝpþÿÿ‹•pþÿÿ‹tþÿÿ‰Ö‰Ï݅˜þÿÿÙ½´þÿÿ‹´þÿÿƅµþÿÿ Ù­´þÿÿ‰´þÿÿ۝¤þÿÿÙ­´þÿÿ‹…¤þÿÿƒÄ…Àtƒ½ˆþÿÿu
-Džˆþÿÿƒì PèÓùÿÿˆCÿ…€þÿÿÿ…ŒþÿÿƒÄƒ½ˆþÿÿt‹E9…Œþÿÿ~
-Dž„þÿÿ‹•€þÿÿ9U}
-Dž„þÿÿƒ½„þÿÿ„ýþÿÿKë
-‰öÿ€þÿÿ‰Ã€;0u Cÿ€{ÿ.uêCÆ‹…€þÿÿeô[^_]ÃU‰åWVSƒì‹]‹u ‹}WVSèZƒÄ…Àtƒì Wè¢éÿÿƒÄéñ‰öÙî‰]è‰uìÝEèÝáßàÝـäE€üuÙàëvÝ؉]è‰uìÝEèݘ)#ÙÉÝáßàÝـäE€üuÝØÆ0ÆG¸雺ÙèÙÉÝáßà€äE€üu/Ýáßà€äE€üu?ݘ4#ëÙɐÜÉÙÉJÝâßà€äE€ütìÝØëvÝÙݘ4#ë‰öØñÙÉBÙÉÝáßàöÄtðÝØÝ؍BƒøvƒìÿuÿuÿuWVSèÔùÿÿë‰öƒìÿuÿuÿuWVSèXûÿÿƒÄ eô[^_]ÐU‰åƒìSÙ}ü›f‹Eüf -? f‰EøÙmø›ÝEÙüÝ]ð›‹Uð‹Mô‹]‰‰KÝEÜeðeì›ÛâÙmü›[ÉÍvU‰åƒì‹E‹U ‰Eø‰Uü‹MUøf‹BfÁè%ÿ=ÿt¸ëk÷Bÿÿuƒ:t…Étƒìh°4#QèDçÿÿƒÄ¸ë@‰ö€zy…Étƒìh´4#Qè çÿÿƒÄ¸ë‰ö…Étƒìh¹4#QèçÿÿƒÄ¸ÉÃU‰åƒì¸ Ó#ƒ=DY#tÿDY#ÉÃU‰å‹E£DY#]ÍvU‰åƒì‹E‹U ‰Eø‰UüUø¹f‹BfÁè%ÿ=ÿu÷Bÿÿuƒ}øt¹‰ÈÉÉöU‰åSƒì‹E ‹]ÆPè‰âÿÿ‰ØƒÄ‹]üÉÍvU‰åVSƒì ÝEÝUð‹]‹uVSd$øÝ$èrÝ]èƒÄƒ=HY#ÿtWƒìVSèYÿÿÿƒÄ…ÀuFƒìÿuôÿuðèDÿÿÿƒÄ…Àu1Ùî‰]à‰uäÝEàÚéßà€äE€ô@uƒì jVSÿuôÿuðè4ƒÄ ëvÝEèeø[^]ÉöÝD$ ÝD$Ùø›ßàžzøÝÙͶ¼'U‰åVSƒì0ÝE‹]‹u‹EÝUà‰]è‰uìPÿú‡Èÿ$•°)#ÝØÇEغ¾4#ƒøc~ºÃ4#‰UÜÇEðÇEôƒ=HY#„}ƒì EØP誃ąÀ…uƒ=HY#…YƒìjhÉ4#éëvÝØÇEغÝ4#ƒøc~ºâ4#‰UÜÇEðÇEôƒ=HY#„ƒì EØPè>ƒÄ…À… ƒ=HY#…íƒìjhè4#év‰]à‰uäÝ]èÇEغü4#ƒøc~º5#‰UÜÇEðÇEôƒ=HY#„žƒì EØPè˃ąÀ…–ƒ=HY#…zƒìjh 5#é ÝØÇEغ5#ƒøc~º$5#‰U܃=HY#uÇEðàÇEôÿÿïGé¸ -¡<Y#‹@Y#‰Eð‰Uôé¡ -‰öÝØÇEغ²6#ƒøc~º¸6#‰U܃=HY#uÇEðàÇEôÿÿïGéh -¡<Y#‹@Y#‰Eð‰UôéQ -‰öÝØÇEغ+5#ƒøc~º/5#‰U܃=HY#uÇEðàÇEôÿÿïGé -¡<Y#‹@Y#‰Eð‰Uôé -‰öÝØÇEغ+5#ƒøc~º/5#‰UÜÇEðÇEôéÑ ‰öÝØÇEغ·/#ƒøc~º45#‰U܃=HY#uÇEðàÇEôÿÿïÇë¡<Y#‹@Y#ò€‰Eð‰Uôƒ=HY#„óƒì EØPè ƒÄ…À…ëƒ=HY#…σìjh85#éaÝØÇEغ·/#ƒøc~º45#‰U܃=HY#uÇEðàÇEôÿÿïÇë¡<Y#‹@Y#ò€‰Eð‰Uôƒ=HY#„gƒì EØP蔃ąÀ…_ƒ=HY#…Cƒìjh85#éÕ -ÝØÇEغx/#ƒøc~ºJ5#‰U܃=HY#uÇEðàÇEôÿÿïÇë¡<Y#‹@Y#ò€‰Eð‰Uôƒ=HY#„Û -ƒì EØPèƒÄ…À…Ó -ƒ=HY#…· -ƒìjhN5#éI -ÝØÇEغx/#ƒøc~ºJ5#‰U܃=HY#uÇEðàÇEôÿÿïÇë¡<Y#‹@Y#ò€‰Eð‰Uôƒ=HY#„O -ƒì EØPè| -ƒÄ…À…G -ƒ=HY#…+ -ƒìjhN5#é½ ÝØÇEغ`5#ƒøc~ºc5#‰U܃=HY#uÇEðàÇEôÿÿïÇë¡<Y#‹@Y#ò€‰Eð‰Uôƒ=HY#„à ƒì EØPèð ƒÄ…À…» ƒ=HY#…Ÿ ƒìjhg5#é1 ÝØÇEغ`5#ƒøc~ºc5#‰U܃=HY#uÇEðàÇEôÿÿïÇë¡<Y#‹@Y#ò€‰Eð‰Uôƒ=HY#„7 ƒì EØPèd ƒÄ…À…/ ƒ=HY#… ƒìjhg5#é¥ ÝØÇEغy5#ƒøc~º€5#‰U܃=HY#uÇEðàÇEôÿÿïGéP ¡<Y#‹@Y#‰Eð‰Uôé9 ‰öÝØÇEغy5#ƒøc~º€5#‰U܃=HY#uÇEðàÇEôÿÿïGë¡<Y#‹@Y#‰Eð‰Uôƒ=HY#„a ƒì EØPèŽ ƒÄ…À…Y ƒ=HY#…= ƒìjhˆ5#éÏ
-vÝØÇEغœ5#ƒøc~º 5#‰U܃=HY#uÇEðàÇEôÿÿïÇë¡<Y#‹@Y#ò€‰Eð‰Uôƒ=HY#„å ƒì EØPè ƒÄ…À…Ë
-ƒ=HY#…¯
-ƒìjh¥5#éA
-ÝØÇEغœ5#ƒøc~º 5#‰U܃=HY#uÇEðàÇEôÿÿïÇë¡<Y#‹@Y#ò€‰Eð‰Uôƒ=HY#„G
-ƒì EØPèt
-ƒÄ…À…?
-ƒ=HY#…#
-ƒìjh¶5#éµ ÝØÇEغÉ5#ƒøc~ºÏ5#‰U܃=HY#uÇEðàÇEôÿÿïÇë¡<Y#‹@Y#ò€‰Eð‰Uôƒ=HY#„Íƒì EØPèè ƒÄ…À…³ ƒ=HY#…— ƒìjhÖ5#é) ÝØÇEغÉ5#ƒøc~ºÏ5#‰U܃=HY#uÇEðàÇEôÿÿïÇë¡<Y#‹@Y#ò€‰Eð‰Uôƒ=HY#„/ ƒì EØPè\ ƒÄ…À…' ƒ=HY#… ƒìjhé5#靐ÝØÇEغþ5#ƒøc~º6#‰UÜÇEðÇEôƒ=HY#… ƒì EØPèòƒÄ…À…½ƒìjh6#jèÞõÿÿèeõÿÿÇ!ƒÄ降vÇEغþ5#ƒøc~º6#‰U܃=HY#uvÇEðàÇEôÿÿïG‰]ЉuÔÝEÐÜ -h7#Ý]Ћ]ЋuÔÙîÙÉÚéßà€äE€ü…¯ƒìVSèjƒÄ‰]ЉuÔÝEÐÙÉÚéßà€äE€ü@„‡ÇEðàÇEôÿÿïÇét¡<Y#‹@Y#‰Eð‰Uô‰]ЉuÔÝEÐÜ -h7#Ý]Ћ]ЋuÔÙîÙÉÚéßà€äE€ü…6ƒìVSèñƒÄ‰]ЉuÔÝEÐÙÉÚéßà€äE€ü@„¡<Y#‹@Y#ò€‰Eð‰UôéòvÝØÇEغþ5#ƒøc~º6#‰UÜÇEðÇEôéÁ‰öÝØÇEغþ5#ƒøc~º6#‰U܃=HY#uÇEðÇEôë¡<Y#‹@Y#ò€‰Eð‰Uôƒ=HY#„ãƒì EØPèƒÄ…À…Ûƒ=HY#…¿ƒìjh6#éQÝØÇEغþ5#ƒøc~º6#‰U܃=HY#uÇEðÇEôëÇEðÇEôøƒ=HY#„`ƒì EØP荃ąÀ…Xƒ=HY#…<ƒìj h@7#éΉöÇEغ96#ƒøc~º>6#‰U܃=HY#u6ÙîÙÉÚéßàöÄEuÇEðàÇEôÿÿïGém‰öÇEðàÇEôÿÿïÇéX‹ -<Y#‹@Y#‰Mð‰]ôÙîÙÉÚéßàöÄE„4‰È‰Úò€‰Eð‰UôéÝØÇEغD6#ƒøc~ºI6#‰U܃=HY#uÇEðÇEôëÇEðÇEôøƒ=HY#„Lƒì EØPèyƒÄ…À…Dƒ=HY#…(ƒìjhO6#麉öÇEغc6#ƒøc~ºh6#‰U܃=HY#uÝ]ðëÝØÇEðÇEôøƒ=HY#„Òƒì EØPèÿƒÄ…À…ʃ=HY#…®ƒìjhn6#é@ÝØÇEغƒ6#ƒøc~º6#‰UÜÇEðÇEôøƒ=HY#„iƒì EØP薃ąÀ…aƒ=HY#…Eƒìjh˜6#é׍vÝØÇEغ±6#ƒøc~º·6#‰UÜÇEðÇEôøƒ=HY#„ýƒì EØPè*ƒÄ…À…õƒ=HY#…Ùƒìjh¾6#ékvÝØÇEغÓ6#ƒøc~ºÙ6#‰UÜÇEðÇEôøƒ=HY#„‘ƒì EØP较ąÀ…‰ƒ=HY#…mƒìjhà6#éÿvÇEغÓ6#ƒøc~ºÙ6#‰UÜÜ5p7#Ý]ðƒ=HY#„,ƒì EØPèYƒÄ…À…$ƒ=HY#…ƒìjhõ6#隉öÇEغ7#ƒøc~º7#‰U܋ -<Y#‹@Y#‰Mð‰]ôÙîÙÉÚéßàöÄEtC‰È‰Úò€‰Eð‰Uôë1‰öÇEغ7#ƒøc~º7#‰U܍d$øÝ$jjè›Ý]ðƒÄƒ=HY#…jé|vÝØÇEغ7#ƒøcŽ•º7#鋍vÝØÇEغ·/#ƒøc~uº45#ën‰öÝØÇEغ+7#ƒøc~Yº.7#ëR‰öÝØÇEغx/#ƒøc~=ºJ5#ë6‰öÝØÇEغ27#ƒøc~!º57#ë‰öÝØÇEغ`5#ƒøc~ºc5#‰UÜÇEðÇEôƒ=HY#„¯ƒì EØPèʃąÀ…•ƒ=HY#…‹ƒìjÿuÜjè«îÿÿƒÄ jh7#jèšîÿÿƒÄëfÝØÇEغz5#ƒøc~º5#‰U܃=HY#uÇEðàÇEôÿÿïGë¡<Y#‹@Y#‰Eð‰Uôƒ=HY#tƒì EØPè2ƒÄ…À…ýè¶íÿÿÇ"éívÝØÇEغz5#ƒøc~º5#‰U܃=HY#uÇEðàÇEôÿÿïGë¡<Y#‹@Y#‰Eð‰Uôƒ=HY#„‰ƒì EØP趃Ä…À…ƒ=HY#uiƒìjh‰5#jè™íÿÿƒÄëSÇEغþ5#ƒøc~º6#‰UÜÝ]ðƒ=HY#ÿt ƒ=HY#uÇEðÇEôð?ë$‰öƒì EØPè@ƒÄ…ÀuèÈìÿÿÇ!ëÝØÝEðeø[^]ËT$â€‹D$%ÿÿÿ ЉD$ÝD$ÉöU‰å¸]ÉöÝD$ÙüÉö¼'U‰åWVSƒì ‹E ‰EðEƒEðƒeðøƒàø‰Eì‹Eð9EìsƒìjUhx7#h‚7#è˜ ƒÄ‹Eð9Eì„Ä‹E‹…Û„·‹C;C rƒìj`hx7#h7#è` ƒÄöCtƒìjahx7#hÀ7#èC ƒÄöC tƒìjbhx7#h8#è& ƒÄ‹Eì;CvL‹Eð;C sD‰Æ‹}ì;ss‹s;{ v‹{ 9÷wƒìjnhx7#h¡7#èæ ƒÄƒì‰ø)ðPVÿu蚃ċ…Û…Iÿÿÿeô[^_]ÐU‰åWVSƒì ‹u ‹E‹}‰ÂUƒÀƒàøƒâø9†ŒÇF‰F‰V ‹E‰F‰~ÇF‹MëF‰ö9óuƒìjlh08#h;8#èX ƒÄ‹F ;Cv‹F;C sƒìjmh08#h`8#è1 ƒÄ‰Ù‹…Ût9{±9{u‹S +S‹F +F9Âwœ‰‰1eô[^_]ÃU‰åWVSƒì ‹]‹} …ÛuƒìjLh8#h•8#èÙ
-ƒÄ…ÿuƒìjMh8#hž8#è¾
-ƒÄƒÇƒçø‹3…ö„rvƒ~uƒ~t‹F;FsƒìjUh8#hà8#è€
-ƒÄƒ~t‹F;F rƒìjUh8#h@9#è[
-ƒÄ‹F +F9FvƒìjUh8#h€9#è9
-ƒÄ‹F÷ЅE…åF‰Eð‹^…Û„ԍv÷Ãtƒìj^h8#hÀ9#èø ƒÄöCtƒìj_h8#h:#èÛ ƒÄƒ;t9wƒìj`h8#h@:#è» ƒÄ;^ rƒìjah8#h¶8#èŸ ƒÄ9{rGv‹‰‹C)ø‰B‹Eð‰ë
-v‹‹Uð‰9~sƒìjwh8#hÍ8#è\ ƒÄ)~‰Øë‰ö‰]ð‹…Û…/ÿÿÿ‹6…ö…‘þÿÿ¸eô[^_]ÃU‰åƒì jÿjÿuÿuÿuÿu ÿuèƒÄ ÉÐU‰åWVSƒì‹]‹EE ‰Eð…ÛuƒìjThi:#h•8#èۃă} uƒìjUhi:#hž8#较ċ;…ÿ„lƒuƒt‹G;Gsƒìj[hi:#hà8#舃ăt‹G;G rƒìj[hi:#h@9#ècƒÄ‹G +G9Gvƒìj[hi:#h€9#èAƒÄ‹G÷ЅE…á‹Uð9WƒÕ‹M9O †ÉG‰Eì‹_…Û„¸v÷Ãtƒìjkhi:#hÀ9#èèƒÄöCtƒìjlhi:#h:#è˃ă;t9wƒìjmhi:#h@:#諃Ä;_ rƒìjnhi:#h¶8#菃ċU 9S‚$‰Þ;]s‹u¹;M}ºÓâ‹E1ð…ÂtÖA;M|è‰ð)ØE ;C‡è‹M 1;Eð‡æ‰ðƒàø‰Eè9Øsƒìh‘hi:#ht:#èƒÄ9]èvC‹Uè)ډUä÷Âtƒìh–hi:#h :#èãƒÄ‹‹M艋C+Eä‰A‹Eä‰C‰]ì‰ðƒà‹U Tƒâø‰U ‹Mè9Qv‰ÊU ‹‰‹A+E ‰B‹Eì‰ë
-‹Uè‹‹M쉋E 9Gsƒìh´hi:#hÍ8#èkƒÄ‹U )W‰ðë‰ö‰]ì‹…Û…Kþÿÿ‹?…ÿ…•ýÿÿ¸eô[^_]ÃU‰åƒì jÿjjj ÿu hÿuèýÿÿƒÄ ÉÐU‰åWVSƒì‹]ShÒ:#èeÌÿÿ‹3ƒÄ…ö„ƒìÿvÿvÿv‹F +FPÿv ÿvh`;#è5ÌÿÿƒÄ ƒ~uƒ~t‹F;Fsƒìjahä:#hà8#袃ă~t‹F;F rƒìjahä:#h@9#è}ƒÄ‹F +F9Fvƒìjahä:#h€9#è[ƒÄ¿‹^…Û„¾ƒì ÿ3ÿs‰ØCPSh ;#è—ËÿÿƒÄ ÷Ãtƒìjihä:#hÀ9#èƒÄöCtƒìjjhä:#hà;#èóƒÄƒ{wƒìjkhä:#hë:#èփă;t9wƒìjlhä:#h@:#趃Ä;^ rƒìjmhä:#h¶8#蚃Ä{‹…Û…BÿÿÿƒìWh;#èäÊÿÿƒÄ9~tƒìjshä:#h;#è`ƒÄ‹6…ö…cþÿÿƒì h2;#è®ÊÿÿƒÄeô[^_]ÍvU‰åWVSƒì ‹u‹] ‰ßƒçø…öuƒìjNh{7#h•8#è ƒÄ…ÛuƒìjOh{7#h<#èñƒÄƒ}uƒìjPh{7#hž8#èԃĉ؃à‹UTƒâø‰U‹ëv‹…ÛuƒìjXh{7#h<#螃ă{uƒ{t‹C;CsƒìjYh{7#hà8#èsƒÄƒ{t‹C;C rƒìjYh{7#h@9#èNƒÄ‹C +C9CvƒìjYh{7#h€9#è,ƒÄ;{‚hÿÿÿ;{ ƒ_ÿÿÿ‹EC‹C +C9Cvƒìjbh{7#h€9#èòƒÄÇEð‹sëv‰uð‹6…öt9þróƒ}ðtm‹Eð@9ørc9øtƒìjnh{7#h@<#諃ąöt8‹U:9ðr.9ðtƒìjuh{7#h€<#肃ċEF‹UðB‹‰ëE‹E‹UðBë9ƒ}ðt
-‹Eð‰8ëv‰{…öt‹U:9ðr‰ÐF‰G‹‰ë ‹E‰G‰7eô[^_]ÃU‰åƒì hÿu ÿuèÒýÿÿƒÄÉÐU‰å‹EÇ]ÉöU‰åWVSƒì ÇEèÇEìÇEð‹E‹0…ö„Zƒ~uƒ~t‹F;Fsƒìj]h¦<#hà8#蠃ă~t‹F;F rƒìj]h¦<#h@9#è{ƒÄ‹F +F9Fvƒìj]h¦<#h€9#èYƒÄÿEð¿‹^…Û„¨v÷Ãtƒìjdh¦<#hÀ9#è$ƒÄöCtƒìjeh¦<#hà;#èƒÄƒ{wƒìjfh¦<#hë:#èêƒÄƒ;t9wƒìjgh¦<#h@:#èʃÄ;^ rƒìjhh¦<#h¶8#讃ÄÿEì{‹…Û…[ÿÿÿ9~tƒìjnh¦<#h;#肃Ä‹FEè‹6…ö…§þÿÿƒì ÿuìÿuðÿuèÿuhÀ<#è¾ÆÿÿƒÄ eô[^_]ÍvU‰åVS‹u‹] EƒìPÿuhÀÓ#è…ÈÿÿƒÄhÀÓ#ÿ5Ü#jSVh@=#è5ƒÄ eø[^]ÍvU‰åƒìÿ5ìÛ#jÿuÿu ÿuh=#èƒÄ ÉÉöU‰åƒì E PÿuhÀ×#èÈÿÿƒÄ jjhx #èì%ÿÿƒÄhÀ×#h£=#èŠÅÿÿÇ$MèFÿÿƒÄÉÐU‰åƒìhÀ×#h€=#ècÅÿÿƒÄÉÉöU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)лÄÜ#‰]ð‹´ÃЃùÿtCI‰ÐÁà)Ð;´ÃÐr0»ÈÜ#‰Ï‰ÐÁà)ЋLÃPƒùÿtI‰ÐÁà)ЋUð;´ÂÐsՃÿÿt‰ÐÁà)ЋU‰ÅÝ#ë
-‰ö‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰ÅÝ#ë
-‹E‹U ‰B‹E@‰ÐÁà)ЍÅP‰ˆÈÜ#‰¸ÌÜ#ƒÄ[^_]ÍvU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)ÐÁà‹˜ß#‰U苀œß#‰Eìƒùÿtw ‰ÆȉÂÁâ)‹Eè‰Ã;՘ß#|[‰Eäv1‰ÐÁà)ЍÅ;š˜ß#u ‹Eì;‚œß#|1‰Ï‰ÐÁà)Ћ ÅÝ#ƒùÿt4 1‰ÐÁà)Ћ]ä;Řß#}«ƒÿÿt‰ÐÁà)ЋU‰ÅÝ#ë‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰ÅÝ#ë
-‹E‹U ‰B‹E@‰ÐÁà)ЍÅP‰ˆÈÜ#‰¸ÌÜ#ƒÄ[^_]ÍvU‰å‹EÇÿÿÿÿÇ@ÿÿÿÿ]ÍvU‰åWVS‹uv‰ÐÁà)ЍÅP‹˜ÌÜ#¿ÈÜ#‹ 8ƒûÿt[‰ÐÁà)ЉLÇPëv‹E ‰ƒùÿt&I‰ÁÁá)Á»ÌÜ#v‰ÐÁà)ЋDÃP‰DËPë v‹E ‰X[^_]ÐU‰åS‹M‹‰Øƒûÿt=‹@‰ÂÁâ)‹ÕÝ#‰ƒøÿt@‰ÐÁà)ÐÇÅÝ#ÿÿÿÿë
-vÇAÿÿÿÿ‰Ø‹$ÉÉöU‰åS‹M‹] ƒ;ÿt)I‰ÐÁà)Ћ‰ÅÝ#‹@‰ÂÁâ)‰ ÕÝ#됉KI‰ÐÁà)ÐÇÅÝ#ÿÿÿÿI‰ÐÁà)ÐÇÅÝ#ÿÿÿÿ‰ ‹$ÉÃU‰åS‹M‹] ƒ{ÿt,I‰ÐÁà)ЋS‰ÅÝ#‹C@‰ÂÁâ)‰ ÕÝ#ë‰ö‰ I‰ÐÁà)ÐÇÅÝ#ÿÿÿÿI‰ÐÁà)ÐÇÅÝ#ÿÿÿÿ‰K‹$ÉÃU‰å‹E‹]ÉöU‰å‹E‹@]ÐU‰å·Eƒøt ƒø…Àtë-ƒøtƒøtë ¸Á=#됸Æ=#됸Ê=#됸Ð=#됸‘.#]ÐU‰åWVSƒìœúX‰Â‰Uä÷Et$ƒìEèPjèL—ÿÿƒÄ ÿuìÿuèhà=#èeÁÿÿƒÄ÷EtN¾;5ðÛ#sA¿ Ü#vƒì µ‹;¶BP·BPRVh >#è!ÁÿÿƒÄ‹;VÿP ƒÄF;5ðÛ#rÇ÷Etƒì hû=#èõÀÿÿèX&ÿÿƒÄ‹Uä‰ÐPeô[^_]Éö(é"ðë"ðë"ðë"ðë"ðë"\ë"ðë"hë"të"ðë"€ë"€ë"€ë"€ë"€ë"€ë"€ë"€ë"€ë"€ë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"ðë"4é"Hé"´ê"tê"ôê"Pë"Hé"ðë"ðë"Dë"ðë"Pë"ðë",ê"ðë"ðë"Lê"ðë"”é"ðë"ðë"àé"Ôì"´î"´î"´î"´î"´î",î"´î"8î"@î"´î"Pî"Pî"Pî"Pî"Pî"Pî"Pî"Pî"Pî"Pî"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"´î"àì"ôì"´î"´î"´î" î"ôì"´î"´î"î"´î" î"´î"´î"´î"´î"ìí"´î"Dí"´î"´î"ˆí"Àñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"ï"ï"ï"ï"ï"ï"ï"ï"ï"ï"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Ìñ"Àï"Dð"@ñ"@ñ"@ñ"´ñ"Dð"Ìñ"Ìñ"¨ñ"Ìñ"´ñ"Ìñ"Ìñ"Ìñ"Ìñ"Øï"Ìñ"´ð"Ìñ"Ìñ"Ðð"$@$@$##ü#l#¼# #\#Œ##¤#0#¼#H#Ô#$#¬#8#Ä#P #Ü #P
-#l #œ #( #¬ #< -#À -#8#¤##|#à#,#p#”#°#Ì#è##„#ü#„#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#ä#$##ü#l#¼# #\#Œ##¤#0#¼#H#Ô#$#¬#8#Ä#P #Ü #P
-#l #œ #( #¬ #< -#À -#8#¤##|#à#,#p#”#°#Ì#è##„#ü#„#SIGNAL HANDLER: pid=%d
-main: ending...
-main: alarm(5), waiting t=2 sec
-main: alarm(3) return %d, waiting t=6 sec
-Error during Keyboard Initialization!!!Ctrl-C pressed!
-KeybPortKeyTasktask_create
-scheduletime %lus %luns * caplasttime %lus %luns * exec=%d TIME = %lu
-The system tick must be less than 55 mSec!Abort detected
-Code : %u
-Too many scheduling levels!!!
-Too many resource levels!!!
-debug info noticewarn err crit alert emerg <%i>[%s] %sPosix task
-Signal number %d...
-with value : %d
-POSIX_ReadyPOSIX_DelayPOSIX_UnknownSlice: %d
-MainPOSIX_register_level
- alloco descrittore %d %d
- lev=%d
-POSIX schedulerPid: %d Name: %20s Prio: %3ld Status: %s
-
-Panic!!! can't create main task...
-dummy PID: %d
-Dummy1Dummy2Dummy3Dummy4Dummy5Dummy6Dummy7Dummy8Dummy9Dummy0DummyaDummybDummycDummydDummyeDummyfDummygDummyhDummyDummy (RR) Posto dummy_create
-
-Panic!!! can't create dummy task...
-Entro in dummy_register_level
-Port des :
-Free port des : %d
-%d %s vt: %d pn: %d
-%d pd: %d vt: %d pn: %d Resources owned by the tasks:
-%-4dPI_register_module
-PI module
-PC priority of the tasks:
-%-4ldPC_register_module
-PC moduleTR %x
-SS:SP %x:%lx
-Stack0 : %x:%lx
-Stack1 : %x:%lx
-Stack2 : %x:%lx
-CS : %x DS : %x
-Descriptor [%x] InfoNo more Descriptors...
-%x (Hex)Base : %lx Lim : %lx Acc : %x Gran %x
-2Coprocessor error#Page fault*General protection fault*Stack exception*Segment not present*Unvalid TSS#INTEL reserved*Double defect1FPU context switch*Unvalid opcode#BOUND limit exceeded#Overflow detected on INTO#Breakpoint trap#NMI detected#Debug fault#Division by 0Exception %d occurred
-ABORT %d !!!LL Time Panic!!!
-time.cError! File:%s Line:%d %sOne-shot timer selected...
-Periodic timer selected...
-Unhandled Exc or Int occured!!!
-32/LINUX CrossCompiled/ELFHalt called1234567890-+12345678901234567890xabcdefABCDEF1234567890.e+-0123456789ABCDEF$@ -Æ@,ú1°<NaN+Inf-Infacosacosfacos: DOMAIN error
-asinasinfasin: DOMAIN error
-atan2atan2fatan2: DOMAIN error
-hypothypotfexpexpfy0fy0: DOMAIN error
-y1fy1: DOMAIN error
-ynynfyn: DOMAIN error
-lgammalgammaflgamma: SING error
-loglogflog: SING error
-log: DOMAIN error
-log10log10flog10: SING error
-log10: DOMAIN error
-powpowfpow(0,0): DOMAIN error
-pow(0,neg): DOMAIN error
-sinhsinhfsqrtsqrtfsqrt: DOMAIN error
-fmodfmodffmod: DOMAIN error
-remainderremainderfremainder: DOMAIN error
-acoshacoshfacosh: DOMAIN error
-atanhatanhfatanh: DOMAIN error
-atanh: SING error
-scalbscalbfj0j0f: TLOSS error
-j1j1fjnjnfneg**non-integral: DOMAIN error
-à?addfree.cmax >= minreg->min < reg->maxnew_max > new_min(reg->min & (sizeof(struct lmm_node) - 1)) == 0(reg->max & (sizeof(struct lmm_node) - 1)) == 0addregio.cr != reg(reg->max <= r->min) || (reg->min >= r->max)alloc.clmm != 0size > 0reg->free >= 0(DWORD)node < reg->maxreg->free >= size(reg->nodes == 0 && reg->free == 0) || (DWORD)reg->nodes >= reg->minreg->nodes == 0 || (DWORD)reg->nodes < reg->maxreg->free <= reg->max - reg->min((DWORD)node & (sizeof(struct lmm_node) - 1)) == 0((DWORD)node->size & (sizeof(struct lmm_node) - 1)) == 0(node->next == 0) || (node->next > node)alloc_ge.canode >= node(split_size & (sizeof(struct lmm_node) - 1)) == 0lmm_dump(lmm=%p)
-dump.cnode->size >= sizeof(*node) free_check=%08lx
-reg->free == free_checklmm_dump done
- region %08lx-%08lx size=%08lx flags=%08lx pri=%d free=%08lx
- node %p-%08lx size=%08lx next=%p
-(node->size & (sizeof(struct lmm_node) - 1)) == 0block != 0reg != 0(DWORD)prevnode + prevnode->size == (DWORD)node(DWORD)node + size == (DWORD)nextnodestats.cLMM=%p: %u bytes in %u regions, %d nodes
-assertion %s failed in %s at line %i (task:%i_%i)
-MAGIC assertion failed in %s at line %i (task:%i_%i): %s
-KERNEL PANIC (sys_panic_stub): %s
-KERNEL PANIC (sys_panic): %s
-FreeExeSleepWaiting on joinTime (EXACT) : %lus %luns
-< Memory Dump >
-< Level %d : %s Code: %d Version: %d >
-8Œÿÿ’ÏÿÿšÏÿHN#ÿ`Y#ÿÿÿÿÿÿÿÿÿÿÿÿ1234567890!@#$%^&*()-_=+[{]};:'"`~/?,<.>\|   - -1234567890.+*/-+*-aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 1234567890!"œ$%&/()='?^Š‚+*•‡…ø\|<_,:.;—õ   - -1234567890.+*/-+*-aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ[]@#hV#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-.#&.#.#.#.#
-.#.#ü-#hy"py"py"S3#F3#83#'3# 3#ö2#æ2#Ò2#Ã2#³2#¦2#‘2#€2#f2#Z2#³2#G2#þþAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAš‡4#ðÿÿÿÿGCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)01.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.text.rodata.data.sbss.bss.comment.note"€%! %# &¨ )HN#È> /LY#àI5`Y#àI8ã :àILC,[h”aI
\ No newline at end of file
/start/pse51/ptest5
Property changes:
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: start/pse51/pinit.c
===================================================================
--- start/pse51/pinit.c (revision 1087)
+++ start/pse51/pinit.c (nonexistent)
@@ -1,126 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: pinit.c,v 1.1.1.1 2002-09-02 09:37:47 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:47 $
- ------------
-
- This is a minimal initialization file for the PSE51 profile.
-
- It initializes the POSIX scheduler, the Hartik Ports and the Keyboard driver.
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-
-#include "kernel/kern.h"
-#include "modules/posix.h"
-#include "modules/dummy.h"
-
-#include "modules/pi.h"
-#include "modules/pc.h"
-
-#include "modules/sem.h"
-#include "modules/hartport.h"
-
-#include "drivers/keyb.h"
-
-#include "pthread.h"
-#include "time.h"
-
-
-/*+ sysyem tick in us +*/
-#define TICK 1000
-
-/*+ RR tick in us +*/
-#define RRTICK 10000
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- POSIX_register_level(RRTICK, POSIX_MAIN_YES, mb, 32);
- dummy_register_level();
-
- PI_register_module();
- PC_register_module();
-
- SEM_register_module();
-
- /* for the Pthread library */
- PTHREAD_register_module(1, 0, 1);
-
- /* for the real time clock extensions */
- TIMER_register_module();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
- NRT_TASK_MODEL m; // the scheduling model for the Keyboard
-
- KEYB_PARMS k = BASE_KEYB;
- keyb_def_task(k, &m);
-
- nrt_task_default_model(m);
- nrt_task_def_arg(m,arg);
- nrt_task_def_usemath(m);
- nrt_task_def_ctrl_jet(m);
- nrt_task_def_save_arrivals(m);
- nrt_task_def_unjoinable(m);
- nrt_task_def_weight(m, sched_get_priority_max(SCHED_RR));
- nrt_task_def_policy(m,SCHED_RR);
- nrt_task_def_inherit(m,PTHREAD_EXPLICIT_SCHED);
- nrt_task_def_nokill(m);
- nrt_task_def_system(m);
-
- HARTPORT_init();
-
- if (KEYB_init(&k) < 0)
- kern_printf("Error during Keyboard Initialization!!!");
-
- __call_main__(mb);
-
- return (void *)0;
-}
Index: start/pse51/ptest4.c
===================================================================
--- start/pse51/ptest4.c (revision 1087)
+++ start/pse51/ptest4.c (nonexistent)
@@ -1,151 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: ptest4.c,v 1.1.1.1 2002-09-02 09:37:47 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:47 $
- ------------
-
- Posix test 4:
-
- the main task create 3 tasks, J1, J2, J3
- at t = 1 sec. it raise a signal to J1
- at t = 2 sec. it kills J2
-
- J1,J2,J3: it simply calls nanosleep
-
- non standard function used:
- cprintf
- sys_gettime
- keyboard stuffs
- sys_end
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <sys/types.h>
-#include <pthread.h>
-#include <signal.h>
-#include <time.h>
-
-#include <kernel/kern.h>
-#include <drivers/keyb.h>
-
-void uscitaJ(void *arg)
-{
- cprintf("J: (pid=%d) AAAARRRRGGGHHH!!! killed by someone...\n", exec_shadow);
-}
-
-void *J(void *arg)
-{
- struct timespec t1, t2;
- int err;
-
- cprintf("J (pid=%d) starts and call nanosleep\n",exec_shadow);
-
- t1.tv_sec = 3;
- t1.tv_nsec = 0;
- NULL_TIMESPEC(&t2);
- pthread_cleanup_push(uscitaJ,NULL);
- err = nanosleep(&t1, &t2);
- pthread_cleanup_pop(0);
-
- cprintf("J (pid=%d) ending, nanosleep returns errno=%d, t2=%ld.%ld\n",
- exec_shadow, err, t2.tv_sec, t2.tv_nsec/1000);
-
- return 0;
-}
-
-void signal_handler(int signo, siginfo_t *info, void *extra)
-{
- cprintf("SIGNAL HANDLER: pid=%d\n",exec_shadow);
-}
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-
-int main(int argc, char **argv)
-{
- int err;
- pthread_t j1, j2, j3;
- struct sigaction sig_act;
-
- KEY_EVT emerg;
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
- sig_act.sa_sigaction = (void *) signal_handler;
- sig_act.sa_flags = SA_SIGINFO;
- sigemptyset(&sig_act.sa_mask);
-
- sigaction(31, &sig_act, NULL);
-
- cprintf("main: creating J1\n");
- err = pthread_create(&j1, NULL, J, NULL);
- if (err) cprintf("Error creating J1\n");
-
- cprintf("main: creating J2\n");
- err = pthread_create(&j2, NULL, J, NULL);
- if (err) cprintf("Error creating J2\n");
-
- cprintf("main: creating J3\n");
- err = pthread_create(&j3, NULL, J, NULL);
- if (err) cprintf("Error creating J3\n");
-
- cprintf("main: waiting 1 sec\n");
- while (sys_gettime(NULL) < 1000000);
-
- cprintf("main: pthread_kill on j1, then wait until t=2 sec \n");
- pthread_kill(j1, 31);
-
- while (sys_gettime(NULL) < 2000000);
- cprintf("main: pthread_cancel(J2)\n");
- pthread_cancel(j2);
-
- cprintf("main: ending...\n");
-
- return 0;
-}
Index: start/pse51/ptest6
===================================================================
--- start/pse51/ptest6 (revision 1087)
+++ start/pse51/ptest6 (nonexistent)
@@ -1,527 +0,0 @@
-ELF"4(4 ( €""H[H[ È[Hk#Hk# ðõ 덶°­üORäe‹Ká€uU¿€ Ç–eÆG1GeÆGGeÆG2GeÆG¸”#fe£hk#Áèfe£nk#Hs#¿€ Ç’eÆG0GeÆGf¸0ŽØŽÀŽÐŽàŽè¼`ž#ÇÐÛ%`~#ÇÔÛ%`ž#£Ts#‰Xs#Hs#êµ"8Ns#üè¢íê U‰å‹Eê ‰öU‰åSìŒÿuh€D#èAE„Pjd]ˆSÿ5L$èœ]ƒÄ Sÿu„PhÀD#èƒÄh,$ÿ5L$è_aƒÄ…Àtƒì謃Äÿ0h E#èéèÀAƒÄƒì h…H#èԃĐƒì jèòAƒÄ=?Bvìƒì h@E#è¯jj -hH#ÿ5L$è;XƒÄ …Àtƒìè@ƒÄÿ0hªH#è}èTAƒÄjhø"jhH$èêcjhä"jh$$è×cƒÄhÈH#èBƒÄ‹]üÉÉöU‰åSìh×H#è$E„Pjd]ˆSÿ5L$è\ƒÄ Sÿu„Ph E#èýÿÇ$ñH#èñÿƒÄ‰öƒì jèAƒÄ=_ãvìƒì hàE#èËÿjjh I#ÿ5L$èWWƒÄ …Àtƒìè\ƒÄÿ0h F#è™ÿèp@ƒÄƒì hI#è„ÿjjhI#ÿ5L$èWƒÄ …ÀtƒìèƒÄÿ0h@F#èRÿè)@ƒÄƒì hI#è=ÿjjhI#ÿ5L$èÉVƒÄ …Àtƒìè΃Äÿ0h`F#è ÿèâ?ƒÄƒì hI#èöþjj h I#ÿ5L$è‚VƒÄ …Àtƒì臃Äÿ0h€F#èÄþè›?ƒÄƒì hI#è¯þjjh,I#ÿ5L$è;VƒÄ …Àtƒìè@ƒÄÿ0h F#è}þèT?ƒÄƒì hI#èhþÇ$;I#è\þ¸ƒÄ‹]üÉÍvU‰åVSìœhJI#è7þƒÄƒì jèV?ƒÄ=¿‘!v썅tÿÿÿPjd]ˆSÿ5L$èxZSÿµtÿÿÿPhG#èöýƒÄ vƒì jè?ƒÄ=ÿž$v썅tÿÿÿPjd]ˆSÿ5L$è4ZSÿµtÿÿÿPhG#è²ýƒÄ vƒì jèÎ>ƒÄ=?¬'v썅tÿÿÿPjd]ˆSÿ5L$èðYSÿµtÿÿÿPhG#ènýƒÄ vƒì jèŠ>ƒÄ=¹*v썅tÿÿÿPjd]ˆSÿ5L$è¬YSÿµtÿÿÿPhG#è*ýƒÄ vƒì jèF>ƒÄ=¿Æ-v썅tÿÿÿPjduˆVÿ5L$èhYVÿµtÿÿÿPhG#èæüDžxÿÿÿè"Dž|ÿÿÿƒÄjè8@‰Ã‹‰E€…xÿÿÿ‰…tÿÿÿPjdVÿ5L$èYƒÄ VÿµtÿÿÿPhG#èü‹E€‰ƒÄ¸eø[^]ÍvU‰åSƒì<ÆEÉxÆEÊ-ÆEÈh@"ƒì‹EÈf‰$ÆD$-è˜ÇEô"ÇEð]èEì‰$輁ƒÄ jSjè§lÇ,$Ç0$Ç4$+ÇT$Ç\$ Ç`$Ø"Çd$$ƒÄÇ$Ç $Ç$Ç$Ç $Ç$ÇD$
-Ç$
-ÇEØÇEÜÇEàdEØPjjBhpI#è»K£L$ƒÄƒøÿuƒìèƒÄÿ0h€G#錍vƒìhT$ÿ5L$è[ƒÄ…Àtƒìè΃Äÿ0h G#ë[‰öƒì hàG#èÿújh"jhP$èt^ƒÄh H#èßúƒÄƒì jèþ;ƒÄ=ßg5vìƒì ÿ5$$èö_Ç$sI#è®ú¸ƒÄ‹]üÉÐU‰åƒìh`D#èújj hLH#ÿ5L$èRƒÄ …Àtƒìè!ƒÄÿ0hXH#ë ƒì hvH#èSú¸ƒÄÉÐU‰åƒìhÀF#è8úƒÄÉÍvU‰åSƒì‹] jèK;ƒÄPÿs ÿs¸dI#ƒ{t¸jI#Pÿ3h@G#èøùƒÄ ‹]üÉÃU‰åƒìèÁ:ÉÍvU‰åƒìj ÿujh'èý”è°žè7ÂèfÈèá®ƒÄ jjjèÃ^螌¸èƒÄÉÃU‰åWVSƒìX‹]}¨¾\s#ü¹ó¥E¸‰E¨fÇE¸ÇE¼ÇEÀfÇEÄÇEÐÇEÔÇEÜÇEà‰]ÈÇEØÇEÌjèü]‰EÐÇEÜÇEàƒMÌ
-膲E¨‰$ècƒÄ…Àyƒì h I#èkùƒÄƒì SèoE¸ƒÄeô[^_]ÍvU‰åƒìŠU€=lt#„¶€ú*t€úªt
-€ú6t€ú¶uÆlt#¸é›„Òy,Ælt#€ú¸uÆxt#Ænt#ëՀúuÐÆxt#ëljöÆlt#€ú8u€ -xt#Ænt#멀úu € -xt#뛉ö€ú5uf¾Ÿ#·Àé)v€ú…•f¾üž#·Àé -v€úàuÆlt#éTÿÿÿv€ú*t€ú6u2Æmt#€ú*u€ -xt#é/ÿÿÿ‰ö€ú6…$ÿÿÿ€ -xt# éÿÿÿv€úªt€ú¶u"Æmt#€úªt €ú¶…öþÿÿÆxt#éêþÿÿ€úFu€=qt#•qt#ë.v€ú:u€=ot#•ot#ëv€úEu;€=pt#•pt#ƒì¶qt#P¶ot#P¶pt#Pèõ¸ƒÄé€úu€ -xt#éhþÿÿv€ú8u€ -xt#éTþÿÿv€út€ú¸uÆxt#é;þÿÿ‰ö¸„҈рúRt2€úOt-€úSt(€úPt#€úQt€úKt€úLt€úMt€úGt
-€úHt€úIu€=pt#uT€=mt#uK·Â -ÿë~€=ot#t/Bð< vBâ<vBÔ<w€=mt#t¶Âf¾€àž#·ÀëG€=mt#t¶Âf¾€€Ÿ#·Àë-v€=nt#t¶Âf¾€  #·Àëv¶Âf¾€àž#·ÀÉÃU‰åWVSƒì,}؃ìjE×PèòƒÄ…À„¡ƒì ¶E×Pèöüÿÿ‰ÂƒÄf…Ò„†÷Âÿt  xt#ƒÈ@ë‰ö xt#ˆE؈UيE׈EÚ±»;؞#}8¾`ž#v݊D2:EÚuŠ2:EØuƒì Wÿ’dž#±ƒÄC;؞#|ЄÉuƒìjW¿¢ #Pè­·ƒÄè-é<ÿÿÿU‰å‹E£ht#Šˆâž#ŠPˆãž#ŠPˆäž#ŠPˆåž#ŠPˆæž#ŠPˆçž#ŠPˆèž#ŠPˆéž#ŠPˆêž#ŠP ˆëž#ŠP
-ˆ‚Ÿ#ŠP ˆƒŸ#ŠP ˆ„Ÿ#ŠP -ˆ…Ÿ#ŠPˆ†Ÿ#ŠPˆ‡Ÿ#ŠPˆˆŸ#ŠPˆ‰Ÿ#ŠPˆŠŸ#ŠPˆ‹Ÿ#ŠPˆìž#ŠPˆŒŸ#ŠPˆíž#ŠPˆŸ#ŠPˆúž#ŠPˆšŸ#ŠPˆûž#ŠPˆ›Ÿ#ŠPˆŸ#ŠPˆ§Ÿ#ŠPˆŸ#ŠPˆ¨Ÿ#ŠP ˆ Ÿ#ŠP!ˆ©Ÿ#ŠP"ˆŸ#ŠP#ˆµŸ#ŠP$ˆŸ#ŠP%ˆ³Ÿ#ŠP&ˆŸ#ŠP'ˆ´Ÿ#ŠP(ˆ Ÿ#ŠP)ˆ«Ÿ#ŠP*ˆŸ#ŠP+ˆ¹Ÿ#ŠP,ˆîž#ŠP-ˆŽŸ#ŠP.ˆïž#ŠÖˆŸ#ŠP0ˆáž#ŠP1ˆŸ#ŠP2ˆüž#ŠP3ˆœŸ#ŠP4ˆäŸ#ŠP5ˆϟ#ŠP6ˆП#ŠP7ˆџ#ŠP8ˆ˟#ŠP9ˆ̟#ŠP:ˆ͟#ŠP;ˆǟ#ŠP<ˆȟ#ŠP=ˆɟ#ŠP>ˆҟ#ŠP?ˆӟ#ŠP@ˆ.Ÿ#ŠPAˆŸ#ŠPBˆŸ#ŠPCˆ*Ÿ#ŠPDˆΟ#ŠPEˆ·Ÿ#ŠPFˆʟ#ŠPGˆþž#ŠPHˆžŸ#ŠPIˆŸ#ŠPJˆ°Ÿ#ŠPKˆŸ#ŠPLˆ®Ÿ#ŠPMˆŸ#ŠPNˆ Ÿ#ŠPOˆòž#ŠPPˆ’Ÿ#ŠPQˆŸ#ŠPRˆ¡Ÿ#ŠPSˆŸ#ŠPTˆ¢Ÿ#ŠPUˆŸ#ŠPVˆ£Ÿ#ŠPWˆ÷ž#ŠPXˆ—Ÿ#ŠPYˆŸ#ŠPZˆ¤Ÿ#ŠP[ˆŸ#ŠPRˆ¥Ÿ#ŠP]ˆŸ#ŠP^ˆ¦Ÿ#ŠP_ˆŸ#ŠP`ˆ²Ÿ#ŠPaˆŸ#ŠPbˆ±Ÿ#ŠPcˆøž#ŠPdˆ˜Ÿ#ŠPeˆùž#ŠPfˆ™Ÿ#ŠPgˆðž#ŠPhˆŸ#ŠPiˆóž#ŠPjˆ“Ÿ#ŠPkˆÿž#ŠPlˆŸŸ#ŠPmˆôž#ŠPnˆ”Ÿ#ŠPoˆöž#ŠPpˆ–Ÿ#ŠPqˆŸ#ŠPrˆ¯Ÿ#ŠPsˆñž#ŠPtˆ‘Ÿ#ŠPuˆ -Ÿ#ŠPvˆ­Ÿ#ŠPwˆõž#ŠPxˆ•Ÿ#ŠPyˆ Ÿ#ŠPzˆ¬Ÿ#ŠP{ˆ: #ŠP|ˆ; #ŠP}ˆG #Š@~¢H #]ÍvU‰åWVSƒì\‹]}ؾ€t#ü¹󥿸ƒ=tt#…Qº¾àž#¹€Ÿ#‰ö·ÂÆ0ÆBfúví…Ûu]؃{ÿuÇChs#ƒì ÿsèûÿÿÇ$jjjhÙI#èªf£¢ #ƒÄ fƒøÿu ¸þÿÿÿéÞ‰öjjjhÙI#èà­f£¤ #ƒÄfƒøÿuƒì ¿¢ #PèE±¸ýÿÿÿ頍vÇ؞#ƒ{ÿuÇC0"ƒ{tIÆE™cÆEš.ÆE˜ƒìÿsƒì‹E˜f‰$ÆD$.èÅÆE˜ƒÄÿsƒì‹E˜f‰$ŠEšˆD$襃ă;ÿuQfÇE¨ÇE¬ÇE°fÇE´ÇE¸ÇEÐÇEÈÐÇEÄ ÇEÀ¨aÇE¼
-ÇE̍E¨ë‹ƒì jjPh8 "hâI#èÿ‰ÃƒÄ ‰¨ #ƒøÿu'ƒì ¿¢ #PèC°¿¤ #‰$è4°‰Ø钐ƒ=|t#uWƒì ÿ5¨ #艉ǃąÿt4ƒì ¿¢ #Pèü¯¿¤ #‰$èí¯ƒÄÿ5¨ #èg5¸üÿÿÿë=Ç|t#ëèƒì¶qt#P¶ot#P¶pt#PèûÇtt#‰øƒÄeô[^_]ÃU‰åƒì¶EPEèP¿¤ #PèృÄ„Àt÷Eè@u¶Eéë‰ö¸ÉÐU‰åƒì ¶E Pÿu¿¤ #P襱·ÀƒÄÉÐU‰åSƒ=؞#0‹ -؞#Í»`ž#‹Ef‰ŠE
-ˆD‹E ‰‚dž#A‰ -؞#‹$ÉÉöU‰åƒìèÉÍvU‰åƒìè±ÉÍvU‰åƒì¸ÿÿÿÿƒ=tt#t9蓃ì ÿ5¨ #è-4¿¢ #‰$薮¿¤ #‰$臮¸ƒÄÉÐU‰åƒìjèêÇ$èÛéÇ$ÈI#è£éè²-ƒÄÉÐU‰åWVSƒìŠEˆEó¿1¾d»`‰ö¹v‰òì©t"‰ÈA=þÿÿvì¸ÿÿÿÿ…Àu‰ÚŠEóî¸ë‰ö¸ë搸ÿÿÿÿÇEì¹d…Àt¸ÿÿÿÿët¸ë‰Êì©uî‹EìÿEì=þÿÿvé¸ÿÿÿÿ…Àu‰Úì¶Àë¸ÿÿÿÿƒøÿu
-¸þÿÿÿë3v=úu ¸ë"‰ö=þt ¸ýÿÿÿë‰ö‰øO…À9ÿÿÿ¸üÿÿÿƒÄ[^_]ÃU‰åVSƒìŠEˆE÷³Ô¾¹d‰ö‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë -¸ë搸ÿÿÿÿ…Àt¸ÿÿÿÿëL¸ë&»¹d‰ö‰Êì©tâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àuº`ŠE÷î¸ëv¸ÿÿÿÿ…Àt¸ÿÿÿÿëj¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àuºdì© tº`ì¶Ðëvºÿÿÿÿ‰Ð…Òx¸úú”ÀDþƒÄ[^]ÃU‰åWVSƒì »¾`‰ØK…À~^ƒì hÿè¼ýÿÿ‰ÂƒÄ…Òu{¿¹d‰Êì©u‰øG=þÿÿvì¸ÿÿÿÿ…Àu‰òì¶Ðëv¸ëꐺÿÿÿÿúªu›¸üÿÿÿúª…ƃì hõèMýÿÿ‰ÂƒÄ…Òt(¸ûÿÿÿ馉ö¸ýÿÿÿ隉ö¸ë.¸ëZ³`¾¹d‰Êì©tډðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî³e¾¹dv‰Êì©t®‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØîƒì hôèªüÿÿ‰ÂƒÄ¸…Ò•ÀHƒàƒèeô[^_]ÃU‰åWVSƒì ¾»d¹`‰Úì©t -‰Êì‰ðF=þÿvé³­¾¹d‰Êì©„‚‰ðF=þÿÿvè¸ÿÿÿÿ…ÀuºdˆØî¾»d¹`‰Úì©t -‰Êì‰ðF=þÿv鳪¾¹d‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ë搸놐¸ÿÿÿÿ…Àt¸÷ÿÿÿéݐ¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àu º`ì¶Àë¸ÿÿÿÿƒøUt¸ÿÿÿÿ錸ë&³«¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸öÿÿÿé9¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àu º`ì¶Àë¸ÿÿÿÿ…Àt¸þÿÿÿé鐸ë&³®¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…À…<èzüÿÿ…À…Žƒì hóèIúÿÿƒÄ…Àt
-¸ùÿÿÿépƒì jè.úÿÿƒÄ…Àt¸øÿÿÿéU¸ë.ÆŒt#³©¾¹d‰Êì©tډðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸ôÿÿÿéù¸ë&»¹d‰ö‰Êì©uâ‰ØC=þÿÿvì¸ÿÿÿÿ…Àu º`ì¶Àë¸ÿÿÿÿ…Àt¸óÿÿÿ驐¸ë&³¨¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸õÿÿÿéU¸ë&³Ó¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸ðÿÿÿ鐸ë&³Z¾¹d‰Êì©tâ‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî¸ë¸ÿÿÿÿ…Àt¸ïÿÿÿ魐ƌt#ëBv¸ë^¹þÿ¾d»`‰òì¶ø÷Çt‰Úì¶À÷Ç tƒøZt»IƒùÿuÙ³§¾¹d‰Êì©tª‰ðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àté»þÿÿ‰ö¸ë:€=Œt#„þÆŒt#³¨¾¹d‰Êì©tΉðF=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt¸îÿÿÿ鱐¸ëvƒì hóèWøÿÿ‰ÃÇ$dèIøÿÿÃÇ$èè;øÿÿÃÇ$è-øÿÿÃÇ$çèøÿÿþ§ƒÄ¿¹dv‰Êì©t’‰øG=þÿÿvì¸ÿÿÿÿ…Àuºd‰ðî¸ë¸ÿÿÿÿ…Àt¸íÿÿÿë…ÛuÆŒt#¸eô[^_]ÃU‰åVS¡ t#…Àt¡ t#H£ t#¸é²¸ë6ƒ=˜t#uKŠœt#¾¹dv‰Êì©t҉ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØîÿ˜t#뤍v¸ë:ƒ=˜t#uGǘt#³ô¾¹d‰Êì©tΉðF=þÿÿvì¸ÿÿÿÿ…À…Xÿÿÿº`ˆØîéKÿÿÿ‰ö¸[^]ÍvU‰åWVSƒì ¡¤t#@£¤t#¾õ³Ô¿¹dv‰Êì©t"‰øG=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ë搸ë.¸ÿÿÿÿ…Àu0»¹d‰Êì©tډØC=þÿÿvì¸ÿÿÿÿ…Àuº`‰ðîœúX‰Çƒì hõè5õÿÿ‰ÃƒÄ…Ût¸ûÿÿÿéù‰ö¸ë1¾§ÇEð¹dv‰Êì©tڋEðÿEð=þÿÿvé¸ÿÿÿÿ…Àu ºd‰ðî¸ë¸ë=¸ëq¸ÿÿÿÿþ`ÇEð¹d‰Êì©t΋EðÿEð=þÿÿvé¸ÿÿÿÿ…Àuºd‰ðî¾eÇEð¹dv‰Êì©tš‹EðÿEð=þÿÿvé¸ÿÿÿÿ…Àuº`‰ðîƒì hôè;ôÿÿÃĉøPÆt#‰Øeô[^_]ÐU‰åWVSƒì ¸ÿÿÿÿ€=Œt#„ºœúX‰Æƒì hõèóóÿÿƒÄ…Àt(¸ûÿÿÿé—‰ö¸ë:¸ëf¸é“‰ö³`¿¹d‰Êì©tΉøG=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî³G¿¹dv‰Êì©t¢‰øG=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØ¿¹dv‰Êì©„rÿÿÿ‰øG=þÿÿvè¸ÿÿÿÿ…ÀuºdˆØî¸ë¸ÿÿÿÿ…Àt ¸îÿÿÿ鐃ì hôèÿòÿÿƒÄ…Àt¸Ûÿÿÿ飉ö¸ë:‰ðP¡¤t#@£¤t#¾ô³Ô¿¹d‰Êì©tΉøG=þÿÿvì¸ÿÿÿÿ…ÀuºdˆØî¸ë -¸ë.¸ÿÿÿÿ…Àu0»¹d‰Êì©tډØC=þÿÿvì¸ÿÿÿÿ…Àuº`‰ðîƍt#¸eô[^_]ÍvU‰åƒìÇÄ¡#ÇÀ¡#ƒ=”t#t!úè‹õÿÿ£t#Ç”t#û…Àtúèôÿÿû¡t#…Àuƒìÿuh'"jèÅf¸ƒÄÉÍvU‰åVS¡ t#@£ t#³õ¾¹d‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî¸ë -¸ë搸ÿÿÿÿ[^]ÍvU‰åVS¡ t#@£ t#³ô¾¹d‰Êì©t"‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî¸ë -¸ë搸ÿÿÿÿ[^]ÍvU‰åƒì‹MœúX‰Â¡À¡#@%ÿ£À¡#Š€À #ˆ‰ÐP€9úu è(úÿÿë‰ö¸ÉÐU‰åƒìƒ=¬t#t(Ç$¢#Ç ¢#Ç(¢#Ǭt#‹E£¨t#ƒ=”t#t!úèôÿÿ£t#Ç”t#û…Àtúèòÿÿû¡t#…Àu.¸ìÿÿÿ€=Œt#t ƒìjÿhX'"j è/eƍt#¸ƒÄÉÉöU‰åS‹MœúX‰Ã¡ ¢#@ƒà?£ ¢#ºà¡#ŠˆA¡ ¢#@ƒà?£ ¢#Šˆ¡ ¢#@ƒà?£ ¢#ŠˆA‰ØP¸‹$ÉÉöU‰åƒì€=t#tèäùÿÿƒì j è>eƍt#¸ƒÄÉÐU‰åƒìƒ=”t#t!úè óÿÿ£t#Ç”t#û…Àtúè™ñÿÿû¡t#…Àt¸ë¶Œt#ÉÍvU‰åVSŠEŠU€} t ƒ -œt#ë ‰öƒ%œt#„Àt ƒ -œt#ëƒ%œt#„Òtƒ -œt#ë¸ë6¸ëbƒ%œt#³õ¾¹d‰Êì©t҉ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØî³í¾¹dv‰Êì©t¦‰ðF=þÿÿvì¸ÿÿÿÿ…Àuº`ˆØîÿ˜t#[^]ÐU‰åSƒìœúX‰Ã€=t#tè–øÿÿè‘ðÿÿƒì hóèhîÿÿƒÄ…Àuƒì jèWîÿÿƒÄ…Àu‰ØP‹]üÉÍvU‰åº`ì¶ÈœúX‰Â¡À¡#;Ä¡#t¡Ä¡#ˆˆÀ #@%ÿ£Ä¡#‰ÐP]ÉöU‰åƒìº`ì¶Ðƒ=(¢#u €úúu¡¤t#H£¤t#郍v÷ÂÀuxÿ(¢#œúX‰Á¡ ¢#;$¢#t¡$¢#ˆà¡#@ƒà?£$¢#ë"‰ö¡$¢#+(¢#ƒÀAƒà?£$¢#Ç(¢#‰ÈPƒ=(¢#uÇ(¢#ƒì ÿ5¨t#èƒÄÉÉöU‰åSƒì}™w‹UÑâU‰ÐÁà)Ðfƒ<ň$uè©óNj¸ÿÿÿÿ鏐ƒ=$tcœúX‰Ã‹UÑâU‰ÐÁà)ЍÅ0ö€a$ t ÿ€d$ë-v‹EÑàE‰ÂÁâ)‹Õd$ƒì‹•À$ÿuRÿP@ƒÄ‰ØPéè3·…ÀtgœúX‰Ã‹UÑâU‰ÐÁà)ЍÅ0ö€a$ t ÿ€d$ë2v‹EÑàE‰ÂÁâ)‹Õd$ƒì‹•À$ÿuRÿP@蔃ĉØPé­úèúNjŒ$R‰ÑÁá)Ñ»`$f‰DË‹UÑâU‰ÐÁà)ЍÅ0öD t ÿ€d$ë?vƒìU‰ÐPjÿìt#‹MI‰ÐÁà)ЋÅd$ƒÄ‹•À$QRÿP@è/ƒÄ¡Œ$@‰ÂÁâ)ƒì ¿Õh$PèhÇèƒÄû¸‹]üÉÐU‰åWVSƒì ‹]f…Ûuèîñnj¸ÿÿÿÿé"‰öƒ=$„“œúX‰ÇÇEð}ð™s¾`$‹UðÑâUð‰ÐÁà)ÐÁàf9\,uHƒÀ0öD0 t ÿ€d$ë6ƒìEðPjÿìt#‹MðI‰ÐÁà)ЋÅd$ƒÄ‹•À$QRÿP@ƒÄÿEð}ð™~“‰øPé}‰öèCµ…À„›œúX‰ÇÇEð}ð™w¾`$‹Eð@‰ÂÁâ)Õf9\,uJƒÀ0öD0 t ÿ€d$ë8vƒìEðPjÿìt#‹MðI‰ÐÁà)ЋÅd$ƒÄ‹•À$QRÿP@ƒÄÿEð}ð™~èj‰øPéԐúèÒŋŒ$R‰ÑÁá)Ñf‰Íh$ÇEð}ð™w¾`$‹Eð@‰ÂÁâ)Õf9\,uJƒÀ0öD0 t ÿ€d$ë8v‹MðI‰ÐÁà)ЋÅd$ƒì‹•À$QRÿP@ƒÄEðPjÿìt#ƒÄÿEð}ð™~èÞ ¡Œ$@‰ÂÁâ)ƒì ¿Õh$PèÅèÁƒÄû¸eô[^_]ÃU‰åSƒìúèëċŒ$R‰ÑÁá)Ñf‰Íh$ƒìhD$j謃čUð¡H$;˜$|¡D$+”$‰Eð¡H$+˜$ë!‰ö¡D$+”$H‰Eð¡H$+˜$ʚ;‰B‹Mð ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ôºÓMb‰Ø÷êÁú‰ØÁø)ÂыŒ$R‰ÐÁà)Ð) Ŭ$ƒì Qè. ƒÄƒ=œ$ÿtƒì ÿ5œ$ÿh$Çœ$ÿÿÿÿƒÄ‹ -Œ$I‰ÐÁà)ЋÅd$ƒì‹…À$QPÿRLè{ ƒÄhŒ$jÿìt#ÇŒ$ÿÿÿÿÇ $ÿÿÿÿèV ¡Œ$@‰ÂÁâ)¿Õh$‰$è“Ãè:ƒÄû‹]üÉÐU‰åƒìhÜ-"èصƒÄÉÍvU‰åƒìjèõƒÄÉÉöU‰åƒìƒ=´t#u(èè
-ƒì ¡Œ$@‰ÂÁâ)¿Õh$Pè$ÃÄÉÍvU‰åWVSƒìhêI#è!6ƒÄ»`$ëv‹Eð@‰ÐÁà)ЁLÃ0€ƒì h$èzA‰EðƒÄƒøÿ„“@‰ÐÁà)ÐöDÃ1@u¾‹UðR‰ÃÁã)ÃÁã¾`$¡°t#‰3@£°t#‹E ‰Dƒìjÿuƒt$PèPÔÆD'ƒÃ fÇD3‹Mf‹%ÿf‰D3
-f‹A f‰D3 ƒÄ‰Ø‰ñº‹]ƒ{tf‹Sf‰T‹UðR‰ÁÁá)ÁÁáY0‹U‹B -‰ƒ`$¿d$Ç;¾h$¡Œ$@‰ÂÁâ)‹DÖ0‰3ºl$ǍAP‹]ð‰˜`$Ç8ÇÿÿÿÿÇ0ÿÿÿÿǁÀ$°Ç8Ç0ǁÁÀǁ`$Ç9ºۍƒ€ 
-Ç…Ä$Bƒúvì‹Eð@‰ÐÁà)ÐÁàÀǂh$ÿÿÿÿǂl$´$‰0$º‹Mðɍ€ ‰ö
-Ç…0$Bƒú~ì»ëC;$sƒì‹À$ÿuSÿPƒÄ…Àxß;$u7‹]ð[‰ÂÁâ)ÂfÇՈ$ƒìh$SèŠ?èQëDŽ鄉ö‹Eð@‰ÐÁà)Ѝ4ʼnžd$ƒì‹À$ÿuÿuðSÿP,ƒÄ…ÀyWfdžˆ$ƒìh$ÿuðè*?èñêDžë'èãêǃ釃ì ÿuðè9èÈêdž¸ÿÿÿÿƒÄëjƒE‹U‹zü…ÿtY‰ö¾ëF;5„$s0ƒìµ‹ƒ $WVÿP ƒÄ…Àxۃ싃 $WÿuðVÿP$ƒÄ;5„$t‡ƒE‹M‹yü…ÿu©‹Eðeô[^_]ÉöU‰åƒìEPÿuÿu ÿuè`üÿÿƒÄÉÍvU‰åWVSƒì ‹} ƒt6‹EÑàE‰ÂÁâ)‹G‰Õl$‰Æ‹UÑâU‰ÐÁà)Ѓ Ő$@ën‰öƒì ‹UÑâU‰ÐÁà)зŎ$Pè@‹UÑâU‰ÑÁá)Ñ»l$‰ˉƋEÑàE‰ÂÁâ)ƒÄƒ<Óuƒì ÿuèìè{éLjëtv‹EÑàE‰ÂÁâ)»`$·DÓ.ƃì ·GPjÿwVhÈ4"èÝ¢‰ÁƒÄ f…Éu?ƒì‹UÑâU‰ÐÁà)зDÃ.PVèƒÄÿuèvèélj¸ÿÿÿÿƒÄëN‹EÑàE‰ÂÁâ)Âf‰ Õh$ƒìU‰ÐPjÿìt#ƒÄöGu ÿ€$ëvöGuÿ@$¸eô[^_]ÍvU‰åWVSƒì ‹M‹U ‹]œúX‰ÇEPSRQè­úÿÿ‰ÆƒÄƒþÿ„ɍv‰ÐÁà)ЋÅd$‹…À$ƒx(„èà…À‰€»;„$svƒì‹ $VSÿP(ƒÄC;„$råv‰ÃÁã)ÃÁ㋃d$ƒì‹…À$VPÿR0fǃˆ$ƒÄh$Vè <ƒÄèÐçLJ‰øP¸ÿÿÿÿë#vƒìSVèŽýÿÿƒÄº…À”ÂJ ։øP‰ðeô[^_]ÃU‰åVS‹u»;„$svƒì‹ $VSÿP(ƒÄC;„$råv‰ÃÁã)ÃÁ㋃d$ƒì‹…À$VPÿR0fǃˆ$ƒÄh$Vè\;ƒÄeø[^]ÉöU‰åVS‹]è ƒì ¡Œ$@‰ÂÁâ)¾`$SÿTÖú‰$èn¡Œ$@‰ÂÁâ)¿DÖ‰$較čeø[^]ÃU‰åWVSƒì‹]‹}úû™w! [‰ÈÁà)ÈÁàº`$öD0tfƒ|(u û¸ÿÿÿÿéDžÿy$[‰ÁÁá)Á Í°¸d$‹<Çë ‰öƒÿv¿[‰ÁÁá)Á Í°‰Mä¹h$‰Mì‹Uä‹
-‰Â)úƒÂ‰Ð¾º÷ö‰Eð‹uä;tMۍƒ€4‹MðىÈÁà)ȍ Å°‰ö2‹…Ä$‹] ‰ƒÃ‰] B»‰Ðº÷ó‹]ì;uÔû‰øƒÄ[^_]ÐU‰åSƒì‹]‹ -Œ$I‰ÐÁà)ЍÅö‚$tɍ€È‚$…Ä$¡D$;”$|;”$uA¡H$;˜$}4ƒìSÿ5Œ$ÿ5˜$ÿ5”$ÿ5H$ÿ5D$hJ#èèËƒÄ è@ ‹]üÉÍvU‰åWVS‹ -Œ$I‰ÐÁà)ЍÅöƒ$„›ɍ€ȍ‹°h$ºd$‹t‚`‹”À¸l$94s‰4‹Œ$[‰ÁÁá)ÁÁፁÀ°`$¿d$B‰8±°‹†h$@º‰Ñº÷ñ‰–h$ۍƒ€ØÐÇD‡`ƒ<>wÿ>[^_]ÉöU‰åWVS‹M‹] ‹u‹}úù™w!I‰ÐÁà)ÐÁàº`$öD0tfƒ|(uû¸ÿÿÿÿëy…ÛtI‰ÂÁâ)‹Õ $‰…ötI‰ÂÁâ)‹Õ$‰…ÿtI‰ÂÁâ)‹Õ$$‰ƒ}t(ɍ€ȍ I‰ÊÁâ)ÊÕ$‹…Ä$‹U‰û¸[^_]ÉöU‰å‹Múù™w!I‰ÐÁà)ÐÁàº`$öD0tfƒ|(uû¸ÿÿÿÿë7I‰ÂÁâ)ÂÁ⍂Àǀ`$ǀd$ǂ$û¸]ÍvU‰åWVSƒì ƒ=Œ$ÿt¡Œ$@‰ÂÁâ)ÂöՐ$…3ƒ=Œ$ÿ„ƒìhD$jè]ŸƒÄUè¡H$;˜$|¡D$+”$‰Eè¡H$+˜$ë"v¡D$+”$H‰Eè¡H$+˜$ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыŒ$R‰ÐÁà)Ð) Ŭ$ƒì QènüÿÿƒÄƒ=œ$ÿtƒì ÿ5œ$ÿh$Çœ$ÿÿÿÿƒÄ‹ -Œ$I‰ÐÁà)Ћ<Åd$ƒì‹½À$QWÿP<ƒÄ¿4½ƒì ‹†À$WÿP$‰ÃƒÄƒûÿt%ƒì[‰ÐÁà)ЋÅd$‹…À$SPÿR4ƒÄ븅Àx»ƒûÿuG뫍v‹5Œ$‰ $‰Œ$[‰ÐÁà)Ð;Å°$t0»`$‰ö¡Œ$@‰ÂÁâ)‹TÓP‰Œ$ R‰ÈÁà)È;TÃPu×;5Œ$tƒìhŒ$jÿìt#ƒÄ‹ -Œ$I‰ÐÁà)ÐÁà¾`$fÇD(‹¸d$ƒì‹½À$‹ $¸;Œ$•ÀPQWÿS8¡Œ$@‰ÂÁâ)ƒÄöDÖ1„Ü¡ $;Œ$…Ë¡D$‰EèM行$@‰ÂÁâ)»l$‹DÓ@º@B‰Ö™÷þ’’’Áâ‰Ö5H$‰q¿¡/¸D‰ø÷î‰×Áÿ‰ð™‰þ)Ö¡Œ$@‰ÂÁâ)‹\Ó@ºƒÞC‰Ø÷êÁú‰ØÁø)2Eè‹AºÊš;‰Ó™÷û‰QjhôB"ÿuìÿuèÿ($‰ÃƒÄƒûÿuƒìÿ5Œ$jè«MƒÄ‰œ$¡D$£”$¡H$£˜$eô[^_]ÉöU‰åWVSƒìÇðÀ%úÿuèD»ƒÄ¿d$¾`$‰ö[‰ÂÁâ)ÂÁâÇ:ÿÿÿÿǂl$ÆDB fÇD0fÇD0
-fÇD0 fÇD0B0Ç0Ç8ǀh$ǀl$‚¤$Ç@Çǂ¬$BP‰0Ç8ÇD`DŽÐ‚8$Ç@Ǎ‚àÇ0ÿÿÿÿÇ8ÿÿÿÿ‚°Ç8ǀh$ǀl$ÂÀÇ2Ç:ºۍƒ€ v
-ÇD‡`Bƒúvï[‰ÐÁà)ЍÅÀǀh$ÿÿÿÿǀl$ºۍƒ€ 
-DŽ†ÐBƒú~ìCû™Žƒþÿÿ»¹h$[‰ÂÁâ)C‰DÑP‰Ãû˜~åÇ`¾%ÿÿÿÿ»™¹l$[‰ÂÁâ)Cÿ‰DÑP‰Ã…ÛéǼ$ÿÿÿÿÇ$Lj$Ç€$Ç@$Ç $ÿÿÿÿÇŒ$ÿÿÿÿÇœ$ÿÿÿÿǘ$Ç”$ǐ$Ç„$Ç$èÚè}èäGƒì ÿuèqÉÿÿ£$ƒÄ=×Övƒì h`J#èQ%Ç$è¹ÐƒÄ¸ƒ=$”À‰Eè]è¡$‰CÇðÀ%èj˜ƒì Sèa¢Ç$ˆC"èµÜÇ$È-"è1¤Ç$àB"èE¤ƒÄjjèEÿôt#ƒÄhD$jèü˜èOùÿÿ蚱f£$¡Œ$@‰ÂÁâ)¾`$¿DÖ‰$è±Ç$èç£ÿðt#ÇðÀ%ƒÄ»ƒ=ˆ$ŸÃSjèɃă=@$teè„ Ç´t#ƒìhD$jèk˜è±f£$è³øÿÿÇ$àB"èw£¡Œ$@‰ÂÁâ)¿DÖ‰$èç°Ç$èO£ƒÄÇðÀ%ƒìSjèCèr—ÇðÀ%ƒÄjjè(ƒÄúƒ=ˆ$t"ƒìÿ5ˆ$h‹J#èÂÇ$ÿÿÿÿèσăì jèû΃čeô[^_]ÃU‰åSƒìƒ=´t#…•èŸ…Àuúè5°‹Œ$R‰ÑÁá)Ñf‰Íh$‹E£ˆ$Ç´t#ƒ=Œ$ÿ„ƒìhD$jèG—ƒÄUð¡H$;˜$|¡D$+”$‰Eð¡H$+˜$ë ¡D$+”$H‰Eð¡H$+˜$ʚ;‰B‹Mð ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ôºÓMb‰Ø÷êÁú‰ØÁø)ÂыŒ$R‰ÐÁà)Ð) Ŭ$ƒì QèZôÿÿƒÄƒ=œ$ÿtƒì ÿ5œ$ÿh$Çœ$ÿÿÿÿƒÄ‹ -Œ$I‰ÐÁà)ЋÅd$ƒì‹…À$QPÿR<Ç $ÿÿÿÿÇŒ$ÿÿÿÿƒÄ謝…Àtƒì ¿$PèÜ®ƒÄëvƒì ¿$PèÄ®èkƒÄû‹]üÉÉöU‰åSƒìÇEøÿÿÿÿ»ºÀ$¡À$ƒx(t1ƒì‹šUøRSÿP(ƒÄ…Àu¸ÿÿÿÿëCƒûwºÀ$‹šƒx(uи‹]üÉÉöU‰åƒìè èÈ@ÉÉöU‰åƒìÇœ$ÿÿÿÿè§êÿÿÉÐU‰åSƒìœúX‰Ãƒ=ðÀ%tƒ=@$t‰ØPëƒì jè–ýÿÿƒÄ‰ØP‹]üÉÉöU‰åƒìÿuèzýÿÿƒÄÉÐU‰åSƒì‹UœúX‰ÃƒìRjè
-•‰ÂƒÄ‰ØP‰Ð‹]üÉÉöU‰å¸ˆ$ƒ=Œ$ÿt‹Œ$R‰ÐÁà)ЍÅÀ$]ÉöU‰åSƒìœúX‰Ãƒ=ðÀ%tƒ=@$t‰ØPëƒì ÿuèíüÿÿƒÄ‰ØP‹]üÉÐU‰å]ÍvU‰åWVSƒì ÇEðÇE컍[ …ƒ¹H¢#t[¿@¢#ƒ<9tP‹Œ$ҍ‚€Ð؍…о`$ƒ<0t+ûƒì ÿ40ÿ9ƒÄú‹Œ$ҍ‚€Ð؋´†Ð uìCƒû~Œƒ}ìt -ÿEðƒ}ðŽmÿÿÿeô[^_]ÐU‰åVSº¾@¢#»D¢#¹H¢#vRÁàÇ0B‰Çƒú~ãÇ8¨#ÿÿÿÿÇ@¨#ÇH¢#Ç@¢#ÇD¢#ÿÿÿÿ[^]ÐU‰åS‹Múƒ=@¨#ÿu û¸ ënv¡@¨#@Ç•H¢#‰¡@¨#@‹…D¢#£@¨#‹@‹U ‰…@¢#º»`$‰öҍ‚€ÐDŽƒÐBú™~ßû¸‹$ÉÃU‰åú¡Œ$À’ÂU‹•0$û]ÍvU‰å‹Múƒùw -Iƒ<…H¢#u û¸ë%v¡Œ$À’ÂʋE ‰•0$û¸]ÃU‰åS‹]œúX‰Áƒûw -[ƒ<…H¢#u‰ÈP¸ë.v[Áà‹@¨#‰D¢#ǀH¢#‰@¨#‰ÈP¸‹$ÉÃU‰åWVSƒì ¡Œ$‰Eð‰ÂÑâ‰ÐÁà)ЍÅ¿`$öD0 tm‹E‰‚,$‹UðÑâUð‰ÐÁà)ЁLÇ0@‹UðÑâUð‰ÐÁà)ЍÅÀºh$ƒ<ÿt,‹4v‰ÃÁã)ÃÁ㋃d$ƒì‹…À$VPÿRD‰tPƒÄ¹»`$;MðtI‰ÐÁà)ЋUð9TÃP„ˆAù™~ۋUðÑâUð‰ÐÁà)Ѓ<Å´$t[»d$ûƒì ‹UðÑâUð‰ÐÁà)ЋDÃPÿpÿƒÄú‹EðÑàEð‰ÂÁâ)ÕP‹‹@‰‹UðÑâUð‰ÐÁà)Ѓ|ÃPu«èJüÿÿƒì ‹EðÑàEð‰ÂÁâ)»`$¿DÓP脏ƒÄEðPjÿìt#‹Eð@‰ÂÁâ)ՃÄöD0@u%ƒì·D.P‹Eð@‰ÂÁâ)Âÿ4Õl$èÁ ƒÄ»;„$sƒì‹ $ÿuðSÿP(ƒÄC;„$rã‹MðI‰ÐÁà)ЋÅd$ƒì‹…À$QPÿRPÇŒ$ÿÿÿÿÇ $ÿÿÿÿ‹Eð@‰ÂÁâ)ƒÄöՐ$u&ÿ -€$ƒ=€$uBèZúÿÿë;ƒìRjè AƒÄëg‹Eð@‰ÂÁâ)ÂöՐ$uÿ -@$ƒ=@$uèúÿÿƒìhD$j肏ƒÄƒ=œ$ÿtƒì ÿ5œ$ÿh$Çœ$ÿÿÿÿƒÄè­ïÿÿeô[^_]ÐU‰åVS‹uúv‰ÐÁà)ÐÁàº`$öD0ufƒ|(uèÒNJû¸ÿÿÿÿ麍v‰ÐÁà)Ðöő$tû雉ö;5Œ$uJv‰ÐÁà)л`$‹DÃ0©t0©u)ƒì jè¥üÿÿ¡Œ$@‰ÂÁâ)¿DÓ‰$èU§ƒÄ»ëvC;¸t#}ƒìÝÿ°d¨#Vÿ`¨#ƒÄ…Àtٍv‰ÐÁà)Ё Ő$û¸eø[^]ÍvU‰åWVSƒì ‹Ef‰Eòf…Àuè’Ñnj¸ÿÿÿÿé‰öú¡ $@‰ÂÁâ)Âf‹Mòf; Ռ$”Eñ¾¿`$‰öv‰ÐÁà)ÐÁà‹T0÷Â…ˆƒÀ fƒ|8t}÷Âuuf‹Mòf9L8 uj;5Œ$u!÷Ât÷Âuƒì jè{ûÿÿƒÄëC‰ö»ëC;¸t#}ƒìÝÿ°d¨#Vÿ`¨#ƒÄ…Àtٍv‰ÐÁà)ЁLÇ0Fþ™ŽNÿÿÿ€}ñt(ƒì ¡ $@‰ÂÁâ)¿Õh$PèÌ¥ƒÄëvû¸eô[^_]ÉöU‰åWVSƒì ¾¿`$v‰ÐÁà)ÐÁàfƒ|(tL÷D0
-uB»ë‰öC;¸t#}ƒìÝÿ°d¨#Vÿ`¨#ƒÄ…Àtٍv‰ÐÁà)ЁLÇ0Fþ™~–eô[^_]ÉöU‰åSƒì¡Œ$@‰ÂÁâ)»`$‹DÓ0©t7©u0©t)ƒì jè"úÿÿ¡Œ$@‰ÂÁâ)¿DÓ‰$èÒ¤ƒÄ‹]üÉÉöU‰åS‹M‹] ¡¸t#ʼnŠ`¨#‰šd¨#@£¸t#‹$ÉÍvU‰åƒìúÿuè½ùÿÿ¡Œ$@‰ÂÁâ)¿Õh$‰$èj¤ƒÄÉÐU‰åVS¶uœúX‰Ãƒ=”«#ÿuèøÎǂ‰ØP¸ÿÿÿÿéۋ -”«#‰ÊÁâ‹‚ ©#£”«#‹E‰‚©#‹E ‰‚©#‰ðƒà‰‚©#‰ðƒàƒøtOƒø
-ƒøt -ësvƒøtSëi‰ÈÁàǀ ©#ÿÿÿÿƒ=€«#ÿu‰ -€«#ë¡„«#Áà‰ˆ ©#‰ -„«#ëH‰ö‰ÊÁ⡈«#‰‚ ©#‰ -ˆ«#ë.‰ÊÁâ¡Œ«#‰‚ ©#‰ -Œ«#ë‰ÊÁ⡐«#‰‚ ©#‰ -«#‰ØP¸[^]ÐU‰åƒìƒ=$uƒì hÀJ#èPÇ$è¸ÁƒÄ¡$P‰$ÉÐU‰åƒìƒ=„$uƒì hßJ#èÇ$è|ÁƒÄ¡„$P‰„$ÉÐU‰åWVS‹E‹u ‹}»‹HÇöt<€9t5‹ ‰‡€: t€:t‰öC€< t€< uó€< uÆ Cÿ€< uÌÿ[^_]ÐU‰åWVSì¬‹EµTþÿÿ½Xþÿÿ»‹HDžTþÿÿöt<€9t5‹ ‰‡€: t€:t‰öC€< t€< uó€< uÆ Cÿ€< uÌÿƒì…XþÿÿPÿµTþÿÿèy¶ÿÿƒÄeô[^_]ÉöU‰å¸¹ ©#v‰ÂÁâ@‰
-ƒø&~òÇ|«#ÿÿÿÿÇ€«#ÿÿÿÿÇ„«#ÿÿÿÿLj«#ÿÿÿÿÇŒ«#ÿÿÿÿǐ«#ÿÿÿÿÇ”«#]ÉöU‰åWVSƒì ‹E‹} ƒøt4ƒø ƒøtéЃøt3ƒøtB鳐‹€«#Ç€«#ÿÿÿÿë:‰ö‹ˆ«#Lj«#ÿÿÿÿë&‰ö‹Œ«#ÇŒ«#ÿÿÿÿë‰ö‹«#ǐ«#ÿÿÿÿÇ$ƒûÿtM¾ ©#…ÿt‰ØÁàƒ¸©#uƒì ‰ØÁàÿ°©#ÿ©#ƒÄ‰Ù‰ØÁà‹0‰Â¡”«#‰2‰ -”«#ƒûÿu¸Ç$eô[^_]ÉöU‰åƒìEüPEøPEôPEðPèùœÇ$ «#èuéƒÄjjhÿÿjh¤«#h «#è ßƒÄjjhÿÿÿhhÀ«#h «#è€ßƒÄjjhÿÿÿþhhÜ«#h «#è`៎ ƒ}ütƒì‹EüHPÿuøh «#è*ރă}ôtƒìÿuôÿuðh «#èރÄÉÐU‰åƒì‹E…Àu¸ëƒìjPh «#è¸ßƒÄÉÍvU‰åƒìÿuÿuÿu ÿuh «#èháƒÄ ÉÍvU‰åƒì ÿuÿuÿuÿuÿu ÿuh «#èbáƒÄ ÉÐU‰åƒì ÿu ÿuh «#èæƒÄÉÐU‰åƒìÿuh «#èýãƒÄÉÃU‰åƒìÿuh «#èýçƒÄÉÃU‰åƒì jÿuh «#è߃ÄÉÉöU‰åƒì ÿu ÿuh «#è®åƒÄÉÐU‰åƒìh «#è¼ãÇ$ «#èÐçƒÄÉÍvU‰åWVSƒì ¾ú»ë‰öCƒû/ۍCÁàö€¬#tèƒìÿ°¬#ÿuèo°ƒÄ…Àuо…öt#} ÀuèýÈÇûéِû‰ØéÕ÷E @uèÚÈÇû鶉ö÷E uè¾ÈÇ -û隉ö‹u‹=0³#ƒÿÿ„zƒì ÿuèK°@‰$èþÿÿÿWÁ⹬#‰
-ƒÄ…ÀuèmÈÇûéIƒìÿuÿG…ÿ³¬#è:¯ƒÄ…öt‹F‰ƒ¬#‹F‰ƒ ¬#ë vÿGÁàǀ¬#
-ǀ ¬#€ƒì ÿG…ƒ8¬#P臍ƒ@¬#‰$èyCº¬#ǹ¬#ÇÿÿÿÿÇD ƒÄ÷E t
-Ç ëÿGÇ…¬#ƒì ÿG4…‹†¬#¯† ¬#PèôüÿÿV‰‚¬#ƒÄ…Àu0ƒì ÿuè -¯ƒÄ@Pÿ¶¬#èAýÿÿè@ÇǃÄûéƒì ÿG…‹ƒ¬#@ÁàPè’üÿÿs‰† ¬#ƒÄ…ÀuNƒì ÿuè«®ƒÄ@Pÿ³¬#èßüÿÿƒÄ‹ƒ¬#¯ƒ ¬#Pÿ¶¬#èÃüÿÿèÂÆǃÄû雍v»ý‰ÁøGº¬#‰Uð‹‚ë+‰Î7WÁâ‹‚¬#‰Eì [C‹]ì‰D‹‰Ã‰ñ‹uð‹2H9Ã|ЍÿWÁ⾬#‹2@‹Š¬#ÇDüÿÿÿÿǂ ¬#‹D@£0³#û‰øë‰öèÆÇû¸ÿÿÿÿeô[^_]ÍvU‰åWVSƒì úƒ}w‹UҍBö…¬#uèàÅÇ û¸ÿÿÿÿ重vƒì ‹EÀXÁ㾬#ÿ43èh­ƒÄ@Pÿ43èŸûÿÿƒÄ¾¬#‹3¯ƒ ¬#P{ÿ47èûÿÿƒÄ‹3@ÁàPÿ· ¬#èiûÿÿǃ¬#¡0³#‰D@‹U‰0³#ƒÄû¸eô[^_]ÃU‰åWVSƒì ‹}»ú¾öFÁàö€¬#tƒìÿ°¬#Wè[¬ƒÄ…Àu»Fƒþ~ͅÛ„…ƒì W蜬ƒÄ@Pö^Áãÿ³¬#èÇúÿÿƒÄ‹ƒ¬#¯ƒ ¬#P{ÿ·¬#è¨úÿÿƒÄ‹ƒ¬#@ÁàPÿ· ¬#èúÿÿǃ¬#¡0³#‰ƒH¬#‰50³#ƒÄû¸ëvècÄÇû¸ÿÿÿÿeô[^_]ÍvU‰åWVSƒì‹}ÇEìÿÿÿÿÿG…‹ˆ¬#‹€ ¬#‰Eä‹U R‹]䋃‰EðƒùÿtBý‰Eà ‰ÆÈë'‰ö‰Mì‹UàG‹…¬#1‹Lƒƒùÿt4 1‹Uð;ƒvӃ}ìÿtÿG‹…¬#‹]ì[‹] ‰\‚됍ÿG‹U ‰…¬#ÿG‹…¬#‹] [‰L‚ƒÄ[^_]ÐU‰åVS‹][‰ÐÁà)Ѝ4Åfƒ¾ˆ$ uƒì‹Ýd®#ÀP•8¬#ë2[‰ÐÁà)Ѝ4Åfƒ¾ˆ$
-u=ƒì‹Ýd®#ÀP•@¬#RS賋–d$ƒÄ‹•À$SRÿPD¸ƒÄ븍eø[^]ÃU‰åVS‹][‰ÐÁà)Ѝ4Åfƒ¾ˆ$ u)¡Œ$ÇÅ`®#ƒì‹Ýd®#ÀP•8¬#ëB[‰ÐÁà)Ѝ4Åfƒ¾ˆ$
-uM¡Œ$ÇÅ`®#ƒì‹Ýd®#ÀP•@¬#RSèó‹–d$ƒÄ‹•À$SRÿPD¸ƒÄ븍eø[^]ÃU‰åWVSƒìLèÞ;úƒ=¼t#t+Ǽt#ƒìjhpX"èkòÿÿƒÄjhY"è0ƒÄƒ}w‹UҍBö…¬#uè³ÁÇ û¸ÿÿÿÿéV‰ö‹MɍA‹U;… ¬#vè†ÁÇZû¸ÿÿÿÿé)ƒ} vèiÁÇû¸ÿÿÿÿé ‹MɍAÁàƒ¸ ¬#ÿ…Ïö€¬#tè1ÁÇ û¸ÿÿÿÿéÔ¡Œ$ÇÅ`®#ƒìhD$jè}ƒÄUÀ¡H$;˜$|¡D$+”$‰EÀ¡H$+˜$ë"v¡D$+”$H‰EÀ¡H$+˜$ʚ;‰B‹MÀ ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ĺÓMb‰Ø÷êÁú‰ØÁø)ÂыŒ$R‰ÐÁà)Ð) Ŭ$ƒì Qè®ÚÿÿƒÄƒ=œ$ÿtƒì ÿ5œ$ÿh$Çœ$ÿÿÿÿƒÄ‹ -Œ$I‰ÐÁà)ЋÅd$ƒì‹…À$QPÿRH‹ -Œ$I‰ÐÁà)л`$fÇDÃ( ƒÄ‹UҍB…8¬#PQèf -ÇŒ$ÿÿÿÿÇ $ÿÿÿÿèµÜÿÿ¡Œ$@‰ÂÁâ)¿DÓ‰$èõ”èt'ès9¡Œ$ƒÄƒ<Å`®#t脿Çû¸ÿÿÿÿé'v‹MɍA…z ¹¬#‹‰E´B‹˜ ¬#‹u´v‹T“‰ÿ‹UҍB‰÷¯<… ¬#<…¬#‹MÁé‹u ‹Eüó¥¨tf¥¨t¤ҍB<…_¹ ¬#‹ ‹u´vÁà‹u‰4‹ ‹M‰Lƒìÿu´ÿuèzúÿÿƒÄƒ»¬#…dƒì ‡@¬#Pè׉ƃăþÿtqèܓ‹Œ$R‰ÑÁá)Ñ»`$f‰Dˍv‰ÐÁà)ЋÅd$ƒì‹…À$VPÿRDèMÛÿÿ¡Œ$@‰ÂÁâ)¿DÓ‰$荓è4åÿÿƒÄûéލv‹uöF…¹¬#‹
-©„·ƒàû‰
-B ƒ<ujÿ° ¬#ÿ°¬#jè•鋋UҍBÁàP ¹¬#ƒ<
-utƒÀ0ƒ<tÿ² ¬#ÿ²¬#ÿ4ëNÇEÈÇEÌÇEÐÇEÔÇEØÇEÜÇEà‹MɍAÁà,¬#Rÿ°0¬#EÈPE¼Pè)ƒÄû¸eô[^_]ÃU‰åWVSƒì,‹} è 7úƒ=¼t#t+Ǽt#ƒìjhpX"è˜íÿÿƒÄjhY"è1+ƒÄƒ}w‹UҍBö…¬#uèà¼Ç û¸ÿÿÿÿékv‹UҍB‹U;… ¬#vè²¼ÇZû¸ÿÿÿÿé=‹UҍBÁຬ#ƒ|ÿ…ÐöDtèx¼Ç û¸ÿÿÿÿév¡Œ$ÇÅ`®#ƒìhD$jèáxƒÄUè¡H$;˜$|¡D$+”$‰Eè¡H$+˜$ë"v¡D$+”$H‰Eè¡H$+˜$ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыŒ$R‰ÐÁà)Ð) Ŭ$ƒì QèòÕÿÿƒÄƒ=œ$ÿtƒì ÿ5œ$ÿh$Çœ$ÿÿÿÿƒÄ‹ -Œ$I‰ÐÁà)ЋÅd$ƒì‹…À$QPÿRH‹ -Œ$I‰ÐÁà)о`$fÇDÆ(
-ƒÄ‹UҍB…@¬#PQèªÇŒ$ÿÿÿÿÇ $ÿÿÿÿèù×ÿÿ¡Œ$@‰ÂÁâ)¿DÖ‰$è9è¸"è·4¡Œ$ƒÄƒ<Å`®#tèȺÇû¸ÿÿÿÿéSv‹UҍB‹…¬#ҍBÁຠ¬#‰Þ¯4°¬#‹‰ÁÁéüó¥¨tf¥¨t¤‹UҍBÁà‰E܉ƃƹ¬#ÿ‹† ¬#‰Eà[<•‹T8‰–¬#‹U܃ ‰U܋
-‹Uà‰D:‹E܉ƒ}t‹† ¬#‹8‹U‰‹UҍB<…‹¬#[‹D‘‰Eäƒì ‡8¬#Pè
-‰ÆƒÄƒþÿtm菋Œ$R‰ÑÁá)Ñ¿`$f‰Dύv‰ÐÁà)ЋÅd$ƒì‹…À$VPÿRDè…Öÿÿ¡Œ$@‰ÂÁâ)¿D׉$èŎèlàÿÿƒÄûë‰öû‹Eäeô[^_]ÃU‰åVS‹U‹] úƒúwҍBö…¬#uè6¹Ç û¸ÿÿÿÿëwҍB …¾¬#‹1©t$…Ûu ƒàû‰1ûëIvè÷¸Çû¸ÿÿÿÿë8ҍBÁàƒˆ¬#$¬#‹‰‹S‰P‹S‰P‹S ‰P ‹S‰Pû¸[^]ÐU‰åSƒì‹]‹MúƒûwۍCö…¬#uè„¸Ç û¸ÿÿÿÿëd‰ö…Ét2ۍCÁà‹¬#â‰‹¬#‰Q‹ ¬#‰Q‹€¬#‰A  ۍ KÁỬ#‹%ÿ÷ÿÿ‹U ‹â Љû¸‹]üÉÐU‰åƒì‹U‹M úƒúwҍBö…¬#uèå·Ç û¸ÿÿÿÿë;vҍBÁà‹¬#â‰‹¬#‰Q‹ ¬#‰Q‹€¬#‰A û¸ÉÉöU‰åWVSƒì} ‹uEðPh4K#V詉Ãăûuƒ}ðvÇEðƒÆë ‰öÇEð‹Eðº;Àt#~hƒìWVh@³#èòŸƒÄj
-Vè7ŸƒÄ»…À•ÃœúX‰Æƒìh@³#‹Eðÿ4…Ät#h9K#èIƒÄ…Ûuƒì hÜK#è5ƒÄ‰ðPº‰Ðeô[^_]ÍvU‰åVSƒìu ‹]EôPh4K#Sèû¨ƒÄƒøuƒ}ôvÇEôƒÃëÇEô‹Eôº;Àt#~JƒìVSh@³#è.ŸƒÄj
-SèsžƒÄœúX‰Ãƒìh@³#‹Eôÿ4…Ät#h9K#菜ƒÄ‰ØPº‰Ðeø[^]ÉöU‰åVSƒì@‹u‹] ‹EfÇEÈÇEÌÇEÐfÇEÔÇEàÇEäÇEìÇEð‰EØÇEÜÇEè…ÛtT‹C‰E̋C‰EЃ{u
-ÇEÜ1됃eÜߋC ‰EàÇEÀƒì ÿ5@·#è;ƒÄ+C ‰EċC‰Eì‹C‰EðëD‰öÇEÌÇEЃMÜ ÇEàÇEÀƒì ÿ5@·#èÎ:ƒÄ‰EÄÇEìÇEðè5µ‹ƒì jEÀPEÈPÿuhAK#è}Ìÿÿ‰ƒÄ ƒøÿt ƒì Pè.ÁÿÿƒÄèþ´‰¸ƒ>ÿ”ÀHƒàêƒÀeø[^]ÍvU‰åƒìÿ5@·#èO:ƒÄÉÉöU‰åƒìÿ5@·#èO:ƒÄÉÉöU‰åƒìÿ5@·#èg9ƒÄÉÉöU‰å‹E‹U ‹M£@·#‰D·#‰ -H·#]ÐU‰åVS‹]èk´‹0ƒì Sè°áÿÿ‰ÃèY´‰0ƒÄ¸…Û•À@eø[^]ÃU‰åƒìúÿuÿu ÿuÿ5@·#èÕ9ƒÄûÉÍvU‰åWVSƒì ‹}‹uúÿ6ÿu Wÿ5@·#èk7‰ÃƒÄ…Ûu#ƒìÿ5@·#èd9ƒÄ+PWÿ5H·#èRjƒÄû‰Øeô[^_]ÃU‰åSƒì ‹] SÿuèiƒÄÿ5@·#è#9ƒÄ+‰¸‹]üÉÉöU‰åVSƒì‹u‹] …Ûtƒ;uÇEôƒìEôPë7ƒ;uÇEðƒìEðPë!vÇEèƒì jè_þÿÿ+CUè‰BƒÄRVè@.ƒÄeø[^]ÉöU‰åWVSƒì‹u ‹}ÇEðÿ5@·#è8‰ÃƒÄ9Þƒþ} ¸ëG‰öƒì ÿuè¡.ƒÄ W‰Ø)ðPÿuèøhƒÄ…ÀtÇEð…ÿt‰Ø+‰ƒì ÿuèÅ.‹EðƒÄeô[^_]ÍvU‰åƒì‹Eúƒ8u -ÇûÿU ëû¸ÉÃU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)лd$‰]ð‹´ÃЃùÿtCI‰ÐÁà)Ð;´ÃÐr0»h$‰Ï‰ÐÁà)ЋLÃPƒùÿtI‰ÐÁà)ЋUð;´ÂÐsՃÿÿt‰ÐÁà)ЋU‰Ÿ$ë
-‰ö‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰ż$ë
-‹E‹U ‰B‹E@‰ÐÁà)ЍÅP‰ˆh$‰¸l$ƒÄ[^_]ÍvU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)ÐÁà‹8$‰U苀<$‰Eìƒùÿtw ‰ÆȉÂÁâ)‹Eè‰Ã;Õ8$|[‰Eäv1‰ÐÁà)ЍÅ;š8$u ‹Eì;‚<$|1‰Ï‰ÐÁà)Ћ Ÿ$ƒùÿt4 1‰ÐÁà)Ћ]ä;Å8$}«ƒÿÿt‰ÐÁà)ЋU‰Ÿ$ë‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰ż$ë
-‹E‹U ‰B‹E@‰ÐÁà)ЍÅP‰ˆh$‰¸l$ƒÄ[^_]ÍvU‰å‹EÇÿÿÿÿÇ@ÿÿÿÿ]ÍvU‰åWVS‹uv‰ÐÁà)ЍÅP‹˜l$¿h$‹ 8ƒûÿt[‰ÐÁà)ЉLÇPëv‹E ‰ƒùÿt&I‰ÁÁá)Á»l$v‰ÐÁà)ЋDÃP‰DËPë v‹E ‰X[^_]ÐU‰åS‹M‹‰Øƒûÿt=‹@‰ÂÁâ)‹Õ¸$‰ƒøÿt@‰ÐÁà)ÐÇż$ÿÿÿÿë
-vÇAÿÿÿÿ‰Ø‹$ÉÉöU‰åS‹M‹] ƒ;ÿt)I‰ÐÁà)Ћ‰Ÿ$‹@‰ÂÁâ)‰ Õ¼$됉KI‰ÐÁà)ÐÇŸ$ÿÿÿÿI‰ÐÁà)ÐÇż$ÿÿÿÿ‰ ‹$ÉÃU‰åS‹M‹] ƒ{ÿt,I‰ÐÁà)ЋS‰ż$‹C@‰ÂÁâ)‰ Õ¸$ë‰ö‰ I‰ÐÁà)ÐÇż$ÿÿÿÿI‰ÐÁà)ÐÇŸ$ÿÿÿÿ‰K‹$ÉÃU‰å‹E‹]ÉöU‰å‹E‹@]ÐU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)ÐÁà‹8$‰U苀<$‰Eìƒùÿtw ‰ÆȉÂÁâ)‹Eè‰Ã;Õ8$|[‰Eäv1‰ÐÁà)ЍÅ;š8$u ‹Eì;‚<$|1‰Ï‰ÐÁà)Ћ Ÿ$ƒùÿt4 1‰ÐÁà)Ћ]ä;Å8$}«ƒÿÿt‰ÐÁà)ЋU‰Ÿ$ë‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰ż$‹E@‰ÐÁà)ЍÅP‰ˆh$‰¸l$ƒÄ[^_]ÍvU‰åWVSƒì¿ÿÿÿÿ‹E ‹‹E@‰ÐÁà)лd$‰]ð‹´ÃЃùÿtCI‰ÐÁà)Ð;´ÃÐr0»h$‰Ï‰ÐÁà)ЋLÃPƒùÿtI‰ÐÁà)ЋUð;´ÂÐsՃÿÿt‰ÐÁà)ЋU‰Ÿ$ë
-‰ö‹E‹U ‰ƒùÿtI‰ÐÁà)ЋU‰ż$‹E@‰ÐÁà)ЍÅP‰ˆh$‰¸l$ƒÄ[^_]ÍvU‰åWVS‹}‰ÐÁà)ЍÅP‹l$‹°h$ƒúÿu ‹E ‰0ë#‰öR‰ÁÁá)Á»h$‰ÐÁà)ЋDÃP‰DËPƒþÿt!v‰ÁÁá)Á»l$‰ÐÁà)ЋDÃP‰DËP[^_]ÃU‰åS‹]‹ ‰Èƒùÿt/I‰ÐÁà)ЋŸ$‰ƒøÿt@‰ÐÁà)ÐÇż$ÿÿÿÿ‰È‹$ÉÃU‰åS‹]‹M ƒ9ÿt‹@‰ÂÁâ)‰Õ¼$[‰ÂÁâ)ÕP‹‰‚h$ǂl$ÿÿÿÿ‰‹$ÉÃU‰åWVSƒì ‹M‹] ‹}ÇEðú¡Œ$@‰ÂÁâ)4Õ`$…ÿt‹F8‰…ÛtBƒùt"ƒù ƒùt ë*‰öƒùtë!‹F8 ‰F8ë‰ö‹÷Ð!F8ëv‹‰F8ëÇEð‹F8‰Ã÷Ћ`¹#‰Ñ…ÂtB‰ö‰Ø÷л!Ètv‰Ú©u
-CÑøuòºƒì R范ċ^8‰Ø÷Ћ -`¹#…ÁuÀ‹F8‰Ã÷ЋV<‰Ñ…Ât=‰Ø÷л!Ètv‰Ú©u
-CÑøuòºƒì Rè|ƒÄ‹^8‰Ø÷ЋN<…ÁuÃû‹Eðeô[^_]ÍvU‰åVS‹u‹M ¸…É„¸ƒù‡òv‰ÐÁà)Ðfƒ<ň$u -¸éӍvú‰ÈÁàö€h·#uƒ¸`·#uû魉öv‰ÐÁà)ЍŜ$ƒùvèÍ©Çë
-¸Óà »ëC;èt#}ƒìÝÿ°$º#Vÿ º#ƒÄ…Àtٍv‰ÐÁà)ЍÅfƒ»ˆ$u&ƒìhd¹#VèÔüÿÿ‹ƒd$ƒÄ‹…À$VPÿRDƒÄèSm…Àuèû¸eø[^]ÐU‰åWVSƒì‹]‹U ƒûvè©Ç¸ÿÿÿÿévœúX‰Á‰Mðƒ}t‰ÞÁæÆ`·#ü¹‹}ó¥…Òt‰ßÁçÇ`·#ü¹‰Öó¥…Ò„ºöB…°ƒ:‡§ƒ<€¹#ÿtq4‰u캀¹#‹@Áà‰Eè‰ÇƒÇ‹ -Ç%¸Á%‹U苉E䋇Á%©t -ƒàý‰‡Á%ë‰ö¾€¹#‹Uì‹2@‰ ÕÁ%‰Áƒ}äÿu»‰ -Ç%ǝ€¹#ÿÿÿÿƒûv -è¨Çë¸þÿÿÿˆÙÓÀ!`¹#‹uð‰ðP¸ƒÄ[^_]ÐU‰åWVSƒì,‹] ¸…Û„~¸ƒû‡pœúX‰Â‰UԉÞÁæ}؁Æ`·#ü¹ó¥÷Eàuƒ}Øu ‰ÐPé5vƒûv膧Ǹÿÿÿÿ됸ˆÙÓà#`¹#…Àt -‹UԉÐPéûƒûvèN§Çë‰ö¸ˆÙÓà `¹#‹5d¹#ƒþÿ„ô¸‰ÇˆÙÓçvv‰ÐÁà)ЍÅ $ƒûvèý¦Ç¸ÿÿÿÿë‰ú#‰Ð…À„–v‰ÐÁà)ÐÁàfƒ¸ˆ$uœ$ƒûv -輦Çë 8ƒìhd¹#Vèúÿÿv‰ÃÁã)ÃÁ㋃d$ƒÄ‹…À$VPÿRDÃà¾`$ƒÄƒ<3ÿtƒì ÿ43ÿh$Ç3ÿÿÿÿƒÄ‹MԉÈPéîv‰ÐÁà)Ћ4Ÿ$ƒþÿ…ÿÿÿ¾¸‰ÇˆÙÓç‰öv‰ÐÁà)ÐÁàfƒ¸ˆ$„…˜$ƒûvèö¥Ç¸ÿÿÿÿ됉ú#‰Ð…Àu^v‰ÐÁà)ЍŜ$ƒûvèÃ¥Çëv 8»ëvC;èt#}0ƒìÝÿ°$º#Vÿ º#ƒÄ…ÀtÙëvFþ™ŽSÿÿÿèzi…Àuè9 -‹MԉÈP¸eô[^_]ÐU‰åWVSƒì,¸ƒ} „T¸ƒ} ‡EœúX‰Â‰Uԋu Áæ}؁Æ`·#ü¹ó¥÷Eàuƒ}Øu ‰ÐPé ‰ö÷Eàu;ƒ} vèܤǸÿÿÿÿëv¸ŠM Óà#`¹#…Àt ‹UԉÐPéÃ=Ç%ÿu‹MԉÈP¸ 鮉ö‹5Ç%vÁà¹Á%‹‰Ç%‹U ‰Á%‹U‰Á%‹U‰ Á%‹Œ$‰Á%Çÿÿÿÿ‹E Á຀¹#ƒ<ÿu‰4ë>‰ö‹M ‹€¹#‰ÁЃ<ÅÁ%ÿt»Á%
-‹Í 
-ƒ<ÃÿuîR‰4ÅÁ%ƒ} vèé£Ç됸ŠM Óà `¹#‹5d¹#ƒþÿ„û¸‰ÃŠM Ó㐍v‰ÐÁà)ЍÅ $ƒ} v蘣Ǹÿÿÿÿë v‰Ú#‰Ð…À„šv‰ÐÁà)ÐÁàfƒ¸ˆ$uœ$ƒ} vèS£Çëv ƒìhd¹#Vè¨öÿÿv‰ÃÁã)ÃÁ㋃d$ƒÄ‹…À$VPÿRDÃà¾`$ƒÄƒ<3ÿtƒì ÿ43ÿh$Ç3ÿÿÿÿƒÄ‹MԉÈPé÷v‰ÐÁà)Ћ4Ÿ$ƒþÿ…ÿÿÿ¾¸‰ÃŠM Ó㐍v‰ÐÁà)ÐÁàfƒ¸ˆ$„…˜$ƒ} v艢Ǹÿÿÿÿë‰Ú#‰Ð…Àu^v‰ÐÁà)ЍŜ$ƒ} vèV¢Çë‰ö »ëvC;èt#}0ƒìÝÿ°$º#Vÿ º#ƒÄ…ÀtÙëvFþ™ŽSÿÿÿèf…Àuƒ=ät#uèÄ ‹MԉÈP¸eô[^_]ÃU‰åWVSƒì‹u‹]¡Œ$@‰ÂÁâ)<Õ`$èŠú¡`¹##„Hºv©u=BÑøuô¾ƒ<µ€¹#ÿue‹E ‰0Ç@Ç@W<ƒþvèa¡Ç됉Öëɸþÿÿÿ‰ñÓÀ!ƒþvè?¡Çëv¸þÿÿÿ‰ñÓÀ!`¹#ûév µº€¹#‹[‹ÅÁ%‰ƒøÿu"ƒþvèñ Ç됸þÿÿÿ‰ñÓÀ!`¹#W<ƒþv -èÌ Çë ¸þÿÿÿ‰ñÓÀ![Áâ¹Á%‹
-‹u ‰‹‚Á%‰F‹‚ Á%‰FƒÂ‹
-©t ƒàý‰
-ëv[¡Ç%‰ÕÁ%‰Ç%ûéI‰Öë‹G<#tUº©uéBÑøuô¾‹E ‰0Ç@Ç@W<ƒþvè Çëv¸þÿÿÿ‰ñÓÀ!ûéëv…Ûtƒ;uƒ{u -û¸ éÓ‰ö‹‰G@úèu‹Œ$R‰ÑÁá)Ñf‰Íh$ƒìhD$jèN\ƒÄUè¡H$;˜$|¡D$+”$‰Eè¡H$+˜$ë¡D$+”$H‰Eè¡H$+˜$ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰ÁáºÓMb‹Eì÷êÁú‹EìÁø)ÂыŒ$R‰ÐÁà)Ð) Ŭ$ƒì Qèc¹ÿÿƒÄƒ=œ$ÿtƒì ÿ5œ$ÿh$Çœ$ÿÿÿÿƒÄ‹ -Œ$I‰ÐÁà)ЋÅd$ƒì‹…À$QPÿRHƒÄhd¹#ÿ5Œ$èæòÿÿ¡Œ$@‰ÂÁâ)ÂfÇՈ$ƒÄ…Û„’ƒìEàPjè[U؃Ä‹Eà‰E؋EäC‰B…Ày -ÿM؁Bʚ;됁zÿɚ;~ ÿjʚ;ÿ5Œ$h$‹"ÿuÜÿuØÿ($‰ÃƒÄƒûÿuƒìÿ5Œ$jèù ƒÄ¡Œ$@‰ÂÁâ)‰Õ@$ÇŒ$ÿÿÿÿÇ $ÿÿÿÿè׺ÿÿƒì ¡Œ$@‰ÂÁâ)»`$¿DÓPèsè”ÇG@¡Œ$@‰ÂÁâ)ƒÄöDÓ2tû¸ é~‰Öë%¡`¹##„ûº‰ö©uáBÑøuô¾ƒ<µ€¹#ÿu=‹M ‰1ÇAÇAƒþv -è@Çë¸þÿÿÿ‰ñÓÀ!`¹#ûé vƒì µƒ€¹#Pèúðÿÿ‰ÇƒÄƒ»€¹#ÿu#ƒþvèòœÇë‰ö¸þÿÿÿ‰ñÓÀ!`¹#Áâ¹Á%‹
-‹] ‰‹‚Á%‰C‹‚ Á%‰CƒÂ‹
-©t ƒàý‰
-ëv¡Ç%‰ÕÁ%‰=Ç%ûël‹G<#…Àuû¸ë`v‰Öë‹G<º#t ©uéBÑøuô¾‹E ‰0Ç@Ç@W<ƒþvè/œÇëv¸þÿÿÿ‰ñÓÀ!û¸eô[^_]ÍvU‰åWVSƒì ‹}¡Œ$@‰ÂÁâ)4Õ`$è¹ú‹F<#…Àt è¦û颋‰F@úèq‹Œ$R‰ÑÁá)Ñf‰Íh$ƒìhD$jè6XƒÄUè¡H$;˜$|¡D$+”$‰Eè¡H$+˜$ë¡D$+”$H‰Eè¡H$+˜$ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыŒ$R‰ÐÁà)Ð) Ŭ$ƒì QèJµÿÿƒÄƒ=œ$ÿtƒì ÿ5œ$ÿh$Çœ$ÿÿÿÿƒÄ‹ -Œ$I‰ÐÁà)ЋÅd$ƒì‹…À$QPÿRHƒÄhd¹#ÿ5Œ$èÍîÿÿ¡Œ$@‰ÂÁâ)»`$fÇDÓ(ÇŒ$ÿÿÿÿÇ $ÿÿÿÿèY·ÿÿ¡Œ$@‰ÂÁâ)¿DÓ‰$è™oè‹F<#ƒÄ…Àuû¸ë èÿû¸eô[^_]ÐU‰åSƒì‹]úEðPjè¢VƒÄƒ=º#ÿu
-ÇEèëWMèUð¡º#;B|¡º#+Eð‰E衺#+Bëv¡º#+EðH‰E衺#+Eôʚ;‰Aƒì ÿ5º#ÿh$ƒÄ…ÛtN]ð‹Eð£º#‹Eô£º#jh„‹"ÿuôÿuðÿ($‰ÃƒÄƒûÿuƒìÿ5Œ$jè:ƒÄ‰º#ë -vǺ#ÿÿÿÿû‹Eè‹]üÉÐU‰åVSƒì‹uƒ<µ€¹#ÿuC‰uèÇEìÇEð¡Œ$‰Eôƒþvèü˜Ç鮐¸þÿÿÿ‰ñÓÀ!`¹#降 µº€¹#‹[‹ÅÁ%‰ƒøÿu"ƒþv豘Ç됸þÿÿÿ‰ñÓÀ!`¹#[Áà¹Á%‹‰U苐Á%‰U싐 Á%‰Uð‹Á%‰UôP‹
-©tƒàý‰
-ë[¡Ç%‰ÕÁ%‰Ç%ƒìEèPVè
-ƒÄeø[^]ÃU‰åVSƒì¡Œ$@‰ÂÁâ)4Õ`$‹F0©…Í -‰F0‹F8‰Ã÷Ћ`¹#‰Ñ…ÂtA‰Ø÷л!Ètv‰Ú©u
-CÑøuòºƒì Rè„þÿÿƒÄ‹^8‰Ø÷Ћ -`¹#…ÁuÀ‹F8‰Ã÷ЋV<‰Ñ…ÂtZ‰Ø÷л!Ètv‰Ú©u
-CÑøuòº‰UèÇEìÇEð¡Œ$‰EôƒìEèPRèƒÄ‹^8‰Ø÷ЋN<…Áu¦f0ÿïÿÿeø[^]ÃU‰åWVSƒì,‹]œúX‰Â‰UÌ¡Œ$@‰ÂÁâ)Õ`$‰UЉÞÁæ}؁Æ`·#ü¹ó¥÷Eàuƒ}Ø„îƒ}Øÿ„ä÷EàuCƒ}Øu=ƒìShLK#èw}ƒÄ÷Eàtƒì‹M ÿqhbK#èX}ƒÄƒì jèç½ÿÿƒÄ‹UЋB8‰EԉƍUԃûv -èh–Çë ¸ˆÙÓà ‹EÔ E܉EԋUЃÂ<ƒûv -è<–Çë ¸þÿÿÿˆÙÓÀ!‹EԋUЉB8û÷Eàtƒìjÿu SÿUäëƒìj‹M ÿqSÿU؃Äú‹EЉp8‹ỦÐPeô[^_]ÃU‰åWVSƒì ‹}‰ÐÁà)ÐÁà¾`$fƒ|(uF˜àƒ<3ÿtƒì ÿ43ÿh$Ç3ÿÿÿÿƒÄƒìhd¹#Wèúèÿÿ‰ÂÁâ)‹Õd$ƒÄë ‰ÐÁà)ÐÁàfƒ¸ˆ$u!‹d$ƒì‹•À$WRÿPD¸ƒÄë‰ö¸eô[^_]ÍvU‰åWVSƒì º¿h·#¾d·#»l·#¹€¹#‰ö‰ÐÁàǀ`·#Ç8Ç0ÇÇ‘ÿÿÿÿBƒúvϺ»Á%¹Á%RÁàB‰ÇDƒú>~éÇèÆ%ÿÿÿÿÇüÆ%ÇÇ%Ç`¹#Çd¹#ÿÿÿÿǺ#ÿÿÿÿº¹Àº#»Äº#‰öRÁàÇÇÿÿÿÿÆDBƒú~áƒìjh†"è¾ÄÿÿƒÄeô[^_]ÍvU‰å‹EǸ]ÐU‰å‹EÇÿÿÿÿ¸]ÐU‰åƒì‹U‹M ƒùvèê“Ǹÿÿÿÿ됸Óà ¸ÉÃU‰åƒì‹U‹M ƒùv趓Ǹÿÿÿÿ됸þÿÿÿÓÀ!¸ÉÃU‰åƒì‹M ƒùv腓Ǹÿÿÿÿë ¸Óà‹U#ÉÉöU‰åƒì ÿuÿu ÿuèÔçÿÿƒÄÉÍvU‰åWƒì$‹UEè‰E丹‹}äüó«ƒìjÿuäRèBñÿÿƒÄ…Àu -‹Uè‹E ‰¸‹}üÉÐU‰åƒì jÿu ÿuèñÿÿƒÄÉÃU‰åƒì‹E…Àu¸ëƒìPÿu ÿuèíðÿÿƒÄÉÃU‰åƒìÿuÿ5Œ$è`èÿÿƒÄÉÍvU‰åVSƒì ‹]‹E ‰EèÇEìÇEð脒‹0ƒìEØPEèPSèAéÿÿƒÄ»ÿÿÿÿ…Àu ÷Eàu‹]ØèT’‰0‰Øeø[^]ÐU‰å‹M¡Œ$@‰ÂÁâ)¡`¹# ՜$‰¸]ÉöU‰åSƒì‹E‹U ú‹Œ$‰Œ$Çät#jPj jèœìÿÿƒÄÇät#‰Œ$û‹]üÉÍvU‰åS‹M‹] ¡èt#ʼnŠ º#‰š$º#@£èt#‹$ÉÍvU‰åVS‹]Cÿƒøv苑Ç~¸ÿÿÿÿëp‰öœúX‰Æ[€<…Ⱥ#u‰ðPèa‘ǸÿÿÿÿëF[Áâ¹Àº#‹E ‰
-‹E‰‚ĺ#ÆD
-ƒìjhċ"Sè¹T·Ã‰$èÒeƒÄ‰ðP¸eø[^]ÍvU‰åƒì¸ÉÍvU‰åƒì ‹E‰EèÇEìÇEð‹Œ$‰UôUèRPè›ùÿÿƒÄÉÉöU‰åVS‹uv‰ÃÁã)ÃÁã¸`$DŽàÿÿÿÿL0ƒìhd¹#Vèõãÿÿ‹ƒd$ƒÄ‹…À$VPÿRDè7¢ÿÿƒÄeø[^]ÐU‰åƒìǺ#ÿÿÿÿjjèWèÿÿè¢ÿÿƒÄÉÐU‰åƒìEüÇEüÿÿÿÿPèôÿÿƒÄÉÐU‰åƒì‹E‹‰EüEüPjÿìt#‹UüRÁà¹Àº#ƒÄƒ<t ûƒì RÿƒÄú‹Eü@ƒì ÿ4…ĺ#èö›ÿÿƒÄÉÐU‰åWVSƒì ‹u ‹]ƒ}t讏Ǹÿÿÿÿén‰öúƒ=€Â#ÿt ƒ=Ç%ÿuûèƒÇ ¸ÿÿÿÿéCv¡€Â#‰‹€Â#Õ)п„»#‹DÇ0£€Â#‹Õ)й€»#ÇDÁ0…öu8‹Õ)ÐÇÁ‹Õ)ÐÇÇ‹Õ)Љň»#닍<Å)Ǎ<ý€»#ü¹ó¥‹Õ)ЍŃº€»#u#¡Ç%‰‚¨»#@ÁàƒˆÁ%‹€Á%£Ç%‹Õ)ÐÇŔ»#ÿÿÿÿ‹Õ)ЍŘ»#Ç@NjÕ)ЍÅ »#Ç@NjÕ)ÐÇŬ»#û¸ƒÄ [^_]ÃU‰åSƒì‹]ƒûwúÝ)؃<Å°»#uûèÿÇ¸ÿÿÿÿ閍vÝ)ØÁàǀ°»#ƒÀº„»#ƒ<ÿtƒì ÿ4ÿh$ƒÄÝ)ØÁàƒ¸€»#uE‹¨»#R ÅöÁ%u¡Ç%‰Á%‰Ç%Ý)؋Ũ»#@ƒ$ÅÁ%üû¸‹]üÉÃU‰åWVSƒìL‹E‰E´Áà+E´Áàƒ¸€»#…‹P ‹‚ˆ»#@öÅÁ%t¸Œ»#ƒ< „ôÿéì‰ö‹M´Áá+M´Ááy LJŒ»#¾ˆ»#‹7@‹Ç%‰ÝÁ%£Ç%jÿ41ÿ±„»#jèhçÿÿ‹7@ƒ ÅÁ%錐‹E´Áà+E´Áเ»#ƒ<uwPƒ<
-tÿ°ˆ»#ÿ°Œ»#ÿ4
-ëQvÇEÈÇEÌÇEÐÇEÔÇEØÇEÜÇEà‹E´Áà+E´Áàˆ»#Rÿ°Œ»#EÈPEÄPèíÕÿÿƒÄ‹E´Áà+E´Åƒ¸ˆ»#u -ƒ¸Œ»#„Àº »#‹E´Áà+E´ŋ‰E¸M¸‹D‰A‹E¸ƒ˜»#‰ƒ »#‹Aƒœ»#‰B…Àyÿ‹ »#Bʚ;ë‰özÿɚ;~ ÿjʚ;‹E´Áà+E´ÿu´hŽ"ÿ4Ť»#ÿ4Å »#ÿ($‰ÃƒÄƒûÿuƒìÿ5Œ$jè+ùÿÿƒÄ‹E´Áà+E´‰Ŕ»#ë‰ö‹E´Áà+E´ÇŔ»#ÿÿÿÿeô[^_]ÃU‰åWVSƒì‹u‹}ÇEäƒþw3ƒ}t-‹Exÿɚ;w!‹]{ ÿɚ;wúõ)ðƒ<Å°»#uûèÁŠÇ¸ÿÿÿÿ鐅ÿ„·õ)ðƒ<Ŕ»#ÿuÇG ÇGëwƒìEèPjèGÇEäƒÄ¹ »#õ)ðō]è‹D;C|‹+Eè‰G‹D+Cë(¹ »#õ)òÁâ‹+EèH‰G‹D+Eìʚ;‰G ¹˜»#õ)ðÁà‹‰‹D‰Gõ)ðÅº„»#ƒ<ÿtƒì ÿ4ÿh$ƒÄ‹Eƒxu
-ƒx „þº˜»#õ)ð ŋ]‹‰
-‹C‰D
-÷E t¸ »#‹S‰‹S ‰Tëmvƒ}äuƒìEèPjèøEƒÄõ)ð ō‘ »#‹Eè‹]C‰ »#‹EìC ‰B…Àyÿ‰ »#Bʚ;ëzÿɚ;~ ÿjʚ;õ)ðVhŽ"ÿ4Ť»#ÿ4Å »#ÿ($‰ÃƒÄƒûÿuƒìÿ5Œ$jè­öÿÿƒÄõ)ð‰Ŕ»#û¸eô[^_]ÃU‰åWVSƒì ‹]‹} ƒûwúÝ)؃<Å°»#uûèzˆÇ¸ÿÿÿÿ鷉öÝ)؃<Ŕ»#ÿuÇG ÇGëoƒìEèPjèÒDƒÄ¹ »#Ý)؍ōuè‹D;F|‹+Eè‰G‹D+Fë'¹ »#Ý)ÚÁâ‹+EèH‰G‹D+Eìʚ;‰G ¹˜»#Ý)ØÁà‹‰‹D‰Gû¸eô[^_]ÍvU‰åƒìƒ}t藇Çëv臇ǸÿÿÿÿÉÉöU‰åƒìƒ}tèg‡Ç¸ÿÿÿÿë‰öƒì ÿu èÅ®ÿÿ¸ƒÄÉÍvU‰åƒì‹E ƒ}tè,‡Ç¸ÿÿÿÿëv…Àt -ÇÇ@è¸ÉÃU‰åƒì‹UƒúwúÕ)Ѓ<Å°»#uûè܆ǸÿÿÿÿëvÕ)ЋŬ»#ûÉÐU‰åWVS¹»„»#¿€»#¾Œ»#‰öÍ)ÈÁàÇDÿÿÿÿ˜»#ÇBǍP0Ç:ÇD A‰‰Áƒù~ºÇ|Â#ÿÿÿÿÇ€Â#[^_]ÐU‰å]ÍvU‰å¸]ÉöU‰åVSœúX‰Ã¡Œ$@‰ÂÁâ)¾`$‹DÖ0©t0©t)ƒì jèr°ÿÿ¡Œ$@‰ÂÁâ)¿DÖ‰$è"[ƒÄ‰ØPeø[^]ÃU‰åS‹]úût ¸ÿÿÿÿ…ÛuL¡Œ$@‰ÂÁâ)¹`$‹DÑ0Áèƒà‹U ‰¡Œ$@‰ÂÁâ)Õ0‹
-%ÿþÿÿ ؉
-û¸‹$ÉÉöU‰åS‹]úût ¸ÿÿÿÿ…ÛuL¡Œ$@‰ÂÁâ)¹`$‹DÑ0Áè ƒà‹U ‰¡Œ$@‰ÂÁâ)Õ0‹
-%ÿýÿÿ ؉
-û¸‹$ÉÉöU‰åWVSƒì ‹} ÇEðú‹EÇÿÿÿÿÇ@¾;5„$s9v‹µ $ƒ{u ƒìWVÿS,ƒÄ…ÀxƒìWÿuVÿS0‰EðƒÄF;5„$rÊû‹Eðeô[^_]ÉöU‰åƒì‹U¸ƒ:ÿt ¸ƒzu‹‹… $ƒìRÿ2ÿP4ƒÄÉÍvU‰åƒì‹U¸ƒ:ÿt‹‹… $ƒìRÿ2ÿP8ƒÄÉÉöU‰åƒì‹U¸ƒ:ÿt‹‹… $ƒìRÿ2ÿP<ƒÄÉÉöU‰åƒì‹U¸ƒ:ÿt‹‹… $ƒìRÿ2ÿP@ƒÄÉÉöU‰åVS‹u‹µÀ$ƒìÿ°ôh™K#è^j»ƒÄ‰ö[‰ÐÁà)ÐÁà9°d$……ƒÀ º`$f|€ttfƒ|tlƒì f‹Dfƒøwƒì ·ÀPè0¤ƒÄë%v·Ð¸sK#ú€t¸K#út¸‹K#P[‰ÐÁà)ÐÁàÿ°4$t$PShL#è¹iƒÄ Cû™ŽUÿÿÿeø[^]ÉöU‰åWVSƒì ‹E‹…À$‰Eð‹¸üƒì ‹Uð‹‚ðøPèÔÿÿ‰ÆƒÄƒþÿu -¸ÿÿÿÿ…ÿtrOëՐv‰ÐÁà)Ѝ Åö‘$tRQ@»l$ƒ<D‹D$‰ƒìý‰Ø‹Uð‚ðPVèôÑÿÿƒÄ‹Eð˜ðSVèÓÿÿƒÄéiÿÿÿ‰ðeô[^_]ÉöU‰åWVSƒì‹E‹…À$‰Eð‹Mƒy(…©‹=Œ$‰ÐÁà)Ѝžd$‹U93…‹M I‰ÂÁâ)ÂÁ⋄Љ„йl$‹D@‰D@‹„à‰„àƒÂ0¹`$‹
-%ÿ÷ÿÿ‹\0ã ؉
-‹UðƒÂ¸ƒ¼º€ÿ•ÀH‹] ‰„š€é¢v‹U R‰ÂÁâ)ÂÁâ»d$‹A‰„Ѓyt‹A‰‚¬$‹A‰„àë-‰ö‹] [‰ÐÁà)ÐÁà‹]ð‹“ô‰¬$‹“ô‰D$ƒy$u‹E @‰ÐÁà)Ё Ő$¸ƒy ”ÀH‹U ‹Mð‰„‘ˆ¸ƒÄ[^_]ÃU‰åWVSƒì ‹U‹<•À$ƒ¿t8LJƒì‹E @‰ÐÁà)ЋÅ4$‹—ðÂPÿu èAÑÿÿ酋E @‰ÐÁà)ЍÅöƒ‘$t?K@¾l$ƒ<11ºd$‹1„à‰1ƒì‹„Ћ—ðÂPÿu èãÐÿÿë*ƒì‹E @‰ÐÁà)ЋÅ4$‹—ðÂPÿu èKÐÿÿƒÄ‹E @‰ÐÁà)ÐfÇň$€eô[^_]ÐU‰åWVSƒìH‹]ÇE¼ÇEÀfÇEÄÇEÈÇEÌÇEÐÇEÔÇEØÇEÜÇEà¶Ã -f‰E¸‹À$‹€ø‰EÈÇE̍E¸jjPh˜"h¥K#è}–ÿÿ‰ÆƒÄ ƒþÿuƒì h@L#èjÇÿÿƒÄ‹<À$v‰ÐÁà)Ðfƒ<ň$tµ€Gƒ<ÿtJÿëE‰öƒìv‰ÃÁã)ÃÁ㍃¤$PjèJ;fǃˆ$€ƒÄ‹ƒ4$‹—ðÂPVè|ÏÿÿƒÄeô[^_]ÐU‰åWVSƒì‹}hªK#èÒÆÿÿèa°ÿÿ‰EðƒÄ hPhÀK#è·ÆÿÿÇ$èdzÿÿ‰ÃƒÄShÞK#è›Æÿÿ‹Eð‰…À$ƒÄ jhêK#Sè=efÇCÆCÇC8¢"ÇCd¢"ÇC ,˜"ÇC$ ™"ÇC(p¢"ÇC,̙"ÇC0|¢"ÇC4„¢"ÇC8¢"ÇC<D›"ÇC@Т"ÇCD\£"ÇCH¤£"ÇCL¬£"ÇCPD¤"ÇCTŒ¤"ÇCXÀ¤"ÇC\¤¥"ÇC`Ä¥"ÇCdÜ¥"ÇChô¥"ÇCl ¦"ÇCp$¦"ÇCt<¦"ÇCxT¦"ÇC|l¦"ǃ€„¦"ǃ„œ¦"¸ƒÄS‰öDŽ‚€ÿÿÿÿ@=™~í‹EH‰ƒüƒì ‹EÁàP萲ÿÿ‰ƒð¾ƒÄ;u}ƒì ‹ƒððPè‚ÌÿÿƒÄF;u|åÿçw¿èÿ ¡v¿ ¡‰»ô‹E‰ƒøƒ} tƒìjÿuðh@œ"舭ÿÿƒÄeô[^_]ÐU‰åWVSƒì ‹M‹u ‹]‹À$‰Eð…Éx[; -$sS‹À$‹@%ÿÿÿ=u=þ™wv‰ÐÁà)Ðfƒ<ň$u -¸éèvv‰ÐÁà)Ð9 Åd$t -¸&éȍv…Ûuv‰ÐÁà)Ё Ő$ë)ƒûuv‰ÐÁà)Ё$Ő$ÿ÷ÿÿë ¸郉öv‰ÐÁà)ÐÁà˜Ð¿d$‹U9;t\f¸ˆ$€u=ƒì‹;‹Mð‹‘ðÂPVè4Ëÿÿ‹E‰;ƒÄ‹Uð‹‚ð‹MÈPVèQÌÿÿƒÄëv‰ÐÁà)ЋU‰Å4$¸eô[^_]ÍvU‰åVS‹M‹4À$…Éx; -$s‹À$‹@%ÿÿÿ=t¸ÿÿÿÿëw¡Œ$@‰ÂÁâ)¸ÿÿÿÿ9 Õd$uZúè!P‹Œ$R‰ÑÁá)Ñ»`$f‰DËdž託ÿÿ¡Œ$@‰ÂÁâ)ƒì ¿DÓPèçO莡ÿÿƒÄû¸eø[^]ÉöU‰å‹E‹…À$‹€ü]ÍvU‰å‹E‹…À$‹€ô]ÍvU‰åS‹]‹M …ÛxU;$sM‹À$‹@%ÿÿÿ=u7ù™wI‰ÐÁà)Ðfƒ<ň$u¸ëMI‰ÐÁà)Ð9Åd$t ¸&ë3‰öI‰ÁÁá)ÁÁá¸ö‘$”À‹U‰‹‘4$‹E‰¸‹$ÉÉöU‰å‹E f8t·‹E -9Âu¸ë¸ÿÿÿÿ]ÐU‰å¸ÿÿÿÿ]ÉöU‰å¸]ÉöU‰å]ÍvU‰å¸]ÉöU‰åSƒì ‹E‹M ‹…À$I‰ÐÁà)ЋÅ4$‹“ðÂPQèÓÈÿÿƒÄ‹]üÉÍvU‰åWVSƒì ‹E‹u ‹<…À$v‰ÐÁà)Ðfƒ<ň$tµ€Gƒ<ÿtHÿëCƒìv‰ÃÁã)ÃÁ㍃¤$PjèR5fǃˆ$€ƒÄ‹ƒ4$‹—ðÂPVè„ÉÿÿƒÄeô[^_]ÐU‰åSƒì ‹E‹M ‹…À$I‰ÐÁà)ÐÁàfǀˆ$€‹€4$‹“ðÂPQè8ÉÿÿƒÄ‹]üÉÃU‰å]ÍvU‰åWVSƒì ‹U‹•À$‰Eð‹U <•€‰ÆƒÆƒ<7~MƒìR‰ÃÁã)ÃÁ㍃¤$Pjè‹4ÿ 7ƒÄ‹ƒ4$‹Mð‹‘ðÂPÿu èRÈÿÿfǃˆ$€ƒÄë‹E @‰ÐÁà)ÐfÇň$eô[^_]ÐU‰åƒì‹E‹M ‹…À$ƒÀDŽˆ€ÿÿÿÿI‰ÐÁà)ÐfÇň$h$QèðÉÿÿƒÄÉÍvU‰å‹E‹U ‹…À$ƒÀDŽ€R‰ÐÁà)ÐfÇň$]ÃU‰åWVSƒì4‹u v‰EäÁà+EäfÇň$EèPjè“3Mè»@B‹Eº÷ó‰Uà’€€‰E܋A‹U܍ЉE؉A»¡/¸D÷ë‰ÓÁû‹EØÁø)ÿƒÞC‹E÷ç‰×‰øÁèEè‹A»Êš;™÷û‰Ó‰YƒÄVh´¦"ÿuìÿuèÿ($‰ÃƒÄƒûÿuƒìÿ5Œ$jèAäÿÿƒÄ v‰ÈÁà)ȉÅ@$eô[^_]ÐU‰åƒìÿ5Œ$jèäÿÿ¸ƒÄÉÍvU‰åƒìÿ5Œ$jèñãÿÿƒÄÉÃU‰åƒìÿ5Œ$jèÙãÿÿƒÄÉÃU‰åƒìÿ5Œ$jèÁãÿÿƒÄÉÃU‰åƒìÿ5Œ$jè©ãÿÿƒÄÉÃU‰åƒìÿ5Œ$jè‘ãÿÿƒÄÉÃU‰åƒìÿ5Œ$jèyãÿÿƒÄÉÃU‰åƒìÿ5Œ$jèaãÿÿƒÄÉÃU‰åƒìÿ5Œ$jèIãÿÿƒÄÉÃU‰åƒìÿ5Œ$jè1ãÿÿƒÄÉÃU‰åƒìÿ5Œ$jèãÿÿƒÄÉÃU‰åWVSƒì‹MI‰ÃÁã)ÃÁãºd$‹‹4…À$¿`$fÇD(€‹„Ћ–ðÂPQèÕÅÿÿDŽàÿÿÿÿ衆ÿÿƒÄeô[^_]ÉöU‰åVSƒì h`M#è½ÿÿè­¦ÿÿ‰ÆÇ$Œè'ªÿÿ‰Ã‰µÀ$ƒÄ jhøL#Sè®[fÇCÆCÇC`¨"ÇC”¨"ÇC  ¨"ÇC$Ȩ"ÇC(ÇC,à¨"ÇC0ì¨"ÇC4ô¨"ÇC8©"ÇC<©"ÇC@$©"ÇCDL©"ÇCHt©"ÇCLœ©"ÇCPÄ©"ÇCTì©"ÇCXª"ÇC\<ª"ÇC`hª"ÇCdª"ÇCh¸ª"ÇClàª"ÇCp«"ÇCt0«"ÇCxX«"ÇC|€«"ǃ€¨«"ǃ„Ы"ǃˆÿÿÿÿÇ$M#è¼ÿÿƒÄ jVhø«"è|¤ÿÿƒÄeø[^]ÉöU‰å‹M‹E ‹À$fƒ8t·9Èu¸ƒºˆÿt¸ÿÿÿÿ]ÉöU‰å¸ÿÿÿÿ]ÉöU‰åƒì‹E‹…À$ÿ°ˆheL#èìYƒÄÉÍvU‰å‹E‹…À$‹€ˆ]ÍvU‰å¸]ÉöU‰å]ÍvU‰å¸]ÉöU‰å]ÍvU‰å‹E @‰ÂÁâ)ÂfÇՈ$]ÃU‰åƒìhtL#èxYƒÄÿ5Œ$j è„àÿÿƒÄÉÍvU‰åƒìh{L#èPYƒÄÿ5Œ$j è\àÿÿƒÄÉÍvU‰åƒìh‚L#è(YƒÄÿ5Œ$j è4àÿÿƒÄÉÍvU‰åƒìh‰L#èYƒÄÿ5Œ$j è àÿÿƒÄÉÍvU‰åƒìhL#èØXƒÄÿ5Œ$j èäßÿÿƒÄÉÍvU‰åƒìh—L#è°XƒÄÿ5Œ$j è¼ßÿÿƒÄÉÍvU‰åƒìhžL#èˆXƒÄÿ5Œ$j è”ßÿÿƒÄÉÍvU‰åƒìh¥L#è`XƒÄÿ5Œ$jèlßÿÿ¸ƒÄÉÉöU‰åƒìh¬L#è4XƒÄÿ5Œ$jè@ßÿÿƒÄÉÍvU‰åƒìh³L#è XƒÄÿ5Œ$jèßÿÿƒÄÉÍvU‰åƒìhºL#èäWƒÄÿ5Œ$jèðÞÿÿƒÄÉÍvU‰åƒìhÁL#è¼WƒÄÿ5Œ$jèÈÞÿÿƒÄÉÍvU‰åƒìhÈL#è”WƒÄÿ5Œ$jè ÞÿÿƒÄÉÍvU‰åƒìhÏL#èlWƒÄÿ5Œ$jèxÞÿÿƒÄÉÍvU‰åƒìhÖL#èDWƒÄÿ5Œ$jèPÞÿÿƒÄÉÍvU‰åƒìhÝL#èWƒÄÿ5Œ$jè(ÞÿÿƒÄÉÍvU‰åƒìhäL#èôVƒÄÿ5Œ$jèÞÿÿƒÄÉÍvU‰åƒìhëL#èÌVƒÄÿ5Œ$jèØÝÿÿƒÄÉÍvU‰åSƒì0‹]ÇEÜÇEàfÇEäÇEè¶Ãf‰EØÇEìEØjjPh„¬"hòL#è‡ÿÿƒÄ ‹À$‰Ã‰šˆƒûÿuƒì h M#èæ·ÿÿƒÄ[‰ÐÁà)ÐÇŘ$ÿÿÿÿ‹]üÉÐU‰åôëýU‰åWVSƒì ‹} ¾ú»ëvCûÿ2Ý)ØÁຠÂ#€|t߃ìÿ4ÿuèaVƒÄ…Àuʾ…öt1ÿÀuèðnÇûéÜûÝ)؍…¤Â#éˉö÷Ç@uè¿nÇû髍v‹E‰Eð=ÿ~èžnÇû銉ö‹pã#ƒúÿtqÕ)Ѝ<…w‹†¤Â#£pã#ƒì ÿuèV@‰$è×£ÿÿ» Â#‰ƒÄÿuPè7U‹Eð‰‡¨Â#‡¬Â#‰$èĽÿÿÆDƒÄû‡¤Â#ëvènÇû¸eô[^_]ÍvU‰åWVSƒì ¾ú¿» Â#vý)øÁà€|tƒìÿ4ÿuèUƒÄ…Àu¾Gÿÿ~ʅötJƒì ÿuèOUƒÄ@Pý)ûÁã¾ Â#ÿ43èu£ÿÿƒÃÆD3¡pã#‰ƒ¤Â#‰=pã#ƒÄûë‰öèSmÇû¸eô[^_]ÍvU‰åWVSƒì ‹}?ÿw‹Õ)Ѐ<…¸Â#uèmǸÿÿÿÿé‰öèÏæÿÿúè5B‹Œ$R‰ÑÁá)Ñf‰Íh$‹Õ)Ѝ4… Â#ƒ~ ÿu
-ƒ~…“ƒìWjÿìt#ƒÄhD$jè8)ƒÄUè¡H$;˜$|¡D$+”$‰Eè¡H$+˜$ë!‰ö¡D$+”$H‰Eè¡H$+˜$ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыŒ$R‰ÐÁà)Ð) Ŭ$ƒì QèJ†ÿÿƒÄƒ=œ$ÿtƒì ÿ5œ$ÿh$Çœ$ÿÿÿÿƒÄ‹ -Œ$I‰ÐÁà)ЋÅd$ƒì‹…À$QPÿRH‹ -Œ$I‰ÐÁà)л`$fÇDÃ(Íǂ Þ#‹‰‚¤Þ#ƒÄF PQèZ¼ÿÿÇŒ$ÿÿÿÿÇ $ÿÿÿÿèEˆÿÿ¡Œ$@‰ÂÁâ)¿DÓ‰$è…@è,’ÿÿƒÄûèÿäÿÿë8ÿNƒìWjÿìt#¡Œ$@‰ÂÁâ)¿Õh$‰$èF@èí‘ÿÿƒÄû¸eô[^_]ÃU‰åWVSƒì ‹}‹]?ÿw‹Õ)Ѐ<…¸Â#uè¯jǸÿÿÿÿéVv…ÛuúëúèÒ?‹Œ$R‰ÑÁá)Ñf‰Íh$‹Õ)Ѝ4… Â#…Ûu0ƒ~ ÿu‹E 9F}èMjÇ û¸ÿÿÿÿéó‹E )Fûéâèäÿÿƒ~ ÿu ‹E 9F‘ƒìWjÿìt#ƒÄhD$jèš&ƒÄUè¡H$;˜$|¡D$+”$‰Eè¡H$+˜$ë¡D$+”$H‰Eè¡H$+˜$ʚ;‰B‹Mè ‰ ‰ ‰ ‰ ‰ ‰Áá‹]ìºÓMb‰Ø÷êÁú‰ØÁø)ÂыŒ$R‰ÐÁà)Ð) Ŭ$ƒì Q讃ÿÿƒÄƒ=œ$ÿtƒì ÿ5œ$ÿh$Çœ$ÿÿÿÿƒÄ‹ -Œ$I‰ÐÁà)ЋÅd$ƒì‹…À$QPÿRH‹ -Œ$I‰ÐÁà)л`$fÇDÃ(͋E ‰‚ Þ#‹‰‚¤Þ#ƒÄF PQ迹ÿÿÇŒ$ÿÿÿÿÇ $ÿÿÿÿ誅ÿÿ¡Œ$@‰ÂÁâ)¿DÓ‰$èê=葏ÿÿƒÄûèdâÿÿë<‰ö‹E )FƒìWjÿìt#¡Œ$@‰ÂÁâ)¿Õh$‰$è§=èNÿÿƒÄû¸eô[^_]ÐU‰åWVSƒì ‹}?ÿw‹Õ)Ѐ<…¸Â#uèhǸÿÿÿÿéU‰öè,…À„‡œúX‰Æ‹Õ)Ѝ… Â#‹JA‰J‹Z ƒûÿtG‹Ý Þ#9È<)Á‰È‰BƒìB PSèb·ÿÿ[‰ÐÁà)ЋÅd$ƒÄ‹•À$SRÿPDèUyÿÿƒÄƒìWjÿìt#ƒÄ‰ðPé¼‰öúèª<‹ $R‰ÑÁá)Ñf‰Íh$‹Õ)Ѝ… Â#‹JA‰J‹Z ƒûÿtG‹Ý Þ#9È<)Á‰È‰BƒìB PSè¶ÿÿ[‰ÐÁà)ЋÅd$ƒÄ‹•À$SRÿPDè݃ÿÿƒÄƒìWjÿìt#¡Œ$@‰ÂÁâ)¿Õh$‰$è <貍ÿÿƒÄû¸eô[^_]ÐU‰åWVSƒì ‹] ÇEð‹E8ÿw‹Õ)Ѐ<…¸Â#uèlfǸÿÿÿÿéÊèc*…À„ÃœúX‰Â‰Uì‹E‹Õ)Ѝ4… Â#^‹^ ƒûÿts݉‹€ Þ#;F_¿ Þ#ÇEðv‹F+:‰FƒìF PS袵ÿÿ[‰ÐÁà)ЋÅd$ƒÄ‹•À$SRÿPD‹^ ƒÄƒûÿt݋:;F~°ƒìÿujÿìt#ƒÄƒ}ðtèdwÿÿ‹Uì‰ÐPéõúèÊ:‹ $R‰ÑÁá)Ñf‰Íh$‹E‹Õ)Ѝ4… Â#^‹^ ƒûÿtr݉‹€ Þ#;F^¿ Þ#ÇEð‰ö‹F+:‰FƒìF PSèÊ´ÿÿ[‰ÐÁà)ЋÅd$ƒÄ‹•À$SRÿPD‹^ ƒÄƒûÿt݋:;F~°ƒìÿujÿìt#ƒÄƒ}ðt贁ÿÿ¡Œ$@‰ÂÁâ)ƒì ¿Õh$Pèð9藋ÿÿƒÄû¸eô[^_]ÉöU‰åWVSƒì ¾¿¤Â#õ)óÁãǃ Â#‰4;ǃ¨Â#ƒì ƒ¬Â#PèÞ³ÿÿƒÃF‰;ƃ¨Â#ƒÄ‰Æþÿ~±Ç˜Þ#ÿÿÿÿÇpã#ƒìjh8»"芔ÿÿƒÄeô[^_]ÍvU‰åVS‹uú>ÿw‹Õ)Ѐ<…¸Â#uèÉcÇû¸ÿÿÿÿënvƒì ‹Õ)л Â#ÿ4ƒèUKƒÄ@P‹Õ)Ðÿ4ƒè™ÿÿ‹Õ)ÐÆDƒ‹Õ)Ћpã#‰…´Â#‹£pã#ƒÄû¸eø[^]ÉöU‰åƒì‹Mú9ÿw‹Õ)Ѐ<…¸Â#uècÇû¸ÿÿÿÿëb‰ö‹Õ)Ѓ<…¬Â#ÿtèîbÇû¸ÿÿÿÿë8‹Õ)ÐÆ…¸Â#‹Õ)Ћpã#‰…´Â#‹£pã#û¸ÉÉöU‰åSƒì‹M‹] 9ÿw‹Õ)Ѐ<…¸Â#uèubǸÿÿÿÿë_ú‹Õ)ÐÁàƒ¸¬Â#ÿu ‹€¨Â#‰ë7‰öÇ‹Õ)Ћ…¬Â#¹h$vÿ @‰ÐÁà)ЋDÁPƒøÿuëû¸‹]üÉÃU‰åVS‹u‹M¸ùÿ‡–ú‹pã#‰ƒúÿtnÕ)Ћ…´Â#£pã#‹Õ)л Â#ǃ‹Õ)Љ …¨Â#ƒì ‹Õ)Ѝ…¬Â#Pè±ÿÿ‹Õ)ÐÆDƒƒÄëègaÇû¸ÿÿÿÿëû¸eø[^]ÍvU‰åƒì‹M9ÿw‹Õ)Ѐ<…¸Â#uèaǸÿÿÿÿë=ú‹Õ)Ѝ… Â#ƒx ÿuƒxuèì`Ç û¸ÿÿÿÿë ‰öÿHû¸ÉÐU‰å‹E@‰ÂÁâ)¸fƒ<Ո$”À]ÐU‰åVS‹][‰ÐÁà)Ѝ4Åfƒ¾ˆ$uAƒì‹ݤÞ#Õ)Ѝ…¬Â#PSè°ÿÿ‹†d$ƒÄ‹…À$SPÿRD¸ƒÄ됸eø[^]ÃU‰åVSƒ=øt#…ÚÇøt#¹» Ç%¾$Ç%‰ÁàP ÆÇ2ÿÿÿÿÆDAƒùváƒìjjh€ã#èÜýÿÿ¹ƒÄ¾„É%»€É%‰ö‰ÁàQ‰0Ɖуù -véÇ´Ë%ÿÿÿÿÆ°Ë%ÇxÉ%¹¾äË%»àË%vÍ)ÈÁàQ‰0ƉуùvãÇÏ%ÿÿÿÿÆ Ï%Ç(Ï%eø[^]ÐU‰åWVSƒìŠEˆEóŠUˆUòfÇEæ¾<u€út €}óu€}òuè_Ǐ¸ÿÿÿÿé7‰öúƒ=xÉ%ÿuèí^ǍûÇEìÿÿÿÿ됡xÉ%€‹ՄÉ%‰xÉ%û‰Eìƒ}ìÿu -¸ÿÿÿÿéìvƒì h€ã#ègñÿÿƒÄ‹]¾¹º÷ñ‰×ëf‰ö¿€<Å@Ç%t0ƒìÿu¿ōƒ Ç%Pè³EƒÄ…Àu€»8Ç%„Ÿ¾ëG¹‰øº÷ñ‰×fÿEæfƒ}懜‰ó„Ût–¿Áãƃ@Ç%ƒìÿuƒ Ç%Pè÷D‹E쉃4Ç%ƒÄ€}óu‰Â’‹] f‰ňÉ%ëv‹E썀‹E ¯Ef‰ՈÉ%úƒì ‹U썒Áã·ƒˆÉ%Pè-“ÿÿºŒÉ%‰ƒÄû…Àu%è”]ǒƒì h€ã#èAõÿÿ¸ÿÿÿÿ魍v‹E썀ÁãS‰UྀÉ%‹ƒŒÉ%‰‚„É%‰2ƒìjjƒœÉ%Pè:ûÿÿƒÄ ·D3Pjƒ É%Pè#ûÿÿƒÄ jjÃ¤É%SèûÿÿŠ]ó‹Eàˆ\0ƒÄúƒ=(Ï%ÿuèø\ǎûÇEèÿÿÿÿë¡(Ï%Å)‹•äË%‰(Ï%û‰Eèƒ}èÿu_ƒì h€ã#èvôÿÿ‹Eèéä‰öè§\ǐƒì h€ã#èTôÿÿ¸ÿÿÿÿéÀ‰öèƒ\Ǒƒì h€ã#è0ôÿÿ¸ÿÿÿÿ霉ö‹EèÁà+EèÁà¹àË%ŠUòˆT P‹]ì‰
-‹] f‰\
-ǀäË%ÿÿÿÿ‰ºèË%‹]썛ÆՀÉ%ƍ¿ōr¿ Ç%€|>t%ƒì¶D>Pš<Ç%SèGõÿÿÆD>‰$èšøÿÿƒÄƒì h€ã#èŽóÿÿ¿EèƒÄeô[^_]ÍvU‰åWVSƒìŠEˆEóŠ]ÇEè¿ÆEç<u„Ût €}óu€ûuè‚[Ǐ¸ÿÿÿÿé0‰öúƒ=(Ï%ÿuèa[ǎûÇEìÿÿÿÿë ¡(Ï%Å)‹•äË%‰(Ï%û‰Eìƒ}ìÿu ¸ÿÿÿÿéߐ‹EìÁà+EìÁàºàË%ˆ\ ‹M f‰LǀäË%ÿÿÿÿƒì h€ã#è°íÿÿƒÄ‹U¾¹º÷ñ‰Öë]v¶€<Å@Ç%u ¿ÆEçë8ƒìÿu¶Å Ç%PèöAƒÄ…Àu¿ëF¹‰ðº÷ñ‰ÖÿEèƒ}è‡Ò‰ù„Ét €}çuR¶Á㸠Ç%ÆD ÆDƒìÿuPè>AƒÄ jjÃ<Ç%Sè/øÿÿÇ$€ã#èçñÿÿƒÄ jjSè:ïÿÿëM¶ōCº Ç%€|t'þDƒì h€ã#è®ñÿÿƒÄ jjƒ<Ç%Pèûîÿÿ됃ì h€ã#è‹ñÿÿƒÄ¶‹<Å4Ç%¿ŠUó:ŘÉ%tèªYǓ¸ÿÿÿÿéX‰ö€}óu¿·ňÉ%9E u€}ót(¿·ňÉ%™÷} …ÒtèdYǔ¸ÿÿÿÿéƒì h€ã#è ìÿÿ¶‹ÅDÇ%ƒÄƒúÿ„­€}óu#è&YǕƒì h€ã#èÓðÿÿ¸ÿÿÿÿéЍÕ)з…ôË%9E t"èíXǔƒì h€ã#èšðÿÿ¸ÿÿÿÿ鋋MìÁá+M썶Å »$Ç%‹‰äË%‹Mì‰ ë/‰öèŸXǑƒì h€ã#èLðÿÿ¸ÿÿÿÿë@¶‹Uì‰ÅDÇ%ƒì h€ã#è*ðÿÿ‹EìÁà+EìÁàH‰±èË%ºàË%‰<Æ¿EìƒÄeô[^_]ÉöU‰åWVSƒì¿E‰Eì‰ÇÁç)ÇÁ獗àË%‰Uðh€ã#èÏêÿÿ‹Mð‹Y›ÁãC‰Eèº$Ç%‹€Áà°€É%ƀ€É%F‰$èôÿÿF ‰$è„ôÿÿF$‰$èyôÿÿƒÄú·FPÿv 訍ÿÿû¹$Ç%‹Eè‹ú ’¡xÉ%‰̈́É%‰xÉ%ûƇàË%ƒÃ ‹Uð‹B‰ƒ$Ç%ú¡(Ï%‰‡äË%‹Mì‰ -(Ï%ûƃ Ç%Ç$€ã#è
-ïÿÿƒÄeô[^_]ÍvU‰åWVSƒì ‹u ŠM¿UÕ)Ѝ…àË%‰Eð‹@€ŀÉ%‹Eð€x uèûVǔ¸ÿÿév€;uèÞVǖ¸ÿÿéù‰ö€{tQ€{u,ƒì¶ÁP‹Uð·BPC PèÈëÿÿƒÄ…Àt;¸évƒì¶ÁP‹Uð·BPC PèœëÿÿƒÄ…ÀuÔƒì CPè-éÿÿƒÄ‹Uð·B‹{‰ÁÁéüó¥¨tf¥¨t¤·B‰ÁK‰K·S‰ÐC 9Ár‰È)ЉC€{u ƒì CPë8‰ö€{uƒì‹Uð·BPC$PèZïÿÿëƒì‹Uð·BPC$PèDïÿÿC‰$èíÿÿƒÄ¸eô[^_]ÐU‰åWVSƒì ‹} ŠM¿UÕ)Ѝ…àË%‰Eð‹@€ŀÉ%‹Eð€x uè‹Uǔ¸ÿÿév€;uènUǖ¸ÿÿéù‰ö€{tQ€{u,ƒì¶ÁP‹Uð·BPC$PèXêÿÿƒÄ…Àt;¸évƒì¶ÁP‹Uð·BPC$Pè,êÿÿƒÄ…ÀuÔƒì CPè½çÿÿƒÄ‹Uð·B‹s‰ÁÁéüó¥¨tf¥¨t¤·B‰ÁK‰K·S‰ÐC 9Ár‰È)ЉC€{u ƒì CPë8‰ö€{uƒì‹Uð·BPC Pèêíÿÿëƒì‹Uð·BPC PèÔíÿÿC‰$è-ìÿÿƒÄ¸eô[^_]ÐU‰åSƒìhM#è;ƒÄÿ5xÉ%h‹M#è;»ƒÄÝ)ØÁà€¸àË%t8àË%‹B€ŀÉ%ƒì ÿp ÿp$‹B€Å Ç%PShŸM#è®:ƒÄ Cƒûv­‹]üÉÃU‰åƒì`¿MÍ)ȋ…ðË%’ŀÉ%ÿp ÿp$RQhÀM#E¨Pèf:ƒÄ ÉÐU‰åSƒì‹]h€ã#èHæÿÿ¿ÓÕ)Ѝ …‹øË%€Å ƒÄ€º Ç%u ‹äË%‰‚$Ç%¿ÃÅ)ÂÁâƂàË%ú‹ -(Ï%‰ŠäË%£(Ï%ûƒì h€ã#èÓêÿÿƒÄ‹]üÉÍvU‰åWVSƒì ‹u ‹E‹<… $ú‹^…Ûu-ƒì j èdˆÿÿƒÄ…ÀtÇÿÿÿÿÇ@Ç@ÿÿÿÿ‹U‰‰F‹;Œ$u û¸#é~ƒ;ÿtc¾`$‰ö‹ -Œ$I‰ÐÁà)Ћ‰TÆP‹C‰„¬¡Œ$‰CÿCè`oÿÿ¡Œ$@‰ÂÁâ)ƒì ¿DÖPèŸ'èFyÿÿƒÄûúƒ;ÿu¤¡Œ$ÿD‡D¡Œ$‰û¸eô[^_]ÉöU‰åWVSƒì ‹E ‹x¸…ÿ„À‹;Œ$tû¸髍vúè*'‹Œ$ [‰ÊÁâ)Êf‰Õh$‹E‹… $ÿL˜DÇÿÿÿÿ‹_ÇGÿÿÿÿƒûÿt-p ‰Ù[‰ÐÁà)ЉÅ°$‹œž DŽŽ ÿÿÿÿƒûÿuÖÇGèfnÿÿ¡Œ$@‰ÂÁâ)ƒì ¿Õh$Pè¢&èIxÿÿƒÄû¸eô[^_]ÃU‰åVSƒì h$N#蒙ÿÿè]ƒÿÿ‰ÆÇ$蛆ÿÿ‰Ã‰µ $ƒÄ jh8N#Sè"8fÇCÍÆCÇCÇCxË"ÇC ÄË"ÇC$ÐË"ÇC(ØË"ÇC,Ì"ÇC04Ì"ÇC4|Ì"ÇC8ÜÈ"ÇC<ÄÌ"ÇC@ÄÉ"ºƒÄsK •ÇD@DŽ ÿÿÿÿBú™~ݍeø[^]ÉöU‰åVS‹E‹… $ƒì hN#è7¾ƒÄƒÃƒìÿt³@hN#èû6ƒÄFþ™~ãeø[^]ÃU‰å¸ÿÿÿÿ]ÉöU‰å]ÍvU‰åƒì‹E‹U ‹… $ƒÀƒ|@tƒìRj
-èȽÿÿƒÄÉÍvU‰å‹U :t ‹E -9u
-¸ëv¸ÿÿÿÿ]ÐU‰åSƒì‹] j è#…ÿÿ‰ÂƒÄ¸ …Òt!ÇÿÿÿÿÇBÇBÿÿÿÿ‹E‰‰S¸‹]üÉÍvU‰åSƒì‹] ‹Cƒxt ¸ë&‰öúƒ{tƒìj ÿsè4…ÿÿÇCƒÄû¸‹]üÉÍvU‰åWVSƒì ‹}‹u ú‹^…Ûu*ƒì j 胄ÿÿƒÄ…ÀtÇÿÿÿÿÇ@Ç@ÿÿÿÿ‰>‰Fƒ;ÿt
-û¸ë"‰ö¡Œ$‹½ $ƒÂÿD‚@¡Œ$‰û¸eô[^_]ÃU‰åWVSƒì ‹E ‹U‹• $ú‹p¸…ö„V‹;Œ$u û¸#éA‹Œ$‹F ¿`$;„“°v -¸é v¡Œ$‹Œƒ°‹“¬…Òt‰ö‹;Œ$…Š‹R…Òu븅À…†‹ -Œ$I‰ÂÁâ)‹ƒ¬‹‰D×P‹ƒ¬‹@‰„‹‹“¬¡Œ$‰B‹ƒ¬ÿ@èºjÿÿ¡Œ$@‰ÂÁâ)ƒì ¿D×Pèù"è tÿÿƒÄûúéRÿÿÿ‰ö¸;J ’Àérÿÿÿ‹E‹… $¡Œ$ÿDƒD¡Œ$‰¹‹ƒ¬‹V ë‰ö‰Á‹A…Àt;P sò…Ét‰q됉³¬…Àt‰p‰F‰Nû¸eô[^_]ÍvU‰åWVS‹}‹E ‹ ½ $ú‹X¸…Û„Ù‹;Œ$uû¸#éčv‹Œ$‹C ;„‘°s
-¸饡Œ$‹´°‹‘¬…Òt‰ö‹;Œ$u‹R…Òu︅Àuû¸ëk‰ö¸;r ’Àëåv‹ ½ $¡Œ$ÿDD¡Œ$‰¾‹¬‹S 됉ƋF…Àt;P sò…öt‰^됉™¬…Àt‰X‰C‰sû¸[^_]ÉöU‰åWVSƒì ‹E ‹x¸…ÿ„ï‹;Œ$tû¸éڍvúè&!‹Œ$ [‰ÊÁâ)Êf‰Õh$‹E‹… $‰EðÿL˜DÇÿÿÿÿ‹_ÇGÿÿÿÿƒûÿt2‰ÆƒÆv‰Ù[‰ÐÁà)ЉÅ°$‹œžDŽŽÿÿÿÿƒûÿuÖÇG‹O‹W…Éu -‹Eð‰¬ë‰ö‹G‰A…Òt‹G‰Bè3hÿÿ¡Œ$@‰ÂÁâ)ƒì ¿Õh$Pèo èrÿÿƒÄû¸eô[^_]ÐU‰åVSƒì hdN#è^“ÿÿè)}ÿÿ‰ÃÇ$€èg€ÿÿ‰Æ‰4 $ƒÄ jhxN#Vèî1fÇFÌÆFÇFÇF€Ò"ÇF Ó"ÇF$0Ó"ÇF(`Ó"ÇF,¨Ó"ÇF0ÔÓ"ÇF4,Ô"ÇF8<Í"ÇF<ÄÎ"ÇF@ÈÏ"ºƒÄ^N•ÇD@DŽ°ÿÿÿÿDŽÿÿÿÿBú™~Òdž¬eø[^]ÐU‰å‹U‹M ¸ÿÿÿÿ…Òt;‹‹… $ƒxu‹@%ÿÿÿ=Ìu…Ét ‹B‹@ ‰ë
-‰ö¸ÿÿÿÿ됸]ÐU‰å‹U‹M¸ÿÿÿÿ…Òt@‹‹… $ƒxu‹@%ÿÿÿ=Ìt¸ÿÿÿÿ됅Ét‹B‹@ ‰‹R‹E ‰B ¸]ÃU‰å‹E‹M ‹U‹… $‰”ˆ°]ÃU‰åWVSƒì‹E‹<… $hN#è0»ƒÄwƒìÿtž@hN#èó/ƒÄCû™~ãƒì hBN#èÚ/»ƒÄ‰öƒìÿ´Ÿ°h^N#è¼/ƒÄCû™~àeô[^_]ÃU‰å‹U :t ‹E -9u
-¸ëv¸ÿÿÿÿ]ÐU‰åS‹E‹U ‹]‹ … $Áâ‹C‰„°ÇD
-D‹$ÉÉöU‰åVS‹E‹u ‹… $ƒ|³DtƒìVj
-èD¶ÿÿƒÄë vÇD³DDŽ³°ÿÿÿÿeø[^]ÉöU‰å‹U :t ‹E -9u
-¸ëv¸ÿÿÿÿ]ÐU‰åSƒì‹] jèƒ}ÿÿ‰ÂƒÄ¸ …Òt1ÇÿÿÿÿÇBÇBÿÿÿÿ‹E‹@‰B ÇB‹E‰‰S¸‹]üÉÍvU‰åSƒì‹] ‹Cƒxt ¸ë&‰öúƒ{tƒìjÿsè„}ÿÿÇCƒÄû¸‹]üÉÍvU‰åWVSƒì$·]Sh‚N#è .‰Ø-yƒÀÁèƒÄ ·À‰Eè@ÛÁã¿àÛ%ÿt8CP‰Eä·8Ph‰N#èá-ƒÄ ÿt;·D;Ph—N#èÊ-ƒÄ ÿt; s·>Ph¨N#è±-ƒÄ ÿt>·D>Ph¹N#èš-ƒÄ ‹Uä·D:P·DLPhÊN#è~-‹UèÕƒÄ·ØShÛN#èc-EóPEòPEìPS蹃ĶUóR¶UòRÿuìPh O#è6-ƒÄ eô[^_]ÍvU‰åWVSƒì ‹E‹U‹]¹‹u ƒî‰ƒî‰ºÀ^&fƒ=À^&yA¿Áfƒ<Byfù™~îfù™~ƒì hðN#èÎ,¸ƒÄé ¿Á<¹À^&‰Úf Ê€f‰Ǎ<ÿÁçºàÛ%‰tÇD _ÇDfŒÙf‰LfÇfÇDÇD _ ‹M‰ ÇDÇDO0ÇDÇD Ǎ_@ÇÇD‰t‰t fŒÉf‰L fŒÙf‰LfŒÛOPf‰\fŒÛf‰fÇD 0fÇD0O`fÇfÇDfÇDÇLÜ%¾`&¹üó¥Å˜eô[^_]ÐU‰åVS‹u ¿E-‰Â…ÀyP‰ÐÁø@ÀÁà¹àÛ%f‰tX@Vf‰T f‰t ƒÀPf‰tf‰4[^]ÉöU‰å¿E-‰Â…ÀyP‰ÐÁøfDŽÀ^&]ÉöU‰åSƒì‹]¿E PhO#Sè~3‰ØƒÄ‹]üÉÃU‰åVS趉Æès»‰öƒìhlÞ"SèƒÄhø×"SèìƒÄCƒû~ۉðeø[^]ÉöU‰åƒìèaÉÍvU‰åSƒì‹]‹üt#€82uºð°îƒìShbP#èˆ*ƒÄÁ㋃üt#@Ph½Z#èp*ƒÄÿ³@u#ènƒÄ‹]üÉÉöU‰åƒìÿuhyP#èE*èèûÇ$èG7ƒÄÉÉöU‰åWVSƒì‹E‹} ƒ=$Ú%„à…ÿ„Ø¡ Ð%€€€ źm¶‰È÷â‰È)ÐÑ草ÁÁé
-‰O¡¤Ð%ÀP‰ÐÁà)кè‰Ó™÷û’’’щW¡¤Ð%ÀP‰ÑÁá)ѾÓMb‰È÷îÁú‰ÈÁø‰Ó)øƒÞC÷o‰ÑÁù‹GÁø)Á‰È؉‹OÁú‰ÈÁø)’’’’’’Áâ)э ‰ ‰ ‰Áá‰O‹éԉö]è¡ Ð%€€€ źm¶‰È÷â‰È)ÐÑ草ÁÁé
-¡¤Ð%ÀP‰ÐÁà)кè‰Ö™÷þ’’’щS¡¤Ð%ÀP‰ÑÁá)ѾÓMb‰È÷îÁú‰ÈÁø)‰Uè‹{¸ƒÞC÷ï‰ÑÁù‰øÁø)Á‰ÈEè‰ùÁú‰ÈÁø)’’’’’’Áâ)э ‰ ‰ ‰Áá‰K‹E荀€€€€€‰ÃÁã‰È÷îÁúÁù)ʍéèvƒøuc¸ƒ=”Ð%…Ρ˜Ð%€€€€€€‰ÃÁã‹ -œÐ%ºÓMb‰È÷êÁúÁù)ÊӅÿ„…¡˜Ð%‰¡œÐ%éqvƒø…綄Ð%ƒøtƒø…Àt
-ë,ƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹ -Ð%f)Ù·É - Ð%º×®¬]‰È÷êÁú‰ÈÁø)¤Ð%’BÁà)Ѝ‚‰ÂÁâ Ð)Á‰È£ Ð%f‰Ð%…ÿ„̍€€€ źm¶‰È÷â‰È)ÐÑ草ÁÁé
-‰O¡¤Ð%ÀP‰ÐÁà)кè‰Ó™÷û’’’щW¡¤Ð%ÀP‰ÑÁá)ѺÓMb‰È÷êÁú‰ÈÁø‰Ó)Ëw¸ƒÞC÷î‰ÑÁù‰ðÁø)Á‰È؉‰óÁú‰ÙÁù)ʍ’’’’’’Áâ‰Ø)Ѝ€€€Áà‰G‹ Ð%’’’4Õ¹Á6ۉð÷é‰Ó3‰ÁÁù
-‰ð™‰È)Ћ -¤Ð%ɍ‘ÑÁâ)ʉÑÁá)эÈ鍃ø…ƒ=”Ð%…rU衘Ð%‰¡œÐ%‰B»@¹C°Ò‰Êî‰Úì¶ÈìÁàf¶Ñ зð· Ú%9Æv%h†P#j_h˜P#hŸP#èm%Ç$èmƒÄ· Ú%)ó¯ˆÐ%· Ú%‰Ø‰Ñº÷ñ‰Ãº °
-îì©t‹ -ˆÐ%;ÍÌÌ̉ð÷âÁê9Ós‰Ëu荛€€‹V‰Eä‰F¸¡/¸D÷mä‰ÑÁù‹EäÁø)Á‰ÈEè‹N¸¡/¸D÷éÁú‰ÈÁø)’’’’’’’’’Áâ )щN¡˜Ð%€€€€€€Áà‰Eä‹ -œÐ%ºÓMb‰È÷êÁúÁù)ʋEäÐÅÿt ‰ð‹‰‹@‰G‰Øëv¸eô[^_]ÍvU‰åVSƒìŠEˆE÷ÿ¨u#ƒ=¨u#uƒ=„u#tÿ„u#¶E÷€ÁàºLÏ%ƒ<uIÇö€PÏ%tûƒì ¶]÷›Áã¾@Ï%ÿ43ÿ“DÏ%ƒÄöDtú¶E÷€Ç…LÏ%ÿŒu#ƒ=¨u#uƒ=ˆu#tÿˆu#ÿ -¨u#eø[^]ÍvU‰åWVSº¿LÏ%¾HÏ%»DÏ%¹@Ï%’ÁàÇ8‰0ÇÇBƒú~ÜǨu#[^_]ÐU‰åVS‹U‹] ‹uú’ƒ<…LÏ%t÷Æu¸ÿÿÿÿëH’ …ǁLÏ%û…Ût‰™DÏ%º@Ï%HÏ%‰‰t
-됍’Ç…LÏ%¸[^]ÐU‰å¡¨u#]ÉöU‰åSƒì¶„Ð%ƒøt!ƒø…Àt ë.‰öƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹ -Ð%f)Ù·É - Ð%º×®¬]‰È÷êÁú‰ÈÁø)¤Ð%’BÁà)Ѝ‚‰ÂÁâ Ð)Á‰ - Ð%f‰Ð%ÿ¨u#ƒ=¨u#uƒ=„u#tÿ„u#¡œÐ%‰Ã„ã#º¡/¸D‰Ø÷êÁú‰ÙÁù)ʘÐ%’’’’’’’’’Á⠉Ø)УœÐ%‹€Ð%ë$‹¡ŒÐ%‰‰ŒÐ%‰€Ð%ƒì ÿrÿRƒÄ‰Ú…Òt‹B ;˜Ð%;˜Ð%uƋB;œÐ%~»ƒ=¨u#uƒ=ˆu#tÿˆu#ÿ -¨u#‹]üÉÃU‰åWVSƒì‹uhÈì"j@èØ -ƒÄƒ>t,ƒì h¹P#èß »ÿÿƒÄ¿@¹C°8‰ÊîˆØ‰úîëaƒì hÕP#è³ ‹N‰ -ˆÐ%ɍA‰ÂÁâ‰Ñ)ÁºÓMb‰È÷âƒÄ‰ÑÁéu¹f‰ - Ú%‰Ë¿@¹C°4‰Êî‰úˆØî‰ØfÁèî‹£”Ð%ƒ=„`&~»A¹C°p‰ÊÚîîÆ„Ð%ë%Æ„Ð%»B¹C°°‰ÊÚîîºa°îº!ì%þî¹¾ÀÐ%»ÄÐ%ƒùbIÁàØÐ%‰0I‰LÃAƒùc~ßÇÚ%ÇŒÐ%ÀÐ%Ç„u#Lju#¡ˆÐ%€€€Áࣄã#ÇœÐ%ǘÐ%Ç Ð%ǤÐ%fǐÐ%ƒ=”Ð%uÇ($¸ã"Çh$Pä"ëÇ($ ä"Çh$,ë"eô[^_]ÃU‰å‹E£„u#]ÍvU‰å‹E£ˆu#]ÍvU‰å‹E£”u#]ÍvU‰åWVSƒì ‹E‹U ‰Eè‰Uì¸ÿÿÿÿƒ=ŒÐ%tl‹ -ŒÐ%‹£ŒÐ%‹E‰A‹Eè‰A ‹Eì‰A‹E‰A»‹€Ð%}è‹uè됋…Òt‰ð;B  -;B u‹G;B~‰Óëâ‰ö…Ût‰ ë‰ -€Ð%‰‹AƒÄ [^_]ÐU‰å‹E¹‹€Ð%됉ы…Òt;Buó¸ÿÿÿÿ…Òt$…Éu
-‹£€Ð%됋‰¡ŒÐ%‰‰ŒÐ%¸]ÃU‰åWVSƒì,‹E‹U ‰Eè‰Uì¸ÿÿÿÿƒ=ŒÐ%„q‹5ŒÐ%‹£ŒÐ%‹E‰F‹Eè‰F ‹Eì‰F‹E‰Fº‹€Ð%}è‹Mè됋…Ût‰È;C  -;C u‹G;C~‰Úëâ‰ö…Òt‰2鐉5€Ð%ƒ=$Ú%…ôƒìEàPjè3óÿÿ‹€Ð%ƒÄ‹Eà;B  -;B u‹Eä;B~ÇEÜÇEØëK}؋€Ð%Mà‹B;A|‹B +Eà‰E؉Ћ@+Aë ¡€Ð%‹@ +EàH‰EØ¡€Ð%‹@+Eäʚ;‰G‹E؍€€€€€€Áà‰EԋMÜ¿ÓMb‰È÷ïÁúÁù)ÊUԍҍB‰ÂÁâ)‰Ð÷çÁê¸ðúðw¸ÈúÇv‰Ðº@îfÁèFeô[^_]ÃU‰åWVSƒì¶„Ð%ƒøtƒø…Àt
-ë,ƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹Ð%f)Ú·Ò‰Ö5 Ð%¹×®¬]‰È÷î‰ÑÁù‰ðÁø)Á -¤Ð%‰AÁà)ȍÁ‰ÁÁá ȉò)‰ Ð%f‰Ð%]荒’’ Õ¾m¶‰ð÷á‰Ö‰Ê)òÑê2‰ÁÁé
-¡¤Ð%ÀP‰ÐÁà)кè‰Ö™÷þ’’’щS¡¤Ð%ÀP‰ÑÁá)ѺÓMb‰È÷êÁú‰ÈÁø)‰Uè‹s¿ƒÞC‰ð÷ï‰ÑÁù‰ðÁø)Á‰ÈEè‰ðÁú‰ñÁù)ʍ’’’’’’Áâ)Ѝ€€€Áà‰Cƒ=€Ð%„/Ç$Ú%‹€Ð%‹Eè;B ;B …Œ‹C;BŽ€ƒ=¨u#uƒ=„u#tÿ„u#ÿ¨u#‹€Ð%ë#‹¡ŒÐ%‰‰ŒÐ%‰€Ð%ƒì ÿrÿRƒÄ‰Ú…Òt‹B ;Eè -;EèűB;Eì~ă=¨u#uƒ=ˆu#tÿˆu#ÿ -¨u#¶„Ð%ƒøt"ƒø …Àt -ë/vƒøtë%¹@°ë#v¹A°ëv¹B°ë v»ë"ºCÐî‰Êì¶ØìˆÁ‰ÊÁâf¶Ã‰Ó Ãf‹Ð%f)Ú·Ò‰Ö5 Ð%¹×®¬]‰È÷î‰ÑÁù‰ðÁø)Á -¤Ð%‰AÁà)ȍÁ‰ÁÁá ȉò)‰ Ð%f‰Ð%]荒’’ Õ¾m¶‰ð÷á‰Ö‰Ê)òÑê2‰ÁÁé
-¡¤Ð%ÀP‰ÐÁà)кè‰Ö™÷þ’’’щS¡¤Ð%ÀP‰ÑÁá)ѺÓMb‰È÷êÁú‰ÈÁø)‰Uè‹s¿ƒÞC‰ð÷ï‰ÑÁù‰ðÁø)Á‰ÈEè‰ðÁú‰ñÁù)ʍ’’’’’’Áâ)Ѝ€€€Áà‰C‹€Ð%‹Mè;J 
-;J u;B~ÇEäÇEàëJ]à‹€Ð%Mè‹B;A|‹B +Eè‰Eà‰Ð‹@+Aë ¡€Ð%‹@ +EèH‰EࡀÐ%‹@+Eìʚ;‰C‹Eà€€€€€€‰ÆÁæ‹Mä»ÓMb‰È÷ëÁúÁù)ʍ2ҍB‰ÂÁâ)‰Ð÷ãÁê¸ðúðw¸ÈúÇv‰Ðº@îfÁèîÇ$Ú%ë -‰öº@°î°ðîeô[^_]ÐU‰åVSƒì‹E»¹‹€Ð%ëv‰Ñ‹…Òt;Buó¸ÿÿÿÿ…Ò„I…Éu‹£€Ð%»ë‹‰¡ŒÐ%‰‰ŒÐ%ƒ=$Ú%…ƒ=€Ð%uº@°î°ðéû‰ö…Û„òƒìEðPjèºìÿÿ‹€Ð%ƒÄ‹Eð;B  -;B u‹Eô;B~ÇEìÇEèëJ]è‹€Ð%Mð‹B;A|‹B +Eð‰Eè‰Ð‹@+Aë ¡€Ð%‹@ +EðH‰E血Ð%‹@+Eôʚ;‰C‹E荀€€€€€‰ÆÁæ‹Mì»ÓMb‰È÷ëÁúÁù)ʍ2ҍB‰ÂÁâ)‰Ð÷ãÁê¸ðúðw¸ÈúÇv‰Ðº@îfÁèeø[^]Éöú‹D$¼ˆó#PèŒëÿÿ`fff f¨f¸0ŽØŽÀ° º u#@£u#1ÛfŒÓü¡”Ð%ƒøtèùòÿÿëè6ùÿÿ°
-º îì¨t ¸@Pè–ÿÿÿf¡˜u#f9žu#t f£žu#ÿ-šu#ƒ=”u#t‹”u#ÿÓf©f¡ffaωöU‰å‹EØf£žu#f£˜u#]Ã1ÀÈÃU‰åf¸0ŽØŽÀ‹Ef;žu#t f£žu#ÿ-šu#]ÉöU‰åƒìjjjj@èaƒÄÉÃU‰åWVSƒì ‹]‹u ‹}聉€:y"…Ût‹B8‰…öt‹BÁà
-‰…ÿt)‹B4‰ë"‰ö…ÛtÇ…öt‹BÁà
-‰…ÿtÇ@ƒ}t ‹BÁà
-‹U‰ƒÄ [^_]ÍvU‰åƒìjjjj@è̓Ä·@0ÉÃU‰å¡Xs#]ÉöU‰å]ÍvU‰åSƒì‹Xs#誃ì SèÅMÿÿè ƒÄ‹]üÉÃU‰åWVS‹M ‹u‹}Š]‰ÈÁàeèÿÿ Eè‰ÈÁèUèˆBáÿbÿÿÿ J‰ðˆB‹Ef‰Eè‹EÁè‰EäŠEäƒà ÃË@¶ÃÁàbÿÿÿ Bçüÿ=Js#‹‰‹B‰G[^_]ÐU‰åWVSƒì ‹] ‹u‹}·EMèJs#‹‰‹@‰A‰Ê¶JÁá¶B ÁÁá·B Á…ÛtŠBƒà¶ÐÁâ·Eè Љ…ötŠE툅ÿt
-ŠEî%ðˆ‰ÈƒÄ [^_]ÉöU‰å‹E ¶UÁâ¹`v#fÇD
-8Ƃev#îƂdv#f‰
-Áèf‰D
-]ÍvU‰åº °îº!°@î°î°î°ÿ°°pî°î°î°ÿî]ÐU‰åº °îº!°î°î°î°ÿ°°pî°î°î°ÿî]ÐU‰å‹Mf…ÉtWfƒùw¸Óà
-¤u#ë7fƒùw<·Éƒé¸Óà
-¥u#¢¥u#º¡î<ÿu ¤u#©uƒÈ¢¤u#º!î]ÃU‰å‹Mf…ÉtUfƒùw¸þÿÿÿÓÀ"¤u#ë5fƒùw:·Éƒé¸þÿÿÿÓÀ"¥u#¢¥u#º¡î ¤u#©t%û¢¤u#º!î]ÉöU‰å¿˜u#]ÃU‰åƒì‹Ef£˜u#˜PèWüÿÿƒÄÉÐU‰å¿˜u#]ÃU‰åƒì‹E‰Âf£˜u#ƒ=¨u#uƒì ¿ÂPèüÿÿƒÄÉÐU‰åWVì¾¹°u#ºðu#‰öµÇèô"Çèô"Fƒþ~åƒì EÈPèÅèºÇ€`&!Q#‹EÈ£„`&¶¬u#£ˆ`&ƒÄ‹EУ`&‹EÔ£”`&‹EØ£˜`&h‘ö"jè£ýÿÿƒÄh›ö"jè”ýÿÿƒÄh¥ö"jè…ýÿÿƒÄh¬ö"jèvýÿÿƒÄh³ö"jègýÿÿƒÄhºö"jèXýÿÿƒÄhÁö"jèIýÿÿƒÄh÷"jè:ýÿÿƒÄhÈö"jè+ýÿÿƒÄhÏö"j èýÿÿƒÄhÖö"j
-è -ýÿÿƒÄhÝö"j èþüÿÿƒÄhäö"j èïüÿÿƒÄhëö"j -èàüÿÿƒÄhòö"jèÑüÿÿƒÄhùö"jèÂüÿÿƒÄh÷"jè³üÿÿƒÄhÀõ"jAè¤üÿÿƒÄhÈõ"jBè•üÿÿƒÄhÐõ"jCè†üÿÿƒÄhØõ"jDèwüÿÿƒÄhàõ"jEèhüÿÿƒÄhèõ"jFèYüÿÿƒÄhðõ"jGèJüÿÿƒÄhøõ"jpè;üÿÿƒÄhö"jqè,üÿÿƒÄhö"jrèüÿÿƒÄhö"jsèüÿÿƒÄhö"jtèÿûÿÿƒÄh ö"juèðûÿÿƒÄh(ö"jvèáûÿÿƒÄh0ö"jwèÒûÿÿf -ô_&€¾ƒÄvÀÅàÛ%ƒì jh‰hØPõ·ÀPèúÿÿƒÄ Fþš~ǃì hÐèFùÿÿƒÄÛãݵTÿÿÿ›¿`&µTÿÿÿ¹üó¥ ÀƒÈ""ÀÛãèƒûÿÿèúÿÿeø^_]ÍvU‰åSƒìº!°ÿîè’ûÿÿ¹@ºC°6Êîîƒ=„`&~¹AºC°tî°‰Êî°ë»B¹C°°‰ÊÚîîºaî‹]üÉÃU‰å‹U‹E ‰•ðu#]ÉöU‰å‹U‹E ‰•°u#]ÉöU‰åƒìhQ#è
-è— ƒÄÉÉöœX‰Á5PœX9ÈtQ¸Ã¸ÜX‰Á5 PœX1ÈtQ¸øÃf1Àžf¸f»öóŸ€üu¸øÃƬu#Ûã¹âþfÇ®u#ZZÝ=®u#¹âþf¡®u#<u+Ù=®u#¹âþf¡®u#f%?fƒø?uƬu#Ƭu#Éö`¸ëp`¸ëh`¸ë``¸ëX`¸ëP`¸ëH`¸ë@`¸ë8`¸ ë0`¸
-ë(`¸ ë `¸ ë`¸ -ë`¸ë`¸ë ¨Pf¸0ŽÀŽØüX1ÛfŒÓP‹…°u#ÿÓ[° ƒûrº îº îf¡˜u#f;žu#t f£žu#ÿ-šu#©¡aϸ鋸選ëz¸ës¸ël¸ëe¸ë^¸ëW¸ ëP¸
-ëI¸ ëB¸ ë;¸ -ë4¸ë-¸ë&¸ë` ¨f¸0ŽÀŽØüèש¡aÏPf¸0ŽØŽÀXfŒÓ‹=Js#ß1ۊŠ_Áãf‹_ÜfŒÒfŒÛŽÓSRPÿ…ðu#ƒÄX[ŽÐ)ÜÏU‰åWVSƒì ‹u¸¹ ‰÷üó«è|ýÿÿ…ÀtÇëUèŠýÿÿ…Àt7ÇFǸ¢‰^‰N‰V …Àt+¸¢‰F‰^‰N‰V ëÇècýÿÿ…ÀtÇ ƒÄ [^_]ÍvU‰åWV¿0v#È·À-yƒÀÁø9ÂtU¿0v#@ÀÝ4ÅLÜ%›È·À-yƒÀÁøf£0v#¿50v#¿À`&4v4ö4õLÜ%¹üó¥Ý%À`&^_]ÉöU‰å¿0v#]ÃU‰åWVSƒì(ŠM¡4v#Áà ˜€ f¶.a&f£Šó#f¶-a&f£Œó#€ù t%€ù €ù„óé‰ö€ù
-„#é‰öfƒŠó#·Šó#;0a&Œ½fÇŠó#·Œó#¡4a&H9Â…¿¡0a&H‰Eì‰Uèf¾,a&Áâf‰Uò¡4v#Áà °€ ¿;}è:¹;Mì*_ÿv‰ø¯0a&È·F‰Ø¯0a&Èf‰FA;Mì~ÜG;}è~ƹ;MìKWÿ‰Ð¯0a&Èf‹]òf‰FA;Mì~çé)‰öfLjó#·Šó#‰Áƒø~ºƒÂ·ÂƒÀ9È|óf‰ˆó#f¡ˆó#f£Šó#éævfÇŠó#·Œó#¡4a&H9Â…¾¡0a&H‰Eà‰UÜf¾,a&Áâf‰Uæ¡4v#Áà °€ ¿;}Ü=v¹;Mà*_ÿv‰ø¯0a&È·F‰Ø¯0a&Èf‰FA;Mà~ÜG;}Ü~ƹ;MàGWÿ‰Ð¯0a&Èf‹]æf‰FA;Mà~çé%‰öfÿ -Šó#·Šó#·Œó#¯0a&ÂÆS fÿŠó#éõ‰ö·Šó#·Œó#¯0a&Ј CfÿŠó#·Šó#;0a&Ž¿fÇŠó#·Œó#¡4a&H9Â…š¡0a&H‰EԉUÐf¾,a&Áâf‰UÚ¡4v#Áà °€ ¿;}Ð=v¹;MÔ*_ÿv‰ø¯0a&È·F‰Ø¯0a&Èf‰FA;MÔ~ÜG;}Ð~ƹ;MÔ'Wÿ‰Ð¯0a&Èf‹]Úf‰FA;MÔ~çëfÿŒó#·5Šó#·=Œó#‰øf¯0a&f‰EΡ4v#Áà fEÎfuλÔ°‰Úî¹Õ‰ÊŠEÎî°‰Úîf‹EÎfÁè‰Êî‰óˆ.a&‰ø¢-a&ƒÄ([^_]ÐU‰åWVSƒì‹u‹} ‰øf¯0a&f‰Eò¡4v#Áà fEòfuò»Ô°‰Úî¹Õ‰ÊŠEòî°‰Úîf‹EòfÁè‰Êî‰ð¢.a&‰úˆ-a&ƒÄ[^_]ÍvU‰åS¹Ô°
-‰Êî»Õ‰ÚŠEî° ‰Êî‰ÚŠE î‹$ÉÍvU‰åWVSƒìf¾EÁàf‰Eò¡4v#Áà ¸€ ‹]ë0‹M ;M(sÿ‰Ø¯0a&È·G‰ð¯0a&Èf‰GA;M~ÜC;]~ʋM ;MSÿv‰Ð¯0a&Èf‹]òf‰GA;M~çƒÄ[^_]ÍvU‰åWVSƒì ¡0a&H‰Eð‹4a&K‰]ìf¾,a&Áàf‰Eê¡4v#Áà °€ ¿9ß<‰ö¹;Mð*_ÿv‰ø¯0a&È·F‰Ø¯0a&Èf‰FA;Mð~ÜG;}ì~ƹ;MðWÿ‰Ð¯0a&Èf‹]êf‰FA;Mð~çƒÄ [^_]ÍvU‰å·J‰0a&¶„@£4a&¶„ÿ ¢,a&¶P¢.a&¶Q¢-a&¶`¢ó#¶a¢Žó#Ç8v#Ç4v#]ÃU‰åWVSƒì .a&¢P -a&¢Q¶ÀP¶.a&PèŠýÿÿ¶Žó#¶5ó#ƒÄ¹Ô°
-‰Êî¿Õ‰úˆØî° ‰Êî‰ú‰ðîeô[^_]ÍvU‰åSƒì‹]€;tŠCƒì ¾ÀPèiùÿÿƒÄ€;ué‹]üÉÃU‰åVS‹E‰ÃÁã £8v#¹Ô° -‰Êî¾Õ‰òˆØî° ‰Êî‰ØfÁè‰òî[^]ÃU‰åVS‹u‹4v#Áâ» ó#¶.a&‰¹Àó#¶-a&‰
-µŠ¢.a&Š
-¢-a&‰54v#[^]ÃU‰å¡8v#]ÉöU‰å¡4v#]ÉöU‰åWVSƒì ‹}f¾u Áæf¾E Ƌ]‹E9Ã3v‹M9ù#‰Ê¯0a&¡4v#Áà ÐØf‰´€ A9ù~ÞC;]~ЃìÿuÿuèüÿÿŠE¢-a&ŠE¢.a&ƒÄeô[^_]ÍvU‰åWVSƒì ¡0a&H‰Eð‹=4a&Of¾,a&ÁãƒË ¾9Æ4¹9ù%v‰Ê¯0a&¡4v#Áà Ððf‰œ€ A9ù~ÞF;uð~̃ìjjèûÿÿÆ-a&Æ.a&ƒÄeô[^_]ÍvU‰åS‹U ‹]‹M¯0a&¡4v#Áà ÂU”€ ˆ
-ˆZ‹$ÉÉöU‰åS‹E ‹]‹M‰Â¯0a&¡4v#Áà ÂU”€ ¶B…Étˆ¶‰Â…Ûtˆ¾Â‹$ÉÐU‰åS‹E ‹MŠ]‰Â¯0a&¡4v#Áà ÂU”€ €9tŠˆABˆB€9uò‹$ÉÐU‰åƒìh<Q#èTýÿÿôƒÄÉÉöU‰åƒìjèƒÄÉÉöU‰åƒìh4èƒÄÉÍvU‰åVS‹Ef£r¹d»þ¾v‰Êì©t Fþÿÿ~í¸@=Ÿ†~ø‰ÚˆÈö@=Ÿ†~øë‰öU‰åSƒìE Pÿuhàó#èX‰ÃÇ$àó#è¢üÿÿ‰ØƒÄ‹]üÉÃU‰åWVSìð‹} ŠEˆ…ÿÿÿEPÿuÿÿÿSè‰ÆS¾…ÿÿÿPWÿuè±þÿÿ‰ðƒÄ eô[^_]ÃU‰åSƒìE Pÿuhàõ#謉ÃÇ$àõ#è&üÿÿ‰ØƒÄ‹]üÉÃU‰åS‹M‹U ‰Ë€:tvŠˆBA€:uõƉ؋$ÉÍvU‰åVS‹]‹U ‹M‰Þë‰öŠˆBC€:t‰ÈI…ÀîƉð[^]ÐU‰å‹U‹M ë -¸€:tBAŠ:t)Ð]ÃU‰åS‹U‹] ‹M…Éëv¶¶Sÿ)Ð됊C8uíŠB„ÀtIu︋$ÉÐU‰å‹U¸€:tB@€:uù]ÍvU‰åS‹E‹] €8t‰Ú€:tŠv:
-tB€:uö@€8u下$ÉÉöU‰å‹E‹U €8t ‰ö8t @€8uö¸]ÍvU‰åS‹]‰Ú€;t‰öŠ
-AŸ<wAàˆB€:uì‰Ø‹$ÉÐU‰åS‹]‰Ú€;t‰öŠ
-A¿<wA ˆB€:uì‰Ø‹$ÉÐU‰åS‹U‹M ‰Ó€;tvB€:uú늈AB€9uõƉ؋$ÉÍvU‰åWVSƒì<‹u‹]ÇEèÇEäÇEàÇEÜÇEØÇEÔÇEпÇEÌÙîÝ]À‰uì‹E €8„D‹U €:%t…ÿuŠˆB‰U FÿEèév‹E €8%u%@‰E ¿ÇEä
-ÇEàÇEØÇE̋U ¾ƒè%ƒøS‡Ñÿ$…>#‰öÆ%FÿEè鼃ÉòFŠCüˆÿEè驐ƒ}Øt"ƒ}؃}Øtëƒ}ØuƒÃ‹Cü‰EÔë -vƒÃ¿Sü‰Uԃì ÿuÌÿuäj
-VÿuÔè¾ éœƒ}Øt"ƒ}؃}Øtëƒ}ØuƒÃ‹Cü‰EÐë -vƒÃ·Sü‰UЃì ÿuÌÿuäj
-VÿuÐè.éPƒ}Øt"ƒ}؃}Øtëƒ}ØuƒÃ‹Cü‰EÐë -vƒÃ·Sü‰UЃì ÿuÌÿuäjVÿuÐèâ鐃ËCü‰EЃì jÿuäjVPèÂé䐃ËSü€:tŠˆBFÿE܀:uò‹UÜUèévƒ}Øtƒ}؃}Øtëƒ}Øu ƒÃÝCøÝ]ÀƒìÿuÌÿuàÿuäVÿuÄÿuÀèYë~vƒ}Øtƒ}؃}Øtëƒ}Øu ƒÃÝCøÝ]ÀƒìÿuÌÿuàÿuäVÿuÄÿuÀè} -ë>vƒ}Øtƒ}؃}Øtëƒ}Øu ƒÃÝCøÝ]ÀƒìÿuÌÿuàÿuäVÿuÄÿuÀèa‰EÜEèÆ¿ƒÄ é±ÇEØé¥ÇEØ陃MÌ鐍vƒMÌ鄍v¿ƒMÌëvƒÿu?ƒìEìPj
-ÿu èb
-‰EäƒÄ‹E €80u ÷EÌtƒMÌ됃MÌ‹UìJ‰U ë4vƒÿu,ƒìEìPj
-ÿu è
-‰Eà‹EìH‰E ¿ƒÄë‰ö¿ÿE ‹U €:…¼üÿÿÆ‹Eèeô[^_]ÉöU‰åƒì EPÿu ÿuè7üÿÿƒÄÉÉöU‰åWVSƒì,‹u‹} ‹]ÇEìÇEèÇEäÇEàÇEÜÇEØÇEÔÇEЉuð€?„>€?%tƒ}Ôu ŠˆGFÿEìëá€?%uGÇEÔÇEè
-ÇEàÇEоƒè%ƒøS‡çÿ$…P?#Æ%FÿEìéԃÉòFŠCüˆÿEìéÁƒ}àt&ƒ}àƒ}àt
-ë"ƒ}àt
-ëƒÃ‹CüëƒÃ‹CüëƒÃ¿Cü‰E܃ì ÿuÐÿuèj
-VÿuÜè鏐ƒ}àt&ƒ}àƒ}àt
-ë"ƒ}àt
-ëƒÃ‹CüëƒÃ‹CüëƒÃ·Cü‰E؃ì ÿuÐÿuèj
-ëBƒ}àt&ƒ}àƒ}àt
-ë"ƒ}àt
-ëƒÃ‹CüëƒÃ‹CüëƒÃ·Cü‰E؃ì ÿuÐÿuèjVÿuØè6‰EäEìÆÇEÔƒÄ éҍvƒÃ‹Sü€:tŠˆBFÿEä€:uò‹EäEì飍vÇEàé›ÇEà鏃MÐ醍vƒMÐë}‰öÇEÔƒMÐënvƒ}Ôu6ƒìEðPj
-W蓉EèƒÄ€?0u ÷EÐtƒMÐ됃MЋ}ðOë1‰öƒ}Ôu)ƒìEðPj
-WèW‹}ðOÇEÔƒÄë
-vÇEÔGé¼ýÿÿvÆ‹Eìeô[^_]ÉöU‰åƒì EPÿu ÿuèGýÿÿƒÄÉÉöU‰åWVSƒì,‹}‹uÇEèÇEäÇEàÇEÜÇEØ»‰}ì饐‹U €:%t…Ûu B‰U 鏍v‹E €8%u%@‰E »ÇEäÇEàÇEÜÇE؋U ¾ƒè*ƒøN‡Eÿ$… @#‰öƒû…8ƒìEìPj
-ÿu èN‰E܃MØ‹EìH‰E ƒÄéŠGƒÆ‹^üˆëÝØÿEèéõƒÆ‹^üëG€?tƒì ¾PèBƒÄ…ÀuçÇEÔë#‰ö÷EØuŠˆCë‹UÜ9UÔ}ŠˆCÿEÔG€?tƒì ¾PèþƒÄ…ÀtÇÆ덉öƒìhHQ#Wè&÷ÿÿ‰ÇƒÄ EìPj
-WèՉ‹}ìƒÄƒ}à…Wƒ}ät)ƒ}ä ƒ}ätéCÿÿÿƒ}ä…9ÿÿÿƒÆ‹Fü‰é,ÿÿÿƒÆ‹Füf‰éÿÿÿ‰öƒìhUQ#Wè¶öÿÿ‰ÇƒÄ EìPj
-됃ìh`Q#Wèšöÿÿ‰ÇƒÄ EìPjWè ‹}ìƒÄƒ}à…̓}ät+ƒ}ä -ƒ}äté¹þÿÿ‰öƒ}ä…­þÿÿƒÆ‹Vü‰é þÿÿƒÆ‹Vüf‰é‘þÿÿ‰öƒìhxQ#Wè*öÿÿ‰ÇƒÄEìPWè;‹}ìƒÄƒ}àu`ƒ}ät)ƒ}ä ƒ}ätéMþÿÿƒ}ä…CþÿÿƒÆ‹FüÝé8þÿÿƒÆ‹FüÙé*þÿÿvÇEäë vÇEäëvÇEàëÝؐ»ÿE ‹E €8…Pýÿÿ‹Eèeô[^_]ÐU‰åƒì EPÿu ÿuèïüÿÿƒÄÉÉöU‰åWVSƒì,‹u ÇEп‹Eƒð‰EԋU‰U̅Òy‰Ñ÷ىM̃}y ‹E…Ày÷Ø됋E÷EÔu ƒ}yƒ}yGƒ}u‹EÐÆD(Ø0@‰EÐë8v…Àt1U؉Uȉöƒì º÷ủÃRèI‹MȋUЈ
-B‰UЉ؃Ä…Àu×}ЋEԃàƒøu‰ú;}} -‰öÆ FGB;U|õƒ}y ƒ}yÆ-ë ÷EÔtÆ+F‹Eԃàƒøu‰ú;}} Æ0FGB;U|õ‹UÐJx M؊
-ˆFJy÷‹Eԃàƒøu‰ú;}} Æ FGB;U|õƉøeô[^_]ÃU‰åƒì‹Eÿuÿu÷ØPÿu ÿuèŸþÿÿƒÄ ÉÉöU‰å‹E…Ày÷Ø]ÉöU‰åSƒì‹]èÁîÿÿƒì SèñðþÿU‰åWVSƒì‹M‹} ÙîÙÀÙ軀9-u ¾ÿÿÿÿë
-‰ö¾ëA€90túŠƒè0< w(ÝàA#ëÙˍv¾ƒè0AÜËÙËPÚ$XŠƒè0< vâÝۀ9.u9AŠƒè0< w/ÝàA#ëÙÉÙʉö¾ƒè0AÜÊÙÊPÚ$ÙÉXØʊƒè0< vÝÝÚÙÉÞùÞÁVÚ $^€9et €9E…“A€9-u
-¾ÿÿÿÿAë‰ö€9+u ¾Aëv¾Šƒè0< weÝàA#¾ƒê0A·ÃÙÀPÚ $Ù}ð‹]ðÆEñ Ùmð‰]ðÛ]ìÙmð‹Eì·À‰$Û$‰$Ú$ZÙ}ð‹UðÆEñ Ùmð‰UðÛ]ìÙmð‹Eì‰ÃŠƒè0< v£Ý؅ö~!ºf…Ût4ÝàA#·Ã‰öÜÉB9Â|ùëvº·Ã‰Ã9Â}ÝàA#ÜùB9Ú|ùÝ؅ÿt‰ƒÄ[^_]ÐU‰åWVSƒì ‹]‹} ÇE쾀;-u ÇEðÿÿÿÿCë‰ö€;+u ÇEðCëÇEð€;0u>C€;0túë6ƒì ¾PCè‰ÂƒÄ9ú…Òy
-¸ëEv‰ð¯÷Ö9ð~ÇEìƒìW¾P聃ąÀu¶ƒ}t‹E‰ƒ}ìt¾ÿÿÿ¯uð‰ðeô[^_]ÉöU‰åWVSƒì ‹]‹} ÇEð¾€;0uC€;0tú€;xuKƒÿuFC€;0u@‰öC€;0túë6ƒì ¾PCè_‰ÂƒÄ9ú…Òy
-¸ëAv‰ð¯÷Ö9ðvÇEðƒìW¾PèуÄ…Àu¶ƒ}t‹E‰ƒ}ðt¾ÿÿÿ‰ðeô[^_]ÉöU‰åŠUBÐ< w ¾Âƒè0ë&vB¿<w ¾Âƒè7됍BŸ<w ¾ÂƒèW됾Â]ÍvU‰å‹Uƒú w B0¾À됍BöƒøwB7¾Àë¾Â]ÍvU‰åŠUƒê0¸€ú –À]ÉöU‰åŠUBÐ<vBŸ<w¸ë¸]ÐU‰åŠU€ú/~‹E <v#:Pÿ¸ë¸]ÐU‰åŠUBŸ<w Bà¾Àëv¾Â]ÍvU‰åŠUB¿<w B ¾Àëv¾Â]ÍvU‰åVS¾ƒì ¾]Sè%ƒÄ…Àuƒì Sè5ÿÿÿƒÄ…Àt¾‰ðeø[^]ÃU‰åŠUƒêA¸€ú9–À]ÉöU‰å¸€}/žÀ]ÍvU‰åŠUƒêa¸€ú–À]ÉöU‰åŠUB÷<v
-¸€ú u¸]ÉöU‰åŠUƒêA¸€ú–À]ÉöU‰åWVSƒì ÝEÝUè‹]‹}ÇEäSd$øÝ$èoƒÄ…Àtƒì Sè·îÿÿƒÄéPvÙîÝEèÚéßà€äE€üu Æ-C€uï€ë÷EtÆ+CÿEäÝèA#ÝEèÚéßà€äE€üuÆ0ÆC¸éû‰öÙèÝEèÝáßà€äE€üu3¾Ýéßà€äE€üuHݘQ#ÝEèØÉÝUèNÝêßà€äE€ütëÝØë)vÝØÝؾݘQ#ÝEèë ÝEèØñÝUèFÝéßàöÄtîÝ؃ì Vè÷ùÿÿƒÄƒøc~ƒïë‰öƒø ~ƒïë‰ö…ö~Oƒì‹EƒÈPÿuWSÿuìÿuèèUEäƒÄ …öu‹Eäë;‰ö]äÆeCƒì jºgfff‰ð÷êÁú‰ðÁø)ƒÂRj
-SVè\ùÿÿ‹UäD‰EäƒÄ eô[^_]ÍvU‰åWVSìŒÝEݝþÿÿ‹]Dž€þÿÿ½¸þÿÿ¹K¸üó«ƒìSÿµ”þÿÿÿµþÿÿ貃ąÀtƒì SèúìÿÿƒÄé‰öÙî݅þÿÿÚéßà€äE€üuÆ-C€µ—þÿÿ€ëv÷Et
-Æ+Cÿ…€þÿÿƒì…˜þÿÿPÿµ”þÿÿÿµþÿÿèþݝpþÿÿ‹…pþÿÿ‹•tþÿÿ‰Æ‰×DžŒþÿÿƒÄ݅˜þÿÿÙèÙÉÝáßàöÄ…ø重vh$@jÿµœþÿÿÿµ˜þÿÿè$݅˜þÿÿÜ5ðA#ݝ˜þÿÿÙ½´þÿÿ‹´þÿÿƅµþÿÿ Ù­´þÿÿ‰´þÿÿß½¨þÿÿÙ­´þÿÿ‹…¨þÿÿ‰$èûÿÿ‹•Œþÿÿˆ„*¸þÿÿB‰•ŒþÿÿƒÄ݅˜þÿÿÙèÙÉÚéßàöÄ„oÿÿÿ‹•Œþÿÿ•€þÿÿ‰ÑI…¸þÿÿ‰…|þÿÿë‰ö‹•|þÿÿŠˆCI‹•Œþÿÿƒê‰ÐÁèH!Â9Ñ}ޅÉx‹Œþÿÿƒéx
-vÆ0CIyùÆëÝØÝØÆ0Cÿ…€þÿÿÝ Q#‰µpþÿÿ‰½tþÿÿ݅pþÿÿÚéßàöÄE…\‹E@9…€þÿÿLÆ.Cÿ…€þÿÿ‹Eƒà‰…ˆþÿÿDž„þÿÿDžŒþÿÿv‰µpþÿÿ‰½tþÿÿ݅pþÿÿܨQ#Ü -ðA#ݝpþÿÿ‹µpþÿÿ‹½tþÿÿƒì…˜þÿÿPWVèݝpþÿÿ‹•pþÿÿ‹tþÿÿ‰Ö‰Ï݅˜þÿÿÙ½´þÿÿ‹´þÿÿƅµþÿÿ Ù­´þÿÿ‰´þÿÿ۝¤þÿÿÙ­´þÿÿ‹…¤þÿÿƒÄ…Àtƒ½ˆþÿÿu
-Džˆþÿÿƒì PèÓùÿÿˆCÿ…€þÿÿÿ…ŒþÿÿƒÄƒ½ˆþÿÿt‹E9…Œþÿÿ~
-Dž„þÿÿ‹•€þÿÿ9U}
-Dž„þÿÿƒ½„þÿÿ„ýþÿÿKë
-‰öÿ€þÿÿ‰Ã€;0u Cÿ€{ÿ.uêCÆ‹…€þÿÿeô[^_]ÃU‰åWVSƒì‹]‹u ‹}WVSèZƒÄ…Àtƒì Wè¢éÿÿƒÄéñ‰öÙî‰]è‰uìÝEèÝáßàÝـäE€üuÙàëvÝ؉]è‰uìÝEèÝøA#ÙÉÝáßàÝـäE€üuÝØÆ0ÆG¸雺ÙèÙÉÝáßà€äE€üu/Ýáßà€äE€üu?ݘQ#ëÙɐÜÉÙÉJÝâßà€äE€ütìÝØëvÝÙݘQ#ë‰öØñÙÉBÙÉÝáßàöÄtðÝØÝ؍BƒøvƒìÿuÿuÿuWVSèÔùÿÿë‰öƒìÿuÿuÿuWVSèXûÿÿƒÄ eô[^_]ÐU‰åƒìSÙ}ü›f‹Eüf -? f‰EøÙmø›ÝEÙüÝ]ð›‹Uð‹Mô‹]‰‰KÝEÜeðeì›ÛâÙmü›[ÉÍvU‰åƒì‹E‹U ‰Eø‰Uü‹MUøf‹BfÁè%ÿ=ÿt¸ëk÷Bÿÿuƒ:t…Étƒìh°Q#QèDçÿÿƒÄ¸ë@‰ö€zy…Étƒìh´Q#Qè çÿÿƒÄ¸ë‰ö…Étƒìh¹Q#QèçÿÿƒÄ¸ÉÃU‰åƒì¸à÷#ƒ=Hv#tÿHv#ÉÃU‰å‹E£Hv#]ÍvU‰åƒì‹E‹U ‰Eø‰UüUø¹f‹BfÁè%ÿ=ÿu÷Bÿÿuƒ}øt¹‰ÈÉÉöU‰åSƒì‹E ‹]ÆPè‰âÿÿ‰ØƒÄ‹]üÉÍvU‰åVSƒì ÝEÝUð‹]‹uVSd$øÝ$èrÝ]èƒÄƒ=Lv#ÿtWƒìVSèYÿÿÿƒÄ…ÀuFƒìÿuôÿuðèDÿÿÿƒÄ…Àu1Ùî‰]à‰uäÝEàÚéßà€äE€ô@uƒì jVSÿuôÿuðè4ƒÄ ëvÝEèeø[^]ÉöÝD$ ÝD$Ùø›ßàžzøÝÙͶ¼'U‰åVSƒì0ÝE‹]‹u‹EÝUà‰]è‰uìPÿú‡Èÿ$•B#ÝØÇEغ¾Q#ƒøc~ºÃQ#‰UÜÇEðÇEôƒ=Lv#„}ƒì EØP誃ąÀ…uƒ=Lv#…YƒìjhÉQ#éëvÝØÇEغÝQ#ƒøc~ºâQ#‰UÜÇEðÇEôƒ=Lv#„ƒì EØPè>ƒÄ…À… ƒ=Lv#…íƒìjhèQ#év‰]à‰uäÝ]èÇEغüQ#ƒøc~ºR#‰UÜÇEðÇEôƒ=Lv#„žƒì EØPè˃ąÀ…–ƒ=Lv#…zƒìjh R#é ÝØÇEغR#ƒøc~º$R#‰U܃=Lv#uÇEðàÇEôÿÿïGé¸ -¡@v#‹Dv#‰Eð‰Uôé¡ -‰öÝØÇEغ²S#ƒøc~º¸S#‰U܃=Lv#uÇEðàÇEôÿÿïGéh -¡@v#‹Dv#‰Eð‰UôéQ -‰öÝØÇEغ+R#ƒøc~º/R#‰U܃=Lv#uÇEðàÇEôÿÿïGé -¡@v#‹Dv#‰Eð‰Uôé -‰öÝØÇEغ+R#ƒøc~º/R#‰UÜÇEðÇEôéÑ ‰öÝØÇEغ·L#ƒøc~º4R#‰U܃=Lv#uÇEðàÇEôÿÿïÇë¡@v#‹Dv#ò€‰Eð‰Uôƒ=Lv#„óƒì EØPè ƒÄ…À…ëƒ=Lv#…σìjh8R#éaÝØÇEغ·L#ƒøc~º4R#‰U܃=Lv#uÇEðàÇEôÿÿïÇë¡@v#‹Dv#ò€‰Eð‰Uôƒ=Lv#„gƒì EØP蔃ąÀ…_ƒ=Lv#…Cƒìjh8R#éÕ -ÝØÇEغxL#ƒøc~ºJR#‰U܃=Lv#uÇEðàÇEôÿÿïÇë¡@v#‹Dv#ò€‰Eð‰Uôƒ=Lv#„Û -ƒì EØPèƒÄ…À…Ó -ƒ=Lv#…· -ƒìjhNR#éI -ÝØÇEغxL#ƒøc~ºJR#‰U܃=Lv#uÇEðàÇEôÿÿïÇë¡@v#‹Dv#ò€‰Eð‰Uôƒ=Lv#„O -ƒì EØPè| -ƒÄ…À…G -ƒ=Lv#…+ -ƒìjhNR#é½ ÝØÇEغ`R#ƒøc~ºcR#‰U܃=Lv#uÇEðàÇEôÿÿïÇë¡@v#‹Dv#ò€‰Eð‰Uôƒ=Lv#„à ƒì EØPèð ƒÄ…À…» ƒ=Lv#…Ÿ ƒìjhgR#é1 ÝØÇEغ`R#ƒøc~ºcR#‰U܃=Lv#uÇEðàÇEôÿÿïÇë¡@v#‹Dv#ò€‰Eð‰Uôƒ=Lv#„7 ƒì EØPèd ƒÄ…À…/ ƒ=Lv#… ƒìjhgR#é¥ ÝØÇEغyR#ƒøc~º€R#‰U܃=Lv#uÇEðàÇEôÿÿïGéP ¡@v#‹Dv#‰Eð‰Uôé9 ‰öÝØÇEغyR#ƒøc~º€R#‰U܃=Lv#uÇEðàÇEôÿÿïGë¡@v#‹Dv#‰Eð‰Uôƒ=Lv#„a ƒì EØPèŽ ƒÄ…À…Y ƒ=Lv#…= ƒìjhˆR#éÏ
-vÝØÇEغœR#ƒøc~º R#‰U܃=Lv#uÇEðàÇEôÿÿïÇë¡@v#‹Dv#ò€‰Eð‰Uôƒ=Lv#„å ƒì EØPè ƒÄ…À…Ë
-ƒ=Lv#…¯
-ƒìjh¥R#éA
-ÝØÇEغœR#ƒøc~º R#‰U܃=Lv#uÇEðàÇEôÿÿïÇë¡@v#‹Dv#ò€‰Eð‰Uôƒ=Lv#„G
-ƒì EØPèt
-ƒÄ…À…?
-ƒ=Lv#…#
-ƒìjh¶R#éµ ÝØÇEغÉR#ƒøc~ºÏR#‰U܃=Lv#uÇEðàÇEôÿÿïÇë¡@v#‹Dv#ò€‰Eð‰Uôƒ=Lv#„Íƒì EØPèè ƒÄ…À…³ ƒ=Lv#…— ƒìjhÖR#é) ÝØÇEغÉR#ƒøc~ºÏR#‰U܃=Lv#uÇEðàÇEôÿÿïÇë¡@v#‹Dv#ò€‰Eð‰Uôƒ=Lv#„/ ƒì EØPè\ ƒÄ…À…' ƒ=Lv#… ƒìjhéR#靐ÝØÇEغþR#ƒøc~ºS#‰UÜÇEðÇEôƒ=Lv#… ƒì EØPèòƒÄ…À…½ƒìjhS#jèÞõÿÿèeõÿÿÇ!ƒÄ降vÇEغþR#ƒøc~ºS#‰U܃=Lv#uvÇEðàÇEôÿÿïG‰]ЉuÔÝEÐÜ -hT#Ý]Ћ]ЋuÔÙîÙÉÚéßà€äE€ü…¯ƒìVSèjƒÄ‰]ЉuÔÝEÐÙÉÚéßà€äE€ü@„‡ÇEðàÇEôÿÿïÇét¡@v#‹Dv#‰Eð‰Uô‰]ЉuÔÝEÐÜ -hT#Ý]Ћ]ЋuÔÙîÙÉÚéßà€äE€ü…6ƒìVSèñƒÄ‰]ЉuÔÝEÐÙÉÚéßà€äE€ü@„¡@v#‹Dv#ò€‰Eð‰UôéòvÝØÇEغþR#ƒøc~ºS#‰UÜÇEðÇEôéÁ‰öÝØÇEغþR#ƒøc~ºS#‰U܃=Lv#uÇEðÇEôë¡@v#‹Dv#ò€‰Eð‰Uôƒ=Lv#„ãƒì EØPèƒÄ…À…Ûƒ=Lv#…¿ƒìjhS#éQÝØÇEغþR#ƒøc~ºS#‰U܃=Lv#uÇEðÇEôëÇEðÇEôøƒ=Lv#„`ƒì EØP荃ąÀ…Xƒ=Lv#…<ƒìj h@T#éΉöÇEغ9S#ƒøc~º>S#‰U܃=Lv#u6ÙîÙÉÚéßàöÄEuÇEðàÇEôÿÿïGém‰öÇEðàÇEôÿÿïÇéX‹ -@v#‹Dv#‰Mð‰]ôÙîÙÉÚéßàöÄE„4‰È‰Úò€‰Eð‰UôéÝØÇEغDS#ƒøc~ºIS#‰U܃=Lv#uÇEðÇEôëÇEðÇEôøƒ=Lv#„Lƒì EØPèyƒÄ…À…Dƒ=Lv#…(ƒìjhOS#麉öÇEغcS#ƒøc~ºhS#‰U܃=Lv#uÝ]ðëÝØÇEðÇEôøƒ=Lv#„Òƒì EØPèÿƒÄ…À…ʃ=Lv#…®ƒìjhnS#é@ÝØÇEغƒS#ƒøc~ºS#‰UÜÇEðÇEôøƒ=Lv#„iƒì EØP薃ąÀ…aƒ=Lv#…Eƒìjh˜S#é׍vÝØÇEغ±S#ƒøc~º·S#‰UÜÇEðÇEôøƒ=Lv#„ýƒì EØPè*ƒÄ…À…õƒ=Lv#…Ùƒìjh¾S#ékvÝØÇEغÓS#ƒøc~ºÙS#‰UÜÇEðÇEôøƒ=Lv#„‘ƒì EØP较ąÀ…‰ƒ=Lv#…mƒìjhàS#éÿvÇEغÓS#ƒøc~ºÙS#‰UÜÜ5pT#Ý]ðƒ=Lv#„,ƒì EØPèYƒÄ…À…$ƒ=Lv#…ƒìjhõS#隉öÇEغT#ƒøc~ºT#‰U܋ -@v#‹Dv#‰Mð‰]ôÙîÙÉÚéßàöÄEtC‰È‰Úò€‰Eð‰Uôë1‰öÇEغT#ƒøc~ºT#‰U܍d$øÝ$jjè›Ý]ðƒÄƒ=Lv#…jé|vÝØÇEغT#ƒøcŽ•ºT#鋍vÝØÇEغ·L#ƒøc~uº4R#ën‰öÝØÇEغ+T#ƒøc~Yº.T#ëR‰öÝØÇEغxL#ƒøc~=ºJR#ë6‰öÝØÇEغ2T#ƒøc~!º5T#ë‰öÝØÇEغ`R#ƒøc~ºcR#‰UÜÇEðÇEôƒ=Lv#„¯ƒì EØPèʃąÀ…•ƒ=Lv#…‹ƒìjÿuÜjè«îÿÿƒÄ jhT#jèšîÿÿƒÄëfÝØÇEغzR#ƒøc~ºR#‰U܃=Lv#uÇEðàÇEôÿÿïGë¡@v#‹Dv#‰Eð‰Uôƒ=Lv#tƒì EØPè2ƒÄ…À…ýè¶íÿÿÇ"éívÝØÇEغzR#ƒøc~ºR#‰U܃=Lv#uÇEðàÇEôÿÿïGë¡@v#‹Dv#‰Eð‰Uôƒ=Lv#„‰ƒì EØP趃Ä…À…ƒ=Lv#uiƒìjh‰R#jè™íÿÿƒÄëSÇEغþR#ƒøc~ºS#‰UÜÝ]ðƒ=Lv#ÿt ƒ=Lv#uÇEðÇEôð?ë$‰öƒì EØPè@ƒÄ…ÀuèÈìÿÿÇ!ëÝØÝEðeø[^]ËT$â€‹D$%ÿÿÿ ЉD$ÝD$ÉöU‰å¸]ÉöÝD$ÙüÉö¼'U‰åWVSƒì ‹E ‰EðEƒEðƒeðøƒàø‰Eì‹Eð9EìsƒìjUhxT#h‚T#è˜ ƒÄ‹Eð9Eì„Ä‹E‹…Û„·‹C;C rƒìj`hxT#hT#è` ƒÄöCtƒìjahxT#hÀT#èC ƒÄöC tƒìjbhxT#hU#è& ƒÄ‹Eì;CvL‹Eð;C sD‰Æ‹}ì;ss‹s;{ v‹{ 9÷wƒìjnhxT#h¡T#èæ ƒÄƒì‰ø)ðPVÿu蚃ċ…Û…Iÿÿÿeô[^_]ÐU‰åWVSƒì ‹u ‹E‹}‰ÂUƒÀƒàøƒâø9†ŒÇF‰F‰V ‹E‰F‰~ÇF‹MëF‰ö9óuƒìjlh0U#h;U#èX ƒÄ‹F ;Cv‹F;C sƒìjmh0U#h`U#è1 ƒÄ‰Ù‹…Ût9{±9{u‹S +S‹F +F9Âwœ‰‰1eô[^_]ÃU‰åWVSƒì ‹]‹} …ÛuƒìjLhU#h•U#èÙ
-ƒÄ…ÿuƒìjMhU#hžU#è¾
-ƒÄƒÇƒçø‹3…ö„rvƒ~uƒ~t‹F;FsƒìjUhU#hàU#è€
-ƒÄƒ~t‹F;F rƒìjUhU#h@V#è[
-ƒÄ‹F +F9FvƒìjUhU#h€V#è9
-ƒÄ‹F÷ЅE…åF‰Eð‹^…Û„ԍv÷Ãtƒìj^hU#hÀV#èø ƒÄöCtƒìj_hU#hW#èÛ ƒÄƒ;t9wƒìj`hU#h@W#è» ƒÄ;^ rƒìjahU#h¶U#èŸ ƒÄ9{rGv‹‰‹C)ø‰B‹Eð‰ë
-v‹‹Uð‰9~sƒìjwhU#hÍU#è\ ƒÄ)~‰Øë‰ö‰]ð‹…Û…/ÿÿÿ‹6…ö…‘þÿÿ¸eô[^_]ÃU‰åƒì jÿjÿuÿuÿuÿu ÿuèƒÄ ÉÐU‰åWVSƒì‹]‹EE ‰Eð…ÛuƒìjThiW#h•U#èۃă} uƒìjUhiW#hžU#较ċ;…ÿ„lƒuƒt‹G;Gsƒìj[hiW#hàU#舃ăt‹G;G rƒìj[hiW#h@V#ècƒÄ‹G +G9Gvƒìj[hiW#h€V#èAƒÄ‹G÷ЅE…á‹Uð9WƒÕ‹M9O †ÉG‰Eì‹_…Û„¸v÷ÃtƒìjkhiW#hÀV#èèƒÄöCtƒìjlhiW#hW#è˃ă;t9wƒìjmhiW#h@W#諃Ä;_ rƒìjnhiW#h¶U#菃ċU 9S‚$‰Þ;]s‹u¹;M}ºÓâ‹E1ð…ÂtÖA;M|è‰ð)ØE ;C‡è‹M 1;Eð‡æ‰ðƒàø‰Eè9Øsƒìh‘hiW#htW#èƒÄ9]èvC‹Uè)ډUä÷Âtƒìh–hiW#h W#èãƒÄ‹‹M艋C+Eä‰A‹Eä‰C‰]ì‰ðƒà‹U Tƒâø‰U ‹Mè9Qv‰ÊU ‹‰‹A+E ‰B‹Eì‰ë
-‹Uè‹‹M쉋E 9Gsƒìh´hiW#hÍU#èkƒÄ‹U )W‰ðë‰ö‰]ì‹…Û…Kþÿÿ‹?…ÿ…•ýÿÿ¸eô[^_]ÃU‰åƒì jÿjjj ÿu hÿuèýÿÿƒÄ ÉÐU‰åWVSƒì‹]ShÒW#èeÌÿÿ‹3ƒÄ…ö„ƒìÿvÿvÿv‹F +FPÿv ÿvh`X#è5ÌÿÿƒÄ ƒ~uƒ~t‹F;FsƒìjahäW#hàU#袃ă~t‹F;F rƒìjahäW#h@V#è}ƒÄ‹F +F9FvƒìjahäW#h€V#è[ƒÄ¿‹^…Û„¾ƒì ÿ3ÿs‰ØCPSh X#è—ËÿÿƒÄ ÷ÃtƒìjihäW#hÀV#èƒÄöCtƒìjjhäW#hàX#èóƒÄƒ{wƒìjkhäW#hëW#èփă;t9wƒìjlhäW#h@W#趃Ä;^ rƒìjmhäW#h¶U#蚃Ä{‹…Û…BÿÿÿƒìWhX#èäÊÿÿƒÄ9~tƒìjshäW#hX#è`ƒÄ‹6…ö…cþÿÿƒì h2X#è®ÊÿÿƒÄeô[^_]ÍvU‰åWVSƒì ‹u‹] ‰ßƒçø…öuƒìjNh{T#h•U#è ƒÄ…ÛuƒìjOh{T#hY#èñƒÄƒ}uƒìjPh{T#hžU#èԃĉ؃à‹UTƒâø‰U‹ëv‹…ÛuƒìjXh{T#hY#螃ă{uƒ{t‹C;CsƒìjYh{T#hàU#èsƒÄƒ{t‹C;C rƒìjYh{T#h@V#èNƒÄ‹C +C9CvƒìjYh{T#h€V#è,ƒÄ;{‚hÿÿÿ;{ ƒ_ÿÿÿ‹EC‹C +C9Cvƒìjbh{T#h€V#èòƒÄÇEð‹sëv‰uð‹6…öt9þróƒ}ðtm‹Eð@9ørc9øtƒìjnh{T#h@Y#諃ąöt8‹U:9ðr.9ðtƒìjuh{T#h€Y#肃ċEF‹UðB‹‰ëE‹E‹UðBë9ƒ}ðt
-‹Eð‰8ëv‰{…öt‹U:9ðr‰ÐF‰G‹‰ë ‹E‰G‰7eô[^_]ÃU‰åƒì hÿu ÿuèÒýÿÿƒÄÉÐU‰å‹EÇ]ÉöU‰åWVSƒì ÇEèÇEìÇEð‹E‹0…ö„Zƒ~uƒ~t‹F;Fsƒìj]h¦Y#hàU#蠃ă~t‹F;F rƒìj]h¦Y#h@V#è{ƒÄ‹F +F9Fvƒìj]h¦Y#h€V#èYƒÄÿEð¿‹^…Û„¨v÷Ãtƒìjdh¦Y#hÀV#è$ƒÄöCtƒìjeh¦Y#hàX#èƒÄƒ{wƒìjfh¦Y#hëW#èêƒÄƒ;t9wƒìjgh¦Y#h@W#èʃÄ;^ rƒìjhh¦Y#h¶U#讃ÄÿEì{‹…Û…[ÿÿÿ9~tƒìjnh¦Y#hX#肃Ä‹FEè‹6…ö…§þÿÿƒì ÿuìÿuðÿuèÿuhÀY#è¾ÆÿÿƒÄ eô[^_]ÍvU‰åVS‹u‹] EƒìPÿuhø#è…ÈÿÿƒÄhø#ÿ5 $jSVh@Z#è5ƒÄ eø[^]ÍvU‰åƒìÿ5Œ$jÿuÿu ÿuhZ#èƒÄ ÉÉöU‰åƒì E Pÿuhü#èÈÿÿƒÄ jjh¸<#è<ÿÿƒÄhü#h£Z#èŠÅÿÿÇ$Mè–ÿÿƒÄÉÐU‰åƒìhü#h€Z#ècÅÿÿƒÄÉÉöU‰å·Eƒøt ƒø…Àtë-ƒøtƒøtë ¸ÁZ#됸ÆZ#됸ÊZ#됸ÐZ#됸‘K#]ÐU‰åWVSƒìœúX‰Â‰Uä÷Et$ƒìEèPjè8›ÿÿƒÄ ÿuìÿuèhàZ#èQÅÿÿƒÄ÷EtN¾;5$sA¿À$vƒì µ‹;¶BP·BPRVh [#è -ÅÿÿƒÄ‹;VÿP ƒÄF;5$rÇ÷Etƒì hûZ#èáÄÿÿè”ÿÿƒÄ‹Uä‰ÐPeô[^_]Éöh#0#0#0#0#0#œ#0#¨#´#0#À#À#À#À#À#À#À#À#À#À#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#t#ˆ#ô#´#4##ˆ#0#0#„#0##0#l#0#0#Œ#0#Ô#0#0# # #ô
-#ô
-#ô
-#ô
-#ô
-#l
-#ô
-#x
-#€
-#ô
-#
-#
-#
-#
-#
-#
-#
-#
-#
-#
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-#ô
-# #4 #ô
-#ô
-#ô
-#`
-#4 #ô
-#ô
-#T
-#ô
-#`
-#ô
-#ô
-#ô
-#ô
-#,
-#ô
-#„ #ô
-#ô
-#È ## # # # # #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #„ #€ -#€ -#€ -#ô -#„ # # #è -# #ô -# # # # # # #ô # # # -#$@$@d#Ð#<#¬#ü#L#œ#Ì#X #ä #p!#ü!#ˆ"###d##ì##x$#%#%#&#&#¬'#Ü'#h(#ì(#|)#*#x*#ä*#P+#¼+# ,#l,#°,#Ô,#ð,# -#(-#D-#Ä-#<.#Ä.#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#$/#d#Ð#<#¬#ü#L#œ#Ì#X #ä #p!#ü!#ˆ"###d##ì##x$#%#%#&#&#¬'#Ü'#h(#ì(#|)#*#x*#ä*#P+#¼+# ,#l,#°,#Ô,#ð,# -#(-#D-#Ä-#<.#Ä.#T1: started, sending a message
-T2: value = %d, receiving a message
-T2: received message: length=%ld, prio=%d, text=°%s°, notify...
-T2: mq_notify returns errno %d
-T2: 1 sec. reached, sending another message and creating T3 and T4,
-T3: received message: length=%ld, prio=%d, text=°%s°
-T3: 2 sec. reached, sending 5 messages
-T3: mq_send1 returns errno %d
-T3: mq_send2 returns errno %d
-T3: mq_send3 returns errno %d
-T3: mq_send4 returns errno %d
-T3: mq_send5 returns errno %d
-T4: AAAARRRRGGGHHH!!! killed by someone...
-T4: received message: length=%ld, prio=%d, text=°%s°
-Signal %d code=%s value=%d task=%d time=%ldusec
-main: mq_open returns errno %d
-main: mq_notify returns errno %d
-main: created mq, creating T1...
-main: waiting t= 3.5 sec., then kill T4...
-Donald DuckT1: mq_send returns errno %d
-T1: ending...
-T2: waiting t = 1 sec.
-Mickey MouseT2: mq_send returns errno %d
-T2: ending...
-T3: waiting a message...
-T3: waiting t = 1.5 sec.
-GoofyÛMinniePlutoRocker DuckOncle ScroodgeT3: ending...
-T4: waiting t = 2.2 sec.
-TimerOthermqmain: ending...
-Error during Keyboard Initialization!!!Ctrl-C pressed!
-KeybPortKeyTasktask_create
-scheduletime %lus %luns * caplasttime %lus %luns * exec=%d TIME = %lu
-The system tick must be less than 55 mSec!Abort detected
-Code : %u
-Too many scheduling levels!!!
-Too many resource levels!!!
-debug info noticewarn err crit alert emerg <%i>[%s] %sPosix task
-Signal number %d...
-with value : %d
-POSIX_ReadyPOSIX_DelayPOSIX_UnknownSlice: %d
-MainPOSIX_register_level
- alloco descrittore %d %d
- lev=%d
-POSIX schedulerPid: %d Name: %20s Prio: %3ld Status: %s
-
-Panic!!! can't create main task...
-dummy PID: %d
-Dummy1Dummy2Dummy3Dummy4Dummy5Dummy6Dummy7Dummy8Dummy9Dummy0DummyaDummybDummycDummydDummyeDummyfDummygDummyhDummyDummy (RR) Posto dummy_create
-
-Panic!!! can't create dummy task...
-Entro in dummy_register_level
-Port des :
-Free port des : %d
-%d %s vt: %d pn: %d
-%d pd: %d vt: %d pn: %d Resources owned by the tasks:
-%-4dPI_register_module
-PI module
-PC priority of the tasks:
-%-4ldPC_register_module
-PC moduleTR %x
-SS:SP %x:%lx
-Stack0 : %x:%lx
-Stack1 : %x:%lx
-Stack2 : %x:%lx
-CS : %x DS : %x
-Descriptor [%x] InfoNo more Descriptors...
-%x (Hex)Base : %lx Lim : %lx Acc : %x Gran %x
-2Coprocessor error#Page fault*General protection fault*Stack exception*Segment not present*Unvalid TSS#INTEL reserved*Double defect1FPU context switch*Unvalid opcode#BOUND limit exceeded#Overflow detected on INTO#Breakpoint trap#NMI detected#Debug fault#Division by 0Exception %d occurred
-ABORT %d !!!LL Time Panic!!!
-time.cError! File:%s Line:%d %sOne-shot timer selected...
-Periodic timer selected...
-Unhandled Exc or Int occured!!!
-32/LINUX CrossCompiled/ELFHalt called1234567890-+12345678901234567890xabcdefABCDEF1234567890.e+-0123456789ABCDEF$@ -Æ@,ú1°<NaN+Inf-Infacosacosfacos: DOMAIN error
-asinasinfasin: DOMAIN error
-atan2atan2fatan2: DOMAIN error
-hypothypotfexpexpfy0fy0: DOMAIN error
-y1fy1: DOMAIN error
-ynynfyn: DOMAIN error
-lgammalgammaflgamma: SING error
-loglogflog: SING error
-log: DOMAIN error
-log10log10flog10: SING error
-log10: DOMAIN error
-powpowfpow(0,0): DOMAIN error
-pow(0,neg): DOMAIN error
-sinhsinhfsqrtsqrtfsqrt: DOMAIN error
-fmodfmodffmod: DOMAIN error
-remainderremainderfremainder: DOMAIN error
-acoshacoshfacosh: DOMAIN error
-atanhatanhfatanh: DOMAIN error
-atanh: SING error
-scalbscalbfj0j0f: TLOSS error
-j1j1fjnjnfneg**non-integral: DOMAIN error
-à?addfree.cmax >= minreg->min < reg->maxnew_max > new_min(reg->min & (sizeof(struct lmm_node) - 1)) == 0(reg->max & (sizeof(struct lmm_node) - 1)) == 0addregio.cr != reg(reg->max <= r->min) || (reg->min >= r->max)alloc.clmm != 0size > 0reg->free >= 0(DWORD)node < reg->maxreg->free >= size(reg->nodes == 0 && reg->free == 0) || (DWORD)reg->nodes >= reg->minreg->nodes == 0 || (DWORD)reg->nodes < reg->maxreg->free <= reg->max - reg->min((DWORD)node & (sizeof(struct lmm_node) - 1)) == 0((DWORD)node->size & (sizeof(struct lmm_node) - 1)) == 0(node->next == 0) || (node->next > node)alloc_ge.canode >= node(split_size & (sizeof(struct lmm_node) - 1)) == 0lmm_dump(lmm=%p)
-dump.cnode->size >= sizeof(*node) free_check=%08lx
-reg->free == free_checklmm_dump done
- region %08lx-%08lx size=%08lx flags=%08lx pri=%d free=%08lx
- node %p-%08lx size=%08lx next=%p
-(node->size & (sizeof(struct lmm_node) - 1)) == 0block != 0reg != 0(DWORD)prevnode + prevnode->size == (DWORD)node(DWORD)node + size == (DWORD)nextnodestats.cLMM=%p: %u bytes in %u regions, %d nodes
-assertion %s failed in %s at line %i (task:%i_%i)
-MAGIC assertion failed in %s at line %i (task:%i_%i): %s
-KERNEL PANIC (sys_panic_stub): %s
-KERNEL PANIC (sys_panic): %s
-FreeExeSleepWaiting on joinTime (EXACT) : %lus %luns
-< Memory Dump >
-< Level %d : %s Code: %d Version: %d >
-8Œÿÿ’ÏÿÿšÏÿHk#ÿ`v#ÿÿÿÿÿÿÿÿÿÿÿÿ1234567890!@#$%^&*()-_=+[{]};:'"`~/?,<.>\|   - -1234567890.+*/-+*-aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 1234567890!"œ$%&/()='?^Š‚+*•‡…ø\|<_,:.;—õ   - -1234567890.+*/-+*-aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ[]@#hs#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-K#&K#K#K#K#
-K#K#üJ#¨•"°•"°•"SP#FP#8P#'P# P#öO#æO#ÒO#ÃO#³O#¦O#‘O#€O#fO#ZO#³O#GO#þþAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAš‡Q#ðÿÿÿÿGCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)01.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.text.rodata.data.sbss.bss.comment.note"€ä=!>#€>H )Hk#È[ /Pv#àf5`v#àfØê :àf‚Cbx|Þ~I
\ No newline at end of file
/start/pse51/ptest6
Property changes:
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: start/pse51/ptest5.c
===================================================================
--- start/pse51/ptest5.c (revision 1087)
+++ start/pse51/ptest5.c (nonexistent)
@@ -1,109 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: ptest5.c,v 1.1.1.1 2002-09-02 09:37:47 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:47 $
- ------------
-
- Posix test 5:
- an alarm test
-
- non standard function used:
- cprintf
- sys_gettime
- keyboard stuffs
- sys_end
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <sys/types.h>
-#include <pthread.h>
-#include <signal.h>
-#include <unistd.h>
-
-#include <kernel/kern.h>
-#include <drivers/keyb.h>
-
-
-
-void signal_handler(int signo, siginfo_t *info, void *extra)
-{
- cprintf("SIGNAL HANDLER: pid=%d\n",exec_shadow);
-}
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-
-int main(int argc, char **argv)
-{
- struct sigaction sig_act;
-
- KEY_EVT emerg;
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
- sig_act.sa_sigaction = (void *) signal_handler;
- sig_act.sa_flags = SA_SIGINFO;
- sigemptyset(&sig_act.sa_mask);
-
- sigaction(SIGALRM, &sig_act, NULL);
-
- cprintf("main: alarm(5), waiting t=2 sec\n");
- alarm(5);
-
- while (sys_gettime(NULL) < 2000000);
-
- cprintf("main: alarm(3) return %d, waiting t=6 sec\n",alarm(3));
-
- pause();
-// while (sys_gettime(NULL) < 6000000);
-
- cprintf("main: ending...\n");
-
- return 0;
-}
Index: start/pse51/ptest6.c
===================================================================
--- start/pse51/ptest6.c (revision 1087)
+++ start/pse51/ptest6.c (nonexistent)
@@ -1,300 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: ptest6.c,v 1.1.1.1 2002-09-02 09:37:47 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:47 $
- ------------
-
- Posix test 6:
-
- message queues
-
- main thread:
- set a sigevent to sigev_thread on a mailbox (that creates thread 2)
- creates thread 1
- waits t=3.5 sec.
- pthread_cancel(T4)
-
- thread 1:
- send a msg to the mailbox (the event fires and thread 2 is created)
-
- thread 2:
- receive the msg sent by thread 1
- set the event to a signal
- creates thread 3 and 4
- waits t = 1 sec
- send another msg
-
- thread 3:
- receive the msg sent by 2 (it blocks!)
- waits t = 2 sec
- send 5 msgs (with different priorities!!!
-
- thread 4:
- receives 5 msgs every 0.5 sec.
- then receive another message that never will arrive...
-
- non standard function used:
- cprintf
- sys_gettime
- keyboard stuffs
- sys_end
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <sys/types.h>
-#include <pthread.h>
-#include <mqueue.h>
-
-#include <kernel/kern.h>
-#include <drivers/keyb.h>
-
-struct sigevent ev25, evtask;
-pthread_attr_t task_attr;
-struct sched_param task_param;
-mqd_t mq;
-pthread_t T1,T2,T3,T4,T5;
-
-#define MESSAGE_LENGTH 100
-
-void *t1(void *arg)
-{
- cprintf("T1: started, sending a message\n");
- if (mq_send(mq,"Donald Duck",12,1))
- { cprintf("T1: mq_send returns errno %d\n",errno); return 0; }
-
- cprintf("T1: ending...\n");
- return 0;
-}
-
-void *t4(void *arg);
-void *t3(void *arg);
-
-void t2(union sigval value)
-{
- ssize_t x;
- char buf[MESSAGE_LENGTH];
- int prio;
-
- cprintf("T2: value = %d, receiving a message\n", value.sival_int);
-
- x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
-
- cprintf("T2: received message: length=%ld, prio=%d, text=°%s°, notify...\n",
- x,prio,buf);
-
- if (mq_notify(mq, &ev25))
- { cprintf("T2: mq_notify returns errno %d\n",errno); sys_end(); }
-
- cprintf("T2: waiting t = 1 sec.\n");
- while (sys_gettime(NULL)<1000000);
- cprintf("T2: 1 sec. reached, sending another message and creating T3 and T4, \n");
-
- if (mq_send(mq,"Mickey Mouse",13,1))
- { cprintf("T2: mq_send returns errno %d\n",errno); sys_end(); }
-
- pthread_create(&T3, NULL, t3, NULL);
- pthread_create(&T4, NULL, t4, NULL);
-
- cprintf("T2: ending...\n");
-}
-
-void *t3(void *arg)
-{
- ssize_t x;
- char buf[MESSAGE_LENGTH];
- int prio;
-
- cprintf("T3: waiting a message...\n");
-
- x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
-
- // mickey mouse
- cprintf("T3: received message: length=%ld, prio=%d, text=°%s°\n",
- x,prio,buf);
-
- cprintf("T3: waiting t = 1.5 sec.\n");
- while (sys_gettime(NULL)<1500000);
- cprintf("T3: 2 sec. reached, sending 5 messages\n");
-
- if (mq_send(mq,"Goofy",6,1))
- { cprintf("T3: mq_send1 returns errno %d\n",errno); sys_end(); }
- cprintf("Û");
-
- if (mq_send(mq,"Minnie",7,1))
- { cprintf("T3: mq_send2 returns errno %d\n",errno); sys_end(); }
- cprintf("Û");
-
- if (mq_send(mq,"Pluto",6,2)) // NB: different priority!!!
- { cprintf("T3: mq_send3 returns errno %d\n",errno); sys_end(); }
- cprintf("Û");
-
- if (mq_send(mq,"Rocker Duck",12,2)) // NB: different priority!!!
- { cprintf("T3: mq_send4 returns errno %d\n",errno); sys_end(); }
- cprintf("Û");
-
- if (mq_send(mq,"Oncle Scroodge",15,2)) // NB: different priority!!!
- { cprintf("T3: mq_send5 returns errno %d\n",errno); sys_end(); }
- cprintf("Û");
-
- cprintf("T3: ending...\n");
-
- return 0;
-}
-
-void t4exit(void *arg)
-{
- cprintf("T4: AAAARRRRGGGHHH!!! killed by someone...\n");
-}
-
-void *t4(void *arg)
-{
- ssize_t x;
- char buf[MESSAGE_LENGTH];
- int prio;
-
- cprintf("T4: waiting t = 2.2 sec.\n");
-
- while (sys_gettime(NULL)<2200000);
- x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
- cprintf("T4: received message: length=%ld, prio=%d, text=°%s°\n",x,prio,buf);
-
- while (sys_gettime(NULL)<2400000);
- x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
- cprintf("T4: received message: length=%ld, prio=%d, text=°%s°\n",x,prio,buf);
- while (sys_gettime(NULL)<2600000);
-
- x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
- cprintf("T4: received message: length=%ld, prio=%d, text=°%s°\n",x,prio,buf);
- while (sys_gettime(NULL)<2800000);
-
- x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
- cprintf("T4: received message: length=%ld, prio=%d, text=°%s°\n",x,prio,buf);
- while (sys_gettime(NULL)<3000000);
-
- x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
- cprintf("T4: received message: length=%ld, prio=%d, text=°%s°\n",x,prio,buf);
-
- pthread_cleanup_push(t4exit,NULL);
- x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
- cprintf("T4: received message: length=%ld, prio=%d, text=°%s°\n",x,prio,buf);
- pthread_cleanup_pop(0);
-
- return 0;
-}
-
-void signal_handler(int signo, siginfo_t *info, void *extra)
-{
- cprintf("Signal %d code=%s value=%d task=%d time=%ldusec\n",
- info->si_signo,
- (info->si_code == SI_TIMER) ? "Timer" : "Other",
- info->si_value.sival_int,
- info->si_task,
- sys_gettime(NULL));
-}
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-int main(int argc, char **argv)
-{
-// int err;
- struct sigaction sig_act;
- struct mq_attr attr;
-
- KEY_EVT emerg;
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
- sig_act.sa_sigaction = (void *) signal_handler;
- sig_act.sa_flags = SA_SIGINFO;
- sigemptyset(&sig_act.sa_mask);
- sigaction(25, &sig_act, NULL);
-
- // set ev25, evtask
- ev25.sigev_notify = SIGEV_SIGNAL;
- ev25.sigev_signo = 25;
- ev25.sigev_value.sival_int = 555;
-
- evtask.sigev_notify = SIGEV_THREAD;
- evtask.sigev_value.sival_int = 777;
- evtask.sigev_notify_function = t2;
- evtask.sigev_notify_attributes = &task_attr;
-
- // set pthread attributes
- pthread_attr_init(&task_attr);
- pthread_attr_setdetachstate(&task_attr, PTHREAD_CREATE_DETACHED);
- pthread_attr_setschedpolicy(&task_attr, SCHED_FIFO);
- task_param.sched_priority = 10;
- pthread_attr_setschedparam(&task_attr, &task_param);
-
- // set mqueue attributes
- attr.mq_flags = 0;
- attr.mq_maxmsg = 3;
- attr.mq_msgsize = MESSAGE_LENGTH;
-
- // create the message queue
- if ((mq = mq_open("mq", O_CREAT|O_RDWR, 0, &attr)) == -1)
- { cprintf("main: mq_open returns errno %d\n",errno); return 0; }
-
- if (mq_notify(mq, &evtask))
- { cprintf("main: mq_notify returns errno %d\n",errno); return 0; }
-
- cprintf("main: created mq, creating T1...\n");
-
- pthread_create(&T1, NULL, t1, NULL);
-
- cprintf("main: waiting t= 3.5 sec., then kill T4...\n");
-
- while (sys_gettime(NULL)<3500000);
-
- pthread_cancel(T4);
-
- cprintf("main: ending...\n");
-
- return 0;
-}
Index: start/pse51/makefile
===================================================================
--- start/pse51/makefile (revision 1087)
+++ start/pse51/makefile (nonexistent)
@@ -1,25 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS+= ptest1 ptest2 ptest3 ptest4 ptest5 ptest6
-
-include $(BASE)/config/example.mk
-
-ptest1:
- make -f $(SUBMAKE) APP=ptest1 INIT= OTHEROBJS="pinit.o"
-ptest2:
- make -f $(SUBMAKE) APP=ptest2 INIT= OTHEROBJS="pinit.o"
-ptest3:
- make -f $(SUBMAKE) APP=ptest3 INIT= OTHEROBJS="pinit.o"
-ptest4:
- make -f $(SUBMAKE) APP=ptest4 INIT= OTHEROBJS="pinit.o"
-ptest5:
- make -f $(SUBMAKE) APP=ptest5 INIT= OTHEROBJS="pinit.o"
-ptest6:
- make -f $(SUBMAKE) APP=ptest6 INIT= OTHEROBJS="pinit.o"
Index: start/pci6025e/test_ec.c
===================================================================
--- start/pci6025e/test_ec.c (revision 1087)
+++ start/pci6025e/test_ec.c (nonexistent)
@@ -1,405 +0,0 @@
-/*****************************************************************************
-* Filename: test_ec.c *
-* Author: Marco Ziglioli (Doctor Stein) *
-* Date: 20/06/2001 *
-* Description: Test program for gated event counting using PCI6025E board *
-*----------------------------------------------------------------------------*
-* Notes: FOUT are enabled to provide a frequency of 6250 Hz. You could *
-* connect PFI3 (pin 41) and PFI6 (pin 45) to this source for counting *
-* edges. Gated counting are enabled and PFI4 (pin 42) is gate pin for *
-* counter 0 and PFI5 (pin 44) is gate pin for counter 0. DIO 7 and 6 *
-* are als configured to switch between 0 and 5 V. Connect DIO 7 to *
-* gate 0 and DIO 6 to gate 1. Use 'g' (counter 0) and 'h' (counter 1) *
-* to change DIO lines value. On left area of the screen you should *
-* see counter while counting and on the right area you should lock *
-* counter values by pressing 's' key. *
-* Notice that line parameters are enabled and accept inital value *
-* for the two counters. If they aren't specified or they are wrong *
-* counters start from 0x00FFFFFF (counter 0 which counts down) and *
-* 0x00000000 (counter 1 which counts up). *
-* Last time addiction: TC Interrupts and Gate interrupts are enabled *
-* Bottom squares indicates when an interrupt is *
-* raised *
-*****************************************************************************/
-
-/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
- *
- * Copyright (C) 2001 Marco Ziglioli
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <kernel/kern.h>
-#include <drivers/keyb.h>
-#include <drivers/glib.h>
-
-#include <drivers/pci6025e/timer.h>
-#include <drivers/pci6025e/dio_ppi.h>
-
-#ifndef INT_NO
- #define INT_NO NIDevice_info[0].InterruptLevel
-#endif
-
-BYTE sys = 0;
-
-PID show_aper_pid;
-BYTE out = 0x00;
-
-int black = rgb16(0, 0, 0),
- white = rgb16(255, 255, 255);
-
-void endfun(KEY_EVT *);
-void close_event(void *);
-void show_evt(KEY_EVT *k);
-void gate_change(KEY_EVT *k);
-
-void drawInterface(void);
-
-void int_evt(int intno);
-
-TASK show_per(int);
-TASK show_aper(int);
-
-int main(int argc, char **argv)
-{
- KEY_EVT k;
- SOFT_TASK_MODEL show_per_mod, show_aper_mod;
- PID show_per_pid;
- int result, modenum;
- DWORD init_val_c0, init_val_c1;
-
- if(argc >= 3){
- if( (result = sscanf(argv[1], "%ld", &init_val_c0)) != 1)
- init_val_c0 = 0x00FFFFFF;
- if( (result = sscanf(argv[2], "%ld", &init_val_c1)) != 1)
- init_val_c1 = 0x00000000;
- }
- if(argc == 2){
- if( (result = sscanf(argv[1], "%ld", &init_val_c0)) != 1)
- init_val_c0 = 0x00FFFFFF;
- init_val_c1 = 0x00000000;
- }
- if(argc == 1){
- init_val_c0 = 0x00FFFFFF;
- init_val_c1 = 0x00000000;
- }
-
- sys_atrunlevel(close_event, NULL, RUNLEVEL_BEFORE_EXIT);
-
- k.flag = CNTL_BIT;
- k.scan = KEY_X;
- k.ascii = 'x';
- keyb_hook(k, endfun);
-
- k.flag = CNTR_BIT;
- keyb_hook(k, endfun);
-
- soft_task_default_model(show_aper_mod);
- soft_task_def_aperiodic(show_aper_mod);
- soft_task_def_level(show_aper_mod, 1);
- soft_task_def_period(show_aper_mod, 250000);
- soft_task_def_met(show_aper_mod, 30000);
- soft_task_def_wcet(show_aper_mod, 60000);
- if( (show_aper_pid = task_create("Show aperiodic task", show_aper, &show_aper_mod, NULL)) == NIL ){
- sys = 10;
- sys_end();
- }
-
- k.flag = 0;
- k.scan = KEY_S;
- k.ascii = 's';
- keyb_hook(k, show_evt);
-
- k.flag = 0;
- k.scan = KEY_G;
- k.ascii = 'g';
- keyb_hook(k, gate_change);
-
- k.scan = KEY_H;
- k.ascii = 'h';
- keyb_hook(k, gate_change);
-
- soft_task_default_model(show_per_mod);
- soft_task_def_level(show_per_mod, 1);
- soft_task_def_met(show_per_mod, 1000);
- soft_task_def_period(show_per_mod, 10000);
- if( (show_per_pid = task_create("Show periodic task", show_per, &show_per_mod, NULL)) == NIL){
- sys = 11;
- sys_end();
- }
-
- if(pci_init()==-1){
- sys = 20;
- sys_end();
- }
-
- if(!reMap()){
- sys = 21;
- sys_end();
- }
-
- if(grx_init()==-1){
- sys = 30;
- sys_end();
- }
-
- if( (modenum = grx_getmode(800, 600, 16)) == -1){
- sys = 31;
- sys_end();
- }
-
- grx_setmode(modenum);
-
- drawInterface();
-
- //Init DIO lines used to manage counters gates
- DIO_init();
- DIO_setup(0xFF);
- DIO_write(out);
-
- //All PFI are configured as input
- PFIprogramming(0x0000);
- //FOUT enable; Slow TIMEBASE, divided by two; divided by 16 on FOUT pin
- setIntClock(1, 1, 0);
-
- TIM_reset(2); //Reset both two counters
-
- //Source PFI3(41); Gate PFI 4(42); Down counting; counts rising edge;
- TIM_eventCounting(C0, 0x04, 0x45, 0x03, init_val_c0);
-
- //Source PFI6(45); Gate PFI 5(44); Up counting; counts rising edge;
- TIM_eventCounting(C1, 0x87, 0x46, 0x03, init_val_c1);
-
- //Set up interrupt group A and B enabling and programming to assert a request
- //both on line 2 and 3 respectively
- INT_setup(0x0A, 0x0B);
- INT_personalize(0x03); //Interrupt request polarity low; IRQ driven on line 0 and 1
-
- handler_set(INT_NO, int_evt, show_aper_pid);
-
- TIM_arm(2); //Arm both two counters
-
- task_activate(show_per_pid);
-
- return 0;
-}
-
-void drawInterface(void)
-{
- grx_rect(1, 1, 799, 99, rgb16(105, 0, 0));
- grx_rect(2, 2, 798, 98, rgb16(155, 0, 0));
- grx_rect(3, 3, 797, 97, rgb16(205, 0, 0));
- grx_rect(4, 4, 796, 96, rgb16(255, 0, 0));
-
- grx_text("Test program for Gated Event Counting capacity of PCI6025E timers",
- 7, 10, rgb16(50, 255, 50), black);
-
- grx_text("This program counting rise edges on counters source (PFI3 & PFI6) when releted gates",
- 7, 25, rgb16(0, 255, 255), black);
- grx_text("(PFI 42 & 44) are enabled. Frequency Out (FOUT) is enabled and provides a frequency of 6250 Hz",
- 7, 33, rgb16(0, 255, 255), black);
-
- grx_text("Instruction:",7, 43, rgb16(255, 0, 0), black);
- grx_text("Use 's' to lock counters value in right squares",
- 7, 51, rgb16(0, 255, 255), black);
- grx_text("Use 'g' to block or to release alternativly counter 0 (see top-left square)",
- 7, 58, rgb16(0, 255, 255), black);
-
- grx_text("Use 'h' to block or to release alternativly counter 1 (see bottom-left square)",
- 7, 65, rgb16(0, 255, 255), black);
-
- grx_text("Please connect DIO7 (pin 32) to PFI4 (pin 42) and DIO6 (pin 30) to PFI5 (pin 44)",
- 7, 78, rgb16(0, 255, 0), black);
- grx_text("CTRL-X for Exit", 7, 88, rgb16(200, 200, 0), black);
-
- grx_rect(1, 110, 355, 170, rgb16(0, 105, 0));
- grx_rect(2, 111, 354, 169, rgb16(0, 155, 0));
- grx_rect(3, 112, 353, 168, rgb16(0, 205, 0));
- grx_rect(4, 113, 352, 167, rgb16(0, 255, 0));
- grx_text("Counter 0 evolution", 7, 120, rgb16(255, 255, 0), black);
-
- grx_rect(455, 110, 799, 170, rgb16(0, 105, 0));
- grx_rect(456, 111, 798, 169, rgb16(0, 155, 0));
- grx_rect(457, 112, 797, 168, rgb16(0, 205, 0));
- grx_rect(458, 113, 796, 167, rgb16(0, 255, 0));
- grx_text("Counter 0 locked value", 461, 120, rgb16(255, 0, 255), black);
-
- grx_rect(360, 110, 450, 170, rgb16(0, 105, 0));
- grx_rect(361, 111, 449, 169, rgb16(0, 155, 0));
- grx_rect(362, 112, 448, 168, rgb16(0, 205, 0));
- grx_rect(363, 113, 447, 167, rgb16(0, 255, 0));
- grx_text("Gate0", 367, 120, rgb16(200, 255, 200), black);
- grx_text("0 V", 367, 145, rgb16(255, 0, 0), black);
-
- grx_rect(1, 190, 355, 260, rgb16(85, 85, 255));
- grx_rect(2, 191, 354, 259, rgb16(135, 135, 255));
- grx_rect(3, 192, 353, 258, rgb16(190, 190, 255));
- grx_rect(4, 193, 352, 257, rgb16(230, 239, 255));
- grx_text("Counter 1 evolution", 7, 200, white, black);
-
- grx_rect(455, 190, 799, 260, rgb16(85, 85, 255));
- grx_rect(456, 191, 798, 259, rgb16(135, 135, 255));
- grx_rect(457, 192, 797, 258, rgb16(190, 190, 255));
- grx_rect(458, 193, 796, 257, rgb16(230, 230, 255));
- grx_text("Counter 1 locked value", 461, 200, white, black);
-
- grx_rect(360, 190, 450, 260, rgb16(85, 85, 255));
- grx_rect(361, 191, 449, 259, rgb16(135, 135, 255));
- grx_rect(362, 192, 448, 258, rgb16(190, 190, 255));
- grx_rect(363, 193, 447, 257, rgb16(230, 230, 255));
- grx_text("Gate1", 367, 200, rgb16(255, 200, 255), black);
- grx_text("0 V", 367, 225, rgb16(255, 0, 0), black);
-
- grx_text("Counter 0 Interrupt events", 7, 340, rgb16(255, 200, 100), black);
- grx_text("Counter 1 Interrupt events", 461, 340, rgb16(255, 200, 100), black);
- grx_rect(1, 350, 355, 400, rgb16(105, 0, 0));
- grx_rect(2, 351, 354, 399, rgb16(155, 0, 0));
- grx_rect(3, 352, 353, 398, rgb16(205, 0, 0));
- grx_rect(4, 353, 352, 397, rgb16(255, 0, 0));
- grx_rect(455, 350, 799, 400, rgb16(105, 0, 0));
- grx_rect(456, 351, 798, 399, rgb16(155, 0, 0));
- grx_rect(457, 352, 797, 398, rgb16(205, 0, 0));
- grx_rect(458, 353, 796, 397, rgb16(255, 0, 0));
-}
-
-
-TASK show_per(int none)
-{
- DWORD val;
- char buf[30];
-
- while(1){
- val = TIM_readCounter(C0); //Read counter 0 value
- sprintf(buf, "HEX: %08lx DEC: %08ld", val ,val);
- grx_text(buf, 7, 145, rgb16(255, 0, 0), black);
-
- val = TIM_readCounter(C1); //Read counter 1 value
- sprintf(buf, "HEX: %08lx DEC: %08ld", val ,val);
- grx_text(buf, 7, 225, rgb16(255, 0, 0), black);
-
- task_endcycle();
- }
-}
-
-TASK show_aper(int dummy)
-{
- DWORD val;
- char buf[30];
-
- while(1){
- val = TIM_readCounter(C0);
- sprintf(buf, "HEX: %08lx DEC: %08ld", val, val);
- grx_text(buf, 461, 145, rgb16(80, 80, 255), black);
-
- val = TIM_readCounter(C1);
- sprintf(buf, "HEX: %08lx DEC: %08ld", val, val);
- grx_text(buf, 461, 225, rgb16(80, 80, 255), black);
-
- task_endcycle();
- }
-}
-
-void endfun(KEY_EVT *k)
-{
- sys_end();
-}
-
-void show_evt(KEY_EVT *k)
-{
- task_activate(show_aper_pid);
-}
-
-void gate_change(KEY_EVT *k)
-{
- if(k->ascii == 'g'){
- if( (out & 0x80) != 0){
- out &= 0x7F;
- grx_text("0 V", 367, 145, rgb16(255, 0, 0), black);
- } else {
- out |= 0x80;
- grx_text("5 V", 367, 145, rgb16(0, 255, 0), black);
- }
- } else {
- if( (out & 0x40) != 0){
- out &= 0xBF;
- grx_text("0 V", 367, 225, rgb16(255, 0, 0), black);
- } else {
- out |= 0x40;
- grx_text("5 V", 367, 225, rgb16(0, 255, 0), black);
- }
- }
-
- DIO_write(out);
-}
-
-void close_event(void *arg)
-{
- TIM_disarm(2); //Disable both two counters
- grx_close();
- handler_remove(INT_NO);
-
-
- switch(sys){
- case 0: cprintf("OK\n"); break;
- case 10: cprintf("Task <show aperiodic> down\n"); break;
- case 11: cprintf("Task <show periodic> down\n"); break;
- case 20: cprintf("No PCI bus\n"); break;
- case 21: cprintf("No National board on PCI bus\n"); break;
- case 30: cprintf("No graphic can be initialized\n"); break;
- case 31: cprintf("This graphic mode cannot be supported\n"); break;
- default: cprintf("???????????\n"); break;
- }
-}
-
-void int_evt(int intno)
-{
- WORD status;
-
- status = DAQ_STC_Windowed_Mode_Read(AI_STATUS_1);
- if( (status & 0x8000) != 0){
- if( (status & 0x0008) != 0){
- grx_text("INT Group A raised! G0 Rolls over", 7, 360, rgb16(0, 255, 0), black);
- set(interrupt_a_ack, 14);
- DAQ_STC_Windowed_Mode_Write(INTERRUPT_A_ACK, interrupt_a_ack);
- clr(interrupt_a_ack, 14);
- }
- if( (status & 0x0004) != 0){
- grx_text("INT Group A raised! G0 gate pressed", 7, 380, rgb16(0, 255, 0), black);
- set(interrupt_a_ack, 15);
- DAQ_STC_Windowed_Mode_Write(INTERRUPT_A_ACK, interrupt_a_ack);
- clr(interrupt_a_ack, 15);
- }
- return;
- }
-
- status = DAQ_STC_Windowed_Mode_Read(AO_STATUS_1);
- if( (status & 0x8000) != 0){
- if( (status & 0x0008) != 0){
- grx_text("INT Group B raised! G1 Rolls over", 461, 360, rgb16(0, 255, 0), black);
- set(interrupt_b_ack, 14);
- DAQ_STC_Windowed_Mode_Write(INTERRUPT_B_ACK, interrupt_b_ack);
- clr(interrupt_b_ack, 14);
- }
- if( (status & 0x0004) != 0){
- grx_text("INT Group B raised! G1 gate pressed", 461, 380, rgb16(0, 255, 0), black);
- set(interrupt_b_ack, 15);
- DAQ_STC_Windowed_Mode_Write(INTERRUPT_B_ACK, interrupt_b_ack);
- clr(interrupt_b_ack, 15);
- }
- return;
- }
-}
-/* End of file: Test_ec.c */
Index: start/pci6025e/test_dac.c
===================================================================
--- start/pci6025e/test_dac.c (revision 1087)
+++ start/pci6025e/test_dac.c (nonexistent)
@@ -1,364 +0,0 @@
-/*****************************************************************************
-* Filename: test_dac.c *
-* Author: Marco Ziglioli (Doctor Stein) *
-* Date: 12/06/2001 *
-* Description: Little test program for Analog Output section of PCI6025E *
-*----------------------------------------------------------------------------*
-* Notes: Connect a multimeter to DAC1 output (pin 21) and watch *
-* tension value. Use '+' and '-' on numeric pad to increase *
-* and decrise voltage *
-* With this program it's possible to point out possible *
-* offset errors. To correct them no software are written but *
-* in National board package there's the program to calibrate *
-* the board. Otherwise you can see how much is the offset *
-* and you can compensate it through software value *
-*****************************************************************************/
-
-/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
- *
- * Copyright (C) 2001 Marco Ziglioli
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <drivers/glib.h>
-#include <drivers/keyb.h>
-#include <drivers/pci6025e/dac.h>
-
-#define TASK_VOLT_PERIOD 150E3
-#define TASK_VOLT_WCET 080E3
-#define TASK_DAC_PERIOD 050E3
-#define TASK_DAC_WCET 020E3
-
-#define CONV 10/2048
-
-#define TASK_GROUP 1
-
-WORD dac0_value = 0,
- dac1_value = 0;
-
-BYTE sys = 0;
-BYTE dac = 0;
-
-//some colors
-int black = rgb16(0, 0, 0),
- white = rgb16(255, 255, 255);
-
-void drawInterface(void);
-void endfun(KEY_EVT *);
-void inc(KEY_EVT *);
-void dec(KEY_EVT *);
-void change_dac(KEY_EVT *);
-void close_event(void *);
-TASK Voltage_body(int);
-TASK DAC_Check_body(int);
-
-int main(int argc, char **argv)
-{
- int modenum;
- KEY_EVT k;
- HARD_TASK_MODEL m, d;
- PID pid_m, pid_d;
-
- sys_atrunlevel(close_event, NULL, RUNLEVEL_BEFORE_EXIT);
-
- keyb_set_map(itaMap);
- k.flag = CNTR_BIT;
- k.scan = KEY_X;
- k.ascii = 'x';
- keyb_hook(k, endfun);
-
- k.flag = CNTL_BIT;
- keyb_hook(k, endfun);
-
- k.flag = 0;
- k.scan = 78;
- k.ascii = 43;
- keyb_hook(k, inc);
-
- k.flag = 0;
- k.scan = 74;
- k.ascii = 45;
- keyb_hook(k, dec);
-
- k.flag = 0;
- k.scan = KEY_V;
- k.ascii = 'v';
- keyb_hook(k, change_dac);
-
- hard_task_default_model(m);
- hard_task_def_wcet(m, TASK_VOLT_WCET);
- hard_task_def_mit(m, TASK_VOLT_PERIOD);
- hard_task_def_group(m, TASK_GROUP);
- pid_m = task_create("Voltage", Voltage_body, &m, NULL);
- if(pid_m == NIL){
- sys = 30;
- sys_end();
- }
-
- hard_task_default_model(d);
- hard_task_def_wcet(d, TASK_DAC_WCET);
- hard_task_def_mit(d, TASK_DAC_PERIOD);
- hard_task_def_group(d, TASK_GROUP);
- pid_d = task_create("DAC Check", DAC_Check_body, &d, NULL);
- if(pid_d == NIL){
- sys = 31;
- sys_end();
- }
-
- //Check if PCI bus is present
- if(pci_init()==-1){
- sys = 10;
- sys_end();
- }
- //Check if a NI board is on PCI bus
- if(!reMap()){
- sys = 11;
- sys_end();
- }
-
- if(grx_init()==-1){
- sys = 20;
- sys_end();
- }
-
- modenum = grx_getmode(800, 600, 16);
- if(modenum == -1){
- sys = 21;
- sys_end();
- }
- grx_setmode(modenum);
-
- drawInterface();
-
- //Analog output section set up
- DAC_Init();
-
- /*
- *AI_TIMEBASE div by 2; OUT_TIMEBASE div by 2; single DAC mode
- *TMRDACWR = 3 OUT_TIMEBASE period; FIFO flags polarity active low
- *TMRDACWR disabled; DMA PIO control = FIFO DATA interface mode
- *UPDATE signal timebase = AO_UPDATE pulse width
- *UPDATE pulsewidth = 3-3.5 OUT_TIMEBASE period
- *UPDATE signal polarity = HIGH Z
- */
- DAC_boardInit(0x02, 0x4000);
- /*
- *LDAC0 source = UPDATE
- *DAC0 update immediately
- *LDAC1 source = UPDATE
- *DAC1 update immediately
- */
- DAC_LDACSourceUpdate(0x00);
- //End of Analog output section setup
-
- group_activate(TASK_GROUP);
-
- return 0;
-}
-
-/*
-* Every time operator select a new value to send to a DAc this TASK makes
-* actions needed to perform the operation
-*/
-TASK Voltage_body(int dac_work)
-{
- WORD old0_value, old1_value;
- char buf[6];
- float volt;
-
- old0_value = dac0_value;
- old1_value = dac1_value;
- while(1){
- if(dac){
- if(dac1_value != old1_value){
- DAC_output(DAC1, dac1_value);
- old1_value = dac1_value;
- sprintf(buf, "%04d", dac1_value);
- grx_text(buf, 70, 120, rgb16(180, 0, 0), rgb16(255,255,140));
- sprintf(buf, "%04x", dac1_value);
- grx_text(buf, 300, 120, rgb16(180, 0, 0), rgb16(255,255,140));
- if( (dac1_value & 0x0800) == 0 )
- volt = (float)dac1_value * (float)CONV;
- else
- volt = (float)(dac1_value-0x0FFF) * (float)CONV;
- sprintf(buf, "%05.2f", volt);
- grx_text(buf, 70, 177, rgb16(180, 40, 180), black);
- }
- } else {
- if(dac0_value != old0_value){
- DAC_output(DAC0, dac0_value);
- old0_value = dac0_value;
- sprintf(buf, "%04d", dac0_value);
- grx_text(buf, 521, 120, rgb16(180, 0, 0), rgb16(255,255,140));
- sprintf(buf, "%04x", dac0_value);
- grx_text(buf, 754, 120, rgb16(180, 0, 0), rgb16(255,255,140));
- if( (dac0_value & 0x0800) == 0 )
- volt = (float)dac0_value * (float)CONV;
- else
- volt = (float)(dac0_value-0x0FFF) * (float)CONV;
- sprintf(buf, "%05.2f", volt);
- grx_text(buf, 521, 177, rgb16(180, 40, 180), black);
- }
- }
- task_endcycle();
- }
-}
-
-/*
-* This TASK show which is the DAC active
-*/
-TASK DAC_Check_body(int dummy)
-{
- BYTE old = dac;
- char buf[8];
-
- while(1){
- if(dac != old){
- old = dac;
- sprintf(buf, "DAC %d", dac);
- grx_text(buf, 385, 90, rgb16(255*dac, 255*(1-dac), 0), black);
- }
- task_endcycle();
- }
-}
-
-void drawInterface(void)
-{
- grx_rect(1, 1, 799, 69, rgb16(105, 0, 0));
- grx_rect(2, 2, 798, 68, rgb16(155, 0, 0));
- grx_rect(3, 3, 797, 67, rgb16(205, 0, 0));
- grx_rect(4, 4, 796, 66, rgb16(255, 0, 0));
-
- grx_text("Test program for Analog output section of PCI6025E",
- 7, 10, rgb16(50, 255, 50), black);
- grx_text("Use '+' and '-' on numeric pad to change tension",
- 7, 25, rgb16(0, 255, 255), black);
- grx_text("Connect a tester to DAC1 output (pin21) or to DAC0 output (pin20)",
- 7, 33, rgb16(0, 255, 255), black);
- grx_text("Use 'v' to alternate change active DAC",
- 7, 40, rgb16(0, 255, 255), black);
-
- grx_text("CTRL-X for Exit", 7, 55, rgb16(200, 200, 0), black);
-
- grx_rect(1, 80, 355, 150, rgb16(0, 105, 0));
- grx_rect(2, 81, 354, 149, rgb16(0, 155, 0));
- grx_rect(3, 82, 353, 148, rgb16(0, 205, 0));
- grx_rect(4, 83, 352, 147, rgb16(0, 255, 0));
-
- grx_rect(1, 160, 355, 199, rgb16(0, 105, 0));
- grx_rect(2, 161, 354, 198, rgb16(0, 155, 0));
- grx_rect(3, 162, 353, 197, rgb16(0, 205, 0));
- grx_rect(4, 163, 352, 196, rgb16(0, 255, 0));
-
- grx_rect(455, 80, 799, 150, rgb16(105, 105, 0));
- grx_rect(456, 81, 798, 149, rgb16(155, 155, 0));
- grx_rect(457, 82, 797, 148, rgb16(205, 205, 0));
- grx_rect(458, 83, 796, 147, rgb16(255, 255, 0));
-
- grx_rect(455, 160, 799, 199, rgb16(105, 105, 0));
- grx_rect(456, 161, 798, 198, rgb16(155, 155, 0));
- grx_rect(457, 162, 797, 197, rgb16(205, 205, 0));
- grx_rect(458, 163, 796, 196, rgb16(255, 255, 0));
-
- grx_rect(360, 80, 450, 105, rgb16(85, 85, 255));
- grx_rect(361, 81, 449, 104, rgb16(125, 125, 255));
- grx_rect(362, 82, 448, 103, rgb16(175, 175, 255));
- grx_rect(363, 83, 447, 102, rgb16(225, 225, 255));
-
- grx_rect(153, 93, 195, 103, rgb16(255, 0, 0));
- grx_text("DAC 1", 155, 95, rgb16(255, 170, 170), black);
-
- grx_rect(607, 93, 649, 103, rgb16(255, 0, 0));
- grx_text("DAC 0", 609, 95, rgb16(255, 255, 210), black);
-
- grx_text("Decimal", 7, 120, rgb16(120, 120, 255), black);
- grx_text("Hexadecimal", 200, 120, rgb16(120, 120, 255), black);
- grx_text("Tension", 7, 177, rgb16(120, 120, 255), black);
-
- grx_text("Decimal", 461, 120, rgb16(255, 120, 120), black);
- grx_text("Hexadecimal", 654, 120, rgb16(255, 120, 120), black);
- grx_text("Tension", 461, 177, rgb16(255, 120, 120), black);
-}
-
-void close_event(void *arg)
-{
- grx_close();
- switch(sys){
- case 0 : cprintf("Regular End\n"); break;
- case 1 : cprintf("End fun invoked\n"); break;
- case 10: cprintf("Pci bus not found\n"); break;
- case 11: cprintf("No National board found\n"); break;
- case 20: cprintf("Cannot initialize graphic envirorment\n"); break;
- case 21: cprintf("Cannot start envirorment in 800x600x16\n"); break;
- case 30: cprintf("Cannot create task <voltage>\n"); break;
- case 31: cprintf("Canot create task <DAC Check>\n"); break;
- case 40: cprintf("Break on clock end event\n"); break;
- default: cprintf("Unkwon exit event\n"); break;
- }
-}
-
-void endfun(KEY_EVT *k)
-{
- sys = 1;
- sys_end();
-}
-
-/*
-* Capture correct key event and increase output tension of active DAC
-*/
-void inc(KEY_EVT *k)
-{
- if(dac){
- if( (dac1_value & 0x0800) == 0 && dac1_value > 0x07FF )
- dac1_value = 0;
- else
- dac1_value++;
- } else {
- if( (dac0_value & 0x0800) == 0 && dac0_value > 0x07FF )
- dac0_value = 0;
- else
- dac0_value++;
- }
-}
-
-/*
-* Same as above but decrease tension
-*/
-void dec(KEY_EVT *k)
-{
- if(dac){
- if(dac1_value < 1)
- dac1_value = 0x0FFF;
- else
- dac1_value -= 1;
- } else {
- if(dac0_value < 1)
- dac0_value = 0x0FFF;
- else
- dac0_value -= 1;
- }
-}
-
-/*
-* Capture correct key event and change active DAC
-*/
-void change_dac(KEY_EVT *k)
-{
- if(dac) dac = 0;
- else dac = 1;
-}
-
Index: start/pci6025e/test_ppi.c
===================================================================
--- start/pci6025e/test_ppi.c (revision 1087)
+++ start/pci6025e/test_ppi.c (nonexistent)
@@ -1,190 +0,0 @@
-/*****************************************************************************
-* Filename: Test_ppi.c *
-* Author: Marco Ziglioli (Doctor Stein) *
-* Date: 22/05/2001 *
-* Description: Test PPI82C55MSM on NI DAQ PCI6025E *
-*----------------------------------------------------------------------------*
-* Notes: Configures port A and port C in input and port B in output *
-* Test 1: *
-* Now connect port B to port A and watch on video value changes *
-* in counting order. After connect port B to port C and watch *
-* the same events on port C *
-* Test 2: *
-* Connect 8 LEDs on port B and port A and port C lines to Vcc or*
-* GND. Now run this test and watch 8 diode changing in counting *
-* mode and on screen port A and port C values displayed *
-*****************************************************************************/
-
-/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
- *
- * Copyright (C) 2001 Marco Ziglioli
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-
-#include <drivers/keyb.h>
-#include <drivers/glib.h>
-#include <drivers/pci6025e/dio_ppi.h>
-
-void exit_fun(KEY_EVT *);
-TASK test_ppi(int);
-void close_event(void *);
-void draw_screen(void);
-
-BYTE system = 0;
-
-int main(int argc, char **argv)
-{
- HARD_TASK_MODEL m;
- KEY_EVT k;
- PID pid_m;
- int modenum;
-
- sys_atrunlevel(close_event, NULL, RUNLEVEL_BEFORE_EXIT);
-
- keyb_set_map(itaMap);
- k.flag = CNTL_BIT;
- k.scan = KEY_C;
- k.ascii = 'c';
- keyb_hook(k, exit_fun);
- k.flag = CNTR_BIT;
- k.scan = KEY_C;
- k.ascii = 'c';
- keyb_hook(k, exit_fun);
-
- hard_task_default_model(m);
- hard_task_def_wcet(m, 90000);
- hard_task_def_mit(m, 250000);
- pid_m = task_create("TEST PPI", test_ppi, &m, NULL);
- if(pid_m == NIL){
- system = 10;
- sys_end();
- }
-
- //Check if PCI bus is present
- if(pci_init() == -1){
- system = 20;
- sys_end();
- }
-
- //Look for a National board on PCI bus
- if(!reMap()){
- system = 21;
- sys_end();
- }
-
- //Start configuring DIO module
- PPI_init();
-
- grx_init();
- modenum = grx_getmode(640, 480, 16);
- if(modenum == -1){
- system = 30;
- sys_end();
- }
- grx_setmode(modenum);
-
- draw_screen();
-
- task_activate(pid_m);
-
- return 0;
-}
-
-void draw_screen(void)
-{
- grx_rect(5, 5, 610, 130, rgb16(255, 0, 0));
- grx_rect(4, 4, 611, 131, rgb16(0,255,255));
- grx_rect(3, 3, 612, 132, rgb16(255, 0, 0));
- grx_rect(15, 45, 195, 100, rgb16(255, 0, 0));
- grx_rect(215, 45, 395, 100, rgb16(0, 255, 0));
- grx_rect(415, 45, 595, 100, rgb16(200, 200, 255));
- grx_text("Test of PPI82C55MSM function (Hosted on PCI6025E)",
- 9, 7, rgb16(0, 255, 0), rgb16(0, 0, 0));
- grx_text("PORT A and PORT C are configured in input mode",
- 9, 20, rgb16(255, 70, 70), rgb16(0, 0, 0));
- grx_text("PORT B is configured in output mode",
- 9, 28, rgb16(255, 70, 70), rgb16(0, 0, 0));
- grx_text("PORT B (Output)", 35, 50, rgb16(200, 0, 0), rgb16(0, 0, 0));
- grx_text("PORT A (Input)", 235, 50, rgb16(30,255,30), rgb16(0, 0, 0));
- grx_text("PORT C (Input)", 435, 50, rgb16(200,200,255), rgb16(0, 0, 0));
- grx_text("CTRL + C to exit", 9, 115, rgb16(255,255,0), rgb16(0,0,0));
-}
-
-/*
-* At each activation this task sends out value on port B and reads values from
-* port A and C
-*/
-TASK test_ppi(int dummy)
-{
- BYTE val, pA, pC;
- int i;
- char buf[10];
-
- PPI_config(0x99); //Mode 0 for all; Port A, Port C input; Port B output
- val = 0;
- while(1){
- PPI_write(PPI_PORT_B, val); //sends out value
- pA = PPI_read(PPI_PORT_A); //reads from port A
- pC = PPI_read(PPI_PORT_C); //reads from port C
-
- for(i=7; i>=0; i--){
- if( (val>>i)%2 )
- grx_text("1", 25+10*(7-i), 75, rgb16(255,0,0), rgb16(0,0,0));
- else
- grx_text("0", 25+10*(7-i), 75, rgb16(255,0,0), rgb16(0,0,0));
- if( (pA>>i)%2 )
- grx_text("1", 225+10*(7-i), 75, rgb16(0,255,0), rgb16(0,0,0));
- else
- grx_text("0", 225+10*(7-i), 75, rgb16(0,255,0), rgb16(0,0,0));
- if( (pC>>i)%2 )
- grx_text("1", 425+10*(7-i), 75, rgb16(200,200,255), rgb16(0,0,0));
- else
- grx_text("0", 425+10*(7-i), 75, rgb16(200,200,255), rgb16(0,0,0));
- }
- sprintf(buf, "%03d", val);
- grx_text(buf, 140, 75, rgb16(255,0,0), rgb16(0,0,0));
- sprintf(buf, "%03d", pA);
- grx_text(buf, 340, 75, rgb16(0,255,0), rgb16(0,0,0));
- sprintf(buf, "%03d", pC);
- grx_text(buf, 540, 75, rgb16(200,200,255), rgb16(0,0,0));
- val++;
- task_endcycle();
- }
-}
-
-void close_event(void *arg)
-{
- grx_close();
- switch(system){
- case 0: kern_printf("Regular end\n"); break;
- case 10:kern_printf("Cannot create task 'TEST PPI'\n"); break;
- case 20:kern_printf("Pci bus don't find\n"); break;
- case 21:kern_printf("No National board on PC\n"); break;
- case 30:kern_printf("Cannot start graphic envirorment\n"); break;
- default: kern_printf("Unknown exit\n"); break;
- }
-}
-
-void exit_fun(KEY_EVT *k)
-{
- system = 0;
- sys_end();
-}
-
-/*end of file: test_ppi.c*/
Index: start/pci6025e/test_bec.c
===================================================================
--- start/pci6025e/test_bec.c (revision 1087)
+++ start/pci6025e/test_bec.c (nonexistent)
@@ -1,336 +0,0 @@
-/*****************************************************************************
-* Filename: test_bec.c *
-* Author: Marco Ziglioli (Doctor Stein) *
-* Date: 20/06/2001 *
-* Description: Test program for buffered gated event counting using PCI6025E *
-* board *
-*----------------------------------------------------------------------------*
-* Notes: FOUT are enabled to provide a frequency of 6250 Hz. You could *
-* connect PFI3 (pin 41) and PFI6 (pin 45) to this source for counting *
-* edges. Gated counting are enabled and PFI4 (pin 42) is gate pin for *
-* counter 0 and PFI5 (pin 44) is gate pin for counter 0. DIO 7 and 6 *
-* are als configured to switch between 0 and 5 V. Connect DIO 7 to *
-* gate 0 and DIO 6 to gate 1. Use 'g' (counter 0) and 'h' (counter 1) *
-* to change DIO lines value. On left area of the screen you should *
-* see counter while counting and on the right area you should lock *
-* counter values by pressing 's' key. *
-* Notice that line parameters are enabled and accept inital value *
-* for the two counters. If they aren't specified or they are wrong *
-* counters start from 0x00FFFFFF (counter 0 which counts down) and *
-* 0x00000000 (counter 1 which counts up). *
-*****************************************************************************/
-
-/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
- *
- * Copyright (C) 2001 Marco Ziglioli
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <kernel/kern.h>
-#include <drivers/keyb.h>
-#include <drivers/glib.h>
-
-#include <drivers/pci6025e/timer.h>
-#include <drivers/pci6025e/dio_ppi.h>
-
-BYTE sys = 0;
-
-PID show_aper_pid;
-BYTE out = 0x00;
-
-int black = rgb16(0, 0, 0),
- white = rgb16(255, 255, 255);
-
-void endfun(KEY_EVT *);
-void close_event(void *);
-void show_evt(KEY_EVT *k);
-void gate_change(KEY_EVT *k);
-
-void drawInterface(void);
-
-TASK show_per(int);
-TASK show_aper(int);
-
-int main(int argc, char **argv)
-{
- KEY_EVT k;
- SOFT_TASK_MODEL show_per_mod, show_aper_mod;
- PID show_per_pid;
- int result, modenum;
- DWORD init_val_c0, init_val_c1;
-
- if(argc >= 3){
- if( (result = sscanf(argv[1], "%ld", &init_val_c0)) != 1)
- init_val_c0 = 0x00FFFFFF;
- if( (result = sscanf(argv[2], "%ld", &init_val_c1)) != 1)
- init_val_c1 = 0x00000000;
- }
- if(argc == 2){
- if( (result = sscanf(argv[1], "%ld", &init_val_c0)) != 1)
- init_val_c0 = 0x00FFFFFF;
- init_val_c1 = 0x00000000;
- }
- if(argc == 1){
- init_val_c0 = 0x00FFFFFF;
- init_val_c1 = 0x00000000;
- }
-
- sys_atrunlevel(close_event, NULL, RUNLEVEL_BEFORE_EXIT);
-
- k.flag = CNTL_BIT;
- k.scan = KEY_X;
- k.ascii = 'x';
- keyb_hook(k, endfun);
-
- k.flag = CNTR_BIT;
- keyb_hook(k, endfun);
-
- soft_task_default_model(show_aper_mod);
- soft_task_def_aperiodic(show_aper_mod);
- soft_task_def_level(show_aper_mod, 1);
- soft_task_def_period(show_aper_mod, 250000);
- soft_task_def_met(show_aper_mod, 30000);
- soft_task_def_wcet(show_aper_mod, 60000);
- if( (show_aper_pid = task_create("Show aperiodic task", show_aper, &show_aper_mod, NULL)) == NIL ){
- sys = 10;
- sys_end();
- }
-
- k.flag = 0;
- k.scan = KEY_S;
- k.ascii = 's';
- keyb_hook(k, show_evt);
-
- k.flag = 0;
- k.scan = KEY_G;
- k.ascii = 'g';
- keyb_hook(k, gate_change);
-
- k.scan = KEY_H;
- k.ascii = 'h';
- keyb_hook(k, gate_change);
-
- soft_task_default_model(show_per_mod);
- soft_task_def_level(show_per_mod, 1);
- soft_task_def_met(show_per_mod, 1000);
- soft_task_def_period(show_per_mod, 10000);
- if( (show_per_pid = task_create("Show periodic task", show_per, &show_per_mod, NULL)) == NIL){
- sys = 11;
- sys_end();
- }
-
- if(pci_init()==-1){
- sys = 20;
- sys_end();
- }
-
- if(!reMap()){
- sys = 21;
- sys_end();
- }
-
- if(grx_init()==-1){
- sys = 30;
- sys_end();
- }
-
- if( (modenum = grx_getmode(800, 600, 16)) == -1){
- sys = 31;
- sys_end();
- }
-
- grx_setmode(modenum);
-
- drawInterface();
-
- DIO_init();
- DIO_setup(0xFF);
- DIO_write(out);
-
- PFIprogramming(0x0000);
- setIntClock(1, 1, 0);
- TIM_reset(2); //Reset both two counters
-
-
- //Source PFI3(41); Gate PFI 4(42); Down counting; counts rising edge;
- TIM_bufferedEventCounting(C0, 0x04, 0x45, 0x01, init_val_c0);
-
- //Source PFI6(45); Gate PFI 5(44); Up counting; counts rising edge;
- TIM_bufferedEventCounting(C1, 0x87, 0x46, 0x00, init_val_c1);
-
- TIM_arm(2); //Arm both two counters
-
- task_activate(show_per_pid);
-
- return 0;
-}
-
-void drawInterface(void)
-{
- grx_rect(1, 1, 799, 99, rgb16(105, 0, 0));
- grx_rect(2, 2, 798, 98, rgb16(155, 0, 0));
- grx_rect(3, 3, 797, 97, rgb16(205, 0, 0));
- grx_rect(4, 4, 796, 96, rgb16(255, 0, 0));
-
- grx_text("Test program for Buffered Event Counting capacity of PCI6025E timers",
- 7, 10, rgb16(50, 255, 50), black);
-
- grx_text("This program counting rise edges on counters source (PFI3 & PFI6)",
- 7, 18, rgb16(0, 255, 255), black);
- grx_text("Counter 1 will be resetted every gate falling edge",
- 7, 26, rgb16(0, 255, 255), black);
- grx_text("(PFI 42 & 44) are enabled. Frequency Out (FOUT) is enabled and provides a frequency of 6250 Hz",
- 7, 34, rgb16(0, 255, 255), black);
-
- grx_text("Instruction:",7, 43, rgb16(255, 0, 0), black);
- grx_text("Use 's' to watch contents of Hardware save registers updated every time gate goes down",
- 7, 51, rgb16(0, 255, 255), black);
- grx_text("Use 'g' to generate an event on counter 0 gate (see top-left square)",
- 7, 58, rgb16(0, 255, 255), black);
-
- grx_text("Use 'h' to generate an event on counter 1 gate (see bottom-left square)",
- 7, 65, rgb16(0, 255, 255), black);
-
- grx_text("Please connect DIO7 (pin 32) to PFI4 (pin 42) and DIO6 (pin 30) to PFI5 (pin 44)",
- 7, 78, rgb16(0, 255, 0), black);
- grx_text("CTRL-X for Exit", 7, 88, rgb16(200, 200, 0), black);
-
- grx_rect(1, 110, 355, 170, rgb16(0, 105, 0));
- grx_rect(2, 111, 354, 169, rgb16(0, 155, 0));
- grx_rect(3, 112, 353, 168, rgb16(0, 205, 0));
- grx_rect(4, 113, 352, 167, rgb16(0, 255, 0));
- grx_text("Counter 0 evolution", 7, 120, rgb16(255, 255, 0), black);
-
- grx_rect(455, 110, 799, 170, rgb16(0, 105, 0));
- grx_rect(456, 111, 798, 169, rgb16(0, 155, 0));
- grx_rect(457, 112, 797, 168, rgb16(0, 205, 0));
- grx_rect(458, 113, 796, 167, rgb16(0, 255, 0));
- grx_text("Counter 0 locked value", 461, 120, rgb16(255, 0, 255), black);
-
- grx_rect(360, 110, 450, 170, rgb16(0, 105, 0));
- grx_rect(361, 111, 449, 169, rgb16(0, 155, 0));
- grx_rect(362, 112, 448, 168, rgb16(0, 205, 0));
- grx_rect(363, 113, 447, 167, rgb16(0, 255, 0));
- grx_text("Gate0", 367, 120, rgb16(200, 255, 200), black);
- grx_text("0 V", 367, 145, rgb16(255, 0, 0), black);
-
- grx_rect(1, 190, 355, 260, rgb16(85, 85, 255));
- grx_rect(2, 191, 354, 259, rgb16(135, 135, 255));
- grx_rect(3, 192, 353, 258, rgb16(190, 190, 255));
- grx_rect(4, 193, 352, 257, rgb16(230, 239, 255));
- grx_text("Counter 1 evolution", 7, 200, white, black);
-
- grx_rect(455, 190, 799, 260, rgb16(85, 85, 255));
- grx_rect(456, 191, 798, 259, rgb16(135, 135, 255));
- grx_rect(457, 192, 797, 258, rgb16(190, 190, 255));
- grx_rect(458, 193, 796, 257, rgb16(230, 230, 255));
- grx_text("Counter 1 locked value", 461, 200, white, black);
-
- grx_rect(360, 190, 450, 260, rgb16(85, 85, 255));
- grx_rect(361, 191, 449, 259, rgb16(135, 135, 255));
- grx_rect(362, 192, 448, 258, rgb16(190, 190, 255));
- grx_rect(363, 193, 447, 257, rgb16(230, 230, 255));
- grx_text("Gate1", 367, 200, rgb16(255, 200, 255), black);
- grx_text("0 V", 367, 225, rgb16(255, 0, 0), black);
-}
-
-TASK show_per(int none)
-{
- DWORD val;
- char buf[30];
-
- while(1){
- val = TIM_readCounter(C0); //Read from Hardware Save Register
- sprintf(buf, "HEX: %08lx DEC: %08ld", val ,val);
- grx_text(buf, 7, 145, rgb16(255, 0, 0), black);
-
- val = TIM_readCounter(C1); //Read from Hardware Save Register
- sprintf(buf, "HEX: %08lx DEC: %08ld", val ,val);
- grx_text(buf, 7, 225, rgb16(255, 0, 0), black);
-
- task_endcycle();
- }
-}
-
-TASK show_aper(int dummy)
-{
- DWORD val;
- char buf[30];
-
- while(1){
- val = TIM_readHWSaveReg(C0); //Read from Hardware Save Register
- sprintf(buf, "HEX: %08lx DEC: %08ld", val, val);
- grx_text(buf, 461, 145, rgb16(80, 80, 255), black);
-
- val = TIM_readHWSaveReg(C1); //Read from Hardware Save Register
- sprintf(buf, "HEX: %08lx DEC: %08ld", val, val);
- grx_text(buf, 461, 225, rgb16(80, 80, 255), black);
-
- task_endcycle();
- }
-}
-
-void endfun(KEY_EVT *k)
-{
- sys_end();
-}
-
-void show_evt(KEY_EVT *k)
-{
- task_activate(show_aper_pid);
-}
-
-void gate_change(KEY_EVT *k)
-{
- if(k->ascii == 'g'){
- if( (out & 0x80) != 0){
- out &= 0x7F;
- grx_text("0 V", 367, 145, rgb16(255, 0, 0), black);
- } else {
- out |= 0x80;
- grx_text("5 V", 367, 145, rgb16(0, 255, 0), black);
- }
- } else {
- if( (out & 0x40) != 0){
- out &= 0xBF;
- grx_text("0 V", 367, 225, rgb16(255, 0, 0), black);
- } else {
- out |= 0x40;
- grx_text("5 V", 367, 225, rgb16(0, 255, 0), black);
- }
- }
-
- DIO_write(out);
-}
-
-void close_event(void *arg)
-{
- TIM_disarm(2); //Disable both two counters
- grx_close();
-
- switch(sys){
- case 0: cprintf("OK\n"); break;
- case 10: cprintf("Task <show aperiodic> down\n"); break;
- case 11: cprintf("Task <show periodic> down\n"); break;
- case 20: cprintf("No PCI bus\n"); break;
- case 21: cprintf("No National board on PCI bus\n"); break;
- case 30: cprintf("No graphic can be initialized\n"); break;
- case 31: cprintf("This graphic mode cannot be supported\n"); break;
- default: cprintf("???????????\n"); break;
- }
-}
-/* End of file: Test_bec.c */
Index: start/pci6025e/test_dio.c
===================================================================
--- start/pci6025e/test_dio.c (revision 1087)
+++ start/pci6025e/test_dio.c (nonexistent)
@@ -1,184 +0,0 @@
-/*****************************************************************************
-* Filename: Test_dio.c *
-* Author: Marco Ziglioli (Doctor Stein) *
-* Date: 22/03/2001 *
-* Last update: 22/03/2001 *
-* Description: Test STC digital lines (8 lines) *
-*----------------------------------------------------------------------------*
-* Notes: Configure DIO 4 5 6 7 in input and DIO 0 1 2 3 in output *
-* Two way to test this 8 lines: *
-* 1) Connect 4 LEDs to output lines and check LEDs lights *
-* themselves in counting order. Connect input lines to Vcc *
-* or GND and check on video that STC has readed the right *
-* nibble *
-* 2) Connect 4 output lines with 4 input lines and check on *
-* video that the nibble readed by STC change in counting *
-* order *
-*****************************************************************************/
-
-/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
- *
- * Copyright (C) 2001 Marco Ziglioli
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <drivers/glib.h>
-#include <drivers/keyb.h>
-#include <drivers/pci6025e/dio_ppi.h>
-
-BYTE system = 0;
-
-void close_event(void *);
-TASK test_DIO(int dummy);
-void exit_fun(KEY_EVT *);
-void draw_screen(void);
-
-
-int main(int argc, char **argv)
-{
- HARD_TASK_MODEL m;
- KEY_EVT k;
- PID pid_m;
- int modenum;
-
- sys_atrunlevel(close_event, NULL, RUNLEVEL_BEFORE_EXIT);
-
- keyb_set_map(itaMap);
- k.flag = CNTL_BIT;
- k.scan = KEY_C;
- k.ascii = 'c';
- keyb_hook(k, exit_fun);
- k.flag = CNTR_BIT;
- k.scan = KEY_C;
- k.ascii = 'c';
- keyb_hook(k, exit_fun);
-
- hard_task_default_model(m);
- hard_task_def_wcet(m, 90000);
- hard_task_def_mit(m, 250000);
- pid_m = task_create("TEST DIO", test_DIO, &m, NULL);
- if(pid_m == NIL){
- system = 10;
- sys_end();
- }
-
- //Check if PCI bus is present
- if(pci_init() == -1){
- system = 20;
- sys_end();
- }
-
- //Look for a National board on PCI bus
- if(!reMap()){
- system = 21;
- sys_end();
- }
-
- //Start configuring DIO module
- DIO_init();
-
- grx_init();
- modenum = grx_getmode(640, 480, 16);
- if(modenum == -1){
- system = 30;
- sys_end();
- }
- grx_setmode(modenum);
-
- draw_screen();
-
- task_activate(pid_m);
-
- return 0;
-}
-
-void draw_screen(void)
-{
- grx_rect(5, 5, 405, 130, rgb16(255, 0, 0));
- grx_rect(4, 4, 406, 131, rgb16(0,255,255));
- grx_rect(3, 3, 407, 132, rgb16(255, 0, 0));
- grx_rect(15, 45, 195, 100, rgb16(255, 0, 0));
- grx_rect(215, 45, 395, 100, rgb16(0, 255, 0));
- grx_text("Test of PCI6025E DIO function",
- 9, 7, rgb16(0, 255, 0), rgb16(0, 0, 0));
- grx_text("DIO 4-5-6-7 are configured in input mode",
- 9, 20, rgb16(255, 70, 70), rgb16(0, 0, 0));
- grx_text("DIO 0-1-2-3 are configured in output mode",
- 9, 28, rgb16(255, 70, 70), rgb16(0, 0, 0));
- grx_text("Output bits", 35, 50, rgb16(200, 0, 0), rgb16(0, 0, 0));
- grx_text("input bits", 235, 50, rgb16(30,255,30), rgb16(0, 0, 0));
- grx_text("CTRL + C to exit", 9, 115, rgb16(255,255,0), rgb16(0,0,0));
-}
-
-/*
-* At each activation this task change output value of lowest digitals line
-* and read value on highest digital lines, showing them at video
-*/
-TASK test_DIO(int dummy)
-{
- BYTE out_val = 0x00,
- in_val = 0;
- int i;
- char buf[10];
-
- //DIO 0..3 configured as output
- //DIO 4..7 configured as input
- DIO_setup(0x0F);
-
- while(1){
- DIO_write(out_val); //sends out value
- in_val = DIO_read() >> 4; //reads value
-
- for(i=3; i>=0; i--){
- if( (out_val>>i)%2 )
- grx_text("1", 25+10*(3-i), 75, rgb16(255,0,0), rgb16(0,0,0));
- else
- grx_text("0", 25+10*(3-i), 75, rgb16(255,0,0), rgb16(0,0,0));
- if( (in_val>>i)%2 )
- grx_text("1", 225+10*(3-i), 75, rgb16(0,255,0), rgb16(0,0,0));
- else
- grx_text("0", 225+10*(3-i), 75, rgb16(0,255,0), rgb16(0,0,0));
- }
- sprintf(buf, "%03d", out_val);
- grx_text(buf, 80, 75, rgb16(255,0,0), rgb16(0,0,0));
- sprintf(buf, "%03d", in_val);
- grx_text(buf, 280, 75, rgb16(0,255,0), rgb16(0,0,0));
-
- out_val = (out_val+1)%16;
- task_endcycle();
- }
-}
-
-void close_event(void *arg)
-{
- grx_close();
- switch(system){
- case 0: kern_printf("Regular end\n"); break;
- case 10:kern_printf("Cannot create task TEST DIO\n"); break;
- case 20:kern_printf("Pci bus don't find\n"); break;
- case 21:kern_printf("No National board on PC\n"); break;
- case 30:kern_printf("Cannot start graphic envirorment\n"); break;
- default: kern_printf("Unknown exit\n"); break;
- }
-}
-
-void exit_fun(KEY_EVT *k)
-{
- system = 0;
- sys_end();
-}
-
Index: start/pci6025e/readme
===================================================================
--- start/pci6025e/readme (revision 1087)
+++ start/pci6025e/readme (nonexistent)
@@ -1,7 +0,0 @@
-These are the demos available for the National Instruments PCI6025e boards.
-
-These demos and the PCI driver have been made by
-Marco Ziglioli (zi_mar@libero.it). Please send any comments to:
-zi_mar@libero.it or to shark-help@gandalf.sssup.it.
-
-Paolo
Index: start/pci6025e/makefile
===================================================================
--- start/pci6025e/makefile (revision 1087)
+++ start/pci6025e/makefile (nonexistent)
@@ -1,32 +0,0 @@
-#
-#
-# PCI6025E Examples and Test programs
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= test_dac wave test_dio test_ppi test_ec test_bec test_mes test_bms
-
-include $(BASE)/config/example.mk
-
-test_dac:
- make -f $(SUBMAKE) APP=test_dac INIT= OTHEROBJS=initfile.o
-wave:
- make -f $(SUBMAKE) APP=wave INIT= OTHEROBJS=initfile.o
-test_dio:
- make -f $(SUBMAKE) APP=test_dio INIT= OTHEROBJS=initfile.o
-test_ppi:
- make -f $(SUBMAKE) APP=test_ppi INIT= OTHEROBJS=initfile.o
-test_ec:
- make -f $(SUBMAKE) APP=test_ec INIT= OTHEROBJS=initfile.o
-test_bec:
- make -f $(SUBMAKE) APP=test_bec INIT= OTHEROBJS=initfile.o
-test_mes:
- make -f $(SUBMAKE) APP=test_mes INIT= OTHEROBJS=initfile.o
-test_bms:
- make -f $(SUBMAKE) APP=test_bms INIT= OTHEROBJS=initfile.o
-
Index: start/pci6025e/test_bms.c
===================================================================
--- start/pci6025e/test_bms.c (revision 1087)
+++ start/pci6025e/test_bms.c (nonexistent)
@@ -1,279 +0,0 @@
-/*****************************************************************************
-* Filename: test_bms.c *
-* Author: Marco Ziglioli (Doctor Stein) *
-* Date: 27/06/2001 *
-* Description: Test program for buffered period and semiperiod measurement *
-* capacity of National PCI6025E board *
-*----------------------------------------------------------------------------*
-* Notes: FOUT are enable and avaiable on pin 50 to provide 1 Mhz frequency *
-* You should connect source 0 (PIN 41) and source 1 (pin 45) to this *
-* freq source. Gate 0 (pin 42) and gate 1 (pin 44) must be connected *
-* rispectivly to DIO7 (pin 32) and DIO6 (pin 30). *
-* Use 'g' button to activate gate_action_task which generate a square *
-* wave with a freq of 0.5 Hz and Duty cycle of 75%. *
-* 's' button should show counters countent but gate_action_task *
-* when active shows counters content automatically so 's' button isn't*
-* useful. *
-*****************************************************************************/
-
-/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
- *
- * Copyright (C) 2001 Marco Ziglioli
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <kernel/kern.h>
-#include <drivers/keyb.h>
-#include <drivers/glib.h>
-
-#include <drivers/pci6025e/timer.h>
-#include <drivers/pci6025e/dio_ppi.h>
-
-#define SHOW_MET 30000
-#define SHOW_WCET 50000
-#define SHOW_PERIOD 1000000
-
-#define GATE_MET 2000
-#define GATE_WCET 5000
-#define GATE_PERIOD 2000000
-
-#define GATE_ACTION_P 500000
-#define GATE_ACTION_W 10000
-
-#define black rgb16(0, 0, 0)
-
-void endFun(KEY_EVT *);
-void gateEvent(KEY_EVT *);
-void showEvent(KEY_EVT *);
-
-void closeEvent(void *);
-
-void drawInterface(void);
-
-TASK show_val_body(int);
-TASK gate_action_body(int);
-
-BYTE sys = 0;
-PID show_val_pid, gate_action_pid;
-
-int main(int argc, char **argv)
-{
- KEY_EVT k;
- int modenum;
- SOFT_TASK_MODEL show_val_mod;
- HARD_TASK_MODEL gate_action_model;
-
- sys_atrunlevel(closeEvent, NULL, RUNLEVEL_BEFORE_EXIT);
-
- k.flag = CNTL_BIT;
- k.scan = KEY_X;
- k.ascii = 'x';
- keyb_hook(k, endFun);
-
- k.flag = CNTR_BIT;
- keyb_hook(k, endFun);
-
- k.flag = 0;
- k.scan = KEY_G;
- k.ascii = 'g';
- keyb_hook(k, gateEvent);
-
- k.scan = KEY_S;
- k.ascii = 's';
- keyb_hook(k, showEvent);
-
- if(pci_init()==-1){
- sys = 10;
- sys_end();
- }
-
- if(!reMap()){
- sys = 11;
- sys_end();
- }
-
- soft_task_default_model(show_val_mod);
- soft_task_def_aperiodic(show_val_mod);
- soft_task_def_level(show_val_mod, 1);
- soft_task_def_met(show_val_mod, SHOW_MET);
- soft_task_def_wcet(show_val_mod, SHOW_WCET);
- soft_task_def_period(show_val_mod, SHOW_PERIOD);
- if( (show_val_pid = task_create("Show task", show_val_body, &show_val_mod, NULL))
- == NIL ){
- sys = 20;
- sys_end();
- }
-
- hard_task_default_model(gate_action_model);
- hard_task_def_mit(gate_action_model, GATE_ACTION_P);
- hard_task_def_wcet(gate_action_model, GATE_ACTION_W);
- if( (gate_action_pid = task_create("Gate Action", gate_action_body, &gate_action_model, NULL))
- == NIL ){
- sys = 22;
- sys_end();
- }
-
- if(grx_init()==-1){
- sys = 30;
- sys_end();
- }
-
- if( (modenum = grx_getmode(800, 600, 16)) == -1){
- sys = 31;
- sys_end();
- }
-
- if(grx_setmode(modenum) == -1){
- sys = 32;
- sys_end();
- }
-
- drawInterface();
-
- DIO_init();
- DIO_setup(0xFF);
- DIO_write(0x00);
-
- //All PFI configured as input
- PFIprogramming(0x0000);
-
- //Fout provide 1MHz: timebase = 20MHz; divided by 2; on FOUT pin also divided by 10
- setIntClock(0, 1, 10);
-
- //Reset both counters
- TIM_reset(2);
-
- //C0 measures period on PFI3 with gate from PFI 4 driven by DIO7
- TIM_bufferedTimeMeasurement(C0, 0x04, 0x45, 0, 0);
-
- //C1 measures semiperiod on PFI 6 with gate from PFI 5 driven by FIO6
- TIM_bufferedTimeMeasurement(C1, 0x87, 0x46, 1, 0);
-
- //arm both counters
- TIM_arm(2);
-
- return 0;
-}
-
-void endFun(KEY_EVT *k)
-{
- sys_end();
-}
-
-void showEvent(KEY_EVT *k)
-{
- task_activate(show_val_pid);
-}
-
-void gateEvent(KEY_EVT *k)
-{
- task_activate(gate_action_pid);
-}
-
-void drawInterface(void)
-{
- grx_rect(1, 1, 799, 129, rgb16(105, 0, 0));
- grx_rect(2, 2, 798, 128, rgb16(155, 0, 0));
- grx_rect(3, 3, 797, 127, rgb16(205, 0, 0));
- grx_rect(4, 4, 796, 126, rgb16(255, 0, 0));
-
- grx_text("Test program for Buffered Period and Semiperiod measure through PCI6025E timers",
- 7, 10, rgb16(50, 255, 50), black);
-
- grx_text("This program counting rise edges on counters source (PFI3 & PFI6) between two rising",
- 7, 25, rgb16(0, 255, 255), black);
- grx_text("edges on gate (PFI 42) and beetwen each gate edge (PFI44).FOUT is enabled and",
- 7, 33, rgb16(0, 255, 255), black);
- grx_text("provides a frequency of 1 MHz", 7, 41, rgb16(0, 255, 255), black);
- grx_text("Instruction:",7, 53, rgb16(255, 0, 0), black);
- grx_text("Use 's' to see counters value",
- 7, 61, rgb16(0, 255, 255), black);
- grx_text("Use 'g' to enbale automatic tasks which generate square wave with freq of 0.5Hz",
- 7, 68, rgb16(0, 255, 255), black);
-
- grx_text("And duty cycle of 75%. Counter 0 must be loaded with about 2E6 ticks and counter 1",
- 7, 75, rgb16(0, 255, 255), black);
- grx_text("must be loaded alternativly with about 1.5E6 and 0.5E6 ticks",
- 7, 83, rgb16(0, 255, 255), black);
-
- grx_text("Please connect DIO7 (pin 32) to PFI4 (pin 42) and DIO6 (pin 30) to PFI5 (pin 44)",
- 7, 95, rgb16(0, 255, 0), black);
- grx_text("CTRL-X for Exit", 7, 110, rgb16(200, 200, 0), black);
-
- grx_rect(1, 147, 355, 183, rgb16(0, 105, 0));
- grx_rect(2, 148, 354, 182, rgb16(0, 155, 0));
- grx_rect(3, 149, 353, 181, rgb16(0, 205, 0));
- grx_rect(4, 150, 352, 180, rgb16(0, 255, 0));
- grx_text("Period", 7, 155, rgb16(255, 255, 0), black);
-
- grx_rect(455, 147, 799, 183, rgb16(0, 105, 0));
- grx_rect(456, 148, 798, 182, rgb16(0, 155, 0));
- grx_rect(457, 149, 797, 181, rgb16(0, 205, 0));
- grx_rect(458, 150, 796, 180, rgb16(0, 255, 0));
- grx_text("Semiperiod", 461, 155, rgb16(255, 0, 255), black);
-}
-
-TASK show_val_body(int dummy)
-{
- DWORD val;
- char buf[40];
-
- while(1){
- val = TIM_readHWSaveReg(C0);
- sprintf(buf,"C0 %07ld", val);
- grx_text(buf, 7, 165, rgb16(255, 0, 0), rgb16(0, 0, 0));
- val = TIM_readHWSaveReg(C1);
- sprintf(buf,"C1 %07ld", val);
- grx_text(buf, 461, 165, rgb16(0, 255, 0), rgb16(0, 0, 0));
-
- task_endcycle();
- }
-}
-
-TASK gate_action_body(int dummy)
-{
- int i;
- i = 0;
-
- while(1){
- if( (i%4)==0 ) DIO_write(0xC0);
- if( (i%4)==3 ) DIO_write(0x00);
-
- i++;
-
- task_activate(show_val_pid);
-
- task_endcycle();
- }
-}
-
-void closeEvent(void *arg)
-{
- grx_close();
- TIM_disarm(2);
- switch(sys){
- case 0: cprintf("Ok\n"); break;
- case 10: cprintf("No PCI\n"); break;
- case 11: cprintf("No National Board\n"); break;
- case 20: cprintf("task <show val> down\n"); break;
- case 22: cprintf("task <gate action> down\n"); break;
- case 30: cprintf("Cannot initialize grx\n"); break;
- case 31: cprintf("Resolution 800x600x16 not supported\n"); break;
- case 32: cprintf("Cannot sets up graphic envirorment\n"); break;
- default: cprintf("????????????\n"); break;
- }
-}
Index: start/pci6025e/wave.c
===================================================================
--- start/pci6025e/wave.c (revision 1087)
+++ start/pci6025e/wave.c (nonexistent)
@@ -1,328 +0,0 @@
-/*****************************************************************************
-* Filename: wave.c *
-* Author: Marco Ziglioli (Doctor Stein) *
-* Date: 12/06/2001 *
-* Description: Little test program for Analog Output section of PCI6025E *
-*----------------------------------------------------------------------------*
-* Notes: Connect an oscilloscope to DACs output pins (20 & 21) and *
-* watch the waveforms. *
-* and decrise voltage *
-*****************************************************************************/
-
-/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
- *
- * Copyright (C) 2001 Marco Ziglioli
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-
-#include <drivers/glib.h>
-#include <drivers/keyb.h>
-#include <modules/sem.h>
-
-#include <drivers/pci6025e/dac.h>
-
-#define MAX_VAL 500
-
-#define WAVE_PERIOD 1000
-#define WAVE_WCET 200
-#define GRAPH_PERIOD 1000
-#define GRAPH_WCET 550
-
-#define TASK_GROUP 1
-
-#define DAC0_CONV 0.1
-#define DAC1_CONV 0.05
-
-#define INC 40
-
-void createWaves(void);
-void drawInterface(void);
-
-void endfun(KEY_EVT *);
-void close_event(void *);
-
-TASK wave_body(int);
-TASK video_body(int);
-
-WORD wave0[MAX_VAL], wave1[MAX_VAL];
-int black = rgb16(0,0,0),
- white = rgb16(255, 255, 255);
-
-BYTE sys = 0;
-
-int main(int argc, char **argv)
-{
- KEY_EVT k;
- HARD_TASK_MODEL wave0, wave1;
- HARD_TASK_MODEL video;
- PID wave0_pid, wave1_pid, video_pid;
- int modenum;
-
- k.flag = CNTR_BIT;
- k.scan = KEY_X;
- k.ascii = 'x';
- keyb_hook(k, endfun);
-
- k.flag = CNTL_BIT;
- keyb_hook(k, endfun);
-
- sys_atrunlevel(close_event, NULL, RUNLEVEL_BEFORE_EXIT);
-
- hard_task_default_model(wave0);
- hard_task_def_wcet(wave0, WAVE_WCET);
- hard_task_def_mit(wave0, WAVE_PERIOD);
- hard_task_def_arg(wave0, 0);
- hard_task_def_group(wave0, TASK_GROUP);
- if( (wave0_pid = task_create("Wave 0", wave_body, &wave0, NULL)) == NIL ){
- sys = 10;
- sys_end();
- }
-
- hard_task_default_model(wave1);
- hard_task_def_wcet(wave1, WAVE_WCET);
- hard_task_def_mit(wave1, WAVE_PERIOD);
- hard_task_def_arg(wave1, (void *)1);
- hard_task_def_group(wave1, TASK_GROUP);
- if( (wave1_pid = task_create("Wave 1", wave_body, &wave1, NULL)) == NIL ){
- sys = 11;
- sys_end();
- }
-
- hard_task_default_model(video);
- hard_task_def_wcet(video, GRAPH_WCET);
- hard_task_def_mit(video, GRAPH_PERIOD);
- hard_task_def_group(video, TASK_GROUP);
- if( (video_pid = task_create("Video task", video_body, &video, NULL))
- == NIL ){
- sys = 12;
- sys_end();
- }
-
- if(pci_init() == -1){
- sys = 20;
- sys_end();
- }
-
- if(!reMap()){
- sys = 21;
- sys_end();
- }
-
- if(grx_init() == -1){
- sys = 30;
- sys_end();
- }
-
- if( (modenum = grx_getmode(800, 600, 16)) == -1 ){
- sys = 31;
- sys_end();
- }
-
- grx_setmode(modenum);
-
- createWaves();
- drawInterface();
- //Analog output section set up
- DAC_Init();
-
- /*
- *AI_TIMEBASE div by 2; OUT_TIMEBASE div by 2; single DAC mode
- *TMRDACWR = 3 OUT_TIMEBASE period; FIFO flags polarity active low
- *TMRDACWR disabled; DMA PIO control = FIFO DATA interface mode
- *UPDATE signal timebase = AO_UPDATE pulse width
- *UPDATE pulsewidth = 3-3.5 OUT_TIMEBASE period
- *UPDATE signal polarity = HIGH Z
- */
- DAC_boardInit(0x02, 0x4000);
-
- /*
- *LDAC0 source = UPDATE
- *DAC0 update immediately
- *LDAC1 source = UPDATE
- *DAC1 update immediately
- */
- DAC_LDACSourceUpdate(0x00);
- //End of Analog output section setup
-
-
- group_activate(TASK_GROUP);
-
- return 0;
-}
-
-void endfun(KEY_EVT *k)
-{
- sys_end();
-}
-
-void close_event(void *arg)
-{
- grx_close();
- switch(sys){
- case 0: cprintf("Regular End!\n"); break;
- case 10: cprintf("Cannot create <wave 0> task!\n"); break;
- case 11: cprintf("Cannot create <wave 1> task!\n"); break;
- case 12: cprintf("Cannot create <video> task!\n"); break;
- case 20: cprintf("No PCI bus found!\n"); break;
- case 21: cprintf("No NATIONAL PCI E-Series board found on PCI bus!\n");
- break;
- case 30: cprintf("Cannot start graphic envirorment!\n"); break;
- case 31: cprintf("800x600x16 video mode not supported!\n");
- default: cprintf("Unknown exit event!\n"); break;
- }
-}
-
-/*
-* Wave's samples generation
-*/
-void createWaves(void)
-{
- int i;
- WORD value0, value1;
- BYTE direction;
-
- /* Wave0
- * * * * * * * *
- ** ** ** ** ** ** ** **
- * ** * * ** ** ** ** ** *
- * * ** * * * * * *
- --------------------------...
-
- Wave 1
- * *
- * * * *
- * * * *
- * * * *
- -------*-------*-------*--...
- * * *
- * * *
- * *
- * */
-
- value0 = 0;
- value1 = 0;
- direction = 0;
- for(i=0; i<MAX_VAL; i++){
- wave0[i] = (value0 & 0x0FFF);
- wave1[i] = (value1 & 0x0FFF);
-
- value0 = (value0 + INC) % 2000;
- if(!direction) value1 += INC;
- else value1 -= INC;
-
- if(value1 >= 2000) direction = 1;
- if(value1 <= -2000) direction = 0;
- }
-}
-
-void drawInterface(void)
-{
- int i;
-
- grx_rect(1, 1, 799, 69, rgb16(105, 0, 105));
- grx_rect(2, 2, 798, 68, rgb16(155, 0, 155));
- grx_rect(3, 3, 797, 67, rgb16(205, 0, 205));
- grx_rect(4, 4, 796, 66, rgb16(255, 0, 255));
-
- grx_text("Test program for Analog output section of PCI6025E",
- 7, 10, rgb16(50, 255, 50), black);
- grx_text("DAC0 and DAC1 should generate saw-toothed wave and triangular wave",
- 7, 33, rgb16(0, 255, 255), black);
- grx_text("Use an oscilloscope to test this software",
- 7, 40, rgb16(0, 255, 255), black);
-
- grx_text("CTRL-X for Exit", 7, 55, rgb16(200, 200, 0), black);
-
- grx_text("DAC 0", 100, 92, rgb16(200, 200, 0), black);
- grx_rect(1, 100, 799, 325, rgb16(0, 105, 0));
- grx_rect(2, 101, 798, 324, rgb16(0, 155, 0));
- grx_rect(3, 102, 797, 323, rgb16(0, 205, 0));
- grx_rect(4, 103, 796, 322, rgb16(0, 255, 0));
- grx_line(19, 115, 19, 320, white);
- grx_line(14, 315, 530, 315, white);
-
- grx_text("DAC 1", 100, 362, rgb16(200, 200, 0), black);
- grx_rect(1, 370, 799, 595, rgb16(105, 0, 0));
- grx_rect(2, 371, 798, 594, rgb16(155, 0, 0));
- grx_rect(3, 372, 797, 593, rgb16(205, 0, 0));
- grx_rect(4, 373, 796, 592, rgb16(255, 0, 0));
- grx_line(19, 385, 19, 585, white);
- grx_line(14, 485, 530, 485, white);
-
- for(i=22; i<530; i+=2){
- //DAC0
- grx_plot(i, 115, white);
- grx_plot(i, 215, white);
- //DAC1
- grx_plot(i, 385, white);
- grx_plot(i, 435, white);
- grx_plot(i, 535, white);
- grx_plot(i, 585, white);
- }
-
- grx_text("5 V", 540, 211, rgb16(0, 255, 0), black);
- grx_text("10 V", 540, 111, rgb16(0, 255, 0), black);
- grx_text("+5 V", 540, 431, rgb16(0, 255, 0), black);
- grx_text("+10 V", 540, 381, rgb16(0, 255, 0), black);
- grx_text("-5 V", 540, 531, rgb16(255, 0, 0), black);
- grx_text("-10 V", 540, 581, rgb16(255, 0 , 0), black);
-}
-
-/*
-* Sends out waves' samples
-*/
-TASK wave_body(int wv)
-{
- int i = 0;
- while(1){
- if(wv)
- DAC_output(DAC1, wave1[i]);
- else
- DAC_output(DAC0, wave0[i]);
-
- i = (i + 1) % 500;
- task_endcycle();
- }
-}
-
-/*
-* Shows wave on screen
-*/
-TASK video_body(int dummy)
-{
- int i = 0;
- int n_tmp, o_tmp;
- //char buf[10];
-
- while(1){
- o_tmp = n_tmp;
- if( (wave1[i] & 0x0800) != 0 ) n_tmp = wave1[i]-0x0FFF;
- else n_tmp = wave1[i];
-
- if(i>0){
- grx_line(19+i, 314-wave0[i-1]*DAC0_CONV,
- 20+i, 314-wave0[i]*DAC0_CONV, rgb16(255, 255, 0));
- grx_line(19+i, 485-o_tmp*DAC1_CONV,
- 20+i, 485-n_tmp*DAC1_CONV, rgb16(0, 255, 255));
- }
-
- i = (i + 1) % 500;
- task_endcycle();
- }
-}
Index: start/pci6025e/initfile.c
===================================================================
--- start/pci6025e/initfile.c (revision 1087)
+++ start/pci6025e/initfile.c (nonexistent)
@@ -1,63 +0,0 @@
-/*
-* Filename: Initfile.c
-* Author: Marco Ziglioli (Doctor Stein)
-* Date: (I don't remeber... I'm sorry)
-* Description: this file is the same for every examples in this section
-*/
-
-/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
- *
- * Copyright (C) 2001 Marco Ziglioli
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <kernel/kern.h>
-#include <modules/edf.h>
-#include <modules/cbs.h>
-#include <modules/rr.h>
-#include <modules/hartport.h>
-#include <modules/dummy.h>
-#include <modules/sem.h>
-
-#include <drivers/keyb.h>
-
-#define TICK 1000
-#define RRTICK 5000
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- EDF_register_level(EDF_ENABLE_ALL);
- CBS_register_level(CBS_ENABLE_ALL, 0);
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- dummy_register_level();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- HARTPORT_init();
- KEYB_init(NULL);
-
- __call_main__(mb);
-
- return (void *)0;
-}
Index: start/pci6025e/test_mes.c
===================================================================
--- start/pci6025e/test_mes.c (revision 1087)
+++ start/pci6025e/test_mes.c (nonexistent)
@@ -1,290 +0,0 @@
-/*****************************************************************************
-* Filename: test_mes.c *
-* Author: Marco Ziglioli (Doctor Stein) *
-* Date: 25/06/2001 *
-* Description: Test file for single period and pulsewidth measurement feature*
-* of PCI6025E timers/counters *
-*----------------------------------------------------------------------------*
-* Notes: board is configured to provide a frequency of 1 MHZ through its FOUT*
-* pin (50). PFI3 (41) and PFI6 (45) are configured like source pins *
-* counter 0 and counter 1. PFI4 (42) and PFI 5(44) are the gates for *
-* the two counters. Please connect DIO7(32) to PFI4 and DIO6(30) to *
-* PFI 5. *
-* With 'g' key a task is started which generate a square wave on DIO7 *
-* with a period of 2 secs. With 'h' key the same square wave is *
-* generated on DIO6. *
-* When measurement is performed data are stored into Hardware Save *
-* Registers: use key 's' to show this values *
-*****************************************************************************/
-
-
-/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
- *
- * Copyright (C) 2001 Marco Ziglioli
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-#include <kernel/kern.h>
-#include <drivers/keyb.h>
-#include <drivers/glib.h>
-
-#include <drivers/pci6025e/timer.h>
-#include <drivers/pci6025e/dio_ppi.h>
-
-#define TASK_MET 20000
-#define TASK_WCET 50000
-#define TASK_PERIOD 100000
-
-#define PERIOD 1000000
-
-void endFun(KEY_EVT *);
-void gateEvent(KEY_EVT *);
-
-void drawInterface(void);
-void closeEvent(void *);
-
-TASK show_body(int);
-TASK gate_body(int);
-
-BYTE sys = 0;
-PID c0_gate_pid, c1_gate_pid, show_pid;
-int black = rgb16(0, 0, 0);
-
-int main(int argc, char **argv)
-{
- KEY_EVT k;
- int modenum;
- SOFT_TASK_MODEL show_model;
- HARD_TASK_MODEL gating;
-
- sys_atrunlevel(closeEvent, NULL, RUNLEVEL_BEFORE_EXIT);
-
- k.flag = CNTL_BIT;
- k.scan = KEY_X;
- k.ascii = 'x';
- keyb_hook(k, endFun);
-
- k.flag = CNTR_BIT;
- keyb_hook(k, endFun);
-
- k.flag = 0;
- k.scan = KEY_G;
- k.ascii = 'g';
- keyb_hook(k, gateEvent);
-
- k.scan = KEY_H;
- k.ascii = 'h';
- keyb_hook(k, gateEvent);
-
- k.scan = KEY_S;
- k.ascii = 's';
- keyb_hook(k, gateEvent);
-
- if(pci_init()==-1){
- sys = 10;
- sys_end();
- }
-
- if(!reMap()){
- sys = 11;
- sys_end();
- }
-
- soft_task_default_model(show_model);
- soft_task_def_level(show_model, 1);
- soft_task_def_met(show_model, TASK_MET);
- soft_task_def_wcet(show_model, TASK_WCET);
- soft_task_def_aperiodic(show_model);
- soft_task_def_period(show_model, TASK_PERIOD);
- if( (show_pid = task_create("Show task", show_body, &show_model, NULL))
- == NIL ){
- sys = 20;
- sys_end();
- }
-
- hard_task_default_model(gating);
- hard_task_def_mit(gating, PERIOD);
- hard_task_def_wcet(gating, 20000);
- hard_task_def_arg(gating, C0);
- if( (c0_gate_pid = task_create("C0 Gate task", gate_body, &gating, NULL)) == NIL ){
- sys = 21;
- sys_end();
- }
-
- hard_task_def_arg(gating, (void *)C1);
- if( (c1_gate_pid = task_create("C1 Gate task", gate_body, &gating, NULL)) == NIL ){
- sys = 22;
- sys_end();
- }
-
- if(grx_init()==-1){
- sys = 30;
- sys_end();
- }
-
- if( (modenum = grx_getmode(800, 600, 16)) == 0 ){
- sys = 31;
- sys_end();
- }
-
- grx_setmode(modenum);
- drawInterface();
- //Enable DIO to manage gates
- DIO_init();
- DIO_setup(0xFF);
- DIO_write(0x00);
-
- //All PFI configured as input
- PFIprogramming(0x0000);
- //Fout provide 1MHz: timebase = 20MHz; divided by 2; on FOUT pin also divided by 10
- setIntClock(0, 1, 10);
-
- //Reset both counters
- TIM_reset(2);
-
- //Source PFI3(41); Gate PFI 4(42); Measure period
- TIM_timeMeasurement(C0, 0x04, 0x45, 0, 0x00, 0);
-
- //Source PFI6(45); Gate PFI 5(44); Measure pulsewidth
- TIM_timeMeasurement(C1, 0x87, 0x46, 1, 0x00, 0);
-
- //Arm both counter
- TIM_arm(2);
-
- return 0;
-}
-
-TASK show_body(int dummy)
-{
- DWORD val;
- char buf[20];
-
- while(1){
- val = TIM_readHWSaveReg(C0);
- sprintf(buf, "%ld", val);
- grx_text(buf, 600, 471, rgb16(0, 255, 0), black);
- val = TIM_readHWSaveReg(C1);
- sprintf(buf, "%ld", val);
- grx_text(buf, 200, 471, rgb16(255, 0, 0), black);
-
- task_endcycle();
- }
-}
-
-TASK gate_body(int counter)
-{
- BYTE out;
-
- if(counter == C0) out = 0x80;
- else out = 0x40;
-
- while(1){
- DIO_write(out);
- if(counter == C0){
- if(out) out = 0x00;
- else out = 0x80;
- } else {
- if(out) out = 0x40;
- else out = 0x00;
- }
-
- task_endcycle();
- }
-}
-
-void drawInterface(void)
-{
- grx_rect(1, 1, 799, 120, rgb16(105, 0, 0));
- grx_rect(2, 2, 798, 119, rgb16(155, 0, 0));
- grx_rect(3, 3, 797, 118, rgb16(205, 0, 0));
- grx_rect(4, 4, 796, 117, rgb16(255, 0, 0));
-
- grx_text("Test program for single period and pulsewidth measurement features",
- 7, 10, rgb16(200, 200, 0), black);
-
- grx_text("This program measures single period and pulsewidth of a square wave",
- 7, 20, rgb16(0, 255, 0), black);
- grx_text("with frequency of 0.5 Hz", 7, 28, rgb16(0, 255, 0), black);
- grx_text("Please connect PFI3 & PFI6 (41 & 45) to FOUT pin (50) or to 1Mhz frequency source",
- 7, 40, rgb16(255, 0, 0), black);
- grx_text("Connect also DIO7 (32) to PFI4 (42) and DIO6 to PFI5 (44)",
- 7, 48, rgb16(255, 0, 0), black);
- grx_text("Commands:", 7, 60, rgb16(0, 120, 0), black);
- grx_text("Use 'g' to start wave generation on DIO7",
- 7, 70, rgb16(0, 255, 255), black);
- grx_text("Use 'h' to start wave generation on DIO6",
- 7, 78, rgb16(0, 255, 255), black);
- grx_text("Use 's' to show Hardware Save Registers content",
- 7, 86, rgb16(0, 255, 255), black);
- grx_text("CTRL-X to exit", 7, 105, rgb16(255, 255, 0), black);
-
- grx_rect(197, 127, 603, 423, rgb16(0, 255, 0));
- grx_rect(198, 128, 602, 422, rgb16(0, 205, 0));
- grx_rect(199, 129, 601, 421, rgb16(0, 155, 0));
- grx_rect(200, 130, 600, 420, rgb16(0, 105, 0));
- grx_line(215, 405, 215, 150, rgb16(255, 255, 255));
- grx_line(210, 400, 580, 400, rgb16(255, 255, 255));
- grx_line(220, 395, 220, 170, rgb16(0, 0, 255));
- grx_line(220, 170, 390, 170, rgb16(0, 0, 255));
- grx_line(390, 170, 390, 395, rgb16(0, 0, 255));
- grx_line(390, 395, 560, 395, rgb16(0, 0, 255));
- grx_line(220, 150, 560, 150, rgb16(0, 255, 0));
- grx_line(220, 155, 390, 155, rgb16(255, 0, 0));
-
- grx_rect(1, 450, 390, 503, rgb16(105, 0, 0));
- grx_rect(2, 451, 389, 502, rgb16(155, 0, 0));
- grx_rect(3, 452, 388, 501, rgb16(205, 0, 0));
- grx_rect(4, 453, 387, 500, rgb16(255, 0, 0));
- grx_text("Pulsewidth: [us]", 7, 471, rgb16(255, 0, 0), black);
-
- grx_rect(410, 450, 799, 503, rgb16(105, 0, 0));
- grx_rect(411, 451, 798, 502, rgb16(155, 0, 0));
- grx_rect(412, 452, 797, 501, rgb16(205, 0, 0));
- grx_rect(413, 453, 796, 500, rgb16(255, 0, 0));
- grx_text("Period: [us]", 416, 471, rgb16(0, 255, 0), black);
-}
-
-void endFun(KEY_EVT *k)
-{
- sys_end();
-}
-
-void gateEvent(KEY_EVT *k)
-{
- if(k->scan == KEY_G) task_activate(c0_gate_pid);
- if(k->scan == KEY_H) task_activate(c1_gate_pid);
- if(k->scan == KEY_S) task_activate(show_pid);
-}
-
-void closeEvent(void *arg)
-{
- TIM_disarm(2);
- grx_close();
-
- switch(sys){
- case 0: cprintf("OK\n"); break;
- case 10: cprintf("No PCI bus found\n"); break;
- case 11: cprintf("No NATIONAL board found\n"); break;
- case 20: cprintf("task <show value> down!!\n"); break;
- case 21: cprintf("task <C0 gate manage> down!!!\n"); break;
- case 22: cprintf("task <C1 gate manage> down!!!\n"); break;
- case 30: cprintf("Cannot init graphic envirorment\n"); break;
- case 31: cprintf("graphic mode 800x600x16 not supported\n"); break;
- default: cprintf("???????????????\n"); break;
- }
-}
Index: start/mix/mix.dat
===================================================================
--- start/mix/mix.dat (revision 1087)
+++ start/mix/mix.dat (nonexistent)
@@ -1,12 +0,0 @@
-TASK NAME PERIOD WCET
-------------------------------------------
-task1 watch: 1000000 200
-task2 tasto: 2000 200
-task3 palla: 2000 200
-task4 mosca: 20000 200
-task5 infor: 20000 300
-task6 ruota: 5000 400
-task7 color: 2000 200
-task8 pendo: 5000 400
-------------------------------------------
-
Index: start/mix/initfile.c
===================================================================
--- start/mix/initfile.c (revision 1087)
+++ start/mix/initfile.c (nonexistent)
@@ -1,124 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- ------------
- CVS : $Id: initfile.c,v 1.1.1.1 2002-09-02 09:37:45 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:45 $
- ------------
-
- System initialization file
-
- This file contains the 2 functions needed to initialize the system.
-
- These functions register the following levels:
-
- an EDF (Earliest Deadline First) level
- a RR (Round Robin) level
- a CBS (Costant Bandwidth Server) level
- a Dummy level
-
- It can accept these task models:
-
- HARD_TASK_MODEL (wcet+mit) at level 0
- SOFT_TASK_MODEL (met, period) at level 1
- NRT_TASK_MODEL at level 2
-
- This file is similar to the configuration of kernel/init/hartik3.c
-
- TICK is set to 0 (one-shot timer is used)
-*/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-#include "modules/rr.h"
-#include "modules/dummy.h"
-
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "modules/cabs.h"
-
-#include "drivers/keyb.h"
-
-
-/*+ sysyem tick in us +*/
-#define TICK 0
-
-/*+ RR tick in us +*/
-#define RRTICK 10000
-
-void read_file();
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- EDF_register_level(0);
- CBS_register_level(0, 0);
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- dummy_register_level();
-
- SEM_register_module();
-
- CABS_register_module();
-
- read_file();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- KEYB_PARMS kparms = BASE_KEYB;
-
- HARTPORT_init();
-
- keyb_def_ctrlC(kparms, NULL);
- keyb_def_map(kparms,itaMap);
- KEYB_init(&kparms);
-
- __call_main__(mb);
-
- return (void *)0;
-}
-
Index: start/mix/readme
===================================================================
--- start/mix/readme (revision 1087)
+++ start/mix/readme (nonexistent)
@@ -1,7 +0,0 @@
-MIX
----
-
-This simple applications is a pout-pourri of simple graphic tasks
-that does different things with different timing constraints...
-
-Paolo
\ No newline at end of file
Index: start/mix/makefile
===================================================================
--- start/mix/makefile (revision 1087)
+++ start/mix/makefile (nonexistent)
@@ -1,16 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= mix
-
-include $(BASE)/config/example.mk
-
-mix:
- make -f $(SUBMAKE) APP=mix INIT= OTHEROBJS="initfile.o" OTHERINCL=
-
Index: start/mix/mix.c
===================================================================
--- start/mix/mix.c (revision 1087)
+++ start/mix/mix.c (nonexistent)
@@ -1,762 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- ------------
- CVS : $Id: mix.c,v 1.1.1.1 2002-09-02 09:37:45 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:45 $
- ------------
-*/
-
-/*
- * Copyright (C) 2000 Giorgio Buttazzo and Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*--------------------------------------------------------------*/
-/* DEMO with 9 INDEPENDENT TASKS */
-/*--------------------------------------------------------------*/
-
-#include <kernel/kern.h>
-#include <drivers/glib.h>
-#include <drivers/keyb.h>
-#include <semaphore.h>
-#include <stdlib.h>
-#include <math.h>
-
-#define PIG 3.1415
-#define ESC 27 /* ASCII code for ESCAPE */
-#define DURATA 10000 /* counter duration in tick */
-
-#define LW 200 /* window length */
-#define HW 150 /* window height */
-#define HLOAD 30 /* Y level for the max load */
-#define LLOAD (HW-HLOAD-5) /* length for the max load */
-
-#define XWL 10 /* left X of LEFT window */
-#define XWM 220 /* left X of MIDDLE window */
-#define XWR 430 /* left X RIGHT window */
-
-#define YWH 5 /* top Y of HIGH window */
-#define YWM 165 /* top Y of MIDDLE window */
-#define YWL 325 /* top Y of LOW window */
-
-char fbuf[1000]; /* buffer for reading a file */
-int flen; /* file length */
-int fine = 0; /* ending flag */
-
-sem_t mx_mat, mx_grf; /* mutex semaphores */
-
-int wcet[10]; /* array of task wcets */
-int period[10]; /* array of task periods */
-double load(long); /* load evaluation function */
-
-PID ptas;
-char talk[5][25] = {" SHARK Demonstration ",
- " RETIS Lab -- Scuola ",
- " Superiore S. Anna ",
- " HARD REAL-TIME DEMO ",
- " June 5, 2001 "};
-
-/*------------------------------------------------------*/
-/* file reading */
-/*------------------------------------------------------*/
-
-void read_file(void)
-{
- int err;
- DOS_FILE *fp;
-
- fp = DOS_fopen("mix.dat","r");
-
- if (!fp) {
- err = DOS_error();
- cprintf("Error %d opening myfile.txt...\n", err);
- flen = 0;
- return;
- }
-
- flen = DOS_fread(&fbuf, 1, 1000, fp);
- cprintf("Read %d bytes from file\n", flen);
- DOS_fclose(fp);
-}
-
-/*------------------------------------------------------*/
-/* get data from buffer */
-/*------------------------------------------------------*/
-
-void get_par(void)
-{
- int x = 0;
- int i;
-
- for (i=1; i<=8; i++) {
- while ((fbuf[x] != ':') && (x < flen)) x++;
- x++;
- sscanf(&fbuf[x], "%d %d", &period[i], &wcet[i]);
- cprintf("per[%d] = %d, wcet[%d] = %d\n",
- i, period[i], i, wcet[i]);
- }
-}
-
-/*--------------------------------------------------------------*/
-
-void byebye()
-{
- grx_close();
- kern_printf("Bye Bye!\n");
-}
-
-/*--------------------------------------------------------------*/
-
-void finish1()
-{
- sys_end();
-}
-
-/*--------------------------------------------------------------*/
-
-void finish2()
-{
- fine = 1;
-}
-
-/****************************************************************/
-/* PROCESSO OROLOGIO */
-/****************************************************************/
-
-#define LLAN 40 /* length of watch stick */
-
-TASK watch()
-{
- int x0 = XWL + LW/2;
- int y0 = YWH + HW/2;
- int grad;
- int xg, yg;
- int xt, yt, d;
- int sec, min;
- char s[5];
- double rad, x, y;
-
- xg = x0;
- yg = y0 - LLAN;
- xt = XWL + 78;
- yt = YWH + 12;
- sec = min = 0;
-
- while (1) {
- sec = (sec + 1) % 60;
- if (sec == 0) min++;
- grad = 90 - sec * 6;
- rad = (double)grad * PIG / 180.;
-
- sem_wait(&mx_mat);
- x = (double)x0 + (double)LLAN * cos(rad);
- y = (double)y0 - (double)LLAN * sin(rad);
- sem_post(&mx_mat);
-
- sem_wait(&mx_grf);
- grx_line(x0, y0, xg, yg, 0);
- sem_post(&mx_grf);
-
- xg = x;
- yg = y;
-
- sem_wait(&mx_grf);
- grx_line(x0, y0, xg, yg, 14);
- sem_post(&mx_grf);
-
- sem_wait(&mx_grf);
- grx_text("0 :0 ", xt, yt, 14, 0);
- sprintf(s, "%d", min);
- grx_text(s, xt+8, yt, 14, 0);
- sprintf(s, "%d", sec);
- if (sec > 9) d = 24; else d = 32;
- grx_text(s, xt+d, yt, 14, 0);
- sem_post(&mx_grf);
-
- task_endcycle();
- }
-}
-
-/****************************************************************/
-/* PROCESSO DI RIEMPIMENTO */
-/****************************************************************/
-
-#define CIMA (YWH+5) /* fondo del recipiente */
-#define FONDO (YWH+HW-5) /* cima del recipiente */
-#define LREC (XWM+75) /* lato sinistro recipiente */
-#define DREC 50 /* diametro del recipiente */
-
-TASK tasto()
-{
- int x, y;
- int x0; /* coord. sinistra recipiente */
- int col, cliq, bkg;
- int i;
- int liv; /* livello del liquido */
-
- cliq = 9;
- bkg = 14;
- x0 = LREC;
- x = x0 + DREC/2;
- y = CIMA;
- liv = FONDO;
-
- while (1) {
-
- col = cliq;
- for (i=0; i<2; i++) { /* disegna goccia */
- while (y < liv) {
- sem_wait(&mx_grf);
- grx_plot(x,y,col);
- sem_post(&mx_grf);
- y++;
- }
- y = CIMA;
- col = bkg;
- }
-
- liv--;
- sem_wait(&mx_grf);
- grx_line(x0+1, liv, x0+DREC-1, liv, cliq);
- sem_post(&mx_grf);
-
- if (liv <= CIMA+1) { /* swap colors */
- i = bkg; bkg = cliq; cliq = i;
- liv = FONDO;
- }
-
- task_endcycle();
- }
-}
-
-/****************************************************************/
-
-void kboar()
-{
- task_activate(ptas);
-}
-
-/****************************************************************/
-/* PROCESSO PALLA */
-/****************************************************************/
-
-#define VMIN 11. /* velocit… minima per suono */
-#define LP 3 /* lato della pallina */
-
-TASK palla()
-{
- int ox, oy; /* vecchia posizione pallina */
- int x0; /* posizione iniziale pallina */
- int xmin, xmax;
- int base, top;
- int xg, yg; /* coordinate grafiche pallina */
- double x, y; /* coordinate pallina */
- double G = 9.8;
- double vx, vy, v0; /* velocit… della pallina */
- double t, tx; /* variabile temporale */
- double dt; /* incremento temporale */
- double arg; /* variabile di appoggio */
-
- xmin = XWR+LP+1;
- xmax = XWR+LW-LP-1;
- base = YWH+HW-LP-1;
- top = HW-10-LP;
- x = ox = x0 = xmin;
- y = oy = top;
- arg = 2.*G*(double)top;
- vy = v0 = sqrt(arg);
- vx = 15.;
- tx = 0.0;
- t = vy / G;
- dt = .02;
-
- while (1) {
- x = x0 + vx*tx;
- y = base - vy*t + .5*G*t*t;
- if (y >= base) {
- t = 0.0;
- vy = v0;
- y = base - vy*t + .5*G*t*t;
- }
- if (x >= xmax) {
- tx = 0.0;
- x0 = xmax;
- vx = -vx;
- x = x0 + vx*tx;
- }
- if (x <= xmin) {
- tx = 0.0;
- x0 = xmin;
- vx = -vx;
- x = x0 + vx*tx;
- }
- xg = x; yg = y;
- sem_wait(&mx_grf);
- grx_disc(ox,oy,LP,0);
- grx_disc(xg,yg,LP,10);
- sem_post(&mx_grf);
- oy = yg; ox = xg;
- t += dt;
- tx += dt;
- task_endcycle();
- }
-}
-
-/****************************************************************/
-/* PROCESSO MOSCA */
-/****************************************************************/
-
-TASK mosca()
-{
- int x, y, Ax, Ay, h;
- int x0, y0, tet;
- int xmax,ymax;
- double A, B;
- double r;
- double rnd;
-
- xmax = LW/2-1; ymax = HW/2-1;
- x = 0; y = 0; tet = 0;
- x0 = XWL+LW/2; y0 = YWM+HW/2;
- A = 5.; B = 30.;
-
- while (1) {
-
- rnd = (rand()%100)/100.; /* rnd = [0,1] */
- h = (2. * B * rnd) - B; /* h = [-B,B] */
- tet = tet + h;
-
- if (tet > 360) tet = tet - 360;
- if (tet < 0) tet = tet + 360;
- r = tet * PIG / 180.;
-
- sem_wait(&mx_mat);
- Ax = (double)(A * cos(r));
- Ay = (double)(A * sin(r));
- sem_post(&mx_mat);
- x = x + Ax;
- y = y + Ay;
-
- if ((x >= xmax) || (x <= -xmax) ||
- (y >= ymax) || (y <= -ymax)) {
- x = x - Ax;
- y = y - Ay;
- tet = tet - 180;
- if (tet > 360) tet = tet - 360;
- if (tet < 0) tet = tet + 360;
- r = tet * PIG / 180.;
- sem_wait(&mx_mat);
- Ax = (double)(A * cos(r));
- Ay = (double)(A * sin(r));
- sem_post(&mx_mat);
- x = x + Ax;
- y = y + Ay;
- }
- sem_wait(&mx_grf);
- grx_plot(x+x0, y+y0, 10);
- sem_post(&mx_grf);
- task_endcycle();
- }
-}
-
-/****************************************************************/
-/* PROCESSO INFORMAZIONI */
-/****************************************************************/
-
-TASK infor()
-{
- char s[2];
- int x, y;
- int r;
- int i = 0;
- int leng;
- int col = 0;
-
- r = 0;
- x = XWM + 16;
- y = YWM + 40;
- s[1] = 0;
-
- leng = 0;
- while (talk[0][leng] != 0) leng++;
-
- while (1) {
- s[0] = talk[r][i];
- sem_wait(&mx_grf);
- grx_text(s,x+i*8,y+r*8,col+10,1);
- sem_post(&mx_grf);
- i++;
- if (i == leng) {
- i = 0;
- r = (r + 1) % 5;
- if (r == 0) col = (col + 1) % 6;
- }
- task_endcycle();
- }
-}
-
-/****************************************************************/
-/* PROCESSO RUOTA */
-/****************************************************************/
-
-TASK ruota()
-{
- int x0 = XWR + LW/2;
- int y0 = YWM + HW/2;
- int grad = 90;
- int xg, yg;
- double rad, x, y;
-
- xg = x0;
- yg = y0 + LLAN;
-
- while (1) {
-
- rad = (double)grad * PIG / 180.;
-
- sem_wait(&mx_mat);
- x = (double)x0 + (double)LLAN * cos(rad);
- y = (double)y0 + (double)LLAN * sin(rad);
- sem_post(&mx_mat);
-
- sem_wait(&mx_grf);
- grx_disc(xg, yg, 4, 0);
- sem_post(&mx_grf);
-
- xg = x; yg = y;
-
- sem_wait(&mx_grf);
- grx_disc(xg, yg, 4, 13);
- sem_post(&mx_grf);
-
- grad = (grad + 1) % 360;
-
- task_endcycle();
- }
-}
-
-/****************************************************************/
-/* PROCESSO COLORI */
-/****************************************************************/
-
-TASK color()
-{
- int xx0 = XWL+5;
- int yy0 = YWL+5;
- int n, col;
- int x, y;
-
- x = 0; y = 0;
-
- while (1) {
- n = 19. * ((rand()%100)/100.);
- x = xx0 + n * 10;
- n = 14. * ((rand()%100)/100.);
- y = yy0 + n * 10;
- col = 16. * ((rand()%100)/100.);
-
- /* xg = xx0 + x;
- yg = yy0 + y;
- x = (x + 10)%(LW-10);
- y = (y + 10)%(HW-10);
- */
- sem_wait(&mx_grf);
- grx_box(x, y, x+9, y+9, col);
- sem_post(&mx_grf);
-
- task_endcycle();
- }
-}
-
-/****************************************************************/
-/* PROCESSO PENDOLO */
-/****************************************************************/
-
-TASK pendo()
-{
- int x0 = XWM+LW/2;
- int y0 = YWL+10;
- int xg, yg;
- int col = 11;
- double x, y, teta;
- double v, a, dt;
- double g, l;
-
- g = 9.8;
- l = 80.;
- dt = 0.1;
- teta = 40. * PIG / 180.;
- v = 0.;
- sem_wait(&mx_mat);
- x = l * sin((double)teta);
- y = l * cos((double)teta);
- a = -(g/l) * sin((double)teta);
- sem_post(&mx_mat);
- xg = x0 + x;
- yg = y0 + y;
-
- while (1) {
-
- v += a * dt;
- teta += v * dt;
- sem_wait(&mx_mat);
- x = l * sin((double)teta);
- y = l * cos((double)teta);
- a = -(g/l) * sin((double)teta);
- sem_post(&mx_mat);
-
- sem_wait(&mx_grf);
- grx_line(x0, y0, xg, yg, 0);
- grx_circle(xg, yg, 5, 0);
- grx_disc(xg, yg, 4, 0);
- sem_post(&mx_grf);
-
- xg = x0+x; yg = y0+y;
-
- sem_wait(&mx_grf);
- grx_line(x0, y0, xg, yg, col);
- grx_circle(xg, yg, 5, col+2);
- grx_disc(xg, yg, 4, col+1);
- sem_post(&mx_grf);
-
- task_endcycle();
- }
-}
-
-/****************************** gener ******************************/
-
-TASK gener()
-{
- HARD_TASK_MODEL m;
- SOFT_TASK_MODEL am;
- PID pid;
-
- //---------------------------------------------
- hard_task_default_model(m);
- hard_task_def_wcet (m, wcet[1]);
- hard_task_def_mit (m, period[1]);
- hard_task_def_usemath (m);
- pid = task_create("watch", watch, &m, NULL);
- task_activate(pid);
- keyb_getch(BLOCK);
- //---------------------------------------------
- soft_task_default_model(am);
- soft_task_def_met (am, wcet[2]);
- soft_task_def_period (am, period[2]);
- soft_task_def_aperiodic(am);
- soft_task_def_usemath (am);
- ptas = task_create("tasto", tasto, &am, NULL);
- task_activate(ptas);
- keyb_getch(BLOCK);
- //---------------------------------------------
- hard_task_default_model(m);
- hard_task_def_wcet (m, wcet[3]);
- hard_task_def_mit (m, period[3]);
- hard_task_def_usemath (m);
- pid = task_create("palla", palla, &m, NULL);
- task_activate(pid);
- keyb_getch(BLOCK);
- //---------------------------------------------
- hard_task_default_model(m);
- hard_task_def_wcet (m, wcet[4]);
- hard_task_def_mit (m, period[4]);
- hard_task_def_usemath (m);
- pid = task_create("mosca", mosca, &m, NULL);
- task_activate(pid);
- keyb_getch(BLOCK);
- //---------------------------------------------
- hard_task_default_model(m);
- hard_task_def_wcet (m, wcet[5]);
- hard_task_def_mit (m, period[5]);
- hard_task_def_usemath (m);
- pid = task_create("infor", infor, &m, NULL);
- task_activate(pid);
- keyb_getch(BLOCK);
- //---------------------------------------------
- hard_task_default_model(m);
- hard_task_def_wcet (m, wcet[6]);
- hard_task_def_mit (m, period[6]);
- hard_task_def_usemath (m);
- pid = task_create("ruota", ruota, &m, NULL);
- task_activate(pid);
- keyb_getch(BLOCK);
- //---------------------------------------------
- hard_task_default_model(m);
- hard_task_def_wcet (m, wcet[7]);
- hard_task_def_mit (m, period[7]);
- hard_task_def_usemath (m);
- pid = task_create("color", color, &m, NULL);
- task_activate(pid);
- keyb_getch(BLOCK);
- //---------------------------------------------
- hard_task_default_model(m);
- hard_task_def_wcet (m, wcet[8]);
- hard_task_def_mit (m, period[8]);
- hard_task_def_usemath (m);
- pid = task_create("pendo", pendo, &m, NULL);
- task_activate(pid);
- //---------------------------------------------
-
- return NULL;
-}
-
-/****************************** MAIN ******************************/
-
-TASK main()
-{
- char s[20]; /* carattere letto da tastiera */
- int x0, y0;
- int x, y;
- TIME t1, count; /* contatori valutazione carico */
- double car; /* valore del carico corrente */
- TIME seme;
- PID pid;
- NRT_TASK_MODEL m2;
- KEY_EVT eva, evx, evs;
-
- set_exchandler_grx();
- sys_atrunlevel(byebye, NULL, RUNLEVEL_BEFORE_EXIT);
-
- /* set the keyboard handler */
- eva.ascii = 'a';
- eva.scan = KEY_A;
- eva.flag = 0;
- keyb_hook(eva,kboar);
-
- evx.ascii = 'x';
- evx.scan = KEY_X;
- evx.flag = ALTL_BIT;
- keyb_hook(evx,finish1);
-
- evs.ascii = ESC;
- evs.scan = KEY_ESC;
- evs.flag = 0;
- keyb_hook(evs,finish2);
-
- sem_init(&mx_mat,0,1);
- sem_init(&mx_grf,0,1);
-
- seme = sys_gettime(NULL);
- srand(seme);
-
- get_par();
- keyb_getch(BLOCK);
-
- grx_init();
- grx_open(640, 480, 8);
-
- grx_rect(XWL,YWH,XWL+LW,YWH+HW,14);
- grx_rect(XWM,YWH,XWM+LW,YWH+HW,14);
- grx_rect(XWR,YWH,XWR+LW,YWH+HW,14);
-
- grx_rect(XWL,YWM,XWL+LW,YWM+HW,14);
- grx_rect(XWM,YWM,XWM+LW,YWM+HW,14);
- grx_rect(XWR,YWM,XWR+LW,YWM+HW,14);
-
- grx_rect(XWL,YWL,XWL+LW,YWL+HW,14);
- grx_rect(XWM,YWL,XWM+LW,YWL+HW,14);
- grx_rect(XWR,YWL,XWR+LW,YWL+HW,14);
-
- x0 = XWL + LW/2;
- y0 = YWH + HW/2;
- grx_circle(x0, y0, LLAN+3, 12);
- grx_rect(XWL+74, YWH+7, XWL+120, YWH+22, 12);
-
- x0 = LREC;
- grx_line(x0, CIMA, x0, FONDO, 15);
- grx_line(x0+DREC, CIMA, x0+DREC, FONDO, 15);
- grx_line(x0, FONDO, x0+DREC, FONDO, 15);
- grx_box(x0+1, CIMA, x0+DREC-1, FONDO-1, 14);
- grx_text("Press A", XWM+16, YWH+48, 10, 0);
- grx_text("to fill", XWM+16, YWH+64, 10, 0);
-
- grx_text("Press:", XWM+18, YWM+HW-50, 10, 0);
- grx_text("ESC to exit", XWM+18, YWM+HW-40, 10, 0);
- grx_text("SPACE to create", XWM+18, YWM+HW-30, 10, 0);
-
- x0 = XWR + LW/2;
- y0 = YWM + HW/2;
- grx_circle(x0, y0, LLAN/3, 14);
- grx_disc(x0, y0, LLAN/3-1, 12);
-
- x0 = XWR+5;
- y0 = YWL+HW-5;
- grx_line(x0, YWL+HLOAD, x0+LW-10, YWL+HLOAD, 12);
- grx_text("SYSTEM WORKLOAD:", x0+5, YWL+HLOAD-10, 10, 0);
-
- count = 0;
- t1 = sys_gettime(NULL);
- do count++; while (sys_gettime(NULL) < (t1 + DURATA));
-
- nrt_task_default_model(m2);
- pid = task_create("gener", gener, &m2, NULL);
- task_activate(pid);
-
- x = 0;
- while (!fine) {
- car = load(count);
- y = (double)LLOAD*car;
- sem_wait(&mx_grf);
- grx_line(x0+x, y0-LLOAD+1, x0+x, y0, 0);
- grx_line(x0+x, y0-y, x0+x, y0, 15);
- grx_text(" ", x0+LW-60, YWL+HLOAD-10, 0, 0);
- sprintf(s, "%.3f", car);
- grx_text(s, x0+LW-50, YWL+HLOAD-10, 15, 0);
- sem_post(&mx_grf);
- x = (x + 1) % (LW-10);
- }
-
- sys_end();
-
- return NULL;
-}
-
-/****************************************************************/
-
-double load(long n)
-{
- TIME i, t1;
- double carico;
-
- i = 0;
- t1 = sys_gettime(NULL);
- do i++; while (sys_gettime(NULL) < (t1 + DURATA));
- carico = 1. - (double)i / (double)n;
- return(carico);
-}
-
-/****************************************************************/
Index: start/cbs_ft/makefile
===================================================================
--- start/cbs_ft/makefile (revision 1087)
+++ start/cbs_ft/makefile (nonexistent)
@@ -1,17 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= prova
-
-include $(BASE)/config/example.mk
-
-prova:
- make -f $(SUBMAKE) APP=prova INIT= OTHEROBJS="initfile.o cbs_ft.o" OTHERINCL=
-
-
Index: start/cbs_ft/cbs_ft.c
===================================================================
--- start/cbs_ft/cbs_ft.c (revision 1087)
+++ start/cbs_ft/cbs_ft.c (nonexistent)
@@ -1,1009 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@hartik.sssup.it>
- *
- * Authors : Marco Caccamo and Paolo Gai
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: cbs_ft.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-
- This file contains the server CBS_FT
-
- Read CBS_FT.h for further details.
-
-**/
-
-/*
- * Copyright (C) 2000 Marco Caccamo and Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-#include "cbs_ft.h"
-
-/*+ 4 debug purposes +*/
-#undef CBS_FT_TEST
-
-#ifdef TESTG
-#include "drivers/glib.h"
-TIME x,oldx;
-extern TIME starttime;
-#endif
-
-
-
-
-/*+ Status used in the level +*/
-#define CBS_FT_IDLE APER_STATUS_BASE /*+ waiting the activation +*/
-#define CBS_FT_ZOMBIE APER_STATUS_BASE+1 /*+ waiting the period end +*/
-#define CBS_FT_DELAY APER_STATUS_BASE+2 /*+ waiting the delay end +*/
-
-/* structure of an element of the capacity queue */
-struct cap_queue {
- int cap;
- struct timespec dead;
- struct cap_queue *next;
-};
-
-/*+ the level redefinition for the CBS_FT level +*/
-typedef struct {
- level_des l; /*+ the standard level descriptor +*/
-
- /* The wcet are stored in the task descriptor, but we need
- an array for the deadlines. We can't use the timespec_priority
- field because it is used by the master level!!!...
- Notice that however the use of the timespec_priority field
- does not cause any problem... */
-
- struct timespec cbs_ft_dline[MAX_PROC]; /*+ CBS_FT deadlines +*/
-
-
- TIME period[MAX_PROC]; /*+ CBS_FT activation period +*/
-
-
- int maxcap[MAX_PROC]; /* amount of capacity reserved to a primary+backup
- couple */
-
- PID backup[MAX_PROC]; /* Backup task pointers, defined for primary tasks */
-
- char CP[MAX_PROC]; /* checkpoint flag */
-
- char P_or_B[MAX_PROC]; /* Type of task: PRIMARY or BACKUP */
-
-
- struct timespec reactivation_time[MAX_PROC];
- /*+ the time at witch the reactivation timer is post +*/
-
- int reactivation_timer[MAX_PROC]; /*+ the recativation timer +*/
-
- struct cap_queue *queue; /* pointer to the spare capacity queue */
-
- int flags; /*+ the init flags... +*/
-
- bandwidth_t U; /*+ the used bandwidth by the server +*/
-
- int idle; /* the idle flag... */
-
- struct timespec start_idle; /*gives the start time of the last idle period */
-
- LEVEL scheduling_level;
-
-} CBS_FT_level_des;
-
-
-
-/* insert a capacity in the queue capacity ordering by deadline */
-
-static int c_insert(struct timespec dead, int cap, struct cap_queue **que,
- PID p)
-{
- struct cap_queue *prev, *n, *new;
-
- prev = NULL;
- n = *que;
-
- while ((n != NULL) &&
- !TIMESPEC_A_LT_B(&dead, &n->dead)) {
- prev = n;
- n = n->next;
- }
-
-
- new = (struct cap_queue *)kern_alloc(sizeof(struct cap_queue));
- if (new == NULL) {
- kern_printf("\nNew cash_queue element failed\n");
- kern_raise(XUNVALID_TASK, p);
- return -1;
- }
- new->next = NULL;
- new->cap = cap;
- new->dead = dead;
-
- if (prev != NULL)
- prev->next = new;
- else
- *que = new;
-
- if (n != NULL)
- new->next = n;
- return 0;
-
-}
-
-/* extract the first element from the capacity queue */
-
-int c_extractfirst(struct cap_queue **que)
-{
- struct cap_queue *p = *que;
-
-
- if (*que == NULL) return(-1);
-
- *que = (*que)->next;
-
- kern_free(p, sizeof(struct cap_queue));
- return(1);
-}
-
-/* read data of the first element from the capacity queue */
-
-static void c_readfirst(struct timespec *d, int *c, struct cap_queue *que)
-{
- *d = que->dead;
- *c = que->cap;
-}
-
-/* write data of the first element from the capacity queue */
-
-static void c_writefirst(struct timespec dead, int cap, struct cap_queue *que)
-{
- que->dead = dead;
- que->cap = cap;
-}
-
-
-static void CBS_FT_activation(CBS_FT_level_des *lev,
- PID p,
- struct timespec *acttime)
-{
- JOB_TASK_MODEL job;
- int capacity;
-
- /* This rule is used when we recharge the budget at initial task activation
- and each time a new task instance must be activated */
-
- if (TIMESPEC_A_GT_B(acttime, &lev->cbs_ft_dline[p])) {
- /* we modify the deadline ... */
- TIMESPEC_ASSIGN(&lev->cbs_ft_dline[p], acttime);
- }
-
-
- if (proc_table[p].avail_time > 0)
- proc_table[p].avail_time = 0;
-
-
-
- /* A spare capacity is inserted in the capacity queue!! */
- ADDUSEC2TIMESPEC(lev->period[p], &lev->cbs_ft_dline[p]);
- capacity = lev->maxcap[p] - proc_table[ lev->backup[p] ].wcet;
- c_insert(lev->cbs_ft_dline[p], capacity, &lev->queue, p);
-
-
- /* it exploits available capacities from the capacity queue */
- while (proc_table[p].avail_time < proc_table[p].wcet &&
- lev->queue != NULL) {
- struct timespec dead;
- int cap, delta;
- delta = proc_table[p].wcet - proc_table[p].avail_time;
- c_readfirst(&dead, &cap, lev->queue);
- if (!TIMESPEC_A_GT_B(&dead, &lev->cbs_ft_dline[p])) {
- if (cap > delta) {
- proc_table[p].avail_time += delta;
- c_writefirst(dead, cap - delta, lev->queue);
- }
- else {
- proc_table[p].avail_time += cap;
- c_extractfirst(&lev->queue);
- }
- }
- else
- break;
- }
-
- /* If the budget is still less than 0, an exception is raised */
- if (proc_table[p].avail_time <= 0) {
- kern_printf("\nnegative value for the budget!\n");
- kern_raise(XUNVALID_TASK, p);
- return;
- }
-
-
-
- /*if (p==6)
- kern_printf("(act_time:%d dead:%d av_time:%d)\n",
- acttime->tv_sec*1000000+
- acttime->tv_nsec/1000,
- lev->cbs_ft_dline[p].tv_sec*1000000+
- lev->cbs_ft_dline[p].tv_nsec/1000,
- proc_table[p].avail_time); */
-
-
-
-
-
-
-#ifdef TESTG
- if (starttime && p == 3) {
- oldx = x;
- x = ((lev->cbs_ft_dline[p].tv_sec*1000000+lev->cbs_ft_dline[p].tv_nsec/1000)/5000 - starttime) + 20;
- // kern_printf("(a%d)",lev->cbs_ft_dline[p].tv_sec*1000000+lev->cbs_ft_dline[p].tv_nsec/1000);
- if (oldx > x) sys_end();
- if (x<640)
- grx_plot(x, 15, 8);
- }
-#endif
-
- /* and, finally, we reinsert the task in the master level */
- job_task_default_model(job, lev->cbs_ft_dline[p]);
- job_task_def_yesexc(job);
- level_table[ lev->scheduling_level ]->
- guest_create(lev->scheduling_level, p, (TASK_MODEL *)&job);
- level_table[ lev->scheduling_level ]->
- guest_activate(lev->scheduling_level, p);
-}
-
-
-static char *CBS_FT_status_to_a(WORD status)
-{
- if (status < MODULE_STATUS_BASE)
- return status_to_a(status);
-
- switch (status) {
- case CBS_FT_IDLE : return "CBS_FT_Idle";
- case CBS_FT_ZOMBIE : return "CBS_FT_Zombie";
- case CBS_FT_DELAY : return "CBS_FT_Delay";
- default : return "CBS_FT_Unknown";
- }
-}
-
-
-
-
-/* this is the periodic reactivation of the task... */
-static void CBS_FT_timer_reactivate(void *par)
-{
- PID p = (PID) par;
- CBS_FT_level_des *lev;
-
- lev = (CBS_FT_level_des *)level_table[proc_table[p].task_level];
-
- if (proc_table[p].status == CBS_FT_IDLE) {
- /* the task has finished the current activation and must be
- reactivated */
-
- /* request_time represents the time of the last instance release!! */
- TIMESPEC_ASSIGN(&proc_table[p].request_time, &lev->reactivation_time[p]);
-
- /* If idle=1, then we have to discharge the capacities stored in
- the capacity queue up to the length of the idle interval */
- if (lev->idle == 1) {
- TIME interval;
- struct timespec delta;
- lev->idle = 0;
- SUBTIMESPEC(&proc_table[p].request_time, &lev->start_idle, &delta);
- /* length of the idle interval expressed in usec! */
- interval = TIMESPEC2NANOSEC(&delta) / 1000;
-
- /* it discharges the available capacities from the capacity queue */
- while (interval > 0 && lev->queue != NULL) {
- struct timespec dead;
- int cap;
- c_readfirst(&dead, &cap, lev->queue);
- if (cap > interval) {
- c_writefirst(dead, cap - interval, lev->queue);
- interval = 0;
- }
- else {
- interval -= cap;
- c_extractfirst(&lev->queue);
- }
- }
- }
-
- CBS_FT_activation(lev,p,&lev->reactivation_time[p]);
-
-
- /* Set the reactivation timer */
- TIMESPEC_ASSIGN(&lev->reactivation_time[p], &lev->cbs_ft_dline[p]);
- lev->reactivation_timer[p] = kern_event_post(&lev->reactivation_time[p],
- CBS_FT_timer_reactivate,
- (void *)p);
- event_need_reschedule();
- }
- else {
- /* this situation cannot occur */
- kern_printf("\nTrying to reactivate a primary task which is not IDLE!\n");
- kern_raise(XUNVALID_TASK,p);
- }
-}
-
-
-
-static void CBS_FT_avail_time_check(CBS_FT_level_des *lev, PID p)
-{
-
- /*+ if the capacity became negative the remaining computation time
- is diminuished.... +*/
- /* if (p==4)
- kern_printf("(old dead:%d av_time:%d)\n",
- lev->cbs_ft_dline[p].tv_sec*1000000+
- lev->cbs_ft_dline[p].tv_nsec/1000,
- proc_table[p].avail_time); */
-
-
- int newcap = proc_table[p].wcet / 100 * 30;
- if (newcap <= 0)
- newcap = proc_table[p].wcet;
- /* it exploits available capacities from the capacity queue */
- while (proc_table[p].avail_time < newcap
- && lev->queue != NULL) {
- struct timespec dead;
- int cap, delta;
- delta = newcap - proc_table[p].avail_time;
- c_readfirst(&dead, &cap, lev->queue);
- if (!TIMESPEC_A_GT_B(&dead, &lev->cbs_ft_dline[p])) {
- if (cap > delta) {
- proc_table[p].avail_time += delta;
- c_writefirst(dead, cap - delta, lev->queue);
- }
- else {
- proc_table[p].avail_time += cap;
- c_extractfirst(&lev->queue);
- }
- }
- else
- break;
- }
-
-
-
- /*if (p==6)
- kern_printf("(ATC dead:%d av_time:%d)\n",
- lev->cbs_ft_dline[p].tv_sec*1000000+
- lev->cbs_ft_dline[p].tv_nsec/1000,
- proc_table[p].avail_time); */
-
-
-
- /* if the budget is still empty, the backup task must be woken up.
- Remind that a short chunk of primary will go ahead executing
- before the task switch occurs */
- if (proc_table[p].avail_time <= 0) {
- lev->CP[p] = 1;
- proc_table[p].avail_time += proc_table[ lev->backup[p] ].wcet;
- }
-
-
- /*if (p==6)
- kern_printf("(ATC1 dead:%d av_time:%d)\n",
- lev->cbs_ft_dline[p].tv_sec*1000000+
- lev->cbs_ft_dline[p].tv_nsec/1000,
- proc_table[p].avail_time); */
-
-
-
-}
-
-
-/*+ this function is called when a killed or ended task reach the
- period end +*/
-static void CBS_FT_timer_zombie(void *par)
-{
- PID p = (PID) par;
- CBS_FT_level_des *lev;
-
- lev = (CBS_FT_level_des *)level_table[proc_table[p].task_level];
-
- /* we finally put the task in the FREE status */
- proc_table[p].status = FREE;
- q_insertfirst(p,&freedesc);
-
-
- /* and free the allocated bandwidth */
- lev->U -= (MAX_BANDWIDTH / lev->period[p]) * (TIME)lev->maxcap[p];
-}
-
-
-static int CBS_FT_level_accept_task_model(LEVEL l, TASK_MODEL *m)
-{
-
- if (m->pclass == FT_PCLASS || m->pclass ==
- (FT_PCLASS | l)) {
- FT_TASK_MODEL *f = (FT_TASK_MODEL *) m;
-
- //kern_printf("accept :FAULT TOLERANT TASK found!!!!!!\n"); */
- if (f->type == PRIMARY && f->execP > 0 && f->budget < (int)f->period
- && f->backup != NIL) return 0;
- if (f->type == BACKUP && f->wcetB > 0)
- return 0;
- }
- return -1;
-}
-
-
-
-static int CBS_FT_level_accept_guest_model(LEVEL l, TASK_MODEL *m)
-{
- return -1;
-}
-
-static char *onoff(int i)
-{
- if (i)
- return "On ";
- else
- return "Off";
-}
-
-static void CBS_FT_level_status(LEVEL l)
-{
- CBS_FT_level_des *lev = (CBS_FT_level_des *)(level_table[l]);
- PID p;
-
- kern_printf("On-line guarantee : %s\n",
- onoff(lev->flags & CBS_FT_ENABLE_GUARANTEE));
- kern_printf("Used Bandwidth : %u/%u\n",
- lev->U, MAX_BANDWIDTH);
-
- for (p=0; p<MAX_PROC; p++)
- if (proc_table[p].task_level == l && proc_table[p].status != FREE )
- kern_printf("Pid: %2d Name: %10s Period: %9ld Dline: %9ld.%6ld Stat: %s\n",
- p,
- proc_table[p].name,
- lev->period[p],
- lev->cbs_ft_dline[p].tv_sec,
- lev->cbs_ft_dline[p].tv_nsec/1000,
- CBS_FT_status_to_a(proc_table[p].status));
-}
-
-static PID CBS_FT_level_scheduler(LEVEL l)
-{
- CBS_FT_level_des *lev = (CBS_FT_level_des *)(level_table[l]);
-
- /* it stores the actual time and set the IDLE flag in order to handle
- the capacity queue discharging!!! */
- lev->idle = 1;
- ll_gettime(TIME_EXACT, &lev->start_idle);
-
-
- /* the CBS_FT don't schedule anything...
- it's an EDF level or similar that do it! */
- return NIL;
-}
-
-
-/* The on-line guarantee is enabled only if the appropriate flag is set... */
-static int CBS_FT_level_guarantee(LEVEL l, bandwidth_t *freebandwidth)
-{
- CBS_FT_level_des *lev = (CBS_FT_level_des *)(level_table[l]);
-
- if (lev->flags & CBS_FT_FAILED_GUARANTEE) {
- *freebandwidth = 0;
- kern_printf("guarantee :garanzia fallita!!!!!!\n");
- return 0;
- }
- else if (*freebandwidth >= lev->U) {
- *freebandwidth -= lev->U;
- return 1;
- }
- else {
- kern_printf("guarantee :garanzia fallita per mancanza di banda!!!!!!\n");
- kern_printf("freeband: %d request band: %d", *freebandwidth, lev->U);
- return 0;
- }
-}
-
-
-static int CBS_FT_task_create(LEVEL l, PID p, TASK_MODEL *m)
-
-{
- CBS_FT_level_des *lev = (CBS_FT_level_des *)(level_table[l]);
-
- /* if the CBS_FT_task_create is called, then the pclass must be a
- valid pclass. */
- FT_TASK_MODEL *s = (FT_TASK_MODEL *)m;
-
-
-
- /* Enable budget check */
- proc_table[p].control |= CONTROL_CAP;
-
- proc_table[p].avail_time = 0;
- NULL_TIMESPEC(&lev->cbs_ft_dline[p]);
-
-
- if (s->type == PRIMARY) {
- proc_table[p].wcet = (int)s->execP;
- lev->period[p] = s->period;
- lev->maxcap[p] = s->budget;
- lev->backup[p] = s->backup;
- lev->CP[p] = 0;
- lev->P_or_B[p] = PRIMARY;
-
- /* update the bandwidth... */
- if (lev->flags & CBS_FT_ENABLE_GUARANTEE) {
- bandwidth_t b;
- b = (MAX_BANDWIDTH / lev->period[p]) * (TIME)lev->maxcap[p];
-
- /* really update lev->U, checking an overflow... */
- if (MAX_BANDWIDTH - lev->U > b)
- lev->U += b;
- else
- /* The task can NOT be guaranteed (U>MAX_BANDWIDTH)...
- (see EDF.c) */
- lev->flags |= CBS_FT_FAILED_GUARANTEE;
- }
- }
- else {
- proc_table[p].wcet = (int)s->wcetB;
- lev->P_or_B[p] = BACKUP;
-
- /* Backup tasks are unkillable tasks! */
- proc_table[p].control |= NO_KILL;
- }
-
- return 0; /* OK, also if the task cannot be guaranteed... */
-}
-
-
-static void CBS_FT_task_detach(LEVEL l, PID p)
-{
- /* the CBS_FT level doesn't introduce any dynamic allocated new field.
- we have only to reset the NO_GUARANTEE FIELD and decrement the allocated
- bandwidth */
-
- CBS_FT_level_des *lev = (CBS_FT_level_des *)(level_table[l]);
-
- if (lev->flags & CBS_FT_FAILED_GUARANTEE)
- lev->flags &= ~CBS_FT_FAILED_GUARANTEE;
- else
- lev->U -= (MAX_BANDWIDTH / lev->period[p]) * (TIME)lev->maxcap[p];
-}
-
-
-static int CBS_FT_task_eligible(LEVEL l, PID p)
-{
- return 0; /* if the task p is chosen, it is always eligible */
-}
-
-#ifdef __TEST1__
- extern int testactive;
- extern struct timespec s_stime[];
- extern TIME s_curr[];
- extern TIME s_PID[];
- extern int useds;
-#endif
-
-static void CBS_FT_task_dispatch(LEVEL l, PID p, int nostop)
-{
- CBS_FT_level_des *lev = (CBS_FT_level_des *)(level_table[l]);
- level_table[ lev->scheduling_level ]->
- guest_dispatch(lev->scheduling_level,p,nostop);
-
-#ifdef __TEST1__
- if (testactive)
- {
- TIMESPEC_ASSIGN(&s_stime[useds], &schedule_time);
- s_curr[useds] = proc_table[p].avail_time;
- s_PID[useds] = p;
- useds++;
- }
-#endif
-}
-
-static void CBS_FT_task_epilogue(LEVEL l, PID p)
-{
- CBS_FT_level_des *lev = (CBS_FT_level_des *)(level_table[l]);
-
- /* check if the budget is finished... */
- if (proc_table[p].avail_time <= 0) {
-
- /* A backup task cannot ever exhaust its budget! */
- if (lev->P_or_B[p] == BACKUP) {
- kern_printf("\nBACKUP wcet violation!\n");
- kern_raise(XWCET_VIOLATION,p);
- /* we kill the current activation */
- level_table[ lev->scheduling_level ]->
- guest_end(lev->scheduling_level, p);
- return;
- }
-
- /* we try to recharge the budget */
- CBS_FT_avail_time_check(lev, p);
-
- /* The budget must be greater than 0! */
- if (proc_table[p].avail_time <= 0) {
- kern_printf("\nBackup task starting with exhausted budget\n");
- kern_raise(XUNVALID_TASK, p);
- lev->CP[p] = 0;
- /* we kill the current activation */
- level_table[ lev->scheduling_level ]->
- guest_end(lev->scheduling_level, p);
- return;
- }
- }
-
- /* the task returns into the ready queue by
- calling the guest_epilogue... */
- level_table[ lev->scheduling_level ]->
- guest_epilogue(lev->scheduling_level,p);
-}
-
-
-static void CBS_FT_task_activate(LEVEL l, PID p)
-{
- CBS_FT_level_des *lev = (CBS_FT_level_des *)(level_table[l]);
-
- ll_gettime(TIME_EXACT, &proc_table[p].request_time);
-
-
-
- if (lev->P_or_B[p] == BACKUP) {
- kern_printf("\nTrying to activate a BACKUP task!\n");
- kern_raise(XUNVALID_TASK, p);
- }
- else {
-
- /* If idle=1, then we have to discharge the capacities stored in
- the capacity queue up to the length of the idle interval */
- if (lev->idle == 1) {
- TIME interval;
- struct timespec delta;
- lev->idle = 0;
- SUBTIMESPEC(&proc_table[p].request_time, &lev->start_idle, &delta);
- /* length of the idle interval expressed in usec! */
- interval = TIMESPEC2NANOSEC(&delta) / 1000;
-
- /* it discharge the available capacities from the capacity queue */
- while (interval > 0 && lev->queue != NULL) {
- struct timespec dead;
- int cap;
- c_readfirst(&dead, &cap, lev->queue);
- if (cap > interval) {
- c_writefirst(dead, cap - interval, lev->queue);
- interval = 0;
- }
- else {
- interval -= cap;
- c_extractfirst(&lev->queue);
- }
- }
- }
-
- CBS_FT_activation(lev, p, &proc_table[p].request_time);
-
-
- /* Set the reactivation timer */
- TIMESPEC_ASSIGN(&lev->reactivation_time[p], &lev->cbs_ft_dline[p]);
- lev->reactivation_timer[p] = kern_event_post(&lev->reactivation_time[p],
- CBS_FT_timer_reactivate,
- (void *)p);
-
- // kern_printf("act : %d %d |",lev->cbs_ft_dline[p].tv_nsec/1000,p);
- }
-}
-
-
-static void CBS_FT_task_insert(LEVEL l, PID p)
-{
- printk("CBS_FT_task_insert\n");
- kern_raise(XUNVALID_TASK,p);
-}
-
-
-static void CBS_FT_task_extract(LEVEL l, PID p)
-{
- printk("CBS_FT_task_extract\n");
- kern_raise(XUNVALID_TASK,p);
-}
-
-
-static void CBS_FT_task_endcycle(LEVEL l, PID p)
-{
- CBS_FT_level_des *lev = (CBS_FT_level_des *)(level_table[l]);
-
-
- level_table[ lev->scheduling_level ]->
- guest_end(lev->scheduling_level,p);
-
-
- proc_table[p].status = CBS_FT_IDLE;
-
-
- if (lev->P_or_B[p] == PRIMARY) {
- if (lev->CP[p]) {
- JOB_TASK_MODEL job;
-
- /* We have to start the backup task */
- TIMESPEC_ASSIGN(&lev->cbs_ft_dline[ lev->backup[p] ],
- &lev->cbs_ft_dline[p]);
- proc_table[ lev->backup[p] ].avail_time = proc_table[p].avail_time;
- lev->CP[p] = 0;
-
- /* and, finally, we insert the backup task in the master level */
- job_task_default_model(job, lev->cbs_ft_dline[p]);
- job_task_def_yesexc(job);
- level_table[ lev->scheduling_level ]->
- guest_create(lev->scheduling_level, lev->backup[p],
- (TASK_MODEL *)&job);
- level_table[ lev->scheduling_level ]->
- guest_activate(lev->scheduling_level, lev->backup[p]);
- }
- else {
- /* A spare capacity is inserted in the capacity queue!! */
- proc_table[p].avail_time += proc_table[ lev->backup[p] ].wcet;
- if (proc_table[p].avail_time > 0) {
- c_insert(lev->cbs_ft_dline[p], proc_table[p].avail_time,
- &lev->queue, p);
- proc_table[p].avail_time = 0;
- }
- }
- }
- else {
- /* this branch is for backup tasks:
- A spare capacity is inserted in the capacity queue!! */
- if (proc_table[p].avail_time > 0) {
- c_insert(lev->cbs_ft_dline[p], proc_table[p].avail_time,
- &lev->queue, p);
- proc_table[p].avail_time = 0;
- }
- }
-}
-
-
-static void CBS_FT_task_end(LEVEL l, PID p)
-{
- CBS_FT_level_des *lev = (CBS_FT_level_des *)(level_table[l]);
-
- /* A backup task cannot be killed, this behaviour can be modified
- in a new release */
- if (lev->P_or_B[p] == BACKUP) {
- kern_printf("\nKilling a BACKUP task!\n");
- kern_raise(XUNVALID_TASK, p);
- return;
- }
-
- /* check if the capacity becomes negative... */
- /* there is a while because if the wcet is << than the system tick
- we need to postpone the deadline many times */
- while (proc_table[p].avail_time < 0) {
- /* the CBS_FT rule for recharging the capacity */
- proc_table[p].avail_time += lev->maxcap[p];
- ADDUSEC2TIMESPEC(lev->period[p], &lev->cbs_ft_dline[p]);
- }
-
- level_table[ lev->scheduling_level ]->
- guest_end(lev->scheduling_level,p);
-
-
- /* we delete the reactivation timer */
- event_delete(lev->reactivation_timer[p]);
- lev->reactivation_timer[p] = -1;
-
-
- /* Finally, we post the zombie event. when the end period is reached,
- the task descriptor and banwidth are freed */
- proc_table[p].status = CBS_FT_ZOMBIE;
- lev->reactivation_timer[p] = kern_event_post(&lev->cbs_ft_dline[p],
- CBS_FT_timer_zombie,
- (void *)p);
-}
-
-
-static void CBS_FT_task_sleep(LEVEL l, PID p)
-{
- printk("CBS_FT_task_sleep\n");
- kern_raise(XUNVALID_TASK,p);
-}
-
-
-static void CBS_FT_task_delay(LEVEL l, PID p, TIME usdelay)
-{
- printk("CBS_FT_task_delay\n");
- kern_raise(XUNVALID_TASK,p);
-}
-
-
-static int CBS_FT_guest_create(LEVEL l, PID p, TASK_MODEL *m)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); return 0; }
-
-static void CBS_FT_guest_detach(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBS_FT_guest_dispatch(LEVEL l, PID p, int nostop)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBS_FT_guest_epilogue(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBS_FT_guest_activate(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBS_FT_guest_insert(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBS_FT_guest_extract(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBS_FT_guest_endcycle(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBS_FT_guest_end(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBS_FT_guest_sleep(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBS_FT_guest_delay(LEVEL l, PID p,DWORD tickdelay)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-
-
-
-/* Registration functions */
-
-/*+ Registration function:
- int flags the init flags ... see CBS.h +*/
-void CBS_FT_register_level(int flags, LEVEL master)
-{
- LEVEL l; /* the level that we register */
- CBS_FT_level_des *lev; /* for readableness only */
- PID i; /* a counter */
-
- printk("CBS_FT_register_level\n");
-
- /* request an entry in the level_table */
- l = level_alloc_descriptor();
-
- printk(" alloco descrittore %d %d\n",l,sizeof(CBS_FT_level_des));
-
- /* alloc the space needed for the CBS_FT_level_des */
- lev = (CBS_FT_level_des *)kern_alloc(sizeof(CBS_FT_level_des));
-
- printk(" lev=%d\n",(int)lev);
-
- /* update the level_table with the new entry */
- level_table[l] = (level_des *)lev;
-
- /* fill the standard descriptor */
- strncpy(lev->l.level_name, CBS_FT_LEVELNAME, MAX_LEVELNAME);
- lev->l.level_code = CBS_FT_LEVEL_CODE;
- lev->l.level_version = CBS_FT_LEVEL_VERSION;
-
- lev->l.level_accept_task_model = CBS_FT_level_accept_task_model;
- lev->l.level_accept_guest_model = CBS_FT_level_accept_guest_model;
- lev->l.level_status = CBS_FT_level_status;
- lev->l.level_scheduler = CBS_FT_level_scheduler;
-
- if (flags & CBS_FT_ENABLE_GUARANTEE)
- lev->l.level_guarantee = CBS_FT_level_guarantee;
- else
- lev->l.level_guarantee = NULL;
-
- lev->l.task_create = CBS_FT_task_create;
- lev->l.task_detach = CBS_FT_task_detach;
- lev->l.task_eligible = CBS_FT_task_eligible;
- lev->l.task_dispatch = CBS_FT_task_dispatch;
- lev->l.task_epilogue = CBS_FT_task_epilogue;
- lev->l.task_activate = CBS_FT_task_activate;
- lev->l.task_insert = CBS_FT_task_insert;
- lev->l.task_extract = CBS_FT_task_extract;
- lev->l.task_endcycle = CBS_FT_task_endcycle;
- lev->l.task_end = CBS_FT_task_end;
- lev->l.task_sleep = CBS_FT_task_sleep;
- lev->l.task_delay = CBS_FT_task_delay;
-
- lev->l.guest_create = CBS_FT_guest_create;
- lev->l.guest_detach = CBS_FT_guest_detach;
- lev->l.guest_dispatch = CBS_FT_guest_dispatch;
- lev->l.guest_epilogue = CBS_FT_guest_epilogue;
- lev->l.guest_activate = CBS_FT_guest_activate;
- lev->l.guest_insert = CBS_FT_guest_insert;
- lev->l.guest_extract = CBS_FT_guest_extract;
- lev->l.guest_endcycle = CBS_FT_guest_endcycle;
- lev->l.guest_end = CBS_FT_guest_end;
- lev->l.guest_sleep = CBS_FT_guest_sleep;
- lev->l.guest_delay = CBS_FT_guest_delay;
-
- /* fill the CBS_FT descriptor part */
- for (i=0; i<MAX_PROC; i++) {
- NULL_TIMESPEC(&lev->cbs_ft_dline[i]);
- lev->period[i] = 0;
- NULL_TIMESPEC(&lev->reactivation_time[i]);
- lev->reactivation_timer[i] = -1;
- lev->maxcap[i] = 0;
- lev->backup[i] = NIL;
- lev->CP[i] = 0;
- lev->P_or_B[i] = PRIMARY;
- }
-
- lev->U = 0;
- lev->idle = 0;
- lev->queue = NULL;
-
- lev->scheduling_level = master;
-
- lev->flags = flags & 0x07;
-}
-
-
-
-bandwidth_t CBS_FT_usedbandwidth(LEVEL l)
-{
-
- CBS_FT_level_des *lev = (CBS_FT_level_des *)(level_table[l]);
- if (lev->l.level_code == CBS_FT_LEVEL_CODE &&
- lev->l.level_version == CBS_FT_LEVEL_VERSION)
- return lev->U;
- else
- return 0;
-}
-
-
-
-void CBS_FT_Primary_Abort()
-{
- PID p;
- CBS_FT_level_des *lev;
-
- kern_cli();
- p = exec_shadow;
- lev = (CBS_FT_level_des *)level_table[proc_table[p].task_level];
- lev->CP[p] = 1;
- kern_sti();
-}
-
-
-char CBS_FT_Checkpoint()
-{
- char f;
- PID p;
- CBS_FT_level_des *lev;
-
- kern_cli();
- p = exec_shadow;
- lev = (CBS_FT_level_des *)level_table[proc_table[p].task_level];
- f = lev->CP[p];
- kern_sti();
- return f;
-}
-
Index: start/cbs_ft/initfile.c
===================================================================
--- start/cbs_ft/initfile.c (revision 1087)
+++ start/cbs_ft/initfile.c (nonexistent)
@@ -1,112 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@hartik.sssup.it>
- *
- * Authors : Marco caccamo and Paolo Gai
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: initfile.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-
- This file contains the server CBS_FT
-
- Read CBS_FT.h for further details.
-
-**/
-
-/*
- * Copyright (C) 2000 Marco Caccamo and Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include <modules/edf.h>
-#include <modules/rr.h>
-#include "cbs_ft.h"
-#include <modules/cbs.h>
-#include <modules/dummy.h>
-#include <drivers/keyb.h>
-#include <modules/hartport.h>
-#include <modules/sem.h>
-#include <modules/cabs.h>
-
-/*+ system tick in us +*/
-#define TICK 300
-#define RRTICK 5000
-
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- EDF_register_level(EDF_ENABLE_ALL);
- CBS_FT_register_level(CBS_FT_ENABLE_ALL, 0);
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- CBS_register_level(CBS_ENABLE_ALL, 0);
- dummy_register_level();
-
- SEM_register_module();
- CABS_register_module();
-
- // periodic timer
- return TICK;
- // one-shot timer
- // return 0
-}
-
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- HARTPORT_init();
-
- KEYB_init(NULL);
-
- __call_main__(mb);
-
- return (void *)0;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Index: start/cbs_ft/cbs_ft.h
===================================================================
--- start/cbs_ft/cbs_ft.h (revision 1087)
+++ start/cbs_ft/cbs_ft.h (nonexistent)
@@ -1,166 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@hartik.sssup.it>
- *
- * Authors : Marco Caccamo and Paolo Gai
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: cbs_ft.h,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-
- This file contains the server CBS_FT
-
- Read CBS_FT.h for further details.
-
-**/
-
-/*
- * Copyright (C) 2000 Marco Caccamo and Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#ifndef __CBS_FT__
-#define __CBS_FT__
-
-
-
-#include <ll/string.h>
-#include <kernel/model.h>
-#include <kernel/descr.h>
-#include <kernel/var.h>
-#include <kernel/func.h>
-
-
-
-
-
-
-/*+ flags... +*/
-#define CBS_FT_ENABLE_GUARANTEE 1 /*+ Task Guarantee enabled +*/
-#define CBS_FT_ENABLE_ALL 1
-
-#define CBS_FT_FAILED_GUARANTEE 8 /*+ used in the module, unsettable
- in EDF_register_level... +*/
-
-
-#define PRIMARY 1
-#define BACKUP 2
-#define FT_PCLASS 0x0700 // Nuova classe di task, quelli fault_tolerant
-
-#define CBS_FT_LEVELNAME "CBSFT base"
-#define CBS_FT_LEVEL_CODE 110
-#define CBS_FT_LEVEL_VERSION 1
-
-
-/* The Fault-Tolerant Task model extends the base task model
- This model cannot be APERIODIC, only PERIODIC tasks are allowed.
- A faut-tolerant application is composed by two different tasks (primary and
- backup). The backup task is characterized by its WCET and its type (BACKUP).
- The primary task must define the task period, its average execution time
- (used as sort of prediction in order to recharge the budget using the
- capacity cash queue!), the budget (budget / period = U that is, the
- bandwidth assigned to the fault-tolerant application), its type (PRIMARY)
- and finally the PID of the corresponding backup task. */
-
-typedef struct {
- TASK_MODEL t;
-
- TIME wcetB; // WCET of the backup job (BACKUP TASK ONLY)
-
- TIME execP; // average exec. time of the primary job (PRIMARY TASK ONLY)
-
- TIME period; // period of the fault-tolerant task (PRIMARY TASK ONLY)
-
- int budget; // amount of guaranteed capacity (PRIMARY TASK ONLY)
-
- char type; // PRIMARY or BACKUP
-
- PID backup; // (PRIMARY TASK ONLY)
-
-} FT_TASK_MODEL;
-
-
-#define ft_task_default_model(m) \
- task_default_model((m).t,FT_PCLASS), \
- (m).period = 0, \
- (m).wcetB = 0, \
- (m).execP = 0, \
- (m).budget = 0, \
- (m).type = BACKUP, \
- (m).backup = NIL
-
-#define ft_task_def_level(m,l) task_def_level((m).t,l)
-#define ft_task_def_arg(m,a) task_def_arg((m).t,a)
-#define ft_task_def_stack(m,s) task_def_stack((m).t,s)
-#define ft_task_def_stackaddr(m,s) task_def_stackaddr((m).t,s)
-#define ft_task_def_usemath(m) task_def_usemath((m).t)
-#define ft_task_def_ctrl_jet(m) task_def_ctrl_jet((m).t)
-#define ft_task_def_group(m,g) task_def_group((m).t,g)
-#define ft_task_def_period(m,o) (m).period = (o)
-#define ft_task_def_budget(m,o) (m).budget = (o)
-#define ft_task_def_backup(m) (m).type = BACKUP
-#define ft_task_def_primary(m) (m).type = PRIMARY
-#define ft_task_def_backup_task(m,b) (m).backup = b
-#define ft_task_def_backup_wcet(m,b) (m).wcetB = b
-#define ft_task_def_primary_exec(m,b) (m).execP = b
-
-/************************************************************************/
-void CBS_FT_register_level(int flags, LEVEL master);
-
-
-bandwidth_t CBS_FT_usedbandwidth(LEVEL l);
-
-
-
-/* This function notifies to a primary task that the task itself has to
- suspend its execution (the task has to suspend itself with a
- task_endcycle() */
-char CBS_FT_Checkpoint(void);
-
-
-
-/* This function sets the checkpoint flag! hence, at the next checkpoint,
- that is:
-
- if (CBS_FT_Checkpoint()) {
- task_endcycle();
- continue;
- }
-
- the primary task will suspend itself switching to the backup task */
-void CBS_FT_Primary_Abort(void);
-
-/***************************************************************************/
-
-
-
-
-#endif
Index: start/cbs_ft/prova.c
===================================================================
--- start/cbs_ft/prova.c (revision 1087)
+++ start/cbs_ft/prova.c (nonexistent)
@@ -1,429 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@hartik.sssup.it>
- *
- * Authors : Marco Caccamo and Paolo Gai
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: prova.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-
- testcash.c
- test for the CASH Module, directly derived from Test Number 13 (D)
-
-**/
-
-/*
- * Copyright (C) 2000 Marco Caccamo and Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-#include <modules/edf.h>
-#include "cbs_ft.h"
-#include <math.h>
-#include <stdlib.h>
-
-#define ASTER_LIM 60
-#define DISPLAY_MAX 15
-
-#define STAT_Y 9
-
-#define INPUT 0.5
-
-
-
-#define MAX_STAT 10000
-#define RVAL 1
-#define XVAL 2
-#define DVAL 3
-
-
-struct statistic {
- TIME r_time;
- TIME ex_time;
- long dead_post;
-};
-
-
-
- struct statistic stat[MAX_STAT];
- TIME val[MAX_STAT];
-
-int n_stat = 0;
-
-TASK hard_aster1p(void)
-{
- int i;
- int y = 1;
- int load1,j;
-
- char s[2];
-
- s[0] = 'P'; s[1] = 0;
-
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 20000; //+ rand() % 25000;
- for (j=0; j<load1; j++) {
- if (CBS_FT_Checkpoint())
- break;
- puts_xy(i,y,rand()%15+1,s);
- }
- //kern_cli();
- //stat[n_stat].r_time = CBSGHD_get_response_time(1, exec_shadow);
- //jet_gettable(exec_shadow, &stat[n_stat].ex_time, 1);
- //kern_sti();
- //n_stat++;
- task_endcycle();
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
-}
-
-
-TASK hard_aster1b(void)
-{
- int i;
- int y = 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = 'B'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 20000;// + rand()%4000;
- for (j=0; j<load1; j++) {
- puts_xy(i,y,rand()%15+1,s);
- }
- //kern_cli();
- //stat[n_stat].r_time = CBSGHD_get_response_time(1, exec_shadow);
- //jet_gettable(exec_shadow, &stat[n_stat].ex_time, 1);
- //kern_sti();
- //n_stat++;
- task_endcycle();
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
-}
-
-
-TASK hard_aster2p(void)
-{
- int i;
- int y = 3;
-
- int load1,j;
-
- char s[2];
-
- s[0] = 'P'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 20000 + rand() % 20000;
- for (j=0; j<load1; j++) {
- if (CBS_FT_Checkpoint())
- break;
- puts_xy(i,y,rand()%15+1,s);
- }
- //kern_cli();
- //stat[n_stat].r_time = CBSGHD_get_response_time(5, exec_shadow);
- //jet_gettable(exec_shadow, &stat[n_stat].ex_time, 1);
- //kern_sti();
- //n_stat++;
- task_endcycle();
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
-}
-
-TASK hard_aster2b(void)
-{
- int i;
- int y = 3;
-
- int load1,j;
-
- char s[2];
-
- s[0] = 'T'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 20000;
- for (j=0; j<load1; j++) {
- puts_xy(i,y,rand()%15+1,s);
- }
- //kern_cli();
- //stat[n_stat].r_time = CBSGHD_get_response_time(5, exec_shadow);
- //jet_gettable(exec_shadow, &stat[n_stat].ex_time, 1);
- //kern_sti();
- //n_stat++;
- task_endcycle();
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
-}
-
-
-TASK clock()
-{
- int s = 0, m = 0;
-
- while(1) {
- printf_xy(62,1,WHITE,"%2d:%2d",m,s);
- printf_xy(62,2,WHITE,"Utot=%12u",MAX_BANDWIDTH);
- printf_xy(62,3,WHITE,"Uedf=%12u",EDF_usedbandwidth(0));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_FT_usedbandwidth(1));
- task_endcycle();
-
- if (++s > 59) {
- s = 0;
- m++;
- }
- printf_xy(62,1,WHITE,"%2d:%2d",m,s);
- printf_xy(62,2,WHITE,"Utot=%12u",MAX_BANDWIDTH);
- printf_xy(62,3,WHITE,"Uedf=%12u",EDF_usedbandwidth(0));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_FT_usedbandwidth(1));
- task_endcycle();
- }
-}
-
-
-
-/* we consider the first ASTER_MAX + 2 tasks from the PID 2
- and plot on the screen the elapsed times... */
-TASK jetcontrol()
-{
- int i; /* a counter */
- TIME sum, max, curr, last[5];
- int nact;
- int j; /* the elements set by jet_gettable */
- PID p;
-
-
- kern_cli();
- printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
- kern_sti();
-
- for (;;) {
- for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
- if (jet_getstat(p, &sum, &max, &nact, &curr) == -1) continue;
-
- for (j=0; j<5; j++) last[j] = 0;
- jet_gettable(p, &last[0], 5);
- kern_cli();
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6ld ³ %-6ld ³ %-4d ³ %-7ld ³ %-5ld ³ %-5ld ³ %-5ld ³ %-5ld ³ %-5ld", p, sum/(nact==0 ? 1 : nact), max,
- nact, curr, last[0], last[1], last[2], last[3], last[4]);
- kern_sti();
- i++;
- }
- task_endcycle();
- }
-}
-
-
-void save_stat(struct statistic p[], int n, char *name, int type)
-{
- DOS_FILE *f;
- int i;
- char outstring[500];
-
-
- for(i = 0; i < 500; i++)
- outstring[i] = '0';
-
- f = DOS_fopen(name, "w");
- if (!f) {
- cprintf("Cannot open %s!!!", name);
- goto end1;
- }
-
- for(i = 0; i < n; i++) {
- if (type == RVAL)
- val[i] = p[i].r_time;
- if (type == XVAL)
- val[i] = p[i].ex_time;
- if (type == DVAL)
- val[i] = p[i].dead_post;
- }
-
- memset(outstring, 0, 300);
- sprintf(outstring, "%ld \n", (long int)n);
- cprintf("%s", outstring);
- DOS_fwrite(outstring, 1, strlen(outstring), f);
-
- for(i = 0; i < n; i++) {
- memset(outstring, 0, 300);
- sprintf(outstring, "%ld %lu\n", (long int)i, val[i]);
- //cprintf("%s", outstring);
- DOS_fwrite(outstring, 1, strlen(outstring), f);
- }
- DOS_fclose(f);
-end1:cprintf("OK?");
-}
-
-
-void result_save(void *p)
-{
- save_stat(stat, n_stat, "stat1.tim", RVAL);
-}
-
-
-void fine()
-{
- ll_abort(666);
-}
-
-int main(int argc, char **argv)
-{
- PID p1,p2,p3, p4, p5, p6;
-
- HARD_TASK_MODEL m;
- FT_TASK_MODEL ftb;
- FT_TASK_MODEL ftp;
-
- // int i;
- struct timespec fineprg;
-
-
- //sys_atrunlevel(result_save, NULL, RUNLEVEL_AFTER_EXIT);
- srand(7);
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,500);
- hard_task_def_mit(m,500000);
- hard_task_def_periodic(m);
- hard_task_def_group(m,1);
- hard_task_def_ctrl_jet(m);
-
-
- p1 = task_create("Clock",clock,&m,NULL);
- if (p1 == -1) {
- perror("testhd.c(main): Could not create task <Clock> ...");
- sys_end();
- }
-
-
- hard_task_def_wcet(m,500);
- hard_task_def_periodic(m);
- hard_task_def_mit(m,100000);
-
-
- p2 = task_create("JetControl",jetcontrol,&m,NULL);
- if (p2 == -1) {
- perror("testhd.c(main): Could not create task <JetControl> ...");
- sys_end();
- }
-
-
- ft_task_default_model(ftb);
- ft_task_def_usemath(ftb);
- ft_task_def_backup(ftb);
- ft_task_def_ctrl_jet(ftb);
- ft_task_def_backup_wcet(ftb, 7000);
-
-
-
- p3 = task_create("Hard_aster1b", hard_aster1b, &ftb,NULL);
- if (p3 == -1) {
- perror("testhd.c(main): Could not create task <aster1b> ...");
- sys_end();
- }
-
- ft_task_default_model(ftp);
- ft_task_def_usemath(ftp);
- ft_task_def_ctrl_jet(ftp);
- ft_task_def_group(ftp, 1);
- ft_task_def_period(ftp, 50000);
- ft_task_def_budget(ftp, 15000);
- ft_task_def_primary_exec(ftp, 7300);
- ft_task_def_primary(ftp);
- ft_task_def_backup_task(ftp, p3);
-
-
- p4 = task_create("Hard_aster1p", hard_aster1p, &ftp, NULL);
- if (p4 == -1) {
- perror("testhd.c(main): Could not create task <aster1p> ...");
- sys_end();
- }
-
-
- ft_task_def_backup_wcet(ftb, 6700);
-
-
- p5 = task_create("Hard_aster2b", hard_aster2b, &ftb, NULL);
- if (p5 == -1) {
- perror("testhd.c(main): Could not create task <aster2b> ...");
- sys_end();
- }
-
-
- ft_task_def_period(ftp, 100000);
- ft_task_def_budget(ftp, 8000);
- ft_task_def_primary_exec(ftp, 11000);
- ft_task_def_backup_task(ftp, p5);
-
-
- p6 = task_create("Hard_aster2p", hard_aster2p, &ftp, NULL);
- if (p6 == -1) {
- perror("testhd.c(main): Could not create task <aster2p> ...");
- sys_end();
- }
-
-
- printf_xy(0,STAT_Y + 15,WHITE,"Hard asteroide PID= %-3d ",p3);
- printf_xy(0,STAT_Y + 17,WHITE,"Clock PID= %-3d ",p1);
- printf_xy(0,STAT_Y + 18,WHITE,"JetControl PID= %-3d ",p2);
-
-
-
- task_nopreempt();
- fineprg.tv_sec = 10;
- fineprg.tv_nsec = 0;
- kern_event_post(&fineprg,fine,NULL);
- group_activate(1);
- return 0;
-}
-
Index: start/cbs_ft/readme.txt
===================================================================
--- start/cbs_ft/readme.txt (revision 1087)
+++ start/cbs_ft/readme.txt (nonexistent)
@@ -1,6 +0,0 @@
-This Example has been made by Marco Caccamo.
-
-There is not a lot of documentation available, so if you have problems please
-send an e-mail to Marco ( http://gandalf.sssup.it/~caccamo/ )
-
-Paolo
Index: start/jumpball/initfil2.c
===================================================================
--- start/jumpball/initfil2.c (revision 1087)
+++ start/jumpball/initfil2.c (nonexistent)
@@ -1,119 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: initfil2.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-#include "modules/rr.h"
-#include "modules/rrsoft.h"
-#include "modules/dummy.h"
-
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "modules/cabs.h"
-#include "modules/pi.h"
-#include "modules/pc.h"
-#include "modules/srp.h"
-#include "modules/npp.h"
-#include "modules/nop.h"
-
-#include "drivers/keyb.h"
-
-
-/*+ sysyem tick in us +*/
-#define TICK 0
-
-/*+ RR tick in us +*/
-//#define RRTICK 10000
-#define RRTICK 2000
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- RRSOFT_register_level(RRTICK, RR_MAIN_NO, mb, RRSOFT_ONLY_HARD|RRSOFT_ONLY_SOFT);
- RRSOFT_register_level(RRTICK, RR_MAIN_NO, mb, RRSOFT_ONLY_SOFT); //cbs
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- dummy_register_level();
-
-
- SEM_register_module();
-
- CABS_register_module();
-
- PI_register_module();
- NOP_register_module();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- KEYB_PARMS kparms = BASE_KEYB;
-
- HARTPORT_init();
-
- keyb_def_ctrlC(kparms, NULL);
- KEYB_init(&kparms);
-
- __call_main__(mb);
-
- return (void *)0;
-}
-
-
-void app_mutex_init(mutex_t *m)
-{
- NOP_mutexattr_t attr;
-
- NOP_mutexattr_default(attr);
-
- mutex_init(m, &attr);
-}
-
Index: start/jumpball/initfile.c
===================================================================
--- start/jumpball/initfile.c (revision 1087)
+++ start/jumpball/initfile.c (nonexistent)
@@ -1,141 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: initfile.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#define PI
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-#include "modules/rr.h"
-
-#ifndef PI
-#include "modules/rrsoft.h"
-#endif
-
-#include "modules/dummy.h"
-
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "modules/cabs.h"
-#include "modules/pi.h"
-#include "modules/pc.h"
-#include "modules/srp.h"
-#include "modules/npp.h"
-#include "modules/nop.h"
-
-#include "drivers/keyb.h"
-
-
-/*+ sysyem tick in us +*/
-#define TICK 0
-
-/*+ RR tick in us +*/
-//#define RRTICK 10000
-#define RRTICK 2000
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
-#ifdef PI
- EDF_register_level(EDF_ENABLE_ALL);
- CBS_register_level(CBS_ENABLE_ALL, 0);
-#else
- RRSOFT_register_level(RRTICK, RR_MAIN_NO, mb, RRSOFT_ONLY_HARD|RRSOFT_ONLY_SOFT);
- RRSOFT_register_level(RRTICK, RR_MAIN_NO, mb, RRSOFT_ONLY_SOFT); //cbs
-#endif
-
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- dummy_register_level();
-
-
- SEM_register_module();
-
- CABS_register_module();
-
- PI_register_module();
- NOP_register_module();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- HARTPORT_init();
-
- kern_printf("TIME=%d\n",sys_gettime(NULL));
- KEYB_init(NULL);
- kern_printf("TIME=%d\n",sys_gettime(NULL));
-// KEYB_init(NULL);
-
- __call_main__(mb);
-
- return (void *)0;
-}
-
-
-#ifdef PI
-void app_mutex_init(mutex_t *m)
-{
- PI_mutexattr_t attr;
-
- PI_mutexattr_default(attr);
-
- mutex_init(m, &attr);
-}
-#else
-void app_mutex_init(mutex_t *m)
-{
- NOP_mutexattr_t attr;
-
- NOP_mutexattr_default(attr);
-
- mutex_init(m, &attr);
-}
-#endif
Index: start/jumpball/demo.c
===================================================================
--- start/jumpball/demo.c (revision 1087)
+++ start/jumpball/demo.c (nonexistent)
@@ -1,252 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: demo.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "demo.h"
-#include <kernel/func.h>
-#include <string.h>
-#include <stdlib.h>
-#include <drivers/keyb.h>
-#include <drivers/glib.h>
-
-/* graphic mutex... */
-mutex_t mutex;
-
-/* useful colors... */
-int white;
-int black;
-int red;
-int gray;
-
-void app_mutex_init(mutex_t *m);
-
-static void version( void )
-{
- cprintf( "S.Ha.R.K. Pavia Demo 1.0\n" );
- cprintf( "------------------------\n" );
- cprintf( "by Paolo Gai 1999-2001\n" );
- cprintf( " <pj@sssup.it>\n" );
- cprintf( "------------------------\n" );
-}
-
-int myrand(int x)
-{
- return rand()%x;
-}
-
-void reverse(char s[])
-{
- int c, i, j;
-
- for (i = 0, j = strlen(s)-1; i<j; i++, j--)
- {
- c = s[i];
- s[i] = s[j];
- s[j] = c;
- }
-}
-
-char * itoa(int n, char *s)
-{
- int i, sign;
-
- if ((sign = n) < 0)
- n = -n;
-
- i = 0;
-
- do
- {
- s[i++] = n % 10 + '0';
- } while ((n /= 10) > 0);
-
- if (sign < 0)
- s[i++] = '-';
-
- s[i] = 0;
-
- reverse(s);
-
- return s;
-}
-
-
-void scenario()
-{
- grx_text("S.Ha.R.K. Pavia Demo 1.0", 0, 0, rgb16(0,255,0), black );
- grx_text("by Paolo Gai 1999-2001" , 0, 8, rgb16(0,255,0), black );
- grx_text(" pj@sssup.it" , 0,16, rgb16(0,255,0), black );
-
- grx_text("Ctrl-C, Ctrr-C, Enter: exit" ,320, 0, gray, black );
- grx_text("Alt-C : void stat." ,320, 8, gray, black );
- grx_text("Space : create noise ball",320,16, gray, black );
- grx_text("Backspace : kill noise balls" ,320,24, gray, black );
-
-
- #ifdef JET_ON
- scenario_jetcontrol();
- #endif
-
- #ifdef BALL_ON
- scenario_ball();
- #endif
-}
-
-
-void demo_exc_handler(int signo, siginfo_t *info, void *extra)
-{
- struct timespec t;
-
- grx_close();
-
- /* Default action for an kern exception is */
- kern_cli();
- ll_gettime(TIME_EXACT, &t),
- kern_printf("\nS.Ha.R.K. Exception raised!!!"
- "\nTime (s:ns) :%d:%d"
- "\nException number:%d"
- "\nPID :%d\n",
- t.tv_sec, t.tv_nsec, info->si_value.sival_int,
- info->si_task);
- sys_end();
-}
-
-void my_close(void *arg)
-{
- grx_close();
- kern_printf("my_close\n");
-}
-
-
-void endfun(KEY_EVT *k)
-{
- cprintf("Ctrl-Brk pressed! Ending...\n");
- sys_end();
-}
-
-void zerofun(KEY_EVT *k)
-{
- int i;
- for (i=0; i<MAX_PROC; i++) jet_delstat(i);
-}
-
-void printeventqueue(void *arg)
-{
- struct event *p;
- extern struct event *firstevent;
-
- kern_cli();
- grx_close();
- kern_cli();
- for (p = firstevent; p != NULL; p = p->next) {
- kern_printf("par:%d time:%d.%d p:%d handler:%d\n",
- p->par, p->time.tv_sec, p->time.tv_nsec/1000, p, p->handler);
- }
- kern_sti();
-}
-
-int main(int argc, char **argv)
-{
- int modenum;
-
- KEY_EVT k;
-
- srand(4);
-
- version();
-
- keyb_set_map(itaMap);
- k.flag = CNTR_BIT;
- k.scan = KEY_C;
- k.ascii = 'c';
- keyb_hook(k,endfun);
- k.flag = CNTL_BIT;
- k.scan = KEY_C;
- k.ascii = 'c';
- keyb_hook(k,endfun);
- k.flag = ALTL_BIT;
- k.scan = KEY_C;
- k.ascii = 'c';
- keyb_hook(k,zerofun);
- k.flag = 0;
- k.scan = KEY_ENT;
- k.ascii = 13;
- keyb_hook(k,endfun);
-
- set_exchandler_grx();
- sys_atrunlevel(my_close, NULL, RUNLEVEL_BEFORE_EXIT);
-
-
- grx_init();
- modenum = grx_getmode(640, 480, 16);
-
- grx_setmode(modenum);
-
- /* init the graphic mutex */
- app_mutex_init(&mutex);
-
- /* useful colors ... */
- white = rgb16(255,255,255);
- black = rgb16(0,0,0);
- red = rgb16(255,0,0);
- gray = rgb16(128,128,128);
-
- scenario();
-
- #ifdef JET_ON
- init_jetcontrol();
- #endif
-
- #ifdef BALL_ON
- init_ball();
- #endif
-
- group_activate(1);
-
- return 0;
-}
-
-
Index: start/jumpball/jetctrl.c
===================================================================
--- start/jumpball/jetctrl.c (revision 1087)
+++ start/jumpball/jetctrl.c (nonexistent)
@@ -1,244 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: jetctrl.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-// JetControl
-
-#include "demo.h"
-#include "kernel/func.h"
-
-TASK jetdummy_task(void *arg)
-{
- TIME now_dummy, last_dummy, diff_dummy, slice;
- struct timespec now, last, diff;
- int x = 0;
- int height;
-
- NULL_TIMESPEC(&last);
- last_dummy = 0;
- for (;;) {
- task_nopreempt();
- jet_getstat(DUMMY_PID, NULL, NULL, NULL, &now_dummy);
- sys_gettime(&now);
- task_preempt();
-
- SUBTIMESPEC(&now, &last, &diff);
- slice = diff.tv_sec * 1000000 + diff.tv_nsec/1000;
- diff_dummy = now_dummy - last_dummy;
-
- height = (int)(JET_DUMMY_HEIGHT*((float)diff_dummy)/((float)slice));
-
- TIMESPEC_ASSIGN(&last, &now);
- last_dummy = now_dummy;
-
- mutex_lock(&mutex);
- grx_line(JET_DUMMY_X+x,JET_DUMMY_Y,
- JET_DUMMY_X+x,JET_DUMMY_Y+height ,black);
- grx_line(JET_DUMMY_X+x,JET_DUMMY_Y+height,
- JET_DUMMY_X+x,JET_DUMMY_Y+JET_DUMMY_HEIGHT,white);
- grx_line(JET_DUMMY_X+(x+1)%JET_DUMMY_WIDTH,JET_DUMMY_Y,
- JET_DUMMY_X+(x+1)%JET_DUMMY_WIDTH,JET_DUMMY_Y+JET_DUMMY_HEIGHT,255);
- mutex_unlock(&mutex);
-
- x = (x+1)%JET_DUMMY_WIDTH;
-
- task_endcycle();
- }
-}
-
-
-TASK jetctrl_task(void *arg)
-{
- char st[50];
- TIME sum, max;
- int n;
-
- PID i;
- int printed = 0;
-
- for (;;) {
- for (i=2, printed=0; i<MAX_PROC && printed<JET_NTASK; i++) {
- if (jet_getstat(i, &sum, &max, &n, NULL) != -1) {
- if (!n) n=1;
- sprintf(st, "%6d %6d %10s", (int)sum/n, (int)max, proc_table[i].name);
- mutex_lock(&mutex);
- grx_text(st, 384, JET_Y_NAME+16+printed*8, gray, black);
- mutex_unlock(&mutex);
- printed++;
- }
- }
- while (printed<JET_NTASK) {
- mutex_lock(&mutex);
- grx_text(" ",
- 384, JET_Y_NAME+16+printed*8, gray, black);
- mutex_unlock(&mutex);
- printed++;
- }
- task_endcycle();
- }
-}
-
-TASK jetslide_task(void *arg)
-{
- TIME sum, curr, max;
-
- TIME total[JET_NTASK];
- int slides[JET_NTASK];
-
- PID i;
- int printed = 0;
-
- for (;;) {
- // Fill the total array in a nonpreemptive section
- task_nopreempt();
- for (i=2, printed=0; i<MAX_PROC && printed<JET_NTASK; i++) {
- if (jet_getstat(i, &sum, NULL, NULL, &curr) != -1) {
- total[printed] = sum+curr;
- printed++;
- }
- }
- task_preempt();
-
- while (printed < JET_NTASK)
- total[printed++] = 0;
-
- // Compute the Max elapsed time
- max = 0;
- for (i=0; i<JET_NTASK; i++)
- if (total[i] > max) max = total[i];
- if (!max) max = 1;
-
- // Compute the slides width
- for (i=0; i<JET_NTASK; i++)
- slides[i] = (int)( (((float)total[i])/max) * JET_SLIDE_WIDTH);
-
- // print the data
- mutex_lock(&mutex);
- for (i=0; i<JET_NTASK; i++) {
- grx_box(JET_SLIDE_X, JET_Y_NAME+16+i*8,
- JET_SLIDE_X+slides[i], JET_Y_NAME+23+i*8, gray);
- grx_box(JET_SLIDE_X+slides[i], JET_Y_NAME+16+i*8,
- JET_SLIDE_X+JET_SLIDE_WIDTH, JET_Y_NAME+23+i*8, black);
- }
-
- while (i<JET_NTASK) {
- grx_box(JET_SLIDE_X, JET_Y_NAME+16+i*8,
- JET_SLIDE_X+JET_SLIDE_WIDTH, JET_Y_NAME+20+i*8, black);
- i++;
- }
- mutex_unlock(&mutex);
- task_endcycle();
- }
-}
-
-
-void scenario_jetcontrol(void)
-{
- grx_text("System load" , 384, 45, rgb16(0,0,255), black);
- grx_line(384,55,639,55,red);
-
- grx_text(" Mean Max Name Slide", 384, JET_Y_NAME, gray, black);
- grx_line(384,JET_Y_NAME+10,639,JET_Y_NAME+10,gray);
-
- grx_rect(JET_DUMMY_X-1, JET_DUMMY_Y-1,
- JET_DUMMY_X+JET_DUMMY_WIDTH, JET_DUMMY_Y+JET_DUMMY_HEIGHT+1, gray);
-
- grx_text("100%", JET_DUMMY_X-40, JET_DUMMY_Y, gray, black);
- grx_text(" 0%", JET_DUMMY_X-40, JET_DUMMY_Y+JET_DUMMY_HEIGHT-8, gray, black);
-
- grx_line(JET_DUMMY_X-1, JET_DUMMY_Y, JET_DUMMY_X-5, JET_DUMMY_Y, gray);
- grx_line(JET_DUMMY_X-1, JET_DUMMY_Y+JET_DUMMY_HEIGHT, JET_DUMMY_X-5, JET_DUMMY_Y+JET_DUMMY_HEIGHT, gray);
-}
-
-void init_jetcontrol(void)
-{
- SOFT_TASK_MODEL m3, m4, m5;
-
- PID p3, p4, p5;
-
- soft_task_default_model(m3);
- soft_task_def_level(m3,1);
- soft_task_def_period(m3, PERIOD_JETCTRL);
- soft_task_def_met(m3, WCET_JETCTRL);
- soft_task_def_ctrl_jet(m3);
- soft_task_def_group(m3, 1);
- p3 = task_create("jctrl", jetctrl_task, &m3, NULL);
- if (p3 == -1) {
- grx_close();
- perror("Could not create task <jetctrl>");
- sys_end();
- }
-
- soft_task_default_model(m4);
- soft_task_def_level(m4,1);
- soft_task_def_period(m4, PERIOD_JETDUMMY);
- soft_task_def_met(m4, WCET_JETDUMMY);
- soft_task_def_group(m4, 1);
- soft_task_def_usemath(m4);
- soft_task_def_ctrl_jet(m4);
- p4 = task_create("jdmy", jetdummy_task, &m4, NULL);
- if (p4 == -1) {
- grx_close();
- perror("Could not create task <jetdummy>");
- sys_end();
- }
-
- soft_task_default_model(m5);
- soft_task_def_level(m5,1);
- soft_task_def_period(m5, PERIOD_JETSLIDE);
- soft_task_def_met(m5, WCET_JETSLIDE);
- soft_task_def_group(m5, 1);
- soft_task_def_usemath(m5);
- soft_task_def_ctrl_jet(m5);
- p5 = task_create("jsli", jetslide_task, &m5, NULL);
- if (p5 == -1) {
- grx_close();
- perror("Could not create task <jetslide>");
- sys_end();
- }
-}
-
Index: start/jumpball/demo.h
===================================================================
--- start/jumpball/demo.h (revision 1087)
+++ start/jumpball/demo.h (nonexistent)
@@ -1,147 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: demo.h,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-#include <ll/ll.h>
-#include <kernel/types.h>
-#include <kernel/descr.h>
-#include <math.h>
-#include <drivers/glib.h>
-#include <drivers/keyb.h>
-
-
-#define JET_ON
-#define BALL_ON
-
-/*
- *
- * WCET, Periods and Models
- *
- */
-
-
-/* define if you want NRT or SOFT... */
-#define TASK_TYPE SOFT
-//#define TASK_TYPE NRT
-
-#define WCET_JETCTRL 7500
-#define WCET_JETDUMMY 200
-#define WCET_JETSLIDE 2100
-
-#define PERIOD_JETCTRL 100000
-#define PERIOD_JETDUMMY 100000
-#define PERIOD_JETSLIDE 100000
-
-
-#define WCET_BALL 100
-
-#define PERIOD_BALL 10000
-
-/*
- *
- * Global Stuffs
- *
- */
-
-/* graphic mutex... */
-extern mutex_t mutex;
-
-/* useful colors... */
-extern int white;
-extern int black;
-extern int red;
-extern int gray;
-
-void init_jetcontrol();
-void init_ball(void);
-void scenario_jetcontrol();
-void scenario_ball();
-char *itoa(int n, char *s);
-int myrand(int x);
-
-
-
-/*
- *
- * JETCONTROL stuffs
- *
- */
-
-#define JET_NTASK 35
-#define JET_Y_NAME 170
-
-#define DUMMY_PID 1
-
-#define JET_DUMMY_WIDTH 210
-#define JET_DUMMY_HEIGHT 80
-
-/* the point (x, y) is the top left corner */
-#define JET_DUMMY_X 428
-#define JET_DUMMY_Y 65
-
-#define JET_SLIDE_WIDTH 50
-#define JET_SLIDE_X 576
-
-
-
-
-/*
- *
- * BALL stuffs
- *
- */
-
-// x and y corners are specified whithout consider a border of 3 pixels
-#define BALL_Y 450 /* position of the floor */
-#define BALL_HEIGHT 385 /* initial height of the ball */
-#define BALL_XMIN 10 /* min position X of the ball */
-#define BALL_XMAX 370 /* max position X of the ball */
-#define BALL_VELX 5. /* horizontal ball velocity */
-#define BALL_VYMIN 11. /* min ground speed */
-#define BALL_MAX_P 60 /* max number of balls */
-
-#define BALL_GROUP 2 /* task group of the balls */
Index: start/jumpball/readme.txt
===================================================================
--- start/jumpball/readme.txt (revision 1087)
+++ start/jumpball/readme.txt (nonexistent)
@@ -1,75 +0,0 @@
-----------------------------------
-Jumping Balls demo
-
-by
-
-Paolo Gai 1999-2001 - pj@sssup.it
-
-----------------------------------
-
-This demo was created to show some S.Ha.R.K. functionalities in the course
-of Informatica Industriale , University of Pavia, Italy.
-
-The demo is composed by an application (derived by the template application
-distributed on the web site) and two init files.
-
-The demo is composed by:
-
-MAKEFILE The makefile used to compile the application;
- demo is the rule to compile the application with a CBS scheduler
- demo2 is the rule to compile the application with a RR scheduler
-README.TXT This file
-DEMO.H Some constants used into the demo
-INITFIL1.C The CBS initfile
-INITFIL2.C The EDF initfile
-INITFILE.C A makefile that cover either EDF+CBS and RR
-BALL.C The Jumping balls part of the demo
-DEMO.C The main() function and some other utility function
-JETCTRL.C The JET part of the demo
-
-
-The demo works as follows:
-- It works at 640x480 16 bit colors
-- on the left, there is the jumping ball arena, on the rigth there is the
- statistics about the tasks into the system.
-
-- the tasks are guaranteed using CBS and EDF. The wcet and mean execution
- time on my portable after a few minutes are (us):
-
- JetCtrl 7400 max 7500 CBS met
- JetDummy 135 max 200 CBS met
- JetSlide 2100 max 2100 CBS met
- Balls 276 max 380 EDF wcet for hard ball,100 CBS met for soft ones
-
- The system should go overloaded with 40 soft balls.
-
-- The idea is the following:
- - first, an edf guaranteed ball is created.
- - then, create a set of soft ball using space. since their met is < than the
- real met, they posticipate the deadlines.
- - if they are killed, they remain for some seconds in the zombie state
- - if a set of soft ball arde created (i.e., 10), and after a while all the
- others are created, the bandwidth is fully used, and the task posticipate
- their deadlines. the first set of tasks stops jumping when the bandwidth
- is full utilized by the newest balls until all the tasks have similar
- deadlines.
- - Note on the left the slides that represents the relative ratio
- between the tasks.
- - Note that in overload conditions the EDF task is still guaranteed
- - Note that PI is used with EDF, also if no theory says that it is good:
- - S.Ha.R.K. allows that, it is the user that have to choose if that is
- a non-sense
- - PI is independent from the implemnentation of the scheduling modules
- - if the second init file is used, RR is used instead of EDF+CBS.
- - In overload condition RR perform differently from EDF+CBS, giving to
- each task an equal fraction of bandwidth
-
- - note also:
- - the redefinition of the standard exception handler
- - the redefinition of the keys and the initialization of the keyboard
- - the myend exit function
- - the main() that terminates
- - the two parts (ball and jet) can be excluded using a #define
-
-If You have any question, please contact the author...
-
Index: start/jumpball/ball.c
===================================================================
--- start/jumpball/ball.c (revision 1087)
+++ start/jumpball/ball.c (nonexistent)
@@ -1,239 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: ball.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*--------------------------------------------------------------*/
-/* SIMULATION OF JUMPING BALLS */
-/*--------------------------------------------------------------*/
-
-#include "demo.h"
-#include <kernel/func.h>
-#include <stdlib.h>
-
-#define R 8 /* dimension of a ball */
-#define G 9.8 /* acceleration of gravity */
-
-static int ballexit = 0;
-static int npc = 0; /* number of tasks created */
-
-/*--------------------------------------------------------------*/
-/* Periodic task for ball simulation */
-/*--------------------------------------------------------------*/
-
-TASK palla(int i)
-{
-int x, y; /* coordinate grafiche pallina */
-int ox, oy; /* vecchia posizione pallina */
-int x0, y0; /* posizione iniziale X pallina */
-float vx, vy; /* velocit… della pallina */
-float vy0; /* velocita' pallina al primo rimbalzo */
-float ty, tx; /* variabile temporale */
-float dt; /* incremento temporale */
-
- y = oy = y0 = BALL_HEIGHT;
- x = ox = x0 = BALL_XMIN;
-
- vy0= sqrt(2. * G * (float)BALL_HEIGHT);
- vy = 0;
- vx = BALL_VELX + myrand(9);
- tx = 0;
- ty = 0;
- dt = ((float)PERIOD_BALL)/100000;
-
- while (1) {
- y = y0 + vy*ty - .5*G*ty*ty;
- x = x0 + vx * tx;
-
- if (y < 0) {
- y = 0;
-
- if (vy == 0.0)
- vy = vy0;
- else if (vy < BALL_VYMIN)
- vy = vy0 * (1.0 - myrand(50)/100.0);
- else
- vy = 0.9 * vy;
-
- ty = 0.0;
- y0 = 0;
- }
-
- if (x > BALL_XMAX) {
- tx = 0.0;
- x0 = BALL_XMAX;
- vx = -vx;
- x = x0 + vx * tx;
- }
-
- if (x < BALL_XMIN) {
- tx = 0.0;
- x0 = BALL_XMIN;
- vx = -vx;
- x = x0 + vx * tx;
- }
-
- mutex_lock(&mutex);
- grx_disc(ox, oy, R, 0);
- ox = x;
- oy = BALL_Y - y;
- mutex_unlock(&mutex);
-
- if (ballexit && i!=0xFFFF) {
- npc--;
- return 0;
- }
-
- mutex_lock(&mutex);
- grx_disc(ox, oy, R, i);
- mutex_unlock(&mutex);
-
- {
- int xxx;
- for (xxx=0; xxx<10000; xxx++);
- }
- ty += dt;
- tx += dt;
- task_endcycle();
- }
-}
-
-void killball(KEY_EVT *k)
-{
- ballexit = 1;
-}
-
-void ballfun(KEY_EVT *k)
-{
- SOFT_TASK_MODEL mp;
- int r,g,b;
- PID pid;
- char palla_str[]="palla ";
-
- if (npc == BALL_MAX_P) return;
-
- ballexit = 0;
-
- r = 64 + myrand(190);
- g = 64 + myrand(190);
- b = 64 + myrand(190);
-
- itoa(npc,palla_str+5);
-
- soft_task_default_model(mp);
- soft_task_def_level(mp,1);
- soft_task_def_ctrl_jet(mp);
- soft_task_def_arg(mp, (void *)rgb16(r,g,b));
- soft_task_def_group(mp, BALL_GROUP);
- soft_task_def_met(mp, WCET_BALL);
- soft_task_def_period(mp,PERIOD_BALL);
- soft_task_def_usemath(mp);
- pid = task_create(palla_str, palla, &mp, NULL);
-
- if (pid != NIL) {
- task_activate(pid);
- npc++;
- }
-}
-
-void hardball()
-{
- HARD_TASK_MODEL mp;
- int r,g,b;
- PID pid;
-
- r = 255;
- g = 255;
- b = 255;
-
- hard_task_default_model(mp);
- hard_task_def_ctrl_jet(mp);
- hard_task_def_arg(mp, (void *)rgb16(r,g,b));
- hard_task_def_wcet(mp, 380);
- hard_task_def_mit(mp,PERIOD_BALL);
- hard_task_def_usemath(mp);
- pid = task_create("pallaEDF", palla, &mp, NULL);
- if (pid == NIL) {
- grx_close();
- perror("Could not create task <pallaEDF>");
- sys_end();
- }
- else
- task_activate(pid);
-}
-
-
-/*--------------------------------------------------------------*/
-/* MAIN process */
-/*--------------------------------------------------------------*/
-
-void scenario_ball()
-{
- grx_text("Noise", 0, 45 /*BALL_Y-BALL_HEIGHT-15*/, rgb16(0,0,255), black);
- grx_line(0,55,383,55,red);
-//grx_line(0,BALL_Y-BALL_HEIGHT-6,383,BALL_Y-BALL_HEIGHT-6,red);
-
- grx_rect(BALL_XMIN-R-1, BALL_Y-BALL_HEIGHT-R-1,
- BALL_XMAX+R+1, BALL_Y+R+1, rgb16(0,200,0));
-}
-
-void init_ball(void)
-{
- KEY_EVT k;
-
- hardball();
-
- k.flag = 0;
- k.scan = KEY_SPC;
- k.ascii = ' ';
- keyb_hook(k,ballfun);
-
- k.flag = 0;
- k.scan = KEY_BKS;
- k.ascii = ' ';
- keyb_hook(k,killball);
-}
-
-/*--------------------------------------------------------------*/
Index: start/jumpball/makefile
===================================================================
--- start/jumpball/makefile (revision 1087)
+++ start/jumpball/makefile (nonexistent)
@@ -1,19 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= demo
-
-include $(BASE)/config/example.mk
-
-demo:
- make -f $(SUBMAKE) APP=demo INIT= OTHEROBJS="initfil1.o ball.o jetctrl.o" OTHERINCL=
-
-demo2:
- make -f $(SUBMAKE) APP=demo INIT= OTHEROBJS="initfil2.o ball.o jetctrl.o" OTHERINCL=
-
Index: start/jumpball/initfil1.c
===================================================================
--- start/jumpball/initfil1.c (revision 1087)
+++ start/jumpball/initfil1.c (nonexistent)
@@ -1,118 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: initfil1.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-#include "modules/rr.h"
-#include "modules/dummy.h"
-
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "modules/cabs.h"
-#include "modules/pi.h"
-#include "modules/pc.h"
-#include "modules/srp.h"
-#include "modules/npp.h"
-#include "modules/nop.h"
-
-#include "drivers/keyb.h"
-
-
-/*+ sysyem tick in us +*/
-#define TICK 0
-
-/*+ RR tick in us +*/
-//#define RRTICK 10000
-#define RRTICK 2000
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- EDF_register_level(EDF_ENABLE_ALL);
- CBS_register_level(CBS_ENABLE_ALL, 0);
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- dummy_register_level();
-
-
- SEM_register_module();
-
- CABS_register_module();
-
- PI_register_module();
- NOP_register_module();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- KEYB_PARMS kparms = BASE_KEYB;
-
- HARTPORT_init();
-
- keyb_def_ctrlC(kparms, NULL);
- KEYB_init(&kparms);
-
- __call_main__(mb);
-
- return (void *)0;
-}
-
-
-void app_mutex_init(mutex_t *m)
-{
- PI_mutexattr_t attr;
-
- PI_mutexattr_default(attr);
-
- mutex_init(m, &attr);
-}
-
Index: start/robots/lab1m.txt
===================================================================
--- start/robots/lab1m.txt (revision 1087)
+++ start/robots/lab1m.txt (nonexistent)
@@ -1,9 +0,0 @@
-1
-540 380 15 270
-380 300 400 5
-430 060 460 400 0
-350 100 430 130 0
-000 100 300 130 0
-150 200 430 230 0
-120 300 150 400 0
-
Index: start/robots/mouse2.c
===================================================================
--- start/robots/mouse2.c (revision 1087)
+++ start/robots/mouse2.c (nonexistent)
@@ -1,935 +0,0 @@
-/*--------------------------------------------------------------*/
-/* Title: Mouse */
-/* Autor: João Capucho */
-/* Date: 9/12/2000 */
-/* Description: */
-/* Simulation of small automats based on the */
-/* "micro-rato" conteste */
-/*--------------------------------------------------------------*/
-
-/*
- * Copyright (C) 2001 João Capucho
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-// Includes
-#include <ll/i386/x-dos.h>
-#include <kernel/kern.h>
-#include <drivers/glib.h>
-#include <drivers/keyb.h>
-#include <math.h>
-#include <stdlib.h>
-#include <limits.h>
-
-#define sqr(x) (x*x)
-
-// Error Types
-#define OK 0
-#define MEMORY_ERROR -1
-#define ILEGAL_PARAMETER -2
-
-// Types of sensors and motors
-#define NONE 0
-#define OBSTACLE 1
-#define BEACON 2
-#define GROUND 3
-#define STEP 4
-
-// Maze limits
-#define LAB_XMIN 40
-#define LAB_XMAX 600
-#define LAB_YMIN 40
-#define LAB_YMAX 440
-
-#define MOTOR_RIGHT 1
-#define MOTOR_LEFT 0
-
-#define BACKCOLOR 0 // Background color
-#define OUTCOLOR 14 // Color of the outside walls
-#define FINISHCOLOR 7 // Finishin area color
-#define NONBLOCKCOLOR 14 // Non block boxs
-#define BLOCKCOLOR 13 // Block boxs
-
-#define BOX_BLOCK 1 // The box blocks the beacon
-#define BOX_NON_BLOCK 2 // The box doesn´t block the beacon
-
-#define MAX_MOUSES 5 // Maximum of mouses in the Maze
-#define MAX_BOXS 100 // Maximum of boxs in the Maze
-#define MAX_SENSORS 20 // Maximum of sensors in each mouse
-#define SENSOR_MIN_GROUND 0 // Minimum value of a ground sensor
-#define SENSOR_MAX_GROUND 255 // Maximum value of a ground sensor
-#define SENSOR_MIN_OBSTACLE 77 // Minimum value of a obstacle sensor
-#define SENSOR_MAX_OBSTACLE 128 // Maximum value of a obstacle sensor
-#define SENSOR_MIN_BEACON 77 // Minimum value of a beacon sensor
-#define SENSOR_MAX_BEACON 128 // Maximum value of a beacon sensor
-#define BEACON_INTENSITY 400 // Maximun intensity of the beacon
-
-#define MOUSE_PERIOD 20000 // Period
-#define CALC_PERIOD 2000 // Period
-#define REFEREE_PERIOD 1000 // Period of the referee
-#define REDRAW_MOUSE_PERIOD 25000 // Period for redraw mouse
-#define REDRAW_MAZE_PERIOD 100000 // Period for redraw maze
-#define MOUSEGROUP 511
-
-struct SENSOR
-{
- int Type; // Tipe of sensor ( None - Obstacle - Beacon - Ground)
- int Radius; // Distance from de center of the mouse
- int Pos_Angle; // Angle between the sensor and the front of the mouse
- int Dir; // Angle between the direction of the sensores and the front of the mouse
- int Angle; // Half angle of visual field (between (Dir-Angle) and (Dir+Angle))
- int Intensity; // Sensativity of the sensor
- float Value; // Last value readed
-};
-
-struct MOTOR
-{
- int Radius; // Distance from de center of the mouse
- int V; // Current velocity
- float Old_V; // Previews velocity
-};
-
-struct MOUSE
-{
- float X, Y; // Current position of the center
- float Old_X, Old_Y; // Previous position of the center
- int Radius; // Size of the mouse ( every mouse is considered round )
- float Dir; // Points to the front
- float Old_Dir; // Previous front
- int NSensors; // Number of sensors in the mouse
- struct SENSOR Sensors[MAX_SENSORS]; // Pointer to the structer that contains the information of the sensors
- struct MOTOR Motors[2]; // Pointer to the structer that contains the information of the motors
- WORD NColision; // Total of colisions
- WORD PColision; // Auxiliar for colisions
- char Flag; // Initialization flag
-};
-
-
-
-struct BOX // Structer that represents the obstacles
-{ //in this case all the obstacles are boxs
- int Type; // Type of the obstatcle
- int X1, Y1, X2, Y2; // position of the box
-};
-
-struct SBEACON // Beacon information
-{
- int Intensity; // Intensity of the beacon
- int X, Y; // position of the beacon
-};
-
-struct MAZE
-{
- int X1, Y1, X2, Y2; // limites of the maze
- int NBoxs; // Number of objstacles in the maze
- struct BOX Boxs[MAX_BOXS]; // Information about all thr obstacles
- struct SBEACON Beacon; // Beacon data
- int Radius; // Size of the finishing area
-};
-
-int Seno[360+90]; // Sine table
-int Tang[180]; // Tangente table
-int NMouses=0;
-struct MOUSE Mouse[MAX_MOUSES]; // Global variable that represents all the mouses
-struct MAZE Maze; // Global variable that represents the maze
-
-// Init_Maze - Initialize the Maze
-// Beacon_X - Coordinate X of the beacon
-// Beacon_Y - Coordinate Y of the beacon
-// Intensity - Intensity of the beacon
-// NBoxs - Number of boxs in the maze
-// Return: OK - Sucess
-
-int Init_Maze(int Beacon_X, int Beacon_Y, int Intensity, int NBoxs)
-{
- int i;
- Maze.X1=LAB_XMIN;
- Maze.Y1=LAB_YMIN;
- Maze.X2=LAB_XMAX;
- Maze.Y2=LAB_YMAX;
- Maze.Beacon.X=Beacon_X+LAB_XMIN;
- Maze.Beacon.Y=Beacon_Y+LAB_YMIN;
- if (Intensity<BEACON_INTENSITY)
- Maze.Beacon.Intensity=Intensity;
- else
- Maze.Beacon.Intensity=BEACON_INTENSITY;
- if (NBoxs<MAX_BOXS)
- Maze.NBoxs=NBoxs;
- else
- Maze.NBoxs=MAX_BOXS;
- Maze.Radius=50;
- for(i=0; i < Maze.NBoxs; i++)
- Maze.Boxs[i].Type=NONE;
- return OK;
-}
-
-// Init_Box - Initialize data of the NBox obstacle
-// NBox - Identifier of the obstacle
-// X1 - Coordinate X
-// Y1 - Coordinate Y
-// X2 - Coordinate X
-// Y2 - Coordinate Y
-// Type - Type of the obstacle
-// Return: OK - Sucess
-
-int Init_Box(int NBox, int X1, int Y1, int X2, int Y2, int Type)
-{
- Maze.Boxs[NBox].Type=Type;
- if (X1<X2)
- {
- Maze.Boxs[NBox].X1=X1+LAB_XMIN;
- Maze.Boxs[NBox].X2=X2+LAB_XMIN;
- }
- else
- {
- Maze.Boxs[NBox].X1=X2+LAB_XMIN;
- Maze.Boxs[NBox].X2=X1+LAB_XMIN;
- }
- if (Y1<Y2)
- {
- Maze.Boxs[NBox].Y1=Y1+LAB_YMIN;
- Maze.Boxs[NBox].Y2=Y2+LAB_YMIN;
- }
- else
- {
- Maze.Boxs[NBox].Y1=Y2+LAB_YMIN;
- Maze.Boxs[NBox].Y2=Y1+LAB_YMIN;
- }
- return OK;
-}
-
-// Draw_Maze - Draws the outline of the maze and the obstacles
-// Return: OK - Sucess
-int Draw_Maze(void)
-{
- int i;
- grx_rect( Maze.X1, Maze.Y1, Maze.X2, Maze.Y2, OUTCOLOR);
- grx_rect( Maze.X1-1, Maze.Y1+1, Maze.X2+1, Maze.Y2+1, OUTCOLOR);
- grx_rect( Maze.X1-2, Maze.Y1+2, Maze.X2+2, Maze.Y2+2, OUTCOLOR);
- grx_circle(Maze.Beacon.X, Maze.Beacon.Y, Maze.Radius, FINISHCOLOR);
- grx_disc(Maze.Beacon.X, Maze.Beacon.Y, 10, 7);
- for (i=0; i<Maze.NBoxs; i++)
- {
- if (Maze.Boxs[i].Type==BOX_NON_BLOCK)
- grx_box(Maze.Boxs[i].X1, Maze.Boxs[i].Y1,
- Maze.Boxs[i].X2, Maze.Boxs[i].Y2, NONBLOCKCOLOR);
- if (Maze.Boxs[i].Type==BOX_BLOCK)
- grx_box(Maze.Boxs[i].X1, Maze.Boxs[i].Y1,
- Maze.Boxs[i].X2, Maze.Boxs[i].Y2, BLOCKCOLOR);
- }
- return OK;
-}
-
-int Init_Motor(int NMouse, int Motor, int Radius)
-{
- if ((NMouse<0) || (NMouse>=MAX_MOUSES))
- return ILEGAL_PARAMETER;
- if ((Motor<0) || (Motor>=2))
- return ILEGAL_PARAMETER;
- Mouse[NMouse].Motors[Motor].Radius=Radius;
- Mouse[NMouse].Motors[Motor].V=0;
- Mouse[NMouse].Motors[Motor].Old_V=0.0;
- return OK;
-}
-
-// Init_Mouse - inicialize the parameters of each mouse
-// NMouse - Identifier of the mouse
-// X - Coordinate X of the center
-// Y - Coordinate Y of the center
-// Radius - Radius of the mouse (size)
-// Dir - Angle of direction in witch i will start
-// NSensors - Number of sensors in the mouse (all types)
-//
-// Return: OK - Sucess
-// ILEGAL_PARAMETER - If NMouse negative of greater than maximum number of mouses
-// Note: All the types of sensors and motors are initialize to NONE
-
-int Init_Mouse(int NMouse, int X, int Y, int Radius, int Dir, int NSensors)
-{
- int i;
- if ((NMouse<0) || (NMouse>=MAX_MOUSES))
- return ILEGAL_PARAMETER;
- if ((NSensors<0) || (NSensors>MAX_SENSORS))
- return ILEGAL_PARAMETER;
- Mouse[NMouse].X=(float)X+LAB_XMIN;
- Mouse[NMouse].Y=(float)Y+LAB_YMIN;
- Mouse[NMouse].Radius=Radius;
- Mouse[NMouse].Dir=Dir;
- Mouse[NMouse].Old_Dir=Mouse[NMouse].Dir;
- Mouse[NMouse].NSensors=NSensors;
- Mouse[NMouse].Old_X=Mouse[NMouse].X;
- Mouse[NMouse].Old_Y=Mouse[NMouse].Y;
- Mouse[NMouse].NColision=0;
- Mouse[NMouse].PColision=0;
- for(i=0; i < Mouse[NMouse].NSensors; i++)
- Mouse[NMouse].Sensors[i].Type=NONE;
-
- Init_Motor(NMouse, MOTOR_LEFT, 10);
- Init_Motor(NMouse, MOTOR_RIGHT, -10);
-
- return OK;
-}
-
-// Init_Sensor - Initializes the sensor information
-// NMouse - Identifier of the mouse
-// Sensor - Identifier of the sensor to be used
-// Type - Type of sensor ( Ground, obstacle or beacon sensor )
-// Radius and Pos_Angle - Polar coordinates to determen the sensor position
-// Dir - Diretion of the sensor ( angle between the front and the sensor )
-// Angle - Half of the visual range
-// Intensity - Maximun distance of detect
-int Init_Sensor(int NMouse, int Sensor, int Type, int Radius,
- int Pos_Angle, int Dir, int Angle, int Intensity)
-{
- if ((NMouse<0) || (NMouse>=MAX_MOUSES))
- return ILEGAL_PARAMETER;
- if ((Sensor<0) || (Sensor>=Mouse[NMouse].NSensors))
- return ILEGAL_PARAMETER;
- Mouse[NMouse].Sensors[Sensor].Type=Type;
- Mouse[NMouse].Sensors[Sensor].Radius=Radius;
- Mouse[NMouse].Sensors[Sensor].Pos_Angle=Pos_Angle;
- Mouse[NMouse].Sensors[Sensor].Dir=Dir;
- Mouse[NMouse].Sensors[Sensor].Angle=Angle;
- Mouse[NMouse].Sensors[Sensor].Intensity=Intensity;
- if (Type == GROUND)
- Mouse[NMouse].Sensors[Sensor].Value=(float)SENSOR_MIN_GROUND;
- if (Type == OBSTACLE)
- Mouse[NMouse].Sensors[Sensor].Value=(float)SENSOR_MIN_OBSTACLE;
- if (Type == BEACON)
- Mouse[NMouse].Sensors[Sensor].Value=(float)SENSOR_MIN_BEACON;
- return OK;
-}
-
-int Set_Motor_Vel(int NMouse, int NMotor, int Vel)
-{
- if ((NMouse<0) || (NMouse>=MAX_MOUSES))
- return ILEGAL_PARAMETER;
- if ((NMotor<0) || (NMotor>2))
- return ILEGAL_PARAMETER;
- Mouse[NMouse].Motors[NMotor].V=Vel;
- return OK;
-}
-
-int Read_Sensor(int NMouse, int NSensor)
-{
- int X, Y, Dir, cr, sr, AuxX, AuxY;
- int Count, AuxCount, AngCount, AuxAngCount, RetColor, Intensity;
- float Auxf;
-
- /* Inicial verifications */
- if ((NMouse<0) || (NMouse>=MAX_MOUSES))
- return ILEGAL_PARAMETER;
- if ((NSensor<0) || (NSensor>Mouse[NMouse].NSensors))
- return ILEGAL_PARAMETER;
-
- /* If Sensor Not define exit */
- if ( Mouse[NMouse].Sensors[NSensor].Type == NONE )
- return OK;
-
- /* Calculate de position of the sensor and is direction */
- Dir=(int)Mouse[NMouse].Old_Dir+Mouse[NMouse].Sensors[NSensor].Dir;
- if (Dir >= 360)
- Dir -= 360;
- if (Dir < 0)
- Dir += 360;
- X= Mouse[NMouse].Old_X*65536.0+((Mouse[NMouse].Sensors[NSensor].Radius*Seno[Dir+90]));
- Y= Mouse[NMouse].Old_Y*65536.0+((Mouse[NMouse].Sensors[NSensor].Radius*Seno[Dir]));
-
- /* if the Sensor type is OBSTACLE */
- if ( Mouse[NMouse].Sensors[NSensor].Type == OBSTACLE )
- {
- Intensity=Mouse[NMouse].Sensors[NSensor].Intensity;
- AuxCount=Intensity;
- /* Scan all the visual field */
- for (AngCount=(-Mouse[NMouse].Sensors[NSensor].Angle);
- AngCount<=Mouse[NMouse].Sensors[NSensor].Angle;
- AngCount++)
- {
- AuxAngCount=Dir+AngCount;
- if (AuxAngCount >= 360)
- AuxAngCount -= 360;
- if (AuxAngCount < 0)
- AuxAngCount += 360;
- sr=Seno[AuxAngCount];
- cr=Seno[AuxAngCount+90];
- Count=Mouse[NMouse].Radius-Mouse[NMouse].Sensors[NSensor].Radius+2;
- AuxX = X+cr*Count;
- AuxY = Y+sr*Count;
- for (; Count<=AuxCount; Count++)
- {
- AuxX += cr;
- AuxY += sr;
- RetColor = grx_getpixel(AuxX >> 16, AuxY >> 16);
- if ((RetColor != BACKCOLOR)&&(RetColor != FINISHCOLOR))
- AuxCount=Count;
- }
- }
- Count=Mouse[NMouse].Sensors[NSensor].Intensity;
- Count*=Count;
- AuxCount*=AuxCount;
- Count = SENSOR_MAX_OBSTACLE-((SENSOR_MAX_OBSTACLE-SENSOR_MIN_OBSTACLE)
- *AuxCount)/Count;
- Mouse[NMouse].Sensors[NSensor].Value=
- (0.5*Mouse[NMouse].Sensors[NSensor].Value+0.5*(float)Count);
- }
- if ( Mouse[NMouse].Sensors[NSensor].Type == GROUND )
- {
- Mouse[NMouse].Sensors[NSensor].Value=(float)SENSOR_MIN_GROUND;
- AuxX=abs((X>>16)-Maze.Beacon.X);
- AuxY=abs((Y>>16)-Maze.Beacon.Y);
- if ((AuxX>50) || (AuxY>50))
- return OK;
- if ((AuxX*AuxX+AuxY*AuxY)<Maze.Radius*Maze.Radius)
- Mouse[NMouse].Sensors[NSensor].Value=(float)SENSOR_MAX_GROUND;
- }
-
- if ( Mouse[NMouse].Sensors[NSensor].Type == BEACON )
- {
- AuxX=(X>>16)-Maze.Beacon.X;
- AuxY=(Y>>16)-Maze.Beacon.Y;
- AngCount=0;
- if (AuxX!=0)
- {
- AuxAngCount=(AuxY<<16)/AuxX;
- if (AuxAngCount<0)
- AngCount=90;
- for (Count=AngCount;Count<AngCount+90;Count++)
- {
- if ((Tang[Count]<=AuxAngCount) && (Tang[Count+1]>AuxAngCount))
- break;
- }
- }
- else
- Count=90;
- if (AuxY<0)
- Count+=180;
- AuxAngCount=abs(180-abs(Dir-Count));
- Count=SENSOR_MIN_BEACON;
- if (AuxAngCount<Mouse[NMouse].Sensors[NSensor].Angle)
- {
- Count=AuxX*AuxX+AuxY*AuxY;
- AuxCount=(int)((float)Maze.Beacon.Intensity*(1.0+(0.4*(float)AuxAngCount)/(float)Mouse[NMouse].Sensors[NSensor].Angle));
- AuxCount*=AuxCount;
- if (Count<AuxCount)
- Count = SENSOR_MAX_OBSTACLE-((SENSOR_MAX_OBSTACLE-SENSOR_MIN_OBSTACLE)*Count)/AuxCount;
- else
- Count=SENSOR_MIN_BEACON;
- }
- Auxf=0.5*((float)Count);
- Auxf+=0.5*((float)Mouse[NMouse].Sensors[NSensor].Value);
- Mouse[NMouse].Sensors[NSensor].Value=Auxf;
- }
- return OK;
-}
-
-int GetSensor(int NMouse, int NSensor)
-{
- if ((NMouse<0) || (NMouse>=MAX_MOUSES))
- return ILEGAL_PARAMETER;
- if ((NSensor<0) || (NSensor>Mouse[NMouse].NSensors))
- return ILEGAL_PARAMETER;
- return (int)Mouse[NMouse].Sensors[NSensor].Value;
-}
-
-int Draw_Mouse(int NMouse, int Flag)
-{
- int Color;
- if (!Flag)
- Color=BACKCOLOR;
- else
- {
- Mouse[NMouse].Old_X=Mouse[NMouse].X;
- Mouse[NMouse].Old_Y=Mouse[NMouse].Y;
- Mouse[NMouse].Old_Dir=Mouse[NMouse].Dir;
- Color=2;
- }
- grx_circle(Mouse[NMouse].Old_X, Mouse[NMouse].Old_Y, Mouse[NMouse].Radius, Color);
- grx_line(Mouse[NMouse].Old_X, Mouse[NMouse].Old_Y,
- Mouse[NMouse].Old_X+((Mouse[NMouse].Radius*Seno[(int)Mouse[NMouse].Old_Dir+90]) >> 16),
- Mouse[NMouse].Old_Y+((Mouse[NMouse].Radius*Seno[(int)Mouse[NMouse].Old_Dir]) >> 16), Color);
- return OK;
-}
-
-TASK Redraw_Mouse_Task(int NMouse)
-{
- char str[40];
- TIME dwTicks;
- while(1)
- {
- dwTicks=sys_gettime(NULL);
- Draw_Mouse(NMouse, FALSE);
- Draw_Mouse(NMouse, TRUE);
- sprintf(str,"Colision: %4d", (int)Mouse[NMouse].NColision);
- grx_text(str, NMouse*150, 21, 7, 0);
- sprintf(str,"Motor: %4d Sensor 0: %4d Sensor 1: %4d Sensor 2: %4d Sensor 3: %4d",
- (int)Mouse[NMouse].Motors[0].Old_V+(int)Mouse[NMouse].Motors[1].Old_V,
- (int)Mouse[NMouse].Sensors[0].Value, (int)Mouse[NMouse].Sensors[1].Value,
- (int)Mouse[NMouse].Sensors[2].Value, (int)Mouse[NMouse].Sensors[3].Value);
- if (NMouse==0)
- grx_text(str, 1, 1, 7, 0);
- sprintf(str,"Sensor 4: %4d Sensor 5: %4d Ticks: %4d",
- (int)Mouse[NMouse].Sensors[4].Value, (int)Mouse[NMouse].Sensors[5].Value,
- (int)(sys_gettime(NULL)-dwTicks)/1000);
- if (NMouse==0)
- grx_text(str, 1, 11, 7, 0);
- task_endcycle();
- }
-}
-
-TASK Redraw_Maze_Task(void)
-{
- while(1)
- {
- Draw_Maze();
- task_endcycle();
- }
-}
-
-TASK Referee(void)
-{
- int Counter, Box_Min_X, Box_Max_X ,Box_Min_Y, Box_Max_Y;
- int deltaX, deltaY, Radius;
- int Colision;
- int NMouse;
-
- while(1)
- {
- for(NMouse=0;NMouse<NMouses;NMouse++)
- {
- Colision=0;
- Radius=Mouse[NMouse].Radius;
- if(Mouse[NMouse].Y<(Maze.Y1+Radius))
- Colision++;
- if(Mouse[NMouse].Y>(Maze.Y2-Radius))
- Colision++;
- if(Mouse[NMouse].X<(Maze.X1+Radius))
- Colision++;
- if(Mouse[NMouse].X>(Maze.X2-Radius))
- Colision++;
- for(Counter=0; Counter<Maze.NBoxs; Counter++)
- {
- Box_Min_X=Maze.Boxs[Counter].X1-1;
- Box_Max_X=Maze.Boxs[Counter].X2+1;
- Box_Min_Y=Maze.Boxs[Counter].Y1-1;
- Box_Max_Y=Maze.Boxs[Counter].Y2+1;
- Radius=Mouse[NMouse].Radius;
- if(Mouse[NMouse].Y<(Box_Min_Y-Radius))
- continue;
- if(Mouse[NMouse].Y>(Box_Max_Y+Radius))
- continue;
- if(Mouse[NMouse].X<(Box_Min_X-Radius))
- continue;
- if(Mouse[NMouse].X>(Box_Max_X+Radius))
- continue;
- if((Mouse[NMouse].X>=Box_Min_X) && (Mouse[NMouse].X<=Box_Max_X))
- if((Mouse[NMouse].Y>=(Box_Min_Y-Radius))
- && (Mouse[NMouse].Y<=(Box_Max_Y+Radius)))
- Colision++;
- if((Mouse[NMouse].Y>=Box_Min_Y) && (Mouse[NMouse].Y<=Box_Max_Y))
- if((Mouse[NMouse].X>=(Box_Min_X-Radius))
- && (Mouse[NMouse].X<=(Box_Max_X+Radius)))
- Colision++;
- Radius=sqr(Radius);
- deltaX=sqr(Mouse[NMouse].X-Box_Min_X);
- deltaY=sqr(Mouse[NMouse].Y-Box_Min_Y);
- if(deltaX+deltaY<=Radius)
- Colision++;
- deltaY=sqr(Mouse[NMouse].Y-Box_Max_Y);
- if(deltaX+deltaY<=Radius)
- Colision++;
- deltaX=sqr(Mouse[NMouse].X-Box_Max_X);
- deltaY=sqr(Mouse[NMouse].Y-Box_Min_Y);
- if(deltaX+deltaY<=Radius)
- Colision++;
- deltaY=sqr(Mouse[NMouse].Y-Box_Max_Y);
- if(deltaX+deltaY<=Radius)
- Colision++;
- }
- if (Mouse[NMouse].PColision && !Colision)
- Mouse[NMouse].NColision++;
-
- Mouse[NMouse].PColision=Colision;
- }
- task_endcycle();
- }
- return (void *)0;
-}
-
-TASK Calculate_Position(int NMouse)
-{
- float w, v, dt;
- int b;
- while(1)
- {
- b=(Mouse[NMouse].Motors[MOTOR_LEFT].Radius-
- Mouse[NMouse].Motors[MOTOR_RIGHT].Radius);
- if (b<0)
- b=-b;
- w=(Mouse[NMouse].Motors[MOTOR_LEFT].Old_V-
- Mouse[NMouse].Motors[MOTOR_RIGHT].Old_V);
- w/=(float)b;
- v=(Mouse[NMouse].Motors[MOTOR_LEFT].Old_V+
- Mouse[NMouse].Motors[MOTOR_RIGHT].Old_V);
- v/=2.0;
- dt=CALC_PERIOD/1000000.0;
- Mouse[NMouse].Dir += (180.0*w/PI)*dt;
- if (Mouse[NMouse].Dir >= 360)
- Mouse[NMouse].Dir -= 360;
- if (Mouse[NMouse].Dir < 0)
- Mouse[NMouse].Dir += 360;
- v *= dt/65536.0;
- b=(float)Seno[(int)Mouse[NMouse].Dir+90];
- Mouse[NMouse].X += v*b;
- b=(float)Seno[(int)Mouse[NMouse].Dir];
- Mouse[NMouse].Y += v*b;
- Mouse[NMouse].Motors[0].Old_V=
- (0.8187*Mouse[NMouse].Motors[0].Old_V+
- 0.1813*(float)Mouse[NMouse].Motors[0].V);
- Mouse[NMouse].Motors[1].Old_V=
- (0.8187*Mouse[NMouse].Motors[1].Old_V+
- 0.1813*(float)Mouse[NMouse].Motors[1].V);
- task_endcycle();
- }
-}
-
-#define SENSOR_LEFT 0
-#define SENSOR_FRONT 1
-#define SENSOR_RIGTH 2
-#define SENSOR_GROUND 3
-#define SENSOR_B_LEFT 4
-#define SENSOR_B_RIGHT 5
-#define MAX_SPEED 50
-#define DIST_DIR GetSensor(NMouse, SENSOR_RIGTH)
-#define DIST_ESQ GetSensor(NMouse, SENSOR_LEFT)
-#define DIST_FRENTE GetSensor(NMouse, SENSOR_FRONT)
-#define FAROL_ESQ GetSensor(NMouse, SENSOR_B_LEFT)
-#define FAROL_DIR GetSensor(NMouse, SENSOR_B_RIGHT)
-#define FAROL_LIM_INF SENSOR_MIN_BEACON+5
-
-#define DIST0 88 //Distancia minima optima
-#define DIST1 DIST0 + 5 // 60%
-#define DIST2 DIST1 + 10 // PARADO
-#define DIST3 DIST2 + 10 // TRAS
-
-#define DISTMAX 120
-#define NENHUM 0
-#define ESQUERDA 1
-#define DIREITA 2
-#define contorno ContornoArr[NMouse]
-
-TASK MouseTask(int NMouse)
-{
- int i;
- //char str[100];
- unsigned char flag;
- static unsigned char ContornoArr[MAX_MOUSES];
- signed char modulo;
-
- Init_Sensor(NMouse, SENSOR_LEFT, OBSTACLE, 14, -45, -45, 25, 15); // Left
- Init_Sensor(NMouse, SENSOR_FRONT, OBSTACLE, 14, 0, 0, 25, 15); // Center
- Init_Sensor(NMouse, SENSOR_RIGTH, OBSTACLE, 14, 45, 45, 25, 15); // Rigth
- Init_Sensor(NMouse, SENSOR_GROUND, GROUND, 10, 180, 180, 0, 20); // Ground
- Init_Sensor(NMouse, SENSOR_B_LEFT, BEACON, 4, -45, -25, 30, 0); // Left
- Init_Sensor(NMouse, SENSOR_B_RIGHT, BEACON, 4, 45, 25, 30, 0); // Rigth
- contorno = NENHUM;
- Mouse[NMouse].Flag=1;
-
- while(1)
- {
- for(i=0; i<8; i++)
- Read_Sensor(NMouse, i);
- Set_Motor_Vel(NMouse, MOTOR_RIGHT, MAX_SPEED);
- Set_Motor_Vel(NMouse, MOTOR_LEFT, MAX_SPEED);
-
- flag = ((DIST_DIR>DIST3) && contorno==ESQUERDA) ||
- ((DIST_ESQ>DIST3) && contorno==DIREITA);
-
- if ( (DIST_FRENTE>DISTMAX) || flag) {
- Set_Motor_Vel(NMouse, MOTOR_RIGHT, MAX_SPEED/2);
- Set_Motor_Vel(NMouse, MOTOR_LEFT, MAX_SPEED/2);
- if (contorno == ESQUERDA)
- Set_Motor_Vel(NMouse, MOTOR_RIGHT, -MAX_SPEED/2);
- else
- Set_Motor_Vel(NMouse, MOTOR_LEFT, -MAX_SPEED/2);
- }
- else {
-
- // ---------------- Contorno da Esquerda ---------------
- if (contorno!=DIREITA){
- if (DIST_ESQ>DIST1) { // Sensor da esquerda
- contorno = ESQUERDA;
- if (DIST_ESQ>DIST3) {
- Set_Motor_Vel(NMouse, MOTOR_RIGHT, -MAX_SPEED/2);
- Set_Motor_Vel(NMouse, MOTOR_LEFT, MAX_SPEED/2);
- }
- else
- if (DIST_ESQ>DIST2)
- Set_Motor_Vel(NMouse, MOTOR_RIGHT, 10);
- else
- Set_Motor_Vel(NMouse, MOTOR_RIGHT, MAX_SPEED*3/4);
- }
- else
- if (contorno== ESQUERDA) {
- if(DIST_ESQ<DIST0)
- Set_Motor_Vel(NMouse, MOTOR_LEFT, MAX_SPEED*3/10);
- }
- }
-
- // ---------------- Contorno da Direita ---------------
- if (contorno!=ESQUERDA){
- if (DIST_DIR>DIST1) { // Sensor da direita
- contorno = DIREITA;
- if (DIST_DIR>DIST3) {
- Set_Motor_Vel(NMouse, MOTOR_RIGHT, MAX_SPEED/2);
- Set_Motor_Vel(NMouse, MOTOR_LEFT, -MAX_SPEED/2);
- }
- else
- if (DIST_DIR>DIST2)
- Set_Motor_Vel(NMouse, MOTOR_LEFT, 10);
- else
- Set_Motor_Vel(NMouse, MOTOR_LEFT, MAX_SPEED*3/4);
- }
- else
- if (contorno== DIREITA) {
- if (DIST_DIR<DIST0)
- Set_Motor_Vel(NMouse, MOTOR_RIGHT, MAX_SPEED*3/10);
- }
- }
-
- // --------------- Desempancar contornos com o farol ------------
-
- if ((contorno == ESQUERDA && FAROL_DIR > FAROL_ESQ && FAROL_DIR > FAROL_LIM_INF) ||
- (contorno == DIREITA && FAROL_ESQ > FAROL_DIR && FAROL_ESQ > FAROL_LIM_INF) )
- contorno = NENHUM;
-
-
-
- if (contorno == NENHUM)
- {
- modulo = FAROL_DIR - FAROL_ESQ;
- if (modulo < 0 )
- modulo = - modulo;
-
- // Se nao estiver na direçao certa, ajustar
- if (modulo > 10) {
- if (FAROL_DIR > FAROL_ESQ)
- Set_Motor_Vel(NMouse, MOTOR_RIGHT, 0);
- else
- Set_Motor_Vel(NMouse, MOTOR_LEFT, 0);
- }
- else //velocidade controlada
- if (modulo > 2) {
- if (FAROL_DIR > FAROL_ESQ)
- Set_Motor_Vel(NMouse, MOTOR_RIGHT, MAX_SPEED*6/10);
- else
- Set_Motor_Vel(NMouse, MOTOR_LEFT, MAX_SPEED*6/10);
- }
- }
- }
- if (GetSensor(NMouse, SENSOR_GROUND)==SENSOR_MAX_GROUND)
- {
- Set_Motor_Vel(NMouse, MOTOR_RIGHT, 0);
- Set_Motor_Vel(NMouse, MOTOR_LEFT, 0);
- }
-
- task_endcycle();
- }
- return (void *)0;
-}
-
-void my_end(void *arg)
-{
- grx_close();
-}
-
-/* --------------------------------- Main program -----------------------------*/
-
-int main(int argc, char *argv[])
-{
- int i;
- char c;
- int pid;
-
- HARD_TASK_MODEL mp;
- SOFT_TASK_MODEL ms;
-
- // char StrAux[15];
-
- set_exchandler_grx();
-
- for (i=0; i<NMouses; i++)
- Mouse[i].Flag=0;
- for (i=0; i<(360+90); i++) // Inicializar a tabela de senos
- Seno[i]=(int)(65536.0*sin((float)i/180.0*PI));
-
- for (i=0; i<180; i++) // Inicializar a tabela de tangente
- if (i!=90)
- Tang[i]=(int)(((float)Seno[i]/(float)Seno[i+90])*65536.0);
- else
- Tang[i]=INT_MAX;
-
- // Definir fun‡Æo de saida
- sys_atrunlevel(my_end, (void *)NULL, RUNLEVEL_BEFORE_EXIT);
-
- hard_task_default_model(mp);
- hard_task_def_usemath(mp);
- hard_task_def_group(mp, MOUSEGROUP);
- hard_task_def_wcet(mp, 1); // wcet ignored by the configuration file!
-
- soft_task_default_model(ms);
- soft_task_def_group(ms, MOUSEGROUP);
- soft_task_def_met(ms, 1000);
-
- for (i=0;i<NMouses;i++)
- {
- hard_task_def_arg(mp, (void *)i);
- soft_task_def_arg(ms, (void *)i);
-
- hard_task_def_mit(mp, MOUSE_PERIOD);
- pid = task_create("Mouse", MouseTask, &mp, NULL);
- if (pid == NIL)
- {
- perror("Creating Mouse:");
- sys_end();
- }
-
- hard_task_def_mit(mp, CALC_PERIOD);
- pid = task_create("Calc", Calculate_Position, &mp, NULL);
- if (pid == NIL)
- {
- perror("Creating Calc:");
- sys_end();
- }
-
- soft_task_def_period(ms, REDRAW_MOUSE_PERIOD);
- pid = task_create("Redraw_Mouse", Redraw_Mouse_Task, &ms, NULL);
- if (pid == NIL)
- {
- perror("Creating Redraw_Moude:");
- sys_end();
- }
- }
-
- hard_task_def_mit(mp, REFEREE_PERIOD);
- pid = task_create("Referee1", Referee, &mp, NULL);
-
- hard_task_def_mit(mp, REDRAW_MAZE_PERIOD);
- pid = task_create("Redraw_Maze", Redraw_Maze_Task, &mp, NULL);
-
- grx_open(640,480,8);
- group_activate(MOUSEGROUP);
- do
- {
- c = keyb_getch(BLOCK);
- } while (c != ESC);
-
- task_nopreempt();
- sys_end();
- return 0;
-}
-
-/* the buffer b is scannedc to search for numbers
- at the first non-number the function stops */
-void geti(char *b, int *pos, int *res)
-{
- // skip first chars
- while (!isdigit(b[*pos]))
- (*pos)++;
-
-
- // read the numbers
- *res = 0;
- do {
- *res = (*res * 10) + b[*pos] - '0';
- (*pos)++;
- } while (isdigit(b[*pos]));
-}
-
-void read_cfg_file(int argc, char **argv)
-{
- int i, err, Temp1, Temp2, Temp3, Temp4, Temp5;
- DOS_FILE *fp;
- char myfilebuf[1000];
- int myfilebuf_length;
-
- int pos = 0;
-
- if (argc==2) {
- fp = DOS_fopen(argv[1],"r");
-
- if (fp) {
- /* read up to 1000 chars */
- myfilebuf_length = DOS_fread(&myfilebuf,1,1000,fp);
-
- /* check for errors */
- err = DOS_error();
-
- cprintf("Read %d bytes...\n", myfilebuf_length);
-
- if (err) {
- cprintf("Error %d reading file...Using default values\n", err);
- }
- else
- {
- geti(myfilebuf, &pos, &NMouses); // Number of Mouses
- for (i=0;i<NMouses;i++) {
- geti(myfilebuf, &pos, &Temp1); // Mouse X coordinate
- geti(myfilebuf, &pos, &Temp2); // Mouse Y coordinate
- geti(myfilebuf, &pos, &Temp3); // Mouse radius
- geti(myfilebuf, &pos, &Temp4); // Mouse orientation
- Init_Mouse(i, Temp1, Temp2, Temp3, Temp4, 6);
- }
- geti(myfilebuf, &pos, &Temp1); // Beacon X coordinate
- geti(myfilebuf, &pos, &Temp2); // Beacon Y coordinate
- geti(myfilebuf, &pos, &Temp3); // Beacon intensity
- geti(myfilebuf, &pos, &i); // Number of boxs
- Init_Maze(Temp1, Temp2, Temp3, i);
- for(; i>0; i--) {
- geti(myfilebuf, &pos, &Temp1); // Box X1 Coordinate
- geti(myfilebuf, &pos, &Temp2); // Box Y1 Coordinate
- geti(myfilebuf, &pos, &Temp3); // Box X2 Coordinate
- geti(myfilebuf, &pos, &Temp4); // Box Y2 Coordinate
- geti(myfilebuf, &pos, &Temp5); // Type of Box
- if (Temp5)
- Init_Box(i-1, Temp1, Temp2, Temp3, Temp4, BOX_BLOCK);
- else
- Init_Box(i-1, Temp1, Temp2, Temp3, Temp4, BOX_NON_BLOCK);
- }
- DOS_fclose(fp);
- return;
- }
- }
- else {
- /* error!! */
- err = DOS_error();
- /* note that if you call DOS_error() here, it return 0!!! */
- cprintf("Error %d opening myfile.txt...Using default values\n", err);
- }
-
- // Default value if no file is passed
- NMouses=2;
- Init_Maze(500, 350, 400, 1);
- Init_Box(0, 200, 200, 300, 250, BOX_NON_BLOCK);
- Init_Mouse(0, 100, 100, 15, 45, 6);
- Init_Mouse(1, 100, 150, 15, 90, 6);
- }
- else {
- cprintf("Wrong number of arguments...\n");
- l1_exit(0);
- }
-}
Index: start/robots/lab.txt
===================================================================
--- start/robots/lab.txt (revision 1087)
+++ start/robots/lab.txt (nonexistent)
@@ -1,10 +0,0 @@
-2
-530 380 15 270
-480 380 15 270
-380 300 400 5
-430 060 460 400 0
-350 100 430 130 0
-000 100 300 130 0
-150 200 430 230 0
-120 300 150 400 0
-
Index: start/robots/readme
===================================================================
--- start/robots/readme (revision 1087)
+++ start/robots/readme (nonexistent)
@@ -1,9 +0,0 @@
-Robots demo
------------
-
-This demo has been developed in the University of Alveiro, Portugal.
-
-See the included PDF files for more informations.
-
-Paolo
-pj@sssup.it
Index: start/robots/makefile
===================================================================
--- start/robots/makefile (revision 1087)
+++ start/robots/makefile (nonexistent)
@@ -1,16 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS = mouse2
-
-include $(BASE)/config/example.mk
-
-mouse2:
- make -f $(SUBMAKE) APP=mouse2 INIT= OTHEROBJS="initfile.o" OTHERINCL=
-
Index: start/robots/lab3.txt
===================================================================
--- start/robots/lab3.txt (revision 1087)
+++ start/robots/lab3.txt (nonexistent)
@@ -1,11 +0,0 @@
-3
-540 380 15 270
-510 380 15 270
-480 380 15 270
-380 300 400 5
-430 060 460 400 0
-350 100 430 130 0
-000 100 300 130 0
-150 200 430 230 0
-120 300 150 400 0
-
Index: start/robots/initfile.c
===================================================================
--- start/robots/initfile.c (revision 1087)
+++ start/robots/initfile.c (nonexistent)
@@ -1,104 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: initfile.c,v 1.1.1.1 2002-09-02 09:37:43 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:43 $
- ------------
-**/
-
-/*
- * Copyright (C) 2001 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-#include "modules/rr.h"
-#include "modules/dummy.h"
-
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "modules/cabs.h"
-#include "drivers/keyb.h"
-
-/*+ sysyem tick in us +*/
-#define TICK 0
-
-/*+ RR tick in us +*/
-#define RRTICK 2000
-
-void read_cfgfile(int);
-
-int argc;
-char *argv[100];
-
-void read_cfg_file(int argc, char **argv);
-
-int main(int argc, char **argv);
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- EDF_register_level(0);
- CBS_register_level(0, 0);
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- dummy_register_level();
-
- SEM_register_module();
-
- CABS_register_module();
-
- __compute_args__(mb, &argc, argv);
-
- read_cfg_file(argc, argv);
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- KEYB_PARMS kparms = BASE_KEYB;
-
- HARTPORT_init();
-
- keyb_def_ctrlC(kparms, NULL);
- KEYB_init(&kparms);
-
- return (void *)main(argc,argv);
-}
Index: start/auto/keyb.c
===================================================================
--- start/auto/keyb.c (revision 1087)
+++ start/auto/keyb.c (nonexistent)
@@ -1,105 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-
-/**
- ------------
- CVS : $Id: keyb.c,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Marco Dallera and Marco Fiocca
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * AUTO
- *
- * Another Unuseful Track simulatOr
- *
- * Authors: Marco Dallera
- * Marco Fiocca
- *
- */
-
-/* ------------------ */
-/* Keyboard handler */
-/* ------------------ */
-
-#include "include/auto.h"
-#include "include/const.h"
-
-
-void keyb_handler() {
- KEY_EVT k;
- keyb_set_map(itaMap);
-
- /* Exit keys: ENTER */
- k.flag = 0;
- k.scan = KEY_ENT;
- k.ascii = 13;
- keyb_hook(k, endfun);
-
- /* Creates a new HARD car */
- k.flag = 0;
- k.scan = KEY_H;
- k.ascii = 'h';
- keyb_hook(k, hard_car_create);
-
- /* Creates a new SOFT car */
- k.flag = 0;
- k.scan = KEY_S;
- k.ascii = 's';
- keyb_hook(k, soft_car_create);
-}
-
-
-void endfun(KEY_EVT *k)
-{
- grx_close();
- cprintf("Ctrl-Brk pressed! Ending...\n");
- sys_end();
-}
-
-
-void my_close(void *arg)
-{
- kern_printf("my_close\n");
-}
-
Index: start/auto/edfact.h
===================================================================
--- start/auto/edfact.h (revision 1087)
+++ start/auto/edfact.h (nonexistent)
@@ -1,151 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: edfact.h,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-
- This file contains the server EDFACT (EDF with pending activations)
-
- Title:
- EDFACT
-
- Task Models Accepted:
- HARD_TASK_MODEL - Hard Tasks (only Periodic)
- wcet field and mit field must be != 0. They are used to set the wcet
- and period of the tasks.
- periodicity field can be only PERIODIC
- drel field is ignored
-
- Guest Models Accepted:
- JOB_TASK_MODEL - a single guest task activation
- Identified by an absolute deadline and a period.
- period field is ignored
-
- Description:
- This module schedule his tasks following the classic EDF scheme.
- The task guarantee is based on the factor utilization approach.
- The tasks scheduled are only periodic.
- All the task are put in a queue and the scheduling is based on the
- deadline value.
- NO GUARANTEE is performed on guest tasks. The guarantee must be performed
- by the level that inserts guest tasks in the EDF level.
- If a task miss a deadline a counter is incremented.
- If a task exausts the wcet a counter is incremented
- No ZOMBIE support!!!!!!
-
- Exceptions raised:
- XUNVALID_GUEST XUNVALID_TASK
- some primitives are not implemented:
- task_sleep, task_delay, guest_endcycle, guest_sleep, guest_delay
-
- XACTIVATION
- If a task is actiated through task_activate or guest_activate more than
- one time
-
- Restrictions & special features:
- - This level doesn't manage the main task.
- - At init time we have to specify:
- . guarantee check
- (when all task are created the system will check that the task_set
- will not use more than the available bandwidth)
- - A function to return the used bandwidth of the level is provided.
- - Functions to return and reset the nact, wcet and dline miss counters
-
-**/
-
-/*
- * Copyright (C) 2001 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-#ifndef __EDFACT_H__
-#define __EDFACT_H__
-
-#include <ll/ll.h>
-#include <kernel/config.h>
-#include <sys/types.h>
-#include <kernel/types.h>
-#include <modules/codes.h>
-
-
-
-
-
-
-
-
-/*+ flags... +*/
-#define EDFACT_ENABLE_GUARANTEE 1 /*+ Task Guarantee enabled +*/
-#define EDFACT_ENABLE_ALL 1
-
-#define EDFACT_FAILED_GUARANTEE 8 /*+ used in the module, unsettabl
- in EDF_register_level... +*/
-
-
-
-
-
-#define ELASTIC_HARD_PCLASS 0x0600
-
-#define EDFACT_LEVELNAME "EDFACT base"
-#define EDFACT_LEVEL_CODE 166
-#define EDFACT_LEVEL_VERSION 1
-
-
-/*+ Registration function:
- int flags Options to be used in this level instance...
-+*/
-void EDFACT_register_level(int flags);
-
-/*+ Returns the used bandwidth of a level +*/
-bandwidth_t EDFACT_usedbandwidth(LEVEL l);
-
-/*+ returns respectively the number of dline, wcet or nact; -1 if error +*/
-int EDFACT_get_dline_miss(PID p);
-int EDFACT_get_wcet_miss(PID p);
-int EDFACT_get_nact(PID p);
-
-/*+ resets respectively the number of dline, wcet miss; -1 if error +*/
-int EDFACT_reset_dline_miss(PID p);
-int EDFACT_reset_wcet_miss(PID p);
-
-#endif
-
Index: start/auto/info.c
===================================================================
--- start/auto/info.c (revision 1087)
+++ start/auto/info.c (nonexistent)
@@ -1,154 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-
-/**
- ------------
- CVS : $Id: info.c,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Marco Dallera and Marco Fiocca
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * AUTO
- *
- * Another Unuseful Track simulatOr
- *
- * Authors: Marco Dallera
- * Marco Fiocca
- *
- */
-
-/* ------------------- */
-/* Information panel */
-/* ------------------- */
-
-#include "include/auto.h"
-#include "include/const.h"
-#include "include/utils.h"
-
-extern sem_t grx_mutex;
-
-/* ------------------------------------------------------------------ */
-
-void bar_display(point p1, int width, int height, int border, float var, float max, int color, char *name)
-{
- int background = BLACK;
- int amp = 0;
- point p2;
-
- p2.x = p1.x + width;
- p2.y = p1.y + height;
-
- sem_wait(&grx_mutex);
-
- grx_text(name, p1.x, p1.y + height + 3, color, background);
- grx_rect(p1.x - 1, p1.y - 1, p2.x + 1, p2.y + 1, border);
-
- grx_box(p1.x, p1.y, p2.x, p2.y, BLACK);
- amp = abs(round( var * (float)(p2.x - p1.x) / max ));
- grx_box(p1.x, p1.y, p1.x + amp, p2.y, color);
-
- sem_post(&grx_mutex);
-}
-
-/* ------------------------------------------------------------------ */
-
-void bidir_bar_display(point p1, int width, int height, int border, float var, float max, int color, char *name)
-{
- int background = BLACK;
- int amp = 0;
- point p2;
-
- p2.x = p1.x + width;
- p2.y = p1.y + height;
-
- sem_wait(&grx_mutex);
-
- grx_text(name, p1.x, p1.y + height + 3, color, background);
- grx_rect(p1.x - 1, p1.y - 1, p2.x + 1, p2.y + 1, border);
-
- grx_box(p1.x, p1.y, p2.x, p2.y, BLACK);
- amp = round( var * (float)((p2.x - p1.x)/2) / max );
- if (amp >= 0)
- grx_box((p1.x+p2.x)/2, p1.y, ((p1.x+p2.x)/2)+amp, p2.y, color);
- else
- grx_box((p1.x+p2.x)/2+amp, p1.y, ((p1.x+p2.x)/2), p2.y, color);
- grx_line((p1.x+p2.x)/2, p1.y-2, (p1.x+p2.x)/2, p2.y+2, border);
-
- sem_post(&grx_mutex);
-}
-
-/* ------------------------------------------------------------------ */
-
-void cmd_display()
-{
- point p1;
-
- p1.x = TRACK_X1;
- p1.y = TRACK_Y2+3;
-
- sem_wait(&grx_mutex);
- grx_rect(p1.x, p1.y, p1.x+CMD_WIDTH, p1.y+CMD_HEIGHT, BLUE);
- grx_rect(p1.x+1, p1.y+1, p1.x+CMD_WIDTH-1, p1.y+CMD_HEIGHT-1, CYAN);
- grx_rect(p1.x+2, p1.y+2, p1.x+CMD_WIDTH-2, p1.y+CMD_HEIGHT-2, LIGHTBLUE);
- grx_text("## Another Unuseful Track simulatOr ##",
- p1.x+8, p1.y+8, YELLOW, BLACK);
- grx_text("## -------------------------------- ##",
- p1.x+8, p1.y+16, YELLOW, BLACK);
- grx_text("Marco Dallera", p1.x+8, p1.y+24, GREEN, BLACK);
- grx_text("marchicchio@libero.it", p1.x+120, p1.y+24, GREEN, BLACK);
- grx_text("Marco Fiocca", p1.x+8, p1.y+32, GREEN, BLACK);
- grx_text("marqinho@tiscalinet.it", p1.x+120, p1.y+32, GREEN, BLACK);
-
- grx_text("Command keys ", p1.x+8, p1.y+48, LIGHTBLUE, BLACK);
- grx_text("------------------------", p1.x+8, p1.y+56, LIGHTBLUE, BLACK);
- grx_text("h create a HARD car", p1.x+8, p1.y+64, CYAN, BLACK);
- grx_text("s create a SOFT car", p1.x+8, p1.y+72, CYAN, BLACK);
- grx_text("ENTER exit to DOS", p1.x+8, p1.y+80, CYAN, BLACK);
-
- sem_post(&grx_mutex);
-
-}
-
-/* ------------------------------------------------------------------ */
-
Index: start/auto/makefile
===================================================================
--- start/auto/makefile (revision 1087)
+++ start/auto/makefile (nonexistent)
@@ -1,23 +0,0 @@
-#
-# Auto Makefile
-#
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= auto auto2 auto3
-
-include $(BASE)/config/example.mk
-
-auto:
- make -f $(SUBMAKE) APP=auto INIT= OTHEROBJS="initfil1.o sensor.o control.o keyb.o info.o utils.o tracks.o jetctrl.o"
-
-auto2:
- make -f $(SUBMAKE) APP=auto INIT= OTHEROBJS="initfil2.o sensor.o control.o keyb.o info.o utils.o tracks.o jetctrl.o"
-
-auto3:
- make -f $(SUBMAKE) APP=auto INIT= OTHEROBJS="initfil3.o sensor.o control.o keyb.o info.o utils.o tracks.o edfact.o jetctrl.o"
-
-
Index: start/auto/utils.c
===================================================================
--- start/auto/utils.c (revision 1087)
+++ start/auto/utils.c (nonexistent)
@@ -1,131 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-
-/**
- ------------
- CVS : $Id: utils.c,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Marco Dallera and Marco Fiocca
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * AUTO
- *
- * Another Unuseful Track simulatOr
- *
- * Authors: Marco Dallera
- * Marco Fiocca
- *
- */
-
-#include "include/auto.h"
-#include "include/utils.h"
-#include <string.h>
-#include <stdlib.h>
-
-float rand_01()
-{
- return (((float)(rand()%20) / 100.0) + 0.8);
-}
-
-int rand_color()
-{
- return (rand()%16);
-}
-
-int round(float value)
-{
- return ((int)(value + 0.5));
-}
-
-void reverse(char s[]) {
- int c, i, j;
-
- for (i = 0, j = strlen(s)-1; i<j; i++, j--) {
- c = s[i];
- s[i] = s[j];
- s[j] = c;
- }
-}
-
-char * itoa(int n, char *s) {
- int i, sign;
-
- if ((sign = n) < 0)
- n = -n;
- i = 0;
-
- do {
- s[i++] = n % 10 + '0';
- } while ((n /= 10) > 0);
-
- if (sign < 0)
- s[i++] = '-';
- s[i] = 0;
-
- reverse(s);
-
- return s;
-}
-
-time int2time(int t)
-{
- time ts;
-
- ts.dec = t % 10;
- ts.sec = (t/10) % 60;
- ts.min = (int)(t / 600);
-
- return ts;
-}
-
-
-
-
-
-
-
-
-
-
-
Index: start/auto/include/utils.h
===================================================================
--- start/auto/include/utils.h (revision 1087)
+++ start/auto/include/utils.h (nonexistent)
@@ -1,76 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-
-/**
- ------------
- CVS : $Id: utils.h,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Marco Dallera and Marco Fiocca
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * AUTO
- *
- * Another Unuseful Track simulatOr
- *
- * Authors: Marco Dallera
- * Marco Fiocca
- *
- */
-
-/* ------------------ */
-/* Useful functions */
-/* ------------------ */
-
-#ifndef __UTILS_H_
-
-#define __UTILS_H_
-
-float rand_01();
-int rand_color();
-int round(float value);
-char * itoa(int n, char *s);
-void reverse(char s[]);
-time int2time(int t);
-
-#endif
Index: start/auto/include/const.h
===================================================================
--- start/auto/include/const.h (revision 1087)
+++ start/auto/include/const.h (nonexistent)
@@ -1,141 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-
-/**
- ------------
- CVS : $Id: const.h,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Marco Dallera and Marco Fiocca
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * AUTO
- *
- * Another Unuseful Track simulatOr
- *
- * Authors: Marco Dallera
- * Marco Fiocca
- *
- */
-
-/* ------------------ */
-/* Useful constants */
-/* ------------------ */
-
-#ifndef __CONST_H_
-
-#define __CONST_H_
-
-/* Screen dimensions */
-#define SCREEN_WIDTH 800
-#define SCREEN_HEIGHT 600
-#define SCREEN_BIT_COLORS 8
-
-/* Visible area */
-#define TEL_WIDTH 50
-#define TEL_HEIGHT 50
-
-/* Car dimensions */
-#define CAR_WIDTH 12
-#define CAR_HEIGHT 12
-#define CAR_W 8
-#define CAR_H 10
-
-/* Track dimensions */
-#define TRACK_WIDTH 500
-#define TRACK_HEIGHT 500
-
-/* Track position */
-#define TRACK_X1 0
-#define TRACK_Y1 0
-#define TRACK_X2 TRACK_X1+TRACK_WIDTH-1
-#define TRACK_Y2 TRACK_Y1+TRACK_HEIGHT-1
-
-/* Max number of car on track */
-#define MAX_CAR_NUMBER 10
-#define DRIVERS_NUMBER 20
-#define MAX_DRIVER_NAME_LENGTH 20
-#define MAX_TRACK_NAME_LENGTH 20
-#define TRACK_NUMBER 4
-
-/* Lap direction */
-#define CLOCK 0
-#define ANTICLOCK 1
-
-/* Information display coords */
-#define CMD_WIDTH TRACK_WIDTH
-#define CMD_HEIGHT (SCREEN_HEIGHT-TRACK_HEIGHT-3)
-
-/* Car position limits */
-#define MIN_CAR_X (TRACK_X1 + CAR_WIDTH/2 + 4)
-#define MIN_CAR_Y (TRACK_Y1 + CAR_HEIGHT/2 + 4)
-#define MAX_CAR_X (TRACK_X2 - CAR_WIDTH/2 - 4)
-#define MAX_CAR_Y (TRACK_Y2 - CAR_HEIGHT/2 - 4)
-
-/* Road constants */
-#define LEFT_ONLY 10
-#define RIGHT_ONLY 11
-#define ROAD_OK 12
-#define NO_ROAD 13
-
-/* Collision constants */
-#define COLLISION_LEFT 20
-#define COLLISION_RIGHT 21
-#define COLLISION_BACK 22
-#define NO_COLL 0
-
-/* CAB constants */
-#define ROAD_MSG_DIM sizeof(road_info)
-#define ROAD_MSG_READER 4
-
-#define CAR_MSG_DIM sizeof(car_status)
-#define CAR_MSG_READER 5
-
-/* Tasks parameters */
-#define SENSOR_WCET 3000
-#define SENSOR_PERIOD 40000
-#define CONTROL_WCET 1000
-#define CONTROL_PERIOD 40000
-
-#endif
-
Index: start/auto/include/auto.h
===================================================================
--- start/auto/include/auto.h (revision 1087)
+++ start/auto/include/auto.h (nonexistent)
@@ -1,188 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-
-/**
- ------------
- CVS : $Id: auto.h,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Marco Dallera and Marco Fiocca
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * AUTO
- *
- * Another Unuseful Track simulatOr
- *
- * Authors: Marco Dallera
- * Marco Fiocca
- *
- */
-
-/* ------------------- */
-/* Useful structures */
-/* ------------------- */
-
-#ifndef __CAR_H_
-
-#define __CAR_H_
-
-#include <modules/cabs.h>
-#include <kernel/func.h>
-#include <kernel/model.h>
-#include <kernel/types.h>
-#include <drivers/keyb.h>
-#include <drivers/glib.h>
-#include <semaphore.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "const.h"
-
-#define degree_to_rad(a) ((M_PI/180.0)*(a))
-#define rad_to_degree(a) ((180.0/M_PI)*(a))
-
-typedef struct {
- int x;
- int y;
-} point;
-
-typedef struct {
- float x,y;
-} point_f;
-
-typedef struct {
- float mod;
- float phase;
-} vector;
-
-typedef struct {
- point_f pos;
- float orient;
-} car_status;
-
-typedef struct {
- int left_border;
- int right_border;
- int distance;
- float curve;
- point opps_list[MAX_CAR_NUMBER];
- int opps_number;
- int collision;
- int flag;
-} road_info;
-
-typedef struct {
- int left,center,right;
-} road_strip;
-
-typedef struct {
- PID sensor_pid,control_pid;
- int number;
- char driver[MAX_DRIVER_NAME_LENGTH];
- float max_speed, min_acc, max_acc;
- float rage;
- CAB road_status_cab;
- CAB car_status_cab;
- int color;
-} car_params;
-
-typedef struct {
- char name[MAX_TRACK_NAME_LENGTH]; // il nome del file
- point pole_pos; // la posizione di partenza
- float pole_orient; // la direzione di partenza
- int lap; // il senso di marcia: CLOCK, ANTICLOCK
- int selected; // it's a flag marking the actually selected track
-} track;
-
-typedef struct {
- int min;
- int sec;
- int dec;
-} time;
-
-extern car_params cars[MAX_CAR_NUMBER];
-extern char track_img[TRACK_WIDTH*TRACK_HEIGHT];
-extern track track_list[TRACK_NUMBER];
-
-/* ---------------------------------------- */
-/* Functions definition */
-/* ---------------------------------------- */
-
-/* CABs R/W functions */
-int set_car_status(car_status, CAB); // sends the new status according to the control law
-car_status get_car_status(CAB); // reads car status from a CAB
-int set_road_info(road_info, CAB); // sends the new road informations
-road_info get_road_info(CAB); // reads road status values from a CAB
-
-/* Keyboard functions */
-void keyb_handler();
-void endfun(KEY_EVT *);
-void my_close(void *);
-
-/* Display functions */
-void bar_display(point p1, int width, int height, int border, float var, float max, int color, char *name);
-void bidir_bar_display(point p1, int width, int height, int border, float var, float max, int color, char *name);
-void cmd_display();
-
-/* Closing function */
-void byebye();
-void error_msg();
-
-/* Tasks */
-TASK sensor(); // Camera car task
-TASK control(); // Car controller task
-TASK manual(); // Manual driving task
-TASK actuator(); // Graphic drawing task
-TASK info(); // Car informations display task
-
-/* Tasks management */
-void hard_car_create();
-void soft_car_create();
-void killcar();
-
-/* Tracks management */
-int track_init();
-
-#endif
-
Index: start/auto/tracks/brazil.raw
===================================================================
--- start/auto/tracks/brazil.raw (revision 1087)
+++ start/auto/tracks/brazil.raw (nonexistent)
@@ -1,2 +0,0 @@
- -!"#
\ No newline at end of file
Index: start/auto/tracks/demo1.raw
===================================================================
--- start/auto/tracks/demo1.raw (revision 1087)
+++ start/auto/tracks/demo1.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/tracks/demo2.raw
===================================================================
--- start/auto/tracks/demo2.raw (revision 1087)
+++ start/auto/tracks/demo2.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/tracks/monaco.raw
===================================================================
--- start/auto/tracks/monaco.raw (revision 1087)
+++ start/auto/tracks/monaco.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/jetctrl.c
===================================================================
--- start/auto/jetctrl.c (revision 1087)
+++ start/auto/jetctrl.c (nonexistent)
@@ -1,155 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: jetctrl.c,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * this file is directly derived from the demos/jumpball/jetctrl.c .
- * I just added this controls to check when the system will become overloaded
- */
-
-#define WCET_JETDUMMY 200
-#define PERIOD_JETDUMMY 100000
-#define DUMMY_PID 1
-
-#define JET_DUMMY_WIDTH (CMD_WIDTH-370)
-#define JET_DUMMY_HEIGHT (CMD_HEIGHT-40)
-
-/* the point (x, y) is the top left corner */
-#define JET_DUMMY_X (TRACK_X1+360)
-#define JET_DUMMY_Y (TRACK_Y2+32)
-
-// JetControl
-
-#include "semaphore.h"
-#include "include/const.h"
-#include "kernel/func.h"
-#include "drivers/glib.h"
-
-extern sem_t grx_mutex;
-
-/* useful colors... */
-int white;
-int black;
-extern int red;
-extern int lightgray;
-
-TASK jetdummy_task(void *arg)
-{
- TIME now_dummy, last_dummy, diff_dummy, slice;
- struct timespec now, last, diff;
- int x = 0;
- int height;
-
- NULL_TIMESPEC(&last);
- last_dummy = 0;
- for (;;) {
- task_nopreempt();
- jet_getstat(DUMMY_PID, NULL, NULL, NULL, &now_dummy);
- sys_gettime(&now);
- task_preempt();
-
- SUBTIMESPEC(&now, &last, &diff);
- slice = diff.tv_sec * 1000000 + diff.tv_nsec/1000;
- diff_dummy = now_dummy - last_dummy;
-
- height = (int)(JET_DUMMY_HEIGHT*((float)diff_dummy)/((float)slice));
-
- TIMESPEC_ASSIGN(&last, &now);
- last_dummy = now_dummy;
-
- sem_wait(&grx_mutex);
- grx_line(JET_DUMMY_X+x,JET_DUMMY_Y,
- JET_DUMMY_X+x,JET_DUMMY_Y+height ,black);
- grx_line(JET_DUMMY_X+x,JET_DUMMY_Y+height,
- JET_DUMMY_X+x,JET_DUMMY_Y+JET_DUMMY_HEIGHT,white);
- grx_line(JET_DUMMY_X+(x+1)%JET_DUMMY_WIDTH,JET_DUMMY_Y,
- JET_DUMMY_X+(x+1)%JET_DUMMY_WIDTH,JET_DUMMY_Y+JET_DUMMY_HEIGHT,255);
- sem_post(&grx_mutex);
-
- x = (x+1)%JET_DUMMY_WIDTH;
-
- task_endcycle();
- }
-}
-
-void init_jetcontrol(void)
-{
- SOFT_TASK_MODEL m4;
-
- PID p4;
-
- /* useful colors ... */
- white = WHITE;
- black = BLACK;
-
- /* scenario */
- sem_wait(&grx_mutex);
- grx_text("System load",
- JET_DUMMY_X+8, JET_DUMMY_Y-10, lightgray, black);
- grx_rect(JET_DUMMY_X-1, JET_DUMMY_Y-1,
- JET_DUMMY_X+JET_DUMMY_WIDTH, JET_DUMMY_Y+JET_DUMMY_HEIGHT+1, lightgray);
-
- grx_text("100%", JET_DUMMY_X-40, JET_DUMMY_Y, lightgray, black);
- grx_text(" 0%", JET_DUMMY_X-40, JET_DUMMY_Y+JET_DUMMY_HEIGHT-8, lightgray, black);
-
- grx_line(JET_DUMMY_X-1, JET_DUMMY_Y, JET_DUMMY_X-5, JET_DUMMY_Y, lightgray);
- grx_line(JET_DUMMY_X-1, JET_DUMMY_Y+JET_DUMMY_HEIGHT, JET_DUMMY_X-5, JET_DUMMY_Y+JET_DUMMY_HEIGHT, lightgray);
- sem_post(&grx_mutex);
-
- /* jetdummy task */
- soft_task_default_model(m4);
- soft_task_def_period(m4, PERIOD_JETDUMMY);
- soft_task_def_met(m4, WCET_JETDUMMY);
- soft_task_def_usemath(m4);
- p4 = task_create("jdmy", jetdummy_task, &m4, NULL);
- if (p4 == -1) {
- grx_close();
- perror("Could not create task <jetdummy>");
- sys_end();
- }
- task_activate(p4);
-}
-
Index: start/auto/cars/car12.raw
===================================================================
--- start/auto/cars/car12.raw (revision 1087)
+++ start/auto/cars/car12.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/cars/car13.raw
===================================================================
--- start/auto/cars/car13.raw (revision 1087)
+++ start/auto/cars/car13.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/cars/car14.raw
===================================================================
--- start/auto/cars/car14.raw (revision 1087)
+++ start/auto/cars/car14.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/cars/car15.raw
===================================================================
--- start/auto/cars/car15.raw (revision 1087)
+++ start/auto/cars/car15.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/cars/car0.raw
===================================================================
--- start/auto/cars/car0.raw (revision 1087)
+++ start/auto/cars/car0.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/cars/car1.raw
===================================================================
--- start/auto/cars/car1.raw (revision 1087)
+++ start/auto/cars/car1.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/cars/car2.raw
===================================================================
--- start/auto/cars/car2.raw (revision 1087)
+++ start/auto/cars/car2.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/cars/car3.raw
===================================================================
--- start/auto/cars/car3.raw (revision 1087)
+++ start/auto/cars/car3.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/cars/car4.raw
===================================================================
--- start/auto/cars/car4.raw (revision 1087)
+++ start/auto/cars/car4.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/cars/car5.raw
===================================================================
--- start/auto/cars/car5.raw (revision 1087)
+++ start/auto/cars/car5.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/cars/car6.raw
===================================================================
--- start/auto/cars/car6.raw (revision 1087)
+++ start/auto/cars/car6.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/cars/car7.raw
===================================================================
--- start/auto/cars/car7.raw (revision 1087)
+++ start/auto/cars/car7.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/cars/boom.raw
===================================================================
--- start/auto/cars/boom.raw (revision 1087)
+++ start/auto/cars/boom.raw (nonexistent)
@@ -1 +0,0 @@
-      
\ No newline at end of file
Index: start/auto/cars/car8.raw
===================================================================
--- start/auto/cars/car8.raw (revision 1087)
+++ start/auto/cars/car8.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/cars/car9.raw
===================================================================
--- start/auto/cars/car9.raw (revision 1087)
+++ start/auto/cars/car9.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/cars/car10.raw
===================================================================
--- start/auto/cars/car10.raw (revision 1087)
+++ start/auto/cars/car10.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/cars/fumo.raw
===================================================================
--- start/auto/cars/fumo.raw (revision 1087)
+++ start/auto/cars/fumo.raw (nonexistent)
@@ -1 +0,0 @@
-!!!!!!!!!!!!!!!!!!!!!!
\ No newline at end of file
Index: start/auto/cars/car11.raw
===================================================================
--- start/auto/cars/car11.raw (revision 1087)
+++ start/auto/cars/car11.raw (nonexistent)
@@ -1 +0,0 @@
-
\ No newline at end of file
Index: start/auto/auto.c
===================================================================
--- start/auto/auto.c (revision 1087)
+++ start/auto/auto.c (nonexistent)
@@ -1,533 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-
-/**
- ------------
- CVS : $Id: auto.c,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Marco Dallera and Marco Fiocca
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * AUTO
- *
- * Another Unuseful Track simulatOr
- *
- * Authors: Marco Dallera
- * Marco Fiocca
- *
- */
-
-#include "include/auto.h"
-#include "include/const.h"
-#include "include/utils.h"
-
-int car_number;
-car_params cars[MAX_CAR_NUMBER];
-char drivers[DRIVERS_NUMBER][MAX_DRIVER_NAME_LENGTH] = {
- "M.Schumacher",
- "D.Coulthard",
- "R.Schumacher",
- "M.Hakkinen",
- "R.Barrichello",
- "J.P.Montoya",
- "E.Irvine",
- "J.Trulli",
- "H.Frentzen",
- "J.Villeneuve",
- "J.Alesi",
- "G.Fisichella",
- "O.Panis",
- "O.Wurz",
- "J.Button",
- "P.P.Diniz",
- "P.De La Rosa",
- "T.Marques",
- "R.Zonta",
- "G.Mazzacane"
-};
-
-extern char sprite[18][CAR_WIDTH*CAR_HEIGHT];
-
-/* Semaphores */
-sem_t grx_mutex;
-
-/* Useful colors */
-int red = rgb16(255, 0, 0);
-int green = rgb16( 0, 255, 0);
-int blue = rgb16( 0, 0, 255);
-int lightgray = rgb16(192, 192, 192);
-
-/* JetCTRL Initialization */
-void init_jetcontrol(void);
-
-/* -------------------------------------------------------*/
-
-/* --------------------- */
-/* Handling car status */
-/* --------------------- */
-
-int set_car_status(car_status cs, CAB cab_id) {
- char *msg;
-
- msg = cab_reserve(cab_id);
- memcpy(msg, &cs, CAR_MSG_DIM);
- return(cab_putmes(cab_id, msg));
-}
-
-car_status get_car_status(CAB cab_id) {
- char *msg;
- car_status status;
-
- msg = cab_getmes(cab_id);
- memcpy(&status, msg, CAR_MSG_DIM);
- cab_unget(cab_id, msg);
-
- return (status);
-}
-
-/* ---------------------------- */
-/* Handling road informations */
-/* ---------------------------- */
-
-int set_road_info(road_info info, CAB road_status_cab) {
- char *msg;
-
- msg = cab_reserve(road_status_cab);
- memcpy(msg, &info, ROAD_MSG_DIM);
- return(cab_putmes(road_status_cab, msg));
-}
-
-road_info get_road_info(CAB road_status_cab) {
- char *msg;
- road_info info;
-
- msg = cab_getmes(road_status_cab);
- memcpy(&info, msg, ROAD_MSG_DIM);
- cab_unget(road_status_cab, msg);
-
- return (info);
-}
-
-/* -------------------------------------------------------*/
-
-/* Closing function */
-void byebye()
-{
- grx_close();
-
- // we need clear to reposition the cursor in the right place after
- // going back from the graphical mode.
- clear();
-
- kern_printf("Race is over!\n");
-}
-
-/* -------------------------------------------------------*/
-
-/* ------------------- */
-/* Hard car creation */
-/* ------------------- */
-
-void hard_car_create() {
- car_params cp;
- HARD_TASK_MODEL sensor_m, control_m;
- PID sensor_pid, control_pid;
- TIME seed; /* used to init the random seed */
- int drv_ind;
-
- if (car_number >= MAX_CAR_NUMBER) return;
-
- /* Randomize!!!! */
- seed = sys_gettime(NULL);
- srand(seed);
-
- /* CAB creation */
- cp.road_status_cab = cab_create("road_cab", ROAD_MSG_DIM, ROAD_MSG_READER);
- cp.car_status_cab = cab_create("car_cab", CAR_MSG_DIM, CAR_MSG_READER);
-
- /* Car parameters initialization */
- cp.max_speed = rand_01();
- cp.min_acc = cp.max_speed;
- cp.max_acc = cp.max_speed;
- cp.rage = cp.max_speed;
- cp.color = 3+car_number;
- cp.number = car_number;
- drv_ind = DRIVERS_NUMBER-1 - (int)(((cp.rage-0.8+0.005) * (float)DRIVERS_NUMBER) / 0.2);
-
- /* Sets driver's name without duplications */
- strcpy(cp.driver, drivers[drv_ind]);
- while (!strcmp(cp.driver,"***"))
- strcpy(cp.driver, drivers[++drv_ind%DRIVERS_NUMBER]);
- strcpy(drivers[drv_ind],"***");
-
- cars[car_number] = cp;
-
- /* ------------ */
- /* Task Calls */
- /* ------------ */
-
- /* sensor task creation */
- hard_task_default_model(sensor_m);
-
- hard_task_def_arg(sensor_m, (void *)car_number);
- hard_task_def_wcet(sensor_m, SENSOR_WCET);
- hard_task_def_mit(sensor_m, SENSOR_PERIOD);
- hard_task_def_usemath(sensor_m);
- sensor_pid = task_create("camera", sensor, &sensor_m, NULL);
- if(sensor_pid == -1)
- sys_end();
-
- /* control task creation */
- hard_task_default_model(control_m);
- hard_task_def_arg(control_m, (void *)car_number);
- hard_task_def_wcet(control_m, CONTROL_WCET);
- hard_task_def_mit(control_m, CONTROL_PERIOD);
- hard_task_def_usemath(control_m);
- control_pid = task_create("controller", control, &control_m, NULL);
- if(control_pid == -1)
- sys_end();
-
- cars[car_number].sensor_pid = sensor_pid;
- cars[car_number].control_pid = control_pid;
- car_number++; // increases cars number
-
- task_activate(sensor_pid);
- task_activate(control_pid);
-}
-
-/* -------------------------------------------------------*/
-
-/* ------------------- */
-/* Soft car creation */
-/* ------------------- */
-
-void soft_car_create() {
- car_params cp;
- SOFT_TASK_MODEL sensor_m, control_m;
- PID sensor_pid, control_pid;
- TIME seed; /* used to init the random seed */
- int drv_ind;
-
- if (car_number >= MAX_CAR_NUMBER) return;
-
- /* Randomize!!!! */
- seed = sys_gettime(NULL);
- srand(seed);
-
- /* CAB creation */
- cp.road_status_cab = cab_create("road_cab", ROAD_MSG_DIM, ROAD_MSG_READER);
- cp.car_status_cab = cab_create("car_cab", CAR_MSG_DIM, CAR_MSG_READER);
-
- /* Car parameters initialization */
- cp.max_speed = rand_01();
- cp.min_acc = cp.max_speed;
- cp.max_acc = cp.max_speed;
- cp.rage = cp.max_speed;
- cp.color = 8+car_number;
- cp.number = car_number;
- drv_ind = DRIVERS_NUMBER-1 - (int)(((cp.rage-0.8+0.005) * (float)DRIVERS_NUMBER) / 0.2);
-
- /* Sets driver's name without duplications */
- strcpy(cp.driver, drivers[drv_ind]);
- while (!strcmp(cp.driver,"***"))
- strcpy(cp.driver, drivers[++drv_ind%DRIVERS_NUMBER]);
- strcpy(drivers[drv_ind],"***");
- cars[car_number] = cp;
-
- /* ------------ */
- /* Task Calls */
- /* ------------ */
-
- /* sensor task creation */
- soft_task_default_model(sensor_m);
-
- soft_task_def_arg(sensor_m, (void *)car_number);
- soft_task_def_met(sensor_m, SENSOR_WCET);
- soft_task_def_period(sensor_m, SENSOR_PERIOD);
- soft_task_def_usemath(sensor_m);
- sensor_pid = task_create("camera", sensor, &sensor_m, NULL);
- if(sensor_pid == -1)
- sys_end();
-
- /* control task creation */
- soft_task_default_model(control_m);
- soft_task_def_arg(control_m, (void *)car_number);
- soft_task_def_met(control_m, CONTROL_WCET);
- soft_task_def_period(control_m, CONTROL_PERIOD);
- soft_task_def_usemath(control_m);
- control_pid = task_create("controller", control, &control_m, NULL);
- if(control_pid == -1)
- sys_end();
-
- cars[car_number].sensor_pid = sensor_pid;
- cars[car_number].control_pid = control_pid;
- car_number++; // increases cars number
-
- task_activate(sensor_pid);
- task_activate(control_pid);
-}
-
-/* -------------------------------------------------------*/
-
-/* ------------------- */
-/* The main function */
-/* ------------------- */
-
-int main(int argc, char **argv) {
- TIME seed; /* used to init the random seed */
-
- if (MAX_CAB < 30) {
- cprintf("The application needs at least 30 CABS.\n"
- "Please set the MAX_CAB #define to 30 or more...\n"
- "...(see include/modules/cabs.h)\n");
- sys_end();
- }
-
- /* Set the exception handler */
- set_exchandler_grx();
-
- /* Set the closing function */
- sys_atrunlevel(byebye, NULL, RUNLEVEL_BEFORE_EXIT);
-
- /* Keyboard handling */
- keyb_handler();
- kern_printf("KEYBOARD initialized...\n");
-
- /* Graphics mutex */
- sem_init(&grx_mutex, 0, 1);
-
- /* Graphics init */
- grx_init();
- grx_open(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BIT_COLORS);
-
- /* Track drawing */
- sem_wait(&grx_mutex);
- grx_setcolor(46,0,0,0);
- grx_setcolor(43,255,255,255);
- grx_setcolor(26,255,74,33);
- grx_setcolor(27,255,255,255);
- grx_setcolor(1,8,8,8);
- grx_setcolor(3,255,0,0);
- grx_setcolor(28,255,50,0);
- grx_setcolor(29,255,90,0);
- grx_setcolor(30,255,130,0);
- grx_setcolor(31,255,170,0);
- grx_setcolor(32,255,210,0);
- grx_setcolor(33,48,48,48);
-
- grx_putimage(TRACK_X1, TRACK_Y1, TRACK_X2, TRACK_Y2, track_img);
- sem_post(&grx_mutex);
-
- /* Command and info display */
- cmd_display();
-
- /* JetCTRL Initialization */
- init_jetcontrol();
-
- /* Randomize!!!! */
- seed = sys_gettime(NULL);
- srand(seed);
-
- car_number = 0;
-
- /* ------------ */
- /* Task Calls */
- /* ------------ */
-
- hard_car_create();
-
- return 0;
-}
-
-/* -------------------------------------------------------*/
-
-void read_track(int i)
-{
- DOS_FILE *f; // DOS file descriptor
- int file_length;
- int index;
- char filename[100];
- int err; // Error code
-
- /* Init track_list */
- track_init();
-
- /* Set the selected track from track_list */
- if (i < TRACK_NUMBER)
- index = i;
- else
- index = 0;
- cprintf("Selected index = %d\n", index);
-
- strcpy(filename, strcat("tracks/", track_list[index].name));
- cprintf("File to open = %s\n", filename);
- track_list[index].selected = 1;
-
- /* open the DOS file for reading (you can specify only "r" or "w") */
- f = DOS_fopen(filename,"r");
-
- /* check for open errors */
- if (!f) {
- err = DOS_error(); // error!!
-
- /* note that if you call DOS_error() here, it return 0!!! */
- cprintf("Error %d opening %s...\n", err, filename);
- file_length = 0;
- byebye();
- return;
- }
-
- /* read track file */
- file_length = DOS_fread(&track_img, 1, TRACK_WIDTH*TRACK_HEIGHT, f);
-
- /* check for errors */
- err = DOS_error();
-
- cprintf("Read %d bytes from %s...\n", file_length, filename);
-
- if (err) {
- cprintf("Error %d reading %s...\n", err, filename);
- file_length = 0;
- /* there is not return because I want to close the file! */
- }
-
- /* Close the file */
- cprintf("Closing file %s...\n", filename);
- DOS_fclose(f);
- cprintf("File %s closed successfully!\n", filename);
-
-}
-
-/* -------------------------------------------------------*/
-
-void read_sprites()
-{
- /* DOS file descriptor */
- DOS_FILE *f;
- int myfilebuf_length,i;
- char filename[100];
-
- /* Error code */
- int err;
- i=0;
-
- for ( i=0; i < 16; i++) {
- sprintf(filename,"cars/car%d.raw",i);
- f = DOS_fopen(filename,"r");
-
- // check for open errors
- if (!f) {
- // error!!
- err = DOS_error();
-
- // note that if you call DOS_error() here, it return 0!!!
- cprintf("Error %d opening %s...\n", err, filename);
- myfilebuf_length = 0;
- return;
- }
-
- // read from file
- myfilebuf_length = DOS_fread(&sprite[i][0],1,CAR_WIDTH*CAR_HEIGHT,f);
-
- // check for errors
- err = DOS_error();
-
- cprintf("Read %d bytes from %s...\n", myfilebuf_length, filename);
-
- if (err) {
- cprintf("Error %d reading %s...\n", err, filename);
- myfilebuf_length = 0;
- // there is not return because I want to close the file!
- }
-
- // Close the file
- DOS_fclose(f);
- }
-
- f = DOS_fopen("cars/boom.raw","r");
- if (!f) {
- err = DOS_error();
-
- cprintf("Error %d opening boom.raw...\n", err);
- myfilebuf_length = 0;
- return;
- }
-
- myfilebuf_length = DOS_fread(&sprite[16][0],1,CAR_WIDTH*CAR_HEIGHT,f);
-
- err = DOS_error();
-
- cprintf("Read %d bytes from boom.raw...\n", myfilebuf_length);
-
- if (err) {
- cprintf("Error %d reading boom.raw...\n", err);
- myfilebuf_length = 0;
- }
-
- DOS_fclose(f);
-
- f = DOS_fopen("cars/fumo.raw","r");
- if (!f) {
- err = DOS_error();
-
- cprintf("Error %d opening fumo.raw...\n", err);
- myfilebuf_length = 0;
- return;
- }
-
- myfilebuf_length = DOS_fread(&sprite[17][0],1,CAR_WIDTH*CAR_HEIGHT,f);
-
- err = DOS_error();
-
- cprintf("Read %d bytes from fumo.raw...\n", myfilebuf_length);
-
- if (err) {
- cprintf("Error %d reading fumo.raw...\n", err);
- myfilebuf_length = 0;
- }
-
- DOS_fclose(f);
-
-}
-
Index: start/auto/sensor.c
===================================================================
--- start/auto/sensor.c (revision 1087)
+++ start/auto/sensor.c (nonexistent)
@@ -1,650 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-
-/**
- ------------
- CVS : $Id: sensor.c,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Marco Dallera and Marco Fiocca
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * AUTO
- *
- * Another Unuseful Track simulatOr
- *
- * Authors: Marco Dallera
- * Marco Fiocca
- *
- */
-
-/* ------------ */
-/* Camera car */
-/* ------------ */
-
-#include "include/auto.h"
-#include "include/const.h"
-#include "include/utils.h"
-#include <drivers/glib.h>
-
-#define RADIUS 1
-#define TOLL_FACTOR 4.0
-#define MIN_DIFF 3
-#define ROAD_COLOR 27
-#define OFFROAD_COLOR 0
-#define DEBUG_COLOR GREEN
-#define OUT_OF_TRACK 230
-#define STRIP_DEFAULT TEL_WIDTH+1
-
-extern sem_t grx_mutex;
-extern car_params cars[MAX_CAR_NUMBER];
-
-void scanline(point_f *buffer, float x1, float y1, float x2, float y2, int factor);
-void get_camera_car(BYTE *buffer, car_status status);
-int find_track(BYTE *image, road_info *info);
-int find_opps(BYTE *image, road_info *info);
-void find_collision(BYTE *image, road_info *info, car_status status);
-
-/* ----------------------------------------------------------------- */
-
-TASK sensor(int index) {
- car_status actual_car_status; // the actual car state
- road_info actual_road_info; // the actual road informations
- BYTE image[TEL_WIDTH*TEL_HEIGHT]; // buffer contenente la visione della telecamera ruotata
-
- point sq1, sq2;
- point im1, im2;
-
- CAB road_status_cab = cars[index].road_status_cab;
- CAB car_status_cab = cars[index].car_status_cab;
-
- // Draws display squares
- sq1.x = TRACK_X1 + TRACK_WIDTH + TEL_HEIGHT;
- sq1.y = TEL_HEIGHT*index + 1 + index;
- sq2.x = sq1.x + TEL_WIDTH + 1;
- sq2.y = sq1.y + TEL_HEIGHT + 1;
-
- // Sets viewer coords
- im1.x = sq1.x + 1;
- im1.y = sq1.y + 1;
- im2.x = im1.x + TEL_WIDTH - 1;
- im2.y = im1.y + TEL_HEIGHT - 1;
-
- // Inizializza il cab della strada
- actual_road_info.left_border = TEL_WIDTH/2;
- actual_road_info.right_border = TEL_WIDTH/2;
- actual_road_info.distance = TEL_HEIGHT;
- actual_road_info.curve = 0.0;
- actual_road_info.opps_number = 0;
- actual_road_info.flag = ROAD_OK;
- actual_road_info.collision = NO_COLL;
- set_road_info(actual_road_info, road_status_cab);
-
- task_endcycle();
-
- while(1) {
- /* reads car informations */
- actual_car_status = get_car_status(car_status_cab);
-
- /* implementazione riconoscimento strada (sti cazzi!!!) */
- get_camera_car(image, actual_car_status);
- find_track(image, &actual_road_info);
- find_opps(image, &actual_road_info);
- find_collision(image, &actual_road_info, actual_car_status);
-
- sem_wait(&grx_mutex);
- grx_rect(sq1.x, sq1.y, sq2.x, sq2.y, cars[index].color);
- grx_putimage(im1.x, im1.y, im2.x, im2.y, image);
- sem_post(&grx_mutex);
-
- /* sends informations to control task */
- set_road_info(actual_road_info, road_status_cab);
- task_endcycle();
- }
-
-}
-
-/* ----------------------------------------------------------------- */
-
-void find_collision(BYTE *image, road_info *info, car_status status)
-{
- point_f lt,rt,lb,rb,ct;
- /* the lines used to scan the quadrilate */
- point_f height_line[CAR_HEIGHT];
- int i;
- BYTE pix;
-
- info->collision = NO_COLL;
-
- ct.x = status.pos.x + (float)(CAR_HEIGHT/2 + 1) * cos(degree_to_rad(status.orient));
- ct.y = status.pos.y - (float)(CAR_WIDTH/2 + 1) * sin(degree_to_rad(status.orient));
-
- lb.x = ct.x - (float)(CAR_WIDTH/2.0) * cos(degree_to_rad(90-status.orient));
- rb.x = ct.x + (float)(CAR_WIDTH/2.0) * cos(degree_to_rad(90-status.orient));
- lt.x = lb.x - (float)(CAR_HEIGHT) * cos(degree_to_rad(status.orient));
- rt.x = rb.x - (float)(CAR_HEIGHT) * cos(degree_to_rad(status.orient));
-
- lb.y = ct.y - (float)(CAR_WIDTH/2.0) * sin(degree_to_rad(90-status.orient));
- rb.y = ct.y + (float)(CAR_WIDTH/2.0) * sin(degree_to_rad(90-status.orient));
- lt.y = lb.y + (float)(CAR_HEIGHT) * sin(degree_to_rad(status.orient));
- rt.y = rb.y + (float)(CAR_HEIGHT) * sin(degree_to_rad(status.orient));
-
- sem_wait(&grx_mutex);
- scanline(height_line,rb.x,rb.y,rt.x,rt.y,CAR_HEIGHT);
- for (i=0; i < CAR_HEIGHT; i++) {
- pix = grx_getpixel(round(height_line[i].x),round(height_line[i].y));
- if (pix != OFFROAD_COLOR && pix != ROAD_COLOR)
- info->collision = COLLISION_RIGHT;
- }
- scanline(height_line,lb.x,lb.y,lt.x,lt.y,CAR_HEIGHT);
- for (i=0; i < CAR_HEIGHT; i++) {
- pix = grx_getpixel(round(height_line[i].x),round(height_line[i].y));
- if (pix != OFFROAD_COLOR && pix != ROAD_COLOR)
- info->collision = COLLISION_LEFT;
- }
- sem_post(&grx_mutex);
-
-}
-
-/* ----------------------------------------------------------------- */
-
-/* Puts in a buffer the image viewed from the camera according to the car status */
-void get_camera_car(BYTE *buffer, car_status status) {
- /*
- * lt ------ rt
- * | |
- * | |
- * lb --ct-- rb
- */
- point_f lt,rt,lb,rb,ct;
- /* the lines used to scan the quadrilate */
- point_f width_line[TEL_WIDTH];
- point_f height_line[TEL_HEIGHT];
- int i,j;
- int tmpx,tmpy,tx,ty;
- float x,y;
- BYTE *row;
-
- ct.x = status.pos.x + (float)(CAR_WIDTH/2 + 1) * cos(degree_to_rad(status.orient));
- ct.y = status.pos.y - (float)(CAR_WIDTH/2 + 1) * sin(degree_to_rad(status.orient));
-
- /* for now the visual starts from the center of the car */
- lb.x = ct.x - (float)(TEL_WIDTH/2.0) * cos(degree_to_rad(90-status.orient));
- rb.x = ct.x + (float)(TEL_WIDTH/2.0) * cos(degree_to_rad(90-status.orient));
- lt.x = lb.x + (float)(TEL_HEIGHT) * cos(degree_to_rad(status.orient));
- rt.x = rb.x + (float)(TEL_HEIGHT) * cos(degree_to_rad(status.orient));
-
- lb.y = ct.y - (float)(TEL_WIDTH/2.0) * sin(degree_to_rad(90-status.orient));
- rb.y = ct.y + (float)(TEL_WIDTH/2.0) * sin(degree_to_rad(90-status.orient));
- lt.y = lb.y - (float)(TEL_HEIGHT) * sin(degree_to_rad(status.orient));
- rt.y = rb.y - (float)(TEL_HEIGHT) * sin(degree_to_rad(status.orient));
-
- /* scan only 2 sense thanks to parallelism */
- /* ^ <-(height)
- * ! lt
- * ! |
- * ! |
- * ! lb ------ rb )
- * 0 -------------> <-(width
- */
- /* the width_line coordinates are relative, so in the for cycle
- they are summarized to absolute height_line values */
- scanline(width_line,0,0,rb.x - lb.x,rb.y - lb.y,TEL_WIDTH);
- scanline(height_line,lb.x,lb.y,lt.x,lt.y,TEL_HEIGHT);
-
- /* First fill row TEL_HEIGHT-1 of image and so on until row 0 */
- sem_wait(&grx_mutex);
- for (i=0; i < TEL_HEIGHT; i++) {
- x = height_line[i].x;
- y = height_line[i].y;
- row = &buffer[TEL_WIDTH * (TEL_HEIGHT-1-i)];
- for (j=0; j < TEL_WIDTH; j++) {
- tmpx = round(x + width_line[j].x);
- tmpy = round(y + width_line[j].y);
-
- // Test rispetto ai bordi
- if (tmpx >= 0 && tmpx < SCREEN_WIDTH && tmpy >= 0 && tmpy < SCREEN_HEIGHT) {
- tx = tmpx - TRACK_X1-1;
- ty = tmpy - TRACK_Y1-1;
- if (tx >= 0 && tx < TRACK_WIDTH && ty >= 0 && ty < TRACK_HEIGHT)
- row[j] = grx_getpixel(tmpx,tmpy);
- else
- row[j] = OUT_OF_TRACK;
- } else {
- row[j] = OUT_OF_TRACK;
- }
- }
- }
- sem_post(&grx_mutex);
-}
-
-/* ----------------------------------------------------------------- */
-
-void scanline(point_f *buffer, float x1, float y1, float x2, float y2, int factor) {
- int i;
- float x,y;
- float xstep,ystep;
-
- xstep = (x2 - x1) / factor;
- ystep = (y2 - y1) / factor;
-
- // Start scan at <x1, y1>
- x = x1;
- y = y1;
-
- for (i = 0; i < factor; i++) {
- buffer[i].x = x;
- buffer[i].y = y;
- x += xstep;
- y += ystep;
- }
-}
-
-/* ----------------------------------------------------------------- */
-
-/*
- * Approssima la curva quando non è più possibile farlo con la scansione
- * orizzontale
- * - image
- * - index l'indice da cui cominciare la ricerca della curva
- * - distance la distanza dalla curva
- */
-float approx_curve(BYTE *image, int index, int distance, int d_center, road_strip *strips) {
- BYTE *p,tmp;
- int i,j,k,ctrl=0;
- point ms_center,ct;
-
- // Decide se la curva e' verso sinistra o verso destra
- p = &image[(TEL_HEIGHT - index - 1) * TEL_WIDTH];
-
- ms_center.x = strips[index-1].left;
- for (i = 0; i < min(3,strips[index-1].left); i++) {
- // La curva è a destra
- tmp = *(p + round(ms_center.x) - i);
- if (tmp != ROAD_COLOR) {
- ms_center.x = strips[index-1].right;
- break;
- }
- }
-
- p += round(ms_center.x);
- // Scandisce la colonna fino alla fine della strada
- for (i = index; i < TEL_HEIGHT; i++, p -= TEL_WIDTH) {
- if (*p != ROAD_COLOR) break;
- }
-
- // Imposta il nuovo max_scost empirico
- ms_center.y = (i-1 + index) / 2;
-
- // i-1 è l'indice dell'ultima riga bianca
- p = &image[(TEL_HEIGHT - (i-1) - 1) * TEL_WIDTH + round(ms_center.x)];
- // scandisce da destra a sinistra
- if (round(ms_center.x) > 0) {
- for (j = 0; j < (round(ms_center.x) - strips[index-1].left); j++, p--) {
- if (*p != ROAD_COLOR) break;
- // scandisce dall'alto in basso finchè non trova nero
- for (k = i-1; k > index; k--) {
- tmp = *(p + (i-1-k)*TEL_WIDTH);
- if (tmp != ROAD_COLOR) {
- ms_center.y = (k + index) / 2;
- ctrl = 1;
- break;
- }
- }
- if (ctrl) break;
- }
- ct.x = ms_center.x - j/2;
- ct.y = ms_center.y;
- } else {
- // scandisce da sinistra a destra
- for (j = 0; j < (strips[index-1].right - round(ms_center.x)); j++, p++) {
- if (*p != ROAD_COLOR) break;
- // scandisce dall'alto in basso finchè non trova nero
- for (k = i-1; k > index; k--) {
- tmp = *(p + (i-1-k)*TEL_WIDTH);
- if (tmp != ROAD_COLOR) {
- ms_center.y = (k + index) / 2;
- ctrl = 1;
- break;
- }
- }
- if (ctrl) break;
- }
- ct.x = ms_center.x + j/2;
- ct.y = ms_center.y;
- }
-
- return rad_to_degree(atan2((double)(ct.y - distance),(double)(ct.x - d_center)));
-}
-
-/* ----------------------------------------------------------------- */
-
-int find_distance(road_strip *strips, int max_scost, int rett_tol) {
- int i, distance;
- int center_car = TEL_WIDTH/2;
-
- // La distanza non puo' essere maggiore del max_scost
- distance = max_scost;
-
- for (i=1; i < max_scost; i++) {
- // Calcola la distanza dalla curva
- if (abs(strips[i].center - center_car) > rett_tol) {
- distance = i;
- break;
- }
- }
- return distance;
-}
-
-/* ----------------------------------------------------------------- */
-
-/* Scandisce la linea row e inserisce nella strip index le informazioni.
- * Ritorna 1 se trova entrambi i bordi, altrimenti 0
- */
-int scan_strip(BYTE *row, int index, road_strip *strips) {
- // Tiene conto della posizione dei bordi precedenti per trattare
- // meglio il caso di curve molto strette, dove possono esistere
- // 2 bordi destri o sinistri
-
- // Per evitare problemi nei casi in cui siano possibili 2
- // bordi destri o sinistri
- int lfound = 0;
- int rfound = 0;
- int center_car = TEL_WIDTH/2;
- int i;
-
- // Parte dal secondo pixel e finisce al penultimo
- for(i=1; i < (TEL_WIDTH-1); i++) {
- // Se trova la strada controlla se si tratta di bordo
- // destro o sinistro
- if (row[i] == ROAD_COLOR) {
- // bordo sinistro
- if (row[i - 1] != ROAD_COLOR) {
- // Se ho già trovato questo tipo di bordo cerco
- // quello + plausibile ...
- if (lfound) {
- // Test sulla striscia precedente
- if (index > 0) {
- if (abs(i - strips[index-1].left) <
- abs(strips[index].left - strips[index-1].left))
- strips[index].left = i;
- } else {
- // Test sul centro della macchina
- if (abs(i - center_car) < abs(strips[0].left - center_car))
- strips[index].left = i;
- }
- lfound++;
- } else {
- // ... altrimenti lo inizializzo
- strips[index].left = i;
- lfound = 1;
- }
- // bordo destro
- } else if ((row[i + 1] != ROAD_COLOR) && lfound) {
- // Se ho già trovato questo tipo di bordo cerco
- // quello + plausibile ...
- if (rfound) {
- // Test sulla striscia precedente
- if (index > 0) {
- if (abs(i - strips[index-1].right) <
- abs(strips[index].right - strips[index-1].right))
- strips[index].right = i;
- } else {
- // Test sul centro della macchina
- if (abs(i - center_car) < abs(strips[0].right - center_car))
- strips[index].right = i;
- }
- rfound++;
- } else {
- // ... altrimenti lo inizializzo
- strips[index].right = i;
- rfound = 1;
- }
- }
- }
- }
-
- // Calcola il centro della strada se trova i bordi
- if (lfound && rfound)
- strips[index].center = (strips[index].left + strips[index].right) / 2;
-
- return (lfound && rfound);
-}
-
-/* ----------------------------------------------------------------- */
-
-void where_am_i(BYTE *row, road_strip strip, road_info *info) {
- int i;
- int lfound = 0;
- int rfound = 0;
- int car_center = TEL_WIDTH/2;
-
- for(i=1; i < (TEL_WIDTH-1); i++) {
- // Se trova la strada controlla se si tratta di bordo
- // destro o sinistro
- if (row[i] == ROAD_COLOR) {
- // bordo sinistro
- if (row[i - 1] != ROAD_COLOR) {
- strip.left = i;
- lfound = 1;
- break;
- } else if (row[i + 1] != ROAD_COLOR) {
- strip.right = i;
- rfound = 1;
- break;
- }
- }
- }
-
- if (lfound && rfound) {
- info->flag = ROAD_OK;
- }
- else if (lfound && !rfound) info->flag = LEFT_ONLY;
- else if (!lfound && rfound) info->flag = RIGHT_ONLY;
- else {
- if (row[car_center] == OFFROAD_COLOR) info->flag = NO_ROAD;
- else info->flag = ROAD_OK;
- }
- info->left_border = car_center - strip.left;
- info->right_border = strip.right - car_center;
-}
-
-/* ----------------------------------------------------------------- */
-
-/* Analizza l'immagine vista dalla telecamera inserendo le informazioni
- * necessarie in info, ovvero la distanza dai bordi destro e sinistro,
- * la distanza dalla prossima curva e il suo angolo di curvatura.
- * Per il momento ritorna -1 se non riesce a trovare entrambi i bordi della
- * strada; in futuro gestiremo anche questa situazione.
- */
-int find_track(BYTE *image, road_info *info) {
- // vettore contenente le informazioni su ogni striscia
- road_strip strips[TEL_HEIGHT];
- BYTE *row;
- int car_center = TEL_WIDTH/2;
- int max_scost=0;
- int once_scost=0;
- int j, rett_tol=0;
-
- info->flag = ROAD_OK;
-
- strips[0].left = STRIP_DEFAULT;
- strips[0].right = STRIP_DEFAULT;
- /* Tratta in modo personalizzato il primo tratto di strada per
- inizializzare alcune variabili e per capire situazioni particolari */
- row = &image[(TEL_HEIGHT - 1)*TEL_WIDTH];
- // Se trova i bordi ...
- if (scan_strip(row,0,strips)) {
- // ... calcola i bordi della strada e ...
- info->left_border = car_center - strips[0].left;
- info->right_border = strips[0].right - car_center;
- // ... inizializza la tolleranza per il rettilineo.
- rett_tol = (strips[0].right - strips[0].left) / TOLL_FACTOR;
- } else {
- // Se non trova il bordo ...
- // Mi sono perso, cercami la strada
- where_am_i(row,strips[0],info);
- return 1;
- }
-
- /* Ora controlla le altre strisce della strada */
-
- for(j=1; j < TEL_HEIGHT ; j++) {
- row = &image[(TEL_HEIGHT - j - 1)*TEL_WIDTH];
- // Se trova i bordi ...
- if (scan_strip(row, j, strips)) {
- // ... aggiorna l'indice di max scostamento.
- if (abs(strips[j].center - car_center) >
- abs(strips[max_scost].center - car_center)
- && abs(strips[j].center - car_center) > rett_tol) {
-
- max_scost = j;
- once_scost=1; // ha trovato almeno un max scost
- }
- } else {
- // Se max_scost non è mai stato settato, prendo il max
- if (!once_scost) {
- max_scost = j-1;
- once_scost = 1;
- }
-
- // se la distanza e il max_scost sono troppo vicini approssima la curva
- info->distance = find_distance(strips, max_scost, rett_tol);
- if ((max_scost - info->distance) < MIN_DIFF) {
- info->curve = approx_curve(image, j, info->distance,
- strips[info->distance].center,strips) - 90.0;
- return 1;
- }
- break;
- }
- }
-
- // Se max_scost non è mai stato settato, prendo il max
- if (!once_scost) max_scost = TEL_HEIGHT-1;
- max_scost = min(max_scost,TEL_HEIGHT-1);
-
- info->distance = find_distance(strips,max_scost,rett_tol);
-
- // calcola l'angolo di curvatura solo se il conto e' attendibile
- if ((info->distance < (TEL_HEIGHT*0.9)) &&
- ((max_scost - info->distance) >= MIN_DIFF))
- info->curve = rad_to_degree(atan2((double)(max_scost - info->distance),
- (double)(strips[max_scost].center - strips[info->distance].center)));
- else {
- // se i conti sono empirici, si guarda la posizione dei due centri
- if (strips[max_scost].center > strips[info->distance].center)
- info->curve = 88.0;
- else if (strips[max_scost].center < strips[info->distance].center)
- info->curve = 92.0;
- else
- info->curve = 90.0;
- }
- info->curve -= 90.0;
- return 0;
-}
-
-/* ----------------------------------------------------------------- */
-
-int find_opps(BYTE *image, road_info *info)
-{
- int i, j;
- int l_limit, r_limit; // the opposite empiric limits
- BYTE *row;
- int car_center = TEL_WIDTH/2;
- int opps_number = 0;
-
- // by default it needs to scan the entire row
- l_limit = TEL_WIDTH - 1;
- r_limit = 0;
-
- // Scans one row at a time
- for(j=1; j<TEL_HEIGHT; j++) {
- row = &image[(TEL_HEIGHT - j - 1) * TEL_WIDTH];
-
- // if some of the previous row has been identified as a car...
- if (opps_number > 0 &&
- j < (info->opps_list[opps_number - 1].y + CAR_HEIGHT + 1)) {
- // excludes CAR_HEIGHT lines from the bottom if the car
- l_limit = (car_center + info->opps_list[opps_number - 1].x) - CAR_WIDTH;
- r_limit = (car_center + info->opps_list[opps_number - 1].x) + CAR_WIDTH;
- }
- else {
- // it needs to scan the entire row
- l_limit = TEL_WIDTH - 1;
- r_limit = 0;
- }
-
- // Scans the current row
- for (i=0; i<TEL_WIDTH; i++) {
- if( (i < l_limit || i > r_limit) &&
- row[i] != ROAD_COLOR && row[i] != OFFROAD_COLOR &&
- row[i] != DEBUG_COLOR && row[i] != OUT_OF_TRACK) {
- // there is an opponent car!!
- // stores its position
- info->opps_list[opps_number].x = i - car_center; // left -, right +
- info->opps_list[opps_number].y = j;
-
- // increases number of opposites car in the sensor view range
- opps_number++;
- }
- }
- }
-
- info->opps_number = opps_number;
-
- return 0;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Index: start/auto/readme
===================================================================
--- start/auto/readme (revision 1087)
+++ start/auto/readme (nonexistent)
@@ -1,51 +0,0 @@
-AUTO - Another Unuseful Track simulatOr
----------------------------------------
-
-by Marco Dallera and Marco Fiocca, 2001
-
----------------------------------------
-
-This project was done as a Lab assignment during the course of
-"Informatica Industriale" at the University of Pavia, Italy.
-
-It simulates a race between cars under a set of 4 tracks.
-
-The authors provided also some pages that describes the application
-(auto.ps, in italian, on the website).
-
-To run the application, just compile it and call "x auto th" where tn is
-the track number (0 to 4).
-
-Since the control algorithm is quite complex, you need a quite powerful
-machine. If you get an exception 8 (WCET violation), you need a faster PC.
-You can anyway run the application making "auto2", that uses RR instead of
-EDF or CBS, or "auto3", that uses the EDFACT Module (you need yo copy
-the edfact.c and edfact.h files in the application directory to do that).
-
-To be run, the application needs to be compiled with the
-#define MAX_CAB set to a number greater than 20 (see include/modules/cabs.h).
-
-The control algorithm of the cars is not yet perfect, and if you look to
-the race for a long time, sometimes some cars go in the wrong direction.
-If you find a better algorithm, send me a patch :-)
-
-The code you can find in this directory is the original code of the
-students except for the MAX_CAB test into main(), and for the idle time
-monitor (that I took from the jumpball example) that can be useful to know
-when the system is overloaded. For example, on my PC there is idle time until
-the system has 9 cars. The tenth make the PC overloaded until one of them
-crashes :-).
-
-Finally note that the WCET and PERIODS specified by the authors are not so
-correct, and with this setting you can run 8 cars maximum before crashing the
-system.
-
-Have a nice race...
-
-Paolo
-pj@sssup.it
-
-PS: Sometimes on my portable the demo crashes. I wonder why!... If someone
-finds why, please tell me, I will patch it...
-
-
Index: start/auto/initfil1.c
===================================================================
--- start/auto/initfil1.c (revision 1087)
+++ start/auto/initfil1.c (nonexistent)
@@ -1,108 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: initfil1.c,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-#include "modules/rr.h"
-#include "modules/dummy.h"
-
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "modules/cabs.h"
-#include "drivers/keyb.h"
-
-/*+ sysyem tick in us +*/
-#define TICK 0
-
-/*+ RR tick in us +*/
-#define RRTICK 2000
-
-void read_track(int);
-void read_sprites();
-
-int argc;
-char *argv[100];
-
-int main(int argc, char **argv);
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- EDF_register_level(EDF_ENABLE_ALL);
- CBS_register_level(CBS_ENABLE_ALL, 0);
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- dummy_register_level();
-
- SEM_register_module();
-
- CABS_register_module();
-
- __compute_args__(mb, &argc, argv);
-
- if (argc == 2)
- read_track(strtoi(argv[1], 10, NULL));
- else
- read_track(2);
-
- read_sprites();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- KEYB_PARMS kparms = BASE_KEYB;
-
- HARTPORT_init();
-
- keyb_def_ctrlC(kparms, NULL);
- KEYB_init(&kparms);
-
- return (void *)main(argc,argv);
-}
Index: start/auto/initfil2.c
===================================================================
--- start/auto/initfil2.c (revision 1087)
+++ start/auto/initfil2.c (nonexistent)
@@ -1,108 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: initfil2.c,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/rr.h"
-#include "modules/rrsoft.h"
-#include "modules/dummy.h"
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "modules/cabs.h"
-#include "drivers/keyb.h"
-
-/*+ sysyem tick in us +*/
-#define TICK 1000
-
-/*+ RR tick in us +*/
-#define RRTICK 2000
-
-void read_track(int);
-void read_sprites();
-
-int argc;
-char *argv[100];
-int main(int argc, char **argv);
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- RRSOFT_register_level(RRTICK, RR_MAIN_NO, mb, RRSOFT_ONLY_HARD|RRSOFT_ONLY_SOFT);
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- dummy_register_level();
-
- SEM_register_module();
-
- CABS_register_module();
-
- __compute_args__(mb, &argc, argv);
-
- if (argc == 2)
- read_track(strtoi(argv[1], 10, NULL));
- else
- read_track(0);
-
- read_sprites();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- KEYB_PARMS kparms = BASE_KEYB;
-
- HARTPORT_init();
-
- keyb_def_ctrlC(kparms, NULL);
- KEYB_init(&kparms);
-
- return (void *)main(argc,argv);
-}
-
-
-
-
Index: start/auto/control.c
===================================================================
--- start/auto/control.c (revision 1087)
+++ start/auto/control.c (nonexistent)
@@ -1,711 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-
-/**
- ------------
- CVS : $Id: control.c,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Marco Dallera and Marco Fiocca
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * AUTO
- *
- * Another Unuseful Track simulatOr
- *
- * Authors: Marco Dallera
- * Marco Fiocca
- *
- */
-
-/* ------------- */
-/* Car control */
-/* ------------- */
-
-#include "include/auto.h"
-#include "include/const.h"
-#include "include/utils.h"
-
-#define TURN_QUANTUM 2
-#define KM 18.0 // pixel
-#define HOUR 3600.0 // seconds
-#define KPH (KM/HOUR) // 0.005 pixel/second
-#define HIGHWAY_LIMIT 6
-#define MAZE_LIMIT 45
-#define CURVE_LIMIT 25 // il limite della curva per cui imposta la traiettoria
-#define BORDER_LIMIT ((1.0 / params.rage) * 2.0)
-#define STEERING_LIMIT 3 // limite di sterzata
-
-/* Road state */
-#define HIGHWAY 1
-#define MIXED 2
-#define MAZE 3
-#define CENTER 10
-#define TOO_LEFT 11
-#define TOO_RIGHT 12
-
-/* Opponents relationship */
-#define ATTACK 20
-#define DEFENSE 21
-#define SUPERATTACK 22
-
-/* Car parameters */
-#define MAX_SPEED (300 * KPH)
-#define MIN_SPEED (10 * KPH)
-#define MIN_ACC (-0.1)
-#define MAX_ACC (0.02)
-
-extern sem_t grx_mutex;
-
-char track_img[TRACK_WIDTH*TRACK_HEIGHT];
-char sprite[18][CAR_WIDTH*CAR_HEIGHT];
-
-/* Display functions */
-void put_transimage(int x1, int y1, int x2, int y2, BYTE *img,int car_color, int color);
-void draw_car(point_f old_pos, car_status cs, int car_color, int fumo);
-void put_trackbox(int x1, int y1, int x2, int y2);
-void show_display(int, int, float, float, float, float);
-void car_crash(PID sp, PID cp, point_f old_pos, int free);
-
-/* ------------------------------------------------------------------ */
-
-TASK control(int index) {
- int i = 0; // general purpose counter
- car_status old_car_status; // the previous car state
- car_status actual_car_status; // the actual car state
- road_info actual_road_info; // the actual road informations
- int road_state; // the state of the road: HIGHWAY, MIXED; MAZE
- int car_align; // the car alignment with respect to road limits
- int opps_state; // the relationship with other cars
- float old_speed = 0; // the previous car speed value
- float actual_speed = 0; // the actual car speed value
- float old_acc = 0; // the previous acceleration value
- float acc = 0; // the new acceleration
- point polepos;
-
- // Variabili che dipendono dal tipo di macchina
- float max_speed; // maximum car speed
- float min_acc; // minimum acceleration
- float max_acc; // maximum acceleration
-
- int killed = 0; // flag for killed cars
- int crashed = 0; // flag for crashed cars
-
- /* Timing variables */
- float t = 0;
- float dt = (float)CONTROL_PERIOD/100000.0; // time quantum
- time ts = int2time(t);
- float crash_t = 0;
- time crash_ts = int2time(crash_t);
- float bestlap = 999999999.9;
- time bestlap_s = int2time(bestlap);
- int bestlap_done = 0;
- int laps = 0;
-
- /* Display vars */
- point spd_p, acc_p, time_p, drv_p;
- char *txt;
-
- /* Car data */
- car_params params; // car data structure
-
- /* ----------------------------------------------------- */
-
- txt = (char *)malloc(15*sizeof(char));
-
- params = cars[index];
-
- max_speed = params.max_speed * MAX_SPEED; // maximum car speed
- min_acc = params.min_acc * MIN_ACC; // minimum acceleration
- max_acc = params.max_acc * MAX_ACC; // maximum acceleration
-
- /* Get track data */
- while (track_list[i].selected == 0)
- i++;
-
- /* Same pole for all */
- polepos.x = track_list[i].pole_pos.x;
- polepos.y = track_list[i].pole_pos.y;
- actual_car_status.pos.x = polepos.x;
- actual_car_status.pos.y = polepos.y;
- actual_car_status.orient = track_list[i].pole_orient;
- set_car_status(actual_car_status, params.car_status_cab);
-
- /* Initialize old values */
- old_car_status = actual_car_status;
- old_acc = acc;
- old_speed = actual_speed;
-
- /* POWER IS NOTHING WITHOUT CONTROL */
- while(1) {
-
- if (crashed) {
- crash_t += dt;
- crash_ts = int2time(crash_t);
- if (crash_ts.sec > 2) {
- car_crash(params.sensor_pid,params.control_pid,
- old_car_status.pos, 1);
- killed=1;
- }
- }
-
- else {
-
- /* Reads road informations */
- actual_road_info = get_road_info(params.road_status_cab);
-
- /* Defines the state of the road */
- if (fabs(actual_road_info.curve) < HIGHWAY_LIMIT ||
- actual_road_info.distance > 0.9*TEL_HEIGHT) {
- road_state = HIGHWAY;
- } else if (fabs(actual_road_info.curve) > MAZE_LIMIT ||
- actual_road_info.distance < 0.1*TEL_HEIGHT) {
- road_state = MAZE;
- } else {
- road_state = MIXED;
- }
-
- /* Defines the car position whitin road borders */
- if (actual_road_info.left_border < BORDER_LIMIT)
- car_align = TOO_LEFT;
- else if (actual_road_info.right_border < BORDER_LIMIT)
- car_align = TOO_RIGHT;
- else car_align = CENTER;
-
- /* Sets the power percentage */
- switch (road_state)
- {
- case HIGHWAY:
- acc = max_acc; // tarella!!!!
- break;
- case MIXED:
- actual_speed = params.rage * (((float)actual_road_info.distance/(float)TEL_HEIGHT) /
- (fabs(actual_road_info.curve)/90.0)) * max_speed;
- acc = (actual_speed - old_speed) / dt;
- break;
- case MAZE:
- actual_speed = params.rage * (1.0 - (fabs(actual_road_info.curve)/90.0)) * max_speed;
- acc = (actual_speed - old_speed) / dt;
- break;
- default:
- acc = 0.0;
- }
-
- /* Can't go off road */
- /* When car is near a border, it steers to come in */
- switch (car_align)
- {
- case TOO_LEFT:
- actual_car_status.orient -= TURN_QUANTUM;
- break;
- case TOO_RIGHT:
- actual_car_status.orient += TURN_QUANTUM;
- break;
- }
-
- if (road_state != HIGHWAY) {
- // C'e' una curva vicina.
- // Se la curva e' a destra si tiene vicino al bordo di sinistra
- // per impostare la traiettoria migliore e viceversa
- if (actual_road_info.curve < 0 && actual_road_info.left_border > BORDER_LIMIT
- && fabs(actual_road_info.curve) > CURVE_LIMIT)
- actual_car_status.orient += TURN_QUANTUM;
- else if (actual_road_info.curve > 0 && actual_road_info.right_border > BORDER_LIMIT
- && fabs(actual_road_info.curve) > CURVE_LIMIT)
- actual_car_status.orient -= TURN_QUANTUM;
-
- // Fa la curva dolcemente
- if (actual_road_info.distance < ((1.0/params.rage) * (TEL_HEIGHT * 0.25))) {
- actual_car_status.orient += actual_road_info.curve * (params.rage/8.0);
- //actual_car_status.orient += actual_road_info.curve / 4.0;
- }
- }
-
- /* Defines the state of interactions with other cars */
- if (actual_road_info.opps_number > 0)
- {
- if (road_state == HIGHWAY && actual_road_info.opps_list[0].y > (TEL_HEIGHT/3.0))
- opps_state = ATTACK;
- else if (road_state == MAZE && actual_road_info.opps_list[0].y < (TEL_HEIGHT/3.0))
- opps_state = DEFENSE;
- else if (actual_road_info.opps_list[0].y < (TEL_HEIGHT/6.0) &&
- actual_road_info.opps_list[0].x != 0 &&
- (abs(actual_road_info.opps_list[0].x) < CAR_W/2)) {
- // Defends and steers to avoid opponents
- opps_state = DEFENSE;
- acc *= -((TEL_HEIGHT/6.0) / (actual_road_info.opps_list[0].y));
- actual_car_status.orient -= ((actual_road_info.opps_list[0].x) /
- abs(actual_road_info.opps_list[0].x)) * TURN_QUANTUM/2;
- }
- else if (actual_road_info.opps_list[0].y < (TEL_HEIGHT/3.0) &&
- actual_road_info.opps_list[0].x != 0 &&
- abs(actual_road_info.opps_list[0].x) < CAR_W/2) {
- // Attacks and steers to override the opponent
- opps_state = ATTACK;
- actual_car_status.orient -= ((actual_road_info.opps_list[0].x) /
- abs(actual_road_info.opps_list[0].x)) * TURN_QUANTUM;
- }
- else
- opps_state = DEFENSE;
-
- // Response to opponents positions
- if (opps_state == ATTACK)
- acc = max_acc;
- else if (opps_state == DEFENSE)
- acc *= 0.5;
- }
-
-
- /* Checking car position: road/offroad */
- if (actual_road_info.left_border * actual_road_info.right_border < 0)
- acc = 0.5 * min_acc;
-
- if (actual_road_info.flag != ROAD_OK) {
- switch (actual_road_info.flag) {
- case LEFT_ONLY:
- if (actual_road_info.left_border < 0)
- actual_car_status.orient -= TURN_QUANTUM;
- acc = 0.5 * max_acc;
- break;
- case RIGHT_ONLY:
- if (actual_road_info.right_border < 0)
- actual_car_status.orient += TURN_QUANTUM;
- acc = 0.5 * max_acc;
- break;
- case NO_ROAD:
- crashed = 1;
- car_crash(params.sensor_pid,params.control_pid,
- old_car_status.pos, 0);
- break;
- }
- }
-
- /* Checking collisions... */
- if (actual_road_info.collision != NO_COLL) {
- switch(actual_road_info.collision) {
- case COLLISION_LEFT:
- actual_car_status.orient -= TURN_QUANTUM;
- acc *= (0.5 * params.rage);
- break;
- case COLLISION_RIGHT:
- actual_car_status.orient += TURN_QUANTUM;
- acc *= (0.5 * params.rage);
- break;
- }
- }
-
- /* Checking acceleration range... */
- acc = max(min(max_acc,acc),min_acc);
- actual_speed = old_speed + acc*dt;
-
- /* Checking speed range... */
- actual_speed = min(max(actual_speed,MIN_SPEED),max_speed);
-
- /* Checking steering angle ... */
- if (fabs(actual_car_status.orient - old_car_status.orient) >
- STEERING_LIMIT) {
- if ((actual_car_status.orient - old_car_status.orient) > 0)
- actual_car_status.orient = old_car_status.orient + STEERING_LIMIT;
- else
- actual_car_status.orient = old_car_status.orient - STEERING_LIMIT;
- }
-
- /* Setting new car position... */
- actual_car_status.pos.x += actual_speed * cos(degree_to_rad(actual_car_status.orient));
- actual_car_status.pos.y -= actual_speed * sin(degree_to_rad(actual_car_status.orient));
-
- /* Checking track limits... */
- if (actual_car_status.pos.x < MIN_CAR_X)
- actual_car_status.pos.x = MIN_CAR_X;
- if (actual_car_status.pos.x > MAX_CAR_X)
- actual_car_status.pos.x = MAX_CAR_X;
- if (actual_car_status.pos.y < MIN_CAR_Y)
- actual_car_status.pos.y = MIN_CAR_Y;
- if (actual_car_status.pos.y > MAX_CAR_Y)
- actual_car_status.pos.y = MAX_CAR_Y;
-
- /* Sends new status to car_status_cab */
- set_car_status(actual_car_status, params.car_status_cab);
-
- if (!crashed) {
- /* Updates car */
- if (acc == min_acc)
- draw_car(old_car_status.pos,actual_car_status, params.color, 1);
- else
- draw_car(old_car_status.pos,actual_car_status, params.color, 0);
- }
-
- /* Sets display points */
- spd_p.x = TRACK_X1 + TRACK_WIDTH + TEL_HEIGHT + TEL_WIDTH + 9;
- spd_p.y = TEL_HEIGHT*index + 1 + index + 1;
- bar_display(spd_p, 70, 4, GREEN, actual_speed, max_speed, LIGHTGRAY, "Spd");
-
- acc_p.x = spd_p.x;
- acc_p.y = spd_p.y + 24;
- bidir_bar_display(acc_p, 70, 4, GREEN, acc, max(fabs(min_acc), max_acc), LIGHTGRAY, "Acc");
-
- sem_wait(&grx_mutex);
-
- /* Displays driver's name */
- drv_p.x = spd_p.x + 80;
- drv_p.y = spd_p.y;
- grx_text(params.driver, drv_p.x, drv_p.y, params.color, BLACK);
-
- /* Displays timer */
- time_p.x = spd_p.x + 80;
- time_p.y = spd_p.y + 8;
- if( (!bestlap_done) || (bestlap_done && t > 50))
- {
- /* Mins */
- txt = itoa(ts.min, txt);
- grx_text(txt, time_p.x, time_p.y, WHITE, BLACK);
- grx_text(":", time_p.x + 8, time_p.y, WHITE, BLACK);
- /* Secs */
- txt = itoa(ts.sec, txt);
- if (ts.sec < 10) {
- grx_text("0", time_p.x+16, time_p.y, WHITE, BLACK);
- grx_text(txt, time_p.x+24, time_p.y, WHITE, BLACK);
- }
- else
- grx_text(txt, time_p.x+16, time_p.y, WHITE, BLACK);
- /* Decs */
- grx_text(":", time_p.x+32, time_p.y, WHITE, BLACK);
- txt = itoa(ts.dec, txt);
- grx_text(txt, time_p.x+40, time_p.y, WHITE, BLACK);
- }
-
- /* Displays the best lap */
- if(bestlap_done == 1)
- {
- time_p.x = spd_p.x + 80;
- time_p.y = spd_p.y + 16;
- /* Mins */
- txt = itoa(bestlap_s.min, txt);
- grx_text(txt, time_p.x, time_p.y, YELLOW, BLACK);
- grx_text(":", time_p.x + 8, time_p.y, YELLOW, BLACK);
- /* Secs */
- txt = itoa(bestlap_s.sec, txt);
- if (bestlap_s.sec < 10) {
- grx_text("0", time_p.x+16, time_p.y, YELLOW, BLACK);
- grx_text(txt, time_p.x+24, time_p.y, YELLOW, BLACK);
- }
- else
- grx_text(txt, time_p.x+16, time_p.y, YELLOW, BLACK);
- /* Decs */
- grx_text(":", time_p.x+32, time_p.y, YELLOW, BLACK);
- txt = itoa(bestlap_s.dec, txt);
- grx_text(txt, time_p.x+40, time_p.y, YELLOW, BLACK);
- }
-
- /* Displays lap number */
- time_p.x = spd_p.x + 80;
- time_p.y = spd_p.y + 24;
- grx_text("Lap ", time_p.x, time_p.y, LIGHTGRAY, BLACK);
- txt = itoa(laps, txt);
- grx_text(txt, time_p.x+32, time_p.y, LIGHTGRAY, BLACK);
-
- sem_post(&grx_mutex);
-
- /* Control the best lap */
- t += dt;
- ts = int2time(t);
-
- /* Finish line */
- if ((track_list[i].lap == CLOCK &&
- (actual_car_status.pos.x >= polepos.x) && (old_car_status.pos.x < polepos.x)
- && (actual_car_status.pos.y > polepos.y-20) && (actual_car_status.pos.y < polepos.y+20)) ||
- (track_list[i].lap == ANTICLOCK &&
- (actual_car_status.pos.x <= polepos.x) && (old_car_status.pos.x > polepos.x)
- && (actual_car_status.pos.y > polepos.y-20) && (actual_car_status.pos.y < polepos.y+20))) {
- laps++; // increases lap number
-
- bestlap = min(bestlap,t);
- bestlap_s = int2time(bestlap);
- bestlap_done = 1;
- t = 0;
- ts = int2time(t);
- }
-
- /* Updates old values */
- old_car_status = actual_car_status;
- old_acc = acc;
- old_speed = actual_speed;
-
- } // end crashed
-
- task_endcycle();
-
- // Esce se e' morto
- if (killed) return 0;
- }
-}
-
-/* ------------------------------------------------------------------ */
-
-void car_crash(PID sp, PID cp, point_f old_pos, int free)
-{
- point p1, p2;
- p1.x = round(old_pos.x) - CAR_WIDTH/2 - 1;
- p1.y = round(old_pos.y) - CAR_HEIGHT/2 - 1;
- p2.x = p1.x + CAR_WIDTH + 1;
- p2.y = p1.y + CAR_HEIGHT + 1;
-
- sem_wait(&grx_mutex);
- /* Find the track box to redraw */
- put_trackbox(p1.x,p1.y,p2.x,p2.y);
-
- if (free == 0) {
- // Draw the explosion
- put_transimage(p1.x+1,p1.y+1,p2.x-1,p2.y-1,&sprite[16][0],0,0);
- }
- else if (free == 1) {
- // Delete the explosion
- put_trackbox(p1.x,p1.y,p2.x,p2.y);
- task_kill(sp);
- task_kill(cp);
- }
- sem_post(&grx_mutex);
-}
-
-/* ------------------------------------------------------------------ */
-
-void draw_car(point_f old_pos, car_status cs, int car_color, int fumo)
-{
- int index;
- point p1, p2;
- p1.x = round(old_pos.x) - CAR_WIDTH/2 - 1;
- p1.y = round(old_pos.y) - CAR_HEIGHT/2 - 1;
- p2.x = p1.x + CAR_WIDTH + 1;
- p2.y = p1.y + CAR_HEIGHT + 1;
-
- sem_wait(&grx_mutex);
- /* Find the track box to redraw */
- put_trackbox(p1.x,p1.y,p2.x,p2.y);
-
-
- p1.x = round(cs.pos.x) + (CAR_WIDTH/2 * cos(degree_to_rad(cs.orient)));
- p1.y = round(cs.pos.y) - (CAR_HEIGHT/2 * sin(degree_to_rad(cs.orient)));
- p2.x = round(cs.pos.x) - (CAR_WIDTH/2 * cos(degree_to_rad(cs.orient)));
- p2.y = round(cs.pos.y) + (CAR_HEIGHT/2 * sin(degree_to_rad(cs.orient)));
-
- index = ((((int)cs.orient%360)+360)%360);
- index = (int)(index + 11.25)%360;
- index /= 22.5;
-
- put_transimage(round(cs.pos.x) - CAR_WIDTH/2 + 1,round(cs.pos.y) - CAR_HEIGHT/2 + 1,
- round(cs.pos.x) + CAR_WIDTH/2 ,round(cs.pos.y) + CAR_HEIGHT/2,
- &sprite[index][0], car_color, 0);
- if (fumo)
- put_transimage(round(cs.pos.x) - CAR_WIDTH/2 + 1,round(cs.pos.y) - CAR_HEIGHT/2 + 1,
- round(cs.pos.x) + CAR_WIDTH/2 ,round(cs.pos.y) + CAR_HEIGHT/2,
- &sprite[17][0], car_color, 0);
- sem_post(&grx_mutex);
-}
-
-/* ------------------------------------------------------------------ */
-
-/* Copy a box of track_image to screen */
-void put_trackbox(int x1, int y1, int x2, int y2)
-{
- int y;
- int tx1,ty1,tx2,ty2;
- BYTE *addr;
-
- tx1 = x1-TRACK_X1+1;
- ty1 = y1-TRACK_Y1;
- tx2 = x2-TRACK_X1+1;
- ty2 = y2-TRACK_Y1;
-
- if (tx1 < 0) tx1 = 0;
- if (ty1 < 0) ty1 = 0;
- if (tx2 > TRACK_WIDTH-1) tx2 = TRACK_WIDTH-1;
- if (ty2 > TRACK_HEIGHT-1) ty2 = TRACK_HEIGHT-1;
-
- tx1 = max(tx1,0);
- ty1 = max(ty1,0);
- tx2 = min(tx2,TRACK_WIDTH-1);
- ty2 = min(ty2,TRACK_HEIGHT-1);
-
- addr = &track_img[0] + tx1 + TRACK_WIDTH * ty1;
-
- x1 = max(0,x1);
- y1 = max(0,y1);
-
- for (y = y1; y <= y2; y++) {
- grx_putimage(x1+1, y, x2, y, addr);
- addr += TRACK_WIDTH;
- }
-}
-
-/* ------------------------------------------------------------------ */
-
-void put_transimage(int x1, int y1, int x2, int y2, BYTE *img, int car_color,
- int color)
-{
- int x,y;
- BYTE *addr;
- addr = img;
-
-
- for (y = y1; y < y2; y++) {
- for ( x = x1; x < x2; x++, addr++) {
- if (*addr != color) {
- if (*addr == 26)
- grx_plot(x,y,car_color);
- else
- grx_plot(x,y,*addr);
-
- }
- }
- addr++;
- }
-}
-
-/* ------------------------------------------------------------------ */
-
-void show_display(int rs, int ca, float speed, float max_speed,
- float acc, float max_acc) {
- point hw, mx, mz; // three road states
- point tl, ct, tr; // three car alignments
- point sp1, sp2; // speed display coordinates
- point ap1, ap2; // acceleration display coordinates
- int s_amp = 0;
- int a_amp = 0;
-
- /* Leds coordinates */
- hw.x = 10;
- hw.y = SCREEN_HEIGHT-50;
- mx.x = 25;
- mx.y = SCREEN_HEIGHT-50;
- mz.x = 40;
- mz.y = SCREEN_HEIGHT-50;
- tl.x = 10;
- tl.y = SCREEN_HEIGHT-35;
- ct.x = 25;
- ct.y = SCREEN_HEIGHT-35;
- tr.x = 40;
- tr.y = SCREEN_HEIGHT-35;
- sp1.x = 10;
- sp1.y = SCREEN_HEIGHT-75;
- sp2.x = 110;
- sp2.y = SCREEN_HEIGHT-65;
- ap1.x = 10;
- ap1.y = SCREEN_HEIGHT-90;
- ap2.x = 110;
- ap2.y = SCREEN_HEIGHT-80;
-
- sem_wait(&grx_mutex);
-
- /* Writes out controller titles */
- grx_text("Road", mz.x+15, mz.y, YELLOW, BLACK);
- grx_text("Curve", tr.x+15, tr.y, YELLOW, BLACK);
- switch (rs)
- {
- case HIGHWAY:
- grx_box(hw.x, hw.y, hw.x+10, hw.y+10, GREEN);
- grx_box(mx.x, mx.y, mx.x+10, mx.y+10, BLACK);
- grx_box(mz.x, mz.y, mz.x+10, mz.y+10, BLACK);
- break;
- case MIXED:
- grx_box(hw.x, hw.y, hw.x+10, hw.y+10, BLACK);
- grx_box(mx.x, mx.y, mx.x+10, mx.y+10, YELLOW);
- grx_box(mz.x, mz.y, mz.x+10, mz.y+10, BLACK);
- break;
- case MAZE:
- grx_box(hw.x, hw.y, hw.x+10, hw.y+10, BLACK);
- grx_box(mx.x, mx.y, mx.x+10, mx.y+10, BLACK);
- grx_box(mz.x, mz.y, mz.x+10, mz.y+10, RED);
- break;
- }
-
- switch (ca)
- {
- case TOO_LEFT:
- grx_box(tl.x, tl.y, tl.x+10, tl.y+10, RED);
- grx_box(ct.x, ct.y, ct.x+10, ct.y+10, BLACK);
- grx_box(tr.x, tr.y, tr.x+10, tr.y+10, BLACK);
- break;
- case TOO_RIGHT:
- grx_box(tl.x, tl.y, tl.x+10, tl.y+10, BLACK);
- grx_box(ct.x, ct.y, ct.x+10, ct.y+10, BLACK);
- grx_box(tr.x, tr.y, tr.x+10, tr.y+10, BLUE);
- break;
- default:
- grx_box(tl.x, tl.y, tl.x+10, tl.y+10, BLACK);
- grx_box(ct.x, ct.y, ct.x+10, ct.y+10, WHITE);
- grx_box(tr.x, tr.y, tr.x+10, tr.y+10, BLACK);
- }
-
- /* Draws speed display */
- grx_text("Speed", sp1.x+120, sp1.y, YELLOW, BLACK);
- grx_rect(sp1.x-1, sp1.y-1, sp2.x+1, sp2.y+1, GREEN);
- /* Updates speed display */
- grx_box(sp1.x, sp1.y, sp2.x, sp2.y, BLACK);
- s_amp = round( (speed * (float)(sp2.x-sp1.x)) / max_speed );
- grx_box(sp1.x, sp1.y, sp1.x+s_amp, sp2.y, LIGHTGRAY);
-
- /* Draws acceleration display */
- grx_text("Acceleration", ap1.x+120, ap1.y, YELLOW, BLACK);
- grx_rect(ap1.x-1, ap1.y-1, ap2.x+1, ap2.y+1, GREEN);
- /* Updates acceleration display */
- grx_box(ap1.x, ap1.y, ap2.x, ap2.y, BLACK);
- a_amp = round( (float)acc * (float)((ap2.x-ap1.x)/2) / (float)max_acc );
- if (a_amp >= 0)
- grx_box((ap1.x+ap2.x)/2, ap1.y, ((ap1.x+ap2.x)/2)+a_amp, ap2.y, LIGHTGRAY);
- else
- grx_box((ap1.x+ap2.x)/2+a_amp, ap1.y, ((ap1.x+ap2.x)/2), ap2.y, LIGHTGRAY);
- grx_line((ap1.x+ap2.x)/2, ap1.y-2, (ap1.x+ap2.x)/2, ap2.y+2, WHITE);
- sem_post(&grx_mutex);
-}
-
-
-
-
-
-
-
-
-
-
-
-
Index: start/auto/initfil3.c
===================================================================
--- start/auto/initfil3.c (revision 1087)
+++ start/auto/initfil3.c (nonexistent)
@@ -1,107 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: initfil3.c,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "edfact.h"
-#include "modules/cbs.h"
-#include "modules/rr.h"
-#include "modules/dummy.h"
-
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "modules/cabs.h"
-#include "drivers/keyb.h"
-
-/*+ sysyem tick in us +*/
-#define TICK 0
-
-/*+ RR tick in us +*/
-#define RRTICK 2000
-
-void read_track(int);
-void read_sprites();
-
-int argc;
-char *argv[100];
-int main(int argc, char **argv);
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- EDFACT_register_level(0);
- CBS_register_level(0, 0);
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- dummy_register_level();
-
- SEM_register_module();
-
- CABS_register_module();
-
- __compute_args__(mb, &argc, argv);
-
- if (argc == 2)
- read_track(strtoi(argv[1], 10, NULL));
- else
- read_track(2);
-
- read_sprites();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- KEYB_PARMS kparms = BASE_KEYB;
-
- HARTPORT_init();
-
- keyb_def_ctrlC(kparms, NULL);
- KEYB_init(&kparms);
-
- return (void *) main(argc,argv);
-}
Index: start/auto/edfact.c
===================================================================
--- start/auto/edfact.c (revision 1087)
+++ start/auto/edfact.c (nonexistent)
@@ -1,735 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: edfact.c,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-**/
-
-/*
- * Copyright (C) 2001 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "edfact.h"
-#include <ll/stdio.h>
-#include <ll/string.h>
-#include <kernel/model.h>
-#include <kernel/descr.h>
-#include <kernel/var.h>
-#include <kernel/func.h>
-#include <kernel/trace.h>
-
-//#define edfact_printf kern_printf
-#define edfact_printf printk
-
-/*+ Status used in the level +*/
-#define EDFACT_READY MODULE_STATUS_BASE /*+ - Ready status +*/
-#define EDFACT_IDLE MODULE_STATUS_BASE+4 /*+ to wait the deadline +*/
-
-/*+ flags +*/
-#define EDFACT_FLAG_NORAISEEXC 2
-
-/*+ the level redefinition for the Earliest Deadline First level +*/
-typedef struct {
- level_des l; /*+ the standard level descriptor +*/
-
- TIME period[MAX_PROC]; /*+ The task periods; the deadlines are
- stored in the priority field +*/
- int deadline_timer[MAX_PROC];
- /*+ The task deadline timers +*/
-
- struct timespec deadline_timespec[MAX_PROC];
-
- int dline_miss[MAX_PROC]; /*+ Deadline miss counter +*/
- int wcet_miss[MAX_PROC]; /*+ Wcet miss counter +*/
-
- int nact[MAX_PROC]; /*+ Wcet miss counter +*/
-
- int flag[MAX_PROC];
- /*+ used to manage the JOB_TASK_MODEL and the
- periodicity +*/
-
- QUEUE ready; /*+ the ready queue +*/
-
- int flags; /*+ the init flags... +*/
-
- bandwidth_t U; /*+ the used bandwidth +*/
-
-} EDFACT_level_des;
-
-
-static void EDFACT_timer_deadline(void *par);
-
-static void EDFACT_internal_activate(EDFACT_level_des *lev, PID p)
-{
- TIMESPEC_ASSIGN(&proc_table[p].timespec_priority,
- &proc_table[p].request_time);
- ADDUSEC2TIMESPEC(lev->period[p], &proc_table[p].timespec_priority);
-
- TIMESPEC_ASSIGN(&lev->deadline_timespec[p],
- &proc_table[p].timespec_priority);
-
- /* Insert task in the correct position */
- proc_table[p].status = EDFACT_READY;
- q_timespec_insert(p,&lev->ready);
-
- /* needed because when there is a wcet miss I disable CONTROL_CAP */
- proc_table[p].control |= CONTROL_CAP;
-}
-
-static char *EDFACT_status_to_a(WORD status)
-{
- if (status < MODULE_STATUS_BASE)
- return status_to_a(status);
-
- switch (status) {
- case EDFACT_READY : return "EDFACT_Ready";
- case EDFACT_IDLE : return "EDFACT_Idle";
- default : return "EDFACT_Unknown";
- }
-}
-
-static void EDFACT_timer_deadline(void *par)
-{
- PID p = (PID) par;
- EDFACT_level_des *lev;
-
- lev = (EDFACT_level_des *)level_table[proc_table[p].task_level];
-
- switch (proc_table[p].status) {
- case EDFACT_IDLE:
- edfact_printf("I%d",p);
- TIMESPEC_ASSIGN(&proc_table[p].request_time,
- &proc_table[p].timespec_priority);
-
- EDFACT_internal_activate(lev,p);
-
- event_need_reschedule();
- break;
-
- default:
- edfact_printf("D%d",p);
- /* else, a deadline miss occurred!!! */
- lev->dline_miss[p]++;
-
- /* the task is into another state */
- lev->nact[p]++;
-
- /* Set the deadline timer */
- ADDUSEC2TIMESPEC(lev->period[p], &lev->deadline_timespec[p]);
- }
-
- /* Set the deadline timer */
- lev->deadline_timer[p] = kern_event_post(&lev->deadline_timespec[p],
- EDFACT_timer_deadline,
- (void *)p);
-
-}
-
-static void EDFACT_timer_guest_deadline(void *par)
-{
- PID p = (PID) par;
-
- edfact_printf("AAARRRGGGHHH!!!");
- kern_raise(XDEADLINE_MISS,p);
-}
-
-static int EDFACT_level_accept_task_model(LEVEL l, TASK_MODEL *m)
-{
- if (m->pclass == HARD_PCLASS || m->pclass == (HARD_PCLASS | l)) {
- HARD_TASK_MODEL *h = (HARD_TASK_MODEL *)m;
-
- if (h->wcet && h->mit && h->periodicity == PERIODIC)
- return 0;
- }
-
- return -1;
-}
-
-static int EDFACT_level_accept_guest_model(LEVEL l, TASK_MODEL *m)
-{
- if (m->pclass == JOB_PCLASS || m->pclass == (JOB_PCLASS | l))
- return 0;
- else
- return -1;
-}
-
-
-static char *onoff(int i)
-{
- if (i)
- return "On ";
- else
- return "Off";
-}
-
-static void EDFACT_level_status(LEVEL l)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
- PID p = lev->ready;
-
- kern_printf("On-line guarantee : %s\n",
- onoff(lev->flags & EDFACT_ENABLE_GUARANTEE));
- kern_printf("Used Bandwidth : %u/%u\n",
- lev->U, MAX_BANDWIDTH);
-
- while (p != NIL) {
- if ((proc_table[p].pclass) == JOB_PCLASS)
- kern_printf("Pid: %2d (GUEST)\n", p);
- else
- kern_printf("Pid: %2d Name: %10s %s: %9d Dline: %9d.%6d Stat: %s\n",
- p,
- proc_table[p].name,
- "Period ",
- lev->period[p],
- proc_table[p].timespec_priority.tv_sec,
- proc_table[p].timespec_priority.tv_nsec/1000,
- EDFACT_status_to_a(proc_table[p].status));
- p = proc_table[p].next;
- }
-
- for (p=0; p<MAX_PROC; p++)
- if (proc_table[p].task_level == l && proc_table[p].status != EDFACT_READY
- && proc_table[p].status != FREE )
- kern_printf("Pid: %2d Name: %10s %s: %9d Dline: %9d.%6d Stat: %s\n",
- p,
- proc_table[p].name,
- "Period ",
- lev->period[p],
- proc_table[p].timespec_priority.tv_sec,
- proc_table[p].timespec_priority.tv_nsec/1000,
- EDFACT_status_to_a(proc_table[p].status));
-}
-
-/* The scheduler only gets the first task in the queue */
-static PID EDFACT_level_scheduler(LEVEL l)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
-
-/* { // print 4 dbg the ready queue
- PID p= lev->ready;
- kern_printf("(s");
- while (p != NIL) {
- kern_printf("%d ",p);
- p = proc_table[p].next;
- }
- kern_printf(") ");
- }
- */
- return (PID)lev->ready;
-}
-
-/* The on-line guarantee is enabled only if the appropriate flag is set... */
-static int EDFACT_level_guarantee(LEVEL l, bandwidth_t *freebandwidth)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
-
- if (lev->flags & EDFACT_FAILED_GUARANTEE) {
- *freebandwidth = 0;
- return 0;
- }
- else
- if (*freebandwidth >= lev->U) {
- *freebandwidth -= lev->U;
- return 1;
- }
- else
- return 0;
-
-}
-
-static int EDFACT_task_create(LEVEL l, PID p, TASK_MODEL *m)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
-
- /* if the EDFACT_task_create is called, then the pclass must be a
- valid pclass. */
-
- HARD_TASK_MODEL *h = (HARD_TASK_MODEL *)m;
-
- lev->period[p] = h->mit;
-
- lev->flag[p] = 0;
- lev->deadline_timer[p] = -1;
- lev->dline_miss[p] = 0;
- lev->wcet_miss[p] = 0;
- lev->nact[p] = 0;
-
- /* Enable wcet check */
- proc_table[p].avail_time = h->wcet;
- proc_table[p].wcet = h->wcet;
- proc_table[p].control |= CONTROL_CAP;
-
- /* update the bandwidth... */
- if (lev->flags & EDFACT_ENABLE_GUARANTEE) {
- bandwidth_t b;
- b = (MAX_BANDWIDTH / h->mit) * h->wcet;
-
- /* really update lev->U, checking an overflow... */
- if (MAX_BANDWIDTH - lev->U > b)
- lev->U += b;
- else
- /* The task can NOT be guaranteed (U>MAX_BANDWIDTH)...
- in this case, we don't raise an exception... in fact, after the
- EDFACT_task_create the task_create will call level_guarantee that return
- -1... return -1 in EDFACT_task_create isn't correct, because:
- . generally, the guarantee must be done when also the resources
- are registered
- . returning -1 will cause the task_create to return with an errno
- ETASK_CREATE instead of ENO_GUARANTEE!!!
-
- Why I use the flag??? because if the lev->U overflows, if i.e. I set
- it to MAX_BANDWIDTH, I lose the correct allocated bandwidth...
- */
- lev->flags |= EDFACT_FAILED_GUARANTEE;
- }
-
- return 0; /* OK, also if the task cannot be guaranteed... */
-}
-
-static void EDFACT_task_detach(LEVEL l, PID p)
-{
- /* the EDFACT level doesn't introduce any dinamic allocated new field.
- we have only to reset the NO_GUARANTEE FIELD and decrement the allocated
- bandwidth */
-
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
-
- if (lev->flags & EDFACT_FAILED_GUARANTEE)
- lev->flags &= ~EDFACT_FAILED_GUARANTEE;
- else
- lev->U -= (MAX_BANDWIDTH / lev->period[p]) * proc_table[p].wcet;
-}
-
-static int EDFACT_task_eligible(LEVEL l, PID p)
-{
- return 0; /* if the task p is chosen, it is always eligible */
-}
-
-static void EDFACT_task_dispatch(LEVEL l, PID p, int nostop)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
-
- /* the task state is set EXE by the scheduler()
- we extract the task from the ready queue
- NB: we can't assume that p is the first task in the queue!!! */
- q_extract(p, &lev->ready);
-}
-
-static void EDFACT_task_epilogue(LEVEL l, PID p)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
-
- /* check if the wcet is finished... */
- if (proc_table[p].avail_time <= 0 && proc_table[p].control&CONTROL_CAP) {
- /* wcet finished: disable wcet event and count wcet miss */
- edfact_printf("W%d",p);
- proc_table[p].control &= ~CONTROL_CAP;
- lev->wcet_miss[p]++;
- }
-
- /* the task it returns into the ready queue... */
- q_timespec_insert(p,&lev->ready);
- proc_table[p].status = EDFACT_READY;
-}
-
-static void EDFACT_task_activate(LEVEL l, PID p)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
-
- /* Test if we are trying to activate a non sleeping task */
- /* save activation (only if needed... */
- if (proc_table[p].status != SLEEP) {
- /* a periodic task cannot be activated when it is already active */
- kern_raise(XACTIVATION,p);
- return;
- }
-
- ll_gettime(TIME_EXACT, &proc_table[p].request_time);
-
- EDFACT_internal_activate(lev,p);
-
- /* Set the deadline timer */
- lev->deadline_timer[p] = kern_event_post(&lev->deadline_timespec[p],
- EDFACT_timer_deadline,
- (void *)p);
-
-}
-
-static void EDFACT_task_insert(LEVEL l, PID p)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
-
- /* Insert task in the coEDFect position */
- proc_table[p].status = EDFACT_READY;
- q_timespec_insert(p,&lev->ready);
-}
-
-static void EDFACT_task_extract(LEVEL l, PID p)
-{
-}
-
-static void EDFACT_task_endcycle(LEVEL l, PID p)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
-
-
- /* we reset the capacity counters... */
- proc_table[p].avail_time = proc_table[p].wcet;
-
- if (lev->nact[p] > 0) {
- edfact_printf("E%d",p);
-
- /* Pending activation: reactivate the thread!!! */
- lev->nact[p]--;
-
- /* see also EDFACT_timer_deadline */
- ll_gettime(TIME_EXACT, &proc_table[p].request_time);
-
- EDFACT_internal_activate(lev,p);
-
- /* check if the deadline has already expired */
- if (TIMESPEC_A_LT_B(&proc_table[p].timespec_priority, &schedule_time)) {
- /* count the deadline miss */
- lev->dline_miss[p]++;
- event_delete(lev->deadline_timer[p]);
- }
-
- }
- else {
- edfact_printf("e%d",p);
-
- /* the task has terminated his job before it consume the wcet. All OK! */
- proc_table[p].status = EDFACT_IDLE;
-
- /* when the deadline timer fire, it recognize the situation and set
- correctly all the stuffs (like reactivation, request_time, etc... ) */
- }
-}
-
-static void EDFACT_task_end(LEVEL l, PID p)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
-
- edfact_printf("Û%d",p);
-
- /* we finally put the task in the ready queue */
- proc_table[p].status = FREE;
- q_insertfirst(p,&freedesc);
- /* and free the allocated bandwidth */
- lev->U -= (MAX_BANDWIDTH/lev->period[p]) * proc_table[p].wcet;
-
- if (lev->deadline_timer[p] != -1) {
- edfact_printf("²%d",p);
- event_delete(lev->deadline_timer[p]);
- }
-}
-
-static void EDFACT_task_sleep(LEVEL l, PID p)
-{ kern_raise(XUNVALID_TASK,exec_shadow); }
-
-static void EDFACT_task_delay(LEVEL l, PID p, TIME usdelay)
-{ kern_raise(XUNVALID_TASK,exec_shadow); }
-
-/* Guest Functions
- These functions manages a JOB_TASK_MODEL, that is used to put
- a guest task in the EDFACT ready queue. */
-
-static int EDFACT_guest_create(LEVEL l, PID p, TASK_MODEL *m)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
- JOB_TASK_MODEL *job = (JOB_TASK_MODEL *)m;
-
- /* if the EDFACT_guest_create is called, then the pclass must be a
- valid pclass. */
-
- TIMESPEC_ASSIGN(&proc_table[p].timespec_priority, &job->deadline);
-
- lev->deadline_timer[p] = -1;
- lev->dline_miss[p] = 0;
- lev->wcet_miss[p] = 0;
- lev->nact[p] = 0;
-
- if (job->noraiseexc)
- lev->flag[p] = EDFACT_FLAG_NORAISEEXC;
- else
- lev->flag[p] = 0;
-
- lev->period[p] = job->period;
-
- /* there is no bandwidth guarantee at this level, it is performed
- by the level that inserts guest tasks... */
-
- return 0; /* OK, also if the task cannot be guaranteed... */
-}
-
-static void EDFACT_guest_detach(LEVEL l, PID p)
-{
- /* the EDFACT level doesn't introduce any dinamic allocated new field.
- No guarantee is performed on guest tasks... so we don't have to reset
- the NO_GUARANTEE FIELD */
-}
-
-static void EDFACT_guest_dispatch(LEVEL l, PID p, int nostop)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
-
- /* the task state is set to EXE by the scheduler()
- we extract the task from the ready queue
- NB: we can't assume that p is the first task in the queue!!! */
- q_extract(p, &lev->ready);
-}
-
-static void EDFACT_guest_epilogue(LEVEL l, PID p)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
-
- /* the task has been preempted. it returns into the ready queue... */
- q_timespec_insert(p,&lev->ready);
- proc_table[p].status = EDFACT_READY;
-}
-
-static void EDFACT_guest_activate(LEVEL l, PID p)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
-
- /* Insert task in the correct position */
- q_timespec_insert(p,&lev->ready);
- proc_table[p].status = EDFACT_READY;
-
- /* Set the deadline timer */
- if (!(lev->flag[p] & EDFACT_FLAG_NORAISEEXC))
- lev->deadline_timer[p] = kern_event_post(&proc_table[p].timespec_priority,
- EDFACT_timer_guest_deadline,
- (void *)p);
-
-}
-
-static void EDFACT_guest_insert(LEVEL l, PID p)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
-
- /* Insert task in the correct position */
- q_timespec_insert(p,&lev->ready);
- proc_table[p].status = EDFACT_READY;
-}
-
-static void EDFACT_guest_extract(LEVEL l, PID p)
-{
-}
-
-static void EDFACT_guest_endcycle(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void EDFACT_guest_end(LEVEL l, PID p)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
-
- //kern_printf("EDFACT_guest_end: dline timer %d\n",lev->deadline_timer[p]);
- if (proc_table[p].status == EDFACT_READY)
- {
- q_extract(p, &lev->ready);
- //kern_printf("(g_end rdy extr)");
- }
-
- /* we remove the deadline timer, because the slice is finished */
- if (lev->deadline_timer[p] != NIL) {
-// kern_printf("EDFACT_guest_end: dline timer %d\n",lev->deadline_timer[p]);
- event_delete(lev->deadline_timer[p]);
- lev->deadline_timer[p] = NIL;
- }
-
-}
-
-static void EDFACT_guest_sleep(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void EDFACT_guest_delay(LEVEL l, PID p, TIME usdelay)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-/* Registration functions */
-
-/*+ Registration function:
- int flags the init flags ... see EDFACT.h +*/
-void EDFACT_register_level(int flags)
-{
- LEVEL l; /* the level that we register */
- EDFACT_level_des *lev; /* for readableness only */
- PID i; /* a counter */
-
- printk("EDFACT_register_level\n");
-
- /* request an entry in the level_table */
- l = level_alloc_descriptor();
-
- printk(" alloco descrittore %d %d\n",l,(int)sizeof(EDFACT_level_des));
-
- /* alloc the space needed for the EDFACT_level_des */
- lev = (EDFACT_level_des *)kern_alloc(sizeof(EDFACT_level_des));
-
- printk(" lev=%d\n",(int)lev);
-
- /* update the level_table with the new entry */
- level_table[l] = (level_des *)lev;
-
- /* fill the standard descriptor */
- strncpy(lev->l.level_name, EDFACT_LEVELNAME, MAX_LEVELNAME);
- lev->l.level_code = EDFACT_LEVEL_CODE;
- lev->l.level_version = EDFACT_LEVEL_VERSION;
-
- lev->l.level_accept_task_model = EDFACT_level_accept_task_model;
- lev->l.level_accept_guest_model = EDFACT_level_accept_guest_model;
- lev->l.level_status = EDFACT_level_status;
- lev->l.level_scheduler = EDFACT_level_scheduler;
-
- if (flags & EDFACT_ENABLE_GUARANTEE)
- lev->l.level_guarantee = EDFACT_level_guarantee;
- else
- lev->l.level_guarantee = NULL;
-
- lev->l.task_create = EDFACT_task_create;
- lev->l.task_detach = EDFACT_task_detach;
- lev->l.task_eligible = EDFACT_task_eligible;
- lev->l.task_dispatch = EDFACT_task_dispatch;
- lev->l.task_epilogue = EDFACT_task_epilogue;
- lev->l.task_activate = EDFACT_task_activate;
- lev->l.task_insert = EDFACT_task_insert;
- lev->l.task_extract = EDFACT_task_extract;
- lev->l.task_endcycle = EDFACT_task_endcycle;
- lev->l.task_end = EDFACT_task_end;
- lev->l.task_sleep = EDFACT_task_sleep;
- lev->l.task_delay = EDFACT_task_delay;
-
- lev->l.guest_create = EDFACT_guest_create;
- lev->l.guest_detach = EDFACT_guest_detach;
- lev->l.guest_dispatch = EDFACT_guest_dispatch;
- lev->l.guest_epilogue = EDFACT_guest_epilogue;
- lev->l.guest_activate = EDFACT_guest_activate;
- lev->l.guest_insert = EDFACT_guest_insert;
- lev->l.guest_extract = EDFACT_guest_extract;
- lev->l.guest_endcycle = EDFACT_guest_endcycle;
- lev->l.guest_end = EDFACT_guest_end;
- lev->l.guest_sleep = EDFACT_guest_sleep;
- lev->l.guest_delay = EDFACT_guest_delay;
-
- /* fill the EDFACT descriptor part */
- for(i=0; i<MAX_PROC; i++) {
- lev->period[i] = 0;
- lev->deadline_timer[i] = -1;
- lev->flag[i] = 0;
- lev->dline_miss[i] = 0;
- lev->wcet_miss[i] = 0;
- lev->nact[i] = 0;
- }
-
- lev->ready = NIL;
- lev->flags = flags & 0x07;
- lev->U = 0;
-}
-
-bandwidth_t EDFACT_usedbandwidth(LEVEL l)
-{
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
- if (lev->l.level_code == EDFACT_LEVEL_CODE &&
- lev->l.level_version == EDFACT_LEVEL_VERSION)
- return lev->U;
- else
- return 0;
-}
-
-int EDFACT_get_dline_miss(PID p)
-{
- LEVEL l = proc_table[p].task_level;
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
- if (lev->l.level_code == EDFACT_LEVEL_CODE &&
- lev->l.level_version == EDFACT_LEVEL_VERSION)
- return lev->dline_miss[p];
- else
- return -1;
-}
-
-int EDFACT_get_wcet_miss(PID p)
-{
- LEVEL l = proc_table[p].task_level;
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
- if (lev->l.level_code == EDFACT_LEVEL_CODE &&
- lev->l.level_version == EDFACT_LEVEL_VERSION)
- return lev->wcet_miss[p];
- else
- return -1;
-}
-
-int EDFACT_get_nact(PID p)
-{
- LEVEL l = proc_table[p].task_level;
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
- if (lev->l.level_code == EDFACT_LEVEL_CODE &&
- lev->l.level_version == EDFACT_LEVEL_VERSION)
- return lev->nact[p];
- else
- return -1;
-}
-
-int EDFACT_reset_dline_miss(PID p)
-{
- LEVEL l = proc_table[p].task_level;
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
- if (lev->l.level_code == EDFACT_LEVEL_CODE &&
- lev->l.level_version == EDFACT_LEVEL_VERSION)
- {
- lev->dline_miss[p] = 0;
- return 0;
- }
- else
- return -1;
-}
-
-int EDFACT_reset_wcet_miss(PID p)
-{
- LEVEL l = proc_table[p].task_level;
- EDFACT_level_des *lev = (EDFACT_level_des *)(level_table[l]);
- if (lev->l.level_code == EDFACT_LEVEL_CODE &&
- lev->l.level_version == EDFACT_LEVEL_VERSION)
- {
- lev->wcet_miss[p] = 0;
- return 0;
- }
- else
- return -1;
-}
-
Index: start/auto/tracks.c
===================================================================
--- start/auto/tracks.c (revision 1087)
+++ start/auto/tracks.c (nonexistent)
@@ -1,111 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-
-/**
- ------------
- CVS : $Id: tracks.c,v 1.1.1.1 2002-09-02 09:37:42 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:42 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Marco Dallera and Marco Fiocca
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * AUTO
- *
- * Another Unuseful Track simulatOr
- *
- * Authors: Marco Dallera
- * Marco Fiocca
- *
- */
-
-/* -------------- */
-/* Track loader */
-/* -------------- */
-
-#include "include/auto.h"
-#include "include/const.h"
-
-track track_list[TRACK_NUMBER];
-
-int track_init()
-{
- track demo1;
- track demo2;
- track brazil;
- track monaco;
-
- strcpy(demo1.name, "demo1.raw");
- demo1.pole_pos.x = 150;
- demo1.pole_pos.y = 35;
- demo1.pole_orient = 0.0;
- demo1.lap = CLOCK;
- demo1.selected = 0;
-
- strcpy(demo2.name, "demo2.raw");
- demo2.pole_pos.x = 150;
- demo2.pole_pos.y = 30;
- demo2.pole_orient = 0.0;
- demo2.lap = CLOCK;
- demo2.selected = 0;
-
- strcpy(brazil.name, "brazil.raw");
- brazil.pole_pos.x = 140;
- brazil.pole_pos.y = 185;
- brazil.pole_orient = 225.0;
- brazil.lap = ANTICLOCK;
- brazil.selected = 0;
-
- strcpy(monaco.name, "monaco.raw");
- monaco.pole_pos.x = 35;
- monaco.pole_pos.y = 315;
- monaco.pole_orient = 85.0;
- monaco.lap = CLOCK;
- monaco.selected = 0;
-
- track_list[0] = demo1;
- track_list[1] = demo2;
- track_list[2] = brazil;
- track_list[3] = monaco;
-
- return 0;
-}
Index: start/myapp2/makefile
===================================================================
--- start/myapp2/makefile (revision 1087)
+++ start/myapp2/makefile (nonexistent)
@@ -1,16 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= $(APP)
-
-include $(BASE)/config/example.mk
-
-$(APP):
- make -f $(SUBMAKE) INIT=hartik3.o OTHEROBJS=
-
Index: start/myapp2/myapp.c
===================================================================
--- start/myapp2/myapp.c (revision 1087)
+++ start/myapp2/myapp.c (nonexistent)
@@ -1,55 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-// if you want to use some functions, types, task models provided
-// by your new module
-
-#include "mymod.h"
-
-// then, include any file you want here
-
-// then, the classic C-style function
-int main(int argc, char **argv)
-{
- // ... your stuff here
- return 0;
-}
-
-
-
-
-
-
-
-
Index: start/myapp2/readme.txt
===================================================================
--- start/myapp2/readme.txt (revision 1087)
+++ start/myapp2/readme.txt (nonexistent)
@@ -1,7 +0,0 @@
-This is a template application, and it DOES NOTHING!!!
-
-This is only an example package.
-
-Please refer to the How To Compile reference guide for more informations.
-
-Paolo
Index: start/slsh/slshtest.c
===================================================================
--- start/slsh/slshtest.c (revision 1087)
+++ start/slsh/slshtest.c (nonexistent)
@@ -1,173 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: slshtest.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-
- Slot shifting test
-
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai and Tomas Lennvall
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <kernel/config.h>
-#include "kernel/kern.h"
-#include "slsh.h"
-#include "drivers/keyb.h"
-
-/* a slot length of 100 ms */
-#define SLOT_LENGTH 100000
-
-
-TASK static1(void)
-{
- int i = 0;
-
- kern_printf("Static1\n");
- while(sys_gettime(NULL) < 10000) i++;
-
- return 0;
-}
-
-TASK static2(void)
-{
- int i = 0;
-
- kern_printf("Static2\n");
- while(sys_gettime(NULL) < 10000) i++;
-
- return 0;
-}
-
-
-TASK static3(void)
-{
- kern_printf("Static3\n");
-
- return 0;
-}
-
-void my_end(KEY_EVT *e)
-{
- sys_end();
-}
-
-int main(int argc, char** argv)
-{
- STATIC_TASK_MODEL s;
- // HARD_TASK_MODEL h_aper;
- // SOFT_TASK_MODEL u;
- PID p1,p2,p3;
- struct timespec x;
-
- KEY_EVT emerg;
-
- kern_cli();
- x.tv_sec=5;
- kern_event_post(&x,(void (*)(void *))sys_end,NULL);
- kern_sti();
-
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,my_end);
-
- /* set som variables in the scheduling level */
- SLSH_set_interval(0, 0, 8, 5);
- SLSH_set_interval(0, 8, 17, 7);
- SLSH_set_interval(0, 17, 20, 1);
-
- SLSH_set_variables(0, SLOT_LENGTH);
-
- static_task_default_model(s);
- static_task_def_group(s, 1);
-
- /* define time i ms */
- /* static1 task */
- static_task_def_est(s, 0);
- static_task_def_dabs(s, 800000);
- static_task_def_wcet(s, 500000);
- static_task_def_interval(s, 0);
-
- kern_printf("In main, before task creation\n");
-
- p1 = task_create("Static 1", static1, &s, NULL);
- if(p1 == NIL)
- kern_printf("Cannot create: Static1!\n");
-
- /* Static2 task */
- static_task_def_est(s, 800000);
- static_task_def_dabs(s, 1700000);
- static_task_def_wcet(s, 700000);
- static_task_def_interval(s, 1);
-
- p2 = task_create("Static 2", static2, &s, NULL);
- if(p2 == NIL)
- kern_printf("Cannot create: Static2!\n");
-
- /* Static3 task */
- static_task_def_est(s, 1700000);
- static_task_def_dabs(s, 2000000);
- static_task_def_wcet(s, 100000);
- static_task_def_interval(s, 2);
-
-
- p3 = task_create("Static3", static3, &s, NULL);
- if(p3 == NIL)
- kern_printf("Cannot create: Static3!\n");
-
-
- /* End task */
- /*hard_task_default_model(h_aper);
-
-
- hard_task_def_wcet(h_aper, 100000);
- */
- kern_printf("After task creation\n");
-
- group_activate(1);
-
- return 0;
-}
Index: start/slsh/slsh.c
===================================================================
--- start/slsh/slsh.c (revision 1087)
+++ start/slsh/slsh.c (nonexistent)
@@ -1,842 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: slsh.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-
- This file contains the scheduling module for Slot-Shifting.
-
- Read slsh.h for further details.
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-#include "slsh.h"
-#include <ll/stdio.h>
-#include <ll/stdlib.h>
-#include <ll/string.h>
-#include <ll/math.h> /* for ceil(...) */
-#include <ll/ll.h> /* for memcpy(...) */
-#include <kernel/model.h>
-#include <kernel/descr.h>
-#include <kernel/var.h>
-#include <kernel/func.h>
-
-//#define eslsh_printf kern_printf
-#define slsh_printf printk
-
-/* Keeps information about static and guaranteed tasks */
-typedef struct {
- int est;
- int dabs;
- int interval;
-} SLSH_task;
-
-/*+ Status used in the level +*/
-#define SLSH_READY MODULE_STATUS_BASE
-#define SLSH_WAIT MODULE_STATUS_BASE + 1
-#define SLSH_IDLE MODULE_STATUS_BASE + 2
-#define SLSH_WCET_VIOLATED MODULE_STATUS_BASE + 3
-
-/*+ defines +*/
-#define MAX_INTERVALS 1000 /* 1000 intervals is max, for now */
-
-/******+ the level redefinition for the SLOT SHIFT level +*******/
-typedef struct {
- level_des l; /*+ the standard level descriptor+*/
-
- /* task lists */
- SLSH_task tasks[MAX_PROC]; /* est and dl's for static and guaranteed task */
-
- QUEUE idle_statics; /* finished static tasks */
-
- QQUEUE unspecified; /* tasks with only a wcet */
-
- /* the Intervals list */
- SLSH_interval intervals[MAX_INTERVALS];
- int current; /* current interval */
- int last; /* last interval */
-
- int slot; /* slot shifting time */
- TIME slot_length; /* slothlength in real system time*/
- int LCM; /* length (in slots) of ofline schedule */
-
- int slot_event; /* save the event */
-} SLSH_level_des;
-
-
-/* Which task models the Slot-Shifting module accepts */
-static int SLSH_level_accept_task_model(LEVEL l, TASK_MODEL* m)
-{
- HARD_TASK_MODEL* h;
- SOFT_TASK_MODEL* s;
-
- /* Check the models */
- switch(m->pclass)
- {
- case STATIC_PCLASS: /* offline scheduled tasks */
- return 0;
- case HARD_PCLASS: /* hard aperiodic tasks */
- h = (HARD_TASK_MODEL *) m;
- if(h->drel != 0 && h->wcet != 0) /* must be set */
- return 0;
- break;
- case SOFT_PCLASS: /* soft aperiodic tasks */
- s = (SOFT_TASK_MODEL *) m;
- if(s->wcet != 0) /* must be set */
- return 0;
- break;
- default:
- }
-
- return -1; /* Not accepted model */
-}
-
-
-static void SLSH_level_status(LEVEL l)
-{
- kern_printf("Level status not implemented\n");
-}
-
-/* check if some tasks are ready, return 0 if ready, -1 otherwise */
-static int SLSH_R(SLSH_task* tasks)
-{
- int s;
-
- /* for all static tasks */
- for(s = 0; tasks[s].est != -1; ++s)
- {
- if(proc_table[s].status == SLSH_READY)
- return 0;
- }
- return -1;
-}
-
-/* check if unspecified exists, return 0 if it exists, -1 otherwise */
-static int SLSH_T(QQUEUE unspecified)
-{
- if(unspecified.first != NIL)
- return 0;
- else
- return -1;
-}
-
-/* return the sc in an interval */
-static int SLSH_sc(SLSH_interval* intervals, int i)
-{
- return intervals[i].sc;
-}
-/* return a static task from current interval or a guaranted task */
-static PID SLSH_staticOrGuaranteed(SLSH_level_des* lev)
-{
- int lowest_dl = 0; /* lowest dl found */
- PID pid = 0; /* static or guaranteed task */
- int t;
-
- /* Decide according to EDF, go through all static & guaranteed tasks */
- for(t = 0; t < MAX_PROC; ++t)
- {
- /* static tasks */
- if(proc_table[t].pclass == STATIC_PCLASS)
- {
- /* static task must belong to current interval */
- if(lev->tasks[t].interval == lev->current)
- {
- /* only ready tasks */
- if(proc_table[t].status == SLSH_READY)
- {
- /* a new lower dl was found */
- if(lev->tasks[t].dabs < lowest_dl)
- {
- lowest_dl = lev->tasks[t].dabs;
- pid = t;
- }
- }
- }
- } /* guaranteed tasks */
- else if(proc_table[t].pclass == HARD_PCLASS)
- {
- /* only ready tasks */
- if(proc_table[t].status == SLSH_READY)
- {
- /* a new lower dl was found */
- if(lev->tasks[t].dabs < lowest_dl)
- {
- lowest_dl = lev->tasks[t].dabs;
- pid = t;
- }
- }
- }
- }/* for all tasks */
-
- return pid;
-}
-
-/* return a static task among the candidates, all ready statics */
-static PID SLSH_candidates(SLSH_task* tasks)
-{
- int lowest_dl = 0;
- PID pid;
- int t;
-
- /* Use the EDL algorithm again to decide which task to run */
- for(t = 0; t < MAX_PROC; ++t)
- {
- /* only static tasks */
- if(proc_table[t].pclass == STATIC_PCLASS)
- {
- /* only ready tasks */
- if(proc_table[t].status == SLSH_READY)
- {
- /* a new lower dl was found */
- if(tasks[t].dabs < lowest_dl)
- {
- lowest_dl = tasks[t].dabs;
- pid = t;
- }
- }/* all ready tasks */
- }/* all static tasks */
- }/* for all tasks */
-
- return pid;
-}
-
-/* decrease the sc in a interval by amount */
-void SLSH_decSc(SLSH_interval* intervals, int i, int amount)
-{
- intervals[i].sc -= amount;
-}
-
-void SLSH_incSc(SLSH_interval* intervals, int i, int amount)
-{
- intervals[i].sc += amount;
-}
-
-/* swap the sc between intervals, also consider intervals with negative sc */
-void SLSH_swapSc(SLSH_interval* intervals, int current, int task_interval)
-{
- /* decrease the sc in the current interval */
- SLSH_decSc(intervals, current, 1);
-
- /* update the other interval(s) */
- if(intervals[task_interval].sc < 0) /* negative sc */
- {
- /* special case, increase next interval sc by 1 and also current interval (borrowing) */
- if(task_interval == current + 1)
- {
- SLSH_incSc(intervals, task_interval, 1);
- SLSH_incSc(intervals, current, 1);
- }
- else /* increase every interval sc that is negative between current and task_interval */
- {
- while(task_interval > current && intervals[task_interval].sc < 0)
- {
- SLSH_incSc(intervals, task_interval, 1);
- task_interval--;
- }
- }
- }
- else /* ordinary swapping */
- SLSH_incSc(intervals, task_interval, 1);
-}
-
-/* The scheduler, decides which task to run. */
-static PID SLSH_level_scheduler(LEVEL l)
-{
- SLSH_level_des* lev = (SLSH_level_des *)(level_table[l]);
- PID pid;
-
- /* The scheduler choses among static, guaranteed (hard aperiodic) and
- unspecified (soft aperiodic) tasks */
- /* no ready tasks and no sc, execute idle task */
- if(SLSH_R(lev->tasks) == 0 && SLSH_sc(lev->intervals, lev->current) == 0)
- return NIL;
- /* must execute a static from current intervall or a guaranteed task */
- else if(SLSH_R(lev->tasks) > 0 && SLSH_sc(lev->intervals, lev->current) == 0)
- return SLSH_staticOrGuaranteed(lev);
- /* sc available... */
- else if(SLSH_R(lev->tasks) > 0 && SLSH_sc(lev->intervals, lev->current) > 0)
- {
- /* If unspecified exist, execute it according to FIFO order */
- if(SLSH_T(lev->unspecified) == 0)
- {
- SLSH_decSc(lev->intervals, lev->current, 1); /* decrease sc by 1 */
- return (PID)qq_getfirst(&lev->unspecified);
- }
- else /* No unspecified, execute task from candidates (statics) */
- {
- pid = SLSH_candidates(lev->tasks);
-
- /* sc needs to be swapped */
- if(lev->tasks[pid].interval != lev->current)
- SLSH_swapSc(lev->intervals, lev->tasks[pid].interval, lev->current);
-
- return pid;
- }
- }
-
- kern_printf("(SLSH s)");
- return NIL;
-}
-
-/* not used, slot-shifting handles all guarantees itself, it handles all bandwidth */
-static int SLSH_level_guarantee(LEVEL l, bandwidth_t *freebandwidth)
-{
- *freebandwidth = 0;
- return 1;
-}
-
-/* get the interval that x is in */
-static int SLSH_getInterval(SLSH_interval* intervals, int x, int last)
-{
- int i;
-
- /* search through the intervals */
- for(i = 0; i <= last; ++i)
- {
- /* I is in the interval where start is smaller or equal and end is bigger */
- if(intervals[i].start <= x && x < intervals[i].end)
- return i;
- }
- return -1;
-}
-
-/* get the start of the interval I */
-static int SLSH_intervalStart(SLSH_interval* intervals, int I)
-{
- return intervals[I].start;
-}
-
-/* split interval I into two parts, slow because of copying. OBS!!! no check if there is
- enough space in the intervals array */
-static void SLSH_splitInterval(SLSH_level_des* lev, int I, int dabs)
-{
- SLSH_interval left_interval;
- int i;
-
-
- lev->last++;
-
- /* move every interval above and including I */
- for(i = lev->last; i > I; --i)
- memcpy(&lev->intervals[i], &lev->intervals[i - 1], sizeof(SLSH_interval));
-
- /* Left interval start, end and length */
- left_interval.start = lev->intervals[I].start;
- left_interval.end = dabs;
- left_interval.length = left_interval.end - left_interval.start;
-
- /* Right interval (uses old interval struct) start and length end remains as the old value */
- lev->intervals[I + 1].start = dabs;
- lev->intervals[I + 1].length = lev->intervals[I + 1].end - lev->intervals[I + 1].start;
-
- /* check if sc still exists in the right interval */
- if(lev->intervals[I + 1].length - lev->intervals[I + 1].maxt > 0)
- {
- lev->intervals[I + 1].sc = lev->intervals[I + 1].length - lev->intervals[I + 1].maxt;
- left_interval.sc = left_interval.length; /* the whole interval is free, for now... */
- }
- else /* no sc in the right interval */
- {
- lev->intervals[I + 1].maxt = lev->intervals[I + 1].length;
- left_interval.sc = lev->intervals[I + 1].sc; /* all sc in left interval */
- lev->intervals[I + 1].sc = 0;
- }
-
- /* insert the new interval */
- memcpy(&lev->intervals[I], &left_interval, sizeof(SLSH_interval));
-}
-
-/* Reduce the sc from back to front by the wcet amount, interval splitting may be neccesary */
-static void SLSH_updateSc(SLSH_level_des* lev, HARD_TASK_MODEL* h)
-{
- int dabs = ceil((lev->slot + h->drel)/lev->slot_length); /* absolute deadline of request */
- int dabs_interval = SLSH_getInterval(lev->intervals, dabs, lev->last); /* interval where dabs is */
- int C = ceil(h->wcet/lev->slot_length); /* amount of sc to reduce */
- int sc = 0;
- int i;
-
- /* check if interval splitting is neccesary */
- if(lev->intervals[dabs_interval].end != dabs)
- SLSH_splitInterval(lev, dabs_interval, dabs);
-
- /* decrease sc in all intervals that are neccesary from dabs_interval o current */
- for(i = dabs_interval; i >= lev->current && C > 0; --i)
- {
- if((sc = SLSH_sc(lev->intervals, i)) >= 0) /* only decrease where sc exists */
- {
- if(sc > C) /* the last sc dec */
- {
- SLSH_decSc(lev->intervals, i, C);
- C = 0;
- }
- else /* to little sc in this interval, decrease it to 0 */
- {
- C -= SLSH_sc(lev->intervals, i);
- SLSH_decSc(lev->intervals, i, SLSH_sc(lev->intervals, i));
- }
- }
- }/* for all intervals */
-}
-
-/* the guarantee algorithm for hard aperiodic requests */
-static int SLSH_guarantee(SLSH_level_des* lev, HARD_TASK_MODEL* h)
-{
- int total_sc = 0;
- int temp, i;
- int dabs = ceil((lev->slot + h->drel)/lev->slot_length); /* absolute deadline of request */
- int dabs_interval = SLSH_getInterval(lev->intervals, dabs, lev->last); /* interval where dabs is */
-
- /* check if the sc up until request deadline is >= request wcet */
- /* 1. the sc of the current interal */
- total_sc = SLSH_sc(lev->intervals, lev->current);
-
- /* 2. the sc for all whole intervals between current and the interval
- with the request deadline */
- for(i = (lev->current) + 1; i < dabs_interval; ++i)
- {
- if((temp = SLSH_sc(lev->intervals, i)) > 0)
- total_sc += temp;
- }
-
- /* 3. the min of sc or the execution need in the last interval */
- total_sc += min(SLSH_sc(lev->intervals, dabs_interval),
- dabs - SLSH_intervalStart(lev->intervals,
- dabs_interval));
-
- if(total_sc >= h->wcet)
- { /* update the sc in the intervals from back to front */
- SLSH_updateSc(lev, h);
- return 0;
- }
- else
- return -1;
-}
-
-/* check if task model is accepted and store nessecary parameters */
-static int SLSH_task_create(LEVEL l, PID p, TASK_MODEL *m)
-{
- SLSH_level_des *lev = (SLSH_level_des *)(level_table[l]);
- STATIC_TASK_MODEL* s;
- HARD_TASK_MODEL* h;
- SOFT_TASK_MODEL* u;
-
- /* if the SLSH_task_create is called, then the pclass must be a
- valid pclass. Slot-shifting accepts STATIC_TASK, HARD_TASK
- and SOFT_TASK models with some restrictions */
-
- /* est, dl and wcet is saved in slotlengths */
- switch(m->pclass)
- {
- case STATIC_PCLASS: /* offline scheduled tasks */
- s = (STATIC_TASK_MODEL *) m;
- lev->tasks[p].est = ceil(s->est/lev->slot_length);
- lev->tasks[p].dabs = ceil(s->dabs/lev->slot_length);
- lev->tasks[p].interval = s->interval;
- proc_table[p].avail_time = s->wcet;
- proc_table[p].wcet = s->wcet;
- break;
- case HARD_PCLASS: /* hard aperiodic tasks */
- h = (HARD_TASK_MODEL *) m;
- if(SLSH_guarantee(lev, h) == 0)
- {
- /* convert drel to dabs */
- lev->tasks[p].dabs = ceil((lev->slot + h->drel)/lev->slot_length);
- proc_table[p].avail_time = h->wcet;
- proc_table[p].wcet = h->wcet;
- }
- else /* task not guaranteed */
- return -1;
- break;
- case SOFT_PCLASS:
- u = (SOFT_TASK_MODEL *) m;
- proc_table[p].avail_time = u->wcet;
- proc_table[p].wcet = u->wcet;
- qq_insertlast(p, &lev->unspecified); /* respect FIFO order */
- break;
- default: /* a task model not supported */
- return -1;
- }
- /* enable wcet check in the kernel */
- proc_table[p].control |= CONTROL_CAP;
-
- return 0;
-}
-
-static void SLSH_task_detach(LEVEL l, PID p)
-{
- /* do nothing */
-}
-
-/* check if a task chosen by scheduler is correct */
-static int SLSH_task_eligible(LEVEL l, PID p)
-{
- return 0; /* if the task p is chosen, it is always eligible */
-}
-
-/************* The slot end event handler *************/
-static void SLSH_slot_end(void* p)
-{
- SLSH_level_des* lev = (SLSH_level_des *) p;
- PID pid;
- int i;
-
- /* increase slot "time" by 1 */
- if(lev->slot < lev->LCM)
- {
- lev->slot++;
- /* check if new statics are ready */
- for(i = 0; lev->tasks[i].interval != -1; ++i)
- {
- if(lev->tasks[i].est <= lev->slot && proc_table[i].status == SLSH_WAIT)
- proc_table[i].status = SLSH_READY;
- }
-
- /* check if current (interval) needs updating */
- if(lev->current < SLSH_getInterval(lev->intervals, lev->slot, lev->last))
- lev->current++;
-
- }
- else /* restart from the beginning of the offline schedule */
- {
- lev->slot = 0;
-
- while((pid = q_getfirst(&lev->idle_statics)) != NIL)
- {
- if(lev->tasks[pid].est <= lev->slot)
- proc_table[pid].status = SLSH_READY;
- else
- proc_table[pid].status = SLSH_WAIT;
- }
- }
-
- /* call for a rescheduling, reset event flag and increase slot by 1 */
- lev->slot_event = -1;
- kern_printf("*");
- event_need_reschedule();
-}
-
-/* when a task becomes executing (EXE status) */
-static void SLSH_task_dispatch(LEVEL l, PID pid, int nostop)
-{
- SLSH_level_des *lev = (SLSH_level_des *)(level_table[l]);
- struct timespec t;
-
- /* the task state is set EXE by the scheduler()
- we extract the task from the unspecified queue.
- NB: we can't assume that p is the first task in the queue!!! */
-
- if(proc_table[pid].pclass == SOFT_PCLASS)
- qq_extract(pid, &lev->unspecified);
-
- /* also start the timer for one slot length */
- lev->slot_event = kern_event_post(&TIME2TIMESPEC(lev->slot_length, t),
- SLSH_slot_end, (void*) lev);
-}
-
-/* called when task is moved from EXE status */
-static void SLSH_task_epilogue(LEVEL l, PID pid)
-{
- SLSH_level_des *lev = (SLSH_level_des *)(level_table[l]);
-
- /* check if the wcet is finished... */
- if (proc_table[pid].avail_time <= 0)
- {
- /* if it is, raise a XWCET_VIOLATION exception */
- kern_raise(XWCET_VIOLATION, pid);
- proc_table[pid].status = SLSH_WCET_VIOLATED;
- }
- else /* the end of a slot. the task returns into the ready queue... */
- {
- if(proc_table[pid].pclass == SOFT_PCLASS)
- qq_insertfirst(pid,&lev->unspecified);
-
- proc_table[pid].status = SLSH_READY;
- }
-}
-
-/* when task go from SLEEP to SLSH_READY or SLSH_WAIT */
-static void SLSH_task_activate(LEVEL l, PID pid)
-{
- SLSH_level_des *lev = (SLSH_level_des *)(level_table[l]);
- WORD type = proc_table[pid].pclass;
-
- /* Test if we are trying to activate a non sleeping task */
- /* Ignore this; the task is already active */
- if (proc_table[pid].status != SLEEP && proc_table[pid].status != SLSH_WCET_VIOLATED)
- return;
-
- /* make task ready or waiting, dependong on slot (the time) for static tasks only*/
- if(type == STATIC_PCLASS && lev->tasks[pid].est <= lev->slot)
- proc_table[pid].status = SLSH_READY;
- else
- proc_table[pid].status = SLSH_WAIT;
-
- if(type == HARD_PCLASS)
- proc_table[pid].status = SLSH_READY;
-
- /* insert unspecified tasks in QQUEUE and make it ready */
- if(type == SOFT_PCLASS)
- {
- qq_insertlast(pid ,&lev->unspecified);
- proc_table[pid].status = SLSH_READY;
- }
-}
-
-/* when a task i returned to module from a semaphore, mutex ... */
-static void SLSH_task_insert(LEVEL l, PID pid)
-{
- SLSH_level_des *lev = (SLSH_level_des *)(level_table[l]);
-
- /* change staus of task */
- proc_table[pid].status = SLSH_READY;
-
- if(proc_table[pid].pclass == SOFT_PCLASS)
- qq_insertfirst(pid ,&lev->unspecified);
-}
-
-/* when a semaphore, mutex ... taskes a task from module */
-static void SLSH_task_extract(LEVEL l, PID pid)
-{
- /* Extract the running task from the level
- . we have already extract it from the ready queue at the dispatch time.
- . the capacity event have to be removed by the generic kernel
- . the wcet don't need modification...
- . the state of the task is set by the calling function
- . the deadline must remain...
-
- So, we do nothing!!!
- */
-}
-
-/* task has finished execution for this period */
-static void SLSH_task_endcycle(LEVEL l, PID pid)
-{
- /* do nothing */
-}
-
-/* the task has finihed its wcet, kill task (dont kill static tasks) */
-static void SLSH_task_end(LEVEL l, PID pid)
-{
- SLSH_level_des *lev = (SLSH_level_des *)(level_table[l]);
-
- if(proc_table[pid].pclass == SOFT_PCLASS)
- {
- if (proc_table[pid].status == SLSH_READY)
- qq_extract(pid, &lev->unspecified);
- }
- else if(proc_table[pid].pclass == HARD_PCLASS)
- {
- if (proc_table[pid].status == SLSH_READY)
- lev->tasks[pid].dabs = 0;
-
- }
- /* static tasks: put them in idle QUEUE, reset status and avail_time */
- else if(proc_table[pid].pclass == STATIC_PCLASS)
- {
- proc_table[pid].avail_time = proc_table[pid].wcet;
- proc_table[pid].status = SLSH_IDLE;
- q_insert(pid, &lev->idle_statics);
- }
-
- proc_table[pid].status = FREE;
-}
-
-/* called when a task should sleep but not execute for awhile, mabe a mode change */
-static void SLSH_task_sleep(LEVEL l, PID pid)
-{
-
- /* the task has terminated his job before it consume the wcet. All OK! */
- proc_table[pid].status = SLEEP;
-
- /* we reset the capacity counters... only for static tasks */
- if (proc_table[pid].pclass == STATIC_PCLASS)
- proc_table[pid].avail_time = proc_table[pid].wcet;
-
-}
-
-static void SLSH_task_delay(LEVEL l, PID p, TIME usdelay) { }
-
-/** Guest Functions, slot shifing accepts no guests, so all generates exceptions **/
-
-static int SLSH_level_accept_guest_model(LEVEL l, TASK_MODEL* m) { return -1; }
-
-static int SLSH_guest_create(LEVEL l, PID p, TASK_MODEL *m)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); return 0; }
-
-static void SLSH_guest_detach(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void SLSH_guest_dispatch(LEVEL l, PID p, int nostop)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void SLSH_guest_epilogue(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void SLSH_guest_activate(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void SLSH_guest_insert(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void SLSH_guest_extract(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void SLSH_guest_endcycle(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void SLSH_guest_end(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void SLSH_guest_sleep(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void SLSH_guest_delay(LEVEL l, PID p, TIME usdelay)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-/******* Registration functions *******/
-
-/*+ Registration function: */
-void SLSH_register_level()
-{
- LEVEL l; /* the level that we register */
- SLSH_level_des *lev; /* for readableness only */
- PID i; /* a counter */
-
- kern_printf("SLSH_register_level\n");
-
- /* request an entry in the level_table */
- l = level_alloc_descriptor();
-
- /* alloc the space needed for the EDF_level_des */
- lev = (SLSH_level_des *)kern_alloc(sizeof(SLSH_level_des));
-
- /* update the level_table with the new entry */
- level_table[l] = (level_des *)lev;
-
- /* fill the standard descriptor */
- strncpy(lev->l.level_name, SLSH_LEVELNAME, MAX_LEVELNAME);
-
- lev->l.level_code = SLSH_LEVEL_CODE;
- lev->l.level_version = SLSH_LEVEL_VERSION;
-
- lev->l.level_accept_task_model = SLSH_level_accept_task_model;
- lev->l.level_accept_guest_model = SLSH_level_accept_guest_model;
- lev->l.level_status = SLSH_level_status;
- lev->l.level_scheduler = SLSH_level_scheduler;
-
- lev->l.level_guarantee = SLSH_level_guarantee;
-
- lev->l.task_create = SLSH_task_create;
- lev->l.task_detach = SLSH_task_detach;
- lev->l.task_eligible = SLSH_task_eligible;
- lev->l.task_dispatch = SLSH_task_dispatch;
- lev->l.task_epilogue = SLSH_task_epilogue;
- lev->l.task_activate = SLSH_task_activate;
- lev->l.task_insert = SLSH_task_insert;
- lev->l.task_extract = SLSH_task_extract;
- lev->l.task_endcycle = SLSH_task_endcycle;
- lev->l.task_end = SLSH_task_end;
- lev->l.task_sleep = SLSH_task_sleep;
- lev->l.task_delay = SLSH_task_delay;
-
- lev->l.guest_create = SLSH_guest_create;
- lev->l.guest_detach = SLSH_guest_detach;
- lev->l.guest_dispatch = SLSH_guest_dispatch;
- lev->l.guest_epilogue = SLSH_guest_epilogue;
- lev->l.guest_activate = SLSH_guest_activate;
- lev->l.guest_insert = SLSH_guest_insert;
- lev->l.guest_extract = SLSH_guest_extract;
- lev->l.guest_endcycle = SLSH_guest_endcycle;
- lev->l.guest_end = SLSH_guest_end;
- lev->l.guest_sleep = SLSH_guest_sleep;
- lev->l.guest_delay = SLSH_guest_delay;
-
- /* fill the SLSH descriptor part */
- for(i = 0; i < MAX_PROC; i++)
- {
- lev->tasks[i].est = -1;
- lev->tasks[i].dabs = 0;
- lev->tasks[i].interval = -1;
- }
-
- for(i = 0; i < MAX_INTERVALS; i++)
- {
- lev->intervals[i].start = -1;
- lev->intervals[i].end = -1;
- lev->intervals[i].length = 0;
- lev->intervals[i].maxt = 0;
- lev->intervals[i].sc = 0;
- }
-
- lev->current = 0;
- lev->last = NIL;
- lev->slot = 0;
- lev->slot_length = 0;
- lev->slot_event = -1;
-}
-
-
-void SLSH_set_interval(LEVEL l, int start, int end, int maxt)
-{
- SLSH_level_des* lev = (SLSH_level_des *)(level_table[l]);
- static int i = -1;
-
- i++;
- lev->intervals[i].start = start;
- lev->intervals[i].end = end;
- lev->intervals[i].length = end - start;
- lev->intervals[i].maxt = maxt;
- lev->intervals[i].sc = lev->intervals[i].length - maxt;
-
- lev->last = i;
-}
-
-void SLSH_set_variables(LEVEL l, TIME length)
-{
- SLSH_level_des* lev = (SLSH_level_des *)(level_table[l]);
-
- lev->slot_length = length;
-}
Index: start/slsh/readme.txt
===================================================================
--- start/slsh/readme.txt (revision 1087)
+++ start/slsh/readme.txt (nonexistent)
@@ -1,6 +0,0 @@
-This Example has been made by Tomas Lenvall.
-
-There is not a lot of documentation available, so if you have problems please
-send an e-mail to Tomas ( mailto:tlv@mdh.se )
-
-Paolo
Index: start/slsh/makefile
===================================================================
--- start/slsh/makefile (revision 1087)
+++ start/slsh/makefile (nonexistent)
@@ -1,16 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-
-include $(BASE)/config/config.mk
-
-PROGS=slshtest
-
-include $(BASE)/config/example.mk
-
-slshtest:
- make -f $(SUBMAKE) APP=slshtest INIT= OTHEROBJS="slshinit.o slsh.o" OTHERINCL=
Index: start/slsh/slshinit.c
===================================================================
--- start/slsh/slshinit.c (revision 1087)
+++ start/slsh/slshinit.c (nonexistent)
@@ -1,117 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: slshinit.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-
- System initialization file
-
- The tick is set to TICK ms.
-
- This file contains the 2 functions needed to initialize the system.
-
- These functions register the following levels:
-
- a Slot Shifting level
- a Dummy level
-
- It can accept these task models:
-
- STATIC_TASK_MODEL
- HARD_TASK_MODEL(aperiodic)
- SOFT_TASK_MODEL
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-
-#include "kernel/kern.h"
-#include "slsh.h"
-#include "modules/rr2.h"
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "drivers/keyb.h"
-#include "modules/dummy.h"
-
-/*+ sysyem tick in us +*/
-#define TICK 300
-
-/* define RR tick in us*/
-#define RRTICK 10000
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- SLSH_register_level();
- RR2_register_level(RRTICK, RR2_MAIN_YES, mb);
- dummy_register_level();
-
- SEM_register_module();
-
- return TICK;
-}
-
-NRT_TASK_MODEL nrt;
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- KEYB_PARMS k = BASE_KEYB;
-
- nrt_task_default_model(nrt);
- keyb_def_task(k,&nrt);
-
-
-
- HARTPORT_init();
-
- KEYB_init(NULL);
-
- __call_main__(mb);
-
- return 0;
-}
-
-
Index: start/slsh/slsh.h
===================================================================
--- start/slsh/slsh.h (revision 1087)
+++ start/slsh/slsh.h (nonexistent)
@@ -1,205 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-
-/**
- ------------
- CVS : $Id: slsh.h,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
- Author: Tomas Lennvall, Date: Feb 2000.
-
- This file contains the scheduling module for Slot shifting.
-
- Title:
- Slot Shifting
-
- Task Models Accepted:
- STATIC_TASK_MODEL - Periodic Hard tasks that are scheduled by
- an off-line scheduler, so that all guarantees regarding precedence, mutex
- deadline violation is taken care of. The tasks are in an executione schedule,
- that is the order in when they become ready. They have the following fields:
- est (earliest start time), wcet and absolute deadline.
-
- HARD_TASK_MODEL - Hard Tasks (Hard aperiodic requests)
- wcet field and drel field must be != 0. They are used to set the wcet
- and deadline of the tasks.
- periodicity field must be APERIODIC
- mit field is ignored.
-
- SOFT_TASK_MODEL - Soft Tasks (Unspecified tasks)
- wcet field must be != 0. periodicity filed must be APERIODIC
- period and met filed is ignored.
-
- Guest Models Accepted:
- NONE - Slot shifting handles all tasks by itself (at this moment).
-
- Description:
- This module schedules the offline scheduled tasks according to the slot-
- shifting paradigm, dividing time into slots of a fixed length and assigning
- tasks to execute in those slots. Slot-shifting also keeps track of the free
- bandwidth in the schedule by using disjoint intervals and sc (spare capacity).
- Each interval has a sc nr that represents the free bandwidth in that interval,
- the sc can be used by hard aperiodic tasks, static tasks from later interval or
- soft aperiodic tasks. Hard aperiodic tasks are guaranteed an incorporated in
- the schedule by reduction of sc before they execute. No guarantee is
- performed on the soft aperiodic tasks, they are run when no other task wants
- to execute and sc is available.
-
- Description:
- This module implements the Slot shifting algorithm, by Gerhard Fohler. Slot shifting
- schedules off-line scheduled tasks and also handles hard aperiodic requests by the
- guarantee alorithm. Slot shifting can also handle soft aperiodic tasks,
- called unspecified. That is tasks without a deadline.
-
- Exceptions raised:
- These exceptions are pclass-dependent...
- XDEADLINE_MISS
- If a task miss his deadline, the exception is raised.
-
- XWCET_VIOLATION
- If a task doesn't end the current cycle before if consume the wcet,
- an exception is raised, and the task is put in the EDF_WCET_VIOLATED
- state. To reactivate it, use EDF_task_activate via task_activate or
- manage directly the EDF data structure. Note that the exception is not
- handled properly, an XDEADLINE_MISS exeeption will also be raised at
- the period end...
-
- Restrictions & special features:
- - This level doesn't manage the main task.
- - At init time we can choose if the level have to activate
- . the wcet check
- (If a task require more time than declared, it is stopped and put in
- the state EDF_WCET_VIOLATED; a XWCET_VIOLATION exception is raised)
- . the task guarantee algorithm
- (when all task are created the system will check that the task_set
- will not use more than the available bandwidth)
- - The level use the priority and timespec_priority fields.
- - A function to return the used bandwidth of a level is provided.
- - The guest tasks don't provide the guest_endcycle function
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-#ifndef __SLSH_H__
-#define __SLSH_H__
-
-#include <ll/ll.h>
-#include <kernel/config.h>
-#include <sys/types.h>
-#include <kernel/types.h>
-#include <modules/codes.h>
-
-#define STATIC_PCLASS 0x0500
-
-#define SLSH_LEVELNAME "Slot Shifting"
-#define SLSH_LEVEL_CODE 5
-#define SLSH_LEVEL_VERSION 1
-
-
-
-/* -----------------------------------------------------------------------
- STATIC_TASK_MODEL: offline scheduled Tasks
- ----------------------------------------------------------------------- */
-/* Offline-scheduled tasks are hard periodic tasks that have been
- scheduled before runtime. All guarantees are made by the off-
- line scheduler so the tasks are already guaranteed.
-*/
-
-typedef struct {
- TASK_MODEL t;
- TIME est;
- TIME wcet;
- TIME dabs;
- int interval; /* used in slot shifting */
-} STATIC_TASK_MODEL;
-
-#define static_task_default_model(m) \
- task_default_model((m).t,STATIC_PCLASS), \
- (m).est = -1, \
- (m).dabs = 0, \
- (m).wcet = 0, \
- (m).interval = -1;
-#define static_task_def_level(m,l) task_def_level((m).t,l)
-#define static_task_def_arg(m,a) task_def_arg((m).t,a)
-#define static_task_def_stack(m,s) task_def_stack((m).t,s)
-#define static_task_def_group(m,g) task_def_group((m).t,g)
-#define static_task_def_usemath(m) task_def_usemath((m).t)
-#define static_task_def_system(m) task_def_system((m).t)
-#define static_task_def_nokill(m) task_def_nokill((m).t)
-#define static_task_def_ctrl_jet(m) task_def_ctrl_jet((m).t)
-#define static_task_def_est(m,p) (m).est = (p)
-#define static_task_def_dabs(m,d) (m).dabs = (d)
-#define static_task_def_wcet(m,w) (m).wcet = (w)
-#define static_task_def_interval(m,i) (m).interval = (i)
-#define static_task_def_trace(m) task_def_trace((m).t)
-#define static_task_def_notrace(m) task_def_notrace((m).t)
-
-
-
-
-/*#define min(a, b) ((a) < (b) ? (a) : (b))*/
-
-#define TIME2TIMESPEC(T, TS) \
-( \
- ((TS).tv_sec = ((T)/1000000)), \
- ((TS).tv_nsec = (((T)%1000000) * 1000)), \
- (TS) \
-)
-
-/* define the interval struct */
-typedef struct {
- int start; /* start of interval */
- int end; /* end of interval */
- int length; /* Length of interval */
- int maxt; /* maximum execution time in interval */
- int sc; /* spare capacity in interval */
-} SLSH_interval;
-
-/*+ Registration function: */
-void SLSH_register_level();
-
-void SLSH_set_interval(LEVEL l, int start, int end, int maxt);
-void SLSH_set_variables(LEVEL l, TIME length);
-
-#endif
-
Index: start/eli/eli.c
===================================================================
--- start/eli/eli.c (revision 1087)
+++ start/eli/eli.c (nonexistent)
@@ -1,782 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: eli.c,v 1.1.1.1 2002-09-02 09:37:45 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:45 $
- ------------
-
- This file is similar to the configuration of Hartik 3.3.1
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai and ALLEN-DESTRO
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "eli.h"
-
-
-//########################################
-// Definizione variabili globali
-//########################################
-char tastiera;
-long double Forza_x,Forza_y,Velocita_x,Velocita_y,Acc_x,Acc_y,Pos_x,Pos_y;
-long double Pos_pe_y[5];
-long double Pos_pe_x[5];
-long double T1=0;
-long double r;
-int n_peso=0;
-int peso_agganciato[5]={0,0,0,0,0};
-int pre_peso[5]={0,0,0,0,0};
-int libero_peso[5]={0,0,0,0,0};
-PID pid_peso[5];
-PID pid_ruspa[5];
-int x_r=200;
-int n_ruspa=5;
-int indietro;
-int eli_occ=0;
-int kill_p;
-
-//PID pid_r0,pid_r1,pid_r2,pid_r3,pid_r4;
-PID pid_kill_p,pid_pulisci_p,pid_kill_e,pid_pulisci_e;
-
-
-// Definizione del semaforo per l'utilizzo della modalita' grafica
-sem_t mutex;
-sem_t pu;
-
-
-
-
-//#######################################################################
-//############### DEFINIZIONE TASK ######################################
-//#######################################################################
-
-TASK kill_task(int i)
-{ int x,y,dim;
- while (1)
- {
-
- if(i==1)
- {
- x=Pos_pe_x[kill_p];
- y=Pos_pe_y[kill_p];
- dim=25;
- }
- else
- {
- x=Pos_x;
- y=Pos_y;
- dim=35;
- }
-
- PULISCI(x,y,dim);
- ESPLOSIONE(x,y);
-
- sem_wait(&pu);
-
- if(i==1) task_activate(pid_pulisci_p);
- else task_activate(pid_pulisci_e);
-
- task_endcycle();
-
- }
-
-
-}
-
-TASK pulisci(int i)
-{ int x,y,dim;
- while (1)
- {
-
- if(i==1)
- {
- x=Pos_pe_x[kill_p];
- y=Pos_pe_y[kill_p];
- dim=25;
- }
- else
- {
- x=Pos_x;
- y=Pos_y;
- dim=35;
- }
-
-
- task_delay(3000);
- PULISCI(x,y,dim);
-
- sem_post(&pu);
-
- task_endcycle();
- }
-}
-
-
-
-
-TASK elicottero(int i)
-{ long double x_old,x_new,y_old,y_new;
- TIME us_old,us_new;
- long double delta_T;
- long double Fx,Fy,Ax,Ay,Vx,Vy,m_el;
- int Destra_old,Destra_new;
- // int uccidi,colore;
- // int prova;
-
- m_el=1;
- Vx=0;Vy=0;
- Ax=0;Ay=0;
- Fx=0;Fy=0-m_el*G; // Fy=0;
- x_old=150;
- y_old=150;
- Destra_old=1;
- Destra_new=1;
-
- us_old=sys_gettime(NULL);
-
- while (1)
- {
-
- // prova=2;
-
-
- us_new=sys_gettime(NULL);
- delta_T=(us_new-us_old)/100000;
- // if(delta_T<0.9) prova=1;
- // if(delta_T<0) prova=4;
- // if(delta_T>1.1) prova=3;
-
-
- delta_T=1;
- Ax=(Fx-(r*Vx))/m_el;
- Ay=(Fy-(r*Vy)+m_el*G+T1)/m_el;
- x_new=x_old+Vx*delta_T+0.5*Ax*delta_T*delta_T;
- y_new=y_old+Vy*delta_T+0.5*Ay*delta_T*delta_T;
-
- // if(prova==1) {x_new=300; y_new=150;}
- // if(prova==3) {x_new=150; y_new=300;}
- // if(prova==2) {x_new=300; y_new=300;}
- // if(prova==4) {x_new=400; y_new=400;}
-
- Vx=Vx+Ax*delta_T;
- Vy=Vy+Ay*delta_T;
- if ((Vx>0)|| ((Vx==0) && (Destra_old==1))) Destra_new=1;
- else Destra_new=0;
-
- if ( ((y_new>=(Y0max-DIM_EL/2-2)) || ( (y_old<=400-DIM_EL/2-2) && (y_new>=400-DIM_EL/2-2) && (x_new>=X0min+151) && (x_new<=X0min+280) )) )
- {
- if ((x_new>=X0min+151) && (x_new<=X0min+280)) y_new=400-DIM_EL/2-2;
- else y_new=Y0max-DIM_EL/2-2;
- Vy=0;
- Vx=0;
- x_new=x_old;
- Ay=0;
- Ax=0;
- }
-
-
-
-
- sem_wait(&mutex);
-
- /*
- uccidi=0;
-
- colore=grx_getpixel(x_new-2*DIM_EL,y_new-DIM_EL);
- if ( (colore!=COL_SFONDO) && (colore!=YELLOW) && (colore!=RED)) uccidi=1;
- colore=grx_getpixel(x_new+2*DIM_EL,y_new-DIM_EL);
- if ( (colore!=COL_SFONDO) && (colore!=YELLOW) && (colore!=RED)) uccidi=1;
- colore=grx_getpixel(x_new-2*DIM_EL,y_new+DIM_EL/2);
- if ( (colore!=COL_SFONDO) && (colore!=YELLOW) && (colore!=RED)) uccidi=1;
- colore=grx_getpixel(x_new+2*DIM_EL,y_new+DIM_EL/2);
- if ( (colore!=COL_SFONDO) && (colore!=YELLOW) && (colore!=RED)) uccidi=1;
- colore=grx_getpixel(x_new,y_new);
- if ( (colore!=COL_SFONDO) && (colore!=YELLOW) && (colore!=RED)) uccidi=1;
- */
-
- if ((x_old>100) && (y_old>100) && (x_old<X0max) )
- {
- if (Destra_old==0) {ELICOTTERO_S(x_old,y_old,DIM_EL,COL_SFONDO,COL_SFONDO);}
- else {ELICOTTERO_D(x_old,y_old,DIM_EL,COL_SFONDO,COL_SFONDO);}
- }
-
- if ((x_new>100) && (y_new>100) && (x_new<X0max) )
- {
- /*
- if ( uccidi==1)
- {
- // grx_box(10,10,100,100,RED);
- // task_activate(pid_kill_e);
- // sem_post(&mutex);
- // eli_occ=0;
- sem_post(&mutex);
- task_abort();
- }
- */
-
-
- if (Destra_new==0) {ELICOTTERO_S(x_new,y_new,DIM_EL,COL_EL,COL_SFONDO);}
- else {ELICOTTERO_D(x_new,y_new,DIM_EL,COL_EL,COL_SFONDO);}
- }
- sem_post(&mutex);
-
- if (tastiera=='c') Fx=Fx+0.25;
- if (tastiera=='z') Fx=Fx-0.25;
- if (tastiera=='x') Fy=Fy+0.25;
- if (tastiera=='s') Fy=Fy-0.25;
-
- if (Fx>2) Fx=2;
- if (Fx<-2) Fx=-2;
- if (Fy>0) Fy=0;
- if (Fy<-17.5) Fy=-17.5;
-
- Forza_x=Fx;
- Forza_y=Fy;
- Acc_x=Ax;
- Acc_y=Ay;
- Velocita_x=Vx;
- Velocita_y=Vy;
- Pos_x=x_new;
- Pos_y=y_new;
-
-
- if ( (tastiera=='z') || (tastiera=='x') || (tastiera=='c') || (tastiera=='s') )
- tastiera='q';
-
-
- us_old=us_new;
- x_old=x_new;
- y_old=y_new;
- Destra_old=Destra_new;
-
- task_endcycle();
- }
-}
-
-
-
-TASK peso(int i)
-{
- long double delta_T;
- long double Ay,Vy;
- long double x_new,x_old,y_old,y_new;
- int scelta=0;
- int rit,colore,uccidi;
- double m_peso[5]={0.5,0.4,0.3,0.1,0.6};
- int delta_y1,delta_y2;
-
-
- // PID pid;
- // MODEL m = BASE_MODEL;
-
- Vy=0;
- Ay=0;
-
- x_old=700-DIM_PESO-1;
- y_old=Y0max-DIM_PESO*2-1;
- delta_T=1;
- x_new=700-DIM_PESO-1;
-
- libero_peso[i]=0;
-
- while (1 )
- {
- uccidi=0;
-
- if (scelta==0 )
- {
-
- y_new=y_old;
- if (x_new+DIM_PESO==x_r-1) x_new=x_new-1;
- else x_new=x_new;
- if (indietro==1) {scelta=1; libero_peso[i]=1;}
- }
-
- if (scelta==1 )
- {
- y_new=y_old;
- x_new=x_old;
- if (peso_agganciato[i]==1) scelta=2;
- }
- if (scelta==2)
- {
- eli_occ=1;
- Ay=(m_peso[i]*G-(r*Vy)-T1)/m_peso[i];
- if(peso_agganciato[i]==1) x_new=Pos_x;
- else x_new=x_old;
- y_new=y_old+Vy*delta_T+0.5*Ay*delta_T*delta_T;
- Vy=Vy+Ay*delta_T;
-
- delta_y1=Y0max-y_new;
- delta_y2=400-y_new;
-
- if ( (y_new>=(Y0max-2*DIM_PESO-1)) || ( (y_old<400-2*DIM_PESO-1) && (y_new>=400-2*DIM_PESO-1) && (x_new>=X0min+151-DIM_PESO) && (x_new<=X0min+280+DIM_PESO) ) )
- {
- if ((x_new>=X0min+151-DIM_PESO) && (x_new<=X0min+280+DIM_PESO))
- {
- if (delta_y2<6) uccidi=1;
- y_new=400-2*DIM_PESO-2;
- }
- else {
- if (delta_y1<6) uccidi=1;
- y_new=Y0max-2*DIM_PESO-2;
- }
- Vy=0;
- if(peso_agganciato[i]==0) {scelta=3; rit=0;}
- }
- }
- if (scelta==3)
- {
- x_new=x_new;
- y_new=y_new;
- eli_occ=0;
- if (y_new==400-2*DIM_PESO-2) rit++;
-
-
-
- if (rit==100) {
- peso_agganciato[i]=0;
- pre_peso[i]=0;
- sem_wait(&mutex);
- PESO(x_old,y_old,DIM_PESO,COL_SFONDO);
- sem_post(&mutex);
-
- return NULL;
- }
-
- if(peso_agganciato[i]==1) scelta=2;
- }
-
- sem_wait(&mutex);
-
-
- colore=grx_getpixel(x_new-DIM_PESO,y_new);
- if ( (colore!=COL_SFONDO) && (colore!=DELTA_COL+i*2) && (colore!=RED)) uccidi=1;
-
- colore=grx_getpixel(x_new+DIM_PESO,y_new);
- if ( (colore!=COL_SFONDO) && (colore!=DELTA_COL+i*2) && (colore!=RED)) uccidi=1;
-
- colore=grx_getpixel(x_new-DIM_PESO,y_new+2*DIM_PESO);
- if ( (colore!=COL_SFONDO) && (colore!=DELTA_COL+i*2) && (colore!=RED)) uccidi=1;
-
- colore=grx_getpixel(x_new+DIM_PESO,y_new+2*DIM_PESO);
- if ( (colore!=COL_SFONDO) && (colore!=DELTA_COL+i*2) && (colore!=RED)) uccidi=1;
-
- colore=grx_getpixel(x_new,y_new+DIM_PESO);
- if ( (colore!=COL_SFONDO) && (colore!=DELTA_COL+i*2) && (colore!=RED)) uccidi=1;
-
-
-
- if ((x_old>100) && (y_old>100) && (x_old<X0max) )
- {
- PESO(x_old,y_old,DIM_PESO,COL_SFONDO);
- }
-
- y_old=y_new;
- x_old=x_new;
- Pos_pe_y[i]=y_new;
- Pos_pe_x[i]=x_new;
-
-
- if ((x_new>100) && (y_new>100) && (x_new<X0max) )
- {
- if ( uccidi==1)
- {
- kill_p=i;
- task_activate(pid_kill_p);
- sem_post(&mutex);
- eli_occ=0;
- pre_peso[i]=0;
- peso_agganciato[i]=0;
- return NULL;
- }
-
- PESO(x_new,y_new,DIM_PESO,DELTA_COL+i*2);
- }
- sem_post(&mutex);
-
-
- task_endcycle();
- }
-
-
-}
-
-TASK ruspa(int i)
-{
- int x,y,ii;
- int end_peso[5]={370,420,470,520,570};
-
- PID pid;
- HARD_TASK_MODEL m_hard;
-
- pre_peso[i]=1;
-
- hard_task_default_model(m_hard);
- hard_task_def_wcet(m_hard,1); // wcet ignored!!!
- hard_task_def_mit(m_hard,PER_DISEGNA);
- hard_task_def_usemath(m_hard);
- hard_task_def_arg(m_hard,(void *)i);
- pid=task_create("peso2",peso,&m_hard,NULL);
- pid_peso[i]=pid;
- task_activate(pid_peso[i]);
-
-
- x=720;
- y=Y0max;
-
- indietro=0;
- while (x!=end_peso[i]+DIM_PESO)
- {
- sem_wait(&mutex);
- RUSPA_S(x+1,y,COL_SFONDO,COL_SFONDO);
- RUSPA_S(x,y,YELLOW-1,LIGHTBLUE);
- sem_post(&mutex);
- x_r=x;
- x--;
- task_endcycle();
- }
- sem_wait(&mutex);
- RUSPA_S(x+1,y,COL_SFONDO,COL_SFONDO);
- sem_post(&mutex);
- indietro=1;
- while (x!=730 )
- {
- sem_wait(&mutex);
- RUSPA_D(x-1+40,y,COL_SFONDO,COL_SFONDO);
- RUSPA_D(x+40,y,YELLOW-1,LIGHTBLUE);
- sem_post(&mutex);
- x++;
- task_endcycle();
- }
-
- ii=i+1;
-
- while(ii>4)
- {
- n_ruspa=5;
- if(pre_peso[4]==0){
- ii=4;
- if(pre_peso[3]==0){
- ii=3;
- if(pre_peso[2]==0){
- ii=2;
- if(pre_peso[1]==0){
- ii=1;
- if(pre_peso[0]==0){
- ii=0;
- }
- }
- }
- }
- }
- task_endcycle();
-
- }
-
- hard_task_def_arg(m_hard,(void *)ii);
- pid_ruspa[ii]=task_create("ruspa",ruspa,&m_hard,NULL);
- task_activate(pid_ruspa[ii]);
- n_ruspa=ii;
-
- return NULL;
-}
-
-
-
-
-TASK molla(int i)
-{
- double k=0.05;
- double x,x_old,y1_old,y2_old;
- double T1_old; //,T2_old;
-
- x_old=Pos_x;
- y1_old=Pos_y;
- y2_old=Pos_pe_y[n_peso];
-
- while (1)
- {
-
- sem_wait(&mutex);
- if ((x_old>100-DIM_EL) && (y1_old>100-DIM_EL) && (x_old<X0max) )
- {
- MOLLA(x_old,y1_old+DIM_EL,y2_old,COL_SFONDO)
- }
- else if( (y2_old>100) && (x_old<X0max) && (x_old>100) )
- {
- MOLLA(x_old,X0min+100,y2_old,COL_SFONDO)
- }
-
- x_old=Pos_x;
- y1_old=Pos_y;
-
- if(peso_agganciato[n_peso]==0) y2_old=y1_old+20;
- else y2_old=Pos_pe_y[n_peso];
-
- if ((x_old>100) && (y1_old>100-DIM_EL) && (x_old<X0max) )
- {
- MOLLA(x_old,y1_old+DIM_EL,y2_old,RED)
- }
- else if( (y2_old>100) && (x_old<X0max) && (x_old>100))
- {
- MOLLA(x_old,X0min+100,y2_old,RED)
- }
- sem_post(&mutex);
-
- x=y2_old-y1_old;
- x=x-20;
- T1=x*k;
- T1_old=T1;
-
- task_endcycle();
-
- }
-}
-
-TASK seleziona(int i)
-{ int w,deltax,deltay,disegna;
-
- eli_occ=0;
- disegna=0;
-
- while (1)
- {
- disegna=0;
- for (w=0;w<5;w++)
- {
- deltax=Pos_pe_x[w]-Pos_x;
- deltay=Pos_pe_y[w]-Pos_y-DIM_PESO-20+DIM_EL;
- if ( (pre_peso[w]==1) && (eli_occ==0) && (deltax<4) && (deltax>-4) && (deltay<3) && (deltay>-3) )
- {
- disegna=1;
- if ( (tastiera=='p') && (libero_peso[w]==1) )
- {
- eli_occ=1;
- peso_agganciato[w]=1;
- n_peso=w;
-
- }
- }
- }
-
- if(disegna==1)
- {
- sem_wait(&mutex);
- grx_box(X0max-90,Y0min+5,X0max-5,Y0min+95,RED);
- // grx_text("Ok", X0max-40, Y0min+50, COL_TESTO, RED);
- sem_post(&mutex);
- } else
- {
- sem_wait(&mutex);
- grx_box(X0max-95,Y0min+5,X0max-5,Y0min+95,COL_SFONDO);
- sem_post(&mutex);
- }
-
- if(eli_occ==1)
- {
- sem_wait(&mutex);
- grx_box(X0max-90-100,Y0min+5,X0max-5-100,Y0min+95,GREEN);
- // grx_text("Go", X0max-35-100, Y0min+50, COL_TESTO, GREEN);
- sem_post(&mutex);
- } else
- {
- sem_wait(&mutex);
- grx_box(X0max-90-100,Y0min+5,X0max-5-100,Y0min+95,COL_SFONDO);
- sem_post(&mutex);
- }
-
-
- if (tastiera=='l') peso_agganciato[n_peso]=0;
-
- task_endcycle();
-
- }
-}
-
-
-//###############################################################
-// ##
-// Funzione di uscita dal programma ##
-// ##
-//################################################################
-void my_end(KEY_EVT* e)
-{
- //####################################
- // Sezione esecutiva della funzione ##
- //####################################
-
- grx_close();
- cprintf("Ctrl-brk pressed!\n");
- sys_end();
-} // Fine della funzionemy_end
-
-//################################################################
-// ##
-// Funzione di uscita dal programma ##
-// ##
-//################################################################
-void end()
-{
- //####################################
- // Sezione esecutiva della funzione ##
- //####################################
-
- grx_close();
-} // Fine della funzione my_end
-
-
-
-//##############################################################
-// ##
-// Main ##
-// ##
-//##############################################################
-int main()
-{
- //########################################
- // Sezione dichiarativa delle variabili ##
- //########################################
- // Identficativi di task generici
- PID pid0, pid1, pid3, pid5; //, pid2,pid4,pid6;
-
- HARD_TASK_MODEL m_hard;
- NRT_TASK_MODEL m_nrt;
-
- // Ascoltatore di eventi
- KEY_EVT emerg;
- // Contatori
- int j;
-
-
- //####################################
- // Sezione esecutiva del main ##
- //####################################
-
- set_exchandler_grx();
-
- // Inizializzazione dei parametri hartik
- sem_init(&mutex,0,1);
- sem_init(&pu,0,1);
-
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg, my_end);
- sys_atrunlevel(end, NULL, RUNLEVEL_BEFORE_EXIT);
-
- if (grx_open(800, 600, 8) < 0)
- {
- cprintf("GRX Err\n");
- sys_abort(300);
- }
- cprintf("scheda ok\n");
-
- r=0.1;
-
- /* Disposizione degli elementi grafici statici */
- sem_wait(&mutex);
- draw_static();
- sem_post(&mutex);
-
- // Attivazione dei task
- hard_task_default_model(m_hard);
- hard_task_def_wcet(m_hard,1); // wcet ignored!!!
- hard_task_def_usemath(m_hard);
-
- hard_task_def_mit(m_hard,PER_DISEGNA);
- pid0=task_create("elicottero",elicottero,&m_hard,NULL);
- task_activate(pid0);
-
- hard_task_def_mit(m_hard,PER_DISEGNA);
- pid1=task_create("indicometro",disegna_stato,&m_hard,NULL);
- task_activate(pid1);
-
- hard_task_def_mit(m_hard,PER_MOLLA);
- pid3=task_create("molla",molla,&m_hard,NULL);
- task_activate(pid3);
-
- hard_task_def_mit(m_hard,PER_DISEGNA);
- pid5=task_create("seleziona",seleziona,&m_hard,NULL);
- task_activate(pid5);
-
-
- hard_task_def_mit(m_hard,PER_DISEGNA);
- hard_task_def_arg(m_hard,0);
- pid_ruspa[0]=task_create("ruspa",ruspa,&m_hard,NULL);
- task_activate(pid_ruspa[0]);
- n_ruspa=0;
-
- nrt_task_default_model(m_nrt);
- nrt_task_def_usemath(m_nrt);
- nrt_task_def_arg(m_nrt,0);
- pid_kill_e = task_create("kill_task",kill_task, &m_nrt, NULL);
- pid_pulisci_e = task_create("pulisci",pulisci, &m_nrt, NULL);
-
- nrt_task_def_arg(m_nrt,(void *)1);
- pid_kill_p = task_create("kill_task",kill_task, &m_nrt, NULL);
- pid_pulisci_p = task_create("pulisci",pulisci, &m_nrt, NULL);
-
-
-
-
- do {
- tastiera = keyb_getch(BLOCK);
-
- } while(tastiera!=ESC);
-
- task_kill(pid5);
- task_kill(pid3);
- task_kill(pid1);
- task_kill(pid0);
-
- task_kill(pid_kill_p);
- task_kill(pid_kill_e);
-
- if (n_ruspa!=5) task_kill(pid_ruspa[n_ruspa]);
- for(j=0;j<5;j++) { if (pre_peso[j]==1) task_kill(pid_peso[j]); }
-
- grx_close();
- sys_end();
-
- return 0;
-} // Fine del main
-
-/***************************<Fine del file>*******************************/
Index: start/eli/makefile
===================================================================
--- start/eli/makefile (revision 1087)
+++ start/eli/makefile (nonexistent)
@@ -1,16 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= eli
-
-include $(BASE)/config/example.mk
-
-eli:
- make -f $(SUBMAKE) APP=eli INIT= OTHEROBJS="initfile.o draw.o" OTHERINCL=
-
Index: start/eli/draw.c
===================================================================
--- start/eli/draw.c (revision 1087)
+++ start/eli/draw.c (nonexistent)
@@ -1,519 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: draw.c,v 1.1.1.1 2002-09-02 09:37:45 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:45 $
- ------------
-
- This file is similar to the configuration of Hartik 3.3.1
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai and ALLEN-DESTRO
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "eli.h"
-
-void draw_static()
-{
- int i;
- /************************************/
- /* Sezione esecutiva della funzione */
- /************************************/
-
- grx_rect(X0min,Y0min,X0max,Y0max,COL_CORNICE);
- // grx_rect(X0min+100,Y0min+100,X0max,Y0max,COL_CORNICE);
- grx_line(X0min,Y0min+100,X0min+100,Y0min+100,COL_CORNICE);
- // grx_line(X0min,Y0min+350,X0min+100,Y0min+350,COL_CORNICE);
-
- grx_line(X0min+25,Y0min+100,X0min+25,Y0max,COL_CORNICE);
- grx_line(X0min+50,Y0min+100,X0min+50,Y0max,COL_CORNICE);
- grx_line(X0min+75,Y0min+100,X0min+75,Y0max,COL_CORNICE);
-
- grx_line(X0min,Y0min+100+127,X0min+25,Y0min+100+127,LIGHTBLUE);
- grx_line(X0min+50,Y0min+100+127,X0min+100,Y0min+100+127,LIGHTBLUE);
- grx_line(X0min+50,Y0min+100+127+250,X0min+100,Y0min+100+127+250,LIGHTBLUE);
-
-
- grx_box(X0min+101+50,400,X0min+230+50,Y0max-1,BROWN);
- for(i=1;i<6;i++){
- grx_box(X0min+101+50+38,400+35*i-10,X0min+101+50+48,400+35*i,CYAN);
- grx_box(X0min+101+50+81,400+35*i-10,X0min+101+50+91,400+35*i,CYAN);
- }
- grx_box(X0min+101+50+60,Y0max-30,X0min+101+50+70,Y0max-1,GREEN);
-
-
- grx_box(700,520,X0max-1,Y0max-1,CYAN);
-
-
-
- grx_text("Fx", X0min+5, Y0min+90, COL_TESTO, COL_SFONDO);
- grx_text("Fy", X0min+30, Y0min+90, COL_TESTO, COL_SFONDO);
- grx_text("Ax", X0min+55, Y0min+90, COL_TESTO, COL_SFONDO);
- grx_text("Ay", X0min+80, Y0min+90, COL_TESTO, COL_SFONDO);
- // grx_text("M", X0min+10, Y0min+351, COL_TESTO, COL_SFONDO);
- // grx_text("P", X0min+35, Y0min+351, COL_TESTO, COL_SFONDO);
- grx_text("Vx", X0min+55, Y0min+351, COL_TESTO, COL_SFONDO);
- grx_text("Vy", X0min+80, Y0min+351, COL_TESTO, COL_SFONDO);
-
- grx_text("S : Su", X0min+110, Y0min+15, COL_TESTO, COL_SFONDO);
- grx_text("Z : Sinistra", X0min+110, Y0min+25, COL_TESTO, COL_SFONDO);
- grx_text("X : Giu", X0min+110, Y0min+35, COL_TESTO, COL_SFONDO);
- grx_text("C : Destra", X0min+110, Y0min+45, COL_TESTO, COL_SFONDO);
- grx_text("P : aggancia Peso", X0min+110, Y0min+55, COL_TESTO, COL_SFONDO);
- grx_text("L : Libera peso", X0min+110, Y0min+65, COL_TESTO, COL_SFONDO);
- grx_text("Esc : Usita Programma", X0min+110, Y0min+75, COL_TESTO, COL_SFONDO);
-
-
-} // Fine della funzione draw_static
-
-TASK disegna_stato(int i)
-{ //double j;
-
- while (1)
- {
-
- sem_wait(&mutex);
-
- grx_rect(X0min+100,Y0min+100,X0max,Y0max,COL_CORNICE);
-
- grx_box(700,565,770,Y0max-1,LIGHTCYAN);
-
- grx_box(X0min+101+50,400,X0min+230+50,420,BROWN);
-
-
- //####################### FORZA X #############################
- if ( 0.25<=Forza_x) grx_box(7,Y0min+210,26,Y0min+220,GREEN);
- else grx_box(7,Y0min+210,26,Y0min+220,COL_SFONDO);
- if ( 0.5<=Forza_x) grx_box(7,Y0min+195,26,Y0min+205,GREEN);
- else grx_box(7,Y0min+195,26,Y0min+205,COL_SFONDO);
- if ( 0.75<=Forza_x) grx_box(7,Y0min+180,26,Y0min+190,GREEN);
- else grx_box(7,Y0min+180,26,Y0min+190,COL_SFONDO);
- if ( 1<=Forza_x) grx_box(7,Y0min+165,26,Y0min+175,GREEN);
- else grx_box(7,Y0min+165,26,Y0min+175,COL_SFONDO);
- if ( 1.25<=Forza_x) grx_box(7,Y0min+150,26,Y0min+160,GREEN);
- else grx_box(7,Y0min+150,26,Y0min+160,COL_SFONDO);
- if ( 1.50<=Forza_x) grx_box(7,Y0min+135,26,Y0min+145,YELLOW);
- else grx_box(7,Y0min+135,26,Y0min+145,COL_SFONDO);
- if ( 1.75<=Forza_x) grx_box(7,Y0min+120,26,Y0min+130,RED);
- else grx_box(7,Y0min+120,26,Y0min+130,COL_SFONDO);
- if ( 2<=Forza_x) grx_box(7,Y0min+105,26,Y0min+115,RED);
- else grx_box(7,Y0min+105,26,Y0min+115,COL_SFONDO);
- //########### ------
- if (-0.25>=Forza_x) grx_box(7,Y0min+230,26,Y0min+240,GREEN);
- else grx_box(7,Y0min+230,26,Y0min+240,COL_SFONDO);
- if ( -0.5>=Forza_x) grx_box(7,Y0min+245,26,Y0min+255,GREEN);
- else grx_box(7,Y0min+245,26,Y0min+255,COL_SFONDO);
- if ( -0.75>=Forza_x) grx_box(7,Y0min+260,26,Y0min+270,GREEN);
- else grx_box(7,Y0min+260,26,Y0min+270,COL_SFONDO);
- if ( -1>=Forza_x) grx_box(7,Y0min+275,26,Y0min+285,GREEN);
- else grx_box(7,Y0min+275,26,Y0min+285,COL_SFONDO);
- if ( -1.25>=Forza_x) grx_box(7,Y0min+290,26,Y0min+300,GREEN);
- else grx_box(7,Y0min+290,26,Y0min+300,COL_SFONDO);
- if ( -1.50>=Forza_x) grx_box(7,Y0min+305,26,Y0min+315,YELLOW);
- else grx_box(7,Y0min+305,26,Y0min+315,COL_SFONDO);
- if ( -1.75>=Forza_x) grx_box(7,Y0min+320,26,Y0min+330,RED);
- else grx_box(7,Y0min+320,26,Y0min+330,COL_SFONDO);
- if ( -2>=Forza_x) grx_box(7,Y0min+335,26,Y0min+345,RED);
- else grx_box(7,Y0min+335,26,Y0min+345,COL_SFONDO);
- //####################### FORZA Y #############################
- if ( -0.5>=Forza_y) grx_box(32,Y0min+340,51,Y0min+345,GREEN);
- else grx_box(32,Y0min+340,51,Y0min+345,COL_SFONDO);
- if ( -1>=Forza_y) grx_box(32,Y0min+333,51,Y0min+338,GREEN);
- else grx_box(32,Y0min+333,51,Y0min+338,COL_SFONDO);
- if ( -1.5>=Forza_y) grx_box(32,Y0min+326,51,Y0min+331,GREEN);
- else grx_box(32,Y0min+326,51,Y0min+331,COL_SFONDO);
- if ( -2>=Forza_y) grx_box(32,Y0min+319,51,Y0min+324,GREEN);
- else grx_box(32,Y0min+319,51,Y0min+324,COL_SFONDO);
- if ( -2.5>=Forza_y) grx_box(32,Y0min+312,51,Y0min+317,GREEN);
- else grx_box(32,Y0min+312,51,Y0min+317,COL_SFONDO);
- if ( -3>=Forza_y) grx_box(32,Y0min+305,51,Y0min+310,GREEN);
- else grx_box(32,Y0min+305,51,Y0min+310,COL_SFONDO);
- if ( -3.5>=Forza_y) grx_box(32,Y0min+298,51,Y0min+303,GREEN);
- else grx_box(32,Y0min+298,51,Y0min+303,COL_SFONDO);
- if ( -4>=Forza_y) grx_box(32,Y0min+291,51,Y0min+296,GREEN);
- else grx_box(32,Y0min+291,51,Y0min+296,COL_SFONDO);
- if ( -4.5>=Forza_y) grx_box(32,Y0min+284,51,Y0min+289,GREEN);
- else grx_box(32,Y0min+284,51,Y0min+289,COL_SFONDO);
- if ( -5>=Forza_y) grx_box(32,Y0min+277,51,Y0min+282,GREEN);
- else grx_box(32,Y0min+277,51,Y0min+282,COL_SFONDO);
- if ( -5.5>=Forza_y) grx_box(32,Y0min+270,51,Y0min+275,GREEN);
- else grx_box(32,Y0min+270,51,Y0min+275,COL_SFONDO);
- if ( -6>=Forza_y) grx_box(32,Y0min+263,51,Y0min+268,GREEN);
- else grx_box(32,Y0min+263,51,Y0min+268,COL_SFONDO);
- if ( -6.5>=Forza_y) grx_box(32,Y0min+256,51,Y0min+261,GREEN);
- else grx_box(32,Y0min+256,51,Y0min+261,COL_SFONDO);
- if ( -7>=Forza_y) grx_box(32,Y0min+249,51,Y0min+254,GREEN);
- else grx_box(32,Y0min+249,51,Y0min+254,COL_SFONDO);
- if ( -7.5>=Forza_y) grx_box(32,Y0min+242,51,Y0min+247,GREEN);
- else grx_box(32,Y0min+242,51,Y0min+247,COL_SFONDO);
- if ( -8>=Forza_y) grx_box(32,Y0min+235,51,Y0min+240,GREEN);
- else grx_box(32,Y0min+235,51,Y0min+240,COL_SFONDO);
- if ( -8.5>=Forza_y) grx_box(32,Y0min+228,51,Y0min+233,GREEN);
- else grx_box(32,Y0min+228,51,Y0min+233,COL_SFONDO);
- if ( -9>=Forza_y) grx_box(32,Y0min+221,51,Y0min+226,GREEN);
- else grx_box(32,Y0min+221,51,Y0min+226,COL_SFONDO);
- if ( -9.5>=Forza_y) grx_box(32,Y0min+214,51,Y0min+219,GREEN);
- else grx_box(32,Y0min+214,51,Y0min+219,COL_SFONDO);
- if ( -10>=Forza_y) grx_box(32,Y0min+207,51,Y0min+212,GREEN);
- else grx_box(32,Y0min+207,51,Y0min+212,COL_SFONDO);
- if ( -10.5>=Forza_y) grx_box(32,Y0min+200,51,Y0min+205,GREEN);
- else grx_box(32,Y0min+200,51,Y0min+205,COL_SFONDO);
- if ( -11>=Forza_y) grx_box(32,Y0min+193,51,Y0min+198,GREEN);
- else grx_box(32,Y0min+193,51,Y0min+198,COL_SFONDO);
- if ( -11.5>=Forza_y) grx_box(32,Y0min+186,51,Y0min+191,GREEN);
- else grx_box(32,Y0min+186,51,Y0min+191,COL_SFONDO);
- if ( -12>=Forza_y) grx_box(32,Y0min+179,51,Y0min+184,GREEN);
- else grx_box(32,Y0min+179,51,Y0min+184,COL_SFONDO);
- if ( -12.5>=Forza_y) grx_box(32,Y0min+172,51,Y0min+177,GREEN);
- else grx_box(32,Y0min+172,51,Y0min+177,COL_SFONDO);
- if ( -13>=Forza_y) grx_box(32,Y0min+165,51,Y0min+170,GREEN);
- else grx_box(32,Y0min+165,51,Y0min+170,COL_SFONDO);
- if ( -13.5>=Forza_y) grx_box(32,Y0min+158,51,Y0min+163,GREEN);
- else grx_box(32,Y0min+158,51,Y0min+163,COL_SFONDO);
- if ( -14>=Forza_y) grx_box(32,Y0min+151,51,Y0min+156,GREEN);
- else grx_box(32,Y0min+151,51,Y0min+156,COL_SFONDO);
- if ( -14.5>=Forza_y) grx_box(32,Y0min+144,51,Y0min+149,GREEN);
- else grx_box(32,Y0min+144,51,Y0min+149,COL_SFONDO);
- if ( -15>=Forza_y) grx_box(32,Y0min+137,51,Y0min+142,YELLOW);
- else grx_box(32,Y0min+137,51,Y0min+142,COL_SFONDO);
- if ( -15.5>=Forza_y) grx_box(32,Y0min+130,51,Y0min+135,YELLOW);
- else grx_box(32,Y0min+130,51,Y0min+135,COL_SFONDO);
- if ( -16>=Forza_y) grx_box(32,Y0min+123,51,Y0min+128,RED);
- else grx_box(32,Y0min+123,51,Y0min+128,COL_SFONDO);
- if ( -16.5>=Forza_y) grx_box(32,Y0min+116,51,Y0min+121,RED);
- else grx_box(32,Y0min+116,51,Y0min+121,COL_SFONDO);
- if ( -17>=Forza_y) grx_box(32,Y0min+109,51,Y0min+114,RED);
- else grx_box(32,Y0min+109,51,Y0min+114,COL_SFONDO);
- if ( -17.5>=Forza_y) grx_box(32,Y0min+102,51,Y0min+107,RED);
- else grx_box(32,Y0min+102,51,Y0min+107,COL_SFONDO);
-
- //####################### ACCELERAZIONE X #############################
- if ( -2.125>=Acc_x)grx_box(56,Y0min+340,75,Y0min+345,RED);
- else grx_box(55,Y0min+340,75,Y0min+345,COL_SFONDO);
- if ( -2>=Acc_x) grx_box(56,Y0min+333,75,Y0min+338,RED);
- else grx_box(56,Y0min+333,75,Y0min+338,COL_SFONDO);
- if ( -1.875>=Acc_x)grx_box(56,Y0min+326,75,Y0min+331,RED);
- else grx_box(56,Y0min+326,75,Y0min+331,COL_SFONDO);
- if ( -1.750>=Acc_x) grx_box(56,Y0min+319,75,Y0min+324,YELLOW);
- else grx_box(56,Y0min+319,75,Y0min+324,COL_SFONDO);
- if ( -1.625>=Acc_x)grx_box(56,Y0min+312,75,Y0min+317,YELLOW);
- else grx_box(56,Y0min+312,75,Y0min+317,COL_SFONDO);
- if ( -1.5>=Acc_x) grx_box(56,Y0min+305,75,Y0min+310,GREEN);
- else grx_box(56,Y0min+305,75,Y0min+310,COL_SFONDO);
- if ( -1.375>=Acc_x)grx_box(56,Y0min+298,75,Y0min+303,GREEN);
- else grx_box(56,Y0min+298,75,Y0min+303,COL_SFONDO);
- if ( -1.250>=Acc_x) grx_box(56,Y0min+291,75,Y0min+296,GREEN);
- else grx_box(56,Y0min+291,75,Y0min+296,COL_SFONDO);
- if ( -1.125>=Acc_x)grx_box(56,Y0min+284,75,Y0min+289,GREEN);
- else grx_box(56,Y0min+284,75,Y0min+289,COL_SFONDO);
- if ( -1>=Acc_x) grx_box(56,Y0min+277,75,Y0min+282,GREEN);
- else grx_box(56,Y0min+277,75,Y0min+282,COL_SFONDO);
- if ( -0.875>=Acc_x)grx_box(56,Y0min+270,75,Y0min+275,GREEN);
- else grx_box(56,Y0min+270,75,Y0min+275,COL_SFONDO);
- if ( -0.750>=Acc_x) grx_box(56,Y0min+263,75,Y0min+268,GREEN);
- else grx_box(56,Y0min+263,75,Y0min+268,COL_SFONDO);
- if ( -0.625>=Acc_x)grx_box(56,Y0min+256,75,Y0min+261,GREEN);
- else grx_box(56,Y0min+256,75,Y0min+261,COL_SFONDO);
- if ( -0.5>=Acc_x) grx_box(56,Y0min+249,75,Y0min+254,GREEN);
- else grx_box(56,Y0min+249,75,Y0min+254,COL_SFONDO);
- if ( -0.375>=Acc_x)grx_box(56,Y0min+242,75,Y0min+247,GREEN);
- else grx_box(56,Y0min+242,75,Y0min+247,COL_SFONDO);
- if ( -0.250>=Acc_x) grx_box(56,Y0min+235,75,Y0min+240,GREEN);
- else grx_box(56,Y0min+235,75,Y0min+240,COL_SFONDO);
- if ( -0.125>=Acc_x)grx_box(56,Y0min+228,75,Y0min+233,GREEN);
- else grx_box(56,Y0min+228,75,Y0min+233,COL_SFONDO);
- //############# ------
- if ( 0.125<=Acc_x) grx_box(56,Y0min+221,75,Y0min+226,GREEN);
- else grx_box(56,Y0min+221,75,Y0min+226,COL_SFONDO);
- if ( 0.250<=Acc_x)grx_box(56,Y0min+214,75,Y0min+219,GREEN);
- else grx_box(56,Y0min+214,75,Y0min+219,COL_SFONDO);
- if ( 0.375<=Acc_x) grx_box(56,Y0min+207,75,Y0min+212,GREEN);
- else grx_box(56,Y0min+207,75,Y0min+212,COL_SFONDO);
- if (0.5<=Acc_x)grx_box(56,Y0min+200,75,Y0min+205,GREEN);
- else grx_box(56,Y0min+200,75,Y0min+205,COL_SFONDO);
- if ( 0.625<=Acc_x) grx_box(56,Y0min+193,75,Y0min+198,GREEN);
- else grx_box(56,Y0min+193,75,Y0min+198,COL_SFONDO);
- if (0.750<=Acc_x)grx_box(56,Y0min+186,75,Y0min+191,GREEN);
- else grx_box(56,Y0min+186,75,Y0min+191,COL_SFONDO);
- if (0.875<=Acc_x) grx_box(56,Y0min+179,75,Y0min+184,GREEN);
- else grx_box(56,Y0min+179,75,Y0min+184,COL_SFONDO);
- if (1<=Acc_x)grx_box(56,Y0min+172,75,Y0min+177,GREEN);
- else grx_box(56,Y0min+172,75,Y0min+177,COL_SFONDO);
- if (1.125<=Acc_x) grx_box(56,Y0min+165,75,Y0min+170,GREEN);
- else grx_box(56,Y0min+165,75,Y0min+170,COL_SFONDO);
- if (1.250<=Acc_x)grx_box(56,Y0min+158,75,Y0min+163,GREEN);
- else grx_box(56,Y0min+158,75,Y0min+163,COL_SFONDO);
- if (1.375<=Acc_x) grx_box(56,Y0min+151,75,Y0min+156,GREEN);
- else grx_box(56,Y0min+151,75,Y0min+156,COL_SFONDO);
- if (1.5<=Acc_x)grx_box(56,Y0min+144,75,Y0min+149,GREEN);
- else grx_box(56,Y0min+144,75,Y0min+149,COL_SFONDO);
- if (1.625<=Acc_x) grx_box(56,Y0min+137,75,Y0min+142,YELLOW);
- else grx_box(56,Y0min+137,75,Y0min+142,COL_SFONDO);
- if (1.750<=Acc_x)grx_box(56,Y0min+130,75,Y0min+135,YELLOW);
- else grx_box(56,Y0min+130,75,Y0min+135,COL_SFONDO);
- if (1.875<=Acc_x) grx_box(56,Y0min+123,75,Y0min+128,RED);
- else grx_box(56,Y0min+123,75,Y0min+128,COL_SFONDO);
- if (2<=Acc_x)grx_box(56,Y0min+116,75,Y0min+121,RED);
- else grx_box(56,Y0min+116,75,Y0min+121,COL_SFONDO);
- if (2.125<=Acc_x) grx_box(56,Y0min+109,75,Y0min+114,RED);
- else grx_box(56,Y0min+109,75,Y0min+114,COL_SFONDO);
- //####################### ACCELERAZIONE Y #############################
- if ( 2.5<=Acc_y) { grx_box(81,Y0min+340,100,Y0min+345,RED);
- grx_box(81+5,Y0min+340+1,100-5,Y0min+345-1,BLUE);
- }
- else grx_box(81,Y0min+340,100,Y0min+345,COL_SFONDO);
- if ( 2.200<=Acc_y) grx_box(81,Y0min+333,100,Y0min+338,RED);
- else grx_box(81,Y0min+333,100,Y0min+338,COL_SFONDO);
- if ( 1.950<=Acc_y) grx_box(81,Y0min+326,100,Y0min+331,RED);
- else grx_box(81,Y0min+326,100,Y0min+331,COL_SFONDO);
- if ( 1.750<=Acc_y) grx_box(81,Y0min+319,100,Y0min+324,YELLOW);
- else grx_box(81,Y0min+319,100,Y0min+324,COL_SFONDO);
- if ( 1.625<=Acc_y) grx_box(81,Y0min+312,100,Y0min+317,YELLOW);
- else grx_box(81,Y0min+312,100,Y0min+317,COL_SFONDO);
- if ( 1.5<=Acc_y) grx_box(81,Y0min+305,100,Y0min+310,GREEN);
- else grx_box(81,Y0min+305,100,Y0min+310,COL_SFONDO);
- if ( 1.375<=Acc_y) grx_box(81,Y0min+298,100,Y0min+303,GREEN);
- else grx_box(81,Y0min+298,100,Y0min+303,COL_SFONDO);
- if ( 1.250<=Acc_y) grx_box(81,Y0min+291,100,Y0min+296,GREEN);
- else grx_box(81,Y0min+291,100,Y0min+296,COL_SFONDO);
- if ( 1.125<=Acc_y) grx_box(81,Y0min+284,100,Y0min+289,GREEN);
- else grx_box(81,Y0min+284,100,Y0min+289,COL_SFONDO);
- if ( 1<=Acc_y) grx_box(81,Y0min+277,100,Y0min+282,GREEN);
- else grx_box(81,Y0min+277,100,Y0min+282,COL_SFONDO);
- if ( 0.875<=Acc_y) grx_box(81,Y0min+270,100,Y0min+275,GREEN);
- else grx_box(81,Y0min+270,100,Y0min+275,COL_SFONDO);
- if ( 0.750<=Acc_y) grx_box(81,Y0min+263,100,Y0min+268,GREEN);
- else grx_box(81,Y0min+263,100,Y0min+268,COL_SFONDO);
- if ( 0.625<=Acc_y) grx_box(81,Y0min+256,100,Y0min+261,GREEN);
- else grx_box(81,Y0min+256,100,Y0min+261,COL_SFONDO);
- if ( 0.5<=Acc_y) grx_box(81,Y0min+249,100,Y0min+254,GREEN);
- else grx_box(81,Y0min+249,100,Y0min+254,COL_SFONDO);
- if ( 0.375<=Acc_y) grx_box(81,Y0min+242,100,Y0min+247,GREEN);
- else grx_box(81,Y0min+242,100,Y0min+247,COL_SFONDO);
- if ( 0.25<=Acc_y) grx_box(81,Y0min+235,100,Y0min+240,GREEN);
- else grx_box(81,Y0min+235,100,Y0min+240,COL_SFONDO);
- if ( 0.125<=Acc_y) grx_box(81,Y0min+228,100,Y0min+233,GREEN);
- else grx_box(81,Y0min+228,100,Y0min+233,COL_SFONDO);
- //############# ------
- if ( -0.125>=Acc_y) grx_box(81,Y0min+221,100,Y0min+226,GREEN);
- else grx_box(81,Y0min+221,100,Y0min+226,COL_SFONDO);
- if ( -0.250>=Acc_y) grx_box(81,Y0min+214,100,Y0min+219,GREEN);
- else grx_box(81,Y0min+214,100,Y0min+219,COL_SFONDO);
- if ( -0.375>=Acc_y) grx_box(81,Y0min+207,100,Y0min+212,GREEN);
- else grx_box(81,Y0min+207,100,Y0min+212,COL_SFONDO);
- if (-0.5>=Acc_y) grx_box(81,Y0min+200,100,Y0min+205,GREEN);
- else grx_box(81,Y0min+200,100,Y0min+205,COL_SFONDO);
- if ( -0.625>=Acc_y) grx_box(81,Y0min+193,100,Y0min+198,GREEN);
- else grx_box(81,Y0min+193,100,Y0min+198,COL_SFONDO);
- if (-0.750>=Acc_y) grx_box(81,Y0min+186,100,Y0min+191,GREEN);
- else grx_box(81,Y0min+186,100,Y0min+191,COL_SFONDO);
- if (-0.875>=Acc_y) grx_box(81,Y0min+179,100,Y0min+184,GREEN);
- else grx_box(81,Y0min+179,100,Y0min+184,COL_SFONDO);
- if (-1>=Acc_y) grx_box(81,Y0min+172,100,Y0min+177,GREEN);
- else grx_box(81,Y0min+172,100,Y0min+177,COL_SFONDO);
- if (-1.125>=Acc_y) grx_box(81,Y0min+165,100,Y0min+170,YELLOW);
- else grx_box(81,Y0min+165,100,Y0min+170,COL_SFONDO);
- if (-1.250>=Acc_y) grx_box(81,Y0min+158,100,Y0min+163,YELLOW);
- else grx_box(81,Y0min+158,100,Y0min+163,COL_SFONDO);
- if (-1.375>=Acc_y) grx_box(81,Y0min+151,100,Y0min+156,YELLOW);
- else grx_box(81,Y0min+151,100,Y0min+156,COL_SFONDO);
- if (-1.5>=Acc_y) grx_box(81,Y0min+144,100,Y0min+149,YELLOW);
- else grx_box(81,Y0min+144,100,Y0min+149,COL_SFONDO);
- if (-1.625>=Acc_y) grx_box(81,Y0min+137,100,Y0min+142,RED);
- else grx_box(81,Y0min+137,100,Y0min+142,COL_SFONDO);
- if (-1.750>=Acc_y) grx_box(81,Y0min+130,100,Y0min+135,RED);
- else grx_box(81,Y0min+130,100,Y0min+135,COL_SFONDO);
- if (-1.875>=Acc_y) grx_box(81,Y0min+123,100,Y0min+128,RED);
- else grx_box(81,Y0min+123,100,Y0min+128,COL_SFONDO);
- if (-2>=Acc_y) grx_box(81,Y0min+116,100,Y0min+121,RED);
- else grx_box(81,Y0min+116,100,Y0min+121,COL_SFONDO);
- if (-2.3>=Acc_y) grx_box(81,Y0min+109,100,Y0min+114,RED);
- else grx_box(81,Y0min+109,100,Y0min+114,COL_SFONDO);
- //####################### VELOCITA X #############################
- //if ( -21.25>=Velocita_x)grx_box(56,Y0min+340+250,75,Y0min+345+250,RED);
- //else grx_box(55,Y0min+340+250,75,Y0min+345+250,COL_SFONDO);
- if ( -20>=Velocita_x) grx_box(56,Y0min+333+250,75,Y0min+338+250,RED);
- else grx_box(56,Y0min+333+250,75,Y0min+338+250,COL_SFONDO);
- if ( -18.75>=Velocita_x)grx_box(56,Y0min+326+250,75,Y0min+331+250,RED);
- else grx_box(56,Y0min+326+250,75,Y0min+331+250,COL_SFONDO);
- if ( -17.50>=Velocita_x)grx_box(56,Y0min+319+250,75,Y0min+324+250,YELLOW);
- else grx_box(56,Y0min+319+250,75,Y0min+324+250,COL_SFONDO);
- if ( -16.25>=Velocita_x)grx_box(56,Y0min+312+250,75,Y0min+317+250,YELLOW);
- else grx_box(56,Y0min+312+250,75,Y0min+317+250,COL_SFONDO);
- if ( -15>=Velocita_x) grx_box(56,Y0min+305+250,75,Y0min+310+250,GREEN);
- else grx_box(56,Y0min+305+250,75,Y0min+310+250,COL_SFONDO);
- if ( -13.75>=Velocita_x)grx_box(56,Y0min+298+250,75,Y0min+303+250,GREEN);
- else grx_box(56,Y0min+298+250,75,Y0min+303+250,COL_SFONDO);
- if ( -12.50>=Velocita_x)grx_box(56,Y0min+291+250,75,Y0min+296+250,GREEN);
- else grx_box(56,Y0min+291+250,75,Y0min+296+250,COL_SFONDO);
- if ( -11.25>=Velocita_x)grx_box(56,Y0min+284+250,75,Y0min+289+250,GREEN);
- else grx_box(56,Y0min+284+250,75,Y0min+289+250,COL_SFONDO);
- if ( -10>=Velocita_x) grx_box(56,Y0min+277+250,75,Y0min+282+250,GREEN);
- else grx_box(56,Y0min+277+250,75,Y0min+282+250,COL_SFONDO);
- if ( -8.75>=Velocita_x)grx_box(56,Y0min+270+250,75,Y0min+275+250,GREEN);
- else grx_box(56,Y0min+270+250,75,Y0min+275+250,COL_SFONDO);
- if ( -7.50>=Velocita_x)grx_box(56,Y0min+263+250,75,Y0min+268+250,GREEN);
- else grx_box(56,Y0min+263+250,75,Y0min+268+250,COL_SFONDO);
- if ( -6.25>=Velocita_x)grx_box(56,Y0min+256+250,75,Y0min+261+250,GREEN);
- else grx_box(56,Y0min+256+250,75,Y0min+261+250,COL_SFONDO);
- if ( -5>=Velocita_x) grx_box(56,Y0min+249+250,75,Y0min+254+250,GREEN);
- else grx_box(56,Y0min+249+250,75,Y0min+254+250,COL_SFONDO);
- if ( -3.75>=Velocita_x)grx_box(56,Y0min+242+250,75,Y0min+247+250,GREEN);
- else grx_box(56,Y0min+242+250,75,Y0min+247+250,COL_SFONDO);
- if ( -2.50>=Velocita_x)grx_box(56,Y0min+235+250,75,Y0min+240+250,GREEN);
- else grx_box(56,Y0min+235+250,75,Y0min+240+250,COL_SFONDO);
- if ( -1.25>=Velocita_x)grx_box(56,Y0min+228+250,75,Y0min+233+250,GREEN);
- else grx_box(56,Y0min+228+250,75,Y0min+233+250,COL_SFONDO);
- //############# ------
- if ( 1.25<=Velocita_x) grx_box(56,Y0min+221+250,75,Y0min+226+250,GREEN);
- else grx_box(56,Y0min+221+250,75,Y0min+226+250,COL_SFONDO);
- if ( 2.50<=Velocita_x) grx_box(56,Y0min+214+250,75,Y0min+219+250,GREEN);
- else grx_box(56,Y0min+214+250,75,Y0min+219+250,COL_SFONDO);
- if ( 3.75<=Velocita_x) grx_box(56,Y0min+207+250,75,Y0min+212+250,GREEN);
- else grx_box(56,Y0min+207+250,75,Y0min+212+250,COL_SFONDO);
- if (5<=Velocita_x) grx_box(56,Y0min+200+250,75,Y0min+205+250,GREEN);
- else grx_box(56,Y0min+200+250,75,Y0min+205+250,COL_SFONDO);
- if ( 6.25<=Velocita_x) grx_box(56,Y0min+193+250,75,Y0min+198+250,GREEN);
- else grx_box(56,Y0min+193+250,75,Y0min+198+250,COL_SFONDO);
- if (7.50<=Velocita_x) grx_box(56,Y0min+186+250,75,Y0min+191+250,GREEN);
- else grx_box(56,Y0min+186+250,75,Y0min+191+250,COL_SFONDO);
- if (8.75<=Velocita_x) grx_box(56,Y0min+179+250,75,Y0min+184+250,GREEN);
- else grx_box(56,Y0min+179+250,75,Y0min+184+250,COL_SFONDO);
- if (10<=Velocita_x) grx_box(56,Y0min+172+250,75,Y0min+177+250,GREEN);
- else grx_box(56,Y0min+172+250,75,Y0min+177+250,COL_SFONDO);
- if (11.25<=Velocita_x) grx_box(56,Y0min+165+250,75,Y0min+170+250,GREEN);
- else grx_box(56,Y0min+165+250,75,Y0min+170+250,COL_SFONDO);
- if (12.50<=Velocita_x) grx_box(56,Y0min+158+250,75,Y0min+163+250,GREEN);
- else grx_box(56,Y0min+158+250,75,Y0min+163+250,COL_SFONDO);
- if (13.75<=Velocita_x) grx_box(56,Y0min+151+250,75,Y0min+156+250,GREEN);
- else grx_box(56,Y0min+151+250,75,Y0min+156+250,COL_SFONDO);
- if (15<=Velocita_x) grx_box(56,Y0min+144+250,75,Y0min+149+250,GREEN);
- else grx_box(56,Y0min+144+250,75,Y0min+149+250,COL_SFONDO);
- if (16.25<=Velocita_x) grx_box(56,Y0min+137+250,75,Y0min+142+250,YELLOW);
- else grx_box(56,Y0min+137+250,75,Y0min+142+250,COL_SFONDO);
- if (17.50<=Velocita_x) grx_box(56,Y0min+130+250,75,Y0min+135+250,YELLOW);
- else grx_box(56,Y0min+130+250,75,Y0min+135+250,COL_SFONDO);
- if (18.75<=Velocita_x) grx_box(56,Y0min+123+250,75,Y0min+128+250,RED);
- else grx_box(56,Y0min+123+250,75,Y0min+128+250,COL_SFONDO);
- if (20<=Velocita_x) grx_box(56,Y0min+116+250,75,Y0min+121+250,RED);
- else grx_box(56,Y0min+116+250,75,Y0min+121+250,COL_SFONDO);
- if (21.25<=Velocita_x) grx_box(56,Y0min+109+250,75,Y0min+114+250,RED);
- else grx_box(56,Y0min+109+250,75,Y0min+114+250,COL_SFONDO);
-
- //####################### VELOCITA Y #############################
- // if ( 160<=Velocita_y)grx_box(81,Y0min+340+250,100,Y0min+345+250,RED);
- // else grx_box(81,Y0min+340+250,100,Y0min+345+250,COL_SFONDO);
- if ( 40<=Velocita_y) grx_box(81,Y0min+333+250,100,Y0min+338+250,RED);
- else grx_box(81,Y0min+333+250,100,Y0min+338+250,COL_SFONDO);
- if ( 37.5<=Velocita_y)grx_box(81,Y0min+326+250,100,Y0min+331+250,RED);
- else grx_box(81,Y0min+326+250,100,Y0min+331+250,COL_SFONDO);
- if ( 35<=Velocita_y)grx_box(81,Y0min+319+250,100,Y0min+324+250,YELLOW);
- else grx_box(81,Y0min+319+250,100,Y0min+324+250,COL_SFONDO);
- if ( 32.5<=Velocita_y)grx_box(81,Y0min+312+250,100,Y0min+317+250,YELLOW);
- else grx_box(81,Y0min+312+250,100,Y0min+317+250,COL_SFONDO);
- if ( 30<=Velocita_y) grx_box(81,Y0min+305+250,100,Y0min+310+250,GREEN);
- else grx_box(81,Y0min+305+250,100,Y0min+310+250,COL_SFONDO);
- if ( 27.5<=Velocita_y)grx_box(81,Y0min+298+250,100,Y0min+303+250,GREEN);
- else grx_box(81,Y0min+298+250,100,Y0min+303+250,COL_SFONDO);
- if ( 25<=Velocita_y)grx_box(81,Y0min+291+250,100,Y0min+296+250,GREEN);
- else grx_box(81,Y0min+291+250,100,Y0min+296+250,COL_SFONDO);
- if ( 22.5<=Velocita_y)grx_box(81,Y0min+284+250,100,Y0min+289+250,GREEN);
- else grx_box(81,Y0min+284+250,100,Y0min+289+250,COL_SFONDO);
- if ( 20<=Velocita_y) grx_box(81,Y0min+277+250,100,Y0min+282+250,GREEN);
- else grx_box(81,Y0min+277+250,100,Y0min+282+250,COL_SFONDO);
- if ( 17.5<=Velocita_y) grx_box(81,Y0min+270+250,100,Y0min+275+250,GREEN);
- else grx_box(81,Y0min+270+250,100,Y0min+275+250,COL_SFONDO);
- if ( 15<=Velocita_y) grx_box(81,Y0min+263+250,100,Y0min+268+250,GREEN);
- else grx_box(81,Y0min+263+250,100,Y0min+268+250,COL_SFONDO);
- if ( 12.5<=Velocita_y) grx_box(81,Y0min+256+250,100,Y0min+261+250,GREEN);
- else grx_box(81,Y0min+256+250,100,Y0min+261+250,COL_SFONDO);
- if ( 10<=Velocita_y) grx_box(81,Y0min+249+250,100,Y0min+254+250,GREEN);
- else grx_box(81,Y0min+249+250,100,Y0min+254+250,COL_SFONDO);
- if ( 7.5<=Velocita_y) grx_box(81,Y0min+242+250,100,Y0min+247+250,GREEN);
- else grx_box(81,Y0min+242+250,100,Y0min+247+250,COL_SFONDO);
- if ( 5<=Velocita_y) grx_box(81,Y0min+235+250,100,Y0min+240+250,GREEN);
- else grx_box(81,Y0min+235+250,100,Y0min+240+250,COL_SFONDO);
- if ( 2.5<=Velocita_y) grx_box(81,Y0min+228+250,100,Y0min+233+250,GREEN);
- else grx_box(81,Y0min+228+250,100,Y0min+233+250,COL_SFONDO);
- //############# ------
- if (-2.5>=Velocita_y) grx_box(81,Y0min+221+250,100,Y0min+226+250,GREEN);
- else grx_box(81,Y0min+221+250,100,Y0min+226+250,COL_SFONDO);
- if (-5>=Velocita_y) grx_box(81,Y0min+214+250,100,Y0min+219+250,GREEN);
- else grx_box(81,Y0min+214+250,100,Y0min+219+250,COL_SFONDO);
- if (-7.5>=Velocita_y) grx_box(81,Y0min+207+250,100,Y0min+212+250,GREEN);
- else grx_box(81,Y0min+207+250,100,Y0min+212+250,COL_SFONDO);
- if (-10>=Velocita_y) grx_box(81,Y0min+200+250,100,Y0min+205+250,GREEN);
- else grx_box(81,Y0min+200+250,100,Y0min+205+250,COL_SFONDO);
- if (-12.5>=Velocita_y) grx_box(81,Y0min+193+250,100,Y0min+198+250,GREEN);
- else grx_box(81,Y0min+193+250,100,Y0min+198+250,COL_SFONDO);
- if (-15>=Velocita_y) grx_box(81,Y0min+186+250,100,Y0min+191+250,GREEN);
- else grx_box(81,Y0min+186+250,100,Y0min+191+250,COL_SFONDO);
- if (-17.5>=Velocita_y) grx_box(81,Y0min+179+250,100,Y0min+184+250,GREEN);
- else grx_box(81,Y0min+179+250,100,Y0min+184+250,COL_SFONDO);
- if (-20>=Velocita_y) grx_box(81,Y0min+172+250,100,Y0min+177+250,GREEN);
- else grx_box(81,Y0min+172+250,100,Y0min+177+250,COL_SFONDO);
- if (-22.5>=Velocita_y) grx_box(81,Y0min+165+250,100,Y0min+170+250,GREEN);
- else grx_box(81,Y0min+165+250,100,Y0min+170+250,COL_SFONDO);
- if (-25>=Velocita_y) grx_box(81,Y0min+158+250,100,Y0min+163+250,GREEN);
- else grx_box(81,Y0min+158+250,100,Y0min+163+250,COL_SFONDO);
- if (-27.5>=Velocita_y) grx_box(81,Y0min+151+250,100,Y0min+156+250,GREEN);
- else grx_box(81,Y0min+151+250,100,Y0min+156+250,COL_SFONDO);
- if (-30>=Velocita_y) grx_box(81,Y0min+144+250,100,Y0min+149+250,GREEN);
- else grx_box(81,Y0min+144+250,100,Y0min+149+250,COL_SFONDO);
- if (-32.5>=Velocita_y) grx_box(81,Y0min+137+250,100,Y0min+142+250,YELLOW);
- else grx_box(81,Y0min+137+250,100,Y0min+142+250,COL_SFONDO);
- if (-35>=Velocita_y) grx_box(81,Y0min+130+250,100,Y0min+135+250,YELLOW);
- else grx_box(81,Y0min+130+250,100,Y0min+135+250,COL_SFONDO);
- if (-37.5>=Velocita_y) grx_box(81,Y0min+123+250,100,Y0min+128+250,RED);
- else grx_box(81,Y0min+123+250,100,Y0min+128+250,COL_SFONDO);
- if (-40>=Velocita_y) grx_box(81,Y0min+116+250,100,Y0min+121+250,RED);
- else grx_box(81,Y0min+116+250,100,Y0min+121+250,COL_SFONDO);
- if (-42.5>=Velocita_y) grx_box(81,Y0min+109+250,100,Y0min+114+250,RED);
- else grx_box(81,Y0min+109+250,100,Y0min+114+250,COL_SFONDO);
-
-
- sem_post(&mutex);
-
-
- task_endcycle();
- }
-}
-
-
Index: start/eli/eli.h
===================================================================
--- start/eli/eli.h (revision 1087)
+++ start/eli/eli.h (nonexistent)
@@ -1,173 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: eli.h,v 1.1.1.1 2002-09-02 09:37:45 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:45 $
- ------------
-
- This file is similar to the configuration of Hartik 3.3.1
-
-**/
-
-/*
- * Copyright (C) 2000 ALLEN-DESTRO and Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-/***************************************/
-/* Corso di Informatica Industriale */
-/* Libreria con le funzioni di disegno */
-/* Creata da ALLEN-DESTRO */
-/***************************************/
-
-//########################################
-// Librerie standard del linguaggio C
-//#######################################
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-//########################################
-// Librerie Hartik
-//########################################
-#include <kernel/kern.h>
-#include <drivers/glib.h>
-#include <drivers/keyb.h>
-#include <ll/i386/cons.h>
-#include <semaphore.h>
-
-//########################################
-// Definizione delle costanti del programma
-//########################################
-
-#define PER_DISEGNA 100000
-#define PER_MOLLA 100000
-#define PER_KILL 200000
-#define G 10
-#define DIM_EL 12
-#define DIM_PESO 10
-#define COL_EL YELLOW
-
-
-#define X0min 4 // Ascissa minima della finestra grafica
-#define Y0min 4 // Ordinata minima della finestra grafica
-#define X0max 796 // Ascissa massima della finestra grafica
-#define Y0max 596 // Ordinata massima della finestra grafica
-#define TERRA 400 // Ordinata della pista di atteraggio
-#define COL_SFONDO 0 // Colore di sfondo della finestra grafica
-#define COL_TESTO 7 // Colore del testo della finestra grafica
-#define COL_CORNICE RED // Colore cornici della finestra grafica
-#define DELTA_COL 32
-
-
-// Valore di pigreco
-#define PIGRECO 3.14159
-
-#define ELICOTTERO_S(x,y,dim,col,sfo) grx_disc(x,y,dim,col); \
- grx_box(x-dim,y,x+dim,y+dim,sfo); \
- grx_line(x-dim*2,y-dim,x+dim*2,y-dim,col); \
- grx_box(x-dim,y,x+(dim*2),y+(dim/3),col); \
- grx_line(x-dim,y+dim/2,x+2*dim,y+dim/2,col); \
- grx_circle(x+dim*2,y,dim/2,col); \
- grx_box(x-dim/10,y,x+dim/10,y+dim/2,col)
-
-#define ELICOTTERO_D(x,y,dim,col,sfo) grx_disc(x,y,dim,col); \
- grx_box(x-dim,y,x+dim,y+dim,sfo); \
- grx_line(x-dim*2,y-dim,x+dim*2,y-dim,col); \
- grx_box(x-(dim*2),y,x+dim,y+(dim/3),col); \
- grx_line(x-2*dim,y+dim/2,x+dim,y+dim/2,col); \
- grx_circle(x-dim*2,y,dim/2,col); \
- grx_box(x-dim/10,y,x+dim/10,y+dim/2,col)
-
-#define PESO(x,y,dim,col) grx_box(x-dim,y,x+dim,y+2*dim,col)
-
-#define MOLLA(x,y1,y2,col) { \
- int w; \
- for (w=y1;w<y2;w=w+2) grx_line(x-3,w,x+3,w,col); \
- }
-
-#define RUSPA_S(x,y,col,colvet) grx_box(x,y-20,x+2,y,col); \
- grx_line(x,y-10,x+5,y-10,col); \
- grx_box(x+5,y-30,x+20,y-5,col); \
- grx_box(x+5,y-10,x+40,y-5,col); \
- grx_disc(x+10,y-5,5,col); \
- grx_disc(x+30,y-5,5,col); \
- grx_box(x+5,y-25,x+12,y-15,colvet)
-
-#define RUSPA_D(x,y,col,colvet) grx_box(x-2,y-20,x,y,col); \
- grx_line(x-5,y-10,x,y-10,col); \
- grx_box(x-20,y-30,x-5,y-5,col); \
- grx_box(x-40,y-10,x-5,y-5,col); \
- grx_disc(x-10,y-5,5,col); \
- grx_disc(x-30,y-5,5,col); \
- grx_box(x-12,y-25,x-5,y-15,colvet)
-
-#define ESPLOSIONE(x,y) grx_box(x-2,y-2,x+1,y+1,RED+1); \
- grx_box(x-5,y-5,x-4,y-3,RED+1); \
- grx_box(x-6,y-2,x-4,y,RED+1); \
- grx_box(x+3,y+4,x+4,y+7,RED+1); \
- grx_box(x+5,y-6,x+8,y-4,RED+1); \
- grx_box(x-10,y+10,x-8,y+8,RED+1); \
- grx_box(x-1,y-10,x+1,y-8,RED+1); \
- grx_box(x-13,y-1,x-10,y+1,RED+1); \
- grx_box(x+8,y-7,x+10,y-5,RED+1); \
- grx_box(x,y+6,x-1,y+8,RED+1); \
- grx_box(x-DIM_PESO-1,y-1,x-DIM_PESO+1,y+1,RED+1); \
- grx_box(x-DIM_PESO-1,y+2*DIM_PESO-1,x-DIM_PESO+1,y+2*DIM_PESO+1,RED+1); \
- grx_box(x+DIM_PESO-1,y-1,x+DIM_PESO+1,y+1,RED+1); \
- grx_box(x+DIM_PESO-1,y+2*DIM_PESO-1,x+DIM_PESO+1,y+2*DIM_PESO+1,RED+1); \
- grx_box(x-1,y+DIM_PESO-1,x+1,y+DIM_PESO+1,RED+1); \
- grx_box(x+4,y+DIM_PESO-1,x+6,y+DIM_PESO+1,RED+1); \
-
-//#define PULISCI(x,y) grx_box(x-14,y-11,x+DIM_PESO+2,y+2*DIM_PESO+2,COL_SFONDO)
-#define PULISCI(x,y,d) grx_disc(x,y,d,COL_SFONDO)
-
-/*********************************************************************/
-/* */
-/* Funzione per disegnare gli elementi statici */
-/* */
-/*********************************************************************/
-extern char tastiera;
-extern long double Forza_x,Forza_y,Velocita_x,Velocita_y,Acc_x,Acc_y,Massa;
-// Definizione del semaforo per l'utilizzo della modalità grafica
-extern sem_t mutex;
-
-TASK disegna_stato(int i);
-
-
-
Index: start/eli/initfile.c
===================================================================
--- start/eli/initfile.c (revision 1087)
+++ start/eli/initfile.c (nonexistent)
@@ -1,100 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: initfile.c,v 1.1.1.1 2002-09-02 09:37:45 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:45 $
- ------------
-
- This file is similar to the configuration of Hartik 3.3.1
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-#include "modules/rr.h"
-#include "modules/dummy.h"
-
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "modules/cabs.h"
-
-#include "drivers/keyb.h"
-
-
-/*+ sysyem tick in us +*/
-#define TICK 1000
-
-/*+ RR tick in us +*/
-#define RRTICK 10000
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- EDF_register_level(0);
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- CBS_register_level(CBS_ENABLE_ALL, 0);
- dummy_register_level();
-
- SEM_register_module();
-
- CABS_register_module();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- HARTPORT_init();
-
- KEYB_init(NULL);
-
- __call_main__(mb);
-
- return (void *)0;
-}
-
Index: start/mpeg2/idct.c
===================================================================
--- start/mpeg2/idct.c (revision 1087)
+++ start/mpeg2/idct.c (nonexistent)
@@ -1,211 +0,0 @@
-/* idct.c, inverse fast discrete cosine transform */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-/**********************************************************/
-/* inverse two dimensional DCT, Chen-Wang algorithm */
-/* (cf. IEEE ASSP-32, pp. 803-816, Aug. 1984) */
-/* 32-bit integer arithmetic (8 bit coefficients) */
-/* 11 mults, 29 adds per DCT */
-/* sE, 18.8.91 */
-/**********************************************************/
-/* coefficients extended to 12 bit for IEEE1180-1990 */
-/* compliance sE, 2.1.94 */
-/**********************************************************/
-
-/* this code assumes >> to be a two's-complement arithmetic */
-/* right shift: (-2)>>1 == -1 , (-3)>>1 == -2 */
-
-#include "config.h"
-
-#define W1 2841 /* 2048*sqrt(2)*cos(1*pi/16) */
-#define W2 2676 /* 2048*sqrt(2)*cos(2*pi/16) */
-#define W3 2408 /* 2048*sqrt(2)*cos(3*pi/16) */
-#define W5 1609 /* 2048*sqrt(2)*cos(5*pi/16) */
-#define W6 1108 /* 2048*sqrt(2)*cos(6*pi/16) */
-#define W7 565 /* 2048*sqrt(2)*cos(7*pi/16) */
-
-/* global declarations */
-void Initialize_Fast_IDCT _ANSI_ARGS_((void));
-void Fast_IDCT _ANSI_ARGS_((short *block));
-
-/* private data */
-static short iclip[1024]; /* clipping table */
-static short *iclp;
-
-/* private prototypes */
-static void idctrow _ANSI_ARGS_((short *blk));
-static void idctcol _ANSI_ARGS_((short *blk));
-
-/* row (horizontal) IDCT
- *
- * 7 pi 1
- * dst[k] = sum c[l] * src[l] * cos( -- * ( k + - ) * l )
- * l=0 8 2
- *
- * where: c[0] = 128
- * c[1..7] = 128*sqrt(2)
- */
-
-static void idctrow(blk)
-short *blk;
-{
- int x0, x1, x2, x3, x4, x5, x6, x7, x8;
-
- /* shortcut */
- if (!((x1 = blk[4]<<11) | (x2 = blk[6]) | (x3 = blk[2]) |
- (x4 = blk[1]) | (x5 = blk[7]) | (x6 = blk[5]) | (x7 = blk[3])))
- {
- blk[0]=blk[1]=blk[2]=blk[3]=blk[4]=blk[5]=blk[6]=blk[7]=blk[0]<<3;
- return;
- }
-
- x0 = (blk[0]<<11) + 128; /* for proper rounding in the fourth stage */
-
- /* first stage */
- x8 = W7*(x4+x5);
- x4 = x8 + (W1-W7)*x4;
- x5 = x8 - (W1+W7)*x5;
- x8 = W3*(x6+x7);
- x6 = x8 - (W3-W5)*x6;
- x7 = x8 - (W3+W5)*x7;
-
- /* second stage */
- x8 = x0 + x1;
- x0 -= x1;
- x1 = W6*(x3+x2);
- x2 = x1 - (W2+W6)*x2;
- x3 = x1 + (W2-W6)*x3;
- x1 = x4 + x6;
- x4 -= x6;
- x6 = x5 + x7;
- x5 -= x7;
-
- /* third stage */
- x7 = x8 + x3;
- x8 -= x3;
- x3 = x0 + x2;
- x0 -= x2;
- x2 = (181*(x4+x5)+128)>>8;
- x4 = (181*(x4-x5)+128)>>8;
-
- /* fourth stage */
- blk[0] = (x7+x1)>>8;
- blk[1] = (x3+x2)>>8;
- blk[2] = (x0+x4)>>8;
- blk[3] = (x8+x6)>>8;
- blk[4] = (x8-x6)>>8;
- blk[5] = (x0-x4)>>8;
- blk[6] = (x3-x2)>>8;
- blk[7] = (x7-x1)>>8;
-}
-
-/* column (vertical) IDCT
- *
- * 7 pi 1
- * dst[8*k] = sum c[l] * src[8*l] * cos( -- * ( k + - ) * l )
- * l=0 8 2
- *
- * where: c[0] = 1/1024
- * c[1..7] = (1/1024)*sqrt(2)
- */
-static void idctcol(blk)
-short *blk;
-{
- int x0, x1, x2, x3, x4, x5, x6, x7, x8;
-
- /* shortcut */
- if (!((x1 = (blk[8*4]<<8)) | (x2 = blk[8*6]) | (x3 = blk[8*2]) |
- (x4 = blk[8*1]) | (x5 = blk[8*7]) | (x6 = blk[8*5]) | (x7 = blk[8*3])))
- {
- blk[8*0]=blk[8*1]=blk[8*2]=blk[8*3]=blk[8*4]=blk[8*5]=blk[8*6]=blk[8*7]=
- iclp[(blk[8*0]+32)>>6];
- return;
- }
-
- x0 = (blk[8*0]<<8) + 8192;
-
- /* first stage */
- x8 = W7*(x4+x5) + 4;
- x4 = (x8+(W1-W7)*x4)>>3;
- x5 = (x8-(W1+W7)*x5)>>3;
- x8 = W3*(x6+x7) + 4;
- x6 = (x8-(W3-W5)*x6)>>3;
- x7 = (x8-(W3+W5)*x7)>>3;
-
- /* second stage */
- x8 = x0 + x1;
- x0 -= x1;
- x1 = W6*(x3+x2) + 4;
- x2 = (x1-(W2+W6)*x2)>>3;
- x3 = (x1+(W2-W6)*x3)>>3;
- x1 = x4 + x6;
- x4 -= x6;
- x6 = x5 + x7;
- x5 -= x7;
-
- /* third stage */
- x7 = x8 + x3;
- x8 -= x3;
- x3 = x0 + x2;
- x0 -= x2;
- x2 = (181*(x4+x5)+128)>>8;
- x4 = (181*(x4-x5)+128)>>8;
-
- /* fourth stage */
- blk[8*0] = iclp[(x7+x1)>>14];
- blk[8*1] = iclp[(x3+x2)>>14];
- blk[8*2] = iclp[(x0+x4)>>14];
- blk[8*3] = iclp[(x8+x6)>>14];
- blk[8*4] = iclp[(x8-x6)>>14];
- blk[8*5] = iclp[(x0-x4)>>14];
- blk[8*6] = iclp[(x3-x2)>>14];
- blk[8*7] = iclp[(x7-x1)>>14];
-}
-
-/* two dimensional inverse discrete cosine transform */
-void Fast_IDCT(block)
-short *block;
-{
- int i;
-
- for (i=0; i<8; i++)
- idctrow(block+8*i);
-
- for (i=0; i<8; i++)
- idctcol(block+i);
-}
-
-void Initialize_Fast_IDCT()
-{
- int i;
-
- iclp = iclip+512;
- for (i= -512; i<512; i++)
- iclp[i] = (i<-256) ? -256 : ((i>255) ? 255 : i);
-}
Index: start/mpeg2/todo
===================================================================
--- start/mpeg2/todo (revision 1087)
+++ start/mpeg2/todo (nonexistent)
@@ -1,73 +0,0 @@
- 1. Test bitstream
- Small example bitstream (128x128 pixel dimensions) which employs all
- picture_structure (top field, bottom field, frame), picture_coding_type
- (I, P, and B), macroblock_type (forwards/backwards/interpolated,
- intra/non-intra, coded/not-coded, quant/no quant, etc.), and
- motion_type (field, frame, 16X8, dual prime) modes.
-
- 2. add trace printing for mpeg1 getblk routines.
-
- 3. modify getsys.c to parse program layer bitstreams (Systems)
- with variable-length packets.
-
- 4. 24 bit X11 display
- (borrow from Berkeley or find way for our code to use their interface)
-
- 5. MPEG-2 Transport layer systems streams parsing
-
- 6. Document IPR issue
-
- provide CableLabs URL
- how IPR relates to our disclaimer.
-
- 7. TIFF library support (YCbCr 4:4:4, 4:2:2, and 4:2:0 pictures)
-[deferred]
-
-10. IDCT rounding
- As per IDCT corridgendum (Savatier, MPEG 95/XXX)
- [done, but verified ?]
-
-
-12. green dots in can
- [ appears to be a display issue, probably related to convmat[]
- error ]
-
-19. move Dual_Prime calculation into picture_data()
-
-20. motion vector calculation to include tappable stages to test
- whether elements fall within [low:high] range.
-
-21. Integrate verifier routines
-
-22. Inter-layer verification routines
- - check base and enhancement layers (e.g. SNR)
-
-23. Spatial verification
- - considering that no base layer is available.
-
-24. SNR verification
- [ done ]
-
-25. DP verification
- [ not done. No longer any bitstreams with Data Partitioning distributed
- since DP is not part of any official Profile ]
-
-26. merge all global bitsteam element variables into
- common data structure (similar to layer_data). This is needed
- for the verifier (whether or not headers in SNR and DP streams
- are identical where needed to that of the base layer).
-
-27. investigate why MS-DOS wants an extra % sign for filename patterns
- when more than one filename pattern is used in the command line argument
-
-28. convert -t (trace) flag into levels, merge with Verbose.
-
-29. seek to a specified frame number (support for MCI-like functions)
-
-30. document the "flash" VLC table decoding method in detail.
- (namely how to map tables in Annex B to those in getvlc.h)
-
-31. MPEG-2 program stream compatibility
- (a few minor bits of difference in the system header ).
-
---------
Index: start/mpeg2/makefile.ori
===================================================================
--- start/mpeg2/makefile.ori (revision 1087)
+++ start/mpeg2/makefile.ori (nonexistent)
@@ -1,98 +0,0 @@
-# Makefile for mpeg2decode
-
-# Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved.
-
-#
-# Disclaimer of Warranty
-#
-# These software programs are available to the user without any license fee or
-# royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
-# any and all warranties, whether express, implied, or statuary, including any
-# implied warranties or merchantability or of fitness for a particular
-# purpose. In no event shall the copyright-holder be liable for any
-# incidental, punitive, or consequential damages of any kind whatsoever
-# arising from the use of these programs.
-#
-# This disclaimer of warranty extends to the user of these programs and user's
-# customers, employees, agents, transferees, successors, and assigns.
-#
-# The MPEG Software Simulation Group does not represent or warrant that the
-# programs furnished hereunder are free of infringement of any third-party
-# patents.
-#
-# Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
-# are subject to royalty fees to patent holders. Many of these patents are
-# general enough such that they are unavoidable regardless of implementation
-# design.
-#
-#
-
-#WARNINGS = -Wall
-#VERIFY = -DVERIFY
-
-#disable this flag if you do not want bitstream element tracing
-#this will speed up the decoder some since it does not have to test
-#the trace flag at several critical inner loop locations.
-TRACE = -DTRACE
-
-#disable this flag if you do not need verbose trace, such as
-#header information
-VERBOSE = -DVERBOSE
-
-# uncomment the following two lines if you want to include X11 support
-
-#USE_DISP = -DDISPLAY
-#LIBS = -lX11
-
-# uncomment the following two lines if you want to use shared memory
-# (faster display if server and client run on the same machine)
-
-#USE_SHMEM = -DSH_MEM
-#LIBS = -lXext -lX11
-
-# if your X11 include files / libraries are in a non standard location:
-# set INCLUDEDIR to -I followed by the appropriate include file path and
-# set LIBRARYDIR to -L followed by the appropriate library path and
-
-#INCLUDEDIR = -I/usr/openwin/include
-#LIBRARYDIR = -L/usr/openwin/lib
-
-#
-# GNU gcc
-#
-CC = gcc
-CFLAGS = -O2 $(USE_DISP) $(USE_SHMEM) $(INCLUDEDIR) $(TRACE) $(VERBOSE) $(VERIFY) $(WARNINGS)
-
-OBJ = mpeg2dec.o getpic.o motion.o getvlc.o gethdr.o getblk.o getbits.o store.o recon.o spatscal.o idct.o idctref.o display.o systems.o subspic.o verify.o
-
-all: mpeg2decode
-
-pc: mpeg2dec.exe
-
-clean:
- rm -f *.o *% core mpeg2decode
-
-mpeg2dec.exe: mpeg2decode
- coff2exe mpeg2dec
-
-mpeg2decode: $(OBJ)
- $(CC) $(CFLAGS) $(LIBRARYDIR) -o mpeg2decode $(OBJ) -lm $(LIBS)
-
-display.o : display.c config.h global.h mpeg2dec.h
-getbits.o : getbits.c config.h global.h mpeg2dec.h
-getblk.o : getblk.c config.h global.h mpeg2dec.h
-gethdr.o : gethdr.c config.h global.h mpeg2dec.h
-getpic.o : getpic.c config.h global.h mpeg2dec.h
-getvlc.o : getvlc.c config.h global.h mpeg2dec.h getvlc.h
-idct.o : idct.c config.h
-idctref.o : idctref.c config.h
-motion.o : motion.c config.h global.h mpeg2dec.h
-mpeg2dec.o : mpeg2dec.c config.h global.h mpeg2dec.h
-recon.o : recon.c config.h global.h mpeg2dec.h
-spatscal.o : spatscal.c config.h global.h mpeg2dec.h
-store.o : store.c config.h global.h mpeg2dec.h
-
-# additions since July 4, 1994 edition
-systems.o : systems.c config.h global.h mpeg2dec.h
-subspic.o : subspic.c config.h global.h mpeg2dec.h
-verify.o: verify.c config.h global.h mpeg2dec.h
Index: start/mpeg2/getvlc.c
===================================================================
--- start/mpeg2/getvlc.c (revision 1087)
+++ start/mpeg2/getvlc.c (nonexistent)
@@ -1,799 +0,0 @@
-/* getvlc.c, variable length decoding */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-#include <stdio.h>
-
-#include "config.h"
-#include "global.h"
-#include "getvlc.h"
-
-/* private prototypes */
-/* generic picture macroblock type processing functions */
-static int Get_I_macroblock_type _ANSI_ARGS_((void));
-static int Get_P_macroblock_type _ANSI_ARGS_((void));
-static int Get_B_macroblock_type _ANSI_ARGS_((void));
-static int Get_D_macroblock_type _ANSI_ARGS_((void));
-
-/* spatial picture macroblock type processing functions */
-static int Get_I_Spatial_macroblock_type _ANSI_ARGS_((void));
-static int Get_P_Spatial_macroblock_type _ANSI_ARGS_((void));
-static int Get_B_Spatial_macroblock_type _ANSI_ARGS_((void));
-static int Get_SNR_macroblock_type _ANSI_ARGS_((void));
-
-int Get_macroblock_type()
-{
- int macroblock_type = 0;
-
- if (ld->scalable_mode==SC_SNR)
- macroblock_type = Get_SNR_macroblock_type();
- else
- {
- switch (picture_coding_type)
- {
- case I_TYPE:
- macroblock_type = ld->pict_scal ? Get_I_Spatial_macroblock_type() : Get_I_macroblock_type();
- break;
- case P_TYPE:
- macroblock_type = ld->pict_scal ? Get_P_Spatial_macroblock_type() : Get_P_macroblock_type();
- break;
- case B_TYPE:
- macroblock_type = ld->pict_scal ? Get_B_Spatial_macroblock_type() : Get_B_macroblock_type();
- break;
- case D_TYPE:
- macroblock_type = Get_D_macroblock_type();
- break;
- default:
- printf("Get_macroblock_type(): unrecognized picture coding type\n");
- break;
- }
- }
-
- return macroblock_type;
-}
-
-static int Get_I_macroblock_type()
-{
-#ifdef TRACE
- if (Trace_Flag)
- printf("macroblock_type(I) ");
-#endif /* TRACE */
-
- if (Get_Bits1())
- {
-#ifdef TRACE
- if (Trace_Flag)
- printf("(1): Intra (1)\n");
-#endif /* TRACE */
- return 1;
- }
-
- if (!Get_Bits1())
- {
- if (!Quiet_Flag)
- printf("Invalid macroblock_type code\n");
- Fault_Flag = 1;
- }
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("(01): Intra, Quant (17)\n");
-#endif /* TRACE */
-
- return 17;
-}
-
-static char *MBdescr[]={
- "", "Intra", "No MC, Coded", "",
- "Bwd, Not Coded", "", "Bwd, Coded", "",
- "Fwd, Not Coded", "", "Fwd, Coded", "",
- "Interp, Not Coded", "", "Interp, Coded", "",
- "", "Intra, Quant", "No MC, Coded, Quant", "",
- "", "", "Bwd, Coded, Quant", "",
- "", "", "Fwd, Coded, Quant", "",
- "", "", "Interp, Coded, Quant", ""
-};
-
-static int Get_P_macroblock_type()
-{
- int code;
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("macroblock_type(P) (");
-#endif /* TRACE */
-
- if ((code = Show_Bits(6))>=8)
- {
- code >>= 3;
- Flush_Buffer(PMBtab0[code].len);
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code,3,PMBtab0[code].len);
- printf("): %s (%d)\n",MBdescr[(int)PMBtab0[code].val],PMBtab0[code].val);
- }
-#endif /* TRACE */
- return PMBtab0[code].val;
- }
-
- if (code==0)
- {
- if (!Quiet_Flag)
- printf("Invalid macroblock_type code\n");
- Fault_Flag = 1;
- return 0;
- }
-
- Flush_Buffer(PMBtab1[code].len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code,6,PMBtab1[code].len);
- printf("): %s (%d)\n",MBdescr[(int)PMBtab1[code].val],PMBtab1[code].val);
- }
-#endif /* TRACE */
-
- return PMBtab1[code].val;
-}
-
-static int Get_B_macroblock_type()
-{
- int code;
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("macroblock_type(B) (");
-#endif /* TRACE */
-
- if ((code = Show_Bits(6))>=8)
- {
- code >>= 2;
- Flush_Buffer(BMBtab0[code].len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code,4,BMBtab0[code].len);
- printf("): %s (%d)\n",MBdescr[(int)BMBtab0[code].val],BMBtab0[code].val);
- }
-#endif /* TRACE */
-
- return BMBtab0[code].val;
- }
-
- if (code==0)
- {
- if (!Quiet_Flag)
- printf("Invalid macroblock_type code\n");
- Fault_Flag = 1;
- return 0;
- }
-
- Flush_Buffer(BMBtab1[code].len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code,6,BMBtab1[code].len);
- printf("): %s (%d)\n",MBdescr[(int)BMBtab1[code].val],BMBtab1[code].val);
- }
-#endif /* TRACE */
-
- return BMBtab1[code].val;
-}
-
-static int Get_D_macroblock_type()
-{
- if (!Get_Bits1())
- {
- if (!Quiet_Flag)
- printf("Invalid macroblock_type code\n");
- Fault_Flag=1;
- }
-
- return 1;
-}
-
-/* macroblock_type for pictures with spatial scalability */
-static int Get_I_Spatial_macroblock_type()
-{
- int code;
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("macroblock_type(I,spat) (");
-#endif /* TRACE */
-
- code = Show_Bits(4);
-
- if (code==0)
- {
- if (!Quiet_Flag)
- printf("Invalid macroblock_type code\n");
- Fault_Flag = 1;
- return 0;
- }
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code,4,spIMBtab[code].len);
- printf("): %02x\n",spIMBtab[code].val);
- }
-#endif /* TRACE */
-
- Flush_Buffer(spIMBtab[code].len);
- return spIMBtab[code].val;
-}
-
-static int Get_P_Spatial_macroblock_type()
-{
- int code;
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("macroblock_type(P,spat) (");
-#endif /* TRACE */
-
- code = Show_Bits(7);
-
- if (code<2)
- {
- if (!Quiet_Flag)
- printf("Invalid macroblock_type code\n");
- Fault_Flag = 1;
- return 0;
- }
-
- if (code>=16)
- {
- code >>= 3;
- Flush_Buffer(spPMBtab0[code].len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code,4,spPMBtab0[code].len);
- printf("): %02x\n",spPMBtab0[code].val);
- }
-#endif /* TRACE */
-
- return spPMBtab0[code].val;
- }
-
- Flush_Buffer(spPMBtab1[code].len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code,7,spPMBtab1[code].len);
- printf("): %02x\n",spPMBtab1[code].val);
- }
-#endif /* TRACE */
-
- return spPMBtab1[code].val;
-}
-
-static int Get_B_Spatial_macroblock_type()
-{
- int code;
- VLCtab *p;
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("macroblock_type(B,spat) (");
-#endif /* TRACE */
-
- code = Show_Bits(9);
-
- if (code>=64)
- p = &spBMBtab0[(code>>5)-2];
- else if (code>=16)
- p = &spBMBtab1[(code>>2)-4];
- else if (code>=8)
- p = &spBMBtab2[code-8];
- else
- {
- if (!Quiet_Flag)
- printf("Invalid macroblock_type code\n");
- Fault_Flag = 1;
- return 0;
- }
-
- Flush_Buffer(p->len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code,9,p->len);
- printf("): %02x\n",p->val);
- }
-#endif /* TRACE */
-
- return p->val;
-}
-
-static int Get_SNR_macroblock_type()
-{
- int code;
-
-#ifdef TRACE /* *CH* */
- if (Trace_Flag)
- printf("macroblock_type(SNR) (");
-#endif TRACE
-
- code = Show_Bits(3);
-
- if (code==0)
- {
- if (!Quiet_Flag)
- printf("Invalid macroblock_type code\n");
- Fault_Flag = 1;
- return 0;
- }
-
- Flush_Buffer(SNRMBtab[code].len);
-
-#ifdef TRACE /* *CH* */
- if (Trace_Flag)
- {
- Print_Bits(code,3,SNRMBtab[code].len);
- printf("): %s (%d)\n",MBdescr[(int)SNRMBtab[code].val],SNRMBtab[code].val);
- }
-#endif TRACE
-
-
- return SNRMBtab[code].val;
-}
-
-int Get_motion_code()
-{
- int code;
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("motion_code (");
-#endif /* TRACE */
-
- if (Get_Bits1())
- {
-#ifdef TRACE
- if (Trace_Flag)
- printf("0): 0\n");
-#endif /* TRACE */
- return 0;
- }
-
- if ((code = Show_Bits(9))>=64)
- {
- code >>= 6;
- Flush_Buffer(MVtab0[code].len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code,3,MVtab0[code].len);
- printf("%d): %d\n",
- Show_Bits(1),Show_Bits(1)?-MVtab0[code].val:MVtab0[code].val);
- }
-#endif /* TRACE */
-
- return Get_Bits1()?-MVtab0[code].val:MVtab0[code].val;
- }
-
- if (code>=24)
- {
- code >>= 3;
- Flush_Buffer(MVtab1[code].len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code,6,MVtab1[code].len);
- printf("%d): %d\n",
- Show_Bits(1),Show_Bits(1)?-MVtab1[code].val:MVtab1[code].val);
- }
-#endif /* TRACE */
-
- return Get_Bits1()?-MVtab1[code].val:MVtab1[code].val;
- }
-
- if ((code-=12)<0)
- {
- if (!Quiet_Flag)
-/* HACK */
- printf("Invalid motion_vector code (MBA %d, pic %d)\n", global_MBA, global_pic);
- Fault_Flag=1;
- return 0;
- }
-
- Flush_Buffer(MVtab2[code].len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code+12,9,MVtab2[code].len);
- printf("%d): %d\n",
- Show_Bits(1),Show_Bits(1)?-MVtab2[code].val:MVtab2[code].val);
- }
-#endif /* TRACE */
-
- return Get_Bits1() ? -MVtab2[code].val : MVtab2[code].val;
-}
-
-/* get differential motion vector (for dual prime prediction) */
-int Get_dmvector()
-{
-#ifdef TRACE
- if (Trace_Flag)
- printf("dmvector (");
-#endif /* TRACE */
-
- if (Get_Bits(1))
- {
-#ifdef TRACE
- if (Trace_Flag)
- printf(Show_Bits(1) ? "11): -1\n" : "10): 1\n");
-#endif /* TRACE */
- return Get_Bits(1) ? -1 : 1;
- }
- else
- {
-#ifdef TRACE
- if (Trace_Flag)
- printf("0): 0\n");
-#endif /* TRACE */
- return 0;
- }
-}
-
-int Get_coded_block_pattern()
-{
- int code;
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("coded_block_pattern_420 (");
-#endif /* TRACE */
-
- if ((code = Show_Bits(9))>=128)
- {
- code >>= 4;
- Flush_Buffer(CBPtab0[code].len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code,5,CBPtab0[code].len);
- printf("): ");
- Print_Bits(CBPtab0[code].val,6,6);
- printf(" (%d)\n",CBPtab0[code].val);
- }
-#endif /* TRACE */
-
- return CBPtab0[code].val;
- }
-
- if (code>=8)
- {
- code >>= 1;
- Flush_Buffer(CBPtab1[code].len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code,8,CBPtab1[code].len);
- printf("): ");
- Print_Bits(CBPtab1[code].val,6,6);
- printf(" (%d)\n",CBPtab1[code].val);
- }
-#endif /* TRACE */
-
- return CBPtab1[code].val;
- }
-
- if (code<1)
- {
- if (!Quiet_Flag)
- printf("Invalid coded_block_pattern code\n");
- Fault_Flag = 1;
- return 0;
- }
-
- Flush_Buffer(CBPtab2[code].len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code,9,CBPtab2[code].len);
- printf("): ");
- Print_Bits(CBPtab2[code].val,6,6);
- printf(" (%d)\n",CBPtab2[code].val);
- }
-#endif /* TRACE */
-
- return CBPtab2[code].val;
-}
-
-int Get_macroblock_address_increment()
-{
- int code, val;
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("macroblock_address_increment (");
-#endif /* TRACE */
-
- val = 0;
-
- while ((code = Show_Bits(11))<24)
- {
- if (code!=15) /* if not macroblock_stuffing */
- {
- if (code==8) /* if macroblock_escape */
- {
-#ifdef TRACE
- if (Trace_Flag)
- printf("00000001000 ");
-#endif /* TRACE */
-
- val+= 33;
- }
- else
- {
- if (!Quiet_Flag)
- printf("Invalid macroblock_address_increment code\n");
-
- Fault_Flag = 1;
- return 1;
- }
- }
- else /* macroblock suffing */
- {
-#ifdef TRACE
- if (Trace_Flag)
- printf("00000001111 ");
-#endif /* TRACE */
- }
-
- Flush_Buffer(11);
- }
-
- /* macroblock_address_increment == 1 */
- /* ('1' is in the MSB position of the lookahead) */
- if (code>=1024)
- {
- Flush_Buffer(1);
-#ifdef TRACE
- if (Trace_Flag)
- printf("1): %d\n",val+1);
-#endif /* TRACE */
- return val + 1;
- }
-
- /* codes 00010 ... 011xx */
- if (code>=128)
- {
- /* remove leading zeros */
- code >>= 6;
- Flush_Buffer(MBAtab1[code].len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code,5,MBAtab1[code].len);
- printf("): %d\n",val+MBAtab1[code].val);
- }
-#endif /* TRACE */
-
-
- return val + MBAtab1[code].val;
- }
-
- /* codes 00000011000 ... 0000111xxxx */
- code-= 24; /* remove common base */
- Flush_Buffer(MBAtab2[code].len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- Print_Bits(code+24,11,MBAtab2[code].len);
- printf("): %d\n",val+MBAtab2[code].val);
- }
-#endif /* TRACE */
-
- return val + MBAtab2[code].val;
-}
-
-/* combined MPEG-1 and MPEG-2 stage. parse VLC and
- perform dct_diff arithmetic.
-
- MPEG-1: ISO/IEC 11172-2 section
- MPEG-2: ISO/IEC 13818-2 section 7.2.1
-
- Note: the arithmetic here is presented more elegantly than
- the spec, yet the results, dct_diff, are the same.
-*/
-
-int Get_Luma_DC_dct_diff()
-{
- int code, size, dct_diff;
-
-#ifdef TRACE
-/*
- if (Trace_Flag)
- printf("dct_dc_size_luminance: (");
-*/
-#endif /* TRACE */
-
- /* decode length */
- code = Show_Bits(5);
-
- if (code<31)
- {
- size = DClumtab0[code].val;
- Flush_Buffer(DClumtab0[code].len);
-#ifdef TRACE
-/*
- if (Trace_Flag)
- {
- Print_Bits(code,5,DClumtab0[code].len);
- printf("): %d",size);
- }
-*/
-#endif /* TRACE */
- }
- else
- {
- code = Show_Bits(9) - 0x1f0;
- size = DClumtab1[code].val;
- Flush_Buffer(DClumtab1[code].len);
-
-#ifdef TRACE
-/*
- if (Trace_Flag)
- {
- Print_Bits(code+0x1f0,9,DClumtab1[code].len);
- printf("): %d",size);
- }
-*/
-#endif /* TRACE */
- }
-
-#ifdef TRACE
-/*
- if (Trace_Flag)
- printf(", dct_dc_differential (");
-*/
-#endif /* TRACE */
-
- if (size==0)
- dct_diff = 0;
- else
- {
- dct_diff = Get_Bits(size);
-#ifdef TRACE
-/*
- if (Trace_Flag)
- Print_Bits(dct_diff,size,size);
-*/
-#endif /* TRACE */
- if ((dct_diff & (1<<(size-1)))==0)
- dct_diff-= (1<<size) - 1;
- }
-
-#ifdef TRACE
-/*
- if (Trace_Flag)
- printf("): %d\n",dct_diff);
-*/
-#endif /* TRACE */
-
- return dct_diff;
-}
-
-
-int Get_Chroma_DC_dct_diff()
-{
- int code, size, dct_diff;
-
-#ifdef TRACE
-/*
- if (Trace_Flag)
- printf("dct_dc_size_chrominance: (");
-*/
-#endif /* TRACE */
-
- /* decode length */
- code = Show_Bits(5);
-
- if (code<31)
- {
- size = DCchromtab0[code].val;
- Flush_Buffer(DCchromtab0[code].len);
-
-#ifdef TRACE
-/*
- if (Trace_Flag)
- {
- Print_Bits(code,5,DCchromtab0[code].len);
- printf("): %d",size);
- }
-*/
-#endif /* TRACE */
- }
- else
- {
- code = Show_Bits(10) - 0x3e0;
- size = DCchromtab1[code].val;
- Flush_Buffer(DCchromtab1[code].len);
-
-#ifdef TRACE
-/*
- if (Trace_Flag)
- {
- Print_Bits(code+0x3e0,10,DCchromtab1[code].len);
- printf("): %d",size);
- }
-*/
-#endif /* TRACE */
- }
-
-#ifdef TRACE
-/*
- if (Trace_Flag)
- printf(", dct_dc_differential (");
-*/
-#endif /* TRACE */
-
- if (size==0)
- dct_diff = 0;
- else
- {
- dct_diff = Get_Bits(size);
-#ifdef TRACE
-/*
- if (Trace_Flag)
- Print_Bits(dct_diff,size,size);
-*/
-#endif /* TRACE */
- if ((dct_diff & (1<<(size-1)))==0)
- dct_diff-= (1<<size) - 1;
- }
-
-#ifdef TRACE
-/*
- if (Trace_Flag)
- printf("): %d\n",dct_diff);
-*/
-#endif /* TRACE */
-
- return dct_diff;
-}
Index: start/mpeg2/mpeg2dec.c
===================================================================
--- start/mpeg2/mpeg2dec.c (revision 1087)
+++ start/mpeg2/mpeg2dec.c (nonexistent)
@@ -1,770 +0,0 @@
-
-/* mpeg2dec.c, main(), initialization, option processing */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <fcntl.h>
-
-#define GLOBAL
-#include "config.h"
-#include "global.h"
-
-/* private prototypes */
-static int video_sequence _ANSI_ARGS_((int *framenum));
-static int Decode_Bitstream _ANSI_ARGS_((void));
-static int Headers _ANSI_ARGS_((void));
-static void Initialize_Sequence _ANSI_ARGS_((void));
-static void Initialize_Decoder _ANSI_ARGS_((void));
-static void Deinitialize_Sequence _ANSI_ARGS_((void));
-static void Process_Options _ANSI_ARGS_((int argc, char *argv[]));
-
-
-#if OLD
-static int Get_Val _ANSI_ARGS_((char *argv[]));
-#endif
-
-/* #define DEBUG */
-
-static void Clear_Options();
-#ifdef DEBUG
-static void Print_Options();
-#endif
-
-int main(argc,argv)
-int argc;
-char *argv[];
-{
- int ret, code;
-
- Clear_Options();
-
- /* decode command line arguments */
- Process_Options(argc,argv);
-
-#ifdef DEBUG
- Print_Options();
-#endif
-
- ld = &base; /* select base layer context */
-
- /* open MPEG base layer bitstream file(s) */
- /* NOTE: this is either a base layer stream or a spatial enhancement stream */
- if ((base.Infile=open(Main_Bitstream_Filename,O_RDONLY|O_BINARY))<0)
- {
- fprintf(stderr,"Base layer input file %s not found\n", Main_Bitstream_Filename);
- exit(1);
- }
-
-
- if(base.Infile != 0)
- {
- Initialize_Buffer();
-
- if(Show_Bits(8)==0x47)
- {
- sprintf(Error_Text,"Decoder currently does not parse transport streams\n");
- Error(Error_Text);
- }
-
- next_start_code();
- code = Show_Bits(32);
-
- switch(code)
- {
- case SEQUENCE_HEADER_CODE:
- break;
- case PACK_START_CODE:
- System_Stream_Flag = 1;
- case VIDEO_ELEMENTARY_STREAM:
- System_Stream_Flag = 1;
- break;
- default:
- sprintf(Error_Text,"Unable to recognize stream type\n");
- Error(Error_Text);
- break;
- }
-
- lseek(base.Infile, 0l, 0);
- Initialize_Buffer();
- }
-
- if(base.Infile!=0)
- {
- lseek(base.Infile, 0l, 0);
- }
-
- Initialize_Buffer();
-
- if(Two_Streams)
- {
- ld = &enhan; /* select enhancement layer context */
-
- if ((enhan.Infile = open(Enhancement_Layer_Bitstream_Filename,O_RDONLY|O_BINARY))<0)
- {
- sprintf(Error_Text,"enhancment layer bitstream file %s not found\n",
- Enhancement_Layer_Bitstream_Filename);
-
- Error(Error_Text);
- }
-
- Initialize_Buffer();
- ld = &base;
- }
-
- Initialize_Decoder();
-
- ret = Decode_Bitstream();
-
- close(base.Infile);
-
- if (Two_Streams)
- close(enhan.Infile);
-
- return 0;
-}
-
-/* IMPLEMENTAION specific rouintes */
-static void Initialize_Decoder()
-{
- int i;
-
- /* Clip table */
- if (!(Clip=(unsigned char *)malloc(1024)))
- Error("Clip[] malloc failed\n");
-
- Clip += 384;
-
- for (i=-384; i<640; i++)
- Clip[i] = (i<0) ? 0 : ((i>255) ? 255 : i);
-
- /* IDCT */
- if (Reference_IDCT_Flag)
- Initialize_Reference_IDCT();
- else
- Initialize_Fast_IDCT();
-
-}
-
-/* mostly IMPLEMENTAION specific rouintes */
-static void Initialize_Sequence()
-{
- int cc, size;
- static int Table_6_20[3] = {6,8,12};
-
- /* check scalability mode of enhancement layer */
- if (Two_Streams && (enhan.scalable_mode!=SC_SNR) && (base.scalable_mode!=SC_DP))
- Error("unsupported scalability mode\n");
-
- /* force MPEG-1 parameters for proper decoder behavior */
- /* see ISO/IEC 13818-2 section D.9.14 */
- if (!base.MPEG2_Flag)
- {
- progressive_sequence = 1;
- progressive_frame = 1;
- picture_structure = FRAME_PICTURE;
- frame_pred_frame_dct = 1;
- chroma_format = CHROMA420;
- matrix_coefficients = 5;
- }
-
- /* round to nearest multiple of coded macroblocks */
- /* ISO/IEC 13818-2 section 6.3.3 sequence_header() */
- mb_width = (horizontal_size+15)/16;
- mb_height = (base.MPEG2_Flag && !progressive_sequence) ? 2*((vertical_size+31)/32)
- : (vertical_size+15)/16;
-
- Coded_Picture_Width = 16*mb_width;
- Coded_Picture_Height = 16*mb_height;
-
- /* ISO/IEC 13818-2 sections 6.1.1.8, 6.1.1.9, and 6.1.1.10 */
- Chroma_Width = (chroma_format==CHROMA444) ? Coded_Picture_Width
- : Coded_Picture_Width>>1;
- Chroma_Height = (chroma_format!=CHROMA420) ? Coded_Picture_Height
- : Coded_Picture_Height>>1;
-
- /* derived based on Table 6-20 in ISO/IEC 13818-2 section 6.3.17 */
- block_count = Table_6_20[chroma_format-1];
-
- for (cc=0; cc<3; cc++)
- {
- if (cc==0)
- size = Coded_Picture_Width*Coded_Picture_Height;
- else
- size = Chroma_Width*Chroma_Height;
-
- if (!(backward_reference_frame[cc] = (unsigned char *)malloc(size)))
- Error("backward_reference_frame[] malloc failed\n");
-
- if (!(forward_reference_frame[cc] = (unsigned char *)malloc(size)))
- Error("forward_reference_frame[] malloc failed\n");
-
- if (!(auxframe[cc] = (unsigned char *)malloc(size)))
- Error("auxframe[] malloc failed\n");
-
- if(Ersatz_Flag)
- if (!(substitute_frame[cc] = (unsigned char *)malloc(size)))
- Error("substitute_frame[] malloc failed\n");
-
-
- if (base.scalable_mode==SC_SPAT)
- {
- /* this assumes lower layer is 4:2:0 */
- if (!(llframe0[cc] = (unsigned char *)malloc((lower_layer_prediction_horizontal_size*lower_layer_prediction_vertical_size)/(cc?4:1))))
- Error("llframe0 malloc failed\n");
- if (!(llframe1[cc] = (unsigned char *)malloc((lower_layer_prediction_horizontal_size*lower_layer_prediction_vertical_size)/(cc?4:1))))
- Error("llframe1 malloc failed\n");
- }
- }
-
- /* SCALABILITY: Spatial */
- if (base.scalable_mode==SC_SPAT)
- {
- if (!(lltmp = (short *)malloc(lower_layer_prediction_horizontal_size*((lower_layer_prediction_vertical_size*vertical_subsampling_factor_n)/vertical_subsampling_factor_m)*sizeof(short))))
- Error("lltmp malloc failed\n");
- }
-
- // PJ
- Initialize_framebuf( Coded_Picture_Width*Coded_Picture_Height*sizeof(WORD) );
- gvideo_init();
- init_jetcontrol();
-
-#ifdef DISPLAY
- if (Output_Type==T_X11)
- {
- Initialize_Display_Process("");
- Initialize_Dither_Matrix();
- }
-#endif /* DISPLAY */
-
-}
-
-void Error(text)
-char *text;
-{
- fprintf(stderr,text);
- exit(1);
-}
-
-/* Trace_Flag output */
-void Print_Bits(code,bits,len)
-int code,bits,len;
-{
- int i;
- for (i=0; i<len; i++)
- printf("%d",(code>>(bits-1-i))&1);
-}
-
-
-
-/* option processing */
-static void Process_Options(argc,argv)
-int argc; /* argument count */
-char *argv[]; /* argument vector */
-{
- int i, LastArg, NextArg;
-
- /* at least one argument should be present */
- if (argc<2)
- {
- printf("\n%s, %s\n",Version,Author);
- printf("Usage: mpeg2decode {options}\n\
-Options: -b file main bitstream (base or spatial enhancement layer)\n\
- -cn file conformance report (n: level)\n\
- -e file enhancement layer bitstream (SNR or Data Partitioning)\n\
- -f store/display interlaced video in frame format\n\
- -g concatenated file format for substitution method (-x)\n\
- -in file information & statistics report (n: level)\n\
- -l file file name pattern for lower layer sequence\n\
- (for spatial scalability)\n\
- -on file output format (0:YUV 1:SIF 2:TGA 3:PPM 4:X11 5:X11HiQ)\n\
- -q disable warnings to stderr\n\
- -r use double precision reference IDCT\n\
- -t enable low level tracing to stdout\n\
- -u file print user_data to stdio or file\n\
- -vn verbose output (n: level)\n\
- -x file filename pattern of picture substitution sequence\n\n\
-File patterns: for sequential filenames, \"printf\" style, e.g. rec%%d\n\
- or rec%%d%%c for fieldwise storage\n\
-Levels: 0:none 1:sequence 2:picture 3:slice 4:macroblock 5:block\n\n\
-Example: mpeg2decode -b bitstream.mpg -f -r -o0 rec%%d\n\
- \n");
- exit(0);
- }
-
-
- Output_Type = -1;
- i = 1;
-
- /* command-line options are proceeded by '-' */
-
- while(i < argc)
- {
- /* check if this is the last argument */
- LastArg = ((argc-i)==1);
-
- /* parse ahead to see if another flag immediately follows current
- argument (this is used to tell if a filename is missing) */
- if(!LastArg)
- NextArg = (argv[i+1][0]=='-');
- else
- NextArg = 0;
-
- /* second character, [1], after '-' is the switch */
- if(argv[i][0]=='-')
- {
- switch(toupper(argv[i][1]))
- {
- /* third character. [2], is the value */
- case 'B':
- Main_Bitstream_Flag = 1;
-
- if(NextArg || LastArg)
- {
- printf("ERROR: -b must be followed the main bitstream filename\n");
- }
- else
- Main_Bitstream_Filename = argv[++i];
-
- break;
-
-
- case 'C':
-
-#ifdef VERIFY
- Verify_Flag = atoi(&argv[i][2]);
-
- if((Verify_Flag < NO_LAYER) || (Verify_Flag > ALL_LAYERS))
- {
- printf("ERROR: -c level (%d) out of range [%d,%d]\n",
- Verify_Flag, NO_LAYER, ALL_LAYERS);
- exit(ERROR);
- }
-#else /* VERIFY */
- printf("This program not compiled for Verify_Flag option\n");
-#endif /* VERIFY */
- break;
-
- case 'E':
- Two_Streams = 1; /* either Data Partitioning (DP) or SNR Scalability enhancment */
-
- if(NextArg || LastArg)
- {
- printf("ERROR: -e must be followed by filename\n");
- exit(ERROR);
- }
- else
- Enhancement_Layer_Bitstream_Filename = argv[++i];
-
- break;
-
-
- case 'F':
- Frame_Store_Flag = 1;
- break;
-
- case 'G':
- Big_Picture_Flag = 1;
- break;
-
-
- case 'I':
-#ifdef VERIFY
- Stats_Flag = atoi(&argv[i][2]);
-#else /* VERIFY */
- printf("WARNING: This program not compiled for -i option\n");
-#endif /* VERIFY */
- break;
-
- case 'L': /* spatial scalability flag */
- Spatial_Flag = 1;
-
- if(NextArg || LastArg)
- {
- printf("ERROR: -l must be followed by filename\n");
- exit(ERROR);
- }
- else
- Lower_Layer_Picture_Filename = argv[++i];
-
- break;
-
- case 'O':
-
- Output_Type = atoi(&argv[i][2]);
-
- if((Output_Type==4) || (Output_Type==5))
- Output_Picture_Filename = ""; /* no need of filename */
- else if(NextArg || LastArg)
- {
- printf("ERROR: -o must be followed by filename\n");
- exit(ERROR);
- }
- else
- /* filename is separated by space, so it becomes the next argument */
- Output_Picture_Filename = argv[++i];
-
-#ifdef DISPLAY
- if (Output_Type==T_X11HIQ)
- {
- hiQdither = 1;
- Output_Type=T_X11;
- }
-#endif /* DISPLAY */
- break;
-
- case 'Q':
- Quiet_Flag = 1;
- break;
-
- case 'R':
- Reference_IDCT_Flag = 1;
- break;
-
- case 'T':
-#ifdef TRACE
- Trace_Flag = 1;
-#else /* TRACE */
- printf("WARNING: This program not compiled for -t option\n");
-#endif /* TRACE */
- break;
-
- case 'U':
- User_Data_Flag = 1;
-
- case 'V':
-#ifdef VERBOSE
- Verbose_Flag = atoi(&argv[i][2]);
-#else /* VERBOSE */
- printf("This program not compiled for -v option\n");
-#endif /* VERBOSE */
- break;
-
-
- case 'X':
- Ersatz_Flag = 1;
-
- if(NextArg || LastArg)
- {
- printf("ERROR: -x must be followed by filename\n");
- exit(ERROR);
- }
- else
- Substitute_Picture_Filename = argv[++i];
-
- break;
-
-
-
- default:
- fprintf(stderr,"undefined option -%c ignored. Exiting program\n",
- argv[i][1]);
-
- exit(ERROR);
-
- } /* switch() */
- } /* if argv[i][0] == '-' */
-
- i++;
-
- /* check for bitstream filename argument (there must always be one, at the very end
- of the command line arguments */
-
- } /* while() */
-
-
- /* options sense checking */
-
- if(Main_Bitstream_Flag!=1)
- {
- printf("There must be a main bitstream specified (-b filename)\n");
- }
-
- /* force display process to show frame pictures */
- if((Output_Type==4 || Output_Type==5) && Frame_Store_Flag)
- Display_Progressive_Flag = 1;
- else
- Display_Progressive_Flag = 0;
-
-#ifdef VERIFY
- /* parse the bitstream, do not actually decode it completely */
-
-
-#if 0
- if(Output_Type==-1)
- {
- Decode_Layer = Verify_Flag;
- printf("FYI: Decoding bitstream elements up to: %s\n",
- Layer_Table[Decode_Layer]);
- }
- else
-#endif
- Decode_Layer = ALL_LAYERS;
-
-#endif /* VERIFY */
-
- /* no output type specified */
- if(Output_Type==-1)
- {
- Output_Type = 9;
- Output_Picture_Filename = "";
- }
-
-
-#ifdef DISPLAY
- if (Output_Type==T_X11)
- {
- if(Frame_Store_Flag)
- Display_Progressive_Flag = 1;
- else
- Display_Progressive_Flag = 0;
-
- Frame_Store_Flag = 1; /* to avoid calling dither() twice */
- }
-#endif
-
-
-}
-
-
-#ifdef OLD
-/*
- this is an old routine used to convert command line arguments
- into integers
-*/
-static int Get_Val(argv)
-char *argv[];
-{
- int val;
-
- if (sscanf(argv[1]+2,"%d",&val)!=1)
- return 0;
-
- while (isdigit(argv[1][2]))
- argv[1]++;
-
- return val;
-}
-#endif
-
-
-
-static int Headers()
-{
- int ret;
-
- ld = &base;
-
-
- /* return when end of sequence (0) or picture
- header has been parsed (1) */
-
- ret = Get_Hdr();
-
-
- if (Two_Streams)
- {
- ld = &enhan;
- if (Get_Hdr()!=ret && !Quiet_Flag)
- fprintf(stderr,"streams out of sync\n");
- ld = &base;
- }
-
- return ret;
-}
-
-
-
-static int Decode_Bitstream()
-{
- int ret;
- int Bitstream_Framenum;
-
- Bitstream_Framenum = 0;
-
- for(;;)
- {
-
-#ifdef VERIFY
- Clear_Verify_Headers();
-#endif /* VERIFY */
-
- ret = Headers();
-
- if(ret==1)
- {
- ret = video_sequence(&Bitstream_Framenum);
- }
- else
- return(ret);
- }
-
-}
-
-
-static void Deinitialize_Sequence()
-{
- int i;
-
- /* clear flags */
- base.MPEG2_Flag=0;
-
- for(i=0;i<3;i++)
- {
- free(backward_reference_frame[i]);
- free(forward_reference_frame[i]);
- free(auxframe[i]);
-
- if (base.scalable_mode==SC_SPAT)
- {
- free(llframe0[i]);
- free(llframe1[i]);
- }
- }
-
- if (base.scalable_mode==SC_SPAT)
- free(lltmp);
-
-#ifdef DISPLAY
- if (Output_Type==T_X11)
- Terminate_Display_Process();
-#endif
-}
-
-
-static int video_sequence(Bitstream_Framenumber)
-int *Bitstream_Framenumber;
-{
- int Bitstream_Framenum;
- int Sequence_Framenum;
- int Return_Value;
-
- Bitstream_Framenum = *Bitstream_Framenumber;
- Sequence_Framenum=0;
-
- Initialize_Sequence();
-
- /* decode picture whose header has already been parsed in
- Decode_Bitstream() */
-
-
- Decode_Picture(Bitstream_Framenum, Sequence_Framenum);
-
- /* update picture numbers */
- if (!Second_Field)
- {
- Bitstream_Framenum++;
- Sequence_Framenum++;
- }
-
- /* loop through the rest of the pictures in the sequence */
- while ((Return_Value=Headers()))
- {
- Decode_Picture(Bitstream_Framenum, Sequence_Framenum);
-
- if (!Second_Field)
- {
- Bitstream_Framenum++;
- Sequence_Framenum++;
- }
- }
-
- /* put last frame */
- if (Sequence_Framenum!=0)
- {
- Output_Last_Frame_of_Sequence(Bitstream_Framenum);
- }
-
- Deinitialize_Sequence();
-
-#ifdef VERIFY
- Clear_Verify_Headers();
-#endif /* VERIFY */
-
- *Bitstream_Framenumber = Bitstream_Framenum;
- return(Return_Value);
-}
-
-
-
-static void Clear_Options()
-{
- Verbose_Flag = 0;
- Output_Type = 0;
- Output_Picture_Filename = " ";
- hiQdither = 0;
- Output_Type = 0;
- Frame_Store_Flag = 0;
- Spatial_Flag = 0;
- Lower_Layer_Picture_Filename = " ";
- Reference_IDCT_Flag = 0;
- Trace_Flag = 0;
- Quiet_Flag = 0;
- Ersatz_Flag = 0;
- Substitute_Picture_Filename = " ";
- Two_Streams = 0;
- Enhancement_Layer_Bitstream_Filename = " ";
- Big_Picture_Flag = 0;
- Main_Bitstream_Flag = 0;
- Main_Bitstream_Filename = " ";
- Verify_Flag = 0;
- Stats_Flag = 0;
- User_Data_Flag = 0;
-}
-
-
-#ifdef DEBUG
-static void Print_Options()
-{
-
- printf("Verbose_Flag = %d\n", Verbose_Flag);
- printf("Output_Type = %d\n", Output_Type);
- printf("Output_Picture_Filename = %s\n", Output_Picture_Filename);
- printf("hiQdither = %d\n", hiQdither);
- printf("Output_Type = %d\n", Output_Type);
- printf("Frame_Store_Flag = %d\n", Frame_Store_Flag);
- printf("Spatial_Flag = %d\n", Spatial_Flag);
- printf("Lower_Layer_Picture_Filename = %s\n", Lower_Layer_Picture_Filename);
- printf("Reference_IDCT_Flag = %d\n", Reference_IDCT_Flag);
- printf("Trace_Flag = %d\n", Trace_Flag);
- printf("Quiet_Flag = %d\n", Quiet_Flag);
- printf("Ersatz_Flag = %d\n", Ersatz_Flag);
- printf("Substitute_Picture_Filename = %s\n", Substitute_Picture_Filename);
- printf("Two_Streams = %d\n", Two_Streams);
- printf("Enhancement_Layer_Bitstream_Filename = %s\n", Enhancement_Layer_Bitstream_Filename);
- printf("Big_Picture_Flag = %d\n", Big_Picture_Flag);
- printf("Main_Bitstream_Flag = %d\n", Main_Bitstream_Flag);
- printf("Main_Bitstream_Filename = %s\n", Main_Bitstream_Filename);
- printf("Verify_Flag = %d\n", Verify_Flag);
- printf("Stats_Flag = %d\n", Stats_Flag);
- printf("User_Data_Flag = %d\n", User_Data_Flag);
-
-}
-#endif
Index: start/mpeg2/getvlc.h
===================================================================
--- start/mpeg2/getvlc.h (revision 1087)
+++ start/mpeg2/getvlc.h (nonexistent)
@@ -1,491 +0,0 @@
-/* getvlc.h, variable length code tables */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-/* NOTE: #define constants such as MACROBLOCK_QUANT are upper case
- as per C programming convention. However, the MPEG document
- (ISO/IEC 13818-2) lists them in all lower case (e.g. Annex B) */
-
-/* NOTE: the VLC tables are in a flash format---a transformation
- of the tables in Annex B to a form more convenient towards
- parallel (more than one-bit-at-a-time) decoding */
-
-typedef struct {
- char val, len;
-} VLCtab;
-
-typedef struct {
- char run, level, len;
-} DCTtab;
-
-/* Table B-3, macroblock_type in P-pictures, codes 001..1xx */
-static VLCtab PMBtab0[8] = {
- {ERROR,0},
- {MACROBLOCK_MOTION_FORWARD,3},
- {MACROBLOCK_PATTERN,2}, {MACROBLOCK_PATTERN,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,1},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,1},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,1},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,1}
-};
-
-/* Table B-3, macroblock_type in P-pictures, codes 000001..00011x */
-static VLCtab PMBtab1[8] = {
- {ERROR,0},
- {MACROBLOCK_QUANT|MACROBLOCK_INTRA,6},
- {MACROBLOCK_QUANT|MACROBLOCK_PATTERN,5}, {MACROBLOCK_QUANT|MACROBLOCK_PATTERN,5},
- {MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,5}, {MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,5},
- {MACROBLOCK_INTRA,5}, {MACROBLOCK_INTRA,5}
-};
-
-/* Table B-4, macroblock_type in B-pictures, codes 0010..11xx */
-static VLCtab BMBtab0[16] = {
- {ERROR,0},
- {ERROR,0},
- {MACROBLOCK_MOTION_FORWARD,4},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,4},
- {MACROBLOCK_MOTION_BACKWARD,3},
- {MACROBLOCK_MOTION_BACKWARD,3},
- {MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,3},
- {MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,3},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,2}
-};
-
-/* Table B-4, macroblock_type in B-pictures, codes 000001..00011x */
-static VLCtab BMBtab1[8] = {
- {ERROR,0},
- {MACROBLOCK_QUANT|MACROBLOCK_INTRA,6},
- {MACROBLOCK_QUANT|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,6},
- {MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,6},
- {MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,5},
- {MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,5},
- {MACROBLOCK_INTRA,5},
- {MACROBLOCK_INTRA,5}
-};
-
-/* Table B-5, macroblock_type in spat. scal. I-pictures, codes 0001..1xxx */
-static VLCtab spIMBtab[16] = {
- {ERROR,0},
- {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS,4},
- {MACROBLOCK_QUANT|MACROBLOCK_INTRA,4},
- {MACROBLOCK_INTRA,4},
- {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_QUANT|MACROBLOCK_PATTERN,2}, {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_QUANT|MACROBLOCK_PATTERN,2},
- {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_QUANT|MACROBLOCK_PATTERN,2}, {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_QUANT|MACROBLOCK_PATTERN,2},
- {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_PATTERN,1}, {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_PATTERN,1},
- {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_PATTERN,1}, {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_PATTERN,1},
- {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_PATTERN,1}, {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_PATTERN,1},
- {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_PATTERN,1}, {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_PATTERN,1}
-};
-
-/* Table B-6, macroblock_type in spat. scal. P-pictures, codes 0010..11xx */
-static VLCtab spPMBtab0[16] =
-{
- {ERROR,0},
- {ERROR,0},
- {MACROBLOCK_MOTION_FORWARD,4},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_MOTION_FORWARD,4},
- {MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,3}, {MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,3},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,3}, {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,3},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,2},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,2},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,2},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,2},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,2}
-};
-
-/* Table B-6, macroblock_type in spat. scal. P-pictures, codes 0000010..000111x */
-static VLCtab spPMBtab1[16] = {
- {ERROR,0},
- {ERROR,0},
- {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_QUANT|MACROBLOCK_PATTERN,7},
- {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS,7},
- {MACROBLOCK_PATTERN,7},
- {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_PATTERN,7},
- {MACROBLOCK_QUANT|MACROBLOCK_INTRA,7},
- {MACROBLOCK_INTRA,7},
- {MACROBLOCK_QUANT|MACROBLOCK_PATTERN,6},
- {MACROBLOCK_QUANT|MACROBLOCK_PATTERN,6},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_QUANT|MACROBLOCK_PATTERN,6},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_QUANT|MACROBLOCK_PATTERN,6},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG,6},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG,6},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_PATTERN,6},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_PATTERN,6}
-};
-
-/* Table B-7, macroblock_type in spat. scal. B-pictures, codes 0010..11xx */
-static VLCtab spBMBtab0[14] = {
- {MACROBLOCK_MOTION_FORWARD,4},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,4},
- {MACROBLOCK_MOTION_BACKWARD,3},
- {MACROBLOCK_MOTION_BACKWARD,3},
- {MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,3},
- {MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,3},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,2},
- {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,2}
-};
-
-/* Table B-7, macroblock_type in spat. scal. B-pictures, codes 0000100..000111x */
-static VLCtab spBMBtab1[12] = {
- {MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,7},
- {MACROBLOCK_QUANT|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,7},
- {MACROBLOCK_INTRA,7},
- {MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,7},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_MOTION_FORWARD,6},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_MOTION_FORWARD,6},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,6},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,6},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_MOTION_BACKWARD,6},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_MOTION_BACKWARD,6},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,6},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,6}
-};
-
-/* Table B-7, macroblock_type in spat. scal. B-pictures, codes 00000100x..000001111 */
-static VLCtab spBMBtab2[8] = {
- {MACROBLOCK_QUANT|MACROBLOCK_INTRA,8},
- {MACROBLOCK_QUANT|MACROBLOCK_INTRA,8},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,8},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,8},
- {SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG|MACROBLOCK_QUANT|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,9},
- {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_QUANT|MACROBLOCK_PATTERN,9},
- {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS,9},
- {PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS|MACROBLOCK_PATTERN,9}
-};
-
-/* Table B-8, macroblock_type in spat. scal. B-pictures, codes 001..1xx */
-static VLCtab SNRMBtab[8] = {
- {ERROR,0},
- {0,3},
- {MACROBLOCK_QUANT|MACROBLOCK_PATTERN,2},
- {MACROBLOCK_QUANT|MACROBLOCK_PATTERN,2},
- {MACROBLOCK_PATTERN,1},
- {MACROBLOCK_PATTERN,1},
- {MACROBLOCK_PATTERN,1},
- {MACROBLOCK_PATTERN,1}
-};
-
-/* Table B-10, motion_code, codes 0001 ... 01xx */
-static VLCtab MVtab0[8] =
-{ {ERROR,0}, {3,3}, {2,2}, {2,2}, {1,1}, {1,1}, {1,1}, {1,1}
-};
-
-/* Table B-10, motion_code, codes 0000011 ... 000011x */
-static VLCtab MVtab1[8] =
-{ {ERROR,0}, {ERROR,0}, {ERROR,0}, {7,6}, {6,6}, {5,6}, {4,5}, {4,5}
-};
-
-/* Table B-10, motion_code, codes 0000001100 ... 000001011x */
-static VLCtab MVtab2[12] =
-{ {16,9}, {15,9}, {14,9}, {13,9},
- {12,9}, {11,9}, {10,8}, {10,8},
- {9,8}, {9,8}, {8,8}, {8,8}
-};
-
-/* Table B-9, coded_block_pattern, codes 01000 ... 111xx */
-static VLCtab CBPtab0[32] =
-{ {ERROR,0}, {ERROR,0}, {ERROR,0}, {ERROR,0},
- {ERROR,0}, {ERROR,0}, {ERROR,0}, {ERROR,0},
- {62,5}, {2,5}, {61,5}, {1,5}, {56,5}, {52,5}, {44,5}, {28,5},
- {40,5}, {20,5}, {48,5}, {12,5}, {32,4}, {32,4}, {16,4}, {16,4},
- {8,4}, {8,4}, {4,4}, {4,4}, {60,3}, {60,3}, {60,3}, {60,3}
-};
-
-/* Table B-9, coded_block_pattern, codes 00000100 ... 001111xx */
-static VLCtab CBPtab1[64] =
-{ {ERROR,0}, {ERROR,0}, {ERROR,0}, {ERROR,0},
- {58,8}, {54,8}, {46,8}, {30,8},
- {57,8}, {53,8}, {45,8}, {29,8}, {38,8}, {26,8}, {37,8}, {25,8},
- {43,8}, {23,8}, {51,8}, {15,8}, {42,8}, {22,8}, {50,8}, {14,8},
- {41,8}, {21,8}, {49,8}, {13,8}, {35,8}, {19,8}, {11,8}, {7,8},
- {34,7}, {34,7}, {18,7}, {18,7}, {10,7}, {10,7}, {6,7}, {6,7},
- {33,7}, {33,7}, {17,7}, {17,7}, {9,7}, {9,7}, {5,7}, {5,7},
- {63,6}, {63,6}, {63,6}, {63,6}, {3,6}, {3,6}, {3,6}, {3,6},
- {36,6}, {36,6}, {36,6}, {36,6}, {24,6}, {24,6}, {24,6}, {24,6}
-};
-
-/* Table B-9, coded_block_pattern, codes 000000001 ... 000000111 */
-static VLCtab CBPtab2[8] =
-{ {ERROR,0}, {0,9}, {39,9}, {27,9}, {59,9}, {55,9}, {47,9}, {31,9}
-};
-
-/* Table B-1, macroblock_address_increment, codes 00010 ... 011xx */
-static VLCtab MBAtab1[16] =
-{ {ERROR,0}, {ERROR,0}, {7,5}, {6,5}, {5,4}, {5,4}, {4,4}, {4,4},
- {3,3}, {3,3}, {3,3}, {3,3}, {2,3}, {2,3}, {2,3}, {2,3}
-};
-
-/* Table B-1, macroblock_address_increment, codes 00000011000 ... 0000111xxxx */
-static VLCtab MBAtab2[104] =
-{
- {33,11}, {32,11}, {31,11}, {30,11}, {29,11}, {28,11}, {27,11}, {26,11},
- {25,11}, {24,11}, {23,11}, {22,11}, {21,10}, {21,10}, {20,10}, {20,10},
- {19,10}, {19,10}, {18,10}, {18,10}, {17,10}, {17,10}, {16,10}, {16,10},
- {15,8}, {15,8}, {15,8}, {15,8}, {15,8}, {15,8}, {15,8}, {15,8},
- {14,8}, {14,8}, {14,8}, {14,8}, {14,8}, {14,8}, {14,8}, {14,8},
- {13,8}, {13,8}, {13,8}, {13,8}, {13,8}, {13,8}, {13,8}, {13,8},
- {12,8}, {12,8}, {12,8}, {12,8}, {12,8}, {12,8}, {12,8}, {12,8},
- {11,8}, {11,8}, {11,8}, {11,8}, {11,8}, {11,8}, {11,8}, {11,8},
- {10,8}, {10,8}, {10,8}, {10,8}, {10,8}, {10,8}, {10,8}, {10,8},
- {9,7}, {9,7}, {9,7}, {9,7}, {9,7}, {9,7}, {9,7}, {9,7},
- {9,7}, {9,7}, {9,7}, {9,7}, {9,7}, {9,7}, {9,7}, {9,7},
- {8,7}, {8,7}, {8,7}, {8,7}, {8,7}, {8,7}, {8,7}, {8,7},
- {8,7}, {8,7}, {8,7}, {8,7}, {8,7}, {8,7}, {8,7}, {8,7}
-};
-
-/* Table B-12, dct_dc_size_luminance, codes 00xxx ... 11110 */
-static VLCtab DClumtab0[32] =
-{ {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2},
- {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2},
- {0, 3}, {0, 3}, {0, 3}, {0, 3}, {3, 3}, {3, 3}, {3, 3}, {3, 3},
- {4, 3}, {4, 3}, {4, 3}, {4, 3}, {5, 4}, {5, 4}, {6, 5}, {ERROR, 0}
-};
-
-/* Table B-12, dct_dc_size_luminance, codes 111110xxx ... 111111111 */
-static VLCtab DClumtab1[16] =
-{ {7, 6}, {7, 6}, {7, 6}, {7, 6}, {7, 6}, {7, 6}, {7, 6}, {7, 6},
- {8, 7}, {8, 7}, {8, 7}, {8, 7}, {9, 8}, {9, 8}, {10,9}, {11,9}
-};
-
-/* Table B-13, dct_dc_size_chrominance, codes 00xxx ... 11110 */
-static VLCtab DCchromtab0[32] =
-{ {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2},
- {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2},
- {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2},
- {3, 3}, {3, 3}, {3, 3}, {3, 3}, {4, 4}, {4, 4}, {5, 5}, {ERROR, 0}
-};
-
-/* Table B-13, dct_dc_size_chrominance, codes 111110xxxx ... 1111111111 */
-static VLCtab DCchromtab1[32] =
-{ {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6},
- {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6},
- {7, 7}, {7, 7}, {7, 7}, {7, 7}, {7, 7}, {7, 7}, {7, 7}, {7, 7},
- {8, 8}, {8, 8}, {8, 8}, {8, 8}, {9, 9}, {9, 9}, {10,10}, {11,10}
-};
-
-/* Table B-14, DCT coefficients table zero,
- * codes 0100 ... 1xxx (used for first (DC) coefficient)
- */
-DCTtab DCTtabfirst[12] =
-{
- {0,2,4}, {2,1,4}, {1,1,3}, {1,1,3},
- {0,1,1}, {0,1,1}, {0,1,1}, {0,1,1},
- {0,1,1}, {0,1,1}, {0,1,1}, {0,1,1}
-};
-
-/* Table B-14, DCT coefficients table zero,
- * codes 0100 ... 1xxx (used for all other coefficients)
- */
-DCTtab DCTtabnext[12] =
-{
- {0,2,4}, {2,1,4}, {1,1,3}, {1,1,3},
- {64,0,2}, {64,0,2}, {64,0,2}, {64,0,2}, /* EOB */
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2}
-};
-
-/* Table B-14, DCT coefficients table zero,
- * codes 000001xx ... 00111xxx
- */
-DCTtab DCTtab0[60] =
-{
- {65,0,6}, {65,0,6}, {65,0,6}, {65,0,6}, /* Escape */
- {2,2,7}, {2,2,7}, {9,1,7}, {9,1,7},
- {0,4,7}, {0,4,7}, {8,1,7}, {8,1,7},
- {7,1,6}, {7,1,6}, {7,1,6}, {7,1,6},
- {6,1,6}, {6,1,6}, {6,1,6}, {6,1,6},
- {1,2,6}, {1,2,6}, {1,2,6}, {1,2,6},
- {5,1,6}, {5,1,6}, {5,1,6}, {5,1,6},
- {13,1,8}, {0,6,8}, {12,1,8}, {11,1,8},
- {3,2,8}, {1,3,8}, {0,5,8}, {10,1,8},
- {0,3,5}, {0,3,5}, {0,3,5}, {0,3,5},
- {0,3,5}, {0,3,5}, {0,3,5}, {0,3,5},
- {4,1,5}, {4,1,5}, {4,1,5}, {4,1,5},
- {4,1,5}, {4,1,5}, {4,1,5}, {4,1,5},
- {3,1,5}, {3,1,5}, {3,1,5}, {3,1,5},
- {3,1,5}, {3,1,5}, {3,1,5}, {3,1,5}
-};
-
-/* Table B-15, DCT coefficients table one,
- * codes 000001xx ... 11111111
-*/
-DCTtab DCTtab0a[252] =
-{
- {65,0,6}, {65,0,6}, {65,0,6}, {65,0,6}, /* Escape */
- {7,1,7}, {7,1,7}, {8,1,7}, {8,1,7},
- {6,1,7}, {6,1,7}, {2,2,7}, {2,2,7},
- {0,7,6}, {0,7,6}, {0,7,6}, {0,7,6},
- {0,6,6}, {0,6,6}, {0,6,6}, {0,6,6},
- {4,1,6}, {4,1,6}, {4,1,6}, {4,1,6},
- {5,1,6}, {5,1,6}, {5,1,6}, {5,1,6},
- {1,5,8}, {11,1,8}, {0,11,8}, {0,10,8},
- {13,1,8}, {12,1,8}, {3,2,8}, {1,4,8},
- {2,1,5}, {2,1,5}, {2,1,5}, {2,1,5},
- {2,1,5}, {2,1,5}, {2,1,5}, {2,1,5},
- {1,2,5}, {1,2,5}, {1,2,5}, {1,2,5},
- {1,2,5}, {1,2,5}, {1,2,5}, {1,2,5},
- {3,1,5}, {3,1,5}, {3,1,5}, {3,1,5},
- {3,1,5}, {3,1,5}, {3,1,5}, {3,1,5},
- {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
- {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
- {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
- {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
- {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
- {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
- {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
- {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
- {64,0,4}, {64,0,4}, {64,0,4}, {64,0,4}, /* EOB */
- {64,0,4}, {64,0,4}, {64,0,4}, {64,0,4},
- {64,0,4}, {64,0,4}, {64,0,4}, {64,0,4},
- {64,0,4}, {64,0,4}, {64,0,4}, {64,0,4},
- {0,3,4}, {0,3,4}, {0,3,4}, {0,3,4},
- {0,3,4}, {0,3,4}, {0,3,4}, {0,3,4},
- {0,3,4}, {0,3,4}, {0,3,4}, {0,3,4},
- {0,3,4}, {0,3,4}, {0,3,4}, {0,3,4},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
- {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
- {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
- {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
- {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
- {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
- {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
- {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
- {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
- {0,4,5}, {0,4,5}, {0,4,5}, {0,4,5},
- {0,4,5}, {0,4,5}, {0,4,5}, {0,4,5},
- {0,5,5}, {0,5,5}, {0,5,5}, {0,5,5},
- {0,5,5}, {0,5,5}, {0,5,5}, {0,5,5},
- {9,1,7}, {9,1,7}, {1,3,7}, {1,3,7},
- {10,1,7}, {10,1,7}, {0,8,7}, {0,8,7},
- {0,9,7}, {0,9,7}, {0,12,8}, {0,13,8},
- {2,3,8}, {4,2,8}, {0,14,8}, {0,15,8}
-};
-
-/* Table B-14, DCT coefficients table zero,
- * codes 0000001000 ... 0000001111
- */
-DCTtab DCTtab1[8] =
-{
- {16,1,10}, {5,2,10}, {0,7,10}, {2,3,10},
- {1,4,10}, {15,1,10}, {14,1,10}, {4,2,10}
-};
-
-/* Table B-15, DCT coefficients table one,
- * codes 000000100x ... 000000111x
- */
-DCTtab DCTtab1a[8] =
-{
- {5,2,9}, {5,2,9}, {14,1,9}, {14,1,9},
- {2,4,10}, {16,1,10}, {15,1,9}, {15,1,9}
-};
-
-/* Table B-14/15, DCT coefficients table zero / one,
- * codes 000000010000 ... 000000011111
- */
-DCTtab DCTtab2[16] =
-{
- {0,11,12}, {8,2,12}, {4,3,12}, {0,10,12},
- {2,4,12}, {7,2,12}, {21,1,12}, {20,1,12},
- {0,9,12}, {19,1,12}, {18,1,12}, {1,5,12},
- {3,3,12}, {0,8,12}, {6,2,12}, {17,1,12}
-};
-
-/* Table B-14/15, DCT coefficients table zero / one,
- * codes 0000000010000 ... 0000000011111
- */
-DCTtab DCTtab3[16] =
-{
- {10,2,13}, {9,2,13}, {5,3,13}, {3,4,13},
- {2,5,13}, {1,7,13}, {1,6,13}, {0,15,13},
- {0,14,13}, {0,13,13}, {0,12,13}, {26,1,13},
- {25,1,13}, {24,1,13}, {23,1,13}, {22,1,13}
-};
-
-/* Table B-14/15, DCT coefficients table zero / one,
- * codes 00000000010000 ... 00000000011111
- */
-DCTtab DCTtab4[16] =
-{
- {0,31,14}, {0,30,14}, {0,29,14}, {0,28,14},
- {0,27,14}, {0,26,14}, {0,25,14}, {0,24,14},
- {0,23,14}, {0,22,14}, {0,21,14}, {0,20,14},
- {0,19,14}, {0,18,14}, {0,17,14}, {0,16,14}
-};
-
-/* Table B-14/15, DCT coefficients table zero / one,
- * codes 000000000010000 ... 000000000011111
- */
-DCTtab DCTtab5[16] =
-{
- {0,40,15}, {0,39,15}, {0,38,15}, {0,37,15},
- {0,36,15}, {0,35,15}, {0,34,15}, {0,33,15},
- {0,32,15}, {1,14,15}, {1,13,15}, {1,12,15},
- {1,11,15}, {1,10,15}, {1,9,15}, {1,8,15}
-};
-
-/* Table B-14/15, DCT coefficients table zero / one,
- * codes 0000000000010000 ... 0000000000011111
- */
-DCTtab DCTtab6[16] =
-{
- {1,18,16}, {1,17,16}, {1,16,16}, {1,15,16},
- {6,3,16}, {16,2,16}, {15,2,16}, {14,2,16},
- {13,2,16}, {12,2,16}, {11,2,16}, {31,1,16},
- {30,1,16}, {29,1,16}, {28,1,16}, {27,1,16}
-};
-
Index: start/mpeg2/mpeg2dec.h
===================================================================
--- start/mpeg2/mpeg2dec.h (revision 1087)
+++ start/mpeg2/mpeg2dec.h (nonexistent)
@@ -1,129 +0,0 @@
-/* mpeg2dec.h, MPEG specific defines */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-#define ERROR (-1)
-
-#define PICTURE_START_CODE 0x100
-#define SLICE_START_CODE_MIN 0x101
-#define SLICE_START_CODE_MAX 0x1AF
-#define USER_DATA_START_CODE 0x1B2
-#define SEQUENCE_HEADER_CODE 0x1B3
-#define SEQUENCE_ERROR_CODE 0x1B4
-#define EXTENSION_START_CODE 0x1B5
-#define SEQUENCE_END_CODE 0x1B7
-#define GROUP_START_CODE 0x1B8
-#define SYSTEM_START_CODE_MIN 0x1B9
-#define SYSTEM_START_CODE_MAX 0x1FF
-
-#define ISO_END_CODE 0x1B9
-#define PACK_START_CODE 0x1BA
-#define SYSTEM_START_CODE 0x1BB
-
-#define VIDEO_ELEMENTARY_STREAM 0x1e0
-
-/* scalable_mode */
-#define SC_NONE 0
-#define SC_DP 1
-#define SC_SPAT 2
-#define SC_SNR 3
-#define SC_TEMP 4
-
-/* picture coding type */
-#define I_TYPE 1
-#define P_TYPE 2
-#define B_TYPE 3
-#define D_TYPE 4
-
-/* picture structure */
-#define TOP_FIELD 1
-#define BOTTOM_FIELD 2
-#define FRAME_PICTURE 3
-
-/* macroblock type */
-#define MACROBLOCK_INTRA 1
-#define MACROBLOCK_PATTERN 2
-#define MACROBLOCK_MOTION_BACKWARD 4
-#define MACROBLOCK_MOTION_FORWARD 8
-#define MACROBLOCK_QUANT 16
-#define SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG 32
-#define PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS 64
-
-
-/* motion_type */
-#define MC_FIELD 1
-#define MC_FRAME 2
-#define MC_16X8 2
-#define MC_DMV 3
-
-/* mv_format */
-#define MV_FIELD 0
-#define MV_FRAME 1
-
-/* chroma_format */
-#define CHROMA420 1
-#define CHROMA422 2
-#define CHROMA444 3
-
-/* extension start code IDs */
-
-#define SEQUENCE_EXTENSION_ID 1
-#define SEQUENCE_DISPLAY_EXTENSION_ID 2
-#define QUANT_MATRIX_EXTENSION_ID 3
-#define COPYRIGHT_EXTENSION_ID 4
-#define SEQUENCE_SCALABLE_EXTENSION_ID 5
-#define PICTURE_DISPLAY_EXTENSION_ID 7
-#define PICTURE_CODING_EXTENSION_ID 8
-#define PICTURE_SPATIAL_SCALABLE_EXTENSION_ID 9
-#define PICTURE_TEMPORAL_SCALABLE_EXTENSION_ID 10
-
-#define ZIG_ZAG 0
-
-#define PROFILE_422 (128+5)
-#define MAIN_LEVEL 8
-
-/* Layers: used by Verbose_Flag, Verifier_Flag, Stats_Flag, and Trace_Flag */
-#define NO_LAYER 0
-#define SEQUENCE_LAYER 1
-#define PICTURE_LAYER 2
-#define SLICE_LAYER 3
-#define MACROBLOCK_LAYER 4
-#define BLOCK_LAYER 5
-#define EVENT_LAYER 6
-#define ALL_LAYERS 7
-
-
-
-#define FILENAME_LENGTH 256
-
-
-
-
-#define MB_WEIGHT 32
-#define MB_CLASS4 64
-
Index: start/mpeg2/makefile
===================================================================
--- start/mpeg2/makefile (revision 1087)
+++ start/mpeg2/makefile (nonexistent)
@@ -1,19 +0,0 @@
-#
-# The mpeg library
-#
-
-# (see sources for copyrights)
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= mpeg2dec
-
-include $(BASE)/config/example.mk
-
-OBJS= "initfile.o jetctrl.o getpic.o motion.o getvlc.o gethdr.o getblk.o getbits.o store.o recon.o spatscal.o idct.o idctref.o systems.o subspic.o verify.o gvideo.o"
-
-mpeg2dec:
- make -f $(SUBMAKE) APP=mpeg2dec INIT= OTHEROBJS=$(OBJS) OTHERINCL=
Index: start/mpeg2/examples
===================================================================
--- start/mpeg2/examples (revision 1087)
+++ start/mpeg2/examples (nonexistent)
@@ -1,49 +0,0 @@
-EXAMPLES:
-
-1. to decode a bitstream with double precision IDCT, such as
- to create a reference reconstruction set of frames:
-
- mpeg2decode -r -f -o0 rec%d -b bitstream.mpg
-
-2. to decode a bitstream with fast integer IDCT, such as
- to create a test reconstruction set of frames:
-
- mpeg2decode -f -o0 rec%d -b bitstream.mpg
-
-3. To substitute reference pictures with external reference
- pictures (ref%d):
-
- mpeg2decode -f -x ref%d -b bitstream.mpg -o0 rec%d
-
-
-4. Same as 3. only using a single large concatenated file for the
- sequence of reconstruction frames.
-
- mpeg2decode -f -g -x ref%d bitstream.mpg -o0 rec%d
-
-5. Decode an SNR enhancement bitstream at the same time as base layer
- stream:
-
- mpeg2decode -o0 rec%d -e snr_bitstream.mpg -b base_bitstream.mpg
-
-6. Decode a Spatially scalable bitstream
-
- Step 1: create lower layer reconstruction
-
- mpeg2decode -f -o0 llrec%d -b base_layer.mpg
-
- Step 2: decode enhancement bitstream, combined reconstruction.
-
- mpeg2decode -f -l llrec%d -b enhancement_layer.mpg -o0 rec%d
-
-------------
- where:
- -o0 specifies .Y, .U, .V input
- -f specifies field interleaved format
- -b is the bitstream flag
- -g specifies substitute file is a large concatendated one.
- -e substitution flag
- ref.pic filename of substitution sequence
- bitstream.mpg bitstream
- test%d output file pattern
-
Index: start/mpeg2/ieee1180
===================================================================
--- start/mpeg2/ieee1180 (revision 1087)
+++ start/mpeg2/ieee1180 (nonexistent)
@@ -1,245 +0,0 @@
-IEEE 1180 report for mpeg2decode fast integer IDCT:
-
-From stefan@lis.e-technik.tu-muenchen.de Thu May 26 08:18:36 1994
-
-IEEE test conditions: -L = -256, +H = 255, sign = 1, #iters = 10000
-Peak absolute values of errors:
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
-Worst peak error = 1 (meets spec limit 1)
-
-Mean square errors:
- 0.0058 0.0118 0.0097 0.0057 0.0055 0.0117 0.0120 0.0063
- 0.0106 0.0157 0.0142 0.0099 0.0115 0.0168 0.0154 0.0123
- 0.0128 0.0156 0.0152 0.0095 0.0115 0.0147 0.0173 0.0096
- 0.0055 0.0115 0.0103 0.0078 0.0069 0.0092 0.0113 0.0071
- 0.0057 0.0134 0.0123 0.0067 0.0050 0.0109 0.0128 0.0065
- 0.0101 0.0172 0.0159 0.0093 0.0097 0.0148 0.0163 0.0130
- 0.0113 0.0171 0.0148 0.0103 0.0110 0.0153 0.0149 0.0093
- 0.0064 0.0123 0.0104 0.0065 0.0064 0.0111 0.0099 0.0066
-Worst pmse = 0.017300 (meets spec limit 0.06)
-Overall mse = 0.010998 (meets spec limit 0.02)
-
-Mean errors:
- 0.0014 0.0004 0.0003 0.0017 0.0003 0.0011 0.0010 -0.0001
- 0.0000 0.0003 0.0010 0.0003 0.0007 -0.0006 0.0004 0.0033
- 0.0000 -0.0008 -0.0006 0.0009 -0.0015 -0.0013 -0.0017 -0.0008
- -0.0017 0.0019 -0.0005 0.0010 0.0005 0.0000 -0.0017 -0.0001
- 0.0007 0.0034 0.0015 0.0021 0.0016 0.0007 -0.0006 0.0011
- -0.0007 0.0004 -0.0001 0.0003 0.0003 0.0004 0.0031 -0.0010
- 0.0009 -0.0005 -0.0004 0.0003 0.0008 -0.0015 -0.0007 -0.0007
- 0.0024 0.0001 0.0018 -0.0003 -0.0006 -0.0001 0.0009 0.0018
-Worst mean error = 0.003400 (meets spec limit 0.015)
-Overall mean error = 0.000352 (meets spec limit 0.0015)
-
-0 elements of IDCT(0) were not zero
-
-
-25.8u 0.1s 0:27 95% 0+216k 0+2io 0pf+0w
-IEEE test conditions: -L = -5, +H = 5, sign = 1, #iters = 10000
-Peak absolute values of errors:
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
-Worst peak error = 1 (meets spec limit 1)
-
-Mean square errors:
- 0.0008 0.0008 0.0006 0.0006 0.0006 0.0006 0.0007 0.0005
- 0.0005 0.0003 0.0005 0.0001 0.0003 0.0007 0.0007 0.0004
- 0.0004 0.0012 0.0011 0.0007 0.0010 0.0008 0.0010 0.0003
- 0.0004 0.0004 0.0001 0.0002 0.0004 0.0007 0.0009 0.0004
- 0.0005 0.0005 0.0004 0.0002 0.0006 0.0004 0.0012 0.0003
- 0.0008 0.0006 0.0007 0.0007 0.0003 0.0012 0.0011 0.0004
- 0.0006 0.0002 0.0001 0.0002 0.0005 0.0005 0.0007 0.0005
- 0.0008 0.0004 0.0006 0.0003 0.0008 0.0006 0.0002 0.0003
-Worst pmse = 0.001200 (meets spec limit 0.06)
-Overall mse = 0.000561 (meets spec limit 0.02)
-
-Mean errors:
- 0.0008 0.0006 0.0000 0.0006 0.0006 0.0002 0.0005 0.0003
- 0.0005 0.0003 0.0003 0.0001 0.0001 0.0001 0.0005 0.0002
- 0.0004 0.0006 0.0005 0.0007 0.0006 0.0004 0.0002 -0.0001
- 0.0002 0.0002 0.0001 0.0002 0.0004 0.0005 0.0003 0.0002
- 0.0003 0.0003 0.0004 0.0002 0.0006 0.0000 0.0002 0.0003
- -0.0002 0.0004 0.0007 0.0005 0.0001 0.0010 0.0005 -0.0002
- 0.0004 0.0000 0.0001 0.0000 0.0001 0.0003 0.0005 0.0003
- 0.0006 0.0000 0.0002 0.0003 0.0004 0.0002 0.0002 0.0001
-Worst mean error = 0.001000 (meets spec limit 0.015)
-Overall mean error = 0.000311 (meets spec limit 0.0015)
-
-0 elements of IDCT(0) were not zero
-
-
-25.7u 0.1s 0:27 95% 0+216k 0+3io 0pf+0w
-IEEE test conditions: -L = -300, +H = 300, sign = 1, #iters = 10000
-Peak absolute values of errors:
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
-Worst peak error = 1 (meets spec limit 1)
-
-Mean square errors:
- 0.0068 0.0097 0.0119 0.0064 0.0065 0.0105 0.0112 0.0050
- 0.0088 0.0130 0.0128 0.0088 0.0111 0.0152 0.0139 0.0109
- 0.0114 0.0127 0.0157 0.0099 0.0114 0.0137 0.0153 0.0109
- 0.0052 0.0097 0.0120 0.0060 0.0067 0.0114 0.0099 0.0065
- 0.0062 0.0096 0.0091 0.0064 0.0076 0.0092 0.0111 0.0058
- 0.0096 0.0139 0.0166 0.0112 0.0092 0.0141 0.0122 0.0103
- 0.0121 0.0138 0.0131 0.0089 0.0108 0.0172 0.0127 0.0104
- 0.0070 0.0109 0.0092 0.0055 0.0057 0.0128 0.0102 0.0069
-Worst pmse = 0.017200 (meets spec limit 0.06)
-Overall mse = 0.010316 (meets spec limit 0.02)
-
-Mean errors:
- -0.0010 0.0015 0.0001 -0.0004 0.0005 -0.0001 0.0008 0.0000
- 0.0004 0.0016 0.0006 0.0000 -0.0001 0.0004 0.0011 0.0001
- -0.0008 0.0013 0.0015 0.0003 0.0010 0.0005 -0.0005 0.0021
- 0.0006 0.0013 -0.0004 0.0000 0.0007 -0.0002 -0.0009 0.0003
- 0.0004 0.0004 -0.0001 -0.0004 0.0014 0.0018 0.0017 -0.0002
- 0.0024 0.0007 -0.0002 -0.0018 0.0004 0.0001 0.0010 0.0009
- 0.0001 -0.0002 0.0005 0.0003 -0.0016 0.0004 0.0013 -0.0006
- -0.0012 -0.0017 -0.0008 0.0003 0.0001 0.0018 0.0008 -0.0005
-Worst mean error = 0.002400 (meets spec limit 0.015)
-Overall mean error = 0.000309 (meets spec limit 0.0015)
-
-0 elements of IDCT(0) were not zero
-
-
-25.8u 0.0s 0:27 95% 0+216k 0+4io 0pf+0w
-IEEE test conditions: -L = -256, +H = 255, sign = -1, #iters = 10000
-Peak absolute values of errors:
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
-Worst peak error = 1 (meets spec limit 1)
-
-Mean square errors:
- 0.0061 0.0118 0.0097 0.0057 0.0058 0.0113 0.0115 0.0061
- 0.0105 0.0159 0.0138 0.0097 0.0113 0.0166 0.0149 0.0123
- 0.0129 0.0155 0.0152 0.0095 0.0112 0.0145 0.0173 0.0094
- 0.0059 0.0112 0.0105 0.0076 0.0071 0.0091 0.0113 0.0073
- 0.0061 0.0130 0.0128 0.0066 0.0051 0.0108 0.0126 0.0067
- 0.0099 0.0168 0.0161 0.0095 0.0100 0.0149 0.0166 0.0132
- 0.0113 0.0171 0.0150 0.0101 0.0110 0.0157 0.0152 0.0094
- 0.0062 0.0121 0.0102 0.0065 0.0061 0.0112 0.0099 0.0065
-Worst pmse = 0.017300 (meets spec limit 0.06)
-Overall mse = 0.010980 (meets spec limit 0.02)
-
-Mean errors:
- -0.0005 0.0006 0.0001 -0.0007 0.0006 -0.0003 -0.0003 0.0011
- 0.0011 0.0003 -0.0002 0.0005 -0.0001 0.0008 0.0001 -0.0027
- 0.0013 0.0015 0.0010 -0.0001 0.0020 0.0019 0.0025 0.0016
- 0.0023 -0.0008 0.0011 -0.0002 0.0007 0.0003 0.0019 0.0009
- -0.0003 -0.0030 -0.0002 -0.0012 -0.0009 0.0000 0.0010 -0.0005
- 0.0009 0.0002 0.0015 0.0007 0.0002 0.0001 -0.0026 0.0018
- 0.0001 0.0011 0.0010 0.0005 -0.0004 0.0023 0.0014 0.0014
- -0.0014 0.0007 -0.0014 0.0009 0.0013 0.0006 -0.0007 -0.0007
-Worst mean error = 0.003000 (meets spec limit 0.015)
-Overall mean error = 0.000355 (meets spec limit 0.0015)
-
-0 elements of IDCT(0) were not zero
-
-
-25.8u 0.1s 0:27 95% 0+216k 0+3io 0pf+0w
-IEEE test conditions: -L = -5, +H = 5, sign = -1, #iters = 10000
-Peak absolute values of errors:
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
-Worst peak error = 1 (meets spec limit 1)
-
-Mean square errors:
- 0.0010 0.0007 0.0008 0.0004 0.0008 0.0004 0.0005 0.0007
- 0.0005 0.0007 0.0005 0.0004 0.0006 0.0005 0.0005 0.0003
- 0.0003 0.0011 0.0009 0.0007 0.0008 0.0006 0.0011 0.0006
- 0.0003 0.0004 0.0002 0.0002 0.0003 0.0006 0.0008 0.0006
- 0.0004 0.0005 0.0006 0.0006 0.0003 0.0007 0.0007 0.0003
- 0.0013 0.0006 0.0008 0.0005 0.0004 0.0006 0.0008 0.0004
- 0.0003 0.0003 0.0003 0.0002 0.0005 0.0004 0.0006 0.0005
- 0.0005 0.0003 0.0006 0.0005 0.0011 0.0007 0.0005 0.0003
-Worst pmse = 0.001300 (meets spec limit 0.06)
-Overall mse = 0.000561 (meets spec limit 0.02)
-
-Mean errors:
- 0.0002 0.0005 0.0008 0.0000 0.0002 0.0004 0.0003 0.0007
- 0.0001 0.0003 0.0003 0.0002 0.0006 0.0003 0.0001 0.0003
- -0.0001 0.0007 0.0003 0.0001 0.0002 0.0006 0.0005 0.0006
- 0.0001 0.0004 0.0002 0.0002 0.0001 0.0002 0.0004 0.0004
- 0.0002 0.0005 0.0006 0.0004 0.0001 0.0005 0.0005 0.0003
- 0.0009 0.0002 0.0000 0.0001 0.0004 0.0000 0.0006 0.0004
- 0.0003 0.0003 0.0003 0.0002 0.0003 0.0000 0.0004 0.0003
- 0.0003 0.0003 0.0004 0.0003 0.0007 0.0005 0.0005 0.0003
-Worst mean error = 0.000900 (meets spec limit 0.015)
-Overall mean error = 0.000333 (meets spec limit 0.0015)
-
-0 elements of IDCT(0) were not zero
-
-
-25.7u 0.1s 0:27 95% 0+216k 0+0io 0pf+0w
-IEEE test conditions: -L = -300, +H = 300, sign = -1, #iters = 10000
-Peak absolute values of errors:
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
-Worst peak error = 1 (meets spec limit 1)
-
-Mean square errors:
- 0.0067 0.0097 0.0118 0.0060 0.0066 0.0107 0.0113 0.0049
- 0.0082 0.0132 0.0128 0.0088 0.0110 0.0152 0.0140 0.0109
- 0.0122 0.0125 0.0156 0.0098 0.0113 0.0139 0.0152 0.0106
- 0.0054 0.0097 0.0121 0.0064 0.0067 0.0110 0.0096 0.0062
- 0.0064 0.0099 0.0090 0.0067 0.0078 0.0089 0.0112 0.0057
- 0.0098 0.0136 0.0165 0.0111 0.0090 0.0138 0.0120 0.0103
- 0.0121 0.0135 0.0131 0.0087 0.0107 0.0168 0.0128 0.0102
- 0.0069 0.0109 0.0091 0.0057 0.0061 0.0125 0.0103 0.0070
-Worst pmse = 0.016800 (meets spec limit 0.06)
-Overall mse = 0.010283 (meets spec limit 0.02)
-
-Mean errors:
- 0.0015 -0.0009 0.0006 0.0012 0.0002 0.0007 -0.0001 0.0005
- 0.0004 -0.0010 0.0000 0.0004 0.0006 0.0004 -0.0004 0.0007
- 0.0018 -0.0009 -0.0006 0.0000 -0.0003 -0.0001 0.0014 -0.0006
- -0.0002 -0.0011 0.0009 0.0004 -0.0003 0.0010 0.0010 0.0000
- 0.0004 0.0001 0.0010 0.0011 -0.0008 -0.0017 -0.0006 0.0009
- -0.0020 0.0000 0.0007 0.0021 0.0002 0.0002 -0.0004 -0.0003
- 0.0003 0.0005 -0.0003 -0.0001 0.0017 0.0002 -0.0004 0.0010
- 0.0015 0.0023 0.0013 0.0003 0.0005 -0.0011 -0.0003 0.0006
-Worst mean error = 0.002300 (meets spec limit 0.015)
-Overall mean error = 0.000252 (meets spec limit 0.0015)
-
-0 elements of IDCT(0) were not zero
-
-
-25.8u 0.0s 0:27 94% 0+216k 0+3io 0pf+0w
-
Index: start/mpeg2/makefile.lib
===================================================================
--- start/mpeg2/makefile.lib (revision 1087)
+++ start/mpeg2/makefile.lib (nonexistent)
@@ -1,54 +0,0 @@
-#
-# The mpeg library
-#
-
-# (see sources for copyrights)
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-LIBRARY = mpeg2
-
-OBJS_PATH = $(BASE)/ports/mpeg2
-
-DECODER_SRC = util.c \
- video.c \
- parseblock.c \
- motionvector.c \
- decoders.c \
- jrevdct.c \
- wrapper.c \
- gdith.c \
- gdithmni.c \
- readfile.c \
- 16bit.c
-
-DITHER_SRC = fs2.c \
- fs2fast.c \
- fs4.c \
- hybrid.c \
- hybriderr.c \
- 2x2.c \
- gray.c \
- mono.c \
- ordered.c \
- ordered2.c \
- mb_ordered.c
-
-SRCS= $(DECODER_SRC) $(DITHER_SRC)
-
-OBJS= mpeg2dec.o getpic.o motion.o getvlc.o \
- gethdr.o getblk.o getbits.o store.o \
- recon.o spatscal.o idct.o idctref.o \
- display.o systems.o subspic.o verify.o
-
-#C_WARN += -Wno-unused -Wno-uninitialized -Wno-implicit-function-declaration \
-# -Wno-switch -Wno-return-type
-
-#C_DEF += -DNOCONTROLS
-#C_INC += -I.
-
-include $(BASE)/config/lib.mk
-
Index: start/mpeg2/getbits.c
===================================================================
--- start/mpeg2/getbits.c (revision 1087)
+++ start/mpeg2/getbits.c (nonexistent)
@@ -1,202 +0,0 @@
-/* getbits.c, bit level routines */
-
-/*
- * All modifications (mpeg2decode -> mpeg2play) are
- * Copyright (C) 1996, Stefan Eckart. All Rights Reserved.
- */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "config.h"
-#include "global.h"
-
-/* initialize buffer, call once before first getbits or showbits */
-
-void Initialize_Buffer()
-{
- ld->Incnt = 0;
- ld->Rdptr = ld->Rdbfr + 2048;
- ld->Rdmax = ld->Rdptr;
-
-#ifdef VERIFY
- /* only the verifier uses this particular bit counter
- * Bitcnt keeps track of the current parser position with respect
- * to the video elementary stream being decoded, regardless
- * of whether or not it is wrapped within a systems layer stream
- */
- ld->Bitcnt = 0;
-#endif
-
- ld->Bfr = 0;
- Flush_Buffer(0); /* fills valid data into bfr */
-}
-
-void Fill_Buffer()
-{
- int Buffer_Level;
-
- Buffer_Level = read(ld->Infile,ld->Rdbfr,2048);
- ld->Rdptr = ld->Rdbfr;
-
- if (System_Stream_Flag)
- ld->Rdmax -= 2048;
-
-
- /* end of the bitstream file */
- if (Buffer_Level < 2048)
- {
- /* just to be safe */
- if (Buffer_Level < 0)
- Buffer_Level = 0;
-
- /* pad until the next to the next 32-bit word boundary */
- while (Buffer_Level & 3)
- ld->Rdbfr[Buffer_Level++] = 0;
-
- /* pad the buffer with sequence end codes */
- while (Buffer_Level < 2048)
- {
- ld->Rdbfr[Buffer_Level++] = SEQUENCE_END_CODE>>24;
- ld->Rdbfr[Buffer_Level++] = SEQUENCE_END_CODE>>16;
- ld->Rdbfr[Buffer_Level++] = SEQUENCE_END_CODE>>8;
- ld->Rdbfr[Buffer_Level++] = SEQUENCE_END_CODE&0xff;
- }
- }
-}
-
-
-/* MPEG-1 system layer demultiplexer */
-
-int Get_Byte()
-{
- while(ld->Rdptr >= ld->Rdbfr+2048)
- {
- read(ld->Infile,ld->Rdbfr,2048);
- ld->Rdptr -= 2048;
- ld->Rdmax -= 2048;
- }
- return *ld->Rdptr++;
-}
-
-/* extract a 16-bit word from the bitstream buffer */
-int Get_Word()
-{
- int Val;
-
- Val = Get_Byte();
- return (Val<<8) | Get_Byte();
-}
-
-
-/* return next n bits (right adjusted) without advancing */
-
-unsigned int Show_Bits(N)
-int N;
-{
- return ld->Bfr >> (32-N);
-}
-
-
-/* return next bit (could be made faster than Get_Bits(1)) */
-
-unsigned int Get_Bits1()
-{
- return Get_Bits(1);
-}
-
-
-/* advance by n bits */
-
-void Flush_Buffer(N)
-int N;
-{
- int Incnt;
-
- ld->Bfr <<= N;
-
- Incnt = ld->Incnt -= N;
-
- if (Incnt <= 24)
- {
- if (System_Stream_Flag && (ld->Rdptr >= ld->Rdmax-4))
- {
- do
- {
- if (ld->Rdptr >= ld->Rdmax)
- Next_Packet();
- ld->Bfr |= Get_Byte() << (24 - Incnt);
- Incnt += 8;
- }
- while (Incnt <= 24);
- }
- else if (ld->Rdptr < ld->Rdbfr+2044)
- {
- do
- {
- ld->Bfr |= *ld->Rdptr++ << (24 - Incnt);
- Incnt += 8;
- }
- while (Incnt <= 24);
- }
- else
- {
- do
- {
- if (ld->Rdptr >= ld->Rdbfr+2048)
- Fill_Buffer();
- ld->Bfr |= *ld->Rdptr++ << (24 - Incnt);
- Incnt += 8;
- }
- while (Incnt <= 24);
- }
- ld->Incnt = Incnt;
- }
-
-#ifdef VERIFY
- ld->Bitcnt += N;
-#endif /* VERIFY */
-
-}
-
-
-/* return next n bits (right adjusted) */
-
-unsigned int Get_Bits(N)
-int N;
-{
- unsigned int Val;
-
- Val = Show_Bits(N);
- Flush_Buffer(N);
-
- return Val;
-}
-
Index: start/mpeg2/store.ori
===================================================================
--- start/mpeg2/store.ori (revision 1087)
+++ start/mpeg2/store.ori (nonexistent)
@@ -1,576 +0,0 @@
-/* store.c, picture output routines */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-
-#include "config.h"
-#include "global.h"
-
-/* private prototypes */
-static void store_one _ANSI_ARGS_((char *outname, unsigned char *src[],
- int offset, int incr, int height));
-static void store_yuv _ANSI_ARGS_((char *outname, unsigned char *src[],
- int offset, int incr, int height));
-static void store_sif _ANSI_ARGS_((char *outname, unsigned char *src[],
- int offset, int incr, int height));
-static void store_ppm_tga _ANSI_ARGS_((char *outname, unsigned char *src[],
- int offset, int incr, int height, int tgaflag));
-static void store_yuv1 _ANSI_ARGS_((char *name, unsigned char *src,
- int offset, int incr, int width, int height));
-static void putbyte _ANSI_ARGS_((int c));
-static void putword _ANSI_ARGS_((int w));
-static void conv422to444 _ANSI_ARGS_((unsigned char *src, unsigned char *dst));
-static void conv420to422 _ANSI_ARGS_((unsigned char *src, unsigned char *dst));
-
-#define OBFRSIZE 4096
-static unsigned char obfr[OBFRSIZE];
-static unsigned char *optr;
-static int outfile;
-
-/*
- * store a picture as either one frame or two fields
- */
-void Write_Frame(src,frame)
-unsigned char *src[];
-int frame;
-{
- char outname[FILENAME_LENGTH];
-
- if (progressive_sequence || progressive_frame || Frame_Store_Flag)
- {
- /* progressive */
- sprintf(outname,Output_Picture_Filename,frame,'f');
- store_one(outname,src,0,Coded_Picture_Width,vertical_size);
- }
- else
- {
- /* interlaced */
- sprintf(outname,Output_Picture_Filename,frame,'a');
- store_one(outname,src,0,Coded_Picture_Width<<1,vertical_size>>1);
-
- sprintf(outname,Output_Picture_Filename,frame,'b');
- store_one(outname,src,
- Coded_Picture_Width,Coded_Picture_Width<<1,vertical_size>>1);
- }
-}
-
-/*
- * store one frame or one field
- */
-static void store_one(outname,src,offset,incr,height)
-char *outname;
-unsigned char *src[];
-int offset, incr, height;
-{
- switch (Output_Type)
- {
- case T_YUV:
- store_yuv(outname,src,offset,incr,height);
- break;
- case T_SIF:
- store_sif(outname,src,offset,incr,height);
- break;
- case T_TGA:
- store_ppm_tga(outname,src,offset,incr,height,1);
- break;
- case T_PPM:
- store_ppm_tga(outname,src,offset,incr,height,0);
- break;
-#ifdef DISPLAY
- case T_X11:
- dither(src);
- break;
-#endif
- default:
- break;
- }
-}
-
-/* separate headerless files for y, u and v */
-static void store_yuv(outname,src,offset,incr,height)
-char *outname;
-unsigned char *src[];
-int offset,incr,height;
-{
- int hsize;
- char tmpname[FILENAME_LENGTH];
-
- hsize = horizontal_size;
-
- sprintf(tmpname,"%s.Y",outname);
- store_yuv1(tmpname,src[0],offset,incr,hsize,height);
-
- if (chroma_format!=CHROMA444)
- {
- offset>>=1; incr>>=1; hsize>>=1;
- }
-
- if (chroma_format==CHROMA420)
- {
- height>>=1;
- }
-
- sprintf(tmpname,"%s.U",outname);
- store_yuv1(tmpname,src[1],offset,incr,hsize,height);
-
- sprintf(tmpname,"%s.V",outname);
- store_yuv1(tmpname,src[2],offset,incr,hsize,height);
-}
-
-/* auxiliary routine */
-static void store_yuv1(name,src,offset,incr,width,height)
-char *name;
-unsigned char *src;
-int offset,incr,width,height;
-{
- int i, j;
- unsigned char *p;
-
- if (!Quiet_Flag)
- fprintf(stderr,"saving %s\n",name);
-
- if ((outfile = open(name,O_CREAT|O_TRUNC|O_WRONLY|O_BINARY,0666))==-1)
- {
- sprintf(Error_Text,"Couldn't create %s\n",name);
- Error(Error_Text);
- }
-
- optr=obfr;
-
- for (i=0; i<height; i++)
- {
- p = src + offset + incr*i;
- for (j=0; j<width; j++)
- putbyte(*p++);
- }
-
- if (optr!=obfr)
- write(outfile,obfr,optr-obfr);
-
- close(outfile);
-}
-
-/*
- * store as headerless file in U,Y,V,Y format
- */
-static void store_sif (outname,src,offset,incr,height)
-char *outname;
-unsigned char *src[];
-int offset, incr, height;
-{
- int i,j;
- unsigned char *py, *pu, *pv;
- static unsigned char *u422, *v422;
-
- if (chroma_format==CHROMA444)
- Error("4:4:4 not supported for SIF format");
-
- if (chroma_format==CHROMA422)
- {
- u422 = src[1];
- v422 = src[2];
- }
- else
- {
- if (!u422)
- {
- if (!(u422 = (unsigned char *)malloc((Coded_Picture_Width>>1)
- *Coded_Picture_Height)))
- Error("malloc failed");
- if (!(v422 = (unsigned char *)malloc((Coded_Picture_Width>>1)
- *Coded_Picture_Height)))
- Error("malloc failed");
- }
-
- conv420to422(src[1],u422);
- conv420to422(src[2],v422);
- }
-
- strcat(outname,".SIF");
-
- if (!Quiet_Flag)
- fprintf(stderr,"saving %s\n",outname);
-
- if ((outfile = open(outname,O_CREAT|O_TRUNC|O_WRONLY|O_BINARY,0666))==-1)
- {
- sprintf(Error_Text,"Couldn't create %s\n",outname);
- Error(Error_Text);
- }
-
- optr = obfr;
-
- for (i=0; i<height; i++)
- {
- py = src[0] + offset + incr*i;
- pu = u422 + (offset>>1) + (incr>>1)*i;
- pv = v422 + (offset>>1) + (incr>>1)*i;
-
- for (j=0; j<horizontal_size; j+=2)
- {
- putbyte(*pu++);
- putbyte(*py++);
- putbyte(*pv++);
- putbyte(*py++);
- }
- }
-
- if (optr!=obfr)
- write(outfile,obfr,optr-obfr);
-
- close(outfile);
-}
-
-/*
- * store as PPM (PBMPLUS) or uncompressed Truevision TGA ('Targa') file
- */
-static void store_ppm_tga(outname,src,offset,incr,height,tgaflag)
-char *outname;
-unsigned char *src[];
-int offset, incr, height;
-int tgaflag;
-{
- int i, j;
- int y, u, v, r, g, b;
- int crv, cbu, cgu, cgv;
- unsigned char *py, *pu, *pv;
- static unsigned char tga24[14] = {0,0,2,0,0,0,0, 0,0,0,0,0,24,32};
- char header[FILENAME_LENGTH];
- static unsigned char *u422, *v422, *u444, *v444;
-
- if (chroma_format==CHROMA444)
- {
- u444 = src[1];
- v444 = src[2];
- }
- else
- {
- if (!u444)
- {
- if (chroma_format==CHROMA420)
- {
- if (!(u422 = (unsigned char *)malloc((Coded_Picture_Width>>1)
- *Coded_Picture_Height)))
- Error("malloc failed");
- if (!(v422 = (unsigned char *)malloc((Coded_Picture_Width>>1)
- *Coded_Picture_Height)))
- Error("malloc failed");
- }
-
- if (!(u444 = (unsigned char *)malloc(Coded_Picture_Width
- *Coded_Picture_Height)))
- Error("malloc failed");
-
- if (!(v444 = (unsigned char *)malloc(Coded_Picture_Width
- *Coded_Picture_Height)))
- Error("malloc failed");
- }
-
- if (chroma_format==CHROMA420)
- {
- conv420to422(src[1],u422);
- conv420to422(src[2],v422);
- conv422to444(u422,u444);
- conv422to444(v422,v444);
- }
- else
- {
- conv422to444(src[1],u444);
- conv422to444(src[2],v444);
- }
- }
-
- strcat(outname,tgaflag ? ".tga" : ".ppm");
-
- if (!Quiet_Flag)
- fprintf(stderr,"saving %s\n",outname);
-
- if ((outfile = open(outname,O_CREAT|O_TRUNC|O_WRONLY|O_BINARY,0666))==-1)
- {
- sprintf(Error_Text,"Couldn't create %s\n",outname);
- Error(Error_Text);
- }
-
- optr = obfr;
-
- if (tgaflag)
- {
- /* TGA header */
- for (i=0; i<12; i++)
- putbyte(tga24[i]);
-
- putword(horizontal_size); putword(height);
- putbyte(tga24[12]); putbyte(tga24[13]);
- }
- else
- {
- /* PPM header */
- sprintf(header,"P6\n%d %d\n255\n",horizontal_size,height);
-
- for (i=0; header[i]!=0; i++)
- putbyte(header[i]);
- }
-
- /* matrix coefficients */
- crv = Inverse_Table_6_9[matrix_coefficients][0];
- cbu = Inverse_Table_6_9[matrix_coefficients][1];
- cgu = Inverse_Table_6_9[matrix_coefficients][2];
- cgv = Inverse_Table_6_9[matrix_coefficients][3];
-
- for (i=0; i<height; i++)
- {
- py = src[0] + offset + incr*i;
- pu = u444 + offset + incr*i;
- pv = v444 + offset + incr*i;
-
- for (j=0; j<horizontal_size; j++)
- {
- u = *pu++ - 128;
- v = *pv++ - 128;
- y = 76309 * (*py++ - 16); /* (255/219)*65536 */
- r = Clip[(y + crv*v + 32768)>>16];
- g = Clip[(y - cgu*u - cgv*v + 32768)>>16];
- b = Clip[(y + cbu*u + 32786)>>16];
-
- if (tgaflag)
- {
- putbyte(b); putbyte(g); putbyte(r);
- }
- else
- {
- putbyte(r); putbyte(g); putbyte(b);
- }
- }
- }
-
- if (optr!=obfr)
- write(outfile,obfr,optr-obfr);
-
- close(outfile);
-}
-
-static void putbyte(c)
-int c;
-{
- *optr++ = c;
-
- if (optr == obfr+OBFRSIZE)
- {
- write(outfile,obfr,OBFRSIZE);
- optr = obfr;
- }
-}
-
-static void putword(w)
-int w;
-{
- putbyte(w); putbyte(w>>8);
-}
-
-/* horizontal 1:2 interpolation filter */
-static void conv422to444(src,dst)
-unsigned char *src,*dst;
-{
- int i, i2, w, j, im3, im2, im1, ip1, ip2, ip3;
-
- w = Coded_Picture_Width>>1;
-
- if (base.MPEG2_Flag)
- {
- for (j=0; j<Coded_Picture_Height; j++)
- {
- for (i=0; i<w; i++)
- {
- i2 = i<<1;
- im2 = (i<2) ? 0 : i-2;
- im1 = (i<1) ? 0 : i-1;
- ip1 = (i<w-1) ? i+1 : w-1;
- ip2 = (i<w-2) ? i+2 : w-1;
- ip3 = (i<w-3) ? i+3 : w-1;
-
- /* FIR filter coefficients (*256): 21 0 -52 0 159 256 159 0 -52 0 21 */
- /* even samples (0 0 256 0 0) */
- dst[i2] = src[i];
-
- /* odd samples (21 -52 159 159 -52 21) */
- dst[i2+1] = Clip[(int)(21*(src[im2]+src[ip3])
- -52*(src[im1]+src[ip2])
- +159*(src[i]+src[ip1])+128)>>8];
- }
- src+= w;
- dst+= Coded_Picture_Width;
- }
- }
- else
- {
- for (j=0; j<Coded_Picture_Height; j++)
- {
- for (i=0; i<w; i++)
- {
-
- i2 = i<<1;
- im3 = (i<3) ? 0 : i-3;
- im2 = (i<2) ? 0 : i-2;
- im1 = (i<1) ? 0 : i-1;
- ip1 = (i<w-1) ? i+1 : w-1;
- ip2 = (i<w-2) ? i+2 : w-1;
- ip3 = (i<w-3) ? i+3 : w-1;
-
- /* FIR filter coefficients (*256): 5 -21 70 228 -37 11 */
- dst[i2] = Clip[(int)( 5*src[im3]
- -21*src[im2]
- +70*src[im1]
- +228*src[i]
- -37*src[ip1]
- +11*src[ip2]+128)>>8];
-
- dst[i2+1] = Clip[(int)( 5*src[ip3]
- -21*src[ip2]
- +70*src[ip1]
- +228*src[i]
- -37*src[im1]
- +11*src[im2]+128)>>8];
- }
- src+= w;
- dst+= Coded_Picture_Width;
- }
- }
-}
-
-/* vertical 1:2 interpolation filter */
-static void conv420to422(src,dst)
-unsigned char *src,*dst;
-{
- int w, h, i, j, j2;
- int jm6, jm5, jm4, jm3, jm2, jm1, jp1, jp2, jp3, jp4, jp5, jp6, jp7;
-
- w = Coded_Picture_Width>>1;
- h = Coded_Picture_Height>>1;
-
- if (progressive_frame)
- {
- /* intra frame */
- for (i=0; i<w; i++)
- {
- for (j=0; j<h; j++)
- {
- j2 = j<<1;
- jm3 = (j<3) ? 0 : j-3;
- jm2 = (j<2) ? 0 : j-2;
- jm1 = (j<1) ? 0 : j-1;
- jp1 = (j<h-1) ? j+1 : h-1;
- jp2 = (j<h-2) ? j+2 : h-1;
- jp3 = (j<h-3) ? j+3 : h-1;
-
- /* FIR filter coefficients (*256): 5 -21 70 228 -37 11 */
- /* New FIR filter coefficients (*256): 3 -16 67 227 -32 7 */
- dst[w*j2] = Clip[(int)( 3*src[w*jm3]
- -16*src[w*jm2]
- +67*src[w*jm1]
- +227*src[w*j]
- -32*src[w*jp1]
- +7*src[w*jp2]+128)>>8];
-
- dst[w*(j2+1)] = Clip[(int)( 3*src[w*jp3]
- -16*src[w*jp2]
- +67*src[w*jp1]
- +227*src[w*j]
- -32*src[w*jm1]
- +7*src[w*jm2]+128)>>8];
- }
- src++;
- dst++;
- }
- }
- else
- {
- /* intra field */
- for (i=0; i<w; i++)
- {
- for (j=0; j<h; j+=2)
- {
- j2 = j<<1;
-
- /* top field */
- jm6 = (j<6) ? 0 : j-6;
- jm4 = (j<4) ? 0 : j-4;
- jm2 = (j<2) ? 0 : j-2;
- jp2 = (j<h-2) ? j+2 : h-2;
- jp4 = (j<h-4) ? j+4 : h-2;
- jp6 = (j<h-6) ? j+6 : h-2;
-
- /* Polyphase FIR filter coefficients (*256): 2 -10 35 242 -18 5 */
- /* New polyphase FIR filter coefficients (*256): 1 -7 30 248 -21 5 */
- dst[w*j2] = Clip[(int)( 1*src[w*jm6]
- -7*src[w*jm4]
- +30*src[w*jm2]
- +248*src[w*j]
- -21*src[w*jp2]
- +5*src[w*jp4]+128)>>8];
-
- /* Polyphase FIR filter coefficients (*256): 11 -38 192 113 -30 8 */
- /* New polyphase FIR filter coefficients (*256):7 -35 194 110 -24 4 */
- dst[w*(j2+2)] = Clip[(int)( 7*src[w*jm4]
- -35*src[w*jm2]
- +194*src[w*j]
- +110*src[w*jp2]
- -24*src[w*jp4]
- +4*src[w*jp6]+128)>>8];
-
- /* bottom field */
- jm5 = (j<5) ? 1 : j-5;
- jm3 = (j<3) ? 1 : j-3;
- jm1 = (j<1) ? 1 : j-1;
- jp1 = (j<h-1) ? j+1 : h-1;
- jp3 = (j<h-3) ? j+3 : h-1;
- jp5 = (j<h-5) ? j+5 : h-1;
- jp7 = (j<h-7) ? j+7 : h-1;
-
- /* Polyphase FIR filter coefficients (*256): 11 -38 192 113 -30 8 */
- /* New polyphase FIR filter coefficients (*256):7 -35 194 110 -24 4 */
- dst[w*(j2+1)] = Clip[(int)( 7*src[w*jp5]
- -35*src[w*jp3]
- +194*src[w*jp1]
- +110*src[w*jm1]
- -24*src[w*jm3]
- +4*src[w*jm5]+128)>>8];
-
- dst[w*(j2+3)] = Clip[(int)( 1*src[w*jp7]
- -7*src[w*jp5]
- +30*src[w*jp3]
- +248*src[w*jp1]
- -21*src[w*jm1]
- +5*src[w*jm3]+128)>>8];
- }
- src++;
- dst++;
- }
- }
-}
Index: start/mpeg2/recon.c
===================================================================
--- start/mpeg2/recon.c (revision 1087)
+++ start/mpeg2/recon.c (nonexistent)
@@ -1,467 +0,0 @@
-/* Predict.c, motion compensation routines */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-#include <stdio.h>
-
-#include "config.h"
-#include "global.h"
-
-/* private prototypes */
-static void form_prediction _ANSI_ARGS_((unsigned char *src[], int sfield,
- unsigned char *dst[], int dfield,
- int lx, int lx2, int w, int h, int x, int y, int dx, int dy,
- int average_flag));
-
-static void form_component_prediction _ANSI_ARGS_((unsigned char *src, unsigned char *dst,
- int lx, int lx2, int w, int h, int x, int y, int dx, int dy, int average_flag));
-
-void form_predictions(bx,by,macroblock_type,motion_type,PMV,motion_vertical_field_select,dmvector,stwtype)
-int bx, by;
-int macroblock_type;
-int motion_type;
-int PMV[2][2][2], motion_vertical_field_select[2][2], dmvector[2];
-int stwtype;
-{
- int currentfield;
- unsigned char **predframe;
- int DMV[2][2];
- int stwtop, stwbot;
-
- stwtop = stwtype%3; /* 0:temporal, 1:(spat+temp)/2, 2:spatial */
- stwbot = stwtype/3;
-
- if ((macroblock_type & MACROBLOCK_MOTION_FORWARD)
- || (picture_coding_type==P_TYPE))
- {
- if (picture_structure==FRAME_PICTURE)
- {
- if ((motion_type==MC_FRAME)
- || !(macroblock_type & MACROBLOCK_MOTION_FORWARD))
- {
- /* frame-based prediction (broken into top and bottom halves
- for spatial scalability prediction purposes) */
- if (stwtop<2)
- form_prediction(forward_reference_frame,0,current_frame,0,
- Coded_Picture_Width,Coded_Picture_Width<<1,16,8,bx,by,
- PMV[0][0][0],PMV[0][0][1],stwtop);
-
- if (stwbot<2)
- form_prediction(forward_reference_frame,1,current_frame,1,
- Coded_Picture_Width,Coded_Picture_Width<<1,16,8,bx,by,
- PMV[0][0][0],PMV[0][0][1],stwbot);
- }
- else if (motion_type==MC_FIELD) /* field-based prediction */
- {
- /* top field prediction */
- if (stwtop<2)
- form_prediction(forward_reference_frame,motion_vertical_field_select[0][0],
- current_frame,0,Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,8,
- bx,by>>1,PMV[0][0][0],PMV[0][0][1]>>1,stwtop);
-
- /* bottom field prediction */
- if (stwbot<2)
- form_prediction(forward_reference_frame,motion_vertical_field_select[1][0],
- current_frame,1,Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,8,
- bx,by>>1,PMV[1][0][0],PMV[1][0][1]>>1,stwbot);
- }
- else if (motion_type==MC_DMV) /* dual prime prediction */
- {
- /* calculate derived motion vectors */
- Dual_Prime_Arithmetic(DMV,dmvector,PMV[0][0][0],PMV[0][0][1]>>1);
-
- if (stwtop<2)
- {
- /* predict top field from top field */
- form_prediction(forward_reference_frame,0,current_frame,0,
- Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,8,bx,by>>1,
- PMV[0][0][0],PMV[0][0][1]>>1,0);
-
- /* predict and add to top field from bottom field */
- form_prediction(forward_reference_frame,1,current_frame,0,
- Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,8,bx,by>>1,
- DMV[0][0],DMV[0][1],1);
- }
-
- if (stwbot<2)
- {
- /* predict bottom field from bottom field */
- form_prediction(forward_reference_frame,1,current_frame,1,
- Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,8,bx,by>>1,
- PMV[0][0][0],PMV[0][0][1]>>1,0);
-
- /* predict and add to bottom field from top field */
- form_prediction(forward_reference_frame,0,current_frame,1,
- Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,8,bx,by>>1,
- DMV[1][0],DMV[1][1],1);
- }
- }
- else
- /* invalid motion_type */
- printf("invalid motion_type\n");
- }
- else /* TOP_FIELD or BOTTOM_FIELD */
- {
- /* field picture */
- currentfield = (picture_structure==BOTTOM_FIELD);
-
- /* determine which frame to use for prediction */
- if ((picture_coding_type==P_TYPE) && Second_Field
- && (currentfield!=motion_vertical_field_select[0][0]))
- predframe = backward_reference_frame; /* same frame */
- else
- predframe = forward_reference_frame; /* previous frame */
-
- if ((motion_type==MC_FIELD)
- || !(macroblock_type & MACROBLOCK_MOTION_FORWARD))
- {
- /* field-based prediction */
- if (stwtop<2)
- form_prediction(predframe,motion_vertical_field_select[0][0],current_frame,0,
- Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,16,bx,by,
- PMV[0][0][0],PMV[0][0][1],stwtop);
- }
- else if (motion_type==MC_16X8)
- {
- if (stwtop<2)
- {
- form_prediction(predframe,motion_vertical_field_select[0][0],current_frame,0,
- Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,8,bx,by,
- PMV[0][0][0],PMV[0][0][1],stwtop);
-
- /* determine which frame to use for lower half prediction */
- if ((picture_coding_type==P_TYPE) && Second_Field
- && (currentfield!=motion_vertical_field_select[1][0]))
- predframe = backward_reference_frame; /* same frame */
- else
- predframe = forward_reference_frame; /* previous frame */
-
- form_prediction(predframe,motion_vertical_field_select[1][0],current_frame,0,
- Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,8,bx,by+8,
- PMV[1][0][0],PMV[1][0][1],stwtop);
- }
- }
- else if (motion_type==MC_DMV) /* dual prime prediction */
- {
- if (Second_Field)
- predframe = backward_reference_frame; /* same frame */
- else
- predframe = forward_reference_frame; /* previous frame */
-
- /* calculate derived motion vectors */
- Dual_Prime_Arithmetic(DMV,dmvector,PMV[0][0][0],PMV[0][0][1]);
-
- /* predict from field of same parity */
- form_prediction(forward_reference_frame,currentfield,current_frame,0,
- Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,16,bx,by,
- PMV[0][0][0],PMV[0][0][1],0);
-
- /* predict from field of opposite parity */
- form_prediction(predframe,!currentfield,current_frame,0,
- Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,16,bx,by,
- DMV[0][0],DMV[0][1],1);
- }
- else
- /* invalid motion_type */
- printf("invalid motion_type\n");
- }
- stwtop = stwbot = 1;
- }
-
- if (macroblock_type & MACROBLOCK_MOTION_BACKWARD)
- {
- if (picture_structure==FRAME_PICTURE)
- {
- if (motion_type==MC_FRAME)
- {
- /* frame-based prediction */
- if (stwtop<2)
- form_prediction(backward_reference_frame,0,current_frame,0,
- Coded_Picture_Width,Coded_Picture_Width<<1,16,8,bx,by,
- PMV[0][1][0],PMV[0][1][1],stwtop);
-
- if (stwbot<2)
- form_prediction(backward_reference_frame,1,current_frame,1,
- Coded_Picture_Width,Coded_Picture_Width<<1,16,8,bx,by,
- PMV[0][1][0],PMV[0][1][1],stwbot);
- }
- else /* field-based prediction */
- {
- /* top field prediction */
- if (stwtop<2)
- form_prediction(backward_reference_frame,motion_vertical_field_select[0][1],
- current_frame,0,Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,8,
- bx,by>>1,PMV[0][1][0],PMV[0][1][1]>>1,stwtop);
-
- /* bottom field prediction */
- if (stwbot<2)
- form_prediction(backward_reference_frame,motion_vertical_field_select[1][1],
- current_frame,1,Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,8,
- bx,by>>1,PMV[1][1][0],PMV[1][1][1]>>1,stwbot);
- }
- }
- else /* TOP_FIELD or BOTTOM_FIELD */
- {
- /* field picture */
- if (motion_type==MC_FIELD)
- {
- /* field-based prediction */
- form_prediction(backward_reference_frame,motion_vertical_field_select[0][1],
- current_frame,0,Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,16,
- bx,by,PMV[0][1][0],PMV[0][1][1],stwtop);
- }
- else if (motion_type==MC_16X8)
- {
- form_prediction(backward_reference_frame,motion_vertical_field_select[0][1],
- current_frame,0,Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,8,
- bx,by,PMV[0][1][0],PMV[0][1][1],stwtop);
-
- form_prediction(backward_reference_frame,motion_vertical_field_select[1][1],
- current_frame,0,Coded_Picture_Width<<1,Coded_Picture_Width<<1,16,8,
- bx,by+8,PMV[1][1][0],PMV[1][1][1],stwtop);
- }
- else
- /* invalid motion_type */
- printf("invalid motion_type\n");
- }
- }
-}
-
-static void form_prediction(src,sfield,dst,dfield,lx,lx2,w,h,x,y,dx,dy,average_flag)
-unsigned char *src[]; /* prediction source buffer */
-int sfield; /* prediction source field number (0 or 1) */
-unsigned char *dst[]; /* prediction destination buffer */
-int dfield; /* prediction destination field number (0 or 1)*/
-int lx,lx2; /* line strides */
-int w,h; /* prediction block/sub-block width, height */
-int x,y; /* pixel co-ordinates of top-left sample in current MB */
-int dx,dy; /* horizontal, vertical prediction address */
-int average_flag; /* add prediction error to prediction ? */
-{
- /* Y */
- form_component_prediction(src[0]+(sfield?lx2>>1:0),dst[0]+(dfield?lx2>>1:0),
- lx,lx2,w,h,x,y,dx,dy,average_flag);
-
- if (chroma_format!=CHROMA444)
- {
- lx>>=1; lx2>>=1; w>>=1; x>>=1; dx/=2;
- }
-
- if (chroma_format==CHROMA420)
- {
- h>>=1; y>>=1; dy/=2;
- }
-
- /* Cb */
- form_component_prediction(src[1]+(sfield?lx2>>1:0),dst[1]+(dfield?lx2>>1:0),
- lx,lx2,w,h,x,y,dx,dy,average_flag);
-
- /* Cr */
- form_component_prediction(src[2]+(sfield?lx2>>1:0),dst[2]+(dfield?lx2>>1:0),
- lx,lx2,w,h,x,y,dx,dy,average_flag);
-}
-
-/* ISO/IEC 13818-2 section 7.6.4: Forming predictions */
-/* NOTE: the arithmetic below produces numerically equivalent results
- * to 7.6.4, yet is more elegant. It differs in the following ways:
- *
- * 1. the vectors (dx, dy) are based on cartesian frame
- * coordiantes along a half-pel grid (always positive numbers)
- * In contrast, vector[r][s][t] are differential (with positive and
- * negative values). As a result, deriving the integer vectors
- * (int_vec[t]) from dx, dy is accomplished by a simple right shift.
- *
- * 2. Half pel flags (xh, yh) are equivalent to the LSB (Least
- * Significant Bit) of the half-pel coordinates (dx,dy).
- *
- *
- * NOTE: the work of combining predictions (ISO/IEC 13818-2 section 7.6.7)
- * is distributed among several other stages. This is accomplished by
- * folding line offsets into the source and destination (src,dst)
- * addresses (note the call arguments to form_prediction() in Predict()),
- * line stride variables lx and lx2, the block dimension variables (w,h),
- * average_flag, and by the very order in which Predict() is called.
- * This implementation design (implicitly different than the spec)
- * was chosen for its elegance.
-*/
-
-static void form_component_prediction(src,dst,lx,lx2,w,h,x,y,dx,dy,average_flag)
-unsigned char *src;
-unsigned char *dst;
-int lx; /* raster line increment */
-int lx2;
-int w,h;
-int x,y;
-int dx,dy;
-int average_flag; /* flag that signals bi-directional or Dual-Prime
- averaging (7.6.7.1 and 7.6.7.4). if average_flag==1,
- a previously formed prediction has been stored in
- pel_pred[] */
-{
- int xint; /* horizontal integer sample vector: analogous to int_vec[0] */
- int yint; /* vertical integer sample vectors: analogous to int_vec[1] */
- int xh; /* horizontal half sample flag: analogous to half_flag[0] */
- int yh; /* vertical half sample flag: analogous to half_flag[1] */
- int i, j, v;
- unsigned char *s; /* source pointer: analogous to pel_ref[][] */
- unsigned char *d; /* destination pointer: analogous to pel_pred[][] */
-
- /* half pel scaling for integer vectors */
- xint = dx>>1;
- yint = dy>>1;
-
- /* derive half pel flags */
- xh = dx & 1;
- yh = dy & 1;
-
- /* compute the linear address of pel_ref[][] and pel_pred[][]
- based on cartesian/raster cordinates provided */
- s = src + lx*(y+yint) + x + xint;
- d = dst + lx*y + x;
-
- if (!xh && !yh) /* no horizontal nor vertical half-pel */
- {
- if (average_flag)
- {
- for (j=0; j<h; j++)
- {
- for (i=0; i<w; i++)
- {
- v = d[i]+s[i];
- d[i] = (v+(v>=0?1:0))>>1;
- }
-
- s+= lx2;
- d+= lx2;
- }
- }
- else
- {
- for (j=0; j<h; j++)
- {
- for (i=0; i<w; i++)
- {
- d[i] = s[i];
- }
-
- s+= lx2;
- d+= lx2;
- }
- }
- }
- else if (!xh && yh) /* no horizontal but vertical half-pel */
- {
- if (average_flag)
- {
- for (j=0; j<h; j++)
- {
- for (i=0; i<w; i++)
- {
- v = d[i] + ((unsigned int)(s[i]+s[i+lx]+1)>>1);
- d[i]=(v+(v>=0?1:0))>>1;
- }
-
- s+= lx2;
- d+= lx2;
- }
- }
- else
- {
- for (j=0; j<h; j++)
- {
- for (i=0; i<w; i++)
- {
- d[i] = (unsigned int)(s[i]+s[i+lx]+1)>>1;
- }
-
- s+= lx2;
- d+= lx2;
- }
- }
- }
- else if (xh && !yh) /* horizontal but no vertical half-pel */
- {
- if (average_flag)
- {
- for (j=0; j<h; j++)
- {
- for (i=0; i<w; i++)
- {
- v = d[i] + ((unsigned int)(s[i]+s[i+1]+1)>>1);
- d[i] = (v+(v>=0?1:0))>>1;
- }
-
- s+= lx2;
- d+= lx2;
- }
- }
- else
- {
- for (j=0; j<h; j++)
- {
- for (i=0; i<w; i++)
- {
- d[i] = (unsigned int)(s[i]+s[i+1]+1)>>1;
- }
-
- s+= lx2;
- d+= lx2;
- }
- }
- }
- else /* if (xh && yh) horizontal and vertical half-pel */
- {
- if (average_flag)
- {
- for (j=0; j<h; j++)
- {
- for (i=0; i<w; i++)
- {
- v = d[i] + ((unsigned int)(s[i]+s[i+1]+s[i+lx]+s[i+lx+1]+2)>>2);
- d[i] = (v+(v>=0?1:0))>>1;
- }
-
- s+= lx2;
- d+= lx2;
- }
- }
- else
- {
- for (j=0; j<h; j++)
- {
- for (i=0; i<w; i++)
- {
- d[i] = (unsigned int)(s[i]+s[i+1]+s[i+lx]+s[i+lx+1]+2)>>2;
- }
-
- s+= lx2;
- d+= lx2;
- }
- }
- }
-}
Index: start/mpeg2/systems.c
===================================================================
--- start/mpeg2/systems.c (revision 1087)
+++ start/mpeg2/systems.c (nonexistent)
@@ -1,200 +0,0 @@
-/* systems.c, systems-specific routines */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "config.h"
-#include "global.h"
-
-/* initialize buffer, call once before first getbits or showbits */
-
-/* parse system layer, ignore everything we don't need */
-void Next_Packet()
-{
- unsigned int code;
- int l;
-
- for(;;)
- {
- code = Get_Long();
-
- /* remove system layer byte stuffing */
- while ((code & 0xffffff00) != 0x100)
- code = (code<<8) | Get_Byte();
-
- switch(code)
- {
- case PACK_START_CODE: /* pack header */
- /* skip pack header (system_clock_reference and mux_rate) */
- ld->Rdptr += 8;
- break;
- case VIDEO_ELEMENTARY_STREAM:
- code = Get_Word(); /* packet_length */
- ld->Rdmax = ld->Rdptr + code;
-
- code = Get_Byte();
-
- if((code>>6)==0x02)
- {
- ld->Rdptr++;
- code=Get_Byte(); /* parse PES_header_data_length */
- ld->Rdptr+=code; /* advance pointer by PES_header_data_length */
- printf("MPEG-2 PES packet\n");
- return;
- }
- else if(code==0xff)
- {
- /* parse MPEG-1 packet header */
- while((code=Get_Byte())== 0xFF);
- }
-
- /* stuffing bytes */
- if(code>=0x40)
- {
- if(code>=0x80)
- {
- fprintf(stderr,"Error in packet header\n");
- exit(1);
- }
- /* skip STD_buffer_scale */
- ld->Rdptr++;
- code = Get_Byte();
- }
-
- if(code>=0x30)
- {
- if(code>=0x40)
- {
- fprintf(stderr,"Error in packet header\n");
- exit(1);
- }
- /* skip presentation and decoding time stamps */
- ld->Rdptr += 9;
- }
- else if(code>=0x20)
- {
- /* skip presentation time stamps */
- ld->Rdptr += 4;
- }
- else if(code!=0x0f)
- {
- fprintf(stderr,"Error in packet header\n");
- exit(1);
- }
- return;
- case ISO_END_CODE: /* end */
- /* simulate a buffer full of sequence end codes */
- l = 0;
- while (l<2048)
- {
- ld->Rdbfr[l++] = SEQUENCE_END_CODE>>24;
- ld->Rdbfr[l++] = SEQUENCE_END_CODE>>16;
- ld->Rdbfr[l++] = SEQUENCE_END_CODE>>8;
- ld->Rdbfr[l++] = SEQUENCE_END_CODE&0xff;
- }
- ld->Rdptr = ld->Rdbfr;
- ld->Rdmax = ld->Rdbfr + 2048;
- return;
- default:
- if(code>=SYSTEM_START_CODE)
- {
- /* skip system headers and non-video packets*/
- code = Get_Word();
- ld->Rdptr += code;
- }
- else
- {
- fprintf(stderr,"Unexpected startcode %08x in system layer\n",code);
- exit(1);
- }
- break;
- }
- }
-}
-
-
-
-void Flush_Buffer32()
-{
- int Incnt;
-
- ld->Bfr = 0;
-
- Incnt = ld->Incnt;
- Incnt -= 32;
-
- if (System_Stream_Flag && (ld->Rdptr >= ld->Rdmax-4))
- {
- while (Incnt <= 24)
- {
- if (ld->Rdptr >= ld->Rdmax)
- Next_Packet();
- ld->Bfr |= Get_Byte() << (24 - Incnt);
- Incnt += 8;
- }
- }
- else
- {
- while (Incnt <= 24)
- {
- if (ld->Rdptr >= ld->Rdbfr+2048)
- Fill_Buffer();
- ld->Bfr |= *ld->Rdptr++ << (24 - Incnt);
- Incnt += 8;
- }
- }
- ld->Incnt = Incnt;
-
-#ifdef VERIFY
- ld->Bitcnt += 32;
-#endif /* VERIFY */
-}
-
-
-unsigned int Get_Bits32()
-{
- unsigned int l;
-
- l = Show_Bits(32);
- Flush_Buffer32();
-
- return l;
-}
-
-
-int Get_Long()
-{
- int i;
-
- i = Get_Word();
- return (i<<16) | Get_Word();
-}
-
-
Index: start/mpeg2/subspic.c
===================================================================
--- start/mpeg2/subspic.c (revision 1087)
+++ start/mpeg2/subspic.c (nonexistent)
@@ -1,392 +0,0 @@
-/* #define DEBUG */
-/* subspic.c, Frame buffer substitution routines */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-
-#include "config.h"
-#include "global.h"
-
-/* private prototypes*/
-static void Read_Frame _ANSI_ARGS_((char *filename,
- unsigned char *frame_buffer[], int framenum));
-static void Copy_Frame _ANSI_ARGS_((unsigned char *src, unsigned char *dst,
- int width, int height, int parity, int incr));
-static int Read_Components _ANSI_ARGS_ ((char *filename,
- unsigned char *frame[3], int framenum));
-static int Read_Component _ANSI_ARGS_ ((char *fname, unsigned char *frame,
- int width, int height));
-static int Extract_Components _ANSI_ARGS_ ((char *filename,
- unsigned char *frame[3], int framenum));
-
-
-/* substitute frame buffer routine */
-void Substitute_Frame_Buffer (bitstream_framenum, sequence_framenum)
-int bitstream_framenum;
-int sequence_framenum;
-{
- /* static tracking variables */
- static int previous_temporal_reference;
- static int previous_bitstream_framenum;
- static int previous_anchor_temporal_reference;
- static int previous_anchor_bitstream_framenum;
- static int previous_picture_coding_type;
- static int bgate;
-
- /* local temporary variables */
- int substitute_display_framenum;
-
-
-#ifdef DEBUG
- printf("SUB: seq fn(%d) bitfn(%d) tempref(%d) picstr(%d) type(%d)\n",
- sequence_framenum, bitstream_framenum, temporal_reference,
- picture_structure, picture_coding_type);
-#endif
-
- /* we don't substitute at the first picture of a sequence */
- if((sequence_framenum!=0)||(Second_Field))
- {
- /* only at the start of the frame */
- if ((picture_structure==FRAME_PICTURE)||(!Second_Field))
- {
- if(picture_coding_type==P_TYPE)
- {
- /* the most recently decoded reference frame needs substituting */
- substitute_display_framenum = bitstream_framenum - 1;
-
- Read_Frame(Substitute_Picture_Filename, forward_reference_frame,
- substitute_display_framenum);
- }
- /* only the first B frame in a consequitve set of B pictures
- loads a substitute backward_reference_frame since all subsequent
- B frames predict from the same reference pictures */
- else if((picture_coding_type==B_TYPE)&&(bgate!=1))
- {
- substitute_display_framenum =
- (previous_temporal_reference - temporal_reference)
- + bitstream_framenum - 1;
-
- Read_Frame(Substitute_Picture_Filename, backward_reference_frame,
- substitute_display_framenum);
- }
- } /* P fields can predict from the two most recently decoded fields, even
- from the first field of the same frame being decoded */
- else if(Second_Field && (picture_coding_type==P_TYPE))
- {
- /* our favourite case: the IP field picture pair */
- if((previous_picture_coding_type==I_TYPE)&&(picture_coding_type==P_TYPE))
- {
- substitute_display_framenum = bitstream_framenum;
- }
- else /* our more generic P field picture pair */
- {
- substitute_display_framenum =
- (temporal_reference - previous_anchor_temporal_reference)
- + bitstream_framenum - 1;
- }
-
- Read_Frame(Substitute_Picture_Filename, current_frame, substitute_display_framenum);
- }
-#ifdef DEBUG
- else if((picture_coding_type!=B_TYPE)||(picture_coding_type!=D_TYPE))
- {
- printf("NO SUBS FOR THIS PICTURE\n");
- }
-#endif
- }
-
-
- /* set b gate so we don't redundantly load next time around */
- if(picture_coding_type==B_TYPE)
- bgate = 1;
- else
- bgate = 0;
-
- /* update general tracking variables */
- if((picture_structure==FRAME_PICTURE)||(!Second_Field))
- {
- previous_temporal_reference = temporal_reference;
- previous_bitstream_framenum = bitstream_framenum;
- }
-
- /* update reference frame tracking variables */
- if((picture_coding_type!=B_TYPE) &&
- ((picture_structure==FRAME_PICTURE)||Second_Field))
- {
- previous_anchor_temporal_reference = temporal_reference;
- previous_anchor_bitstream_framenum = bitstream_framenum;
- }
-
- previous_picture_coding_type = picture_coding_type;
-
-}
-
-
-/* Note: fields are only read to serve as the same-frame reference for
- a second field */
-static void Read_Frame(fname,frame,framenum)
-char *fname;
-unsigned char *frame[];
-int framenum;
-{
- int parity;
- int rerr = 0;
- int field_mode;
-
- if(framenum<0)
- printf("ERROR: framenum (%d) is less than zero\n", framenum);
-
-
- if(Big_Picture_Flag)
- rerr = Extract_Components(fname, substitute_frame, framenum);
- else
- rerr = Read_Components(fname, substitute_frame, framenum);
-
- if(rerr!=0)
- {
- printf("was unable to substitute frame\n");
- }
-
- /* now copy to the appropriate buffer */
- /* first field (which we are attempting to substitute) must be
- of opposite field parity to the current one */
- if((Second_Field)&&(picture_coding_type==P_TYPE))
- {
- parity = (picture_structure==TOP_FIELD ? 1:0);
- field_mode = (picture_structure==FRAME_PICTURE ? 0:1);
- }
- else
- {
- /* Like frame structued pictures, B pictures only substitute an entire frame
- since both fields always predict from the same frame (with respect
- to forward/backwards directions) */
- parity = 0;
- field_mode = 0;
- }
-
-
- Copy_Frame(substitute_frame[0], frame[0], Coded_Picture_Width,
- Coded_Picture_Height, parity, field_mode);
-
- Copy_Frame(substitute_frame[1], frame[1], Chroma_Width, Chroma_Height,
- parity, field_mode);
-
- Copy_Frame(substitute_frame[2], frame[2], Chroma_Width, Chroma_Height,
- parity, field_mode);
-
-#ifdef VERBOSE
- if(Verbose_Flag > NO_LAYER)
- printf("substituted %s %d\n",
- (field_mode ? (parity?"bottom field":"bottom field"):"frame"), framenum);
-#endif
-}
-
-
-
-
-static int Read_Components(filename, frame, framenum)
-char *filename;
-unsigned char *frame[3];
-int framenum;
-{
- int err = 0;
- char outname[FILENAME_LENGTH];
- char name[FILENAME_LENGTH];
-
- sprintf(outname,filename,framenum);
-
-
- sprintf(name,"%s.Y",outname);
- err += Read_Component(name, frame[0], Coded_Picture_Width,
- Coded_Picture_Height);
-
- sprintf(name,"%s.U",outname);
- err += Read_Component(name, frame[1], Chroma_Width, Chroma_Height);
-
- sprintf(name,"%s.V",outname);
- err += Read_Component(name, frame[2], Chroma_Width, Chroma_Height);
-
- return(err);
-}
-
-
-static int Read_Component(Filename, Frame, Width, Height)
-char *Filename;
-unsigned char *Frame;
-int Width;
-int Height;
-{
- int Size;
- int Bytes_Read;
- int Infile;
-
- Size = Width*Height;
-
-#ifdef DEBUG
- printf("SUBS: reading %s\n", filename);
-#endif
-
- if(!(Infile=open(Filename,O_RDONLY|O_BINARY))<0)
- {
- printf("ERROR: unable to open reference filename (%s)\n", Filename);
- return(-1);
- }
-
- Bytes_Read = read(Infile, Frame, Size);
-
- if(Bytes_Read!=Size)
- {
- printf("was able to read only %d bytes of %d of file %s\n",
- Bytes_Read, Size, Filename);
- }
-
- close(Infile);
- return(0);
-}
-
-
-/* optimization: do not open the big file each time. Open once at start
- of decoder, and close at the very last frame */
-
-/* Note: "big" files were used in E-mail exchanges almost exclusively by the
- MPEG Committee's syntax validation and conformance ad-hoc groups from
- the year 1993 until 1995 */
-static int Extract_Components(filename, frame, framenum)
-char *filename;
-unsigned char *frame[3];
-int framenum;
-{
-/* int err = 0; */
- FILE *fd;
- int line;
- int size, offset;
-
-
- if (!(fd = fopen(filename,"rb")))
- {
- sprintf(Error_Text,"Couldn't open %s\n",filename);
- return(-1);
- }
-
- /* compute size of each frame (in bytes) */
- size = (Coded_Picture_Width*Coded_Picture_Height);
-
- if(chroma_format==CHROMA444)
- size = (size * 3);
- else if(chroma_format==CHROMA422)
- size = (size * 2);
- else if(chroma_format==CHROMA420)
- size = ((size*3)>>1);
- else
- printf("ERROR: chroma_format (%d) not recognized\n", chroma_format);
-
-
- /* compute distance into "big" file */
- offset = size*framenum;
-
-#ifdef DEBUG
- printf("EXTRACTING: frame(%d) offset(%d), size (%d) from %s\n",
- framenum, offset, size, filename);
-#endif
-
- /* seek to location in big file where desired frame begins */
- /* note: this offset cannot exceed a few billion bytes due to the */
- /* obvious limitations of 32-bit integers */
- fseek(fd, offset, 0);
-
- /* Y */
- for (line=0; line<Coded_Picture_Height; line++)
- {
- fread(frame[0]+(line*Coded_Picture_Width),1,Coded_Picture_Width,fd);
- }
-
- /* Cb */
- for (line=0; line<Chroma_Height; line++)
- {
- fread(frame[1]+(line*Chroma_Width),1,Chroma_Width,fd);
- }
-
- /* Cr */
- for (line=0; line<Chroma_Height; line++)
- {
- fread(frame[2]+(line*Chroma_Width),1,Chroma_Width,fd);
- }
-
-
- fclose(fd);
- return(0);
-}
-
-
-static void Copy_Frame(src, dst, width, height, parity, field_mode)
-unsigned char *src;
-unsigned char *dst;
-int width;
-int height;
-int parity; /* field parity (top or bottom) to overwrite */
-int field_mode; /* 0 = frame, 1 = field */
-{
- int row, col;
- int s, d;
- int incr;
-
- s = d = 0;
-
-#ifdef DEBUG
- printf("COPYING (w=%d, h=%d, parity=%d, field_mode=%d)\n",
- width,height,parity,field_mode);
-#endif /* DEBUG */
-
- if(field_mode)
- {
- incr = 2;
-
- if(parity==0)
- s += width;
- }
- else
- {
- incr = 1;
- }
-
- for(row=0; row<height; row+=incr)
- {
- for(col=0; col<width; col++)
- {
- dst[d+col] = src[s+col];
- }
-
- d += (width*incr);
- s += (width*incr);
- }
-
-}
-
Index: start/mpeg2/config.h
===================================================================
--- start/mpeg2/config.h (revision 1087)
+++ start/mpeg2/config.h (nonexistent)
@@ -1,45 +0,0 @@
-/* config.h, configuration defines */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-/* define NON_ANSI_COMPILER for compilers without function prototyping */
-/* #define NON_ANSI_COMPILER */
-
-#ifdef NON_ANSI_COMPILER
-#define _ANSI_ARGS_(x) ()
-#else
-#define _ANSI_ARGS_(x) x
-#endif
-
-#define RB "rb"
-#define WB "wb"
-
-#ifndef O_BINARY
-#define O_BINARY 0
-
-#endif
Index: start/mpeg2/getpic.c
===================================================================
--- start/mpeg2/getpic.c (revision 1087)
+++ start/mpeg2/getpic.c (nonexistent)
@@ -1,1225 +0,0 @@
-/* getpic.c, picture decoding */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-#include <stdio.h>
-
-#include "config.h"
-#include "global.h"
-
-/* private prototypes*/
-static void picture_data _ANSI_ARGS_((int framenum));
-static void macroblock_modes _ANSI_ARGS_((int *pmacroblock_type, int *pstwtype,
- int *pstwclass, int *pmotion_type, int *pmotion_vector_count, int *pmv_format, int *pdmv,
- int *pmvscale, int *pdct_type));
-static void Clear_Block _ANSI_ARGS_((int comp));
-static void Sum_Block _ANSI_ARGS_((int comp));
-static void Saturate _ANSI_ARGS_((short *bp));
-static void Add_Block _ANSI_ARGS_((int comp, int bx, int by,
- int dct_type, int addflag));
-static void Update_Picture_Buffers _ANSI_ARGS_((void));
-static void frame_reorder _ANSI_ARGS_((int bitstream_framenum,
- int sequence_framenum));
-static void Decode_SNR_Macroblock _ANSI_ARGS_((int *SNRMBA, int *SNRMBAinc,
- int MBA, int MBAmax, int *dct_type));
-
-static void motion_compensation _ANSI_ARGS_((int MBA, int macroblock_type,
- int motion_type, int PMV[2][2][2], int motion_vertical_field_select[2][2],
- int dmvector[2], int stwtype, int dct_type));
-
-static void skipped_macroblock _ANSI_ARGS_((int dc_dct_pred[3],
- int PMV[2][2][2], int *motion_type, int motion_vertical_field_select[2][2],
- int *stwtype, int *macroblock_type));
-
-static int slice _ANSI_ARGS_((int framenum, int MBAmax));
-
-static int start_of_slice _ANSI_ARGS_ ((int MBAmax, int *MBA,
- int *MBAinc, int dc_dct_pred[3], int PMV[2][2][2]));
-
-static int decode_macroblock _ANSI_ARGS_((int *macroblock_type,
- int *stwtype, int *stwclass, int *motion_type, int *dct_type,
- int PMV[2][2][2], int dc_dct_pred[3],
- int motion_vertical_field_select[2][2], int dmvector[2]));
-
-
-/* decode one frame or field picture */
-void Decode_Picture(bitstream_framenum, sequence_framenum)
-int bitstream_framenum, sequence_framenum;
-{
-
- if (picture_structure==FRAME_PICTURE && Second_Field)
- {
- /* recover from illegal number of field pictures */
- printf("odd number of field pictures\n");
- Second_Field = 0;
- }
-
- /* IMPLEMENTATION: update picture buffer pointers */
- Update_Picture_Buffers();
-
-#ifdef VERIFY
- Check_Headers(bitstream_framenum, sequence_framenum);
-#endif /* VERIFY */
-
- /* ISO/IEC 13818-4 section 2.4.5.4 "frame buffer intercept method" */
- /* (section number based on November 1995 (Dallas) draft of the
- conformance document) */
- if(Ersatz_Flag)
- Substitute_Frame_Buffer(bitstream_framenum, sequence_framenum);
-
- /* form spatial scalable picture */
-
- /* form spatial scalable picture */
- /* ISO/IEC 13818-2 section 7.7: Spatial scalability */
- if (base.pict_scal && !Second_Field)
- {
- Spatial_Prediction();
- }
-
- /* decode picture data ISO/IEC 13818-2 section 6.2.3.7 */
- picture_data(bitstream_framenum);
-
- /* write or display current or previously decoded reference frame */
- /* ISO/IEC 13818-2 section 6.1.1.11: Frame reordering */
- frame_reorder(bitstream_framenum, sequence_framenum);
-
- if (picture_structure!=FRAME_PICTURE)
- Second_Field = !Second_Field;
-}
-
-
-/* decode all macroblocks of the current picture */
-/* stages described in ISO/IEC 13818-2 section 7 */
-static void picture_data(framenum)
-int framenum;
-{
- int MBAmax;
- int ret;
-
- /* number of macroblocks per picture */
- MBAmax = mb_width*mb_height;
-
- if (picture_structure!=FRAME_PICTURE)
- MBAmax>>=1; /* field picture has half as mnay macroblocks as frame */
-
- for(;;)
- {
- if((ret=slice(framenum, MBAmax))<0)
- return;
- }
-
-}
-
-
-
-/* decode all macroblocks of the current picture */
-/* ISO/IEC 13818-2 section 6.3.16 */
-static int slice(framenum, MBAmax)
-int framenum, MBAmax;
-{
- int MBA;
- int MBAinc, macroblock_type, motion_type, dct_type;
- int dc_dct_pred[3];
- int PMV[2][2][2], motion_vertical_field_select[2][2];
- int dmvector[2];
- int stwtype, stwclass;
- int SNRMBA, SNRMBAinc;
- int ret;
-
- MBA = 0; /* macroblock address */
- MBAinc = 0;
-
- if((ret=start_of_slice(MBAmax, &MBA, &MBAinc, dc_dct_pred, PMV))!=1)
- return(ret);
-
- if (Two_Streams && enhan.scalable_mode==SC_SNR)
- {
- SNRMBA=0;
- SNRMBAinc=0;
- }
-
- Fault_Flag=0;
-
- for (;;)
- {
-
- /* this is how we properly exit out of picture */
- if (MBA>=MBAmax)
- return(-1); /* all macroblocks decoded */
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("frame %d, MB %d\n",framenum,MBA);
-#endif /* TRACE */
-
-#ifdef DISPLAY
- if (!progressive_frame && picture_structure==FRAME_PICTURE
- && MBA==(MBAmax>>1) && framenum!=0 && Output_Type==T_X11
- && !Display_Progressive_Flag)
- {
- Display_Second_Field();
- }
-#endif
-
- ld = &base;
-
- if (MBAinc==0)
- {
- if (base.scalable_mode==SC_DP && base.priority_breakpoint==1)
- ld = &enhan;
-
- if (!Show_Bits(23) || Fault_Flag) /* next_start_code or fault */
- {
-resync: /* if Fault_Flag: resynchronize to next next_start_code */
- Fault_Flag = 0;
- return(0); /* trigger: go to next slice */
- }
- else /* neither next_start_code nor Fault_Flag */
- {
- if (base.scalable_mode==SC_DP && base.priority_breakpoint==1)
- ld = &enhan;
-
- /* decode macroblock address increment */
- MBAinc = Get_macroblock_address_increment();
-
- if (Fault_Flag) goto resync;
- }
- }
-
- if (MBA>=MBAmax)
- {
- /* MBAinc points beyond picture dimensions */
- if (!Quiet_Flag)
- printf("Too many macroblocks in picture\n");
- return(-1);
- }
-
- if (MBAinc==1) /* not skipped */
- {
- ret = decode_macroblock(&macroblock_type, &stwtype, &stwclass,
- &motion_type, &dct_type, PMV, dc_dct_pred,
- motion_vertical_field_select, dmvector);
-
- if(ret==-1)
- return(-1);
-
- if(ret==0)
- goto resync;
-
- }
- else /* MBAinc!=1: skipped macroblock */
- {
- /* ISO/IEC 13818-2 section 7.6.6 */
- skipped_macroblock(dc_dct_pred, PMV, &motion_type,
- motion_vertical_field_select, &stwtype, &macroblock_type);
- }
-
- /* SCALABILITY: SNR */
- /* ISO/IEC 13818-2 section 7.8 */
- /* NOTE: we currently ignore faults encountered in this routine */
- if (Two_Streams && enhan.scalable_mode==SC_SNR)
- Decode_SNR_Macroblock(&SNRMBA, &SNRMBAinc, MBA, MBAmax, &dct_type);
-
- /* ISO/IEC 13818-2 section 7.6 */
- motion_compensation(MBA, macroblock_type, motion_type, PMV,
- motion_vertical_field_select, dmvector, stwtype, dct_type);
-
-
- /* advance to next macroblock */
- MBA++;
- MBAinc--;
-
- /* SCALABILITY: SNR */
- if (Two_Streams && enhan.scalable_mode==SC_SNR)
- {
- SNRMBA++;
- SNRMBAinc--;
- }
-
- if (MBA>=MBAmax)
- return(-1); /* all macroblocks decoded */
- }
-}
-
-
-/* ISO/IEC 13818-2 section 6.3.17.1: Macroblock modes */
-static void macroblock_modes(pmacroblock_type,pstwtype,pstwclass,
- pmotion_type,pmotion_vector_count,pmv_format,pdmv,pmvscale,pdct_type)
- int *pmacroblock_type, *pstwtype, *pstwclass;
- int *pmotion_type, *pmotion_vector_count, *pmv_format, *pdmv, *pmvscale;
- int *pdct_type;
-{
- int macroblock_type;
- int stwtype, stwcode, stwclass;
- int motion_type = 0;
- int motion_vector_count, mv_format, dmv, mvscale;
- int dct_type;
- static unsigned char stwc_table[3][4]
- = { {6,3,7,4}, {2,1,5,4}, {2,5,7,4} };
- static unsigned char stwclass_table[9]
- = {0, 1, 2, 1, 1, 2, 3, 3, 4};
-
- /* get macroblock_type */
- macroblock_type = Get_macroblock_type();
-
- if (Fault_Flag) return;
-
- /* get spatial_temporal_weight_code */
- if (macroblock_type & MB_WEIGHT)
- {
- if (spatial_temporal_weight_code_table_index==0)
- stwtype = 4;
- else
- {
- stwcode = Get_Bits(2);
-#ifdef TRACE
- if (Trace_Flag)
- {
- printf("spatial_temporal_weight_code (");
- Print_Bits(stwcode,2,2);
- printf("): %d\n",stwcode);
- }
-#endif /* TRACE */
- stwtype = stwc_table[spatial_temporal_weight_code_table_index-1][stwcode];
- }
- }
- else
- stwtype = (macroblock_type & MB_CLASS4) ? 8 : 0;
-
- /* SCALABILITY: derive spatial_temporal_weight_class (Table 7-18) */
- stwclass = stwclass_table[stwtype];
-
- /* get frame/field motion type */
- if (macroblock_type & (MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD))
- {
- if (picture_structure==FRAME_PICTURE) /* frame_motion_type */
- {
- motion_type = frame_pred_frame_dct ? MC_FRAME : Get_Bits(2);
-#ifdef TRACE
- if (!frame_pred_frame_dct && Trace_Flag)
- {
- printf("frame_motion_type (");
- Print_Bits(motion_type,2,2);
- printf("): %s\n",motion_type==MC_FIELD?"Field":
- motion_type==MC_FRAME?"Frame":
- motion_type==MC_DMV?"Dual_Prime":"Invalid");
- }
-#endif /* TRACE */
- }
- else /* field_motion_type */
- {
- motion_type = Get_Bits(2);
-#ifdef TRACE
- if (Trace_Flag)
- {
- printf("field_motion_type (");
- Print_Bits(motion_type,2,2);
- printf("): %s\n",motion_type==MC_FIELD?"Field":
- motion_type==MC_16X8?"16x8 MC":
- motion_type==MC_DMV?"Dual_Prime":"Invalid");
- }
-#endif /* TRACE */
- }
- }
- else if ((macroblock_type & MACROBLOCK_INTRA) && concealment_motion_vectors)
- {
- /* concealment motion vectors */
- motion_type = (picture_structure==FRAME_PICTURE) ? MC_FRAME : MC_FIELD;
- }
-#if 0
- else
- {
- printf("maroblock_modes(): unknown macroblock type\n");
- motion_type = -1;
- }
-#endif
-
- /* derive motion_vector_count, mv_format and dmv, (table 6-17, 6-18) */
- if (picture_structure==FRAME_PICTURE)
- {
- motion_vector_count = (motion_type==MC_FIELD && stwclass<2) ? 2 : 1;
- mv_format = (motion_type==MC_FRAME) ? MV_FRAME : MV_FIELD;
- }
- else
- {
- motion_vector_count = (motion_type==MC_16X8) ? 2 : 1;
- mv_format = MV_FIELD;
- }
-
- dmv = (motion_type==MC_DMV); /* dual prime */
-
- /* field mv predictions in frame pictures have to be scaled
- * ISO/IEC 13818-2 section 7.6.3.1 Decoding the motion vectors
- * IMPLEMENTATION: mvscale is derived for later use in motion_vectors()
- * it displaces the stage:
- *
- * if((mv_format=="field")&&(t==1)&&(picture_structure=="Frame picture"))
- * prediction = PMV[r][s][t] DIV 2;
- */
-
- mvscale = ((mv_format==MV_FIELD) && (picture_structure==FRAME_PICTURE));
-
- /* get dct_type (frame DCT / field DCT) */
- dct_type = (picture_structure==FRAME_PICTURE)
- && (!frame_pred_frame_dct)
- && (macroblock_type & (MACROBLOCK_PATTERN|MACROBLOCK_INTRA))
- ? Get_Bits(1)
- : 0;
-
-#ifdef TRACE
- if (Trace_Flag && (picture_structure==FRAME_PICTURE)
- && (!frame_pred_frame_dct)
- && (macroblock_type & (MACROBLOCK_PATTERN|MACROBLOCK_INTRA)))
- printf("dct_type (%d): %s\n",dct_type,dct_type?"Field":"Frame");
-#endif /* TRACE */
-
- /* return values */
- *pmacroblock_type = macroblock_type;
- *pstwtype = stwtype;
- *pstwclass = stwclass;
- *pmotion_type = motion_type;
- *pmotion_vector_count = motion_vector_count;
- *pmv_format = mv_format;
- *pdmv = dmv;
- *pmvscale = mvscale;
- *pdct_type = dct_type;
-}
-
-
-/* move/add 8x8-Block from block[comp] to backward_reference_frame */
-/* copy reconstructed 8x8 block from block[comp] to current_frame[]
- * ISO/IEC 13818-2 section 7.6.8: Adding prediction and coefficient data
- * This stage also embodies some of the operations implied by:
- * - ISO/IEC 13818-2 section 7.6.7: Combining predictions
- * - ISO/IEC 13818-2 section 6.1.3: Macroblock
-*/
-static void Add_Block(comp,bx,by,dct_type,addflag)
-int comp,bx,by,dct_type,addflag;
-{
- int cc,i, j, iincr;
- unsigned char *rfp;
- short *bp;
-
-
- /* derive color component index */
- /* equivalent to ISO/IEC 13818-2 Table 7-1 */
- cc = (comp<4) ? 0 : (comp&1)+1; /* color component index */
-
- if (cc==0)
- {
- /* luminance */
-
- if (picture_structure==FRAME_PICTURE)
- if (dct_type)
- {
- /* field DCT coding */
- rfp = current_frame[0]
- + Coded_Picture_Width*(by+((comp&2)>>1)) + bx + ((comp&1)<<3);
- iincr = (Coded_Picture_Width<<1) - 8;
- }
- else
- {
- /* frame DCT coding */
- rfp = current_frame[0]
- + Coded_Picture_Width*(by+((comp&2)<<2)) + bx + ((comp&1)<<3);
- iincr = Coded_Picture_Width - 8;
- }
- else
- {
- /* field picture */
- rfp = current_frame[0]
- + (Coded_Picture_Width<<1)*(by+((comp&2)<<2)) + bx + ((comp&1)<<3);
- iincr = (Coded_Picture_Width<<1) - 8;
- }
- }
- else
- {
- /* chrominance */
-
- /* scale coordinates */
- if (chroma_format!=CHROMA444)
- bx >>= 1;
- if (chroma_format==CHROMA420)
- by >>= 1;
- if (picture_structure==FRAME_PICTURE)
- {
- if (dct_type && (chroma_format!=CHROMA420))
- {
- /* field DCT coding */
- rfp = current_frame[cc]
- + Chroma_Width*(by+((comp&2)>>1)) + bx + (comp&8);
- iincr = (Chroma_Width<<1) - 8;
- }
- else
- {
- /* frame DCT coding */
- rfp = current_frame[cc]
- + Chroma_Width*(by+((comp&2)<<2)) + bx + (comp&8);
- iincr = Chroma_Width - 8;
- }
- }
- else
- {
- /* field picture */
- rfp = current_frame[cc]
- + (Chroma_Width<<1)*(by+((comp&2)<<2)) + bx + (comp&8);
- iincr = (Chroma_Width<<1) - 8;
- }
- }
-
- bp = ld->block[comp];
-
- if (addflag)
- {
- for (i=0; i<8; i++)
- {
- for (j=0; j<8; j++)
- {
- *rfp = Clip[*bp++ + *rfp];
- rfp++;
- }
-
- rfp+= iincr;
- }
- }
- else
- {
- for (i=0; i<8; i++)
- {
- for (j=0; j<8; j++)
- *rfp++ = Clip[*bp++ + 128];
-
- rfp+= iincr;
- }
- }
-}
-
-
-/* ISO/IEC 13818-2 section 7.8 */
-static void Decode_SNR_Macroblock(SNRMBA, SNRMBAinc, MBA, MBAmax, dct_type)
- int *SNRMBA, *SNRMBAinc;
- int MBA, MBAmax;
- int *dct_type;
-{
- int SNRmacroblock_type, SNRcoded_block_pattern, SNRdct_type, dummy;
- int slice_vert_pos_ext, quantizer_scale_code, comp, code;
-
- ld = &enhan;
-
- if (*SNRMBAinc==0)
- {
- if (!Show_Bits(23)) /* next_start_code */
- {
- next_start_code();
- code = Show_Bits(32);
-
- if (code<SLICE_START_CODE_MIN || code>SLICE_START_CODE_MAX)
- {
- /* only slice headers are allowed in picture_data */
- if (!Quiet_Flag)
- printf("SNR: Premature end of picture\n");
- return;
- }
-
- Flush_Buffer32();
-
- /* decode slice header (may change quantizer_scale) */
- slice_vert_pos_ext = slice_header();
-
- /* decode macroblock address increment */
- *SNRMBAinc = Get_macroblock_address_increment();
-
- /* set current location */
- *SNRMBA =
- ((slice_vert_pos_ext<<7) + (code&255) - 1)*mb_width + *SNRMBAinc - 1;
-
- *SNRMBAinc = 1; /* first macroblock in slice: not skipped */
- }
- else /* not next_start_code */
- {
- if (*SNRMBA>=MBAmax)
- {
- if (!Quiet_Flag)
- printf("Too many macroblocks in picture\n");
- return;
- }
-
- /* decode macroblock address increment */
- *SNRMBAinc = Get_macroblock_address_increment();
- }
- }
-
- if (*SNRMBA!=MBA)
- {
- /* streams out of sync */
- if (!Quiet_Flag)
- printf("Cant't synchronize streams\n");
- return;
- }
-
- if (*SNRMBAinc==1) /* not skipped */
- {
- macroblock_modes(&SNRmacroblock_type, &dummy, &dummy,
- &dummy, &dummy, &dummy, &dummy, &dummy,
- &SNRdct_type);
-
- if (SNRmacroblock_type & MACROBLOCK_PATTERN)
- *dct_type = SNRdct_type;
-
- if (SNRmacroblock_type & MACROBLOCK_QUANT)
- {
- quantizer_scale_code = Get_Bits(5);
- ld->quantizer_scale =
- ld->q_scale_type ? Non_Linear_quantizer_scale[quantizer_scale_code] : quantizer_scale_code<<1;
- }
-
- /* macroblock_pattern */
- if (SNRmacroblock_type & MACROBLOCK_PATTERN)
- {
- SNRcoded_block_pattern = Get_coded_block_pattern();
-
- if (chroma_format==CHROMA422)
- SNRcoded_block_pattern = (SNRcoded_block_pattern<<2) | Get_Bits(2); /* coded_block_pattern_1 */
- else if (chroma_format==CHROMA444)
- SNRcoded_block_pattern = (SNRcoded_block_pattern<<6) | Get_Bits(6); /* coded_block_pattern_2 */
- }
- else
- SNRcoded_block_pattern = 0;
-
- /* decode blocks */
- for (comp=0; comp<block_count; comp++)
- {
- Clear_Block(comp);
-
- if (SNRcoded_block_pattern & (1<<(block_count-1-comp)))
- Decode_MPEG2_Non_Intra_Block(comp);
- }
- }
- else /* SNRMBAinc!=1: skipped macroblock */
- {
- for (comp=0; comp<block_count; comp++)
- Clear_Block(comp);
- }
-
- ld = &base;
-}
-
-
-
-/* IMPLEMENTATION: set scratch pad macroblock to zero */
-static void Clear_Block(comp)
-int comp;
-{
- short *Block_Ptr;
- int i;
-
- Block_Ptr = ld->block[comp];
-
- for (i=0; i<64; i++)
- *Block_Ptr++ = 0;
-}
-
-
-/* SCALABILITY: add SNR enhancement layer block data to base layer */
-/* ISO/IEC 13818-2 section 7.8.3.4: Addition of coefficients from the two layes */
-static void Sum_Block(comp)
-int comp;
-{
- short *Block_Ptr1, *Block_Ptr2;
- int i;
-
- Block_Ptr1 = base.block[comp];
- Block_Ptr2 = enhan.block[comp];
-
- for (i=0; i<64; i++)
- *Block_Ptr1++ += *Block_Ptr2++;
-}
-
-
-/* limit coefficients to -2048..2047 */
-/* ISO/IEC 13818-2 section 7.4.3 and 7.4.4: Saturation and Mismatch control */
-static void Saturate(Block_Ptr)
-short *Block_Ptr;
-{
- int i, sum, val;
-
- sum = 0;
-
- /* ISO/IEC 13818-2 section 7.4.3: Saturation */
- for (i=0; i<64; i++)
- {
- val = Block_Ptr[i];
-
- if (val>2047)
- val = 2047;
- else if (val<-2048)
- val = -2048;
-
- Block_Ptr[i] = val;
- sum+= val;
- }
-
- /* ISO/IEC 13818-2 section 7.4.4: Mismatch control */
- if ((sum&1)==0)
- Block_Ptr[63]^= 1;
-
-}
-
-
-/* reuse old picture buffers as soon as they are no longer needed
- based on life-time axioms of MPEG */
-static void Update_Picture_Buffers()
-{
- int cc; /* color component index */
- unsigned char *tmp; /* temporary swap pointer */
-
- for (cc=0; cc<3; cc++)
- {
- /* B pictures do not need to be save for future reference */
- if (picture_coding_type==B_TYPE)
- {
- current_frame[cc] = auxframe[cc];
- }
- else
- {
- /* only update at the beginning of the coded frame */
- if (!Second_Field)
- {
- tmp = forward_reference_frame[cc];
-
- /* the previously decoded reference frame is stored
- coincident with the location where the backward
- reference frame is stored (backwards prediction is not
- needed in P pictures) */
- forward_reference_frame[cc] = backward_reference_frame[cc];
-
- /* update pointer for potential future B pictures */
- backward_reference_frame[cc] = tmp;
- }
-
- /* can erase over old backward reference frame since it is not used
- in a P picture, and since any subsequent B pictures will use the
- previously decoded I or P frame as the backward_reference_frame */
- current_frame[cc] = backward_reference_frame[cc];
- }
-
- /* IMPLEMENTATION:
- one-time folding of a line offset into the pointer which stores the
- memory address of the current frame saves offsets and conditional
- branches throughout the remainder of the picture processing loop */
- if (picture_structure==BOTTOM_FIELD)
- current_frame[cc]+= (cc==0) ? Coded_Picture_Width : Chroma_Width;
- }
-}
-
-
-/* store last frame */
-
-void Output_Last_Frame_of_Sequence(Framenum)
-int Framenum;
-{
- if (Second_Field)
- printf("last frame incomplete, not stored\n");
- else
- Write_Frame(backward_reference_frame,Framenum-1);
-}
-
-
-
-static void frame_reorder(Bitstream_Framenum, Sequence_Framenum)
-int Bitstream_Framenum, Sequence_Framenum;
-{
- /* tracking variables to insure proper output in spatial scalability */
- static int Oldref_progressive_frame, Newref_progressive_frame;
-
- if (Sequence_Framenum!=0)
- {
- if (picture_structure==FRAME_PICTURE || Second_Field)
- {
- if (picture_coding_type==B_TYPE)
- Write_Frame(auxframe,Bitstream_Framenum-1);
- else
- {
- Newref_progressive_frame = progressive_frame;
- progressive_frame = Oldref_progressive_frame;
-
- Write_Frame(forward_reference_frame,Bitstream_Framenum-1);
-
- Oldref_progressive_frame = progressive_frame = Newref_progressive_frame;
- }
- }
-#ifdef DISPLAY
- else if (Output_Type==T_X11)
- {
- if(!Display_Progressive_Flag)
- Display_Second_Field();
- }
-#endif
- }
- else
- Oldref_progressive_frame = progressive_frame;
-
-}
-
-
-/* ISO/IEC 13818-2 section 7.6 */
-static void motion_compensation(MBA, macroblock_type, motion_type, PMV,
- motion_vertical_field_select, dmvector, stwtype, dct_type)
-int MBA;
-int macroblock_type;
-int motion_type;
-int PMV[2][2][2];
-int motion_vertical_field_select[2][2];
-int dmvector[2];
-int stwtype;
-int dct_type;
-{
- int bx, by;
- int comp;
-
- /* derive current macroblock position within picture */
- /* ISO/IEC 13818-2 section 6.3.1.6 and 6.3.1.7 */
- bx = 16*(MBA%mb_width);
- by = 16*(MBA/mb_width);
-
- /* motion compensation */
- if (!(macroblock_type & MACROBLOCK_INTRA))
- form_predictions(bx,by,macroblock_type,motion_type,PMV,
- motion_vertical_field_select,dmvector,stwtype);
-
- /* SCALABILITY: Data Partitioning */
- if (base.scalable_mode==SC_DP)
- ld = &base;
-
- /* copy or add block data into picture */
- for (comp=0; comp<block_count; comp++)
- {
- /* SCALABILITY: SNR */
- /* ISO/IEC 13818-2 section 7.8.3.4: Addition of coefficients from
- the two a layers */
- if (Two_Streams && enhan.scalable_mode==SC_SNR)
- Sum_Block(comp); /* add SNR enhancement layer data to base layer */
-
- /* MPEG-2 saturation and mismatch control */
- /* base layer could be MPEG-1 stream, enhancement MPEG-2 SNR */
- /* ISO/IEC 13818-2 section 7.4.3 and 7.4.4: Saturation and Mismatch control */
- if ((Two_Streams && enhan.scalable_mode==SC_SNR) || ld->MPEG2_Flag)
- Saturate(ld->block[comp]);
-
- /* ISO/IEC 13818-2 section Annex A: inverse DCT */
- if (Reference_IDCT_Flag)
- Reference_IDCT(ld->block[comp]);
- else
- Fast_IDCT(ld->block[comp]);
-
- /* ISO/IEC 13818-2 section 7.6.8: Adding prediction and coefficient data */
- Add_Block(comp,bx,by,dct_type,(macroblock_type & MACROBLOCK_INTRA)==0);
- }
-
-}
-
-
-
-/* ISO/IEC 13818-2 section 7.6.6 */
-static void skipped_macroblock(dc_dct_pred, PMV, motion_type,
- motion_vertical_field_select, stwtype, macroblock_type)
-int dc_dct_pred[3];
-int PMV[2][2][2];
-int *motion_type;
-int motion_vertical_field_select[2][2];
-int *stwtype;
-int *macroblock_type;
-{
- int comp;
-
- /* SCALABILITY: Data Paritioning */
- if (base.scalable_mode==SC_DP)
- ld = &base;
-
- for (comp=0; comp<block_count; comp++)
- Clear_Block(comp);
-
- /* reset intra_dc predictors */
- /* ISO/IEC 13818-2 section 7.2.1: DC coefficients in intra blocks */
- dc_dct_pred[0]=dc_dct_pred[1]=dc_dct_pred[2]=0;
-
- /* reset motion vector predictors */
- /* ISO/IEC 13818-2 section 7.6.3.4: Resetting motion vector predictors */
- if (picture_coding_type==P_TYPE)
- PMV[0][0][0]=PMV[0][0][1]=PMV[1][0][0]=PMV[1][0][1]=0;
-
- /* derive motion_type */
- if (picture_structure==FRAME_PICTURE)
- *motion_type = MC_FRAME;
- else
- {
- *motion_type = MC_FIELD;
-
- /* predict from field of same parity */
- /* ISO/IEC 13818-2 section 7.6.6.1 and 7.6.6.3: P field picture and B field
- picture */
- motion_vertical_field_select[0][0]=motion_vertical_field_select[0][1] =
- (picture_structure==BOTTOM_FIELD);
- }
-
- /* skipped I are spatial-only predicted, */
- /* skipped P and B are temporal-only predicted */
- /* ISO/IEC 13818-2 section 7.7.6: Skipped macroblocks */
- *stwtype = (picture_coding_type==I_TYPE) ? 8 : 0;
-
- /* IMPLEMENTATION: clear MACROBLOCK_INTRA */
- *macroblock_type&= ~MACROBLOCK_INTRA;
-
-}
-
-
-/* return==-1 means go to next picture */
-/* the expression "start of slice" is used throughout the normative
- body of the MPEG specification */
-static int start_of_slice(MBAmax, MBA, MBAinc,
- dc_dct_pred, PMV)
-int MBAmax;
-int *MBA;
-int *MBAinc;
-int dc_dct_pred[3];
-int PMV[2][2][2];
-{
- unsigned int code;
- int slice_vert_pos_ext;
-
- ld = &base;
-
- Fault_Flag = 0;
-
- next_start_code();
- code = Show_Bits(32);
-
- if (code<SLICE_START_CODE_MIN || code>SLICE_START_CODE_MAX)
- {
- /* only slice headers are allowed in picture_data */
- if (!Quiet_Flag)
- printf("start_of_slice(): Premature end of picture\n");
-
- return(-1); /* trigger: go to next picture */
- }
-
- Flush_Buffer32();
-
- /* decode slice header (may change quantizer_scale) */
- slice_vert_pos_ext = slice_header();
-
-
- /* SCALABILITY: Data Partitioning */
- if (base.scalable_mode==SC_DP)
- {
- ld = &enhan;
- next_start_code();
- code = Show_Bits(32);
-
- if (code<SLICE_START_CODE_MIN || code>SLICE_START_CODE_MAX)
- {
- /* only slice headers are allowed in picture_data */
- if (!Quiet_Flag)
- printf("DP: Premature end of picture\n");
- return(-1); /* trigger: go to next picture */
- }
-
- Flush_Buffer32();
-
- /* decode slice header (may change quantizer_scale) */
- slice_vert_pos_ext = slice_header();
-
- if (base.priority_breakpoint!=1)
- ld = &base;
- }
-
- /* decode macroblock address increment */
- *MBAinc = Get_macroblock_address_increment();
-
- if (Fault_Flag)
- {
- printf("start_of_slice(): MBAinc unsuccessful\n");
- return(0); /* trigger: go to next slice */
- }
-
- /* set current location */
- /* NOTE: the arithmetic used to derive macroblock_address below is
- * equivalent to ISO/IEC 13818-2 section 6.3.17: Macroblock
- */
- *MBA = ((slice_vert_pos_ext<<7) + (code&255) - 1)*mb_width + *MBAinc - 1;
- *MBAinc = 1; /* first macroblock in slice: not skipped */
-
- /* reset all DC coefficient and motion vector predictors */
- /* reset all DC coefficient and motion vector predictors */
- /* ISO/IEC 13818-2 section 7.2.1: DC coefficients in intra blocks */
- dc_dct_pred[0]=dc_dct_pred[1]=dc_dct_pred[2]=0;
-
- /* ISO/IEC 13818-2 section 7.6.3.4: Resetting motion vector predictors */
- PMV[0][0][0]=PMV[0][0][1]=PMV[1][0][0]=PMV[1][0][1]=0;
- PMV[0][1][0]=PMV[0][1][1]=PMV[1][1][0]=PMV[1][1][1]=0;
-
- /* successfull: trigger decode macroblocks in slice */
- return(1);
-}
-
-
-/* ISO/IEC 13818-2 sections 7.2 through 7.5 */
-static int decode_macroblock(macroblock_type, stwtype, stwclass,
- motion_type, dct_type, PMV, dc_dct_pred,
- motion_vertical_field_select, dmvector)
-int *macroblock_type;
-int *stwtype;
-int *stwclass;
-int *motion_type;
-int *dct_type;
-int PMV[2][2][2];
-int dc_dct_pred[3];
-int motion_vertical_field_select[2][2];
-int dmvector[2];
-{
- /* locals */
- int quantizer_scale_code;
- int comp;
-
- int motion_vector_count;
- int mv_format;
- int dmv;
- int mvscale;
- int coded_block_pattern;
-
- /* SCALABILITY: Data Patitioning */
- if (base.scalable_mode==SC_DP)
- {
- if (base.priority_breakpoint<=2)
- ld = &enhan;
- else
- ld = &base;
- }
-
- /* ISO/IEC 13818-2 section 6.3.17.1: Macroblock modes */
- macroblock_modes(macroblock_type, stwtype, stwclass,
- motion_type, &motion_vector_count, &mv_format, &dmv, &mvscale,
- dct_type);
-
- if (Fault_Flag) return(0); /* trigger: go to next slice */
-
- if (*macroblock_type & MACROBLOCK_QUANT)
- {
- quantizer_scale_code = Get_Bits(5);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- printf("quantiser_scale_code (");
- Print_Bits(quantizer_scale_code,5,5);
- printf("): %d\n",quantizer_scale_code);
- }
-#endif /* TRACE */
-
- /* ISO/IEC 13818-2 section 7.4.2.2: Quantizer scale factor */
- if (ld->MPEG2_Flag)
- ld->quantizer_scale =
- ld->q_scale_type ? Non_Linear_quantizer_scale[quantizer_scale_code]
- : (quantizer_scale_code << 1);
- else
- ld->quantizer_scale = quantizer_scale_code;
-
- /* SCALABILITY: Data Partitioning */
- if (base.scalable_mode==SC_DP)
- /* make sure base.quantizer_scale is valid */
- base.quantizer_scale = ld->quantizer_scale;
- }
-
- /* motion vectors */
-
-
- /* ISO/IEC 13818-2 section 6.3.17.2: Motion vectors */
-
- /* decode forward motion vectors */
- if ((*macroblock_type & MACROBLOCK_MOTION_FORWARD)
- || ((*macroblock_type & MACROBLOCK_INTRA)
- && concealment_motion_vectors))
- {
- if (ld->MPEG2_Flag)
- motion_vectors(PMV,dmvector,motion_vertical_field_select,
- 0,motion_vector_count,mv_format,f_code[0][0]-1,f_code[0][1]-1,
- dmv,mvscale);
- else
- motion_vector(PMV[0][0],dmvector,
- forward_f_code-1,forward_f_code-1,0,0,full_pel_forward_vector);
- }
-
- if (Fault_Flag) return(0); /* trigger: go to next slice */
-
- /* decode backward motion vectors */
- if (*macroblock_type & MACROBLOCK_MOTION_BACKWARD)
- {
- if (ld->MPEG2_Flag)
- motion_vectors(PMV,dmvector,motion_vertical_field_select,
- 1,motion_vector_count,mv_format,f_code[1][0]-1,f_code[1][1]-1,0,
- mvscale);
- else
- motion_vector(PMV[0][1],dmvector,
- backward_f_code-1,backward_f_code-1,0,0,full_pel_backward_vector);
- }
-
- if (Fault_Flag) return(0); /* trigger: go to next slice */
-
- if ((*macroblock_type & MACROBLOCK_INTRA) && concealment_motion_vectors)
- Flush_Buffer(1); /* remove marker_bit */
-
- if (base.scalable_mode==SC_DP && base.priority_breakpoint==3)
- ld = &enhan;
-
- /* macroblock_pattern */
- /* ISO/IEC 13818-2 section 6.3.17.4: Coded block pattern */
- if (*macroblock_type & MACROBLOCK_PATTERN)
- {
- coded_block_pattern = Get_coded_block_pattern();
-
- if (chroma_format==CHROMA422)
- {
- /* coded_block_pattern_1 */
- coded_block_pattern = (coded_block_pattern<<2) | Get_Bits(2);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- printf("coded_block_pattern_1: ");
- Print_Bits(coded_block_pattern,2,2);
- printf(" (%d)\n",coded_block_pattern&3);
- }
-#endif /* TRACE */
- }
- else if (chroma_format==CHROMA444)
- {
- /* coded_block_pattern_2 */
- coded_block_pattern = (coded_block_pattern<<6) | Get_Bits(6);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- printf("coded_block_pattern_2: ");
- Print_Bits(coded_block_pattern,6,6);
- printf(" (%d)\n",coded_block_pattern&63);
- }
-#endif /* TRACE */
- }
- }
- else
- coded_block_pattern = (*macroblock_type & MACROBLOCK_INTRA) ?
- (1<<block_count)-1 : 0;
-
- if (Fault_Flag) return(0); /* trigger: go to next slice */
-
- /* decode blocks */
- for (comp=0; comp<block_count; comp++)
- {
- /* SCALABILITY: Data Partitioning */
- if (base.scalable_mode==SC_DP)
- ld = &base;
-
- Clear_Block(comp);
-
- if (coded_block_pattern & (1<<(block_count-1-comp)))
- {
- if (*macroblock_type & MACROBLOCK_INTRA)
- {
- if (ld->MPEG2_Flag)
- Decode_MPEG2_Intra_Block(comp,dc_dct_pred);
- else
- Decode_MPEG1_Intra_Block(comp,dc_dct_pred);
- }
- else
- {
- if (ld->MPEG2_Flag)
- Decode_MPEG2_Non_Intra_Block(comp);
- else
- Decode_MPEG1_Non_Intra_Block(comp);
- }
-
- if (Fault_Flag) return(0); /* trigger: go to next slice */
- }
- }
-
- if(picture_coding_type==D_TYPE)
- {
- /* remove end_of_macroblock (always 1, prevents startcode emulation) */
- /* ISO/IEC 11172-2 section 2.4.2.7 and 2.4.3.6 */
- marker_bit("D picture end_of_macroblock bit");
- }
-
- /* reset intra_dc predictors */
- /* ISO/IEC 13818-2 section 7.2.1: DC coefficients in intra blocks */
- if (!(*macroblock_type & MACROBLOCK_INTRA))
- dc_dct_pred[0]=dc_dct_pred[1]=dc_dct_pred[2]=0;
-
- /* reset motion vector predictors */
- if ((*macroblock_type & MACROBLOCK_INTRA) && !concealment_motion_vectors)
- {
- /* intra mb without concealment motion vectors */
- /* ISO/IEC 13818-2 section 7.6.3.4: Resetting motion vector predictors */
- PMV[0][0][0]=PMV[0][0][1]=PMV[1][0][0]=PMV[1][0][1]=0;
- PMV[0][1][0]=PMV[0][1][1]=PMV[1][1][0]=PMV[1][1][1]=0;
- }
-
- /* special "No_MC" macroblock_type case */
- /* ISO/IEC 13818-2 section 7.6.3.5: Prediction in P pictures */
- if ((picture_coding_type==P_TYPE)
- && !(*macroblock_type & (MACROBLOCK_MOTION_FORWARD|MACROBLOCK_INTRA)))
- {
- /* non-intra mb without forward mv in a P picture */
- /* ISO/IEC 13818-2 section 7.6.3.4: Resetting motion vector predictors */
- PMV[0][0][0]=PMV[0][0][1]=PMV[1][0][0]=PMV[1][0][1]=0;
-
- /* derive motion_type */
- /* ISO/IEC 13818-2 section 6.3.17.1: Macroblock modes, frame_motion_type */
- if (picture_structure==FRAME_PICTURE)
- *motion_type = MC_FRAME;
- else
- {
- *motion_type = MC_FIELD;
- /* predict from field of same parity */
- motion_vertical_field_select[0][0] = (picture_structure==BOTTOM_FIELD);
- }
- }
-
- if (*stwclass==4)
- {
- /* purely spatially predicted macroblock */
- /* ISO/IEC 13818-2 section 7.7.5.1: Resetting motion vector predictions */
- PMV[0][0][0]=PMV[0][0][1]=PMV[1][0][0]=PMV[1][0][1]=0;
- PMV[0][1][0]=PMV[0][1][1]=PMV[1][1][0]=PMV[1][1][1]=0;
- }
-
- /* successfully decoded macroblock */
- return(1);
-
-} /* decode_macroblock */
-
-
Index: start/mpeg2/m.bat
===================================================================
--- start/mpeg2/m.bat (revision 1087)
+++ start/mpeg2/m.bat (nonexistent)
@@ -1 +0,0 @@
-x mpeg2dec -b /shark/mpeg2/m.m2v
Index: start/mpeg2/changes
===================================================================
--- start/mpeg2/changes (revision 1087)
+++ start/mpeg2/changes (nonexistent)
@@ -1,95 +0,0 @@
-CHANGES
-----------
-
-January 9, 1996 to July 17, 1996
-- cleaned up some code which gave warnings.
-- altered some code to be compatible with Sun CC compiler.
- However, support in the makefile for non-ansi C compilers
- has been dropped (this is a stupid thing to support).
-
-December 20, 1995 to January 9, 1996:
-
-verified on HHI #22, TCEH #23 bitstreams.
-
- 1. new arguments format. Got to be so many argument fields that
- a new more consistent format was devised.
-
- 2. Frame_Store_Flag (-f) option now controls lower layer prediciton
- picture format (field or framewise)
-
- 3. getpic() structural changes
-
-
-Since December 18, 1995:
-
-1. added special case for current B pictures subsframe.c which
- loads entire reference frame for buffer substitution.
-
-2. fixed -l omission (-lXext) in Makefile that drives Tristan nuts everytime.
-
-
-Since December 14, 1995:
-
- 1. organized frame buffer substitution routines into subspic.c
- 2. added "big file" -b mode for Tristan ;-)
-
-
-Since July 4, 1994:
-
-1. Concatenated elementary sequences within same bitstream
-
- Decode can now handle concatenated elementary video sequences of
- arbitrary parameters.
-
-2. TRACE and VERBOSE #ifdef flags
-
-3. More disciplined naming convention
-
- normative variables and bitstream elements defined in 13818 are
- verbatim, lower case. Implementation specific routines and variables
- are capitolized.
-
-4. Spatial scalability corrections
- - see Carsten's document (spatscal.doc)
-
-5. D-pictures (picture_coding_type==D_TYPE)
-
- Only two small changes were necessary to accomodate D-pictures:
-
- a. in Decode_MPEG1_Intra_Block() added line which termines
- subroutine after DC coefficient has been processed.
-
- b. in picture_data(), added line which parses marker bit.
-
-
- 6. forced decoder to display frame progressively (regardless of whether
- the picture is frame structured or field structured) when -f flag
- is invoked in the command line arguements.
-
- also: progressive_frame now decides whether a frame is to be displayed
- as a frame picture to two field pictures, rather than the older convention
- of testing progressive_sequence.
-
- 7. Adapted systems parser from Stefan's mpeg2play to mpeg2decode.
- The major changes are:
-
- mpeg2dec.c:
- - fseek() called twice
-
- gethdr.c, getpic.c:
- instances of Flush_Bits(par,32) changed to Flush_Bits32(par)
-
- gethdr.c
- Get_Bits(par,32) changed to Get_32_Bits(par)
-
- global.h
- added rdmax, sysstream, and bfr[] to parameters struct.
-
- 8. Restructuring of getpic.c:
-
- a. moved picture pointer rotation into Update_Picture_Buffers()
- b. moved picture output logic into Output_Current_Frame() to
- in anticipation of 3:2 pulldown
-
-
-
Index: start/mpeg2/const.h
===================================================================
--- start/mpeg2/const.h (revision 1087)
+++ start/mpeg2/const.h (nonexistent)
@@ -1,141 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-
-/**
- ------------
- CVS : $Id: const.h,v 1.1.1.1 2002-09-02 09:37:45 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:45 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Marco Dallera and Marco Fiocca
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * AUTO
- *
- * Another Unuseful Track simulatOr
- *
- * Authors: Marco Dallera
- * Marco Fiocca
- *
- */
-
-/* ------------------ */
-/* Useful constants */
-/* ------------------ */
-
-#ifndef __CONST_H_
-
-#define __CONST_H_
-
-/* Screen dimensions */
-#define SCREEN_WIDTH 800
-#define SCREEN_HEIGHT 600
-#define SCREEN_BIT_COLORS 8
-
-/* Visible area */
-#define TEL_WIDTH 50
-#define TEL_HEIGHT 50
-
-/* Car dimensions */
-#define CAR_WIDTH 12
-#define CAR_HEIGHT 12
-#define CAR_W 8
-#define CAR_H 10
-
-/* Track dimensions */
-#define TRACK_WIDTH 500
-#define TRACK_HEIGHT 500
-
-/* Track position */
-#define TRACK_X1 0
-#define TRACK_Y1 0
-#define TRACK_X2 TRACK_X1+TRACK_WIDTH-1
-#define TRACK_Y2 TRACK_Y1+TRACK_HEIGHT-1
-
-/* Max number of car on track */
-#define MAX_CAR_NUMBER 10
-#define DRIVERS_NUMBER 20
-#define MAX_DRIVER_NAME_LENGTH 20
-#define MAX_TRACK_NAME_LENGTH 20
-#define TRACK_NUMBER 4
-
-/* Lap direction */
-#define CLOCK 0
-#define ANTICLOCK 1
-
-/* Information display coords */
-#define CMD_WIDTH TRACK_WIDTH
-#define CMD_HEIGHT (SCREEN_HEIGHT-TRACK_HEIGHT-3)
-
-/* Car position limits */
-#define MIN_CAR_X (TRACK_X1 + CAR_WIDTH/2 + 4)
-#define MIN_CAR_Y (TRACK_Y1 + CAR_HEIGHT/2 + 4)
-#define MAX_CAR_X (TRACK_X2 - CAR_WIDTH/2 - 4)
-#define MAX_CAR_Y (TRACK_Y2 - CAR_HEIGHT/2 - 4)
-
-/* Road constants */
-#define LEFT_ONLY 10
-#define RIGHT_ONLY 11
-#define ROAD_OK 12
-#define NO_ROAD 13
-
-/* Collision constants */
-#define COLLISION_LEFT 20
-#define COLLISION_RIGHT 21
-#define COLLISION_BACK 22
-#define NO_COLL 0
-
-/* CAB constants */
-#define ROAD_MSG_DIM sizeof(road_info)
-#define ROAD_MSG_READER 4
-
-#define CAR_MSG_DIM sizeof(car_status)
-#define CAR_MSG_READER 5
-
-/* Tasks parameters */
-#define SENSOR_WCET 3000
-#define SENSOR_PERIOD 40000
-#define CONTROL_WCET 1000
-#define CONTROL_PERIOD 40000
-
-#endif
-
Index: start/mpeg2/store.c
===================================================================
--- start/mpeg2/store.c (revision 1087)
+++ start/mpeg2/store.c (nonexistent)
@@ -1,529 +0,0 @@
-/* store.c, picture output routines */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-
-#include "config.h"
-#include "global.h"
-#include "semaphore.h"
-#include "kernel/kern.h"
-
-//#debug DEBUG_MAILBOX
-
-static void conv422to444 _ANSI_ARGS_((unsigned char *src, unsigned char *dst));
-static void conv420to422 _ANSI_ARGS_((unsigned char *src, unsigned char *dst));
-
-__inline__ WORD down32to16(unsigned char r, unsigned char g, unsigned char b)
-{
- return ((b&0xf8)>>3)|((g&0xfc)<<3)|((r&0xf8)<<8);
-}
-
-#if 0
-void xWrite_Frame _ANSI_ARGS_((unsigned char *src[], int frame))
-{
- int i, j;
- int y, u, v, r, g, b;
-// int rm=0,gm=0,bm=0;
- int crv, cbu, cgu, cgv;
- unsigned char *py, *pu, *pv;
- int height, width;
-
- struct framebuf_struct *f;
-
- cprintf("%d ",frame);
-
- width = Coded_Picture_Width ;
- height= Coded_Picture_Height;
-
- f = get_free_framebuf();
-
- dither(src);
- f->f[i*width+j] = down32to16(r,g,b);
-
- f->n = frame;
- insert_frame(f);
-}
-#endif
-
-void Write_Frame _ANSI_ARGS_((unsigned char *src[], int frame))
-{
- int i, j;
- int y, u, v, r, g, b;
-// int rm=0,gm=0,bm=0;
- int crv, cbu, cgu, cgv;
- unsigned char *py, *pu, *pv;
- int height, width, incr;
- static unsigned char *u422, *v422, *u444, *v444;
-
- struct framebuf_struct *f;
-
- cprintf("%d ",frame);
-
- incr = width = Coded_Picture_Width ;
- height= Coded_Picture_Height;
-
- if (chroma_format==CHROMA444)
- {
- u444 = src[1];
- v444 = src[2];
- }
- else
- {
- if (!u444)
- {
- if (chroma_format==CHROMA420)
- {
- if (!(u422 = (unsigned char *)malloc((Coded_Picture_Width>>1)
- *Coded_Picture_Height)))
- Error("malloc failed");
- if (!(v422 = (unsigned char *)malloc((Coded_Picture_Width>>1)
- *Coded_Picture_Height)))
- Error("malloc failed");
- }
-
- if (!(u444 = (unsigned char *)malloc(Coded_Picture_Width
- *Coded_Picture_Height)))
- Error("malloc failed");
-
- if (!(v444 = (unsigned char *)malloc(Coded_Picture_Width
- *Coded_Picture_Height)))
- Error("malloc failed");
- }
-
- if (chroma_format==CHROMA420)
- {
- conv420to422(src[1],u422);
- conv420to422(src[2],v422);
- conv422to444(u422,u444);
- conv422to444(v422,v444);
- }
- else
- {
- conv422to444(src[1],u444);
- conv422to444(src[2],v444);
- }
- }
-
-
- f = get_free_framebuf();
-
- /* matrix coefficients */
- crv = Inverse_Table_6_9[matrix_coefficients][0];
- cbu = Inverse_Table_6_9[matrix_coefficients][1];
- cgu = Inverse_Table_6_9[matrix_coefficients][2];
- cgv = Inverse_Table_6_9[matrix_coefficients][3];
-
- for (i=0; i<height; i++)
- {
- py = src[0] + incr*i;
- pu = u444 + incr*i;
- pv = v444 + incr*i;
-
- for (j=0; j<width; j++)
- {
- u = *pu++ - 128;
- v = *pv++ - 128;
- y = 76309 * (*py++ - 16); /* (255/219)*65536 */
-
- r = Clip[(y + crv*v + 32768)>>16];
- g = Clip[(y - cgu*u - cgv*v + 32768)>>16];
- b = Clip[(y + cbu*u + 32786)>>16];
-
-// rm = max(rm,r);gm=max(gm,g);bm=max(bm,b);
-// cprintf("(r%dg%db%d)",rm,gm,bm);
- f->f[i*width+j] = down32to16(r,g,b);
-// r=g=b=rand()%255;
-// f->f[i*width+j] = down32to16(r,g,b);
- }
- }
-
- f->n = frame;
- insert_frame(f);
-}
-
-/*
-void Display_Image(Dithered_Image)
-unsigned char *Dithered_Image;
-{
- / * display dithered image */
-//}
-
-
-/* horizontal 1:2 interpolation filter */
-static void conv422to444(src,dst)
-unsigned char *src,*dst;
-{
- int i, i2, w, j, im3, im2, im1, ip1, ip2, ip3;
-
- w = Coded_Picture_Width>>1;
-
- if (base.MPEG2_Flag)
- {
- for (j=0; j<Coded_Picture_Height; j++)
- {
- for (i=0; i<w; i++)
- {
- i2 = i<<1;
- im2 = (i<2) ? 0 : i-2;
- im1 = (i<1) ? 0 : i-1;
- ip1 = (i<w-1) ? i+1 : w-1;
- ip2 = (i<w-2) ? i+2 : w-1;
- ip3 = (i<w-3) ? i+3 : w-1;
-
- /* FIR filter coefficients (*256): 21 0 -52 0 159 256 159 0 -52 0 21 */
- /* even samples (0 0 256 0 0) */
- dst[i2] = src[i];
-
- /* odd samples (21 -52 159 159 -52 21) */
- dst[i2+1] = Clip[(int)(21*(src[im2]+src[ip3])
- -52*(src[im1]+src[ip2])
- +159*(src[i]+src[ip1])+128)>>8];
- }
- src+= w;
- dst+= Coded_Picture_Width;
- }
- }
- else
- {
- for (j=0; j<Coded_Picture_Height; j++)
- {
- for (i=0; i<w; i++)
- {
-
- i2 = i<<1;
- im3 = (i<3) ? 0 : i-3;
- im2 = (i<2) ? 0 : i-2;
- im1 = (i<1) ? 0 : i-1;
- ip1 = (i<w-1) ? i+1 : w-1;
- ip2 = (i<w-2) ? i+2 : w-1;
- ip3 = (i<w-3) ? i+3 : w-1;
-
- /* FIR filter coefficients (*256): 5 -21 70 228 -37 11 */
- dst[i2] = Clip[(int)( 5*src[im3]
- -21*src[im2]
- +70*src[im1]
- +228*src[i]
- -37*src[ip1]
- +11*src[ip2]+128)>>8];
-
- dst[i2+1] = Clip[(int)( 5*src[ip3]
- -21*src[ip2]
- +70*src[ip1]
- +228*src[i]
- -37*src[im1]
- +11*src[im2]+128)>>8];
- }
- src+= w;
- dst+= Coded_Picture_Width;
- }
- }
-}
-
-/* vertical 1:2 interpolation filter */
-static void conv420to422(src,dst)
-unsigned char *src,*dst;
-{
- int w, h, i, j, j2;
- int jm6, jm5, jm4, jm3, jm2, jm1, jp1, jp2, jp3, jp4, jp5, jp6, jp7;
-
- w = Coded_Picture_Width>>1;
- h = Coded_Picture_Height>>1;
-
- if (progressive_frame)
- {
- /* intra frame */
- for (i=0; i<w; i++)
- {
- for (j=0; j<h; j++)
- {
- j2 = j<<1;
- jm3 = (j<3) ? 0 : j-3;
- jm2 = (j<2) ? 0 : j-2;
- jm1 = (j<1) ? 0 : j-1;
- jp1 = (j<h-1) ? j+1 : h-1;
- jp2 = (j<h-2) ? j+2 : h-1;
- jp3 = (j<h-3) ? j+3 : h-1;
-
- /* FIR filter coefficients (*256): 5 -21 70 228 -37 11 */
- /* New FIR filter coefficients (*256): 3 -16 67 227 -32 7 */
- dst[w*j2] = Clip[(int)( 3*src[w*jm3]
- -16*src[w*jm2]
- +67*src[w*jm1]
- +227*src[w*j]
- -32*src[w*jp1]
- +7*src[w*jp2]+128)>>8];
-
- dst[w*(j2+1)] = Clip[(int)( 3*src[w*jp3]
- -16*src[w*jp2]
- +67*src[w*jp1]
- +227*src[w*j]
- -32*src[w*jm1]
- +7*src[w*jm2]+128)>>8];
- }
- src++;
- dst++;
- }
- }
- else
- {
- /* intra field */
- for (i=0; i<w; i++)
- {
- for (j=0; j<h; j+=2)
- {
- j2 = j<<1;
-
- /* top field */
- jm6 = (j<6) ? 0 : j-6;
- jm4 = (j<4) ? 0 : j-4;
- jm2 = (j<2) ? 0 : j-2;
- jp2 = (j<h-2) ? j+2 : h-2;
- jp4 = (j<h-4) ? j+4 : h-2;
- jp6 = (j<h-6) ? j+6 : h-2;
-
- /* Polyphase FIR filter coefficients (*256): 2 -10 35 242 -18 5 */
- /* New polyphase FIR filter coefficients (*256): 1 -7 30 248 -21 5 */
- dst[w*j2] = Clip[(int)( 1*src[w*jm6]
- -7*src[w*jm4]
- +30*src[w*jm2]
- +248*src[w*j]
- -21*src[w*jp2]
- +5*src[w*jp4]+128)>>8];
-
- /* Polyphase FIR filter coefficients (*256): 11 -38 192 113 -30 8 */
- /* New polyphase FIR filter coefficients (*256):7 -35 194 110 -24 4 */
- dst[w*(j2+2)] = Clip[(int)( 7*src[w*jm4]
- -35*src[w*jm2]
- +194*src[w*j]
- +110*src[w*jp2]
- -24*src[w*jp4]
- +4*src[w*jp6]+128)>>8];
-
- /* bottom field */
- jm5 = (j<5) ? 1 : j-5;
- jm3 = (j<3) ? 1 : j-3;
- jm1 = (j<1) ? 1 : j-1;
- jp1 = (j<h-1) ? j+1 : h-1;
- jp3 = (j<h-3) ? j+3 : h-1;
- jp5 = (j<h-5) ? j+5 : h-1;
- jp7 = (j<h-7) ? j+7 : h-1;
-
- /* Polyphase FIR filter coefficients (*256): 11 -38 192 113 -30 8 */
- /* New polyphase FIR filter coefficients (*256):7 -35 194 110 -24 4 */
- dst[w*(j2+1)] = Clip[(int)( 7*src[w*jp5]
- -35*src[w*jp3]
- +194*src[w*jp1]
- +110*src[w*jm1]
- -24*src[w*jm3]
- +4*src[w*jm5]+128)>>8];
-
- dst[w*(j2+3)] = Clip[(int)( 1*src[w*jp7]
- -7*src[w*jp5]
- +30*src[w*jp3]
- +248*src[w*jp1]
- -21*src[w*jm1]
- +5*src[w*jm3]+128)>>8];
- }
- src++;
- dst++;
- }
- }
-}
-
-
-
-
-
-// Frame buffer for displaying pictures
-
-struct framebuf_struct *get_free_framebuf();
-void insert_frame(struct framebuf_struct *f);
-struct framebuf_struct *remove_frame();
-
-int framebuf_sz;
-
-// a queue of framebufs
-struct framebuf_struct *framebuf_first;
-struct framebuf_struct *framebuf_last;
-
-// free framebuf list
-struct framebuf_struct *framebuf_free;
-
-// some semaphores
-sem_t framebuf_sem;
-sem_t framebuf_count;
-sem_t framebuf_freecount;
-
-void allocate_framebuf()
-{
- struct framebuf_struct *f;
-
- f = (struct framebuf_struct *)malloc(sizeof(struct framebuf_struct));
- if (!f) {
- cputs("Not enough memory!!!\n");
- sys_end();
- }
-
- f->f = (WORD *)malloc(framebuf_sz);
- if (!f->f) {
- cputs("Not enough memory for buffer!!!\n");
- sys_end();
- }
-
- f->next = framebuf_free;
- framebuf_free = f;
- cprintf("(Alloc %d %d)\n",f,f->f);
-}
-
-void Initialize_framebuf(int sz)
-{
- int i;
-
- framebuf_first = NULL;
- framebuf_last = NULL;
- framebuf_free = NULL;
- framebuf_sz = sz;
-
- cprintf("Coded W=%d H=%d sz=%d\n",Coded_Picture_Width,Coded_Picture_Height,sz);
-
- for (i=0; i<MAX_FRAMEBUF; i++)
- allocate_framebuf();
-
- sem_init(&framebuf_sem,0,1);
- sem_init(&framebuf_count,0,0);
- sem_init(&framebuf_freecount,0,MAX_FRAMEBUF);
-}
-
-struct framebuf_struct *get_free_framebuf()
-{
- struct framebuf_struct *f;
-
-#ifdef DEBUG_MAILBOX
- cprintf("G");
-#endif
- sem_wait(&framebuf_freecount);
- sem_wait(&framebuf_sem);
-
- //if (!framebuf_free)
- // allocate_framebuf();
-
- f = framebuf_free;
-
- framebuf_free = framebuf_free->next;
-
- sem_post(&framebuf_sem);
-
- return f;
-}
-
-void insert_frame(struct framebuf_struct *f)
-{
- struct framebuf_struct *p, *q;
- int n;
-
-#ifdef DEBUG_MAILBOX
- cprintf("I");
-#endif
- sem_wait(&framebuf_sem);
-
- p = NULL;
- q = framebuf_first;
- n = f->n;
-
- while ((q != NULL) && (n >= q->n)) {
- p = q;
- q = q->next;
- }
-
- if (p)
- p->next = f;
- else
- framebuf_first = f;
-
- if (q)
- q->prev = f;
- else
- framebuf_last = f;
-
- f->next = q;
- f->prev = p;
-
- sem_post(&framebuf_count);
- sem_post(&framebuf_sem);
-}
-
-struct framebuf_struct *remove_frame()
-{
- struct framebuf_struct *f;
-
-#ifdef DEBUG_MAILBOX
- cprintf("R");
-#endif
- sem_wait(&framebuf_count);
- sem_wait(&framebuf_sem);
-
-
- // remove the first frame
- f = framebuf_first;
-
- if (!f)
- sys_abort(69); // should never happen
-
- framebuf_first = framebuf_first->next;
-
- if (framebuf_first)
- framebuf_first->prev = NULL;
- else
- framebuf_last = NULL;
-
- sem_post(&framebuf_sem);
-
- return f;
-}
-
-void give_back_framebuf(struct framebuf_struct *f)
-{
-#ifdef DEBUG_MAILBOX
- cprintf("B");
-#endif
- sem_wait(&framebuf_sem);
-
- f->next = framebuf_free;
- framebuf_free = f;
-
- sem_post(&framebuf_sem);
- sem_post(&framebuf_freecount);
-}
-
-
-
-
-
Index: start/mpeg2/test.m2v
===================================================================
--- start/mpeg2/test.m2v (revision 1087)
+++ start/mpeg2/test.m2v (nonexistent)
@@ -1,73 +0,0 @@
-³€#ú 0µ‚µ#²MPEG-2 Verification Sequence
-¸_¿l@
-XXµÿ÷ÌSÐTñç!H <$¶óJÒˆ4*”¿FóJ“ a$°ó›Ñ*“Ò@ҔøPUño“=¾œæñ©^„Û!g"¥ý*¶óÔ¾¥qc֗ZµZ•#XN,r0§X°`Pã¥m+fÝÒIgz´â‚ ò$¶¤/°$¨…ZXʶJ_£s&î•öÕR䨫¡#›H¨l!-…BÌA„–l›Ãipb³Õ’gƒqòGY/‚¢–F -Öߧâȧ@¥EJ_‹s6WKXT%• æÐöý$Lµ}iÑG•Â×Çi”@Bí-»’e´aà?{reLRÃùí–D7!GidÞ+fJ–€E +4ãQ#l&ØP8{iªì˳Õ*@«NÅZ؞UȲ©d‹iQ±­Ñ V÷<?'‰Ð¿Š\lU%’À-) ªUk­KèLC a°ä&¶‹t < AMm-¬ÃM!,P“ɨ­n¡0*ùC‚À‰YVìR‚Š<ó&ÁVÄ.SÂÀûfɀS՚’!£éç!Gs²–ÖR£ÍÚCXáÔæó©UÒÏA瞣ì)»‹¶ê 
-8£Ûä[ê©MëÙ@ªù-ƒaV*µ§¬ …H¡v*žÕÈ°øð9BcfÙdž©R’ŽC›VͶŸŒuV?2K<Û
-À†¾~ò&ª]¡á§ -;Á¹4¸ˆ3?ÂCècu uæÈ`äˆ3Ðaþ-q¥»?Pº:ÛJ.Áð9¹q0ØC§àсU!Tmҗ©OæÅ K¡ØxôR¶ -môxAÈóõ
-ƒÛ›»6C6„(h cÙ Ë ¯ü£hb—|—×Ԑ5‡´7Ñ*y­AÕ–ƒÐåD2µ»M±< ‹áæ2cjÍÞ"ÚJ$”ï؇P¹@ó”åhÛ­ãËf–\Bèß ¦ì\*—e¨PXW†·SgžU4Þ6Ä:D€5­íy… ™ÂÚ6’èÈTnº[Djo˜ùÁnæÎ+½Ý©J&¨ÂgídXPæôÿzñ'ÚoÒ¾EI
-––dßJُ}ÙÜR]­ëVhé$ƒ[©[ˆs2¦ÍÉf.ÑäʉT–Är­m2š²Ñò­µhm +
-³VCÀy$0±¤Ú¥y¡AL»%ô°aGB‚t¶ù1£›ê›¼š”àD!BÔ`ÚXbÙ `B©ò7J¿Ö⏔>éÔl7e£(û
--B)ZÉ¡¾|¦"C)VŒ’–×Í´ŸI°àúQvTwƒU-S€!–Å8ó‹ÔXÊè·JÈ6T£%C‚!t±ìÕ©»2REñP¢´¶× -æ鷺¨²TP&FÁ2¸`JÑ£|Cɍ×v)r(Ö
-µ«Á†ãï–q
-Ÿý’(¦B’*µO~pN6¥Sà~PIg52dJŠ NÊzԚ -“l1Ş•e°„ƒ&TñfZ6U½«ä]–)~0 Â–0{u¹~ ÌY¹®´¥ˆR­£´ì°õãiсá­ôÞQú2c¤nŠ[kµ+ö‚ö•3:ÉTÒ¬Ø9[Fiɱ¼x«x²“g{?rŽÊ¤ÊÛÆƇÈßmÀ„iód(Ÿl×K¶îðxÄØ=C-¾n)sf»žÔ­¶ÙžYfð0õ¥6ñKöAÑÕ¬öÛJPÀÖ*¢¹†× …,@ëY—œž€IˆxJ Ød¡ ±_%ð“ 4¹˄óNX;å‹|ƒ}p1ÿûzÕNô,¡ƒ)ê}j -ƒŠROŽ6šZJZ]¡'ÐÚ
-kc’¡jpÑÅ&²l›Ï¹jÀê¥hiÖ u©KÃmµó -¡§›(QEí…6Ç;.]ðYv¨Y€<‹›0Ȓ¥†¡ŠÚÚҍä܂®¦†UªwˆÉ„ж’$’ƒvm«ÏCñ­4B–û,(­ÃÏyæìHSz óMééP²0¡ûYÖØ{Rù²-sÀ,˜OÁ= Âð^ÑVK£åª>·Ð>lîẘD›"”°=K0ožÊÞË·A6§‚:Z]£ ¾ -ÑTC®+wZ¶Žny‚PKô©˜!Ù#u­<"„’›/Km¡ÕÜÊÜ!KÕ°Lƒ¡L¬ñj®N(­£cñ¾+Òñ]û Áä¦×ґ{¡!¾Îu.ëß,,)³¥Æ÷7òßØú´J -¯º¡Á/‰cz(L{yÿ}®PíûY·#•.Ëi:¥€DÝt¦jˆ60SÌçT‘3qç¦L ¥RÆÖæfU§\ñŽ´6î¶',»k|֐›õñ>>MMï:tåîË%à¥ØùlB†8ûÛ÷ÖóÆÏÆñlHf™-§@Œ
-oÏù–¶ÐÖôÞÈúM×ò.[N)fÉõŠØ}a9MZNF©úvÀü¸”6DK(`E=³]6–X–.ȶŒy¨°¤9¸½~p¢ÉãV’¡MÝÄï](7^m5Nñ¬©u¼q(íÆ­ìòÍëiÃY¢` ۇ^™G@–õNô§QOÈßt¿L°üø6„ÝjµOºøPÂ;Y졛Ÿ-ù?¥(û¼µÝ×òÙìñîn 
-£¦ý”sÞ·œö^¥ýÏxIo„pXúþZü´j×®«m±BcsªP6ŽQ µý½Noaï`øèî~9y¦T.£Z‘(GvInQÊ°j\o×âÐO<É38ÖH­êRkyÎ o¯©Ûô¬ŽŽBYMó…:ãt¨çíý7±€…›1E·Ä¾ÚX|{µ}iM‰ÍÅCä`J“ãP,¶H¥†²±Oñ[úQ¶ƒI -!€xÊCe¨ŌÛÝÂó±×ä . [wJ÷Ì°Ø-2SlJÞgB倵ôÿÝ~x02Œiڐ£¢·ôµ÷Î9·ÌO¿oXøÞ`M»íÅâvñ?A>v•O\ÛV¿{Ï8<­ÕøŠù/•à‹ÒXɈÌýªQQ¾\‹@ -š›˜d++Só>¶ãì¦ç?hù|e–7ä:ÀFVúßÀ!?D\L¢¾æD»²–O?JoŒŠ¦@GÿšÇ8uµ¿9¸rK[í<=N3¥gÐüvÏÖñr,ˆ«‡·šQFÑ(õn3s¥»œû æé–~¯:ú¶ùãËm©u=¿Ð"äþëàvpF²­æ}-¾‰…]67˜›m³$
-Hsy1
-âςe$7<)¹©Ííá}´fç9T¢›ó¥ûgnÑ=åá“Ö{ù@Jw k|O þ\*-6wtôÖMéu€;ù. ^3m o=ÀQ‚Z¾&{·#ÈMû§µJ2ãÛôkTe˜¬±C+£y–ßt‹…“öOc[ÈMÂF¨Ë~ÝҀòñ±°q C«»Fñà€ZúÏF/K·àœÐ`ÿö½¾¼‚40zò÷8X:Îۃ¸}½Ø‹•4Ÿ&’µÍ®CåúÌhcxb8{öµ#=;Â>À @\‡æH¹œU7Æ·”ÆÒo–­ú [§:%'Yð Eƒ‡áu¾VGÉö™«&:õq\g….©[žSr Š9¹¬'D-|[ñ@ãªïŸœ°>A–ßµ“ßîéœ8@¡‹j©·»T†ß–ˆûžýŠ–oÿ¯s`°q„Ùëc~˜Êz/š‹`©‡šT™ nh@ xÔFÄ[ <3Õ¿tF7âRfðE”`K|„RýŠÈýBYÅDSߢÐc|ÔBÿ®žð×¾*Üô<)®þu7âEÛ2­ç~y”àÉ»¨_8;0Cõ|M9¼¤q­æÒ[z¡@…þ"r!7¨1
-nÒf¼!‚k°z G”À"£óßo•Ù؊…”}ômbêÉCç|ßiæäJŽr/è$qÀB¶—ìËՉ…VpòÃË°)¼Ž’]o£oäbˑJÒ!(*Ž¤¶é ‘ᐈ .9aMõûÎQ’H6aë
-:”ÇVÍ©¦‹ZRÛ> JҚ+:÷ÈùúÎÁ° ñ­P¼6þ³Cᔿ–›éÒù©áežyè2¥°Â]" -¡zÜøTkh{!ùB1¸T‘K ‡þ©U¸¯A{vÌo¹âj‘m…1<[Íw&!2;ŠYð)T±íxYcÛ¯èà¦ø̔šO¶QƝ™dZXŠûK•܋ɹ<ä1Ðí—Yéu
-kue… ñ}RÙaU£
--ø7ùŸ®2fGDÜ¥$ª´$ªÝ!GiÛ;A­Þ×Ìw;–ŸÁgÀ=Å7Çù¦Zx®Ì°µ9„ufMŒ*–1¾ó—$æ[xRþ…° ”b·¨¶ CãÜý_F¼NߌU¾}nT‡ ¹[¶RàæDÊԟ¿” ­×êÔ “.¦oñÃåSª[%,ã©ÍT‹CktR£dMV’ »€µ‚/÷˜rø0ÿù=àÁ瑍…‰sÈÄl-llàð¿;WÁ—ÿÀáð ™ÐñÑêpÐßÀ 4숇‘à`*ÿ0節pp‘ -€á T$ŒF½Cwh¸-P„DÀ°ÌO€ÐÂׇ’= -¼ŒpbQʉüƒÎäøÀş׀ӏ9GWÀàYFlÂÜøðbÿý„àwˆ¢G‘9„g€Ð–<Ï_"wƒðq´7
-dG7xÀD(åšÉ°aÁ`"€j¸6ÿ€h¼È Ȑ4ø{ž}|Àv ÷€Øã8Ÿ @Z ÐÞð6Ø `85‘þ8èÀ9¨nà¾çp*$®õÌ qª€À, ¡¿‘ÀjÒúà@-à6 _ÿ™Cwx €óŸHv`l~x“˜ˆú;‹)ÅՄ¤µÛ
- -n¤Z2BÂ@¢ýF#sâĔf6P¤!ø·E-¡hTR a(èz·Ê7Ô6à˜-„îÍ?Žÿn–æð&¥Ó÷I!JÃÉÊP(5ƪ<ðþúÀš~ùŤœ1Âhn…+l<ŸÄe§cYVÞrø6ü `wÿ…@î47pø Î3@°ø -ƒX€^ð¯C 0 £ @ñÿê€9õ -ÎØðât ÿþ(pát7õƒP€G,s€ÈžO¨ÔÂ)Š´qÔµCÇвQš8¦4â¶Á¯¨_€òÙñ
-J¡¥Œ¨3Ðs.—*]ƒZB8ú1¾Cž°kGʊ‹K’–‡†Œ8bځ­Ú„ì.ò2aUO* -z†7-C풖Q*Ià6ߜ|BÐe= -5օhœ Œ‚HÂö +F¬Ìʆ`Ó΂CþJ²lpíñ ´Ã· $«/¯ýð ²@rÖC)9cN'Ž-•r ‚ø=ÿü à€Ü ÀOã 4áFµ -ÌPø‚³à8ô° -õðfÿòp˜v8\ ßþ°5°°³mæèWáÊ$8…—Ð |G4ÀÓÿàGG™¿³Ãˆø:è÷KLÙFƒP³ì© :<0%c&Z›
-ª 7«=”ÈXÀʾ2’²·È7Ô4MðL‚`’
-nžwfû퐷a˜Þh^N:d¡Ô7ž³³‰e‡«›¤–œß¤×s˜à=À#<£²¤¨Ô»8@ÑãØçÏ}gQ5ÃZê ž³R”¿ÓÿâŸö2X©Š+- -’¾à|/­Rpӂ~Úè&~Ž1^£À²[v4ý /o{9y~ŒvZ4pf© -½&9KTð{y -ôjÀb'4>tXC2›î€®ÙaèçF£ö$ç û‡ãÂÜZr2`@Fß V㐰L…³¨œ:9.}=\-e@¡(xãƒ[¡ùXL§œ’”Pks¢–´ªIê¡a -Ó¦ÔK©V•H@?o•,1¾œ¦‰Ç7Q8G '™‘=őXq¯œÄ§Ç‘€9ÀjeœOàÇQò¸ê\ø¥l©R¡a@QÍ ½ˆ£èññV¡ÛªuJU-Ú*ÙOéFúo’o«hœ`˜% ‘ˆ%¡[1áafð<Öàg
-DÃÉãäoÙ<ÁÿìG<`ì´÷Ir“‰=!X¡/Íæ˜9]³Ñ5ËæDÒná‘Œ;h †_,„QX01$­€$<ôðüÊ’QJcÀ_øš¢ÚÕpف¦PÀòQ0°G1F‡°_€,ä²Ñ‡ð 'z©%œ!åp´…ͯª‚ª \öÚ¿ùf ¡ §¤mÄâwÿ›á"pێŸ ÒNËë[ºbðõ¼eo¿šÀzâsñ$– ÖÅ?T¤ô(¶ôÉ$-!ô -xB‡69—T«Iføâ›í͐ -´>yÈÛ EŽoS®²“y@r’›-ã”/*u8!»vËCBÿÙYM”惊P†Ä¾¾}U{tt1E@ æÁ*œYCáA¥§ŠUÚ·Gî<O…š ðæî;›ó·ÁǐÂÇ>Ç'C†—àxQá­è£Þ.Rt‘<hSu*Öè:+A;ìÕ_V QhŒbá-¿8€þ‚oý5à?ïúdcve4J@*¢b6+b+€ -Käx
-$¦$ï”A;þý¼â kÁ„º%‚<AÂa &-¿FÅcA+ÿ@ð&™âhnGÑY†+€˜ƒ`*P)`gè4 ¥ FB?$fðŸÍ€BP @®$ŒN±>]@’ -höd ž¨›°êã7ôšÖcÀÛVn {j¹š~e
-Œ2VÜPD ô -Zv}YEîQ „‚Ñóp6®O‰‰‹†a(Ð ¥MBJ -BCà ÉxGîmé £àpú
-_UžÖêh‰íùüG±:©*Ê ù±¹¶ à jØ<Ѐ ¼UoÓcÍ4J–c#Àа•¦lGð €
-pwà"aPД9áî €ñà>€P ÿA¿áTM•®•ï>Y=ï¨1B«h ÚV,Qжó@|ß^f@6څÂPpI>À_‘’ŒWl9húAa®X .Ð`-=C
-V$'áÅ£‰€¡h4j¢Q¶Ó¹±cF«8É ÐGç#4©àŠ -ŸXÎlj˜7ŽßÒíGœÂ~l0­(Ñöy©ÒЦ£':vh[5~A±®å8°‚Ù«sGZš Õ?Æ· ¬$Ï_9[Äç¤@›ÿ­çÐÙí¹­óîöÛ@âKAKô5#+Ü:O!÷_áóêks_L€y*VË5@Ù!±ºß ÁÍdp”<$` €*nhe‚oýÈ@À -øÔሠ,frg^@¯9 7&¥ÁoÿqÐà d0Ô(mŽêû+…†8¾dKPúÛÑ(ÆÆð’ÅiƁ9bƒÿiƒÿè”믣 ?þBU¦Š -;€ Y𣸵”‹/¿—ßËïÄäûúe÷é~—é|“/¿Kô¿Kô¿ÛïÐ=ÿý Å÷·¿ÿà`5¨NOµœ‰9Eüg›À“/¿—ߥü¾þ_~ÛçoÿÀâ4&à#Ù%€ z³‹î;¿ÚB7+ -~,þl” -eŒƒð̶Ê$óŒ¹aþF·=²ùˆvٲЎÎb5Q7Ìpq€Ü¼>²4MIìpfÿ”¥Í Í{/¿—ߥú_„äû| -ÀIGi¬hM @BØñÈπ–Ç1¸›ÍTSñ›x ºÊ?™•ƒ—À²µ-Âà37¬ªØ…êfˆe¡ ÿ…!$óã hN »j(Å_þâÂP. ÓŠ“òÏÿŽ¡9¿è?þ¥ûkíW<Œæ:BOÉ0~„YN…Нˆ ¥ Üé(í ÏBobl - \0'.<Bv¹ ’u ÔaÀÐÔ; dšàUáSͪ&Úԁˆ ɱ™Z~ÙM¢`fû!‰ã6ÏÇa9Í·ƒ?ò|D´ð‘BnƒÌ&Rk˜Œ*³/ö'‘ƒ VRÎÌzGšÿPfí€y¨Nl(ëçæÁ~ðфˆ'Õ à ÆåŒO>(%'ê˜"*ˆi á±7…’ä“©$ý ¡98Ði -p¿d…¼Ô'@LNDú˝”p\`xÓD¼“W‚¤t€’ -¿høKyô­Ï¢U -)ÖÀ|Á†¢ävËרMã¬h%dÏ·b7´v„½ Ò ‚
-éã~# ø¿ÄÎ.U¤ŸèNcŋ%"-SÖÙ©?Ñ
-¢u…Ž0]ôÎ<Œ¨ªy æ€éÄÁ :É¢^¬Z"¹Ù0œAËóàaIc*°gkР½½ˆ0º}úÀb€GBu„ÀjbyQi*INm¡¢ÊAÏóÑ ¡‰úá–Éʵ¬wÖã…Ñ;AÇ@à5æûK›Ÿ‹R'ùtN0ŒÁ€†€äd–R_n΋NC{›øb¾à¼áƒ\hxޅFQ9ÃçÐox{HPÓÿiD€ý?@áõ·
\ No newline at end of file
Index: start/mpeg2/initfile.c
===================================================================
--- start/mpeg2/initfile.c (revision 1087)
+++ start/mpeg2/initfile.c (nonexistent)
@@ -1,256 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * CVS : $Id: initfile.c,v 1.1.1.1 2002-09-02 09:37:45 pj Exp $
- *
- * File: $File$
- * Revision: $Revision: 1.1.1.1 $
- * Last update: $Date: 2002-09-02 09:37:45 $
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/rr.h"
-#include "modules/cbs.h"
-#include "modules/dummy.h"
-
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "modules/cabs.h"
-#include "modules/pi.h"
-#include "modules/pc.h"
-#include "modules/srp.h"
-#include "modules/npp.h"
-#include "modules/nop.h"
-#include "modules/nopm.h"
-
-#include "drivers/keyb.h"
-
-#include <trace/trace.h>
-#include <trace/queues.h>
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-
-/*+ sysyem tick in us +*/
-#define TICK 1000
-
-/*+ RR tick in us +*/
-#define RRTICK 10000
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
- extern int __register_sub_init_prologue(void);
- extern int __register_sub_init(void);
-
- __register_sub_init_prologue();
-
- EDF_register_level(EDF_ENABLE_ALL);
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- CBS_register_level(CBS_ENABLE_ALL, 0);
- dummy_register_level();
-
- SEM_register_module();
-
- CABS_register_module();
-
- PI_register_module();
- PC_register_module();
- NPP_register_module();
- SRP_register_module();
- NOP_register_module();
- NOPM_register_module();
-
- __register_sub_init();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
- KEYB_PARMS keyb = BASE_KEYB;
- extern int __bdev_sub_init(void);
- extern int __fs_sub_init(void);
- extern void ctrlc_exit(KEY_EVT *k);
-
- HARTPORT_init();
-
- keyb_def_ctrlC(keyb, ctrlc_exit);
- KEYB_init(&keyb);
-
- __bdev_sub_init();
- __fs_sub_init();
-
- __call_main__(mb);
-
- return (void *)0;
-}
-
-#define PSCANSCHED 1
-#define NOTRACE
-
-int __register_sub_init_prologue(void)
-{
-#ifndef NOTRACE
- int id;
-
- TRC_init_phase1(NULL);
- trc_register_fixed_queue();
- id=trc_create_queue(TRC_FIXED_QUEUE,NULL);
- trc_trace_class(TRC_CLASS_USER);
- trc_assign_class_to_queue(TRC_CLASS_USER,id);
-#endif
- return 0;
-}
-
-int __register_sub_init(void)
-{
-#if defined(EDFSCHED)
- extern void BD_EDF_register_module(void);
- BD_EDF_register_module();
-#elif defined(PSCANSCHED)
- extern void BD_PSCAN_register_module(void);
- BD_PSCAN_register_module();
-#endif
- return 0;
-}
-
-dev_t root_device=-1;
-dev_t temp_device=-1;
-
-int choose_root_callback(dev_t dev,u_int8_t fs)
-{
- if (fs==FS_MSDOS) return dev;
- return -1;
-}
-
-int choose_temp_callback(__dev_t dev,__uint8_t fs)
-{
- static int flag=0;
- if (fs==FS_MSDOS) {
- if (flag) return dev;
- flag=1;
- }
- return -1;
-}
-
-int __bdev_sub_init(void)
-{
- BDEV_PARMS bdev=BASE_BDEV;
-
- bdev_def_showinfo(bdev,FALSE);
- bdev_init(&bdev);
-
- root_device=bdev_scan_devices(choose_root_callback);
- if (root_device<0) {
- cprintf("can't find root device to mount on /!!!\n");
- sys_end();
- return -1;
- }
-
- /*
- temp_device=bdev_scan_devices(choose_temp_callback);
- if (temp_device<0) {
- cprintf("can't find a filesystem to mount on /TEMP!!!\n");
- }
- */
-
- return 0;
-}
-
-
-int __fs_sub_init(void)
-{
- extern int libc_initialize(void);
- FILESYSTEM_PARMS fs=BASE_FILESYSTEM;
- struct mount_opts opts;
- // int res;
-
- filesystem_def_rootdevice(fs,root_device);
- filesystem_def_fs(fs,FS_MSDOS);
- filesystem_def_showinfo(fs,FALSE);
- filesystem_def_options(fs,opts);
-
- memset(&opts,0,sizeof(struct mount_opts));
- opts.flags=MOUNT_FLAG_RW;
-
-
- filesystem_init(&fs);
-
- /*
- if (temp_device>=0) {
- memset(&opts,0,sizeof(struct mount_opts));
- opts.flags=MOUNT_FLAG_RW;
- res=mount(temp_device,FS_MSDOS,"/TEMP",&opts);
- if (res!=0) {
- cprintf("can't mount XXX on /TEMP (errno: %i)\n",errno);
- } else
- cprintf("mounted /TEMP rw\n");
- }
- */
-
- libc_initialize();
-
-#ifndef NOTRACE
- TRC_init_phase2();
-#endif
-
- return 0;
-}
-
-void ctrlc_exit(KEY_EVT *k)
-{
- extern void dump_sem_table(void);
- extern void dump_nop_table(void);
-#ifndef NOGRX
- grx_close();
-#endif
- cprintf("CTRL-C pressed!\n");
- sys_end();
-}
-
-
-
-
-
-
-
Index: start/mpeg2/verify.c
===================================================================
--- start/mpeg2/verify.c (revision 1087)
+++ start/mpeg2/verify.c (nonexistent)
@@ -1,303 +0,0 @@
-/* verify.c
- *
- * Bitstream verification routines
- *
- *
- */
-#ifdef VERIFY
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <math.h> /* needed for ceil() */
-
-#include "config.h"
-#include "global.h"
-
-/* #define DEBUG */
-#ifdef DEBUG
-#define PC
-#endif
-
-#ifdef PC
-#include <conio.h> /* needed for getch() */
-#endif /* PC */
-
-/*
- Check picture headers: due to the VBV definition of picture data,
- this routine must be called immediately before any picture data
- is parsed. (before the first slice start code, including any slice
- start code stuffing).
-*/
-
-
-static void Check_VBV_Delay _ANSI_ARGS_((int Bitstream_Framenum, int Sequence_Framenum));
-
-
-void Check_Headers(Bitstream_Framenum, Sequence_Framenum)
-int Bitstream_Framenum;
-int Sequence_Framenum;
-{
-
-
- if((!low_delay)&&(vbv_delay!=0)&&(vbv_delay!=0xFFFF))
- Check_VBV_Delay(Bitstream_Framenum, Sequence_Framenum);
-
- /* clear out the header tracking variables so we have an accurate
- count next time */
- Clear_Verify_Headers();
-}
-
-
-
-/*
- * Verify vbv_delay value in picture header
- * (low_delay==1 checks not implemented. this does not exhaustively test all
- * possibilities suggested in ISO/IEC 13818-2 Annex C. It only checks
- * for constant rate streams)
- *
- * Q:how do we tell a variable rate stream from a constant rate stream anyway?
- * it's not as simple as vbv_delay==0xFFFF, since we need meaningful
- * vbv_delay values to calculate the piecewise rate in the first place!
- *
- * Also: no special provisions at the beginning or end of a sequence
- */
-
-static void Check_VBV_Delay(Bitstream_Framenum, Sequence_Framenum)
-int Bitstream_Framenum;
-int Sequence_Framenum;
-{
- double B; /* buffer size */
- double Bn; /* buffer fullness for picture n */
- double R; /* bitrate */
- double I; /* time interval (t[n+1] - t[n]) */
- double T; /* inverse of the frame rate (frame period) */
-
- int d;
- int internal_vbv_delay;
-
- static int previous_IorP_picture_structure;
- static int previous_IorP_repeat_first_field;
- static int previous_IorP_top_field_first;
- static int previous_vbv_delay;
- static int previous_bitstream_position;
-
- static double previous_Bn;
- static double E; /* maximum quantization error or mismatch */
-
-
-
- if((Sequence_Framenum==0)&&(!Second_Field))
- { /* first coded picture of sequence */
-
- R = bit_rate;
-
- /* the initial buffer occupancy is taken on faith
- that is, we believe what is transmitted in the first coded picture header
- to be the true/actual buffer occupancy */
-
- Bn = (R * (double) vbv_delay) / 90000.0;
- B = 16 * 1024 * vbv_buffer_size;
-
-
- /* maximum quantization error in bitrate (bit_rate_value is quantized/
- rounded-up to units of 400 bits/sec as per ISO/IEC 13818-2
- section 6.3.3 */
-
- E = (400.0/frame_rate) + 400;
-
-#ifdef DEBUG
- printf("vbv_buffer_size (B) = %.0f, Bn=%f, E=%f, \nbitrate=%f, vbv_delay=%d frame_rate=%f\n",
- B, Bn, E, bit_rate, vbv_delay, frame_rate);
-#endif
-
- }
- else /* not the first coded picture of sequence */
- {
-
- /* derive the interval (I). The interval tells us how many constant rate bits
- * will have been downloaded to the buffer during the current picture period
- *
- * interval assumes that:
- * 1. whilst we are decoding the current I or P picture, we are displaying
- * the previous I or P picture which was stored in the reorder
- * buffer (pointed to by forward_reference_frame in this implementation)
- *
- * 2. B pictures are output ("displayed") at the time when they are decoded
- *
- */
-
- if(progressive_sequence) /* Annex C.9 (progressive_sequence==1, low_delay==0) */
- {
-
- T = 1/frame_rate; /* inverse of the frame rate (frame period) */
-
- if(picture_coding_type==B_TYPE)
- {
- if(repeat_first_field==1)
- {
- if(top_field_first==1)
- I = T*3; /* three frame periods */
- else
- I = T*2; /* two frame periods */
- }
- else
- I = T; /* one frame period */
- }
- else /* P or I frame */
- {
- if(previous_IorP_repeat_first_field==1)
- {
- if(previous_IorP_top_field_first==1)
- I = 3*T;
- else
- I = 2*T;
- }
- else
- I = T;
- }
- }
- else /* Annex C.11 (progressive_sequence==0, low_delay==0) */
- {
-
- T = 1/(2*frame_rate); /* inverse of two times the frame rate (field period) */
-
- if(picture_coding_type==B_TYPE)
- {
- if(picture_structure==FRAME_PICTURE)
- {
- if(repeat_first_field==0)
- I = 2*T; /* two field periods */
- else
- I = 3*T; /* three field periods */
- }
- else /* B field */
- {
- I = T; /* one field period */
- }
- }
- else /* I or P picture */
- {
- if(picture_structure==FRAME_PICTURE)
- {
- if(previous_IorP_repeat_first_field==0)
- I = 2*T;
- else
- I = 3*T;
- }
- else
- {
- if(Second_Field==0) /* first field of current frame */
- I = T;
- else /* second field of current frame */
- {
- /* formula: previous I or P display period (2*T or 3*T) minus the
- very recent decode period (T) of the first field of the current
- frame */
-
- if(previous_IorP_picture_structure!=FRAME_PICTURE
- || previous_IorP_repeat_first_field==0)
- I = 2*T - T; /* a net of one field period */
- else if(previous_IorP_picture_structure==FRAME_PICTURE
- && previous_IorP_repeat_first_field==1)
- I = 3*T - T; /* a net of two field periods */
- }
- }
- }
- }
-
- /* derive coded size of previous picture */
- d = ld->Bitcnt - previous_bitstream_position;
-
- /* Rate = Distance/Time */
-
- /* piecewise constant rate (variable rate stream) calculation
- * R = ((double) d /((previous_vbv_delay - vbv_delay)/90000 + I));
- */
-
- R = bit_rate;
-
- /* compute buffer fullness just before removing picture n
- *
- * Bn = previous_Bn + (I*R) - d; (recursive formula)
- *
- * where:
- *
- * n is the current picture
- *
- * Bn is the buffer fullness for the current picture
- *
- * previous_Bn is the buffer fullness of the previous picture
- *
- * (I*R ) is the bits accumulated during the current picture
- * period
- *
- * d is the number of bits removed during the decoding of the
- * previous picture
- */
-
- Bn = previous_Bn + (I*R) - d;
-
- /* compute internally derived vbv_delay (rouding up with ceil()) */
- internal_vbv_delay = (int) ceil((90000 * Bn / bit_rate));
-
-#ifdef DEBUG
- printf("\nvbv_delay: internal=%d, bitstream=%d\n", internal_vbv_delay, vbv_delay);
-
- printf("Bn=%f, prevBn=%f, I=%f, R=%f, d=%d\n", Bn, previous_Bn, I, R, d);
- printf("frame(%d), pictstruct(%d), picttype(%d)\n", Sequence_Framenum,
- picture_structure, picture_coding_type);
-
- /* report error */
- if(internal_vbv_delay != vbv_delay)
- {
- printf("WARNING: internal_vbv_delay(%d) != vbv_delay(%d)\n",
- internal_vbv_delay, vbv_delay);
- }
-#endif
-
- } /* not the first coded picture of sequence */
-
-
-#ifdef PC
- getch();
-#endif /* PC */
-
- /* update generic tracking variables */
- previous_bitstream_position = ld->Bitcnt ;
- previous_vbv_delay = vbv_delay;
- previous_Bn = Bn;
-
- /* reference picture: reordered/delayed output picture */
- if(picture_coding_type!=B_TYPE)
- {
- previous_IorP_repeat_first_field = repeat_first_field;
- previous_IorP_top_field_first = top_field_first;
- previous_IorP_picture_structure = picture_structure;
- }
-
-}
-
-
-
-/* variables to keep track of the occurance of redundant headers between pictures */
-void Clear_Verify_Headers()
-{
- verify_sequence_header = 0;
- verify_group_of_pictures_header = 0;
- verify_picture_header = 0;
- verify_slice_header = 0;
- verify_sequence_extension = 0;
- verify_sequence_display_extension = 0;
- verify_quant_matrix_extension = 0;
- verify_sequence_scalable_extension = 0;
- verify_picture_display_extension = 0;
- verify_picture_coding_extension = 0;
- verify_picture_spatial_scalable_extension = 0;
- verify_picture_temporal_scalable_extension = 0;
- verify_copyright_extension = 0;
-}
-
-#endif /* VERIFY */
-
Index: start/mpeg2/motion.c
===================================================================
--- start/mpeg2/motion.c (revision 1087)
+++ start/mpeg2/motion.c (nonexistent)
@@ -1,236 +0,0 @@
-/* motion.c, motion vector decoding */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-#include <stdio.h>
-
-#include "config.h"
-#include "global.h"
-
-/* private prototypes */
-static void decode_motion_vector _ANSI_ARGS_((int *pred, int r_size, int motion_code,
- int motion_residualesidual, int full_pel_vector));
-
-/* ISO/IEC 13818-2 sections 6.2.5.2, 6.3.17.2, and 7.6.3: Motion vectors */
-void motion_vectors(PMV,dmvector,
- motion_vertical_field_select,s,motion_vector_count,mv_format,h_r_size,v_r_size,dmv,mvscale)
-int PMV[2][2][2];
-int dmvector[2];
-int motion_vertical_field_select[2][2];
-int s, motion_vector_count, mv_format, h_r_size, v_r_size, dmv, mvscale;
-{
- if (motion_vector_count==1)
- {
- if (mv_format==MV_FIELD && !dmv)
- {
- motion_vertical_field_select[1][s] = motion_vertical_field_select[0][s] = Get_Bits(1);
-#ifdef TRACE
- if (Trace_Flag)
- {
- printf("motion_vertical_field_select[][%d] (%d): %d\n",s,
- motion_vertical_field_select[0][s],motion_vertical_field_select[0][s]);
- }
-#endif /* TRACE */
- }
-
- motion_vector(PMV[0][s],dmvector,h_r_size,v_r_size,dmv,mvscale,0);
-
- /* update other motion vector predictors */
- PMV[1][s][0] = PMV[0][s][0];
- PMV[1][s][1] = PMV[0][s][1];
- }
- else
- {
- motion_vertical_field_select[0][s] = Get_Bits(1);
-#ifdef TRACE
- if (Trace_Flag)
- {
- printf("motion_vertical_field_select[0][%d] (%d): %d\n",s,
- motion_vertical_field_select[0][s],motion_vertical_field_select[0][s]);
- }
-#endif /* TRACE */
- motion_vector(PMV[0][s],dmvector,h_r_size,v_r_size,dmv,mvscale,0);
-
- motion_vertical_field_select[1][s] = Get_Bits(1);
-#ifdef TRACE
- if (Trace_Flag)
- {
- printf("motion_vertical_field_select[1][%d] (%d): %d\n",s,
- motion_vertical_field_select[1][s],motion_vertical_field_select[1][s]);
- }
-#endif /* TRACE */
- motion_vector(PMV[1][s],dmvector,h_r_size,v_r_size,dmv,mvscale,0);
- }
-}
-
-/* get and decode motion vector and differential motion vector
- for one prediction */
-void motion_vector(PMV,dmvector,
- h_r_size,v_r_size,dmv,mvscale,full_pel_vector)
-int *PMV;
-int *dmvector;
-int h_r_size;
-int v_r_size;
-int dmv; /* MPEG-2 only: get differential motion vectors */
-int mvscale; /* MPEG-2 only: field vector in frame pic */
-int full_pel_vector; /* MPEG-1 only */
-{
- int motion_code, motion_residual;
-
- /* horizontal component */
- /* ISO/IEC 13818-2 Table B-10 */
- motion_code = Get_motion_code();
-
- motion_residual = (h_r_size!=0 && motion_code!=0) ? Get_Bits(h_r_size) : 0;
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- if (h_r_size!=0 && motion_code!=0)
- {
- printf("motion_residual (");
- Print_Bits(motion_residual,h_r_size,h_r_size);
- printf("): %d\n",motion_residual);
- }
- }
-#endif /* TRACE */
-
-
- decode_motion_vector(&PMV[0],h_r_size,motion_code,motion_residual,full_pel_vector);
-
- if (dmv)
- dmvector[0] = Get_dmvector();
-
-
- /* vertical component */
- motion_code = Get_motion_code();
- motion_residual = (v_r_size!=0 && motion_code!=0) ? Get_Bits(v_r_size) : 0;
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- if (v_r_size!=0 && motion_code!=0)
- {
- printf("motion_residual (");
- Print_Bits(motion_residual,v_r_size,v_r_size);
- printf("): %d\n",motion_residual);
- }
- }
-#endif /* TRACE */
-
- if (mvscale)
- PMV[1] >>= 1; /* DIV 2 */
-
- decode_motion_vector(&PMV[1],v_r_size,motion_code,motion_residual,full_pel_vector);
-
- if (mvscale)
- PMV[1] <<= 1;
-
- if (dmv)
- dmvector[1] = Get_dmvector();
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("PMV = %d,%d\n",PMV[0],PMV[1]);
-#endif /* TRACE */
-}
-
-/* calculate motion vector component */
-/* ISO/IEC 13818-2 section 7.6.3.1: Decoding the motion vectors */
-/* Note: the arithmetic here is more elegant than that which is shown
- in 7.6.3.1. The end results (PMV[][][]) should, however, be the same. */
-
-static void decode_motion_vector(pred,r_size,motion_code,motion_residual,full_pel_vector)
-int *pred;
-int r_size, motion_code, motion_residual;
-int full_pel_vector; /* MPEG-1 (ISO/IEC 11172-1) support */
-{
- int lim, vec;
-
- lim = 16<<r_size;
- vec = full_pel_vector ? (*pred >> 1) : (*pred);
-
- if (motion_code>0)
- {
- vec+= ((motion_code-1)<<r_size) + motion_residual + 1;
- if (vec>=lim)
- vec-= lim + lim;
- }
- else if (motion_code<0)
- {
- vec-= ((-motion_code-1)<<r_size) + motion_residual + 1;
- if (vec<-lim)
- vec+= lim + lim;
- }
- *pred = full_pel_vector ? (vec<<1) : vec;
-}
-
-
-/* ISO/IEC 13818-2 section 7.6.3.6: Dual prime additional arithmetic */
-void Dual_Prime_Arithmetic(DMV,dmvector,mvx,mvy)
-int DMV[][2];
-int *dmvector; /* differential motion vector */
-int mvx, mvy; /* decoded mv components (always in field format) */
-{
- if (picture_structure==FRAME_PICTURE)
- {
- if (top_field_first)
- {
- /* vector for prediction of top field from bottom field */
- DMV[0][0] = ((mvx +(mvx>0))>>1) + dmvector[0];
- DMV[0][1] = ((mvy +(mvy>0))>>1) + dmvector[1] - 1;
-
- /* vector for prediction of bottom field from top field */
- DMV[1][0] = ((3*mvx+(mvx>0))>>1) + dmvector[0];
- DMV[1][1] = ((3*mvy+(mvy>0))>>1) + dmvector[1] + 1;
- }
- else
- {
- /* vector for prediction of top field from bottom field */
- DMV[0][0] = ((3*mvx+(mvx>0))>>1) + dmvector[0];
- DMV[0][1] = ((3*mvy+(mvy>0))>>1) + dmvector[1] - 1;
-
- /* vector for prediction of bottom field from top field */
- DMV[1][0] = ((mvx +(mvx>0))>>1) + dmvector[0];
- DMV[1][1] = ((mvy +(mvy>0))>>1) + dmvector[1] + 1;
- }
- }
- else
- {
- /* vector for prediction from field of opposite 'parity' */
- DMV[0][0] = ((mvx+(mvx>0))>>1) + dmvector[0];
- DMV[0][1] = ((mvy+(mvy>0))>>1) + dmvector[1];
-
- /* correct for vertical field shift */
- if (picture_structure==TOP_FIELD)
- DMV[0][1]--;
- else
- DMV[0][1]++;
- }
-}
-
Index: start/mpeg2/global.h
===================================================================
--- start/mpeg2/global.h (revision 1087)
+++ start/mpeg2/global.h (nonexistent)
@@ -1,515 +0,0 @@
-/* global.h, global variables */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-#include "mpeg2dec.h"
-
-/* choose between declaration (GLOBAL undefined)
- * and definition (GLOBAL defined)
- * GLOBAL is defined in exactly one file mpeg2dec.c)
- */
-
-#ifndef GLOBAL
-#define EXTERN extern
-#else
-#define EXTERN
-#endif
-
-/* prototypes of global functions */
-/* readpic.c */
-void Substitute_Frame_Buffer _ANSI_ARGS_ ((int bitstream_framenum,
- int sequence_framenum));
-
-/* Get_Bits.c */
-void Initialize_Buffer _ANSI_ARGS_((void));
-void Fill_Buffer _ANSI_ARGS_((void));
-unsigned int Show_Bits _ANSI_ARGS_((int n));
-unsigned int Get_Bits1 _ANSI_ARGS_((void));
-void Flush_Buffer _ANSI_ARGS_((int n));
-unsigned int Get_Bits _ANSI_ARGS_((int n));
-int Get_Byte _ANSI_ARGS_((void));
-int Get_Word _ANSI_ARGS_((void));
-
-/* systems.c */
-void Next_Packet _ANSI_ARGS_((void));
-int Get_Long _ANSI_ARGS_((void));
-void Flush_Buffer32 _ANSI_ARGS_((void));
-unsigned int Get_Bits32 _ANSI_ARGS_((void));
-
-
-/* getblk.c */
-void Decode_MPEG1_Intra_Block _ANSI_ARGS_((int comp, int dc_dct_pred[]));
-void Decode_MPEG1_Non_Intra_Block _ANSI_ARGS_((int comp));
-void Decode_MPEG2_Intra_Block _ANSI_ARGS_((int comp, int dc_dct_pred[]));
-void Decode_MPEG2_Non_Intra_Block _ANSI_ARGS_((int comp));
-
-/* gethdr.c */
-int Get_Hdr _ANSI_ARGS_((void));
-void next_start_code _ANSI_ARGS_((void));
-int slice_header _ANSI_ARGS_((void));
-void marker_bit _ANSI_ARGS_((char *text));
-
-/* getpic.c */
-void Decode_Picture _ANSI_ARGS_((int bitstream_framenum,
- int sequence_framenum));
-void Output_Last_Frame_of_Sequence _ANSI_ARGS_((int framenum));
-
-/* getvlc.c */
-int Get_macroblock_type _ANSI_ARGS_((void));
-int Get_motion_code _ANSI_ARGS_((void));
-int Get_dmvector _ANSI_ARGS_((void));
-int Get_coded_block_pattern _ANSI_ARGS_((void));
-int Get_macroblock_address_increment _ANSI_ARGS_((void));
-int Get_Luma_DC_dct_diff _ANSI_ARGS_((void));
-int Get_Chroma_DC_dct_diff _ANSI_ARGS_((void));
-
-/* idct.c */
-void Fast_IDCT _ANSI_ARGS_((short *block));
-void Initialize_Fast_IDCT _ANSI_ARGS_((void));
-
-/* Reference_IDCT.c */
-void Initialize_Reference_IDCT _ANSI_ARGS_((void));
-void Reference_IDCT _ANSI_ARGS_((short *block));
-
-/* motion.c */
-void motion_vectors _ANSI_ARGS_((int PMV[2][2][2], int dmvector[2],
- int motion_vertical_field_select[2][2], int s, int motion_vector_count,
- int mv_format, int h_r_size, int v_r_size, int dmv, int mvscale));
-void motion_vector _ANSI_ARGS_((int *PMV, int *dmvector,
- int h_r_size, int v_r_size, int dmv, int mvscale, int full_pel_vector));
-void Dual_Prime_Arithmetic _ANSI_ARGS_((int DMV[][2], int *dmvector, int mvx, int mvy));
-
-/* mpeg2dec.c */
-void Error _ANSI_ARGS_((char *text));
-void Warning _ANSI_ARGS_((char *text));
-void Print_Bits _ANSI_ARGS_((int code, int bits, int len));
-
-/* recon.c */
-void form_predictions _ANSI_ARGS_((int bx, int by, int macroblock_type,
- int motion_type, int PMV[2][2][2], int motion_vertical_field_select[2][2],
- int dmvector[2], int stwtype));
-
-/* spatscal.c */
-void Spatial_Prediction _ANSI_ARGS_((void));
-
-/* store.c */
-void Write_Frame _ANSI_ARGS_((unsigned char *src[], int frame));
-
-#ifdef DISPLAY
-/* display.c */
-void Initialize_Display_Process _ANSI_ARGS_((char *name));
-void Terminate_Display_Process _ANSI_ARGS_((void));
-void Display_Second_Field _ANSI_ARGS_((void));
-void dither _ANSI_ARGS_((unsigned char *src[]));
-void Initialize_Dither_Matrix _ANSI_ARGS_((void));
-#endif
-
-/* global variables */
-
-EXTERN char Version[]
-#ifdef GLOBAL
- ="mpeg2decode V1.2a, 96/07/19"
-#endif
-;
-
-EXTERN char Author[]
-#ifdef GLOBAL
- ="(C) 1996, MPEG Software Simulation Group"
-#endif
-;
-
-
-/* zig-zag and alternate scan patterns */
-EXTERN unsigned char scan[2][64]
-#ifdef GLOBAL
-=
-{
- { /* Zig-Zag scan pattern */
- 0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,
- 12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,
- 35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,
- 58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63
- },
- { /* Alternate scan pattern */
- 0,8,16,24,1,9,2,10,17,25,32,40,48,56,57,49,
- 41,33,26,18,3,11,4,12,19,27,34,42,50,58,35,43,
- 51,59,20,28,5,13,6,14,21,29,36,44,52,60,37,45,
- 53,61,22,30,7,15,23,31,38,46,54,62,39,47,55,63
- }
-}
-#endif
-;
-
-/* default intra quantization matrix */
-EXTERN unsigned char default_intra_quantizer_matrix[64]
-#ifdef GLOBAL
-=
-{
- 8, 16, 19, 22, 26, 27, 29, 34,
- 16, 16, 22, 24, 27, 29, 34, 37,
- 19, 22, 26, 27, 29, 34, 34, 38,
- 22, 22, 26, 27, 29, 34, 37, 40,
- 22, 26, 27, 29, 32, 35, 40, 48,
- 26, 27, 29, 32, 35, 40, 48, 58,
- 26, 27, 29, 34, 38, 46, 56, 69,
- 27, 29, 35, 38, 46, 56, 69, 83
-}
-#endif
-;
-
-/* non-linear quantization coefficient table */
-EXTERN unsigned char Non_Linear_quantizer_scale[32]
-#ifdef GLOBAL
-=
-{
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8,10,12,14,16,18,20,22,
- 24,28,32,36,40,44,48,52,
- 56,64,72,80,88,96,104,112
-}
-#endif
-;
-
-/* color space conversion coefficients
- * for YCbCr -> RGB mapping
- *
- * entries are {crv,cbu,cgu,cgv}
- *
- * crv=(255/224)*65536*(1-cr)/0.5
- * cbu=(255/224)*65536*(1-cb)/0.5
- * cgu=(255/224)*65536*(cb/cg)*(1-cb)/0.5
- * cgv=(255/224)*65536*(cr/cg)*(1-cr)/0.5
- *
- * where Y=cr*R+cg*G+cb*B (cr+cg+cb=1)
- */
-
-/* ISO/IEC 13818-2 section 6.3.6 sequence_display_extension() */
-
-EXTERN int Inverse_Table_6_9[8][4]
-#ifdef GLOBAL
-=
-{
- {117504, 138453, 13954, 34903}, /* no sequence_display_extension */
- {117504, 138453, 13954, 34903}, /* ITU-R Rec. 709 (1990) */
- {104597, 132201, 25675, 53279}, /* unspecified */
- {104597, 132201, 25675, 53279}, /* reserved */
- {104448, 132798, 24759, 53109}, /* FCC */
- {104597, 132201, 25675, 53279}, /* ITU-R Rec. 624-4 System B, G */
- {104597, 132201, 25675, 53279}, /* SMPTE 170M */
- {117579, 136230, 16907, 35559} /* SMPTE 240M (1987) */
-}
-#endif
-;
-
-
-
-
-
-/* output types (Output_Type) */
-#define T_YUV 0
-#define T_SIF 1
-#define T_TGA 2
-#define T_PPM 3
-#define T_X11 4
-#define T_X11HIQ 5
-
-/* decoder operation control variables */
-EXTERN int Output_Type;
-EXTERN int hiQdither;
-
-/* decoder operation control flags */
-EXTERN int Quiet_Flag;
-EXTERN int Trace_Flag;
-EXTERN int Fault_Flag;
-EXTERN int Verbose_Flag;
-EXTERN int Two_Streams;
-EXTERN int Spatial_Flag;
-EXTERN int Reference_IDCT_Flag;
-EXTERN int Frame_Store_Flag;
-EXTERN int System_Stream_Flag;
-EXTERN int Display_Progressive_Flag;
-EXTERN int Ersatz_Flag;
-EXTERN int Big_Picture_Flag;
-EXTERN int Verify_Flag;
-EXTERN int Stats_Flag;
-EXTERN int User_Data_Flag;
-EXTERN int Main_Bitstream_Flag;
-
-
-/* filenames */
-EXTERN char *Output_Picture_Filename;
-EXTERN char *Substitute_Picture_Filename;
-EXTERN char *Main_Bitstream_Filename;
-EXTERN char *Enhancement_Layer_Bitstream_Filename;
-
-
-/* buffers for multiuse purposes */
-EXTERN char Error_Text[256];
-EXTERN unsigned char *Clip;
-
-/* pointers to generic picture buffers */
-EXTERN unsigned char *backward_reference_frame[3];
-EXTERN unsigned char *forward_reference_frame[3];
-
-EXTERN unsigned char *auxframe[3];
-EXTERN unsigned char *current_frame[3];
-EXTERN unsigned char *substitute_frame[3];
-
-
-/* pointers to scalability picture buffers */
-EXTERN unsigned char *llframe0[3];
-EXTERN unsigned char *llframe1[3];
-
-EXTERN short *lltmp;
-EXTERN char *Lower_Layer_Picture_Filename;
-
-
-
-
-/* non-normative variables derived from normative elements */
-EXTERN int Coded_Picture_Width;
-EXTERN int Coded_Picture_Height;
-EXTERN int Chroma_Width;
-EXTERN int Chroma_Height;
-EXTERN int block_count;
-EXTERN int Second_Field;
-EXTERN int profile, level;
-
-/* normative derived variables (as per ISO/IEC 13818-2) */
-EXTERN int horizontal_size;
-EXTERN int vertical_size;
-EXTERN int mb_width;
-EXTERN int mb_height;
-EXTERN double bit_rate;
-EXTERN double frame_rate;
-
-
-
-/* headers */
-
-/* ISO/IEC 13818-2 section 6.2.2.1: sequence_header() */
-EXTERN int aspect_ratio_information;
-EXTERN int frame_rate_code;
-EXTERN int bit_rate_value;
-EXTERN int vbv_buffer_size;
-EXTERN int constrained_parameters_flag;
-
-/* ISO/IEC 13818-2 section 6.2.2.3: sequence_extension() */
-EXTERN int profile_and_level_indication;
-EXTERN int progressive_sequence;
-EXTERN int chroma_format;
-EXTERN int low_delay;
-EXTERN int frame_rate_extension_n;
-EXTERN int frame_rate_extension_d;
-
-/* ISO/IEC 13818-2 section 6.2.2.4: sequence_display_extension() */
-EXTERN int video_format;
-EXTERN int color_description;
-EXTERN int color_primaries;
-EXTERN int transfer_characteristics;
-EXTERN int matrix_coefficients;
-EXTERN int display_horizontal_size;
-EXTERN int display_vertical_size;
-
-/* ISO/IEC 13818-2 section 6.2.3: picture_header() */
-EXTERN int temporal_reference;
-EXTERN int picture_coding_type;
-EXTERN int vbv_delay;
-EXTERN int full_pel_forward_vector;
-EXTERN int forward_f_code;
-EXTERN int full_pel_backward_vector;
-EXTERN int backward_f_code;
-
-
-/* ISO/IEC 13818-2 section 6.2.3.1: picture_coding_extension() header */
-EXTERN int f_code[2][2];
-EXTERN int intra_dc_precision;
-EXTERN int picture_structure;
-EXTERN int top_field_first;
-EXTERN int frame_pred_frame_dct;
-EXTERN int concealment_motion_vectors;
-
-EXTERN int intra_vlc_format;
-
-EXTERN int repeat_first_field;
-
-EXTERN int chroma_420_type;
-EXTERN int progressive_frame;
-EXTERN int composite_display_flag;
-EXTERN int v_axis;
-EXTERN int field_sequence;
-EXTERN int sub_carrier;
-EXTERN int burst_amplitude;
-EXTERN int sub_carrier_phase;
-
-
-
-/* ISO/IEC 13818-2 section 6.2.3.3: picture_display_extension() header */
-EXTERN int frame_center_horizontal_offset[3];
-EXTERN int frame_center_vertical_offset[3];
-
-
-
-/* ISO/IEC 13818-2 section 6.2.2.5: sequence_scalable_extension() header */
-EXTERN int layer_id;
-EXTERN int lower_layer_prediction_horizontal_size;
-EXTERN int lower_layer_prediction_vertical_size;
-EXTERN int horizontal_subsampling_factor_m;
-EXTERN int horizontal_subsampling_factor_n;
-EXTERN int vertical_subsampling_factor_m;
-EXTERN int vertical_subsampling_factor_n;
-
-
-/* ISO/IEC 13818-2 section 6.2.3.5: picture_spatial_scalable_extension() header */
-EXTERN int lower_layer_temporal_reference;
-EXTERN int lower_layer_horizontal_offset;
-EXTERN int lower_layer_vertical_offset;
-EXTERN int spatial_temporal_weight_code_table_index;
-EXTERN int lower_layer_progressive_frame;
-EXTERN int lower_layer_deinterlaced_field_select;
-
-
-
-
-
-
-/* ISO/IEC 13818-2 section 6.2.3.6: copyright_extension() header */
-EXTERN int copyright_flag;
-EXTERN int copyright_identifier;
-EXTERN int original_or_copy;
-EXTERN int copyright_number_1;
-EXTERN int copyright_number_2;
-EXTERN int copyright_number_3;
-
-/* ISO/IEC 13818-2 section 6.2.2.6: group_of_pictures_header() */
-EXTERN int drop_flag;
-EXTERN int hour;
-EXTERN int minute;
-EXTERN int sec;
-EXTERN int frame;
-EXTERN int closed_gop;
-EXTERN int broken_link;
-
-
-
-/* layer specific variables (needed for SNR and DP scalability) */
-EXTERN struct layer_data {
- /* bit input */
- int Infile;
- unsigned char Rdbfr[2048];
- unsigned char *Rdptr;
- unsigned char Inbfr[16];
- /* from mpeg2play */
- unsigned int Bfr;
- unsigned char *Rdmax;
- int Incnt;
- int Bitcnt;
- /* sequence header and quant_matrix_extension() */
- int intra_quantizer_matrix[64];
- int non_intra_quantizer_matrix[64];
- int chroma_intra_quantizer_matrix[64];
- int chroma_non_intra_quantizer_matrix[64];
-
- int load_intra_quantizer_matrix;
- int load_non_intra_quantizer_matrix;
- int load_chroma_intra_quantizer_matrix;
- int load_chroma_non_intra_quantizer_matrix;
-
- int MPEG2_Flag;
- /* sequence scalable extension */
- int scalable_mode;
- /* picture coding extension */
- int q_scale_type;
- int alternate_scan;
- /* picture spatial scalable extension */
- int pict_scal;
- /* slice/macroblock */
- int priority_breakpoint;
- int quantizer_scale;
- int intra_slice;
- short block[12][64];
-} base, enhan, *ld;
-
-
-
-#ifdef VERIFY
-EXTERN int verify_sequence_header;
-EXTERN int verify_group_of_pictures_header;
-EXTERN int verify_picture_header;
-EXTERN int verify_slice_header;
-EXTERN int verify_sequence_extension;
-EXTERN int verify_sequence_display_extension;
-EXTERN int verify_quant_matrix_extension;
-EXTERN int verify_sequence_scalable_extension;
-EXTERN int verify_picture_display_extension;
-EXTERN int verify_picture_coding_extension;
-EXTERN int verify_picture_spatial_scalable_extension;
-EXTERN int verify_picture_temporal_scalable_extension;
-EXTERN int verify_copyright_extension;
-#endif /* VERIFY */
-
-
-EXTERN int Decode_Layer;
-
-/* verify.c */
-#ifdef VERIFY
-void Check_Headers _ANSI_ARGS_((int Bitstream_Framenum, int Sequence_Framenum));
-void Clear_Verify_Headers _ANSI_ARGS_((void));
-#endif /* VERIFY */
-
-
-EXTERN int global_MBA;
-EXTERN int global_pic;
-EXTERN int True_Framenum;
-
-// PJ
-
-void gvideo_init(void);
-
-// Insertion/removal from display buffer
-
-// number of preallocated frames
-#define MAX_FRAMEBUF 20
-
-struct framebuf_struct {
- int n;
- WORD *f;
- struct framebuf_struct *next;
- struct framebuf_struct *prev;
-};
-
-void Initialize_framebuf(int sz);
-struct framebuf_struct *get_free_framebuf();
-void insert_frame(struct framebuf_struct *f);
-struct framebuf_struct *remove_frame();
-void give_back_framebuf(struct framebuf_struct *f);
-void init_jetcontrol(void);
-
-
-
-
Index: start/mpeg2/jetctrl.c
===================================================================
--- start/mpeg2/jetctrl.c (revision 1087)
+++ start/mpeg2/jetctrl.c (nonexistent)
@@ -1,163 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: jetctrl.c,v 1.1.1.1 2002-09-02 09:37:44 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:44 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * this file is directly derived from the demos/jumpball/jetctrl.c .
- * I just added this controls to check when the system will become overloaded
- */
-
-#define WCET_JETDUMMY 200
-#define PERIOD_JETDUMMY 100000
-#define DUMMY_PID 1
-
-#define JET_DUMMY_WIDTH (CMD_WIDTH-370)
-#define JET_DUMMY_HEIGHT (CMD_HEIGHT-40)
-
-/* the point (x, y) is the top left corner */
-#define JET_DUMMY_X (TRACK_X1+360)
-#define JET_DUMMY_Y (TRACK_Y2+32)
-
-// from jetdummy in the auto demo
-#define SCREEN_WIDTH 800
-#define SCREEN_HEIGHT 600
-/* Track dimensions */
-#define TRACK_WIDTH 500
-#define TRACK_HEIGHT 500
-/* Track position */
-#define TRACK_X1 0
-#define TRACK_Y1 0
-#define TRACK_X2 TRACK_X1+TRACK_WIDTH-1
-#define TRACK_Y2 TRACK_Y1+TRACK_HEIGHT-1
-#define CMD_WIDTH TRACK_WIDTH
-#define CMD_HEIGHT (SCREEN_HEIGHT-TRACK_HEIGHT-3)
-
-// JetControl
-
-#include "kernel/func.h"
-#include "drivers/glib.h"
-
-/* useful colors... */
-int white;
-int black;
-int red;
-int lightgray;
-
-TASK jetdummy_task(void *arg)
-{
- TIME now_dummy, last_dummy, diff_dummy, slice;
- struct timespec now, last, diff;
- int x = 0;
- int height;
-
- NULL_TIMESPEC(&last);
- last_dummy = 0;
- for (;;) {
- task_nopreempt();
- jet_getstat(DUMMY_PID, NULL, NULL, NULL, &now_dummy);
- sys_gettime(&now);
- task_preempt();
-
- SUBTIMESPEC(&now, &last, &diff);
- slice = diff.tv_sec * 1000000 + diff.tv_nsec/1000;
- diff_dummy = now_dummy - last_dummy;
-
- height = (int)(JET_DUMMY_HEIGHT*((float)diff_dummy)/((float)slice));
-
- TIMESPEC_ASSIGN(&last, &now);
- last_dummy = now_dummy;
-
- grx_line(JET_DUMMY_X+x,JET_DUMMY_Y,
- JET_DUMMY_X+x,JET_DUMMY_Y+height ,black);
- grx_line(JET_DUMMY_X+x,JET_DUMMY_Y+height,
- JET_DUMMY_X+x,JET_DUMMY_Y+JET_DUMMY_HEIGHT,white);
- grx_line(JET_DUMMY_X+(x+1)%JET_DUMMY_WIDTH,JET_DUMMY_Y,
- JET_DUMMY_X+(x+1)%JET_DUMMY_WIDTH,JET_DUMMY_Y+JET_DUMMY_HEIGHT,255);
-
- x = (x+1)%JET_DUMMY_WIDTH;
-
- task_endcycle();
- }
-}
-
-void init_jetcontrol(void)
-{
- SOFT_TASK_MODEL m4;
-
- PID p4;
-
- /* useful colors ... */
- white = rgb16(255,255,255);
- black = rgb16(0,0,0);
- red = rgb16(255,0,0);
- lightgray = rgb16(128,128,128);
-
- /* scenario */
- grx_text("System load",
- JET_DUMMY_X+8, JET_DUMMY_Y-10, lightgray, black);
- grx_rect(JET_DUMMY_X-1, JET_DUMMY_Y-1,
- JET_DUMMY_X+JET_DUMMY_WIDTH, JET_DUMMY_Y+JET_DUMMY_HEIGHT+1, lightgray);
-
- grx_text("100%", JET_DUMMY_X-40, JET_DUMMY_Y, lightgray, black);
- grx_text(" 0%", JET_DUMMY_X-40, JET_DUMMY_Y+JET_DUMMY_HEIGHT-8, lightgray, black);
-
- grx_line(JET_DUMMY_X-1, JET_DUMMY_Y, JET_DUMMY_X-5, JET_DUMMY_Y, lightgray);
- grx_line(JET_DUMMY_X-1, JET_DUMMY_Y+JET_DUMMY_HEIGHT, JET_DUMMY_X-5, JET_DUMMY_Y+JET_DUMMY_HEIGHT, lightgray);
-
- /* jetdummy task */
- soft_task_default_model(m4);
- soft_task_def_period(m4, PERIOD_JETDUMMY);
- soft_task_def_met(m4, WCET_JETDUMMY);
- soft_task_def_usemath(m4);
- p4 = task_create("jdmy", jetdummy_task, &m4, NULL);
- if (p4 == -1) {
- grx_close();
- perror("Could not create task <jetdummy>");
- sys_end();
- }
- task_activate(p4);
-}
-
Index: start/mpeg2/getblk.c
===================================================================
--- start/mpeg2/getblk.c (revision 1087)
+++ start/mpeg2/getblk.c (nonexistent)
@@ -1,570 +0,0 @@
-/* getblk.c, DCT block decoding */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-#include <stdio.h>
-
-#include "config.h"
-#include "global.h"
-
-
-/* defined in getvlc.h */
-typedef struct {
- char run, level, len;
-} DCTtab;
-
-extern DCTtab DCTtabfirst[],DCTtabnext[],DCTtab0[],DCTtab1[];
-extern DCTtab DCTtab2[],DCTtab3[],DCTtab4[],DCTtab5[],DCTtab6[];
-extern DCTtab DCTtab0a[],DCTtab1a[];
-
-
-/* decode one intra coded MPEG-1 block */
-
-void Decode_MPEG1_Intra_Block(comp,dc_dct_pred)
-int comp;
-int dc_dct_pred[];
-{
- int val, i, j, sign;
- unsigned int code;
- DCTtab *tab;
- short *bp;
-
- bp = ld->block[comp];
-
- /* ISO/IEC 11172-2 section 2.4.3.7: Block layer. */
- /* decode DC coefficients */
- if (comp<4)
- bp[0] = (dc_dct_pred[0]+=Get_Luma_DC_dct_diff()) << 3;
- else if (comp==4)
- bp[0] = (dc_dct_pred[1]+=Get_Chroma_DC_dct_diff()) << 3;
- else
- bp[0] = (dc_dct_pred[2]+=Get_Chroma_DC_dct_diff()) << 3;
-
- if (Fault_Flag) return;
-
- /* D-pictures do not contain AC coefficients */
- if(picture_coding_type == D_TYPE)
- return;
-
- /* decode AC coefficients */
- for (i=1; ; i++)
- {
- code = Show_Bits(16);
- if (code>=16384)
- tab = &DCTtabnext[(code>>12)-4];
- else if (code>=1024)
- tab = &DCTtab0[(code>>8)-4];
- else if (code>=512)
- tab = &DCTtab1[(code>>6)-8];
- else if (code>=256)
- tab = &DCTtab2[(code>>4)-16];
- else if (code>=128)
- tab = &DCTtab3[(code>>3)-16];
- else if (code>=64)
- tab = &DCTtab4[(code>>2)-16];
- else if (code>=32)
- tab = &DCTtab5[(code>>1)-16];
- else if (code>=16)
- tab = &DCTtab6[code-16];
- else
- {
- if (!Quiet_Flag)
- printf("invalid Huffman code in Decode_MPEG1_Intra_Block()\n");
- Fault_Flag = 1;
- return;
- }
-
- Flush_Buffer(tab->len);
-
- if (tab->run==64) /* end_of_block */
- return;
-
- if (tab->run==65) /* escape */
- {
- i+= Get_Bits(6);
-
- val = Get_Bits(8);
- if (val==0)
- val = Get_Bits(8);
- else if (val==128)
- val = Get_Bits(8) - 256;
- else if (val>128)
- val -= 256;
-
- if((sign = (val<0)))
- val = -val;
- }
- else
- {
- i+= tab->run;
- val = tab->level;
- sign = Get_Bits(1);
- }
-
- if (i>=64)
- {
- if (!Quiet_Flag)
- fprintf(stderr,"DCT coeff index (i) out of bounds (intra)\n");
- Fault_Flag = 1;
- return;
- }
-
- j = scan[ZIG_ZAG][i];
- val = (val*ld->quantizer_scale*ld->intra_quantizer_matrix[j]) >> 3;
-
- /* mismatch control ('oddification') */
- if (val!=0) /* should always be true, but it's not guaranteed */
- val = (val-1) | 1; /* equivalent to: if ((val&1)==0) val = val - 1; */
-
- /* saturation */
- if (!sign)
- bp[j] = (val>2047) ? 2047 : val; /* positive */
- else
- bp[j] = (val>2048) ? -2048 : -val; /* negative */
- }
-}
-
-
-/* decode one non-intra coded MPEG-1 block */
-
-void Decode_MPEG1_Non_Intra_Block(comp)
-int comp;
-{
- int val, i, j, sign;
- unsigned int code;
- DCTtab *tab;
- short *bp;
-
- bp = ld->block[comp];
-
- /* decode AC coefficients */
- for (i=0; ; i++)
- {
- code = Show_Bits(16);
- if (code>=16384)
- {
- if (i==0)
- tab = &DCTtabfirst[(code>>12)-4];
- else
- tab = &DCTtabnext[(code>>12)-4];
- }
- else if (code>=1024)
- tab = &DCTtab0[(code>>8)-4];
- else if (code>=512)
- tab = &DCTtab1[(code>>6)-8];
- else if (code>=256)
- tab = &DCTtab2[(code>>4)-16];
- else if (code>=128)
- tab = &DCTtab3[(code>>3)-16];
- else if (code>=64)
- tab = &DCTtab4[(code>>2)-16];
- else if (code>=32)
- tab = &DCTtab5[(code>>1)-16];
- else if (code>=16)
- tab = &DCTtab6[code-16];
- else
- {
- if (!Quiet_Flag)
- printf("invalid Huffman code in Decode_MPEG1_Non_Intra_Block()\n");
- Fault_Flag = 1;
- return;
- }
-
- Flush_Buffer(tab->len);
-
- if (tab->run==64) /* end_of_block */
- return;
-
- if (tab->run==65) /* escape */
- {
- i+= Get_Bits(6);
-
- val = Get_Bits(8);
- if (val==0)
- val = Get_Bits(8);
- else if (val==128)
- val = Get_Bits(8) - 256;
- else if (val>128)
- val -= 256;
-
- if((sign = (val<0)))
- val = -val;
- }
- else
- {
- i+= tab->run;
- val = tab->level;
- sign = Get_Bits(1);
- }
-
- if (i>=64)
- {
- if (!Quiet_Flag)
- fprintf(stderr,"DCT coeff index (i) out of bounds (inter)\n");
- Fault_Flag = 1;
- return;
- }
-
- j = scan[ZIG_ZAG][i];
- val = (((val<<1)+1)*ld->quantizer_scale*ld->non_intra_quantizer_matrix[j]) >> 4;
-
- /* mismatch control ('oddification') */
- if (val!=0) /* should always be true, but it's not guaranteed */
- val = (val-1) | 1; /* equivalent to: if ((val&1)==0) val = val - 1; */
-
- /* saturation */
- if (!sign)
- bp[j] = (val>2047) ? 2047 : val; /* positive */
- else
- bp[j] = (val>2048) ? -2048 : -val; /* negative */
- }
-}
-
-
-/* decode one intra coded MPEG-2 block */
-
-void Decode_MPEG2_Intra_Block(comp,dc_dct_pred)
-int comp;
-int dc_dct_pred[];
-{
- int val, i, j, sign, nc, cc, run;
- unsigned int code;
- DCTtab *tab;
- short *bp;
- int *qmat;
- struct layer_data *ld1;
-
- /* with data partitioning, data always goes to base layer */
- ld1 = (ld->scalable_mode==SC_DP) ? &base : ld;
- bp = ld1->block[comp];
-
- if (base.scalable_mode==SC_DP)
- if (base.priority_breakpoint<64)
- ld = &enhan;
- else
- ld = &base;
-
- cc = (comp<4) ? 0 : (comp&1)+1;
-
- qmat = (comp<4 || chroma_format==CHROMA420)
- ? ld1->intra_quantizer_matrix
- : ld1->chroma_intra_quantizer_matrix;
-
- /* ISO/IEC 13818-2 section 7.2.1: decode DC coefficients */
- if (cc==0)
- val = (dc_dct_pred[0]+= Get_Luma_DC_dct_diff());
- else if (cc==1)
- val = (dc_dct_pred[1]+= Get_Chroma_DC_dct_diff());
- else
- val = (dc_dct_pred[2]+= Get_Chroma_DC_dct_diff());
-
- if (Fault_Flag) return;
-
- bp[0] = val << (3-intra_dc_precision);
-
- nc=0;
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("DCT(%d)i:",comp);
-#endif /* TRACE */
-
- /* decode AC coefficients */
- for (i=1; ; i++)
- {
- code = Show_Bits(16);
- if (code>=16384 && !intra_vlc_format)
- tab = &DCTtabnext[(code>>12)-4];
- else if (code>=1024)
- {
- if (intra_vlc_format)
- tab = &DCTtab0a[(code>>8)-4];
- else
- tab = &DCTtab0[(code>>8)-4];
- }
- else if (code>=512)
- {
- if (intra_vlc_format)
- tab = &DCTtab1a[(code>>6)-8];
- else
- tab = &DCTtab1[(code>>6)-8];
- }
- else if (code>=256)
- tab = &DCTtab2[(code>>4)-16];
- else if (code>=128)
- tab = &DCTtab3[(code>>3)-16];
- else if (code>=64)
- tab = &DCTtab4[(code>>2)-16];
- else if (code>=32)
- tab = &DCTtab5[(code>>1)-16];
- else if (code>=16)
- tab = &DCTtab6[code-16];
- else
- {
- if (!Quiet_Flag)
- printf("invalid Huffman code in Decode_MPEG2_Intra_Block()\n");
- Fault_Flag = 1;
- return;
- }
-
- Flush_Buffer(tab->len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- printf(" (");
- Print_Bits(code,16,tab->len);
- }
-#endif /* TRACE */
-
- if (tab->run==64) /* end_of_block */
- {
-#ifdef TRACE
- if (Trace_Flag)
- printf("): EOB\n");
-#endif /* TRACE */
- return;
- }
-
- if (tab->run==65) /* escape */
- {
-#ifdef TRACE
- if (Trace_Flag)
- {
- putchar(' ');
- Print_Bits(Show_Bits(6),6,6);
- }
-#endif /* TRACE */
-
- i+= run = Get_Bits(6);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- putchar(' ');
- Print_Bits(Show_Bits(12),12,12);
- }
-#endif /* TRACE */
-
- val = Get_Bits(12);
- if ((val&2047)==0)
- {
- if (!Quiet_Flag)
- printf("invalid escape in Decode_MPEG2_Intra_Block()\n");
- Fault_Flag = 1;
- return;
- }
- if((sign = (val>=2048)))
- val = 4096 - val;
- }
- else
- {
- i+= run = tab->run;
- val = tab->level;
- sign = Get_Bits(1);
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("%d",sign);
-#endif /* TRACE */
- }
-
- if (i>=64)
- {
- if (!Quiet_Flag)
- fprintf(stderr,"DCT coeff index (i) out of bounds (intra2)\n");
- Fault_Flag = 1;
- return;
- }
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("): %d/%d",run,sign ? -val : val);
-#endif /* TRACE */
-
- j = scan[ld1->alternate_scan][i];
- val = (val * ld1->quantizer_scale * qmat[j]) >> 4;
- bp[j] = sign ? -val : val;
- nc++;
-
- if (base.scalable_mode==SC_DP && nc==base.priority_breakpoint-63)
- ld = &enhan;
- }
-}
-
-
-/* decode one non-intra coded MPEG-2 block */
-
-void Decode_MPEG2_Non_Intra_Block(comp)
-int comp;
-{
- int val, i, j, sign, nc, run;
- unsigned int code;
- DCTtab *tab;
- short *bp;
- int *qmat;
- struct layer_data *ld1;
-
- /* with data partitioning, data always goes to base layer */
- ld1 = (ld->scalable_mode==SC_DP) ? &base : ld;
- bp = ld1->block[comp];
-
- if (base.scalable_mode==SC_DP)
- if (base.priority_breakpoint<64)
- ld = &enhan;
- else
- ld = &base;
-
- qmat = (comp<4 || chroma_format==CHROMA420)
- ? ld1->non_intra_quantizer_matrix
- : ld1->chroma_non_intra_quantizer_matrix;
-
- nc = 0;
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("DCT(%d)n:",comp);
-#endif /* TRACE */
-
- /* decode AC coefficients */
- for (i=0; ; i++)
- {
- code = Show_Bits(16);
- if (code>=16384)
- {
- if (i==0)
- tab = &DCTtabfirst[(code>>12)-4];
- else
- tab = &DCTtabnext[(code>>12)-4];
- }
- else if (code>=1024)
- tab = &DCTtab0[(code>>8)-4];
- else if (code>=512)
- tab = &DCTtab1[(code>>6)-8];
- else if (code>=256)
- tab = &DCTtab2[(code>>4)-16];
- else if (code>=128)
- tab = &DCTtab3[(code>>3)-16];
- else if (code>=64)
- tab = &DCTtab4[(code>>2)-16];
- else if (code>=32)
- tab = &DCTtab5[(code>>1)-16];
- else if (code>=16)
- tab = &DCTtab6[code-16];
- else
- {
- if (!Quiet_Flag)
- printf("invalid Huffman code in Decode_MPEG2_Non_Intra_Block()\n");
- Fault_Flag = 1;
- return;
- }
-
- Flush_Buffer(tab->len);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- printf(" (");
- Print_Bits(code,16,tab->len);
- }
-#endif /* TRACE */
-
- if (tab->run==64) /* end_of_block */
- {
-#ifdef TRACE
- if (Trace_Flag)
- printf("): EOB\n");
-#endif /* TRACE */
- return;
- }
-
- if (tab->run==65) /* escape */
- {
-#ifdef TRACE
- if (Trace_Flag)
- {
- putchar(' ');
- Print_Bits(Show_Bits(6),6,6);
- }
-#endif /* TRACE */
-
- i+= run = Get_Bits(6);
-
-#ifdef TRACE
- if (Trace_Flag)
- {
- putchar(' ');
- Print_Bits(Show_Bits(12),12,12);
- }
-#endif /* TRACE */
-
- val = Get_Bits(12);
- if ((val&2047)==0)
- {
- if (!Quiet_Flag)
- printf("invalid escape in Decode_MPEG2_Intra_Block()\n");
- Fault_Flag = 1;
- return;
- }
- if((sign = (val>=2048)))
- val = 4096 - val;
- }
- else
- {
- i+= run = tab->run;
- val = tab->level;
- sign = Get_Bits(1);
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("%d",sign);
-#endif /* TRACE */
- }
-
- if (i>=64)
- {
- if (!Quiet_Flag)
- fprintf(stderr,"DCT coeff index (i) out of bounds (inter2)\n");
- Fault_Flag = 1;
- return;
- }
-
-#ifdef TRACE
- if (Trace_Flag)
- printf("): %d/%d",run,sign?-val:val);
-#endif /* TRACE */
-
- j = scan[ld1->alternate_scan][i];
- val = (((val<<1)+1) * ld1->quantizer_scale * qmat[j]) >> 5;
- bp[j] = sign ? -val : val;
- nc++;
-
- if (base.scalable_mode==SC_DP && nc==base.priority_breakpoint-63)
- ld = &enhan;
- }
-}
Index: start/mpeg2/spatscal.c
===================================================================
--- start/mpeg2/spatscal.c (revision 1087)
+++ start/mpeg2/spatscal.c (nonexistent)
@@ -1,331 +0,0 @@
-
-#include <stdio.h>
-#include "config.h"
-#include "global.h"
-
-/* private prototypes */
-static void Read_Lower_Layer_Component_Framewise _ANSI_ARGS_((int comp, int lw, int lh));
-static void Read_Lower_Layer_Component_Fieldwise _ANSI_ARGS_((int comp, int lw, int lh));
-static void Make_Spatial_Prediction_Frame _ANSI_ARGS_((int progressive_frame,
- int llprogressive_frame, unsigned char *fld0, unsigned char *fld1,
- short *tmp, unsigned char *dst, int llx0, int lly0, int llw, int llh,
- int horizontal_size, int vertical_size, int vm, int vn, int hm, int hn,
- int aperture));
-static void Deinterlace _ANSI_ARGS_((unsigned char *fld0, unsigned char *fld1,
- int j0, int lx, int ly, int aperture));
-static void Subsample_Vertical _ANSI_ARGS_((unsigned char *s, short *d,
- int lx, int lys, int lyd, int m, int n, int j0, int dj));
-static void Subsample_Horizontal _ANSI_ARGS_((short *s, unsigned char *d,
- int x0, int lx, int lxs, int lxd, int ly, int m, int n));
-
-
-
-/* get reference frame */
-void Spatial_Prediction()
-{
-
- if(Frame_Store_Flag)
- {
- Read_Lower_Layer_Component_Framewise(0,lower_layer_prediction_horizontal_size,
- lower_layer_prediction_vertical_size); /* Y */
- Read_Lower_Layer_Component_Framewise(1,lower_layer_prediction_horizontal_size>>1,
- lower_layer_prediction_vertical_size>>1); /* Cb ("U") */
- Read_Lower_Layer_Component_Framewise(2,lower_layer_prediction_horizontal_size>>1,
- lower_layer_prediction_vertical_size>>1); /* Cr ("V") */
- }
- else
- {
- Read_Lower_Layer_Component_Fieldwise(0,lower_layer_prediction_horizontal_size,
- lower_layer_prediction_vertical_size); /* Y */
- Read_Lower_Layer_Component_Fieldwise(1,lower_layer_prediction_horizontal_size>>1,
- lower_layer_prediction_vertical_size>>1); /* Cb ("U") */
- Read_Lower_Layer_Component_Fieldwise(2,lower_layer_prediction_horizontal_size>>1,
- lower_layer_prediction_vertical_size>>1); /* Cr ("V") */
- }
-
-
- Make_Spatial_Prediction_Frame /* Y */
- (progressive_frame,lower_layer_progressive_frame,llframe0[0],llframe1[0],
- lltmp,current_frame[0],lower_layer_horizontal_offset,
- lower_layer_vertical_offset,
- lower_layer_prediction_horizontal_size,
- lower_layer_prediction_vertical_size,
- horizontal_size,vertical_size,vertical_subsampling_factor_m,
- vertical_subsampling_factor_n,horizontal_subsampling_factor_m,
- horizontal_subsampling_factor_n,
- picture_structure!=FRAME_PICTURE); /* this changed from CD to DIS */
-
- Make_Spatial_Prediction_Frame /* Cb */
- (progressive_frame,lower_layer_progressive_frame,llframe0[1],llframe1[1],
- lltmp,current_frame[1],lower_layer_horizontal_offset/2,
- lower_layer_vertical_offset/2,
- lower_layer_prediction_horizontal_size>>1,
- lower_layer_prediction_vertical_size>>1,
- horizontal_size>>1,vertical_size>>1,vertical_subsampling_factor_m,
- vertical_subsampling_factor_n,horizontal_subsampling_factor_m,
- horizontal_subsampling_factor_n,1);
-
- Make_Spatial_Prediction_Frame /* Cr */
- (progressive_frame,lower_layer_progressive_frame,llframe0[2],llframe1[2],
- lltmp,current_frame[2],lower_layer_horizontal_offset/2,
- lower_layer_vertical_offset/2,
- lower_layer_prediction_horizontal_size>>1,
- lower_layer_prediction_vertical_size>>1,
- horizontal_size>>1,vertical_size>>1,vertical_subsampling_factor_m,
- vertical_subsampling_factor_n,horizontal_subsampling_factor_m,
- horizontal_subsampling_factor_n,1);
-
-}
-
-static void Read_Lower_Layer_Component_Framewise(comp,lw,lh)
- int comp;
- int lw, lh;
-{
- FILE *fd;
- char fname[256];
- char ext[3][3] = {".Y",".U",".V"};
-/* char *ext = {".Y",".U",".V"}; */
- int i,j;
-
- sprintf(fname,Lower_Layer_Picture_Filename,True_Framenum);
- strcat(fname,ext[comp]);
-#ifdef VERBOSE
- if (Verbose_Flag>1)
- printf("reading %s\n",fname);
-#endif VERBOSE
- fd=fopen(fname,"rb");
- if (fd==NULL) sys_abort(-1); // PJ exit(-1);
- for (j=0; j<lh; j++) {
- for (i=0; i<lw; i++)
- llframe0[comp][lw*j+i]=getc(fd);
- if (! lower_layer_progressive_frame) {
- j++;
- for (i=0; i<lw; i++)
- llframe1[comp][lw*j+i]=getc(fd);
- }
- }
- fclose(fd);
-}
-
-
-static void Read_Lower_Layer_Component_Fieldwise(comp,lw,lh)
- int comp;
- int lw, lh;
-{
- FILE *fd;
- char fname[256];
- char ext[3][3] = {".Y",".U",".V"};
-/* char *ext = {".Y",".U",".V"}; */
- int i,j;
-
- sprintf(fname,Lower_Layer_Picture_Filename,True_Framenum,lower_layer_progressive_frame ? 'f':'a');
- strcat(fname,ext[comp]);
-#ifdef VERBOSE
- if (Verbose_Flag>1)
- printf("reading %s\n",fname);
-#endif VERBOSE
- fd=fopen(fname,"rb");
- if (fd==NULL) sys_abort(-1); // PJ exit(-1);
- for (j=0; j<lh; j+=lower_layer_progressive_frame?1:2)
- for (i=0; i<lw; i++)
- llframe0[comp][lw*j+i]=getc(fd);
- fclose(fd);
-
- if (! lower_layer_progressive_frame) {
- sprintf(fname,Lower_Layer_Picture_Filename,True_Framenum,'b');
- strcat(fname,ext[comp]);
-#ifdef VERBOSE
- if (Verbose_Flag>1)
- printf("reading %s\n",fname);
-#endif VERBOSE
- fd=fopen(fname,"rb");
- if (fd==NULL) sys_abort(-1); // PJ exit(-1);
- for (j=1; j<lh; j+=2)
- for (i=0; i<lw; i++)
- llframe1[comp][lw*j+i]=getc(fd);
- fclose(fd);
- }
-}
-
-
-/* form spatial prediction */
-static void Make_Spatial_Prediction_Frame(progressive_frame,
- llprogressive_frame,fld0,fld1,tmp,dst,llx0,lly0,llw,llh,horizontal_size,
- vertical_size,vm,vn,hm,hn,aperture)
-int progressive_frame,llprogressive_frame;
-unsigned char *fld0,*fld1;
-short *tmp;
-unsigned char *dst;
-int llx0,lly0,llw,llh,horizontal_size,vertical_size,vm,vn,hm,hn,aperture;
-{
- int w, h, x0, llw2, llh2;
-
- llw2 = (llw*hn)/hm;
- llh2 = (llh*vn)/vm;
-
- if (llprogressive_frame)
- {
- /* progressive -> progressive / interlaced */
- Subsample_Vertical(fld0,tmp,llw,llh,llh2,vm,vn,0,1);
- }
- else if (progressive_frame)
- {
- /* interlaced -> progressive */
- if (lower_layer_deinterlaced_field_select)
- {
- Deinterlace(fld1,fld0,0,llw,llh,aperture);
- Subsample_Vertical(fld1,tmp,llw,llh,llh2,vm,vn,0,1);
- }
- else
- {
- Deinterlace(fld0,fld1,1,llw,llh,aperture);
- Subsample_Vertical(fld0,tmp,llw,llh,llh2,vm,vn,0,1);
- }
- }
- else
- {
- /* interlaced -> interlaced */
- Deinterlace(fld0,fld1,1,llw,llh,aperture);
- Deinterlace(fld1,fld0,0,llw,llh,aperture);
- Subsample_Vertical(fld0,tmp,llw,llh,llh2,vm,vn,0,2);
- Subsample_Vertical(fld1,tmp,llw,llh,llh2,vm,vn,1,2);
- }
-
- /* vertical limits */
- if (lly0<0)
- {
- tmp-= llw*lly0;
- llh2+= lly0;
- if (llh2<0)
- llh2 = 0;
- h = (vertical_size<llh2) ? vertical_size : llh2;
- }
- else
- {
- dst+= horizontal_size*lly0;
- h= vertical_size - lly0;
- if (h>llh2)
- h = llh2;
- }
-
- /* horizontal limits */
- if (llx0<0)
- {
- x0 = -llx0;
- llw2+= llx0;
- if (llw2<0)
- llw2 = 0;
- w = (horizontal_size<llw2) ? horizontal_size : llw2;
- }
- else
- {
- dst+= llx0;
- x0 = 0;
- w = horizontal_size - llx0;
- if (w>llw2)
- w = llw2;
- }
-
- Subsample_Horizontal(tmp,dst,x0,w,llw,horizontal_size,h,hm,hn);
-}
-
-/* deinterlace one field (interpolate opposite parity samples)
- *
- * deinterlacing is done in-place: if j0=1, fld0 contains the input field in
- * its even lines and the odd lines are interpolated by this routine
- * if j0=0, the input field is in the odd lines and the even lines are
- * interpolated
- *
- * fld0: field to be deinterlaced
- * fld1: other field (referenced by the two field aperture filter)
- * j0: 0: interpolate even (top) lines, 1: interpolate odd (bottom) lines
- * lx: width of fld0 and fld1
- * ly: height of the deinterlaced field (has to be even)
- * aperture: 1: use one field aperture filter (two field otherwise)
- */
-static void Deinterlace(fld0,fld1,j0,lx,ly,aperture)
-unsigned char *fld0,*fld1;
-int j0,lx,ly; /* ly has to be even */
-int aperture;
-{
- int i,j,v;
- unsigned char *p0, *p0m1, *p0p1, *p1, *p1m2, *p1p2;
-
- /* deinterlace one field */
- for (j=j0; j<ly; j+=2)
- {
- p0 = fld0+lx*j;
- p0m1 = (j==0) ? p0+lx : p0-lx;
- p0p1 = (j==ly-1) ? p0-lx : p0+lx;
-
- if (aperture)
- for (i=0; i<lx; i++)
- p0[i] = (unsigned int)(p0m1[i] + p0p1[i] + 1)>>1;
- else
- {
- p1 = fld1 + lx*j;
- p1m2 = (j<2) ? p1 : p1-2*lx;
- p1p2 = (j>=ly-2) ? p1 : p1+2*lx;
- for (i=0; i<lx; i++)
- {
- v = 8*(p0m1[i]+p0p1[i]) + 2*p1[i] - p1m2[i] - p1p2[i];
- p0[i] = Clip[(v + ((v>=0) ? 8 : 7))>>4];
- }
- }
- }
-}
-
-/* vertical resampling */
-static void Subsample_Vertical(s,d,lx,lys,lyd,m,n,j0,dj)
-unsigned char *s;
-short *d;
-int lx, lys, lyd, m, n, j0, dj;
-{
- int i, j, c1, c2, jd;
- unsigned char *s1, *s2;
- short *d1;
-
- for (j=j0; j<lyd; j+=dj)
- {
- d1 = d + lx*j;
- jd = (j*m)/n;
- s1 = s + lx*jd;
- s2 = (jd<lys-1)? s1+lx : s1;
- c2 = (16*((j*m)%n) + (n>>1))/n;
- c1 = 16 - c2;
- for (i=0; i<lx; i++)
- d1[i] = c1*s1[i] + c2*s2[i];
- }
-}
-
-/* horizontal resampling */
-static void Subsample_Horizontal(s,d,x0,lx,lxs,lxd,ly,m,n)
-short *s;
-unsigned char *d;
-int x0, lx, lxs, lxd, ly, m, n;
-{
- int i, i1, j, id, c1, c2, v;
- short *s1, *s2;
- unsigned char *d1;
-
- for (i1=0; i1<lx; i1++)
- {
- d1 = d + i1;
- i = x0 + i1;
- id = (i*m)/n;
- s1 = s+id;
- s2 = (id<lxs-1) ? s1+1 : s1;
- c2 = (16*((i*m)%n) + (n>>1))/n;
- c1 = 16 - c2;
- for (j=0; j<ly; j++)
- {
- v = c1*(*s1) + c2*(*s2);
- *d1 = (v + ((v>=0) ? 128 : 127))>>8;
- d1+= lxd;
- s1+= lxs;
- s2+= lxs;
- }
- }
-}
-
-
Index: start/mpeg2/readme
===================================================================
--- start/mpeg2/readme (revision 1087)
+++ start/mpeg2/readme (nonexistent)
@@ -1,72 +0,0 @@
-This is the S.Ha.R.K. porting of the MPEG2 decoder from the
-MPEG Software Simulation Group.
-
----------------------------------------------------------------------------
-
-The original source code is available on the web at
-http://www.mpeg.org
-
-The demo uses the FAT16 filesystem and the graphics card.
-I just added these files:
-- gvideo.c Video initialization and output
-- jetctrl.c Idle time visualization
-- makefile S.Ha.R.K. Makefile for the demo
-- store.c interface between the original decoder and S.Ha.R.K.
-
-The original makefile and store.c files has also been renamed to store.ori.
-
----------------------------------------------------------------------------
-
-The demo simply intercets the Write_Frame function and puts the decoded
-frame into a buffer. The task created in gvideo is a periodic CBS task
-that reads a picture from the buffer and simply displays it.
-
-===========================================================================
-
-This is the original readme file:
-
-
-January 9, 1995:
-=====
-Pre-release caveats:
-
- - has only been tested with gcc. (I'm not sure we will even bother
- with acc, or cc in the future).
-
- - I'm fully aware of the warnings received by -Wall
-
- - Verifier still not integrated (due to complexity), although
- experimental vbv_delay code included in verify.c
-
-
-
-December 20, 1995
-===============================================================
-Frame buffer substitution edition of decoder.
-
-Restrictions:
- - temporal_reference in bitstream must be correct.
-
- - substitute pictures must have pixel (luminance samples) width
- and height equal to coded_picture_width (mb_width*16) and
- coded_picture_height (mb_height*16) rather than horizontal_size
- and vertical_size, respectively.
-
- - all input pictures must be interleaved into a frame.
-
- - frame count (index) is based on absolute display frame order with
- no repeated (3:2 pulldown) fields or frames.
-
---------------------------------------------------------
-Notes:
-
- - command line arguements in this edition differ from verifier
- style. This decoder's arguments are the same as the
- public distribution's (July 4, 1994) code .
-
- please note that this code, with frame buffer substitution, when it
- is released will use the verifier style of arguments.
-
- - Carsten's updated spatial scalability decoder routines have been
- incorperated.
-
Index: start/mpeg2/gvideo.c
===================================================================
--- start/mpeg2/gvideo.c (revision 1087)
+++ start/mpeg2/gvideo.c (nonexistent)
@@ -1,157 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- * Copyright (C) 1999 Luca Abeni and Massimiliano Giorgi
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * CVS : $Id: gvideo.c,v 1.1.1.1 2002-09-02 09:37:45 pj Exp $
- *
- * File: $File$
- * Revision: $Revision: 1.1.1.1 $
- * Last update: $Date: 2002-09-02 09:37:45 $
- */
-
-//#include "config.h"
-
-#include <kernel/func.h>
-#include <kernel/model.h>
-#include <kernel/const.h>
-
-#include <drivers/glib.h>
-
-#include <stdlib.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-
-#include "config.h"
-#include "global.h"
-
-#define COLORFG rgb16(255,255,255)
-#define COLORBG rgb16(0,0,0)
-
-#define SP rgb16(0,128,0)
-#define FG rgb16(255,255,255)
-#define BG rgb16(0,0,0)
-
-/* border size (pixels) */
-#define BO 4
-
-
-//#define NOGRX
-
-/*
- *
- */
-
-
-void draw_frame(int x, int y, int dx, int dy)
-{
-#ifndef NOGRX
- grx_box(x-1-BO,y-1-BO,x+dx+BO,y+dy+BO,SP);
- grx_rect(x-1-BO,y-1-BO,x+dx+BO,y+dy+BO,FG);
- grx_box(x,y,x+dx-1,y+dy-1,BG);
- grx_rect(x-1,y-1,x+dx,y+dy,FG);
-#endif
-}
-
-static TASK play(void *arg)
-{
- int x1,y1,x2,y2;
- int moreframes;
- struct framebuf_struct *fbuf;
-
- x1=1;
- y1=1;
- x2=x1+Coded_Picture_Width-1;
- y2=y1+Coded_Picture_Height-1;
-
- moreframes=1;
- task_nopreempt();
-
- while (moreframes) {
- fbuf = remove_frame();
-#ifndef NOGRX
- // grxlock();
-// grx_rect(10,10,10+5*fbuf->n,10+5*fbuf->n,FG);
- grx_putimage(x1, y1, x2, y2, fbuf->f);
- // grxunlock();
-#else
- cprintf("(%d %d)\n",fbuf->n, fbuf->f);
-#endif
- give_back_framebuf(fbuf);
- task_endcycle();
- }
-
- return NULL;
-}
-
-void gvideo_init(void)
-{
- SOFT_TASK_MODEL model;
- PID pid;
- int period,wcet;
-
-#ifndef NOGRX
- grx_init();
- grx_setmode(grx_getmode(800, 600, 16));
-#endif
-
- // draw_frame(0, 0, CodedImageWidth,CodedImageHeight);
-
- srand(7);
-
- period=1000000/20;
- wcet=20000;
-
- soft_task_default_model(model);
- soft_task_def_met(model,wcet);
- soft_task_def_wcet(model,wcet);
- soft_task_def_period(model,period);
- soft_task_def_periodic(model);
- soft_task_def_ctrl_jet(model);
-
- pid=task_create("Video",play,&model,NULL);
- if (pid!=-1) task_activate(pid);
-}
-
-
-
-
-
-
-
-
Index: start/mpeg2/gethdr.c
===================================================================
--- start/mpeg2/gethdr.c (revision 1087)
+++ start/mpeg2/gethdr.c (nonexistent)
@@ -1,1077 +0,0 @@
-/* gethdr.c, header decoding */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-#include <stdio.h>
-
-#include "config.h"
-#include "global.h"
-
-
-/* private prototypes */
-static void sequence_header _ANSI_ARGS_((void));
-static void group_of_pictures_header _ANSI_ARGS_((void));
-static void picture_header _ANSI_ARGS_((void));
-static void extension_and_user_data _ANSI_ARGS_((void));
-static void sequence_extension _ANSI_ARGS_((void));
-static void sequence_display_extension _ANSI_ARGS_((void));
-static void quant_matrix_extension _ANSI_ARGS_((void));
-static void sequence_scalable_extension _ANSI_ARGS_((void));
-static void picture_display_extension _ANSI_ARGS_((void));
-static void picture_coding_extension _ANSI_ARGS_((void));
-static void picture_spatial_scalable_extension _ANSI_ARGS_((void));
-static void picture_temporal_scalable_extension _ANSI_ARGS_((void));
-static int extra_bit_information _ANSI_ARGS_((void));
-static void copyright_extension _ANSI_ARGS_((void));
-static void user_data _ANSI_ARGS_((void));
-static void user_data _ANSI_ARGS_((void));
-
-
-
-
-/* introduced in September 1995 to assist spatial scalable decoding */
-static void Update_Temporal_Reference_Tacking_Data _ANSI_ARGS_((void));
-/* private variables */
-static int Temporal_Reference_Base = 0;
-static int True_Framenum_max = -1;
-static int Temporal_Reference_GOP_Reset = 0;
-
-#define RESERVED -1
-static double frame_rate_Table[16] =
-{
- 0.0,
- ((23.0*1000.0)/1001.0),
- 24.0,
- 25.0,
- ((30.0*1000.0)/1001.0),
- 30.0,
- 50.0,
- ((60.0*1000.0)/1001.0),
- 60.0,
-
- RESERVED,
- RESERVED,
- RESERVED,
- RESERVED,
- RESERVED,
- RESERVED,
- RESERVED
-};
-
-/*
- * decode headers from one input stream
- * until an End of Sequence or picture start code
- * is found
- */
-int Get_Hdr()
-{
- unsigned int code;
-
- for (;;)
- {
- /* look for next_start_code */
- next_start_code();
- code = Get_Bits32();
-
- switch (code)
- {
- case SEQUENCE_HEADER_CODE:
- sequence_header();
- break;
- case GROUP_START_CODE:
- group_of_pictures_header();
- break;
- case PICTURE_START_CODE:
- picture_header();
- return 1;
- break;
- case SEQUENCE_END_CODE:
- return 0;
- break;
- default:
- if (!Quiet_Flag)
- fprintf(stderr,"Unexpected next_start_code %08x (ignored)\n",code);
- break;
- }
- }
-}
-
-
-/* align to start of next next_start_code */
-
-void next_start_code()
-{
- /* byte align */
- Flush_Buffer(ld->Incnt&7);
- while (Show_Bits(24)!=0x01L)
- Flush_Buffer(8);
-}
-
-
-/* decode sequence header */
-
-static void sequence_header()
-{
- int i;
- int pos;
-
- pos = ld->Bitcnt;
- horizontal_size = Get_Bits(12);
- vertical_size = Get_Bits(12);
- aspect_ratio_information = Get_Bits(4);
- frame_rate_code = Get_Bits(4);
- bit_rate_value = Get_Bits(18);
- marker_bit("sequence_header()");
- vbv_buffer_size = Get_Bits(10);
- constrained_parameters_flag = Get_Bits(1);
-
- if((ld->load_intra_quantizer_matrix = Get_Bits(1)))
- {
- for (i=0; i<64; i++)
- ld->intra_quantizer_matrix[scan[ZIG_ZAG][i]] = Get_Bits(8);
- }
- else
- {
- for (i=0; i<64; i++)
- ld->intra_quantizer_matrix[i] = default_intra_quantizer_matrix[i];
- }
-
- if((ld->load_non_intra_quantizer_matrix = Get_Bits(1)))
- {
- for (i=0; i<64; i++)
- ld->non_intra_quantizer_matrix[scan[ZIG_ZAG][i]] = Get_Bits(8);
- }
- else
- {
- for (i=0; i<64; i++)
- ld->non_intra_quantizer_matrix[i] = 16;
- }
-
- /* copy luminance to chrominance matrices */
- for (i=0; i<64; i++)
- {
- ld->chroma_intra_quantizer_matrix[i] =
- ld->intra_quantizer_matrix[i];
-
- ld->chroma_non_intra_quantizer_matrix[i] =
- ld->non_intra_quantizer_matrix[i];
- }
-
-#ifdef VERBOSE
- if (Verbose_Flag > NO_LAYER)
- {
- printf("sequence header (byte %d)\n",(pos>>3)-4);
- if (Verbose_Flag > SEQUENCE_LAYER)
- {
- printf(" horizontal_size=%d\n",horizontal_size);
- printf(" vertical_size=%d\n",vertical_size);
- printf(" aspect_ratio_information=%d\n",aspect_ratio_information);
- printf(" frame_rate_code=%d",frame_rate_code);
- printf(" bit_rate_value=%d\n",bit_rate_value);
- printf(" vbv_buffer_size=%d\n",vbv_buffer_size);
- printf(" constrained_parameters_flag=%d\n",constrained_parameters_flag);
- printf(" load_intra_quantizer_matrix=%d\n",ld->load_intra_quantizer_matrix);
- printf(" load_non_intra_quantizer_matrix=%d\n",ld->load_non_intra_quantizer_matrix);
- }
- }
-#endif /* VERBOSE */
-
-#ifdef VERIFY
- verify_sequence_header++;
-#endif /* VERIFY */
-
- extension_and_user_data();
-}
-
-
-
-/* decode group of pictures header */
-/* ISO/IEC 13818-2 section 6.2.2.6 */
-static void group_of_pictures_header()
-{
- int pos;
-
- if (ld == &base)
- {
- Temporal_Reference_Base = True_Framenum_max + 1; /* *CH* */
- Temporal_Reference_GOP_Reset = 1;
- }
- pos = ld->Bitcnt;
- drop_flag = Get_Bits(1);
- hour = Get_Bits(5);
- minute = Get_Bits(6);
- marker_bit("group_of_pictures_header()");
- sec = Get_Bits(6);
- frame = Get_Bits(6);
- closed_gop = Get_Bits(1);
- broken_link = Get_Bits(1);
-
-#ifdef VERBOSE
- if (Verbose_Flag > NO_LAYER)
- {
- printf("group of pictures (byte %d)\n",(pos>>3)-4);
- if (Verbose_Flag > SEQUENCE_LAYER)
- {
- printf(" drop_flag=%d\n",drop_flag);
- printf(" timecode %d:%02d:%02d:%02d\n",hour,minute,sec,frame);
- printf(" closed_gop=%d\n",closed_gop);
- printf(" broken_link=%d\n",broken_link);
- }
- }
-#endif /* VERBOSE */
-
-#ifdef VERIFY
- verify_group_of_pictures_header++;
-#endif /* VERIFY */
-
- extension_and_user_data();
-
-}
-
-
-/* decode picture header */
-
-/* ISO/IEC 13818-2 section 6.2.3 */
-static void picture_header()
-{
- int pos;
- int Extra_Information_Byte_Count;
-
- /* unless later overwritten by picture_spatial_scalable_extension() */
- ld->pict_scal = 0;
-
- pos = ld->Bitcnt;
- temporal_reference = Get_Bits(10);
- picture_coding_type = Get_Bits(3);
- vbv_delay = Get_Bits(16);
-
- if (picture_coding_type==P_TYPE || picture_coding_type==B_TYPE)
- {
- full_pel_forward_vector = Get_Bits(1);
- forward_f_code = Get_Bits(3);
- }
- if (picture_coding_type==B_TYPE)
- {
- full_pel_backward_vector = Get_Bits(1);
- backward_f_code = Get_Bits(3);
- }
-
-#ifdef VERBOSE
- if (Verbose_Flag>NO_LAYER)
- {
- printf("picture header (byte %d)\n",(pos>>3)-4);
- if (Verbose_Flag>SEQUENCE_LAYER)
- {
- printf(" temporal_reference=%d\n",temporal_reference);
- printf(" picture_coding_type=%d\n",picture_coding_type);
- printf(" vbv_delay=%d\n",vbv_delay);
- if (picture_coding_type==P_TYPE || picture_coding_type==B_TYPE)
- {
- printf(" full_pel_forward_vector=%d\n",full_pel_forward_vector);
- printf(" forward_f_code =%d\n",forward_f_code);
- }
- if (picture_coding_type==B_TYPE)
- {
- printf(" full_pel_backward_vector=%d\n",full_pel_backward_vector);
- printf(" backward_f_code =%d\n",backward_f_code);
- }
- }
- }
-#endif /* VERBOSE */
-
-#ifdef VERIFY
- verify_picture_header++;
-#endif /* VERIFY */
-
- Extra_Information_Byte_Count =
- extra_bit_information();
-
- extension_and_user_data();
-
- /* update tracking information used to assist spatial scalability */
- Update_Temporal_Reference_Tacking_Data();
-}
-
-/* decode slice header */
-
-/* ISO/IEC 13818-2 section 6.2.4 */
-int slice_header()
-{
- int slice_vertical_position_extension;
- int quantizer_scale_code;
- int pos;
- int slice_picture_id_enable = 0;
- int slice_picture_id = 0;
- int extra_information_slice = 0;
-
- pos = ld->Bitcnt;
-
- slice_vertical_position_extension =
- (ld->MPEG2_Flag && vertical_size>2800) ? Get_Bits(3) : 0;
-
- if (ld->scalable_mode==SC_DP)
- ld->priority_breakpoint = Get_Bits(7);
-
- quantizer_scale_code = Get_Bits(5);
- ld->quantizer_scale =
- ld->MPEG2_Flag ? (ld->q_scale_type ? Non_Linear_quantizer_scale[quantizer_scale_code] : quantizer_scale_code<<1) : quantizer_scale_code;
-
- /* slice_id introduced in March 1995 as part of the video corridendum
- (after the IS was drafted in November 1994) */
- if (Get_Bits(1))
- {
- ld->intra_slice = Get_Bits(1);
-
- slice_picture_id_enable = Get_Bits(1);
- slice_picture_id = Get_Bits(6);
-
- extra_information_slice = extra_bit_information();
- }
- else
- ld->intra_slice = 0;
-
-#ifdef VERBOSE
- if (Verbose_Flag>PICTURE_LAYER)
- {
- printf("slice header (byte %d)\n",(pos>>3)-4);
- if (Verbose_Flag>SLICE_LAYER)
- {
- if (ld->MPEG2_Flag && vertical_size>2800)
- printf(" slice_vertical_position_extension=%d\n",slice_vertical_position_extension);
-
- if (ld->scalable_mode==SC_DP)
- printf(" priority_breakpoint=%d\n",ld->priority_breakpoint);
-
- printf(" quantizer_scale_code=%d\n",quantizer_scale_code);
-
- printf(" slice_picture_id_enable = %d\n", slice_picture_id_enable);
-
- if(slice_picture_id_enable)
- printf(" slice_picture_id = %d\n", slice_picture_id);
-
- }
- }
-#endif /* VERBOSE */
-
-#ifdef VERIFY
- verify_slice_header++;
-#endif /* VERIFY */
-
-
- return slice_vertical_position_extension;
-}
-
-
-/* decode extension and user data */
-/* ISO/IEC 13818-2 section 6.2.2.2 */
-static void extension_and_user_data()
-{
- int code,ext_ID;
-
- next_start_code();
-
- while ((code = Show_Bits(32))==EXTENSION_START_CODE || code==USER_DATA_START_CODE)
- {
- if (code==EXTENSION_START_CODE)
- {
- Flush_Buffer32();
- ext_ID = Get_Bits(4);
- switch (ext_ID)
- {
- case SEQUENCE_EXTENSION_ID:
- sequence_extension();
- break;
- case SEQUENCE_DISPLAY_EXTENSION_ID:
- sequence_display_extension();
- break;
- case QUANT_MATRIX_EXTENSION_ID:
- quant_matrix_extension();
- break;
- case SEQUENCE_SCALABLE_EXTENSION_ID:
- sequence_scalable_extension();
- break;
- case PICTURE_DISPLAY_EXTENSION_ID:
- picture_display_extension();
- break;
- case PICTURE_CODING_EXTENSION_ID:
- picture_coding_extension();
- break;
- case PICTURE_SPATIAL_SCALABLE_EXTENSION_ID:
- picture_spatial_scalable_extension();
- break;
- case PICTURE_TEMPORAL_SCALABLE_EXTENSION_ID:
- picture_temporal_scalable_extension();
- break;
- case COPYRIGHT_EXTENSION_ID:
- copyright_extension();
- break;
- default:
- fprintf(stderr,"reserved extension start code ID %d\n",ext_ID);
- break;
- }
- next_start_code();
- }
- else
- {
-#ifdef VERBOSE
- if (Verbose_Flag>NO_LAYER)
- printf("user data\n");
-#endif /* VERBOSE */
- Flush_Buffer32();
- user_data();
- }
- }
-}
-
-
-/* decode sequence extension */
-
-/* ISO/IEC 13818-2 section 6.2.2.3 */
-static void sequence_extension()
-{
- int horizontal_size_extension;
- int vertical_size_extension;
- int bit_rate_extension;
- int vbv_buffer_size_extension;
- int pos;
-
- /* derive bit position for trace */
-#ifdef VERBOSE
- pos = ld->Bitcnt;
-#endif
-
- ld->MPEG2_Flag = 1;
-
- ld->scalable_mode = SC_NONE; /* unless overwritten by sequence_scalable_extension() */
- layer_id = 0; /* unless overwritten by sequence_scalable_extension() */
-
- profile_and_level_indication = Get_Bits(8);
- progressive_sequence = Get_Bits(1);
- chroma_format = Get_Bits(2);
- horizontal_size_extension = Get_Bits(2);
- vertical_size_extension = Get_Bits(2);
- bit_rate_extension = Get_Bits(12);
- marker_bit("sequence_extension");
- vbv_buffer_size_extension = Get_Bits(8);
- low_delay = Get_Bits(1);
- frame_rate_extension_n = Get_Bits(2);
- frame_rate_extension_d = Get_Bits(5);
-
- frame_rate = frame_rate_Table[frame_rate_code] *
- ((frame_rate_extension_n+1)/(frame_rate_extension_d+1));
-
- /* special case for 422 profile & level must be made */
- if((profile_and_level_indication>>7) & 1)
- { /* escape bit of profile_and_level_indication set */
-
- /* 4:2:2 Profile @ Main Level */
- if((profile_and_level_indication&15)==5)
- {
- profile = PROFILE_422;
- level = MAIN_LEVEL;
- }
- }
- else
- {
- profile = profile_and_level_indication >> 4; /* Profile is upper nibble */
- level = profile_and_level_indication & 0xF; /* Level is lower nibble */
- }
-
-
- horizontal_size = (horizontal_size_extension<<12) | (horizontal_size&0x0fff);
- vertical_size = (vertical_size_extension<<12) | (vertical_size&0x0fff);
-
-
- /* ISO/IEC 13818-2 does not define bit_rate_value to be composed of
- * both the original bit_rate_value parsed in sequence_header() and
- * the optional bit_rate_extension in sequence_extension_header().
- * However, we use it for bitstream verification purposes.
- */
-
- bit_rate_value += (bit_rate_extension << 18);
- bit_rate = ((double) bit_rate_value) * 400.0;
- vbv_buffer_size += (vbv_buffer_size_extension << 10);
-
-#ifdef VERBOSE
- if (Verbose_Flag>NO_LAYER)
- {
- printf("sequence extension (byte %d)\n",(pos>>3)-4);
-
- if (Verbose_Flag>SEQUENCE_LAYER)
- {
- printf(" profile_and_level_indication=%d\n",profile_and_level_indication);
-
- if (profile_and_level_indication<128)
- {
- printf(" profile=%d, level=%d\n",profile,level);
- }
-
- printf(" progressive_sequence=%d\n",progressive_sequence);
- printf(" chroma_format=%d\n",chroma_format);
- printf(" horizontal_size_extension=%d\n",horizontal_size_extension);
- printf(" vertical_size_extension=%d\n",vertical_size_extension);
- printf(" bit_rate_extension=%d\n",bit_rate_extension);
- printf(" vbv_buffer_size_extension=%d\n",vbv_buffer_size_extension);
- printf(" low_delay=%d\n",low_delay);
- printf(" frame_rate_extension_n=%d\n",frame_rate_extension_n);
- printf(" frame_rate_extension_d=%d\n",frame_rate_extension_d);
- }
- }
-#endif /* VERBOSE */
-
-#ifdef VERIFY
- verify_sequence_extension++;
-#endif /* VERIFY */
-
-
-}
-
-
-/* decode sequence display extension */
-
-static void sequence_display_extension()
-{
- int pos;
-
- pos = ld->Bitcnt;
- video_format = Get_Bits(3);
- color_description = Get_Bits(1);
-
- if (color_description)
- {
- color_primaries = Get_Bits(8);
- transfer_characteristics = Get_Bits(8);
- matrix_coefficients = Get_Bits(8);
- }
-
- display_horizontal_size = Get_Bits(14);
- marker_bit("sequence_display_extension");
- display_vertical_size = Get_Bits(14);
-
-#ifdef VERBOSE
- if (Verbose_Flag>NO_LAYER)
- {
- printf("sequence display extension (byte %d)\n",(pos>>3)-4);
- if (Verbose_Flag>SEQUENCE_LAYER)
- {
-
- printf(" video_format=%d\n",video_format);
- printf(" color_description=%d\n",color_description);
-
- if (color_description)
- {
- printf(" color_primaries=%d\n",color_primaries);
- printf(" transfer_characteristics=%d\n",transfer_characteristics);
- printf(" matrix_coefficients=%d\n",matrix_coefficients);
- }
- printf(" display_horizontal_size=%d\n",display_horizontal_size);
- printf(" display_vertical_size=%d\n",display_vertical_size);
- }
- }
-#endif /* VERBOSE */
-
-#ifdef VERIFY
- verify_sequence_display_extension++;
-#endif /* VERIFY */
-
-}
-
-
-/* decode quant matrix entension */
-/* ISO/IEC 13818-2 section 6.2.3.2 */
-static void quant_matrix_extension()
-{
- int i;
- int pos;
-
- pos = ld->Bitcnt;
-
- if((ld->load_intra_quantizer_matrix = Get_Bits(1)))
- {
- for (i=0; i<64; i++)
- {
- ld->chroma_intra_quantizer_matrix[scan[ZIG_ZAG][i]]
- = ld->intra_quantizer_matrix[scan[ZIG_ZAG][i]]
- = Get_Bits(8);
- }
- }
-
- if((ld->load_non_intra_quantizer_matrix = Get_Bits(1)))
- {
- for (i=0; i<64; i++)
- {
- ld->chroma_non_intra_quantizer_matrix[scan[ZIG_ZAG][i]]
- = ld->non_intra_quantizer_matrix[scan[ZIG_ZAG][i]]
- = Get_Bits(8);
- }
- }
-
- if((ld->load_chroma_intra_quantizer_matrix = Get_Bits(1)))
- {
- for (i=0; i<64; i++)
- ld->chroma_intra_quantizer_matrix[scan[ZIG_ZAG][i]] = Get_Bits(8);
- }
-
- if((ld->load_chroma_non_intra_quantizer_matrix = Get_Bits(1)))
- {
- for (i=0; i<64; i++)
- ld->chroma_non_intra_quantizer_matrix[scan[ZIG_ZAG][i]] = Get_Bits(8);
- }
-
-#ifdef VERBOSE
- if (Verbose_Flag>NO_LAYER)
- {
- printf("quant matrix extension (byte %d)\n",(pos>>3)-4);
- printf(" load_intra_quantizer_matrix=%d\n",
- ld->load_intra_quantizer_matrix);
- printf(" load_non_intra_quantizer_matrix=%d\n",
- ld->load_non_intra_quantizer_matrix);
- printf(" load_chroma_intra_quantizer_matrix=%d\n",
- ld->load_chroma_intra_quantizer_matrix);
- printf(" load_chroma_non_intra_quantizer_matrix=%d\n",
- ld->load_chroma_non_intra_quantizer_matrix);
- }
-#endif /* VERBOSE */
-
-#ifdef VERIFY
- verify_quant_matrix_extension++;
-#endif /* VERIFY */
-
-}
-
-
-/* decode sequence scalable extension */
-/* ISO/IEC 13818-2 section 6.2.2.5 */
-static void sequence_scalable_extension()
-{
- int pos;
-
- pos = ld->Bitcnt;
-
- /* values (without the +1 offset) of scalable_mode are defined in
- Table 6-10 of ISO/IEC 13818-2 */
- ld->scalable_mode = Get_Bits(2) + 1; /* add 1 to make SC_DP != SC_NONE */
-
- layer_id = Get_Bits(4);
-
- if (ld->scalable_mode==SC_SPAT)
- {
- lower_layer_prediction_horizontal_size = Get_Bits(14);
- marker_bit("sequence_scalable_extension()");
- lower_layer_prediction_vertical_size = Get_Bits(14);
- horizontal_subsampling_factor_m = Get_Bits(5);
- horizontal_subsampling_factor_n = Get_Bits(5);
- vertical_subsampling_factor_m = Get_Bits(5);
- vertical_subsampling_factor_n = Get_Bits(5);
- }
-
- if (ld->scalable_mode==SC_TEMP)
- Error("temporal scalability not implemented\n");
-
-#ifdef VERBOSE
- if (Verbose_Flag>NO_LAYER)
- {
- printf("sequence scalable extension (byte %d)\n",(pos>>3)-4);
- if (Verbose_Flag>SEQUENCE_LAYER)
- {
- printf(" scalable_mode=%d\n",ld->scalable_mode-1);
- printf(" layer_id=%d\n",layer_id);
- if (ld->scalable_mode==SC_SPAT)
- {
- printf(" lower_layer_prediction_horiontal_size=%d\n",
- lower_layer_prediction_horizontal_size);
- printf(" lower_layer_prediction_vertical_size=%d\n",
- lower_layer_prediction_vertical_size);
- printf(" horizontal_subsampling_factor_m=%d\n",
- horizontal_subsampling_factor_m);
- printf(" horizontal_subsampling_factor_n=%d\n",
- horizontal_subsampling_factor_n);
- printf(" vertical_subsampling_factor_m=%d\n",
- vertical_subsampling_factor_m);
- printf(" vertical_subsampling_factor_n=%d\n",
- vertical_subsampling_factor_n);
- }
- }
- }
-#endif /* VERBOSE */
-
-#ifdef VERIFY
- verify_sequence_scalable_extension++;
-#endif /* VERIFY */
-
-}
-
-
-/* decode picture display extension */
-/* ISO/IEC 13818-2 section 6.2.3.3. */
-static void picture_display_extension()
-{
- int i;
- int number_of_frame_center_offsets;
- int pos;
-
- pos = ld->Bitcnt;
- /* based on ISO/IEC 13818-2 section 6.3.12
- (November 1994) Picture display extensions */
-
- /* derive number_of_frame_center_offsets */
- if(progressive_sequence)
- {
- if(repeat_first_field)
- {
- if(top_field_first)
- number_of_frame_center_offsets = 3;
- else
- number_of_frame_center_offsets = 2;
- }
- else
- {
- number_of_frame_center_offsets = 1;
- }
- }
- else
- {
- if(picture_structure!=FRAME_PICTURE)
- {
- number_of_frame_center_offsets = 1;
- }
- else
- {
- if(repeat_first_field)
- number_of_frame_center_offsets = 3;
- else
- number_of_frame_center_offsets = 2;
- }
- }
-
-
- /* now parse */
- for (i=0; i<number_of_frame_center_offsets; i++)
- {
- frame_center_horizontal_offset[i] = Get_Bits(16);
- marker_bit("picture_display_extension, first marker bit");
-
- frame_center_vertical_offset[i] = Get_Bits(16);
- marker_bit("picture_display_extension, second marker bit");
- }
-
-#ifdef VERBOSE
- if (Verbose_Flag>NO_LAYER)
- {
- printf("picture display extension (byte %d)\n",(pos>>3)-4);
- if (Verbose_Flag>SEQUENCE_LAYER)
- {
-
- for (i=0; i<number_of_frame_center_offsets; i++)
- {
- printf(" frame_center_horizontal_offset[%d]=%d\n",i,
- frame_center_horizontal_offset[i]);
- printf(" frame_center_vertical_offset[%d]=%d\n",i,
- frame_center_vertical_offset[i]);
- }
- }
- }
-#endif /* VERBOSE */
-
-#ifdef VERIFY
- verify_picture_display_extension++;
-#endif /* VERIFY */
-
-}
-
-
-/* decode picture coding extension */
-static void picture_coding_extension()
-{
- int pos;
-
- pos = ld->Bitcnt;
-
- f_code[0][0] = Get_Bits(4);
- f_code[0][1] = Get_Bits(4);
- f_code[1][0] = Get_Bits(4);
- f_code[1][1] = Get_Bits(4);
-
- intra_dc_precision = Get_Bits(2);
- picture_structure = Get_Bits(2);
- top_field_first = Get_Bits(1);
- frame_pred_frame_dct = Get_Bits(1);
- concealment_motion_vectors = Get_Bits(1);
- ld->q_scale_type = Get_Bits(1);
- intra_vlc_format = Get_Bits(1);
- ld->alternate_scan = Get_Bits(1);
- repeat_first_field = Get_Bits(1);
- chroma_420_type = Get_Bits(1);
- progressive_frame = Get_Bits(1);
- composite_display_flag = Get_Bits(1);
-
- if (composite_display_flag)
- {
- v_axis = Get_Bits(1);
- field_sequence = Get_Bits(3);
- sub_carrier = Get_Bits(1);
- burst_amplitude = Get_Bits(7);
- sub_carrier_phase = Get_Bits(8);
- }
-
-#ifdef VERBOSE
- if (Verbose_Flag>NO_LAYER)
- {
- printf("picture coding extension (byte %d)\n",(pos>>3)-4);
- if (Verbose_Flag>SEQUENCE_LAYER)
- {
- printf(" forward horizontal f_code=%d\n", f_code[0][0]);
- printf(" forward vertical f_code=%d\n", f_code[0][1]);
- printf(" backward horizontal f_code=%d\n", f_code[1][0]);
- printf(" backward_vertical f_code=%d\n", f_code[1][1]);
- printf(" intra_dc_precision=%d\n",intra_dc_precision);
- printf(" picture_structure=%d\n",picture_structure);
- printf(" top_field_first=%d\n",top_field_first);
- printf(" frame_pred_frame_dct=%d\n",frame_pred_frame_dct);
- printf(" concealment_motion_vectors=%d\n",concealment_motion_vectors);
- printf(" q_scale_type=%d\n",ld->q_scale_type);
- printf(" intra_vlc_format=%d\n",intra_vlc_format);
- printf(" alternate_scan=%d\n",ld->alternate_scan);
- printf(" repeat_first_field=%d\n",repeat_first_field);
- printf(" chroma_420_type=%d\n",chroma_420_type);
- printf(" progressive_frame=%d\n",progressive_frame);
- printf(" composite_display_flag=%d\n",composite_display_flag);
-
- if (composite_display_flag)
- {
- printf(" v_axis=%d\n",v_axis);
- printf(" field_sequence=%d\n",field_sequence);
- printf(" sub_carrier=%d\n",sub_carrier);
- printf(" burst_amplitude=%d\n",burst_amplitude);
- printf(" sub_carrier_phase=%d\n",sub_carrier_phase);
- }
- }
- }
-#endif /* VERBOSE */
-
-#ifdef VERIFY
- verify_picture_coding_extension++;
-#endif /* VERIFY */
-}
-
-
-/* decode picture spatial scalable extension */
-/* ISO/IEC 13818-2 section 6.2.3.5. */
-static void picture_spatial_scalable_extension()
-{
- int pos;
-
- pos = ld->Bitcnt;
-
- ld->pict_scal = 1; /* use spatial scalability in this picture */
-
- lower_layer_temporal_reference = Get_Bits(10);
- marker_bit("picture_spatial_scalable_extension(), first marker bit");
- lower_layer_horizontal_offset = Get_Bits(15);
- if (lower_layer_horizontal_offset>=16384)
- lower_layer_horizontal_offset-= 32768;
- marker_bit("picture_spatial_scalable_extension(), second marker bit");
- lower_layer_vertical_offset = Get_Bits(15);
- if (lower_layer_vertical_offset>=16384)
- lower_layer_vertical_offset-= 32768;
- spatial_temporal_weight_code_table_index = Get_Bits(2);
- lower_layer_progressive_frame = Get_Bits(1);
- lower_layer_deinterlaced_field_select = Get_Bits(1);
-
-#ifdef VERBOSE
- if (Verbose_Flag>NO_LAYER)
- {
- printf("picture spatial scalable extension (byte %d)\n",(pos>>3)-4);
- if (Verbose_Flag>SEQUENCE_LAYER)
- {
- printf(" lower_layer_temporal_reference=%d\n",lower_layer_temporal_reference);
- printf(" lower_layer_horizontal_offset=%d\n",lower_layer_horizontal_offset);
- printf(" lower_layer_vertical_offset=%d\n",lower_layer_vertical_offset);
- printf(" spatial_temporal_weight_code_table_index=%d\n",
- spatial_temporal_weight_code_table_index);
- printf(" lower_layer_progressive_frame=%d\n",lower_layer_progressive_frame);
- printf(" lower_layer_deinterlaced_field_select=%d\n",lower_layer_deinterlaced_field_select);
- }
- }
-#endif /* VERBOSE */
-
-#ifdef VERIFY
- verify_picture_spatial_scalable_extension++;
-#endif /* VERIFY */
-
-}
-
-
-/* decode picture temporal scalable extension
- *
- * not implemented
- */
-/* ISO/IEC 13818-2 section 6.2.3.4. */
-static void picture_temporal_scalable_extension()
-{
- Error("temporal scalability not supported\n");
-
-#ifdef VERIFY
- verify_picture_temporal_scalable_extension++;
-#endif /* VERIFY */
-}
-
-
-/* decode extra bit information */
-/* ISO/IEC 13818-2 section 6.2.3.4. */
-static int extra_bit_information()
-{
- int Byte_Count = 0;
-
- while (Get_Bits1())
- {
- Flush_Buffer(8);
- Byte_Count++;
- }
-
- return(Byte_Count);
-}
-
-
-
-/* ISO/IEC 13818-2 section 5.3 */
-/* Purpose: this function is mainly designed to aid in bitstream conformance
- testing. A simple Flush_Buffer(1) would do */
-void marker_bit(text)
-char *text;
-{
- int marker;
-
- marker = Get_Bits(1);
-
-#ifdef VERIFY
- if(!marker)
- printf("ERROR: %s--marker_bit set to 0",text);
-#endif
-}
-
-
-/* ISO/IEC 13818-2 sections 6.3.4.1 and 6.2.2.2.2 */
-static void user_data()
-{
- /* skip ahead to the next start code */
- next_start_code();
-}
-
-
-
-/* Copyright extension */
-/* ISO/IEC 13818-2 section 6.2.3.6. */
-/* (header added in November, 1994 to the IS document) */
-
-
-static void copyright_extension()
-{
- int pos;
- int reserved_data;
-
- pos = ld->Bitcnt;
-
-
- copyright_flag = Get_Bits(1);
- copyright_identifier = Get_Bits(8);
- original_or_copy = Get_Bits(1);
-
- /* reserved */
- reserved_data = Get_Bits(7);
-
- marker_bit("copyright_extension(), first marker bit");
- copyright_number_1 = Get_Bits(20);
- marker_bit("copyright_extension(), second marker bit");
- copyright_number_2 = Get_Bits(22);
- marker_bit("copyright_extension(), third marker bit");
- copyright_number_3 = Get_Bits(22);
-
- if(Verbose_Flag>NO_LAYER)
- {
- printf("copyright_extension (byte %d)\n",(pos>>3)-4);
- if (Verbose_Flag>SEQUENCE_LAYER)
- {
- printf(" copyright_flag =%d\n",copyright_flag);
-
- printf(" copyright_identifier=%d\n",copyright_identifier);
-
- printf(" original_or_copy = %d (original=1, copy=0)\n",
- original_or_copy);
-
- printf(" copyright_number_1=%d\n",copyright_number_1);
- printf(" copyright_number_2=%d\n",copyright_number_2);
- printf(" copyright_number_3=%d\n",copyright_number_3);
- }
- }
-
-#ifdef VERIFY
- verify_copyright_extension++;
-#endif /* VERIFY */
-}
-
-
-
-/* introduced in September 1995 to assist Spatial Scalability */
-static void Update_Temporal_Reference_Tacking_Data()
-{
- static int temporal_reference_wrap = 0;
- static int temporal_reference_old = 0;
-
- if (ld == &base) /* *CH* */
- {
- if (picture_coding_type!=B_TYPE && temporal_reference!=temporal_reference_old)
- /* check first field of */
- {
- /* non-B-frame */
- if (temporal_reference_wrap)
- {/* wrap occured at previous I- or P-frame */
- /* now all intervening B-frames which could
- still have high temporal_reference values are done */
- Temporal_Reference_Base += 1024;
- temporal_reference_wrap = 0;
- }
-
- /* distinguish from a reset */
- if (temporal_reference<temporal_reference_old && !Temporal_Reference_GOP_Reset)
- temporal_reference_wrap = 1; /* we must have just passed a GOP-Header! */
-
- temporal_reference_old = temporal_reference;
- Temporal_Reference_GOP_Reset = 0;
- }
-
- True_Framenum = Temporal_Reference_Base + temporal_reference;
-
- /* temporary wrap of TR at 1024 for M frames */
- if (temporal_reference_wrap && temporal_reference <= temporal_reference_old)
- True_Framenum += 1024;
-
- True_Framenum_max = (True_Framenum > True_Framenum_max) ?
- True_Framenum : True_Framenum_max;
- }
-}
Index: start/mpeg2/idctref.c
===================================================================
--- start/mpeg2/idctref.c (revision 1087)
+++ start/mpeg2/idctref.c (nonexistent)
@@ -1,108 +0,0 @@
-/* Reference_IDCT.c, Inverse Discrete Fourier Transform, double precision */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-/* Perform IEEE 1180 reference (64-bit floating point, separable 8x1
- * direct matrix multiply) Inverse Discrete Cosine Transform
-*/
-
-
-/* Here we use math.h to generate constants. Compiler results may
- vary a little */
-
-#include <math.h>
-
-#include "config.h"
-
-#ifndef PI
-# ifdef M_PI
-# define PI M_PI
-# else
-# define PI 3.14159265358979323846
-# endif
-#endif
-
-/* global declarations */
-void Initialize_Fast_IDCTref _ANSI_ARGS_((void));
-void Reference_IDCT _ANSI_ARGS_((short *block));
-
-/* private data */
-
-/* cosine transform matrix for 8x1 IDCT */
-static double c[8][8];
-
-/* initialize DCT coefficient matrix */
-
-void Initialize_Reference_IDCT()
-{
- int freq, time;
- double scale;
-
- for (freq=0; freq < 8; freq++)
- {
- scale = (freq == 0) ? sqrt(0.125) : 0.5;
- for (time=0; time<8; time++)
- c[freq][time] = scale*cos((PI/8.0)*freq*(time + 0.5));
- }
-}
-
-/* perform IDCT matrix multiply for 8x8 coefficient block */
-
-void Reference_IDCT(block)
-short *block;
-{
- int i, j, k, v;
- double partial_product;
- double tmp[64];
-
- for (i=0; i<8; i++)
- for (j=0; j<8; j++)
- {
- partial_product = 0.0;
-
- for (k=0; k<8; k++)
- partial_product+= c[k][j]*block[8*i+k];
-
- tmp[8*i+j] = partial_product;
- }
-
- /* Transpose operation is integrated into address mapping by switching
- loop order of i and j */
-
- for (j=0; j<8; j++)
- for (i=0; i<8; i++)
- {
- partial_product = 0.0;
-
- for (k=0; k<8; k++)
- partial_product+= c[k][i]*tmp[8*k+j];
-
- v = (int) floor(partial_product+0.5);
- block[8*i+j] = (v<-256) ? -256 : ((v>255) ? 255 : v);
- }
-}
Index: start/mpeg2/spatial.doc
===================================================================
--- start/mpeg2/spatial.doc (revision 1087)
+++ start/mpeg2/spatial.doc (nonexistent)
@@ -1,154 +0,0 @@
-The following changes have been made to debug spatial scalability:
-
-gethdr.c
---------
-
-Temporal_reference is used to compute the frame number of each frame,
-named true_framenum. The periodic reset at each GOP header as well as
-the wrap of temporal_reference at 1024 cause a base value
-temp_ref_base to be incremented accordingly.
-
-spatscal.c
-----------
-
-getspatref()
-
-A potential problem: Variable char fname[32] was dimensioned
-statically and too small.
-
-true_framenum is used instead of lower_layer_temporal_reference to
-determine the lower layer frame to be read for spatial prediction.
-
-The verification of lower_layer_temporal_reference is not possible
-since the temporal reference values that have been encoded into the
-base layer bitstream are not available to the enhancement layer
-decoder.
-
-Since there is no decoder timing information available, the rules on
-which frames can legally be used as spatial prediction frames cannot
-be checked.
-
-Lower layer frames are read field-wise or frame-wise, depending on the
-lower_layer_progressive_frame flag. Consistency between layers is
-checked since the file format for frame and field pictures differs.
-
-Note that the base layer decoder must not use the -f option to enforce
-frame-wise storage.
-
-Note further that only yuv image format (option -o0) is supported as
-input format.
-
-spatpred()
-
-The code for the various combinations of llprog_frame, llfieldsel and
-prog_frame has been completed and verified with the tceh_conf23
-bitstream that uses all permissive combinations.
-
-
-getpic.c
---------
-
-A small bug when storing an I- or P-frame: The prog_frame flag that
-the decoder knows when storing the oldrefframe belongs to the current
-refframe. Therefore the old value of the flag needs to be memorized.
-
-
-store.c
--------
-
-A potential problem: the filename variables char outname[32],
-tmpname[32] are statically dimensioned and quite small.
-
-
-The concept of time in this video decoder software
---------------------------------------------------
-
-When decoding a non-scalable bitstream, the frame number (i.e.
-temporal position) of the current I- or P-frame can be derived
-implicitly from the number of preceding B-frames after they have been
-decoded. Therefore the temporal_reference entry in the picture header
-is somewhat redundant and does not necessarily have to be evaluated in
-the decoding process.
-
-Decoding of the enhancement layer of a spatial scalable hierarchy,
-however, requires to know the temporal position of each frame at the
-instant when it is decoded, since data from a lower layer reference
-frame has to be incorporated.
-
-In the architecture of this video-only decoder decoding of a spatial
-scalable hierarchy of bitstreams is done by calling mpeg2decode once
-for the base layer bitstream and a second time for the enhancement
-layer bitstream, indicating where the decoded base layer frames can be
-found (option -s<filename>).
-
-Here the concept of time is only present in the form of frame numbers.
-Therefore spatial scalable bitstream hierarchies can only be handled
-under the assumption that base and enhancement layer bitstreams are
-decoded to image sequences where corresponding images of both layers
-have identical frame numbers.
-
-More specifically this means that base and enhancement layer
-bitstreams must contain video with the same frame rate. Furthermore
-only the temporally coincident frame of the base layer can be accessed
-for spatial prediction by the enhancement layer decoder, since it is
-not possible to resolve unambiguously the lower_layer_temporal_reference
-which is meant to further specify the lower layer reference frame.
-
-======================== SPATIAL.DOC ========================0
-
-Decoding a spatial scalable hierarchy of bitstreams
----------------------------------------------------
-
-With this video-only decoder decoding of a spatial scalable hierarchy
-of bitstreams is done by calling mpeg2decode once for the base layer
-bitstream and a second time for the enhancement layer bitstream,
-indicating where the decoded base layer frames can be found
-(using option -s and supplying <spatial base filename>).
-
-mpeg2decode -r -o0 base.mpg base%d%c
-mpeg2decode -r -o0 -f -s base%d%c enh.mpg enh%d
-
-Note that the base layer decoder must not use the -f option to enforce
-frame-wise storage.
-
-Note further that only yuv image format (option -o0) is supported as
-input format.
-
-
-Timing / layer synchronisation in this video decoder software
--------------------------------------------------------------
-
-When decoding a non-scalable bitstream, the frame number (i.e.
-temporal position) of the current I- or P-frame can be derived
-implicitly from the number of preceding B-frames after they have been
-decoded. Therefore the temporal_reference entry in the picture header
-is somewhat redundant and does not necessarily have to be evaluated in
-the decoding process.
-
-Decoding of the enhancement layer of a spatial scalable hierarchy,
-however, requires to know the temporal position of each frame at the
-instant when it is decoded, since data from a lower layer reference
-frame has to be incorporated.
-
-The concept of time is only present in the form of frame numbers.
-Therefore spatial scalable bitstream hierarchies can only be handled
-under the assumption that base and enhancement layer bitstreams are
-decoded to image sequences where corresponding images of both layers
-have identical frame numbers.
-
-More specifically this means that base and enhancement layer
-bitstreams must contain video with the same frame rate. Furthermore
-only the temporally coincident frame of the base layer can be accessed
-for spatial prediction by the enhancement layer decoder, since it is
-not possible to resolve unambiguously the lower_layer_temporal_reference
-which is meant to further specify the lower layer reference frame.
-
-Lower layer frames are read field-wise or frame-wise, depending on the
-lower_layer_progressive_frame flag. Consistency between layers in this
-respect is checked since the file format for frame and field pictures
-differs.
-
-
-
-
-
Index: start/base/cabs.dat
===================================================================
--- start/base/cabs.dat (revision 1087)
+++ start/base/cabs.dat (nonexistent)
@@ -1,11 +0,0 @@
-----------------------------------------------------
-system tick (ms): 1
-----------------------------------------------------
-
-task periods (ticks)
-----------------------------------------------------
-producer 1: 200 consumer 1: 400
-producer 2: 100 consumer 2: 400
-producer 3: 300 consumer 3: 150
-producer 4: 800 consumer 4: 200
-----------------------------------------------------
Index: start/base/initfile.c
===================================================================
--- start/base/initfile.c (revision 1087)
+++ start/base/initfile.c (nonexistent)
@@ -1,120 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- ------------
- CVS : $Id: initfile.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-
- System initialization file
-
- This file contains the 2 functions needed to initialize the system.
-
- These functions register the following levels:
-
- an EDF (Earliest Deadline First) level
- a RR (Round Robin) level
- a CBS (Costant Bandwidth Server) level
- a Dummy level
-
- It can accept these task models:
-
- HARD_TASK_MODEL (wcet+mit) at level 0
- SOFT_TASK_MODEL (met, period) at level 1
- NRT_TASK_MODEL at level 2
-
- This file is similar to the configuration of kernel/init/hartik3.c
-
- TICK is set to 0 (one-shot timer is used)
-*/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-#include "modules/rr.h"
-#include "modules/dummy.h"
-
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "modules/cabs.h"
-
-#include "drivers/keyb.h"
-
-
-/*+ sysyem tick in us +*/
-#define TICK 0
-
-/*+ RR tick in us +*/
-#define RRTICK 10000
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- EDF_register_level(EDF_ENABLE_ALL);
- CBS_register_level(CBS_ENABLE_ALL, 0);
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- dummy_register_level();
-
- SEM_register_module();
-
- CABS_register_module();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- KEYB_PARMS kparms = BASE_KEYB;
-
- HARTPORT_init();
-
- keyb_def_ctrlC(kparms, NULL);
- keyb_def_map(kparms,itaMap);
- KEYB_init(&kparms);
-
- __call_main__(mb);
-
- return (void *)0;
-}
-
Index: start/base/cabs.c
===================================================================
--- start/base/cabs.c (revision 1087)
+++ start/base/cabs.c (nonexistent)
@@ -1,323 +0,0 @@
-/*--------------------------------------------------------------*/
-/* TEST ON CABS */
-/*--------------------------------------------------------------*/
-
-#include <kernel/kern.h>
-#include <modules/cabs.h>
-#include <drivers/glib.h>
-#include <drivers/keyb.h>
-#include <string.h>
-
-#define NCAB 4 /* max number of CABs */
-#define NCAR 26 /* generated characters */
-
-#define YP 32 /* level of arrows */
-#define R 20 /* task radius */
-#define YY (YP+R+32) /* level of writing */
-#define DELTA (2*R+72) /* total channel hight */
-#define X1 120 /* start column for P1 */
-#define X2 360 /* start column for P2 */
-
-#define XP1 (X1+64) /* X position of task 1 */
-#define XP2 (X2+64) /* X position of task 2 */
-#define XC (XP1+96) /* X position of CAB */
-#define L 52 /* CAB rectangle length */
-
-void my_exit(KEY_EVT *k);
-void draw_channel(int i);
-void create_channel(int i);
-void get_data();
-
-TASK producer(void *arg);
-TASK consumer(void *arg);
-
-char *cname[NCAB] = {"cab1", "cab2", "cab3", "cab4"};
-char *pname1[NCAB] = {"wr1", "wr2", "wr3", "wr4"};
-char *pname2[NCAB] = {"rd1", "rd2", "rd3", "rd4"};
-
-CAB cid[NCAB]; /* CAB identifiers */
-PID p1[NCAB], p2[NCAB]; /* task identifiers */
-
-/* Task Periods */
-TIME t1[NCAB] = {200000, 100000, 300000, 800000};
-TIME t2[NCAB] = {400000, 400000, 150000, 200000};
-
-/* Task WCETS */
-TIME w1[NCAB] = {10000, 10000, 10000, 10000};
-TIME w2[NCAB] = {10000, 10000, 10000, 10000};
-
-
-/****************************************************************/
-
-/* This is the exception handler. It is called when an exception
- is raised.
- It exits from the graphical mode, then it prints a message and
- shutdown the kernel using sys_abort()
-*/
-
-void demo_exc_handler(int signo, siginfo_t *info, void *extra)
-{
- struct timespec t;
-
- grx_close();
-
- /* Default action for an kern exception is */
- kern_cli();
- ll_gettime(TIME_EXACT, &t),
- kern_printf("\nS.Ha.R.K. Exception raised!!!"
- "\nTime (s:ns) :%ld:%ld"
- "\nException number:%d (numbers in include/bits/errno.h)"
- "\nPID :%d\n",
- t.tv_sec, t.tv_nsec, info->si_value.sival_int,
- info->si_task);
- sys_abort(1);
-}
-
-/******************************************************************/
-
-/* This function is called when Alt-X is pressed.
- It simply shutdown the system using sys_end.
- Note that the byebye() function is called only if we exit from
- the system using sys_end()!!!!
-*/
-void my_end(KEY_EVT* e)
-{
- sys_end();
-}
-
-/******************************************************************/
-
-/* This function is called when the system exit correctly after Alt-X.
- It exits from the graphic mode and then it prints a small greeting.
- Note that:
- - The function calls grx_exit, so it must be registered using
- RUNLEVEL_BEFORE_EXIT (RUNLEVEL_AFTER_EXIT does not work because
- at that point the kernel is already returned in real mode!!!)
- - When an exception is raised, the exception handler is called.
- Since the exception handler already exits from the graphic mode,
- this funcion has not to be called. For this reason:
- . we registered byebye using the flag NO_AT_ABORT
- . the exception handler exits using sys_abort; in that way byebye is
- NOT called
-*/
-
-
-/*--------------------------------------------------------------*/
-/* User exit function */
-/*--------------------------------------------------------------*/
-
-void byebye(void *arg)
-{
- grx_close();
- kern_printf("Bye Bye!\n");
-}
-
-/*--------------------------------------------------------------*/
-/* Main task */
-/*--------------------------------------------------------------*/
-
-
-/****************************** MAIN ******************************/
-
-int main(int argc, char **argv)
-{
- struct sigaction action;
-
- char c = 0; /* character from keyboard */
-
- /* Init the standard S.Ha.R.K. exception handler */
- action.sa_flags = SA_SIGINFO; /* Set the signal action */
- action.sa_sigaction = demo_exc_handler;
- action.sa_handler = 0;
- sigfillset(&action.sa_mask); /* we block all the other signals... */
-
- if (sigaction(SIGHEXC, &action, NULL) == -1) { /* set the signal */
- perror("Error initializing signals...");
- sys_end();
- }
-
- /* Set the closing function */
- sys_atrunlevel(byebye, NULL, RUNLEVEL_BEFORE_EXIT|NO_AT_ABORT);
-
- /* graphic card Initialization */
- if (grx_init() < 1) {
- sys_abort(1);
- }
-
- if (grx_open(640, 480, 8) < 0) {
- kern_printf("GRX Err\n");
- sys_abort(1);
- }
- kern_printf("Video card ok!\n");
-
- grx_clear(BLACK);
-
- grx_text("Press a key [1-4]", 10, 16, 7, 0);
- grx_text("to create a pair", 10, 24, 7, 0);
- grx_text("ESC to exit demo", 10, 48, 7, 0);
-
- while (c != 27) {
- c = keyb_getch(BLOCK);
- if ((c >= '1') && (c <= '1'+NCAB-1))
- create_channel(c-'1');
- }
-
- sys_end();
-
- return 0;
-}
-
-
-/*--------------------------------------------------------------*/
-/* write data in a cab */
-/*--------------------------------------------------------------*/
-
-TASK producer(void *arg)
-{
-int i = (int)arg;
-char c; /* message character */
-char *p; /* pointer to a cab buffer */
-char s[2]; /* string to display */
-int k = 0;
-int x, y;
-int col = 13;
-int ybase = YY + i*DELTA;
-
- x = X1;
- y = ybase;
- s[1] = 0;
-
- k = 0;
- while (1) {
- c = 'A' + k;
- p = cab_reserve(cid[i]);
- *p = c;
- cab_putmes(cid[i], p);
-
- s[0] = c;
- k = (k + 1) % NCAR;
- grx_text(s,x,y,col,0);
-
- x += 8;
- if (x >= (X1 + NCAR*8)) {
- x = X1;
- y = y + 8;
- if (y >= ybase+16) {
- y = ybase;
- col = col % 15 + 1;
- }
- }
-
- task_endcycle();
- }
-}
-
-/*--------------------------------------------------------------*/
-/* read data from a cab */
-/*--------------------------------------------------------------*/
-
-TASK consumer(void *arg)
-{
-int i = (int)arg;
-char *p;
-char s[2];
-int x, y;
-int col = 13;
-int ybase = YY + i*DELTA;
-
- x = X2;
- y = ybase;
- s[1] = 0;
-
- while (1) {
- p = cab_getmes(cid[i]);
- s[0] = *p - 'A' + 'a';
- cab_unget(cid[i], p);
-
- grx_text(s,x,y,col,0);
- x += 8;
-
- if (x >= (X2 + NCAR*8)) {
- x = X2;
- y = y + 8;
- if (y >= ybase+16) {
- y = ybase;
- col = col % 15 + 1;
- }
- }
- task_endcycle();
- }
-}
-
-/*--------------------------------------------------------------*/
-/* create the two tasks and a channel */
-/*--------------------------------------------------------------*/
-
-void create_channel(int i)
-{
- HARD_TASK_MODEL m;
-
- draw_channel(i);
- cid[i] = cab_create(cname[i], 1, 2);
-
- hard_task_default_model(m);
- hard_task_def_ctrl_jet (m);
- hard_task_def_arg (m, (void *)i);
- hard_task_def_wcet (m, w1[i]);
- hard_task_def_mit (m, t1[i]);
- hard_task_def_usemath (m);
- p1[i] = task_create(pname1[i], producer, &m, NULL);
- if (p1[i] == NIL) {
- grx_close();
- perror("Could not create task <producer>");
- sys_abort(1);
- }
- task_activate(p1[i]);
-
- hard_task_default_model(m);
- hard_task_def_ctrl_jet (m);
- hard_task_def_arg (m, (void *)i);
- hard_task_def_wcet (m, w2[i]);
- hard_task_def_mit (m, t2[i]);
- hard_task_def_usemath (m);
- p2[i] = task_create(pname2[i], consumer, &m, NULL);
- if (p2[i] == NIL) {
- grx_close();
- perror("Could not create task <consumer>");
- sys_abort(1);
- }
- task_activate(p2[i]);
-}
-
-/*--------------------------------------------------------------*/
-/* Disegna i processi e il canale di comunicazione */
-/*--------------------------------------------------------------*/
-
-void draw_channel(int i)
-{
-char buffer[32]; /* buffer per sprintf */
-int yc = YP + i*DELTA; /* altezza del canale */
-
- grx_circle(XP1,yc,R,2);
- grx_text("P1",XP1-8,yc-4,12,0);
-
- grx_circle(XP2,yc,R,2);
- grx_text("P2",XP2-8,yc-4,12,0);
-
- grx_rect(XC,yc-R,XC+L,yc+R,3);
- grx_text("CAB",XC+16,yc-4,12,0);
-
- grx_line(XP1+R,yc,XC,yc,4);
- grx_line(XC+L,yc,XP2-R,yc,4);
-
- grx_text("T1 = ms",X1+40,yc+R+16,14,0);
- sprintf(buffer,"%ld", t1[i]);
- grx_text(buffer,X1+88,yc+R+16,14,0);
-
- grx_text("T2 = ms",X2+40,yc+R+16,14,0);
- sprintf(buffer,"%ld", t2[i]);
- grx_text(buffer,X2+88,yc+R+16,14,0);
-}
-
-/*--------------------------------------------------------------*/
-
Index: start/base/fly.c
===================================================================
--- start/base/fly.c (revision 1087)
+++ start/base/fly.c (nonexistent)
@@ -1,220 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: fly.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai and Giorgio Buttazzo
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*--------------------------------------------------------------*/
-/* SIMULATION OF RANDOM FLIES */
-/*--------------------------------------------------------------*/
-
-#include <kernel/kern.h>
-#include <drivers/glib.h>
-#include <drivers/keyb.h>
-#include <semaphore.h>
-#include <stdlib.h>
-#include <math.h>
-
-#define YMENU 10 /* menu level */
-#define XMIN 50
-#define XMAX 600
-#define YMIN 100
-#define YMAX 450
-#define VEL 5 /* linear velocity (def. = 5) */
-#define ANG 30 /* angolo massimo sterzata (30) */
-#define D 3 /* raggio mosca */
-#define ESC 27 /* ASCII code of ESCAPE key */
-#define MAX_P 35 /* max number of flies */
-#define FLYGROUP 1
-
-double tick = 1.0; /* system tick = 1 ms */
-int fly_period = 40000; /* task period */
-int fly_wcet = 1000; /* task wcet */
-PID pid;
-sem_t mutex;
-
-/*--------------------------------------------------------------*/
-
-void draw_fly(int x, int y, int c)
-{
- sem_wait(&mutex);
- grx_disc(x, y, D, c);
- sem_post(&mutex);
-}
-
-/******************************************************************/
-
-TASK fly(void *arg)
-{
-int x, y;
-int ox, oy;
-int dx, dy, da;
-int teta, col;
-int outx, outy;
-double r;
-int i = (int)arg;
-
- x = ox = (XMIN+XMAX)/2;
- y = oy = (YMIN+YMAX)/2;
- teta = 0;
- col = 2 + i; /* colore fly */
-
- while (1) {
-
- da = rand()%(2*ANG) - ANG; /* da = [-ANG,ANG] */
- teta += da;
-
- if (teta > 360) teta -= 360;
- if (teta < 0) teta += 360;
- r = (double)teta * PI / 180.;
-
- dx = (float)(VEL * cos(r));
- dy = (float)(VEL * sin(r));
- x += dx;
- y += dy;
-
- outx = (x >= XMAX) || (x <= XMIN);
- outy = (y >= YMAX) || (y <= YMIN);
-
- if (outx || outy) {
- x = x - dx;
- y = y - dy;
- if (outx) teta = 180 - teta;
- if (outy) teta = -teta;
- if (teta > 360) teta -= 360;
- if (teta < 0) teta += 360;
- r = (double)teta * PI / 180.;
-
- dx = (float)(VEL * cos(r));
- dy = (float)(VEL * sin(r));
-
- x += dx;
- y += dy;
- }
-
- draw_fly(ox, oy, 0);
- draw_fly(x, y, col);
- ox = x; oy = y;
-
- task_endcycle();
- }
-}
-
-/****************************************************************/
-
-/* This function is called when the system exits */
-void byebye(void *arg)
-{
- grx_close();
- kern_printf("Bye Bye!\n");
-}
-
-/****************************** MAIN ******************************/
-
-int main(int argc, char **argv)
-{
- HARD_TASK_MODEL m;
-
- char c; /* character from keyboard */
- int i = 0; /* number of tasks created */
- TIME seme; /* used to init the random seed */
-
- /* Set the exception handler */
- set_exchandler_grx();
-
- /* Set the closing function */
- sys_atrunlevel(byebye, NULL, RUNLEVEL_BEFORE_EXIT);
-
- /* graphic card Initialization */
- if (grx_init() < 1) {
- sys_abort(1);
- }
-
- if (grx_open(640, 480, 8) < 0) {
- kern_printf("GRX Err\n");
- sys_abort(1);
- }
- kern_printf("Video card ok!\n");
-
- /* The scenario */
- grx_rect(XMIN-D-1, YMIN-D-1, XMAX+D+1, YMAX+D+1, 14);
- grx_text("Simulation of Random Flies", XMIN, YMENU+10, 13, 0);
- grx_text("SPACE create a fly" , XMIN, YMENU+20, 12, 0);
- grx_text("ESC exit to DOS" , XMIN, YMENU+30, 12, 0);
-
- /* The program waits a space to create a fly */
- c = keyb_getch(BLOCK);
-
- /* randomize!!!! */
- seme = sys_gettime(NULL);
- srand(seme);
-
- do {
- if ((c == ' ') && (i < MAX_P)) {
- hard_task_default_model(m);
- hard_task_def_ctrl_jet (m);
- hard_task_def_arg (m, (void *)i);
- hard_task_def_wcet (m, fly_wcet);
- hard_task_def_mit (m, fly_period);
- hard_task_def_group (m, FLYGROUP);
- hard_task_def_usemath (m);
- pid = task_create("fly", fly, &m, NULL);
- if (pid == NIL) {
- grx_close();
- perror("Could not create task <fly>");
- sys_abort(1);
- }
- task_activate(pid);
- i++;
- }
- c = keyb_getch(BLOCK);
-
- } while (c != ESC);
-
- sys_end();
-
- return 0;
-}
-
-/*--------------------------------------------------------------*/
Index: start/base/ego.c
===================================================================
--- start/base/ego.c (revision 1087)
+++ start/base/ego.c (nonexistent)
@@ -1,279 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: ego.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai and Giorgio Buttazzo
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/****************************************************************/
-/* PERIODIC PROCESS TEST */
-/****************************************************************/
-
-#include <kernel/kern.h>
-#include <drivers/glib.h>
-#include <drivers/keyb.h>
-
-#include <semaphore.h>
-
-#define X0 10
-
-/* task periods */
-#define PERIOD_T1 100000
-#define PERIOD_T2 200000
-#define PERIOD_T3 300000
-
-/* X position of the text printed by each task */
-int y[3] = {100, 180, 260};
-
-/* text printed by each task */
-char talk[3][50] = { "I am ego1 and I print a character every 100 ms",
- "I am ego2 and I print a character every 200 ms",
- "I am ego3 and I print a character every 300 ms"};
-
-/* A semaphore used to access Video Cards in mutual exclusion */
-sem_t mutex;
-
-/***************************************************************/
-
-TASK ego(void *arg)
-{
-int i = (int)arg;
-int leng;
-char s[2];
-int x;
-int j = 0;
-
- /* compute the length of the string to print */
- leng = 0;
- while (talk[i][leng] != 0) leng++;
-
- x = X0;
- s[1] = 0;
- task_endcycle();
-
- while (1) {
- s[0] = talk[i][j];
- sem_wait(&mutex);
- /* grx_text("TEST", 100,100,12,0); */
- grx_text(s,x,y[i],12+i,0);
- sem_post(&mutex);
- x += 8;
- if (++j == leng) {
- j = 0;
- x = X0;
- y[i] += 8;
- if (y[i]>340) y[i]=100;
- }
- task_endcycle();
- }
-}
-
-
-/****************************************************************/
-
-/* This is the exception handler. It is called when an exception
- is raised.
- It exits from the graphical mode, then it prints a message and
- shutdown the kernel using sys_abort()
-*/
-
-void demo_exc_handler(int signo, siginfo_t *info, void *extra)
-{
- struct timespec t;
-
- grx_close();
-
- /* Default action for an kern exception is */
- kern_cli();
- ll_gettime(TIME_EXACT, &t),
- kern_printf("\nS.Ha.R.K. Exception raised!!!"
- "\nTime (s:ns) :%ld:%ld"
- "\nException number:%d (numbers in include/bits/errno.h)"
- "\nPID :%d\n",
- t.tv_sec, t.tv_nsec, info->si_value.sival_int,
- info->si_task);
- sys_abort(1);
-}
-
-/******************************************************************/
-
-/* This function is called when Alt-X is pressed.
- It simply shutdown the system using sys_end.
- Note that the byebye() function is called only if we exit from
- the system using sys_end()!!!!
-*/
-void my_end(KEY_EVT* e)
-{
- sys_end();
-}
-
-/******************************************************************/
-
-/* This function is called when the system exit correctly after Alt-X.
- It exits from the graphic mode and then it prints a small greeting.
- Note that:
- - The function calls grx_exit, so it must be registered using
- RUNLEVEL_BEFORE_EXIT (RUNLEVEL_AFTER_EXIT does not work because
- at that point the kernel is already returned in real mode!!!)
- - When an exception is raised, the exception handler is called.
- Since the exception handler already exits from the graphic mode,
- this funcion has not to be called. For this reason:
- . we registered byebye using the flag NO_AT_ABORT
- . the exception handler exits using sys_abort; in that way byebye is
- NOT called
-*/
-
-void byebye(void *arg)
-{
- grx_close();
- kern_printf("Bye Bye!\n");
-}
-
-/****************************** MAIN ******************************/
-
-int main(int argc, char **argv)
-{
- PID pid1, pid2, pid3;
- KEY_EVT emerg;
- HARD_TASK_MODEL m1, m2, m3;
- struct sigaction action;
-
- /* Init the standard S.Ha.R.K. exception handler */
- action.sa_flags = SA_SIGINFO; /* Set the signal action */
- action.sa_sigaction = demo_exc_handler;
- action.sa_handler = 0;
- sigfillset(&action.sa_mask); /* we block all the other signals... */
-
- if (sigaction(SIGHEXC, &action, NULL) == -1) { /* set the signal */
- perror("Error initializing signals...");
- sys_end();
- }
-
- /* Set the closing function */
- sys_atrunlevel(byebye, NULL, RUNLEVEL_BEFORE_EXIT|NO_AT_ABORT);
-
- /* Initializes the semaphore */
- sem_init(&mutex,0,1);
-
- /* graphic card Initialization */
- if (grx_init() < 1) {
- sys_abort(1);
- }
-
- if (grx_open(640, 480, 8) < 0) {
- kern_printf("GRX Err\n");
- sys_abort(1);
- }
- kern_printf("Video card ok!\n");
-
- /* set the keyboard handler to exit correctly */
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,my_end);
-
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTR_BIT;
- keyb_hook(emerg,my_end);
-
- /* a small banner */
- grx_text("EGO Test",8,8,WHITE,0);
- grx_text("Press Alt-X to exit",8,16,WHITE,0);
-
- /* ego1 creation */
- hard_task_default_model(m1);
- hard_task_def_ctrl_jet (m1);
- hard_task_def_arg (m1, (void *)0);
- hard_task_def_wcet (m1, 5000);
- hard_task_def_mit (m1, PERIOD_T1);
- hard_task_def_group (m1,1);
- pid1 = task_create("ego1", ego, &m1, NULL);
- if (pid1 == NIL) {
- grx_close();
- perror("Could not create task <ego1>");
- sys_abort(1);
- }
-
- /* ego2 creation */
- hard_task_default_model(m2);
- hard_task_def_ctrl_jet (m2);
- hard_task_def_arg (m2, (void *)1);
- hard_task_def_wcet (m2, 5000);
- hard_task_def_mit (m2, PERIOD_T2);
- hard_task_def_group (m2,1);
- pid2 = task_create("ego2", ego, &m2, NULL);
- if (pid2 == NIL) {
- grx_close();
- perror("Could not create task <ego2>");
- sys_abort(1);
- }
-
- /* ego3 creation */
- hard_task_default_model(m3);
- hard_task_def_ctrl_jet (m3);
- hard_task_def_arg (m3, (void *)2);
- hard_task_def_wcet (m3, 5000);
- hard_task_def_mit (m3, PERIOD_T3);
- hard_task_def_group (m3,1);
- pid3 = task_create("ego3", ego, &m3, NULL);
- if (pid3 == NIL) {
- grx_close();
- perror("Could not create task <ego3>");
- sys_abort(1);
- }
-
- /* and finally we activate the three threads... */
- group_activate(1);
-
- /*
- now the task main ends, but the system does not shutdown because
- there are the three task ego1, ego2, and ego3 running.
-
- The demo will finish if a Alt-X key is pressed.
- */
-
- return 0;
-}
-
-/****************************************************************/
Index: start/base/makefile
===================================================================
--- start/base/makefile (revision 1087)
+++ start/base/makefile (nonexistent)
@@ -1,22 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= ego fly cabs
-
-include $(BASE)/config/example.mk
-
-ego:
- make -f $(SUBMAKE) APP=ego INIT= OTHEROBJS="initfile.o" OTHERINCL=
-
-fly:
- make -f $(SUBMAKE) APP=fly INIT= OTHEROBJS="initfile.o" OTHERINCL=
-
-cabs:
- make -f $(SUBMAKE) APP=cabs INIT= OTHEROBJS="initfile.o" OTHERINCL=
-
Index: start/readme.txt
===================================================================
--- start/readme.txt (revision 1087)
+++ start/readme.txt (nonexistent)
@@ -1,7 +0,0 @@
-Hi, these are the S.Ha.R.K. demos...
-
-the old examples directory is now called demos/oldexamples...
-
-Enjoy
-
-PJ
Index: start/fsdemo/gload.c
===================================================================
--- start/fsdemo/gload.c (revision 1087)
+++ start/fsdemo/gload.c (nonexistent)
@@ -1,113 +0,0 @@
-/*
- *
- *
- */
-
-#include "config.h"
-
-#include <kernel/func.h>
-#include <kernel/model.h>
-#include <kernel/const.h>
-
-#include <drivers/glib.h>
-
-#include <stdlib.h>
-#include <assert.h>
-
-#include "mutex.h"
-#include "gload.h"
-
-#define PERIOD 250000
-#define WCET 1000
-
-#ifdef FULLCOLOR
-
-#define BARCOLOR rgb16(255,0,0)
-#define BARBG rgb16(0,0,0)
-
-#define TEXTCOLOR rgb16(255,255,255)
-#define TEXTBG rgb16(0,0,0)
-
-#else
-
-#define BARCOLOR 128
-#define BARBG 0
-
-#define TEXTCOLOR 255
-#define TEXTBG 0
-
-#endif
-
-#define XC (32+64)
-#define YC 450
-#define LEN 100
-#define BOR 8
-
-extern void draw_frame(int x, int y, int dx, int dy);
-
-/* only for NRT task */
-static TASK monitorload(void *arg)
-{
- int oy,y;
- PID pid=(PID)arg;
- TIME sum,old;
- int res;
-
- res=jet_getstat(pid,NULL,NULL,NULL,&old);
- task_endcycle();
-
- oy=YC+LEN-1;
- for (;;) {
- res=jet_getstat(pid,NULL,NULL,NULL,&sum);
- if (res==-1) break;
-#ifndef NOGRX
- y=YC+LEN*(sum-old)/PERIOD-1;
- if (y!=oy) {
- grxlock();
- if (y<oy) grx_box(XC,y,XC+BOR-1,oy,BARCOLOR);
- else grx_box(XC,oy,XC+BOR-1,y,BARBG);
- grxunlock();
- oy=y;
- }
-#else
- n++;
- if (n%4==0)
- cprintf("#%li,%i#",sum); //(1000-sum*1000/PERIOD);
-#endif
- old=sum;
- task_endcycle();
- }
- return 0;
-}
-
-int gload_init(int taskpid)
-{
- SOFT_TASK_MODEL model;
- PID pid;
-
- soft_task_default_model(model);
- soft_task_def_met(model,WCET);
- soft_task_def_wcet(model,WCET);
- soft_task_def_period(model,PERIOD);
- soft_task_def_periodic(model);
- soft_task_def_arg(model,(void*)taskpid);
- /*soft_task_def_group(model,group);*/
-
- pid=task_create("load",monitorload,&model,NULL);
- if (pid==-1) return -6;
-
-#ifndef NOGRX
- draw_frame(XC,YC,BOR,LEN);
- grxlock();
- grx_text("Load",XC-10,YC+LEN+BOR*2,TEXTCOLOR,TEXTBG);
- grx_text("100%",XC+BOR*2+1,YC-4,TEXTCOLOR,TEXTBG);
- grx_text(" 75%",XC+BOR*2+1,YC+LEN/4-4,TEXTCOLOR,TEXTBG);
- grx_text(" 50%",XC+BOR*2+1,YC+LEN/4*2-4,TEXTCOLOR,TEXTBG);
- grx_text(" 25%",XC+BOR*2+1,YC+LEN/4*3-4,TEXTCOLOR,TEXTBG);
- grx_text(" 0%",XC+BOR*2+1,YC+LEN-4,TEXTCOLOR,TEXTBG);
- grxunlock();
-#endif
-
- return pid;
-}
-
Index: start/fsdemo/gphoto.ok
===================================================================
--- start/fsdemo/gphoto.ok (revision 1087)
+++ start/fsdemo/gphoto.ok (nonexistent)
@@ -1,222 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Luca Abeni <luca@hartik.sssup.it>
- * Massimiliano Giorgi <massy@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/*
- * Copyright (C) 1999 Luca Abeni and Massimiliano Giorgi
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * CVS : $Id: gphoto.ok,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
- *
- * File: $File$
- * Revision: $Revision: 1.1.1.1 $
- * Last update: $Date: 2002-09-02 09:37:41 $
- */
-
-#include "config.h"
-
-#include <kernel/func.h>
-#include <kernel/model.h>
-#include <kernel/const.h>
-
-#include <drivers/glib.h>
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <fcntl.h>
-
-#include "mutex.h"
-#include "gphoto.h"
-
-#ifdef FULLCOLOR
-
-/* 16bits format 5:6:5 */
-/* 24bits format 8:8:8 */
-static void down24to16(WORD *dst, BYTE *src, int dx, int dy)
-{
- int x,y;
- /* row must be multiple of 4!!! (there are 3 bytes per pixel!)*/
- dst+=dx*(dy+1);
- for (y=0;y<dy;y++) {
- dst-=dx*2;
- for (x=0;x<dx;x++,src+=3,dst++)
- /* blue green red */
- *dst=((src[0]&0xf8)>>3)|((src[1]&0xfc)<<3)|((src[2]&0xf8)<<8);
- }
-}
-
-#define downscaleimage(x,y,z,k) down24to16((WORD*)x,y,z,k)
-
-#else
-
-static void down24to8(BYTE *dst, BYTE *src, int dx, int dy)
-{
- int x,y;
-
- dst+=dx*(dy+1);
- for (y=0;y<dy;y++) {
- dst-=dx*2;
- for (x=0;x<dx;x++,src+=3,dst++)
- *dst=(((int)src[0])*11+((int)src[1])*59+((int)src[2])*30)/100;
- }
-}
-
-#define downscaleimage(x,y,z,k) down24to8(x,y,z,k)
-
-#endif
-
-/*
- *
- */
-
-extern void draw_frame(int x, int y, int dx, int dy);
-
-int gphoto_show(char *pathname, int x, int y)
-{
- struct BITMAPFILEHEADER *bf;
- struct BITMAPINFOHEADER *bi;
- BYTE *src,*dst;
- long l;
- int h,n;
- int dx,dy;
-
- bf=(struct BITMAPFILEHEADER *)malloc(sizeof(struct BITMAPFILEHEADER));
- bi=(struct BITMAPINFOHEADER *)malloc(sizeof(struct BITMAPINFOHEADER));
-
- if (bf==NULL||bi==NULL) return -1;
-
- h=open(pathname,O_RDONLY);
- if (h==-1) {
- free(bf);
- free(bi);
- return -2;
- }
-
- n=read(h,bf,sizeof(struct BITMAPFILEHEADER));
- if (n!=sizeof(struct BITMAPFILEHEADER)) {
- close(h);
- free(bf);
- free(bi);
- return -4;
- }
-
- n=read(h,bi,sizeof(struct BITMAPINFOHEADER));
- if (n!=sizeof(struct BITMAPINFOHEADER)) {
- close(h);
- free(bf);
- free(bi);
- return -4;
- }
-
- //grx_close();
-
- /*
- cprintf("type: %c %c\n",bf->bfType&0xff,bf->bfType>>8);
- cprintf("size: %li\n",bf->bfSize);
- cprintf("tell: %li\n\n",bf->bfOffBits);
-
- cprintf("bitcoutn: %i\n",bi->biBitCount);
- cprintf("compress: %li\n",bi->biCompression);
- cprintf("dx: %li\n",bi->biWidth);
- cprintf("dy: %li\n",bi->biHeight);
- */
-
- //sys_end();
- //return 0;
-
- if (bf->bfType!='B'+256*'M'||
- bi->biBitCount!=24||
- bi->biCompression!=0||
- bi->biWidth%4!=0) {
- close(h);
- free(bf);
- free(bi);
- return -5;
- }
-
- dx=bi->biWidth;
- dy=bi->biHeight;
-
- src=(BYTE*)malloc(dx*dy*3);
- if (src==NULL) {
- close(h);
- free(bf);
- free(bi);
- return -6;
- }
-
- dst=(BYTE*)malloc(dx*dy*2);
- if (dst==NULL) {
- free(src);
- close(h);
- free(bf);
- free(bi);
- return -6;
- }
-
- l=lseek(h,bf->bfOffBits,SEEK_SET);
- if (l!=bf->bfOffBits) {
- free(dst);
- free(src);
- close(h);
- free(bf);
- free(bi);
- return -7;
- }
-
- n=read(h,src,dx*dy*3);
- if (n!=dx*dy*3) {
- free(dst);
- free(src);
- close(h);
- free(bf);
- free(bi);
- return -8;
- }
-
- downscaleimage(dst,src,dx,dy);
-
-#ifndef NOGRX
- draw_frame(x,y,dx,dy);
- grxlock();
- grx_putimage(x, y, x+dx-1, y+dy-1, dst);
- grxunlock();
-#endif
-
- free(dst);
- free(src);
- close(h);
- free(bi);
- free(bf);
-
- return 0;
-}
Index: start/fsdemo/oldmakefile
===================================================================
--- start/fsdemo/oldmakefile (revision 1087)
+++ start/fsdemo/oldmakefile (nonexistent)
@@ -1,41 +0,0 @@
-#
-#
-#
-# TO REMAKE BETTER
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-.PHONY: test all install depend clean cleanall
-
-C_INC+= -I$(BASE)/ports
-LINK_LIB+= -lmpeg
-LINK_DEP+= $(LIB_PATH)/libmpeg.a
-
-#test:: tserv tserv2
-test:: mplay
-
-clean::
- rm -f *.o
- rm -f mplay
-
-OBJS= mplay.o xread.o gclock.o gvideo.o gload.o gbuffer.o gphoto.o
-
-mplay: $(OBJS) $(LIB_PATH)/initfs.o $(LIB_DEP)
- $(LD) $(LINK_OPT) $(LINK_STARTUP) \
- $(OBJS) \
- $(LIB_PATH)/initfs.o \
- --start-group $(LINK_LIB) --end-group \
- -o mplay
-
-depend::
- $(CC) $(C_OPT) -M $(OBJS:.o=.c) > deps
-
-deps:
- $(CC) $(C_OPT) -M $(OBJS:.o=.c) > deps
-
-include deps
Index: start/fsdemo/gload.h
===================================================================
--- start/fsdemo/gload.h (revision 1087)
+++ start/fsdemo/gload.h (nonexistent)
@@ -1,7 +0,0 @@
-
-#ifndef __GLOAD_H
-#define __GLOAD_H
-
-int gload_init(int pid);
-
-#endif
Index: start/fsdemo/makefile
===================================================================
--- start/fsdemo/makefile (revision 1087)
+++ start/fsdemo/makefile (nonexistent)
@@ -1,28 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= mplay
-
-include $(BASE)/config/example.mk
-
-mplay:
- make -f $(SUBMAKE) APP=mplay INIT= OTHEROBJS="xread.o gclock.o gvideo.o gload.o gbuffer.o gphoto.o initfile.o" OTHERINCL="-I$(BASE)/ports"
-
-
-
-
-
-
-
-
-
-
-
-
-
Index: start/fsdemo/gphoto.c
===================================================================
--- start/fsdemo/gphoto.c (revision 1087)
+++ start/fsdemo/gphoto.c (nonexistent)
@@ -1,302 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- * Copyright (C) 1999 Luca Abeni and Massimiliano Giorgi
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * CVS : $Id: gphoto.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
- *
- * File: $File$
- * Revision: $Revision: 1.1.1.1 $
- * Last update: $Date: 2002-09-02 09:37:41 $
- */
-
-#include "config.h"
-
-#include <kernel/func.h>
-#include <kernel/model.h>
-#include <kernel/const.h>
-
-#include <drivers/glib.h>
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <fcntl.h>
-
-#include "mutex.h"
-#include "gphoto.h"
-
-#ifdef FULLCOLOR
-#define COLORFG rgb16(255,255,255)
-#define COLORBG rgb16(0,0,0)
-#else
-#define COLORFG 255
-#define COLORBG 0
-#endif
-
-#ifdef FULLCOLOR
-
-/* 16bits format 5:6:5 */
-/* 24bits format 8:8:8 */
-static void down24to16(int h ,
- WORD *dst, BYTE *src,
- int xs, int ys, int dx, int dy)
-{
- WORD *pdst;
- BYTE *psrc;
- int x,y;
- int n;
-
- /* row must be multiple of 4!!! (there are 3 bytes per pixel!)*/
-
- for (y=0;y<dy;y++) {
- psrc=src;
- pdst=dst;
-
- n=read(h,src,dx*3);
- if (n!=dx*3) return;
-
- for (x=0;x<dx;x++,psrc+=3,pdst++)
- /* blue green red */
- *pdst=((psrc[0]&0xf8)>>3)|((psrc[1]&0xfc)<<3)|((psrc[2]&0xf8)<<8);
-
-#ifndef NOGRX
- grxlock();
- grx_putimage(xs, ys+dy-y-1, xs+dx-1, ys+dy-y-1, dst);
- grxunlock();
-#endif
-
- }
-
-}
-
-#define downscaleimage(h,x,y,a,b,c,d) down24to16(h,(WORD*)x,y,a,b,c,d)
-
-#else
-
-static void down24to8(int h,
- BYTE *dst, BYTE *src,
- int xs, int ys, int dx, int dy)
-{
- BYTE *pdst;
- BYTE *psrc;
- int x,y;
- int n;
-
- /* row must be multiple of 4!!! (there are 3 bytes per pixel!)*/
-
- for (y=0;y<dy;y++) {
- psrc=src;
- pdst=dst;
-
- n=read(h,src,dx*3);
- if (n!=dx*3) return;
-
- for (x=0;x<dx;x++,psrc+=3,pdst++)
- *pdst=(((int)psrc[0])*11+((int)psrc[1])*59+((int)psrc[2])*30)/100;
-
-#ifndef NOGRX
- grxlock();
- grx_putimage(xs, ys+dy-y-1, xs+dx-1, ys+dy-y-1, dst);
- grxunlock();
-#endif
-
- }
-}
-
-#define downscaleimage(h,x,y,a,b,c,d) down24to8(h,x,y,a,b,c,d)
-
-#endif
-
-/*
- *
- */
-
-struct taskinfo {
- int h;
- BYTE *dst,*src;
- int x,y;
- int dx,dy;
-};
-
-static TASK phototask(void *arg)
-{
- struct taskinfo *p=(struct taskinfo *)arg;
-
- downscaleimage(p->h,p->dst,p->src,p->x,p->y,p->dx,p->dy);
-
- free(p->dst);
- free(p->src);
- close(p->h);
-
- free(arg);
-
- return NULL;
-}
-
-
-/*
- *
- */
-
-extern void draw_frame(int x, int y, int dx, int dy);
-
-int gphoto_show(char *title, char *pathname, int x, int y)
-{
- NRT_TASK_MODEL model;
- struct BITMAPFILEHEADER *bf;
- struct BITMAPINFOHEADER *bi;
- struct taskinfo *info;
- BYTE *src,*dst;
- long l;
- int h,n;
- int dx,dy;
- PID pid;
-
- bf=(struct BITMAPFILEHEADER *)malloc(sizeof(struct BITMAPFILEHEADER));
- bi=(struct BITMAPINFOHEADER *)malloc(sizeof(struct BITMAPINFOHEADER));
-
- if (bf==NULL||bi==NULL) return -11;
-
- h=open(pathname,O_RDONLY);
- if (h==-1) {
- free(bf);
- free(bi);
- return -2;
- }
-
- n=read(h,bf,sizeof(struct BITMAPFILEHEADER));
- if (n!=sizeof(struct BITMAPFILEHEADER)) {
- close(h);
- free(bf);
- free(bi);
- return -4;
- }
-
- n=read(h,bi,sizeof(struct BITMAPINFOHEADER));
- if (n!=sizeof(struct BITMAPINFOHEADER)) {
- close(h);
- free(bf);
- free(bi);
- return -4;
- }
-
- //grx_close();
-
- /*
- cprintf("type: %c %c\n",bf->bfType&0xff,bf->bfType>>8);
- cprintf("size: %li\n",bf->bfSize);
- cprintf("tell: %li\n\n",bf->bfOffBits);
-
- cprintf("bitcoutn: %i\n",bi->biBitCount);
- cprintf("compress: %li\n",bi->biCompression);
- cprintf("dx: %li\n",bi->biWidth);
- cprintf("dy: %li\n",bi->biHeight);
- */
-
- //sys_end();
- //return 0;
-
- if (bf->bfType!='B'+256*'M'||
- bi->biBitCount!=24||
- bi->biCompression!=0||
- bi->biWidth%4!=0) {
- close(h);
- free(bf);
- free(bi);
- return -5;
- }
-
- dx=bi->biWidth;
- dy=bi->biHeight;
-
- src=(BYTE*)malloc(dx*3);
- if (src==NULL) {
- close(h);
- free(bf);
- free(bi);
- return -6;
- }
-
- dst=(BYTE*)malloc(dx*2);
- if (dst==NULL) {
- free(src);
- close(h);
- free(bf);
- free(bi);
- return -6;
- }
-
- l=lseek(h,bf->bfOffBits,SEEK_SET);
- if (l!=bf->bfOffBits) {
- free(dst);
- free(src);
- close(h);
- free(bf);
- free(bi);
- return -7;
- }
-
-#ifndef NOGRX
- draw_frame(x,y,dx,dy);
- grxlock();
- grx_text(title,x,y-14,COLORFG,COLORBG);
- grxunlock();
-#endif
-
- free(bi);
- free(bf);
-
- info=(struct taskinfo *)malloc(sizeof(struct taskinfo));
- if (info==NULL) {
- free(dst);
- free(src);
- close(h);
- return -8;
- }
- info->h=h;
- info->src=src;
- info->dst=dst;
- info->x=x;
- info->y=y;
- info->dx=dx;
- info->dy=dy;
-
- nrt_task_default_model(model);
- nrt_task_def_arg(model,info);
- pid=task_create("Photo",phototask,&model,NULL);
-
- return pid;
-}
Index: start/fsdemo/gclock.c
===================================================================
--- start/fsdemo/gclock.c (revision 1087)
+++ start/fsdemo/gclock.c (nonexistent)
@@ -1,81 +0,0 @@
-
-#include "config.h"
-
-#include <kernel/func.h>
-#include <kernel/const.h>
-#include <kernel/model.h>
-#include <kernel/types.h>
-
-#include <drivers/glib.h>
-
-#include <stdlib.h>
-
-#include "mutex.h"
-#include "gclock.h"
-
-#ifdef FULLCOLOR
-#define COLORFG rgb16(255,255,255)
-#define COLORBG rgb16(0,0,0)
-#else
-#define COLORFG 255
-#define COLORBG 0
-#endif
-
-struct info {
- int x;
- int y;
-};
-
-static TASK grxclock(struct info *ptr)
-{
- char buffer[16];
- int min,sec;
-
- min=sec=0;
- for (;;) {
- sprintf(buffer,"%02i:%02i",min,sec);
-#ifndef NOGRX
- grxlock();
- grx_text(buffer,ptr->x,ptr->y,COLORFG,COLORBG);
- grxunlock();
-#endif
- sec++;
- if (sec==60) {
- sec=0;
- min++;
- if (min==60) min=0;
- }
- task_endcycle();
- }
- return NULL;
-}
-
-PID gclock_init(int x, int y)
-{
- SOFT_TASK_MODEL model;
- struct info *ptr;
-
- ptr=(struct info *)malloc(sizeof(struct info));
- if (ptr==NULL) return -1;
- ptr->x=x+1;
- ptr->y=y+1;
-
-#ifndef NOGRX
- grxlock();
- grx_box(x-1,y-1,x+GCLOCKDX-1,y+GCLOCKDY-1,COLORBG);
- grx_rect(x-1,y-1,x+GCLOCKDX-1,y+GCLOCKDY-1,COLORFG);
- grx_text("00:00",ptr->x,ptr->y,COLORFG,COLORBG);
- grx_text("Clock",ptr->x,ptr->y-12,COLORFG,COLORBG);
- grxunlock();
-#endif
-
- soft_task_default_model(model);
- soft_task_def_met(model,5000);
- soft_task_def_wcet(model,5000);
- soft_task_def_period(model,1000000);
- soft_task_def_periodic(model);
- soft_task_def_arg(model,(void*)ptr);
- //soft_task_def_ctrl_jet(model);
-
- return task_create("grxclock", grxclock, &model, NULL);
-}
Index: start/fsdemo/initfile.c
===================================================================
--- start/fsdemo/initfile.c (revision 1087)
+++ start/fsdemo/initfile.c (nonexistent)
@@ -1,119 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * CVS : $Id: initfile.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
- *
- * File: $File$
- * Revision: $Revision: 1.1.1.1 $
- * Last update: $Date: 2002-09-02 09:37:41 $
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/rr.h"
-#include "modules/cbs.h"
-#include "modules/dummy.h"
-
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "modules/cabs.h"
-#include "modules/pi.h"
-#include "modules/pc.h"
-#include "modules/srp.h"
-#include "modules/npp.h"
-#include "modules/nop.h"
-#include "modules/nopm.h"
-
-#include "drivers/keyb.h"
-
-/*+ sysyem tick in us +*/
-#define TICK 1000
-
-/*+ RR tick in us +*/
-#define RRTICK 10000
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
- extern int __register_sub_init_prologue(void);
- extern int __register_sub_init(void);
-
- __register_sub_init_prologue();
-
- EDF_register_level(EDF_ENABLE_ALL);
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- CBS_register_level(CBS_ENABLE_ALL, 0);
- dummy_register_level();
-
- SEM_register_module();
-
- CABS_register_module();
-
- PI_register_module();
- PC_register_module();
- NPP_register_module();
- SRP_register_module();
- NOP_register_module();
- NOPM_register_module();
-
- __register_sub_init();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
- KEYB_PARMS keyb = BASE_KEYB;
- extern int __bdev_sub_init(void);
- extern int __fs_sub_init(void);
- extern void ctrlc_exit(KEY_EVT *k);
-
- HARTPORT_init();
-
- keyb_def_ctrlC(keyb, ctrlc_exit);
- KEYB_init(&keyb);
-
- __bdev_sub_init();
- __fs_sub_init();
-
- __call_main__(mb);
-
- return (void *)0;
-}
-
Index: start/fsdemo/xread.c
===================================================================
--- start/fsdemo/xread.c (revision 1087)
+++ start/fsdemo/xread.c (nonexistent)
@@ -1,236 +0,0 @@
-/*
- *
- *
- *
- *
- */
-
-#include "config.h"
-
-#include <ll/i386/cons.h>
-
-#include <kernel/func.h>
-#include <kernel/int_sem.h>
-#define seminit(s,v) internal_sem_init(s,v)
-#define semwait(s) internal_sem_wait(s)
-#define semsignal(s) internal_sem_post(s)
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <assert.h>
-
-#include "xread.h"
-
-/**/
-
-/*
- */
-
-#ifndef ACTIVATE
-int x_fseek(FILE *file, long where, int from)
-{
- return fseek(file,where,from);
-}
-
-size_t x_fread(void *buffer, size_t size, size_t n, FILE *file)
-{
- return fread(buffer,size,n,file);
-}
-
-void x_init(void)
-{}
-
-int x_initbuffer(int group, FILE *f, int rate, int band)
-{
- return XUNUSEDPID;
-}
-
-#endif
-
-#ifdef ACTIVATE
-int x_fseek(FILE *file, long where, int from)
-{
- return -1;
-}
-
-#define BLOCKSIZE (512*4)
-#define BLOCKSPERBUFFER (BUFFERMAXSIZE/BLOCKSIZE)
-
-/* in millisecondi */
-#define PRELOAD 500
-
-struct xbuffer *table[OPEN_MAX];
-
-int end_counter=0;
-
-static TASK bufferfiller(void *arg)
-{
- struct xbuffer *ptr=(struct xbuffer *)arg;
- int n;
-
- for (;;) {
- if (freespace(ptr)>BLOCKSIZE+8) {
- //assert(ptr->writeptr>=0);
- //assert(ptr->writeptr+BLOCKSIZE<=BUFFERMAXSIZE);
- n=read(ptr->handle,ptr->buffer+ptr->writeptr,BLOCKSIZE);
-#ifdef NOGRX
- cprintf("²");
-#endif
- kern_cli();
- ptr->writeptr+=n;
- /* ipotesi: non si legge mai piu' di BUFFERMAXSIZE */
- if (ptr->writeptr>=BUFFERMAXSIZE) ptr->writeptr-=BUFFERMAXSIZE;
- kern_sti();
- if (n!=BLOCKSIZE) {
- //cprintf("<XXX>");
- break;
- }
- //assert(ptr->writeptr%512==0);
- }
- task_endcycle();
- }
-
- end_counter++;
-
- return NULL;
-}
-
-void x_init(void)
-{
- int i;
- for (i=0;i<OPEN_MAX;i++) table[i]=NULL;
-}
-
-/* rate in bits/sec */
-/* band in percentuale *100 */
-int x_initbuffer(int group, FILE *f, int rate, int band)
-{
-#ifdef EDFSCHED
- BDEDF_RES_MODEL resource;
-#endif
-#ifdef PSCANSCHED
- BDPSCAN_RES_MODEL resource;
-#endif
- SOFT_TASK_MODEL model;
- struct xbuffer *ptr;
- int handle;
- int period,wcet;
- int n,preload;
- PID pid;
-
- handle=fileno(f);
- if (handle>OPEN_MAX||handle<0) return -11;
-
- if (table[handle]!=NULL) return -2;
-
- ptr=table[handle]=(struct xbuffer *)malloc(sizeof(struct xbuffer));
- if (ptr==NULL) return -3;
-
- ptr->handle=handle;
- ptr->writeptr=ptr->readptr=0;
- n=lseek(ptr->handle,0,SEEK_SET);
- if (n!=0) {
- cprintf("can't seek to 0\n");
- return -12;
- }
-
- /* PRELOAD */
- preload=rate*PRELOAD/8/1000;
- if (preload<100*1024) preload=100*1024;
- preload=(preload/BLOCKSIZE+1)*BLOCKSIZE;
- if (preload>BUFFERMAXSIZE-BLOCKSIZE) return -4;
- n=read(ptr->handle,ptr->buffer,preload);
- if (n!=preload) {
- cprintf("preload: request %li bytes (%li returned)\n",
- (long)preload,(long)n);
- return -5;
- }
- ptr->writeptr+=n;
-
- //cprintf("%li bytes preloaded\n",(long)n);
- if (rate==0) sys_abort(997);
- period=1000000l*BLOCKSIZE/rate*8;
- wcet=period*band/10000;
-
- soft_task_default_model(model);
- soft_task_def_met(model,wcet);
- soft_task_def_wcet(model,wcet);
- soft_task_def_period(model,period);
- soft_task_def_periodic(model);
- soft_task_def_arg(model,(void*)ptr);
- soft_task_def_group(model,group);
-
-#if defined(EDFSCHED)
- BDEDF_res_default_model(resource);
- BDEDF_res_def_dl(resource,period);
- pid=task_createn("xfill", bufferfiller,(TASK_MODEL*)&model, &resource, NULL);
-#elif defined(PSCANSCHED)
- BDPSCAN_res_default_model(resource);
- BDPSCAN_res_def_priority(resource,0);
- pid=task_createn("xfill", bufferfiller,(TASK_MODEL*)&model, &resource, NULL);
-#else
- pid=task_create("xfill", bufferfiller, &model, NULL);
-#endif
- if (pid!=-1) {
- cprintf("task wcet=%10li period=%10li\n",(long)wcet,(long)period);
- }
-
- return pid;
-}
-
-size_t x_fread(void *buffer, size_t objsize, size_t n, FILE *file)
-{
- struct xbuffer *ptr;
- int size,sz;
- int nv;
-
- ptr=table[fileno(file)];
- if (ptr==NULL) {
- cprintf("x_fread with bad fd\n");
- return 0;
- }
-
- size=objsize*n;
- //cprintf("[for %i]",size);
-REDO:
- if (filledspace(ptr)<size) {
- /*
- cprintf("x_fread called for %li bytes (%li available)\n",
- (long)size,
- (long)filledspace(ptr));
- */
- nv=n;
- n=filledspace(ptr)/objsize;
- if (n==0) {
- n=nv;
- task_delay(15000);
- goto REDO;
- return 0;
- }
- size=objsize*n;
- /*cprintf("%i will return\n",size);*/
- }
-
- sz=BUFFERMAXSIZE-ptr->readptr;
- if (sz>=size) {
- //cprintf("X");
- memcpy(buffer,ptr->buffer+ptr->readptr,size);
- } else {
- //cprintf("Y");
- memcpy(buffer,ptr->buffer+ptr->readptr,sz);
- assert(size-sz>0);
- memcpy(buffer+sz,ptr->buffer,size-sz);
- }
-
- kern_cli();
- ptr->readptr+=size;
- /* ipotesi: non si legge mai piu' di BUFFERMAXSIZE */
- if (ptr->readptr>=BUFFERMAXSIZE) ptr->readptr-=BUFFERMAXSIZE;
- kern_sti();
-
- return n;
-}
-
-#endif
Index: start/fsdemo/gphoto.h
===================================================================
--- start/fsdemo/gphoto.h (revision 1087)
+++ start/fsdemo/gphoto.h (nonexistent)
@@ -1,42 +0,0 @@
-/*
- *
- *
- */
-
-#ifndef __GPHOTO_H
-#define __GPHOTO_H
-
-#include <ll/sys/types.h>
-
-struct BITMAPFILEHEADER {
- WORD bfType;
- DWORD bfSize;
- WORD bfReserved1;
- WORD bfReserved2;
- DWORD bfOffBits;
-} __attribute__((packed));
-
-struct BITMAPINFOHEADER {
- DWORD biSize;
- DWORD biWidth;
- DWORD biHeight;
- WORD biPlanes;
- WORD biBitCount;
- DWORD biCompression;
- DWORD biSizeImage;
- DWORD biXPelsPerMeter;
- DWORD biYPelsPerMeter;
- DWORD biClrUsed;
- DWORD biClrImportant;
-} __attribute__((packed));
-
-struct RGBQUAD {
- BYTE rgbBlue;
- BYTE rgbGreen;
- BYTE rgbRed;
- BYTE rgbReserverd;
-} __attribute__((packed));
-
-int gphoto_show(char *title, char *pathname, int x, int y);
-
-#endif
Index: start/fsdemo/gclock.h
===================================================================
--- start/fsdemo/gclock.h (revision 1087)
+++ start/fsdemo/gclock.h (nonexistent)
@@ -1,13 +0,0 @@
-
-
-#ifndef __GCLOCK_H
-#define __GCLOCK_H
-
-#include <kernel/types.h>
-
-PID gclock_init(int x, int y);
-
-#define GCLOCKDX (5*8+2)
-#define GCLOCKDY (1*8+2)
-
-#endif
Index: start/fsdemo/mutex.h
===================================================================
--- start/fsdemo/mutex.h (revision 1087)
+++ start/fsdemo/mutex.h (nonexistent)
@@ -1,32 +0,0 @@
-
-#ifndef __GRXMUTEX_H
-#define __GRXMUTEX_H
-
-#include "config.h"
-
-#ifdef GRXMUTEX
-
-#include <kernel/int_sem.h>
-
-#define g_sem_t internal_sem_t
-
-#define g_sem_init(s,value) internal_sem_init(s,value)
-#define g_sem_wait(s) internal_sem_wait(s)
-#define g_sem_signal(s) internal_sem_post(s)
-
-#else
-
-#define g_sem_t int
-
-#define g_sem_init(s,value)
-#define g_sem_wait(s)
-#define g_sem_signal(s)
-
-#endif
-
-extern g_sem_t grxsem;
-
-#define grxlock() g_sem_wait(&grxsem)
-#define grxunlock() g_sem_signal(&grxsem)
-
-#endif
Index: start/fsdemo/xread.h
===================================================================
--- start/fsdemo/xread.h (revision 1087)
+++ start/fsdemo/xread.h (nonexistent)
@@ -1,46 +0,0 @@
-
-#ifndef XREAD_H_
-#define XREAD_H_
-
-#include <stdio.h>
-
-#define BUFFERMAXSIZE (128*1024l)
-
-struct xbuffer {
- int handle;
- char buffer[BUFFERMAXSIZE+8];
- int readptr;
- int writeptr;
-};
-extern struct xbuffer *table[OPEN_MAX];
-
-void x_init(void);
-
-/* rate in bit/sec */
-/* band in percentuale */
-int x_initbuffer(int group, FILE *f, int rate, int band);
-
-#define XUNUSEDPID 5821
-
-/*
- *
- */
-
-static __inline__ int filledspace(struct xbuffer *ptr)
-{
- int size;
-
- if (ptr->writeptr==ptr->readptr) return 0;
-
- size=ptr->writeptr-ptr->readptr;
- if (size<0) size+=BUFFERMAXSIZE;
-
- return size;
-}
-
-static __inline__ int freespace(struct xbuffer *ptr)
-{
- return BUFFERMAXSIZE-filledspace(ptr);
-}
-
-#endif
Index: start/fsdemo/config.h
===================================================================
--- start/fsdemo/config.h (revision 1087)
+++ start/fsdemo/config.h (nonexistent)
@@ -1,44 +0,0 @@
-
-/*
- *
- */
-
-/* if def: does not use graphics */
-#define NOGRX 1
-#undef NOGRX
-
-/* if def: use a mutex for all graphics operations */
-#define GRXMUTEX 1
-#undef GRXMUTEX
-
-/* if def: use full color (16bits.. sigh) else use 8 bits/pixel grayscale */
-#define FULLCOLOR 1
-#undef FULLCOLOR
-
-/*
- *
- */
-
-/* if def: does not trace events (does not work) */
-#define NOTRACE 1
-//#undef NOTRACE
-
-/*
- *
- */
-
-/* if def: activate task buffering */
-#define ACTIVATE 1
-//#undef ACTIVATE
-
-/*
- *
- */
-
-/* if def: use bd_edf resource for I/O tasks */
-#define EDFSCHED 1
-#undef EDFSCHED
-
-/* if def: use bd_pscan resources for I/O tasks */
-#define PSCANSCHED 1
-#undef PSCANSCHED
Index: start/fsdemo/readme
===================================================================
--- start/fsdemo/readme (revision 1087)
+++ start/fsdemo/readme (nonexistent)
@@ -1,21 +0,0 @@
-S.Ha.R.K. FSDEMO
-
-This demo has been made as a thesis demo by Massimiliano Giorgi
-(massy@gandalf.sssup.it). The following is the translations of some itailan
-notes left my Massy. For any problems, please contact us
-shark-help@gandalf.sssup.it...
-
-bye
-
-Paolo
-
-----------------------------------------------------------------------------
-
-mplay is the demo I used during my thesis presentation.
-
-To use the demo you need a few mpeg files (those listed into mplay.c) into the directory /temp/m/ and some BMP photos into the directory /temp/b/
-
-Note that only BMP 24bpp images are supported. They MUST have a DIB header,
-with a line length mujltiple of 4 pixels!!!
-
-Massy
Index: start/fsdemo/gvideo.c
===================================================================
--- start/fsdemo/gvideo.c (revision 1087)
+++ start/fsdemo/gvideo.c (nonexistent)
@@ -1,292 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- * Copyright (C) 1999 Luca Abeni and Massimiliano Giorgi
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * CVS : $Id: gvideo.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
- *
- * File: $File$
- * Revision: $Revision: 1.1.1.1 $
- * Last update: $Date: 2002-09-02 09:37:41 $
- */
-
-#include "config.h"
-
-#include <kernel/func.h>
-#include <kernel/model.h>
-#include <kernel/const.h>
-
-#include <drivers/glib.h>
-
-#include <stdlib.h>
-
-#include "mpeg/video.h"
-#include "mpeg/util.h"
-#include "mpeg/dither.h"
-#include "mpeg/mpeg.h"
-
-#include "mutex.h"
-#include "gvideo.h"
-#include "gbuffer.h"
-#include "xread.h"
-
-#define STARTGROUP 513
-
-#define VIDEORATE 70
-#define READRATE 30
-
-/*
- * colors
- */
-
-#ifdef FULLCOLOR
-
-#define COLORFG rgb16(255,255,255)
-#define COLORBG rgb16(0,0,0)
-
-#define SP rgb16(0,128,0)
-#define FG rgb16(255,255,255)
-#define BG rgb16(0,0,0)
-
-#else
-
-/* for writing */
-#define COLORFG 255
-#define COLORBG 0
-
-/* for box */
-#define SP 128
-#define FG 255
-#define BG 0
-
-#endif
-
-/* border size (pixels) */
-#define BO 4
-
-/*
- *
- */
-
-#ifdef FULLCOLOR
-/* 16bits format 5:6:5 */
-/* 32bits format 8:8:8:0 */
-void down32to16(WORD *dst, BYTE *src, int size)
-{
- int i;
- return;
- for (i=0;i<size;i+=4,dst++,src+=4)
- /* blue green red */
- *dst=((src[2]&0xf8)>>3)|((src[1]&0xfc)<<3)|((src[0]&0xf8)<<8);
-}
-#endif
-
-/*
- *
- */
-
-void draw_frame(int x, int y, int dx, int dy)
-{
-#ifndef NOGRX
- grxlock();
- grx_box(x-1-BO,y-1-BO,x+dx+BO,y+dy+BO,SP);
- grx_rect(x-1-BO,y-1-BO,x+dx+BO,y+dy+BO,FG);
- grx_box(x,y,x+dx-1,y+dy-1,BG);
- grx_rect(x-1,y-1,x+dx,y+dy,FG);
- grxunlock();
-#endif
-}
-
-struct info {
- int x,y;
- ImageDesc *img;
-};
-
-static TASK play(void *arg)
-{
- struct info *ptr=(struct info*)arg;
- int x1,y1,x2,y2;
- BYTE *pixels; //,*image;
- int moreframes;
-
- pixels=(BYTE*)malloc(ptr->img->Size*sizeof(BYTE));
-#ifdef FULLCOLOR
- image=(BYTE*)malloc(ptr->img->Size/2*sizeof(BYTE));
-#endif
- x1=ptr->x;
- y1=ptr->y;
- x2=x1+ptr->img->Width-1;
- y2=y1+ptr->img->Height-1;
-
- moreframes=1;
- for (;;) {
- while (moreframes) {
- moreframes=GetMPEGFrame(ptr->img,pixels);
-#ifndef NOGRX
-#ifdef FULLCOLOR
- down32to16((WORD*)image,pixels,ptr->img->Size);
- grxlock();
- grx_putimage(x1, y1, x2, y2, pixels);
- grxunlock();
-#else
- grxlock();
- grx_putimage(x1, y1, x2, y2, pixels);
- grxunlock();
-#endif
-#else
- cprintf("%c",'0');
-#endif
- task_endcycle();
- }
- break;
-
- //if (!loop) break;
- //RewindMPEG (mpeg, img);
- //SetMPEGOption (img, MPEG_DITHER, GRAY_DITHER);
- //moreframes = TRUE;
- }
-
- return NULL;
-}
-
-int gvideo_init(char *title, struct gvideoinfo *ptr)
-{
- // static int groupcounter=0;
- struct info *info;
- SOFT_TASK_MODEL model;
- FILE *fin;
- PID pid,pid2;
- ImageDesc *img;
- int res;
- int i;
- int period,wcet;
- int group;
-
- img=(ImageDesc*)malloc(sizeof(ImageDesc));
- if (img==NULL) return -3;
- img->vid_stream=NULL;
- img->Colormap=NULL;
-
- info=(struct info*)malloc(sizeof(struct info));
- if (info==NULL) return -11;
- info->img=img;
- info->x=ptr->x;
- info->y=ptr->y;
-
- fin=fopen(ptr->pathname, "r");
- if (!fin) return -1;
-
- //group=STARTGROUP+groupcounter++;
- group=STARTGROUP;
- pid2=x_initbuffer(group,fin,ptr->bitrate,ptr->band*READRATE);
- if (pid2<0) return -2;
-
-#ifdef ACTIVATE
- gbuffer_init(table[fileno(fin)],group,20+12,450);
-#else
- gbuffer_init(NULL,group,20+12,450);
-#endif
-
- res=OpenMPEG(fin,img);
- if (!res) return -4;
-
-#ifdef FULLCOLOR
- SetMPEGOption(img,MPEG_DITHER,HALF_COLOR_DITHER);
-#else
- SetMPEGOption(img,MPEG_DITHER,GRAY_DITHER);
-#endif
-
- //cprintf("colrmap size=%8i\n",img->ColormapSize);
- //cprintf("picture rate=%8i\n",img->PictureRate);
- //cprintf("bit rate =%8i\n",img->BitRate);
-
-#ifndef FULLCOLOR
- if (group==STARTGROUP) {
- ColormapEntry *cp;
- cp=img->Colormap;
- for (i=0;i<img->ColormapSize;i++) {
-#ifndef NOGRX
- grxlock();
- grx_setcolor (i,img->Colormap[i].red/4,
- img->Colormap[i].green/4,
- img->Colormap[i].blue/4);
- grxunlock();
-#endif
- }
- }
-#endif
-
- draw_frame(info->x,info->y,img->Width,img->Height);
- ptr->w=img->Width;
- ptr->h=img->Height;
-
- {
- char buffer[256];
-
-#ifndef NOGRX
- grxlock();
- grx_text(title,ptr->x,ptr->y-14,COLORFG,COLORBG);
- grxunlock();
- sprintf(buffer,"Average bit rate: %i.%03i Mb/s",
- ptr->bitrate/1024/1024,(ptr->bitrate%(1024*1024))*1000/1024/1000);
- grxlock();
- grx_text(buffer,ptr->x,ptr->y+ptr->h+BO*2+2,COLORFG,COLORBG);
- grxunlock();
- sprintf(buffer,"Frame rate : %02.3f frame/sec",
- (double)ptr->framerate/100.0);
- grxlock();
- grx_text(buffer,ptr->x,ptr->y+ptr->h+BO*2+2+9,COLORFG,COLORBG);
- grxunlock();
-#endif
- }
-
- period=100000000/ptr->framerate;
- wcet=period*ptr->band*VIDEORATE/10000;
-
- soft_task_default_model(model);
- soft_task_def_met(model,wcet);
- soft_task_def_wcet(model,wcet);
- soft_task_def_period(model,period);
- soft_task_def_periodic(model);
- soft_task_def_arg(model,(void*)info);
- soft_task_def_group(model,group);
- soft_task_def_ctrl_jet(model);
-
- pid=task_create("Video",play,&model,NULL);
- if (pid==-1) return -6;
-
- return group;
-}
Index: start/fsdemo/gbuffer.c
===================================================================
--- start/fsdemo/gbuffer.c (revision 1087)
+++ start/fsdemo/gbuffer.c (nonexistent)
@@ -1,129 +0,0 @@
-/*
- *
- *
- */
-
-#include "config.h"
-
-#include <kernel/func.h>
-#include <kernel/model.h>
-#include <kernel/const.h>
-
-#include <drivers/glib.h>
-
-#include <stdlib.h>
-#include <assert.h>
-
-#include "mutex.h"
-#include "xread.h"
-
-#define PERIOD 250000
-#define WCET 1000
-
-#ifdef FULLCOLOR
-
-#define BARCOLOR rgb16(255,0,0)
-#define BARBG rgb16(0,0,0)
-
-#define TEXTCOLOR rgb16(255,255,255)
-#define TEXTBG rgb16(0,0,0)
-
-#else
-
-#define BARCOLOR 128
-#define BARBG 0
-
-#define TEXTCOLOR 255
-#define TEXTBG 0
-
-#endif
-
-//#define XC 700
-//#define YC 400
-#define LEN 100
-#define BORDER 8
-
-extern void draw_frame(int x, int y, int dx, int dy);
-
-struct taskinfo{
- int XC,YC;
- struct xbuffer *ptr;
-};
-
-static TASK monitorbuffer(void *arg)
-{
- struct taskinfo *p=(struct taskinfo *)arg;
- int XC,YC;
- int oy,y;
- struct xbuffer *ptr;
- int sum,old;
-
- ptr=p->ptr;
- XC=p->XC;
- YC=p->YC;
-
- oy=YC+LEN-1;
- for (;;) {
- sum=freespace(ptr);
-#ifndef NOGRX
- y=YC+LEN*sum/BUFFERMAXSIZE-1;
- if (y!=oy) {
- grxlock();
- if (y<oy) grx_box(XC,y,XC+BORDER-1,oy,BARCOLOR);
- else grx_box(XC,oy,XC+BORDER-1,y,BARBG);
- grxunlock();
- oy=y;
- }
-#else
- cprintf("@%i@",sum);
-#endif
- old=sum;
- task_endcycle();
- }
- return 0;
-}
-
-int gbuffer_init(struct xbuffer *ptr, int group, int XC, int YC)
-{
- struct taskinfo *info;
- SOFT_TASK_MODEL model;
- PID pid;
-
-#ifdef ACTIVATE
- info=(struct taskinfo *)malloc(sizeof(struct taskinfo));
- if (info==NULL) sys_abort(912);
- info->XC=XC;
- info->YC=YC;
- info->ptr=ptr;
-
- soft_task_default_model(model);
- soft_task_def_met(model,WCET);
- soft_task_def_wcet(model,WCET);
- soft_task_def_period(model,PERIOD);
- soft_task_def_periodic(model);
- soft_task_def_group(model,group);
- soft_task_def_arg(model,(void*)info);
- /*soft_task_def_group(model,group);*/
-
- pid=task_create("bufferload",monitorbuffer,&model,NULL);
- if (pid==-1) return -6;
-
-#else
- pid=-1;
-#endif
-
-#ifndef NOGRX
- draw_frame(XC,YC,BORDER,LEN);
- grxlock();
- grx_text("Buffer",XC-18,YC+LEN+BORDER*2,TEXTCOLOR,TEXTBG);
- grx_text("100%",XC+BORDER*2+1,YC-4,TEXTCOLOR,TEXTBG);
- grx_text(" 75%",XC+BORDER*2+1,YC+LEN/4-4,TEXTCOLOR,TEXTBG);
- grx_text(" 50%",XC+BORDER*2+1,YC+LEN/4*2-4,TEXTCOLOR,TEXTBG);
- grx_text(" 25%",XC+BORDER*2+1,YC+LEN/4*3-4,TEXTCOLOR,TEXTBG);
- grx_text(" 0%",XC+BORDER*2+1,YC+LEN-4,TEXTCOLOR,TEXTBG);
- grxunlock();
-#endif
-
- return pid;
-}
-
Index: start/fsdemo/gvideo.h
===================================================================
--- start/fsdemo/gvideo.h (revision 1087)
+++ start/fsdemo/gvideo.h (nonexistent)
@@ -1,22 +0,0 @@
-/*
- *
- *
- */
-
-#ifndef __GVIDEO_H
-#define __GVIDEO_H
-
-struct gvideoinfo {
- int x,y;
- int h,w; /* no fill */
-
- char *pathname;
-
- int bitrate; /* bytes/sec */
- int framerate; /* frames/sec */
- int band; /* CPU band in percent */
-};
-
-int gvideo_init(char *title, struct gvideoinfo *info);
-
-#endif
Index: start/fsdemo/mplay.c
===================================================================
--- start/fsdemo/mplay.c (revision 1087)
+++ start/fsdemo/mplay.c (nonexistent)
@@ -1,384 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- * Copyright (C) 1999 Luca Abeni and Massimiliano Giorgi
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * CVS : $Id: mplay.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
- *
- * File: $File$
- * Revision: $Revision: 1.1.1.1 $
- * Last update: $Date: 2002-09-02 09:37:41 $
- */
-
-#include "config.h"
-
-//#include <ll/sys/types.h>
-
-#include <kernel/func.h>
-#include <kernel/const.h>
-
-#include <trace/trace.h>
-#include <trace/queues.h>
-
-#include <drivers/glib.h>
-#include <drivers/gd.h>
-#include <drivers/keyb.h>
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <sys/types.h>
-#include <sys/mount.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "gclock.h"
-#include "gvideo.h"
-#include "gload.h"
-#include "gbuffer.h"
-#include "gphoto.h"
-#include "mutex.h"
-#include "xread.h"
-
-void ctrlc_exit(KEY_EVT *k)
-{
- extern void dump_sem_table(void);
- extern void dump_nop_table(void);
-#ifndef NOGRX
- grx_close();
-#endif
- cprintf("CTRL-C pressed!\n");
- sys_end();
-}
-
-/*
- *
- *
- *
- */
-
-int __register_sub_init_prologue(void)
-{
- // int id;
-#ifndef NOTRACE
- TRC_init_phase1(NULL);
- trc_register_fixed_queue();
- id=trc_create_queue(TRC_FIXED_QUEUE,NULL);
- trc_trace_class(TRC_CLASS_USER);
- trc_assign_class_to_queue(TRC_CLASS_USER,id);
-#endif
- return 0;
-}
-
-int __register_sub_init(void)
-{
-#if defined(EDFSCHED)
- extern void BD_EDF_register_module(void);
- BD_EDF_register_module();
-#elif defined(PSCANSCHED)
- extern void BD_PSCAN_register_module(void);
- BD_PSCAN_register_module();
-#endif
- return 0;
-}
-
-dev_t root_device=-1;
-dev_t temp_device=-1;
-
-int choose_root_callback(dev_t dev,u_int8_t fs)
-{
- if (fs==FS_MSDOS) return dev;
- return -1;
-}
-
-int choose_temp_callback(__dev_t dev,__uint8_t fs)
-{
- static int flag=0;
- if (fs==FS_MSDOS) {
- if (flag) return dev;
- flag=1;
- }
- return -1;
-}
-
-int __bdev_sub_init(void)
-{
- BDEV_PARMS bdev=BASE_BDEV;
-
- bdev_def_showinfo(bdev,FALSE);
- bdev_init(&bdev);
-
- root_device=bdev_scan_devices(choose_root_callback);
- if (root_device<0) {
- cprintf("can't find root device to mount on /!!!\n");
- sys_end();
- return -1;
- }
-
- /*
- temp_device=bdev_scan_devices(choose_temp_callback);
- if (temp_device<0) {
- cprintf("can't find a filesystem to mount on /TEMP!!!\n");
- }
- */
-
- return 0;
-}
-
-int __fs_sub_init(void)
-{
- extern int libc_initialize(void);
- FILESYSTEM_PARMS fs=BASE_FILESYSTEM;
- // struct mount_opts opts;
- // int res;
-
- filesystem_def_rootdevice(fs,root_device);
- filesystem_def_fs(fs,FS_MSDOS);
- filesystem_def_showinfo(fs,FALSE);
- filesystem_init(&fs);
-
- /*
- if (temp_device>=0) {
- memset(&opts,0,sizeof(struct mount_opts));
- opts.flags=MOUNT_FLAG_RW;
- res=mount(temp_device,FS_MSDOS,"/TEMP",&opts);
- if (res!=0) {
- cprintf("can't mount XXX on /TEMP (errno: %i)\n",errno);
- } else
- cprintf("mounted /TEMP rw\n");
- }
- */
-
- libc_initialize();
-
-#ifndef NOTRACE
- TRC_init_phase2();
-#endif
-
- return 0;
-}
-
-/*
- *
- *
- *
- */
-
-struct {
- char *filename;
- int bitrate;
- int framerate;
-} mpegs[16]={
- /* 0 */
- {"/temp/m/2jaeger.mpg", 573225, 3000}, /* 3.27 bad*/
- {"/temp/m/alien.mpg", 289000, 2500}, /* 10.12 I */
- {"/temp/m/b0.mpg", 1725251, 3000}, /* 3.33 IBBPBBPBBPBB */
- {"/temp/m/canyon.mpg", 237194, 3000}, /* 58.60 IBBPBB */
- /* 4 */
- {"/temp/m/earth-ci.mpg", 974900, 2500}, /* 28.80 IBBPBB */
- {"/temp/m/flower.mpg", 1147101, 2997}, /* 5.01 bad */
- {"/temp/m/frisco.mpg", 397262, 3000}, /* 1.70 bad */
- {"/temp/m/hulahoop.mpg", 684126, 3000}, /* 1.33 bad */
- /* 8 */
- {"/temp/m/iicm.mpg", 527308, 3000}, /* 26.70 bad */
- {"/temp/m/micky.mpg", 711240, 3000}, /* 0.66 bad */
- {"/temp/m/mobile.mpg", 114622, 2997}, /* 5.01 bad */
- {"/temp/m/redsnigh.mpg", 597776, 2500}, /* 48.40 IBBBBBBBBBPBBBBBBBBB*/
- /* 12 */
- {"/temp/m/son.mpg", 1134335, 2500}, /* 6.92 IBBPBBPBBPBB */
- {"/temp/m/stoelend.mpg", 2248942, 3000}, /* 0.53 IBBPBB */
- {"/temp/m/sukhoi.mpg", 481521, 3000}, /* 25.47 I */
- {"/temp/m/us.mpg", 681599, 3000} /* 24.37 IBBPBB */
-};
-
-#define DEFINDEX 3
-
-char *getfilename(int index)
-{
- return mpegs[index%16].filename;
-}
-
-int getbitrate(int index)
-{
- return mpegs[index%16].bitrate;
-}
-
-int getframerate(int index)
-{
- return mpegs[index%16].framerate;
-}
-
-/*
- *
- *
- *
- */
-
-#ifdef FULLCOLOR
-
-#define TEXTCOLOR rgb16(0,255,0)
-#define TEXTCOLOR2 rgb16(255,255,255)
-#define TEXTBG rgb16(0,0,0)
-
-#else
-
-#define TEXTCOLOR 255
-#define TEXTCOLOR2 255
-#define TEXTBG 0
-
-#endif
-
-#define SCREENX 800
-#define SCREENY 600
-
-#define MAINSLEEP 20000
-
-g_sem_t grxsem;
-
-int main(int argc, char *argv[])
-{
- struct gvideoinfo info;
- KEY_EVT k;
- int index;
- int mode;
- int esc;
- int pid,grp;
- // int i;
- int sx=20;
- PID ph1,ph2,ph3;
-
- g_sem_init(&grxsem,1);
-
- /*
- if (argc<2) {
- cprintf("Usage: %s mpegfileordinal\n",argv[0]);
- sys_abort(301);
- }
- */
-
- /* init the "file reader tasks" module */
- x_init();
-
- /* Init the graph... */
-#ifndef NOGRX
- if (grx_init()==-1) {
- cprintf("No init!!!\n");
- sys_abort(255);
- }
-#ifdef FULLCOLOR
- mode=grx_getmode(SCREENX,SCREENY,16);
-#else
- mode=grx_getmode(SCREENX,SCREENY,8);
-#endif
- if (mode==-1) {
- cprintf("Mode not present!!!\n");
- sys_abort(255);
- }
-#endif
-
- cprintf("[hit enter to continue]\n");
- esc=FALSE;
- while (!esc) {
- keyb_getcode(&k,BLOCK);
- if (k.ascii==13) esc=TRUE;
- }
-
-#ifndef NOGRX
- if (grx_setmode(mode) == -1) {
- cprintf("No SetMode!!!\n");
- sys_abort(255);
- }
-#endif
-
-#ifndef NOGRX
- grx_text("HARTIK 4.0 (Lego)",12*2,22,TEXTCOLOR,TEXTBG);
- grx_text("[Filesystem demo]",12*2,22+10,TEXTCOLOR,TEXTBG);
-
- grx_text("Video : 8bit/pixel",250,450,TEXTCOLOR2,TEXTBG);
- grx_text("Double buffer: YES",250,450+10,TEXTCOLOR2,TEXTBG);
- grx_text("Algorithm : FCFS",250,450+20,TEXTCOLOR2,TEXTBG);
-#endif
-
- pid=gclock_init(32+64+64,540);
- task_activate(pid);
-
- //for (i=0;i<argc-1;i++) {
-
- //index=atoi(argv[i+1]);
- index=4;
-
- info.x=sx+30;
- info.y=80;
- info.pathname=getfilename(index);
- info.bitrate=getbitrate(index);
- info.framerate=getframerate(index);
- info.band=25;
-
- grp=gvideo_init("Video: earth.mpg", &info);
- //if (grp>0) group_activate(grp);
-
- sx+=info.w+15;
- //}
-
- pid=gload_init(1);
- task_activate(pid);
-
- ph1=gphoto_show("Photo: galaxy","/temp/b/ph2a.bmp",500,25);
- ph2=gphoto_show("Photo: canyon","/temp/b/ph3a.bmp",500,225);
- ph3=gphoto_show("Photo: nicole","/temp/b/ph7a.bmp",500,425);
-
- if (grp>0) group_activate(grp);
-
- esc=0;
- while (!esc) {
- if (keyb_getcode(&k,NON_BLOCK)) {
- if(k.ascii==13) esc=1;
- else if (k.ascii=='a') task_activate(ph1);
- else if (k.ascii=='s') task_activate(ph2);
- else if (k.ascii=='d') task_activate(ph3);
- }
- task_delay(MAINSLEEP);
- }
-
-#ifndef NOGRX
- grx_close();
-#endif
-
- sys_end();
- return 0;
-}
Index: start/fsdemo/gbuffer.h
===================================================================
--- start/fsdemo/gbuffer.h (revision 1087)
+++ start/fsdemo/gbuffer.h (nonexistent)
@@ -1,9 +0,0 @@
-
-#ifndef __GBUFFER_H
-#define __GBUFFER_H
-
-#include "xread.h"
-
-int gbuffer_init(struct xbuffer *ptr, int group, int XC, int YC);
-
-#endif
Index: start/oldexamples/kernel/makefile
===================================================================
--- start/oldexamples/kernel/makefile (revision 1087)
+++ start/oldexamples/kernel/makefile (nonexistent)
@@ -1,97 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= test4 test5 test6 test7 test8 testa testc testd teste testf testg
-PROGS+= testh testi testj testk testl testm testn testo testp
-PROGS+= testq testr tests testu testw testz testss
-PROGS+= ptest1 ptest2 ptest3 ptest4 ptest5 ptest6 sysend
-PROGS+= perf1 perf2 perf3 perf4
-
-include $(BASE)/config/example.mk
-
-test4:
- make -f $(SUBMAKE) APP=test4 INIT=init1.o OTHEROBJS=
-test5:
- make -f $(SUBMAKE) APP=test5 INIT=init1.o OTHEROBJS=
-test6:
- make -f $(SUBMAKE) APP=test6 INIT=init2.o OTHEROBJS=
-test7:
- make -f $(SUBMAKE) APP=test7 INIT=init2.o OTHEROBJS=
-test8:
- make -f $(SUBMAKE) APP=test8 INIT=init2.o OTHEROBJS=
-testa:
- make -f $(SUBMAKE) APP=testa INIT=init3.o OTHEROBJS=
-testc:
- make -f $(SUBMAKE) APP=testc INIT=init4.o OTHEROBJS=
-testd:
- make -f $(SUBMAKE) APP=testd INIT=init5.o OTHEROBJS=
-teste:
- make -f $(SUBMAKE) APP=teste INIT=init6.o OTHEROBJS=
-testf:
- make -f $(SUBMAKE) APP=testf INIT=h3pi.o OTHEROBJS=
-testg:
- make -f $(SUBMAKE) APP=testg INIT=initg.o OTHEROBJS=
-testh:
- make -f $(SUBMAKE) APP=testh INIT=h3pi.o OTHEROBJS=
-testi:
- make -f $(SUBMAKE) APP=testi INIT=h3pi.o OTHEROBJS=
-testj:
- make -f $(SUBMAKE) APP=testj INIT=h3pi.o OTHEROBJS=
-testk:
- make -f $(SUBMAKE) APP=testk INIT=h3pi.o OTHEROBJS=
-testl:
- make -f $(SUBMAKE) APP=testl INIT=h3pips.o OTHEROBJS=
-testm:
- make -f $(SUBMAKE) APP=testm INIT=rm1.o OTHEROBJS=
-testn:
- make -f $(SUBMAKE) APP=testn INIT=hartik3.o OTHEROBJS=
-testo:
- make -f $(SUBMAKE) APP=testo INIT=hartik3.o OTHEROBJS=
-testp:
- make -f $(SUBMAKE) APP=testp INIT=hartik3.o OTHEROBJS=
-testq:
- make -f $(SUBMAKE) APP=testq INIT=h3pips.o OTHEROBJS=
-testr:
- make -f $(SUBMAKE) APP=testr INIT=h3pips.o OTHEROBJS=
-tests:
- make -f $(SUBMAKE) APP=tests INIT=hartik3.o OTHEROBJS=
-testu:
- make -f $(SUBMAKE) APP=testu INIT=h3pips.o OTHEROBJS=
-testw:
- make -f $(SUBMAKE) APP=testw INIT=pinit.o OTHEROBJS=
-testz:
- make -f $(SUBMAKE) APP=testz INIT=hartik3.o OTHEROBJS=
-testss:
- make -f $(SUBMAKE) APP=testss INIT=h3piss.o OTHEROBJS=
-
-
-ptest1:
- make -f $(SUBMAKE) APP=ptest1 INIT=pinit.o OTHEROBJS=
-ptest2:
- make -f $(SUBMAKE) APP=ptest2 INIT=pinit.o OTHEROBJS=
-ptest3:
- make -f $(SUBMAKE) APP=ptest3 INIT=pinit.o OTHEROBJS=
-ptest4:
- make -f $(SUBMAKE) APP=ptest4 INIT=pinit.o OTHEROBJS=
-ptest5:
- make -f $(SUBMAKE) APP=ptest5 INIT=pinit.o OTHEROBJS=
-ptest6:
- make -f $(SUBMAKE) APP=ptest6 INIT=pinit.o OTHEROBJS=
-sysend:
- make -f $(SUBMAKE) APP=sysend INIT=init1.o OTHEROBJS=
-
-perf1:
- make -f $(SUBMAKE) APP=perf1 INIT= OTHEROBJS=
-perf2:
- make -f $(SUBMAKE) APP=perf2 INIT=init5.o OTHEROBJS=
-perf3:
- make -f $(SUBMAKE) APP=perf3 INIT=init5.o OTHEROBJS=
-perf4:
- make -f $(SUBMAKE) APP=perf4 INIT= OTHEROBJS=
-
Index: start/oldexamples/kernel/perf1.c
===================================================================
--- start/oldexamples/kernel/perf1.c (revision 1087)
+++ start/oldexamples/kernel/perf1.c (nonexistent)
@@ -1,186 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: perf1.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Performance test 1:
-
- there is one RR task that is preempted N_EDF times by an EDF task.
-
- the test prints the differences of the execution time.
-
- the test have to be compiled with the one shot timer, and it does not
- use any init file.
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/rr.h"
-#include "modules/dummy.h"
-
-#define TIMESPEC_N 100
-#define RR_N 1000000000
-#define EDF_N 2500
-
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- EDF_register_level(EDF_ENABLE_ALL);
- RR_register_level(1000*1000*1000, RR_MAIN_NO, mb);
- RR_register_level(10000, RR_MAIN_YES, mb);
- dummy_register_level();
-
- return 300;
-}
-
-void *crash_RR(void *arg);
-void *crash_EDF(void *arg);
-
-void *__init__(void *arg)
-{
- int i;
-
- PID p1,p2;
-
- HARD_TASK_MODEL m_hard;
- NRT_TASK_MODEL m_nrt;
-
- TIME t[TIMESPEC_N];
-
- // JET data
- TIME sum, max, curr;
- int nact;
-
-
-
- hard_task_default_model(m_hard);
- hard_task_def_mit (m_hard,2000);
- hard_task_def_wcet (m_hard,1000);
- hard_task_def_group (m_hard,1);
- hard_task_def_ctrl_jet (m_hard);
-
- nrt_task_default_model (m_nrt);
- nrt_task_def_group (m_nrt,1);
- nrt_task_def_ctrl_jet (m_nrt);
-
- p1 = task_create("crash_EDF",crash_EDF,&m_hard,NULL);
- if (p1 == -1) {
- perror("Could not create task <crask_EDF> ...");
- sys_end();
- }
-
- p2 = task_create("crash_RR",crash_RR,&m_nrt,NULL);
- if (p2 == -1) {
- perror("Could not create task <crask_RR> ...");
- sys_end();
- }
-
- kern_cli();
- /* timespec read time */
- for (i=0; i<TIMESPEC_N; i++) {
- t[i] = ll_gettime(TIME_EXACT, NULL);
- }
- kern_sti();
-
- kern_printf("\n");
- for (i=0; i<TIMESPEC_N; i++) {
- kern_printf("%d: %ld Û", i, t[i]);
- }
- kern_printf("\n");
-
- task_activate(p2);
-
- jet_getstat(p2, &sum, &max, &nact, &curr);
- kern_printf("RR test (alone): sum=%ld, max=%ld, nact=%d, curr=%ld\n",
- sum, max, nact, curr);
- jet_delstat(p2);
-
- group_activate(1);
-
- jet_getstat(p2, &sum, &max, &nact, &curr);
- kern_printf("\nRR test : sum=%ld, max=%ld, nact=%d, curr=%ld\n",
- sum, max, nact, curr);
- jet_getstat(p1, &sum, &max, &nact, &curr);
- kern_printf("EDF test : sum=%ld, max=%ld, nact=%d, curr=%ld\n",
- sum, max, nact, curr);
-
- sys_end();
-
- return 0;
-}
-
-void *crash_RR(void *arg)
-{
- int i;
-
- for (;;) {
- for (i=0; i<RR_N; i++);
- task_sleep();
- }
- return 0;
-}
-
-void *crash_EDF(void *arg)
-{
- int i;
-
- for (;;) {
- for (i=0; i<EDF_N; i++)
- task_endcycle();
- task_sleep();
- }
- return 0;
-}
-
-// not used!!!
-int main(int argc, char **argv)
-{
- return 0;
-}
-
-
-
-
Index: start/oldexamples/kernel/test7.ori
===================================================================
--- start/oldexamples/kernel/test7.ori (revision 1087)
+++ start/oldexamples/kernel/test7.ori (nonexistent)
@@ -1,244 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: test7.ori,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 7:
-
- this is a part of the classic Hartik demo Aster.
-
- It checks:
- - jet functions
- - The EDF level with many task, with almost full bandwidth used
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules//edf.h"
-
-int num_aster = 0;
-#define ASTER_LIM 60
-#define DISPLAY_MAX 15
-#define ASTER_MAX 70
-#define STAT_Y 9
-
-//#define PER_WCET 6200
-//#define CLOCK_WCET 100
-//#define ASTER_WCET 100
-#define PER_WCET 20000
-#define CLOCK_WCET 1000
-#define ASTER_WCET 1000
-
-TASK asteroide(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 10000; // 5000 + rand()%5000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
-
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- num_aster--;
- return 0;
-}
-
-TASK aster()
-{
- PID p;
-
- HARD_TASK_MODEL m;
- int r;
- int x; // adaptive bandwidth...
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,PER_WCET);
- hard_task_def_ctrl_jet(m);
-
- x = 64;
-
- srand(7);
- while (1) {
- if (num_aster < ASTER_MAX) {
- r = (rand() % 200);
-
- hard_task_def_arg(m,(void *)((rand() % 7)+1));
- hard_task_def_mit(m, (x+r)*1000);
- p = task_create("aaa",asteroide,&m,NULL);
- if (p == -1)
- {
- if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
- printf_xy(62,3,WHITE,"adapt=%3u err=%d",freedesc,errno);
- }
- else {
- num_aster++;
- printf_xy(62,3,WHITE,"adapt=%3u ",x);//,errno);
- task_activate(p);
- x /= 2;
- if (x<50) x = 50;
- }
- }
- task_endcycle();
- }
-}
-
-TASK clock()
-{
- int s = 0, m = 0;
-
- while(1) {
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"U=%12u",EDF_usedbandwidth(0));
- task_endcycle();
-
- if (++s > 59) {
- s = 0;
- m++;
- }
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"U=%12u",EDF_usedbandwidth(0));
- task_endcycle();
- }
-}
-
-
-
-/* we consider the first ASTER_MAX + 2 tasks from the PID 2
- and plot on the screen the elapsed times... */
-TASK jetcontrol()
-{
- int i; /* a counter */
- TIME sum, max, curr, last[5];
- int nact;
- int j; /* the elements set by jet_gettable */
- PID p;
-
-
- kern_cli();
- printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
- kern_sti();
-
- for (;;) {
- for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
- if (jet_getstat(p, &sum, &max, &nact, &curr) == -1) continue;
-
- for (j=0; j<5; j++) last[j] = 0;
- jet_gettable(p, &last[0], 5);
- kern_cli();
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
- kern_sti();
- i++;
- }
- }
-}
-
-int main(int argc, char **argv)
-{
- PID p1,p2,p3; //,p4,p5,p6;
- HARD_TASK_MODEL m;
- NRT_TASK_MODEL m_nrt;
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,ASTER_WCET);
- hard_task_def_mit(m,10000);
- hard_task_def_group(m,1);
- hard_task_def_ctrl_jet(m);
-
- nrt_task_default_model(m_nrt);
- nrt_task_def_group(m_nrt,1);
- nrt_task_def_ctrl_jet(m_nrt);
-
- p1 = task_create("Aster",aster,&m,NULL);
- if (p1 == -1) {
- perror("test7.c(main): Could not create task <aster> ...");
- sys_end();
- exit(-1);
- }
-
- hard_task_def_mit(m,500000);
- hard_task_def_wcet(m,CLOCK_WCET);
- p2 = task_create("Clock",clock,&m,NULL);
- if (p2 == -1) {
- perror("test7.c(main): Could not create task <Clock> ...");
- sys_end();
- exit(-1);
- }
-
- p3 = task_create("JetControl",jetcontrol,&m_nrt,NULL);
- if (p2 == -1) {
- perror("test7.c(main): Could not create task <JetControl> ...");
- sys_end();
- exit(-1);
- }
-
- group_activate(1);
-
- {
- struct timespec t;
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
- } while (t.tv_sec < 6);
- }
- //sys_status(SCHED_STATUS);
- sys_end();
- return 0;
-}
-
Index: start/oldexamples/kernel/perf2.c
===================================================================
--- start/oldexamples/kernel/perf2.c (revision 1087)
+++ start/oldexamples/kernel/perf2.c (nonexistent)
@@ -1,401 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: perf2.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Performance Test 2:
-
- This test tries to measure the time spent into the event handlers.
- It is based on test D.
-
- WARNING: the symbol __PERF_TEST2__ must be defined into the file
- kernel/config.h
-
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-
-int num_aster = 0;
-#define ASTER_LIM 60
-#define DISPLAY_MAX 15
-#define ASTER_MAX 70
-#define STAT_Y 9
-
-#define PER_MAX 5
-#define APER_MAX 8
-
-#define PER_WCET 8200
-#define APER_WCET 20400
-#define CLOCK_WCET 1600
-#define ASTER_WCET 1600
-#define SOFT_MET 3300
-
-#define APER_REP 22000
-
-PID aper_table[APER_MAX];
-
-int shutting_down = 0;
-
-TASK asteroide(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 10000; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
-
- task_activate(aper_table[rand()%APER_MAX]);
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- //num_aster--;
-}
-
-TASK aper_asteroid(void *a)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
- int c;
-
- char s[2];
-
- c = (int)a;
- s[0] = '*'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = APER_REP; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
- s[0] = c;
- puts_xy(i,y,rand()%15+1,s);
-
- if (shutting_down) {
- kern_printf("±%d±",exec_shadow);
- return 0;
- }
-
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
-}
-
-TASK soft_aster(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 1000 + rand()%9000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
- s[0] = 1;
- puts_xy(i,y,rand()%15+1,s);
-
- task_activate(aper_table[rand()%APER_MAX]);
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- num_aster--;
- return 0;
-}
-
-TASK aster()
-{
- PID p;
-
- HARD_TASK_MODEL m;
- SOFT_TASK_MODEL m_soft;
- int r;
- int x; // adaptive bandwidth...
-
- srand(7);
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,PER_WCET);
- hard_task_def_ctrl_jet(m);
- for (x=0; x<PER_MAX; x++) {
- r = (rand() % 200);
- hard_task_def_mit(m, (64+r)*1000);
- p = task_create("per",asteroide,&m,NULL);
- if (p!=-1) task_activate(p);
- }
-
- soft_task_default_model(m_soft);
- soft_task_def_met(m_soft,SOFT_MET);
- soft_task_def_ctrl_jet(m_soft);
-
- x = 64;
-
- while (1) {
- if (num_aster < ASTER_MAX) {
- r = (rand() % 200);
-
- soft_task_def_period(m_soft, (x+r)*1000);
- p = task_create("aaa",soft_aster,&m_soft,NULL);
- if (p == -1)
- {
- if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
- printf_xy(62,3,WHITE,"adapt=%3u err=%d",freedesc,errno);
- }
- else {
- num_aster++;
- printf_xy(62,3,WHITE,"adapt=%3u ",x);//,errno);
- task_activate(p);
- x /= 2;
- if (x<50) x = 50;
- }
- }
- task_endcycle();
- }
-}
-
-TASK clock()
-{
- int s = 0, m = 0;
-
- while(1) {
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(0));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(4));
- task_endcycle();
-
- if (++s > 59) {
- s = 0;
- m++;
- }
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(0));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(4));
- task_endcycle();
- }
-}
-
-
-
-/* we consider the first ASTER_MAX + 2 tasks from the PID 2
- and plot on the screen the elapsed times... */
-TASK jetcontrol()
-{
- int i; /* a counter */
- TIME sum, max, curr, last[5];
- int nact;
- int j; /* the elements set by jet_gettable */
- PID p;
-
-
- kern_cli();
- printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
- kern_sti();
-
- for (;;) {
- for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
- if (jet_getstat(p, &sum, &max, &nact, &curr) == -1 ||
- (proc_table[p].pclass & 0xFF00) == HARD_PCLASS) continue;
-
- for (j=0; j<5; j++) last[j] = 0;
- jet_gettable(p, &last[0], 5);
- kern_cli();
- if (proc_table[p].task_level == 4)
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)CBS_get_nact(4,p), (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
- else
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
- kern_sti();
- i++;
- }
- }
-}
-
-void fine()
-{
- sys_end();
-}
-
-void exiting(void *arg)
-{
- kern_printf("EXITING");
- shutting_down = 1;
-}
-
-TIME perftime_prol[10001];
-TIME perftime_epil[10001];
-int perftime_count = 0;
-
-void perftest_stat(void *arg)
-{
- int i;
- TIME d, sum=0, max=0;
-
- for (i=0; i<9000; i++) {
- d = perftime_epil[i]-perftime_prol[i];
- sum += d;
- if (max < d) max = d;
- kern_printf("Û%ld %ldÛ",perftime_epil[i],perftime_prol[i]);
- }
- kern_printf("\n°°° perftime_count=%u sum=%lu max=%lu °°°\n",perftime_count, sum, max);
-}
-
-int main(int argc, char **argv)
-{
- PID p1,p2,p3; //,p4,p5,p6;
- HARD_TASK_MODEL m;
-// NRT_TASK_MODEL m_nrt;
- SOFT_TASK_MODEL m_aper;
- SOFT_TASK_MODEL m_soft;
- int i;
- struct timespec fineprg;
-
- kern_cli();
-
- kern_sti();
-
- sys_atrunlevel(exiting, NULL, RUNLEVEL_SHUTDOWN);
- sys_atrunlevel(perftest_stat, NULL, RUNLEVEL_BEFORE_EXIT);
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,ASTER_WCET);
- hard_task_def_mit(m,10000);
- hard_task_def_group(m,1);
- hard_task_def_ctrl_jet(m);
-
-// nrt_task_default_model(m_nrt);
-// nrt_task_def_group(m_nrt,1);
-// nrt_task_def_ctrl_jet(m_nrt);
-
- soft_task_default_model(m_soft);
- soft_task_def_met(m_soft,1000);
- soft_task_def_period(m_soft,100000);
- soft_task_def_group(m_soft,1);
- soft_task_def_ctrl_jet(m_soft);
- soft_task_def_aperiodic(m_soft);
-
-
- p1 = task_create("Aster",aster,&m,NULL);
- if (p1 == -1) {
- perror("test7.c(main): Could not create task <aster> ...");
- sys_end();
- l1_exit(-1);
- }
-
- hard_task_def_mit(m,500000);
- hard_task_def_wcet(m,CLOCK_WCET);
- p2 = task_create("Clock",clock,&m,NULL);
- if (p2 == -1) {
- perror("test7.c(main): Could not create task <Clock> ...");
- sys_end();
- l1_exit(-1);
- }
-
-// p3 = task_create("JetControl",jetcontrol,&m_nrt,NULL);
- p3 = task_create("JetControl",jetcontrol,&m_soft,NULL);
- if (p3 == -1) {
- perror("test7.c(main): Could not create task <JetControl> ...");
- sys_end();
- l1_exit(-1);
- }
-
- soft_task_default_model(m_aper);
- soft_task_def_wcet(m_aper,APER_WCET);
- soft_task_def_ctrl_jet(m_aper);
- soft_task_def_system(m_aper);
- soft_task_def_aperiodic(m_aper);
-
- for (i=0; i<APER_MAX; i++) {
- soft_task_def_level(m_aper, i/4 + 2);
- soft_task_def_arg(m_aper, (void *)(i/4 ? 'Û' : '±'));
- aper_table[i] = task_create("aper",aper_asteroid,&m_aper,NULL);
- if (aper_table[i] == -1) {
- perror("test7.c(main): Could not create task <aper> ...");
- sys_end();
- l1_exit(-1);
- }
- }
-
- task_nopreempt();
- fineprg.tv_sec = 60;
- fineprg.tv_nsec = 0;
- kern_event_post(&fineprg,fine,NULL);
- group_activate(1);
- return 0;
-}
-
Index: start/oldexamples/kernel/perf3.c
===================================================================
--- start/oldexamples/kernel/perf3.c (revision 1087)
+++ start/oldexamples/kernel/perf3.c (nonexistent)
@@ -1,434 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: perf3.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Performance Test 3:
-
- this test is based on test D.
-
- the test creates some random events. each event measure the difference
- beetween his activation time and thecurrent time.
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-
-int num_aster = 0;
-#define ASTER_LIM 60
-#define DISPLAY_MAX 15
-#define ASTER_MAX 70
-#define STAT_Y 9
-
-#define PER_MAX 5
-#define APER_MAX 8
-
-#define PER_WCET 8200
-#define APER_WCET 20400
-#define CLOCK_WCET 1600
-#define ASTER_WCET 1600
-#define SOFT_MET 3300
-
-#define APER_REP 22000
-
-PID aper_table[APER_MAX];
-
-int shutting_down = 0;
-
-TASK asteroide(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 10000; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
-
- task_activate(aper_table[rand()%APER_MAX]);
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- //num_aster--;
-}
-
-TASK aper_asteroid(void *a)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
- int c;
-
- char s[2];
-
- c = (int)a;
- s[0] = '*'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = APER_REP; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
- s[0] = c;
- puts_xy(i,y,rand()%15+1,s);
-
- if (shutting_down) {
- kern_printf("±%d±",exec_shadow);
- return 0;
- }
-
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
-}
-
-TASK soft_aster(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 1000 + rand()%9000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
- s[0] = 1;
- puts_xy(i,y,rand()%15+1,s);
-
- task_activate(aper_table[rand()%APER_MAX]);
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- num_aster--;
- return 0;
-}
-
-TASK aster()
-{
- PID p;
-
- HARD_TASK_MODEL m;
- SOFT_TASK_MODEL m_soft;
- int r;
- int x; // adaptive bandwidth...
-
- srand(7);
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,PER_WCET);
- hard_task_def_ctrl_jet(m);
- for (x=0; x<PER_MAX; x++) {
- r = (rand() % 200);
- hard_task_def_mit(m, (64+r)*1000);
- p = task_create("per",asteroide,&m,NULL);
- if (p!=-1) task_activate(p);
- }
-
- soft_task_default_model(m_soft);
- soft_task_def_met(m_soft,SOFT_MET);
- soft_task_def_ctrl_jet(m_soft);
-
- x = 64;
-
- while (1) {
- if (num_aster < ASTER_MAX) {
- r = (rand() % 200);
-
- soft_task_def_period(m_soft, (x+r)*1000);
- p = task_create("aaa",soft_aster,&m_soft,NULL);
- if (p == -1)
- {
- if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
- printf_xy(62,3,WHITE,"adapt=%3u err=%d",freedesc,errno);
- }
- else {
- num_aster++;
- printf_xy(62,3,WHITE,"adapt=%3u ",x);//,errno);
- task_activate(p);
- x /= 2;
- if (x<50) x = 50;
- }
- }
- task_endcycle();
- }
-}
-
-TASK clock()
-{
- int s = 0, m = 0;
-
- while(1) {
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(0));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(4));
- task_endcycle();
-
- if (++s > 59) {
- s = 0;
- m++;
- }
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(0));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(4));
- task_endcycle();
- }
-}
-
-
-
-/* we consider the first ASTER_MAX + 2 tasks from the PID 2
- and plot on the screen the elapsed times... */
-TASK jetcontrol()
-{
- int i; /* a counter */
- TIME sum, max, curr, last[5];
- int nact;
- int j; /* the elements set by jet_gettable */
- PID p;
-
-
- kern_cli();
- printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
- kern_sti();
-
- for (;;) {
- for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
- if (jet_getstat(p, &sum, &max, &nact, &curr) == -1 ||
- ((proc_table[p].pclass & 0xFF00) == HARD_PCLASS)) continue;
-
- for (j=0; j<5; j++) last[j] = 0;
- jet_gettable(p, &last[0], 5);
- kern_cli();
- if (proc_table[p].task_level == 4)
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)CBS_get_nact(4,p), (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
- else
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
- kern_sti();
- i++;
- }
- }
-}
-
-void fine()
-{
- sys_end();
-}
-
-void exiting(void *arg)
-{
- kern_printf("EXITING");
- shutting_down = 1;
-}
-
-
-
-
-
-struct timespec last_random_time;
-TIME max=0;
-TIME sum=0;
-int n=0;
-
-void random_event(void *arg)
-{
- struct timespec t, sub;
- TIME delta;
-
- // get the current time
- ll_gettime(TIME_EXACT, &t);
-
- // compute the delta
- SUBTIMESPEC(&t, &last_random_time, &sub);
- delta = TIMESPEC2USEC(&sub);
-
- // update the statistics
- if (max < delta) max = delta;
- sum += delta;
- n++;
-
-/* kern_printf("sub=%d.%d t=%d.%d last=%d.%d °\n",sub.tv_sec, sub.tv_nsec/1000,
- t.tv_sec, t.tv_nsec/1000,
- last_random_time.tv_sec, last_random_time.tv_nsec/1000);
-*/ //return;
- // create a new event
- if (shutting_down)
- return;
-
- delta = (rand()%30000)+100;
- ADDUSEC2TIMESPEC(delta, &t);
- TIMESPEC_ASSIGN(&last_random_time, &t);
- kern_event_post(&last_random_time, random_event, NULL);
-}
-
-void perftest_printdata(void *arg)
-{
- kern_printf("\n°°° max=%ld sum=%ld n=%d °°°",max,sum,n);
-}
-
-int main(int argc, char **argv)
-{
- PID p2; //p1,p3; //,p4,p5,p6;
- HARD_TASK_MODEL m;
-// NRT_TASK_MODEL m_nrt;
- // SOFT_TASK_MODEL m_aper;
- SOFT_TASK_MODEL m_soft;
- int i;
- struct timespec fineprg;
-
- sys_atrunlevel(exiting, NULL, RUNLEVEL_SHUTDOWN);
- sys_atrunlevel(perftest_printdata, NULL, RUNLEVEL_BEFORE_EXIT);
-
- kern_printf("\n\n");
-
- srand(1234);
- NULL_TIMESPEC(&last_random_time);
- i = rand()%30000+2000;
- ADDUSEC2TIMESPEC(i, &last_random_time);
-// last_random_time.tv_sec = 2;
-// last_random_time.tv_nsec = 0;
- kern_cli();
- kern_event_post(&last_random_time, random_event, NULL);
- kern_sti();
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,ASTER_WCET);
- hard_task_def_mit(m,10000);
- hard_task_def_group(m,1);
- hard_task_def_ctrl_jet(m);
-
-// nrt_task_default_model(m_nrt);
-// nrt_task_def_group(m_nrt,1);
-// nrt_task_def_ctrl_jet(m_nrt);
-
- soft_task_default_model(m_soft);
- soft_task_def_met(m_soft,1000);
- soft_task_def_period(m_soft,100000);
- soft_task_def_group(m_soft,1);
- soft_task_def_ctrl_jet(m_soft);
- soft_task_def_aperiodic(m_soft);
-
-/*
- p1 = task_create("Aster",aster,&m,NULL);
- if (p1 == -1) {
- perror("test7.c(main): Could not create task <aster> ...");
- sys_end();
- l1_exit(-1);
- }
-*/
- hard_task_def_mit(m,500000);
- hard_task_def_wcet(m,CLOCK_WCET);
- p2 = task_create("Clock",clock,&m,NULL);
- if (p2 == -1) {
- perror("test7.c(main): Could not create task <Clock> ...");
- sys_end();
- l1_exit(-1);
- }
-/*
-// p3 = task_create("JetControl",jetcontrol,&m_nrt,NULL);
- p3 = task_create("JetControl",jetcontrol,&m_soft,NULL);
- if (p3 == -1) {
- perror("test7.c(main): Could not create task <JetControl> ...");
- sys_end();
- l1_exit(-1);
- }
-
- soft_task_default_model(m_aper);
- soft_task_def_wcet(m_aper,APER_WCET);
- soft_task_def_ctrl_jet(m_aper);
- soft_task_def_system(m_aper);
- soft_task_def_aperiodic(m_aper);
-
- for (i=0; i<APER_MAX; i++) {
- soft_task_def_level(m_aper, i/4 + 2);
- soft_task_def_arg(m_aper, (void *)(i/4 ? 'Û' : '±'));
- aper_table[i] = task_create("aper",aper_asteroid,&m_aper,NULL);
- if (aper_table[i] == -1) {
- perror("test7.c(main): Could not create task <aper> ...");
- sys_end();
- l1_exit(-1);
- }
- }
-*/
- task_nopreempt();
- fineprg.tv_sec = 6;
- fineprg.tv_nsec = 0;
- kern_event_post(&fineprg,fine,NULL);
- group_activate(1);
- return 0;
-}
-
Index: start/oldexamples/kernel/perf4.c
===================================================================
--- start/oldexamples/kernel/perf4.c (revision 1087)
+++ start/oldexamples/kernel/perf4.c (nonexistent)
@@ -1,112 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: perf4.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Performance test 1:
-
- there is one RR task that is preempted N_EDF times by an EDF task.
-
- the test prints the differences of the execution time.
-
- the test have to be compiled with the one shot timer, and it does not
- use any init file.
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/rr.h"
-#include "modules/dummy.h"
-#include "modules/pi.h"
-
-#define TIMESPEC_N 100
-#define RR_N 1000000000
-#define EDF_N 2500
-
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- EDF_register_level(EDF_ENABLE_ALL);
- RR_register_level(1000*1000*1000, RR_MAIN_NO, mb);
- RR_register_level(10000, RR_MAIN_YES, mb);
- dummy_register_level();
-
- PI_register_module();
-
- return 1200;
-}
-
-void *crash_RR(void *arg);
-void *crash_EDF(void *arg);
-
-void *__init__(void *arg)
-{
- TIME t1, t2;
- PI_mutexattr_t a;
- mutex_t m1;
- int i;
-
- PI_mutexattr_default(a);
-
- mutex_init(&m1, &a);
-
- t1 = sys_gettime(NULL);
- for (i=0; i<1000; i++) {
- mutex_lock(&m1);
- mutex_unlock(&m1);
- }
- t2 = sys_gettime(NULL);
-
- kern_printf("t1=%ld, t2=%ld\n",t1,t2);
-
- return 0;
-}
-
-// not used !!!
-int main(int argc, char **argv)
-{
- return 0;
-}
Index: start/oldexamples/kernel/testa.c
===================================================================
--- start/oldexamples/kernel/testa.c (revision 1087)
+++ start/oldexamples/kernel/testa.c (nonexistent)
@@ -1,308 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testa.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 10 (A):
-
- this is a part of the classic Hartik demo Aster.
-
- it is based on test 7, with the use of TBS to serve a set of aperiodic
- tasks.
-
- There are APER_MAX tasks sleeping, and when an asteroide task finish
- the current activation, it activate also an aperiodic task chosen
- randomly (if the task chosen is already active, the task_activate do
- nothing!)
-
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules//edf.h"
-
-int num_aster = 0;
-#define ASTER_LIM 60
-#define DISPLAY_MAX 15
-#define ASTER_MAX 70
-#define STAT_Y 9
-
-#define APER_MAX 8
-
-#define PER_WCET 6200
-#define APER_WCET 18400
-#define CLOCK_WCET 200
-#define ASTER_WCET 200
-
-#define APER_REP 22000
-
-PID aper_table[APER_MAX];
-
-TASK asteroide(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 10000; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
-
- task_activate(aper_table[rand()%APER_MAX]);
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- num_aster--;
- return 0;
-}
-
-TASK aper_asteroid(void *a)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
- int c;
-
- char s[2];
-
- c = (int)a;
- s[0] = '*'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = APER_REP; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
- s[0] = c;
- puts_xy(i,y,rand()%15+1,s);
-
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
-}
-
-TASK aster()
-{
- PID p;
-
- HARD_TASK_MODEL m;
- int r;
- int x; // adaptive bandwidth...
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,PER_WCET);
- hard_task_def_ctrl_jet(m);
-
- x = 64;
-
- srand(7);
- while (1) {
- if (num_aster < ASTER_MAX) {
- r = (rand() % 200);
-
- hard_task_def_arg(m,(void *)((rand() % 7)+1));
- hard_task_def_mit(m, (x+r)*1000);
- p = task_create("aaa",asteroide,&m,NULL);
- if (p == -1)
- {
- if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
- printf_xy(62,3,WHITE,"adapt=%3u err=%d",freedesc,errno);
- }
- else {
- num_aster++;
- printf_xy(62,3,WHITE,"adapt=%3u ",x);//,errno);
- task_activate(p);
- x /= 2;
- if (x<50) x = 50;
- }
- }
- task_endcycle();
- }
-}
-
-TASK clock()
-{
- int s = 0, m = 0;
-
- while(1) {
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"U=%12u",EDF_usedbandwidth(0));
- task_endcycle();
-
- if (++s > 59) {
- s = 0;
- m++;
- }
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"U=%12u",EDF_usedbandwidth(0));
- task_endcycle();
- }
-}
-
-
-
-/* we consider the first ASTER_MAX + 2 tasks from the PID 2
- and plot on the screen the elapsed times... */
-TASK jetcontrol()
-{
- int i; /* a counter */
- TIME sum, max, curr, last[5];
- int nact;
- int j; /* the elements set by jet_gettable */
- PID p;
-
-
- kern_cli();
- printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
- kern_sti();
-
- for (;;) {
- for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
- if (jet_getstat(p, &sum, &max, &nact, &curr) == -1) continue;
-
- for (j=0; j<5; j++) last[j] = 0;
- jet_gettable(p, &last[0], 5);
- kern_cli();
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, (int)nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
- kern_sti();
- i++;
- }
- task_endcycle();
- }
-}
-
-int main(int argc, char **argv)
-{
- PID p1,p2;//,p3,p4,p5,p6;
- HARD_TASK_MODEL m;
- NRT_TASK_MODEL m_nrt;
- SOFT_TASK_MODEL m_aper;
- int i;
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,ASTER_WCET);
- hard_task_def_mit(m,10000);
- hard_task_def_group(m,1);
- hard_task_def_ctrl_jet(m);
-
- nrt_task_default_model(m_nrt);
- nrt_task_def_group(m_nrt,1);
- nrt_task_def_ctrl_jet(m_nrt);
-
- p1 = task_create("Aster",aster,&m,NULL);
- if (p1 == -1) {
- perror("test7.c(main): Could not create task <aster> ...");
- sys_end();
- l1_exit(-1);
- }
-
- hard_task_def_mit(m,500000);
- hard_task_def_wcet(m,CLOCK_WCET);
- p2 = task_create("Clock",clock,&m,NULL);
- if (p2 == -1) {
- perror("test7.c(main): Could not create task <Clock> ...");
- sys_end();
- l1_exit(-1);
- }
-
- soft_task_default_model(m_aper);
- soft_task_def_wcet(m_aper,APER_WCET);
- soft_task_def_ctrl_jet(m_aper);
- soft_task_def_system(m_aper);
- soft_task_def_aperiodic(m_aper);
-
- soft_task_def_level(m_aper, 2);
- aper_table[0] = task_create("JetControl",jetcontrol,&m_aper,NULL);
- if (aper_table[0] == -1) {
- perror("test7.c(main): Could not create task <JetControl> ...");
- sys_end();
- l1_exit(-1);
- }
-
- for (i=1; i<APER_MAX; i++) {
- soft_task_def_level(m_aper, i/4 + 2);
- soft_task_def_arg(m_aper, (void *)(i/4 ? 'Û' : '±'));
- aper_table[i] = task_create("aper",aper_asteroid,&m_aper,NULL);
- if (aper_table[i] == -1) {
- perror("test7.c(main): Could not create task <aper> ...");
- sys_end();
- l1_exit(-1);
- }
- }
-
-
- group_activate(1);
-
- {
- struct timespec t;
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
- } while (t.tv_sec < 6);
- }
- //sys_status(SCHED_STATUS);
- sys_end();
- return 0;
-}
-
Index: start/oldexamples/kernel/testb.c
===================================================================
--- start/oldexamples/kernel/testb.c (revision 1087)
+++ start/oldexamples/kernel/testb.c (nonexistent)
@@ -1,244 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testb.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 11 (B):
-
- CBS test, similar to Test 10
-
- There are 4 CBS aperiodic tasks and 1 periodic task.
- after 5 secs, there is another activation of two of the four tasks.
- at sec. 10 the test stops.
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-
-#if !defined(__TEST1__)
- THE TEST REQUIRE THE DEFINITION __TEST1__ IN CONFIG.C
-#endif
-
-struct timespec s_stime[10000];
-struct timespec s_send[10000];
-TIME s_curr[10000];
-PID s_PID[10000];
-int useds=0;
-int testactive=1;
-
-
-TASK pippo()
-{
- int i;
- struct timespec t;
- int last = 0;
-
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
- } while (t.tv_nsec <= 30000000L);
-}
-
-TASK pippo2()
-{
- int i;
- struct timespec t;
- int last = 0;
-
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-
- } while (t.tv_nsec <= 30000000L);
-}
-
-TASK asteroide(void)
-{
- int i;
- int y = rand() % 7 + 15;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < 60) {
- load1 = 10000; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
- task_endcycle();
-
- if (i==7) testactive = 0;
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- //num_aster--;
-}
-
-TASK aper(void *a)
-{
- int i;
- int y;
-
- int load1,j;
-
- char s[2];
-
- y = (int) a;
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < 60) {
- load1 = 600000; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
-
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- //num_aster--;
-}
-
-
-int main(int argc, char **argv)
-{
- struct timespec t;
- int i;
- NRT_TASK_MODEL m;
- HARD_TASK_MODEL m_per;
- SOFT_TASK_MODEL m_aper;
- PID p1, p2, p3, p4, p5;
- int k=1;
-
- srand(7);
-
- nrt_task_default_model(m);
- nrt_task_def_group(m,1);
-
- p1 = task_create("pippo", pippo, &m, NULL);
- if (p1 == NIL)
- { kern_printf("Can't create pippo task...\n"); }
-
- p2 = task_create("pippo2", pippo2, &m, NULL);
- if (p2 == NIL)
- { kern_printf("Can't create pippo2 task...\n"); }
-
- hard_task_default_model(m_per);
- hard_task_def_mit(m_per,15000);
- hard_task_def_wcet(m_per,6200);
- hard_task_def_group(m_per,1);
- p3 = task_create("asteroide", asteroide, &m_per, NULL);
- if (p3 == NIL)
- { kern_printf("Can't create asteroide task...\n"); }
-
- soft_task_default_model(m_aper);
- soft_task_def_met(m_aper,10000);
- soft_task_def_period(m_aper,100000);
- soft_task_def_group(m_aper,1);
- soft_task_def_system(m_aper);
- soft_task_def_arg(m_aper, 14);
- soft_task_def_aperiodic(m_aper);
- p4 = task_create("aper", aper, &m_aper, NULL);
- if (p4 == NIL)
- { kern_printf("Can't create aper task...\n"); }
-
- soft_task_def_arg(m_aper, 13);
- p5 = task_create("aper", aper, &m_aper, NULL);
- if (p5 == NIL)
- { kern_printf("Can't create aper(2) task...\n"); }
-
- soft_task_def_arg(m_aper, 12);
- p5 = task_create("aper", aper, &m_aper, NULL);
- if (p5 == NIL)
- { kern_printf("Can't create aper(2) task...\n"); }
-
- soft_task_def_arg(m_aper, 11);
- p5 = task_create("aper", aper, &m_aper, NULL);
- if (p5 == NIL)
- { kern_printf("Can't create aper(2) task...\n"); }
-
-// kern_printf("p1=%d p2=%d p3=%d p4=%d\n",p1,p2,p3,p4);
- group_activate(1);
-
-
-// task_kill(p2);
- i = 1;
-
- NULL_TIMESPEC(&t);
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-
- if (i && t.tv_sec == 5) {
- task_activate(p4);
- task_activate(p5);
- i = 0;
- }
-
-// task_kill(p3);
- } while (t.tv_sec < 10);
- testactive = 0;
-
- kern_printf("FINE MAIN time=%d useds=%d\n",ll_gettime(TIME_EXACT,NULL),useds);
- for (i=0; i<useds; i++)
- kern_printf("%6d: pid %-9d stime %-9d reschedule %-9d avail %-9d\n",i,
- s_PID[i], s_stime[i].tv_nsec, s_send[i].tv_nsec, s_curr[i]);
-
- return 0;
-}
Index: start/oldexamples/kernel/testc.c
===================================================================
--- start/oldexamples/kernel/testc.c (revision 1087)
+++ start/oldexamples/kernel/testc.c (nonexistent)
@@ -1,260 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testc.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 12 (C):
-
- CBS test, similar to Test 11
-
- then at start time two task are started, one of them
- calling task_nopreempt. when the task releases, the other exec all
- the pending activations.
- at sec. 4 the test stops.
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-
-TASK pippo()
-{
-// int i;
- struct timespec t;
-// int last = 0;
-
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
- } while (t.tv_nsec <= 30000000L);
- return 0;
-}
-
-TASK pippo2()
-{
-// int i;
- struct timespec t;
-// int last = 0;
-
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-
- } while (t.tv_nsec <= 30000000L);
- return 0;
-}
-
-TASK asteroide(void)
-{
- int i;
- int y = rand() % 7 + 15;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < 60) {
- load1 = 10000; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
-
- task_endcycle();
-
-// if (i==7) testactive = 0;
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- //num_aster--;
- return 0;
-}
-
-TASK aper(void *a)
-{
- int i;
- int y;
-
- int load1,j;
-
- char s[2];
-
- y = (int) a;
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < 60) {
- load1 = 600000; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
-
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- //num_aster--;
- return 0;
-}
-
-
-TASK per(void)
-{
- int i;
- int y = rand() % 7 + 15;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < 60) {
- load1 = 1000; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
-
- task_endcycle();
-
-// if (i==7) testactive = 0;
-
- //puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- //num_aster--;
- return 0;
-}
-
-TASK stoppa()
-{
- struct timespec t;
-
- task_nopreempt();
- kern_printf("\nTask nopreempt");
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
- } while (t.tv_sec < 3);
- kern_printf("\nTask preempt");
- task_preempt();
- kern_printf("\nFine STOPPA");
- return 0;
-}
-
-
-
-int main(int argc, char **argv)
-{
- struct timespec t;
- int i;
- NRT_TASK_MODEL m;
-// HARD_TASK_MODEL m_per;
- SOFT_TASK_MODEL m_aper;
- PID p8, p9; //p1, p2, p3, p4, p5, p6, p7,
-
-// int k=1;
-
- srand(7);
-
- nrt_task_default_model(m);
- nrt_task_def_group(m,1);
-
- soft_task_default_model(m_aper);
- soft_task_def_met(m_aper,10000);
- soft_task_def_period(m_aper,100000);
- soft_task_def_group(m_aper,1);
- soft_task_def_system(m_aper);
- soft_task_def_arg(m_aper, (void *)14);
- soft_task_def_aperiodic(m_aper);
-// soft_task_def_skip_arrivals(m_aper);
-
- soft_task_def_periodic(m_aper);
- p8 = task_create("per", per, &m_aper, NULL);
- if (p8 == NIL)
- { kern_printf("Can't create per task...\n"); }
-
- p9 = task_create("stoppa", stoppa, &m, NULL);
- if (p9 == NIL)
- { kern_printf("Can't create stoppa task...\n"); }
-
- task_activate(p8);
-
- i = 0;
-
- NULL_TIMESPEC(&t);
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-
- if (i == 0 && t.tv_sec == 1 && t.tv_nsec >= 0) {
- task_activate(p9);
- i = 1;
- }
- } while (t.tv_sec < 10);
-/*
- testactive = 0;
- kern_printf("FINE MAIN time=%d useds=%d\n",ll_gettime(TIME_EXACT,NULL),useds);
- for (i=0; i<useds; i++)
- kern_printf("%6d: pid %-9d stime %-9d reschedule %-9d avail %-9d\n",i,
- s_PID[i], s_stime[i].tv_nsec, s_send[i].tv_nsec, s_curr[i]);
-*/
- return 0;
-}
Index: start/oldexamples/kernel/testd.c
===================================================================
--- start/oldexamples/kernel/testd.c (revision 1087)
+++ start/oldexamples/kernel/testd.c (nonexistent)
@@ -1,381 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testd.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 13 (D):
-
- this is a part of the classic Hartik demo Aster.
-
- it is based on test 10 (A), and use the CBS to serve the periodic tasks.
-
- There still remain some periodic tasks, that are guaranteed basing on their
- wcet.
-
- It also tests the shutdown...
-
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-
-int num_aster = 0;
-#define ASTER_LIM 60
-#define DISPLAY_MAX 15
-#define ASTER_MAX 70
-#define STAT_Y 9
-
-#define PER_MAX 5
-#define APER_MAX 8
-
-#define PER_WCET 25000
-#define APER_WCET 53000
-#define CLOCK_WCET 1000
-#define ASTER_WCET 1000
-#define SOFT_MET 6300
-
-#define APER_REP 22000
-
-PID aper_table[APER_MAX];
-
-int shutting_down = 0;
-
-TASK asteroide(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 10000; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
-
- task_activate(aper_table[rand()%APER_MAX]);
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- //num_aster--;
-}
-
-TASK aper_asteroid(void *a)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
- int c;
-
- char s[2];
-
- c = (int)a;
- s[0] = '*'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = APER_REP; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
- s[0] = c;
- puts_xy(i,y,rand()%15+1,s);
-
- if (shutting_down) {
- kern_printf("±%d±",exec_shadow);
- return 0;
- }
-
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
-}
-
-TASK soft_aster(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 1000 + rand()%9000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
- s[0] = 1;
- puts_xy(i,y,rand()%15+1,s);
-
- task_activate(aper_table[rand()%APER_MAX]);
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- num_aster--;
- return 0;
-}
-
-TASK aster()
-{
- PID p;
-
- HARD_TASK_MODEL m;
- SOFT_TASK_MODEL m_soft;
- int r;
- int x; // adaptive bandwidth...
-
- srand(7);
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,PER_WCET);
- hard_task_def_ctrl_jet(m);
- for (x=0; x<PER_MAX; x++) {
- r = (rand() % 200);
- hard_task_def_mit(m, (64+r)*1000);
- p = task_create("per",asteroide,&m,NULL);
- if (p!=-1) task_activate(p);
- }
-
- soft_task_default_model(m_soft);
- soft_task_def_met(m_soft,SOFT_MET);
- soft_task_def_ctrl_jet(m_soft);
-
- x = 64;
-
- while (1) {
- if (num_aster < ASTER_MAX) {
- r = (rand() % 200);
-
- soft_task_def_period(m_soft, (x+r)*1000);
- p = task_create("aaa",soft_aster,&m_soft,NULL);
- if (p == -1)
- {
- if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
- printf_xy(62,3,WHITE,"adapt=%3u err=%d",freedesc,errno);
- }
- else {
- num_aster++;
- printf_xy(62,3,WHITE,"adapt=%3u ",x);//,errno);
- task_activate(p);
- x /= 2;
- if (x<50) x = 50;
- }
- }
- task_endcycle();
- }
-}
-
-TASK clock()
-{
- int s = 0, m = 0;
-
- while(1) {
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(0));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(4));
- task_endcycle();
-
- if (++s > 59) {
- s = 0;
- m++;
- }
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(0));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(4));
- task_endcycle();
- }
-}
-
-
-
-/* we consider the first ASTER_MAX + 2 tasks from the PID 2
- and plot on the screen the elapsed times... */
-TASK jetcontrol()
-{
- int i; /* a counter */
- TIME sum, max, curr, last[5];
- int nact;
- int j; /* the elements set by jet_gettable */
- PID p;
-
-
- kern_cli();
- printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
- kern_sti();
-
- for (;;) {
- for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
- if (jet_getstat(p, &sum, &max, &nact, &curr) == -1 ||
- (proc_table[p].pclass & 0xFF00) == HARD_PCLASS) continue;
-
- for (j=0; j<5; j++) last[j] = 0;
- jet_gettable(p, &last[0], 5);
- kern_cli();
- if (proc_table[p].task_level == 4)
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)CBS_get_nact(4,p), (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
- else
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
- kern_sti();
- i++;
- }
- }
-}
-
-void fine()
-{
- sys_end();
-}
-
-void exiting(void *arg)
-{
- kern_printf("EXITING");
- shutting_down = 1;
-}
-
-int main(int argc, char **argv)
-{
- PID p1,p2,p3; //,p4,p5,p6;
- HARD_TASK_MODEL m;
-// NRT_TASK_MODEL m_nrt;
- SOFT_TASK_MODEL m_aper;
- SOFT_TASK_MODEL m_soft;
- int i;
- struct timespec fineprg;
-
- sys_atrunlevel(exiting, NULL, RUNLEVEL_SHUTDOWN);
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,ASTER_WCET);
- hard_task_def_mit(m,10000);
- hard_task_def_group(m,1);
- hard_task_def_ctrl_jet(m);
-
-// nrt_task_default_model(m_nrt);
-// nrt_task_def_group(m_nrt,1);
-// nrt_task_def_ctrl_jet(m_nrt);
-
- soft_task_default_model(m_soft);
- soft_task_def_met(m_soft,1000);
- soft_task_def_period(m_soft,100000);
- soft_task_def_group(m_soft,1);
- soft_task_def_ctrl_jet(m_soft);
- soft_task_def_aperiodic(m_soft);
-
-
- p1 = task_create("Aster",aster,&m,NULL);
- if (p1 == -1) {
- perror("test7.c(main): Could not create task <aster> ...");
- sys_end();
- l1_exit(-1);
- }
-
- hard_task_def_mit(m,500000);
- hard_task_def_wcet(m,CLOCK_WCET);
- p2 = task_create("Clock",clock,&m,NULL);
- if (p2 == -1) {
- perror("test7.c(main): Could not create task <Clock> ...");
- sys_end();
- l1_exit(-1);
- }
-
-// p3 = task_create("JetControl",jetcontrol,&m_nrt,NULL);
- p3 = task_create("JetControl",jetcontrol,&m_soft,NULL);
- if (p3 == -1) {
- perror("test7.c(main): Could not create task <JetControl> ...");
- sys_end();
- l1_exit(-1);
- }
-
- soft_task_default_model(m_aper);
- soft_task_def_wcet(m_aper,APER_WCET);
- soft_task_def_ctrl_jet(m_aper);
- soft_task_def_system(m_aper);
- soft_task_def_aperiodic(m_aper);
-
- for (i=0; i<APER_MAX; i++) {
- soft_task_def_level(m_aper, i/4 + 2);
- soft_task_def_arg(m_aper, (void *)(i/4 ? 'Û' : '±'));
- aper_table[i] = task_create("aper",aper_asteroid,&m_aper,NULL);
- if (aper_table[i] == -1) {
- perror("test7.c(main): Could not create task <aper> ...");
- sys_end();
- l1_exit(-1);
- }
- }
-
- task_nopreempt();
- fineprg.tv_sec = 6;
- fineprg.tv_nsec = 0;
-// kern_event_post(&fineprg,fine,NULL);
- group_activate(1);
- return 0;
-}
-
Index: start/oldexamples/kernel/teste.c
===================================================================
--- start/oldexamples/kernel/teste.c (revision 1087)
+++ start/oldexamples/kernel/teste.c (nonexistent)
@@ -1,115 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: teste.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 14 (E):
-
- this test is a simple main() function with one other task.
-
- This test verify the correctness of the sem module.
-
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-
-#include <modules/sem.h>
-
-sem_t s;
-
-TASK pippo(void *a)
-{
- int i=0;
- struct timespec t;
-// int last = 0;
-
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-
- if (i==0 && t.tv_sec == (int)a) {
- i = 1;
- kern_printf("before sem_wait %d\n",(int)a);
- sem_wait(&s);
- kern_printf("after sem_wait %d\n",(int)a);
- }
-
- if (i==1 && t.tv_sec == 2+(int)a) {
- i = 2;
- kern_printf("before sem_post %d\n",(int)a);
- sem_post(&s);
- kern_printf("after sem_post %d\n",(int)a);
- return 0;
- }
-
-
- } while (1);
-}
-
-int main(int argc, char **argv)
-{
-// struct timespec t;
-// int i;
- NRT_TASK_MODEL m;
- PID p2,p3;
-
- nrt_task_default_model(m);
- nrt_task_def_group(m,1);
-
- nrt_task_def_arg(m,(void *)1);
- p2 = task_create("pippo1", pippo, &m, NULL);
- if (p2 == NIL)
- { kern_printf("Can't create pippo1 task...\n"); return 1; }
-
- nrt_task_def_arg(m,(void *)2);
- p3 = task_create("pippo2", pippo, &m, NULL);
- if (p3 == NIL)
- { kern_printf("Can't create pippo2 task...\n"); return 1; }
-
- sem_init(&s,0,1);
-
- group_activate(1);
-
- return 0;
-}
Index: start/oldexamples/kernel/testf.c
===================================================================
--- start/oldexamples/kernel/testf.c (revision 1087)
+++ start/oldexamples/kernel/testf.c (nonexistent)
@@ -1,128 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testf.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 15 (F):
-
- This test verify the correctness of the PI module.
-
-
- the main task (NRT) lock a PI mutex.
- then 2 tasks arrives, with priority higher than the main
-
- the first try to lock the mutex, but it can't, so the main inherit
- his priority. The second simply prints a string.
-
- If all works, the string of the second task is printed after the end of
- the first task.
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-
-mutex_t m1;
-
-
-TASK pippo1(void *a)
-{
-// int i=0;
-// struct timespec t;
-// int last = 0;
-
- kern_printf("pippo1 prima di mutex_lock\n");
- mutex_lock(&m1);
- kern_printf("pippo1 dopo mutex_lock\n");
-
- mutex_unlock(&m1);
- kern_printf("pippo1 dopo mutex_unlock\n");
- return 0;
-}
-
-TASK pippo2()
-{
- kern_printf("pippo2 Dentro pippo2\n");
- return 0;
-}
-
-int main(int argc, char **argv)
-{
-// struct timespec t;
-// int i;
- HARD_TASK_MODEL m;
- PID p2,p3;
-
- PI_mutexattr_t a;
-
- hard_task_default_model(m);
- hard_task_def_mit(m,50000);
- hard_task_def_wcet(m,10000);
- hard_task_def_group(m,1);
-
- hard_task_def_arg(m,(void *)1);
- p2 = task_create("pippo1", pippo1, &m, NULL);
- if (p2 == NIL)
- { kern_printf("Can't create pippo1 task...\n"); return 1; }
-
- hard_task_def_mit(m,100000);
- p3 = task_create("pippo2", pippo2, &m, NULL);
- if (p3 == NIL)
- { kern_printf("Can't create pippo2 task...\n"); return 1; }
-
- PI_mutexattr_default(a);
- mutex_init(&m1,&a);
-
- kern_printf("main prima di mutex_lock\n");
- mutex_lock(&m1);
- kern_printf("main dopo mutex_lock, exec=%d, exec_shadow=%d\n", exec, exec_shadow);
-
- group_activate(1);
-
- kern_printf("main dopo group_activate, exec=%d, exec_shadow=%d\n", exec, exec_shadow);
- mutex_unlock(&m1);
- kern_printf("main dopo mutex_unlock\n");
-
- mutex_destroy(&m1);
- kern_printf("main dopo mutex_destroy\n");
-
- return 0;
-}
Index: start/oldexamples/kernel/testg.c
===================================================================
--- start/oldexamples/kernel/testg.c (revision 1087)
+++ start/oldexamples/kernel/testg.c (nonexistent)
@@ -1,485 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testg.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test 16 (G):
-
- This is a part of the cbsmouse.c Hartik's example.
-
- It only prints the task scheduling in graphic mode...
-
- There is a parameter to choose the type of scheduling module
- to initialize.
-
- to init correctly the module and task bandwidth parameters, set the defines
- NUM and DEN in initg.c and testg.c and remember the "s" (soft) parameter!!!
-
- to plot the deadlines assigned by CBS or TBS, compile cbs.c or tbs.c with
- the TESTG define
- (gray dots over the mouse line are the deadlines, green dots are CBS
- shifts)
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "drivers/glib.h"
-#include "drivers/keyb.h"
-#include "drivers/mouse.h"
-
-/*--------------------------------------------------------------*/
-/* TEST ON EDF SCHEDULING */
-/*--------------------------------------------------------------*/
-
-#define LMOUSE 20
-#define LM 40 /* line of main */
-#define OFFSET 20 /* initial phase */
-#define CHAR_DIM 8 /* Height of chars in pixels */
-
-int col[3] = {2, 4, 14}; /* colors of timelines */
-int lev[3] = {80, 120, 160}; /* level of timelines */
-int ptime[3] = {10, 20, 25}; /* number of cycles */
-int period[3] = {40, 50,100}; /* tasks' periods */
-int tick = 1; /* system tick */
-int tscale = 1; /* time scale */
-TIME starttime = 0; /* Simulation start time (scaled) */
-
-char *title; /* used in initg.c */
-
-/* period[] is scaled with a factor of PERIODSCALE usec */
-#define PERIODSCALE 5000
-
-// update also initg.c!!!
-#define NUM 200
-#define DEN 64000
-
-//SEM mutex; /* Semaphore for graphix*/
-
-//#define IY(y) (480 - y)
-#define IY(y) y
-
-/*
- * mouse cursor
- *
- */
-
-#define W WHITE
-#define R RED
-#define G GREEN
-#define M MAGENTA
-
-/* shape */
-
-BYTE mycursor[16*16]= {
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,W,W,W,W,0,0,0,0,0,0,W,W,W,W,0,
- 0,W,M,0,0,0,0,0,0,0,0,0,0,M,W,0,
- 0,W,0,M,0,0,0,0,0,0,0,0,M,0,W,0,
- 0,W,0,0,M,0,0,0,0,0,0,M,0,0,W,0,
- 0,0,0,0,0,M,0,0,0,0,M,0,0,0,0,0,
- 0,0,0,0,0,0,G,G,G,G,0,0,0,0,0,0,
- 0,0,0,0,0,0,G,0,0,G,0,0,0,0,0,0,
- 0,0,0,0,0,0,G,0,0,G,0,0,0,0,0,0,
- 0,0,0,0,0,0,G,0,0,G,0,0,0,0,0,0,
- 0,0,0,0,0,0,G,G,G,G,0,0,0,0,0,0,
- 0,0,0,0,0,0,M,M,M,M,0,0,0,0,0,0,
- 0,0,0,0,0,0,M,M,M,M,0,0,0,0,0,0,
- 0,0,0,0,0,M,M,M,M,M,M,0,0,0,0,0,
- 0,0,0,0,M,M,M,M,M,M,M,M,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-};
-
-#define F 0xff
-#define B 0x00
-
-/* mask */
-BYTE mybkg[16*16]= {
- B,B,B,B,B,B,F,F,F,F,B,B,B,B,B,B,
- B,0,0,0,0,B,F,F,F,F,B,0,0,0,0,B,
- B,0,0,B,B,F,F,F,F,F,B,B,B,0,0,B,
- B,0,B,0,B,F,F,F,F,F,F,B,0,B,0,B,
- B,0,B,B,0,B,F,F,F,F,B,0,B,B,0,B,
- B,B,B,F,B,0,B,B,B,B,0,B,F,B,B,B,
- F,F,F,F,F,B,0,0,0,0,B,F,F,F,F,F,
- F,F,F,F,F,B,0,B,B,0,B,F,F,F,F,F,
- F,F,F,F,F,B,0,B,B,0,B,F,F,F,F,F,
- F,F,F,F,F,B,0,B,B,0,B,F,F,F,F,F,
- F,F,F,F,F,B,0,0,0,0,B,F,F,F,F,F,
- F,F,F,F,F,B,0,0,0,0,B,F,F,F,F,F,
- F,F,F,F,F,B,0,0,0,0,B,F,F,F,F,F,
- F,F,F,F,B,0,0,0,0,0,0,B,F,F,F,F,
- F,F,F,B,0,0,0,0,0,0,0,0,B,F,F,F,
- F,F,F,B,B,B,B,B,B,B,B,B,B,F,F,F,
-};
-
-#undef B
-#define B 0xff
-
-/* bad mask */
-BYTE mybadbkg[16*16]= {
- B,B,B,B,B,B,F,F,F,F,B,B,B,B,B,B,
- B,0,0,0,0,B,F,F,F,F,B,0,0,0,0,B,
- B,0,0,B,B,F,F,F,F,F,B,B,B,0,0,B,
- B,0,B,0,B,F,F,F,F,F,F,B,0,B,0,B,
- B,0,B,B,0,B,F,F,F,F,B,0,B,B,0,B,
- B,B,B,F,B,0,B,B,B,B,0,B,F,B,B,B,
- F,F,F,F,F,B,0,0,0,0,B,F,F,F,F,F,
- F,F,F,F,F,B,0,B,B,0,B,F,F,F,F,F,
- F,F,F,F,F,B,0,B,B,0,B,F,F,F,F,F,
- F,F,F,F,F,B,0,B,B,0,B,F,F,F,F,F,
- F,F,F,F,F,B,0,0,0,0,B,F,F,F,F,F,
- F,F,F,F,F,B,0,0,0,0,B,F,F,F,F,F,
- F,F,F,F,F,B,0,0,0,0,B,F,F,F,F,F,
- F,F,F,F,B,0,0,0,0,0,0,B,F,F,F,F,
- F,F,F,B,0,0,0,0,0,0,0,0,B,F,F,F,
- F,F,F,B,B,B,B,B,B,B,B,B,B,F,F,F,
-};
-
-/* very bad mask */
-BYTE myverybadbkg[16*16]= {
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
- F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
-};
-
-
-/*--------------------------------------------------------------*/
-/* Prints a grid to show task periods during execution */
-/*--------------------------------------------------------------*/
-
-void print_grid()
-{
- int i;
- int a1, a2, a3;
- int temp;
-// char str[50];
-
- a1 = 0;
- a2 = 0;
- a3 = 0;
- temp = 0;
-
- grx_text(title, 0, 240-10 ,10, 0);
-
- grx_line(OFFSET, lev[0], 639, lev[0], 5);
- grx_line(OFFSET, lev[1], 639, lev[1], 5);
- grx_line(OFFSET, lev[2], 639, lev[2], 5);
- grx_text("T1", 0, lev[0]-8, 9, 0);
- grx_text("T2", 0, lev[1]-8, 9, 0);
- grx_text("T3", 0, lev[2]-8, 9, 0);
- grx_text("MA", 0, LM, 8, 0);
- grx_text("MO", 0, LMOUSE, 8, 0);
-
- for (i = OFFSET; i < 640; i++) {
- if (temp >= a1) {
- grx_line(i, lev[0] - 1, i, lev[0] - 20, 3);
- a1 += period[0];
- }
- if (temp >= a2) {
- grx_line(i, lev[1] - 1, i, lev[1] - 20, 3);
- a2 += period[1];
- }
- if (temp >= a3) {
- grx_line(i, lev[2] - 1, i, lev[2] - 20, 3);
- a3 += period[2];
- }
- temp += tick/tscale;
- }
-}
-
-/*--------------------------------------------------------------*/
-/* This function is called at system termination */
-/*--------------------------------------------------------------*/
-
-void my_end()
-{
- grx_close();
-// sys_status(0xFFFF);
-// sys_end();
-}
-
-/*--------------------------------------------------------------*/
-/* GENERIC PERIODIC PROCESS */
-/*--------------------------------------------------------------*/
-
-TASK color(int k)
-{
- int i;
- DWORD x = OFFSET;
- TIME t;
- while ( x < 640L) {
- for (i = 0; i < ptime[k]; i++) {
-
- t = sys_gettime(NULL) / PERIODSCALE;
- x = (t - starttime) + OFFSET;
- if (x>=640) break;
- //sem_wait(mutex, BLOCK);
- kern_cli();
- grx_plot(x, lev[k] - 4, col[k]);
- grx_plot(x, lev[k] - 5, col[k]);
- grx_plot(x, lev[k] - 6, col[k]);
- grx_plot(x, lev[k] - 7, col[k]);
- //sem_signal(mutex);
- kern_sti();
- while (sys_gettime(NULL)/PERIODSCALE == t);
- }
- task_endcycle();
- }
- return 0;
-}
-
-void my_mouse_handler(MOUSE_EVT *ev)
-{
- int x;
-
- x = (sys_gettime(NULL)/PERIODSCALE - starttime) + OFFSET;
- if (x>=640) return;
- //sem_wait(mutex, BLOCK);
- grx_plot(x, LMOUSE, 8);
- //while (sys_ticks()==s);
- //sem_signal(mutex);
-}
-
-/*--------------------------------------------------------------*/
-/* MAIN PROCESS */
-/*--------------------------------------------------------------*/
-
-int main(int argc, char *argv[])
-{
- int i;
- int x = OFFSET;
-
- MOUSE_PARMS mouse = BASE_MOUSE;
- HARD_TASK_MODEL mouse_hard;
- SOFT_TASK_MODEL mouse_soft;
- NRT_TASK_MODEL mouse_nrt;
-
- char c;
- KEY_EVT emerg;
-
- HARD_TASK_MODEL m_per;
- int modenum;
-
- //sys_def_nocheck(si);
- //sys_def_tick(si, tick, mSec);
- //sys_init(&si);
-
- //cprintf("Sys GetTick... %lu 100000 / sys_tick: %lu \n", sys_gettick(), 100000 / sys_gettick());
-
- if (argc>=3)
- switch(*argv[2]) {
- case 'h':
- /* this is not correct, because it don't remember activations */
- hard_task_default_model(mouse_hard);
- hard_task_def_mit(mouse_hard,DEN);
- hard_task_def_wcet(mouse_hard,NUM);
- hard_task_def_system(mouse_hard);
- hard_task_def_aperiodic(mouse_hard);
- mouse_def_task(mouse,(TASK_MODEL *)&mouse_hard);
- break;
- case 's':
- soft_task_default_model(mouse_soft);
- soft_task_def_wcet(mouse_soft,NUM);
- soft_task_def_met(mouse_soft,NUM);
- soft_task_def_period(mouse_soft,DEN);
- soft_task_def_system(mouse_soft);
- soft_task_def_aperiodic(mouse_soft);
- mouse_def_task(mouse,(TASK_MODEL *)&mouse_soft);
- break;
- case 'n':
- /* this is not correct, because it don't remember activations */
- nrt_task_default_model(mouse_nrt);
- nrt_task_def_system(mouse_nrt);
- mouse_def_task(mouse,(TASK_MODEL *)&mouse_nrt);
- break;
- default:
- argc=0;
- break;
- }
- mouse_def_ms(mouse,0);
-
- if (argc>=4) {
- period[0]=atoi(argv[3]);
- if (period[0]<ptime[0]) period[0]=ptime[0]+5;
- }
- if (argc>=5) {
- period[1]=atoi(argv[4]);
- if (period[1]<ptime[1]) period[1]=ptime[1]+5;
- }
- if (argc>=6) {
- period[2]=atoi(argv[5]);
- if (period[2]<ptime[2]) period[2]=ptime[2]+5;
- }
-
- if (argc<2) {
- cprintf("syntax: x testg <config> <mouse-task> [t1] [t2] [t3]\n");
- cprintf("where <config> can be:\n");
- cprintf("\t0 - EDF + CBS + RR\n");
- cprintf("\t1 - RM + PS ( bkg, U=1/16) + RR, no check Ulub < 0.69\n");
- cprintf("\t2 - RM + PS (nobkg, U=1/16) + RR, no check Ulub < 0.69\n");
- cprintf("\t3 - EDF + PS ( bkg, U=1/16) + RR\n");
- cprintf("\t4 - EDF + PS (nobkg, U=1/16) + RR\n");
- cprintf("\t5 - EDF + TBS( U=1/16) + RR\n");
- cprintf("\t6 - RM + DS ( bkg, U=1/16) + RR, no check Ulub < 0.69\n");
- cprintf("\t7 - RM + DS (nobkg, U=1/16) + RR, no check Ulub < 0.69\n");
- cprintf("\nwhere <mouse-task> can be:\n");
- cprintf("\th - Hard\n");
- cprintf("\ts - Soft (understimated wcet)\n");
- cprintf("\tn - NRT\n");
- sys_end();
- return -1;
- }
-
- if (grx_init() == -1) {
- cprintf("Error initing GraphLib!!!\n");
- sys_end();
- }
- modenum = grx_getmode(640, 480, 8);
- cprintf("Modenum :%d\n", modenum);
-
- if (grx_setmode(modenum) == -1) {
- cprintf("No SetMode!!!\n");
- sys_end();
- }
- /* */
-// grx_close();
- print_grid();
- #define DX (640/5-1)
- grx_box(DX*0,240,DX*1-1,479,GREEN);
- grx_box(DX*1,240,DX*2-1,479,WHITE);
- grx_box(DX*2,240,DX*3-1,479,RED);
- grx_box(DX*3,240,DX*4-1,479,MAGENTA);
- grx_box(DX*4,240,DX*5-1,479,BLACK);
-
- for (i=0;i<3;i++) {
- period[i]=period[i]*PERIODSCALE;
- //ptime[i]=ptime[i] *PERIODSCALE; ptime is not scaled
- }
-
- sys_atrunlevel(my_end, NULL, RUNLEVEL_BEFORE_EXIT);
-
- /* mutex */
-// mutex = sem_create(1);
-
- /* keyboard */
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,(void (*)(KEY_EVT *))sys_end);
- keyb_getchar();
-
- /* mouse */
- mouse_init(&mouse);
- mouse_limit(XMINLIMIT(640,480),
- 240,
- XMAXLIMIT(640,480),
- YMAXLIMIT(640,480));
- mouse_position(320,280);
- mouse_threshold(2);
- //grx_setcolor(255,255,255,255);
- mouse_grxshape(mycursor,mybkg);
- mouse_grxcursor(ENABLE);
- mouse_on();
- mouse_hook(my_mouse_handler);
-
- /* hard task creation */
-
- hard_task_default_model(m_per);
- hard_task_def_mit(m_per,period[0]);
- hard_task_def_wcet(m_per,ptime[0]*PERIODSCALE);
- hard_task_def_group(m_per, 1);
- //task_def_wcet(m, ptime[0] * sys_tick);
- if (task_create("verde", color, &m_per, NULL) == -1) {
- grx_close();
- perror("Edf.C(main) Could not create <green>:");
- sys_end();
- l1_exit(-1);
- }
- hard_task_def_arg(m_per, (void *)1);
- hard_task_def_wcet(m_per, ptime[1]*PERIODSCALE);
- hard_task_def_mit(m_per,period[1]);
- if (task_create("red", color, &m_per, NULL) == -1) {
- grx_close();
- perror("Edf.C(main) Could not create <red>:");
- sys_end();
- l1_exit(-1);
- }
- hard_task_def_arg(m_per, (void *)2);
- hard_task_def_wcet(m_per, ptime[2]*PERIODSCALE);
- hard_task_def_mit(m_per,period[2]);
- if (task_create("yellow", color, &m_per, NULL) == -1) {
- grx_close();
- perror("Edf.C(main) Could not create <yellow>:");
- sys_end();
- l1_exit(-1);
- }
- starttime = sys_gettime(NULL) / PERIODSCALE;
- group_activate(1);
-
- /* main loop */
- while (x < 640L) {
- x = (sys_gettime(NULL)/PERIODSCALE - starttime) + OFFSET;
- if (x>=640) break;
- //sem_wait(mutex, BLOCK);
- kern_cli();
- grx_plot(x, LM, 7);
- kern_sti(); // sem_signal(mutex);
- }
-
- c = keyb_getchar();
- return 0;
-}
-
-/*--------------------------------------------------------------*/
Index: start/oldexamples/kernel/testh.c
===================================================================
--- start/oldexamples/kernel/testh.c (revision 1087)
+++ start/oldexamples/kernel/testh.c (nonexistent)
@@ -1,493 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testh.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 17 (h):
-
- this is a part of the classic Hartik demo Aster.
-
- it is based on test 13 (d), and use the CBS to serve the periodic tasks.
-
- There are not periodic tasks, only CBS tasks.
-
- The tasks use a PI, NPP or NOP mutex to access the video memory.
-
- A flag (LONGSC) is provided to try long and short critical sections.
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-#include "drivers/keyb.h"
-
-int num_aster = 0;
-#define ASTER_LIM 60
-#define DISPLAY_MAX 15
-#define ASTER_MAX 70
-#define STAT_Y 9
-
-#define PER_MAX 5
-#define APER_MAX 8
-
-#define PER_WCET 6200
-#define APER_WCET 18400
-#define JET_WCET 10000
-#define JET_PERIOD 100000
-
-#define APER_REP 22000
-
-//PID aper_table[APER_MAX];
-
-mutex_t m1;
-
-
-#define PIMUTEX
-//#define NPPMUTEX
-//#define NOPMUTEX
-
-#define LONGSC
-
-#ifdef LONGSC
-#define SOFT_MET 3000 /* 3000 12000 */
-#define CLOCK_WCET 400 /* 200 300*/
-#define ASTER_WCET 400 /* 200 300*/
-#else
-#define SOFT_MET 80000 /* 4500 */
-#define CLOCK_WCET 2000 /* 200*/
-#define ASTER_WCET 2000 /* 200*/
-#endif
-
-TASK asteroide(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 10000; //8000 + rand()%2000;
- #ifdef LONGSC
- mutex_lock(&m1);
- #endif
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- #ifndef LONGSC
- mutex_lock(&m1);
- #endif
- puts_xy(i,y,rand()%15+1,s);
- #ifndef LONGSC
- mutex_unlock(&m1);
- #endif
- }
- #ifdef LONGSC
- mutex_unlock(&m1);
- #endif
-
-// task_activate(aper_table[rand()%APER_MAX]);
- task_endcycle();
-
- mutex_lock(&m1);
- puts_xy(i,y,WHITE," ");
- mutex_unlock(&m1);
- i++;
- }
- }
- //num_aster--;
-}
-
-TASK aper_asteroid(void *a)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
- int c;
-
- char s[2];
-
- c = (int)a;
- s[0] = '*'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = APER_REP; //8000 + rand()%2000;
- #ifdef LONGSC
- mutex_lock(&m1);
- #endif
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- #ifndef LONGSC
- mutex_lock(&m1);
- #endif
- puts_xy(i,y,rand()%15+1,s);
- #ifndef LONGSC
- mutex_unlock(&m1);
- #endif
- }
- s[0] = c;
- #ifndef LONGSC
- mutex_lock(&m1);
- #endif
- puts_xy(i,y,rand()%15+1,s);
- mutex_unlock(&m1);
-
- task_endcycle();
-
- mutex_lock(&m1);
- puts_xy(i,y,WHITE," ");
- mutex_unlock(&m1);
- i++;
- }
- }
-}
-
-TASK soft_aster(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 1000 + rand()%9000;
- #ifdef LONGSC
- mutex_lock(&m1);
- #endif
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- #ifndef LONGSC
- mutex_lock(&m1);
- #endif
- puts_xy(i,y,rand()%15+1,s);
- #ifndef LONGSC
- mutex_unlock(&m1);
- #endif
- }
- s[0] = 1;
- #ifndef LONGSC
- mutex_lock(&m1);
- #endif
- puts_xy(i,y,rand()%15+1,s);
- mutex_unlock(&m1);
-
-// task_activate(aper_table[rand()%APER_MAX]);
- task_endcycle();
-
- mutex_lock(&m1);
- puts_xy(i,y,WHITE," ");
- mutex_unlock(&m1);
- i++;
- }
- }
- num_aster--;
- return 0;
-}
-
-TASK aster()
-{
- PID p;
-// HARD_TASK_MODEL m;
- SOFT_TASK_MODEL m_soft;
- int r;
- int x; // adaptive bandwidth...
-
- srand(7);
-
-/* periodic_task_default_model(m,0,PER_WCET);
- periodic_task_def_ctrl_jet(m);
- for (x=0; x<PER_MAX; x++) {
- r = (rand() % 200);
- periodic_task_def_period(m, (64+r)*1000);
- p = task_create("per",asteroide,&m,NULL);
- if (p!=-1) task_activate(p);
- }
-*/
- soft_task_default_model(m_soft);
- soft_task_def_met(m_soft,SOFT_MET);
- soft_task_def_ctrl_jet(m_soft);
-
- x = 128; //64;
-
- while (1) {
-/* {
- PID p;
- int x;
- p = level_table[0]->level_scheduler(0);
- printf_xy(1,8,WHITE," ");
-
- x = 0;
- do {
- printf_xy(3*x+1,8,WHITE,"%3d",p);
- p = proc_table[p].next;
- x++;
- } while (p != NIL);
- }
-*/
- if (num_aster < ASTER_MAX) {
- r = (rand() % 200);
-
- soft_task_def_period(m_soft, (x+r)*1000);
- p = task_create("aaa",soft_aster,&m_soft,NULL);
- if (p == -1)
- {
- if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
- mutex_lock(&m1);
- printf_xy(62,3,WHITE,"adapt=%3u err=%d",freedesc,errno);
- mutex_unlock(&m1);
- }
- else {
- num_aster++;
- mutex_lock(&m1);
- printf_xy(62,3,WHITE,"adapt=%3u ",x);//,errno);
- mutex_unlock(&m1);
-
- task_activate(p);
- x /= 2;
- if (x<50) x = 50;
- }
- }
- task_endcycle();
- }
-}
-
-TASK clock()
-{
- int s = 0, m = 0;
-
- while(1) {
- mutex_lock(&m1);
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(0));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(2));
-
- mutex_unlock(&m1);
- task_endcycle();
-
- if (++s > 59) {
- s = 0;
- m++;
- }
- mutex_lock(&m1);
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(0));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(2));
- mutex_unlock(&m1);
- task_endcycle();
- }
-}
-
-
-
-/* we consider the first ASTER_MAX + 2 tasks from the PID 2
- and plot on the screen the elapsed times... */
-TASK jetcontrol()
-{
- int i; /* a counter */
- TIME sum, max, curr, last[5];
- int nact;
- int j; /* the elements set by jet_gettable */
- PID p;
-
-
- mutex_lock(&m1);
- printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
- mutex_unlock(&m1);
-
- for (;;) {
- for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
- if (jet_getstat(p, &sum, &max, &nact, &curr) == -1 /*||
- (proc_table[p].pclass & 0xFF00) == APERIODIC_PCLASS ||
- (proc_table[p].pclass & 0xFF00) == PERIODIC_PCLASS*/ ) continue;
-
- for (j=0; j<5; j++) last[j] = 0;
- jet_gettable(p, &last[0], 5);
- mutex_lock(&m1);
- if (proc_table[p].task_level == 2)
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³p%-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)CBS_get_nact(2,p), (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
-// p, sum/(nact==0 ? 1 : nact), max, proc_table[p].avail_time, proc_table[p].status, proc_table[p].shadow, proc_table[p].timespec_priority.tv_sec,proc_table[p].timespec_priority.tv_nsec/1000 , CBS_get_nact(2,p), last[4]);
- else
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
-// p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)proc_table[p].status, (int)proc_table[p].shadow, (int)proc_table[p].timespec_priority.tv_sec,(int)proc_table[p].timespec_priority.tv_nsec/1000 , (int)last[3], (int)last[4]);
- mutex_unlock(&m1);
- i++;
- }
- }
-}
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-int main(int argc, char **argv)
-{
- PID p1,p2,p3;//,p4,p5,p6;
- HARD_TASK_MODEL m;
-// NRT_TASK_MODEL m_nrt;
- SOFT_TASK_MODEL m_aper;
- SOFT_TASK_MODEL m_soft;
-// int i;
- struct timespec fineprg;
-
- #ifdef PIMUTEX
- PI_mutexattr_t a;
- #endif
-
- #ifdef NPPMUTEX
- NPP_mutexattr_t a;
- #endif
-
- #ifdef NOPMUTEX
- NOP_mutexattr_t a;
- #endif
-
-
- KEY_EVT emerg;
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,ASTER_WCET);
- hard_task_def_mit(m,100000);
- hard_task_def_group(m,1);
- hard_task_def_ctrl_jet(m);
-
-// nrt_task_default_model(m_nrt);
-// nrt_task_def_group(m_nrt,1);
-// nrt_task_def_ctrl_jet(m_nrt);
-
-
- soft_task_default_model(m_aper);
- soft_task_def_group(m_aper,1);
- soft_task_def_ctrl_jet(m_aper);
- soft_task_def_aperiodic(m_aper);
-
- soft_task_default_model(m_soft);
- soft_task_def_period(m_soft,JET_PERIOD);
- soft_task_def_met(m_soft,JET_WCET);
- soft_task_def_group(m_soft,1);
- soft_task_def_ctrl_jet(m_soft);
- soft_task_def_aperiodic(m_soft);
-
-
- p1 = task_create("Aster",aster,&m,NULL);
- if (p1 == -1) {
- perror("test7.c(main): Could not create task <aster> ...");
- sys_end();
- l1_exit(-1);
- }
-
- hard_task_def_mit(m,500000);
- hard_task_def_wcet(m,CLOCK_WCET);
- p2 = task_create("Clock",clock,&m,NULL);
- if (p2 == -1) {
- perror("test7.c(main): Could not create task <Clock> ...");
- sys_end();
- l1_exit(-1);
- }
-
-// p3 = task_create("JetControl",jetcontrol,&m_nrt,NULL);
- p3 = task_create("JetControl",jetcontrol,&m_soft,NULL);
- if (p2 == -1) {
- perror("test7.c(main): Could not create task <JetControl> ...");
- sys_end();
- l1_exit(-1);
- }
-/*
- aperiodic_task_default_model(m_aper,APER_WCET);
- aperiodic_task_def_ctrl_jet(m_aper);
- aperiodic_task_def_system(m_aper);
-
- for (i=0; i<APER_MAX; i++) {
- aperiodic_task_def_level(m_aper, i/4 + 2);
- aperiodic_task_def_arg(m_aper, (i/4 ? 'Û' : '±'));
- aper_table[i] = task_create("aper",aper_asteroid,&m_aper,NULL);
- if (aper_table[i] == -1) {
- perror("test7.c(main): Could not create task <aper> ...");
- sys_end();
- l1_exit(-1);
- }
- }
-*/
- task_nopreempt();
-
- #ifdef PIMUTEX
- PI_mutexattr_default(a);
- #endif
-
- #ifdef NPPMUTEX
- NPP_mutexattr_default(a);
- #endif
-
- #ifdef NOPMUTEX
- NOP_mutexattr_default(a);
- #endif
-
- mutex_init(&m1, &a);
-
- fineprg.tv_sec = 1800;
- fineprg.tv_nsec = 0;
- //kern_event_post(&fineprg,(void (*)(void *))fine,NULL);
- group_activate(1);
- return 0;
-}
-
Index: start/oldexamples/kernel/testi.c
===================================================================
--- start/oldexamples/kernel/testi.c (revision 1087)
+++ start/oldexamples/kernel/testi.c (nonexistent)
@@ -1,234 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testi.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 18 (I):
-
- This test verify the correctness of the PC module.
-
- The test uses 3 mutexes
- m0 with ceiling 0
- m1 with ceiling 0
- m2 with ceiling 1
-
- the main task (NRT) creates three tasks.
-
- J0 with PC priority 0
- starts at t=1.5 sec and lock m0, unlock m0, then lock and unlock m1
-
- J1 with PC priority 1
- starts at t=0.5 sec and try to lock m2
-
- J2 with PC priority 2
- it starts and locks m2
- at t=1 sec it locks m1
- at t=1.5 sec it unlocks m1
-
-
- The example is similar to the scheduling diagram shown at p. 197 of the
- book "Sistemi in tempo Reale", by Giorgio Buttazzo, Pitagora Editrice
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "drivers/keyb.h"
-
-mutex_t m0,m1,m2;
-
-
-TIME gt(void)
-{
- TIME t;
- kern_cli();
- t = ll_gettime(TIME_EXACT,NULL);
- kern_sti();
- return t;
-}
-
-void startJ(void *a)
-{
-// task_activate((PID)a);
- PID p = (PID) a;
- LEVEL l;
-
- kern_printf("startJ: %d\n",p);
-
- l = proc_table[p].task_level;
- level_table[l]->task_activate(l,p);
- event_need_reschedule();
-}
-
-TASK j0()
-{
- kern_printf("J0: before locking m0\n");
- mutex_lock(&m0);
- kern_printf("J0: locked m0\n");
- mutex_unlock(&m0);
- kern_printf("J0: unlocked m0, locking m1\n");
-
- mutex_lock(&m1);
- kern_printf("J0: locked m1\n");
- mutex_unlock(&m1);
- kern_printf("J0: unlocked m1, end task\n");
- return 0;
-}
-
-
-TASK j1()
-{
- kern_printf("J1: before locking m2\n");
- mutex_lock(&m2);
- kern_printf("J1: locked m2\n");
- mutex_unlock(&m2);
- kern_printf("J1: unlocked m2, end task\n");
- return 0;
-}
-
-
-TASK j2()
-{
-// struct timespec t;
- kern_printf("J2: before locking m2\n");
- mutex_lock(&m2);
- kern_printf("J2: locked m2, waiting to t=1 sec\n");
-
- while (gt() < 1000000);
-
- kern_printf("J2: t = 1 sec reached\n");
- mutex_lock(&m1);
- kern_printf("J2: locked m1, waiting to t=2 sec\n");
-
- while (gt() < 2000000);
-
- kern_printf("J2: t = 2 sec reached\n");
- mutex_unlock(&m1);
- kern_printf("J2: unlocked m1\n");
-
- mutex_unlock(&m2);
- kern_printf("J2: unlocked m2, end task\n");
- return 0;
-}
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-
-int main(int argc, char **argv)
-{
- struct timespec t;
-
- HARD_TASK_MODEL m;
- PID p0,p1,p2;
-
- PC_mutexattr_t a;
- PI_mutexattr_t a2;
- PC_RES_MODEL r;
-
- KEY_EVT emerg;
-
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
- /* ---------------------------------------------------------------------
- Task creation
- --------------------------------------------------------------------- */
-
- hard_task_default_model(m);
- hard_task_def_mit(m, 1000000);
- hard_task_def_wcet(m, 20000);
- PC_res_default_model(r,0);
- p0 = task_create("J0", j0, &m, &r);
- if (p0 == NIL)
- { kern_printf("Can't create J0 task...\n"); return 1; }
-
- hard_task_default_model(m);
- hard_task_def_mit(m, 2100000);
- hard_task_def_wcet(m, 20000);
- PC_res_default_model(r,1);
- p1 = task_create("J1", j1, &m, &r);
- if (p1 == NIL)
- { kern_printf("Can't create J1 task...\n"); return 1; }
-
- hard_task_default_model(m);
- hard_task_def_mit(m, 10000000);
- hard_task_def_wcet(m, 3000000);
- PC_res_default_model(r,2);
- p2 = task_create("J2", j2, &m, &r);
- if (p2 == NIL)
- { kern_printf("Can't create J2 task...\n"); return 1; }
-
- /* ---------------------------------------------------------------------
- Mutex creation
- --------------------------------------------------------------------- */
-
- PI_mutexattr_default(a2);
- PC_mutexattr_default(a,0);
- mutex_init(&m0,(mutexattr_t *)&a);
- mutex_init(&m1,(mutexattr_t *)&a);
-
- PC_mutexattr_default(a,1);
- mutex_init(&m2,(mutexattr_t *)&a);
-
- /* ---------------------------------------------------------------------
- Event post
- --------------------------------------------------------------------- */
-
- t.tv_sec = 0;
- t.tv_nsec = 500000000;
-// t.tv_nsec = 30000000;
- kern_event_post(&t,startJ,(void *)p1);
-
- t.tv_sec = 1;
- kern_event_post(&t,startJ,(void *)p0);
-
- task_activate(p2);
-
- kern_printf("END main\n");
-
- return 0;
-}
Index: start/oldexamples/kernel/testj.c
===================================================================
--- start/oldexamples/kernel/testj.c (revision 1087)
+++ start/oldexamples/kernel/testj.c (nonexistent)
@@ -1,268 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testj.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 19 (J):
-
- This test verify the correctness of the SRP module.
-
- There are 3 taks, Jh, Jm, Jl that uses 3 mutexes m1, m2, m3
-
- the main task (NRT) creates the three tasks.
-
- Jh with preemption level 3
- starts at t=1.5 sec and lock m3, lock m1, unlock m1, unlock m3
-
- Jm with preemption level 2
- starts at t=0.5 sec and lock m3, lock m2, unlock m2, unlock m3
- then lock and unlock m1
-
- Jl with preemption level 1
- it starts and locks m2
- at t=1 sec it locks m1
- at t=1.5 sec it unlocks m1
- then it unlocks m2, and finally it locks and unlocks m3
-
-
- The example is similar to the scheduling diagram shown at p. 210 of the
- book "Sistemi in tempo Reale", by Giorgio Buttazzo, Pitagora Editrice
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "drivers/keyb.h"
-
-#include <modules//srp.h>
-
-mutex_t m1,m2,m3;
-
-
-TIME gt(void)
-{
- TIME t;
- kern_cli();
- t = ll_gettime(TIME_EXACT,NULL);
- kern_sti();
- return t;
-}
-
-void startJ(void *a)
-{
-// task_activate((PID)a);
- PID p = (PID) a;
- LEVEL l;
-
- kern_printf("startJ: %d\n",a);
-
- l = proc_table[p].task_level;
- level_table[l]->task_activate(l,p);
- event_need_reschedule();
-}
-
-TASK Jlobby()
-{
- kern_printf("(*)");
- return 0;
-}
-
-TASK Jh()
-{
- PID l;
- HARD_TASK_MODEL m;
- SRP_RES_MODEL r;
-
- kern_printf("JH: creating Jy before locking m3\n");
-
- hard_task_default_model(m);
- hard_task_def_mit(m,30000);
- hard_task_def_wcet(m,1000);
- SRP_res_default_model(r,4);
- l = task_create("Jlobby",Jlobby,&m,&r);
- task_activate(l);
-
- mutex_lock(&m3);
- kern_printf("JH: locked m3, locking m1\n");
- mutex_lock(&m1);
- kern_printf("JH: locked m1, unlocking m1\n");
- mutex_unlock(&m1);
- kern_printf("JH: unlocked m1, unlocking m3\n");
- mutex_unlock(&m3);
- kern_printf("JH: unlocked m3, end task\n");
- return 0;
-}
-
-
-TASK Jm()
-{
- kern_printf("JM: before locking m3\n");
- mutex_lock(&m3);
- kern_printf("JM: locked m3, locking m2\n");
- mutex_lock(&m2);
- kern_printf("JM: locked m2, unlocking m2\n");
- mutex_unlock(&m2);
- kern_printf("JM: unlocked m2, unlocking m3\n");
- mutex_unlock(&m3);
- kern_printf("JM: unlocked m3, locking m1\n");
- mutex_lock(&m1);
- kern_printf("JM: locked m1, unlocking m1\n");
- mutex_unlock(&m1);
- kern_printf("JM: unlocked m1, end task\n");
- return 0;
-}
-
-
-TASK Jl()
-{
-// struct timespec t;
- kern_printf("JL: before locking m2\n");
- mutex_lock(&m2);
- kern_printf("JL: locked m2, waiting to t=1 sec\n");
-
- while (gt() < 1000000);
-
- kern_printf("JL: t = 1 sec reached, locking m1\n");
- mutex_lock(&m1);
- kern_printf("JL: locked m1, waiting to t=2 sec\n");
-
- while (gt() < 2000000);
-
- kern_printf("JL: t = 2 sec reached, unlocking m1\n");
- mutex_unlock(&m1);
- kern_printf("JL: unlocked m1, unlocking m2\n");
-
- mutex_unlock(&m2);
-
- kern_printf("JL: unlocked m2, locking m3\n");
- mutex_lock(&m3);
- kern_printf("JL: locked m3, unlocking m3\n");
- mutex_unlock(&m3);
- kern_printf("JL: unlocked m3, end task\n");
- return 0;
-}
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-
-int main(int argc, char **argv)
-{
- struct timespec t;
-
- HARD_TASK_MODEL m;
- PID p0,p1,p2;
-
- SRP_mutexattr_t a;
- SRP_RES_MODEL r;
-
- PI_mutexattr_t a2;
-
- KEY_EVT emerg;
-
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
- /* ---------------------------------------------------------------------
- Mutex creation
- --------------------------------------------------------------------- */
-
- PI_mutexattr_default(a2);
- SRP_mutexattr_default(a);
- mutex_init(&m1,&a);
- mutex_init(&m2,&a);
- mutex_init(&m3,&a);
-
-
- /* ---------------------------------------------------------------------
- Task creation
- --------------------------------------------------------------------- */
-
- hard_task_default_model(m);
- hard_task_def_mit(m, 1000000);
- hard_task_def_wcet(m, 80000);
- SRP_res_default_model(r, 3);
- p0 = task_createn("JH", Jh, (TASK_MODEL *)&m, &r, SRP_usemutex(&m3), SRP_usemutex(&m1), NULL);
- if (p0 == NIL)
- { kern_printf("Can't create JH task...\n"); return 1; }
-
- hard_task_default_model(m);
- hard_task_def_mit(m, 2100000);
- hard_task_def_wcet(m, 80000);
- SRP_res_default_model(r, 2);
- p1 = task_createn("JM", Jm, (TASK_MODEL *)&m, &r, SRP_usemutex(&m3), SRP_usemutex(&m1),
- SRP_usemutex(&m2), NULL);
- if (p1 == NIL)
- { kern_printf("Can't create JM task...\n"); return 1; }
-
- hard_task_default_model(m);
- hard_task_def_mit(m, 10000000);
- hard_task_def_wcet(m, 3000000);
- SRP_res_default_model(r, 1);
- p2 = task_createn("JL", Jl, (TASK_MODEL *)&m, &r, SRP_usemutex(&m3), SRP_usemutex(&m1),
- SRP_usemutex(&m2), NULL);
- if (p2 == NIL)
- { kern_printf("Can't create JL task...\n"); return 1; }
-
-// sys_abort(1);
- /* ---------------------------------------------------------------------
- Event post
- --------------------------------------------------------------------- */
-
- t.tv_sec = 0;
- t.tv_nsec = 500000000;
-// t.tv_nsec = 30000000;
- kern_event_post(&t,startJ,(void *)p1);
-
- t.tv_sec = 1;
- kern_event_post(&t,startJ,(void *)p0);
-
- task_activate(p2);
-
- kern_printf("END main\n");
-
- return 0;
-}
Index: start/oldexamples/kernel/testk.c
===================================================================
--- start/oldexamples/kernel/testk.c (revision 1087)
+++ start/oldexamples/kernel/testk.c (nonexistent)
@@ -1,226 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testk.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 20 (K):
-
- This test verify the correctness of the NOP module. It works with the PI
- module, too.
-
- The test uses one mutex
-
- the main task (NRT) creates three tasks.
-
- J1 with PC priority 0
- starts at t=0.5 sec and lock m0
-
- J2 with PC priority 1
- starts at t=1 sec and doesn't lock any mutex
-
- J3 with PC priority 2
- it starts and locks m0
- at t=2 sec it unlocks m1
-
-
- The example is similar to the scheduling diagram shown at p. 188 of the
- book "Sistemi in tempo Reale", by Giorgio Buttazzo, Pitagora Editrice
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "drivers/keyb.h"
-
-#include <modules//srp.h>
-
-mutex_t m0;
-
-
-TIME gt(void)
-{
- TIME t;
- kern_cli();
- t = ll_gettime(TIME_EXACT,NULL);
- kern_sti();
- return t;
-}
-
-void startJ(void *a)
-{
-// task_activate((PID)a);
- PID p = (PID) a;
- LEVEL l;
-
- kern_printf("startJ: %d\n",p);
-
- l = proc_table[p].task_level;
- level_table[l]->task_activate(l,p);
- event_need_reschedule();
-}
-
-TASK j1()
-{
- kern_printf("J1: before locking m0\n");
- mutex_lock(&m0);
- kern_printf("J1: locked m0\n");
- mutex_unlock(&m0);
- kern_printf("J1: unlocked m0, end task\n");
- return 0;
-}
-
-
-TASK j2()
-{
- kern_printf("J2: waiting t=1.5 sec\n");
-
- while (gt() < 1500000);
-
- kern_printf("J2: end task\n");
- return 0;
-}
-
-
-TASK j3()
-{
- kern_printf("J3: before locking m0\n");
- mutex_lock(&m0);
- kern_printf("J3: locked m0, waiting to t=2 sec\n");
-
- while (gt() < 2000000);
-
- kern_printf("J3: t = 1 sec reached, unlocking m0\n");
- mutex_unlock(&m0);
- kern_printf("J3: unlocked m0, end task\n");
- return 0;
-}
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-
-int main(int argc, char **argv)
-{
- struct timespec t;
-
- HARD_TASK_MODEL m;
- PID p0,p1,p2;
-
- PC_mutexattr_t a;
- PI_mutexattr_t a2;
- NOP_mutexattr_t a3;
- SRP_mutexattr_t a4;
- NPP_mutexattr_t a5;
-
- PC_RES_MODEL r;
- SRP_RES_MODEL srp;
-
- KEY_EVT emerg;
-
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
- /* ---------------------------------------------------------------------
- Mutex creation
- --------------------------------------------------------------------- */
-
- PC_mutexattr_default(a,0);
- PI_mutexattr_default(a2);
- NOP_mutexattr_default(a3);
- SRP_mutexattr_default(a4);
- NPP_mutexattr_default(a5);
- mutex_init(&m0,&a4);
-
- /* ---------------------------------------------------------------------
- Task creation
- --------------------------------------------------------------------- */
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,20000);
- hard_task_def_mit(m,10000000);
- PC_res_default_model(r,0);
- SRP_res_default_model(srp,3);
-// p0 = task_createn("J1", j1, &m, &r, &srp, NULL);
- p0 = task_createn("J1", j1, (TASK_MODEL *)&m, &r, &srp, SRP_usemutex(&m0), NULL);
- if (p0 == NIL)
- { kern_printf("Can't create J1 task...\n"); return 1; }
-
- hard_task_def_wcet(m,1600000);
- hard_task_def_mit(m,21000000);
- PC_res_default_model(r,1);
- SRP_res_default_model(srp,2);
- p1 = task_createn("J2", j2, (TASK_MODEL *)&m, &r, &srp, NULL);
- if (p1 == NIL)
- { kern_printf("Can't create J2 task...\n"); return 1; }
-
- hard_task_def_wcet(m,3000000);
- hard_task_def_mit(m,100000000);
- PC_res_default_model(r,2);
- SRP_res_default_model(srp,1);
-// p2 = task_createn("J3", j3, &m, &r, &srp, NULL);
- p2 = task_createn("J3", j3, (TASK_MODEL *)&m, &r, &srp, SRP_usemutex(&m0), NULL);
- if (p2 == NIL)
- { kern_printf("Can't create J3 task...\n"); return 1; }
-
-
- /* ---------------------------------------------------------------------
- Event post
- --------------------------------------------------------------------- */
-
- t.tv_sec = 0;
- t.tv_nsec = 500000000;
-// t.tv_nsec = 30000000;
- kern_event_post(&t,startJ,(void *)p0);
-
- t.tv_sec = 1;
- kern_event_post(&t,startJ,(void *)p1);
-
- task_activate(p2);
-
- kern_printf("END main\n");
-
- return 0;
-}
Index: start/oldexamples/kernel/testl.c
===================================================================
--- start/oldexamples/kernel/testl.c (revision 1087)
+++ start/oldexamples/kernel/testl.c (nonexistent)
@@ -1,487 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testl.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 21 (l):
-
- this is a part of the classic Hartik demo Aster.
-
- it is based on test 17 (h), and the JobControl Task uses an
- SOFT_TASK_MODEL served by a polling server
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-#include "drivers/keyb.h"
-
-int num_aster = 0;
-#define ASTER_LIM 60
-#define DISPLAY_MAX 15
-#define ASTER_MAX 70
-#define STAT_Y 9
-
-#define PER_MAX 5
-#define APER_MAX 8
-
-#define PER_WCET 6200
-#define APER_WCET 18400
-#define JET_WCET 10000
-
-#define APER_REP 22000
-
-PID aper_table[APER_MAX];
-
-mutex_t m1;
-
-
-#define PIMUTEX
-//#define NPPMUTEX
-//#define NOPMUTEX
-
-#define LONGSC
-
-#ifdef LONGSC
-#define SOFT_MET 3000 /* 12000 */
-#define CLOCK_WCET 200 /* 300*/
-#define ASTER_WCET 200 /* 300*/
-#else
-#define SOFT_MET 80000 /* 4500 */
-#define CLOCK_WCET 2000 /* 200*/
-#define ASTER_WCET 2000 /* 200*/
-#endif
-
-TASK asteroide(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 10000; //8000 + rand()%2000;
- #ifdef LONGSC
- mutex_lock(&m1);
- #endif
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- #ifndef LONGSC
- mutex_lock(&m1);
- #endif
- puts_xy(i,y,rand()%15+1,s);
- #ifndef LONGSC
- mutex_unlock(&m1);
- #endif
- }
- #ifdef LONGSC
- mutex_unlock(&m1);
- #endif
-
- task_activate(aper_table[rand()%APER_MAX]);
- task_endcycle();
-
- mutex_lock(&m1);
- puts_xy(i,y,WHITE," ");
- mutex_unlock(&m1);
- i++;
- }
- }
- //num_aster--;
-}
-
-TASK aper_asteroid(void *a)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
- int c;
-
- char s[2];
-
- c = (int)a;
- s[0] = '*'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = APER_REP; //8000 + rand()%2000;
- #ifdef LONGSC
- mutex_lock(&m1);
- #endif
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- #ifndef LONGSC
- mutex_lock(&m1);
- #endif
- puts_xy(i,y,rand()%15+1,s);
- #ifndef LONGSC
- mutex_unlock(&m1);
- #endif
- }
- s[0] = c;
- #ifndef LONGSC
- mutex_lock(&m1);
- #endif
- puts_xy(i,y,rand()%15+1,s);
- mutex_unlock(&m1);
-
- task_endcycle();
-
- mutex_lock(&m1);
- puts_xy(i,y,WHITE," ");
- mutex_unlock(&m1);
- i++;
- }
- }
-}
-
-TASK soft_aster(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 1000 + rand()%9000;
- #ifdef LONGSC
- mutex_lock(&m1);
- #endif
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- #ifndef LONGSC
- mutex_lock(&m1);
- #endif
- puts_xy(i,y,rand()%15+1,s);
- #ifndef LONGSC
- mutex_unlock(&m1);
- #endif
- }
- s[0] = 1;
- #ifndef LONGSC
- mutex_lock(&m1);
- #endif
- puts_xy(i,y,rand()%15+1,s);
- mutex_unlock(&m1);
-
- task_activate(aper_table[rand()%APER_MAX]);
- task_endcycle();
-
- mutex_lock(&m1);
- puts_xy(i,y,WHITE," ");
- mutex_unlock(&m1);
- i++;
- }
- }
- num_aster--;
- return 0;
-}
-
-TASK aster()
-{
- PID p;
-
-// HARD_TASK_MODEL m;
- SOFT_TASK_MODEL m_soft;
- int r;
- int x; // adaptive bandwidth...
-
- srand(7);
-
-/* periodic_task_default_model(m,0,PER_WCET);
- periodic_task_def_ctrl_jet(m);
- for (x=0; x<PER_MAX; x++) {
- r = (rand() % 200);
- periodic_task_def_period(m, (64+r)*1000);
- p = task_create("per",asteroide,&m,NULL);
- if (p!=-1) task_activate(p);
- }
-*/
- soft_task_default_model(m_soft);
- soft_task_def_met(m_soft,SOFT_MET);
- soft_task_def_ctrl_jet(m_soft);
-
- x = 128; //64;
-
- while (1) {
-/* {
- PID p;
- int x;
- p = level_table[0]->level_scheduler(0);
- printf_xy(1,8,WHITE," ");
-
- x = 0;
- do {
- printf_xy(3*x+1,8,WHITE,"%3d",p);
- p = proc_table[p].next;
- x++;
- } while (p != NIL);
- }
-*/
- if (num_aster < ASTER_MAX) {
- r = (rand() % 200);
-
- soft_task_def_period(m_soft, (x+r)*1000);
- p = task_create("aaa",soft_aster,&m_soft,NULL);
- if (p == -1)
- {
- if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
- mutex_lock(&m1);
- printf_xy(62,3,WHITE,"adapt=%3u err=%d",freedesc,errno);
- mutex_unlock(&m1);
- }
- else {
- num_aster++;
- mutex_lock(&m1);
- printf_xy(62,3,WHITE,"adapt=%3u ",x);//,errno);
- mutex_unlock(&m1);
- task_activate(p);
- x /= 2;
- if (x<50) x = 50;
- }
- }
- task_endcycle();
- }
-}
-
-TASK clock()
-{
- int s = 0, m = 0;
-
- while(1) {
- mutex_lock(&m1);
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(0));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(2));
-
- mutex_unlock(&m1);
- task_endcycle();
-
- if (++s > 59) {
- s = 0;
- m++;
- }
- mutex_lock(&m1);
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(0));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(2));
- mutex_unlock(&m1);
- task_endcycle();
- }
-}
-
-
-
-/* we consider the first ASTER_MAX + 2 tasks from the PID 2
- and plot on the screen the elapsed times... */
-TASK jetcontrol()
-{
- int i; /* a counter */
- TIME sum, max, curr, last[5];
- int nact;
- int j; /* the elements set by jet_gettable */
- PID p;
-
-
- mutex_lock(&m1);
- printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
- mutex_unlock(&m1);
-
- for (;;) {
- for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
- if (jet_getstat(p, &sum, &max, &nact, &curr) == -1 /*||
- (proc_table[p].pclass & 0xFF00) == APERIODIC_PCLASS ||
- (proc_table[p].pclass & 0xFF00) == PERIODIC_PCLASS*/ ) continue;
-
- for (j=0; j<5; j++) last[j] = 0;
- jet_gettable(p, &last[0], 5);
- mutex_lock(&m1);
- if (proc_table[p].task_level == 2)
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)CBS_get_nact(2,p), (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
-// p, sum/(nact==0 ? 1 : nact), max, proc_table[p].avail_time, proc_table[p].status, proc_table[p].shadow, proc_table[p].timespec_priority.tv_sec,proc_table[p].timespec_priority.tv_nsec/1000 , CBS_get_nact(2,p), last[4]);
- else
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, (int)nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
-// p, sum/(nact==0 ? 1 : nact), max, nact, proc_table[p].status, proc_table[p].shadow, proc_table[p].timespec_priority.tv_sec,proc_table[p].timespec_priority.tv_nsec/1000 , last[3], last[4]);
- mutex_unlock(&m1);
- i++;
- }
- }
-}
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-int main(int argc, char **argv)
-{
- PID p1,p2,p3; //,p4,p5,p6;
- HARD_TASK_MODEL m;
-// NRT_TASK_MODEL m_nrt;
- SOFT_TASK_MODEL m_aper;
- SOFT_TASK_MODEL m_soft;
-// int i;
- struct timespec fineprg;
-
- #ifdef PIMUTEX
- PI_mutexattr_t a;
- #endif
-
- #ifdef NPPMUTEX
- NPP_mutexattr_t a;
- #endif
-
- #ifdef NOPMUTEX
- NOP_mutexattr_t a;
- #endif
-
-
- KEY_EVT emerg;
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
- hard_task_default_model(m);
- hard_task_def_mit(m,100000);
- hard_task_def_wcet(m,ASTER_WCET);
- hard_task_def_group(m,1);
- hard_task_def_ctrl_jet(m);
-
-// nrt_task_default_model(m_nrt);
-// nrt_task_def_group(m_nrt,1);
-// nrt_task_def_ctrl_jet(m_nrt);
-
-
- soft_task_default_model(m_aper);
- soft_task_def_group(m_aper,1);
- soft_task_def_ctrl_jet(m_aper);
- soft_task_def_aperiodic(m_aper);
-
- soft_task_default_model(m_soft);
- soft_task_def_period(m_soft,100000);
- soft_task_def_met(m_soft,JET_WCET);
- soft_task_def_group(m_soft,1);
- soft_task_def_ctrl_jet(m_soft);
- soft_task_def_aperiodic(m_soft);
-
-
- p1 = task_create("Aster",aster,&m,NULL);
- if (p1 == -1) {
- perror("test7.c(main): Could not create task <aster> ...");
- sys_end();
- l1_exit(-1);
- }
-
- hard_task_def_mit(m,500000);
- hard_task_def_wcet(m,CLOCK_WCET);
- p2 = task_create("Clock",clock,&m,NULL);
- if (p2 == -1) {
- perror("test7.c(main): Could not create task <Clock> ...");
- sys_end();
- l1_exit(-1);
- }
-
-// p3 = task_create("JetControl",jetcontrol,&m_nrt,NULL);
- p3 = task_create("JetControl",jetcontrol,&m_aper,NULL);
- if (p3 == -1) {
- perror("test7.c(main): Could not create task <JetControl> ...");
- sys_end();
- l1_exit(-1);
- }
-/*
- aperiodic_task_default_model(m_aper,APER_WCET);
- aperiodic_task_def_ctrl_jet(m_aper);
- aperiodic_task_def_system(m_aper);
-
- for (i=0; i<APER_MAX; i++) {
- aperiodic_task_def_level(m_aper, i/4 + 2);
- aperiodic_task_def_arg(m_aper, (i/4 ? 'Û' : '±'));
- aper_table[i] = task_create("aper",aper_asteroid,&m_aper,NULL);
- if (aper_table[i] == -1) {
- perror("test7.c(main): Could not create task <aper> ...");
- sys_end();
- l1_exit(-1);
- }
- }
-*/
- task_nopreempt();
-
- #ifdef PIMUTEX
- PI_mutexattr_default(a);
- #endif
-
- #ifdef NPPMUTEX
- NPP_mutexattr_default(a);
- #endif
-
- #ifdef NOPMUTEX
- NOP_mutexattr_default(a);
- #endif
-
- mutex_init(&m1, &a);
-
- fineprg.tv_sec = 1800;
- fineprg.tv_nsec = 0;
- kern_event_post(&fineprg,(void (*)(void *))fine,NULL);
- group_activate(1);
- return 0;
-}
-
Index: start/oldexamples/kernel/testm.c
===================================================================
--- start/oldexamples/kernel/testm.c (revision 1087)
+++ start/oldexamples/kernel/testm.c (nonexistent)
@@ -1,318 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testm.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 22 (M):
-
- this is a part of the classic Hartik demo Aster.
-
- it is based on test 10(A), and test the PS with RM.
-
- The JetControl is served by a dedicated Polling Server, too.
-
- There are APER_MAX tasks sleeping, and when an asteroide task finish
- the current activation, it activate also an aperiodic task chosen
- randomly (if the task chosen is already active, the task_activate do
- nothing!)
-
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules//edf.h"
-#include "drivers/keyb.h"
-
-int num_aster = 0;
-#define ASTER_LIM 60
-#define DISPLAY_MAX 15
-#define ASTER_MAX 70
-#define STAT_Y 9
-
-#define APER_MAX 8
-
-#define PER_WCET 7800
-#define APER_WCET 14000
-#define CLOCK_WCET 200
-#define ASTER_WCET 200
-
-#define APER_REP 22000
-
-PID aper_table[APER_MAX];
-
-TASK asteroide(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 10000; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
-
- task_activate(aper_table[rand()%APER_MAX]);
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- num_aster--;
- return 0;
-}
-
-TASK aper_asteroid(void *a)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
- int c;
-
- char s[2];
-
- c = (int)a;
- s[0] = '*'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = APER_REP; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
- s[0] = c;
- puts_xy(i,y,rand()%15+1,s);
-
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
-}
-
-TASK aster()
-{
- PID p;
-
- HARD_TASK_MODEL m;
- int r;
- int x; // adaptive bandwidth...
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,PER_WCET);
- hard_task_def_ctrl_jet(m);
-
- x = 64;
-
- srand(7);
- while (1) {
- if (num_aster < ASTER_MAX) {
- r = (rand() % 200);
-
- hard_task_def_arg(m,(void *)((rand() % 7)+1));
- hard_task_def_mit(m, (x+r)*1000);
- p = task_create("aaa",asteroide,&m,NULL);
- if (p == -1)
- {
- if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
- printf_xy(62,3,WHITE,"adapt=%3u err=%d",freedesc,errno);
- }
- else {
- num_aster++;
- printf_xy(62,3,WHITE,"adapt=%3u ",x);//,errno);
- task_activate(p);
- x /= 2;
- if (x<50) x = 50;
- }
- }
- task_endcycle();
- }
-}
-
-TASK clock()
-{
- int s = 0, m = 0;
-
- while(1) {
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"U=%12u",EDF_usedbandwidth(0));
- task_endcycle();
-
- if (++s > 59) {
- s = 0;
- m++;
- }
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"U=%12u",EDF_usedbandwidth(0));
- task_endcycle();
- }
-}
-
-
-
-/* we consider the first ASTER_MAX + 2 tasks from the PID 2
- and plot on the screen the elapsed times... */
-TASK jetcontrol()
-{
- int i; /* a counter */
- TIME sum, max, curr, last[5];
- int nact;
- int j; /* the elements set by jet_gettable */
- PID p;
-
-
- kern_cli();
- printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
- kern_sti();
-
- for (;;) {
- for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
- if (jet_getstat(p, &sum, &max, &nact, &curr) == -1) continue;
-
- for (j=0; j<5; j++) last[j] = 0;
- jet_gettable(p, &last[0], 5);
- kern_cli();
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
- kern_sti();
- i++;
- }
- }
-}
-
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-
-int main(int argc, char **argv)
-{
- PID p1,p2,p3; //,p4,p5,p6;
- HARD_TASK_MODEL m;
- NRT_TASK_MODEL m_nrt;
- SOFT_TASK_MODEL m_aper;
- int i;
- struct timespec fineprg;
-
- KEY_EVT emerg;
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,ASTER_WCET);
- hard_task_def_mit(m,10000);
- hard_task_def_group(m,1);
- hard_task_def_ctrl_jet(m);
-
- nrt_task_default_model(m_nrt);
- nrt_task_def_group(m_nrt,1);
- nrt_task_def_ctrl_jet(m_nrt);
-
- p1 = task_create("Aster",aster,&m,NULL);
- if (p1 == -1) {
- perror("test7.c(main): Could not create task <aster> ...");
- sys_end();
- l1_exit(-1);
- }
-
- hard_task_def_mit(m,500000);
- hard_task_def_wcet(m,CLOCK_WCET);
- p2 = task_create("Clock",clock,&m,NULL);
- if (p2 == -1) {
- perror("test7.c(main): Could not create task <Clock> ...");
- sys_end();
- l1_exit(-1);
- }
-
- soft_task_default_model(m_aper);
- soft_task_def_ctrl_jet(m_aper);
- soft_task_def_level(m_aper, 1);
- soft_task_def_group(m_aper,1);
- soft_task_def_aperiodic(m_aper);
- p3 = task_create("JetControl",jetcontrol,&m_aper,NULL);
- if (p3 == -1) {
- perror("test7.c(main): Could not create task <JetControl> ...");
- sys_end();
- l1_exit(-1);
- }
-
- soft_task_def_wcet(m_aper,APER_WCET);
- soft_task_def_ctrl_jet(m_aper);
- soft_task_def_aperiodic(m_aper);
-
- for (i=0; i<APER_MAX; i++) {
- soft_task_def_level(m_aper, i/4 + 3);
- soft_task_def_arg(m_aper, (void *)(i/4 ? 'Û' : '±'));
- aper_table[i] = task_create("aper",aper_asteroid,&m_aper,NULL);
- if (aper_table[i] == -1) {
- perror("test7.c(main): Could not create task <aper> ...");
- sys_end();
- l1_exit(-1);
- }
- }
-
- fineprg.tv_sec = 1000;
- fineprg.tv_nsec = 0;
- kern_event_post(&fineprg,(void (*)(void *))fine,NULL);
-
- group_activate(1);
- return 0;
-}
-
Index: start/oldexamples/kernel/testn.c
===================================================================
--- start/oldexamples/kernel/testn.c (revision 1087)
+++ start/oldexamples/kernel/testn.c (nonexistent)
@@ -1,211 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testn.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 23 (N):
-
- This is the mousfind.c Hartik's example.
-
- It find the mouse...
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <kernel/kern.h>
-#include <drivers/mouse.h>
-#include <drivers/keyb.h>
-
-/* don't include this into real applications*/
-#include <../drivers/char/_mouse.h>
-
-#define cons_columns 80
-#define cons_rows 25
-
-int done;
-
-void my_ctrlC_function(KEY_EVT *k)
-{
- CRSR_STD();
- done=1;
- //sys_status(0xffff);
- sys_end();
- l1_exit(0);
-}
-
-//extern int tindex;
-//extern DWORD tdata[];
-//int first=1;
-
-
-void my_mouse_hook(MOUSE_EVT *m)
-{
- static int buttons=-1;
- if (buttons!=m->buttons) {
- buttons=m->buttons;
- //mouse_off();
- if (isLeftButton(*m)) puts_xy(9,22,RED,"active");
- else puts_xy(9,22,RED," ");
- if (isCentralButton(*m)) puts_xy(9,23,RED,"active");
- else puts_xy(9,23,RED," ");
- if (isRightButton(*m)) puts_xy(9,24,RED,"active");
- else puts_xy(9,24,RED," ");
- //mouse_on();
- }
-
-
- /*
- if (tindex>20&&first) {
- int i;
- cprintf("\nSTART\n");
- for (i=0;i<tindex;i++) {
- cprintf("%i\n",(int)tdata[i]);
- }
- for (i=1;i<tindex;i++) {
- cprintf("%i ",(int)(tdata[i]-tdata[i-1]));
- }
- first=0;
- }
- */
-
-}
-
-int main(int argc,char *argv[])
-{
-// KEYB_PARMS keyb =BASE_KEYB;
- MOUSE_PARMS mouse=BASE_MOUSE;
- int ch,running,nm;
- int sens=5;
-
- /* keyboard initialization */
-// keyb_def_ctrlC(keyb,my_ctrlC_function);
-// keyb_init(&keyb);
-
- /* screen */
- clear();
- nm=0;
- while (*vmouse[nm].name!='\0') {
- cprintf("%c %s:\t %s\n",(char)('a'+nm),vmouse[nm].name,vmouse[nm].desc);
- nm++;
- }
- cprintf("\n[a-%c]\t select a mouse server\n",(char)(nm+'a'-1));
- cprintf("[z]\t decrement mouse threshold\n");
- cprintf("[x]\t incremnet mouse threshold\n");
- cprintf("[ctrl-c]\t exit\n");
- place(0,20);
- cputs("mouse server:\n");
- cputs("threshold:\n");
- cputs("left :\n");
- cputs("central:\n");
- cputs("right :");
- CRSR_OFF();
-
- /* main loop */
- running=done=0;
- while (!done) {
- ch=keyb_getch(TRUE);
- switch(ch) {
-
- /* decrement threshold */
-
- case 'z':
- sens--;
- if (sens<2) sens=2;
- mouse_threshold(sens);
- /* threshold */
- place(11,21);
- cprintf("%i ",sens);
- break;
-
- /* increment threshold */
-
- case 'x':
- sens++;
- if (sens>100) sens=100;
- mouse_threshold(sens);
- /* threshold */
- place(11,21);
- cprintf("%i ",sens);
- break;
-
- /* change mouse protocol */
-
- default:
- if (ch>='a'&&ch<='a'+nm-1) {
- /* check if a mouse server is running... */
- if (running) {
- /* disable autocursor */
- mouse_txtcursor(DISABLE);
- /* destroy actual mouse server */
- mouse_end();
- }
- /* mouse server name */
- puts_xy(14,20,GREEN," ");
- puts_xy(14,20,GREEN,vmouse[ch-'a'].name);
- /* threshold */
- place(11,21);
- cprintf("%i ",sens);
- /* don't use this method to change a mouse protocol */
- /* use mouse_def_???? macros instead */
- mouse.type=ch-'a';
- /* start a new server */
- running=(mouse_init(&mouse)==0?1:0);
- /* if running ...*/
- if (running) {
- /* set mouse limit */
- mouse_limit(0,0,cons_columns-1,cons_rows-1);
- /* enable autocursor */
- mouse_txtcursor(ENABLE|AUTOOFF);
- /* hook my function */
- mouse_hook(my_mouse_hook);
- /* show mouse cursor */
- mouse_on();
- }
- }
- break;
-
- }
- }
-
- CRSR_STD();
- sys_end();
- return 0;
-}
Index: start/oldexamples/kernel/testo.c
===================================================================
--- start/oldexamples/kernel/testo.c (revision 1087)
+++ start/oldexamples/kernel/testo.c (nonexistent)
@@ -1,99 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testo.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test 24 (O):
-
- This is the pcitest Hartik's example.
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-#include <kernel/kern.h>
-#include <drivers/keyb.h>
-
-#include <drivers/llpci.h>
-#include <drivers/pci.h>
-
-void scan()
-{
-// int i, ndev;
-// WORD Class;
-// struct pci_regs *r;
- BYTE bus, dev;
-
- /* Scan the devices connected to the PCI bus */
- if (pci_init() == 1) {
- clear();
- pci_show();
- bus = 0; dev = 0;
- if (pcibios_find_device(0x8086, 0x7000, 0, &bus, &dev) == NULL)
- cprintf("Not found... %d %d\n", bus, dev);
- else cprintf("Found: %d \t %d\n", bus, dev);
-
- if (pcibios_find_class(0x300, 0, &bus, &dev) == NULL)
- cprintf("Not found... %d %d\n", bus, dev);
- else cprintf("Found: %d \t %d\n", bus, dev);
- } else cprintf("PCI not found!!!\n");
-}
-
-void endfun(KEY_EVT *k)
-{
- sys_abort(60000);
-}
-
-int main (int argc, char *argv[])
-{
- KEY_EVT k;
-
- k.flag = CNTR_BIT;
- k.scan = KEY_C;
- k.ascii = 'c';
- keyb_hook(k,endfun);
-
- scan();
- while(1);
-
- sys_end();
- return -1;
-}
Index: start/oldexamples/kernel/testp.c
===================================================================
--- start/oldexamples/kernel/testp.c (revision 1087)
+++ start/oldexamples/kernel/testp.c (nonexistent)
@@ -1,227 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testp.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test 25 (P):
-
- This is the talkdx.c Hartik's example.
-
- File: Talk.C
- Revision: 1.00
- Author: Luca Abeni
-
-
- Simple Netlib demo: nothing of seriously real-time, only another Unix
- Talk clone.
- Read it to see how the UDP/IP layers of the networ library work.
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <kernel/kern.h>
-//#include <mem.h>
-//#include <stdlib.h>
-#include <string.h>
-//#include <cons.h>
-#include <drivers/crtwin.h>
-#include <drivers/keyb.h>
-
-#include <drivers/udpip.h>
-
-
-WIN dbg;
-BYTE esc = FALSE;
-
-char talk_myipaddr[20];
-char talk_toipaddr[20];
-
-/*
- This non real-time task reads UDP packets from the network and writes
- them in a window
-*/
-TASK scrittore(void)
-{
- char str[2000];
- UDP_ADDR from, local;
- WIN displ;
- int s,n;
-
- /* Connect on the local port #100 */
- local.s_port = 100;
- s = udp_bind(&local, NULL);
-
- /* Open the window */
- win_init(&displ,0,0,79,6);
- win_frame(&displ,BLACK,WHITE,"Remote",2);
-
- while (1) {
- /* Clear the buffer for receiving the packet...*/
- memset(str, 0, 1999);
- /*...and receive the packet (block until a packet arrives */
- n = udp_recvfrom(s, str, &from);
- win_puts(&displ, str);
- }
-}
-
-/*
- This non real-time task reads strings from the keyoard and sends them
- to the remote host
-*/
-TASK write(void)
-{
- WIN wr;
- UDP_ADDR to,local;
- char str[80];
- int s;
- IP_ADDR bindlist[5];
-
- /* Create a socket for transitting */
- ip_str2addr(talk_myipaddr,&(local.s_addr));
- local.s_port = 101;
-
- /*
- If we want the address of the remote host in the ARP table before
- begginning the transmission (to eliminate a possible source of
- unpredictability), we can use the bindlist, otherwise we set the
- second parameter of udp_bind to NULL
- */
- ip_str2addr(talk_toipaddr,&(bindlist[0]));
- memset(&(bindlist[1]), 0, sizeof(IP_ADDR));
- s = udp_bind(&local, /*bindlist*/NULL);
-
- win_init(&wr,0,7,79,6);
- win_frame(&wr,BLACK,WHITE,"Local",2);
- ip_str2addr(talk_toipaddr,&(to.s_addr));
- to.s_port = 100;
- sprintf(str,"Local IP address %d.%d.%d.%d\n", local.s_addr.ad[0],
- local.s_addr.ad[1], local.s_addr.ad[2],
- local.s_addr.ad[3]);
- win_puts(&dbg,str);
- sprintf(str,"Talk to %d.%d.%d.%d ",to.s_addr.ad[0],to.s_addr.ad[1],
- to.s_addr.ad[2],to.s_addr.ad[3]);
- win_puts(&dbg,str);
- while (1) {
- /* Get the string...*/
- win_gets(&wr,str,78);
- strcat(str,"\n");
- /*...and send it!!! */
- udp_sendto(s,str,strlen(str)+2,&to);
- }
-}
-
-/* This function is called when the user presses CTRL-C (stops the systems) */
-void esci(KEY_EVT *k)
-{
- esc = TRUE;
- cprintf("Ctrl-Brk pressed!\n");
- //sys_status(0xFFFF);
- sys_abort(500);
- //exit(1);
-}
-
-int main(void)
-{
- KEY_EVT k;
-
- struct net_model m = net_base;
-
- NRT_TASK_MODEL m_nrt;
-
- k.flag = CNTL_BIT;
- k.scan = KEY_C;
- k.ascii = 'c';
- keyb_hook(k,esci);
- k.flag = CNTR_BIT;
- k.scan = KEY_C;
- k.ascii = 'c';
- keyb_hook(k,esci);
-
- clear();
- cprintf(" Hartik Talk! Ver. 1.00\n");
-// strcpy(talk_myipaddr, "193.205.82.46");
-// strcpy(talk_toipaddr, "193.205.82.44");
-
- strcpy(talk_myipaddr, "193.205.82.44");
- strcpy(talk_toipaddr, "193.205.82.46");
-
- /* We want a task for TX mutual exclusion */
- net_setmode(m, TXTASK);
- /* We use UDP/IP stack */
- net_setudpip(m, talk_myipaddr);
- /* OK: let's start the NetLib! */
- if (net_init(&m) == 1) {
- cprintf("Net Init OK...\n");
- } else {
- cprintf("Net Init Failed...\n");
- sys_abort(300);
- }
-
-
-//dump_irq();
-
- cprintf("\n\n\n\tPress ENTER\n");
- while (!esc) {
- keyb_getcode(&k,BLOCK);
- if (k.ascii == 13) esc = TRUE;
- }
-
- esc = FALSE;
- clear();
- win_init(&dbg,0,20,60,3);
- win_frame(&dbg,BLACK,WHITE,"Debug",2);
-
- /* Start the sender and receiver tasks...*/
- //task_nopreempt();
- nrt_task_default_model(m_nrt);
- task_activate(task_create("aaa",scrittore,&m_nrt,NULL));
- task_activate(task_create("bbb",write,&m_nrt,NULL));
-
- //clear();
- //task_preempt();
-
- /*...and wait!!! */
- while (!esc) {
- }
- sys_end();
- //clear();
- return 0;
-}
Index: start/oldexamples/kernel/testq.c
===================================================================
--- start/oldexamples/kernel/testq.c (revision 1087)
+++ start/oldexamples/kernel/testq.c (nonexistent)
@@ -1,229 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testq.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 26 (Q):
-
- This test verify the correctness of the task_join primitive.
-
- There are 4 taks, J1, J2, J3, are created as joinable, J4 as detached
- (the standard with hartik...)
-
- The main task:
- Creates J1 and J2, locks m1 (a PI mitex), creates C3.
- at t=0.8 sec it calls a task_join on J3 (that returns EDEADLK),
- it unlocks m1, then it makes task_join on J3 another time.
- Next it creates J4 as detached and finally it does a task_join on J4
- (that returns EINVAL).
-
- J1:
- at t=0.2 sec it calls task_join on J2, the it ends.
-
- J2:
- it simply waits t=0.4 sec and it ends.
-
- J3:
- First, it calls task_join on J1.
- Then, at t=0.6 sec it locks m1, then unlocks it
-
- J4:
- it simply waits t=1 sec and it ends.
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "drivers/keyb.h"
-
-#include <modules//srp.h>
-
-
-PID j0, j1, j2, j3, j4;
-mutex_t m1;
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-TASK J1()
-{
- int err;
- void *ret;
-
- kern_printf("J1: started, waiting 0.2 sec\n");
-
- while (sys_gettime(NULL) < 200000);
-
- kern_printf("J1: 0.2 sec reached, joining J2\n");
-
- err = task_join(j2, &ret);
-
- kern_printf("J1: join J2 returns %d error %d, exiting\n",
- (int)ret,err);
- return (void *)11;
-}
-
-TASK J2()
-{
- kern_printf("J2: started, waiting 0.4 sec\n");
-
- while (sys_gettime(NULL) < 400000);
-
- kern_printf("J2: 0.4 sec reached, exiting\n");
-
- return (void *)22;
-}
-
-TASK J3()
-{
- int err;
- void *ret;
-
- kern_printf("J3: started, joining J1\n");
-
- err = task_join(j1, &ret);
-
- kern_printf("J3: join J1 returns %d error %d, waiting 0.6sec\n", (int)ret, err);
-
- while (sys_gettime(NULL) < 600000);
-
- kern_printf("J1: 0.6 sec reached, locking m1\n");
-
- mutex_lock(&m1);
-
- kern_printf("J3: locked m1, unlocking m1\n");
-
- mutex_unlock(&m1);
-
- kern_printf("J3: unlocked m1, exiting\n");
-
- return (void *)33;
-}
-
-TASK J4()
-{
- kern_printf("J4: started, waiting 1 sec\n");
-
- while (sys_gettime(NULL) < 1000000);
-
- kern_printf("J4: 1 sec reached, exiting\n");
-
- return (void *)44;
-}
-
-int main(int argc, char **argv)
-{
- NRT_TASK_MODEL m;
-
- PI_mutexattr_t a;
-
- KEY_EVT emerg;
-
- int err;
- void *ret;
-
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
- j0 = exec_shadow;
- nrt_task_default_model(m);
- nrt_task_def_joinable(m);
-
- /* ---------------------------------------------------------------------
- Mutex creation
- --------------------------------------------------------------------- */
-
- PI_mutexattr_default(a);
- mutex_init(&m1,&a);
-
-
- /* ---------------------------------------------------------------------
- Let's go !!!!
- --------------------------------------------------------------------- */
-
- kern_printf("main: creating J1,J2,J3, locking m1\n");
-
- j1 = task_create("J1", J1, &m, NULL);
- if (j1 == NIL) { kern_printf("Can't create J1 task...\n"); return 1; }
- task_activate(j1);
-
- j2 = task_create("J2", J2, &m, NULL);
- if (j2 == NIL) { kern_printf("Can't create J2 task...\n"); return 1; }
- task_activate(j2);
-
- mutex_lock(&m1);
-
- j3 = task_create("J3", J3, &m, NULL);
- if (j3 == NIL) { kern_printf("Can't create J3 task...\n"); return 1; }
- task_activate(j3);
-
- kern_printf("main: waiting t=0.8 sec\n");
-
- while (sys_gettime(NULL) < 800000);
-
- err = task_join(j3, NULL);
-
- kern_printf("main: join J3 error %d, unlocking m1\n",err);
-
- mutex_unlock(&m1);
-
- err = task_join(j3, &ret);
-
- kern_printf("main: join J3 returns %d error %d, unlocked m1, creating J4\n",
- (int)ret,err);
-
- nrt_task_def_unjoinable(m);
- j4 = task_create("J4", J4, &m, NULL);
- if (j4 == NIL) { kern_printf("Can't create J4 task...\n"); return 1; }
-
- task_activate(j4);
-
- err = task_join(j4,&ret);
-
- kern_printf("main: join J4 returns %d error %d, exiting\n", (int)ret, err);
-
- return 0;
-}
Index: start/oldexamples/kernel/test1.c
===================================================================
--- start/oldexamples/kernel/test1.c (revision 1087)
+++ start/oldexamples/kernel/test1.c (nonexistent)
@@ -1,167 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: test1.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 1:
-
- this test is a simple main() function with other 2 task
-
- This test has to be compiled with init1.c, that introduce 2 RR levels
- with a timeslice of 300us (!)
-
- This test can be useful to test functions like
-
- task_nopreempt
- task_preempt
- task_create
- task_activate
- task_delay
- group_activate
- normal task termination (task_abort)
- normal system termination (sys_end)
- standard atexit functions (the keyboard...)
-
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-
-// for min
-#include "ll/stdlib.h"
-
-#include "ll/stdio.h"
-
-
-#if !defined(__TEST1__)
- THE TEST REQUIRE THE DEFINITION __TEST1__ IN CONFIG.C
-#endif
-
-struct timespec s_stime[10000];
-struct timespec s_send[10000];
-TIME s_curr[10000];
-PID s_PID[10000];
-int useds=0;
-int testactive=1;
-
-
-TASK pippo()
-{
-// int i;
- struct timespec t;
- int last = 0;
-
- do {
-//kern_printf("!");
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-
- if ((t.tv_nsec/1000000) != last) { //ogni 7000
-// kern_printf("Û%dÛ",t);
- last = t.tv_nsec/1000000;
-// task_delay(3000000);
- }
-
- } while (t.tv_nsec <= 20000000L);
-}
-
-TASK pippo2()
-{
- struct timespec t;
- do {
-// kern_printf("pippo2");
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
- if (t.tv_nsec > 5000000 && t.tv_nsec <= 12000000) task_nopreempt();
- if (t.tv_nsec > 12000000) task_preempt();
-
- } while (t.tv_nsec <= 20000000L);
-}
-
-int main(int argc, char **argv)
-{
- struct timespec t;
- int i;
- NRT_TASK_MODEL m;
- PID p2,p3;
-
- nrt_task_default_model(m);
- nrt_task_def_group(m,1);
-
- p2 = task_createn("pippo", pippo, &m, NULL);
- if (p2 == NIL)
- { kern_printf("Can't create pippo task...\n"); return 1; }
-
- p3 = task_createn("pippo2", pippo2, &m, NULL);
- if (p3 == NIL)
- { kern_printf("Can't create pippo2 task...\n"); return 1; }
-
- group_activate(1);
-
-
- kern_printf("DENTRO MAIN %d\n",ll_context_save());
-
-// testactive = 1;
- NULL_TIMESPEC(&t);
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-// task_delay(14000);
-
- } while (t.tv_nsec <= 40000000L);
- testactive = 0;
-
-// sys_status(0xFFFF);
-// return 0;
-
- kern_printf("FINE MAIN time=%d useds=%d\n",ll_gettime(TIME_EXACT,NULL),useds);
- for (i=0; i<min(useds,20); i++)
- kern_printf("%6d: pid %6d stime %-9d reschedule %-9d avail %-9d\n",i,
- s_PID[i], s_stime[i].tv_nsec, s_send[i].tv_nsec, s_curr[i]);
-// sys_end();
-
- kern_printf("DENTRO MAIN %d\n",ll_context_save());
- return 0;
-}
Index: start/oldexamples/kernel/testr.c
===================================================================
--- start/oldexamples/kernel/testr.c (revision 1087)
+++ start/oldexamples/kernel/testr.c (nonexistent)
@@ -1,231 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testr.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 27 (R):
-
- This test verify the correctness of the condition variables.
- (... it doesn't test all...)
-
- The test uses 1 mutex
-
- the main task (NRT) creates three tasks.
-
- J0, J1, J3
- starts, lock the mutex, and wait on a condition variable
-
- J2
- at t = 0.5 lock the mutex and call cond_signal
- at t = 1 lock the mutex and call cond_signal
-
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "drivers/keyb.h"
-
-
-mutex_t m0;
-cond_t c0;
-
-int number = 0;
-
-PID p0,p1,p2,p3;
-
-TASK j0()
-{
- kern_printf("J0: before locking m0\n");
- mutex_lock(&m0);
- kern_printf("J0: locked m0, waiting on c0, number =%d\n", number);
- while (!number) {
- cond_wait(&c0,&m0);
- kern_printf("J0: number = %d, if >0 unlocking m0\n",number);
- }
- number--;
- mutex_unlock(&m0);
- kern_printf("J0: unlocked m0, end task\n");
- return 0;
-}
-
-
-TASK j1()
-{
- kern_printf("J1: before locking m0\n");
- mutex_lock(&m0);
- kern_printf("J1: locked m0, waiting on c0, number =%d\n", number);
- while (!number) {
- cond_wait(&c0,&m0);
- kern_printf("J1: number = %d, if >0 unlocking m0\n",number);
- }
- number--;
- mutex_unlock(&m0);
- kern_printf("J1: unlocked m0, end task\n");
- return 0;
-}
-
-
-TASK j2()
-{
-// struct timespec t;
-
- kern_printf("J2: started, waiting t=0.5 sec\n");
- while (sys_gettime(NULL) < 500000);
-
- kern_printf("J2: before locking m0\n");
- mutex_lock(&m0);
- kern_printf("J2: locked m0, number++ (was %d), cond_signal\n", number);
-
- number++;
- cond_signal(&c0);
-// cond_broadcast(&c0);
-
- kern_printf("J2: unlocking m0\n");
- mutex_unlock(&m0);
-
- kern_printf("J2: waiting t=1 sec\n");
- while (sys_gettime(NULL) < 1000000);
-
- kern_printf("J2: Killing J3\n");
- task_kill(p3);
- kern_printf("J2: before locking m0\n");
- mutex_lock(&m0);
- kern_printf("J2: locked m0, number++ (was %d), cond_signal\n", number);
-
- number++;
- cond_signal(&c0);
-// cond_broadcast(&c0);
-
- kern_printf("J2: unlocking m0\n");
- mutex_unlock(&m0);
- kern_printf("J2: unlocked m0, end task\n");
- return 0;
-}
-
-void cleanup_lock(void *arg)
-{
- kern_printf("J3: KILL!!!\n");
- mutex_unlock(&m0);
- kern_printf("J3: unlocked m0 by the cleanup function\n");
-}
-
-TASK j3()
-{
- kern_printf("J3: before locking m0\n");
- mutex_lock(&m0);
- kern_printf("J3: locked m0, waiting on c0, number =%d\n", number);
- task_cleanup_push(cleanup_lock, (void *)&m0);
- while (!number) {
- cond_wait(&c0,&m0);
- kern_printf("J3: number = %d, if >0 unlocking m0\n",number);
- }
- task_cleanup_pop(0);
- // I hope this task never reach this point... it is killed by J2!!!
- number--;
- mutex_unlock(&m0);
- kern_printf("J3: unlocked m0, end task\n");
- return 0;
-}
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-
-int main(int argc, char **argv)
-{
-// struct timespec t;
-
- NRT_TASK_MODEL m;
-
- PI_mutexattr_t a;
-
- KEY_EVT emerg;
-
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
- /* ---------------------------------------------------------------------
- Task creation
- --------------------------------------------------------------------- */
-
- nrt_task_default_model(m);
- nrt_task_def_group(m,1);
- p0 = task_create("J0", j0, &m, NULL);
- if (p0 == NIL)
- { kern_printf("Can't create J0 task...\n"); return 1; }
-
- p1 = task_create("J1", j1, &m, NULL);
- if (p1 == NIL)
- { kern_printf("Can't create J1 task...\n"); return 1; }
-
- p2 = task_create("J2", j2, &m, NULL);
- if (p2 == NIL)
- { kern_printf("Can't create J2 task...\n"); return 1; }
-
- p3 = task_create("J3", j3, &m, NULL);
- if (p3 == NIL)
- { kern_printf("Can't create J3 task...\n"); return 1; }
-
- /* ---------------------------------------------------------------------
- Mutex creation
- --------------------------------------------------------------------- */
-
- PI_mutexattr_default(a);
- mutex_init(&m0,&a);
-
- cond_init(&c0);
-
- /* ---------------------------------------------------------------------
- Event post
- --------------------------------------------------------------------- */
-
- group_activate(1);
-
- kern_printf("END main\n");
-
- return 0;
-}
Index: start/oldexamples/kernel/test2.c
===================================================================
--- start/oldexamples/kernel/test2.c (revision 1087)
+++ start/oldexamples/kernel/test2.c (nonexistent)
@@ -1,161 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: test2.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 2:
- task_testcancel,
- task_delay
- task_setcancelstate
-
- The task 2 disappear after time 10000 because we have reactivated
- the cancelability and a testcancel is issued
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-
-#if !defined(__TEST1__)
- THE TEST REQUIRE THE DEFINITION __TEST1__ IN CONFIG.C
-#endif
-
-struct timespec s_stime[10000];
-struct timespec s_send[10000];
-TIME s_curr[10000];
-PID s_PID[10000];
-int useds=0;
-int testactive=1;
-
-
-TASK pippo()
-{
- int i;
- struct timespec t;
-// int last = 0;
-
- task_setcancelstate(TASK_CANCEL_DISABLE,&i);
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-// printf_xy(10,8,WHITE,"%9d s%9d n%9d",exec_shadow,t.tv_sec,t.tv_nsec);
-
- if (t.tv_nsec > 10000000)
- {
- task_setcancelstate(TASK_CANCEL_ENABLE,&i);
- }
- if (t.tv_nsec > 5000000)
- {
-// kern_printf("\n%d %dÄ", exec_shadow, proc_table[exec_shadow].control);
- task_testcancel();
- }
- task_delay(1000);
-// kern_printf("Dopo Delay %d ",exec_shadow);
-
- } while (t.tv_nsec <= 30000000L);
-}
-
-TASK pippo2()
-{
- int i;
- struct timespec t;
-// int last = 0;
-
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-// printf_xy(10,9,WHITE,"%d s%9d n%9d\n",exec_shadow,t.tv_sec,t.tv_nsec);
-// kern_printf("Û%dÛ",proc_table[exec_shadow].control);
-
- if (t.tv_nsec > 15000000)
- {
-// kern_printf("XXXXXXXXXX");
- task_setcanceltype(TASK_CANCEL_ASYNCHRONOUS,&i);
- }
- task_delay(1000);
-
- } while (t.tv_nsec <= 30000000L);
-}
-
-int main(int argc, char **argv)
-{
- struct timespec t;
- int i;
- NRT_TASK_MODEL m;
- PID p2,p3;
-// int k=1;
-
- nrt_task_default_model(m);
- nrt_task_def_group(m,1);
-
- p2 = task_create("pippo2", pippo, &m, NULL);
- if (p2 == NIL)
- { kern_printf("Can't create pippo2 task...\n"); return 1; }
-
- p3 = task_create("pippo3", pippo2, &m, NULL);
- if (p3 == NIL)
- { kern_printf("Can't create pippo3 task...\n"); return 1; }
-
- group_activate(1);
-
-
- task_kill(p2);
-
- NULL_TIMESPEC(&t);
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-
- task_kill(p3);
-
- } while (t.tv_nsec <= 20000000L);
- testactive = 0;
-
- kern_printf("FINE MAIN time=%d useds=%d\n",ll_gettime(TIME_EXACT,NULL),useds);
- for (i=0; i<useds; i++)
- kern_printf("%6d: pid %-9d stime %-9d reschedule %-9d avail %-9d\n",i,
- s_PID[i], s_stime[i].tv_nsec, s_send[i].tv_nsec, s_curr[i]);
-
- return 0;
-}
Index: start/oldexamples/kernel/tests.c
===================================================================
--- start/oldexamples/kernel/tests.c (revision 1087)
+++ start/oldexamples/kernel/tests.c (nonexistent)
@@ -1,79 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: tests.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- memtest.c:
-
- try to allocate different regions of memory...
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-
-int main(int argc, char **argv)
-{
- void *a;
-
- kern_cli(); a = DOS_alloc(4500); kern_sti();
- kern_printf("below 1 M: %ld\n", (DWORD)a);
-
- kern_cli(); a = kern_alloc_aligned(10000,MEMORY_UNDER_16M,10,0); kern_sti();
- kern_printf("below 16M: %ld\n", (DWORD)a);
-
- kern_cli(); a = kern_alloc_aligned(10000,MEMORY_FROM_1M_TO_16M,2,0); kern_sti();
- kern_printf(">1M <16M : %ld\n", (DWORD)a);
-
- kern_cli(); a = kern_alloc(10000); kern_sti();
- kern_printf("normal : %ld\n", (DWORD)a);
-
- kern_cli(); a = kern_alloc_page(MEMORY_UNDER_1M); kern_sti();
- kern_printf("page <1M : %ld\n", (DWORD)a);
-
- kern_cli(); a = kern_alloc_page(MEMORY_FROM_1M_TO_16M); kern_sti();
- kern_printf("p>1<16M : %ld\n", (DWORD)a);
-
- kern_cli(); a = kern_alloc_page(0); kern_sti();
- kern_printf("page : %ld\n", (DWORD)a);
-
- return 0;
-}
Index: start/oldexamples/kernel/test3.c
===================================================================
--- start/oldexamples/kernel/test3.c (revision 1087)
+++ start/oldexamples/kernel/test3.c (nonexistent)
@@ -1,137 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: test3.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 3:
- task_cleanup_push
- task_cleanup_pop
-
- It may print many 0 and then only one 1
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-
-#if !defined(__TEST1__)
- THE TEST REQUIRE THE DEFINITION __TEST1__ IN CONFIG.C
-#endif
-
-struct timespec s_stime[10000];
-struct timespec s_send[10000];
-TIME s_curr[10000];
-PID s_PID[10000];
-int useds=0;
-int testactive=1;
-
-
-void fun1(void *p)
-{
- kern_printf("ÛÛ %d ÛÛ",(int)p);
-}
-
-
-TASK pippo()
-{
- int i;
- struct timespec t;
- int last = 0;
- task_cleanup_push(fun1,(void *)1);
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-
- if (t.tv_nsec > 5000000)
- {
- task_testcancel();
-
- task_cleanup_push(fun1,(void *)-1);
- task_cleanup_push(fun1,(void *)0);
- task_cleanup_pop(1);
- task_cleanup_pop(0);
- }
- task_delay(1000);
-
- } while (t.tv_nsec <= 30000000L);
- task_cleanup_pop(1);
-}
-
-
-
-int main(int argc, char **argv)
-{
- struct timespec t;
- NRT_TASK_MODEL m;
- PID p2,p3;
- int k=1;
- int i;
-
- nrt_task_default_model(m);
- nrt_task_def_group(m,1);
-
- p2 = task_create("pippo2", pippo, &m, NULL);
- if (p2 == NIL)
- { kern_printf("Can't create pippo2 task...\n"); return 1; }
-
- group_activate(1);
-
-
- NULL_TIMESPEC(&t);
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-
- if (t.tv_nsec > 10000000) task_kill(p2);
- } while (t.tv_nsec <= 20000000L);
- testactive = 0;
-
- return 0;
-
- kern_printf("FINE MAIN time=%d useds=%d\n",ll_gettime(TIME_EXACT,NULL),useds);
- for (i=0; i<useds; i++)
- kern_printf("%6d: pid %6d stime %6d reschedule %6d avail %6d\n",i,
- s_PID[i], s_stime[i].tv_nsec, s_send[i].tv_nsec, s_curr[i]);
-
- return 0;
-}
Index: start/oldexamples/kernel/test4.c
===================================================================
--- start/oldexamples/kernel/test4.c (revision 1087)
+++ start/oldexamples/kernel/test4.c (nonexistent)
@@ -1,67 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: test4.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
-Test Number 4:
-
- this test is a simple main() function
-
- This test has to be compiled with init1.c, that introduce 2 RR levels
- with a timeslice of 300us (!)
-
- This test can be useful to test functions like
-
- perror
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-
-int main(int argc, char **argv)
-{
- errno = EUNVALID_KILL; kern_printf("code: %d ",errno); perror("EUNVALID_KILL");
- errno = EINVAL; kern_printf("code: %d ",errno); perror("EINVAL");
- errno = ENOMEDIUM; kern_printf("code: %d ",errno); perror("ENOMEDIUM");
-
- return 0;
-}
Index: start/oldexamples/kernel/testu.c
===================================================================
--- start/oldexamples/kernel/testu.c (revision 1087)
+++ start/oldexamples/kernel/testu.c (nonexistent)
@@ -1,115 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testu.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number ?? (U):
-
- this test is a simple main() function with one other task.
-
- This test verify the correctness of the internal_sem functions.
-
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-
-#include <kernel/int_sem.h>
-
-internal_sem_t s;
-
-TASK pippo(void *a)
-{
- int i=0;
- struct timespec t;
-// int last = 0;
-
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-
- if (i==0 && t.tv_sec == (int)a) {
- i = 1;
- kern_printf("before internal_sem_wait %d\n",(int)a);
- internal_sem_wait(&s);
- kern_printf("after internal_sem_wait %d\n",(int)a);
- }
-
- if (i==1 && t.tv_sec == 2+(int)a) {
- i = 2;
- kern_printf("before internal_sem_post %d\n",(int)a);
- internal_sem_post(&s);
- kern_printf("after internal_sem_post %d\n",(int)a);
- return 0;
- }
-
-
- } while (1);
-}
-
-int main(int argc, char **argv)
-{
-// struct timespec t;
-// int i;
- NRT_TASK_MODEL m;
- PID p2,p3;
-
- nrt_task_default_model(m);
- nrt_task_def_group(m,1);
-
- nrt_task_def_arg(m,(void *)1);
- p2 = task_create("pippo1", pippo, &m, NULL);
- if (p2 == NIL)
- { kern_printf("Can't create pippo1 task...\n"); return 1; }
-
- nrt_task_def_arg(m,(void *)2);
- p3 = task_create("pippo2", pippo, &m, NULL);
- if (p3 == NIL)
- { kern_printf("Can't create pippo2 task...\n"); return 1; }
-
- internal_sem_init(&s,1);
-
- group_activate(1);
-
- return 0;
-}
Index: start/oldexamples/kernel/test5.c
===================================================================
--- start/oldexamples/kernel/test5.c (revision 1087)
+++ start/oldexamples/kernel/test5.c (nonexistent)
@@ -1,165 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: test5.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 5:
-
- this test is a simple main() function with one other task
-
- This test has to be compiled with init1.c, that introduce 2 RR levels
- with a timeslice of 300us (!)
-
- This test can be useful to test functions like
-
- sigemptyset
- sigaddset
- hartik_deliver_pending_signals
- sys_end
- task_sigmask
- sigaction
- sigqueue
- task_signal
-
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-
-
-TASK pippo()
-{
- struct timespec t;
-
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-
- } while (t.tv_nsec <= 20000000L);
- cli(); kern_printf("pippo"); sti();
- return 0;
-}
-
-void catchit(int signo, siginfo_t *info, void *extra)
-{
- kern_printf("\nÛ exec_shadow= %d signo=%d code=%d value=%d p=%d Û\n",
- exec_shadow,
- info->si_signo, info->si_code,
- info->si_value.sival_int, info->si_task);
-}
-
-
-void catchit2(int signo)
-{
- kern_printf("\nSignal %d: AAARRRRRRGGGGHHHH!!!!\n",signo);
-}
-
-int main(int argc, char **argv)
-{
- struct timespec t;
- NRT_TASK_MODEL m;
- PID p2;
-
- sigset_t newmask;
- sigset_t oldmask;
- struct sigaction action;
- union sigval sval;
-
-
- /* Set the signal action */
- action.sa_flags = SA_SIGINFO;
- action.sa_sigaction = catchit;
- action.sa_handler = 0;
- action.sa_mask = 0;
-
- if (sigaction(SIGUSR1, &action, NULL) == -1) {
- perror("Errore");
- return -1;
- }
-
- action.sa_flags = 0;
- action.sa_handler = catchit2;
-// action.sa_sigaction = SIG_DFL;
-
- if (sigaction(SIGILL, &action, NULL) == -1) {
- perror("Errore");
- return -1;
- }
-
- /* create another task */
- nrt_task_default_model(m);
- nrt_task_def_level(m,1);
- nrt_task_def_group(m,1);
-
- p2 = task_create("pippo", pippo, &m, NULL);
- if (p2 == NIL)
- { kern_printf("Can't create pippo task...\n"); return 1; }
-
- group_activate(1);
-
- /* block the signal for the main task */
- sigemptyset(&newmask);
- sigaddset(&newmask,SIGUSR1);
- task_sigmask(SIG_BLOCK, &newmask, &oldmask);
-
- sval.sival_int = 123;
- sigqueue(0,SIGUSR1,sval);
- sval.sival_int = 999;
- sigqueue(0,SIGUSR1,sval);
-
- cli();kern_printf("\n()()()()\n"); sti();
-
- task_signal(0 /* main */, SIGILL);
-
- NULL_TIMESPEC(&t);
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-
- } while (t.tv_nsec <= 50000000L);
-
- cli();kern_printf("\n()*********()\n"); sti();
-
- return 0;
-}
Index: start/oldexamples/kernel/test6.c
===================================================================
--- start/oldexamples/kernel/test6.c (revision 1087)
+++ start/oldexamples/kernel/test6.c (nonexistent)
@@ -1,465 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: test6.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 6:
-
- this is a part of the classic Hartik demo Aster.
-
- It checks:
- - EDF module
- . periodic tasks
- - an high number of task executing concurrently
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- Well, this is only a stupid demo which intend to show many
- HARTIK+ capabilities; the application is structured in the followig
- way: there is an ASTER task wich randomly creates some ASTEROID tasks
- which are displayed into the first window; each task is HARD/PERIODIC
- and auto-kills itself when it reaches the window end!
- An other couple of tasks, TITLE & PUT give an example of port
- communication facility; the server task creates the port, the client
- task connect to it and uses the server to accomplish some stuff.
- Port can be declared READ/WRITE and can model ONE-TO-ONE communication
- or MANY-TO-ONE communication.
- Finally a second couple of tasks realizes a communiation through CABs;
- each time a key is pressed, the ascii code is posted into the CAB by the
- CCC task while the second task, WRITE, displays it on the screen and
- perform other silly actions.
- Finally a CLOCK task is implemented to test system clock.
- Please note that usually the HARTIK+ application is made up of a task
- group which interacts among them, while the main() function, which
- became a task itself when the kernel is activated, is suspended until
- the system is ready to terminate; the MAIN task can also be used to make
- other background activities, but it should not be killed; when the
- application terminates, the control is passed to MAIN which kills
- everybody, shut down the system and can handle other operations using
- the services available with the previou operating system (I.E. the DOS).
- If you need to manage sudden abort/exception you should install your own
- exception handler and raise it through the exc_raise() primitive to
- make the system abort safely!
- Remember that the exit functions posted through sys_atexit() will be
- executed in both cases, to allow clean system shutdown.
-*/
-
-//#include <string.h>
-//#include <stdlib.h>
-
-//#include "hartik.h"
-
-//#define __VPAGING__
-/* #define __TRACE__ */
-
-//#ifdef __TRACE__
-//#include "sys\log.h"
-//#endif
-
-//#include "keyb.h"
-//#include "cons.h"
-//#include "crtwin.h"
-
-#include "kernel/kern.h"
-
-
-int num_aster = 0;
-#define ASTER_LIM 67
-#define ASTER_MAX 90
-
-//CAB cc;
-//BYTE esc = FALSE;
-
-TASK asteroide(void)
-{
- int i = 1;
- int y = rand() % 20 + 1;
- while (i < ASTER_LIM) {
- puts_xy(i,y,WHITE,"*");
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- num_aster--;
- return 0;
-}
-
-DWORD taskCreated = 0;
-
-TASK aster(void)
-{
- PID p;
-
-// MODEL m = BASE_MODEL;
- HARD_TASK_MODEL m;
- int r;
-// WIN w;
-
-// win_init(&w,0,0,ASTER_LIM,8);
-// win_frame(&w,BLACK,WHITE,"Asteroids",2);
-
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,500);
-
- srand(7);
- while (1) {
- if (num_aster < ASTER_MAX) {
- r = (rand() % 50) - 25;
-
- hard_task_def_arg(m,(void *)((rand() % 7)+1));
- hard_task_def_mit(m, (50+r)*1000);
- p = task_create("aaa",asteroide,&m,NULL);
- taskCreated++;
- task_activate(p);
- num_aster++;
- }
-
- task_endcycle();
- }
-}
-
-TASK clock()
-{
- //WIN w;
- int s = 0, m = 0;
-
- //win_init(&w,68,0,11,2);
- //win_frame(&w,BLACK,WHITE,"Clk",1);
-
- while(1) {
- printf_xy(70,1,WHITE,"%2d : %2d",m,s);
- task_endcycle();
-
- if (++s > 59) {
- s = 0;
- m++;
- }
- printf_xy(70,1,WHITE,"%2d : %2d",m,s);
- task_endcycle();
- }
-}
-
-/*
-TASK title()
-{
- PORT t;
- WIN w;
- int i,pos = 77;
- char msg[85],tmp[85],ss[2];
- BYTE c;
-
- win_init(&w,0,9,79,2);
- win_frame(&w,BLACK,WHITE,"Title",2);
-
- for (i=0; i < 77; i++) msg[i] = ' ';
- msg[77] = 0;
-
- t = port_connect("title",1,STREAM,READ);
-
- while (1) {
- port_receive(t,&c,BLOCK);
- ss[0] = c;
- ss[1] = 0;
- strcat(msg,ss);
- puts_xy(1,10,WHITE,msg);
- pos++;
- if (pos > 77) {
- strcpy(tmp,&(msg[1]));
- tmp[pos-1] = 0;
- pos -= 1;
- strcpy(msg,tmp);
- }
- task_endcycle();
- }
-}
-
-#define STR "..................... Hartik+ ....................."\
- " Guarantees hard tasks "\
- " Includes soft periodic tasks "\
- "TB server for decrementing the aperiodic response time "\
- "SRP for both hard & soft aperiodic tasks "\
- "Portability toward other compilers/system "\
- "Support for different C compiler: Watcom C 16 bit & 32 bit"\
- " -- GNU C (32 bit) -- Borland C (16 bit) -- MS C (16 bit)"\
- " "\
- "Programmers : Gerardo Lamastra (lamastra@sssup2.sssup.it) "\
- " Giuseppe Lipari (lipari@sssup2.sssup.it) "\
- "Alpha AXP PCI-33 porting by Antonino Casile "\
- "(casile@sssup1.sssup.it) "\
- "Research coordinator: Giorgio Buttazzo (giorgio@sssup1.sssup.it)"\
- " "\
- " "\
- " "
-
-static char GreetMsg[1600];
-
-TASK put(void)
-{
- PORT p;
-
- strcpy(GreetMsg,STR);
-
- p = port_create("title",strlen(GreetMsg),1,STREAM,WRITE);
- while(1) {
- port_send(p,GreetMsg,BLOCK);
- task_endcycle();
- }
-}
-
-TASK ccc(void)
-{
- WIN w;
- char *m;
-
- win_init(&w,68,3,10,3);
- win_frame(&w,BLACK,WHITE,"CCC",2);
- puts_xy(70,4,WHITE,"Cab");
-
- while(1) {
- m = cab_getmes(cc);
- puts_xy(72,5,WHITE,m);
- cab_unget(cc,m);
- task_endcycle();
- }
-}
-
-
-TASK write()
-{
- BYTE c;
- char *msg;
-
- while (1) {
- c = keyb_getchar();
- if (c == ESC) {
- esc = TRUE;
- task_sleep();
- }
- else {
- #ifdef __VPAGING__
- if (c == 's') {
- if (get_visual_page() == 0) set_visual_page(1);
- else if (get_visual_page() == 1) set_visual_page(0);
- }
- #endif
- msg = cab_reserve(cc);
- msg[0] = c;
- msg[1] = 0;
- cab_putmes(cc,msg);
- }
- }
-}
-
-#define DELTA 200000.0
-double carico(double rif,BYTE init)
-{
- double i;
- DWORD t1 = 0,t2 = 1000;
- double u;
-
- i = 0.0;
- do {
- i += 1;
- } while (i <= DELTA);
-
- u = i / ((double) (t2 - t1));
-
- if (init) return u;
- else return (1.0 - u/rif);
-}
-
-void my_end(KEY_EVT *e)
-{
- sys_end();
- cprintf("Ctrl-Brk pressed!\n");
- l1_exit(1);
-}
-
-void res(void)
-{
- sys_status(NORM_STATUS|BLOCKED_STATUS|SLEEP_STATUS|IDLE_STATUS);
-}
-*/
-
-int main(int argc, char **argv)
-{
- PID p1,p2; //,p3,p4,p5,p6;
- HARD_TASK_MODEL m;
-
-/* MODEL m = BASE_MODEL;
- SYS_PARMS sp = BASE_SYS;
- KEY_EVT emerg;
- double rif;
-
- #ifdef __TRACE__
- LOG_INFO li = BASE_LOG;
- log_set_limit(li,9000);
- log_set_name(li,"aster.hrt");
- #endif
- sys_def_nocheck(sp);
- sys_init(&sp);
- sys_atexit(res, BEFORE_EXIT);
-
- #ifdef __TRACE__
- log_init(&li);
- #endif
-
- keyb_init(NULL);
- keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,my_end);
-
- #ifdef __VPAGING__
- set_active_page(1);
- set_visual_page(1);
- #endif
-
-
- CRSR_OFF();
- clear();
- puts_xy(0,20,WHITE,"Press ESC to exit demo.");
- cc = cab_create("Cab",2,2);
-*/
-
- hard_task_default_model(m);
- hard_task_def_mit(m,10000);
- hard_task_def_wcet(m,2000);
- hard_task_def_group(m,1);
-// periodic_task_def_ctrl_jet(m);
-
- p1 = task_create("Aster",aster,&m,NULL);
- if (p1 == -1) {
- perror("Aster.C(main): Could not create task <aster> ...");
- sys_end();
- l1_exit(-1);
- }
-
- hard_task_def_mit(m,500000);
- p2 = task_create("Clock",clock,&m,NULL);
- if (p2 == -1) {
- perror("Aster.C(main): Could not create task <Clock> ...");
- sys_end();
- l1_exit(-1);
- }
-/* p3 = task_create("Title",title,SOFT,PERIODIC,50,&m);
- if (p3 == -1) {
- perror();
- cprintf("Aster.C(main): Could not create task <Title>\n");
- sys_end();
- l1_exit(-1);
- }
- p4 = task_create("Put",put,SOFT,PERIODIC,1000,&m);
- if (p4 == -1) {
- perror();
- cprintf("Aster.C(main): Could not create task <Put>\n");
- sys_end();
- l1_exit(-1);
- }
- p5 = task_create("Write",write,NRT,APERIODIC,10,&m);
- if (p5 == -1) {
- perror();
- cprintf("Aster.C(main): Could not create task <Write>\n");
- sys_end();
- l1_exit(-1);
- }
- p6 = task_create("CabTask",ccc,HARD,PERIODIC,50,&m);
- if (p6 == -1) {
- perror();
- cprintf("Aster.C(main): Could not create task <CabTask>\n");
- sys_end();
- l1_exit(-1);
- }
- #ifdef __TRACE__
- log_loop();
- #endif
-
- task_activate(p1);
- task_activate(p2);
- task_activate(p3);
- task_activate(p4);
- task_activate(p5);
- task_activate(p6);
-
- group_activate(1);
-
- while (!esc) {
- printf_xy(0,21,WHITE,"Clock : %lu",sys_time());
- }
-
- #ifdef __TRACE__
- log_fix();
- #endif
- group_kill(1);
- clear();
- CRSR_STD();
- #ifdef __VPAGING__
- set_active_page(0);
- set_visual_page(0);
- #endif
- sys_end();
- cprintf("System closed\n");
- / *
- sys_status(NORM_STATUS|BLOCKED_STATUS|SLEEP_STATUS|IDLE_STATUS);
- sys_status(NORM_STATUS|SLEEP_STATUS);
- */
-
- group_activate(1);
-
- {
- struct timespec t;
- do {
- kern_cli();
- ll_gettime(TIME_EXACT,&t);
- kern_sti();
- } while (t.tv_sec < 6);
- }
- kern_cli();
- sys_status(SCHED_STATUS);
- sys_end();
- return 0;
-}
-
Index: start/oldexamples/kernel/sysend.c
===================================================================
--- start/oldexamples/kernel/sysend.c (revision 1087)
+++ start/oldexamples/kernel/sysend.c (nonexistent)
@@ -1,143 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: sysend.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- System termination:
-
- the main task create J1, J2 and wait until 1 sec., then it calls sys_end
- and cycles around a task_testcancel
-
- J1 is a system task that ends at t=1.5 sec.
-
- J2 is another user task that dies at t= 1.8 sec (it will not die!!!)
-
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <sys/types.h>
-#include <pthread.h>
-#include <signal.h>
-
-#include <kernel/kern.h>
-#include <drivers/keyb.h>
-
-void *J1(void *arg)
-{
- while (sys_gettime(NULL) < 1500000);
- kern_printf("J1: t = 1.5 sec, ending...");
- return 0;
-}
-
-void uscitaJ2(void *arg)
-{
- kern_printf("J2: AAAARRRRGGGHHH!!! killed by someone, time = %ld\n",sys_gettime(NULL));
-}
-
-void *J2(void *arg)
-{
- task_cleanup_push(uscitaJ2,NULL);
-
- while (sys_gettime(NULL) < 1800000);
- kern_printf("J1: t = 1.8 sec, ending...");
-
- task_cleanup_pop(0);
- return 0;
-}
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-void uscitamain(void *arg)
-{
- kern_printf("main: AAAARRRRGGGHHH!!! killed by someone, time = %ld\n",sys_gettime(NULL));
-}
-
-
-int main(int argc, char **argv)
-{
- PID err;
-
- NRT_TASK_MODEL m1, m2;
-
- KEY_EVT emerg;
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
-
- nrt_task_default_model(m1);
- nrt_task_def_system(m1);
- nrt_task_def_level(m1,1);
- nrt_task_default_model(m2);
- nrt_task_def_level(m2,1);
-
- kern_printf("main: creating J1\n");
- err = task_create("J1", J1, (TASK_MODEL *)&m1, NULL);
- if (err == -1) kern_printf("Error creating J1\n");
- task_activate(err);
-
- kern_printf("main: creating J2\n");
- err = task_create("J2", J2, (TASK_MODEL *)&m2, NULL);
- if (err == -1) kern_printf("Error creating J2\n");
- task_activate(err);
-
- kern_printf("main: waiting 1 sec\n");
- while (sys_gettime(NULL) < 1000000);
-
- kern_printf("main: sys_end()\n");
-
- sys_end();
-
- task_cleanup_push(uscitamain,NULL);
-
- while (1)
- task_testcancel();
-
- task_cleanup_pop(0);
-
- return 0;
-}
Index: start/oldexamples/kernel/testw.c
===================================================================
--- start/oldexamples/kernel/testw.c (revision 1087)
+++ start/oldexamples/kernel/testw.c (nonexistent)
@@ -1,42 +0,0 @@
-//#include <string.h>
-//#include <stdlib.h>
-//#include <cons.h>
-
-
-#include <kernel/kern.h>
-#include <drivers/keyb.h>
-
-int main(int argc, char **argv)
-{
- KEY_EVT k;
- clear();
- k.ascii = 0;
- while (k.ascii != ESC) {
- keyb_getcode(&k,BLOCK);
- if (k.ascii == '2') {
- keyb_set_map(itaMap);
- cprintf("\nItalian Keymap set\n");
- }
- if (k.ascii == '3') {
- keyb_set_map(engMap);
- cprintf("\nEnglish Keymap set\n");
- }
- if (isLeftCtrl(k)) putc_xy(72+0,0,RED,'L');
- else putc_xy(72+0,0,RED,' ');
- if (isRightCtrl(k)) putc_xy(72+1,0,RED,'R');
- else putc_xy(72+1,0,RED,' ');
- if (isLeftAlt(k)) putc_xy(72+2,0,GREEN,'L');
- else putc_xy(72+2,0,RED,' ');
- if (isRightAlt(k)) putc_xy(72+3,0,GREEN,'R');
- else putc_xy(72+3,0,RED,' ');
- if (isLeftShift(k)) putc_xy(72+4,0,YELLOW,'L');
- else putc_xy(72+4,0,RED,' ');
- if (isRightShift(k)) putc_xy(72+5,0,YELLOW,'R');
- else putc_xy(72+5,0,RED,' ');
-
- cprintf("%d [%c]\t",k.scan,k.ascii);
-
- }
- sys_end();
- return 0;
-}
Index: start/oldexamples/kernel/test7.c
===================================================================
--- start/oldexamples/kernel/test7.c (revision 1087)
+++ start/oldexamples/kernel/test7.c (nonexistent)
@@ -1,253 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: test7.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 7:
-
- this is a part of the classic Hartik demo Aster.
-
- It checks:
- - jet functions
- - The EDF level with many task, with almost full bandwidth used
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules//edf.h"
-
-int num_aster = 0;
-#define ASTER_LIM 60
-#define DISPLAY_MAX 15
-#define ASTER_MAX 70
-#define STAT_Y 9
-
-// first numbers for wcet and periods are for a 486/25, the others for a
-// celeron 366
-
-#define PER_WCET 13000 /*6200*/
-#define CLOCK_WCET 1200 /* 100*/
-#define ASTER_WCET 1200 /* 100*/
-
-#define ASTER_MEAN_PERIOD 64 /*64*/
-
-#define END_TEST_TIME 50
-
-TASK asteroide(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 1000; //10000; // 5000 + rand()%5000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
-
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- num_aster--;
- return 0;
-}
-
-TASK aster()
-{
- PID p;
-
- HARD_TASK_MODEL m;
- int r;
- int x; // adaptive bandwidth...
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,PER_WCET);
- hard_task_def_ctrl_jet(m);
-
- x = ASTER_MEAN_PERIOD;
-
- srand(7);
- while (1) {
- if (num_aster < ASTER_MAX) {
- r = (rand() % 200);
-
- hard_task_def_arg(m,(void *)((rand() % 7)+1));
- hard_task_def_mit(m, (x+r)*1000);
- p = task_create("aaa",asteroide,&m,NULL);
- if (p == -1)
- {
- if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
- printf_xy(62,3,WHITE,"adapt=%3u err=%d",freedesc,errno);
- }
- else {
- num_aster++;
- printf_xy(62,3,WHITE,"adapt=%3u ",x);//,errno);
- task_activate(p);
- x /= 2;
- if (x<50) x = 50;
- }
- }
- task_endcycle();
- }
-}
-
-TASK clock()
-{
- int s = 0, m = 0;
-
- while(1) {
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"U=%12u",EDF_usedbandwidth(0));
- task_endcycle();
-
- if (++s > 59) {
- s = 0;
- m++;
- }
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"U=%12u",EDF_usedbandwidth(0));
- task_endcycle();
- }
-}
-
-
-
-/* we consider the first ASTER_MAX + 2 tasks from the PID 2
- and plot on the screen the elapsed times... */
-TASK jetcontrol()
-{
- int i; /* a counter */
- TIME sum, max, curr, last[5];
- int nact;
- int j; /* the elements set by jet_gettable */
- PID p;
-
-
- kern_cli();
- printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
- kern_sti();
-
- for (;;) {
- for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
- if (jet_getstat(p, &sum, &max, &nact, &curr) == -1) continue;
-
- for (j=0; j<5; j++) last[j] = 0;
- jet_gettable(p, &last[0], 5);
- kern_cli();
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
- kern_sti();
- i++;
- }
- }
-}
-
-int main(int argc, char **argv)
-{
- PID p1,p2,p3; //,p4,p5,p6;
- HARD_TASK_MODEL m;
- NRT_TASK_MODEL m_nrt;
-
- hard_task_default_model(m);
- hard_task_def_wcet(m,ASTER_WCET);
- hard_task_def_mit(m,10000);
- hard_task_def_group(m,1);
- hard_task_def_ctrl_jet(m);
-
- nrt_task_default_model(m_nrt);
- nrt_task_def_group(m_nrt,1);
- nrt_task_def_ctrl_jet(m_nrt);
-
- p1 = task_create("Aster",aster,&m,NULL);
- if (p1 == -1) {
- perror("test7.c(main): Could not create task <aster> ...");
- sys_end();
- l1_exit(-1);
- }
-
- hard_task_def_mit(m,500000);
- hard_task_def_wcet(m,CLOCK_WCET);
- p2 = task_create("Clock",clock,&m,NULL);
- if (p2 == -1) {
- perror("test7.c(main): Could not create task <Clock> ...");
- sys_end();
- l1_exit(-1);
- }
-
- p3 = task_create("JetControl",jetcontrol,&m_nrt,NULL);
- if (p2 == -1) {
- perror("test7.c(main): Could not create task <JetControl> ...");
- sys_end();
- l1_exit(-1);
- }
-
- group_activate(1);
-
- {
- struct timespec t;
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
- } while (t.tv_sec < END_TEST_TIME);
- }
- //sys_status(SCHED_STATUS);
- kern_printf("ora chiamo sys_end\n");
- sys_end();
- kern_printf("ho chiamato sys_end\n");
- return 0;
-}
-
-
-
-
Index: start/oldexamples/kernel/test8.c
===================================================================
--- start/oldexamples/kernel/test8.c (revision 1087)
+++ start/oldexamples/kernel/test8.c (nonexistent)
@@ -1,81 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: test8.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 8:
-
- timer test
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-
-#define NT 10
-
-int main(int argc, char **argv)
-{
-
- struct timespec t[NT];
- int i;
-
- kern_printf("Test di correttezza ll_gettime(). dura 1 secondo. ");
-
- for (i=0; i<NT; i++) NULL_TIMESPEC(&t[i]);
-
- do {
- for (i=0; i<NT-1; i++) t[i+1] = t[i];
-
- kern_cli();
- ll_gettime(TIME_EXACT, &t[0]);
- kern_sti();
-
- if (TIMESPEC_A_LT_B(&t[0],&t[1])) {
- for (i=0; i<NT; i++)
- kern_printf("%d %ld\n",i, t[i].tv_nsec);
- sys_end();
- }
- } while (t[0].tv_sec < 1);
-
- return 0;
-}
-
Index: start/oldexamples/kernel/test9.c
===================================================================
--- start/oldexamples/kernel/test9.c (revision 1087)
+++ start/oldexamples/kernel/test9.c (nonexistent)
@@ -1,234 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: test9.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test Number 9:
-
- same as Test 7, with 8 TBS tasks running
-
- TBS test
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-
-#if !defined(__TEST1__)
- THE TEST REQUIRE THE DEFINITION __TEST1__ IN CONFIG.C
-#endif
-
-struct timespec s_stime[10000];
-struct timespec s_send[10000];
-TIME s_curr[10000];
-PID s_PID[10000];
-int useds=0;
-int testactive=1;
-
-TASK pippo()
-{
- int i;
- struct timespec t;
- int last = 0;
-
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
- } while (t.tv_nsec <= 30000000L);
-}
-
-TASK pippo2()
-{
- int i;
- struct timespec t;
- int last = 0;
-
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-
- } while (t.tv_nsec <= 30000000L);
-}
-
-TASK asteroide(void)
-{
- int i;
- int y = rand() % 7 + 15;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < 60) {
- load1 = 10000; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
-
- task_endcycle();
-
- if (i==7) testactive = 0;
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- //num_aster--;
-}
-
-TASK aper(void *a)
-{
- int i;
- int y;
-
- int load1,j;
-
- char s[2];
-
- y = (int) a;
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < 60) {
- load1 = 100000; //8000 + rand()%2000;
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- puts_xy(i,y,rand()%15+1,s);
- }
-
- task_sleep();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
- //num_aster--;
-}
-
-
-int main(int argc, char **argv)
-{
- struct timespec t;
- int i;
- NRT_TASK_MODEL m;
- HARD_TASK_MODEL m_per;
- SOFT_TASK_MODEL m_aper;
- PID p1, p2, p3, p4, p5;
- int k=1;
-
- srand(7);
-
- nrt_task_default_model(m);
- nrt_task_def_group(m,1);
-
- p1 = task_create("pippo", pippo, &m, NULL);
- if (p1 == NIL)
- { kern_printf("Can't create pippo task...\n"); sys_end(); }
-
- p2 = task_create("pippo2", pippo2, &m, NULL);
- if (p2 == NIL)
- { kern_printf("Can't create pippo2 task...\n"); sys_end(); }
-
- hard_task_default_model(m_per);
- hard_task_def_wcet(m_per,6200);
- hard_task_def_mit(m_per,15000);
- hard_task_def_group(m_per,1);
- p3 = task_create("asteroide", asteroide, &m_per, NULL);
- if (p3 == NIL)
- { kern_printf("Can't create asteroide task...\n"); sys_end(); }
-
- soft_task_default_model(m_aper);
- soft_task_def_wcet(m_aper,62000);
- soft_task_def_group(m_aper,1);
- soft_task_def_system(m_aper);
- soft_task_def_arg(m_aper, 14);
- soft_task_def_aperiodic(m_aper);
- p4 = task_create("aper", aper, &m_aper, NULL);
- if (p4 == NIL)
- { kern_printf("Can't create aper task...%d \n",errno); sys_end(); }
-
- soft_task_def_arg(m_aper, 13);
- p5 = task_create("aper", aper, &m_aper, NULL);
- if (p5 == NIL)
- { kern_printf("Can't create aper(2) task...\n"); sys_end(); }
-
- soft_task_def_arg(m_aper, 12);
- p5 = task_create("aper", aper, &m_aper, NULL);
- if (p5 == NIL)
- { kern_printf("Can't create aper(2) task...\n"); sys_end(); }
-
- soft_task_def_arg(m_aper, 11);
- p5 = task_create("aper", aper, &m_aper, NULL);
- if (p5 == NIL)
- { kern_printf("Can't create aper(2) task...\n"); sys_end(); }
-
-// kern_printf("p1=%d p2=%d p3=%d p4=%d\n",p1,p2,p3,p4);
- group_activate(1);
-
-
-// task_kill(p2);
-
- NULL_TIMESPEC(&t);
- do {
- kern_cli();
- ll_gettime(TIME_EXACT, &t);
- kern_sti();
-
-// task_kill(p3);
- } while (t.tv_sec < 1);
- testactive = 0;
-/*
- kern_printf("FINE MAIN time=%d useds=%d\n",ll_gettime(TIME_EXACT,NULL),useds);
- for (i=0; i<useds; i++)
- kern_printf("%6d: pid %-9d stime %-9d reschedule %-9d avail %-9d\n",i,
- s_PID[i], s_stime[i].tv_nsec, s_send[i].tv_nsec, s_curr[i]);
-*/
- return 0;
-}
Index: start/oldexamples/kernel/testz.c
===================================================================
--- start/oldexamples/kernel/testz.c (revision 1087)
+++ start/oldexamples/kernel/testz.c (nonexistent)
@@ -1,456 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testz.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Author: Gerardo Lamastra
- Giuseppe Lipari
- Date: 1/10/96
-
- File: Aster.C
- Revision: 1.6
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- Well, this is only a stupid demo which intend to show many
- HARTIK+ capabilities; the application is structured in the followig
- way: there is an ASTER task wich randomly creates some ASTEROID tasks
- which are displayed into the first window; each task is HARD/PERIODIC
- and auto-kills itself when it reaches the window end!
- An other couple of tasks, TITLE & PUT give an example of port
- communication facility; the server task creates the port, the client
- task connect to it and uses the server to accomplish some stuff.
- Port can be declared READ/WRITE and can model ONE-TO-ONE communication
- or MANY-TO-ONE communication.
- Finally a second couple of tasks realizes a communiation through CABs;
- each time a key is pressed, the ascii code is posted into the CAB by the
- CCC task while the second task, WRITE, displays it on the screen and
- perform other silly actions.
- Finally a CLOCK task is implemented to test system clock.
- Please note that usually the HARTIK+ application is made up of a task
- group which interacts among them, while the main() function, which
- became a task itself when the kernel is activated, is suspended until
- the system is ready to terminate; the MAIN task can also be used to make
- other background activities, but it should not be killed; when the
- application terminates, the control is passed to MAIN which kills
- everybody, shut down the system and can handle other operations using
- the services available with the previou operating system (I.E. the DOS).
- If you need to manage sudden abort/exception you should install your own
- exception handler and raise it through the exc_raise() primitive to
- make the system abort safely!
- Remember that the exit functions posted through sys_atexit() will be
- executed in both cases, to allow clean system shutdown.
-*/
-
-//#include <string.h>
-//#include <stdlib.h>
-
-#include <kernel/kern.h>
-#include <modules/sem.h>
-#include <modules/hartport.h>
-#include <modules/cabs.h>
-#include <drivers/keyb.h>
-#include <string.h>
-
-
-#define __VPAGING__
-
-
-#ifdef __TRACE__
-#undef __TRACE__
-#endif
-
-/* #define __TRACE__ */
-
-#ifdef __TRACE__
-#include "sys\log.h"
-#endif
-
-#include <drivers/keyb.h>
-//#include cons.h
-#include <drivers/crtwin.h>
-
-int num_aster = 0;
-#define ASTER_LIM 67
-
-CAB cc;
-BYTE esc = FALSE;
-
-TASK asteroide(void)
-{
- int i = 1;
- int y = rand() % 7 + 1;
- while (i < ASTER_LIM) {
- puts_xy(i,y,WHITE,"*");
- task_endcycle();
-
- puts_xy(i,y,WHITE," ");
- i++;
- }
- num_aster--;
- return 0;
-}
-
-DWORD taskCreated = 0;
-
-TASK aster(void)
-{
- PID p;
- SOFT_TASK_MODEL m_soft;
- int r;
- WIN w;
-
- win_init(&w,0,0,ASTER_LIM,8);
- win_frame(&w,BLACK,WHITE,"Asteroids",2);
-
- soft_task_default_model(m_soft);
- soft_task_def_met(m_soft,2000);
- soft_task_def_ctrl_jet(m_soft);
-
- srand(7);
- while (1) {
- if (num_aster < 5) {
- r = (rand() % 50) - 25;
- soft_task_def_arg(m_soft,(void *)((rand() % 7)+1));
- soft_task_def_period(m_soft,(50 + r)*1000);
- p = task_create("aaa",asteroide,(TASK_MODEL *)&m_soft,NULL);
- taskCreated++;
- task_activate(p);
- num_aster++;
- }
-
- task_endcycle();
- }
-}
-
-TASK clock()
-{
- WIN w;
- int s = 0, m = 0;
-
- win_init(&w,68,0,11,2);
- win_frame(&w,BLACK,WHITE,"Clk",1);
-
- while(1) {
- printf_xy(70,1,WHITE,"%2d : %2d",m,s);
- task_endcycle();
-
- if (++s > 59) {
- s = 0;
- m++;
- }
- printf_xy(70,1,WHITE,"%2d : %2d",m,s);
- task_endcycle();
- }
-}
-
-TASK title()
-{
- PORT t;
- WIN w;
- int i,pos = 77;
- char msg[85],tmp[85],ss[2];
- BYTE c;
-
- win_init(&w,0,9,79,2);
- win_frame(&w,BLACK,WHITE,"Title",2);
-
- for (i=0; i < 77; i++) msg[i] = ' ';
- msg[77] = 0;
-
- t = port_connect("title",1,STREAM,READ);
-
- while (1) {
- port_receive(t,&c,BLOCK);
- ss[0] = c;
- ss[1] = 0;
- strcat(msg,ss);
- puts_xy(1,10,WHITE,msg);
- pos++;
- if (pos > 77) {
- strcpy(tmp,&(msg[1]));
- tmp[pos-1] = 0;
- pos -= 1;
- strcpy(msg,tmp);
- }
- task_endcycle();
- }
-}
-
-#define STR "..................... Hartik+ ....................."\
- " Guarantees hard tasks "\
- " Includes soft periodic tasks "\
- "TB server for decrementing the aperiodic response time "\
- "SRP for both hard & soft aperiodic tasks "\
- "Portability toward other compilers/system "\
- "Support for different C compiler: Watcom C 16 bit & 32 bit"\
- " -- GNU C (32 bit) -- Borland C (16 bit) -- MS C (16 bit)"\
- " "\
- "Programmers : Gerardo Lamastra (lamastra@sssup2.sssup.it) "\
- " Giuseppe Lipari (lipari@sssup2.sssup.it) "\
- "Alpha AXP PCI-33 porting by Antonino Casile "\
- "(casile@sssup1.sssup.it) "\
- "Research coordinator: Giorgio Buttazzo (giorgio@sssup1.sssup.it)"\
- " "\
- " "\
- " "
-
-static char GreetMsg[1600];
-
-TASK put(void)
-{
- PORT p;
-
- strcpy(GreetMsg,STR);
-
- p = port_create("title",strlen(GreetMsg),1,STREAM,WRITE);
- while(1) {
- port_send(p,GreetMsg,BLOCK);
- task_endcycle();
- }
-}
-
-TASK ccc(void)
-{
- WIN w;
- char *m;
-
- win_init(&w,68,3,10,3);
- win_frame(&w,BLACK,WHITE,"CCC",2);
- puts_xy(70,4,WHITE,"Cab");
-
- while(1) {
- m = cab_getmes(cc);
- puts_xy(72,5,WHITE,m);
- cab_unget(cc,m);
- task_endcycle();
- }
-}
-
-
-TASK write_keyb()
-{
- BYTE c;
- char *msg;
-
- while (1) {
- c = keyb_getchar();
- if (c == ESC) {
- esc = TRUE;
- task_sleep();
- }
- else {
- #ifdef __VPAGING__
- if (c == 's') {
- if (get_visual_page() == 0) set_visual_page(1);
- else if (get_visual_page() == 1) set_visual_page(0);
- }
- #endif
- msg = cab_reserve(cc);
- msg[0] = c;
- msg[1] = 0;
- cab_putmes(cc,msg);
- }
- }
-}
-
-#define DELTA 200000.0
-double carico(double rif,BYTE init)
-{
- double i;
- DWORD t1 = 0,t2 = 1000;
- double u;
-
- i = 0.0;
- do {
- i += 1;
- } while (i <= DELTA);
-
- u = i / ((double) (t2 - t1));
-
- if (init) return u;
- else return (1.0 - u/rif);
-}
-
-void my_end(KEY_EVT *e)
-{
- set_active_page(0);
- set_visual_page(0);
- cprintf("Ctrl-Brk pressed!\n");
- sys_end();
-}
-
-void res(void *arg)
-{
- sys_status(CLOCK_STATUS|SCHED_STATUS);
-}
-
-int main(int argc, char **argv)
-{
- PID p1,p2,p3,p4,p5,p6;
-
- HARD_TASK_MODEL m_per;
- SOFT_TASK_MODEL m_soft;
- NRT_TASK_MODEL m_nrt;
-
- KEY_EVT emerg;
-// double rif;
- struct timespec t;
-
- #ifdef __TRACE__
- LOG_INFO li = BASE_LOG;
- log_set_limit(li,9000);
- log_set_name(li,"aster.hrt");
- #endif
-
- sys_atrunlevel(res, NULL, RUNLEVEL_BEFORE_EXIT);
-
- #ifdef __TRACE__
- log_init(&li);
- #endif
-
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,my_end);
-
- #ifdef __VPAGING__
- set_active_page(1);
- set_visual_page(1);
- #endif
-
-
- CRSR_OFF();
- clear();
- puts_xy(0,20,WHITE,"Press ESC to exit demo.");
- cc = cab_create("Cab",2,2);
-
- soft_task_default_model(m_soft);
- soft_task_def_period(m_soft,500000);
- soft_task_def_met(m_soft,1000);
- soft_task_def_group(m_soft, 1);
- p1 = task_create("Aster",aster,&m_soft,NULL);
- if (p1 == -1) {
- perror("Aster.C(main): Could not create task <aster>");
- sys_abort(-1);
- }
-
- hard_task_default_model(m_per);
- hard_task_def_mit(m_per,500000);
- hard_task_def_wcet(m_per,1000);
- hard_task_def_group(m_per, 1);
- p2 = task_create("Clock",clock,&m_per,NULL);
- if (p2 == -1) {
- perror("Aster.C(main): Could not create task <Clock>");
- sys_abort(-1);
- }
-
- soft_task_def_period(m_soft, 50000);
- p3 = task_create("Title",title,&m_soft, NULL);
- if (p3 == -1) {
- perror("Aster.C(main): Could not create task <Title>");
- sys_abort(-1);
- }
-
- soft_task_def_period(m_soft, 1000000);
- p4 = task_create("Put",put,&m_soft, NULL);
- if (p4 == -1) {
- perror("Aster.C(main): Could not create task <Put>");
- sys_abort(-1);
- }
-
- nrt_task_default_model(m_nrt);
- nrt_task_def_group(m_nrt, 1);
- p5 = task_create("Write",write_keyb,&m_nrt,NULL);
- if (p5 == -1) {
- perror("Aster.C(main): Could not create task <Write>");
- sys_abort(-1);
- }
-
- hard_task_def_mit(m_per, 50000);
- p6 = task_create("CabTask",ccc,&m_per,NULL);
- if (p6 == -1) {
- perror("Aster.C(main): Could not create task <CabTask>\n");
- sys_abort(-1);
- }
- #ifdef __TRACE__
- log_loop();
- #endif
- /*
- task_activate(p1);
- task_activate(p2);
- task_activate(p3);
- task_activate(p4);
- task_activate(p5);
- task_activate(p6);
- */
- group_activate(1);
-
- while (!esc) {
- kern_cli();
- ll_gettime(TIME_EXACT,&t);
- kern_sti();
-
- printf_xy(0,21,WHITE,"Clock : %-9ds %-9dns",(int)t.tv_sec, (int)t.tv_nsec);
- }
-
- #ifdef __TRACE__
- log_fix();
- #endif
- group_kill(1);
- clear();
- CRSR_STD();
- #ifdef __VPAGING__
- set_active_page(0);
- set_visual_page(0);
- #endif
- cprintf("System closed\n");
- sys_end();
- /*
- sys_status(NORM_STATUS|BLOCKED_STATUS|SLEEP_STATUS|IDLE_STATUS);
- sys_status(NORM_STATUS|SLEEP_STATUS);
- */
- return 0;
-}
-
Index: start/oldexamples/kernel/testss.c
===================================================================
--- start/oldexamples/kernel/testss.c (revision 1087)
+++ start/oldexamples/kernel/testss.c (nonexistent)
@@ -1,547 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testss.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:48 $
- ------------
-
- Test for Sporadic Server (ss):
-
- this is a part of the classic Hartik demo Aster.
-
- it is based on test 17 (h), and the JobControl Task uses an
- SOFT_TASK_MODEL served by a sporadic server
- There are two "dummy" tasks that increment a counter and print
- the value. One uses a SOFT_TASK_MODEL served by sporadic server,
- the other uses a NRT_TASK_MODEL handled by RR module.
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-#include "modules/ss.h"
-#include "drivers/keyb.h"
-
-int num_aster = 0;
-#define EDF_LEV 0
-#define CBS_LEV 1
-#define SS_LEV 2
-
-#define ASTER_LIM 60
-#define DISPLAY_MAX 8
-#define ASTER_MAX 70
-#define STAT_Y 9
-
-#define PER_MAX 5
-#define APER_MAX 8
-
-#define PER_WCET 16000
-#define APER_WCET 22000
-#define JET_WCET 20000
-
-#define APER_REP 22000
-
-PID aper_table[APER_MAX];
-
-mutex_t m1;
-
-
-#define PIMUTEX
-//#define PCMUTEX
-//#define NPPMUTEX
-//#define NOPMUTEX
-
-#define LONGSC
-
-#ifdef LONGSC
-#define SOFT_MET 12000 /* 12000 */
-#define CLOCK_WCET 300 /* 300*/
-#define ASTER_WCET 300 /* 300*/
-#else
-#define SOFT_MET 5000 /* 4500 */
-#define CLOCK_WCET 2000 /* 200*/
-#define ASTER_WCET 2000 /* 200*/
-#endif
-
-PID p1,p2,p3,p4,p5;
-
-TASK asteroide(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 10000; //8000 + rand()%2000;
- #ifdef LONGSC
- mutex_lock(&m1);
- #endif
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- #ifndef LONGSC
- mutex_lock(&m1);
- #endif
- puts_xy(i,y,rand()%15+1,s);
- #ifndef LONGSC
- mutex_unlock(&m1);
- #endif
- }
- #ifdef LONGSC
- mutex_unlock(&m1);
- #endif
-
- task_activate(aper_table[rand()%APER_MAX]);
- task_endcycle();
-
- mutex_lock(&m1);
- puts_xy(i,y,WHITE," ");
- mutex_unlock(&m1);
- i++;
- }
- }
- //num_aster--;
-}
-
-TASK aper_asteroid(void *a)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
- int c;
-
- char s[2];
-
- c = (int)a;
- s[0] = '*'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = APER_REP; //8000 + rand()%2000;
- #ifdef LONGSC
- mutex_lock(&m1);
- #endif
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- #ifndef LONGSC
- mutex_lock(&m1);
- #endif
- puts_xy(i,y,rand()%15+1,s);
- #ifndef LONGSC
- mutex_unlock(&m1);
- #endif
- }
- s[0] = c;
- #ifndef LONGSC
- mutex_unlock(&m1);
- #endif
- mutex_lock(&m1);
- puts_xy(i,y,rand()%15+1,s);
- mutex_unlock(&m1);
-
- task_endcycle();
-
- mutex_lock(&m1);
- puts_xy(i,y,WHITE," ");
- mutex_unlock(&m1);
- i++;
- }
- }
-}
-
-TASK soft_aster(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = '*'; s[1] = 0;
-
- /*for (;;)*/ {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 1000 + rand()%9000;
- #ifdef LONGSC
- mutex_lock(&m1);
- #endif
- for (j=0; j<load1; j++) {
- s[0] = '*' + rand() % 100;
- #ifndef LONGSC
- mutex_lock(&m1);
- #endif
- puts_xy(i,y,rand()%15+1,s);
- #ifndef LONGSC
- mutex_unlock(&m1);
- #endif
- }
- s[0] = 1;
- #ifndef LONGSC
- mutex_lock(&m1);
- #endif
- //mutex_lock(&m1);
- puts_xy(i,y,rand()%15+1,s);
- mutex_unlock(&m1);
-
- task_activate(aper_table[rand()%APER_MAX]);
- task_endcycle();
-
- mutex_lock(&m1);
- puts_xy(i,y,WHITE," ");
- mutex_unlock(&m1);
- i++;
- }
- }
- num_aster--;
- return 0;
-}
-
-TASK aster()
-{
- PID p;
-
-// HARD_TASK_MODEL m;
- SOFT_TASK_MODEL m_soft;
- int r;
- int x; // adaptive bandwidth...
-
- srand(7);
-
-/* periodic_task_default_model(m,0,PER_WCET);
- periodic_task_def_ctrl_jet(m);
- for (x=0; x<PER_MAX; x++) {
- r = (rand() % 200);
- periodic_task_def_period(m, (64+r)*1000);
- p = task_create("per",asteroide,&m,NULL);
- if (p!=-1) task_activate(p);
- }
-*/
- soft_task_default_model(m_soft);
- soft_task_def_met(m_soft,SOFT_MET);
- soft_task_def_ctrl_jet(m_soft);
-// soft_task_def_aperiodic(m_soft);
-
- x = 128; //64;
-
- while (1) {
-/* {
- PID p;
- int x;
- p = level_table[0]->level_scheduler(0);
- printf_xy(1,8,WHITE," ");
-
- x = 0;
- do {
- printf_xy(3*x+1,8,WHITE,"%3d",p);
- p = proc_table[p].next;
- x++;
- } while (p != NIL);
- }
-*/
- if (num_aster < ASTER_MAX) {
- r = (rand() % 200);
-
- soft_task_def_period(m_soft, (x+r)*1000);
- p = task_create("aaa",soft_aster,&m_soft,NULL);
- if (p == -1)
- {
- if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
- mutex_lock(&m1);
- printf_xy(62,3,WHITE,"adapt=%3u err=%d",freedesc,errno);
- mutex_unlock(&m1);
- }
- else {
- num_aster++;
- mutex_lock(&m1);
- printf_xy(62,3,WHITE,"adapt=%3u ",x);
- mutex_unlock(&m1);
- task_activate(p);
- x /= 2;
- if (x<50) x = 50;
- }
- }
- task_endcycle();
- }
-}
-
-TASK clock()
-{
- int s = 0, m = 0;
-
- while(1) {
- mutex_lock(&m1);
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(EDF_LEV));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(CBS_LEV));
- printf_xy(62,5,WHITE,"CSss=%6d",SS_availCs(SS_LEV));
- mutex_unlock(&m1);
-
- task_endcycle();
-
- if (++s > 59) {
- s = 0;
- m++;
- }
- mutex_lock(&m1);
- printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
- printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(EDF_LEV));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(CBS_LEV));
- printf_xy(62,5,WHITE,"CSss=%6d",SS_availCs(SS_LEV));
- mutex_unlock(&m1);
- task_endcycle();
- }
-}
-
-
-
-/* we consider the first ASTER_MAX + 2 tasks from the PID 2
- and plot on the screen the elapsed times... */
-TASK jetcontrol()
-{
- int i; /* a counter */
- TIME sum, max, curr, last[5];
- int nact;
- int j; /* the elements set by jet_gettable */
- PID p;
-
-
- mutex_lock(&m1);
- printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
- mutex_unlock(&m1);
-
- for (;;) {
- for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
- if (jet_getstat(p, &sum, &max, &nact, &curr) == -1 /*||
- (proc_table[p].pclass & 0xFF00) == APERIODIC_PCLASS ||
- (proc_table[p].pclass & 0xFF00) == PERIODIC_PCLASS*/ ) continue;
-
- for (j=0; j<5; j++) last[j] = 0;
- jet_gettable(p, &last[0], 5);
- mutex_lock(&m1);
- if (proc_table[p].task_level == 1)
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)CBS_get_nact(2,p), (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
-// p, sum/(nact==0 ? 1 : nact), max, proc_table[p].avail_time, proc_table[p].status, proc_table[p].shadow, proc_table[p].timespec_priority.tv_sec,proc_table[p].timespec_priority.tv_nsec/1000 , CBS_get_nact(2,p), last[4]);
- else
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
- p, (int)sum/(nact==0 ? 1 : nact), (int)max, (int)nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
-// p, sum/(nact==0 ? 1 : nact), max, nact, proc_table[p].status, proc_table[p].shadow, proc_table[p].timespec_priority.tv_sec,proc_table[p].timespec_priority.tv_nsec/1000 , last[3], last[4]);
- mutex_unlock(&m1);
- i++;
- task_activate(p3);
- task_endcycle();
- }
- }
-}
-
-void fine(KEY_EVT *e)
-{
- sys_end();
-}
-
-void mydummyaper(void) {
- int i=0;
- while(1) {
- mutex_lock(&m1);
- printf_xy(1,24,RED,"dummyAPER pid=%d: %d",p4,i++);
- mutex_unlock(&m1);
- task_activate(p4);
- task_endcycle();
- }
-}
-
-void mydummynrt(void) {
- int i=0;
- while(1) {
- mutex_lock(&m1);
- printf_xy(40,24,RED,"dummyNRT pid=%d: %d",p5,i++);
- mutex_unlock(&m1);
- }
-}
-
-int main(int argc, char **argv)
-{
-// PID p1,p2,p5;
- HARD_TASK_MODEL m;
- NRT_TASK_MODEL m_nrt;
- SOFT_TASK_MODEL m_aper;
- SOFT_TASK_MODEL m_soft;
- struct timespec fineprg;
-
- #ifdef PIMUTEX
- PI_mutexattr_t a;
- #endif
-
- #ifdef PCMUTEX
- PC_mutexattr_t a;
- #endif
-
- #ifdef NPPMUTEX
- NPP_mutexattr_t a;
- #endif
-
- #ifdef NOPMUTEX
- NOP_mutexattr_t a;
- #endif
-
-
- KEY_EVT emerg;
- //keyb_set_map(itaMap);
- emerg.ascii = 'x';
- emerg.scan = KEY_X;
- emerg.flag = ALTL_BIT;
- keyb_hook(emerg,fine);
-
- hard_task_default_model(m);
- hard_task_def_mit(m,100000);
- hard_task_def_wcet(m,ASTER_WCET);
- hard_task_def_group(m,1);
- hard_task_def_ctrl_jet(m);
-
- nrt_task_default_model(m_nrt);
- nrt_task_def_group(m_nrt,1);
- nrt_task_def_ctrl_jet(m_nrt);
-
-
- soft_task_default_model(m_aper);
- soft_task_def_group(m_aper,1);
- soft_task_def_ctrl_jet(m_aper);
- soft_task_def_aperiodic(m_aper);
-
- soft_task_default_model(m_soft);
- soft_task_def_period(m_soft,10000);
- soft_task_def_met(m_soft,JET_WCET);
- soft_task_def_group(m_soft,1);
- soft_task_def_ctrl_jet(m_soft);
- soft_task_def_aperiodic(m_soft);
-
-
- p1 = task_create("Aster",aster,&m,NULL);
- if (p1 == -1) {
- perror("test7.c(main): Could not create task <aster> ...");
- sys_end();
- l1_exit(-1);
- }
-
- hard_task_def_mit(m,50000);
- hard_task_def_wcet(m,CLOCK_WCET);
- p2 = task_create("Clock",clock,&m,NULL);
- if (p2 == -1) {
- perror("test7.c(main): Could not create task <Clock> ...");
- sys_end();
- l1_exit(-1);
- }
-
-// p3 = task_create("JetControl",jetcontrol,&m_nrt,NULL);
- p3 = task_create("JetControl",jetcontrol,&m_aper,NULL);
- if (p3 == -1) {
- perror("test7.c(main): Could not create task <JetControl> ...");
- sys_end();
- l1_exit(-1);
- }
-
- p4 = task_create("MyDummyAper",(void *(*)(void*))mydummyaper,&m_aper,NULL);
- if (p4 == -1) {
- perror("Could not create task <MyDummyAper> ...");
- sys_end();
- l1_exit(-1);
- }
-
- p5 = task_create("MyDummyNRT",(void *(*)(void*))mydummynrt,&m_nrt,NULL);
- if (p5 == -1) {
- perror("Could not create task <MyDummyNRT> ...");
- sys_end();
- l1_exit(-1);
- }
-/*
- aperiodic_task_default_model(m_aper,APER_WCET);
- aperiodic_task_def_ctrl_jet(m_aper);
- aperiodic_task_def_system(m_aper);
-
- for (i=0; i<APER_MAX; i++) {
- aperiodic_task_def_level(m_aper, i/4 + 2);
- aperiodic_task_def_arg(m_aper, (i/4 ? 'Û' : '±'));
- aper_table[i] = task_create("aper",aper_asteroid,&m_aper,NULL);
- if (aper_table[i] == -1) {
- perror("test7.c(main): Could not create task <aper> ...");
- sys_end();
- l1_exit(-1);
- }
- }
-*/
-// task_nopreempt();
-
-
- #ifdef PIMUTEX
- PI_mutexattr_default(a);
- #endif
-
- #ifdef PCMUTEX
- PC_mutexattr_default(a);
- #endif
-
- #ifdef NPPMUTEX
- NPP_mutexattr_default(a);
- #endif
-
- #ifdef NOPMUTEX
- NOP_mutexattr_default(a);
- #endif
-
- mutex_init(&m1, &a);
-
- fineprg.tv_sec = 1800;
- fineprg.tv_nsec = 0;
- kern_event_post(&fineprg,(void (*)(void *))fine,NULL);
- group_activate(1);
- return 0;
-}
-
Index: start/oldexamples/tracer/util.c
===================================================================
--- start/oldexamples/tracer/util.c (revision 1087)
+++ start/oldexamples/tracer/util.c (nonexistent)
@@ -1,122 +0,0 @@
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-#include "types.h"
-#include <trace.h>
-#include <types.h>
-
-static char *names[]={
- "reserved",
- "hoops",
- /*--*/
- "create",
- "activate",
- "schedule",
- "delay",
- "sleep",
- "endcycle",
- "destroy",
- "intactiv",
- /*--*/
- "user0",
- "user1",
- "user2",
- "user3",
- "user4",
- "user5",
- "user6",
- "user7",
- /*--*/
- "wait",
- "waitnb",
- "signal"
-};
-
-int classtable[TRC_NUMCLASSES+1]={
- TRC_F_TRACER,
- TRC_F_SYSTEM,
- TRC_F_USER,
- TRC_F_SEM,
- TRC_F_LAST
-};
-
-int event_class(int ev)
-{
- int i;
- if (ev<0||ev>=TRC_NUMEVENTS) return -1;
- for (i=0;i<TRC_NUMCLASSES;i++)
- if (ev>=classtable[i]&&ev<classtable[i+1]) return i;
- return -1;
-}
-
-char *event_name(int ev)
-{
- if (ev<0||ev>=TRC_NUMEVENTS) return "unknown";
- return names[ev];
-}
-
-char *event_hexdump(u_int8_t *ptr,int maxsize)
-{
- static char buffer[256];
- int i;
- for (i=0;i<maxsize;i++) sprintf(buffer+i*2,"%02x",*(ptr+i));
- buffer[maxsize*2]='\0';
- return buffer;
-}
-
-char *event_strdump(u_int8_t *ptr, int maxsize)
-{
- static char buffer[256];
- memcpy(buffer,ptr,maxsize);
- buffer[maxsize]='\0';
- return buffer;
-}
-
-
-char *format_time(long time)
-{
- static char buffer[256];
-
- if (time<1000l) {
- sprintf(buffer,"%li",time);
- return buffer;
- }
- if (time<1000000l) {
- sprintf(buffer,"%li,%03li",time/1000l,time%1000l);
- return buffer;
- }
- sprintf(buffer,"%li,%03li,%03li",
- (time/1000000l),
- (time%1000000l)/1000l,
- time%1000l);
- return buffer;
-}
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-int read_trace(char *filename,int (*func)(trc_event_t *))
-{
- trc_event_t buffer;
- int fin;
- int res;
-
- fin=open(filename,O_RDONLY|O_BINARY);
- if (fin==-1) return -1;
- for (;;) {
- res=read(fin,&buffer,sizeof(trc_event_t));
- if (res!=sizeof(trc_event_t)) {
- close(fin);
- return res==0?0:-2;
- }
- res=(*func)(&buffer);
- if (res!=0) {
- close(fin);
- return res;
- }
- }
- close(fin);
- return 0;
-}
Index: start/oldexamples/tracer/jdump.c
===================================================================
--- start/oldexamples/tracer/jdump.c (revision 1087)
+++ start/oldexamples/tracer/jdump.c (nonexistent)
@@ -1,465 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Massimiliano Giorgi <massy@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/*
- * Copyright (C) 1999 Massimiliano Giorgi
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * CVS : $Id: jdump.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
- *
- * File: $File$
- * Revision: $Revision: 1.1.1.1 $
- * Last update: $Date: 2002-09-02 09:37:48 $
- */
-
-#include <netinet/in.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-#include "types.h"
-#include <trace.h>
-#include "util.h"
-
-/*
- *
- *
- *
- */
-
-/* All times are dived by this costant. */
-#define TIMESCALE 1
-
-/* If defined dump on stdout the packets (in ascii) that will be written
- * on the output file (the file of the tracer).
- */
-
-#define DUMPOUT
-
-/*
- *
- *
- *
- */
-
-int pippo=0;
-
-int writeInt(int h, int x)
-{
- int y,res;
- y=htonl(x);
- res=write(h,&y,sizeof(int));
- return res!=sizeof(int);
-}
-
-
-int writeStr(int h, char *s)
-{
- int res,size;
- size=strlen(s);
- writeInt(h,size);
- res=write(h,s,size);
- return res!=size;
-}
-
-/*
- *
- */
-
-#define TASK_ARRIVAL 0
-#define TASK_SCHEDULE 1
-#define TASK_DESCHEDULE 2
-#define TASK_END 3
-#define TASK_DLINEPOST 4
-#define TASK_DLINESET 5
-#define TASK_WAIT 6
-#define TASK_SIGNAL 7
-#define TASK_IDLE 8
-#define TASK_NAME 9
-
-#define EVT_NUMBER 10
-
-char *eventsname[]={
- "task_arrival",
- "task_schedule",
- "task_deschedule",
- "task_end",
- "task_dlinepost",
- "task_dlineset",
- "task_wait",
- "task_signal",
- "task_idle",
- "task_name"
-};
-
-struct j_evt_prolog {
- int type;
- int time;
-};
-
-struct j_evt_task {
- struct j_evt_prolog p;
- int task;
-};
-
-struct j_evt_dlinepost {
- struct j_evt_task t;
- int taskD;
- int taskD2;
-};
-
-struct j_evt_dlineset {
- struct j_evt_task t;
- int taskD;
-};
-
-struct j_evt_semaph {
- struct j_evt_task t;
- int res;
- char *name;
-};
-
-struct j_evt_name {
- struct j_evt_task t;
- char *name;
-};
-
-/*
- *
- */
-
-int j_write_prolog(int h, void *ptr)
-{
-#ifdef DUMPOUT
- printf("%10i ",((struct j_evt_prolog *)ptr)->time);
- printf("%-18s ",eventsname[((struct j_evt_prolog *)ptr)->type]);
-#endif
- if (writeInt(h,((struct j_evt_prolog *)ptr)->type)) return -2;
- if (writeInt(h,((struct j_evt_prolog *)ptr)->time)) return -3;
- return 0;
-}
-
-int j_write_task(int h, void *ptr)
-{
- int res;
- res=j_write_prolog(h,ptr);
-#ifdef DUMPOUT
- printf("tsk=%i ",((struct j_evt_task *)ptr)->task);
-#endif
- if (res) return res;
- if (writeInt(h,((struct j_evt_task *)ptr)->task)) return -4;
- return 0;
-}
-
-int j_write_dlinepost(int h, void *ptr)
-{
- int res;
- res=j_write_task(h,ptr);
- if (res) return res;
- if (writeInt(h,((struct j_evt_dlinepost *)ptr)->taskD)) return -5;
- if (writeInt(h,((struct j_evt_dlinepost *)ptr)->taskD2)) return -6;
- return 0;
-}
-
-int j_write_dlineset(int h, void *ptr)
-{
- int res;
- res=j_write_task(h,ptr);
- if (res) return res;
- if (writeInt(h,((struct j_evt_dlineset *)ptr)->taskD)) return -7;
- return 0;
-}
-
-int j_write_semaph(int h, void *ptr)
-{
- int res;
- res=j_write_task(h,ptr);
- if (res) return res;
- if (writeInt(h,((struct j_evt_semaph *)ptr)->res)) return -8;
- if (writeStr(h,((struct j_evt_semaph *)ptr)->name)) return -9;
- return 0;
-}
-
-int j_write_name(int h, void *ptr)
-{
- int res;
- res=j_write_task(h,ptr);
-#ifdef DUMPOUT
- printf("name='%s' ",((struct j_evt_name *)ptr)->name);
-#endif
- if (res) return res;
- if (writeStr(h,((struct j_evt_name *)ptr)->name)) return -10;
- return 0;
-}
-
-int writeEvent(int h, void *ptr)
-{
- int res;
-
- //printf("<%i>",((struct j_evt_prolog*)ptr)->type);
-
- ((struct j_evt_prolog*)ptr)->time/=TIMESCALE;
-
- switch(((struct j_evt_prolog*)ptr)->type) {
- case TASK_ARRIVAL:
- case TASK_SCHEDULE:
- case TASK_DESCHEDULE:
- case TASK_END:
- case TASK_IDLE:
- res=j_write_task(h,ptr);
- break;
- case TASK_DLINEPOST:
- res=j_write_dlinepost(h,ptr);
- break;
- case TASK_DLINESET:
- res=j_write_dlineset(h,ptr);
- break;
- case TASK_WAIT:
- case TASK_SIGNAL:
- res=j_write_semaph(h,ptr);
- break;
- case TASK_NAME:
- res=j_write_name(h,ptr);
- break;
- default:
- return -1;
-
- }
-
-#ifdef DUMPOUT
- printf(" \n");
-#endif
-
- return res;
-}
-
-/*
- *
- *
- *
- */
-
-#define MAX_PROC 150
-
-//int activated[MAX_PROC];
-
-int cxx=0;
-/* write MAXC-1 events */
-#define MAXC 14
-
-long lasttime;
-
-int sys_event(int h, void *param)
-{
- static int prevtask=-1;
- trc_event_t *ptr=(trc_event_t *)param;
- struct j_evt_task evt;
-
- evt.p.time=ptr->time;
- evt.task=ptr->x.sys.task;
-
- lasttime=ptr->time;
- switch(ptr->event) {
-
- case TRC_CREATE:
- return 0;
-
- case TRC_ACTIVATE:
- case TRC_INTACTIVATION:
-
-
- //activated[ptr->x.sys.task]=1;
-
-
- evt.p.type=TASK_ARRIVAL;
- break;
-
- case TRC_DESTROY:
-
-
- //activated[ptr->x.sys.task]=0;
-
-
-
- return 0;
-
- case TRC_DELAY:
- prevtask=-1;
- evt.p.type=TASK_DESCHEDULE;
- break;
-
- case TRC_SLEEP:
- prevtask=-1;
- evt.p.type=TASK_DESCHEDULE;
- break;
-
- case TRC_ENDCYCLE:
- evt.p.type=TASK_END;
- break;
-
- case TRC_SCHEDULE:
- if (prevtask!=-1) {
- struct j_evt_task evt2;
- int res;
- evt2.p.time=ptr->time;
- evt2.p.type=TASK_DESCHEDULE;
- evt2.task=prevtask;
- res=writeEvent(h,&evt2);
- if (res!=0) return -1;
- }
-
- /*
- if (!activated[ptr->x.sys.task]) {
- struct j_evt_task evt2;
-
- evt2.p.time=ptr->time-1;
- evt2.task=ptr->x.sys.task;
- evt2.p.type=TASK_ARRIVAL;
-
- writeEvent(h,&evt2);
-
- activated[ptr->x.sys.task]=1;
- }
- */
-
- evt.p.type=TASK_SCHEDULE;
- prevtask=ptr->x.sys.task;
- break;
-
- default:
- return 0;
- }
-
- cxx++;
- if (cxx==MAXC) return -1;
-
- return writeEvent(h,&evt);
-}
-
-
-int sem_event(int h,void *param)
-{
- //trc_event_t *ptr=(trc_event_t *)param;
- //struct j_evt_semaph evt;
-
- return 0;
- /*
- evt.t.p.time=ptr->x.norm.when;
- evt.t.task=ptr->x.norm.who;
- switch(ptr->what) {
- case TRC_SEM_WAIT: evt.t.p.type=TASK_WAIT; break;
- case TRC_SEM_SIGNAL: evt.t.p.type=TASK_SIGNAL; break;
- case TRC_SEM_WAITNB: return 0;
- default: return 0;
- }
- evt.res=1;
- evt.name="NoName";
- return j_write_semaph(h,&evt);
- */
-}
-
-/* -- */
-
-#define MAX_PROC 150
-int names[MAX_PROC];
-
-int outfile;
-
-int dumpfunc(trc_event_t *ptr)
-{
- //printf("{%i}",ptr->event);
-
- if (!names[ptr->x.sys.task]) {
- struct j_evt_name evtname;
- static char name[24];
-
- cxx++;
- if (cxx==MAXC) return -1;
-
- evtname.t.p.time=lasttime;
- evtname.t.task=ptr->x.sys.task;
- evtname.t.p.type=TASK_NAME;
- sprintf(name,"task%03i",ptr->x.sys.task);
- evtname.name=name;
- writeEvent(outfile,&evtname);
- names[ptr->x.sys.task]=1;
-
- }
-
- switch(event_class(ptr->event)) {
- case TRC_CLASS_SYSTEM:
- return sys_event(outfile,ptr);
- case TRC_CLASS_SEM:
- return 0;
- return sem_event(outfile,ptr);
- case TRC_CLASS_USER:
- return 0;
- }
- return 0;
-}
-
-/*
- *
- */
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-int main(int argc, char *argv[])
-{
- int res;
- int i;
-
- if (argc!=3) {
- fprintf(stderr,"missing filenames\n");
- fprintf(stderr,"usage: jdump H4tracefilename JTRACERtracefilename\n");
- return -1;
- }
-
- for (i=0;i<MAX_PROC;i++) {
- names[i]=0;
- //activated[i]=0;
- }
-
- outfile=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC|O_BINARY,0777);
- if (outfile==-1) {
- perror("can't open outfile");
- return -1;
- }
- res=read_trace(argv[1],dumpfunc);
- close(outfile);
-
- //fprintf(stderr,"result=%i",res);
- return 0;
-}
Index: start/oldexamples/tracer/util.h
===================================================================
--- start/oldexamples/tracer/util.h (revision 1087)
+++ start/oldexamples/tracer/util.h (nonexistent)
@@ -1,17 +0,0 @@
-
-#ifndef __UTIL_H
-#define __UTIL_H
-
-#include "types.h"
-
-char *event_name(int evt);
-char *event_hexdump(u_int8_t *ptr, int maxsize);
-char *event_strdump(u_int8_t *ptr, int maxsize);
-int event_class(int evt);
-
-int read_trace(char *filename,int (*func)(trc_event_t *));
-
-char *format_time(long time);
-
-#endif
-
Index: start/oldexamples/tracer/treec1.c
===================================================================
--- start/oldexamples/tracer/treec1.c (revision 1087)
+++ start/oldexamples/tracer/treec1.c (nonexistent)
@@ -1,211 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <kernel/func.h>
-#include <kernel/model.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/mount.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <semaphore.h>
-#include <stdio.h>
-
-#include "common.h"
-
-#include <trace/trace.h>
-#include <trace/queues.h>
-
-
-int noscroll=0;
-SEM console;
-
-#define MPROC ((50<(MAX_PROC-10))?50:MAX_PROC-10)
-
-TASK viewdir(void *prof);
-sem_t actmutex,actsync;
-char *globpathname;
-PID globpid;
-int counter=0,actcounter=0;
-
-void activate_task(int prof, char *pathname)
-{
- char tname[32];
- NRT_TASK_MODEL m;
- PID pid;
-
-REPEAT:
- sem_wait(&actmutex);
-
- if (actcounter>=MPROC) {
- sem_signal(&actmutex);
- task_delay(10000);
- goto REPEAT;
- }
-
- globpathname=pathname;
- counter++;
- sprintf(tname,"tsk%i",counter);
-
- nrt_task_default_model(m);
- nrt_task_def_arg(m,(void*)counter);
-
- globpid=pid=task_create(tname,viewdir,&m,NULL);
- if (pid==-1) {
- sem_wait(&console);
- cprintf("can't create '%s'\n",tname);
- perror("can't create task");
- sem_signal(&console);
- sys_end();
- return;
- }
- task_activate(pid);
- sem_wait(&actsync);
- actcounter++;
-
- sem_signal(&actmutex);
-}
-
-/*
- *
- */
-
-int filecounter=0;
-
-TASK viewdir(void *pointer)
-{
- struct dirent *den;
- struct stat st;
- char *str;
- DIR *d;
- int res;
- int x;
- char pathname[1024];
- PID mypid;
- int prof=(int)pointer;
-
- strcpy(pathname,globpathname);
- mypid=globpid;
- sem_signal(&actsync);
-
- str=pathname+(x=strlen(pathname));
- d=opendir(pathname);
-
- if (d==NULL) {
- sem_wait(&console);
- cprintf("%03i ERR: can't open dir %s\n",prof,pathname);
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- sem_signal(&console);
-
- sys_end();
- l1_exit(0);
-
- goto END;
- }
-
- while ((den=readdir(d))!=NULL) {
-
- if (x==1&&*pathname=='/')
- strcat(pathname,den->d_name);
- else
- strcat(strcat(pathname,"/"),den->d_name);
-
- sem_wait(&console);
- if (noscroll) {
- place(0,10);
- cprintf(" ");
- place(0,10);
- }
- cprintf("t%03i %s\n",prof,pathname);
- filecounter++;
- sem_signal(&console);
-
- if (!strcmp(den->d_name,".")) goto SKIP;
- if (!strcmp(den->d_name,"..")) goto SKIP;
-
- res=stat(pathname,&st);
- if (res!=0) {
- sem_wait(&console);
- cprintf("t%03i can't stat %s\n",prof,pathname);
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- sem_signal(&console);
-
- sys_end();
- l1_exit(0);
-
- closedir(d);
- goto END;
- } else {
- if (S_ISDIR(st.st_mode)) {
- sem_wait(&console);
- sem_signal(&console);
- activate_task(prof,pathname);
- }
-
- }
-
- SKIP:
- *str='\0';
- }
-
- closedir(d);
-
-END:
- sem_wait(&actmutex);
- actcounter--;
- sem_signal(&actmutex);
-
- return 0;
-}
-
-/*
- *
- */
-
-int __register_sub_init_prologue(void)
-{
- TRC_init_phase1(NULL);
- trc_register_circular_queue();
- trc_create_queue(TRC_CIRCULAR_QUEUE,NULL);
- return 0;
-}
-
-/*
- *
- */
-
-int main(int argc,char *argv[])
-{
- // int res;
-
- showmessage("This test show all filenames of a directory of an hardisk\n"
- "recursively using a soft task for every directory.\n"
- "The tracer with a circular queue is activated.\n");
-
- sem_init(&console,0,1);
- sem_init(&actmutex,0,1);
- sem_init(&actsync,0,0);
-
- activate_task(-1,FROMDIR);
-
- for(;;) {
- sem_wait(&actmutex);
- if (actcounter==0) break;
- sem_signal(&actmutex);
- task_delay(500000);
- }
-
- cprintf("\nfiles: %i\n",filecounter);
-
- waitend();
-
- return 0;
-}
Index: start/oldexamples/tracer/hello1.c
===================================================================
--- start/oldexamples/tracer/hello1.c (revision 1087)
+++ start/oldexamples/tracer/hello1.c (nonexistent)
@@ -1,27 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <ll/i386/cons.h>
-#include <stddef.h>
-
-#include <trace/trace.h>
-#include <trace/queues.h>
-
-int __register_sub_init_prologue(void)
-{
- TRC_init_phase1(NULL);
- trc_register_dummy_queue();
- trc_create_queue(TRC_DUMMY_QUEUE,NULL);
- return 0;
-}
-
-int main(int argc,char *argv[])
-{
- cprintf("\nHello, world!\n");
- cprintf("The tracer has been activated!\n");
- cprintf("(No result are produced)\n\n");
- return 0;
-}
Index: start/oldexamples/tracer/treec2.c
===================================================================
--- start/oldexamples/tracer/treec2.c (revision 1087)
+++ start/oldexamples/tracer/treec2.c (nonexistent)
@@ -1,224 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <kernel/func.h>
-#include <kernel/model.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/mount.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <semaphore.h>
-#include <stdio.h>
-
-#include "common.h"
-
-#include <trace/trace.h>
-#include <trace/queues.h>
-
-#define sem_signal sem_post
-
-int noscroll=0;
-SEM console;
-
-#define MPROC ((50<(MAX_PROC-10))?50:MAX_PROC-10)
-
-TASK viewdir(void *prof);
-sem_t actmutex,actsync;
-char *globpathname;
-PID globpid;
-int counter=0,actcounter=0;
-
-void activate_task(int prof, char *pathname)
-{
- char tname[32];
- NRT_TASK_MODEL m;
- PID pid;
-
-REPEAT:
- sem_wait(&actmutex);
-
- if (actcounter>=MPROC) {
- sem_signal(&actmutex);
- task_delay(10000);
- goto REPEAT;
- }
-
- globpathname=pathname;
- counter++;
- sprintf(tname,"tsk%i",counter);
-
- nrt_task_default_model(m);
- nrt_task_def_arg(m,(void*)counter);
-
- globpid=pid=task_create(tname,viewdir,&m,NULL);
- if (pid==-1) {
- sem_wait(&console);
- cprintf("can't create '%s'\n",tname);
- perror("can't create task");
- sem_signal(&console);
- sys_end();
- return;
- }
- task_activate(pid);
- sem_wait(&actsync);
- actcounter++;
-
- sem_signal(&actmutex);
-}
-
-/*
- *
- */
-
-int filecounter=0;
-
-TASK viewdir(void *pointer)
-{
- struct dirent *den;
- struct stat st;
- char *str;
- DIR *d;
- int res;
- int x;
- char pathname[1024];
- PID mypid;
- int prof=(int)pointer;
-
- strcpy(pathname,globpathname);
- mypid=globpid;
- sem_signal(&actsync);
-
- str=pathname+(x=strlen(pathname));
- d=opendir(pathname);
-
- if (d==NULL) {
- sem_wait(&console);
- cprintf("%03i ERR: can't open dir %s\n",prof,pathname);
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- sem_signal(&console);
-
- sys_end();
- l1_exit(0);
-
- goto END;
- }
-
- while ((den=readdir(d))!=NULL) {
-
- if (x==1&&*pathname=='/')
- strcat(pathname,den->d_name);
- else
- strcat(strcat(pathname,"/"),den->d_name);
-
- sem_wait(&console);
- if (noscroll) {
- place(0,10);
- cprintf(" ");
- place(0,10);
- }
- cprintf("t%03i %s\n",prof,pathname);
- filecounter++;
- sem_signal(&console);
-
- if (!strcmp(den->d_name,".")) goto SKIP;
- if (!strcmp(den->d_name,"..")) goto SKIP;
-
- res=stat(pathname,&st);
- if (res!=0) {
- sem_wait(&console);
- cprintf("t%03i can't stat %s\n",prof,pathname);
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- sem_signal(&console);
-
- sys_end();
- l1_exit(0);
-
- closedir(d);
- goto END;
- } else {
- if (S_ISDIR(st.st_mode)) {
- sem_wait(&console);
- sem_signal(&console);
- activate_task(prof,pathname);
- }
-
- }
-
- SKIP:
- *str='\0';
- }
-
- closedir(d);
-
-END:
- sem_wait(&actmutex);
- actcounter--;
- sem_signal(&actmutex);
-
- return 0;
-}
-
-/*
- *
- */
-
-int __register_sub_init_prologue(void)
-{
- TRC_CIRCULAR_PARMS args;
- int q;
-
- TRC_init_phase1(NULL);
- trc_register_circular_queue();
-
- trc_circular_default_parms(args);
- trc_circular_def_onlinetask(args);
- q=trc_create_queue(TRC_CIRCULAR_QUEUE,&args);
-
- trc_assign_class_to_queue(TRC_CLASS_SYSTEM,q);
- trc_trace_class(TRC_CLASS_SYSTEM);
-
- return 0;
-}
-
-/*
- *
- */
-
-int main(int argc,char *argv[])
-{
- // int res;
-
- showmessage("This test show all filenames of a directory of an hardisk\n"
- "recursively using a soft task for every directory.\n"
- "The tracer with a circular queue is activated that write\n"
- "on hardisk online (while the system is running)\n");
-
- sem_init(&console,0,1);
- sem_init(&actmutex,0,1);
- sem_init(&actsync,0,0);
-
- activate_task(-1,FROMDIR);
- //activate_task(-1,"/");
-
- for(;;) {
- sem_wait(&actmutex);
- if (actcounter==0) break;
- sem_signal(&actmutex);
- task_delay(500000);
- }
-
- cprintf("\nfiles: %i\n",filecounter);
-
- waitend();
-
- return 0;
-}
Index: start/oldexamples/tracer/road.c
===================================================================
--- start/oldexamples/tracer/road.c (revision 1087)
+++ start/oldexamples/tracer/road.c (nonexistent)
@@ -1,57 +0,0 @@
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "types.h"
-#include <trace.h>
-#include "util.h"
-
-
-/* distribuzione degli spostamenti della testina */
-
-#define MAXX 1000
-#define PREC 1000
-#define DELTA ((double)MAXX/(double)PREC)
-
-#include "distr.c"
-
-int dumpusr(int event, trc_user_event_t *usr)
-{
- static long last=-1;
- long d;
- if (event!=TRC_USER0) return 0;
- if (last!=-1) {
- d=abs(last-usr->n);
- d_insert(d);
- }
- last=usr->n;
- return 0;
-}
-
-int dumpfunc(trc_event_t *ev)
-{
- if (event_class(ev->event)==TRC_CLASS_USER) dumpusr(ev->event,&ev->x.usr);
- return 0;
-}
-
-int main(int argc, char *argv[])
-{
- FILE *fout;
- int res;
- if (argc!=3) {
- fprintf(stderr,"missing filename!\n");
- return -1;
- }
- d_init();
- res=read_trace(argv[1],dumpfunc);
- if (res==0) {
- fout=fopen(argv[2],"wt");
- if (fout!=NULL) {
- d_dump(fout);
- fclose(fout);
- } else
- fprintf(stderr,"can't create output file!\n");
- } else
- fprintf(stderr,"read_trace error\n");
-
- return 0;
-}
Index: start/oldexamples/tracer/hello2.c
===================================================================
--- start/oldexamples/tracer/hello2.c (revision 1087)
+++ start/oldexamples/tracer/hello2.c (nonexistent)
@@ -1,30 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <ll/i386/cons.h>
-#include <stddef.h>
-
-#include <trace/trace.h>
-#include <trace/queues.h>
-
-int __register_sub_init_prologue(void)
-{
- int q;
- TRC_init_phase1(NULL);
- trc_register_fixed_queue();
- q=trc_create_queue(TRC_FIXED_QUEUE,NULL);
- trc_assign_class_to_queue(TRC_CLASS_SYSTEM,q);
- trc_trace_class(TRC_CLASS_SYSTEM);
- return 0;
-}
-
-int main(int argc,char *argv[])
-{
- cprintf("\nHello, world!\n");
- cprintf("The tracer has been activated! Look at the results.\n");
- cprintf("(A fixed queue has been created)\n\n");
- return 0;
-}
Index: start/oldexamples/tracer/distr.c
===================================================================
--- start/oldexamples/tracer/distr.c (revision 1087)
+++ start/oldexamples/tracer/distr.c (nonexistent)
@@ -1,44 +0,0 @@
-
-long t[PREC];
-long counter;
-long hoops;
-long maxv=0;
-
-void d_init(void)
-{
- int i;
- hoops=counter=0;
- for (i=0;i<PREC;i++) t[i]=0;
-}
-
-void d_insert(long d)
-{
- if (d>=MAXX) {
- hoops++;
- if (d>maxv) maxv=d;
- return;
- }
-
- counter++;
- t[(int)(d/DELTA)]++;
-}
-
-void d_dump(FILE *fout)
-{
- int i;
-
- if (counter==0) {
- fprintf(stderr,"nothing to write to the output file\n");
- return;
- }
-
- if (hoops) {
- fprintf(stderr,"%li values to big (max=%li)\n",hoops,maxv);
- }
-
- for (i=0;i<PREC;i++)
- fprintf(fout,"%f %f\n",
- DELTA/2.0+DELTA*i,
- (double)t[i]/(double)counter
- );
-}
Index: start/oldexamples/tracer/treef1.c
===================================================================
--- start/oldexamples/tracer/treef1.c (revision 1087)
+++ start/oldexamples/tracer/treef1.c (nonexistent)
@@ -1,215 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <kernel/func.h>
-#include <kernel/model.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/mount.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <semaphore.h>
-#include <stdio.h>
-
-#include "common.h"
-
-#include <trace/trace.h>
-#include <trace/queues.h>
-
-#define sem_signal sem_post
-
-int noscroll=0;
-SEM console;
-
-#define MPROC ((50<(MAX_PROC-10))?50:MAX_PROC-10)
-
-TASK viewdir(void *prof);
-sem_t actmutex,actsync;
-char *globpathname;
-PID globpid;
-int counter=0,actcounter=0;
-
-void activate_task(int prof, char *pathname)
-{
- char tname[32];
- NRT_TASK_MODEL m;
- PID pid;
-
-REPEAT:
- sem_wait(&actmutex);
-
- if (actcounter>=MPROC) {
- sem_signal(&actmutex);
- task_delay(10000);
- goto REPEAT;
- }
-
- globpathname=pathname;
- counter++;
- sprintf(tname,"tsk%i",counter);
-
- nrt_task_default_model(m);
- nrt_task_def_arg(m,(void*)counter);
-
- globpid=pid=task_create(tname,viewdir,&m,NULL);
- if (pid==-1) {
- sem_wait(&console);
- cprintf("can't create '%s'\n",tname);
- perror("can't create task");
- sem_signal(&console);
- sys_end();
- return;
- }
- task_activate(pid);
- sem_wait(&actsync);
- actcounter++;
-
- sem_signal(&actmutex);
-}
-
-/*
- *
- */
-
-int filecounter=0;
-
-TASK viewdir(void *pointer)
-{
- struct dirent *den;
- struct stat st;
- char *str;
- DIR *d;
- int res;
- int x;
- char pathname[1024];
- PID mypid;
- int prof=(int)pointer;
-
- strcpy(pathname,globpathname);
- mypid=globpid;
- sem_signal(&actsync);
-
- str=pathname+(x=strlen(pathname));
- d=opendir(pathname);
-
- if (d==NULL) {
- sem_wait(&console);
- cprintf("%03i ERR: can't open dir %s\n",prof,pathname);
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- sem_signal(&console);
-
- sys_end();
- l1_exit(0);
-
- goto END;
- }
-
- while ((den=readdir(d))!=NULL) {
-
- if (x==1&&*pathname=='/')
- strcat(pathname,den->d_name);
- else
- strcat(strcat(pathname,"/"),den->d_name);
-
- sem_wait(&console);
- if (noscroll) {
- place(0,10);
- cprintf(" ");
- place(0,10);
- }
- cprintf("t%03i %s\n",prof,pathname);
- filecounter++;
- sem_signal(&console);
-
- if (!strcmp(den->d_name,".")) goto SKIP;
- if (!strcmp(den->d_name,"..")) goto SKIP;
-
- res=stat(pathname,&st);
- if (res!=0) {
- sem_wait(&console);
- cprintf("t%03i can't stat %s\n",prof,pathname);
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- sem_signal(&console);
-
- sys_end();
- l1_exit(0);
-
- closedir(d);
- goto END;
- } else {
- if (S_ISDIR(st.st_mode)) {
- sem_wait(&console);
- sem_signal(&console);
- activate_task(prof,pathname);
- }
-
- }
-
- SKIP:
- *str='\0';
- }
-
- closedir(d);
-
-END:
- sem_wait(&actmutex);
- actcounter--;
- sem_signal(&actmutex);
-
- return 0;
-}
-
-/*
- *
- */
-
-int __register_sub_init_prologue(void)
-{
- int q;
- TRC_init_phase1(NULL);
- trc_register_fixed_queue();
- q=trc_create_queue(TRC_FIXED_QUEUE,NULL);
- trc_assign_class_to_queue(TRC_CLASS_SYSTEM,q);
- trc_trace_class(TRC_CLASS_SYSTEM);
- return 0;
-}
-
-/*
- *
- */
-
-int main(int argc,char *argv[])
-{
- // int res;
-
- showmessage("This test show all filenames of a directory of an hardisk\n"
- "recursively using a soft task for every directory.\n"
- "The tracer with a circular queue is activated.\n");
-
- sem_init(&console,0,1);
- sem_init(&actmutex,0,1);
- sem_init(&actsync,0,0);
-
- activate_task(-1,FROMDIR);
-
- for(;;) {
- sem_wait(&actmutex);
- if (actcounter==0) break;
- sem_signal(&actmutex);
- task_delay(500000);
- }
-
- cprintf("\nfiles: %i\n",filecounter);
-
- waitend();
-
- return 0;
-}
Index: start/oldexamples/tracer/common.c
===================================================================
--- start/oldexamples/tracer/common.c (revision 1087)
+++ start/oldexamples/tracer/common.c (nonexistent)
@@ -1,134 +0,0 @@
-
-#include <kernel/func.h>
-#include <kernel/trace.h>
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <drivers/keyb.h>
-
-#include <trace/trace.h>
-#include <trace/queues.h>
-
-#include <sys/mount.h>
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-
-int __register_sub_init(void)
-{
- return 0;
-}
-
-/* -- */
-
-__dev_t root_device;
-__dev_t temp_device;
-
-int choose_root_callback(__dev_t dev,__uint8_t fs)
-{
- if (fs==FS_MSDOS) return dev;
- return -1;
-}
-
-int choose_temp_callback(__dev_t dev,__uint8_t fs)
-{
- static int flag=0;
- if (fs==FS_MSDOS) {
- if (flag) return dev;
- flag=1;
- }
- return -1;
-}
-
-/* -- */
-
-extern int bdev_scan_devices(int(*callback)(__dev_t,__uint8_t));
-
-int __bdev_sub_init(void)
-{
- BDEV_PARMS bdev=BASE_BDEV;
-
- bdev_def_showinfo(bdev,FALSE);
- bdev_init(&bdev);
-
- root_device=bdev_scan_devices(choose_root_callback);
- if (root_device<0) {
- cprintf("can't find root device to mount on /!!!\n");
- sys_end();
- return -1;
- }
-
- temp_device=bdev_scan_devices(choose_temp_callback);
- if (temp_device<0) {
- cprintf("can't find a filesystem to mount on /TEMP!!!\n");
- }
-
- return 0;
-}
-
-/* -- */
-
-extern int libc_initialize(void);
-
-int __fs_sub_init(void)
-{
- FILESYSTEM_PARMS fs=BASE_FILESYSTEM;
- struct mount_opts opts;
- int res;
-
- filesystem_def_rootdevice(fs,root_device);
- filesystem_def_fs(fs,FS_MSDOS);
- filesystem_def_showinfo(fs,FALSE);
-
-
- //filesystem_init_prologue();
- filesystem_init(&fs);
-
- libc_initialize();
-
- if (temp_device>=0) {
- memset(&opts,0,sizeof(struct mount_opts));
- opts.flags=MOUNT_FLAG_RW;
- res=mount(temp_device,FS_MSDOS,"/TEMP",&opts);
- if (res!=0) {
- cprintf("can't mount XXX on /TEMP (errno: %i)\n",errno);
- }
- }
-
- TRC_init_phase2();
-
- return 0;
-}
-
-/* -- */
-
-void ctrlc_exit(KEY_EVT *k)
-{
- extern void dump_sem_table(void);
- extern void dump_nop_table(void);
- //dump_sem_table();
- //dump_nop_table();
- //sys_status(SCHED_STATUS);
- sys_end();
-}
-
-/* -- */
-
-void showmessage(char *s)
-{
- cputs(s);
- cprintf("Press [x] to begin...");
- while (keyb_getchar()!='x');
- cprintf("\n");
-}
-
-void waitend(void)
-{
- int c;
- cprintf("Press [x] to exit...");
- while ((c=keyb_getchar())!='x');
- cprintf("\n");
-}
Index: start/oldexamples/tracer/tdump.c
===================================================================
--- start/oldexamples/tracer/tdump.c (revision 1087)
+++ start/oldexamples/tracer/tdump.c (nonexistent)
@@ -1,73 +0,0 @@
-
-#include <netinet/in.h>
-
-#include <stdio.h>
-#include "types.h"
-#include <trace.h>
-#include "util.h"
-
-int dumpsys(trc_system_event_t *sys)
-{
- /*
- if (sys->event==TRC_SCHEDULE) {
- //if (sys->prev!=65535)
- // printf("%02i->%02i\n",sys->prev,sys->task);
- //else
- printf("??->%02i\n",sys->task);
- return 0;
- }
- */
- printf("%02i\n",sys->task);
- return 0;
-}
-
-int dumpusr(trc_user_event_t *usr)
-{
- printf("%8li ",usr->n);
- printf("\n");
- return 0;
-}
-
-int dumpsem(trc_sem_event_t *sem)
-{
- printf("on [%i]\n",sem->id);
- return 0;
-}
-
-int dumpfunc(trc_event_t *ev)
-{
- static int counter=0;
-
- printf("%4i ",counter);
- counter++;
- printf("%12s ",format_time(ev->time));
- printf("%-10s ",event_name(ev->event));
-
- //printf("%08x\n",(unsigned)ev->sys.event);
- //return 0;
-
- switch(event_class(ev->event)) {
- case TRC_CLASS_SYSTEM: return dumpsys(&ev->x.sys);
- case TRC_CLASS_USER: return dumpusr(&ev->x.usr);
- case TRC_CLASS_SEM: return dumpsem(&ev->x.sem);
- }
- printf("\nEVENT %i... CLASS %i UNKNOWN!\n",ev->event,event_class(ev->event));
- return -1;
-}
-
-int main(int argc, char *argv[])
-{
- int res;
-
- if (argc!=2) {
- fprintf(stderr,"missing filename!\n");
- return -1;
- }
-
- res=read_trace(argv[1],dumpfunc);
-
- //fprintf(stderr,"result=%i\n",res);
- //fprintf(stderr,"size=%li\n",sizeof(trc_event_t));
-
- return 0;
-}
Index: start/oldexamples/tracer/simple.c
===================================================================
--- start/oldexamples/tracer/simple.c (revision 1087)
+++ start/oldexamples/tracer/simple.c (nonexistent)
@@ -1,132 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Massimiliano Giorgi <massy@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/*
- * Copyright (C) 2000 Massimiliano Giorgi
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * CVS : $Id: simple.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
- *
- * File: $File$
- * Revision: $Revision: 1.1.1.1 $
- * Last update: $Date: 2002-09-02 09:37:48 $
- */
-
-/*
- * Example of simple tracer initialization.
- */
-
-#include <ll/i386/cons.h>
-
-#include <kernel/func.h>
-#include <kernel/trace.h>
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <drivers/keyb.h>
-
-#include <trace/trace.h>
-
-#include <sys/mount.h>
-#include <stddef.h>
-
-#define ROOTDEVICE "ide/hda2"
-
-int __register_sub_init_prologue(void)
-{
- int res;
-
- /* tracer initialization phase 1 */
- res=TRC_init_phase1_standard();
- if (res!=0) {
- cprintf("tracer initialization error (%i)!!!\n",res);
- sys_end();
- return -1;
- }
-
- return 0;
-}
-
-int __register_sub_init(void)
-{
- return 0;
-}
-
-__dev_t root_device;
-
-int __bdev_sub_init(void)
-{
- /* block device initialization */
- bdev_init(NULL);
-
- /* choose root device */
- root_device=bdev_find_byname(ROOTDEVICE);
- if (root_device<0) {
- cprintf("can't find root device to mount on /!!!\n");
- sys_end();
- return -1;
- }
-
- return 0;
-}
-
-int __fs_sub_init(void)
-{
- FILESYSTEM_PARMS fs=BASE_FILESYSTEM;
- extern int libc_initialize(void);
-
- /* filesystems initialization */
- filesystem_def_rootdevice(fs,root_device);
- filesystem_def_fs(fs,FS_MSDOS);
- filesystem_def_showinfo(fs,FALSE);
- filesystem_init(&fs);
-
- /* libC initialization */
- libc_initialize();
-
- /* tracer initialization phase 2 */
- TRC_init_phase2_standard();
- return 0;
-}
-
-void ctrlc_exit(KEY_EVT *k)
-{
- sys_end();
-}
-
-int main(int argc,char *argv[])
-{
- cprintf("\nSimple hello world (with tracer)!\n\n");
- return 0;
-}
Index: start/oldexamples/tracer/makefile
===================================================================
--- start/oldexamples/tracer/makefile (revision 1087)
+++ start/oldexamples/tracer/makefile (nonexistent)
@@ -1,69 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= simple hello hello1 hello2 test0 treef1 treec1 treec2
-OBJS=common.o
-
-include $(BASE)/config/example.mk
-
-simple:
- make -f $(SUBMAKE) APP=simple INIT=initfs.o OTHEROBJS=
-hello:
- make -f $(SUBMAKE) APP=hello INIT=initfs.o OTHEROBJS=
-hello1:
- make -f $(SUBMAKE) APP=hello1 INIT=initfs.o OTHEROBJS=common.o
-hello2:
- make -f $(SUBMAKE) APP=hello2 INIT=initfs.o OTHEROBJS=common.o
-test0:
- make -f $(SUBMAKE) APP=test0 INIT=initfs.o OTHEROBJS=common.o
-treef1:
- make -f $(SUBMAKE) APP=treef1 INIT=initfs.o OTHEROBJS=common.o
-treec1:
- make -f $(SUBMAKE) APP=treec1 INIT=initfs.o OTHEROBJS=common.o
-treec2:
- make -f $(SUBMAKE) APP=treec2 INIT=initfs.o OTHEROBJS=common.o
-
-#
-#
-#
-
-
-.PHONY: util
-
-util: tdump.exe jdump.exe sa.exe road.exe wait.exe
-
-tdump.exe: tdump.c util.c
- gcc -s -Wimplicit-function-declaration -Wall \
- -I$(BASE)/include/trace tdump.c util.c -o tdump.exe
-
-jdump.exe: jdump.c util.c
- gcc -s -Wimplicit-function-declaration -Wall \
- -I$(BASE)/include/trace jdump.c util.c -o jdump.exe
-
-sa.exe: sa.c util.c distr.c
- gcc -s -Wimplicit-function-declaration -Wall \
- -I$(BASE)/include/trace sa.c util.c -o sa.exe
-
-road.exe: road.c util.c distr.c
- gcc -s -Wimplicit-function-declaration -Wall \
- -I$(BASE)/include/trace road.c util.c -o road.exe
-
-wait.exe: wait.c util.c distr.c
- gcc -s -Wimplicit-function-declaration -Wall \
- -I$(BASE)/include/trace wait.c util.c -o wait.exe
-
-
-
-#include $(BASE)/config/example.mk
-
-
-
-
-
-
Index: start/oldexamples/tracer/common.h
===================================================================
--- start/oldexamples/tracer/common.h (revision 1087)
+++ start/oldexamples/tracer/common.h (nonexistent)
@@ -1,28 +0,0 @@
-
-#ifndef _COMMON_H
-#define _COMMON_H
-
-#include <sys/types.h>
-
-/*
-#include <kernel/int_sem.h>
-#define SEM internal_sem_t
-#define sem_init internal_sem_init
-#define sem_signal internal_sem_post
-#define sem_wait internal_sem_wait
-*/
-
-#define SEM sem_t
-#define sem_signal sem_post
-
-extern __dev_t root_device;
-extern __dev_t temp_device;
-
-int choose_temp_callback(__dev_t dev,__uint8_t fs);
-
-void showmessage(char *s);
-void waitend(void);
-
-#define FROMDIR "/TEMP"
-
-#endif
Index: start/oldexamples/tracer/test0.c
===================================================================
--- start/oldexamples/tracer/test0.c (revision 1087)
+++ start/oldexamples/tracer/test0.c (nonexistent)
@@ -1,71 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <kernel/func.h>
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <drivers/keyb.h>
-
-#include <sys/mount.h>
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-
-#include "common.h"
-
-#define FILENAME "/TEMP/ALFA1.TXT"
-
-#include <trace/trace.h>
-#include <trace/queues.h>
-
-int __register_sub_init_prologue(void)
-{
- TRC_init_phase1(NULL);
- trc_register_fixed_queue();
- trc_create_queue(TRC_FIXED_QUEUE,NULL);
- return 0;
-}
-
-int main(int argc,char *argv[])
-{
- int h;
-
- showmessage("A file is opened for reading while the tracer\n"
- "with a fixed queue is runnig\n");
-
- cprintf("OPENING %s\n",FILENAME);
- h=open(FILENAME,O_RDONLY);
- if (h>=0) {
- char buffer[128];
- int len;
- cprintf("OPENED!\n");
-
- cprintf("READING...\n");
- len=read(h,buffer,sizeof(buffer));
- cprintf("READ %i bytes\n",len);
- memset(buffer,'\0',sizeof(buffer));
- cprintf("buffer='%s'\n",buffer);
-
- cprintf("READING...\n");
- len=read(h,buffer,sizeof(buffer));
- cprintf("READ %i bytes\n",len);
- memset(buffer,'\0',sizeof(buffer));
- cprintf("buffer='%s'\n",buffer);
-
- close(h);
-
- } else
- cprintf("FAILED!\n");
-
- waitend();
-
- return 0;
-}
Index: start/oldexamples/tracer/sa.c
===================================================================
--- start/oldexamples/tracer/sa.c (revision 1087)
+++ start/oldexamples/tracer/sa.c (nonexistent)
@@ -1,81 +0,0 @@
-
-#include <netinet/in.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include "types.h"
-#include <trace.h>
-#include "util.h"
-
-/* distribuzione del delta schedule_time - arrival_time */
-
-#define MAXX 50
-#define PREC 100
-#define DELTA ((double)MAXX/(double)PREC)
-
-#include "distr.c"
-
-int task;
-long a=-1;
-long s;
-
-int safunc(trc_event_t *ev)
-{
- if (event_class(ev->event)!=TRC_CLASS_SYSTEM) return 0;
-
- if (ev->x.sys.task!=task) return 0;
-
- if (a==-1) {
- if (ev->event==TRC_ACTIVATE||ev->event==TRC_INTACTIVATION)
- a=ev->time;
- } else {
- if (ev->event==TRC_SCHEDULE) {
- s=ev->time;
- d_insert(s-a);
- a=-1;
- }
- }
- return 0;
-}
-
-/* -- */
-
-int main(int argc, char *argv[])
-{
- int res;
-
- if (argc!=4) {
- fprintf(stderr,"usage: sa [tracefile] [pid] [outputfile]\n");
- return -1;
- }
-
- d_init();
-
- task=atoi(argv[2]);
- res=read_trace(argv[1],safunc);
-
- if (res==0) {
- FILE *fout;
- fout=fopen(argv[3],"wt");
- if (fout==NULL) {
- fprintf(stderr,"error writing output file!\n");
- return 0;
- }
- d_dump(fout);
- fclose(fout);
- }
-
- if (res!=0) {
- fprintf(stderr,"error=%i\n",res);
- perror("ERROR");
- }
-
- return 0;
-}
-
-
-
-
-
-
-
Index: start/oldexamples/tracer/hello.c
===================================================================
--- start/oldexamples/tracer/hello.c (revision 1087)
+++ start/oldexamples/tracer/hello.c (nonexistent)
@@ -1,209 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Massimiliano Giorgi <massy@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/*
- * Copyright (C) 2000 Massimiliano Giorgi
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * CVS : $Id: hello.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
- *
- * File: $File$
- * Revision: $Revision: 1.1.1.1 $
- * Last update: $Date: 2002-09-02 09:37:48 $
- */
-
-/*
- * Example of tracer initialization.
- */
-
-#include <ll/i386/cons.h>
-
-#include <kernel/func.h>
-#include <kernel/trace.h>
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <drivers/keyb.h>
-
-#include <trace/trace.h>
-#include <trace/queues.h>
-
-#include <sys/mount.h>
-#include <stddef.h>
-
-/*
- this example use initfs.c to initialize the system; this file define
- the following two function.
-
- __kernel_register_levels__(), must initialize all kernel modules,
- it has this structure:
-
- {
- __register_sub_init_prologue();
-
- ... modules initialization....
-
- __register_sub_init();
- }
-
- __init__(void *arg) is called when the first task is created
- and must call the main():
-
- {
-
- ... drivers initialization ....
-
- __bdev_sub_init();
- __fs_sub_init();
-
- call_main()
-
- }
-
- */
-
-/*
- * This function is called before all other modules initialization because
- * all modules that need the tracer must follow tracer initialization.
- */
-int __register_sub_init_prologue(void)
-{
- /* the first functions to call... parameters can be passed */
- TRC_init_phase1(NULL);
- /* all the tracer queues must be registrated (in this case only */
- /* a dummy queue is initialized) */
- trc_register_dummy_queue();
- /* the queues must be created (only one in this example) */
- trc_create_queue(TRC_DUMMY_QUEUE,NULL);
- /* events can be dispatch to a queue (nothing in this case) */
- return 0;
-}
-
-/*
- * This function is called after all other modules initialization
- * functions... notjing to do.
- */
-int __register_sub_init(void)
-{
- return 0;
-}
-
-__dev_t root_device;
-__dev_t temp_device;
-
-/*
- * Now the system is running... we have to initialize the block device
- * drivers
- */
-int __bdev_sub_init(void)
-{
- BDEV_PARMS bdev=BASE_BDEV;
-
- /* This to initialize the block device drivers... a NULL can be passed */
- /* to the bdev_init() functions */
- bdev_def_showinfo(bdev,FALSE);
- bdev_init(&bdev);
-
- /* The following phase ca be made in several way: we must decide the */
- /* device that we want mount as root... we use the bdev_find_byname() */
- /* functions to find a specific device */
- root_device=bdev_find_byname("ide/hda1");
- if (root_device<0) {
- cprintf("can't find root device to mount on /!!!\n");
- sys_end();
- return -1;
- }
-
- /* Well, we want a device to mount into /TEMP */
- temp_device=bdev_find_byname("ide/hdb3");
- if (temp_device<0) {
- cprintf("can't find a filesystem to mount on /TEMP!!!\n");
- sys_end();
- return -1;
- }
-
- return 0;
-}
-
-
-/*
- * This is the real filesystem initialization!
- */
-int __fs_sub_init(void)
-{
- FILESYSTEM_PARMS fs=BASE_FILESYSTEM;
- extern int libc_initialize(void);
- int res;
- struct mount_opts opts;
-
- /* We set the root device and call the filesystem_init() function */
- filesystem_def_rootdevice(fs,root_device);
- filesystem_def_fs(fs,FS_MSDOS);
- filesystem_def_showinfo(fs,FALSE);
- filesystem_init(&fs);
-
- /* We must initialize the libC if we use it */
- libc_initialize();
-
- /* We have choose to mount the second partiotion into the /TEMP */
- /* directory with read/write privilegies (this step is not required) */
- if (temp_device>=0) {
- memset(&opts,0,sizeof(struct mount_opts));
- opts.flags=MOUNT_FLAG_RW;
- res=mount(temp_device,FS_MSDOS,"/TEMP",&opts);
- if (res!=0) {
- cprintf("can't mount XXX on /TEMP (errno: %i)\n",errno);
- }
- }
-
- /* NOW we call the tracer initialization phase 2!!! */
- /* It must FOLLOW the filesystem initialization... (this function */
- /* can be called after the call to filesystem_init() functions but */
- /* we do it here because we want be able to write into the /TEMP */
- /* directory! */
- TRC_init_phase2();
-
- return 0;
-}
-
-void ctrlc_exit(KEY_EVT *k)
-{
- sys_end();
-}
-
-int main(int argc,char *argv[])
-{
- cprintf("\nHello, world!\n");
- return 0;
-}
Index: start/oldexamples/tracer/wait.c
===================================================================
--- start/oldexamples/tracer/wait.c (revision 1087)
+++ start/oldexamples/tracer/wait.c (nonexistent)
@@ -1,56 +0,0 @@
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "types.h"
-#include <trace.h>
-#include "util.h"
-
-/* distribuzione dei tempi di attesa sulle richieste al disco */
-
-#define MAXX 37000
-#define PREC 37000
-#define DELTA ((double)MAXX/(double)PREC)
-
-#include "distr.c"
-
-int task;
-long a=-1;
-
-int waitfunc(trc_event_t *ev)
-{
- if (event_class(ev->event)!=TRC_CLASS_USER) return 0;
- if (ev->x.usr.n!=task) return 0;
- if (ev->event==TRC_USER1) {
- a=ev->time;
- return 0;
- }
- if (ev->event==TRC_USER2) {
- if (a!=-1) d_insert(ev->time-a);
- a=-1;
- }
- return 0;
-}
-
-int main(int argc, char *argv[])
-{
- FILE *fout;
- int res;
- if (argc!=4) {
- fprintf(stderr,"missing filename!\n");
- return -1;
- }
- d_init();
- task=atoi(argv[2]);
- res=read_trace(argv[1],waitfunc);
- if (res==0) {
- fout=fopen(argv[3],"wt");
- if (fout!=NULL) {
- d_dump(fout);
- fclose(fout);
- } else
- fprintf(stderr,"can't create output file!\n");
- } else
- fprintf(stderr,"read_trace error\n");
-
- return 0;
-}
Index: start/oldexamples/tracer/types.h
===================================================================
--- start/oldexamples/tracer/types.h (revision 1087)
+++ start/oldexamples/tracer/types.h (nonexistent)
@@ -1,13 +0,0 @@
-#ifndef __TYPES_H__
-#define __TYPES_H__
-
-#include <sys/types.h>
-
-typedef unsigned char u_int8_t;
-typedef unsigned short u_int16_t;
-typedef unsigned long u_int32_t;
-
-#include <types.h>
-
-#endif
-
Index: start/oldexamples/stdio/test2.c
===================================================================
--- start/oldexamples/stdio/test2.c (revision 1087)
+++ start/oldexamples/stdio/test2.c (nonexistent)
@@ -1,91 +0,0 @@
-/*
- *
- *
- *
- */
-#include <ll/i386/cons.h>
-#include <drivers/keyb.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-int main(int argc,char *argv[])
-{
- char buffer[256];
- FILE *fin;
- char *s;
- int res;
- int c,n;
- char ch;
-
- /*
- temp_device=bdev_scan_devices(choose_temp_callback);
- if (temp_device<0) {
- cprintf("can't find a filesystem to mount on /TEMP!!!\n");
- return -1;
- }
-
- res=mount(temp_device,FS_MSDOS,"/TEMP",NULL);
- if (res!=0) {
- cprintf("can't mount XXX on /TEMP (errno: %i)\n",errno);
- sys_end();
- return -1;
- }
- */
-
- /*
- *
- */
-
- cprintf("opening...\n");
- fin=fopen("/TEMP/ALFA2.TXT","r");
- cprintf("opened!\n");
-
- if (fin!=NULL) {
-
- n=-1;
- cprintf("fscanf()ing...\n");
- res=fscanf(fin,"number %i",&n);
- cprintf("fscanf()ed...\n");
- if (res!=1) {
- cprintf("error on 1st fscanf() res=%i\n",res);
- return 0;
- }
- cprintf("scanned number %i (exact 103)\n",n);
-
- s=fgets(buffer,sizeof(buffer),fin);
- if (s==NULL) {
- cprintf("error on 1st fgets()\n");
- return 0;
- }
- s=fgets(buffer,sizeof(buffer),fin);
- if (s==NULL) {
- cprintf("error on 2nd fgets()\n");
- return 0;
- }
- s=fgets(buffer,sizeof(buffer),fin);
- if (s==NULL) {
- cprintf("error on 3rd fgets()\n");
- return 0;
- }
-
- cprintf("fscanf()ing...\n");
- res=fscanf(fin,"line %i error letter '%c'",&n,&ch);
- cprintf("fscanf()ed...\n");
- if (res!=2) {
- cprintf("error on 2nd fscanf() res=%i\n",res);
- return 0;
- }
- cprintf("scanned number %i (exact 205) characer '%c' (exact 'c')\n",n,ch);
-
- cprintf("closing...\n");
- fclose(fin);
- cprintf("closed!\n");
- }
-
- cprintf("[press 'x' to exit]\n");
- while ((c = keyb_getchar()) != 'x') ;
-
- return 0;
-}
Index: start/oldexamples/stdio/test3.c
===================================================================
--- start/oldexamples/stdio/test3.c (revision 1087)
+++ start/oldexamples/stdio/test3.c (nonexistent)
@@ -1,55 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <ll/i386/cons.h>
-#include <drivers/keyb.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-int main(int argc,char *argv[])
-{
- char buffer[256];
- char *s;
- // int res;
- int c;
-
- /*
- temp_device=bdev_scan_devices(choose_temp_callback);
- if (temp_device<0) {
- cprintf("can't find a filesystem to mount on /TEMP!!!\n");
- return -1;
- }
-
- res=mount(temp_device,FS_MSDOS,"/TEMP",NULL);
- if (res!=0) {
- cprintf("can't mount XXX on /TEMP (errno: %i)\n",errno);
- sys_end();
- return -1;
- }
- */
-
- /*
- *
- */
-
- printf("try using printf() to write on console!\n");
- printf("second line of the test\n");
- fprintf(stdout,"using fprintf() to write on stdout\n");
- fprintf(stderr,"try using fprintf() to write on stderr!\n");
- fprintf(stderr,"all this %i message are using ?printf() functions\n",4);
-
- printf("now try to write a phrase and press [Enter] to finish\n");
- s=fgets(buffer,sizeof(buffer),stdin);
- if (s!=NULL) printf("you have typed: '%s'\n",s);
-
- cprintf("[press 'x' to exit]\n");
-
- while ((c = keyb_getchar()) != 'x') ;
-
- return 0;
-}
Index: start/oldexamples/stdio/test4.c
===================================================================
--- start/oldexamples/stdio/test4.c (revision 1087)
+++ start/oldexamples/stdio/test4.c (nonexistent)
@@ -1,60 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <ll/i386/cons.h>
-#include <drivers/keyb.h>
-
-#include <stdio.h>
-#include <string.h>
-
-int main(int argc,char *argv[])
-{
- char buffer[256];
- FILE *fin;
- int res;
- int c;
- int flag=1;
-
- /* prova di rewind() */
-
- cprintf("opening...\n");
- fin=fopen("/TEMP/ALFA1.TXT","r");
- cprintf("opened!\n");
-
- cprintf("res=%p\n",fin);
-
- if (fin!=NULL) {
-
- REDO:
-
- while (!feof(fin)) {
- cprintf("reading...\n");
- res=fread(buffer,1,sizeof(buffer)-2,fin);
- cprintf("read!\n");
-
- cprintf("res=%i\n",res);
- buffer[res<sizeof(buffer)-1?res:sizeof(buffer)-1]='\0';
- cprintf("'%s'\n",buffer);
- }
-
- if (flag) {
- flag=0;
- cprintf("rewinding...\n");
- rewind(fin);
- cprintf("rewinded!\n");
- goto REDO;
- }
-
- cprintf("closing...\n");
- fclose(fin);
- cprintf("closed!\n");
- }
-
- cprintf("[press 'x' to exit]\n");
- while ((c = keyb_getch(BLOCK)) != 'x') ;
-
- return 0;
-}
Index: start/oldexamples/stdio/common.c
===================================================================
--- start/oldexamples/stdio/common.c (revision 1087)
+++ start/oldexamples/stdio/common.c (nonexistent)
@@ -1,118 +0,0 @@
-
-#include <kernel/func.h>
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <drivers/keyb.h>
-
-#include <sys/mount.h>
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-
-/* -- */
-
-int __register_sub_init_prologue(void)
-{
- return 0;
-}
-
-int __register_sub_init(void)
-{
- return 0;
-}
-
-/* -- */
-
-__dev_t root_device;
-__dev_t temp_device;
-
-int choose_root_callback(__dev_t dev,__uint8_t fs)
-{
- if (fs==FS_MSDOS) return dev;
- return -1;
-}
-
-int choose_temp_callback(__dev_t dev,__uint8_t fs)
-{
- static int flag=0;
- if (fs==FS_MSDOS) {
- if (flag) return dev;
- flag=1;
- }
- return -1;
-}
-
-/* -- */
-
-//extern int bdev_scan_devices(int(*callback)(__dev_t,__uint8_t));
-
-int __bdev_sub_init(void)
-{
- BDEV_PARMS bdev=BASE_BDEV;
-
- bdev_def_showinfo(bdev,TRUE);
- bdev_init(&bdev);
-
- root_device=bdev_scan_devices(choose_root_callback);
- if (root_device<0) {
- cprintf("can't find root device to mount on /!!!\n");
- sys_end();
- return -1;
- }
-
- temp_device=bdev_scan_devices(choose_temp_callback);
- if (temp_device<0) {
- cprintf("can't find a filesystem to mount on /TEMP!!!\n");
- }
-
- return 0;
-}
-
-/* -- */
-
-extern int libc_initialize(void);
-
-int __fs_sub_init(void)
-{
- FILESYSTEM_PARMS fs=BASE_FILESYSTEM;
- struct mount_opts opts;
- int res;
-
- filesystem_def_rootdevice(fs,root_device);
- filesystem_def_fs(fs,FS_MSDOS);
- filesystem_def_showinfo(fs,TRUE);
- filesystem_init(&fs);
-
- libc_initialize();
-
- if (temp_device>=0) {
- memset(&opts,0,sizeof(struct mount_opts));
- opts.flags=MOUNT_FLAG_RW;
- res=mount(temp_device,FS_MSDOS,"/TEMP",&opts);
- if (res!=0) {
- cprintf("can't mount XXX on /TEMP (errno: %i)\n",errno);
- }
- }
-
- return 0;
-}
-
-/* -- */
-
-
-/* -- */
-
-void ctrlc_exit(KEY_EVT *k)
-{
- extern void dump_sem_table(void);
- extern void dump_nop_table(void);
- //dump_sem_table();
- //dump_nop_table();
- //sys_status(SCHED_STATUS);
- cprintf("CTRL-C pressed!\n");
- sys_end();
-}
Index: start/oldexamples/stdio/makefile
===================================================================
--- start/oldexamples/stdio/makefile (revision 1087)
+++ start/oldexamples/stdio/makefile (nonexistent)
@@ -1,28 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS=test0 test1 test2 test3 test4
-OBJS=common.o
-
-include $(BASE)/config/example.mk
-
-test0:
- make -f $(SUBMAKE) APP=test0 INIT=initfs.o OTHEROBJS=common.o
-
-test1:
- make -f $(SUBMAKE) APP=test1 INIT=initfs.o OTHEROBJS=common.o
-
-test2:
- make -f $(SUBMAKE) APP=test2 INIT=initfs.o OTHEROBJS=common.o
-
-test3:
- make -f $(SUBMAKE) APP=test3 INIT=initfs.o OTHEROBJS=common.o
-
-test4:
- make -f $(SUBMAKE) APP=test4 INIT=initfs.o OTHEROBJS=common.o
Index: start/oldexamples/stdio/test0.c
===================================================================
--- start/oldexamples/stdio/test0.c (revision 1087)
+++ start/oldexamples/stdio/test0.c (nonexistent)
@@ -1,72 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <ll/i386/cons.h>
-#include <drivers/keyb.h>
-
-#include <stdio.h>
-#include <string.h>
-
-int main(int argc,char *argv[])
-{
- char buffer[256];
- FILE *fin;
- int res;
- int c;
-
- /*
- temp_device=bdev_scan_devices(choose_temp_callback);
- if (temp_device<0) {
- cprintf("can't find a filesystem to mount on /TEMP!!!\n");
- return -1;
- }
-
- res=mount(temp_device,FS_MSDOS,"/TEMP",NULL);
- if (res!=0) {
- cprintf("can't mount XXX on /TEMP (errno: %i)\n",errno);
- sys_end();
- return -1;
- }
- */
-
- /*
- *
- */
-
- fin=NULL;
-
- cprintf("opening...\n");
- fin=fopen("/TEMP/ALFA1.TXT","r");
- cprintf("opened!\n");
-
- cprintf("res=%p\n",fin);
-
- if (fin!=NULL) {
-
- while (!feof(fin)) {
-
- memset(buffer,'@',sizeof(buffer));
-
- cprintf("reading...\n");
- res=fread(buffer,1,sizeof(buffer)-1,fin);
- cprintf("read!\n");
-
- cprintf("res=%i\n",res);
- buffer[res<sizeof(buffer)-1?res:sizeof(buffer)-1]='\0';
- cprintf("'%s'\n",buffer);
-
- }
-
- cprintf("closing...\n");
- fclose(fin);
- cprintf("closed!\n");
- }
-
- cprintf("[press 'x' to exit]\n");
- while ((c = keyb_getch(BLOCK)) != 'x') ;
-
- return 0;
-}
Index: start/oldexamples/stdio/test1.c
===================================================================
--- start/oldexamples/stdio/test1.c (revision 1087)
+++ start/oldexamples/stdio/test1.c (nonexistent)
@@ -1,67 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <ll/i386/cons.h>
-#include <drivers/keyb.h>
-
-#include <stdio.h>
-#include <string.h>
-
-int main(int argc,char *argv[])
-{
- char buffer[256];
- FILE *fin;
- char *s;
- // int res;
- int c;
-
- /*
- temp_device=bdev_scan_devices(choose_temp_callback);
- if (temp_device<0) {
- cprintf("can't find a filesystem to mount on /TEMP!!!\n");
- return -1;
- }
-
- res=mount(temp_device,FS_MSDOS,"/TEMP",NULL);
- if (res!=0) {
- cprintf("can't mount XXX on /TEMP (errno: %i)\n",errno);
- sys_end();
- return -1;
- }
- */
-
- /*
- *
- */
-
- cprintf("opening...\n");
- fin=fopen("/TEMP/ALFA2.TXT","r");
- cprintf("opened!\n");
-
- if (fin!=NULL) {
-
- while (!feof(fin)) {
- cprintf("getting line...\n");
- s=fgets(buffer,sizeof(buffer),fin);
- cprintf("got!\n");
- if (s==NULL) {
- if (ferror(fin))
- cprintf("error while using fgets()!\n");
- break;
- }
- cprintf("'%s'\n",buffer);
- }
-
- cprintf("closing...\n");
- fclose(fin);
- cprintf("closed!\n");
- }
-
- cprintf("[press 'x' to exit]\n");
- while ((c = keyb_getchar()) != 'x') ;
-
- return 0;
-}
Index: start/oldexamples/fs/testw0.c
===================================================================
--- start/oldexamples/fs/testw0.c (revision 1087)
+++ start/oldexamples/fs/testw0.c (nonexistent)
@@ -1,54 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <ll/i386/cons.h>
-#include <kernel/func.h>
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <drivers/keyb.h>
-
-#include <sys/mount.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-
-#include "common.h"
-
-#define FILENAME "/TEMP/TESTW0.TXT"
-
-extern dev_t temp_device;
-
-int main(int argc,char *argv[])
-{
- int res;
- // int c;
- int h;
-
- showmessage("Try to create and truncate a file.\n");
-
- cprintf("OPENING %s\n",FILENAME);
- h=open(FILENAME,O_CREAT|O_WRONLY|O_TRUNC);
- if (h!=-1) {
- cprintf("CLOSING %s\n",FILENAME);
- res=close(h);
- if (res!=0) {
- cprintf("CLOSE FAILED!\n");
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- }
- } else {
- cprintf("FAILED!\n");
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- }
-
- waitend();
-
- return 0;
-}
Index: start/oldexamples/fs/testw1.c
===================================================================
--- start/oldexamples/fs/testw1.c (revision 1087)
+++ start/oldexamples/fs/testw1.c (nonexistent)
@@ -1,71 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <kernel/func.h>
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <drivers/keyb.h>
-
-#include <sys/mount.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-
-#include "common.h"
-
-#define FILENAME "/TEMP/TESTW1.TXT"
-
-int scrivi(int h,char *buffer,int len)
-{
- int res;
- cprintf("WRITING...\n");
- res=write(h,buffer,len);
- cprintf("WRITTEN %i bytes\n",res);
- if (res>0) {
- buffer[res]='\0';
- cprintf("(%s)\n",buffer);
- } else cprintf("errno: %i '%s'\n",errno,strerror(errno));
- return res;
-}
-
-extern dev_t temp_device;
-
-int main(int argc,char *argv[])
-{
- int res;
- int h;
-
- showmessage("Try to create and overwriting a file.\n");
-
- cprintf("OPENING %s\n",FILENAME);
- h=open(FILENAME,O_CREAT|O_WRONLY|O_TRUNC);
-
- if (h>=0) {
- cprintf("OPENED fd=%i!\n",h);
-
- scrivi(h,"ABC ",3);
-
- scrivi(h,"abcdefghilmnopqrstuvz ",21);
-
- res=close(h);
- if (res!=0) {
- cprintf("CLOSE FAILED!\n");
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- }
- } else {
- cprintf("FAILED!\n");
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- }
-
- waitend();
-
- return 0;
-}
Index: start/oldexamples/fs/common.c
===================================================================
--- start/oldexamples/fs/common.c (revision 1087)
+++ start/oldexamples/fs/common.c (nonexistent)
@@ -1,136 +0,0 @@
-
-#include <kernel/func.h>
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <drivers/keyb.h>
-
-#include <sys/mount.h>
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-
-/* -- */
-
-int __register_sub_init_prologue(void)
-{
- return 0;
-}
-
-int __register_sub_init(void)
-{
- return 0;
-}
-
-/* -- */
-
-__dev_t root_device;
-__dev_t temp_device;
-
-int choose_root_callback(__dev_t dev,__uint8_t fs)
-{
- if (fs==FS_MSDOS) return dev;
- return -1;
-}
-
-int choose_temp_callback(__dev_t dev,__uint8_t fs)
-{
- static int flag=0;
- if (fs==FS_MSDOS) {
- if (flag) return dev;
- flag=1;
- }
- return -1;
-}
-
-/* -- */
-
-//extern int bdev_scan_devices(int(*callback)(__dev_t,__uint8_t));
-
-int __bdev_sub_init(void)
-{
- BDEV_PARMS bdev=BASE_BDEV;
-
- bdev_def_showinfo(bdev,TRUE);
- bdev_init(&bdev);
-
- root_device=bdev_scan_devices(choose_root_callback);
- if (root_device<0) {
- cprintf("can't find root device to mount on /!!!\n");
- sys_end();
- return -1;
- }
-
- temp_device=bdev_scan_devices(choose_temp_callback);
- if (temp_device<0) {
- cprintf("can't find a filesystem to mount on /TEMP!!!\n");
- }
-
- return 0;
-}
-
-/* -- */
-
-extern int libc_initialize(void);
-
-int __fs_sub_init(void)
-{
- FILESYSTEM_PARMS fs=BASE_FILESYSTEM;
- struct mount_opts opts;
- int res;
-
- filesystem_def_rootdevice(fs,root_device);
- filesystem_def_fs(fs,FS_MSDOS);
- filesystem_def_showinfo(fs,TRUE);
- filesystem_init(&fs);
-
- libc_initialize();
-
- if (temp_device>=0) {
- memset(&opts,0,sizeof(struct mount_opts));
- opts.flags=MOUNT_FLAG_RW;
- res=mount(temp_device,FS_MSDOS,"/TEMP",&opts);
- if (res!=0) {
- cprintf("can't mount XXX on /TEMP (errno: %i)\n",errno);
- }
- }
-
- return 0;
-}
-
-/* -- */
-
-
-/* -- */
-
-void ctrlc_exit(KEY_EVT *k)
-{
- extern void dump_sem_table(void);
- extern void dump_nop_table(void);
- //dump_sem_table();
- //dump_nop_table();
- //sys_status(SCHED_STATUS);
- cprintf("CTRL-C pressed!\n");
- sys_end();
-}
-
-/* -- */
-
-void showmessage(char *s)
-{
- cputs(s);
- cprintf("Press [x] to begin...");
- while (keyb_getchar()!='x');
- cprintf("\n");
-}
-
-void waitend(void)
-{
- int c;
- cprintf("Press [x] to exit...");
- while ((c=keyb_getchar())!='x');
- cprintf("\n");
-}
Index: start/oldexamples/fs/makefile
===================================================================
--- start/oldexamples/fs/makefile (revision 1087)
+++ start/oldexamples/fs/makefile (nonexistent)
@@ -1,45 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS=hello
-PROGS+=test0 test1
-PROGS+=testw0 testw1
-PROGS+=tree1 tree2
-PROGS+=testu
-OBJS=common.o
-
-include $(BASE)/config/example.mk
-
-#
-#
-#
-
-hello:
- make -f $(SUBMAKE) APP=hello INIT=initfs.o OTHEROBJS=common.o
-
-test0:
- make -f $(SUBMAKE) APP=test0 INIT=initfs.o OTHEROBJS=common.o
-
-test1:
- make -f $(SUBMAKE) APP=test1 INIT=initfs.o OTHEROBJS=common.o
-
-testu:
- make -f $(SUBMAKE) APP=testu INIT=initfs.o OTHEROBJS=common.o
-
-testw0:
- make -f $(SUBMAKE) APP=testw0 INIT=initfs.o OTHEROBJS=common.o
-
-testw1:
- make -f $(SUBMAKE) APP=testw1 INIT=initfs.o OTHEROBJS=common.o
-
-tree1:
- make -f $(SUBMAKE) APP=tree1 INIT=initfs.o OTHEROBJS=common.o
-
-tree2:
- make -f $(SUBMAKE) APP=tree2 INIT=initfs.o OTHEROBJS=common.o
Index: start/oldexamples/fs/common.h
===================================================================
--- start/oldexamples/fs/common.h (revision 1087)
+++ start/oldexamples/fs/common.h (nonexistent)
@@ -1,15 +0,0 @@
-
-#ifndef _COMMON_H
-#define _COMMON_H
-
-#include <sys/types.h>
-
-extern __dev_t root_device;
-extern __dev_t temp_device;
-
-int choose_temp_callback(__dev_t dev,__uint8_t fs);
-
-void showmessage(char *s);
-void waitend(void);
-
-#endif
Index: start/oldexamples/fs/test0.c
===================================================================
--- start/oldexamples/fs/test0.c (revision 1087)
+++ start/oldexamples/fs/test0.c (nonexistent)
@@ -1,63 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <kernel/func.h>
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <drivers/keyb.h>
-
-#include <sys/mount.h>
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-
-#include "common.h"
-
-#define FILENAME "/TEMP/ALFA1.TXT"
-
-int main(int argc,char *argv[])
-{
- int c;
- int h;
- // int res;
-
- cprintf("OPENING %s\n",FILENAME);
- h=open(FILENAME,O_RDONLY);
- if (h>=0) {
- char buffer[128];
- int len;
- cprintf("OPENED!\n");
-
- cprintf("READING...\n");
- len=read(h,buffer,sizeof(buffer));
- cprintf("READ %i bytes\n",len);
- memset(buffer,'\0',sizeof(buffer));
- cprintf("buffer='%s'\n",buffer);
-
- cprintf("READING...\n");
- len=read(h,buffer,sizeof(buffer));
- cprintf("READ %i bytes\n",len);
- memset(buffer,'\0',sizeof(buffer));
- cprintf("buffer='%s'\n",buffer);
-
- //close(h);
-
- } else
- cprintf("FAILED!\n");
-
- cprintf("Press [x] to exit\n");
-
- while ((c = keyb_getchar()) != 'x') ;
-
- //bdev_dump_status();
-
- return 0;
-}
Index: start/oldexamples/fs/tree1.c
===================================================================
--- start/oldexamples/fs/tree1.c (revision 1087)
+++ start/oldexamples/fs/tree1.c (nonexistent)
@@ -1,154 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <kernel/func.h>
-#include <kernel/model.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/mount.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <semaphore.h>
-#include <stdio.h>
-
-#include "common.h"
-
-#define FROMDIR "/TEMP"
-
-char pathname[8192];
-
-int noscroll=1;
-
-static int counter=0;
-
-void viewdir(int prof)
-{
- struct dirent *den;
- struct stat st;
- char *str;
- DIR *d;
- int res;
- int x;
- //int i;
- //static int flag=0;
-
- str=pathname+(x=strlen(pathname));
- d=opendir(pathname);
-
- if (d==NULL) {
- cprintf("ERR: can't open dir %s (errno: %i)\n",pathname,errno);
- return;
- }
-
- while ((den=readdir(d))!=NULL) {
-
- {
- //int c='p';
- //c = keyb_getchar();
- //if (c=='z') inode_stats();
- }
-
- if (x==1&&*pathname=='/')
- strcat(pathname,den->d_name);
- else
- strcat(strcat(pathname,"/"),den->d_name);
-
- /*
- if (!strcmp(den->d_name,"eport.ror")) {
- if (flag==0) debug_info_show(1);
- flag++;
- // inode_stats();
- }
- */
-
- if (counter==22100) noscroll=0;
-
- if (noscroll) {
- place(0,10);
- cprintf(" ");
- place(0,10);
- }
- cprintf("%05i %s\n",++counter,pathname);
- //dcache_stats();
-
- if (!strcmp(den->d_name,".")) goto SKIP;
- if (!strcmp(den->d_name,"..")) goto SKIP;
-
- //goto SKIP;
-
- /*
- if (!strcmp("MSINH.C",den->d_name)) {
- //if (!strcmp("WDIN32.OBJ",den->d_name)) {
- cprintf(">>>START SHOWING DEBUG INFO<<<\n");
- noscroll=0;
- //inode_stats();
- debug_info_show(1);
- }
- */
-
- res=stat(pathname,&st);
- if (res!=0) {
- cprintf("can't stat %s\n",pathname);
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- sys_end();
- l1_exit(0);
- } else {
- if (S_ISDIR(st.st_mode)) {
- viewdir(prof+1);
- }
-
- }
-
- SKIP:
- *str='\0';
- }
-
- closedir(d);
-}
-
-int main(int argc,char *argv[])
-{
- // int res;
-
- //if (noscroll) clear();
-
- //strcpy(pathname,"/");
- //viewdir(0);
-
- showmessage("Try to show all filenames from a directory recursively\n"
- "using one NRT task.\n");
-
- noscroll=0;
- strcpy(pathname,FROMDIR);
- viewdir(0);
-
- //dump_dentry_tree();
-
- /*
- *
- */
-
- /*
- res=umount(temp_device);
- //dump_dentry_tree();
- if (res!=0) {
- cprintf("can't unmount XXX on /TEMP\n");
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- //sys_end();
- return -1;
- }
- */
-
- //bdev_dump_status();
-
- sys_end();
- return 0;
-}
Index: start/oldexamples/fs/test1.c
===================================================================
--- start/oldexamples/fs/test1.c (revision 1087)
+++ start/oldexamples/fs/test1.c (nonexistent)
@@ -1,74 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <kernel/func.h>
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <drivers/keyb.h>
-
-#include <sys/mount.h>
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-
-#include "common.h"
-
-//#define FILENAME "/temp/ALFA1.TXT"
-
-#define FILENAME "/pippo.c"
-
-int leggi(int h)
-{
- char buffer[124];
- int len;
-
- memset(buffer,'\0',sizeof(buffer));
- cprintf("READING...\n");
- len=read(h,buffer,sizeof(buffer)-1);
- cprintf("READ %i bytes\n",len);
- cprintf("buffer='%s'\n",buffer);
-
- return len;
-}
-
-int main(int argc,char *argv[])
-{
- int h;
-
- showmessage("Try lseek() using a file for reading.");
-
- cprintf("OPENING %s\n",FILENAME);
- h=open(FILENAME,O_RDONLY);
-
- if (h>=0) {
- cprintf("OPENED!\n");
-
- leggi(h);
- leggi(h);
- leggi(h);
-
- cprintf("SEEK to 16\n");
- lseek(h,16,SEEK_SET);
-
- leggi(h);
-
- cprintf("SEEK to %i\n",123*3+1);
- lseek(h,123*3+1,SEEK_SET);
-
- leggi(h);
-
- } else
- cprintf("FAILED!\n");
-
- waitend();
-
- return 0;
-}
Index: start/oldexamples/fs/test2.c
===================================================================
--- start/oldexamples/fs/test2.c (revision 1087)
+++ start/oldexamples/fs/test2.c (nonexistent)
@@ -1,57 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <string.h>
-#include "common.c"
-
-int main(int argc,char *argv[])
-{
- int res;
- int c;
- int h;
-
- temp_device=bdev_scan_devices(choose_temp_callback);
- if (temp_device<0) {
- cprintf("can't find a filesystem to mount on /TEMP!!!\n");
- return -1;
- }
-
- /* mounting 2nd msdos partition on /TEMP */
- res=mount(temp_device,FS_MSDOS,"/TEMP",NULL);
- if (res!=0) {
- cprintf("can't mount XXX on /TEMP\n");
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- //sys_end();
- return -1;
- }
-
- /*
- *
- */
-
- cprintf("OPENING %s\n",FILENAME);
- h=open(FILENAME,O_RDONLY);
- if (h>=0) {
- char buffer[128];
- int len;
- cprintf("OPENED!\n");
- cprintf("READING...\n");
- len=read(h,buffer,sizeof(buffer));
- cprintf("READ %i bytes\n",len);
- memset(buffer,'\0',sizeof(buffer));
- cprintf("buffer='%s'\n",buffer);
- } else
- cprintf("FAILED!\n");
-
- cprintf("Press [x] to exit\n");
-
- while ((c = keyb_getchar()) != 'x');
-
- bdev_dump_status();
-
- sys_end();
- return 0;
-}
Index: start/oldexamples/fs/tree2.c
===================================================================
--- start/oldexamples/fs/tree2.c (revision 1087)
+++ start/oldexamples/fs/tree2.c (nonexistent)
@@ -1,275 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <kernel/func.h>
-#include <kernel/model.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/mount.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <semaphore.h>
-#include <stdio.h>
-
-#include "common.h"
-
-#define NOSHOW
-#undef NOSHOW
-
-#define sem_signal sem_post
-
-int noscroll=0;
-sem_t console;
-
-#define MPROC ((50<(MAX_PROC-10))?50:MAX_PROC-10)
-//#define MWCET 1000l
-//#define MPERIOD (MWCET*(MPROC+10))
-
-TASK viewdir(void *prof);
-sem_t actmutex,actsync;
-char *globpathname;
-PID globpid;
-int counter=0,actcounter=0;
-
-void activate_task(int prof, char *pathname)
-{
- char tname[32];
- NRT_TASK_MODEL m;
- PID pid;
-
-REPEAT:
- sem_wait(&actmutex);
-
- if (actcounter>=MPROC) {
- sem_signal(&actmutex);
- task_delay(10000);
- goto REPEAT;
- }
-
- globpathname=pathname;
- counter++;
- sprintf(tname,"tsk%i",counter);
-
- /*
- printd("Û");
- sem_wait(&console);
- printd("Ü");
- cprintf("%03i has called for ##%s##\n",prof,pathname);
- sem_signal(&console);
- */
-
- nrt_task_default_model(m);
- //soft_task_def_met(m,MWCET);
- //soft_task_def_wcet(m,MWCET);
- //soft_task_def_periodic(m);
- nrt_task_def_arg(m,(void*)counter);
- //soft_task_def_period(m,MPERIOD);
-
- globpid=pid=task_create(tname,viewdir,&m,NULL);
- if (pid==-1) {
- sem_wait(&console);
- cprintf("can't create '%s'\n",tname);
- perror("can't create task");
- sem_signal(&console);
- sys_end();
- return;
- }
- task_activate(pid);
- sem_wait(&actsync);
- actcounter++;
-
- /*
- printd("Û");
- sem_wait(&console);
- printd("Ü");
- if (noscroll) place(0,9);
- cprintf("task running: %5i/%5i --- task started: %5i\n",
- actcounter,MAX_PROC,counter);
- sem_signal(&console);
- */
-
- sem_signal(&actmutex);
-}
-
-/*
- *
- */
-
-int filecounter=0;
-
-TASK viewdir(void *pointer)
-{
- struct dirent *den;
- struct stat st;
- char *str;
- DIR *d;
- int res;
- int x;
- char pathname[1024];
- PID mypid;
- int prof=(int)pointer;
-
- strcpy(pathname,globpathname);
- mypid=globpid;
- sem_signal(&actsync);
-
- //sem_wait(&console);
- //cprintf("%03i on <%s>\n",prof,pathname);
- //sem_signal(&console);
-
- str=pathname+(x=strlen(pathname));
- d=opendir(pathname);
-
- if (d==NULL) {
- sem_wait(&console);
- cprintf("%03i ERR: can't open dir %s\n",prof,pathname);
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- sem_signal(&console);
-
- sys_end();
- l1_exit(0);
-
- goto END;
- }
-
- while ((den=readdir(d))!=NULL) {
-
- if (x==1&&*pathname=='/')
- strcat(pathname,den->d_name);
- else
- strcat(strcat(pathname,"/"),den->d_name);
-
- sem_wait(&console);
-#ifndef NOSHOW
- if (noscroll) {
- place(0,10);
- cprintf(" ");
- place(0,10);
- }
- //cprintf("%03i(0_%03i) %s\n",prof,(int)mypid,pathname);
- cprintf("t%03i %s\n",prof,pathname);
-#endif
- filecounter++;
- sem_signal(&console);
-
- //if (*den->d_name=='.') {
- // sem_wait(console,BLOCK);
- // cprintf("%03i HAS FOUND <%s>\n",prof,den->d_name);
- // sem_signal(console);
- //}
-
- if (!strcmp(den->d_name,".")) {
- //sem_wait(console,BLOCK);
- //cprintf("%03i skip for .\n",prof);
- //sem_signal(console);
- goto SKIP;
- }
- if (!strcmp(den->d_name,"..")) {
- //sem_wait(console,BLOCK);
- //cprintf("%03i skip for ..\n",prof);
- //sem_signal(console);
- goto SKIP;
- }
-
- res=stat(pathname,&st);
- if (res!=0) {
- sem_wait(&console);
- cprintf("t%03i can't stat %s\n",prof,pathname);
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- sem_signal(&console);
-
- sys_end();
- l1_exit(0);
-
- closedir(d);
- goto END;
- } else {
- if (S_ISDIR(st.st_mode)) {
- sem_wait(&console);
- //if (den->d_name[0]=='.')
- // cprintf("%03i called for <%s>\n",prof,den->d_name);
- sem_signal(&console);
- activate_task(prof,pathname);
- }
-
- }
-
- SKIP:
- *str='\0';
- }
-
- closedir(d);
-
-END:
- sem_wait(&actmutex);
- actcounter--;
- sem_signal(&actmutex);
-
- return 0;
-}
-
-int main(int argc,char *argv[])
-{
- extern void dump_sem_table(void);
- TIME stime,etime;
- // int res;
-
- /*
- temp_device=bdev_scan_devices(choose_temp_callback);
- if (temp_device<0) {
- cprintf("can't find a filesystem to mount on /TEMP!!!\n");
- return -1;
- }
- */
-
- /* mounting 2nd msdos partition on /TEMP */
- /*
- res=mount(temp_device,FS_MSDOS,"/TEMP",NULL);
- if (res!=0) {
- cprintf("can't mount XXX on /TEMP\n");
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- return -1;
- }
- */
-
- /* clear screen */
- //clear();
-
- showmessage("This test show all filenames of a directory of an hardisk\n"
- "recursively using a soft task for every directory.\n");
-
- stime=sys_gettime(NULL);
-
- sem_init(&console,0,1);
- sem_init(&actmutex,0,1);
- sem_init(&actsync,0,0);
-
- //dump_sem_table();
-
- //keyb_getchar();
-
- activate_task(-1,"/TEMP");
-
- for(;;) {
- sem_wait(&actmutex);
- if (actcounter==0) break;
- sem_signal(&actmutex);
- }
-
- etime=sys_gettime(NULL);
-
- cprintf("\nfiles: %i\n",filecounter);
- cprintf("time : %li\n",etime-stime);
-
- waitend();
-
- return 0;
-}
Index: start/oldexamples/fs/hello.c
===================================================================
--- start/oldexamples/fs/hello.c (revision 1087)
+++ start/oldexamples/fs/hello.c (nonexistent)
@@ -1,13 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <ll/i386/cons.h>
-
-int main(int argc,char *argv[])
-{
- cprintf("\nHello, world!\n\n");
- return 0;
-}
Index: start/oldexamples/fs/testu.c
===================================================================
--- start/oldexamples/fs/testu.c (revision 1087)
+++ start/oldexamples/fs/testu.c (nonexistent)
@@ -1,47 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <ll/i386/cons.h>
-#include <kernel/func.h>
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <drivers/keyb.h>
-
-#include <sys/mount.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-
-#include "common.h"
-
-#define FILENAME "/TEMP/TESTW1.TXT"
-
-//#define FILENAME "/TEMP/CIR2"
-
-extern dev_t temp_device;
-
-int main(int argc,char *argv[])
-{
- int res;
-
- showmessage("Try to unlink (ie. delete) a file.\n");
-
- cprintf("UNLINKING %s\n",FILENAME);
- res=unlink(FILENAME);
- if (res!=0) {
- cprintf("FAILED!\n");
- cprintf("errno: %i '%s'\n",errno,strerror(errno));
- } else cprintf("OK!\n");
-
- waitend();
-
- return 0;
-}
Index: start/oldexamples/mpeg/common.c
===================================================================
--- start/oldexamples/mpeg/common.c (revision 1087)
+++ start/oldexamples/mpeg/common.c (nonexistent)
@@ -1,74 +0,0 @@
-#include <drivers/keyb.h>
-
-void ctrlc_exit(KEY_EVT *k)
-{
- extern void dump_sem_table(void);
- extern void dump_nop_table(void);
- grx_close();
- cprintf("CTRL-C pressed!\n");
- grx_modeinfo();
- sys_end();
-}
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <sys/types.h>
-#include <sys/mount.h>
-
-int __register_sub_init_prologue(void)
-{
- return 0;
-}
-
-int __register_sub_init(void)
-{
- return 0;
-}
-
-dev_t root_device;
-
-int choose_root_callback(dev_t dev,u_int8_t fs)
-{
- if (fs==FS_MSDOS) return dev;
- return -1;
-}
-
-int __bdev_sub_init(void)
-{
- BDEV_PARMS bdev=BASE_BDEV;
-
- bdev_def_showinfo(bdev,TRUE);
- bdev_init(&bdev);
-
- root_device=bdev_scan_devices(choose_root_callback);
- if (root_device<0) {
- cprintf("can't find root device to mount on /!!!\n");
- sys_end();
- return -1;
- }
-
- return 0;
-}
-
-extern int libc_initialize(void);
-
-int __fs_sub_init(void)
-{
- FILESYSTEM_PARMS fs=BASE_FILESYSTEM;
- //struct mount_opts opts;
-
- //memset(&opts,0,sizeof(struct mount_opts));
- //opts.flags=MOUNT_FLAG_RW;
-
- filesystem_def_rootdevice(fs,root_device);
- filesystem_def_fs(fs,FS_MSDOS);
- filesystem_def_showinfo(fs,TRUE);
- filesystem_init(&fs);
-
- libc_initialize();
-
- return 0;
-}
-
Index: start/oldexamples/mpeg/mpg123.c
===================================================================
--- start/oldexamples/mpeg/mpg123.c (revision 1087)
+++ start/oldexamples/mpeg/mpg123.c (nonexistent)
@@ -1,219 +0,0 @@
-
-#include "mpg123/mpg123.h"
-#include <stdlib.h>
-
-/* stub */
-FILE *http_open (char *url)
-{
- return NULL;
-}
-
-
-
-static long rates[3][3] = {
- { 32000,44100,48000 } ,
- { 16000,22050,24000 } ,
- { 8000,11025,12000 }
-};
-
-int supported_rates = 0;
-
-int outmode = DECODE_AUDIO;
-
-char *listname = NULL;
-long outscale = 32768;
-int checkrange = FALSE;
-int tryresync = TRUE;
-int quiet = FALSE;
-int verbose = 0;
-int doublespeed= 0;
-int halfspeed = 0;
-int shuffle = 0;
-int change_always = 1;
-int force_8bit = 0;
-int force_frequency = -1;
-long numframes = -1;
-long startFrame= 0;
-int usebuffer = 0;
-int frontend_type = 0;
-int remote = 0;
-int buffer_fd[2];
-int buffer_pid;
-
-
-static int intflag = FALSE;
-static int remflag = FALSE;
-
-
-static char remote_buffer[1024];
-static struct frame fr;
-static struct audio_info_struct ai;
-txfermem *buffermem;
-#define FRAMEBUFUNIT (18 * 64 * 4)
-
-void init_output(void)
-{
- static int init_done = FALSE;
-
- if (init_done)
- return;
- init_done = TRUE;
-
- if (!(pcm_sample = (unsigned char *) malloc(audiobufsize * 2))) {
- perror ("malloc()");
- l1_exit (1);
-
- }
-
- if(outmode==DECODE_AUDIO) {
- //if(audio_open(&ai) < 0) {
- // perror("audio");
- // exit(1);
- // }
- /* audio_set_rate (&ai); should already be done in audio_open() [OF] */
- }
-}
-
-static void reset_audio_samplerate(void)
-{
-
- //if (outmode == DECODE_AUDIO) {
- /* audio_reset_parameters(&ai); */
- /* close and re-open in order to flush
- * the device's internal buffer before
- * changing the sample rate. [OF]
- */
- //audio_close (&ai);
- //if (audio_open(&ai) < 0) {
- // perror("audio");
- // exit(1);
- // }
- // }
-}
-
-void play_frame(int init,struct frame *fr)
-{
- int clip;
-
- if((fr->header_change && change_always) || init) {
- int reset_audio = 0;
-
- if(remote)
- print_rheader(fr);
-
- if (!quiet && init) {
- if (verbose)
- print_header(fr);
- else
- print_header_compact(fr);
- }
-
- if(force_frequency < 0) {
- if(ai.rate != freqs[fr->sampling_frequency]>>(fr->down_sample)) {
- ai.rate = freqs[fr->sampling_frequency]>>(fr->down_sample);
- reset_audio = 1;
- }
- }
- else if(ai.rate != force_frequency) {
- ai.rate = force_frequency;
- reset_audio = 1;
- }
-
- init_output();
-
- if(reset_audio) {
- reset_audio_samplerate();
- if (intflag)
- return;
- }
- }
-
- if (fr->error_protection) {
- getbits(16); /* crc */
- }
-
- clip = (fr->do_layer)(fr,outmode,&ai);
-
- /*
- if(clip > 0 && checkrange)
- fprintf(stderr,"%d samples clipped\n", clip);
- */
-}
-
-void audio_info_struct_init(struct audio_info_struct *ai)
-{
- ai->rate = -1;
- ai->gain = -1;
- ai->output = -1;
- ai->device = NULL;
- ai->channels = -1;
- ai->format = -1;
-}
-
-int audio_play_samples(struct audio_info_struct *ai, unsigned char *buf, int n)
-{
- return 0;
-}
-
-
-int main(int argc,char *argv[])
-{
- static char *fname="/MOSSE.MP3";
- int result;
- unsigned long frameNum = 0;
- //struct timeval start_time, now;
- unsigned long secdiff;
- int init;
-
-
- quiet=0;
- verbose=1;
-
- // DECODE_STDOUT stampa to 1
- // DECODE_AUDIO chiama la audio_play_samples
- // DECODE_BUFFER scrive su buffer_fd[1]
- outmode = DECODE_AUDIO;
-
- audio_info_struct_init(&ai);
-
- fr.single = -1; /* both channels */
- fr.synth = synth_1to1;
- fr.down_sample = 0;
-
- make_decode_tables(outscale);
- init_layer2();
- init_layer3(fr.down_sample);
-
- open_stream(fname,-1);
-
- //gettimeofday (&start_time, NULL);
- read_frame_init();
-
- init = 1;
- for(frameNum=0;read_frame(&fr) && numframes && !intflag;frameNum++) {
- if(frameNum < startFrame || (doublespeed && (frameNum % doublespeed))) {
- if(fr.lay == 3)
- set_pointer(512);
- continue;
- }
- numframes--;
- play_frame(init,&fr);
- init = 0;
- if (!(frameNum & 0xf))
- fprintf(stderr, "\r{%4lu} ",frameNum);
- }
-
- close_stream();
-
- {
- /* This formula seems to work at least for
- * MPEG 1.0/2.0 layer 3 streams.
- */
- int sfd = freqs[fr.sampling_frequency] * (fr.lsf + 1);
- int secs = (frameNum * (fr.lay==1 ? 384 : 1152) + sfd / 2) / sfd;
- fprintf(stderr,"[%d:%02d] Decoding of %s finished.\n", secs / 60,
- secs % 60, fname);
- }
-
-}
-
Index: start/oldexamples/mpeg/makefile
===================================================================
--- start/oldexamples/mpeg/makefile (revision 1087)
+++ start/oldexamples/mpeg/makefile (nonexistent)
@@ -1,42 +0,0 @@
-#
-#
-#
-# TO REMAKE BETTER
-#
-#
-
-ifndef BASE
-BASE=../../..
-endif
-include $(BASE)/config/config.mk
-include $(BASE)/config/libdep.mk
-
-.PHONY: test all install depend clean cleanall
-
-C_INC+= -I$(BASE)/ports
-LINK_LIB+= -lmpeg -lmp3
-LINK_DEP+= $(LIB_PATH)/libmpeg.a $(LIB_PATH)/libmp3.a
-
-test:: mplay mplay2 mpg123
-
-clean::
- rm -f *.o
- rm -f mplay
- rm -f mplay2
- rm -f mpg123
-
-mplay:mplay.o $(LIB_PATH)/initfs.o $(LIB_DEP)
- $(LD) $(LINK_OPT) $(LINK_STARTUP) mplay.o $(LIB_PATH)/initfs.o \
- --start-group $(LINK_LIB) --end-group \
- -o mplay
-
-mplay2:mplay2.o $(LIB_PATH)/initfs.o $(LIB_DEP)
- $(LD) $(LINK_OPT) $(LINK_STARTUP) mplay2.o $(LIB_PATH)/initfs.o \
- --start-group $(LINK_LIB) --end-group \
- -o mplay2
-
-mpg123:mpg123.o common.o $(LIB_PATH)/initfs.o $(LIB_DEP)
- $(LD) $(LINK_OPT) $(LINK_STARTUP) \
- mpg123.o common.o $(LIB_PATH)/initfs.o \
- --start-group $(LINK_LIB) --end-group \
- -o mpg123
Index: start/oldexamples/mpeg/mplay.c
===================================================================
--- start/oldexamples/mpeg/mplay.c (revision 1087)
+++ start/oldexamples/mpeg/mplay.c (nonexistent)
@@ -1,516 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Luca Abeni <luca@hartik.sssup.it>
- * Massimiliano Giorgi <massy@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/*
- * Copyright (C) 1999 Luca Abeni and Massimiliano Giorgi
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * CVS : $Id: mplay.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
- *
- * File: $File$
- * Revision: $Revision: 1.1.1.1 $
- * Last update: $Date: 2002-09-02 09:37:48 $
- */
-
-#include <ll/sys/types.h>
-
-#include <kernel/func.h>
-#include <kernel/const.h>
-
-//#include <hartik.h>
-#include <drivers/keyb.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-
-//#include <xdos.h>
-#include <drivers/glib.h>
-
-#include "mpeg/video.h"
-/*#include "proto.h"*/
-#include "mpeg/util.h"
-#include "mpeg/dither.h"
-#include "mpeg/mpeg.h"
-
-
-
-
-
-
-#include <drivers/keyb.h>
-
-void ctrlc_exit(KEY_EVT *k)
-{
- extern void dump_sem_table(void);
- extern void dump_nop_table(void);
- grx_close();
- cprintf("CTRL-C pressed!\n");
- grx_modeinfo();
- sys_end();
-}
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <sys/types.h>
-#include <sys/mount.h>
-
-int __register_sub_init_prologue(void)
-{
- return 0;
-}
-
-int __register_sub_init(void)
-{
- return 0;
-}
-
-dev_t root_device;
-
-int choose_root_callback(dev_t dev,u_int8_t fs)
-{
- if (fs==FS_MSDOS) return dev;
- return -1;
-}
-
-int __bdev_sub_init(void)
-{
- BDEV_PARMS bdev=BASE_BDEV;
-
- bdev_def_showinfo(bdev,TRUE);
- bdev_init(&bdev);
-
- root_device=bdev_scan_devices(choose_root_callback);
- if (root_device<0) {
- cprintf("can't find root device to mount on /!!!\n");
- sys_end();
- return -1;
- }
-
- return 0;
-}
-
-extern int libc_initialize(void);
-
-int __fs_sub_init(void)
-{
- FILESYSTEM_PARMS fs=BASE_FILESYSTEM;
- //struct mount_opts opts;
-
- //memset(&opts,0,sizeof(struct mount_opts));
- //opts.flags=MOUNT_FLAG_RW;
-
- filesystem_def_rootdevice(fs,root_device);
- filesystem_def_fs(fs,FS_MSDOS);
- filesystem_def_showinfo(fs,TRUE);
- filesystem_init(&fs);
-
- libc_initialize();
-
- return 0;
-}
-
-
-
-
-
-int x_fseek(FILE *file, long where, int from)
-{
- return fseek(file,where,from);
-}
-
-size_t x_fread(void *buffer, size_t size, size_t n, FILE *file)
-{
- return fread(buffer,size,n,file);
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-TIME ttt;
-
-DWORD n;
-
-///* #define GPHBDIM 4097152 */
-//#define GPHBDIM 1000000
-
-//BYTE gphb[GPHBDIM]; /* Std Dim: 2M */
-//BYTE *nextphbyte = gphb;
-
-struct streamdescr {
- FILE *f;
- ImageDesc *i;
- int x1, y1;
-} sd[10];
-
-#define SCREENX 800
-#define SCREENY 600
-
-void txtreset(void *dummy)
-{
- grx_close();
- grx_modeinfo();
- /* cprintf("Total frames: %ld\n", i);
- cprintf("Total time: %lu\n", t);*/
- //cprintf("Frame rate: %lu\n", (n * 1000) / ttt);
- /* cprintf("Max frame time: %lu\n", mft);*/
- /*
- sys_status(READY_RT_STATUS | READY_NRT_STATUS | BLOCKED_STATUS |
- IDLE_STATUS | SLEEP_STATUS | EXEC_STATUS);
- */
-}
-
-#define MAINSLEEP 20000
-
-void drawload(TIME l)
-{
- #define LLPWINSIZE 20
- int actl;
-// struct load l;
- #define LOADX 500
- #define LOADY 300
- #define LOADYDIM 50
- #define LOADXDIM 100
- static int th = 0;
- static int x = 0;
- static int hy[LLPWINSIZE];
- static int somma = 0;
- int i;
-
-/* for (i = 0; i < LLPWINSIZE; i++) hy[i] = 0; */
-
-// load_actual(&l);
-// actl = (LOADYDIM * l.actual) / l.rif + 1;
-// {
-// char str[80];
-// sprintf(str,"%d",actl);
-// /*grx_text("Ciao", 200, 200, color16(31, 63, 31), 0);*/
-// grx_text(" ", 100, 400, 100, 0);
-// grx_text(str, 100, 400, 100,0);
-// }
-/* LowPass Filter */
-
-
- actl=((long)l*LOADYDIM)/MAINSLEEP+1;
-
- somma += actl - hy[th];
- hy[th] = actl;
- th = (th + 1) % LLPWINSIZE;
- actl = somma / LLPWINSIZE;
- grx_line(LOADX+x,LOADY,LOADX+x,(LOADY+LOADYDIM),0);
- if (actl > LOADYDIM) actl = LOADYDIM;
- grx_line(LOADX+x,(LOADY + actl),LOADX+x,(LOADY+LOADYDIM),255);
-
- x = (x + 1) % LOADXDIM;
-
-}
-
-
-
-TASK play(void *arg)
-{
- int i=(int)arg;
- int loop = TRUE;
- BYTE *pixels;
- int moreframes = TRUE;
- FILE *mpeg = sd[i].f;
- ImageDesc *img = sd[i].i;
- int x1, y1, x2, y2;
-
- /*printf ("Task %d: Movie is %d x %d pixels\n", i, img->Width, img->Height);
- printf ("Required picture rate = %d, required bit rate = %d\n",
- img->PictureRate, img->BitRate);*/
-
- pixels = (BYTE *) malloc(img->Size * sizeof(BYTE));
- x1 = sd[i].x1;
- y1 = sd[i].y1;
- x2 = x1 + img->Width-1;
- y2 = y1 + img->Height-1;
- while (loop) { /* play the whole movie forever */
- loop = 1;
- n = 0;
- ttt = sys_gettime(NULL);
- while (moreframes) {
- //cprintf("°");
- moreframes = GetMPEGFrame (img, pixels);
- grx_putimage(x1, y1, x2, y2, pixels);
- n++;
- task_endcycle();
- }
- ttt = sys_gettime(NULL) - ttt;
- RewindMPEG (mpeg, img);
- SetMPEGOption (img, MPEG_DITHER, GRAY_DITHER);
- moreframes = TRUE;
- }
-
- return 0;
-}
-
-
-
-int main(int argc, char *argv[])
-{
- // SYS_PARMS sp = BASE_SYS;
- KEY_EVT k;
- // MODEL m = BASE_MODEL;
- PID pid;
-
- // DOS_FILE *Infile;
-// BYTE *mpegbuff[10], *p;
-// WORD res;
-// DWORD cnt[10];
-
-
-TIME sum;
-
- SOFT_TASK_MODEL model;
-
- FILE *mpeg;
- ImageDesc img[10];
- int full_color = FALSE;
-
- int mode;
- int esc;
- int i;
- int actx = 10, acty = 10;
- ColormapEntry *cp;
-
- //cprintf("file '%s'\n",argv[1]);
-
- if (argc < 2) {
- fprintf (stderr, "Usage: %s mpegfile\n", argv[0]);
- sys_abort(301);
- }
-
- /*
- for (i = 0; i < argc - 1; i++) {
- Infile = DOS_fopen(argv[i + 1], "r");
- if (!Infile) {
- cprintf("%s not found!!!\n", argv[i + 1]);
- sys_abort(300);
- }
- cprintf("\n %s Opened!!!\n\n", argv[i + 1]);
-
- mpegbuff[i] = nextphbyte;
- p = mpegbuff[i]; cnt[i] = 0;
- res = 0x1000;
- while (res > 0) {
- res = DOS_fread(p, 0x1000, 1, Infile);
- cnt[i] += res;
- p += res;
- }
- p += res;
- nextphbyte = p;
- }
- */
-
- /* OK, Now we can start the system!!! */
- //sys_init(&sp);
- //keyb_init(SOFT, 100);
- // keyb_init(NULL);
- // k.flag = CNTR_BIT;
- // k.scan = KEY_C;
- // k.ascii = 'c';
- //keyb_excset(k,endfun);
-
- //vfs_init();
- /*
- for (i = 0; i < argc - 1; i++) {
- vfs_assign(argv[i + 1], mpegbuff[i], cnt[i]);
- }
- */
-
-
-
-
-
-
- /* Init the graph... */
- if (grx_init() == -1) {
- cprintf("No init!!!\n");
- sys_abort(255);
- }
-
- mode = grx_getmode(SCREENX, SCREENY, 8);
- cprintf("Mode num: %x\n", mode);
- grx_cardinfo();
- cprintf("[hit enter to continue]\n");
- esc = FALSE;
- while (!esc) {
- keyb_getcode(&k,BLOCK);
- if (k.ascii == 13) esc = TRUE;
- }
-
-
- if (mode == -1) {
- cprintf("Mode not present!!!\n");
- sys_abort(255);
- }
-
- if (grx_setmode(mode) == -1) {
- cprintf("No SetMode!!!\n");
- sys_abort(255);
- }
-
- //sys_atexit(txtreset,NULL,AFTER_EXIT);
-
-
- //cprintf("Û0Û");
-
- for (i = 0; i < argc - 1; i++) {
- mpeg = fopen(argv[i + 1], "r");
-
- if (!mpeg) {
- perror (argv[1]);
- sys_abort(301);
- }
-
-
- setvbuf(mpeg,NULL,_IOFBF,BUFSIZ*100);
-
-
- //cprintf("Û0.5Û");
-
- /* !!! */
- img[i].vid_stream=NULL;
- img[i].Colormap=NULL;
-
- if (!OpenMPEG(mpeg, &(img[i]))) {
- fprintf (stderr, "OpenMPEG on %s failed\n", argv[i + 1]);
- sys_abort(301);
- }
-
-
- //cprintf("Û1Û");
-
-
-
- SetMPEGOption (&(img[i]), MPEG_DITHER, GRAY_DITHER);
- //SetMPEGOption (&(img[i]), MPEG_DITHER, FS4_DITHER);
-
-
- /* SetMPEGOption(MPEG_DITHER, GRAY_DITHER); */
-
- /* printf ("Movie is %d x %d pixels\n", img[i].Width, img[i].Height);
- printf ("Required picture rate = %d, required bit rate = %d\n",
- img[i].PictureRate, img[i].BitRate); */
-
- //cprintf("Û2Û");
-
- if (i == 0) {
- cp = img[i].Colormap;
-
- if (!full_color) {
- int ii;
-
- for (ii = 0; ii < img[i].ColormapSize; ii++) {
-
-
- grx_setcolor (ii, img[i].Colormap[ii].red / 4,
- img[i].Colormap[ii].green / 4,
- img[i].Colormap[ii].blue / 4);
-
-
- }
-
- /*NO!!! Colormap is an array of short, setpalette wants an array of BYTE!!!*/
- /* grx_setpalette(0, 255, img.Colormap);*/
- }
- }
- if (actx + img[i].Width > SCREENX) {
- actx = 10;
- acty += 200;
- }
- sd[i].x1 = actx;
- sd[i].y1 = acty;
- sd[i].f = mpeg;
- sd[i].i = &(img[i]);
-
- //cprintf("Û3Û");
-
- soft_task_default_model(model);
- ////soft_task_def_system(model);
- //soft_task_def_met(model,9000);
- //soft_task_def_wcet(model,9000);
- //soft_task_def_period(model,50000);
-
- soft_task_def_met(model,5000);
- soft_task_def_wcet(model,15000);
- soft_task_def_period(model,40000);
- soft_task_def_periodic(model);
- soft_task_def_arg(model,(void*)i);
- soft_task_def_ctrl_jet(model);
-
- //task_def_arg(m, i);
- //task_def_wcet(m, 9000);
- pid = task_create("video", play, &model, NULL);
- if (pid == -1) {
- cprintf(" task --> Not Guaranteed!!!\n");
- sys_abort(20000);
- }
- task_activate(pid);
-
- //cprintf("Û4Û");
-
- actx += img[i].Width + 10;
- }
-
- /* play(0);*/
- esc = FALSE;
- //jet_delstat(pid);
- while (!esc) {
- if (keyb_getcode(&k,NON_BLOCK) && (k.ascii == 13)) esc = TRUE;
- task_delay(MAINSLEEP);
- //jet_getstat(pid,&sum,NULL,NULL,NULL);
- //jet_delstat(pid);
- //drawload(sum);
- }
-
- sys_abort(59000);
-
- return 0;
-}
Index: start/oldexamples/mpeg/mplay2.c
===================================================================
--- start/oldexamples/mpeg/mplay2.c (revision 1087)
+++ start/oldexamples/mpeg/mplay2.c (nonexistent)
@@ -1,591 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Luca Abeni <luca@hartik.sssup.it>
- * Massimiliano Giorgi <massy@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/*
- * Copyright (C) 1999 Luca Abeni and Massimiliano Giorgi
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/*
- * CVS : $Id: mplay2.c,v 1.1.1.1 2002-09-02 09:37:48 pj Exp $
- *
- * File: $File$
- * Revision: $Revision: 1.1.1.1 $
- * Last update: $Date: 2002-09-02 09:37:48 $
- */
-
-#include <ll/sys/types.h>
-
-#include <kernel/func.h>
-#include <kernel/const.h>
-
-//#include <hartik.h>
-#include <drivers/keyb.h>
-
-
-
-#include <trace/trace.h>
-#include <trace/queues.h>
-
-
-
-#include <stdlib.h>
-#include <stdio.h>
-
-//#include <xdos.h>
-#include <drivers/glib.h>
-
-#include "mpeg/video.h"
-/*#include "proto.h"*/
-#include "mpeg/util.h"
-#include "mpeg/dither.h"
-#include "mpeg/mpeg.h"
-
-
-
-
-
-
-
-
-//#define NOSHOW 1
-
-
-
-
-#include <drivers/keyb.h>
-
-
-int mustdied=0;
-
-
-void ctrlc_exit(KEY_EVT *k)
-{
- extern void dump_sem_table(void);
- extern void dump_nop_table(void);
- mustdied=1;
-#ifndef NOSHOW
- grx_close();
-#endif
- cprintf("CTRL-C pressed!\n");
- //sys_status(SCHED_STATUS);
-#ifndef NOSHOW
- grx_modeinfo();
-#endif
- sys_end();
-}
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <sys/types.h>
-#include <sys/mount.h>
-
-int __register_sub_init_prologue(void)
-{
- int id;
- TRC_init_phase1(NULL);
- trc_register_fixed_queue();
- id=trc_create_queue(TRC_FIXED_QUEUE,NULL);
- trc_trace_class(TRC_CLASS_USER);
- trc_assign_class_to_queue(TRC_CLASS_USER,id);
- return 0;
-}
-
-int __register_sub_init(void)
-{
- return 0;
-}
-
-dev_t root_device;
-dev_t temp_device;
-
-int choose_root_callback(dev_t dev,u_int8_t fs)
-{
- if (fs==FS_MSDOS) return dev;
- return -1;
-}
-
-int choose_temp_callback(__dev_t dev,__uint8_t fs)
-{
- static int flag=0;
- if (fs==FS_MSDOS) {
- if (flag) return dev;
- flag=1;
- }
- return -1;
-}
-
-int __bdev_sub_init(void)
-{
- BDEV_PARMS bdev=BASE_BDEV;
-
- bdev_def_showinfo(bdev,FALSE);
- bdev_init(&bdev);
-
- root_device=bdev_scan_devices(choose_root_callback);
- if (root_device<0) {
- cprintf("can't find root device to mount on /!!!\n");
- sys_end();
- return -1;
- }
-
- temp_device=bdev_scan_devices(choose_temp_callback);
- if (temp_device<0) {
- cprintf("can't find a filesystem to mount on /TEMP!!!\n");
- }
-
- return 0;
-}
-
-extern int libc_initialize(void);
-
-int __fs_sub_init(void)
-{
- FILESYSTEM_PARMS fs=BASE_FILESYSTEM;
- struct mount_opts opts;
- int res;
-
- filesystem_def_rootdevice(fs,root_device);
- filesystem_def_fs(fs,FS_MSDOS);
- filesystem_def_showinfo(fs,FALSE);
- filesystem_init(&fs);
-
- if (temp_device>=0) {
- memset(&opts,0,sizeof(struct mount_opts));
- opts.flags=MOUNT_FLAG_RW;
- res=mount(temp_device,FS_MSDOS,"/TEMP",&opts);
- if (res!=0) {
- cprintf("can't mount XXX on /TEMP (errno: %i)\n",errno);
- } else
- cprintf("mounted /TEMP rw\n");
-
- }
-
- libc_initialize();
-
- TRC_init_phase2();
-
- return 0;
-}
-
-int x_fseek(FILE *file, long where, int from)
-{
- return fseek(file,where,from);
-}
-
-size_t x_fread(void *buffer, size_t size, size_t n, FILE *file)
-{
- return fread(buffer,size,n,file);
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-TIME ttt;
-
-DWORD n[10];
-
-///* #define GPHBDIM 4097152 */
-//#define GPHBDIM 1000000
-
-//BYTE gphb[GPHBDIM]; /* Std Dim: 2M */
-//BYTE *nextphbyte = gphb;
-
-struct streamdescr {
- FILE *f;
- ImageDesc *i;
- int x1, y1;
-} sd[10];
-
-#define SCREENX 800
-#define SCREENY 600
-
-void txtreset(void *dummy)
-{
-#ifndef NOSHOW
- grx_close();
- grx_modeinfo();
- /* cprintf("Total frames: %ld\n", i);
- cprintf("Total time: %lu\n", t);*/
- //cprintf("Frame rate: %lu\n", (n * 1000) / ttt);
- /* cprintf("Max frame time: %lu\n", mft);*/
- /*
- sys_status(READY_RT_STATUS | READY_NRT_STATUS | BLOCKED_STATUS |
- IDLE_STATUS | SLEEP_STATUS | EXEC_STATUS);
- */
-#endif
-}
-
-#define MAINSLEEP 20000
-
-void drawload(TIME l)
-{
- #define LLPWINSIZE 20
- int actl;
-// struct load l;
- #define LOADX 500
- #define LOADY 300
- #define LOADYDIM 50
- #define LOADXDIM 100
- static int th = 0;
- static int x = 0;
- static int hy[LLPWINSIZE];
- static int somma = 0;
- int i;
-
-/* for (i = 0; i < LLPWINSIZE; i++) hy[i] = 0; */
-
-// load_actual(&l);
-// actl = (LOADYDIM * l.actual) / l.rif + 1;
-// {
-// char str[80];
-// sprintf(str,"%d",actl);
-// /*grx_text("Ciao", 200, 200, color16(31, 63, 31), 0);*/
-// grx_text(" ", 100, 400, 100, 0);
-// grx_text(str, 100, 400, 100,0);
-// }
-/* LowPass Filter */
-
-
- actl=((long)l*LOADYDIM)/MAINSLEEP+1;
-
- somma += actl - hy[th];
- hy[th] = actl;
- th = (th + 1) % LLPWINSIZE;
- actl = somma / LLPWINSIZE;
-#ifndef NOSHOW
- grx_line(LOADX+x,LOADY,LOADX+x,(LOADY+LOADYDIM),0);
- if (actl > LOADYDIM) actl = LOADYDIM;
- grx_line(LOADX+x,(LOADY + actl),LOADX+x,(LOADY+LOADYDIM),255);
-#endif
- x = (x + 1) % LOADXDIM;
-
-}
-
-
-
-TASK play(void *arg)
-{
- int i=(int)arg;
- int loop = TRUE;
- BYTE *pixels;
- int moreframes = TRUE;
- FILE *mpeg = sd[i].f;
- ImageDesc *img = sd[i].i;
- int x1, y1, x2, y2;
-
- /*printf ("Task %d: Movie is %d x %d pixels\n", i, img->Width, img->Height);
- printf ("Required picture rate = %d, required bit rate = %d\n",
- img->PictureRate, img->BitRate);*/
-
- pixels = (BYTE *) malloc(img->Size * sizeof(BYTE));
- x1 = sd[i].x1;
- y1 = sd[i].y1;
- x2 = x1 + img->Width-1;
- y2 = y1 + img->Height-1;
- while (loop) { /* play the whole movie forever */
- loop = 0;
- n[i] = 0;
- ttt = sys_gettime(NULL);
- while (moreframes && n[i]<250) {
-
- if (mustdied) break;
-
-#ifdef NOSHOW
- cprintf("%c",'°'+i);
-#endif
-
- moreframes = GetMPEGFrame (img, pixels);
-#ifndef NOSHOW
- grx_putimage(x1, y1, x2, y2, pixels);
-#endif
- n[i]++;
- task_endcycle();
- }
- ttt = sys_gettime(NULL) - ttt;
- if (!loop) break;
- RewindMPEG (mpeg, img);
- SetMPEGOption (img, MPEG_DITHER, GRAY_DITHER);
- moreframes = TRUE;
- }
-
- return 0;
-}
-
-
-
-int main(int argc, char *argv[])
-{
- // SYS_PARMS sp = BASE_SYS;
- KEY_EVT k;
- // MODEL m = BASE_MODEL;
- PID pid;
-
- // DOS_FILE *Infile;
-// BYTE *mpegbuff[10], *p;
-// WORD res;
-// DWORD cnt[10];
-
-
-TIME sum;
-
- SOFT_TASK_MODEL model;
-
- FILE *mpeg;
- ImageDesc img[10];
- int full_color = FALSE;
-
- int mode;
- int esc;
- int i;
- int actx = 10, acty = 10;
- ColormapEntry *cp;
-
- //cprintf("file '%s'\n",argv[1]);
-
- if (argc < 2) {
- fprintf (stderr, "Usage: %s mpegfile\n", argv[0]);
- sys_abort(301);
- }
-
- /*
- for (i = 0; i < argc - 1; i++) {
- Infile = DOS_fopen(argv[i + 1], "r");
- if (!Infile) {
- cprintf("%s not found!!!\n", argv[i + 1]);
- sys_abort(300);
- }
- cprintf("\n %s Opened!!!\n\n", argv[i + 1]);
-
- mpegbuff[i] = nextphbyte;
- p = mpegbuff[i]; cnt[i] = 0;
- res = 0x1000;
- while (res > 0) {
- res = DOS_fread(p, 0x1000, 1, Infile);
- cnt[i] += res;
- p += res;
- }
- p += res;
- nextphbyte = p;
- }
- */
-
- /* OK, Now we can start the system!!! */
- //sys_init(&sp);
- //keyb_init(SOFT, 100);
- // keyb_init(NULL);
- // k.flag = CNTR_BIT;
- // k.scan = KEY_C;
- // k.ascii = 'c';
- //keyb_excset(k,endfun);
-
- //vfs_init();
- /*
- for (i = 0; i < argc - 1; i++) {
- vfs_assign(argv[i + 1], mpegbuff[i], cnt[i]);
- }
- */
-
-
-
-
-
-
- /* Init the graph... */
-#ifndef NOSHOW
-
- if (grx_init() == -1) {
- cprintf("No init!!!\n");
- sys_abort(255);
- }
-
- mode = grx_getmode(SCREENX, SCREENY, 8);
- cprintf("Mode num: %x\n", mode);
- grx_cardinfo();
-#endif
-
- cprintf("[hit enter to continue]\n");
- esc = FALSE;
- while (!esc) {
- keyb_getcode(&k,BLOCK);
- if (k.ascii == 13) esc = TRUE;
- }
-
-
- if (mode == -1) {
- cprintf("Mode not present!!!\n");
- sys_abort(255);
- }
-
-#ifndef NOSHOW
- if (grx_setmode(mode) == -1) {
- cprintf("No SetMode!!!\n");
- sys_abort(255);
- }
-#endif
-
- //sys_atexit(txtreset,NULL,AFTER_EXIT);
-
-
- //cprintf("Û0Û");
-
- for (i = 0; i < argc - 1; i++) {
- mpeg = fopen(argv[i + 1], "r");
-
- if (!mpeg) {
- perror (argv[1]);
- sys_abort(301);
- }
-
- //cprintf("Û0.5Û");
-
- /* !!! */
- img[i].vid_stream=NULL;
- img[i].Colormap=NULL;
-
- if (!OpenMPEG(mpeg, &(img[i]))) {
- fprintf (stderr, "OpenMPEG on %s failed\n", argv[i + 1]);
- sys_abort(301);
- }
-
-
- //cprintf("Û1Û");
-
-
-
- SetMPEGOption (&(img[i]), MPEG_DITHER, GRAY_DITHER);
- //SetMPEGOption (&(img[i]), MPEG_DITHER, FS4_DITHER);
-
-
- /* SetMPEGOption(MPEG_DITHER, GRAY_DITHER); */
-
- /* printf ("Movie is %d x %d pixels\n", img[i].Width, img[i].Height);
- printf ("Required picture rate = %d, required bit rate = %d\n",
- img[i].PictureRate, img[i].BitRate); */
-
- //cprintf("Û2Û");
-
- if (i == 0) {
- cp = img[i].Colormap;
-
- if (!full_color) {
- int ii;
-
- for (ii = 0; ii < img[i].ColormapSize; ii++) {
-
-#ifndef NOSHOW
-
- grx_setcolor (ii, img[i].Colormap[ii].red / 4,
- img[i].Colormap[ii].green / 4,
- img[i].Colormap[ii].blue / 4);
-
-#endif
-
- }
-
- /*NO!!! Colormap is an array of short, setpalette wants an array of BYTE!!!*/
- /* grx_setpalette(0, 255, img.Colormap);*/
- }
- }
- if (actx + img[i].Width > SCREENX) {
- actx = 10;
- acty += 200;
- }
- sd[i].x1 = actx;
- sd[i].y1 = acty;
- sd[i].f = mpeg;
- sd[i].i = &(img[i]);
-
- //cprintf("Û3Û");
-
- soft_task_default_model(model);
- ////soft_task_def_system(model);
- //soft_task_def_met(model,9000);
- //soft_task_def_wcet(model,9000);
- //soft_task_def_period(model,50000);
-
- soft_task_def_met(model,5000);
- soft_task_def_wcet(model,5000);
- soft_task_def_period(model,40000);
- soft_task_def_periodic(model);
- soft_task_def_arg(model,(void*)i);
- soft_task_def_ctrl_jet(model);
-
- //task_def_arg(m, i);
- //task_def_wcet(m, 9000);
- pid = task_create("Shower", play, &model, NULL);
- if (pid == -1) {
- cprintf(" task --> Not Guaranteed!!!\n");
- sys_abort(20000);
- }
- task_activate(pid);
-
- //cprintf("Û4Û");
-
- actx += img[i].Width + 10;
- }
-
- /* play(0);*/
- esc = FALSE;
- //jet_delstat(pid);
- while (!esc) {
- if (keyb_getcode(&k,NON_BLOCK) && (k.ascii == 13)) esc = TRUE;
- task_delay(MAINSLEEP);
- //jet_getstat(pid,&sum,NULL,NULL,NULL);
- //jet_delstat(pid);
- //drawload(sum);
- }
-
- sys_abort(59000);
-
- return 0;
-}
Index: start/oldexamples/block/idetest0.c
===================================================================
--- start/oldexamples/block/idetest0.c (revision 1087)
+++ start/oldexamples/block/idetest0.c (nonexistent)
@@ -1,15 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <fs/bdev.h>
-
-#include "common.h"
-
-int main(int argc,char *argv[])
-{
- showmessage("Have ide devices been found?\n");
- return 0;
-}
Index: start/oldexamples/block/idetest1.c
===================================================================
--- start/oldexamples/block/idetest1.c (revision 1087)
+++ start/oldexamples/block/idetest1.c (nonexistent)
@@ -1,20 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <fs/bdev.h>
-
-#include "common.h"
-
-int main(int argc,char *argv[])
-{
-
- showmessage("This test try to identify the partions of all hard disks\n");
-
- bdev_dump_names();
-
- waitend();
- return 0;
-}
Index: start/oldexamples/block/idetest2.c
===================================================================
--- start/oldexamples/block/idetest2.c (revision 1087)
+++ start/oldexamples/block/idetest2.c (nonexistent)
@@ -1,77 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <ll/i386/cons.h>
-#include <drivers/keyb.h>
-
-#include <fs/bdevinit.h>
-#include <fs/bdev.h>
-
-#include <string.h>
-
-#include "common.h"
-
-#define DISKDEVICE "ide/hda1"
-
-__uint8_t buffer[2048] __attribute__ ((aligned (4)));
-__dev_t dev;
-
-extern char *ide_error_msg[];
-
-int main(int argc,char *argv[])
-{
- __blkcnt_t blk;
- int res;
- int c;
-
- showmessage("This test try to read some blocks from first hard disk\n");
-
- dev=bdev_find_byname(DISKDEVICE);
- if (dev<0) {
- cprintf("Can't find device to operate with\n");
- return -1;
- }
- cprintf("Using device %s (dev=%04x)\n",DISKDEVICE,dev);
-
- blk=0;
- for (;;) {
- cprintf("Commands: x-exit r-read n-next block p-prev block\n");
- c = keyb_getchar();
- switch(c) {
- case 'x':
- return 0;
-
- case 'n':
- blk++;
- cprintf("Block %li\n",(long)blk);
- break;
-
- case 'p':
- if (blk>=0) blk--;
- cprintf("Block %li\n",(long)blk);
- break;
-
- case 'r':
- cprintf("Reading block %li...\n",(long)blk);
- memset(buffer,0xff,sizeof(buffer));
- res=bdev_read(dev,blk,buffer);
- cprintf("Result %i\n",res);
- //cprintf("Soft reset done %i\n",ide[0].errors);
- if (res!=0) {
- cprintf(" %s\n",(char*)ide_error_msg[-res]);
- }
- debug_dump_buffer(buffer,64);
- break;
-
- default:
- cprintf("Invalid command!\n");
- break;
- }
- cprintf("\n");
- }
-
- return 0;
-}
Index: start/oldexamples/block/idelin.c
===================================================================
--- start/oldexamples/block/idelin.c (revision 1087)
+++ start/oldexamples/block/idelin.c (nonexistent)
@@ -1,71 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <ll/i386/cons.h>
-#include <kernel/func.h>
-
-#include <fs/bdevinit.h>
-#include <fs/bdev.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "common.h"
-
-#define DISKDEVICE "ide/hda"
-
-#define TEST_MB 16
-
-#define NUMBLOCK (TEST_MB*1024l*1024l/512l)
-
-__dev_t dev;
-
-__uint8_t buffer[2048];
-
-int main(int argc,char *argv[])
-{
- __blkcnt_t blk;
- int res;
- int errors;
- TIME sttime,etime;
-
- showmessage("\n"
- "This test read data from first hard disk to test\n"
- "disk throughtput.\n"
- "Remeber that the reads are made block by block so\n"
- "don't worry if you see a low throughtput.\n"
- );
-
- dev=bdev_find_byname(DISKDEVICE);
- if (dev<0) {
- cprintf("\nCan't find device to operate with\n");
- return -1;
- }
- cprintf("\nUsing device %s (dev=%04x)\n",DISKDEVICE,dev);
-
- cprintf("Please wait (reading %i MB linearly?!?)...",TEST_MB);
-
- sttime=sys_gettime(NULL);
- errors=0;
- for (blk=0;blk<NUMBLOCK;blk++) {
- res=bdev_read(dev,blk,buffer);
- //res=bdev_seek(dev,blk);
- if (res!=0) errors++;
- }
- etime=sys_gettime(NULL)-sttime;
-
- cprintf("\nDone\n\n");
- cprintf("elapse time : %li sec %li msec\n",
- etime/1000000l,
- (etime/1000l)%1000l);
- cprintf("throughtput : %6.3f MB/s\n",
- NUMBLOCK*512.0/1024.0/1024.0/etime*1000000.0);
- //cprintf("soft reset made: %i\n",ide[0].errors);
- cprintf("errors : %i\n",errors);
- cprintf("\n");
-
- return 0;
-}
Index: start/oldexamples/block/idetest3.c
===================================================================
--- start/oldexamples/block/idetest3.c (revision 1087)
+++ start/oldexamples/block/idetest3.c (nonexistent)
@@ -1,66 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <ll/i386/cons.h>
-#include <drivers/keyb.h>
-
-#include <fs/bdevinit.h>
-#include <fs/bdev.h>
-
-#include <string.h>
-
-#include "common.h"
-
-#define DISKDEVICE "ide/hda1"
-#define BLOCKNUMBER 58549
-
-__uint8_t buffer[2048] __attribute__ ((aligned (4)));
-
-extern char *ide_error_msg[];
-
-int main(int argc,char *argv[])
-{
- __dev_t dev;
- __blkcnt_t blk;
- int res;
- // int c;
-
- showmessage("This test tries to read a block from the first hard disk\n"
- "and then it tries to write it to disk\n"
- "Press [CTRL-C] to abort...");
-
- dev=bdev_find_byname(DISKDEVICE);
- if ((int)dev<0) {
- cprintf("Can't find device to operate with\n");
- cprintf("%s not present!\n",DISKDEVICE);
- return -1;
- }
- cprintf("Using device %s (dev=%04x)\n",DISKDEVICE,dev);
-
- blk=BLOCKNUMBER;
-
- cprintf("Reading block %li...\n",(long)blk);
- memset(buffer,0xff,sizeof(buffer));
- res=bdev_read(dev,blk,buffer);
- cprintf("Result %i\n",res);
- //cprintf("Soft reset done %i\n",ide[0].errors);
- if (res!=0) {
- cprintf(" %s\n",(char*)ide_error_msg[-res]);
- return -1;
- }
- debug_dump_buffer(buffer,64);
-
- cprintf("Writing block %li...\n",(long)blk);
- res=bdev_write(dev,blk,buffer);
- cprintf("Result %i\n",res);
- //cprintf("Soft reset done %i\n",ide[0].errors);
- if (res!=0) {
- cprintf(" %s\n",(char*)ide_error_msg[-res]);
- }
-
- waitend();
- return 0;
-}
Index: start/oldexamples/block/idetx430.c
===================================================================
--- start/oldexamples/block/idetx430.c (revision 1087)
+++ start/oldexamples/block/idetx430.c (nonexistent)
@@ -1,79 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <ll/ll.h>
-#include <ll/stdlib.h>
-#include <kernel/func.h>
-#include <drivers/keyb.h>
-
-#include <fs/bdevinit.h>
-#include <fs/util.h>
-#include <fs/bdev.h>
-
-#include "../ide.h"
-#include "../debug.h"
-
-#define DISKDEVICE "ide/hda1"
-
-#define NUMBLOCK 1000
-
-__dev_t dev;
-
-int __bdev_sub_init(void)
-{
- BDEV_PARMS bdev=BASE_BDEV;
- bdev_def_showinfo(bdev,TRUE);
- bdev_init(&bdev);
-
- dev=bdev_find_byname(DISKDEVICE);
- if (dev<0) {
- cprintf("Can't find device to operate with\n");
- sys_end();
- return -1;
- }
- cprintf("Using device %s (dev=%04x)\n",DISKDEVICE,dev);
-
- return 0;
-}
-
-int __fs_sub_init(void)
-{
- return 0;
-}
-
-__uint8_t buffer[2048];
-
-int main(int argc,char *argv[])
-{
- __blkcnt_t blk;
- int res;
- int c,i,errors;
- TIME sttime,etime;
-
- cprintf("Press a key to continue\n\n");
- c=keyb_getchar();
- cprintf("Please wait (reading 100 blocks for 10 times)...");
-
- sttime=sys_gettime(NULL);
- errors=0;
- for (blk=0;blk<100;blk++) {
- for (i=0;i<10;i++) {
- res=bdev_read(dev,blk,buffer);
- if (res!=0) errors++;
- }
- }
- etime=sys_gettime(NULL)-sttime;
-
- cprintf("\nDone\n\n");
- cprintf("elapse time : %li sec %li msec\n",
- etime/1000000l,
- (etime/1000l)%1000l);
- cprintf("soft reset made: %i\n",ide[0].errors);
- cprintf("errors : %i\n",errors);
- cprintf("\n");
-
- return 0;
-}
Index: start/oldexamples/block/idernd.c
===================================================================
--- start/oldexamples/block/idernd.c (revision 1087)
+++ start/oldexamples/block/idernd.c (nonexistent)
@@ -1,68 +0,0 @@
-/*
- *
- *
- *
- */
-
-#include <ll/i386/cons.h>
-#include <kernel/func.h>
-
-#include <fs/bdevinit.h>
-#include <fs/bdev.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "common.h"
-
-#define DISKDEVICE "ide/hda1"
-
-#define NUMBLOCK 1000
-
-__dev_t dev;
-__uint8_t buffer[2048];
-
-int main(int argc,char *argv[])
-{
- __blkcnt_t blk;
- int res;
- int errors;
- TIME sttime,etime;
-
- showmessage("\n"
- "This test read RAMDOMLY data from first hard disk to test\n"
- "disk throughtput.\n"
- "Remeber that the reads are made RANDOMLY block by block so\n"
- "don't worry if you see a VERY low throughtput.\n"
- );
- srand(7);
-
- dev=bdev_find_byname(DISKDEVICE);
- if (dev<0) {
- cprintf("\nCan't find device to operate with\n");
- return -1;
- }
- cprintf("\nUsing device %s (dev=%04x)\n",DISKDEVICE,dev);
-
- cprintf("Please wait (reading %i KB ramdomly)...",NUMBLOCK/2);
-
- sttime=sys_gettime(NULL);
- errors=0;
- for (blk=0;blk<NUMBLOCK;blk++) {
- res=bdev_read(dev,rand()%5000,buffer);
- if (res!=0) errors++;
- }
- etime=sys_gettime(NULL)-sttime;
-
- cprintf("\nDone\n\n");
- cprintf("elapse time : %li sec %li msec\n",
- etime/1000000l,
- (etime/1000l)%1000l);
- cprintf("throughtput : %6.3f KB/s\n",
- NUMBLOCK*512.0/1024.0/etime*1000000.0);
- //cprintf("soft reset made: %i\n",ide[0].errors);
- cprintf("errors : %i\n",errors);
- cprintf("\n");
-
- return 0;
-}
Index: start/oldexamples/block/common.c
===================================================================
--- start/oldexamples/block/common.c (revision 1087)
+++ start/oldexamples/block/common.c (nonexistent)
@@ -1,75 +0,0 @@
-
-#include <kernel/func.h>
-
-#include <fs/bdevinit.h>
-#include <fs/fsinit.h>
-#include <fs/bdev.h>
-
-#include <drivers/keyb.h>
-
-#include <sys/mount.h>
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-
-/* -- */
-
-int __register_sub_init(void)
-{
- return 0;
-}
-
-/* -- */
-
-int __bdev_sub_init(void)
-{
- BDEV_PARMS bdev=BASE_BDEV;
-
- bdev_def_showinfo(bdev,TRUE);
- bdev_init(&bdev);
-
- return 0;
-}
-
-/* -- */
-
-void ctrlc_exit(KEY_EVT *k)
-{
- //sys_status(SCHED_STATUS);
- cprintf("CTRL-C pressed!\n");
- sys_end();
-}
-
-/* -- */
-
-void showmessage(char *s)
-{
- cputs(s);
- cprintf("Press [x] to begin...");
- while (keyb_getchar()!='x');
- cprintf("\n");
-}
-
-void waitend(void)
-{
- int c;
- cprintf("Press [x] to exit...");
- while ((c=keyb_getchar())!='x');
- cprintf("\n");
-}
-
-/* -- */
-
-void debug_dump_buffer(char *buf, int size)
-{
- int i;
- for (i=0;i<size;i++) {
- if (i%16==0) {
- if (i!=0) cprintf("\n");
- cprintf("%04x: ",i);
- }
- cprintf("%02x ",(unsigned char)*(buf+i));
- }
- cprintf("\n");
-}
Index: start/oldexamples/block/makefile
===================================================================
--- start/oldexamples/block/makefile (revision 1087)
+++ start/oldexamples/block/makefile (nonexistent)
@@ -1,35 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS=idetest0 idetest1 idetest2 idetest3 idelin idernd
-OBJS=common.o
-
-include $(BASE)/config/example.mk
-
-#
-#
-#
-
-idetest0:
- make -f $(SUBMAKE) APP=idetest0 INIT=initblk.o OTHEROBJS=common.o
-
-idetest1:
- make -f $(SUBMAKE) APP=idetest1 INIT=initblk.o OTHEROBJS=common.o
-
-idetest2:
- make -f $(SUBMAKE) APP=idetest2 INIT=initblk.o OTHEROBJS=common.o
-
-idetest3:
- make -f $(SUBMAKE) APP=idetest3 INIT=initblk.o OTHEROBJS=common.o
-
-idelin:
- make -f $(SUBMAKE) APP=idelin INIT=initblk.o OTHEROBJS=common.o
-
-idernd:
- make -f $(SUBMAKE) APP=idernd INIT=initblk.o OTHEROBJS=common.o
Index: start/oldexamples/block/common.h
===================================================================
--- start/oldexamples/block/common.h (revision 1087)
+++ start/oldexamples/block/common.h (nonexistent)
@@ -1,11 +0,0 @@
-
-#ifndef __COMMON_H
-#define __COMMON_H
-
-void showmessage(char *s);
-void waitend(void);
-
-void debug_dump_buffer(char *buf, int size);
-
-#endif
-
Index: start/dosfs/readme.txt
===================================================================
--- start/dosfs/readme.txt (revision 1087)
+++ start/dosfs/readme.txt (nonexistent)
@@ -1,46 +0,0 @@
---------------------------------------
-DOS_fXXX Demo
-
-by
-
-Paolo Gai pj@sssup.it
-and
-Gabriele Bolognini gabrieleb@sssup.it
-2001
-
---------------------------------------
-
-The DOS_fXXX functions provided into ll/i386/x-dos.h are a few
-shortcuts that can be used to call INT21's DOS calls.
-
-These functions can be used to read and write files before/after
-the kernel goes into i386 protected mode.
-
-THEY CANNOT BE USED IF YOU BOOT WITH GRUB.
-
---------------------------------------
-
-The demo is composed by:
-
-MAKEFILE The makefile used to compile the application;
- dosfs is the rule to compile the application
-README.TXT This file
-INITFILE.C The init file (only RR)
-DOSFS.C The DOS_fread and DOS_fwrite demo
-
---------------------------------------
-
-The demo works as follows:
-- Into __kernel_register_levels__() the demo reads up to 1000 bytes from
- myfile.txt
-- Then, into the main() function it prints the contents of the buffer at
- screen
-- Finally, at the end of the system it writes a file called myfile.out
- with up to 30 of the first bytes of the buffer
-
-The demo should work on any processor speed, and does not use keyboard or
-graphics.
-
-Bug: at the moment (01 Jun 2001) sometimes the demo hangs when using
-the one-shot timer.
-
Index: start/dosfs/makefile
===================================================================
--- start/dosfs/makefile (revision 1087)
+++ start/dosfs/makefile (nonexistent)
@@ -1,16 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= dosfs
-
-include $(BASE)/config/example.mk
-
-dosfs:
- make -f $(SUBMAKE) APP=dosfs INIT= OTHEROBJS="initfile.o" OTHERINCL=
-
Index: start/dosfs/dosfs.c
===================================================================
--- start/dosfs/dosfs.c (revision 1087)
+++ start/dosfs/dosfs.c (nonexistent)
@@ -1,174 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: dosfs.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai and Gabriele Bolognini
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "string.h"
-#include "ll/i386/x-dos.h"
-
-
-/* This is the buffer used by read_myfile */
-char myfilebuf[1000];
-
-/* This is the number of bytes read by read_myfile */
-int myfilebuf_length;
-
-/* This function write myfile.out (up to 30 chars) */
-void write_myfile(void *arg);
-
-int main(int argc, char **argv)
-{
- int x;
-
- cprintf("\nBuffer contents:\n");
-
- for (x=0; x<myfilebuf_length; x++)
- cputc(myfilebuf[x]);
-
- /*
- WARNING: You can call these functions only when you are in
- real mode!!!
-
- The system is in real mode:
- - into __kernel_register_levels__()
- - into sys_atrunlevel functions posted with RUNLEVEL_AFTER_EXIT
- */
-
- if (myfilebuf_length)
- sys_atrunlevel(write_myfile, NULL, RUNLEVEL_AFTER_EXIT);
-
- return 0;
- /*
- * Since there is only one user task, the kernel will shut down after this
- * task finishes...
- */
-}
-
-/* This function read myfile.txt (up to 1000 chars) */
-void read_myfile(void)
-{
- /* DOS file descriptor */
- DOS_FILE *f;
-
- /* Error code */
- int err;
-
- /* open the DOS file for reading (you can specify only "r" or "w") */
- f = DOS_fopen("myfile.txt","r");
-
- /* check for open errors */
- if (!f) {
- /* error!! */
- err = DOS_error();
-
- /* note that if you call DOS_error() here, it return 0!!! */
- cprintf("Error %d opening myfile.txt...\n", err);
- myfilebuf_length = 0;
- return;
- }
-
- /* read up to 1000 chars */
- myfilebuf_length = DOS_fread(&myfilebuf,1,1000,f);
-
- /* check for errors */
- err = DOS_error();
-
- cprintf("Read %d bytes from myfile.txt...\n", myfilebuf_length);
-
- if (err) {
- cprintf("Error %d reading myfile.txt...\n", err);
- myfilebuf_length = 0;
- /* there is not return because I want to close the file! */
- }
-
- /* Close the file */
- DOS_fclose(f);
-}
-
-/* This function write myfile.out (up to 30 chars) */
-void write_myfile(void *arg)
-{
- DOS_FILE *f; /* DOS file descriptor */
- int err; /* Error code */
- int maxbytes;
- int writtenbytes; /* number of files written */
-
- /* open the DOS file for writing (you can specify only "r" or "w") */
- f = DOS_fopen("myfile.out","w");
-
- /* check for open errors */
- if (!f) {
- /* error!! */
- err = DOS_error();
-
- /* note that if you call DOS_error() here, it return 0!!! */
- cprintf("Error %d opening myfile.out...\n", err);
- return;
- }
-
- /* write up to 30 bytes */
- if (myfilebuf_length > 30)
- maxbytes = 30;
- else
- maxbytes = myfilebuf_length;
-
- writtenbytes = DOS_fwrite(myfilebuf,1,maxbytes,f);
-
- /* check for errors */
- err = DOS_error();
-
- cprintf("Written %d bytes into myfile.out...\n", writtenbytes);
-
- if (err) {
- cprintf("Error %d writing myfile.txt...\n", err);
- /* there is not return because I want to close the file! */
- }
-
- /* Close the file */
- DOS_fclose(f);
-}
-
-
Index: start/dosfs/myfile.txt
===================================================================
--- start/dosfs/myfile.txt (revision 1087)
+++ start/dosfs/myfile.txt (nonexistent)
@@ -1,3 +0,0 @@
-0.2.4.6.8.0.2.4.6.8.0.2.4.6.8.0.2.4.6.8.
-This is the myfile.txt file...
-
Index: start/dosfs/initfile.c
===================================================================
--- start/dosfs/initfile.c (revision 1087)
+++ start/dosfs/initfile.c (nonexistent)
@@ -1,91 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: initfile.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai and Gabriele Bolognini
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/rr.h"
-#include "modules/dummy.h"
-
-/*+ sysyem tick in us +*/
-#define TICK 0
-
-/*+ RR tick in us +*/
-#define RRTICK 10000
-
-void read_myfile(void);
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- dummy_register_level();
-
- /* If you need to interact with the DOS Filesystem and you use
- the X eXtender, this is the better place where you can use
- the DOS_fXXX functions...
-
- WARNING: You can call these functions only when you are in
- real mode!!!
-
- The system is in real mode:
- - into __kernel_register_levels__()
- - into sys_atrunlevel functions posted with RUNLEVEL_AFTER_EXIT
- */
- read_myfile();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- __call_main__(mb);
-
- return (void *)0;
-}
-
Index: start/soccer/readme
===================================================================
--- start/soccer/readme (revision 1087)
+++ start/soccer/readme (nonexistent)
@@ -1,10 +0,0 @@
-S.Ha.R.K. SOCCER Demo
----------------------
-
-This demo has been developed by Merli Andrea and Zucchetti Alessandro
-in the context of an assignment during the course of industrial informatic
-at the University of Pavia, Italy.
-
-More informations in the soccer.ps file.
-
-Paolo
Index: start/soccer/makefile
===================================================================
--- start/soccer/makefile (revision 1087)
+++ start/soccer/makefile (nonexistent)
@@ -1,17 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= soccer
-
-include $(BASE)/config/example.mk
-
-soccer:
- make -f $(SUBMAKE) APP=soccer INIT= OTHEROBJS="initfile.o"
-
-
Index: start/soccer/iniziali.h
===================================================================
--- start/soccer/iniziali.h (revision 1087)
+++ start/soccer/iniziali.h (nonexistent)
@@ -1,100 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- ------------
- CVS : $Id: iniziali.h,v 1.1.1.1 2002-09-02 09:37:44 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:44 $
- ------------
-*/
-
-/*
- * Copyright (C) 2000 Merli Andrea and Zucchetti Alessandro
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-#define YMENU 10 /* menu level */
-#define XMIN 1
-#define XMAX 799
-#define YMIN 100
-#define YMAX 599
-#define D 27
-#define VEL 10 /* linear velocity (def. = 6) */
-#define ANG 15 /* angolo massimo sterzata (15) */
-#define ESC 27 /* ASCII code of ESCAPE key */
-#define MAX_P 10 /* max number of calc */
-#define MAX_B 1
-#define GROUP_SOFT 4
-#define GROUP_PLAY 2
-#define GROUP_BALL 3
-#define PERIOD_BALL 30000
-#define PERIOD_CALC 100000
-#define PERIOD_PORT 30000
-#define CALC_WCET 5000
-#define PORT_WCET 4000
-#define BALL_WCET 5000
-#define BALL_RADIUS 5
-#define VER_RES 600
-#define ORI_RES 800
-#define COL_DEP 16
-#define FREE_MODE 0 /*il giocatore corre palla al piede*/
-#define PASS_MODE 1 /*il giocatore passa la palla rasoterra*/
-#define NO_BALL_MODE 4
-#define PENALTY_MODE_BLUE 5
-#define PENALTY_MODE_WHITE 6
-#define RESTART 6
-#define CANC 370
-#define RLEFT 1 /*RUN LEFT*/
-#define RDOWN 3 /*RUN DOWN*/
-#define RUP 5 /*RUN UP*/
-#define RRIGHT 7 /*RUN RIGHT*/
-#define RRUP 9 /*RUN RIGHT UP*/
-#define RRDW 15 /*RUN RIGHT DOWN*/
-#define RLUP 11 /*RUN LEFT UP*/
-#define RLDW 13 /*RUN LEFT DOWN*/
-#define RLEFT2 17 /*RUN LEFT*/
-#define RDOWN2 19 /*RUN DOWN*/
-#define RUP2 21 /*RUN UP*/
-#define RRIGHT2 23 /*RUN RIGHT*/
-#define RRUP2 25 /*RUN RIGHT UP*/
-#define RRDW2 27 /*RUN RIGHT DOWN*/
-#define RLUP2 29 /*RUN LEFT UP*/
-#define RLDW2 31 /*RUN LEFT DOWN*/
-#define NO_ACT 0
-#define GOAL_ACT 2
-#define MENU_ACT 3
-#define NO_PENALTY 0
-#define PENALTY 1
Index: start/soccer/soccer.c
===================================================================
--- start/soccer/soccer.c (revision 1087)
+++ start/soccer/soccer.c (nonexistent)
@@ -1,1248 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- ------------
- CVS : $Id: soccer.c,v 1.1.1.1 2002-09-02 09:37:44 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:44 $
- ------------
-*/
-
-/*
- * Copyright (C) 2000 Merli Andrea and Zucchetti Alessandro
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-/*--------------------------------------------------------------*/
-/* */
-/* S.Ha.R.K. SOCCER SIMULATOR 2001 */
-/* */
-/* */
-/*Autori: Merli Andrea */
-/* Zucchetti Alessandro */
-/*--------------------------------------------------------------*/
-
-#include <kernel/kern.h>
-#include <drivers/glib.h>
-#include <drivers/keyb.h>
-#include <semaphore.h>
-#include <stdlib.h>
-#include <math.h>
-#include <modules/cabs.h>
-#include <ll/sys/types.h>
-#include "images.h"
-#include "position.h"
-#include "iniziali.h"
-#include "calc.h"
-#include "calc2.h"
-#include "stadio.h"
-
-struct target{
-int x;
-int y;
-};
-
-void draw_calc(int x, int y, int c,int f); /*disegna i calciatori*/
-void draw_ball(int c); /*disegna la palla*/
-void draw_port(int c,int p,int yp,int xp); /*disegna i portieri*/
-void init_calc(); /*carica i task calc*/
-void init_position(int num,int *ox,int *oy); /*inizializza la posizione dei calciatori*/
-void init_calc_area(int i,int *x_min,int *x_max,int *y_min,int *y_max); /*inizializza la zona di campo die calciatori*/
-void get_target(int modo,int i,struct target * obj,int x_max,int x_min,int y_max,int y_min);/*seleziona l'obietivo dei calciatori*/
-void collision_detection(int i);/*gestisce le collisioni tra i calciatori*/
-int get_direction(int x,int y,int x2, int y2);
-void init_portiere(); /*carica i task portiere*/
-void init_ball(); /*carica il task ball*/
-void act_goal(); /*carica il task gol*/
-void draw_goal(); /*gestisce il tabellone facendo apparire la scritta GOAL!!*/
-void disegna_campo(); /*disegna il campo di gioco*/
-int yportiere(int y1, int y2);
-int xportiere(int x1, int x2);
-int goal_behaviour(int f); /*gestisce gli eventi in occasione di un gol*/
-int rigore=0;
-float t;
-double tick = 1.0; /* system tick = 1 ms */
-int xb=300,yb=300,xob=300,yob=300; /* coordinate globali della palla*/
-struct position pos_calc[MAX_P+2];
-PID pid_calc,pid_calc2,pid_ball,pid_port,pid_gol;
-sem_t mutex,mutex2;
-CAB cbi[4];
-
-
-/*--------------------------------------------------------------*/
-TASK ball(void *arg)
-{
-float dx=0, dy=0;//,df=0,dg=0;
-float acc =0.0; /*accelerazione*/
-float x; /*spostamento*/
-int g=10; /*accelerazione di gravit…*/
-float cattr=0.05; /*coeff di attrito tra palla e campo*/
-int col=1000;
-int ij=0;
-int r1=0,r2=0; /*gol segnati*/
-char tetaa[15];
-double r; /*angolo in radianti*/
-int flag =0; /*variabile generatrice di eventi*/
-int outy,outx; /*variabile per rilevare il rimbalzo della palla*/
-float vel1=0.0,vel2=0.0; /*variabili di velocita*/
-float tau = 1.0; /*tempo base*/
-char *m; /*modo*/
-char *a; /*angolo*/
-char *s; /*speed*/
-char modo;
-char *o; /*azione*/
-char azione;
-int teta=0;
-char velocita;
-char mode;
- ij=0;
- m = cab_getmes(cbi[0]);
- mode = *m;
- cab_unget(cbi[0],m);
- if(mode==NO_BALL_MODE){
- xb = xob =(XMIN+XMAX)/2;
- yb = yob =(YMIN+YMAX)/2;
- }
- if(mode ==PENALTY_MODE_BLUE){
-
- xb=700;
- yb=(YMIN+YMAX)/2;
- }
- if(mode == PENALTY_MODE_WHITE){
- xb=100;
- yb=(YMIN+YMAX)/2;
- }
-
- sprintf(tetaa,"BLUE FC %3d AC WHITE %3d",(r1),(r2));
- grx_text(tetaa,XMIN+270 ,YMENU+60, rgb16(255,255,255), rgb16(0,0,0));
-/***************************************************************************/
- while (1) { //WHILE(1);
- m = cab_getmes(cbi[0]);
- mode = *m;
- cab_unget(cbi[0],m);
- /*posiziono la palla sul dischetto del rigore*/
- if(mode ==PENALTY_MODE_BLUE){
- xb=700;
- yb=(YMIN+YMAX)/2;
- }
- if(mode == PENALTY_MODE_WHITE){
- xb=100;
- yb=(YMIN+YMAX)/2;
- }
- /*se rigore=NO_PENALTY si calcolano le coordinate della palla
- in base alla velocit… e alla direzione del tiro*/
- if(rigore ==NO_PENALTY){
- a = cab_getmes(cbi[1]); /*direzione*/
- cab_unget(cbi[1],a);
- s = cab_getmes(cbi[2]); /*velocit…*/
- velocita = *s;
- cab_unget(cbi[2],s);
- acc = (float)cattr * g;
- r = (double)(36*(*a)/12) * PI / 180.;
- if(mode==PASS_MODE){
- vel1= velocita;
- }
- vel2 = vel1 - acc*tau;
- if(vel2>0){
- x = vel1 *tau -0.5*acc*tau*tau;
- dx = (float)(x * cos(r));
- dy = (float)(x * sin(r));
- xb += dx;
- yb += dy;
- ij++;
- outx = (xb > XMAX-2) || (xb < XMIN+2);
- outy = (yb > YMAX-6) || (yb < YMIN+6);
-
- if (outx || outy) {
- if ((yb>=(YMIN+YMAX)/2-50) &&(yb<=(YMIN+YMAX)/2+50)){
- dx=0;
- dy=0;
- }
- xb = xb - dx;
- yb = yb - dy;
- if (outx) teta = 60 - (*a);
- if (outy) teta = 120-(*a);
- if (teta > 120) teta -= 120;
- if (teta < 0) teta += 120;
- *a =(char)teta;
- r = (double)(36*(*a)/12) * PI / 180.;
- dx = (float)(x * cos(r));
- dy = (float)(x * sin(r));
- if ((yb>=(YMIN+YMAX)/2-50) &&(yb<=(YMIN+YMAX)/2+50)){
- dx=0;
- dy=0;
- }
- xb += dx;
- yb += dy;
- }
- modo = NO_BALL_MODE;
- m = cab_reserve(cbi[0]);
- *m = modo;
- cab_putmes(cbi[0],m);
-
- vel1 = vel2;
- }
- if (yb< YMIN+5) yb = yb+10;
- if(xb< XMIN+5) xb = xb +10;
- /*se c'Š un gol*/
- if ((yb>=(YMIN+YMAX)/2-50) &&(yb<=(YMIN+YMAX)/2+50)&&((xb<=XMIN+7)||
- (xb >=XMAX-7))){
- /*aggiorno i risultati*/
- if(xb<XMIN+50) r2++;
- else r1++;
- /*assegno alle variabili i valori di riposo*/
- yb =(YMAX+YMIN)/2;
- xb =(XMIN+XMAX)/2;
- teta=0;
- velocita=0;
- flag =1;
- }
- /* in base al valore di flag modifico il tabellone*/
- flag = goal_behaviour(flag);
- /*scrivo il nuovo risultato nel tabellone*/
- if (flag == 80){
- sprintf(tetaa,"BLUE FC %3d AC WHITE %3d",(r1),(r2));
- grx_text(tetaa,XMIN+270 ,YMENU+60, rgb16(255,255,255), rgb16(0,0,0));
- flag =0;
- o = cab_reserve(cbi[3]);
- azione = NO_ACT; /*nessuna azione*/
- *o = azione;
- cab_putmes(cbi[3],o);
- modo = NO_BALL_MODE;
- m = cab_reserve(cbi[0]);
- *m = modo;
- cab_putmes(cbi[0],m);
- }
-
- }//fine if(rigore==NO_PENALTY)
- draw_ball(0);
- draw_ball(col);
- xob = xb; yob = yb;
-
- task_endcycle();
- }
-
-}
-
-
-/*--------------------------------------------------------------*/
-
-
-
-/******************************************************************/
-
-TASK calc(void *arg){
-
-struct target obj;
-int ox=200, oy=200;
-int alpha=0;
-int teta;
-int col=0;
-char speed;
-char *s;
-char modo;
-char *m;
-char angolo;
-char *a;
-int i = (int)arg;
-int x_min=0,y_min=0;
-int x_max=0,y_max=0;
-/*Posiziono i calciatori nel punto iniziale*/
-
- init_position(i,&ox,&oy);
-
-
- /*Definisco l'area di gioco del calciatore basandomi sul suo PID*/
-
- init_calc_area(i,&x_min,&x_max,&y_min,&y_max);
-
-while (1) {
- m = cab_getmes(cbi[0]);
- modo = *m;
- cab_unget(cbi[0],m);
-
- /*Individua l'obiettivo del calciatore a seconda del modo e del */
- /*ruolo in PENALTY_MODE un calciatore va sul pallone gli altri */
- /*ai lati del campo */
- /*in NO_BALL_MODE l'obiettivo Š la palla se essa Š */
- /*nell'area definita dalla funzione init_calc_area(..) */
- /*altrimenti Š la posizione iniziale definita con init_position(.)*/
-
-
- get_target(modo,i,&obj,x_max,x_min,y_max,y_min);
-
- /*se raggiungo l'obbiettivo mi fermo*/
- if(obj.x==pos_calc[i].x) pos_calc[i].dx=0;
- if(obj.y==pos_calc[i].y) pos_calc[i].dy=0;
-
- /*direzione tra il calciatore e l'obiettivo*/
-
- alpha= get_direction(pos_calc[i].x,pos_calc[i].y,obj.x,obj.y);
-
- /*direzione di corsa iniziale*/
-
- pos_calc[i].dy = -VEL*sin((alpha*PI)/180);
- pos_calc[i].dx = VEL*cos((alpha*PI)/180);
-
-
- /*Per evitare che il calciatore corra prima dell'inizio della
- partita gli impongo di non muoversi in posizione iniziale*/
-
- if((obj.x==300)&&(obj.y==300)) {
- pos_calc[i].dx=0;
- pos_calc[i].dy=0;
- }
- /*velocità di corsa*/
-
- pos_calc[i].x+=pos_calc[i].dx;
- pos_calc[i].y+=pos_calc[i].dy;
-
- /*verifico se mi trovo in una situazione di collisione con */
- /*un altro calciatore */
-
- collision_detection(i);
-
-
-
- /*se il calciatore arriva sulla palla tira*/
- if((modo==NO_BALL_MODE)||(i==7)||(i==2))
- if(((pos_calc[i].x>=xb-27)&&(pos_calc[i].x<=xb+27))&&((pos_calc[i].y>=yb-27)&&(pos_calc[i].y<=yb+27)))
- {
-
- if((i==7)||(i==2)) rigore =NO_PENALTY;
- modo = PASS_MODE;
- m = cab_reserve(cbi[0]);
- *m = modo;
- cab_putmes(cbi[0],m);
- if(i<5){
- a = cab_reserve(cbi[1]);
- teta =(rand()%(90) + 135 );
- if(teta >360) teta -= 360;
- if (teta<0) teta += 360;
- angolo = (char)(teta/3);
- *a = angolo;
- cab_putmes(cbi[1],a);
- }
- if(i>4){
- a = cab_reserve(cbi[1]);
- teta =(rand()%(90) -45);
- if(teta >360) teta -= 360;
- if (teta<0) teta += 360;
- teta = (teta/3);
- *a = teta;//angolo;
- cab_putmes(cbi[1],a);
- }
- s = cab_reserve(cbi[2]);
- speed=16;
- *s =speed;
- cab_putmes(cbi[2],s);
-
- }
-
-
-
- draw_calc(ox, oy, CANC,0);
-
- /*Disegna l'omino voltato nella direzione della palla*/
- if(i<5){
- DIREZ(alpha,col,158,203, RLEFT,pos_calc[i].x,pos_calc[i].y);/*runleft*/
- DIREZ(alpha,col,249,292, RDOWN,pos_calc[i].x,pos_calc[i].y);/*rundown*/
- DIREZ(alpha,col, 68,113, RUP,pos_calc[i].x,pos_calc[i].y);/*runup*/
- DIREZ(alpha,col, 0, 23,RRIGHT,pos_calc[i].x,pos_calc[i].y);/*runright*/
- DIREZ(alpha,col,337,360,RRIGHT,pos_calc[i].x,pos_calc[i].y);
- DIREZ(alpha,col, 23, 68, RRUP,pos_calc[i].x,pos_calc[i].y);/*runrightup*/
- DIREZ(alpha,col,113,158, RLUP,pos_calc[i].x,pos_calc[i].y);/*runleftup*/
- DIREZ(alpha,col,203,249, RLDW,pos_calc[i].x,pos_calc[i].y);/*runleftdown*/
- DIREZ(alpha,col,292,337, RRDW,pos_calc[i].x,pos_calc[i].y);/*runrightdown*/
- }
-
- if(i>4){
-
- DIREZ(alpha,col,158,203, RLEFT2,pos_calc[i].x,pos_calc[i].y);/*runleft*/
- DIREZ(alpha,col,249,292, RDOWN2,pos_calc[i].x,pos_calc[i].y);/*rundown*/
- DIREZ(alpha,col, 68,113, RUP2,pos_calc[i].x,pos_calc[i].y);/*runup*/
- DIREZ(alpha,col, 0, 23,RRIGHT2,pos_calc[i].x,pos_calc[i].y);/*runright*/
- DIREZ(alpha,col,337,360,RRIGHT2,pos_calc[i].x,pos_calc[i].y);
- DIREZ(alpha,col, 23, 68, RRUP2,pos_calc[i].x,pos_calc[i].y);/*runrightup*/
- DIREZ(alpha,col,113,158, RLUP2,pos_calc[i].x,pos_calc[i].y);/*runleftup*/
- DIREZ(alpha,col,203,249, RLDW2,pos_calc[i].x,pos_calc[i].y);/*runleftdown*/
- DIREZ(alpha,col,292,337, RRDW2,pos_calc[i].x,pos_calc[i].y);/*runrightdown*/
- }
-
-
- ox =pos_calc[i].x; oy = pos_calc[i].y;
-
- task_endcycle();
- }
-}
-/****************************************************************/
-TASK gol(void *arg)
-{
- while(1){
- draw_goal();
- task_endcycle();
- }
-}
-/****************************************************************/
-TASK portiere(void *arg)
-{
-int yp,yp1,yp0,ypo_0=(YMAX+YMIN)/2,ypo_1=(YMAX+YMIN)/2;
-int xp0,xp1,xpo_0,xpo_1,xo0,xo1;
-int np= (int)arg;
-char speed;
-char *s;
-char modo;
-char *m;
-char angolo;
-char *a;
-
- yp = (YMIN+YMAX)/2; /* y di attesa*/
- yp0 = (YMIN+YMAX)/2;
- yp1 = (YMIN+YMAX)/2;
- xp0 = xpo_0 = XMIN+3; /* xp ascissa attuale portiere, xpo ascissa vecchia posizione portiere*/
- xp1 = xpo_1 = XMAX-30;
- xo0 = XMIN+3; /* x di attesa*/
- xo1 = XMAX-30; /* x di attesa*/
- draw_port(1,np,yp,xo0);
- draw_port(1,np,yp,xo1);
-
- while(1){
- m = cab_getmes(cbi[0]);
- modo = *m;
- cab_unget(cbi[0],m);
- /*in base alla posizione della palla si calcola la posizione del portiere*/
- if ((np==0) && (xb < (XMIN+XMAX)/2) &&(xb > XMIN+150)){
- yp0 = yportiere(yb,yp0);
- xp0 = xportiere(xo0,xp0);
- }
- if ((np==0) &&(xb <= XMIN+150)){
- yp0 = yportiere(yb,yp0);
- xp0= xportiere(xb,xp0);
- }
- if ((np==0) && (xb > (XMIN+XMAX)/2)){
- yp0 = yportiere(yp,yp0);
- xp0 = xportiere(xo0,xp0);
- }
- /*il portiere non esce oltre questi limiti*/
- if ((yp0< (YMIN+YMAX)/2-100)|| (yp0>(YMIN+YMAX)/2+100))
- yp0 = ypo_0;
- if(xp0> XMIN+150)
- xp0 =xpo_0;
-
- pos_calc[10].x = xp0;
- pos_calc[10].y = yp0;
-
- /*in base alla posizione della palla si calcola la posizione del portiere*/
- if ((np==1) && (xb > (XMIN+XMAX)/2) && (xb< XMAX-150)){
- yp1 = yportiere(yb,yp1);
- xp1 = xportiere(xo1,xp1);
- }
- if ((np==1) && (xb >= XMAX-150)){
- yp1 = yportiere(yb,yp1);
- xp1 = xportiere(xb,xp1);
- }
- if ((np==1) && (xb < (XMIN+XMAX)/2)){
- yp1 = yportiere(yp,yp1);
- xp1 = xportiere(xo1,xp1);
- }
- /*il portiere non esce oltre questi limiti*/
- if ((yp1< (YMIN+YMAX)/2-100)|| (yp1>(YMIN+YMAX)/2+100))
- yp1 =ypo_1;
- if(xp1 < XMAX-150)
- xp1 =xpo_1;
-
- pos_calc[11].x = xp1;
- pos_calc[11].y = yp1;
-
- /*in caso di rigore il portiere aspetta il tiro sulla linea della porta*/
- if (rigore ==PENALTY) xp0= XMIN+3;
-
- if ((np==0)){
- draw_port(0,np,ypo_0,xpo_0);
- draw_port(1,np,yp0,xp0);
- ypo_0 = yp0;
- xpo_0 =xp0;
- }
-
- /*in caso di rigore il portiere aspetta il tiro sulla linea della porta*/
- if(rigore ==PENALTY) xp1= XMAX-30;
-
- if((np==1)){
- draw_port(0,np,ypo_1,xpo_1);
- draw_port(1,np,yp1,xp1);
- ypo_1 = yp1;
- xpo_1 = xp1;
- }
-
- /*se para rinvia immediatamente*/
- if( (yp0 >=yb-5) && (yp0<yb+20) && ((xb<=xp0+20)&&(xb>=xp0-30))){
- m = cab_reserve(cbi[0]);
- modo = PASS_MODE;
- *m = modo;
- cab_putmes(cbi[0],m);
- a = cab_reserve(cbi[1]);
- angolo =0;
- *a = angolo;
- cab_putmes(cbi[1],a);
- s = cab_reserve(cbi[2]);
- speed=20;
- *s =speed;
- cab_putmes(cbi[2],s);
- }
- /*se para rinvia immediatamente*/
- if((yp1 >=yb-5) && (yp1<yb+20) && (xb<=xp1+20)&&(xb>= xp1-30) ){
- m = cab_reserve(cbi[0]);
- modo = PASS_MODE;
- *m = modo;
- cab_putmes(cbi[0],m);
- a = cab_reserve(cbi[1]);
- angolo =60;
- *a = angolo;
- cab_putmes(cbi[1],a);
- s = cab_reserve(cbi[2]);
- speed=20;
- *s =speed;
- cab_putmes(cbi[2],s);
- }
- task_endcycle();
- }
-}
-
-/****************************************************************/
-/* This function is called when the system exits */
-void byebye(void *arg)
-{
- grx_close();
- kern_printf("Bye Bye!\n");
-}
-
-/****************************** MAIN ******************************/
-
-int main(int argc, char **argv)
-{
-
-
- char c; /* character from keyboard */
- int z=0;
- int p=0;
- int ij=0;
- char modo;
- char *m;
- char *s;
- char speed;
- char *a;
- char angolo;
- char *o;
- char azione;
-
-
- TIME seme; /* used to init the random seed */
-
- /* Set the exception handler */
- set_exchandler_grx();
-
- /* Set the closing function */
- sys_atrunlevel(byebye, NULL, RUNLEVEL_BEFORE_EXIT);
-
- /* graphic card Initialization */
- if (grx_init() < 1) {
- sys_abort(1);
- }
-
- if (grx_open(ORI_RES,VER_RES,COL_DEP) < 0) {
- kern_printf("GRX Err\n");
- sys_abort(1);
- }
- kern_printf("Video card ok!\n");
- cbi[1] = cab_create("direzione",10,15);
- cbi[0] = cab_create("modo",4,15);
- cbi[2] = cab_create("velocita",10,15);
- cbi[3] = cab_create("azione",3,3);
- m = cab_reserve(cbi[0]);
- modo = NO_BALL_MODE;
- *m = modo;
- cab_putmes(cbi[0],m);
- a = cab_reserve(cbi[1]);
- angolo =0;
- *a = angolo;
- cab_putmes(cbi[1],a);
- s = cab_reserve(cbi[2]);
- speed=0;
- *s =speed;
- cab_putmes(cbi[2],s);
- o = cab_reserve(cbi[3]);
- azione = NO_ACT;
- *o = azione;
- cab_putmes(cbi[3],o);
-
- /* The scenario */
-
- grx_box(0,0,ORI_RES,VER_RES,0);
- disegna_campo();
- for(p=0;p<scale_width;p++)
- for(z=0;z<scale_height;z++){
- grx_plot(100+p,0+z,rgb16(stadio_cmap[(unsigned char)scale_data[z*150+p]][0],stadio_cmap[(unsigned char)scale_data[z*150+p]][1],stadio_cmap[(unsigned char)scale_data[z*150+p]][2]));
- grx_plot(550+p,0+z,rgb16(stadio_cmap[(unsigned char)scale_data[z*150+p]][0],stadio_cmap[(unsigned char)scale_data[z*150+p]][1],stadio_cmap[(unsigned char)scale_data[z*150+p]][2]));
- }
- for(p=0;p<faro_width;p++)
- for(z=0;z<faro_height;z++){
- grx_plot(0+p,0+z,rgb16(stadio_cmap[(unsigned char)faros_data[z*100+p]][0],stadio_cmap[(unsigned char)faros_data[z*100+p]][1],stadio_cmap[(unsigned char)faros_data[z*100+p]][2]));
- grx_plot(700+p,0+z,rgb16(stadio_cmap[(unsigned char)farod_data[z*100+p]][0],stadio_cmap[(unsigned char)farod_data[z*100+p]][1],stadio_cmap[(unsigned char)farod_data[z*100+p]][2]));
- }
- for(p=0;p<schermo_width;p++)
- for(z=0;z<schermo_height;z++){
- grx_plot(250+p,0+z,rgb16(stadio_cmap[(unsigned char)schermo_data[z*schermo_width+p]][0],stadio_cmap[(unsigned char)schermo_data[z*schermo_width+p]][1],stadio_cmap[(unsigned char)schermo_data[z*schermo_width+p]][2]));
- }
- grx_text(" Simulation of Soccer", XMIN+260, YMENU+10, rgb16(255,255,255), rgb16(0,0,0));
- grx_text(" W rigore bianchi, E rigore blue", XMIN+260, YMENU+20, rgb16(255,255,255), rgb16(0,0,0));
- grx_text(" SPACE crea squadre, K kill all ", XMIN+260, YMENU+30, rgb16(255,255,255), rgb16(0,0,0));
- grx_text(" ESC Return to MS-DOS ", XMIN+260, YMENU+40, 12, rgb16(255,255,255));
- /* The program waits a space to create a calc */
- c = keyb_getch(BLOCK);
-
- /* randomize!!!!*/
- seme = sys_gettime(NULL);
- srand(seme);
-
- do {
- if ((c == ' ') &&(ij==0)) {
- init_ball();
- init_calc();
- init_portiere();
- ij++;
- }
- if ((c== 'w')){m = cab_reserve(cbi[0]);
- modo = PENALTY_MODE_WHITE;
- *m = modo;
- cab_putmes(cbi[0],m);
- rigore =PENALTY; }
- if ((c== 'e')){m = cab_reserve(cbi[0]);
- modo = PENALTY_MODE_BLUE;
- *m = modo;
- cab_putmes(cbi[0],m);
- rigore =PENALTY; }
- if ((c == 'k')) {
- group_kill(GROUP_PLAY);
- group_kill(GROUP_SOFT);
- group_kill(GROUP_BALL);
- ij=0;
- m = cab_reserve(cbi[0]);
- modo = NO_BALL_MODE;
- *m = modo;
- cab_putmes(cbi[0],m);
- disegna_campo();
- for(p=0;p<scale_width;p++)
- for(z=0;z<scale_height;z++){
- grx_plot(100+p,0+z,rgb16(stadio_cmap[(unsigned char)scale_data[z*150+p]][0],stadio_cmap[(unsigned char)scale_data[z*150+p]][1],stadio_cmap[(unsigned char)scale_data[z*150+p]][2]));
- grx_plot(550+p,0+z,rgb16(stadio_cmap[(unsigned char)scale_data[z*150+p]][0],stadio_cmap[(unsigned char)scale_data[z*150+p]][1],stadio_cmap[(unsigned char)scale_data[z*150+p]][2]));
- }
- for(p=0;p<faro_width;p++)
- for(z=0;z<faro_height;z++){
- grx_plot(0+p,0+z,rgb16(stadio_cmap[(unsigned char)faros_data[z*100+p]][0],stadio_cmap[(unsigned char)faros_data[z*100+p]][1],stadio_cmap[(unsigned char)faros_data[z*100+p]][2]));
- grx_plot(700+p,0+z,rgb16(stadio_cmap[(unsigned char)farod_data[z*100+p]][0],stadio_cmap[(unsigned char)farod_data[z*100+p]][1],stadio_cmap[(unsigned char)farod_data[z*100+p]][2]));
- }
- grx_text(" Simulation of Soccer", XMIN+260, YMENU+10, rgb16(255,255,255), rgb16(0,0,0));
- grx_text(" W rigore bianchi, E rigore blue", XMIN+260, YMENU+20, rgb16(255,255,255), rgb16(0,0,0));
- grx_text(" SPACE crea squadre, K kill all ", XMIN+260, YMENU+30, rgb16(255,255,255), rgb16(0,0,0));
- grx_text(" ESC Return to MS-DOS ", XMIN+260, YMENU+40, 12, rgb16(255,255,255));
- xb=(int)(XMAX-XMIN)/2;
- yb=(int)(YMIN+YMAX)/2;
- }
- c = keyb_getch(BLOCK);
- } while (c != ESC);
-
-
-
- sys_end();
-
- return 0;
-}
-
-/*--------------------------------------------------------------*/
-void draw_calc(int x, int y, int c,int f)
-{
- int i,j;/*needed in the macro*/
- sem_wait(&mutex);
- if(c==CANC){
-
- grx_box(x, y,x+27,y+27,SFONDO);
- if((x>(XMIN+XMAX)/2-27) && (x<(XMIN+XMAX)/2+27)){
- grx_line(XMIN+1,YMIN+1,XMAX-1,YMIN+1,rgb16(255,255,255));
- grx_line(XMIN+1,YMAX-1,XMAX-1,YMAX-1,rgb16(255,255,255));
- grx_line(XMIN+1,YMIN+1,XMIN+1,(YMIN+YMAX)/2-50,rgb16(255,255,255));
- grx_line(XMIN+1,(YMIN+YMAX)/2+50,XMIN+1,YMAX-1,rgb16(255,255,255));
- grx_line(XMAX-1,YMIN+1,XMAX-1,(YMIN+YMAX)/2-50,rgb16(255,255,255));
- grx_line(XMAX-1,(YMIN+YMAX)/2+50,XMAX-1,YMAX-1,rgb16(255,255,255));
- grx_line(((XMIN+XMAX)/2),YMIN,((XMIN+XMAX)/2),YMAX-1,rgb16(255,255,255));
- grx_circle((XMIN+XMAX)/2,(YMIN+YMAX)/2,54,rgb16(255,255,255));
- grx_line(XMIN,(YMIN+YMAX)/4+30,(XMIN+XMAX)/5,(YMIN+YMAX)/4+30,rgb16(255,255,255));
- grx_line((XMIN+XMAX)/5,(YMIN+YMAX)/4+30,(XMIN+XMAX)/5,3*(YMIN+YMAX)/4-30,rgb16(255,255,255));
- grx_line(XMIN,3*(YMIN+YMAX)/4-30,(XMIN+XMAX)/5,3*(YMIN+YMAX)/4-30,rgb16(255,255,255));
- grx_line(XMIN,(YMIN+YMAX)/2-70,(XMIN+XMAX)/10,(YMIN+YMAX)/2-70,rgb16(255,255,255));
- grx_line((XMIN+XMAX)/10,(YMIN+YMAX)/2-70,(XMIN+XMAX)/10,(YMIN+YMAX)/2+70,rgb16(255,255,255));
- grx_line(XMIN,(YMIN+YMAX)/2+70,(XMIN+XMAX)/10,(YMIN+YMAX)/2+70,rgb16(255,255,255));
- grx_line(4*(XMIN+XMAX)/5,(YMIN+YMAX)/4+30,XMAX,(YMIN+YMAX)/4+30,rgb16(255,255,255));
- grx_line(4*(XMIN+XMAX)/5,(YMIN+YMAX)/4+30,4*(XMIN+XMAX)/5,3*(YMIN+YMAX)/4-30,rgb16(255,255,255));
- grx_line(4*(XMIN+XMAX)/5,3*(YMIN+YMAX)/4-30,XMAX,3*(YMIN+YMAX)/4-30,rgb16(255,255,255));
- grx_line(9*(XMIN+XMAX)/10,(YMIN+YMAX)/2-70,XMAX,(YMIN+YMAX)/2-70,rgb16(255,255,255));
- grx_line(9*(XMIN+XMAX)/10,(YMIN+YMAX)/2-70,9*(XMIN+XMAX)/10,(YMIN+YMAX)/2+70,rgb16(255,255,255));
- grx_line(9*(XMIN+XMAX)/10,(YMIN+YMAX)/2+70,XMAX,(YMIN+YMAX)/2+70,rgb16(255,255,255));
- grx_line(XMIN+1,(YMIN+YMAX)/2-50,XMIN+1,(YMIN+YMAX)/2+50,rgb16(100,100,100));
- grx_line(XMAX-1,(YMIN+YMAX)/2-50,XMAX-1,(YMIN+YMAX)/2+50,rgb16(100,100,100));
- grx_box(XMIN,(YMIN+YMAX)/2-50,XMIN+2,(YMIN+YMAX)/2+50,rgb16(50,0,50));
- grx_box(XMAX-2,(YMIN+YMAX)/2-50,XMAX,(YMIN+YMAX)/2+50,rgb16(50,0,50));
- }
- }
- else
- if(c==RLEFT)
- DIRDRAW(x,y,((unsigned char)runup_data[i*27+j]));
- if(c==RLEFT+1)
- DIRDRAW(x,y,((unsigned char)runup2_data[i*27+j]));
- if(c==RDOWN)
- DIRDRAW(x,y,((unsigned char)rundes2_data[i*27+j]));
- if(c==RDOWN+1)
- DIRDRAW(x,y,((unsigned char)rundes_data[i*27+j]));
- if(c==RUP)
- DIRDRAW(x,y,((unsigned char)runleft2_data[i*27+j]));
- if(c==RUP+1)
- DIRDRAW(x,y,((unsigned char)runleft_data[i*27+j]));
- if(c==RRIGHT)
- DIRDRAW(x,y,((unsigned char)rundown2_data[i*27+j]));
- if(c==RRIGHT+1)
- DIRDRAW(x,y,((unsigned char)rundown_data[i*27+j]));
- if(c==RRUP)
- DIRDRAW(x,y,((unsigned char)runld2_data[i*27+j]));
- if(c==RRUP+1)
- DIRDRAW(x,y,((unsigned char)runld_data[i*27+j]));
- if(c==RLUP)
- DIRDRAW(x,y,((unsigned char)runlu2_data[i*27+j]));
- if(c==RLUP+1)
- DIRDRAW(x,y,((unsigned char)runlu_data[i*27+j]));
- if(c==RLDW)
- DIRDRAW(x,y,((unsigned char)runru2_data[i*27+j]));
- if(c==RLDW+1)
- DIRDRAW(x,y,((unsigned char)runru_data[i*27+j]));
- if(c==RRDW)
- DIRDRAW(x,y,((unsigned char)runrd2_data[i*27+j]));
- if(c==RRDW+1)
- DIRDRAW(x,y,((unsigned char)runrd_data[i*27+j]));
-/**********************************************************************/
- if(c==RLEFT2)
- DIRDRAW(x,y,((unsigned char)B_runup_data[i*27+j]));
- if(c==RLEFT2+1)
- DIRDRAW(x,y,((unsigned char)B_runup2_data[i*27+j]));
- if(c==RDOWN2)
- DIRDRAW(x,y,((unsigned char)B_rundes2_data[i*27+j]));
- if(c==RDOWN2+1)
- DIRDRAW(x,y,((unsigned char)B_rundes_data[i*27+j]));
- if(c==RUP2)
- DIRDRAW(x,y,((unsigned char)B_runleft2_data[i*27+j]));
- if(c==RUP2+1)
- DIRDRAW(x,y,((unsigned char)B_runleft_data[i*27+j]));
- if(c==RRIGHT2)
- DIRDRAW(x,y,((unsigned char)B_rundown2_data[i*27+j]));
- if(c==RRIGHT2+1)
- DIRDRAW(x,y,((unsigned char)B_rundown_data[i*27+j]));
- if(c==RRUP2)
- DIRDRAW(x,y,((unsigned char)B_runld2_data[i*27+j]));
- if(c==RRUP2+1)
- DIRDRAW(x,y,((unsigned char)B_runld_data[i*27+j]));
- if(c==RLUP2)
- DIRDRAW(x,y,((unsigned char)B_runlu2_data[i*27+j]));
- if(c==RLUP2+1)
- DIRDRAW(x,y,((unsigned char)B_runlu_data[i*27+j]));
- if(c==RLDW2)
- DIRDRAW(x,y,((unsigned char)B_runru2_data[i*27+j]));
- if(c==RLDW2+1)
- DIRDRAW(x,y,((unsigned char)B_runru_data[i*27+j]));
- if(c==RRDW2)
- DIRDRAW(x,y,((unsigned char)B_runrd2_data[i*27+j]));
- if(c==RRDW2+1)
- DIRDRAW(x,y,((unsigned char)B_runrd_data[i*27+j]));
- sem_post(&mutex);
-}
-/*--------------------------------------------------------------*/
-void draw_ball(int c)
-{
- sem_wait(&mutex);
- if(c==0)
- grx_box(xob, yob,xob+5,yob+5,SFONDO);
- else grx_putimage(xb, yb,xb+5,yb+5,pallone);
- sem_post(&mutex);
-}
-void draw_port(int c,int p,int yp,int xp)
-{
- int i,j;
- sem_wait(&mutex);
- if (c==0){
- if(p==0){
- /*ridisegna l'area*/
- grx_box(xp,yp-15,xp+30,yp+25,SFONDO);
- grx_line(XMIN,(YMIN+YMAX)/4+30,(XMIN+XMAX)/5,(YMIN+YMAX)/4+30,rgb16(255,255,255));
- grx_line((XMIN+XMAX)/5,(YMIN+YMAX)/4+30,(XMIN+XMAX)/5,3*(YMIN+YMAX)/4-30,rgb16(255,255,255));
- grx_line(XMIN,3*(YMIN+YMAX)/4-30,(XMIN+XMAX)/5,3*(YMIN+YMAX)/4-30,rgb16(255,255,255));
- grx_line(XMIN,(YMIN+YMAX)/2-70,(XMIN+XMAX)/10,(YMIN+YMAX)/2-70,rgb16(255,255,255));
- grx_line((XMIN+XMAX)/10,(YMIN+YMAX)/2-70,(XMIN+XMAX)/10,(YMIN+YMAX)/2+70,rgb16(255,255,255));
- grx_line(XMIN,(YMIN+YMAX)/2+70,(XMIN+XMAX)/10,(YMIN+YMAX)/2+70,rgb16(255,255,255));
- grx_box(XMIN,(YMIN+YMAX)/2-50,XMIN+2,(YMIN+YMAX)/2+50,rgb16(50,0,50));
- }
- if(p==1){
- /*ridisegna l'area*/
- grx_box(xp,yp-15,xp+27,yp+25,SFONDO);
- grx_line(4*(XMIN+XMAX)/5,(YMIN+YMAX)/4+30,XMAX,(YMIN+YMAX)/4+30,rgb16(255,255,255));
- grx_line(4*(XMIN+XMAX)/5,(YMIN+YMAX)/4+30,4*(XMIN+XMAX)/5,3*(YMIN+YMAX)/4-30,rgb16(255,255,255));
- grx_line(4*(XMIN+XMAX)/5,3*(YMIN+YMAX)/4-30,XMAX,3*(YMIN+YMAX)/4-30,rgb16(255,255,255));
- grx_line(9*(XMIN+XMAX)/10,(YMIN+YMAX)/2-70,XMAX,(YMIN+YMAX)/2-70,rgb16(255,255,255));
- grx_line(9*(XMIN+XMAX)/10,(YMIN+YMAX)/2-70,9*(XMIN+XMAX)/10,(YMIN+YMAX)/2+70,rgb16(255,255,255));
- grx_line(9*(XMIN+XMAX)/10,(YMIN+YMAX)/2+70,XMAX,(YMIN+YMAX)/2+70,rgb16(255,255,255));
- grx_box(XMAX-2,(YMIN+YMAX)/2-50,XMAX,(YMIN+YMAX)/2+50,rgb16(50,0,50));
- }
- }
- else{
- if(p==0)
- DIRDRAW(xp,yp,((unsigned char)portsx_data[i*27+j]));
- if(p==1)
- DIRDRAW(xp,yp,((unsigned char)portdx_data[i*27+j]));
- }
- sem_post(&mutex);
-}
-void init_ball(){
- HARD_TASK_MODEL m_ball;
- hard_task_default_model(m_ball);
- hard_task_def_ctrl_jet (m_ball);
- hard_task_def_arg (m_ball, (void *)0);
- hard_task_def_wcet (m_ball, BALL_WCET);
- hard_task_def_mit (m_ball, PERIOD_BALL);
- hard_task_def_group (m_ball, GROUP_BALL);
- hard_task_def_usemath (m_ball);
- pid_ball = task_create("ball", ball, &m_ball, NULL);
- if (pid_ball == NIL) {
- grx_close();
- perror("Could not create task <ball>");
- sys_abort(1);
- }
-
- task_activate(pid_ball);
-}
-void init_calc(){
- HARD_TASK_MODEL m_calc;
- int i;
- disegna_campo();
- for(i=0;i<MAX_P;i++){
- hard_task_default_model(m_calc);
- hard_task_def_ctrl_jet (m_calc);
- hard_task_def_arg (m_calc, (void *)i);
- hard_task_def_wcet (m_calc, CALC_WCET);
- hard_task_def_mit (m_calc, PERIOD_CALC);
- hard_task_def_group (m_calc, GROUP_PLAY);
- hard_task_def_usemath (m_calc);
- pid_calc = task_create("calc", calc, &m_calc, NULL);
- if (pid_calc == NIL) {
- grx_close();
- perror("Could not create task <calc>");
- sys_abort(1);
- }
- task_activate(pid_calc);
- }
- }
-void act_goal(){
-
-
- SOFT_TASK_MODEL m_goal;
- soft_task_default_model(m_goal);
- soft_task_def_arg (m_goal,(void*)0);
- soft_task_def_met (m_goal, 1000);
- soft_task_def_level (m_goal,1);
- soft_task_def_ctrl_jet (m_goal);
- soft_task_def_period (m_goal, 1200000);
- soft_task_def_group (m_goal, GROUP_SOFT);
- soft_task_def_usemath (m_goal);
- soft_task_def_aperiodic(m_goal);
-
- pid_gol = task_create("gol", gol, &m_goal, NULL);
- if (pid_gol == NIL) {
- grx_close();
- perror("Could not create task <port>");
- sys_abort(1);
- }
- task_activate(pid_gol);
- }
-void init_portiere(){
- HARD_TASK_MODEL m_port;
- int g;
- for(g=0;g<2;g++){
- hard_task_default_model(m_port);
- hard_task_def_arg (m_port, (void *)g);
- hard_task_def_wcet (m_port, PORT_WCET);
- hard_task_def_mit (m_port, PERIOD_PORT);
- hard_task_def_group (m_port, GROUP_SOFT);
- hard_task_def_usemath (m_port);
- pid_port = task_create("portiere", portiere, &m_port, NULL);
- if (pid_port == NIL) {
- grx_close();
- perror("Could not create task <port>");
- sys_abort(1);
- }
- task_activate(pid_port);
- }
-
- }
-void draw_goal(){
- int p,z;
- char *m;
- char modo;
- char *o;
- char azione;
- m = cab_reserve(cbi[0]);
- modo = NO_BALL_MODE;
- *m = modo;
- cab_putmes(cbi[0],m);
- o = cab_getmes(cbi[3]);
- azione = *o;
- cab_unget(cbi[3],o);
-
- /*scritta GOAL!!*/
- if(azione == GOAL_ACT){
- for(p=0;p<schermo_width;p++)
- for(z=0;z<schermo_height;z++){
- grx_plot(250+p,0+z,rgb16(stadio_cmap[(unsigned char)goal1_data[z*schermo_width+p]][0],stadio_cmap[(unsigned char)schermo_data[z*schermo_width+p]][1],stadio_cmap[(unsigned char)schermo_data[z*schermo_width+p]][2]));
- }
- o = cab_reserve(cbi[3]);
- azione = 0;
- *o = azione;
- cab_putmes(cbi[3],o);
- }
-
- /*risistema il menu sul tabellone*/
- if (azione == MENU_ACT){
- for(p=0;p<schermo_width;p++)
- for(z=0;z<schermo_height;z++){
- grx_plot(250+p,0+z,rgb16(stadio_cmap[(unsigned char)schermo_data[z*schermo_width+p]][0],stadio_cmap[(unsigned char)schermo_data[z*schermo_width+p]][1],stadio_cmap[(unsigned char)schermo_data[z*schermo_width+p]][2]));
- }
- o = cab_reserve(cbi[3]);
- azione = NO_ACT;
- *o = azione;
- cab_putmes(cbi[3],o);
- grx_text(" Simulation of Soccer", XMIN+260, YMENU+10, rgb16(255,255,255), rgb16(0,0,0));
- grx_text(" W rigore bianchi, E rigore blue", XMIN+260, YMENU+20, rgb16(255,255,255), rgb16(0,0,0));
- grx_text(" SPACE crea squadre, K kill all ", XMIN+260, YMENU+30, rgb16(255,255,255), rgb16(0,0,0));
- grx_text(" ESC Return to MS-DOS ", XMIN+260, YMENU+40, 12, rgb16(255,255,255));
- }
-}
-
-/*calcola la y del portiere in base alla yi in ingresso*/
-int yportiere(int yi,int yf){
- int speedy =3;
- int dy=0;
- int yp;
- /*Se sto per raggiungere la palla rallento*/
- if(abs(yi-yf)<VEL) speedy=1;
- /*se raggiungo la palla mi fermo*/
- if(yi==yf)dy=0;
- /*se palla in basso*/
- if(yi>yf) dy= speedy;
- /*se palla in alto*/
- if(yi<yf) dy=-speedy;
- yp =yf+dy;
- return(yp);
-}
-/*calcola la x del portiere in base alla xi in ingresso*/
-int xportiere(int xi, int xf){
- int speedx=3;
- int dx=0;
- int xp;
- if(abs(xi-xf)<VEL) speedx=1;
- if(xi==xf)dx=0;
- if(xi>xf) dx= speedx;
- if(xi<xf) dx=-speedx;
- xp = xf +dx;
- return(xp);
-}
-/*disegna il campo di gioco*/
-void disegna_campo(){
- //grx_box(0,0,ORI_RES,VER_RES,0);
- grx_box(XMIN, YMIN, XMAX, YMAX, SFONDO);
- grx_rect(XMIN+1, YMIN+1, XMAX-1, YMAX-1, rgb16(255,255,255));
- grx_line(((XMIN+XMAX)/2),YMIN,((XMIN+XMAX)/2),YMAX-1,rgb16(255,255,255));
- grx_circle((XMIN+XMAX)/2,(YMIN+YMAX)/2,54,rgb16(255,255,255));
- grx_rect(XMIN,(YMIN+YMAX)/4+30,(XMIN+XMAX)/5,3*(YMIN+YMAX)/4-30,rgb16(255,255,255));
- grx_rect(4*(XMIN+XMAX)/5,(YMIN+YMAX)/4+30,XMAX,3*(YMIN+YMAX)/4-30,rgb16(255,255,255));
- grx_rect(XMIN,(YMIN+YMAX)/2-70,(XMIN+XMAX)/10,(YMIN+YMAX)/2+70,rgb16(255,255,255));
- grx_rect(9*(XMIN+XMAX)/10,(YMIN+YMAX)/2-70,XMAX,(YMIN+YMAX)/2+70,rgb16(255,255,255));
- grx_box(XMIN,(YMIN+YMAX)/2-50,XMIN+2,(YMIN+YMAX)/2+50,rgb16(50,0,50));
- grx_box(XMAX-2,(YMIN+YMAX)/2-50,XMAX,(YMIN+YMAX)/2+50,rgb16(50,0,50));
-}
-void init_position(int num,int *ox,int *oy)
-{
- if(num<5){
- pos_calc[num].x = *ox = initial_calc_position[num].x+35;
- pos_calc[num].y = *oy = initial_calc_position[num].y;
- }
- if(num==2){
- pos_calc[num].x = *ox = initial_calc_position[num].x+100;
- pos_calc[num].y = *oy = initial_calc_position[num].y;
- }
- if(num>4){
- pos_calc[num].x = *ox = initial_calc_position[num-5].x;
- pos_calc[num].y = *oy = initial_calc_position[num-5].y+35;
- }
- if(num==7){
- pos_calc[num].x = *ox = initial_calc_position[num-5].x-100;
- pos_calc[num].y = *oy = initial_calc_position[num-5].y;
- }
-
-}
-void init_calc_area(int num,int *xmin,int *xmax,int *ymin,int *ymax){
-
-
- switch(num)
- {
- case 0: /*attaccante bianchi*/
- case 5: /*difensore blu*/
- {
- *xmin = XMIN;
- *ymin = YMIN;
- *xmax = 255;
- *ymax = 305;
- }
- break;
- case 1: /*attaccante bianchi*/
- case 6: /*difensore blu*/
- {
- *xmin = XMIN;
- *ymin = 295;
- *xmax = 255;
- *ymax = YMAX;
- }
- break;
- case 2: /*centrocampisti*/
- case 7:
- {
- *xmin = 255;
- *ymin = YMIN;
- *xmax = 525;
- *ymax = YMAX;
- } break;
- case 3: /*attaccante blu*/
- case 8: /*difensore bianco*/
- {
- *xmin = 525;
- *ymin = YMIN;
- *xmax = XMAX;
- *ymax = 305;
- }
- break;
- case 4: /*attaccante blu*/
- case 9: /*difensore bianco*/
- {
- *xmin = 505;
- *ymin = 305;
- *xmax = XMAX;
- *ymax = YMAX;
- }
- break;
- default:
- break;
- }
-}
-void get_target(int modo,int i,struct target * obj,int x_max,int x_min,int y_max,int y_min){
-
-
-
- if((modo==PENALTY_MODE_WHITE)||(modo==PENALTY_MODE_BLUE)){
-
-
-
- if((i<5)){
- obj->x = (XMAX)-100-50*i;
- if(pos_calc[i].y>(YMAX+YMIN)/2)
- obj->y = YMAX-60;
- if(pos_calc[i].y<(YMAX+YMIN)/2)
- obj->y = YMIN+60;
- if(modo==PENALTY_MODE_WHITE){
- if((i==2)){
- obj->x = xb;
- obj->y = yb;
- }
- }
- }
- if((i>4)){
- obj->x = (XMIN)+100+50*i;
- if(pos_calc[i].y>(YMAX+YMIN)/2)
- obj->y = YMAX-60;
- if(pos_calc[i].y<(YMAX+YMIN)/2)
- obj->y = YMIN+60;
- if(modo==PENALTY_MODE_BLUE){
- if((i==7)){
- obj->x = xb;
- obj->y = yb;
- }
- }
-
- }
- }
-
- if(modo==NO_BALL_MODE)
- {
-
- /*Valutazione se la palla sia in una zona di interesse per il */
- /*calciatore */
-
- if((xb>x_max)||(xb<x_min)||(yb>y_max)||(yb<y_min))
- {
- if(i<5)
- {
- obj->x=initial_calc_position[i].x;
- obj->y=initial_calc_position[i].y;
- }
- if(i>4)
- {
- obj->x=initial_calc_position[i-5].x;
- obj->y=initial_calc_position[i-5].y;
- }
- }
- else
- {
- obj->x=xb;
- obj->y=yb;
- }
- }
-
-
-
-
-}
-int get_direction(int x,int y,int x2,int y2){
-
-int ang=0;
- if((abs(x-x2) !=0)){
- if((x>x2)&&(y<=y2))
- ang = 180+
- atan((float)abs(y-y2)/
- (float)abs(x-x2))*
- 180/PI;
- if((x<x2)&&(y<y2))
- ang = 360-
- atan((float)abs(y-y2)/
- (float)abs(x-x2))*
- 180/PI;
- if((x<x2)&&(y>y2))
- ang =
- atan((float)abs(y-y2)/
- (float)abs(x-x2))*
- 180/PI;
- if((x>x2)&&(y>y2))
- ang = 180-
- atan((float)abs(y-y2)/
- (float)abs(x-x2))*
- 180/PI;
- }
-
-return ang;
-
-}
-
-void collision_detection(int i){
-
-int j;
-
-
-for(j=0;j<MAX_P+2;j++){
-
- if(i!=j){
- if(pos_calc[i].x<pos_calc[j].x+27 && pos_calc[i].x>pos_calc[j].x-27
- && pos_calc[i].y<pos_calc[j].y && pos_calc[i].y>pos_calc[j].y-27)
- {
- pos_calc[i].y=pos_calc[j].y-27;
- }
- if(pos_calc[i].x<pos_calc[j].x && pos_calc[i].x>pos_calc[j].x-27
- && pos_calc[i].y<pos_calc[j].y+27 && pos_calc[i].y>pos_calc[j].y-27)
- {
- pos_calc[i].x=pos_calc[j].x-27;
- }
- if(pos_calc[i].x<pos_calc[j].x+27 && pos_calc[i].x>pos_calc[j].x-27
- && pos_calc[i].y<pos_calc[j].y+27 && pos_calc[i].y>pos_calc[j].y)
- {
- pos_calc[i].y=pos_calc[j].y+27;
- }
- if(pos_calc[i].x<pos_calc[j].x+27 && pos_calc[i].x>pos_calc[j].x
- && pos_calc[i].y<pos_calc[j].y+27 && pos_calc[i].y>pos_calc[j].y)
- {
- pos_calc[i].x=pos_calc[j].x+27;
- }
- }
- }
-
- /*Per impedire un calciatore esca dal campo*/
-
- if(pos_calc[i].x>=XMAX-(pos_calc[i].dx+1)) pos_calc[i].x-=(pos_calc[i].dx+1);
- if(pos_calc[i].x<=XMIN+(pos_calc[i].dx+1)) pos_calc[i].x+=(pos_calc[i].dx+1);
- if(pos_calc[i].y>=YMAX-(pos_calc[i].dy+1)) pos_calc[i].y-=(pos_calc[i].dy+1);
- if(pos_calc[i].y<=YMIN+(pos_calc[i].dy+1)) pos_calc[i].y+=(pos_calc[i].dy+1);
-}
-
-int goal_behaviour(int flag){
-char *o;
-char azione;
-
- if (flag !=0) {
- flag++;
- yb =(YMAX+YMIN)/2;
- xb =(XMIN+XMAX)/2;
- }
- if (flag==20){
- yb =(YMAX+YMIN)/2;
- xb =(XMIN+XMAX)/2;
- /*seleziono l'azione da compiere sul tabellone*/
- o = cab_reserve(cbi[3]);
- azione = GOAL_ACT; /*scritta GOAL!!*/
- *o = azione;
- cab_putmes(cbi[3],o);
- /*carico il task gol*/
- act_goal();
- }
- if (flag==65){
- o = cab_reserve(cbi[3]);
- azione = MENU_ACT; /*sistema il menu su tabellone*/
- *o = azione;
- cab_putmes(cbi[3],o);
- /*carico il task gol*/
- act_goal();
- }
-
- return(flag);
-}
-
Index: start/soccer/initfile.c
===================================================================
--- start/soccer/initfile.c (revision 1087)
+++ start/soccer/initfile.c (nonexistent)
@@ -1,120 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- ------------
- CVS : $Id: initfile.c,v 1.1.1.1 2002-09-02 09:37:44 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:44 $
- ------------
-
- System initialization file
-
- This file contains the 2 functions needed to initialize the system.
-
- These functions register the following levels:
-
- an EDF (Earliest Deadline First) level
- a RR (Round Robin) level
- a CBS (Costant Bandwidth Server) level
- a Dummy level
-
- It can accept these task models:
-
- HARD_TASK_MODEL (wcet+mit) at level 0
- SOFT_TASK_MODEL (met, period) at level 1
- NRT_TASK_MODEL at level 2
-
- This file is similar to the configuration of kernel/init/hartik3.c
-
- TICK is set to 0 (one-shot timer is used)
-*/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-#include "modules/rr.h"
-#include "modules/dummy.h"
-
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "modules/cabs.h"
-
-#include "drivers/keyb.h"
-
-
-/*+ sysyem tick in us +*/
-#define TICK 0
-
-/*+ RR tick in us +*/
-#define RRTICK 10000
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- EDF_register_level(EDF_ENABLE_ALL);
- CBS_register_level(CBS_ENABLE_ALL, 0);
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- dummy_register_level();
-
- SEM_register_module();
-
- CABS_register_module();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- KEYB_PARMS kparms = BASE_KEYB;
-
- HARTPORT_init();
-
- keyb_def_ctrlC(kparms, NULL);
- keyb_def_map(kparms,itaMap);
- KEYB_init(&kparms);
-
- __call_main__(mb);
-
- return (void *)0;
-}
-
Index: start/soccer/calc.h
===================================================================
--- start/soccer/calc.h (revision 1087)
+++ start/soccer/calc.h (nonexistent)
@@ -1,1017 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- ------------
- CVS : $Id: calc.h,v 1.1.1.1 2002-09-02 09:37:44 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:44 $
- ------------
-*/
-
-/*
- * Copyright (C) 2000 Merli Andrea and Zucchetti Alessandro
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/* GIMP header image file format (INDEXED): /mnt/disk/shark/base/images/runup//runup.h */
-
-//static unsigned int runup_width = 27;
-//static unsigned int runup_height = 27;
-
-
-/*Macro che disegan un calciatore che corre*/
-
-#define DIRDRAW(X,Y,D) \
- for(i=0;i<27;i++)\
- for(j=0;j<27;j++)\
- grx_plot(X+i,Y+j,rgb16(cmap[D][0],cmap[D][1],cmap[D][2]));\
- /* sprintf(a,"%d",f);\
- grx_text(a,X+30,Y+30, rgb16(255,255,255), rgb16(0,0,0));*/
-/*Macro che calcola i parametri di draw_calc*/
-#define DIREZ(A,C,G,S,F,X,Y) \
- if(col<12){\
- if( (A<=S)&&(A>=G)){ \
- if(C<=4) { \
- draw_calc(X, Y, F,i); \
- C++; \
- } \
- else if(C>4){ \
- draw_calc(X,Y,F+1,i); \
- C++; \
- if(C==8)C=0; \
- } \
- }\
- }
-
-/* Call this macro repeatedly. After each use, the pixel data can be extracted */
-
-#define HEADER_PIXEL(data,pixel) {\
-pixel[0] = runup_cmap[(unsigned char)data[0]][0]; \
-pixel[1] = runup_data_cmap[(unsigned char)data[0]][1]; \
-pixel[2] = runup_data_cmap[(unsigned char)data[0]][2]; \
-data ++; }
-
-static char cmap[256][3] = {
- { 0, 0, 0},
- { 0, 0, 64},
- { 0, 0,128},
- { 0, 0,255},
- { 0, 32, 0},
- { 0, 32, 64},
- { 0, 32,128},
- { 0, 32,255},
- { 0, 64, 0},
- { 0, 64, 64},
- { 0, 64,128},
- { 0, 64,255},
- { 0, 96, 0},
- { 0, 96, 64},
- { 0, 96,128},
- { 0, 96,255},
- { 0,128, 0},
- { 0,128, 64},
- { 0,128,128},
- { 0,128,255},
- { 0,160, 0},
- { 0,160, 64},
- { 0,160,128},
- { 0,160,255},
- { 0,192, 0},
- { 0,192, 64},
- { 0,192,128},
- { 0,192,255},
- { 0,255, 0},
- { 0,255, 64},
- { 0,255,128},
- { 0,255,255},
- { 32, 0, 0},
- { 32, 0, 64},
- { 32, 0,128},
- { 32, 0,255},
- { 32, 32, 0},
- { 32, 32, 64},
- { 32, 32,128},
- { 32, 32,255},
- { 32, 64, 0},
- { 32, 64, 64},
- { 32, 64,128},
- { 32, 64,255},
- { 32, 96, 0},
- { 32, 96, 64},
- { 32, 96,128},
- { 32, 96,255},
- { 32,128, 0},
- { 32,128, 64},
- { 32,128,128},
- { 32,128,255},
- { 32,160, 0},
- { 32,160, 64},
- { 32,160,128},
- { 32,160,255},
- { 32,192, 0},
- { 32,192, 64},
- { 32,192,128},
- { 32,192,255},
- { 32,255, 0},
- { 32,255, 64},
- { 32,255,128},
- { 32,255,255},
- { 64, 0, 0},
- { 64, 0, 64},
- { 64, 0,128},
- { 64, 0,255},
- { 64, 32, 0},
- { 64, 32, 64},
- { 64, 32,128},
- { 64, 32,255},
- { 64, 64, 0},
- { 64, 64, 64},
- { 64, 64,128},
- { 64, 64,255},
- { 64, 96, 0},
- { 64, 96, 64},
- { 64, 96,128},
- { 64, 96,255},
- { 64,128, 0},
- { 64,128, 64},
- { 64,128,128},
- { 64,128,255},
- { 64,160, 0},
- { 64,160, 64},
- { 64,160,128},
- { 64,160,255},
- { 64,192, 0},
- { 64,192, 64},
- { 64,192,128},
- { 64,192,255},
- { 64,255, 0},
- { 64,255, 64},
- { 64,255,128},
- { 64,255,255},
- { 96, 0, 0},
- { 96, 0, 64},
- { 96, 0,128},
- { 96, 0,255},
- { 96, 32, 0},
- { 96, 32, 64},
- { 96, 32,128},
- { 96, 32,255},
- { 96, 64, 0},
- { 96, 64, 64},
- { 96, 64,128},
- { 96, 64,255},
- { 96, 96, 0},
- { 96, 96, 64},
- { 96, 96,128},
- { 96, 96,255},
- { 96,128, 0},
- { 96,128, 64},
- { 96,128,128},
- { 96,128,255},
- { 96,160, 0},
- { 96,160, 64},
- { 96,160,128},
- { 96,160,255},
- { 96,192, 0},
- { 96,192, 64},
- { 96,192,128},
- { 96,192,255},
- { 96,255, 0},
- { 96,255, 64},
- { 96,255,128},
- { 96,255,255},
- {128, 0, 0},
- {128, 0, 64},
- {128, 0,128},
- {128, 0,255},
- {128, 32, 0},
- {128, 32, 64},
- {128, 32,128},
- {128, 32,255},
- {128, 64, 0},
- {128, 64, 64},
- {128, 64,128},
- {128, 64,255},
- {128, 96, 0},
- {128, 96, 64},
- {128, 96,128},
- {128, 96,255},
- {128,128, 0},
- {128,128, 64},
- {128,128,128},
- {128,128,255},
- {128,160, 0},
- {128,160, 64},
- {128,160,128},
- {128,160,255},
- {128,192, 0},
- {128,192, 64},
- {128,192,128},
- {128,192,255},
- {128,255, 0},
- {128,255, 64},
- {128,255,128},
- {128,255,255},
- {160, 0, 0},
- {160, 0, 64},
- {160, 0,128},
- {160, 0,255},
- {160, 32, 0},
- {160, 32, 64},
- {160, 32,128},
- {160, 32,255},
- {160, 64, 0},
- {160, 64, 64},
- {160, 64,128},
- {160, 64,255},
- {160, 96, 0},
- {160, 96, 64},
- {160, 96,128},
- {160, 96,255},
- {160,128, 0},
- {160,128, 64},
- {160,128,128},
- {160,128,255},
- {160,160, 0},
- {160,160, 64},
- {160,160,128},
- {160,160,255},
- {160,192, 0},
- {160,192, 64},
- {160,192,128},
- {160,192,255},
- {160,255, 0},
- {160,255, 64},
- {160,255,128},
- {160,255,255},
- {192, 0, 0},
- {192, 0, 64},
- {192, 0,128},
- {192, 0,255},
- {192, 32, 0},
- {192, 32, 64},
- {192, 32,128},
- {192, 32,255},
- {192, 64, 0},
- {192, 64, 64},
- {192, 64,128},
- {192, 64,255},
- {192, 96, 0},
- {192, 96, 64},
- {192, 96,128},
- {192, 96,255},
- {192,128, 0},
- {192,128, 64},
- {192,128,128},
- {192,128,255},
- {192,160, 0},
- {192,160, 64},
- {192,160,128},
- {192,160,255},
- {192,192, 0},
- {192,192, 64},
- {192,192,128},
- {192,192,255},
- {192,255, 0},
- {192,255, 64},
- {192,255,128},
- {192,255,255},
- {255, 0, 0},
- {255, 0, 64},
- {255, 0,128},
- {255, 0,255},
- {255, 32, 0},
- {255, 32, 64},
- {255, 32,128},
- {255, 32,255},
- {255, 64, 0},
- {255, 64, 64},
- {255, 64,128},
- {255, 64,255},
- {255, 96, 0},
- {255, 96, 64},
- {255, 96,128},
- {255, 96,255},
- {255,128, 0},
- {255,128, 64},
- {255,128,128},
- {255,128,255},
- {255,160, 0},
- {255,160, 64},
- {255,160,128},
- {255,160,255},
- {255,192, 0},
- {255,192, 64},
- {255,192,128},
- {255,192,255},
- {255,255, 0},
- {255,255, 64},
- {255,255,128},
- {255,255,255}
- };
-static char runup_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16, 0, 0, 0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16, 0, 0, 0, 0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16, 0, 0,255, 0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16, 0, 0,16,16,16,16, 0,255, 0, 0, 0, 0, 0,16,16,16,16,16,16,16,16,16,16,16,
- 16,16, 0,255,233, 0,16,16,16,16, 0,255,233,233,233, 0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16, 0,233, 0, 0, 0, 0, 0,16, 0,233,233,233,233, 0,233, 0,16,16,16,16,16,16,16,16,16,
- 16,16, 0, 0,255,255,255,255,255, 0, 0,233, 0,233, 0,233, 0, 0, 0, 0, 0,16,16,16,16,16,16,
- 16,16, 0,255,255,255,255,255,255, 0, 0, 0,233, 0,233, 0,233, 0,255,255, 0, 0, 0,16,16,16,16,
- 16,16,16, 0,255,255,255,255,255, 0, 0,233, 0,233, 0, 0, 0, 0,255,255,255,255,255, 0,16,16,16,
- 16,16,16, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0,233, 0, 0, 0,255,255,255,255,255,255, 0,16,16,
- 16,16,16,16,16, 0, 0, 0, 0,255, 0, 0,233, 0, 0, 0, 0,255,255,255,255,255,255,255, 0, 0,16,
- 16,16,16,16,16,16,16,16, 0, 0,255, 0, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0,233, 0,16,
- 16,16,16,16,16,16,16,16,16, 0, 0,255,255,255,255, 0,255, 0, 0,16,16, 0, 0,233, 0, 0,16,
- 16,16,16,16,16,16,16,16,16,16, 0, 0, 0,255, 0,255, 0, 0, 0,233,16,16, 0, 0, 0,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16, 0, 0, 0, 0, 0,233,233, 0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0,255,255,255, 0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0,255,255, 0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0,255, 0, 0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0, 0, 0, 0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0, 0, 0, 0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0, 0, 0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
- };
-static char runup2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,255,0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,255,0,16,16,16,16,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,233,233,233,255, 0,16,16,16,16,0,233,255,0,16,16,
- 16,16,16,16,16,16,16,16,16,0,233,0,233,233,233,233, 0,16,0,0,0,0,0,233,0,16,16,
- 16,16,16,16,16,16,0,0,0,0,0,233,0,233,0,233,0,0,255,255,255,255,255,0,0,16,16,
- 16,16,16,16,0,0,0,255,255,0,233,0,233,0,233,0,0,0,255,255,255,255,255,255,0,16,16,
- 16,16,16,0,255,255,255,255,255,0,0,0,0,233,0,233,0,0,255,255,255,255,255,0,16,16,16,
- 16,16,0,255,255,255,255,255,255,0,0,0,233,0,0,0,0,255,255,255,0,0,0,0,16,16,16,
- 16,0,0,255,255,255,255,255,255,255,0,0,0,0,233,0,0,255,0,0,0,0,16,16,16,16,16,
- 16,0,233,0,0,0,0,0,0,255,255,0,0,0,0,0, 255,0,0,16,16,16,16,16,16,16,16,
- 16,0,0,233,0,0,16,16,0,0,255,0,255,255,255,255, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,0,0,0,16,16,233,0,0,0,255,0,255,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,233,233,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,255,255,255,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,255,255,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,255,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
- };
-static char runru_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,4,77,0,12,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,4,100,246,169,8,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,37,68,68,68,8,16,16,16,16,16,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,219,255,219,0,8,16,16,16,4,0,0,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,0,219,255,255,219,0,12,16,4,36,36,0,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,4,110,255,255,255,219,4,16,45,219,218,73,4,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,0,110,255,255,255,41,8,36,182,0,4,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,12,0,146,255,255,73,0,32,233,242,165,0,12,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,218,182,0,0,132,133,233,233,165,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,219,146,32,201,133,132,233,233,165,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,146,0,0,32,100,32,132,132,32,68,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,146,36,165,64,100,100,132,133,100,100,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,219,110,64,0,132,100,0,165,64,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,37,255,110,0,0,0,0,0,73,110,4,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,37,255,255,73,36,0,37,73,255,255,73,4,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,4,37,110,73,219,219,255,255,255,255,37,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,4,110,73,110,146,109,255,255,255,255,37,8,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,36,73,68,0,0,4,73,255,255,255,218,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,77,255,238,133,137,48,8,73,255,255,182,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,12,4,146,255,255,101,72,16,4,0,73,255,110,8,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,4,36,218,182,109,4,16,16,8,32,100,137,0,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,0,0,4,16,16,16,8,32,100,100,0,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,0,0,4,16,16,16,16,16,8,4,4,12,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,0,4,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
- };
-
- static char runru2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,8,12,12,8,12,12,8,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,12,0,0,110,182,218,37,8,4,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,4,100,137,255,255,255,255,37,73,4,16,12,12,12,12,16,16,16,12,16,16,16,16,16,16,
- 16,16,4,100,100,73,255,255,255,255,255,110,0,100,68,0,0,12,16,4,0,8,16,16,16,16,16,
- 16,16,8,32,32,0,73,255,255,255,255,73,64,100,32,165,165,0,4,73,0,0,12,16,16,16,16,
- 16,16,16,8,8,4,8,73,255,255,73,0,165,133,132,233,233,165,0,218,36,0,16,16,16,16,16,
- 16,16,16,16,16,16,48,4,109,255,37,0,0,132,132,233,233,242,182,219,36,4,16,16,16,16,16,
- 16,16,16,16,16,72,137,0,146,219,0,0,100,100,32,132, 133,233,36,45,4,16,16,16,16,16,16,
- 16,16,16,16,4,101,133,0,110,219,36,0,132,100,100,133,132,32,8,16,16,16,16,16,16,16,16,
- 16,16,16,4,109,255,238,68,73,73,73,0,0,64,32,201,0,0,41,4,12,16,16,16,16,16,16,
- 16,16,4,0,182,255,255,73,110,110,255,110,64,165,0,32,0,73,255,219,0,8,8,8,12,16,16,
- 16,4,0,0,218,146,77,36,4,37,255,255,110,36,0,146,182,255,255,255,219,0,68,169,0,16,16,
- 12,0,0,0,36,4,12,12,16,4,37,37,219,146,146,219,218,255,255,255,255,219,68,246,77,16,16,
- 16,8,0,0,4,12,16,16,16,16,8,8,0,0,0,0,0,146,110,255,255,255,68,100,4,16,16,
- 16,16,12,16,16,16,16,16,16,16,16,16,12,12,16,12,12,0,0,110,219,219,37,4,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,12,8,4,0,8,8,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,12,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
- };
-
-static char rundes_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,233,0,0,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,233,0,255,255,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,0,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,255,255,255, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,0,0,0,0,233,16,0,255,255,255, 255,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,0,255,255,233,0,0,0,255,255,255, 255,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,255,255,255,233,0,0,255,255,0,0, 0,0,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,0,0,0,0,255,0,0,255,255,0,0,0, 233,0,233,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,255,0,0,0,0,0, 0,233,0,0,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0,255,0,0,233,0, 233,0,233,233,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,255,255,0,0,0,233, 0,233,233,233,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0,255,0,233,0,0, 233,0,233,233,0,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,255,0,0,0,233, 0,233,233,255,0,255,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,255,0,0,0, 0,0,0,0,255,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,255,255,0, 0,0,16,16,0,0,0,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0,255,255, 255,255,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,255,255, 255,255,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,255, 255,255,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,255, 255,255,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,255, 255,255,0,233,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 255,0,233,255,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0,0,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-
-static char rundes2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0,0,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 255,0,233,255,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,255, 255,255,0,233,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,255, 255,255,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,255, 255,255,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,255,255, 255,255,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0,255,255, 255,255,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,255,255,0, 0,0,16,16,0,0,0,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,255,0,0,0, 0,0,0,0,255,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,255,0,0,0,233, 0,233,233,255,0,255,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0,255,0,233,0,0, 233,0,233,233,0,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,255,255,0,0,0,233, 0,233,233,233,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0,255,0,0,233,0, 233,0,233,233,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,255,0,0,0,0,0, 0,233,0,0,0,16,16,16,16,16,16,
- 16,16,16,16,0,0,0,0,255,0,0,255,255,0,0,0, 233,0,233,0,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,255,255,255,233,0,0,255,255,0,0, 0,0,0,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,0,255,255,233,0,0,0,255,255,255, 255,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,0,0,0,0,233,16,0,255,255,255, 255,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,255,255,255, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,0,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,233,0,255,255,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,233,0,0,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char runrd_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,0,4,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,0,0,4,16,16,16,16, 16,8,4,4,12,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,0,0,4,16,16,16, 8,32,100,100,0,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,4,36,218,182,109,4,16,16, 8,32,100,137,0,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,12,4,146,255,255,101,72,16, 4,0,73,255,110,8,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,77,255,238,133,137,48, 8,73,255,255,182,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,36,73,68,0,0,4, 73,255,255,255,218,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,4,110,73,110,146,109, 255,255,255,255,37,8,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,4,37,110,73,219,219,255, 255,255,255,37,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,37,255,255,73,36,0,37, 73,255,255,73,4,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,37,255,110,0,0,0,0, 0,73,110,4,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,219,110,64,0,132,100,0, 165,64,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,146,36,165,64,100,100,132, 133,100,100,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,146,0,0,32,100,32,132, 132,32,68,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,219,146,32,201,133,132,233, 233,165,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,218,182,0,0,132,133,233, 233,165,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,12,0,146,255,255,73,0,32,233,242, 165,0,12,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,0,110,255,255,255,41,8,36,182, 0,4,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,4,110,255,255,255,219,4,16,45,219, 218,73,4,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,0,219,255,255,219,0,12,16,4,36, 36,0,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,219,255,219,0,8,16,16,16,4, 0,0,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,37,68,68,68,8,16,16,16,16, 16,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,4,100,246,169,8,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,4,77,0,12,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char runrd2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,12,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,12,8,4,0,8,8,16,16,16,16,
- 16,16,12,16,16,16,16,16,16,16,16,16,12,12,16,12, 12,0,0,110,219,219,37,4,16,16,16,
- 16,8,0,0,4,12,16,16,16,16,8,8,0,0,0,0, 0,146,110,255,255,255,68,100,4,16,16,
- 12,0,0,0,36,4,12,12,16,4,37,37,219,146,146,219, 218,255,255,255,255,219,68,246,77,16,16,
- 16,4,0,0,218,146,77,36,4,37,255,255,110,36,0,146, 182,255,255,255,219,0,68,169,0,16,16,
- 16,16,4,0,182,255,255,73,110,110,255,110,64,165,0,32, 0,73,255,219,0,8,8,8,12,16,16,
- 16,16,16,4,109,255,238,68,73,73,73,0,0,64,32,201, 0,0,41,4,12,16,16,16,16,16,16,
- 16,16,16,16,4,101,133,0,110,219,36,0,132,100,100,133, 132,32,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,72,137,0,146,219,0,0,100,100,32,132, 133,233,36,45,4,16,16,16,16,16,16,
- 16,16,16,16,16,16,48,4,109,255,37,0,0,132,132,233, 233,242,182,219,36,4,16,16,16,16,16,
- 16,16,16,8,8,4,8,73,255,255,73,0,165,133,132,233, 233,165,0,218,36,0,16,16,16,16,16,
- 16,16,8,32,32,0,73,255,255,255,255,73,64,100,32,165, 165,0,4,73,0,0,12,16,16,16,16,
- 16,16,4,100,100,73,255,255,255,255,255,110,0,100,68,0, 0,12,16,4,0,8,16,16,16,16,16,
- 16,16,4,100,137,255,255,255,255,37,73,4,16,12,12,12, 12,16,16,16,12,16,16,16,16,16,16,
- 16,16,12,0,0,110,182,218,37,8,4,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,8,12,12,8,12,12,8,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char rundown_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,255,0,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,255,255,0,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,255,255,255,0,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,233,233,0,0,0,0,0,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,0,0,0,16,16,233,0,0,0,255,0,255,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,0,0,233,0,0,16,16,0,0,255,0,255,255,255,255, 0,0,16,16,16,16,16,16,16,16,16,
- 16,0,233,0,0,0,0,0,0,255,255,0,0,0,0,0, 255,0,0,16,16,16,16,16,16,16,16,
- 16,0,0,255,255,255,255,255,255,255,0,0,0,0,233,0, 0,255,0,0,0,0,16,16,16,16,16,
- 16,16,0,255,255,255,255,255,255,0,0,0,233,0,0,0, 0,255,255,255,0,0,0,0,16,16,16,
- 16,16,16,0,255,255,255,255,255,0,0,0,0,233,0,233, 0,0,255,255,255,255,255,0,16,16,16,
- 16,16,16,16,0,0,0,255,255,0,233,0,233,0,233,0, 0,0,255,255,255,255,255,255,0,16,16,
- 16,16,16,16,16,16,0,0,0,0,0,233,0,233,0,233, 0,0,255,255,255,255,255,0,0,16,16,
- 16,16,16,16,16,16,16,16,16,0,233,0,233,233,233,233, 0,16,0,0,0,0,0,233,0,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,233,233,233,255, 0,16,16,16,16,0,233,255,0,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0, 255,0,16,16,16,16,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,255, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char rundown2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,255,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,255,255,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,255,255,255,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,233,233,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,0,255,0,255,0,0,0,233,16,16,0,0,0,16,16,
- 16,16,16,16,16,16,16,16,16,0,0,255,255,255,255,0,255,0,0,16,16,0,0,233,0,0,16,
- 16,16,16,16,16,16,16,16,0,0,255,0,0,0,0,0,255,255,0,0,0,0,0,0,233,0,16,
- 16,16,16,16,16,0,0,0,0,255,0,0,233,0,0,0,0,255,255,255,255,255,255,255,0,0,16,
- 16,16,16,0,0,0,0,255,255,255,0,0,0,0,233,0,0,0,255,255,255,255,255,255,0,16,16,
- 16,16,16,0,255,255,255,255,255,0,0,233,0,233,0,0,0,0,255,255,255,255,255,0,16,16,16,
- 16,16,0,255,255,255,255,255,255,0,0,0,233,0,233,0,233,0,255,255,0,0,0,16,16,16,16,
- 16,16,0,0,255,255,255,255,255,0,0,233,0,233,0,233,0,0,0,0,0,16,16,16,16,16,16,
- 16,16,0,233,0,0,0,0,0,16,0,233,233,233,233,0,233,0,16,16,16,16,16,16,16,16,16,
- 16,16,0,255,233,0,16,16,16,16,0,255,233,233,233,0,0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,16,16,16,16,0,255,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0,255,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
- };
-
-static char runld_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 4,0,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,12,4,4,8,16,16,16,16,16,4, 0,0,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,0,100,100,32,8,16,16,16,4,0, 0,0,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,0,137,100,32,8,16,16,4,109,182, 218,36,4,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,8,110,255,73,0,4,16,72,101,255,255, 146,4,12,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,182,255,255,73,8,48,137,133,238,255, 77,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,218,255,255,255,73,4,0,0,68,73, 36,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,8,37,255,255,255,255,109,146,110,73,110, 4,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,37,255,255,255,255,219,219,73,110, 37,4,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,4,73,255,255,73,37,0,36,73,255, 255,37,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,4,110,73,0,0,0,0,0,110, 255,37,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,64,165,0,100,132,0,64, 110,219,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,100,100,133,132,100,100,64,165, 36,146,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,68,32,132,132,32,100,32,0, 0,146,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,165,233,233,132,133,201,32, 146,219,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,165,233,233,133,132,0,0, 182,218,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,12,0,165,242,233,32,0,73, 255,255,146,0,12,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,4,0,182,36,8,41,255, 255,255,110,0,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,4,73,218,219,45,16,4,219, 255,255,255,110,4,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,0,36,36,4,16,12,0, 219,255,255,219,0,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,0,0,4,16,16,16,8, 0,219,255,219,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,16,16,16,16,16,8, 68,68,68,37,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,8, 169,246,100,4,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,12, 0,77,4,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char runld2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,12,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,8,8,0,4,8,12,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,4,37,219,219,110,0,0,12,12,16,12,12,16, 16,16,16,16,16,16,16,16,12,16,16,
- 16,16,4,100,68,255,255,255,110,146,0,0,0,0,0,8, 8,16,16,16,16,12,4,0,0,8,16,
- 16,16,77,246,68,219,255,255,255,255,218,219,146,146,219,37, 37,4,16,12,12,4,36,0,0,0,12,
- 16,16,0,169,68,0,219,255,255,255,182,146,0,36,110,255, 255,37,4,36,77,146,218,0,0,4,16,
- 16,16,12,8,8,8,0,219,255,73,0,32,0,165,64,110, 255,110,110,73,255,255,182,0,4,16,16,
- 16,16,16,16,16,16,12,4,41,0,0,201,32,64,0,0, 73,73,73,68,238,255,109,4,16,16,16,
- 16,16,16,16,16,16,16,16,8,32,132,133,100,100,132,0, 36,219,110,0,133,101,4,16,16,16,16,
- 16,16,16,16,16,16,4,45,36,233,133,132,32,100,100,0, 0,219,146,0,137,72,16,16,16,16,16,
- 16,16,16,16,16,4,36,219,182,242,233,233,132,132,0,0, 37,255,109,4,48,16,16,16,16,16,16,
- 16,16,16,16,16,0,36,218,0,165,233,233,132,133,165,0, 73,255,255,73,8,4,8,8,16,16,16,
- 16,16,16,16,12,0,0,73,4,0,165,165,32,100,64,73, 255,255,255,255,73,0,32,32,8,16,16,
- 16,16,16,16,16,8,0,4,16,12,0,0,68,100,0,110, 255,255,255,255,255,73,100,100,4,16,16,
- 16,16,16,16,16,16,12,16,16,16,12,12,12,12,16,4, 73,37,255,255,255,255,137,100,4,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 4,8,37,218,182,110,0,0,12,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,8,12,12,8,12,12,8,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char runleft_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0,233,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,255,255,0,233, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,255,255,255,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,255,255,255,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0,255,255,255,0,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,255,255,255,255,0,16, 233,0,0,0,0,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,255,255,255,255,0,0, 0,233,255,255,0,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,0,0,0,255,255,0, 0,233,255,255,255,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,0,233,0,233,0,0,0,255,255, 0,0,255,0,0,0,0,16,16,16,16,
- 16,16,16,16,16,16,0,0,0,233,0,0,0,0,0,0, 255,0,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,233,233,0,233,0,233,0,0,255, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,233,233,233,0,233,0,0,0,255, 255,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,0,233,233,0,233,0,0,233,0,255, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,255,0,255,233,233,0,233,0,0,0,255, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,255,0,0,0,0,0,0,0,255,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,0,0,0,16,16,0,0,0,255,255,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,255,255,255,255,0,0,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,255,255,255,255,0,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,255,255,255,0,0,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,255,255,255,0,0,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,233,0,255,255,255,0,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,255,233,0,255,0,0,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char runleft2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,255,233,0,255,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,233,0,255,255,255,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,255,255,255,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,255,255,255,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,255,255,255,255,0,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,255,255,255,255,0,0,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,0,0,0,16,16,0,0,0,255,255,0,0,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,255,0,0,0,0,0,0,0,255,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,255,0,255,233,233,0,233,0,0,0,255,0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,0,233,233,0,233,0,0,233,0,255,0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,233,233,233,0,233,0,0,0,255,255,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,233,233,0,233,0,233,0,0,255,0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,0,0,233,0,0,0,0,0,0,255,0,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,233,0,233,0,0,0,255,255,0,0,255,0,0,0,0,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,0,0,0,255,255,0,0,233,255,255,255,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,255,255,255,255,0,0,0,233,255,255,0,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,255,255,255,255,0,16,233,0,0,0,0,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0,255,255,255,0,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,255,255,255,0,0,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,255,255,255,0,0,0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,255,255,0,233,0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0,233,0,0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
- };
-
-static char runlu_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,12, 0,77,4,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,8, 169,246,100,4,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,16,16,16,16,16,8, 68,68,68,37,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,0,0,4,16,16,16,8, 0,219,255,219,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,0,36,36,4,16,12,0, 219,255,255,219,0,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,4,73,218,219,45,16,4,219, 255,255,255,110,4,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,4,0,182,36,8,41,255, 255,255,110,0,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,12,0,165,242,233,32,0,73, 255,255,146,0,12,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,165,233,233,133,132,0,0, 182,218,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,165,233,233,132,133,201,32, 146,219,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,68,32,132,132,32,100,32,0, 0,146,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,100,100,133,132,100,100,64,165, 36,146,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,64,165,0,100,132,0,64, 110,219,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,4,110,73,0,0,0,0,0,110, 255,37,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,4,73,255,255,73,37,0,36,73,255, 255,37,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,37,255,255,255,255,219,219,73,110, 37,4,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,8,37,255,255,255,255,109,146,110,73,110, 4,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,218,255,255,255,73,4,0,0,68,73, 36,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,182,255,255,73,8,48,137,133,238,255, 77,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,8,110,255,73,0,4,16,72,101,255,255, 146,4,12,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,0,137,100,32,8,16,16,4,109,182, 218,36,4,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,0,100,100,32,8,16,16,16,4,0, 0,0,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,12,4,4,8,16,16,16,16,16,4, 0,0,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 4,0,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char runlu2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,8,12,12,8,12,12,8,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 4,8,37,218,182,110,0,0,12,16,16,
- 16,16,16,16,16,16,12,16,16,16,12,12,12,12,16,4, 73,37,255,255,255,255,137,100,4,16,16,
- 16,16,16,16,16,8,0,4,16,12,0,0,68,100,0,110,255,255,255,255,255,73,100,100,4,16,16,
- 16,16,16,16,12,0,0,73,4,0,165,165,32,100,64,73,255,255,255,255,73,0,32,32,8,16,16,
- 16,16,16,16,16,0,36,218,0,165,233,233,132,133,165,0, 73,255,255,73,8,4,8,8,16,16,16,
- 16,16,16,16,16,4,36,219,182,242,233,233,132,132,0,0, 37,255,109,4,48,16,16,16,16,16,16,
- 16,16,16,16,16,16,4,45,36,233,133,132,32,100,100,0, 0,219,146,0,137,72,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,32,132,133,100,100,132,0, 36,219,110,0,133,101,4,16,16,16,16,
- 16,16,16,16,16,16,12,4,41,0,0,201,32,64,0,0, 73,73,73,68,238,255,109,4,16,16,16,
- 16,16,12,8,8,8,0,219,255,73,0,32,0,165,64,110, 255,110,110,73,255,255,182,0,4,16,16,
- 16,16,0,169,68,0,219,255,255,255,182,146,0,36,110,255, 255,37,4,36,77,146,218,0,0,4,16,
- 16,16,77,246,68,219,255,255,255,255,218,219,146,146,219,37, 37,4,16,12,12,4,36,0,0,0,12,
- 16,16,4,100,68,255,255,255,110,146,0,0,0,0,0,8, 8,16,16,16,16,12,4,0,0,8,16,
- 16,16,16,4,37,219,219,110,0,0,12,12,16,12,12,16, 16,16,16,16,16,16,16,16,12,16,16,
- 16,16,16,16,8,8,0,4,8,12,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,12,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-
-/*static char calcdes_data[] = {
- 16 ,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16,16,16, 0, 0, 0, 0,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16,16, 0, 0,255, 0,233, 0,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16, 0,255,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16, 0,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16, 0, 0,255,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16, 0,255,255,255,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16, 0,255,255, 0, 0, 0, 0, 0, 0,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16, 0,255, 0, 0, 0, 0,233,233,233, 0, 0,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16, 0,255, 0, 0,233, 0,233, 0,233,233,255, 0,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16, 0,255,255, 0, 0, 0,233, 0,233, 0,233,233, 0,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16, 0,255,255, 0, 0, 0, 0,233, 0,233, 0,233, 0,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16, 0,255,255, 0, 0, 0, 0, 0,233, 0,233, 0, 0,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16, 0,255, 0, 0, 0,233, 0, 0,233, 0, 0,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16, 0, 0,255,255, 0, 0, 0, 0, 0, 0,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16, 0,255,255,255,255,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16, 0,255,255,255,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16, 0, 0,255,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16, 0,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16, 0,255,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16,16, 0, 0,255, 0,233, 0,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16,16,16, 0, 0, 0, 0,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16 ,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16 ,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
- };
-
-static char calcdown_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,255,255,255, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,255,255,255,255, 255,255,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,255,255,0,0,0,0, 0,0,255,0,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,0,0,255,255,255,0,0,0,0, 0,0,255,255,0,0,0,16,16,16,16,
- 16,16,16,16,16,0,255,255,255,255,255,0,0,0,0,0, 233,0,0,255,255,255,255,0,16,16,16,
- 16,16,16,16,0,0,255,255,255,255,255,0,233,0,0,233, 0,0,0,255,255,255,255,0,0,16,16,
- 16,16,16,16,0,255,255,255,255,255,255,0,0,0,233,0, 233,233,0,255,255,255,255,255,0,16,16,
- 16,16,16,16,0,0,255,0,255,255,255,0,0,233,0,233, 0,233,0,255,255,0,255,0,0,16,16,
- 16,16,16,16,0,233,0,16,0,255,255,0,233,0,233,0, 233,233,0,255,0,16,0,233,0,16,16,
- 16,16,16,16,16,0,16,16,16,0,0,0,0,233,0,233, 233,0,0,0,16,16,16,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0,233,233, 255,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-
-static char calcleft_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,233,0,255,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,255,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,255,255,255,255, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,255,255,255,255,255, 255,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0, 255,255,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0,233,233,233,0,0, 0,0,255,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,255,233,233,0,233,0,233, 0,0,255,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,233,233,0,233,0,233,0, 0,0,255,255,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,233,0,233,0,233,0,0, 0,0,255,255,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,233,0,233,0,0,0, 0,0,255,255,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0,233,0,0,233,0, 0,0,255,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0, 255,255,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,255,255,255,255,255, 255,255,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,255,255,255,255,255, 255,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,255,255,255,255, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,255,255,255,255, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,233,0,255,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char calcup_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0,233,233, 255,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,0,16,16,16,0,0,0,0,233,0,233, 233,0,0,0,16,16,16,0,16,16,16,
- 16,16,16,16,0,233,0,16,0,255,255,0,233,0,233,0, 233,233,0,255,0,16,0,233,0,16,16,
- 16,16,16,16,0,0,255,0,255,255,255,0,0,233,0,233, 0,233,0,255,255,0,255,0,0,16,16,
- 16,16,16,16,0,255,255,255,255,255,255,0,0,0,233,0, 233,233,0,255,255,255,255,255,0,16,16,
- 16,16,16,16,0,0,255,255,255,255,255,0,233,0,0,233, 0,0,0,255,255,255,255,0,0,16,16,
- 16,16,16,16,16,0,255,255,255,255,255,0,0,0,0,0, 233,0,0,255,255,255,255,0,16,16,16,
- 16,16,16,16,16,16,0,0,0,255,255,255,0,0,0,0, 0,0,255,255,0,0,0,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,255,255,0,0,0,0, 0,0,255,0,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,255,255,255,255, 255,255,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,255,255,255, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- }; */
-static char portsx_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,220,220,220, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,220,220,220,220, 220,220,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,220,220,0,0,0,0, 0,0,220,0,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,0,0,220,220,220,0,0,0,0, 0,0,220,220,0,0,0,16,16,16,16,
- 16,16,16,16,16,0,220,220,220,220,220,0,0,0,0,0, 233,0,0,220,220,220,220,0,16,16,16,
- 16,16,16,16,0,0,220,220,220,220,220,0,233,0,0,233, 0,0,0,220,220,220,220,0,0,16,16,
- 16,16,16,16,0,220,220,220,220,220,220,0,0,0,233,0, 233,233,0,220,220,220,220,220,0,16,16,
- 16,16,16,16,0,0,220,0,220,220,220,0,0,233,0,233, 0,233,0,220,220,0,220,0,0,16,16,
- 16,16,16,16,0,233,0,16,0,220,220,0,233,0,233,0, 233,233,0,220,0,16,0,233,0,16,16,
- 16,16,16,16,16,0,16,16,16,0,0,0,0,233,0,233, 233,0,0,0,16,16,16,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0,233,233, 220,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char portdx_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0,233,233, 130,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,0,16,16,16,0,0,0,0,233,0,233, 233,0,0,0,16,16,16,0,16,16,16,
- 16,16,16,16,0,233,0,16,0,130,130,0,233,0,233,0, 233,233,0,130,0,16,0,233,0,16,16,
- 16,16,16,16,0,0,130,0,130,130,130,0,0,233,0,233, 0,233,0,130,130,0,130,0,0,16,16,
- 16,16,16,16,0,130,130,130,130,130,130,0,0,0,233,0, 233,233,0,130,130,130,130,130,0,16,16,
- 16,16,16,16,0,0,130,130,130,130,130,0,233,0,0,233, 0,0,0,130,130,130,130,0,0,16,16,
- 16,16,16,16,16,0,130,130,130,130,130,0,0,0,0,0, 233,0,0,130,130,130,130,0,16,16,16,
- 16,16,16,16,16,16,0,0,0,130,130,130,0,0,0,0, 0,0,130,130,0,0,0,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,130,130,0,0,0,0, 0,0,130,0,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,130,130,130,130, 130,130,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,130,130,130, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-
-
Index: start/soccer/stadio.h
===================================================================
--- start/soccer/stadio.h (revision 1087)
+++ start/soccer/stadio.h (nonexistent)
@@ -1,8435 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- ------------
- CVS : $Id: stadio.h,v 1.1.1.1 2002-09-02 09:37:44 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:44 $
- ------------
-*/
-
-/*
- * Copyright (C) 2000 Merli Andrea and Zucchetti Alessandro
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-static unsigned int faro_width = 100;
-static unsigned int faro_height = 100;
-static unsigned int scale_width = 150;
-static unsigned int scale_height = 100;
-static unsigned int schermo_width = 300;
-static unsigned int schermo_height = 100;
-
-
-static char stadio_cmap[256][3] = {
- { 0, 0, 0},
- { 0, 0, 51},
- { 0, 0,102},
- { 0, 0,153},
- { 0, 0,204},
- { 0, 0,255},
- { 51, 0, 0},
- { 51, 0, 51},
- { 51, 0,102},
- { 51, 0,153},
- { 51, 0,204},
- { 51, 0,255},
- {102, 0, 0},
- {102, 0, 51},
- {102, 0,102},
- {102, 0,153},
- {102, 0,204},
- {102, 0,255},
- {153, 0, 0},
- {153, 0, 51},
- {153, 0,102},
- {153, 0,153},
- {153, 0,204},
- {153, 0,255},
- {204, 0, 0},
- {204, 0, 51},
- {204, 0,102},
- {204, 0,153},
- {204, 0,204},
- {204, 0,255},
- {255, 0, 0},
- {255, 0, 51},
- {255, 0,102},
- {255, 0,153},
- {255, 0,204},
- {255, 0,255},
- { 0, 51, 0},
- { 0, 51, 51},
- { 0, 51,102},
- { 0, 51,153},
- { 0, 51,204},
- { 0, 51,255},
- { 51, 51, 0},
- { 51, 51, 51},
- { 51, 51,102},
- { 51, 51,153},
- { 51, 51,204},
- { 51, 51,255},
- {102, 51, 0},
- {102, 51, 51},
- {102, 51,102},
- {102, 51,153},
- {102, 51,204},
- {102, 51,255},
- {153, 51, 0},
- {153, 51, 51},
- {153, 51,102},
- {153, 51,153},
- {153, 51,204},
- {153, 51,255},
- {204, 51, 0},
- {204, 51, 51},
- {204, 51,102},
- {204, 51,153},
- {204, 51,204},
- {204, 51,255},
- {255, 51, 0},
- {255, 51, 51},
- {255, 51,102},
- {255, 51,153},
- {255, 51,204},
- {255, 51,255},
- { 0,102, 0},
- { 0,102, 51},
- { 0,102,102},
- { 0,102,153},
- { 0,102,204},
- { 0,102,255},
- { 51,102, 0},
- { 51,102, 51},
- { 51,102,102},
- { 51,102,153},
- { 51,102,204},
- { 51,102,255},
- {102,102, 0},
- {102,102, 51},
- {102,102,102},
- {102,102,153},
- {102,102,204},
- {102,102,255},
- {153,102, 0},
- {153,102, 51},
- {153,102,102},
- {153,102,153},
- {153,102,204},
- {153,102,255},
- {204,102, 0},
- {204,102, 51},
- {204,102,102},
- {204,102,153},
- {204,102,204},
- {204,102,255},
- {255,102, 0},
- {255,102, 51},
- {255,102,102},
- {255,102,153},
- {255,102,204},
- {255,102,255},
- { 0,153, 0},
- { 0,153, 51},
- { 0,153,102},
- { 0,153,153},
- { 0,153,204},
- { 0,153,255},
- { 51,153, 0},
- { 51,153, 51},
- { 51,153,102},
- { 51,153,153},
- { 51,153,204},
- { 51,153,255},
- {102,153, 0},
- {102,153, 51},
- {102,153,102},
- {102,153,153},
- {102,153,204},
- {102,153,255},
- {153,153, 0},
- {153,153, 51},
- {153,153,102},
- {153,153,153},
- {153,153,204},
- {153,153,255},
- {204,153, 0},
- {204,153, 51},
- {204,153,102},
- {204,153,153},
- {204,153,204},
- {204,153,255},
- {255,153, 0},
- {255,153, 51},
- {255,153,102},
- {255,153,153},
- {255,153,204},
- {255,153,255},
- { 0,204, 0},
- { 0,204, 51},
- { 0,204,102},
- { 0,204,153},
- { 0,204,204},
- { 0,204,255},
- { 51,204, 0},
- { 51,204, 51},
- { 51,204,102},
- { 51,204,153},
- { 51,204,204},
- { 51,204,255},
- {102,204, 0},
- {102,204, 51},
- {102,204,102},
- {102,204,153},
- {102,204,204},
- {102,204,255},
- {153,204, 0},
- {153,204, 51},
- {153,204,102},
- {153,204,153},
- {153,204,204},
- {153,204,255},
- {204,204, 0},
- {204,204, 51},
- {204,204,102},
- {204,204,153},
- {204,204,204},
- {204,204,255},
- {255,204, 0},
- {255,204, 51},
- {255,204,102},
- {255,204,153},
- {255,204,204},
- {255,204,255},
- { 0,255, 0},
- { 0,255, 51},
- { 0,255,102},
- { 0,255,153},
- { 0,255,204},
- { 0,255,255},
- { 51,255, 0},
- { 51,255, 51},
- { 51,255,102},
- { 51,255,153},
- { 51,255,204},
- { 51,255,255},
- {102,255, 0},
- {102,255, 51},
- {102,255,102},
- {102,255,153},
- {102,255,204},
- {102,255,255},
- {153,255, 0},
- {153,255, 51},
- {153,255,102},
- {153,255,153},
- {153,255,204},
- {153,255,255},
- {204,255, 0},
- {204,255, 51},
- {204,255,102},
- {204,255,153},
- {204,255,204},
- {204,255,255},
- {255,255, 0},
- {255,255, 51},
- {255,255,102},
- {255,255,153},
- {255,255,204},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255},
- {255,255,255}
- };
-static char farod_data[] = {
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,0,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,0,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,0,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,0,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,0,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,173,173,173,173,0,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,0,0,173,173,173,173,0,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,0,0,173,173,173,173,0,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,102,102,0,0,173,173,173,173,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,0,102,102,0,0,173,173,173,173,
- 0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,176,176,176,176,176,176,176,176,176,11,11,11,11,176,
- 176,176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,
- 176,176,176,176,176,11,11,11,0,102,102,0,0,173,173,173,
- 173,0,90,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,102,102,102,0,0,90,90,
- 173,90,0,90,108,108,0,0,0,0,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,0,102,102,102,0,0,90,
- 90,0,90,90,90,0,0,0,0,0,0,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,0,102,102,102,0,0,
- 90,90,0,90,0,0,0,90,90,0,0,0,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,0,102,102,102,0,
- 0,90,90,0,0,0,90,90,90,90,0,0,0,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,0,102,102,102,
- 0,0,90,0,0,90,90,90,90,90,90,0,0,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,0,102,102,
- 102,0,0,0,0,90,90,90,90,90,90,0,0,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,0,102,
- 102,102,0,0,0,90,90,90,90,90,90,0,0,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,6,6,6,6,6,6,6,0,
- 102,102,90,0,0,0,90,90,90,90,0,0,0,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,197,210,210,210,210,210,210,210,
- 0,102,102,0,0,0,0,0,0,0,0,0,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,11,197,210,210,210,210,210,210,
- 210,0,102,102,0,0,0,0,0,0,0,90,90,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,197,215,210,210,210,210,
- 210,210,0,102,102,0,0,0,0,0,0,90,90,90,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,11,11,11,11,197,215,210,210,210,
- 210,210,210,0,102,102,0,0,0,90,90,0,90,90,90,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,197,215,210,210,
- 210,210,210,210,0,102,102,0,0,0,90,90,0,90,90,90,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,176,176,176,176,176,176,176,176,176,11,11,11,11,176,
- 176,176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,
- 176,176,176,176,176,11,11,11,11,11,11,11,11,197,215,210,
- 210,210,210,210,6,0,102,102,0,0,0,90,90,0,90,90,
- 90,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,11,11,11,11,11,11,197,215,
- 210,210,210,210,6,11,0,102,102,0,0,0,90,90,0,90,
- 90,90,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,197,
- 215,210,210,210,6,11,11,0,102,102,0,0,0,90,90,0,
- 90,90,90,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 197,210,210,210,6,11,11,11,0,102,102,0,0,0,90,90,
- 0,90,90,90,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,197,210,210,6,11,11,11,11,0,102,102,0,0,0,90,
- 90,0,90,90,90,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,197,210,6,11,11,11,11,11,0,102,102,0,0,0,
- 90,90,0,90,90,90,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,197,6,11,11,11,11,11,11,0,102,102,0,0,
- 0,90,90,0,90,90,90,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,0,102,102,0,
- 0,0,90,90,0,90,90,90,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,0,102,102,
- 0,0,0,90,90,0,90,90,90,108,108,108,0,0,0,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,102,
- 102,0,0,0,90,90,0,90,90,90,108,0,0,0,0,0,
- 0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,
- 102,102,0,0,0,90,90,0,90,90,0,0,0,90,90,0,
- 0,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 0,102,102,0,0,0,90,90,0,0,0,0,90,90,90,90,
- 0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,0,102,102,0,0,0,90,0,0,0,90,90,90,90,90,
- 90,0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,0,102,102,0,0,0,0,0,90,90,90,90,90,90,
- 90,90,0,0,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,176,176,176,176,176,176,176,176,176,11,11,11,11,176,
- 176,176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,
- 176,176,176,176,176,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,6,6,6,
- 6,6,6,0,102,102,0,0,0,0,90,90,90,90,90,90,
- 90,90,0,0,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,197,210,210,
- 210,210,210,210,0,102,102,0,0,0,90,90,90,90,90,90,
- 90,90,0,0,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,197,210,
- 210,210,210,210,210,0,102,102,0,0,0,90,90,90,90,90,
- 90,0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,197,
- 210,210,210,210,210,210,0,102,102,0,0,0,90,90,90,90,
- 0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 197,210,210,210,210,210,210,0,102,102,0,0,0,0,0,0,
- 0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,197,210,210,210,210,210,210,0,102,102,0,0,0,0,0,
- 0,0,173,0,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,197,210,210,210,210,210,210,0,102,102,0,0,0,90,
- 90,173,173,173,0,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,197,210,210,210,210,210,210,0,102,102,0,0,0,
- 90,90,173,173,173,0,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,197,210,210,210,210,210,6,0,102,102,102,102,
- 0,90,173,173,173,0,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,197,210,210,210,210,6,11,0,102,102,102,
- 102,0,173,173,0,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,197,210,210,210,6,11,11,0,102,102,
- 102,102,0,0,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,197,210,210,6,11,11,11,0,102,
- 102,102,0,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,197,210,6,11,11,11,11,0,
- 102,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,197,6,11,11,11,11,11,
- 0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,176,176,176,176,176,176,176,176,176,11,11,11,11,176,
- 176,176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,
- 176,176,176,176,176,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,0,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,0,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,0,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,0,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,0,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,0,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,0,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,0,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,0,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,0,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,0,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,0,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,176,176,176,176,176,176,176,176,176,11,11,11,11,176,
- 176,176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,
- 176,176,176,176,176,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,0,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,0,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,0,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,0,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,0,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,0,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,0,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,0,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,0,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,211,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,0,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,211,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,0,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,211,211,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,11,0,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,211,211,
- 211,211,211,211,211,211,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,104,104,211,211,
- 211,211,211,211,211,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,104,104,104,104,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,104,104,104,104,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,104,104,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108
- };
-static char faros_data[] = {
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,0,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,0,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,0,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,0,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,0,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,0,173,173,173,173,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,0,173,173,173,173,0,0,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,0,173,173,173,173,0,0,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,0,173,173,173,173,0,0,102,102,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,0,173,173,173,173,0,0,102,102,0,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,90,0,173,173,173,173,0,0,102,102,0,11,11,11,176,
- 176,176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,
- 176,176,176,176,176,11,11,11,11,176,176,176,176,176,176,176,
- 176,176,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,0,0,0,0,108,108,
- 90,0,90,173,90,90,0,0,102,102,102,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,90,
- 90,90,0,90,90,0,0,102,102,102,0,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,0,0,0,90,90,0,0,0,
- 90,0,90,90,0,0,102,102,102,0,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,0,0,0,90,90,90,90,0,0,
- 0,90,90,0,0,102,102,102,0,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,0,0,90,90,90,90,90,90,0,
- 0,90,0,0,102,102,102,0,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,0,0,90,90,90,90,90,90,0,
- 0,0,0,102,102,102,0,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,0,0,90,90,90,90,90,90,0,
- 0,0,102,102,102,0,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,0,0,0,90,90,90,90,0,0,
- 0,90,102,102,0,6,6,6,6,6,6,6,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,
- 0,102,102,0,210,210,210,210,210,210,210,197,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,90,90,0,0,0,0,0,0,0,
- 102,102,0,210,210,210,210,210,210,210,197,11,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,90,90,90,0,0,0,0,0,0,102,
- 102,0,210,210,210,210,210,210,215,197,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,90,90,90,0,90,90,0,0,0,102,102,
- 0,210,210,210,210,210,210,215,197,11,11,11,11,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,90,90,90,0,90,90,0,0,0,102,102,0,
- 210,210,210,210,210,210,215,197,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,90,90,90,0,90,90,0,0,0,102,102,0,6,
- 210,210,210,210,210,215,197,11,11,11,11,11,11,11,11,176,
- 176,176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,
- 176,176,176,176,176,11,11,11,11,176,176,176,176,176,176,176,
- 176,176,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,90,90,90,0,90,90,0,0,0,102,102,0,11,6,
- 210,210,210,210,215,197,11,11,11,11,11,11,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,90,90,90,0,90,90,0,0,0,102,102,0,11,11,6,
- 210,210,210,215,197,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 90,90,90,0,90,90,0,0,0,102,102,0,11,11,11,6,
- 210,210,210,197,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,90,
- 90,90,0,90,90,0,0,0,102,102,0,11,11,11,11,6,
- 210,210,197,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,90,90,
- 90,0,90,90,0,0,0,102,102,0,11,11,11,11,11,6,
- 210,197,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,90,90,90,
- 0,90,90,0,0,0,102,102,0,11,11,11,11,11,11,6,
- 197,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,90,90,90,0,
- 90,90,0,0,0,102,102,0,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,0,0,0,0,108,108,108,90,90,90,0,90,
- 90,0,0,0,102,102,0,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,0,0,0,0,0,0,108,90,90,90,0,90,90,
- 0,0,0,102,102,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,0,0,0,90,90,0,0,0,90,90,0,90,90,0,
- 0,0,102,102,0,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,0,0,0,90,90,90,90,0,0,0,0,90,90,0,0,
- 0,102,102,0,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 0,0,0,90,90,90,90,90,90,0,0,0,90,0,0,0,
- 102,102,0,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 0,0,90,90,90,90,90,90,90,90,0,0,0,0,0,102,
- 102,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 0,0,90,90,90,90,90,90,90,90,0,0,0,0,102,102,
- 0,6,6,6,6,6,6,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,176,
- 176,176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,
- 176,176,176,176,176,11,11,11,11,176,176,176,176,176,176,176,
- 176,176,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 0,0,90,90,90,90,90,90,90,90,0,0,0,102,102,0,
- 210,210,210,210,210,210,197,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 0,0,0,90,90,90,90,90,90,0,0,0,102,102,0,210,
- 210,210,210,210,210,197,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,0,0,0,90,90,90,90,0,0,0,102,102,0,210,210,
- 210,210,210,210,197,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,0,0,0,0,0,0,0,0,0,102,102,0,210,210,210,
- 210,210,210,197,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 0,173,0,0,0,0,0,0,0,102,102,0,210,210,210,210,
- 210,210,197,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,
- 173,173,173,90,90,0,0,0,102,102,0,210,210,210,210,210,
- 210,197,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,173,
- 173,173,90,90,0,0,0,102,102,0,210,210,210,210,210,210,
- 197,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,173,
- 173,173,90,0,102,102,102,102,0,6,210,210,210,210,210,197,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,
- 173,173,0,102,102,102,102,0,11,6,210,210,210,210,197,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 0,0,102,102,102,102,0,11,11,6,210,210,210,197,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,0,102,102,102,0,11,11,11,6,210,210,197,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,0,102,0,11,11,11,11,6,210,197,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,0,11,11,11,11,11,6,197,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,0,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,176,
- 176,176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,
- 176,176,176,176,176,11,11,11,11,176,176,176,176,176,176,176,
- 176,176,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,0,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,0,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,0,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,0,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,0,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,0,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,0,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,0,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,0,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,176,
- 176,176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,
- 176,176,176,176,176,11,11,11,11,176,176,176,176,176,176,176,
- 176,176,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,0,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,0,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,0,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,0,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,0,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,0,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,0,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,0,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,0,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,0,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,0,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,211,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,211,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,211,211,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,211,211,211,211,211,211,211,211,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,104,
- 104,211,211,211,211,211,211,211,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,0,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,104,104,
- 104,104,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,104,104,
- 104,104,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,104,
- 104,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108
-};
-static char scale_data[] = {
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,11,11,11,176,
- 176,176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,
- 176,176,176,176,176,11,11,11,11,176,176,176,176,176,176,176,
- 176,176,11,11,11,11,176,176,176,176,176,176,176,176,176,11,
- 11,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,11,11,176,176,176,176,176,176,176,176,176,
- 11,11,11,11,176,176,176,176,176,176,176,176,176,11,11,11,
- 11,176,176,176,176,176,176,176,176,176,11,11,11,11,176,176,
- 176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,176,
- 176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,11,0,0,0,0,0,0,0,0,0,0,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,0,0,0,0,0,0,0,0,0,
- 0,11,11,0,0,0,0,0,0,0,0,0,0,0,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,0,
- 0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,0,
- 0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,11,0,0,0,0,0,0,0,0,0,0,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,0,0,0,0,0,0,0,0,0,
- 0,11,11,0,0,0,0,0,0,0,0,0,0,0,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,0,
- 0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,0,
- 0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,11,11,11,176,
- 176,176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,
- 176,176,176,176,176,11,11,11,11,176,176,176,176,176,176,176,
- 176,176,11,11,11,11,176,176,176,176,176,176,176,176,176,11,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,11,176,176,176,176,176,176,176,176,176,
- 11,11,11,11,176,176,176,176,176,176,176,176,176,11,11,11,
- 11,176,176,176,176,176,176,176,176,176,11,11,11,11,176,176,
- 176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,176,
- 176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,11,0,0,0,0,0,0,0,0,0,0,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,0,0,0,0,0,0,0,0,0,
- 0,11,11,0,0,0,0,0,0,0,0,0,0,0,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,0,
- 0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,0,
- 0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,11,0,0,0,0,0,0,0,0,0,0,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,0,0,0,0,0,0,0,0,0,
- 0,11,11,0,0,0,0,0,0,0,0,0,0,0,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,0,
- 0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,0,
- 0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,11,11,11,176,
- 176,176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,
- 176,176,176,176,176,11,11,11,11,176,176,176,176,176,176,176,
- 176,176,11,11,11,11,176,176,176,176,176,176,176,176,176,11,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,11,176,176,176,176,176,176,176,176,176,
- 11,11,11,11,176,176,176,176,176,176,176,176,176,11,11,11,
- 11,176,176,176,176,176,176,176,176,176,11,11,11,11,176,176,
- 176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,176,
- 176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,11,0,0,0,0,0,0,0,0,0,0,0,
- 11,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,11,0,0,0,0,0,0,0,0,0,0,
- 0,11,11,0,0,0,0,0,0,0,0,0,0,0,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,0,
- 0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,0,
- 0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,11,0,0,0,0,0,0,0,0,0,0,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,0,0,0,0,0,0,0,0,0,
- 0,11,11,0,0,0,0,0,0,0,0,0,0,0,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,0,
- 0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,0,
- 0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,11,11,11,176,
- 176,176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,
- 176,176,176,176,176,11,11,11,11,176,176,176,176,176,176,176,
- 176,176,11,11,11,11,176,176,176,176,176,176,176,176,176,11,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,11,176,176,176,176,176,176,176,176,176,
- 11,11,11,11,176,176,176,176,176,176,176,176,176,11,11,11,
- 11,176,176,176,176,176,176,176,176,176,11,11,11,11,176,176,
- 176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,176,
- 176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,11,0,0,0,0,0,0,0,0,0,0,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,0,0,0,0,0,0,0,0,0,
- 0,11,11,0,0,0,0,0,0,0,0,0,0,0,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,0,
- 0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,0,
- 0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,11,0,0,0,0,0,0,0,0,0,0,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,0,0,0,0,0,0,0,0,0,
- 0,11,11,0,0,0,0,0,0,0,0,0,0,0,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,0,
- 0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,0,
- 0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,11,11,11,176,
- 176,176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,
- 176,176,176,176,176,11,11,11,11,176,176,176,176,176,176,176,
- 176,176,11,11,11,11,176,176,176,176,176,176,176,176,176,11,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,11,176,176,176,176,176,176,176,176,176,
- 11,11,11,11,176,176,176,176,176,176,176,176,176,11,11,11,
- 11,176,176,176,176,176,176,176,176,176,11,11,11,11,176,176,
- 176,176,176,176,176,176,176,11,11,11,11,176,176,176,176,176,
- 176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,11,0,0,0,0,0,0,0,0,0,0,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,0,0,0,0,0,0,0,0,0,
- 0,11,11,0,0,0,0,0,0,0,0,0,0,0,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,0,
- 0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,0,
- 0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,
- 176,176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,
- 176,176,176,176,176,0,11,11,0,176,176,176,176,176,176,176,
- 176,176,0,11,11,0,176,176,176,176,176,176,176,176,176,0,
- 11,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,11,0,176,176,176,176,176,176,176,176,176,
- 0,11,11,0,176,176,176,176,176,176,176,176,176,0,11,11,
- 0,176,176,176,176,176,176,176,176,176,0,11,11,0,176,176,
- 176,176,176,176,176,176,176,0,11,11,0,176,176,176,176,176,
- 176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
- 0,0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,
- 0,0,0,0,0,0,11,11,0,0,0,0,0,0,0,0,
- 0,0,0,11,11,0,0,0,0,0,0,0,0,0,0,0,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,0,0,0,0,0,0,0,0,0,0,
- 0,11,11,0,0,0,0,0,0,0,0,0,0,0,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,11,11,0,0,0,
- 0,0,0,0,0,0,0,0,11,11,0,0,0,0,0,0,
- 0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,38,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,38,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108
-};
-static char schermo_data[] = {
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,
- 0,0,0,0,0,0,0,0,0,0,0,0,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,176,176,176,176,176,176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,176,176,176,176,176,176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,176,176,176,176,176,176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,176,176,176,176,176,176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,176,176,176,176,176,176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,38,
- 38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,38,38,38,38,38,38,38,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108
-};
-/*
-static char goal2_data[] = {
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,
- 0,0,0,0,0,0,0,0,0,0,0,0,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,176,176,176,176,176,176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,0,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,0,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,0,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,215,215,215,215,0,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,215,181,181,181,
- 181,215,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,215,181,181,
- 181,181,215,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,215,181,181,181,181,
- 181,181,181,181,181,181,181,181,215,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,215,181,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,215,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,215,181,181,
- 181,181,181,215,181,181,181,181,181,181,181,181,215,215,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,215,181,181,181,
- 181,181,181,181,181,181,181,181,215,181,181,181,181,181,181,181,
- 181,181,181,181,181,215,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,215,181,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,215,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 11,176,176,176,176,176,176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,215,181,
- 181,181,181,181,215,215,181,181,181,181,181,181,181,181,215,215,
- 181,181,181,181,181,181,181,181,181,181,181,181,215,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,215,181,181,181,
- 181,181,181,181,181,181,181,181,215,181,181,181,181,181,181,181,
- 181,181,181,181,181,215,181,181,181,181,215,215,215,181,181,181,
- 181,181,181,181,181,181,181,181,181,215,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,215,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,215,181,
- 181,181,181,181,215,181,215,181,181,181,181,181,181,181,181,181,
- 215,215,181,181,181,181,181,181,181,181,181,181,215,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,215,181,181,
- 181,181,181,181,181,181,181,181,181,215,181,181,181,181,181,181,
- 181,181,181,181,181,181,215,215,215,215,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,215,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,215,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,215,
- 181,181,181,181,215,181,181,215,181,181,181,181,181,181,181,181,
- 181,181,215,215,215,181,215,215,215,215,181,181,215,0,0,0,
- 0,0,0,181,181,181,181,181,181,181,181,181,181,215,181,181,
- 181,181,181,181,181,181,181,181,181,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,215,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,215,
- 181,181,181,181,181,215,181,181,215,181,181,181,181,181,181,181,
- 181,181,181,181,181,215,215,181,181,181,215,0,0,215,215,215,
- 215,215,215,0,0,181,181,181,181,181,181,181,181,181,215,181,
- 181,181,181,181,181,181,181,181,181,215,181,181,215,215,215,215,
- 215,181,181,181,181,181,215,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,215,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,215,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 215,181,181,181,181,215,181,181,181,215,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,215,215,0,0,215,215,215,0,215,
- 215,215,215,215,215,0,0,181,181,181,181,181,181,181,215,181,
- 181,181,181,181,181,181,181,181,215,215,215,215,181,181,181,181,
- 181,181,181,181,181,181,215,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,215,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,215,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 215,181,181,181,181,181,215,181,181,181,215,215,181,181,181,181,
- 181,181,181,181,181,181,181,181,0,215,0,215,215,0,0,0,
- 215,215,0,215,215,215,215,0,215,215,215,215,215,215,181,215,
- 181,181,181,215,215,215,215,215,181,215,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,215,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,215,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,215,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,215,181,181,181,181,215,181,181,181,181,181,215,181,181,181,
- 181,181,181,181,181,181,181,181,0,0,0,0,215,0,0,0,
- 215,0,0,0,215,215,215,0,181,181,181,181,181,181,215,215,
- 215,215,215,215,215,181,181,181,181,181,215,181,181,181,181,181,
- 181,181,181,181,181,181,181,215,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,215,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,215,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,181,215,181,181,181,181,215,181,181,181,181,181,215,181,181,
- 181,181,181,181,181,181,181,0,215,0,0,0,215,0,0,0,
- 215,0,0,0,215,215,0,215,0,181,215,215,215,215,181,181,
- 215,181,181,181,181,215,215,215,215,215,215,181,181,181,181,181,
- 181,181,181,181,181,181,181,215,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,215,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,215,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,181,215,181,181,181,181,215,181,181,181,181,181,181,215,181,
- 181,181,181,181,181,181,181,0,215,0,0,0,215,215,0,215,
- 215,0,0,0,215,0,0,0,0,215,181,181,181,181,181,181,
- 215,181,181,181,181,181,181,181,181,181,215,215,215,215,215,215,
- 215,215,181,181,181,181,181,215,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,215,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,181,215,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,181,181,215,181,181,181,181,215,181,181,181,181,181,181,215,
- 181,181,181,181,181,181,0,215,215,215,0,215,215,215,215,215,
- 215,215,0,215,215,0,0,0,215,0,181,181,181,181,181,181,
- 181,215,181,181,181,181,181,181,181,181,215,181,181,181,181,181,
- 181,181,215,215,215,215,215,215,215,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,215,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,181,215,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,181,181,215,181,181,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,0,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,0,0,0,215,0,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,0,215,215,215,215,0,181,181,181,181,181,181,215,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,181,181,181,215,181,181,181,181,215,181,181,181,181,181,181,
- 181,181,215,181,181,181,0,215,215,0,215,215,215,215,215,215,
- 215,215,215,215,215,215,0,215,215,0,181,181,181,181,181,181,
- 181,181,215,181,181,181,181,181,181,181,181,215,181,181,181,181,
- 181,181,181,181,181,181,181,181,215,181,181,181,181,181,181,215,
- 215,215,215,181,181,181,181,181,181,181,181,181,181,215,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,181,181,215,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,181,181,181,215,181,181,181,181,215,181,181,181,181,181,181,
- 181,181,181,215,215,215,0,215,0,0,0,215,215,215,215,215,
- 0,215,215,215,215,215,215,215,215,0,215,181,181,181,181,181,
- 181,181,215,181,181,181,181,181,181,181,181,215,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,215,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,215,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,181,181,181,
- 215,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,181,181,181,181,215,181,181,181,181,215,181,181,181,181,181,
- 215,215,215,181,215,181,0,215,0,0,0,215,215,215,215,0,
- 0,0,215,215,215,215,215,215,215,0,181,215,215,215,181,181,
- 181,181,181,215,181,181,181,181,181,181,181,215,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,215,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,215,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,181,181,181,
- 215,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 11,176,176,176,176,176,176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,181,181,181,181,215,181,181,181,181,215,181,181,181,181,181,
- 181,181,181,181,181,181,0,215,0,0,0,215,215,215,215,0,
- 0,0,215,215,0,215,215,215,215,0,181,181,181,181,215,215,
- 181,181,181,215,181,181,181,181,181,181,181,215,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,215,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,215,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,181,181,181,
- 181,215,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,181,181,181,181,181,215,181,181,181,181,215,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,0,215,215,215,215,215,0,
- 0,0,215,0,0,0,215,215,0,181,181,181,181,181,181,181,
- 215,215,181,181,215,181,181,181,181,181,181,181,215,181,181,181,
- 181,181,181,181,181,181,181,181,181,215,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,215,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,181,181,181,
- 181,215,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,181,181,181,181,181,215,181,181,181,181,215,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,215,215,215,0,215,215,
- 0,215,215,0,0,0,215,215,0,181,181,181,181,181,181,181,
- 181,181,215,215,181,181,181,181,181,181,181,181,215,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,215,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,181,181,181,
- 181,181,215,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,181,181,181,181,181,181,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,0,215,215,215,0,0,0,215,
- 215,215,215,0,0,0,215,0,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,0,215,215,215,215,0,215,215,215,215,215,215,215,
- 215,215,215,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,181,181,181,181,181,181,215,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,0,215,215,215,0,0,0,215,
- 215,215,215,215,0,215,215,0,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,181,181,181,
- 181,215,181,215,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,181,181,181,181,215,215,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,0,0,215,0,0,0,215,
- 215,215,215,215,215,0,0,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,181,181,181,
- 181,215,181,215,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,181,181,181,215,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,0,0,0,215,215,
- 215,215,215,0,0,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,181,181,181,
- 215,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,181,181,215,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,0,0,0,
- 0,0,0,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,181,181,215,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 181,215,215,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,181,215,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,181,
- 215,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,181,215,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,181,181,215,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,181,215,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,181,215,215,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,181,215,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,181,215,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,215,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,215,215,0,215,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,0,215,215,215,215,0,181,181,215,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 11,176,176,176,176,176,176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,0,0,0,0,215,215,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,215,215,0,215,215,215,215,0,181,215,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,0,215,215,215,215,0,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
- 215,215,215,215,215,215,215,215,215,215,215,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,215,181,215,215,215,215,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,215,0,0,0,0,0,0,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,215,215,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,215,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,215,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,215,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,215,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,215,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,215,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,215,215,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,215,
- 215,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,215,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,215,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,215,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,215,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 215,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,215,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,215,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,215,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,215,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,215,215,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,215,215,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,215,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,215,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 11,176,176,176,176,176,176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,215,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,215,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,215,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
- 181,181,181,181,181,181,181,181,181,181,181,181,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,38,
- 38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,38,38,38,38,38,38,38,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108
-};
-*/
-static char goal1_data[] = {
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,
- 0,0,0,0,0,0,0,0,0,0,0,0,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,176,176,176,176,176,176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,176,176,176,176,176,176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,204,204,204,204,204,204,204,204,204,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,204,204,204,204,204,204,204,204,204,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,204,204,204,204,204,204,204,204,204,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,0,0,0,0,0,0,0,0,0,0,0,0,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,176,176,176,176,176,176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,0,0,0,0,0,0,0,0,0,0,0,0,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,0,0,0,0,0,0,0,0,0,0,0,0,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,204,204,204,204,204,204,204,204,
- 204,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,204,204,204,204,204,204,204,204,
- 204,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,204,204,204,204,204,204,204,204,
- 204,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,204,204,204,204,204,204,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,204,204,204,204,204,204,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,204,204,204,204,204,204,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,204,204,204,204,204,204,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,204,204,204,204,204,204,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,204,204,204,204,204,204,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,204,204,204,204,204,204,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,204,204,204,204,204,204,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,204,204,204,204,204,204,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,204,204,204,204,204,204,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,176,176,176,176,176,176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,204,204,204,204,204,204,204,204,204,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,204,204,204,204,204,204,204,204,
- 204,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,204,204,204,204,204,204,204,204,204,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,204,204,204,204,204,204,204,204,
- 204,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,204,204,204,204,204,204,204,204,204,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,204,204,204,204,204,204,204,204,
- 204,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,0,0,0,0,0,0,0,0,0,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,0,0,0,0,0,0,0,0,0,0,0,0,204,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,
- 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,204,204,204,204,204,204,204,204,204,204,
- 204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,204,204,204,204,204,204,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,176,176,176,176,176,176,176,176,176,11,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 11,176,176,176,176,176,176,176,176,176,11,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,176,176,176,176,176,176,176,176,176,0,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 0,176,176,176,176,176,176,176,176,176,0,11,
- 11,0,0,0,0,0,0,0,0,0,0,0,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 0,0,0,0,0,0,0,0,0,0,0,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,38,
- 38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
- 38,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,38,38,38,38,38,38,38,38,
- 38,38,38,38,38,38,38,38,38,38,38,38,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108,108,108,108,108,108,108,108,108,108,108
- };
-
-
-
-
-
-
-
-
Index: start/soccer/calc2.h
===================================================================
--- start/soccer/calc2.h (revision 1087)
+++ start/soccer/calc2.h (nonexistent)
@@ -1,693 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- ------------
- CVS : $Id: calc2.h,v 1.1.1.1 2002-09-02 09:37:43 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:43 $
- ------------
-*/
-
-/*
- * Copyright (C) 2000 Merli Andrea and Zucchetti Alessandro
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/* GIMP header image file format (INDEXED): /mnt/disk/shark/base/images/runup//runup.h */
-static char B_runup_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16, 0, 0, 0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16, 0, 0, 0, 0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16, 0, 0, 35, 0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16, 0, 0,16,16,16,16, 0, 35, 0, 0, 0, 0, 0,16,16,16,16,16,16,16,16,16,16,16,
- 16,16, 0, 35,233, 0,16,16,16,16, 0, 35,233,233,233, 0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16, 0,233, 0, 0, 0, 0, 0,16, 0,233,233,233,233, 0,233, 0,16,16,16,16,16,16,16,16,16,
- 16,16, 0, 0, 35, 35, 35, 35, 35, 0, 0,233, 0,233, 0,233, 0, 0, 0, 0, 0,16,16,16,16,16,16,
- 16,16, 0, 35, 35, 35, 35, 35, 35, 0, 0, 0,233, 0,233, 0,233, 0, 35, 35, 0, 0, 0,16,16,16,16,
- 16,16,16, 0, 35, 35, 35, 35, 35, 0, 0,233, 0,233, 0, 0, 0, 0, 35, 35, 35, 35, 35, 0,16,16,16,
- 16,16,16, 0, 0, 0, 0, 35, 35, 35, 0, 0, 0, 0,233, 0, 0, 0, 35, 35, 35, 35, 35, 35, 0,16,16,
- 16,16,16,16,16, 0, 0, 0, 0, 35, 0, 0,233, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 0, 0,16,
- 16,16,16,16,16,16,16,16, 0, 0, 35, 0, 0, 0, 0, 0, 35, 35, 0, 0, 0, 0, 0, 0,233, 0,16,
- 16,16,16,16,16,16,16,16,16, 0, 0, 35, 35, 35, 35, 0, 35, 0, 0,16,16, 0, 0,233, 0, 0,16,
- 16,16,16,16,16,16,16,16,16,16, 0, 0, 0, 35, 0, 35, 0, 0, 0,233,16,16, 0, 0, 0,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16, 0, 0, 0, 0, 0,233,233, 0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0, 35, 35, 35, 0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0, 35, 35, 0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0, 35, 0, 0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0, 0, 0, 0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0, 0, 0, 0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0, 0, 0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
- };
-static char B_runup2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0, 35,0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0, 35,0,16,16,16,16,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,233,233,233, 35, 0,16,16,16,16,0,233, 35,0,16,16,
- 16,16,16,16,16,16,16,16,16,0,233,0,233,233,233,233, 0,16,0,0,0,0,0,233,0,16,16,
- 16,16,16,16,16,16,0,0,0,0,0,233,0,233,0,233,0,0, 35, 35, 35, 35, 35,0,0,16,16,
- 16,16,16,16,0,0,0, 35, 35,0,233,0,233,0,233,0,0,0, 35, 35, 35, 35, 35, 35,0,16,16,
- 16,16,16,0, 35, 35, 35, 35, 35,0,0,0,0,233,0,233,0,0, 35, 35, 35, 35, 35,0,16,16,16,
- 16,16,0, 35, 35, 35, 35, 35, 35,0,0,0,233,0,0,0,0, 35, 35, 35,0,0,0,0,16,16,16,
- 16,0,0, 35, 35, 35, 35, 35, 35, 35,0,0,0,0,233,0,0, 35,0,0,0,0,16,16,16,16,16,
- 16,0,233,0,0,0,0,0,0, 35, 35,0,0,0,0,0, 35,0,0,16,16,16,16,16,16,16,16,
- 16,0,0,233,0,0,16,16,0,0, 35,0, 35, 35, 35, 35, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,0,0,0,16,16,233,0,0,0, 35,0, 35,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,233,233,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0, 35, 35, 35,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0, 35, 35,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0, 35,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
- };
-static char B_runru_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,4,77,0,12,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,4,100,246,169,8,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,37,68,68,68,8,16,16,16,16,16,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,219, 35,219,0,8,16,16,16,4,0,0,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,0,219, 35, 35,219,0,12,16,4,36,36,0,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,4,110, 35, 35, 35,219,4,16,45,219,218,73,4,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,0,110, 35, 35, 35,41,8,36,182,0,4,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,12,0,146, 35, 35,73,0,32,233,242,165,0,12,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,218,182,0,0,132,133,233,233,165,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,219,146,32,201,133,132,233,233,165,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,146,0,0,32,100,32,132,132,32,68,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,146,36,165,64,100,100,132,133,100,100,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,219,110,64,0,132,100,0,165,64,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,37, 35,110,0,0,0,0,0,73,110,4,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,37, 35, 35,73,36,0,37,73, 35, 35,73,4,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,4,37,110,73,219,219, 35, 35, 35, 35,37,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,4,110,73,110,146,109, 35, 35, 35, 35,37,8,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,36,73,68,0,0,4,73, 35, 35, 35,218,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,77, 35,238,133,137,48,8,73, 35, 35,182,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,12,4,146, 35, 35,101,72,16,4,0,73, 35,110,8,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,4,36,218,182,109,4,16,16,8,32,100,137,0,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,0,0,4,16,16,16,8,32,100,100,0,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,0,0,4,16,16,16,16,16,8,4,4,12,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,0,4,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
- };
-
- static char B_runru2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,8,12,12,8,12,12,8,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,12,0,0,110,182,218,37,8,4,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,4,100,137, 35, 35, 35, 35,37,73,4,16,12,12,12,12,16,16,16,12,16,16,16,16,16,16,
- 16,16,4,100,100,73, 35, 35, 35, 35, 35,110,0,100,68,0,0,12,16,4,0,8,16,16,16,16,16,
- 16,16,8,32,32,0,73, 35, 35, 35, 35,73,64,100,32,165,165,0,4,73,0,0,12,16,16,16,16,
- 16,16,16,8,8,4,8,73, 35, 35,73,0,165,133,132,233,233,165,0,218,36,0,16,16,16,16,16,
- 16,16,16,16,16,16,48,4,109, 35,37,0,0,132,132,233,233,242,182,219,36,4,16,16,16,16,16,
- 16,16,16,16,16,72,137,0,146,219,0,0,100,100,32,132, 133,233,36,45,4,16,16,16,16,16,16,
- 16,16,16,16,4,101,133,0,110,219,36,0,132,100,100,133,132,32,8,16,16,16,16,16,16,16,16,
- 16,16,16,4,109, 35,238,68,73,73,73,0,0,64,32,201,0,0,41,4,12,16,16,16,16,16,16,
- 16,16,4,0,182, 35, 35,73,110,110, 35,110,64,165,0,32,0,73, 35,219,0,8,8,8,12,16,16,
- 16,4,0,0,218,146,77,36,4,37, 35, 35,110,36,0,146,182, 35, 35, 35,219,0,68,169,0,16,16,
- 12,0,0,0,36,4,12,12,16,4,37,37,219,146,146,219,218, 35, 35, 35, 35,219,68,246,77,16,16,
- 16,8,0,0,4,12,16,16,16,16,8,8,0,0,0,0,0,146,110, 35, 35, 35,68,100,4,16,16,
- 16,16,12,16,16,16,16,16,16,16,16,16,12,12,16,12,12,0,0,110,219,219,37,4,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,12,8,4,0,8,8,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,12,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
- };
-
-static char B_rundes_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,233,0,0,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,233,0, 35, 35,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,0, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,0,0,0,0,233,16,0, 35, 35, 35, 35,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,0, 35, 35,233,0,0,0, 35, 35, 35, 35,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0, 35, 35, 35,233,0,0, 35, 35,0,0, 0,0,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,0,0,0,0, 35,0,0, 35, 35,0,0,0, 233,0,233,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0, 35,0,0,0,0,0, 0,233,0,0,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0, 35,0,0,233,0, 233,0,233,233,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0, 35, 35,0,0,0,233, 0,233,233,233,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0, 35,0,233,0,0, 233,0,233,233,0,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0, 35,0,0,0,233, 0,233,233, 35,0, 35,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0, 35,0,0,0, 0,0,0,0, 35,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0, 35, 35,0, 0,0,16,16,0,0,0,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0, 35, 35, 35, 35,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 35,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 35, 35, 35,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 35, 35, 35,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35,0,233,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 35,0,233, 35,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0,0,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-
-static char B_rundes2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 0,0,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 35,0,233, 35,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35,0,233,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 35, 35, 35,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 35, 35, 35,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 35,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0, 35, 35, 35, 35,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0, 35, 35,0, 0,0,16,16,0,0,0,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0, 35,0,0,0, 0,0,0,0, 35,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0, 35,0,0,0,233, 0,233,233, 35,0, 35,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0, 35,0,233,0,0, 233,0,233,233,0,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,0, 35, 35,0,0,0,233, 0,233,233,233,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0, 35,0,0,233,0, 233,0,233,233,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0, 35,0,0,0,0,0, 0,233,0,0,0,16,16,16,16,16,16,
- 16,16,16,16,0,0,0,0, 35,0,0, 35, 35,0,0,0, 233,0,233,0,16,16,16,16,16,16,16,
- 16,16,16,0,0,0, 35, 35, 35,233,0,0, 35, 35,0,0, 0,0,0,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,0, 35, 35,233,0,0,0, 35, 35, 35, 35,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,0,0,0,0,233,16,0, 35, 35, 35, 35,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,0, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,233,0, 35, 35,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,233,0,0,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char B_runrd_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,0,4,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,0,0,4,16,16,16,16, 16,8,4,4,12,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,0,0,4,16,16,16, 8,32,100,100,0,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,4,36,218,182,109,4,16,16, 8,32,100,137,0,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,12,4,146, 35, 35,101,72,16, 4,0,73, 35,110,8,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,77, 35,238,133,137,48, 8,73, 35, 35,182,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,36,73,68,0,0,4, 73, 35, 35, 35,218,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,4,110,73,110,146,109, 35, 35, 35, 35,37,8,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,4,37,110,73,219,219, 35, 35, 35, 35,37,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,37, 35, 35,73,36,0,37, 73, 35, 35,73,4,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,37, 35,110,0,0,0,0, 0,73,110,4,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,219,110,64,0,132,100,0, 165,64,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,146,36,165,64,100,100,132, 133,100,100,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,146,0,0,32,100,32,132, 132,32,68,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,219,146,32,201,133,132,233, 233,165,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,218,182,0,0,132,133,233, 233,165,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,12,0,146, 35, 35,73,0,32,233,242, 165,0,12,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,0,110, 35, 35, 35,41,8,36,182, 0,4,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,4,110, 35, 35, 35,219,4,16,45,219, 218,73,4,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,0,219, 35, 35,219,0,12,16,4,36, 36,0,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,219, 35,219,0,8,16,16,16,4, 0,0,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,37,68,68,68,8,16,16,16,16, 16,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,4,100,246,169,8,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,4,77,0,12,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char B_runrd2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,12,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,12,8,4,0,8,8,16,16,16,16,
- 16,16,12,16,16,16,16,16,16,16,16,16,12,12,16,12, 12,0,0,110,219,219,37,4,16,16,16,
- 16,8,0,0,4,12,16,16,16,16,8,8,0,0,0,0, 0,146,110, 35, 35, 35,68,100,4,16,16,
- 12,0,0,0,36,4,12,12,16,4,37,37,219,146,146,219, 218, 35, 35, 35, 35,219,68,246,77,16,16,
- 16,4,0,0,218,146,77,36,4,37, 35, 35,110,36,0,146, 182, 35, 35, 35,219,0,68,169,0,16,16,
- 16,16,4,0,182, 35, 35,73,110,110, 35,110,64,165,0,32, 0,73, 35,219,0,8,8,8,12,16,16,
- 16,16,16,4,109, 35,238,68,73,73,73,0,0,64,32,201, 0,0,41,4,12,16,16,16,16,16,16,
- 16,16,16,16,4,101,133,0,110,219,36,0,132,100,100,133, 132,32,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,72,137,0,146,219,0,0,100,100,32,132, 133,233,36,45,4,16,16,16,16,16,16,
- 16,16,16,16,16,16,48,4,109, 35,37,0,0,132,132,233, 233,242,182,219,36,4,16,16,16,16,16,
- 16,16,16,8,8,4,8,73, 35, 35,73,0,165,133,132,233, 233,165,0,218,36,0,16,16,16,16,16,
- 16,16,8,32,32,0,73, 35, 35, 35, 35,73,64,100,32,165, 165,0,4,73,0,0,12,16,16,16,16,
- 16,16,4,100,100,73, 35, 35, 35, 35, 35,110,0,100,68,0, 0,12,16,4,0,8,16,16,16,16,16,
- 16,16,4,100,137, 35, 35, 35, 35,37,73,4,16,12,12,12, 12,16,16,16,12,16,16,16,16,16,16,
- 16,16,12,0,0,110,182,218,37,8,4,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,8,12,12,8,12,12,8,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char B_rundown_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0, 35,0,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0, 35, 35,0,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0, 35, 35, 35,0,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,233,233,0,0,0,0,0,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,0,0,0,16,16,233,0,0,0, 35,0, 35,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,0,0,233,0,0,16,16,0,0, 35,0, 35, 35, 35, 35, 0,0,16,16,16,16,16,16,16,16,16,
- 16,0,233,0,0,0,0,0,0, 35, 35,0,0,0,0,0, 35,0,0,16,16,16,16,16,16,16,16,
- 16,0,0, 35, 35, 35, 35, 35, 35, 35,0,0,0,0,233,0, 0, 35,0,0,0,0,16,16,16,16,16,
- 16,16,0, 35, 35, 35, 35, 35, 35,0,0,0,233,0,0,0, 0, 35, 35, 35,0,0,0,0,16,16,16,
- 16,16,16,0, 35, 35, 35, 35, 35,0,0,0,0,233,0,233, 0,0, 35, 35, 35, 35, 35,0,16,16,16,
- 16,16,16,16,0,0,0, 35, 35,0,233,0,233,0,233,0, 0,0, 35, 35, 35, 35, 35, 35,0,16,16,
- 16,16,16,16,16,16,0,0,0,0,0,233,0,233,0,233, 0,0, 35, 35, 35, 35, 35,0,0,16,16,
- 16,16,16,16,16,16,16,16,16,0,233,0,233,233,233,233, 0,16,0,0,0,0,0,233,0,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,233,233,233, 35, 0,16,16,16,16,0,233, 35,0,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0, 35,0,16,16,16,16,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0, 35, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char B_rundown2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0, 35,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0, 35, 35,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,233,233,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,0, 35,0, 35,0,0,0,233,16,16,0,0,0,16,16,
- 16,16,16,16,16,16,16,16,16,0,0, 35, 35, 35, 35,0, 35,0,0,16,16,0,0,233,0,0,16,
- 16,16,16,16,16,16,16,16,0,0, 35,0,0,0,0,0, 35, 35,0,0,0,0,0,0,233,0,16,
- 16,16,16,16,16,0,0,0,0, 35,0,0,233,0,0,0,0, 35, 35, 35, 35, 35, 35, 35,0,0,16,
- 16,16,16,0,0,0,0, 35, 35, 35,0,0,0,0,233,0,0,0, 35, 35, 35, 35, 35, 35,0,16,16,
- 16,16,16,0, 35, 35, 35, 35, 35,0,0,233,0,233,0,0,0,0, 35, 35, 35, 35, 35,0,16,16,16,
- 16,16,0, 35, 35, 35, 35, 35, 35,0,0,0,233,0,233,0,233,0, 35, 35,0,0,0,16,16,16,16,
- 16,16,0,0, 35, 35, 35, 35, 35,0,0,233,0,233,0,233,0,0,0,0,0,16,16,16,16,16,16,
- 16,16,0,233,0,0,0,0,0,16,0,233,233,233,233,0,233,0,16,16,16,16,16,16,16,16,16,
- 16,16,0, 35,233,0,16,16,16,16,0, 35,233,233,233,0,0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,16,16,16,16,0, 35,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0, 35,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
- };
-
-static char B_runld_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 4,0,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,12,4,4,8,16,16,16,16,16,4, 0,0,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,0,100,100,32,8,16,16,16,4,0, 0,0,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,0,137,100,32,8,16,16,4,109,182, 218,36,4,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,8,110, 35,73,0,4,16,72,101, 35, 35, 146,4,12,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,182, 35, 35,73,8,48,137,133,238, 35, 77,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,218, 35, 35, 35,73,4,0,0,68,73, 36,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,8,37, 35, 35, 35, 35,109,146,110,73,110, 4,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,37, 35, 35, 35, 35,219,219,73,110, 37,4,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,4,73, 35, 35,73,37,0,36,73, 35, 35,37,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,4,110,73,0,0,0,0,0,110, 35,37,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,64,165,0,100,132,0,64, 110,219,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,100,100,133,132,100,100,64,165, 36,146,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,68,32,132,132,32,100,32,0, 0,146,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,165,233,233,132,133,201,32, 146,219,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,165,233,233,133,132,0,0, 182,218,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,12,0,165,242,233,32,0,73, 35, 35,146,0,12,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,4,0,182,36,8,41, 35, 35, 35,110,0,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,4,73,218,219,45,16,4,219, 35, 35, 35,110,4,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,0,36,36,4,16,12,0, 219, 35, 35,219,0,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,0,0,4,16,16,16,8, 0,219, 35,219,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,16,16,16,16,16,8, 68,68,68,37,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,8, 169,246,100,4,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,12, 0,77,4,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char B_runld2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,12,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,8,8,0,4,8,12,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,4,37,219,219,110,0,0,12,12,16,12,12,16, 16,16,16,16,16,16,16,16,12,16,16,
- 16,16,4,100,68, 35, 35, 35,110,146,0,0,0,0,0,8, 8,16,16,16,16,12,4,0,0,8,16,
- 16,16,77,246,68,219, 35, 35, 35, 35,218,219,146,146,219,37, 37,4,16,12,12,4,36,0,0,0,12,
- 16,16,0,169,68,0,219, 35, 35, 35,182,146,0,36,110, 35, 35,37,4,36,77,146,218,0,0,4,16,
- 16,16,12,8,8,8,0,219, 35,73,0,32,0,165,64,110, 35,110,110,73, 35, 35,182,0,4,16,16,
- 16,16,16,16,16,16,12,4,41,0,0,201,32,64,0,0, 73,73,73,68,238, 35,109,4,16,16,16,
- 16,16,16,16,16,16,16,16,8,32,132,133,100,100,132,0, 36,219,110,0,133,101,4,16,16,16,16,
- 16,16,16,16,16,16,4,45,36,233,133,132,32,100,100,0, 0,219,146,0,137,72,16,16,16,16,16,
- 16,16,16,16,16,4,36,219,182,242,233,233,132,132,0,0, 37, 35,109,4,48,16,16,16,16,16,16,
- 16,16,16,16,16,0,36,218,0,165,233,233,132,133,165,0, 73, 35, 35,73,8,4,8,8,16,16,16,
- 16,16,16,16,12,0,0,73,4,0,165,165,32,100,64,73, 35, 35, 35, 35,73,0,32,32,8,16,16,
- 16,16,16,16,16,8,0,4,16,12,0,0,68,100,0,110, 35, 35, 35, 35, 35,73,100,100,4,16,16,
- 16,16,16,16,16,16,12,16,16,16,12,12,12,12,16,4, 73,37, 35, 35, 35, 35,137,100,4,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 4,8,37,218,182,110,0,0,12,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,8,12,12,8,12,12,8,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char B_runleft_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0,233,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0, 35, 35,0,233, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0, 35, 35, 35,0,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 35,0,16, 233,0,0,0,0,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 35,0,0, 0,233, 35, 35,0,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,0,0,0, 35, 35,0, 0,233, 35, 35, 35,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,0,233,0,233,0,0,0, 35, 35, 0,0, 35,0,0,0,0,16,16,16,16,
- 16,16,16,16,16,16,0,0,0,233,0,0,0,0,0,0, 35,0,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,233,233,0,233,0,233,0,0, 35, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,233,233,233,0,233,0,0,0, 35, 35,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,0,233,233,0,233,0,0,233,0, 35, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0, 35,0, 35,233,233,0,233,0,0,0, 35, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0, 35,0,0,0,0,0,0,0, 35,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,0,0,0,16,16,0,0,0, 35, 35,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0, 35, 35, 35, 35,0,0,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0, 35, 35, 35, 35,0,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0, 35, 35, 35,0,0,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0, 35, 35, 35,0,0,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,233,0, 35, 35, 35,0,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0, 35,233,0, 35,0,0,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char B_runleft2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0, 35,233,0, 35,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,233,0, 35, 35, 35,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0, 35, 35, 35,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0, 35, 35, 35,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0, 35, 35, 35, 35,0,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0, 35, 35, 35, 35,0,0,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,0,0,0,16,16,0,0,0, 35, 35,0,0,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0, 35,0,0,0,0,0,0,0, 35,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0, 35,0, 35,233,233,0,233,0,0,0, 35,0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,0,0,0,0,233,233,0,233,0,0,233,0, 35,0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,233,233,233,0,233,0,0,0, 35, 35,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,233,233,0,233,0,233,0,0, 35,0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,0,0,233,0,0,0,0,0,0, 35,0,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,233,0,233,0,0,0, 35, 35,0,0, 35,0,0,0,0,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,0,0,0, 35, 35,0,0,233, 35, 35, 35,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 35,0,0,0,233, 35, 35,0,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 35,0,16,233,0,0,0,0,0,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0, 35, 35, 35,0,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35,0,0,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35,0,0,0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0, 35, 35,0,233,0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0,233,0,0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
- };
-
-static char B_runlu_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,12, 0,77,4,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,8, 169,246,100,4,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,12,16,16,16,16,16,8, 68,68,68,37,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,0,0,4,16,16,16,8, 0,219, 35,219,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,0,36,36,4,16,12,0, 219, 35, 35,219,0,12,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,4,73,218,219,45,16,4,219, 35, 35, 35,110,4,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,4,0,182,36,8,41, 35, 35, 35,110,0,8,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,12,0,165,242,233,32,0,73, 35, 35,146,0,12,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,165,233,233,133,132,0,0, 182,218,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,0,165,233,233,132,133,201,32, 146,219,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,68,32,132,132,32,100,32,0, 0,146,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,12,100,100,133,132,100,100,64,165, 36,146,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,64,165,0,100,132,0,64, 110,219,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,4,110,73,0,0,0,0,0,110, 35,37,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,4,73, 35, 35,73,37,0,36,73, 35, 35,37,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,8,37, 35, 35, 35, 35,219,219,73,110, 37,4,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,8,37, 35, 35, 35, 35,109,146,110,73,110, 4,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,218, 35, 35, 35,73,4,0,0,68,73, 36,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,182, 35, 35,73,8,48,137,133,238, 35, 77,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,8,110, 35,73,0,4,16,72,101, 35, 35, 146,4,12,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,0,137,100,32,8,16,16,4,109,182, 218,36,4,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,12,0,100,100,32,8,16,16,16,4,0, 0,0,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,12,4,4,8,16,16,16,16,16,4, 0,0,0,12,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 4,0,8,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,12,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char B_runlu2_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,8,12,12,8,12,12,8,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 4,8,37,218,182,110,0,0,12,16,16,
- 16,16,16,16,16,16,12,16,16,16,12,12,12,12,16,4, 73,37, 35, 35, 35, 35,137,100,4,16,16,
- 16,16,16,16,16,8,0,4,16,12,0,0,68,100,0,110, 35, 35, 35, 35, 35,73,100,100,4,16,16,
- 16,16,16,16,12,0,0,73,4,0,165,165,32,100,64,73, 35, 35, 35, 35,73,0,32,32,8,16,16,
- 16,16,16,16,16,0,36,218,0,165,233,233,132,133,165,0, 73, 35, 35,73,8,4,8,8,16,16,16,
- 16,16,16,16,16,4,36,219,182,242,233,233,132,132,0,0, 37, 35,109,4,48,16,16,16,16,16,16,
- 16,16,16,16,16,16,4,45,36,233,133,132,32,100,100,0, 0,219,146,0,137,72,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,8,32,132,133,100,100,132,0, 36,219,110,0,133,101,4,16,16,16,16,
- 16,16,16,16,16,16,12,4,41,0,0,201,32,64,0,0, 73,73,73,68,238, 35,109,4,16,16,16,
- 16,16,12,8,8,8,0,219, 35,73,0,32,0,165,64,110, 35,110,110,73, 35, 35,182,0,4,16,16,
- 16,16,0,169,68,0,219, 35, 35, 35,182,146,0,36,110, 35, 35,37,4,36,77,146,218,0,0,4,16,
- 16,16,77,246,68,219, 35, 35, 35, 35,218,219,146,146,219,37, 37,4,16,12,12,4,36,0,0,0,12,
- 16,16,4,100,68, 35, 35, 35,110,146,0,0,0,0,0,8, 8,16,16,16,16,12,4,0,0,8,16,
- 16,16,16,4,37,219,219,110,0,0,12,12,16,12,12,16, 16,16,16,16,16,16,16,16,12,16,16,
- 16,16,16,16,8,8,0,4,8,12,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,12,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-/*
-static char portesx_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0,0,0,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,0, 100,0,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0, 100, 100,0,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0, 100, 100, 100,0,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,0,233,233,0,0,0,0,0,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,0,0,0,16,16,233,0,0,0, 100,0, 100,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,0,0,233,0,0,16,16,0,0, 100,0, 100, 100, 100, 100, 0,0,16,16,16,16,16,16,16,16,16,
- 16,0,233,0,0,0,0,0,0, 100, 100,0,0,0,0,0, 100,0,0,16,16,16,16,16,16,16,16,
- 16,0,0, 100, 100, 100, 100, 100, 100, 100,0,0,0,0,233,0, 0, 100,0,0,0,0,16,16,16,16,16,
- 16,16,0, 100, 100, 100, 100, 100, 100,0,0,0,233,0,0,0, 0, 100, 100, 100,0,0,0,0,16,16,16,
- 16,16,16,0, 100, 100, 100, 100, 100,0,0,0,0,233,0,233, 0,0, 100, 100, 100, 100, 100,0,16,16,16,
- 16,16,16,16,0,0,0, 100, 100,0,233,0,233,0,233,0, 0,0, 100, 100, 100, 100, 100, 100,0,16,16,
- 16,16,16,16,16,16,0,0,0,0,0,233,0,233,0,233, 0,0, 100, 100, 100, 100, 100,0,0,16,16,
- 16,16,16,16,16,16,16,16,16,0,233,0,233,233,233,233, 0,16,0,0,0,0,0,233,0,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,233,233,233, 100, 0,16,16,16,16,0,233, 100,0,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0, 100,0,16,16,16,16,0,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0, 100, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-
-
-static char calcdes_data[] = {
- 16 ,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16,16,16, 0, 0, 0, 0,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16,16, 0, 0, 35, 0,233, 0,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16, 0, 35, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16, 0, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16, 0, 0, 35, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16, 0, 35, 35, 35, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16, 0, 35, 35, 0, 0, 0, 0, 0, 0,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16, 0, 35, 0, 0, 0, 0,233,233,233, 0, 0,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16, 0, 35, 0, 0,233, 0,233, 0,233,233, 35, 0,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16, 0, 35, 35, 0, 0, 0,233, 0,233, 0,233,233, 0,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16, 0, 35, 35, 0, 0, 0, 0,233, 0,233, 0,233, 0,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16, 0, 35, 35, 0, 0, 0, 0, 0,233, 0,233, 0, 0,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16, 0, 35, 0, 0, 0,233, 0, 0,233, 0, 0,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16, 0, 0, 35, 35, 0, 0, 0, 0, 0, 0,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16, 0, 35, 35, 35, 35, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16, 0, 35, 35, 35, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16, 0, 0, 35, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16, 0, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16, 0, 35, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16,16, 0, 0, 35, 0,233, 0,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16,16,16, 0, 0, 0, 0,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16 ,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-
- 16 ,16 ,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
- };
-
-static char calcdown_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0, 35, 35, 35, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0, 35, 35, 35, 35, 35, 35,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0, 35, 35,0,0,0,0, 0,0, 35,0,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,0,0,0, 35, 35, 35,0,0,0,0, 0,0, 35, 35,0,0,0,16,16,16,16,
- 16,16,16,16,16,0, 35, 35, 35, 35, 35,0,0,0,0,0, 233,0,0, 35, 35, 35, 35,0,16,16,16,
- 16,16,16,16,0,0, 35, 35, 35, 35, 35,0,233,0,0,233, 0,0,0, 35, 35, 35, 35,0,0,16,16,
- 16,16,16,16,0, 35, 35, 35, 35, 35, 35,0,0,0,233,0, 233,233,0, 35, 35, 35, 35, 35,0,16,16,
- 16,16,16,16,0,0, 35,0, 35, 35, 35,0,0,233,0,233, 0,233,0, 35, 35,0, 35,0,0,16,16,
- 16,16,16,16,0,233,0,16,0, 35, 35,0,233,0,233,0, 233,233,0, 35,0,16,0,233,0,16,16,
- 16,16,16,16,16,0,16,16,16,0,0,0,0,233,0,233, 233,0,0,0,16,16,16,0,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0,233,233, 35,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char calcleft_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,233,0, 35,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 35, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 35, 35, 35,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0, 35, 35,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0,233,233,233,0,0, 0,0, 35,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0, 35,233,233,0,233,0,233, 0,0, 35,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,233,233,0,233,0,233,0, 0,0, 35, 35,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,233,0,233,0,233,0,0, 0,0, 35, 35,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0,233,0,233,0,0,0, 0,0, 35, 35,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,0,0,233,0,0,233,0, 0,0, 35,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0, 35, 35,0,0,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 35, 35, 35, 35,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 35, 35, 35,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 35, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0, 35, 35, 35, 35, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,233,0, 35,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };
-static char calcup_data[] = {
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, 0,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,0,0,233,233, 35,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,0,16,16,16,0,0,0,0,233,0,233, 233,0,0,0,16,16,16,0,16,16,16,
- 16,16,16,16,0,233,0,16,0, 35, 35,0,233,0,233,0, 233,233,0, 35,0,16,0,233,0,16,16,
- 16,16,16,16,0,0, 35,0, 35, 35, 35,0,0,233,0,233, 0,233,0, 35, 35,0, 35,0,0,16,16,
- 16,16,16,16,0, 35, 35, 35, 35, 35, 35,0,0,0,233,0, 233,233,0, 35, 35, 35, 35, 35,0,16,16,
- 16,16,16,16,0,0, 35, 35, 35, 35, 35,0,233,0,0,233, 0,0,0, 35, 35, 35, 35,0,0,16,16,
- 16,16,16,16,16,0, 35, 35, 35, 35, 35,0,0,0,0,0, 233,0,0, 35, 35, 35, 35,0,16,16,16,
- 16,16,16,16,16,16,0,0,0, 35, 35, 35,0,0,0,0, 0,0, 35, 35,0,0,0,16,16,16,16,
- 16,16,16,16,16,16,16,16,0,0, 35, 35,0,0,0,0, 0,0, 35,0,0,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,0,0, 35, 35, 35, 35, 35, 35,0,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,0,0, 35, 35, 35, 0,0,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,16
- };*/
-
Index: start/soccer/position.h
===================================================================
--- start/soccer/position.h (revision 1087)
+++ start/soccer/position.h (nonexistent)
@@ -1,57 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- ------------
- CVS : $Id: position.h,v 1.1.1.1 2002-09-02 09:37:44 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:44 $
- ------------
-*/
-
-/*
- * Copyright (C) 2000 Merli Andrea and Zucchetti Alessandro
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "iniziali.h"
-
-struct position{
- int x;
- int y;
- float dx;
- float dy;
-} initial_calc_position[]={{ORI_RES/5,VER_RES/5+100},{ORI_RES/5,8*VER_RES/10},{ORI_RES/2,VER_RES/2+40},{9*ORI_RES/10,VER_RES/5+100},{9*ORI_RES/10,8*VER_RES/10}};
-
-
Index: start/soccer/images.h
===================================================================
--- start/soccer/images.h (revision 1087)
+++ start/soccer/images.h (nonexistent)
@@ -1,82 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- ------------
- CVS : $Id: images.h,v 1.1.1.1 2002-09-02 09:37:44 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:44 $
- ------------
-*/
-
-/*
- * Copyright (C) 2000 Merli Andrea and Zucchetti Alessandro
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#define SFONDO rgb16(0,128,0)
-#define B 255 /*BIANCO*/
-#define V 16 /*verde*/
-#define M 200 /*marrone*/
-#define C 15 /*bianco*/
-#define G 14 /*Giallo*/
-#define N 0 /*NERO*/
-#define P 13 /*Rosa*/
-
-char pallone[64]={ V,V,V,V,V,V,V,V,
- V,V,B,B,B,B,V,V,
- V,N,B,B,B,B,N,V,
- B,B,N,B,B,N,B,B,
- B,B,B,N,N,B,B,B,
- B,B,N,B,B,N,B,B,
- V,N,B,B,B,B,N,V,
- V,V,B,B,B,B,V,V,
- };
-char goal_data[]={N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,
- N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,
- N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,
- N,N,G,G,G,G,N,G,G,G,N,G,G,G,N,G,N,N,N,N,
- N,N,G,N,N,N,N,G,N,G,N,G,N,G,N,G,N,N,N,N,
- N,N,G,N,N,N,N,G,N,G,N,G,N,G,N,G,N,N,N,N,
- N,N,G,N,N,N,N,G,N,G,N,G,N,G,N,G,N,N,N,N,
- N,N,G,N,N,N,N,G,N,G,N,G,N,G,N,G,N,N,N,N,
- N,N,G,N,G,G,N,G,N,G,N,G,G,G,N,G,N,N,N,N,
- N,N,G,N,N,G,N,G,N,G,N,G,N,G,N,G,N,N,N,N,
- N,N,G,G,G,G,N,G,G,G,N,G,N,G,N,G,G,G,N,N,
- N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,
- N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,
- N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,
- N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,
- };
-
Index: start/cash/readme.txt
===================================================================
--- start/cash/readme.txt (revision 1087)
+++ start/cash/readme.txt (nonexistent)
@@ -1,6 +0,0 @@
-This Example has been made by Marco Caccamo.
-
-There is not a lot of documentation available, so if you have problems please
-send an e-mail to Marco ( http://gandalf.sssup.it/~caccamo/ )
-
-Paolo
Index: start/cash/makefile
===================================================================
--- start/cash/makefile (revision 1087)
+++ start/cash/makefile (nonexistent)
@@ -1,16 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-
-include $(BASE)/config/config.mk
-
-PROGS=testcash
-
-include $(BASE)/config/example.mk
-
-testcash:
- make -f $(SUBMAKE) APP=testcash INIT= OTHEROBJS="initcash.o cash.o" OTHERINCL=
Index: start/cash/testcash.c
===================================================================
--- start/cash/testcash.c (revision 1087)
+++ start/cash/testcash.c (nonexistent)
@@ -1,455 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: testcash.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-
- testcash.c
- test for the CASH Module, directly derived from Test Number 13 (D)
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "cash.h"
-#include <math.h>
-#include <string.h>
-
-#define ASTER_LIM 60
-#define DISPLAY_MAX 15
-
-#define STAT_Y 9
-
-#define INPUT 0.5
-
-
-
-#define MAX_STAT 10000
-#define RVAL 1
-#define XVAL 2
-#define DVAL 3
-
-
-struct statistic {
- TIME r_time;
- TIME ex_time;
- long dead_post;
-};
-
-
-
- struct statistic stat[MAX_STAT];
- TIME val[MAX_STAT];
-
-int n_stat = 0;
-
-TASK hard_asteroide(void)
-{
- int i;
- int y = rand() % 7 + 1;
- double avg, l, fix, u;
- double wcet = 40200;
- int load1,j;
-
- char s[2];
-
- s[0] = 'H'; s[1] = 0;
- /* exponential distribution parameters */
- fix = wcet - 10.0/9.0 * wcet * (1 - INPUT);
- avg = 1.0/9.0 * wcet * (1 - INPUT);
- l = 10.0 / 9.0 * wcet * (1 - INPUT);
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- /* exponential distribution */
- u = (double)rand();
-
- u = u / (double)RAND_MAX;
-
- u = -avg * log(u);
- if (u > l)
- u = avg;
-
-
- load1 = fix + u;
-
- for (j=0; j<load1; j++) {
- puts_xy(i,y,rand()%15+1,s);
- }
- //kern_cli();
- //stat[n_stat].r_time = CBSGHD_get_response_time(1, exec_shadow);
- //jet_gettable(exec_shadow, &stat[n_stat].ex_time, 1);
- //kern_sti();
- //n_stat++;
- task_endcycle();
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
-}
-
-
-TASK hard_asteroide1(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = 'H'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 40000 + rand()%20000;
- for (j=0; j<load1; j++) {
- puts_xy(i,y,rand()%15+1,s);
- }
- //kern_cli();
- //stat[n_stat].r_time = CBSGHD_get_response_time(1, exec_shadow);
- //jet_gettable(exec_shadow, &stat[n_stat].ex_time, 1);
- //kern_sti();
- //n_stat++;
- task_endcycle();
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
-}
-
-
-TASK hard_asteroide2(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = 'H'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 80500; // + rand()%6000;
- for (j=0; j<load1; j++) {
- puts_xy(i,y,rand()%15+1,s);
- }
- //kern_cli();
- //stat[n_stat].r_time = CBSGHD_get_response_time(5, exec_shadow);
- //jet_gettable(exec_shadow, &stat[n_stat].ex_time, 1);
- //kern_sti();
- //n_stat++;
- task_endcycle();
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
-}
-
-TASK hard_asteroide3(void)
-{
- int i;
- int y = rand() % 7 + 1;
-
- int load1,j;
-
- char s[2];
-
- s[0] = 'T'; s[1] = 0;
-
- for (;;) {
- i = 1;
- while (i < ASTER_LIM) {
- load1 = 27000;
- for (j=0; j<load1; j++) {
- puts_xy(i,y,rand()%15+1,s);
- }
- //kern_cli();
- //stat[n_stat].r_time = CBSGHD_get_response_time(5, exec_shadow);
- //jet_gettable(exec_shadow, &stat[n_stat].ex_time, 1);
- //kern_sti();
- //n_stat++;
- task_endcycle();
- puts_xy(i,y,WHITE," ");
- i++;
- }
- }
-}
-
-
-TASK clock()
-{
- int s = 0, m = 0;
-
- while(1) {
- printf_xy(62,1,WHITE,"%2d:%2d",m,s);
- printf_xy(62,2,WHITE,"Utot=%12u",MAX_BANDWIDTH);
- printf_xy(62,3,WHITE,"Uedf=%12u",EDF_usedbandwidth(0));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBSGHD_usedbandwidth(1));
- task_endcycle();
-
- if (++s > 59) {
- s = 0;
- m++;
- }
- printf_xy(62,1,WHITE,"%2d:%2d",m,s);
- printf_xy(62,2,WHITE,"Utot=%12u",MAX_BANDWIDTH);
- printf_xy(62,3,WHITE,"Uedf=%12u",EDF_usedbandwidth(0));
- printf_xy(62,4,WHITE,"Ucbs=%12u",CBSGHD_usedbandwidth(1));
- task_endcycle();
- }
-}
-
-
-
-/* we consider the first ASTER_MAX + 2 tasks from the PID 2
- and plot on the screen the elapsed times... */
-TASK jetcontrol()
-{
- int i; /* a counter */
- TIME sum, max, curr, last[5];
- int nact;
- int j; /* the elements set by jet_gettable */
- PID p;
-
-
- kern_cli();
- printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
- kern_sti();
-
- for (;;) {
- for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
- if (jet_getstat(p, &sum, &max, &nact, &curr) == -1) continue;
-
- for (j=0; j<5; j++) last[j] = 0;
- jet_gettable(p, &last[0], 5);
- kern_cli();
- printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6ld ³ %-6ld ³ %-4d ³ %-7ld ³ %-5ld ³ %-5ld ³ %-5ld ³ %-5ld ³ %-5ld", p, sum/(nact==0 ? 1 : nact), max,
- nact, curr, last[0], last[1], last[2], last[3], last[4]);
- kern_sti();
- i++;
- }
- task_endcycle();
- }
-}
-
-
-void save_stat(struct statistic p[], int n, char *name, int type)
-{
- DOS_FILE *f;
- int i;
- char outstring[500];
-
-
- for(i = 0; i < 500; i++)
- outstring[i] = '0';
-
- f = DOS_fopen(name, "w");
- if (!f) {
- cprintf("Cannot open %s!!!", name);
- goto end1;
- }
-
- for(i = 0; i < n; i++) {
- if (type == RVAL)
- val[i] = p[i].r_time;
- if (type == XVAL)
- val[i] = p[i].ex_time;
- if (type == DVAL)
- val[i] = p[i].dead_post;
- }
-
- memset(outstring, 0, 300);
- sprintf(outstring, "%ld \n", (long int)n);
- cprintf("%s", outstring);
- DOS_fwrite(outstring, 1, strlen(outstring), f);
-
- for(i = 0; i < n; i++) {
- memset(outstring, 0, 300);
- sprintf(outstring, "%ld %lu\n", (long int)i, val[i]);
- //cprintf("%s", outstring);
- DOS_fwrite(outstring, 1, strlen(outstring), f);
- }
- DOS_fclose(f);
-end1:cprintf("OK?");
-}
-
-
-void result_save(void *p)
-{
- save_stat(stat, n_stat, "stat1.tim", RVAL);
-}
-
-
-void fine()
-{
- sys_end();
-}
-
-int main(int argc, char **argv)
-{
- PID p1,p2,p3, p4, p5, p6, p7;
-
- ELASTIC_HARD_TASK_MODEL m;
- // int i;
- struct timespec fineprg;
-
-
- //sys_atrunlevel(result_save, NULL, RUNLEVEL_AFTER_EXIT);
- srand(7);
-
- elastic_hard_task_default_model(m);
- elastic_hard_task_def_wcet(m,500);
- elastic_hard_task_def_maxperiod(m,500000);
- elastic_hard_task_def_cnormal(m,500);
- elastic_hard_task_def_period(m,500000);
- elastic_hard_task_def_group(m,1);
- elastic_hard_task_def_ctrl_jet(m);
-
-
- p1 = task_create("Clock",clock,&m,NULL);
- if (p1 == -1) {
- perror("testhd.c(main): Could not create task <Clock> ...");
- sys_end();
- }
-
-
-
-
- elastic_hard_task_def_wcet(m,1000);
- elastic_hard_task_def_maxperiod(m,100000);
- elastic_hard_task_def_cnormal(m,1000);
- elastic_hard_task_def_period(m,100000);
-
-
- p2 = task_create("JetControl",jetcontrol,&m,NULL);
- if (p2 == -1) {
- perror("testhd.c(main): Could not create task <JetControl> ...");
- sys_end();
- }
-
-
-
- elastic_hard_task_def_wcet(m,21000);
- elastic_hard_task_def_maxperiod(m,155000);
- elastic_hard_task_def_cnormal(m,21000);
- elastic_hard_task_def_period(m,155000);
-
-
- p3 = task_create("Hard_asteroide1",hard_asteroide1,&m,NULL);
- if (p3 == -1) {
- perror("testhd.c(main): Could not create task <Hard asteroide> ...");
- sys_end();
- }
-
- elastic_hard_task_def_wcet(m,12000);
- elastic_hard_task_def_maxperiod(m,61000);
- elastic_hard_task_def_cnormal(m,12000);
- elastic_hard_task_def_period(m,61000);
-
-
-
-
- p4 = task_create("Hard_asteroide2",hard_asteroide,&m,NULL);
- if (p4 == -1) {
- perror("testhd.c(main): Could not create task <Hard asteroide> ...");
- sys_end();
- }
-
-
- elastic_hard_task_def_wcet(m,30000);
- elastic_hard_task_def_maxperiod(m,200000);
- elastic_hard_task_def_cnormal(m,30000);
- elastic_hard_task_def_period(m,200000);
-
-
- p5 = task_create("Hard_asteroide3",hard_asteroide2,&m,NULL);
- if (p5 == -1) {
- perror("testhd.c(main): Could not create task <Hard asteroide> ...");
- sys_end();
- }
-
- elastic_hard_task_def_wcet(m,30000);
- elastic_hard_task_def_maxperiod(m,100000);
- elastic_hard_task_def_cnormal(m,30000);
- elastic_hard_task_def_period(m,100000);
-
-
- p6 = task_create("Hard_asteroide3",hard_asteroide2,&m,NULL);
- if (p6 == -1) {
- perror("testhd.c(main): Could not create task <Hard asteroide> ...");
- sys_end();
- }
-
- elastic_hard_task_def_wcet(m,10000);
- elastic_hard_task_def_maxperiod(m,200000);
- elastic_hard_task_def_cnormal(m,2500);
- elastic_hard_task_def_period(m,49000);
-
-
- p7 = task_create("Hard_asteroide3",hard_asteroide3,&m,NULL);
- if (p7 == -1) {
- perror("testhd.c(main): Could not create task <Hard asteroide> ...");
- sys_end();
- }
-
-
-
-
- printf_xy(0,STAT_Y + 15,WHITE,"Hard asteroide PID= %-3d ",p3);
- printf_xy(0,STAT_Y + 17,WHITE,"Clock PID= %-3d ",p1);
- printf_xy(0,STAT_Y + 18,WHITE,"JetControl PID= %-3d ",p2);
-
-
-
- task_nopreempt();
- fineprg.tv_sec = 30;
- fineprg.tv_nsec = 0;
- kern_event_post(&fineprg,fine,NULL);
- group_activate(1);
- return 0;
-}
-
Index: start/cash/cash.c
===================================================================
--- start/cash/cash.c (revision 1087)
+++ start/cash/cash.c (nonexistent)
@@ -1,982 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: cash.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-
- This file contains the aperiodic server CBS (Total Bandwidth Server)
-
- Read CBS.h for further details.
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-#include "cash.h"
-#include <ll/stdio.h>
-#include <ll/string.h>
-#include <kernel/model.h>
-#include <kernel/descr.h>
-#include <kernel/var.h>
-#include <kernel/func.h>
-
-/*+ 4 debug purposes +*/
-#undef CBS_TEST
-
-#ifdef TESTG
-#include "drivers/glib.h"
-TIME x,oldx;
-extern TIME starttime;
-#endif
-
-
-
-
-
-
-/*+ Status used in the level +*/
-#define CBSGHD_IDLE APER_STATUS_BASE /*+ waiting the activation +*/
-#define CBSGHD_ZOMBIE APER_STATUS_BASE+1 /*+ waiting the period end +*/
-#define CBSGHD_DELAY APER_STATUS_BASE+2 /*+ waiting the delay end +*/
-
-/* structure of an element of the capacity queue */
-struct cap_queue {
- int cap;
- struct timespec dead;
- struct cap_queue *next;
-};
-
-/*+ the level redefinition for the CBS_HD level +*/
-typedef struct {
- level_des l; /*+ the standard level descriptor +*/
-
- /* The wcet are stored in the task descriptor, but we need
- an array for the deadlines. We can't use the timespec_priority
- field because it is used by the master level!!!...
- Notice that however the use of the timespec_priority field
- does not cause any problem... */
-
- struct timespec cbsghd_dline[MAX_PROC]; /*+ CBSGHD deadlines +*/
-
- TIME period[MAX_PROC]; /*+ CBSGHD activation period +*/
-
- TIME maxperiod[MAX_PROC]; /*+ maximum period of each elastic task +*/
-
- int cremaining[MAX_PROC]; /*+ instance remaining computation time +*/
-
- TIME act_period[MAX_PROC]; /*+ actual period of each elastic task: it
- must be less than maxperiod!!! +*/
-
- TIME last_response_time[MAX_PROC]; /* response time of the last instance */
-
- TIME cnormal[MAX_PROC]; /*+ CBSGHD normal computation time +*/
-
- struct timespec reactivation_time[MAX_PROC];
- /*+ the time at witch the reactivation timer is post +*/
- int reactivation_timer[MAX_PROC];
- /*+ the recativation timer +*/
-
- struct cap_queue *queue; /* pointer to the spare capacity queue */
-
- int flags; /*+ the init flags... +*/
-
- bandwidth_t U; /*+ the used bandwidth by the server +*/
-
- int idle; /* the idle flag... */
-
- struct timespec start_idle; /*gives the start time of the last idle period */
-
- LEVEL scheduling_level;
-
-} CBSGHD_level_des;
-
-
-/* insert a capacity in the queue capacity ordering by deadline */
-
-static int c_insert(struct timespec dead, int cap, struct cap_queue **que,
- PID p)
-{
- struct cap_queue *prev, *n, *new;
-
- prev = NULL;
- n = *que;
-
- while ((n != NULL) &&
- !TIMESPEC_A_LT_B(&dead, &n->dead)) {
- prev = n;
- n = n->next;
- }
-
-
- new = (struct cap_queue *)kern_alloc(sizeof(struct cap_queue));
- if (new == NULL) {
- kern_printf("\nNew cash_queue element failed\n");
- kern_raise(XUNVALID_TASK, p);
- return -1;
- }
- new->next = NULL;
- new->cap = cap;
- new->dead = dead;
-
- if (prev != NULL)
- prev->next = new;
- else
- *que = new;
-
- if (n != NULL)
- new->next = n;
- return 0;
-}
-
-/* extract the first element from the capacity queue */
-
-static int c_extractfirst(struct cap_queue **que)
-{
- struct cap_queue *p = *que;
-
-
- if (*que == NULL) return(-1);
-
- *que = (*que)->next;
-
- kern_free(p, sizeof(struct cap_queue));
- return(1);
-}
-
-/* read data of the first element from the capacity queue */
-
-static void c_readfirst(struct timespec *d, int *c, struct cap_queue *que)
-{
- *d = que->dead;
- *c = que->cap;
-}
-
-/* write data of the first element from the capacity queue */
-
-static void c_writefirst(struct timespec dead, int cap, struct cap_queue *que)
-{
- que->dead = dead;
- que->cap = cap;
-}
-
-
-static void CBSGHD_activation(CBSGHD_level_des *lev,
- PID p,
- struct timespec *acttime)
-{
- JOB_TASK_MODEL job;
-
-
- /* This rule is used when we recharge the budget at initial task activation
- and each time a new task instance must be activated */
-
- if (TIMESPEC_A_GT_B(acttime, &lev->cbsghd_dline[p])) {
- /* we modify the deadline ... */
- TIMESPEC_ASSIGN(&lev->cbsghd_dline[p], acttime);
- }
-
- lev->act_period[p] = 0;
-
- if (proc_table[p].avail_time > 0)
- proc_table[p].avail_time = 0;
-
-
-
-
- /* there is a while because if the wcet is << than the system tick
- we need to postpone the deadline many times */
- while (proc_table[p].avail_time <= 0) {
-
- /* A spare capacity is inserted in the capacity queue!! */
- ADDUSEC2TIMESPEC(lev->period[p], &lev->cbsghd_dline[p]);
- lev->act_period[p] += lev->period[p];
- c_insert(lev->cbsghd_dline[p], lev->cnormal[p], &lev->queue, p);
-
-
- /* it exploits available capacities from the capacity queue */
- while (proc_table[p].avail_time < (int)lev->cnormal[p] &&
- lev->queue != NULL) {
- struct timespec dead;
- int cap, delta;
- delta = lev->cnormal[p] - proc_table[p].avail_time;
- c_readfirst(&dead, &cap, lev->queue);
- if (!TIMESPEC_A_GT_B(&dead, &lev->cbsghd_dline[p])) {
- if (cap > delta) {
- proc_table[p].avail_time += delta;
- c_writefirst(dead, cap - delta, lev->queue);
- }
- else {
- proc_table[p].avail_time += cap;
- c_extractfirst(&lev->queue);
- }
- }
- else
- break;
- }
- }
-
- lev->cremaining[p] = proc_table[p].wcet - proc_table[p].avail_time;
-
-
-#ifdef TESTG
- if (starttime && p == 3) {
- oldx = x;
- x = ((lev->cbsghd_dline[p].tv_sec*1000000+lev->cbsghd_dline[p].tv_nsec/1000)/5000 - starttime) + 20;
- // kern_printf("(a%d)",lev->cbsghd_dline[p].tv_sec*1000000+lev->cbsghd_dline[p].tv_nsec/1000);
- if (oldx > x) sys_end();
- if (x<640)
- grx_plot(x, 15, 8);
- }
-#endif
-
- /* and, finally, we reinsert the task in the master level */
- job_task_default_model(job, lev->cbsghd_dline[p]);
- job_task_def_yesexc(job);
- level_table[ lev->scheduling_level ]->
- guest_create(lev->scheduling_level, p, (TASK_MODEL *)&job);
- level_table[ lev->scheduling_level ]->
- guest_activate(lev->scheduling_level, p);
-}
-
-
-static char *CBSGHD_status_to_a(WORD status)
-{
- if (status < MODULE_STATUS_BASE)
- return status_to_a(status);
-
- switch (status) {
- case CBSGHD_IDLE : return "CBSGHD_Idle";
- case CBSGHD_ZOMBIE : return "CBSGHD_Zombie";
- case CBSGHD_DELAY : return "CBSGHD_Delay";
- default : return "CBSGHD_Unknown";
- }
-}
-
-
-
-
-/* this is the periodic reactivation of the task... */
-static void CBSGHD_timer_reactivate(void *par)
-{
- PID p = (PID) par;
- CBSGHD_level_des *lev;
-
- lev = (CBSGHD_level_des *)level_table[proc_table[p].task_level];
-
- if (proc_table[p].status == CBSGHD_IDLE) {
- /* the task has finished the current activation and must be
- reactivated */
-
- /* request_time represents the time of the last instance release!! */
- TIMESPEC_ASSIGN(&proc_table[p].request_time, &lev->reactivation_time[p]);
-
- /* If idle=1, then we have to discharge the capacities stored in
- the capacity queue up to the length of the idle interval */
- if (lev->idle == 1) {
- TIME interval;
- struct timespec delta;
- lev->idle = 0;
- SUBTIMESPEC(&proc_table[p].request_time, &lev->start_idle, &delta);
- /* length of the idle interval expressed in usec! */
- interval = TIMESPEC2NANOSEC(&delta) / 1000;
-
- /* it discharge the available capacities from the capacity queue */
- while (interval > 0 && lev->queue != NULL) {
- struct timespec dead;
- int cap;
- c_readfirst(&dead, &cap, lev->queue);
- if (cap > interval) {
- c_writefirst(dead, cap - interval, lev->queue);
- interval = 0;
- }
- else {
- interval -= cap;
- c_extractfirst(&lev->queue);
- }
- }
- }
-
- CBSGHD_activation(lev,p,&lev->reactivation_time[p]);
-
- /* check the constraint on the maximum period permitted... */
- if (lev->act_period[p] > lev->maxperiod[p]) {
- kern_printf("Deadline miss(timer_react.! process:%d act_period:%lu maxperiod:%lu\n",
- p, lev->act_period[p], lev->maxperiod[p]);
- kern_raise(XDEADLINE_MISS,p);
- }
-
-
- /* Set the reactivation timer */
- TIMESPEC_ASSIGN(&lev->reactivation_time[p], &lev->cbsghd_dline[p]);
- lev->reactivation_timer[p] = kern_event_post(&lev->reactivation_time[p],
- CBSGHD_timer_reactivate,
- (void *)p);
- event_need_reschedule();
- }
- else {
- /* this situation cannot occur */
- kern_printf("Trying to reactivate a task which is not IDLE!!!/n");
- kern_raise(XUNVALID_TASK,p);
- }
-}
-
-
-
-
-
-static void CBSGHD_avail_time_check(CBSGHD_level_des *lev, PID p)
-{
-
- /*+ if the capacity became negative the remaining computation time
- is diminuished.... +*/
- /* if (p==4)
- kern_printf("(old dead:%d av_time:%d crem:%d)\n",
- lev->cbsghd_dline[p].tv_sec*1000000+
- lev->cbsghd_dline[p].tv_nsec/1000, proc_table[p].avail_time,
- lev->cremaining[p]); */
-
-
- if (proc_table[p].avail_time < 0)
- lev->cremaining[p] += proc_table[p].avail_time;
-
- if (lev->cremaining[p] <= 0) {
- kern_printf("Task:%d WCET violation \n", p);
- kern_raise(XWCET_VIOLATION, p);
- ll_abort(666);
- }
-
-
- /* there is a while because if the wcet is << than the system tick
- we need to postpone the deadline many times */
- while (proc_table[p].avail_time <= 0) {
- /* it exploits available capacities from the capacity queue */
- while (proc_table[p].avail_time < lev->cremaining[p]
- && lev->queue != NULL) {
- struct timespec dead;
- int cap, delta;
- delta = lev->cremaining[p] - proc_table[p].avail_time;
- c_readfirst(&dead, &cap, lev->queue);
- if (!TIMESPEC_A_GT_B(&dead, &lev->cbsghd_dline[p])) {
- if (cap > delta) {
- proc_table[p].avail_time += delta;
- c_writefirst(dead, cap - delta, lev->queue);
- }
- else {
- proc_table[p].avail_time += cap;
- c_extractfirst(&lev->queue);
- }
- }
- else
- break;
- }
-
- /* if (p==5 && proc_table[p].avail_time <= 0 &&
- lev->cremaining[p] > lev->cnormal[p])
- kern_printf("(inter dead:%d av_time:%d crem:%d)\n",
- lev->cbsghd_dline[p].tv_sec*1000000+
- lev->cbsghd_dline[p].tv_nsec/1000, proc_table[p].avail_time,
- lev->cremaining[p]); */
-
-
- /* The remaining computation time is modified according
- to the new budget! */
- if (proc_table[p].avail_time > 0)
- lev->cremaining[p] -= proc_table[p].avail_time;
- else {
- /* the CBSGHD rule for recharging the capacity: */
- if (lev->cremaining[p] > lev->cnormal[p]) {
- ADDUSEC2TIMESPEC(lev->period[p], &lev->cbsghd_dline[p]);
- lev->act_period[p] += lev->period[p];
- /* A spare capacity is inserted in the capacity queue!! */
- c_insert(lev->cbsghd_dline[p], lev->cnormal[p], &lev->queue, p);
- }
- else {
- TIME t;
- t = (lev->cremaining[p] * lev->period[p]) / lev->cnormal[p];
- ADDUSEC2TIMESPEC(t, &lev->cbsghd_dline[p]);
- lev->act_period[p] += t;
- /* A spare capacity is inserted in the capacity queue!! */
- c_insert(lev->cbsghd_dline[p], lev->cremaining[p], &lev->queue, p);
- }
- }
- }
-
- /* if (p==4)
- kern_printf("n dead:%d av_time:%d crem:%d)\n",
- lev->cbsghd_dline[p].tv_sec*1000000+
- lev->cbsghd_dline[p].tv_nsec/1000, proc_table[p].avail_time,
- lev->cremaining[p]); */
-
- /* check the constraint on the maximum period permitted... */
- if (lev->act_period[p] > lev->maxperiod[p]) {
- /*kern_printf("n dead:%d av_time:%d crem:%d)\n",
- lev->cbsghd_dline[p].tv_sec*1000000+
- lev->cbsghd_dline[p].tv_nsec/1000, proc_table[p].avail_time,
- lev->cremaining[p]); */
- kern_printf("Deadline miss(av.time_check! process:%d act_period:%lu maxperiod:%lu\n",
- p, lev->act_period[p], lev->maxperiod[p]);
- kern_raise(XDEADLINE_MISS,p);
- }
-
-
-
- if (TIMESPEC_A_LT_B(&lev->reactivation_time[p], &lev->cbsghd_dline[p])) {
- /* we delete the reactivation timer */
- event_delete(lev->reactivation_timer[p]);
- /* repost the event at the next instance deadline... */
- lev->reactivation_time[p] = lev->cbsghd_dline[p];
- lev->reactivation_timer[p] = kern_event_post(&lev->reactivation_time[p],
- CBSGHD_timer_reactivate,
- (void *)p);
- }
-
-#ifdef TESTG
- if (starttime && p == 3) {
- oldx = x;
- x = ((lev->cbsghd_dline[p].tv_sec*1000000+
- lev->cbsghd_dline[p].tv_nsec/1000)/5000 - starttime) + 20;
- // kern_printf("(e%d avail%d)",lev->cbsghd_dline[p].tv_sec*1000000+
- lev->cbsghd_dline[p].tv_nsec/1000,proc_table[p].avail_time);
- if (oldx > x) sys_end();
- if (x<640)
- grx_plot(x, 15, 2);
- }
-#endif
-
-}
-
-
-/*+ this function is called when a killed or ended task reach the
- period end +*/
-static void CBSGHD_timer_zombie(void *par)
-{
- PID p = (PID) par;
- CBSGHD_level_des *lev;
-
- lev = (CBSGHD_level_des *)level_table[proc_table[p].task_level];
-
- /* we finally put the task in the FREE status */
- proc_table[p].status = FREE;
- q_insertfirst(p,&freedesc);
-
- /* and free the allocated bandwidth */
- lev->U -= (MAX_BANDWIDTH/lev->period[p]) * lev->cnormal[p];
-
-}
-
-
-static int CBSGHD_level_accept_task_model(LEVEL l, TASK_MODEL *m)
-{
-
-
- if (m->pclass == ELASTIC_HARD_PCLASS || m->pclass ==
- (ELASTIC_HARD_PCLASS | l)) {
- ELASTIC_HARD_TASK_MODEL *s = (ELASTIC_HARD_TASK_MODEL *)m;
- bandwidth_t b1, b2;
- /* kern_printf("accept :ELASTIC TASK found!!!!!!\n"); */
- b1 = (MAX_BANDWIDTH / s->period) * s->cnormal;
- b2 = (MAX_BANDWIDTH / s->maxperiod) * s->wcet;
- if (s->wcet && s->cnormal && s->period && s->maxperiod &&
- s->wcet >= s->cnormal && b1 >= b2)
- return 0;
- /* kern_printf("period: %d maxperiod: %d cnormal: %d wcet: %d, b1: %d b2:
- %d\n", s->period, s->maxperiod, s->cnormal, s->wcet, b1, b2); */
- }
- return -1;
-}
-
-static int CBSGHD_level_accept_guest_model(LEVEL l, TASK_MODEL *m)
-{
- return -1;
-}
-
-static char *onoff(int i)
-{
- if (i)
- return "On ";
- else
- return "Off";
-}
-
-static void CBSGHD_level_status(LEVEL l)
-{
- CBSGHD_level_des *lev = (CBSGHD_level_des *)(level_table[l]);
- PID p;
-
- kern_printf("On-line guarantee : %s\n",
- onoff(lev->flags & CBSGHD_ENABLE_GUARANTEE));
- kern_printf("Used Bandwidth : %u/%u\n",
- lev->U, MAX_BANDWIDTH);
-
- for (p=0; p<MAX_PROC; p++)
- if (proc_table[p].task_level == l && proc_table[p].status != FREE )
- kern_printf("Pid: %2d Name: %10s Period: %9ld Dline: %9ld.%6ld Stat: %s\n",
- p,
- proc_table[p].name,
- lev->period[p],
- lev->cbsghd_dline[p].tv_sec,
- lev->cbsghd_dline[p].tv_nsec/1000,
- CBSGHD_status_to_a(proc_table[p].status));
-}
-
-static PID CBSGHD_level_scheduler(LEVEL l)
-{
- CBSGHD_level_des *lev = (CBSGHD_level_des *)(level_table[l]);
-
- /* it stores the actual time and set the IDLE flag in order to handle
- the capacity queue discharging!!! */
- lev->idle = 1;
- ll_gettime(TIME_EXACT, &lev->start_idle);
-
-
- /* the CBSGHD don't schedule anything...
- it's an EDF level or similar that do it! */
- return NIL;
-}
-
-/* The on-line guarantee is enabled only if the appropriate flag is set... */
-static int CBSGHD_level_guarantee(LEVEL l, bandwidth_t *freebandwidth)
-{
- CBSGHD_level_des *lev = (CBSGHD_level_des *)(level_table[l]);
-
- if (lev->flags & CBSGHD_FAILED_GUARANTEE) {
- *freebandwidth = 0;
- //kern_printf("guarantee :garanzia fallita!!!!!!\n");
- return 0;
- }
- else if (*freebandwidth >= lev->U) {
- *freebandwidth -= lev->U;
- return 1;
- }
- else {
- //kern_printf("guarantee :garanzia fallita per mancanza di banda!!!!!!\n");
- //kern_printf("freeband: %d request band: %d", *freebandwidth, lev->U);
- return 0;
- }
-}
-
-static int CBSGHD_task_create(LEVEL l, PID p, TASK_MODEL *m)
-{
- CBSGHD_level_des *lev = (CBSGHD_level_des *)(level_table[l]);
-
- /* if the CBSGHD_task_create is called, then the pclass must be a
- valid pclass. */
- ELASTIC_HARD_TASK_MODEL *s = (ELASTIC_HARD_TASK_MODEL *)m;
-
- /* Enable wcet check */
- proc_table[p].avail_time = 0;
- proc_table[p].wcet = s->wcet;
- proc_table[p].control |= CONTROL_CAP;
-
- lev->period[p] = s->period;
- lev->maxperiod[p] = s->maxperiod;
- lev->cnormal[p] = s->cnormal;
- NULL_TIMESPEC(&lev->cbsghd_dline[p]);
-
-
- /* update the bandwidth... */
- if (lev->flags & CBSGHD_ENABLE_GUARANTEE) {
- bandwidth_t b;
- b = (MAX_BANDWIDTH / s->period) * s->cnormal;
-
- /* really update lev->U, checking an overflow... */
- if (MAX_BANDWIDTH - lev->U > b)
- lev->U += b;
- else
- /* The task can NOT be guaranteed (U>MAX_BANDWIDTH)...
- (see EDF.c) */
- lev->flags |= CBSGHD_FAILED_GUARANTEE;
- }
-
-
-
- return 0; /* OK, also if the task cannot be guaranteed... */
-}
-
-static void CBSGHD_task_detach(LEVEL l, PID p)
-{
- /* the CBSGHD level doesn't introduce any dinamic allocated new field.
- we have only to reset the NO_GUARANTEE FIELD and decrement the allocated
- bandwidth */
-
- CBSGHD_level_des *lev = (CBSGHD_level_des *)(level_table[l]);
-
- if (lev->flags & CBSGHD_FAILED_GUARANTEE)
- lev->flags &= ~CBSGHD_FAILED_GUARANTEE;
- else
- lev->U -= (MAX_BANDWIDTH / lev->period[p]) * lev->cnormal[p];
-
-
-}
-
-static int CBSGHD_task_eligible(LEVEL l, PID p)
-{
- return 0; /* if the task p is chosen, it is always eligible */
-}
-
-#ifdef __TEST1__
- extern int testactive;
- extern struct timespec s_stime[];
- extern TIME s_curr[];
- extern TIME s_PID[];
- extern int useds;
-#endif
-
-static void CBSGHD_task_dispatch(LEVEL l, PID p, int nostop)
-{
- CBSGHD_level_des *lev = (CBSGHD_level_des *)(level_table[l]);
- level_table[ lev->scheduling_level ]->
- guest_dispatch(lev->scheduling_level,p,nostop);
-
-#ifdef __TEST1__
- if (testactive)
- {
- TIMESPEC_ASSIGN(&s_stime[useds], &schedule_time);
- s_curr[useds] = proc_table[p].avail_time;
- s_PID[useds] = p;
- useds++;
- }
-#endif
-}
-
-static void CBSGHD_task_epilogue(LEVEL l, PID p)
-{
- CBSGHD_level_des *lev = (CBSGHD_level_des *)(level_table[l]);
- JOB_TASK_MODEL job;
-
- /* check if the budget is finished... */
- if ( proc_table[p].avail_time <= 0) {
- /* we kill the current activation */
- level_table[ lev->scheduling_level ]->
- guest_end(lev->scheduling_level, p);
-
- /* we modify the deadline */
- CBSGHD_avail_time_check(lev, p);
-
- /* and, finally, we reinsert the task in the master level */
- job_task_default_model(job, lev->cbsghd_dline[p]);
- job_task_def_yesexc(job);
- level_table[ lev->scheduling_level ]->
- guest_create(lev->scheduling_level, p, (TASK_MODEL *)&job);
- level_table[ lev->scheduling_level ]->
- guest_activate(lev->scheduling_level, p);
- // kern_printf("epil : dl %d per %d p %d |\n",
- // lev->cbsghd_dline[p].tv_nsec/1000,lev->period[p],p);
-
- }
- else
- /* the task has been preempted. it returns into the ready queue by
- calling the guest_epilogue... */
- level_table[ lev->scheduling_level ]->
- guest_epilogue(lev->scheduling_level,p);
-}
-
-static void CBSGHD_task_activate(LEVEL l, PID p)
-{
- CBSGHD_level_des *lev = (CBSGHD_level_des *)(level_table[l]);
-
- ll_gettime(TIME_EXACT, &proc_table[p].request_time);
-
- /* If idle=1, then we have to discharge the capacities stored in
- the capacity queue up to the length of the idle interval */
- if (lev->idle == 1) {
- TIME interval;
- struct timespec delta;
- lev->idle = 0;
- SUBTIMESPEC(&proc_table[p].request_time, &lev->start_idle, &delta);
- /* length of the idle interval expressed in usec! */
- interval = TIMESPEC2NANOSEC(&delta) / 1000;
-
- /* it discharge the available capacities from the capacity queue */
- while (interval > 0 && lev->queue != NULL) {
- struct timespec dead;
- int cap;
- c_readfirst(&dead, &cap, lev->queue);
- if (cap > interval) {
- c_writefirst(dead, cap - interval, lev->queue);
- interval = 0;
- }
- else {
- interval -= cap;
- c_extractfirst(&lev->queue);
- }
- }
- }
-
- CBSGHD_activation(lev, p, &proc_table[p].request_time);
-
-
- /* check the constraint on the maximum period permitted... */
- if (lev->act_period[p] > lev->maxperiod[p]) {
- kern_printf("Deadline miss(task_activ.! process:%d act_period:%lu maxperiod:%lu\n",
- p, lev->act_period[p], lev->maxperiod[p]);
- kern_raise(XDEADLINE_MISS,p);
- }
-
- /* Set the reactivation timer */
- TIMESPEC_ASSIGN(&lev->reactivation_time[p], &lev->cbsghd_dline[p]);
- lev->reactivation_timer[p] = kern_event_post(&lev->reactivation_time[p],
- CBSGHD_timer_reactivate,
- (void *)p);
-
- // kern_printf("act : %d %d |",lev->cbsghd_dline[p].tv_nsec/1000,p);
-}
-
-static void CBSGHD_task_insert(LEVEL l, PID p)
-{
- printk("CBSGHD_task_insert\n");
- kern_raise(XUNVALID_TASK,p);
-}
-
-static void CBSGHD_task_extract(LEVEL l, PID p)
-{
- printk("CBSGHD_task_extract\n");
- kern_raise(XUNVALID_TASK,p);
-}
-
-static void CBSGHD_task_endcycle(LEVEL l, PID p)
-{
- CBSGHD_level_des *lev = (CBSGHD_level_des *)(level_table[l]);
- struct timespec act_time, res;
-
- /* It computes the response time of the current instance... */
- ll_gettime(TIME_EXACT, &act_time);
- SUBTIMESPEC(&act_time, &proc_table[p].request_time, &res);
- /* response time expressed in usec! */
- lev->last_response_time[p] = TIMESPEC2NANOSEC(&res) / 1000;
-
- level_table[ lev->scheduling_level ]->
- guest_end(lev->scheduling_level,p);
-
-
- /* A spare capacity is inserted in the capacity queue!! */
- if (proc_table[p].avail_time > 0) {
- c_insert(lev->cbsghd_dline[p], proc_table[p].avail_time, &lev->queue, p);
- proc_table[p].avail_time = 0;
- }
-
-
- proc_table[p].status = CBSGHD_IDLE;
-}
-
-static void CBSGHD_task_end(LEVEL l, PID p)
-{
- CBSGHD_level_des *lev = (CBSGHD_level_des *)(level_table[l]);
-
- /* check if the capacity became negative... */
- /* there is a while because if the wcet is << than the system tick
- we need to postpone the deadline many times */
- while (proc_table[p].avail_time < 0) {
- /* the CBSGHD rule for recharging the capacity */
- proc_table[p].avail_time += lev->cnormal[p];
- ADDUSEC2TIMESPEC(lev->period[p], &lev->cbsghd_dline[p]);
- }
-
- level_table[ lev->scheduling_level ]->
- guest_end(lev->scheduling_level,p);
-
- /* we delete the reactivation timer */
- event_delete(lev->reactivation_timer[p]);
- lev->reactivation_timer[p] = -1;
-
-
- /* Finally, we post the zombie event. when the end period is reached,
- the task descriptor and banwidth are freed */
- proc_table[p].status = CBSGHD_ZOMBIE;
- lev->reactivation_timer[p] = kern_event_post(&lev->cbsghd_dline[p],
- CBSGHD_timer_zombie,
- (void *)p);
-}
-
-static void CBSGHD_task_sleep(LEVEL l, PID p)
-{
- printk("CBSGHD_task_sleep\n");
- kern_raise(XUNVALID_TASK,p);
-}
-
-static void CBSGHD_task_delay(LEVEL l, PID p, TIME usdelay)
-{
- printk("CBSGHD_task_delay\n");
- kern_raise(XUNVALID_TASK,p);
-}
-
-
-static int CBSGHD_guest_create(LEVEL l, PID p, TASK_MODEL *m)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); return 0; }
-
-static void CBSGHD_guest_detach(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBSGHD_guest_dispatch(LEVEL l, PID p, int nostop)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBSGHD_guest_epilogue(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBSGHD_guest_activate(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBSGHD_guest_insert(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBSGHD_guest_extract(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBSGHD_guest_endcycle(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBSGHD_guest_end(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBSGHD_guest_sleep(LEVEL l, PID p)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-static void CBSGHD_guest_delay(LEVEL l, PID p,DWORD tickdelay)
-{ kern_raise(XUNVALID_GUEST,exec_shadow); }
-
-
-
-
-/* Registration functions */
-
-/*+ Registration function:
- int flags the init flags ... see CBS.h +*/
-void CBSGHD_register_level(int flags, LEVEL master)
-{
- LEVEL l; /* the level that we register */
- CBSGHD_level_des *lev; /* for readableness only */
- PID i; /* a counter */
-
- printk("CBSGHD_register_level\n");
-
- /* request an entry in the level_table */
- l = level_alloc_descriptor();
-
- printk(" alloco descrittore %d %d\n",l,sizeof(CBSGHD_level_des));
-
- /* alloc the space needed for the CBSGHD_level_des */
- lev = (CBSGHD_level_des *)kern_alloc(sizeof(CBSGHD_level_des));
-
- printk(" lev=%d\n",(int)lev);
-
- /* update the level_table with the new entry */
- level_table[l] = (level_des *)lev;
-
- /* fill the standard descriptor */
- strncpy(lev->l.level_name, CBSGHD_LEVELNAME, MAX_LEVELNAME);
- lev->l.level_code = CBSGHD_LEVEL_CODE;
- lev->l.level_version = CBSGHD_LEVEL_VERSION;
-
- lev->l.level_accept_task_model = CBSGHD_level_accept_task_model;
- lev->l.level_accept_guest_model = CBSGHD_level_accept_guest_model;
- lev->l.level_status = CBSGHD_level_status;
- lev->l.level_scheduler = CBSGHD_level_scheduler;
-
- if (flags & CBSGHD_ENABLE_GUARANTEE)
- lev->l.level_guarantee = CBSGHD_level_guarantee;
- else
- lev->l.level_guarantee = NULL;
-
- lev->l.task_create = CBSGHD_task_create;
- lev->l.task_detach = CBSGHD_task_detach;
- lev->l.task_eligible = CBSGHD_task_eligible;
- lev->l.task_dispatch = CBSGHD_task_dispatch;
- lev->l.task_epilogue = CBSGHD_task_epilogue;
- lev->l.task_activate = CBSGHD_task_activate;
- lev->l.task_insert = CBSGHD_task_insert;
- lev->l.task_extract = CBSGHD_task_extract;
- lev->l.task_endcycle = CBSGHD_task_endcycle;
- lev->l.task_end = CBSGHD_task_end;
- lev->l.task_sleep = CBSGHD_task_sleep;
- lev->l.task_delay = CBSGHD_task_delay;
-
- lev->l.guest_create = CBSGHD_guest_create;
- lev->l.guest_detach = CBSGHD_guest_detach;
- lev->l.guest_dispatch = CBSGHD_guest_dispatch;
- lev->l.guest_epilogue = CBSGHD_guest_epilogue;
- lev->l.guest_activate = CBSGHD_guest_activate;
- lev->l.guest_insert = CBSGHD_guest_insert;
- lev->l.guest_extract = CBSGHD_guest_extract;
- lev->l.guest_endcycle = CBSGHD_guest_endcycle;
- lev->l.guest_end = CBSGHD_guest_end;
- lev->l.guest_sleep = CBSGHD_guest_sleep;
- lev->l.guest_delay = CBSGHD_guest_delay;
-
- /* fill the CBSGHD descriptor part */
- for (i=0; i<MAX_PROC; i++) {
- NULL_TIMESPEC(&lev->cbsghd_dline[i]);
- lev->period[i] = 0;
- lev->last_response_time[i] = 0;
- NULL_TIMESPEC(&lev->reactivation_time[i]);
- lev->reactivation_timer[i] = -1;
- }
-
-
- lev->U = 0;
- lev->idle = 0;
- lev->queue = NULL;
-
- lev->scheduling_level = master;
-
- lev->flags = flags & 0x07;
-}
-
-
-int CBSGHD_get_response_time(LEVEL l, PID p)
-{
- CBSGHD_level_des *lev = (CBSGHD_level_des *)(level_table[l]);
- return lev->last_response_time[p];
-}
-
-
-bandwidth_t CBSGHD_usedbandwidth(LEVEL l)
-{
- CBSGHD_level_des *lev = (CBSGHD_level_des *)(level_table[l]);
- if (lev->l.level_code == CBSGHD_LEVEL_CODE &&
- lev->l.level_version == CBSGHD_LEVEL_VERSION)
- return lev->U;
- else
- return 0;
-}
-
Index: start/cash/initcash.c
===================================================================
--- start/cash/initcash.c (revision 1087)
+++ start/cash/initcash.c (nonexistent)
@@ -1,128 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: initcash.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-
- System initialization file
-
- The tick is set to TICK ms.
-
- This file contains the 2 functions needed to initialize the system.
-
- These functions register the following levels:
-
- an EDF (Earliest Deadline First) level
- a RR (Round Robin) level
- a CBSHD (Constant Bandwidth Server with Hard Deadlines) level
- a Dummy level
-
-
-
-
- It can accept these task models (into () the mandatory fields):
-
- HARD_TASK_MODEL (wcet+mit) at level 0
- NRT_TASK_MODEL at level 1
- ELASTIC_HARD_TASK_MODEL (cnormal,period,wcet,maxperiod) at level 5
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/rr.h"
-#include "modules/tbs.h"
-#include "modules/cbs.h"
-#include "cash.h"
-#include "modules/dummy.h"
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "drivers/keyb.h"
-
-
-/*+ sysyem tick in us +*/
-#define TICK 300
-
-#define RRTICK 5000
-
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- EDF_register_level(EDF_ENABLE_ALL);
- CBSGHD_register_level(CBSGHD_ENABLE_ALL, 0);
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- /* CBS_register_level(CBS_ENABLE_ALL, 0); */
- //CBSHD_register_level(CBSHD_ENABLE_ALL, 0);
- dummy_register_level();
-
- SEM_register_module();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- HARTPORT_init();
-
- KEYB_init(NULL);
-
- __call_main__(mb);
-
- return (void *)0;
-}
-
-
-
-
-
-
-
-
-
-
Index: start/cash/cash.h
===================================================================
--- start/cash/cash.h (revision 1087)
+++ start/cash/cash.h (nonexistent)
@@ -1,176 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * Massimiliano Giorgi <massy@gandalf.sssup.it>
- * Luca Abeni <luca@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: cash.h,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-
- This file contains the server CBSHD (CASH Algorithm)
-
- Title:
- CBSHD (Constant Bandwidth Server with hard deadlines)
-
- Task Models Accepted:
- ELASTIC_HARD_TASK_MODEL - Elastic Hard Tasks
- wcet field must be != 0
- cnormal field must be != 0
- period field must be != 0
-
- Description:
- This module schedule his tasks following the CBSHD scheme.
- (see Marco Caccamo, Giorgio Buttazzo and Lui Sha
- "Elastic Feedback Control"
- Proceedings of the EUROMICRO 2000)
-
- The tasks are inserted in an EDF level (or similar) with a JOB_TASK_MODEL,
- and the CBSHD level expects that the task is scheduled with the absolute
- deadline passed in the model.
-
- The task guarantee is based on the factor utilization approach.
-
- Exceptions raised:
- XUNVALID_GUEST
- This level doesn't support guests. When a guest operation
- is called, the exception is raised.
-
- These exceptions are pclass-dependent...
- XDEADLINE_MISS
- If a task miss his deadline, the exception is raised.
-
- Restrictions & special features:
- - This level doesn't manage the main task.
- - At init time we have to specify:
- . guarantee check
- (when all task are created the system will check that the task_set
- will not use more than the available bandwidth)
- - A function to return the used bandwidth of the level is provided.
- - A function to return the pending activations of the task.
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-
-#ifndef __CBSGHD_H__
-#define __CBSGHD_H__
-
-#include <ll/ll.h>
-#include <kernel/config.h>
-#include <sys/types.h>
-#include <kernel/types.h>
-#include <modules/codes.h>
-
-
-
-
-
-
-
-
-/*+ flags... +*/
-#define CBSGHD_ENABLE_GUARANTEE 1 /*+ Task Guarantee enabled +*/
-#define CBSGHD_ENABLE_ALL 1
-
-#define CBSGHD_FAILED_GUARANTEE 8 /*+ used in the module, unsettabl
- in EDF_register_level... +*/
-
-
-
-
-
-#define ELASTIC_HARD_PCLASS 0x0600
-
-#define CBSGHD_LEVELNAME "CBSGHD base"
-#define CBSGHD_LEVEL_CODE 106
-#define CBSGHD_LEVEL_VERSION 1
-
-
-/* -----------------------------------------------------------------------
- ELASTIC_HARD_TASK_MODEL: elastic hard Tasks
- ----------------------------------------------------------------------- */
-
-
-typedef struct {
- TASK_MODEL t;
- TIME cnormal;
- TIME period;
- TIME wcet;
- TIME maxperiod;
-} ELASTIC_HARD_TASK_MODEL;
-
-#define elastic_hard_task_default_model(m) \
- task_default_model((m).t,ELASTIC_HARD_PCLASS), \
- (m).cnormal = 0, \
- (m).period = 0, \
- (m).wcet = 0, \
- (m).maxperiod = 0
-#define elastic_hard_task_def_level(m,l) task_def_level((m).t,l)
-#define elastic_hard_task_def_arg(m,a) task_def_arg((m).t,a)
-#define elastic_hard_task_def_stack(m,s) task_def_stack((m).t,s)
-#define elastic_hard_task_def_stackaddr(m,s) task_def_stackaddr((m).t,s)
-#define elastic_hard_task_def_group(m,g) task_def_group((m).t,g)
-#define elastic_hard_task_def_usemath(m) task_def_usemath((m).t)
-#define elastic_hard_task_def_system(m) task_def_system((m).t)
-#define elastic_hard_task_def_nokill(m) task_def_nokill((m).t)
-#define elastic_hard_task_def_ctrl_jet(m) task_def_ctrl_jet((m).t)
-#define elastic_hard_task_def_cnormal(m,c) (m).cnormal = (c)
-#define elastic_hard_task_def_period(m,p) (m).period = (p)
-#define elastic_hard_task_def_wcet(m,w) (m).wcet = (w)
-#define elastic_hard_task_def_maxperiod(m,p) (m).maxperiod = (p)
-#define elastic_hard_task_def_joinable(m) task_def_joinable((m).t)
-#define elastic_hard_task_def_unjoinable(m) task_def_unjoinable((m).t)
-
-
-
-
-/*+ Registration function:
- int flags Options to be used in this level instance...
- LEVEL master the level that must be used as master level for the
- CBSGHD tasks
-+*/
-void CBSGHD_register_level(int flags, LEVEL master);
-
-/*+ Returns the used bandwidth of a level +*/
-bandwidth_t CBSGHD_usedbandwidth(LEVEL l);
-
-#endif
-
Index: start/orbit/initfile.c
===================================================================
--- start/orbit/initfile.c (revision 1087)
+++ start/orbit/initfile.c (nonexistent)
@@ -1,124 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- ------------
- CVS : $Id: initfile.c,v 1.1.1.1 2002-09-02 09:37:45 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:45 $
- ------------
-
- System initialization file
-
- This file contains the 2 functions needed to initialize the system.
-
- These functions register the following levels:
-
- an EDF (Earliest Deadline First) level
- a RR (Round Robin) level
- a CBS (Costant Bandwidth Server) level
- a Dummy level
-
- It can accept these task models:
-
- HARD_TASK_MODEL (wcet+mit) at level 0
- SOFT_TASK_MODEL (met, period) at level 1
- NRT_TASK_MODEL at level 2
-
- This file is similar to the configuration of kernel/init/hartik3.c
-
- TICK is set to 0 (one-shot timer is used)
-*/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-#include "modules/rr.h"
-#include "modules/dummy.h"
-
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "modules/cabs.h"
-
-#include "drivers/keyb.h"
-
-
-/*+ sysyem tick in us +*/
-#define TICK 0
-
-/*+ RR tick in us +*/
-#define RRTICK 10000
-
-void read_file();
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- EDF_register_level(0);
- CBS_register_level(0, 0);
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- dummy_register_level();
-
- SEM_register_module();
-
- CABS_register_module();
-
- read_file();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- KEYB_PARMS kparms = BASE_KEYB;
-
- HARTPORT_init();
-
- keyb_def_ctrlC(kparms, NULL);
- keyb_def_map(kparms,itaMap);
- KEYB_init(&kparms);
-
- __call_main__(mb);
-
- return (void *)0;
-}
-
Index: start/orbit/orbit.dat
===================================================================
--- start/orbit/orbit.dat (revision 1087)
+++ start/orbit/orbit.dat (nonexistent)
@@ -1,21 +0,0 @@
-----------------------------------------------------
-period: 10000 wcet: 100
-delta: 1. scala: 150.
-G: 6.6e-15
-r_pianeta: 4 r_Terra: 8
-X_centro: 320 Y_centro: 240
-
-------------------- pianeti ------------------------
- massa pos.x pos.y vel.x vel.y
-0: 6.0e21 0. 0. 0. 0.
-1: 1.0e21 10000. 8000. -60. 0.
-2: 1.0e8 5000. 0. 0. 80.
-3: 5.0e18 10000. 8000. -50. 0.
-4: 1.0e9 10000. 8000. -40. 20.
-5: 1.0e15 1000. 5000. -80. 0.
-6: 1.0e5 1000. 5000. -80. 0.
-7: 1.0e17 1000. 5000. -80. 0.
-8: 1.0e5 1000. 5000. -80. 0.
-9: 1.0e5 1000. 5000. -80. 0.
-10: 1.0e5 1000. 5000. -80. 0.
-----------------------------------------------------
Index: start/orbit/makefile
===================================================================
--- start/orbit/makefile (revision 1087)
+++ start/orbit/makefile (nonexistent)
@@ -1,16 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= orbit
-
-include $(BASE)/config/example.mk
-
-orbit:
- make -f $(SUBMAKE) APP=orbit INIT= OTHEROBJS="initfile.o" OTHERINCL=
-
Index: start/orbit/orbit.c
===================================================================
--- start/orbit/orbit.c (revision 1087)
+++ start/orbit/orbit.c (nonexistent)
@@ -1,344 +0,0 @@
-/*
- * Project: S.Ha.R.K.
- *
- * Coordinators:
- * Giorgio Buttazzo <giorgio@sssup.it>
- * Paolo Gai <pj@gandalf.sssup.it>
- *
- * Authors :
- * Paolo Gai <pj@gandalf.sssup.it>
- * (see the web pages for full authors list)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://shark.sssup.it
- */
-
-/*
- ------------
- CVS : $Id: orbit.c,v 1.1.1.1 2002-09-02 09:37:45 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:45 $
- ------------
-*/
-
-/*
- * Copyright (C) 2000 Giorgio Buttazzo and Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-/****************************************************************/
-/* SIMULAZIONE DI MASSE CHE ORBITANO */
-/****************************************************************/
-
-#include <kernel/kern.h>
-#include <drivers/glib.h>
-#include <drivers/keyb.h>
-#include <semaphore.h>
-#include <stdlib.h>
-#include <math.h>
-
-#define MAX 11 /* numero massimo pianeti */
-#define ESC 27 /* codice ASCII tasto ESCAPE */
-#define XMAX 639 /* valore massimo coordinata X */
-#define YMAX 479 /* valore massimo coordinata Y */
-
-struct coord {
- double x;
- double y;
-};
-
-char fbuf[1000]; // buffer for reading a file
-int flen; // file length
-
-double mass[MAX]; /* vettore masse pianeti */
-struct coord pos[MAX]; /* vettore posizioni attuali */
-struct coord vel[MAX]; /* vettore velocita' iniziali */
-
-int XGS, YGS; /* Coordinate centro spazio */
-int RP, RT; /* raggio pianeta, raggio Terra */
-int np; /* numero attuale di pianeti */
-double G; /* Gravitazione Universale */
-double tick; /* tick di sistema */
-double delta; /* incremento temporale */
-double scala; /* fattore grafico di scala */
-
-// -------------------------------------------------------
-// NOTA: %f o %lf significa double e %nf significa float
-// -------------------------------------------------------
-
-PID pid;
-int period; /* task period */
-int wcet; /* task wcet */
-sem_t mutex; /* semaforo di mutua esclusione */
-
-
-void get_par(void);
-
-/*--------------------------------------------------------------*/
-
-void my_fine(void *arg)
-{
- grx_close();
-}
-
-/*--------------------------------------------------------------*/
-
-int inside(int x, int y)
-{
- return ((x > RP) && (x < XMAX-RP) &&
- (y > RP) && (y < YMAX-RP));
-}
-
-/*--------------------------------------------------------------*/
-
-TASK massa(void *xxx)
-{
- int i = (int)xxx; /* parametro del task */
- int gx, gy; /* coordinate grafiche pallina */
- int ox, oy; /* vecchia posizione pallina */
- int j;
- int r, col; /* raggio e colore pianeta */
- double dt; /* incremento temporale */
- double dist=0.0, dx, dy; /* distanze pianeta-pianeta */
- double dist0=0.0; /* distanze pianeta-Terra */
- double x, y; /* posizione del pianeta */
- double vx, vy; /* velocita' del pianeta */
- double ax, ay; /* accelerazione del pianeta */
- double k; /* variabile ausiliaria */
- double arg; /* variabile di appoggio */
-
- x = pos[i].x; y = pos[i].y;
- vx = vel[i].x; vy = vel[i].y;
- ox = XGS + x / scala;
- oy = YGS + y / scala;
- dt = delta;
-
- do {
- x = pos[i].x;
- y = pos[i].y;
- ax = ay = 0.0;
- for (j=0; j<np; j++) {
- if (j != i) {
- dx = pos[j].x - x;
- dy = pos[j].y - y;
- arg = dx*dx + dy*dy;
- dist = sqrt(arg);
- if (dist < RP*scala) dist = RP*scala;
- k = G * mass[j] / (dist*dist*dist);
- ax += k * dx;
- ay += k * dy;
- }
- if (j == 0) dist0 = dist - (RP+RT)*scala;
- }
- x += vx*dt + 0.5*ax*dt*dt;
- y += vy*dt + 0.5*ay*dt*dt;
- vx += ax * dt;
- vy += ay * dt;
-
- gx = XGS + x / scala;
- gy = YGS + y / scala;
-
- r = RP;
- col = i + 1;
-
- sem_wait(&mutex);
- grx_disc(ox,oy,r,0);
- grx_disc(gx,gy,r,col);
- sem_post(&mutex);
-
- pos[i].x = x; pos[i].y = y;
- ox = gx; oy = gy;
-
- task_endcycle();
-
- } while ((dist0 > 0) && inside(gx,gy));
-
- sem_wait(&mutex);
- grx_disc(ox,oy,r,0);
- grx_disc(XGS,YGS,RT,12);
- grx_circle(XGS,YGS,RT,14);
- sem_post(&mutex);
-
- return NULL;
-}
-
-/*--------------------------------------------------------------*/
-/* MAIN */
-/*--------------------------------------------------------------*/
-
-TASK main()
-{
- HARD_TASK_MODEL m;
- char c; /* carattere letto da tastiera */
-
- set_exchandler_grx();
- sys_atrunlevel(my_fine, NULL, RUNLEVEL_BEFORE_EXIT);
-
- sem_init(&mutex,0,1);
-
- get_par();
- keyb_getch(BLOCK);
-
- grx_init();
- grx_open(640, 480, 8);
-
- grx_disc(XGS,YGS,RT,12);
- grx_circle(XGS,YGS,RT,14);
-
- np = 0;
-
- do {
- if (np < MAX-1) {
- np++;
- hard_task_default_model(m);
- hard_task_def_arg (m, (void *)np);
- hard_task_def_wcet (m, wcet);
- hard_task_def_mit (m, period);
- hard_task_def_usemath (m);
- pid = task_create("massa", massa, &m, NULL);
- if (pid == NIL) {
- grx_close();
- perror("Could not create task");
- c = keyb_getch(BLOCK);
- sys_abort(1);
- }
- task_activate(pid);
- }
- c = keyb_getch(BLOCK);
-
- } while (c != ESC);
-
- sys_end();
-
- return 0;
-}
-
-/*------------------------------------------------------*/
-/* file reading */
-/*------------------------------------------------------*/
-
-void read_file(void)
-{
- int err;
- DOS_FILE *fp;
-
- fp = DOS_fopen("orbit.dat","r");
-
- if (!fp) {
- err = DOS_error();
- cprintf("Error %d opening myfile.txt...\n", err);
- flen = 0;
- return;
- }
-
- flen = DOS_fread(&fbuf, 1, 1000, fp);
- cprintf("Read %d bytes from orbit.dat\n", flen);
-
- DOS_fclose(fp);
-}
-
-/*------------------------------------------------------*/
-/* get data from buffer */
-/*------------------------------------------------------*/
-
-void get_par(void)
-{
- int x = 0;
- int i;
- double vx, vy;
-
- while ((fbuf[x] != ':') && (x < flen)) x++;
- x++;
- sscanf(&fbuf[x], "%d", &period);
- cprintf("period = %d\n", period);
-
- while ((fbuf[x] != ':') && (x < flen)) x++;
- x++;
- sscanf(&fbuf[x], "%d", &wcet);
- cprintf("wcet = %d\n", wcet);
-
- while ((fbuf[x] != ':') && (x < flen)) x++;
- x++;
- sscanf(&fbuf[x], "%f", &delta);
- cprintf("delta = %f\n", delta);
-
- while ((fbuf[x] != ':') && (x < flen)) x++;
- x++;
- sscanf(&fbuf[x], "%f", &scala);
- cprintf("scala = %f\n", scala);
-
- while ((fbuf[x] != ':') && (x < flen)) x++;
- x++;
- sscanf(&fbuf[x], "%f", &G);
- cprintf("G = %20.15f\n", G);
-
- while ((fbuf[x] != ':') && (x < flen)) x++;
- x++;
- sscanf(&fbuf[x], "%d", &RP);
- cprintf("RP = %d\n", RP);
-
- while ((fbuf[x] != ':') && (x < flen)) x++;
- x++;
- sscanf(&fbuf[x], "%d", &RT);
- cprintf("RT = %d\n", RT);
-
- while ((fbuf[x] != ':') && (x < flen)) x++;
- x++;
- sscanf(&fbuf[x], "%d", &XGS);
- cprintf("XGS = %d\n", XGS);
-
- while ((fbuf[x] != ':') && (x < flen)) x++;
- x++;
- sscanf(&fbuf[x], "%d", &YGS);
- cprintf("YGS = %d\n", YGS);
-
- for (i=0; i<MAX; i++) {
- while ((fbuf[x] != ':') && (x < flen)) x++;
- x++; x++;
- sscanf(&fbuf[x], "%f", &mass[i]);
-
- while ((fbuf[x] != '\t') && (x < flen)) x++;
- x++;
- sscanf(&fbuf[x], "%f", &vx);
-
- while ((fbuf[x] != '\t') && (x < flen)) x++;
- x++;
- sscanf(&fbuf[x], "%f", &vy);
- pos[i].x = vx; pos[i].y = vy;
-
- while ((fbuf[x] != '\t') && (x < flen)) x++;
- x++;
- sscanf(&fbuf[x], "%f", &vx);
-
- while ((fbuf[x] != '\t') && (x < flen)) x++;
- x++;
- sscanf(&fbuf[x], "%f", &vy);
- vel[i].x = vx; vel[i].y = vy;
-
- cprintf("mass[%d] = %f\t", i, mass[i]);
- cprintf("pos: %f, %f\t", pos[i].x, pos[i].y);
- cprintf("vel: %f, %f\n", vel[i].x, vel[i].y);
- }
-}
-
-/*--------------------------------------------------------------*/
-
Index: start/thdemo/initfile.c
===================================================================
--- start/thdemo/initfile.c (revision 1087)
+++ start/thdemo/initfile.c (nonexistent)
@@ -1,146 +0,0 @@
-/*
- * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
- *
- * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
- * Gerardo Lamastra <gerardo@sssup.it>
- *
- * Authors : Paolo Gai <pj@hartik.sssup.it>
- * (see authors.txt for full list of hartik's authors)
- *
- * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
- *
- * http://www.sssup.it
- * http://retis.sssup.it
- * http://hartik.sssup.it
- */
-
-/**
- ------------
- CVS : $Id: initfile.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
-
- File: $File$
- Revision: $Revision: 1.1.1.1 $
- Last update: $Date: 2002-09-02 09:37:41 $
- ------------
-
- System initialization file
-
- h3pi.c
-
- This file is equal to hartik3.c plus the resources module...
-
-**/
-
-/*
- * Copyright (C) 2000 Paolo Gai
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-//#define PI
-
-#include "kernel/kern.h"
-#include "modules/edf.h"
-#include "modules/cbs.h"
-#include "modules/rr.h"
-
-#ifndef PI
-#include "modules/rrsoft.h"
-#endif
-
-#include "modules/dummy.h"
-
-#include "modules/sem.h"
-#include "modules/hartport.h"
-#include "modules/cabs.h"
-#include "modules/pi.h"
-#include "modules/pc.h"
-#include "modules/srp.h"
-#include "modules/npp.h"
-#include "modules/nop.h"
-
-#include "drivers/keyb.h"
-
-
-/*+ sysyem tick in us +*/
-#define TICK 1000
-
-/*+ RR tick in us +*/
-#define RRTICK 10000
-//#define RRTICK 3000
-
-TIME __kernel_register_levels__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
-#ifdef PI
- EDF_register_level(EDF_ENABLE_ALL);
- CBS_register_level(CBS_ENABLE_ALL, 0);
-#else
- RRSOFT_register_level(RRTICK, RR_MAIN_NO, mb, RRSOFT_ONLY_HARD|RRSOFT_ONLY_SOFT);
- RRSOFT_register_level(RRTICK, RR_MAIN_NO, mb, RRSOFT_ONLY_SOFT); //cbs
-#endif
-
- RR_register_level(RRTICK, RR_MAIN_YES, mb);
- dummy_register_level();
-
-
- SEM_register_module();
-
- CABS_register_module();
-
- PI_register_module();
- NOP_register_module();
-
- return TICK;
-}
-
-TASK __init__(void *arg)
-{
- struct multiboot_info *mb = (struct multiboot_info *)arg;
-
- HARTPORT_init();
-
- kern_printf("TIME=%ld\n",sys_gettime(NULL));
- KEYB_init(NULL);
- kern_printf("TIME=%ld\n",sys_gettime(NULL));
-// KEYB_init(NULL);
-
- __call_main__(mb);
-
- return (void *)0;
-}
-
-
-#ifdef PI
-void app_mutex_init(mutex_t *m)
-{
- PI_mutexattr_t attr;
-
- PI_mutexattr_default(attr);
-
- mutex_init(m, &attr);
-}
-#else
-void app_mutex_init(mutex_t *m)
-{
- NOP_mutexattr_t attr;
-
- NOP_mutexattr_default(attr);
-
- mutex_init(m, &attr);
-}
-#endif
Index: start/thdemo/demo.c
===================================================================
--- start/thdemo/demo.c (revision 1087)
+++ start/thdemo/demo.c (nonexistent)
@@ -1,294 +0,0 @@
-/* Project: HARTIK 3.0 */
-/* Description: Hard Real TIme Kernel for 386 & higher machines */
-/* Author: Paolo Gai <pgai@rsk.it> */
-/* Advanced Linux Sound Architecture (ALSA) */
-/* Copyright (c) by Jaroslav Kysela <perex@jcu.cz> */
-/* Luca Abeni */
-/* FFTW by M. Frigo and S. G. Johnson */
-
-/* Date: 08/09/1999 */
-
-/* File: fftplay.c */
-/* Revision: 1.00 (Kernel 0.1.4; Library 0.0.9; Util 0.0.4) */
-
-
-
-#include "demo.h"
-
-//#include <kernel/types.h>
-//#include <kernel/model.h>
-#include <kernel/func.h>
-
-//#include <modules/cabs.h>
-
-#include <string.h>
-#include <stdlib.h>
-
-#include <drivers/keyb.h>
-//#include <drivers/crtwin.h>
-#include <drivers/glib.h>
-//#include <drivers/sound.h>
-//#include <ports/rfftw.h>
-
-
-
-/* Informations about the sampling rate and buffers */
-WORD rawdata_nsamples;
-WORD rawdata_buffer_size;
-WORD rawdata_freq;
-
-/* graphic mutex... */
-mutex_t mutex;
-
-/* useful colors... */
-int white;
-int black;
-int red;
-int gray;
-
-void app_mutex_init(mutex_t *m);
-
-
-static void version( void )
-{
- cprintf( "Hartik FFT Play 1.0\n" );
- cprintf( "-----------------------\n" );
- cprintf( "by Paolo Gai 1999\n" );
- cprintf( " <pj@hartik.sssup.it>\n" );
- cprintf( "-----------------------\n" );
-}
-
-void reverse(char s[])
-{
- int c, i, j;
-
- for (i = 0, j = strlen(s)-1; i<j; i++, j--)
- {
- c = s[i];
- s[i] = s[j];
- s[j] = c;
- }
-}
-
-char * itoa(int n, char *s)
-{
- int i, sign;
-
- if ((sign = n) < 0)
- n = -n;
-
- i = 0;
-
- do
- {
- s[i++] = n % 10 + '0';
- } while ((n /= 10) > 0);
-
- if (sign < 0)
- s[i++] = '-';
-
- s[i] = 0;
-
- reverse(s);
-
- return s;
-}
-
-void display_jet(PID i)
-{
- char st[200];
- TIME sum, max;
- int n;
-
- if (jet_getstat(i, &sum, &max, &n, NULL) != -1) {
- if (n==0) n=1;
- sprintf(st, "PID=%2d st=%3d Mean=%5d Max=%5d na=%10s",
- (int)i,
- (int)proc_table[i].status, (int)sum/n, (int)max,
- proc_table[i].name);
- mutex_lock(&mutex);
- grx_text(st, 0, 400+i*8, 255, 0);
- mutex_unlock(&mutex);
- }
-}
-
-
-
-void scenario(int f)
-{
- grx_text("HARTIK 4.0 - LEGO Version" , 0,0, rgb16(0,255,0), black );
- grx_text("Thesis Demo", 0,8, rgb16(0,255,0), black );
-
- #ifdef FFT_ON
- scenario_fftplay(f);
- #endif
-
- #ifdef FRAMEGRABBER_ON
- scenario_framegrabber();
- #endif
-
- #ifdef JET_ON
- scenario_jetcontrol();
- #endif
-
- #ifdef BALL_ON
- scenario_ball();
- #endif
-}
-
-
-void demo_exc_handler(int signo, siginfo_t *info, void *extra)
-{
- struct timespec t;
-
- grx_close();
-
- /* Default action for an kern exception is */
- kern_cli();
- ll_gettime(TIME_EXACT, &t),
- kern_printf("\nHartik Exception raised!!!"
- "\nTime (s:ns) :%ld:%ld"
- "\nException number:%d"
- "\nPID :%d\n",
- t.tv_sec, t.tv_nsec, info->si_value.sival_int,
- info->si_task);
- sys_end();
-// ll_abort(5);
-}
-
-void my_close(void *arg)
-{
- grx_close();
-// sys_status(3);
-}
-
-
-void endfun(KEY_EVT *k)
-{
- grx_close();
- cprintf("Ctrl-Brk pressed! Ending...\n");
- sys_end();
-}
-
-void zerofun(KEY_EVT *k)
-{
- int i;
- for (i=0; i<MAX_PROC; i++) jet_delstat(i);
-}
-
-void printeventqueue(void *arg)
-{
- struct event *p;
- extern struct event *firstevent;
-
- kern_cli();
- grx_close();
- kern_cli();
- for (p = firstevent; p != NULL; p = p->next) {
- kern_printf("par:%d time:%ld.%ld p:%d handler:%d\n",
- (int)p->par, p->time.tv_sec, p->time.tv_nsec/1000, (int)p, (int)p->handler);
- }
- kern_sti();
-}
-
-int main(int argc, char **argv)
-{
- int modenum;
-
- int f;
-
- KEY_EVT k;
-
- struct sigaction action;
-
- srand(4);
-
- version();
-
- #ifdef FRAMEGRABBER_ON
- if (argc == 1)
- {
- cprintf("type x fftplay <freq>");
- return 0;
- }
-
- f = atoi(argv[1]);
- compute_params(&f,&rawdata_nsamples);
- #endif
-
- keyb_set_map(itaMap);
- k.flag = CNTR_BIT;
- k.scan = KEY_C;
- k.ascii = 'c';
- keyb_hook(k,endfun);
- k.flag = CNTL_BIT;
- k.scan = KEY_C;
- k.ascii = 'c';
- keyb_hook(k,endfun);
- k.flag = ALTL_BIT;
- k.scan = KEY_C;
- k.ascii = 'c';
- keyb_hook(k,zerofun);
- k.flag = 0;
- k.scan = KEY_ENT;
- k.ascii = 13;
- keyb_hook(k,endfun);
-
- /* Init the standard Hartik exception handler */
- /* Set the signal action */
- action.sa_flags = SA_SIGINFO;
- action.sa_sigaction = demo_exc_handler;
- action.sa_handler = 0;
- sigfillset(&action.sa_mask); /* we block all the other signals... */
-
- if (sigaction(SIGHEXC, &action, NULL) == -1) {
- perror("Error initializing signals...");
- sys_end();
- }
-
- sys_atrunlevel(my_close, NULL, RUNLEVEL_BEFORE_EXIT);
-
-
- grx_init();
- modenum = grx_getmode(640, 480, 16);
-
- grx_setmode(modenum);
-
- /* init the graphic mutex */
- app_mutex_init(&mutex);
-
- /* useful colors ... */
- white = rgb16(255,255,255);
- black = rgb16(0,0,0);
- red = rgb16(255,0,0);
- gray = rgb16(128,128,128);
-
- scenario(f/2);
-// grx_close();
-// clear();
- #ifdef FFT_ON
- init_fftplay(f);
- #endif
-
- #ifdef FRAMEGRABBER_ON
- init_framegrabber();
- #endif
-
- #ifdef JET_ON
- init_jetcontrol();
- #endif
-
- #ifdef BALL_ON
- init_ball();
- #endif
-
- group_activate(1);
-
- #ifdef FRAMEGRABBER_ON
- start_framegrabber();
- #endif
-
- return 0;
-}
-
-
Index: start/thdemo/fftplay.c
===================================================================
--- start/thdemo/fftplay.c (revision 1087)
+++ start/thdemo/fftplay.c (nonexistent)
@@ -1,770 +0,0 @@
-/* Project: HARTIK 3.0 */
-/* Description: Hard Real TIme Kernel for 386 & higher machines */
-/* Author: Paolo Gai <pgai@rsk.it> */
-/* Advanced Linux Sound Architecture (ALSA) */
-/* Copyright (c) by Jaroslav Kysela <perex@jcu.cz> */
-/* Luca Abeni */
-/* FFTW by M. Frigo and S. G. Johnson */
-
-/* Date: 08/09/1999 */
-
-/* File: fftplay.c */
-/* Revision: 1.00 (Kernel 0.1.4; Library 0.0.9; Util 0.0.4) */
-
-
-/*
-
-FFTPlay 1.0
------------
-
-This application reads data from the audio microphone and then put it
-to the screen in a graphical oscilloscope-like form (both standard Hartik
-SB driver and Alsa driver can be used).
-
-The application also calculate a FFT on the latest values, and displays
-the power spectrum in tho ways, one like an equalizator, and the other in a
-2D form.
-
-A resolution of 1024x768, 64K colors is used.
-
-The task set is composed by these tasks and functions:
-
-Self buffering functions (SB only)
-----------------------------------
-this function takes the samples read by the mic and then makes a window
-with the last WINDATA_NSAMPLES samples. The window is then put in
-the CAB windata.
-
-Task raw and task mixer (ALSA only)
------------------------------------
-These tasks are used with the Alsa driver; because it doesn't support the
-self-buffering mode, we have to do a forever cycle in witch we have to read
-all the data. Then the data are managed like the self-buffering functions of
-the SB driver or sent to the mixer task (with a STREAM mailbox) which makes
-the window.
-(This approach is not good for realtime...)
-
-Task wave
----------
-This task read the last window and then put it on the screen in a wave form
-on the top of the screen.
-The task's period is set to 40 ms (25 fps).
-
-Task fft
---------
-This task read the last window and then it computes the FFT.
-With the FFT data it computes the power spectrum, whitch is sent to the
-CAB pwrdata.
-The task's period is set to 10 ms (good for the 2D story task).
-This task is the only Hard Task.
-
-Task equ
---------
-This task read the last power spectrum and displays it in a graphical
-form, like a hi-fi equalizator.
-The Histograms can be white or coloured like the equ2D task (see EQU_SHADE)
-The task's period is set to 40 ms (25 fps).
-
-Task equ2D
-----------
-This task read the lasf power spectrum and displays it in a graphical
-one-line form. Each pixel is a power coefficient, and its colour shade
-from black (no power) to red (high power) passing through green and blue.
-The task display the last EQU2D_WIDTH power lines.
-The task's period is set to 10 ms (good for the 2D story task).
-
-****************************************************************************
-TASK LOAD
-****************************************************************************
-
- period wcet
-task tick (ms) us %
---------------------------------------------------------
-sound driver 24->3 12->1.5 200 0.016->0.133
-wave 80 40 11500 0.2875
-fft 20 10 3000 0.3000
-equ 80 40 7000 0.1750
-equ2D 20 10 500 0.0500
- -------------
- 0.812 (last 4)
-*/
-
-#include <ll/ll.h>
-
-#include <kernel/types.h>
-#include <kernel/model.h>
-#include <kernel/func.h>
-
-#include <modules/cabs.h>
-
-#include <string.h>
-#include <stdlib.h>
-#include <semaphore.h>
-
-#include <drivers/keyb.h>
-#include <drivers/crtwin.h>
-#include <drivers/glib.h>
-#include <drivers/sound.h>
-#include <ports/rfftw.h>
-
-/* now the load constants... */
-
-#define WCET_WAVE 11500
-#define WCET_FFT 3000
-#define WCET_EQU 500
-#define WCET_EQU2D 500
-
-#define PERIOD_WAVE 40000
-#define PERIOD_FFT 10000
-#define PERIOD_EQU 40000
-#define PERIOD_EQU2D 10000
-
-/* define if shorts critical sections wanted */
-#define SHORT_CRITICAL_SECTIONS(x) \
- if (!((x)%64)) \
- { \
- sem_post(&mutex); \
- sem_wait(&mutex); \
- }
-
-/* define if you want NRT or SOFT... */
-#define TASK_TYPE SOFT
-//#define TASK_TYPE NRT
-
-
-
-/* Only 4 Debug... */
-/*#define NO_GRX */
-
-/* Samples are 16-bit signed integers */
-typedef short SAMPLE;
-#define MAX_SAMPLE 32768
-
-/* Informations about the sampling rate and buffers */
-WORD rawdata_nsamples;
-WORD rawdata_buffer_size;
-WORD rawdata_freq;
-
-/* Numbers of samples of the sample window */
-#define WINDATA_NSAMPLES 1024
-
-/* task WAVE */
-/* the point (wave_x,wave_y) is on the center left of the area... */
-#define WAVE_NSAMPLES 1024
-#define WAVE_X 0
-#define WAVE_Y 130
-#define WAVE_HEIGHT 80
-
-/* task FFT */
-#define FFT_NSAMPLES WINDATA_NSAMPLES
-#define PWR_NSAMPLES (FFT_NSAMPLES/2+1)
-
-/* task EQU */
-/* the point (equ_x, equ_y) is the top right corner */
-#define EQU_NSAMPLES PWR_NSAMPLES
-#define EQU_X 170
-#define EQU_Y 255
-#define EQU_HEIGHT 170
-#define EQU_SHADE
-
-/* task EQU2D */
-/* the point (equ2d_x, equ2d_y) is the top left corner */
-#define EQU2D_NSAMPLES EQU_NSAMPLES
-#define EQU2D_X 255
-#define EQU2D_Y EQU_Y
-#define EQU2D_WIDTH 768
-#define EQU2D_CLIP 255
-
-/* scenario */
-#define SCENARIO_NLABEL 16
-
-/* Scale factors */
-#define FFT_SCALE (16384.0)
-#define EQU_SCALE (32.0)
-#define EQU2D_SCALE (8.0)
-//#define EQU_SCALE (64.0)
-//#define EQU2D_SCALE (16.0)
-
-
-/* CAB ports... */
-CAB cab_windata; /* a window on the last WINDATA_DIM samples */
-CAB cab_pwrdata; /* the last power spectrum */
-
-/* for the cab_windata */
-typedef struct {
- int start;
- SAMPLE sample[WINDATA_NSAMPLES];
-} window;
-
-/* for the cab_pwrdata */
-typedef struct {
- fftw_real p[PWR_NSAMPLES];
-} power;
-
-/* graphic mutex... */
-sem_t mutex;
-
-// win is global... because is used by raw_infun...
-window win;
-
-
-
-/* useful colors... */
-int white;
-int black;
-int red;
-
-static void version( void )
-{
- cprintf( "Hartik FFT Play 1.0\n" );
- cprintf( "-----------------------\n" );
- cprintf( "by Paolo Gai 1999\n" );
- cprintf( " <pj@hartik.sssup.it>\n" );
- cprintf( "-----------------------\n" );
-}
-
-void reverse(char s[])
-{
- int c, i, j;
-
- for (i = 0, j = strlen(s)-1; i<j; i++, j--)
- {
- c = s[i];
- s[i] = s[j];
- s[j] = c;
- }
-}
-
-char * itoa(int n, char *s)
-{
- int i, sign;
-
- if ((sign = n) < 0)
- n = -n;
-
- i = 0;
-
- do
- {
- s[i++] = n % 10 + '0';
- } while ((n /= 10) > 0);
-
- if (sign < 0)
- s[i++] = '-';
-
- s[i] = 0;
-
- reverse(s);
-
- return s;
-}
-
-
-
-/*
- This is the self-buffering function: read the samples and put their mean
- value in a CAB
-*/
-int raw_infun(void *b)
-{
- int i;
- char *w;
- SAMPLE *audiobuf = (SAMPLE *)b;
-
- for (i=0; i<rawdata_nsamples/2; i++) {
- win.sample[win.start] = audiobuf[i];
- win.start = (win.start+1) % WINDATA_NSAMPLES;
- }
-
- w = cab_reserve(cab_windata);
- memcpy(w, &win, sizeof(window));
- cab_putmes(cab_windata,w);
-
- #if defined(NO_GRX)
- cprintf("X"); //"XXX%d\n",win.sample[win.start]);
- #endif
- return 0;
-}
-
-
-
-void init_rawdata()
-{
- int i;
- char *w;
-
- win.start = 0;
- for (i=0; i<WINDATA_NSAMPLES; i++)
- win.sample[i] = 0;
-
- w = cab_reserve(cab_windata);
- memcpy(w, &win, sizeof(window));
- cab_putmes(cab_windata,w);
-}
-
-
-
-
-
-TASK wave_task()
-{
- window *p;
- int x,y;
- int s;
-
- while(1)
- {
- p = (window *)cab_getmes(cab_windata);
-
- /* let's print the wave */
- sem_wait(&mutex);
- for(x = WAVE_X, s = p->start;
- x < WAVE_X+WAVE_NSAMPLES;
- x++, s = (s+1)%WINDATA_NSAMPLES )
- {
- y = WAVE_Y + (WAVE_HEIGHT * p->sample[s]) / MAX_SAMPLE;
- SHORT_CRITICAL_SECTIONS(x);
- grx_plot(x,y,white);
- }
- sem_post(&mutex);
-
- task_endcycle();
-
- /* let's erase the wave */
- sem_wait(&mutex);
- for(x = WAVE_X, s = p->start;
- x < WAVE_X+WAVE_NSAMPLES;
- x++, s = (s+1)%WINDATA_NSAMPLES )
- {
- y = WAVE_Y + (WAVE_HEIGHT * p->sample[s]) / MAX_SAMPLE;
- SHORT_CRITICAL_SECTIONS(x);
- grx_plot(x,y,black);
- }
- sem_post(&mutex);
-
- cab_unget(cab_windata,(char *)p);
-
- }
-}
-
-
-rfftw_plan plan;
-
-void fft_close(void *arg)
-{
- rfftw_destroy_plan(plan);
-}
-
-
-TASK fft_task()
-{
- fftw_real in[FFT_NSAMPLES], out[FFT_NSAMPLES];
- power power_spectrum;
-
- #if defined(NO_GRX)
- fftw_real max = 0.0;
- #endif
-
- char *m;
-
- int k, i;
-
- window *p;
-
- plan = rfftw_create_plan(FFT_NSAMPLES, FFTW_REAL_TO_COMPLEX, FFTW_ESTIMATE);
-
- sys_atrunlevel(fft_close, NULL, RUNLEVEL_BEFORE_EXIT);
-
- while(1)
- {
- /* Let's prepare the intput FFT data */
- p = (window *)cab_getmes(cab_windata);
-
- for (k = 0, i = p->start;
- k < FFT_NSAMPLES;
- k++, i = (i+1)%WINDATA_NSAMPLES)
- in[k] = p->sample[i]/FFT_SCALE;
-
- cab_unget(cab_windata,(char *)p);
-
- /* zero-padding if needed */
- for (k=WINDATA_NSAMPLES; k < FFT_NSAMPLES; k++)
- in[k] = 0.0;
-
- rfftw_one(plan, in, out);
-
- /* power spectrum computation */
- power_spectrum.p[0] = out[0]*out[0]; /* DC component */
- for (k = 1; k < PWR_NSAMPLES; ++k) /* (k < N/2 rounded up) */
- power_spectrum.p[k] = out[k]*out[k] + out[FFT_NSAMPLES-k]*out[FFT_NSAMPLES-k];
- if (FFT_NSAMPLES % 2 == 0) /* N is even */
- power_spectrum.p[FFT_NSAMPLES/2] = out[FFT_NSAMPLES/2]*out[FFT_NSAMPLES/2]; /* Nyquist freq. */
-
- m = cab_reserve(cab_pwrdata);
- memcpy(m, &power_spectrum, sizeof(power));
- cab_putmes(cab_pwrdata,m);
-
- #if defined(NO_GRX)
- max = 0.0;
- for (k=0; k<PWR_NSAMPLES; k++)
- if (power_spectrum.p[k] > max)
- max = power_spectrum.p[k];
-
- //cprintf("%f %f\n",max,(max / EQU_SCALE) );
- #endif
-
- task_endcycle();
-
- }
-}
-
-/* structure is like the wave task... */
-TASK equ_task()
-{
- power *p;
-
- int x[PWR_NSAMPLES];
- int y;
- int s;
-
- int r,g,b;
-
- while(1)
- {
- p = (power *)cab_getmes(cab_pwrdata);
-
- /* print the lines */
- sem_wait(&mutex);
- for(y = EQU_Y, s = 0;
- s < EQU_NSAMPLES;
- y++, s++ )
- {
- x[s] = (int)(p->p[s] / EQU_SCALE);
-
- if (x[s] > EQU_HEIGHT)
- x[s] = EQU_HEIGHT;
-
- x[s] = EQU_X - x[s];
-
-
- #if defined(EQU_SHADE)
-
- /* like the task equ2d... */
- r = (int)(p->p[s] / EQU2D_SCALE);
- if (r > EQU2D_CLIP)
- r = EQU2D_CLIP;
-
- if (r< 64) g = r * 4;
- else if (r<128) g = (128-r) * 4;
- else g = 0;
-
- if (r<128) b = 0;
- else if (r<192) b = (r-128) * 4;
- else b = (256-r) * 4;
-
- SHORT_CRITICAL_SECTIONS(y);
- grx_line(EQU_X,y,x[s],y,rgb16(r,g,b));
- #else
- SHORT_CRITICAL_SECTIONS(y);
- grx_line(EQU_X,y,x[s],y,white);
- #endif
- }
- sem_post(&mutex);
-
- task_endcycle();
-
- /* erase the lines... */
- sem_wait(&mutex);
- for(y = EQU_Y, s = 0;
- s < EQU_NSAMPLES;
- y++, s++ )
- {
- SHORT_CRITICAL_SECTIONS(y);
- grx_line(EQU_X,y,x[s],y,black);
- }
- sem_post(&mutex);
-
- cab_unget(cab_pwrdata,(char *)p);
-
- }
-}
-
-TASK equ2d_task()
-{
- power *p;
-
- int pwrint;
-
- int x = 0;
-
- int y,s;
-
- int r,g,b;
-
- while(1)
- {
-
- p = (power *)cab_getmes(cab_pwrdata);
-
- /* print the line */
- sem_wait(&mutex);
-
- for(y = EQU2D_Y, s = 0;
- s < EQU2D_NSAMPLES;
- y++, s++ )
- {
- pwrint = (int)(p->p[s] / EQU2D_SCALE);
-
- if (pwrint > EQU2D_CLIP)
- pwrint = EQU2D_CLIP;
-
- r = pwrint;
-
- if (pwrint< 64) g = pwrint * 4;
- else if (pwrint<128) g = (128-pwrint) * 4;
- else g = 0;
-
- if (pwrint<128) b = 0;
- else if (pwrint<192) b = (pwrint-128) * 4;
- else b = (256-pwrint) * 4;
-
- SHORT_CRITICAL_SECTIONS(y);
- grx_plot(EQU2D_X+x,y,rgb16(r,g,b));
- }
-
- x = (x+1) % EQU2D_WIDTH;
- grx_line(EQU2D_X+x,EQU2D_Y,EQU2D_X+x,EQU2D_Y+EQU2D_NSAMPLES,white);
-
- sem_post(&mutex);
-
- cab_unget(cab_pwrdata,(char *)p);
-
- task_endcycle();
- }
-}
-
-TASK prova_task()
-{
- window *p;
-
- while(1)
- {
- p = (window *)cab_getmes(cab_windata);
- cprintf("%d %d %d\t", p->start /*sample[0]*/,p->sample[1],p->sample[2]);
- cab_unget(cab_windata,(char *)p);
-
- task_endcycle();
- }
-}
-
-
-void scenario(int f)
-{
- int i,y;
- char s[6];
-
- grx_line(0,WAVE_Y-WAVE_HEIGHT-1,1023,WAVE_Y-WAVE_HEIGHT-1,red);
- grx_line(0,WAVE_Y+WAVE_HEIGHT+1,1023,WAVE_Y+WAVE_HEIGHT+1,red);
- grx_line(0,EQU_Y-11 ,1023,EQU_Y-11 ,red);
-
-
-
- /* lines near the frequencies */
- grx_line(EQU_X +1,EQU_Y,EQU_X +1,EQU_Y+EQU_NSAMPLES,red);
- grx_line(EQU2D_X-1,EQU_Y,EQU2D_X-1,EQU_Y+EQU_NSAMPLES,red);
-
- for (i=0; i<SCENARIO_NLABEL; i++)
- {
- y = (i*EQU_NSAMPLES)/(SCENARIO_NLABEL-1);
- if (i == SCENARIO_NLABEL-1) y--;
- grx_line(EQU_X +1,EQU_Y+y,EQU_X +10,EQU_Y+y,red);
- grx_line(EQU2D_X-1,EQU_Y+y,EQU2D_X-10,EQU_Y+y,red);
-
- itoa((i*f)/(SCENARIO_NLABEL-1),s);
- grx_text(s,EQU_X+20,EQU_Y+y-8,white,black);
- }
-
- grx_text("FFTPlay 1.0 - by Paolo Gai 1999 <pj@hartik.sssup.it>", 0,8, rgb16(0,255,0), black );
- grx_text("...press ENTER key to exit..." , 0,24, rgb16(0,255,0), black );
-
- grx_text("FFT Power Spectrum", 0 , EQU_Y-21, rgb16(0,0,255), black);
- grx_text("FFT Power Story", EQU2D_X+16, EQU_Y-21, rgb16(0,0,255), black);
- grx_text("Waveform" , 0, WAVE_Y-WAVE_HEIGHT-10, rgb16(0,0,255), black);
-
-}
-
-
-
-
-void compute_params(int *freq,WORD *nsamp, WORD *per)
-{
- if (*freq< 2000)
- {
- cprintf("WARNING: frequency less than 2000Hz\n ---> frequency set to 2000Hz\n");
- *freq = 2000;
- }
- if (*freq<= 8000) { *nsamp = 128; *per = 10; return; }
- if (*freq<=16000) { *nsamp = 256; *per = 10; return; }
- if (*freq<=24000) { *nsamp = 512; *per = 10; return; }
- if (*freq>48000)
- {
- cprintf("WARNING: frequency greather than 48000Hz\n ---> frequency set to 48000Hz\n");
- *freq = 48000;
- }
- if (*freq<=48000) { *nsamp = 1024;*per = 10; return; }
-}
-
-
-
-void my_close(void *arg)
-{
- grx_close();
- sys_status(3);
-}
-
-
-void endfun(KEY_EVT *k)
-{
- cprintf("Ctrl-Brk pressed! Ending...\n");
- sys_end();
-}
-
-int main(int argc, char **argv)
-{
- int modenum;
-
- int f;
-
- /* irq period... */
- WORD period;
-
- KEY_EVT k;
-
- SOFT_TASK_MODEL m3, m4, m5, m6;
-
- PID p3,p4,p5,p6;
-
- version();
-
- if (argc == 1)
- {
- cprintf("type x fftplay <freq>");
- return 0;
- }
-
- f = atoi(argv[1]);
- compute_params(&f,&rawdata_nsamples,&period);
-
- keyb_set_map(itaMap);
- k.flag = CNTR_BIT;
- k.scan = KEY_C;
- k.ascii = 'c';
- keyb_hook(k,endfun);
- k.flag = CNTL_BIT;
- k.scan = KEY_C;
- k.ascii = 'c';
- keyb_hook(k,endfun);
-
- cab_windata = cab_create("windata", sizeof(window), 4);
- cab_pwrdata = cab_create("pwr", sizeof(power), 4);
-
- /* Init the sound lib */
- sound_init((rawdata_nsamples * sizeof(SAMPLE)), NULL);
- sound_info();
-
- /* Init the data used by the raw_infun */
- init_rawdata();
-
- /* Start the self-buffering sampling operation */
- sound_setfun(raw_infun, (int (*)(void *))-1);
- sound_sample(NULL, f, 0, DMA_OP | PCM16 | MYFUN, NULL);
-
- cprintf("Press Enter...");
- while (keyb_getchar() != 13);
-
- sys_atrunlevel(my_close, NULL, RUNLEVEL_BEFORE_EXIT);
-
- #if !defined(NO_GRX)
- grx_init();
- modenum = grx_getmode(1024, 768, 16);
- grx_setmode(modenum);
-
- /* init the graphic mutex */
- sem_init(&mutex, 0, 1);
-
- /* useful colors ... */
- white = rgb16(255,255,255);
- black = rgb16(0,0,0);
- red = rgb16(255,0,0);
-
- scenario(f/2);
-
- #endif
-
- #if !defined(NO_GRX)
- soft_task_default_model(m3);
- soft_task_def_period(m3, PERIOD_WAVE);
- soft_task_def_met(m3, WCET_WAVE);
- soft_task_def_group(m3, 1);
- p3 = task_create("wave", wave_task, &m3, NULL);
- if (p3 == -1) {
- perror("FFTPlay: Could not create task <wave>\n");
- sys_end();
- }
- #endif
-
- soft_task_default_model(m4);
- soft_task_def_period(m4, PERIOD_FFT);
- soft_task_def_met(m4, WCET_FFT);
- soft_task_def_group(m4, 1);
- soft_task_def_stack(m4,32*1024);
- soft_task_def_usemath(m4);
- p4 = task_create("fft", fft_task, &m4, NULL);
- if (p4 == -1) {
- perror("FFTPlay: Could not create task <fft>\n");
- sys_end();
- }
-
- #if !defined(NO_GRX)
- soft_task_default_model(m5);
- soft_task_def_period(m5, PERIOD_EQU);
- soft_task_def_met(m5, WCET_EQU);
- soft_task_def_group(m5, 1);
- soft_task_def_stack(m5,32*1024);
- soft_task_def_usemath(m5);
- p5 = task_create("equ", equ_task, &m5, NULL);
- if (p5 == -1) {
- perror("FFTPlay: Could not create task <equ>\n");
- sys_end();
- }
- #endif
-
- #if !defined(NO_GRX)
- soft_task_default_model(m6);
- soft_task_def_period(m6, PERIOD_EQU2D);
- soft_task_def_met(m6, WCET_EQU2D);
- soft_task_def_group(m6, 1);
- soft_task_def_stack(m6,32*1024);
- soft_task_def_usemath(m6);
- p6 = task_create("equ2D", equ2d_task, &m5, NULL);
- if (p6 == -1) {
- perror("FFTPlay: Could not create task <equ2D>\n");
- sys_end();
- }
- #else
- /* Start the prova task */
- //task_def_wcet(m6,1000);
- //task_activate(task_create("prova",prova_task,TASK_TYPE,PERIODIC,200,&m6));
- #endif
-
- group_activate(1);
-
- /* Wait until the user get bored */
- while (keyb_getchar() != 13);
-
- sys_end();
-
- return 0;
-}
-
-
Index: start/thdemo/jetctrl.c
===================================================================
--- start/thdemo/jetctrl.c (revision 1087)
+++ start/thdemo/jetctrl.c (nonexistent)
@@ -1,200 +0,0 @@
-// JetControl
-
-#include "demo.h"
-#include "kernel/func.h"
-
-TASK jetdummy_task(void *arg)
-{
- TIME now_dummy, last_dummy, diff_dummy, slice;
- struct timespec now, last, diff;
- int x = 0;
- int height;
-
- NULL_TIMESPEC(&last);
- last_dummy = 0;
- for (;;) {
- task_nopreempt();
- jet_getstat(DUMMY_PID, NULL, NULL, NULL, &now_dummy);
- sys_gettime(&now);
- task_preempt();
-
- SUBTIMESPEC(&now, &last, &diff);
- slice = diff.tv_sec * 1000000 + diff.tv_nsec/1000;
- diff_dummy = now_dummy - last_dummy;
-
- height = (int)(JET_DUMMY_HEIGHT*((float)diff_dummy)/((float)slice));
-
- TIMESPEC_ASSIGN(&last, &now);
- last_dummy = now_dummy;
-
- mutex_lock(&mutex);
- grx_line(JET_DUMMY_X+x,JET_DUMMY_Y,
- JET_DUMMY_X+x,JET_DUMMY_Y+height ,black);
- grx_line(JET_DUMMY_X+x,JET_DUMMY_Y+height,
- JET_DUMMY_X+x,JET_DUMMY_Y+JET_DUMMY_HEIGHT,white);
- grx_line(JET_DUMMY_X+(x+1)%JET_DUMMY_WIDTH,JET_DUMMY_Y,
- JET_DUMMY_X+(x+1)%JET_DUMMY_WIDTH,JET_DUMMY_Y+JET_DUMMY_HEIGHT,255);
- mutex_unlock(&mutex);
-
- x = (x+1)%JET_DUMMY_WIDTH;
-
- task_endcycle();
- }
-}
-
-
-TASK jetctrl_task(void *arg)
-{
- char st[50];
- TIME sum, max;
- int n;
-
- PID i;
- int printed = 0;
-
- for (;;) {
- for (i=2, printed=0; i<MAX_PROC && printed<JET_NTASK; i++) {
- if (jet_getstat(i, &sum, &max, &n, NULL) != -1) {
- if (!n) n=1;
- sprintf(st, "%6d %6d %10s", (int)sum/n, (int)max, proc_table[i].name);
- mutex_lock(&mutex);
- grx_text(st, 384, JET_Y_NAME+16+printed*8, gray, black);
- mutex_unlock(&mutex);
- printed++;
- }
- }
- while (printed<JET_NTASK) {
- mutex_lock(&mutex);
- grx_text(" ",
- 384, JET_Y_NAME+16+printed*8, gray, black);
- mutex_unlock(&mutex);
- printed++;
- }
- task_endcycle();
- }
-}
-
-TASK jetslide_task(void *arg)
-{
- TIME sum, curr, max;
-
- TIME total[JET_NTASK];
- int slides[JET_NTASK];
-
- PID i;
- int printed = 0;
-
- for (;;) {
- // Fill the total array in a nonpreemptive section
- task_nopreempt();
- for (i=2, printed=0; i<MAX_PROC && printed<JET_NTASK; i++) {
- if (jet_getstat(i, &sum, NULL, NULL, &curr) != -1) {
- total[printed] = sum+curr;
- printed++;
- }
- }
- task_preempt();
-
- while (printed < JET_NTASK)
- total[printed++] = 0;
-
- // Compute the Max elapsed time
- max = 0;
- for (i=0; i<JET_NTASK; i++)
- if (total[i] > max) max = total[i];
- if (!max) max = 1;
-
- // Compute the slides width
- for (i=0; i<JET_NTASK; i++)
- slides[i] = (int)( (((float)total[i])/max) * JET_SLIDE_WIDTH);
-
- // print the data
- mutex_lock(&mutex);
- for (i=0; i<JET_NTASK; i++) {
- grx_box(JET_SLIDE_X, JET_Y_NAME+16+i*8,
- JET_SLIDE_X+slides[i], JET_Y_NAME+23+i*8, gray);
- grx_box(JET_SLIDE_X+slides[i], JET_Y_NAME+16+i*8,
- JET_SLIDE_X+JET_SLIDE_WIDTH, JET_Y_NAME+23+i*8, black);
- }
-
- while (i<JET_NTASK) {
- grx_box(JET_SLIDE_X, JET_Y_NAME+16+i*8,
- JET_SLIDE_X+JET_SLIDE_WIDTH, JET_Y_NAME+20+i*8, black);
- i++;
- }
- mutex_unlock(&mutex);
- task_endcycle();
- }
-}
-
-
-void scenario_jetcontrol(void)
-{
- grx_text("System load" , 384, 248, rgb16(0,0,255), black);
- grx_line(384,258,639,258,red);
-
- grx_text(" Mean Max Name Slide", 384, JET_Y_NAME, gray, black);
- grx_line(384,JET_Y_NAME+10,639,JET_Y_NAME+10,gray);
-
- grx_rect(JET_DUMMY_X-1, JET_DUMMY_Y-1,
- JET_DUMMY_X+JET_DUMMY_WIDTH, JET_DUMMY_Y+JET_DUMMY_HEIGHT+1, gray);
-
- grx_text("100%", JET_DUMMY_X-40, JET_DUMMY_Y, gray, black);
- grx_text(" 0%", JET_DUMMY_X-40, JET_DUMMY_Y+JET_DUMMY_HEIGHT-8, gray, black);
-
- grx_line(JET_DUMMY_X-1, JET_DUMMY_Y, JET_DUMMY_X-5, JET_DUMMY_Y, gray);
- grx_line(JET_DUMMY_X-1, JET_DUMMY_Y+JET_DUMMY_HEIGHT, JET_DUMMY_X-5, JET_DUMMY_Y+JET_DUMMY_HEIGHT, gray);
- grx_line(384,258,639,258,red);
-}
-
-void init_jetcontrol(void)
-{
- SOFT_TASK_MODEL m3, m4, m5;
-
- PID p3, p4, p5;
-
- soft_task_default_model(m3);
- soft_task_def_level(m3,1);
- soft_task_def_period(m3, PERIOD_JETCTRL);
- soft_task_def_met(m3, WCET_JETCTRL);
- soft_task_def_ctrl_jet(m3);
- soft_task_def_group(m3, 1);
- p3 = task_create("jctrl", jetctrl_task, &m3, NULL);
- if (p3 == -1) {
- grx_close();
- perror("FFTPlay: Could not create task <jetctrl>\n");
- ll_abort(54);
- sys_end();
- }
-
- soft_task_default_model(m4);
- soft_task_def_level(m4,1);
- soft_task_def_period(m4, PERIOD_JETDUMMY);
- soft_task_def_met(m4, WCET_JETDUMMY);
- soft_task_def_group(m4, 1);
- soft_task_def_usemath(m4);
- soft_task_def_ctrl_jet(m4);
- p4 = task_create("jdmy", jetdummy_task, &m4, NULL);
- if (p4 == -1) {
- grx_close();
- perror("FFTPlay: Could not create task <jetdummy>\n");
- ll_abort(54);
- sys_end();
- }
-
- soft_task_default_model(m5);
- soft_task_def_level(m5,1);
- soft_task_def_period(m5, PERIOD_JETSLIDE);
- soft_task_def_met(m5, WCET_JETSLIDE);
- soft_task_def_group(m5, 1);
- soft_task_def_usemath(m5);
- soft_task_def_ctrl_jet(m5);
- p5 = task_create("jsli", jetslide_task, &m5, NULL);
- if (p5 == -1) {
- grx_close();
- perror("FFTPlay: Could not create task <jetslide>\n");
- ll_abort(54);
- sys_end();
- }
-}
-
Index: start/thdemo/camera.c
===================================================================
--- start/thdemo/camera.c (revision 1087)
+++ start/thdemo/camera.c (nonexistent)
@@ -1,516 +0,0 @@
-// framegrabber stuffs
-
-/* File name ......... : ELABOR.C
- * Project............ :
- * Object ............ :
- * Author ............ : Facchinetti Tullio
- * Language .......... : C
- * Compiler .......... : GNU C
- * Operative system .. : MS-DOS/HARTIK
- * Creation data ..... : 04/03/2000
- * Last modify ....... : 19/11/99
- */
-
-
-
-
-#include <kernel/func.h>
-#include <modules/cabs.h>
-#include <stdio.h>
-#include <drivers/pxc.h>
-#include "demo.h"
-
-PID camera_PID;
-PID tracking_PID;
-
-static CAB frameCAB; // CAB di deposito delle immagini
-static CAB trackingCAB; // CAB di deposito delle info di tracking
-
-
-int img_border = 10;
-int window_width = 40;
-int window_height = 40;
-TPixel pix_threshold = 128;
-
-// a 256 grayscale palette
-WORD gray_palette[256];
-
-// the image to be putted on the screen
-WORD converted_image[IMG_COL*IMG_ROW];
-
-TDataObj sequence[N_FRAMES];
-
-
-
-void border_up_function(KEY_EVT key)
-{
- img_border++;
-}
-
-void border_down_function(KEY_EVT key)
-{
- img_border--;
-}
-
-void threshold_up_function(KEY_EVT key)
-{
- char st[50];
- pix_threshold++;
- sprintf(st, "threshold %4d", pix_threshold);
- mutex_lock(&mutex);
- grx_text(st, 400, 100, 255, 0);
- mutex_unlock(&mutex);
-}
-
-void threshold_down_function(KEY_EVT key)
-{
- char st[50];
- pix_threshold--;
- sprintf(st, "threshold %4d", pix_threshold);
- mutex_lock(&mutex);
- grx_text(st, 400, 100, 255, 0);
- mutex_unlock(&mutex);
-}
-
-float distance(unsigned int x1, unsigned int y1,
- unsigned int x2, unsigned int y2)
-{
- return(sqrt(((y2 - y1) * (y2 - y1)) + ((x2 - x1) * (x2 - x1))));
-}
-
-char scan_window_frame(TDataObj *data, TPixel *in_frame,
- unsigned int xc, unsigned int yc, int border)
-{
- unsigned long int offset;
- unsigned int i, j;
- TPixel pix;
- double sum_x = 0.0, sum_y = 0.0;
- unsigned int n_pix = 0;
- int x1, y1, x2, y2; // Must be int!!!
- char found;
-
- data->x1 = N_COL;
- data->y1 = N_ROW;
- data->x2 = data->y2 = 0;
- data->xb = data->yb = -1;
- data->time_stamp = -1;
-
- found = 0;
-
- x1 = MAX_NUM((xc - window_width / 2), (border));
- y1 = MAX_NUM((yc - window_height / 2), (border));
- x2 = MIN_NUM((xc + window_width / 2), (N_COL - border));
- y2 = MIN_NUM((yc + window_height / 2), (N_ROW - border));
-
- for (i = y1; i < y2; i++) {
- for (j = x1; j < x2; j++) {
- offset = i * N_COL + j;
- pix = *(in_frame + offset);
-
-#ifdef __BLACK_ON_WHITE
- // Pixel found (object is black, background is white)
- if (pix < pix_threshold) {
-#else
- // Pixel found (object is white, background is black)
- if (pix > pix_threshold) {
-#endif
- data->time_stamp = sys_gettime(NULL);
- found = 1;
- n_pix++;
- sum_x += j;
- sum_y += i;
-// *(in_frame + offset) = 0;
- if (i < data->y1)
- data->y1 = i;
- if (i > data->y2)
- data->y2 = i;
- if (j < data->x1)
- data->x1 = j;
- if (j > data->x2)
- data->x2 = j;
-
- } else {
-// *(in_frame + offset) = 255;
- }
- }
- }
- data->xb = sum_x / n_pix;
- data->yb = sum_y / n_pix;
- return(found);
-}
-
-char scan_all_frame(TDataObj *data, TPixel *in_frame)
-{
- unsigned long int offset;
- unsigned int i, j;
- TPixel pix;
- double sum_x = 0.0, sum_y = 0.0;
- unsigned int n_pix = 0;
- char found;
-
- data->x1 = N_COL;
- data->y1 = N_ROW;
- data->x2 = data->y2 = 0;
- data->xb = data->yb = -1;
- data->time_stamp = -1;
-
- found = 0;
-
- // In a single image scanning it performs thresholding and computation
- for (i = img_border; i < N_ROW - img_border; i++) {
- for (j = img_border; j < N_COL - img_border; j++) {
- offset = i * N_COL + j;
- pix = *(in_frame + offset);
-
-#ifdef __BLACK_ON_WHITE
- // Pixel found (object is black, background is white)
- if (pix < pix_threshold) {
-#else
- // Pixel found (object is white, background is black)
- if (pix > pix_threshold) {
-#endif
- data->time_stamp = sys_gettime(NULL);
- found = 1;
- n_pix++;
- sum_x += j;
- sum_y += i;
-// *(in_frame + offset) = 0;
- if (i < data->y1)
- data->y1 = i;
- if (i > data->y2)
- data->y2 = i;
- if (j < data->x1)
- data->x1 = j;
- if (j > data->x2)
- data->x2 = j;
-
- } else {
-// *(in_frame + offset) = 255;
- }
- }
- }
- data->xb = sum_x / n_pix;
- data->yb = sum_y / n_pix;
- return(found);
-}
-
-void tracking(int top_frame, int *track_x, int *track_y, int *int_vx, int *int_vy, int time_to)
-{
- float vx, vy;
-
- vx = (float)(sequence[top_frame - 1].xb - sequence[top_frame - 2].xb) /
- (float)(sequence[top_frame - 1].time_stamp - sequence[top_frame - 2].time_stamp);
- vx *= 1000;
-
- vy = (float)(sequence[top_frame - 1].yb - sequence[top_frame - 2].yb) /
- (float)(sequence[top_frame - 1].time_stamp - sequence[top_frame - 2].time_stamp);
- vy *= 1000;
-
- *track_x = sequence[top_frame - 1].xb + vx * time_to;
- *track_y = sequence[top_frame - 1].yb + vy * time_to;
-
- *int_vx = vx * 1000;
- *int_vy = vy * 1000;
-}
-
-TASK tracking_task(void *arg)
-{
-// static unsigned int n_frame = 0;
- char found;
- TPixel *grabber_frame;
- int top_frame = 0;
- TDataObj current;
- TTracking *track;
-
- frameCAB = PXC_GetCab();
-
- grabber_frame = cab_getmes(frameCAB);
-
- // Executes first time
- found = scan_all_frame(&current, grabber_frame);
- if (found) {
- memcpy(&sequence[top_frame], &current, sizeof(TDataObj));
- top_frame++;
- }
-
- cab_unget(frameCAB, grabber_frame);
-
- task_endcycle();
-
- while (1) {
- // Acquisizione immagine corrente
- grabber_frame = (TPixel *)cab_getmes(frameCAB);
- track = (TTracking *)cab_reserve(trackingCAB);
-
- // Estrazione della nuova trasformata sul frame corrente
- if (found) {
- found = scan_window_frame(&current, grabber_frame, current.xb, current.yb, img_border);
- } else {
- found = scan_all_frame(&current, grabber_frame);
- }
-
- track->found = found;
-
- if (found) {
- if (top_frame < N_FRAMES) {
- memcpy(&sequence[top_frame], &current, sizeof(TDataObj));
- top_frame++;
- } else {
- top_frame = 0;
- memcpy(&sequence[top_frame], &current, sizeof(TDataObj));
- }
-
- track->top_frame = top_frame;
- memcpy(&track->current, &current, sizeof(TDataObj));
-
- if (top_frame > 1) {
- tracking(top_frame, &track->predx, &track->predy,
- &track->vx, &track->vy, 100);
- }
- } else {
- track->top_frame = top_frame = 0;
- }
-
- // Release CABs
- cab_putmes(trackingCAB, (char *)track);
- cab_unget(frameCAB, grabber_frame);
-
- task_endcycle();
- }
-}
-
-
-
-
-
-
-
-/*
- *
- *
- *
- * Camera task
- *
- *
- *
- *
- */
-
-
-TASK camera_task(void *arg)
-{
- register int i,j,col,row;
- static unsigned int n_frame = 0;
- TPixel *grabber_frame;
- TTracking *track;
- char st[50];
-
- // Inizializzazione del task
- frameCAB = PXC_GetCab();
-
- while (1) {
- n_frame++;
- sprintf(st, "frame n. %5d", n_frame);
-
- grx_text(st, 400, 224, white, 0);
-
- // Acquisizione immagine corrente
- grabber_frame = cab_getmes(frameCAB);
-
- for (i=1; i<IMG_ROW-1; i++)
- for (j=0; j<IMG_COL; j++) {
- col = (j*(N_COL-1))/(IMG_COL-1);
- row = (i*(N_ROW-1))/(IMG_ROW-1);
- converted_image[i*IMG_COL+j] = gray_palette[*(grabber_frame+row*N_COL+col)];
- }
-
- // Release CAB
- cab_unget(frameCAB, grabber_frame);
-
- for (j=0; j<IMG_COL; j++) {
- converted_image[j] = gray_palette[0];
- converted_image[(IMG_ROW-1)*IMG_COL+j] = gray_palette[0];
- }
-
- mutex_lock(&mutex);
- grx_putimage(IMG_X, IMG_Y, IMG_X+IMG_COL-1, IMG_Y+IMG_ROW-1,
- (BYTE *)converted_image);
- mutex_unlock(&mutex);
-
- track = (TTracking *)cab_getmes(trackingCAB);
-
- if (track->found) {
- mutex_lock(&mutex);
-// sprintf(st, "found: %d", track->found);
-// grx_text(st, 400, 280, 255, 0);
-
- if (track->top_frame > 1) {
- int px, py;
-
-// sprintf(st, "top_frame %5d", track->top_frame);
-// grx_text(st, 400, 270, 255, 0);
-
- if (track->predx < img_border)
- px = img_border;
- else if (track->predx > N_COL-img_border)
- px = N_COL-img_border;
- else
- px = track->predx;
-
- if (track->predy < img_border)
- py = img_border;
- else if (track->predy > N_ROW-img_border)
- py = N_ROW-img_border;
- else
- py = track->predy;
-
- grx_disc(IMG_X+(px*2)/3, IMG_Y+(py*2)/3, 3, 127);
-
-// grx_disc(IMG_X+(current.xb*2)/3, IMG_Y+(current.yb*2)/3, 3, 127);
- grx_rect(IMG_X+(track->current.x1*2)/3, IMG_Y+(track->current.y1*2)/3,
- IMG_X+(track->current.x2*2)/3, IMG_Y+(track->current.y2*2)/3, 127);
-
- sprintf(st, "speed = (%5d, %5d) pix/s", track->vx, track->vy);
- grx_text(st, 400, 232, white, 0);
- }
- mutex_unlock(&mutex);
- }
- cab_unget(trackingCAB, (char *)track);
-
- task_endcycle();
- }
-}
-
-
-
-
-
-/*
- *
- *
- *
- * Framegrabber Initialization
- *
- *
- *
- *
- */
-
-void start_listener(TIME p);
-
-void framegrabber_close(void *arg)
-{
- PXC_Close();
-}
-
-void scenario_framegrabber()
-{
- grx_text("Camera" , 384, WAVE_Y-WAVE_HEIGHT-10, rgb16(0,0,255), black);
- grx_line(384,WAVE_Y-WAVE_HEIGHT-1,639,WAVE_Y-WAVE_HEIGHT-1,red);
-}
-
-void init_framegrabber(void)
-{
- register int i;
- KEY_EVT my_key;
- TIME period;
-
- my_key.ascii = 'a';
- my_key.scan = KEY_A;
- keyb_hook(my_key, (void (*)(KEY_EVT *))threshold_up_function);
-
- my_key.ascii = 'z';
- my_key.scan = KEY_Z;
- keyb_hook(my_key, (void (*)(KEY_EVT *))threshold_down_function);
-
- my_key.ascii = 's';
- my_key.scan = KEY_S;
- keyb_hook(my_key, (void (*)(KEY_EVT *))border_up_function);
-
- my_key.ascii = 'x';
- my_key.scan = KEY_X;
- keyb_hook(my_key, (void (*)(KEY_EVT *))border_down_function);
-
- // Aggiusta la palette
- for (i = 0; i < 256; i++)
- gray_palette[i] = rgb16(i,i,i);
- //for (i = 0; i < 256; i++)
- // grx_setcolor(i, i/4, i/4, i/4);
-
- mutex_lock(&mutex);
-// grx_text("Grabber enabled: no test!", 10, 10, 255, 0);
-
- // Some messages on screen
-// grx_text("A-Z change threshold", 400, 240, 255, 0);
-// grx_text("S-X change window borders", 400, 250, 255, 0);
- mutex_unlock(&mutex);
-
- period = PXC_Initiate(4);
-
- if (!period) {
- grx_close();
- cprintf("Problemi nell'inizializzazione del framegrabber\n");
- halt();
- sys_end();
- } else {
- TTracking *trdata;
- // tracking CAB init
- trackingCAB = cab_create("trackingCAB", sizeof(TTracking), 3);
- trdata = (TTracking *)cab_reserve(trackingCAB);
- trdata->found = 0;
- cab_putmes(trackingCAB, (char *)trdata);
-
- start_listener(period);
- }
-
- sys_atrunlevel(framegrabber_close, NULL, RUNLEVEL_BEFORE_EXIT);
-}
-
-
-void start_listener(TIME period)
-{
- SOFT_TASK_MODEL m1, m2;
-
- soft_task_default_model(m1);
- soft_task_def_level(m1,1);
- soft_task_def_met(m1,WCET_TRACKING);
- soft_task_def_usemath(m1);
-// soft_task_def_aperiodic(m1);
- soft_task_def_period(m1,(PERIOD_TRACKING));
- soft_task_def_group(m1,1);
- soft_task_def_ctrl_jet(m1);
- soft_task_def_skip_arrivals(m1);
- tracking_PID = task_create("track", tracking_task, &m1, NULL);
- if (tracking_PID == -1) {
- grx_close();
- perror("FFTPlay: Could not create task <tra>\n");
- ll_abort(54);
- perror("FFTPlay: Could not create task <tracking>\n");
- sys_end();
- }
-
- soft_task_default_model(m2);
- soft_task_def_level(m2,1);
- soft_task_def_met(m2,WCET_CAMERA);
- soft_task_def_usemath(m2);
-// soft_task_def_aperiodic(m2);
- soft_task_def_period(m2,PERIOD_CAMERA);
- soft_task_def_group(m2,1);
- soft_task_def_ctrl_jet(m2);
-// soft_task_def_skip_arrivals(m2);
- camera_PID = task_create("cam", camera_task, &m2, NULL);
- if (camera_PID == -1) {
- grx_close();
- perror("FFTPlay: Could not create task <came>\n");
- ll_abort(54);
- perror("FFTPlay: Could not create task <camera>\n");
- sys_end();
- }
-
-}
-
-void start_framegrabber()
-{
-// PXC_Push_Listener(tracking_PID,2);
- PXC_Start();
-}
Index: start/thdemo/demo.h
===================================================================
--- start/thdemo/demo.h (revision 1087)
+++ start/thdemo/demo.h (nonexistent)
@@ -1,280 +0,0 @@
-
-
-#include <ll/ll.h>
-#include <kernel/types.h>
-#include <kernel/descr.h>
-#include <math.h>
-#include <drivers/glib.h>
-#include <drivers/keyb.h>
-
-
-#define FFT_ON
-#define FRAMEGRABBER_ON
-#define JET_ON
-#define BALL_ON
-
-/*
- *
- * WCET, Periods and Models
- *
- */
-
-
-/* define if you want NRT or SOFT... */
-#define TASK_TYPE SOFT
-//#define TASK_TYPE NRT
-
-// on Celeron 366
-#define WCET_WAVE 450
-#define WCET_FFT 722
-#define WCET_EQU 1000
-#define WCET_EQU2D 318
-
-#define PERIOD_WAVE 40000
-#define PERIOD_FFT 3000
-#define PERIOD_EQU 40000
-#define PERIOD_EQU2D 3000
-
-
-
-
-#define WCET_TRACKING 4000
-#define WCET_CAMERA 7000
-
-#define PERIOD_TRACKING 40000
-#define PERIOD_CAMERA 40000
-
-
-#define WCET_JETCTRL 2600
-#define WCET_JETDUMMY 1000
-#define WCET_JETSLIDE 1000
-
-#define PERIOD_JETCTRL 100000
-#define PERIOD_JETDUMMY 100000
-#define PERIOD_JETSLIDE 100000
-
-
-#define WCET_BALL 60
-
-#define PERIOD_BALL 10000
-
-
-/*
- *
- * Soundcard related defines
- *
- */
-
-
-/* Samples are 16-bit signed integers */
-typedef short SAMPLE;
-#define MAX_SAMPLE 32768
-
-
-
-/*
- *
- * FFT defines
- *
- */
-
-/* Numbers of samples of the sample window */
-#define WINDATA_NSAMPLES 512
-
-/* task WAVE */
-/* the point (wave_x,wave_y) is on the center left of the area... */
-#define WAVE_NSAMPLES 384
-#define WAVE_X 0
-#define WAVE_Y 64
-#define WAVE_HEIGHT 32
-
-/* task FFT */
-#define FFT_NSAMPLES 512
-#define PWR_NSAMPLES (FFT_NSAMPLES/2+1)
-
-/* task EQU */
-/* the point (equ_x, equ_y) is the top right corner */
-#define EQU_NSAMPLES PWR_NSAMPLES
-#define EQU_X 64
-#define EQU_Y 128
-#define EQU_HEIGHT 64
-#define EQU_SHADE
-
-/* task EQU2D */
-/* the point (equ2d_x, equ2d_y) is the top left corner */
-#define EQU2D_NSAMPLES EQU_NSAMPLES
-#define EQU2D_X 128
-#define EQU2D_Y EQU_Y
-#define EQU2D_WIDTH 255
-#define EQU2D_CLIP 255
-
-/* scenario */
-#define SCENARIO_NLABEL 16
-
-/* Scale factors */
-#define FFT_SCALE (16384.0)
-#define EQU_SCALE (32.0)
-#define EQU2D_SCALE (8.0)
-//#define EQU_SCALE (64.0)
-//#define EQU2D_SCALE (16.0)
-
-
-
-/* Informations about the sampling rate and buffers */
-extern WORD rawdata_nsamples;
-extern WORD rawdata_buffer_size;
-extern WORD rawdata_freq;
-
-
-
-/*
- *
- * Global Stuffs
- *
- */
-
-/* graphic mutex... */
-extern mutex_t mutex;
-
-/* useful colors... */
-extern int white;
-extern int black;
-extern int red;
-extern int gray;
-
-/* define if shorts critical sections wanted */
-#define SHORT_CRITICAL_SECTIONS(x) \
- if (!((x)%64)) \
- { \
- mutex_lock(&mutex); \
- mutex_unlock(&mutex); \
- }
-
-void init_fftplay(int freq);
-void init_framegrabber();
-void init_jetcontrol();
-void init_ball(void);
-void start_framegrabber();
-
-
-void scenario_jetcontrol(void);
-void scenario_fftplay(int f);
-void scenario_framegrabber();
-void scenario_ball();
-
-void compute_params(int *freq,WORD *nsamp);
-
-char * itoa(int n, char *s);
-
-/*
- *
- * Framegrabber stuffs
- *
- */
-
-// if defined... object black on a white background
-#ifndef __BLACK_ON_WHITE
-#define __BLACK_ON_WHITE
-#endif
-
-#define ABS_NUM(a) ((a >= 0) ? a : -a)
-#define MIN_NUM(a, b) ((a < b) ? a : b)
-#define MAX_NUM(a, b) ((a > b) ? a : b)
-
-
-// Cols and rows of the framegrabber image
-#define N_COL 384
-#define N_ROW 288
-#define N_BPS 8 // Bits per pixel
-#define N_GRIGI 256
-
-#define N_FRAMES 100
-
-/* pixel of the video image */
-#define IMG_COL 256
-#define IMG_ROW 192
-
-/* position of the video image */
-#define IMG_X 384
-#define IMG_Y 32
-
-// I singoli pixel sono caratteri a 8 bit
-typedef unsigned char TPixel;
-
-typedef struct {
- int x1, y1;
- int x2, y2;
- int xb, yb;
- TIME time_stamp;
-} TDataObj;
-
-typedef struct {
- int found;
- int top_frame;
- int vx,vy;
- int predx;
- int predy;
- TDataObj current;
-} TTracking;
-
-
-float distance(unsigned int x1, unsigned int y1,
- unsigned int x2, unsigned int y2);
-
-char scan_all_frame(TDataObj *data, TPixel *in_frame);
-
-char scan_window_frame(TDataObj *data, TPixel *in_frame,
- unsigned int xc, unsigned int yc, int border);
-
-void threshold_up_function(KEY_EVT key);
-void threshold_down_function(KEY_EVT key);
-
-void border_up_function(KEY_EVT key);
-void border_down_function(KEY_EVT key);
-
-void tracking(int top_frame, int *track_x, int *track_y, int *int_vx, int *int_vy, int time_to);
-
-TASK elab_image_TASK(void);
-
-
-
-/*
- *
- * JETCONTROL stuffs
- *
- */
-
-#define JET_NTASK 18
-#define JET_Y_NAME 320
-
-#define DUMMY_PID 1
-
-#define JET_DUMMY_WIDTH 210
-#define JET_DUMMY_HEIGHT 40
-
-/* the point (x, y) is the top left corner */
-#define JET_DUMMY_X 428
-#define JET_DUMMY_Y 264
-
-#define JET_SLIDE_WIDTH 50
-#define JET_SLIDE_X 576
-
-
-
-
-/*
- *
- * BALL stuffs
- *
- */
-
-// x and y corners are specified whithout consider a border of 3 pixels
-#define BALL_Y 475 /* position of the floor */
-#define BALL_HEIGHT 70 /* initial height of the ball */
-#define BALL_XMIN 3 /* min position X of the ball */
-#define BALL_XMAX 380 /* max position X of the ball */
-#define BALL_VELX 5. /* horizontal ball velocity */
-#define BALL_VYMIN 11. /* velocit… minima per suono */
-#define BALL_MAX_P 50 /* max number of balls */
-
-#define BALL_GROUP 2 /* task group of the balls */
Index: start/thdemo/readme.txt
===================================================================
--- start/thdemo/readme.txt (revision 1087)
+++ start/thdemo/readme.txt (nonexistent)
@@ -1,17 +0,0 @@
-PJ's Thesis demo
-----------------
-
-This is my Thesis Demo. The demo works correctly on my PC :-)
-(a celeron 366 Mhz), Probably It will have some problems with other slower PCs.
-
-The demo simply reads data from the soundblaster, then print the sound wave, compute a power spectrun and display it on the screen.
-
-Then there is another few tasks that reads data from a framegrabber and track a black image on a white board.
-
-Moreover, there are some noise balls to test the system in overload conditions, and there are finally a few tasks that displays the system load.
-
-If you have any problems using this demo, please contact pj@sssup.it
-
-bye
-
-Paolo
Index: start/thdemo/camera2.c
===================================================================
--- start/thdemo/camera2.c (revision 1087)
+++ start/thdemo/camera2.c (nonexistent)
@@ -1,424 +0,0 @@
-// framegrabber stuffs
-
-/* File name ......... : ELABOR.C
- * Project............ :
- * Object ............ :
- * Author ............ : Facchinetti Tullio
- * Language .......... : C
- * Compiler .......... : GNU C
- * Operative system .. : MS-DOS/HARTIK
- * Creation data ..... : 04/03/2000
- * Last modify ....... : 19/11/99
- */
-
-
-
-
-#include <kernel/func.h>
-#include <modules/cabs.h>
-#include <stdio.h>
-#include <drivers/pxc.h>
-#include "demo.h"
-
-PID image_elab_PID;
-TIME periodo;
-CAB PXC_CAB;
-
-static CAB frameCAB; // CAB di deposito delle immagini
-static TDataObj current, older;
-
-// extern in INIT.C
-int img_border = 10;
-int window_width = 40;
-int window_height = 40;
-
-// a 256 grayscale palette
-WORD gray_palette[256];
-
-// the image to be putted on the screen
-WORD converted_image[IMG_COL*IMG_ROW];
-
-
-#ifdef __BLACK_ON_WHITE
-TPixel pix_threshold = 64;
-#else
-TPixel pix_threshold = 243;
-#endif
-
-
-// Global for testing!!!
-static char st[50];
-TIME before;
-
-TDataObj sequence[N_FRAMES];
-int top_frame = 0;
-
-double dist, speed;
-
-static TPixel *grabber_frame;
-
-void border_up_function(KEY_EVT key)
-{
- img_border++;
-}
-
-void border_down_function(KEY_EVT key)
-{
- img_border--;
-}
-
-void threshold_up_function(KEY_EVT key)
-{
- pix_threshold++;
- sprintf(st, "threshold %4d", pix_threshold);
- mutex_lock(&mutex);
- //grx_text(st, 400, 300, 255, 0);
- mutex_unlock(&mutex);
-}
-
-void threshold_down_function(KEY_EVT key)
-{
- pix_threshold--;
- sprintf(st, "threshold %4d", pix_threshold);
- mutex_lock(&mutex);
- //grx_text(st, 400, 300, 255, 0);
- mutex_unlock(&mutex);
-}
-
-float distance(unsigned int x1, unsigned int y1,
- unsigned int x2, unsigned int y2)
-{
- return(sqrt(((y2 - y1) * (y2 - y1)) + ((x2 - x1) * (x2 - x1))));
-}
-
-char scan_window_frame(TDataObj *data, TPixel *in_frame,
- unsigned int xc, unsigned int yc, int border)
-{
- unsigned long int offset;
- unsigned int i, j;
- TPixel pix;
- double sum_x = 0.0, sum_y = 0.0;
- unsigned int n_pix = 0;
- int x1, y1, x2, y2; // Must be int!!!
- char found;
-
- data->x1 = N_COL;
- data->y1 = N_ROW;
- data->x2 = data->y2 = 0;
- data->xb = data->yb = -1;
- data->time_stamp = -1;
-
- found = 0;
-
- x1 = MAX_NUM((xc - window_width / 2), (border));
- y1 = MAX_NUM((yc - window_height / 2), (border));
- x2 = MIN_NUM((xc + window_width / 2), (N_COL - border));
- y2 = MIN_NUM((yc + window_height / 2), (N_ROW - border));
-
- for (i = y1; i < y2; i++) {
- for (j = x1; j < x2; j++) {
- offset = i * N_COL + j;
- pix = *(in_frame + offset);
-
-#ifdef __BLACK_ON_WHITE
- // Pixel found (object is black, background is white)
- if (pix < pix_threshold) {
-#else
- // Pixel found (object is white, background is black)
- if (pix > pix_threshold) {
-#endif
- data->time_stamp = sys_gettime(NULL);
- found = 1;
- n_pix++;
- sum_x += j;
- sum_y += i;
- *(in_frame + offset) = 0;
- if (i < data->y1)
- data->y1 = i;
- if (i > data->y2)
- data->y2 = i;
- if (j < data->x1)
- data->x1 = j;
- if (j > data->x2)
- data->x2 = j;
-
- } else {
- *(in_frame + offset) = 255;
- }
- }
- }
- data->xb = sum_x / n_pix;
- data->yb = sum_y / n_pix;
- return(found);
-}
-
-char scan_all_frame(TDataObj *data, TPixel *in_frame)
-{
- unsigned long int offset;
- unsigned int i, j;
- TPixel pix;
- double sum_x = 0.0, sum_y = 0.0;
- unsigned int n_pix = 0;
- char found;
-
- data->x1 = N_COL;
- data->y1 = N_ROW;
- data->x2 = data->y2 = 0;
- data->xb = data->yb = -1;
- data->time_stamp = -1;
-
- found = 0;
-
- // In a single image scanning it performs thresholding and computation
- for (i = img_border; i < N_ROW - img_border; i++) {
- for (j = img_border; j < N_COL - img_border; j++) {
- offset = i * N_COL + j;
- pix = *(in_frame + offset);
-
-#ifdef __BLACK_ON_WHITE
- // Pixel found (object is black, background is white)
- if (pix < pix_threshold) {
-#else
- // Pixel found (object is white, background is black)
- if (pix > pix_threshold) {
-#endif
- data->time_stamp = sys_gettime(NULL);
- found = 1;
- n_pix++;
- sum_x += j;
- sum_y += i;
- *(in_frame + offset) = 0;
- if (i < data->y1)
- data->y1 = i;
- if (i > data->y2)
- data->y2 = i;
- if (j < data->x1)
- data->x1 = j;
- if (j > data->x2)
- data->x2 = j;
-
- } else {
- *(in_frame + offset) = 255;
- }
- }
- }
- data->xb = sum_x / n_pix;
- data->yb = sum_y / n_pix;
- return(found);
-}
-
-void tracking(int *track_x, int *track_y, int time_to)
-{
- float vx, vy;
-
- vx = (float)(sequence[top_frame - 1].xb - sequence[top_frame - 2].xb) /
- (float)(sequence[top_frame - 1].time_stamp - sequence[top_frame - 2].time_stamp);
- vx *= 1000000;
-
- vy = (float)(sequence[top_frame - 1].yb - sequence[top_frame - 2].yb) /
- (float)(sequence[top_frame - 1].time_stamp - sequence[top_frame - 2].time_stamp);
- vy *= 1000000;
-
- (*track_x) = sequence[top_frame - 1].xb + vx * time_to;
- (*track_y) = sequence[top_frame - 1].yb + vy * time_to;
-
- sprintf(st, "speed = (%5d, %5d) pix/s", (int)vx, (int)vy);
- mutex_lock(&mutex);
- //grx_text(st, 400, 410, 255, 0);
- mutex_unlock(&mutex);
-}
-
-void put_frame(TPixel *frame)
-{
- register int i,j,col,row;
-
- for (i=0; i<IMG_ROW; i++)
- for (j=0; j<IMG_COL; j++) {
- col = (j*(N_COL-1))/(IMG_COL-1);
- row = (i*(N_ROW-1))/(IMG_ROW-1);
- converted_image[i*IMG_COL+j] = gray_palette[*(frame+row*N_COL+col)];
- }
-
- mutex_lock(&mutex);
- //grx_putimage(IMG_X, IMG_Y, IMG_X+IMG_COL-1, IMG_Y+IMG_ROW-1,
- // (BYTE *)converted_image);
- mutex_unlock(&mutex);
-}
-
-
-TASK elab_image_TASK(void)
-{
-// register int i, j;
- static unsigned int n_frame = 0;
- char found;
- int pred_x, pred_y;
-
- // Inizializzazione del task
- frameCAB = PXC_GetCab();
-
- grabber_frame = cab_getmes(frameCAB);
-
- // Executes first time
- found = scan_all_frame(&current, grabber_frame);
-// found =0;
- if (found) {
- memcpy(&sequence[top_frame], &current, sizeof(TDataObj));
- top_frame++;
- }
-
- cab_unget(frameCAB, grabber_frame);
-
- task_endcycle();
-
- while (1) {
-
-// before = sys_gettime(NULL);
-
- n_frame++;
- sprintf(st, "frame n. %5d", n_frame);
-
- mutex_lock(&mutex);
- //grx_text(st, 400, 290, 255, 0);
-
- sprintf(st, "top_frame %5d", top_frame);
- //grx_text(st, 400, 270, 255, 0);
-
- sprintf(st, "found: %d!", found);
- //grx_text(st, 400, 280, 255, 0);
- mutex_unlock(&mutex);
-
- // Acquisizione immagine corrente
- grabber_frame = cab_getmes(frameCAB);
-
- // copy current in older
- memcpy(&older, &current, sizeof(TDataObj));
-
- // Estrazione della nuova trasformata sul frame corrente
- if (found) {
- found = scan_window_frame(&current, grabber_frame, current.xb, current.yb, img_border);
- } else {
- found = scan_all_frame(&current, grabber_frame);
- }
-
-// //grx_putimage(0, 0, N_COL - 1, N_ROW - 1, grabber_frame);
- put_frame(grabber_frame);
-
- if (found) {
- if (top_frame < N_FRAMES) {
- memcpy(&sequence[top_frame], &current, sizeof(TDataObj));
- top_frame++;
- } else {
- top_frame = 0;
- memcpy(&sequence[top_frame], &current, sizeof(TDataObj));
- }
-
- if (top_frame > 1) {
- tracking(&pred_x, &pred_y, 100);
-
- mutex_lock(&mutex);
-// //grx_disc(IMG_X+(pred_x*2)/3, IMG_Y+(pred_y*2)/3, 3, 127);
-
- //grx_disc(IMG_X+(current.xb*2)/3, IMG_Y+(current.yb*2)/3, 3, 127);
- //grx_rect(IMG_X+(current.x1*2)/3, IMG_Y+(current.y1*2)/3,
- // IMG_X+(current.x2*2)/3, IMG_Y+(current.y2*2)/3, 127);
- mutex_unlock(&mutex);
-
- }
- } else {
- top_frame = 0;
- }
-
- // Release CAB
- cab_unget(frameCAB, grabber_frame);
-
-// sprintf(st, "durata = %3d ms", (int)(sys_gettime(NULL) - before)/1000);
-// mutex_lock(&mutex);
-// //grx_text(st, 400, 400, 255, 0);
-// mutex_unlock(&mutex);
-
- task_endcycle();
- }
-}
-
-
-void start_listener(void);
-
-void framegrabber_close(void *arg)
-{
- PXC_Close();
-}
-
-void init_framegrabber(void)
-{
- register int i;
- KEY_EVT my_key;
-
- my_key.ascii = 'a';
- my_key.scan = KEY_A;
- keyb_hook(my_key, (void (*)(KEY_EVT *))threshold_up_function);
-
- my_key.ascii = 'z';
- my_key.scan = KEY_Z;
- keyb_hook(my_key, (void (*)(KEY_EVT *))threshold_down_function);
-
- my_key.ascii = 's';
- my_key.scan = KEY_S;
- keyb_hook(my_key, (void (*)(KEY_EVT *))border_up_function);
-
- my_key.ascii = 'x';
- my_key.scan = KEY_X;
- keyb_hook(my_key, (void (*)(KEY_EVT *))border_down_function);
-
- // Aggiusta la palette
- for (i = 0; i < 256; i++)
- gray_palette[i] = rgb16(i,i,i);
- //for (i = 0; i < 256; i++)
- // grx_setcolor(i, i/4, i/4, i/4);
-
- mutex_lock(&mutex);
-// grx_text("Grabber enabled: no test!", 10, 10, 255, 0);
-
- // Some messages on screen
- //grx_text("A-Z change threshold", 400, 240, 255, 0);
- //grx_text("S-X change window borders", 400, 250, 255, 0);
- mutex_unlock(&mutex);
-
- periodo = PXC_Initiate(3);
- PXC_CAB = PXC_GetCab();
-
- if (!periodo) {
- //grx_close();
- cprintf("Problemi nell'inizializzazione del driver\n");
- sys_end();
- } else {
- start_listener();
- }
-
- sys_atrunlevel(framegrabber_close, NULL, RUNLEVEL_BEFORE_EXIT);
-}
-
-
-void start_listener(void)
-{
- SOFT_TASK_MODEL m_soft;
-
- soft_task_default_model(m_soft);
- soft_task_def_met(m_soft,IMAGING_WCET);
- soft_task_def_usemath(m_soft);
- soft_task_def_aperiodic(m_soft);
- soft_task_def_period(m_soft,(periodo*3));
- soft_task_def_group(m_soft,1);
- soft_task_def_ctrl_jet(m_soft);
-
- image_elab_PID = task_create("imaging", elab_image_TASK, &m_soft, NULL);
-
-/* task_activate( image_elab_PID);
- PXC_Push_Listener(image_elab_PID,2);
- PXC_Start();*/
-}
-
-void start_framegrabber()
-{
- PXC_Push_Listener(image_elab_PID,2);
- PXC_Start();
-}
Index: start/thdemo/ball.c
===================================================================
--- start/thdemo/ball.c (revision 1087)
+++ start/thdemo/ball.c (nonexistent)
@@ -1,164 +0,0 @@
-/*--------------------------------------------------------------*/
-/* SIMULATION OF JUMPING BALLS */
-/*--------------------------------------------------------------*/
-
-/* CVS $Id: ball.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $ */
-
-
-#include "demo.h"
-#include <kernel/func.h>
-#include <stdlib.h>
-
-#define R 2 /* dimension of a ball */
-#define G 9.8 /* acceleration of gravity */
-
-static int ballexit = 0;
-static int npc = 0; /* number of tasks created */
-
-/*--------------------------------------------------------------*/
-/* Periodic task for ball simulation */
-/*--------------------------------------------------------------*/
-
-TASK palla(int i)
-{
-int x, y; /* coordinate grafiche pallina */
-int ox, oy; /* vecchia posizione pallina */
-int x0, y0; /* posizione iniziale X pallina */
-float vx, vy; /* velocit… della pallina */
-float vy0; /* velocita' pallina al primo rimbalzo */
-float ty, tx; /* variabile temporale */
-float dt; /* incremento temporale */
-
- y = oy = y0 = BALL_HEIGHT;
- x = ox = x0 = BALL_XMIN;
-
- vy0= sqrt(2. * G * (float)BALL_HEIGHT);
- vy = 0;
- vx = BALL_VELX + rand()%9;
- tx = 0;
- ty = 0;
- dt = ((float)PERIOD_BALL)/100000;
-
- while (1) {
- y = y0 + vy*ty - .5*G*ty*ty;
- x = x0 + vx * tx;
-
- if (y < 0) {
- y = 0;
-
- if (vy == 0.0)
- vy = vy0;
- else if (vy < BALL_VYMIN)
- vy = vy0 * (1.0 - (rand()%50)/100.0);
- else
- vy = 0.9 * vy;
-
- ty = 0.0;
- y0 = 0;
- }
-
- if (x > BALL_XMAX) {
- tx = 0.0;
- x0 = BALL_XMAX;
- vx = -vx;
- x = x0 + vx * tx;
- }
-
- if (x < BALL_XMIN) {
- tx = 0.0;
- x0 = BALL_XMIN;
- vx = -vx;
- x = x0 + vx * tx;
- }
-
- mutex_lock(&mutex);
- grx_disc(ox, oy, R, 0);
- ox = x;
- oy = BALL_Y - y;
- mutex_unlock(&mutex);
-
- if (ballexit) {
- npc--;
- return 0;
- }
-
- mutex_lock(&mutex);
- grx_disc(ox, oy, R, i);
- mutex_unlock(&mutex);
-
- {
- int xxx;
- for (xxx=0; xxx<10000; xxx++);
- }
- ty += dt;
- tx += dt;
- task_endcycle();
- }
-}
-
-void killball(KEY_EVT *k)
-{
- ballexit = 1;
-}
-
-void ballfun(KEY_EVT *k)
-{
- SOFT_TASK_MODEL mp;
- int r,g,b;
- PID pid;
-
- if (npc == BALL_MAX_P) return;
-
- ballexit = 0;
-
- r = 64 + rand()%192;
- g = 64 + rand()%192;
- b = 64 + rand()%192;
-
- soft_task_default_model(mp);
- soft_task_def_level(mp,1);
- soft_task_def_ctrl_jet(mp);
- soft_task_def_arg(mp, (void *)rgb16(r,g,b));
- soft_task_def_group(mp, BALL_GROUP);
- soft_task_def_met(mp, WCET_BALL);
- soft_task_def_period(mp,PERIOD_BALL);
- soft_task_def_usemath(mp);
- pid = task_create("palla", palla, &mp, NULL);
- if (pid != NIL) {
- task_activate(pid);
- npc++;
- }
-}
-
-
-/*--------------------------------------------------------------*/
-/* MAIN process */
-/*--------------------------------------------------------------*/
-
-void scenario_ball()
-{
- grx_text("Noise", 0, BALL_Y-BALL_HEIGHT-15, rgb16(0,0,255), black);
- grx_line(0,BALL_Y-BALL_HEIGHT-6,383,BALL_Y-BALL_HEIGHT-6,red);
-}
-
-void init_ball(void)
-{
- KEY_EVT k;
-
- mutex_lock(&mutex);
- grx_rect(BALL_XMIN-R-1, BALL_Y-BALL_HEIGHT-R-1,
- BALL_XMAX+R+1, BALL_Y+R+1, rgb16(0,200,0));
- mutex_unlock(&mutex);
-
- k.flag = 0;
- k.scan = KEY_SPC;
- k.ascii = ' ';
- keyb_hook(k,ballfun);
-
- k.flag = 0;
- k.scan = KEY_BKS;
- k.ascii = ' ';
- keyb_hook(k,killball);
-}
-
-/*--------------------------------------------------------------*/
Index: start/thdemo/camera4.c
===================================================================
--- start/thdemo/camera4.c (revision 1087)
+++ start/thdemo/camera4.c (nonexistent)
@@ -1,168 +0,0 @@
-// framegrabber stuffs
-
-/* File name ......... : ELABOR.C
- * Project............ :
- * Object ............ :
- * Author ............ : Facchinetti Tullio
- * Language .......... : C
- * Compiler .......... : GNU C
- * Operative system .. : MS-DOS/HARTIK
- * Creation data ..... : 04/03/2000
- * Last modify ....... : 19/11/99
- */
-
-
-
-
-#include <kernel/func.h>
-#include <modules/cabs.h>
-#include <stdio.h>
-#include <drivers/pxc.h>
-#include "demo.h"
-
-PID image_elab_PID;
-TIME periodo;
-CAB PXC_CAB;
-
-static CAB frameCAB; // CAB di deposito delle immagini
-static TDataObj current, older;
-
-// extern in INIT.C
-int img_border = 10;
-int window_width = 40;
-int window_height = 40;
-
-// a 256 grayscale palette
-WORD gray_palette[256];
-
-// the image to be putted on the screen
-WORD converted_image[IMG_COL*IMG_ROW];
-
-
-#ifdef __BLACK_ON_WHITE
-TPixel pix_threshold = 64;
-#else
-TPixel pix_threshold = 243;
-#endif
-
-
-// Global for testing!!!
-static char st[50];
-TIME before;
-
-TDataObj sequence[N_FRAMES];
-int top_frame = 0;
-
-double dist, speed;
-
-static TPixel *grabber_frame;
-
-void put_frame(TPixel *frame)
-{
- register int i,j,col,row;
-
- for (i=1; i<IMG_ROW-1; i++)
- for (j=0; j<IMG_COL; j++) {
- col = (j*(N_COL-1))/(IMG_COL-1);
- row = (i*(N_ROW-1))/(IMG_ROW-1);
- converted_image[i*IMG_COL+j] = gray_palette[*(frame+row*N_COL+col)];
- }
-
- for (j=0; j<IMG_COL; j++) {
- converted_image[j] = gray_palette[0];
- converted_image[(IMG_ROW-1)*IMG_COL+j] = gray_palette[0];
- }
-
- mutex_lock(&mutex);
- grx_putimage(IMG_X, IMG_Y, IMG_X+IMG_COL-1, IMG_Y+IMG_ROW-1,
- (BYTE *)converted_image);
- mutex_unlock(&mutex);
-}
-
-
-TASK elab_image_TASK(void)
-{
-// register int i, j;
- static unsigned int n_frame = 0;
- char found;
- int pred_x, pred_y;
-
- // Inizializzazione del task
- frameCAB = PXC_GetCab();
-
- while (1) {
- n_frame++;
- sprintf(st, "frame n. %5d", n_frame);
-
- mutex_lock(&mutex);
- grx_text(st, 400, 290, 255, 0);
- mutex_unlock(&mutex);
-
- // Acquisizione immagine corrente
- grabber_frame = cab_getmes(frameCAB);
-
- put_frame(grabber_frame);
-
- // Release CAB
- cab_unget(frameCAB, grabber_frame);
-
- task_endcycle();
- }
-}
-
-
-void start_listener(void);
-
-void framegrabber_close(void *arg)
-{
- PXC_Close();
-}
-
-void init_framegrabber(void)
-{
- register int i;
- KEY_EVT my_key;
-
- // Aggiusta la palette
- for (i = 0; i < 256; i++)
- gray_palette[i] = rgb16(i,i,i);
-
- periodo = PXC_Initiate(3);
- PXC_CAB = PXC_GetCab();
-
- if (!periodo) {
- grx_close();
- cprintf("Problemi nell'inizializzazione del driver\n");
- sys_end();
- } else {
- start_listener();
- }
-
- sys_atrunlevel(framegrabber_close, NULL, RUNLEVEL_BEFORE_EXIT);
-}
-
-
-void start_listener(void)
-{
- SOFT_TASK_MODEL m_soft;
-
- soft_task_default_model(m_soft);
- soft_task_def_met(m_soft,IMAGING_WCET);
- soft_task_def_usemath(m_soft);
- soft_task_def_aperiodic(m_soft);
- soft_task_def_period(m_soft,(periodo));
- soft_task_def_group(m_soft,1);
- soft_task_def_ctrl_jet(m_soft);
-
- image_elab_PID = task_create("imaging", elab_image_TASK, &m_soft, NULL);
-
-/* task_activate( image_elab_PID);
- PXC_Push_Listener(image_elab_PID,2);
- PXC_Start();*/
-}
-
-void start_framegrabber()
-{
- PXC_Push_Listener(image_elab_PID,1);
- PXC_Start();
-}
Index: start/thdemo/ball2.c
===================================================================
--- start/thdemo/ball2.c (revision 1087)
+++ start/thdemo/ball2.c (nonexistent)
@@ -1,156 +0,0 @@
-/*--------------------------------------------------------------*/
-/* SIMULATION OF JUMPING BALLS */
-/*--------------------------------------------------------------*/
-
-/* CVS $Id: ball2.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $ */
-
-
-#include "demo.h"
-#include <kernel/func.h>
-#include <stdlib.h>
-//#include <drivers/glib.h>
-//#include <drivers/keyb.h>
-//#include <math.h>
-
-#define R 2 /* dimension of a ball */
-#define G 9.8 /* acceleration of gravity */
-#define BASE 30 /* position of the floor */
-#define TOP 80 /* initial height of the ball */
-#define XMIN 3 /* min position X of the ball */
-#define XMAX 380 /* max position X of the ball */
-#define VELX 5. /* horizontal ball velocity */
-#define VMIN 11. /* velocit… minima per suono */
-#define ESC 27 /* ASCII code of ESCAPE key */
-#define MAX_P 50 /* max number of balls */
-
-double v0[MAX_P]; /* impact velocity with floor */
-
-/*--------------------------------------------------------------*/
-/* Periodic task for ball simulation */
-/*--------------------------------------------------------------*/
-
-TASK palla(int i)
-{
-int x, y; /* coordinate grafiche pallina */
-int ox, oy; /* vecchia posizione pallina */
-int x0; /* posizione iniziale X pallina */
-float vx, vy; /* velocit… della pallina */
-float t, tx; /* variabile temporale */
-float dt; /* incremento temporale */
-double arg; /* variabile di appoggio */
-
- y = oy = TOP;
- x = ox = x0 = XMIN;
-
- arg = 2. * G * (float)TOP;
- vy = sqrt(arg);
- vx = VELX;// + rand()%10;
- tx = 0.0;
- t = vy / G;
- dt = 0.1;
-
- while (1) {
- y = TOP + vy*t - .5*G*t*t;
- x = x0 + vx * tx;
-
- if (y < BASE) {
- t = 0.0;
- v0[i] = .9 * v0[i];
- // if (v0[i]<VMIN) {
-
- // v0[i] = sqrt(2. * G * (float)TOP);
- // v0[i] = sqrt(arg);// * (1-((float)(rand()%20))/100);
- //vx = vx + rand()%5 - 2;
- //tx = 0.0;
- //x0 = x;
- // }
-
- vy = v0[i];
- y = TOP + vy*t - .5*G*t*t;
- }
-
-
- if (x > XMAX) {
- tx = 0.0;
- x0 = XMAX;
- vx = -vx;
- x = x0 + vx * tx;
- }
-
- if (x < XMIN) {
- tx = 0.0;
- x0 = XMIN;
- vx = -vx;
- x = x0 + vx * tx;
- }
- y = 480-y;
-
- mutex_lock(&mutex);
- grx_disc(ox, oy, R, 0);
- grx_disc(x, y, R, i);
- mutex_unlock(&mutex);
-
- oy = y; ox = x;
- t += dt;
- tx += dt;
- task_endcycle();
- }
-}
-
-
-void ballfun(KEY_EVT *k)
-{
- static int npc = 0; /* number of tasks created */
- SOFT_TASK_MODEL mp;
- int r,g,b;
- PID pid;
-
- if (npc == MAX_P) return;
-
- r = 64 + rand()%192;
- g = 64 + rand()%192;
- b = 64 + rand()%192;
-
- soft_task_default_model(mp);
- soft_task_def_level(mp,1);
- soft_task_def_ctrl_jet(mp);
- soft_task_def_arg(mp, rgb16(r,g,b));
- soft_task_def_group(mp, 1);
- soft_task_def_met(mp, WCET_BALL);
- soft_task_def_period(mp,PERIOD_BALL);
- soft_task_def_usemath(mp);
- pid = task_create("palla", palla, &mp, NULL);
- if (pid != NIL) {
- task_activate(pid);
- npc++;
- }
-}
-
-
-/*--------------------------------------------------------------*/
-/* MAIN process */
-/*--------------------------------------------------------------*/
-
-
-void init_ball(void)
-{
- char c; /* character from keyboard */
- int i; /* pressed number */
- double arg; /* temporary variable */
- KEY_EVT k;
-
- arg = 2. * G * (float)TOP;
- for (i=0; i<MAX_P; i++) v0[i] = sqrt(arg);
-
- mutex_lock(&mutex);
- grx_rect(XMIN-R-1, 480-TOP-BASE-R-1, XMAX+R+1, 480-BASE+R+1, 14);
- mutex_unlock(&mutex);
-
- k.flag = 0;
- k.scan = KEY_SPC;
- k.ascii = ' ';
- keyb_hook(k,ballfun);
-
-}
-
-/*--------------------------------------------------------------*/
Index: start/thdemo/makefile
===================================================================
--- start/thdemo/makefile (revision 1087)
+++ start/thdemo/makefile (nonexistent)
@@ -1,23 +0,0 @@
-#
-#
-#
-
-ifndef BASE
-BASE=../..
-endif
-include $(BASE)/config/config.mk
-
-PROGS= demo
-
-include $(BASE)/config/example.mk
-
-demo:
- make -f $(SUBMAKE) APP=demo INIT= OTHEROBJS="fft.o camera.o initfile.o jetctrl.o ball.o" OTHERINCL=
-
-
-
-
-
-
-
-
Index: start/thdemo/fft.c
===================================================================
--- start/thdemo/fft.c (revision 1087)
+++ start/thdemo/fft.c (nonexistent)
@@ -1,533 +0,0 @@
-// FFT Part
-/*
-
-FFTPlay 1.0
------------
-
-This application reads data from the audio microphone and then put it
-to the screen in a graphical oscilloscope-like form (both standard Hartik
-SB driver and Alsa driver can be used).
-
-The application also calculate a FFT on the latest values, and displays
-the power spectrum in tho ways, one like an equalizator, and the other in a
-2D form.
-
-A resolution of 1024x768, 64K colors is used.
-
-The task set is composed by these tasks and functions:
-
-Self buffering functions (SB only)
-----------------------------------
-this function takes the samples read by the mic and then makes a window
-with the last WINDATA_NSAMPLES samples. The window is then put in
-the CAB windata.
-
-Task raw and task mixer (ALSA only)
------------------------------------
-These tasks are used with the Alsa driver; because it doesn't support the
-self-buffering mode, we have to do a forever cycle in witch we have to read
-all the data. Then the data are managed like the self-buffering functions of
-the SB driver or sent to the mixer task (with a STREAM mailbox) which makes
-the window.
-(This approach is not good for realtime...)
-
-Task wave
----------
-This task read the last window and then put it on the screen in a wave form
-on the top of the screen.
-The task's period is set to 40 ms (25 fps).
-
-Task fft
---------
-This task read the last window and then it computes the FFT.
-With the FFT data it computes the power spectrum, whitch is sent to the
-CAB pwrdata.
-The task's period is set to 10 ms (good for the 2D story task).
-This task is the only Hard Task.
-
-Task equ
---------
-This task read the last power spectrum and displays it in a graphical
-form, like a hi-fi equalizator.
-The Histograms can be white or coloured like the equ2D task (see EQU_SHADE)
-The task's period is set to 40 ms (25 fps).
-
-Task equ2D
-----------
-This task read the lasf power spectrum and displays it in a graphical
-one-line form. Each pixel is a power coefficient, and its colour shade
-from black (no power) to red (high power) passing through green and blue.
-The task display the last EQU2D_WIDTH power lines.
-The task's period is set to 10 ms (good for the 2D story task).
-
-****************************************************************************
-TASK LOAD
-****************************************************************************
-
- period wcet
-task tick (ms) us %
---------------------------------------------------------
-sound driver 24->3 12->1.5 200 0.016->0.133
-wave 80 40 11500 0.2875
-fft 20 10 3000 0.3000
-equ 80 40 7000 0.1750
-equ2D 20 10 500 0.0500
- -------------
- 0.812 (last 4)
-*/
-
-#include "demo.h"
-//#include <ll/ll.h>
-
-//#include <kernel/types.h>
-#include <kernel/model.h>
-#include <kernel/func.h>
-
-#include <modules/cabs.h>
-
-//#include <string.h>
-//#include <stdlib.h>
-#include <semaphore.h>
-
-//#include <drivers/keyb.h>
-//#include <drivers/crtwin.h>
-#include <drivers/glib.h>
-#include <drivers/sound.h>
-#include <ports/rfftw.h>
-
-/* CAB ports... */
-CAB cab_windata; /* a window on the last WINDATA_DIM samples */
-CAB cab_pwrdata; /* the last power spectrum */
-
-/* for the cab_windata */
-typedef struct {
- int start;
- SAMPLE sample[WINDATA_NSAMPLES];
-} window;
-
-/* for the cab_pwrdata */
-typedef struct {
- fftw_real p[PWR_NSAMPLES];
-} power;
-
-
-// win is global... because is used by raw_infun...
-window win;
-
-/*
- This is the self-buffering function: read the samples and put their mean
- value in a CAB
-*/
-int raw_infun(void *b)
-{
- int i;
- char *w;
- SAMPLE *audiobuf = (SAMPLE *)b;
-
- for (i=0; i<rawdata_nsamples/2; i++) {
- win.sample[win.start] = audiobuf[i];
- win.start = (win.start+1) % WINDATA_NSAMPLES;
- }
-
- w = cab_reserve(cab_windata);
- memcpy(w, &win, sizeof(window));
- cab_putmes(cab_windata,w);
-
- #if defined(NO_GRX)
- cprintf("X"); //"XXX%d\n",win.sample[win.start]);
- #endif
- return 0;
-}
-
-
-
-void init_rawdata()
-{
- int i;
- char *w;
-
- win.start = 0;
- for (i=0; i<WINDATA_NSAMPLES; i++)
- win.sample[i] = 0;
-
- w = cab_reserve(cab_windata);
- memcpy(w, &win, sizeof(window));
- cab_putmes(cab_windata,w);
-}
-
-
-
-
-
-TASK wave_task()
-{
- window *p;
- int x,y;
- int s;
-
- while(1)
- {
- p = (window *)cab_getmes(cab_windata);
-
- /* let's print the wave */
- mutex_lock(&mutex);
- for(x = WAVE_X, s = p->start;
- x < WAVE_X+WAVE_NSAMPLES;
- x++, s = (s+1)%WINDATA_NSAMPLES )
- {
- y = WAVE_Y + (WAVE_HEIGHT * p->sample[s]) / MAX_SAMPLE;
- SHORT_CRITICAL_SECTIONS(x);
- grx_plot(x,y,white);
- }
- mutex_unlock(&mutex);
-
- task_endcycle();
-
- /* let's erase the wave */
- mutex_lock(&mutex);
- for(x = WAVE_X, s = p->start;
- x < WAVE_X+WAVE_NSAMPLES;
- x++, s = (s+1)%WINDATA_NSAMPLES )
- {
- y = WAVE_Y + (WAVE_HEIGHT * p->sample[s]) / MAX_SAMPLE;
- SHORT_CRITICAL_SECTIONS(x);
- grx_plot(x,y,black);
- }
- mutex_unlock(&mutex);
-
- cab_unget(cab_windata,(char *)p);
-
- }
-}
-
-
-rfftw_plan plan;
-
-void fft_close(void *arg)
-{
- rfftw_destroy_plan(plan);
-}
-
-
-TASK fft_task()
-{
- fftw_real in[FFT_NSAMPLES], out[FFT_NSAMPLES];
- power power_spectrum;
-
- #if defined(NO_GRX)
- fftw_real max = 0.0;
- #endif
-
- char *m;
-
- int k, i;
-
- window *p;
-
- plan = rfftw_create_plan(FFT_NSAMPLES, FFTW_REAL_TO_COMPLEX, FFTW_ESTIMATE);
-
- sys_atrunlevel(fft_close, NULL, RUNLEVEL_BEFORE_EXIT);
-
- while(1)
- {
- /* Let's prepare the intput FFT data */
- p = (window *)cab_getmes(cab_windata);
-
- for (k = 0, i = p->start;
- k < FFT_NSAMPLES;
- k++, i = (i+1)%WINDATA_NSAMPLES)
- in[k] = p->sample[i]/FFT_SCALE;
-
- cab_unget(cab_windata,(char *)p);
-
- /* zero-padding if needed */
- for (k=WINDATA_NSAMPLES; k < FFT_NSAMPLES; k++)
- in[k] = 0.0;
-
- rfftw_one(plan, in, out);
-
- /* power spectrum computation */
- power_spectrum.p[0] = out[0]*out[0]; /* DC component */
- for (k = 1; k < PWR_NSAMPLES; ++k) /* (k < N/2 rounded up) */
- power_spectrum.p[k] = out[k]*out[k] + out[FFT_NSAMPLES-k]*out[FFT_NSAMPLES-k];
- if (FFT_NSAMPLES % 2 == 0) /* N is even */
- power_spectrum.p[FFT_NSAMPLES/2] = out[FFT_NSAMPLES/2]*out[FFT_NSAMPLES/2]; /* Nyquist freq. */
-
- m = cab_reserve(cab_pwrdata);
- memcpy(m, &power_spectrum, sizeof(power));
- cab_putmes(cab_pwrdata,m);
-
- #if defined(NO_GRX)
- max = 0.0;
- for (k=0; k<PWR_NSAMPLES; k++)
- if (power_spectrum.p[k] > max)
- max = power_spectrum.p[k];
-
- //cprintf("%f %f\n",max,(max / EQU_SCALE) );
- #endif
-
- task_endcycle();
-
- }
-}
-
-/* structure is like the wave task... */
-TASK equ_task()
-{
- power *p;
-
- int x[PWR_NSAMPLES];
- int y;
- int s;
-
- int r,g,b;
-
- while(1)
- {
- p = (power *)cab_getmes(cab_pwrdata);
-
- /* print the lines */
- mutex_lock(&mutex);
- for(y = EQU_Y, s = 0;
- s < EQU_NSAMPLES;
- y++, s++ )
- {
- x[s] = (int)(p->p[s] / EQU_SCALE);
-
- if (x[s] > EQU_HEIGHT)
- x[s] = EQU_HEIGHT;
-
- x[s] = EQU_X - x[s];
-
-
- #if defined(EQU_SHADE)
-
- /* like the task equ2d... */
- r = (int)(p->p[s] / EQU2D_SCALE);
- if (r > EQU2D_CLIP)
- r = EQU2D_CLIP;
-
- if (r< 64) g = r * 4;
- else if (r<128) g = (128-r) * 4;
- else g = 0;
-
- if (r<128) b = 0;
- else if (r<192) b = (r-128) * 4;
- else b = (256-r) * 4;
-
- SHORT_CRITICAL_SECTIONS(y);
- grx_line(EQU_X,y,x[s],y,rgb16(r,g,b));
- #else
- SHORT_CRITICAL_SECTIONS(y);
- grx_line(EQU_X,y,x[s],y,white);
- #endif
- }
- mutex_unlock(&mutex);
-
- task_endcycle();
-
- /* erase the lines... */
- mutex_lock(&mutex);
- for(y = EQU_Y, s = 0;
- s < EQU_NSAMPLES;
- y++, s++ )
- {
- SHORT_CRITICAL_SECTIONS(y);
- grx_line(EQU_X,y,x[s],y,black);
- }
- mutex_unlock(&mutex);
-
- cab_unget(cab_pwrdata,(char *)p);
-
- }
-}
-
-TASK equ2d_task()
-{
- power *p;
-
- int pwrint;
-
- int x = 0;
-
- int y,s;
-
- int r,g,b;
-
- while(1)
- {
-
- p = (power *)cab_getmes(cab_pwrdata);
-
- /* print the line */
- mutex_lock(&mutex);
-
- for(y = EQU2D_Y, s = 0;
- s < EQU2D_NSAMPLES;
- y++, s++ )
- {
- pwrint = (int)(p->p[s] / EQU2D_SCALE);
-
- if (pwrint > EQU2D_CLIP)
- pwrint = EQU2D_CLIP;
-
- r = pwrint;
-
- if (pwrint< 64) g = pwrint * 4;
- else if (pwrint<128) g = (128-pwrint) * 4;
- else g = 0;
-
- if (pwrint<128) b = 0;
- else if (pwrint<192) b = (pwrint-128) * 4;
- else b = (256-pwrint) * 4;
-
- SHORT_CRITICAL_SECTIONS(y);
- grx_plot(EQU2D_X+x,y,rgb16(r,g,b));
- }
-
- x = (x+1) % EQU2D_WIDTH;
- grx_line(EQU2D_X+x,EQU2D_Y,EQU2D_X+x,EQU2D_Y+EQU2D_NSAMPLES-1,white);
-
- mutex_unlock(&mutex);
-
- cab_unget(cab_pwrdata,(char *)p);
-
- task_endcycle();
- }
-}
-
-
-void init_fftplay(int freq)
-{
- SOFT_TASK_MODEL m3, m4, m5, m6;
-
- PID p3,p4,p5,p6;
-
- cab_windata = cab_create("windata", sizeof(window), 5);
- cab_pwrdata = cab_create("pwr", sizeof(power), 5);
-
- /* Init the sound lib */
- sound_init((rawdata_nsamples * sizeof(SAMPLE)), NULL);
- sound_info();
-
- /* Init the data used by the raw_infun */
- init_rawdata();
-
- /* Start the self-buffering sampling operation */
- sound_setfun(raw_infun, (int (*)(void *))-1);
- sound_sample(NULL, freq, 0, DMA_OP | PCM16 | MYFUN, NULL);
-
- soft_task_default_model(m3);
- soft_task_def_level(m3,1);
- soft_task_def_period(m3, PERIOD_WAVE);
- soft_task_def_met(m3, WCET_WAVE);
- soft_task_def_ctrl_jet(m3);
- soft_task_def_group(m3, 1);
- p3 = task_create("wave", wave_task, &m3, NULL);
- if (p3 == -1) {
- grx_close();
- perror("FFTPlay: Could not create task <wave>\n");
- ll_abort(54);
- sys_end();
- }
-
- soft_task_default_model(m4);
- soft_task_def_level(m4,1);
- soft_task_def_period(m4, PERIOD_FFT);
- soft_task_def_met(m4, WCET_FFT);
- soft_task_def_group(m4, 1);
- soft_task_def_stack(m4,32*1024);
- soft_task_def_usemath(m4);
- soft_task_def_ctrl_jet(m4);
- p4 = task_create("fft", fft_task, &m4, NULL);
- if (p4 == -1) {
- grx_close();
- perror("FFTPlay: Could not create task <fft>\n");
- ll_abort(54);
- sys_end();
- }
-
- soft_task_default_model(m5);
- soft_task_def_level(m5,1);
- soft_task_def_period(m5, PERIOD_EQU);
- soft_task_def_met(m5, WCET_EQU);
- soft_task_def_group(m5, 1);
- soft_task_def_stack(m5,32*1024);
- soft_task_def_usemath(m5);
- soft_task_def_ctrl_jet(m5);
- p5 = task_create("equ", equ_task, &m5, NULL);
- if (p5 == -1) {
- grx_close();
- perror("FFTPlay: Could not create task <equ>\n");
- ll_abort(54);
- perror("FFTPlay: Could not create task <equ>\n");
- sys_end();
- }
-
- soft_task_default_model(m6);
- soft_task_def_level(m6,1);
- soft_task_def_period(m6, PERIOD_EQU2D);
- soft_task_def_met(m6, WCET_EQU2D);
- soft_task_def_group(m6, 1);
- soft_task_def_stack(m6,32*1024);
- soft_task_def_usemath(m6);
- soft_task_def_ctrl_jet(m6);
- p6 = task_create("equ2D", equ2d_task, &m6, NULL);
- if (p6 == -1) {
- grx_close();
- perror("FFTPlay: Could not create task <equ2d>\n");
- ll_abort(54);
- perror("FFTPlay: Could not create task <equ2D>\n");
- sys_end();
- }
-}
-
-void scenario_fftplay(int f)
-{
- int i,y;
- char s[50];
-
- grx_line(0,WAVE_Y-WAVE_HEIGHT-1,383,WAVE_Y-WAVE_HEIGHT-1,red);
- grx_line(0,WAVE_Y+WAVE_HEIGHT+1,383,WAVE_Y+WAVE_HEIGHT+1,red);
- grx_line(0,EQU_Y-11 ,383,EQU_Y-11 ,red);
-
-
-
- /* lines near the frequencies */
- grx_line(EQU_X +1,EQU_Y,EQU_X +1,EQU_Y+EQU_NSAMPLES-1,red);
- grx_line(EQU2D_X-1,EQU_Y,EQU2D_X-1,EQU_Y+EQU_NSAMPLES-1,red);
-
- for (i=0; i<SCENARIO_NLABEL; i++)
- {
- y = (i*EQU_NSAMPLES)/(SCENARIO_NLABEL-1);
- if (i == SCENARIO_NLABEL-1) y--;
- grx_line(EQU_X +1,EQU_Y+y,EQU_X +4,EQU_Y+y,red);
- grx_line(EQU2D_X-1,EQU_Y+y,EQU2D_X-4,EQU_Y+y,red);
-
- itoa((i*f)/(SCENARIO_NLABEL-1),s);
- grx_text(s,EQU_X+20,EQU_Y+y-8,white,black);
- }
-
- grx_text("Power Spectrum" , 0, EQU_Y-21, rgb16(0,0,255), black);
- grx_text("Power Spectrum Story", EQU2D_X+EQU2D_WIDTH-160, EQU_Y-21, rgb16(0,0,255), black);
- grx_text("Waveform" , 0, WAVE_Y-WAVE_HEIGHT-10, rgb16(0,0,255), black);
-}
-
-void compute_params(int *freq,WORD *nsamp)
-{
- if (*freq< 2000)
- {
- cprintf("WARNING: frequency less than 2000Hz\n ---> frequency set to 2000Hz\n");
- *freq = 2000;
- }
- if (*freq<= 8000) { *nsamp = 64; return; } //128
- if (*freq<=16000) { *nsamp = 64; return; } //256
- if (*freq<=24000) { *nsamp = 64; return; } //512
- if (*freq>48000)
- {
- cprintf("WARNING: frequency greather than 48000Hz\n ---> frequency set to 48000Hz\n");
- *freq = 48000;
- }
- if (*freq<=48000) { *nsamp = 64; return; } //1024
-}
-