аЯрЁБс>ўџ xzўџџџstyџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџn№>BjMFsŽХ(ѓ5mРžL aџ‰PNG  IHDRM\Vэа PLTE??џџџџџАkзtRNSџџзЪ AbKGDˆH cmPPJCmp0712OmЗЅЈIDATHЧm“;nф0 †Й*‚@GиjЪя#VЕЭ,vx aЪєWB $ž2ЄЖ<ћ ?J@§ЩЦД7;\1лW(d}…2žрŠГќиF[ƒќГЁX>ŸŒЖХŒа љmзVaўЫ-Jh>`d€Џа[Vј -2мЮ0пхыВЦXс!)ў§S нNc |RщДэpѓ;<\’D_4eŒи (ѕ"Ў4Р-“87XǘйS‹ ”žл3Z“m>C?›%b<Уе^шJg(=В9 ‹йцlY? ЙY‘3]њД>bЦ}ЬЬМO–‡й‘пЭ§ŽоŸрŠЦмhЖƒuќocЬœ§#goЃЩЂ­]Ÿу:d[Ы‚Г?m“ч[neёи;ЏрѓЖˆђztЫБa+жyEdУтK”н!;nєУё6hbI}žюбj ЬgэOp-3т .љvКЅзќ"ЪщЃtj‹Т@5˜`Šш7–я.2уыљfЙѕ;ш™@BўqN L*Рфcўѓ 9N8УРЕс7ЗxзщтBшO˜H9)Х5Ae)ЇшAЄ&%QoМ"н щ‰‡‘ГэTъœоф§˜вє‘šxVœq "˜tшГK›КД4=њь0еCа`Кш~Œ8™ъьфІJqršluщг?ƒЈWD__iъ&‡І!) IяЮзG•ю==Ј’WЮn№књИ’ю0ЈR„Ѓ`гjъВЎ}я­ ]ѕ!;M­§4ЎЦScc:РU 0ш4fаBƒоaМїЇT шn~“й“ж4>ЉРI МВћ=SыхЈ/ЧУiМwніц ёŠгV}дЎ яйЁпЇ)ьИ;ŸЊўz‰^‡§Іэ­юќIК1? IENDЎB`‚n№Ž;гŸEB_ўРа•7юЩNЉьџ‰PNG  IHDR€aљЎ<ЉgAMAБŽ|ћQ“ pHYsТТnаu>;IDATxкэЭo,Y–аo8,‡AЦсЂ$Ц –УEKS›‘ШЂx$ЫсЂz3RѓАШR`ИЉ[XŽШЪЂм#Zх‘и0bдoЫБщнЌ,Ъƒ„цѕ’ХˆŽlѕ@bTз§ЄЉxѓЂтr>юWDFІ§К ‰Щ*љй™ПИчž{ЮЙчоњWќќ рџзРЏ~•РJр+~њЋ ћЪ~5@)^‡ј0АСыW$^Пќщлё—"/х_~M~Y  K%Qщ‡Оp$DоСgПPuxдХ/"ъПё@+ЎЊЅn­jХѕ—Ых)hХЕ@еЏ№#ŠИігСвШѕE\Д…iш‡эоz иVІ,*!Ž-Xй•Єзкж’8іda;МЖCёuЕщт6aџйkЂ_ X™Њ5Y“ЪЈm‰Г_иZЁЎѓ6еMЂ+лtЭКбВшzЁ*tЈЫшVі#ЉXЇZЙŠЊ5§МШ5Оƒђh}ЃЋLЋдЗFњњ@ЎqгWn H-зRЁузV42АTа`ЯДЬtMР&Ѓ:П>АŒ5ЫpK=р€6ЋgАЅK<А зГЄЩыkЊq#A`ќš……dFEЏ ЌИ8C@ёН@ї<XІЬю$ыgJPАю3ќlЅрЌ’\(&Ьi=PфЊX#8+оЇЬЈ–€u†UШ_ ˆMKЋ8 lRnƒзR6`ю- aП!w ` їJєjIJ l:Иў} 7ы!`KЕ-ѓЧ[ї{ж#лМєK•>hЄЦ!Н д \бˆƒ@ьС&G \^лNQ(ь/т@†IЄ.:@.!ќlMcцтWaЌ4X№[`Fšш‘@Њ и!Pы6Ц0ЁaљH Z^E‹РЛЕA b`L=еVƒ?ˆЗF{?ЅFЌV‰іа›0шW` З™жLLё ˜­ш•! 5š+%U@@™›‰АLh&| МІТ…@QaіЪћgаˆ7дЛ„*V™bП—Т Ј\’ЛRЄз„&e`ю€8UЙ!џ АЄ’,*‘м’NІЊ h@I=_{ЊЌ§9б( Pћ’>…ёA@ЄЫќ1@ь˜яxо G:pb Xd†4и2ћф€-9Žd$Е› ЭР€7Ш–УаXYAЋЁ##c‹ДЛ 'ч‰FиDRrm•jђКэD mPEn| ћѕ, љ`иLl%Єz80Џ,Q•€™кРІн‹№~*tЃџTтэЫўU#ܘэ^у$k€ƒo іh™'”ьЋЛa ›—€ u 12‚ С6Eшц% кš7дБUя шРfы*–Ј§ˆУЁпьи EвCЙ(њхšzДь]kКњ<ФNfр-}=э_ iNА@•>DЃАЂпц4йw>Утд‘г^цыы81ЌУІTІчБŸŸкш! Ž i:”лЦФНєЎјТиMы€Ј3ЙыюЙ§7… Ќ•ЙUўво| {еƒWЦ`#_^Rкbрoж!/н{ *ЭPфЫJЛЄFюЩфPИ(-аZЧY_–€ v[<^Д™-)Ъ$Л@ŒŽ,ЩMH‚Ъз5˜тnШYta ж^u–,ЫMьу%<~ АђЂ№/•›žbCLwУМЈг:РZ`8ƒO•›ЁЭъPсші>FUвЂЙЩР ђиUЇf„XээьУCƒ@6М˜З;to%ŽEfЉ:aСБa6дœ><4d ы@ђO2%€bTНКр—J—фІ d!Рj3‚з1ј0Ѕ ˆ  Б˜ЌТбˆn6ќЊ4œ`dЃЦдSFњUДˆЉ‚&і6Х@Шs-raэ6u)vЉвЖсЄ0qœU@( гp}›Мвшь}pHЬTЙDуИXDѕСІ yэmV ДюьјЊЎ а*JБ™їхFєџhЁ`WKgЂ^`ШBЅ3MѓоPьf}Йщa`Жщ”"}эЏaˆГŸk2]^šnaЁyв—›ЊжфwЄ ъЬˆчy[+Љ% l„ЊLћrгBеjЊIТЪK ,,>;№P33†P5вЮ"жŠьŠи‰ƒ€'ђ%ћѓTUЃжK“&{)ИmHEЛХ}_ О‘Ћ Rз Т0U“HбвХгX6ƒ^іэ›А,иєыћXšO“ˆ]f/* X­ Ж6аFH}k.І1[Š3нФиЂдpяaУл›м„АŸsmаЫP„€ЛхјMŠ9 ЃЉивЕыgœFЇК'ˆ!Фд ~™f5Ч|яšяa—aД0‡шЕю b„тЩд[„ЖK­№o PеШ­Vd_/UЮН2aУтŠу7~хІ‚1b„4Н3ЪЭ3HwХ/PѓЎ–h№9н>ђ@mf34т'ГШпpb8€Нуњ(ливКŽЪію‡ѓэм—A6аq%+ˆJ\Xq˜ЙH~f.К Ымьœ ŠPх"7@W‘7—f5ŽEЛР9кўВgŠ@”јVŠ\ѕ€Sg{и2SяАw%;*юк T@у—L07+0"Л’iіУќ†9&&B•ї@єв4Yђб ^„пb›!Z ЌB йdxO†вжТЧlлФЯєІ]kqBСмЋДЃb`Љ-&=qсІM_ЬŽ/ЯyуIGВрЇ<Х%lФiw  “чуСAЎЁFЈ’TFџИ2'VВ[—зX!TкЁЮ€1z1Ј4 7ZЅмК+qпђBnе*0Amˆт_uMюЕ|И@ TЈ3T<.BРYw9Е щ4*ЖчTб&ƒРŒТ–%iФА„u`Вu€Ец@gЁUо&5}3Y М š—x^`YдфZ MИˆ@ћ—s њ1РЩP –C‰+˜ZNB``іz`ќR 7,‡€%;cЕ8ЮЕШ‚ё>;Ѕ0KВ Kф ‚=МёГ”`юegŠ=Јмё0fЎQoхJш€wAQRуй#0_ЖvŒ‹˜L臈-5ЉН`Јx еB"YМяЩГ—У@>ЌчЫtM•C`b‚ї ЦžжH !P@еЂD—ЙЦžЊЬфrTyП„z5Aигё2FлP еРКз†Љ!`бplЋвn’sЅђРТ_™ВТ%б™,eQslk Пcў„РЦPюR(™­Й ,бФš‚Џwт^ѕ0PюS<™члj8Сlу›ўЊgиЫo _C йЅОJы…MйщE†У[1)ђ>$inГžњ@_Тќcd‹˜dУЯ{pJ3„ŒыЅ*7[=р ™_Ё‰hЏ…С3Ѕ9l”АŽ $`M@?іœытМЬц§ъ*зQк^гTЏƒБч\ ќ˜TЕВЪ*тзfœe– sлЬЌЊ+6uМ n„Ы-œА—щ%`…@гЭ*^ц[ ЮѕW4Мnœmы€’цBшц\џЏ6щэ$UХзСћМ ’‘8лжiјHq SXёЌtQŒ4Œl?—šзъšиf œ№ъ 8ЬЛЊFwЂŽ35?С@і‰ ы`FзfБ”ь†1Ћї‚hЁoжgеВI e+XИъƒ03-љСl€hоЖч,sђ8H‘ЪЗќћ‰ЫўЬ f LиА*Ѓ•@ђžф;інЈq@TѕuF4aЊ˜y˜?Ї™7qй[уB‹Гq-c И>mxыmilЖ{ulЧя[ ;Йѓї АޘQг,?mУZCm0[+Іd* TЭўљ•Љr)§`Ж.’тO‘Ю;ўeCЋn2C`Нo­p@Јё2SЅ˜ЩЮМ†З(иьX xс…j ш€И „Y™Г sжђт§.PF5ьмъ–в%х{hіІn€є[M.‚<Ўz@ @UщГІxŽї͘‚ЂtвDjђх^`’"АТшЧ(C /П FМuъЦйеyI&пчЂ^f<К,А.юЁx9@8wъЦ'fn`Ыт6jђ˜"АрбU9 Ž}pН^bf”Яj‡h–8руљ№H˜х%ЋL РоЏ)~ c8ЛгЮPрyD{@rg~yр™иЭЁ@іN&†™шOЭК"!Kˆў}…їЕ/aM@Т<г‘ћРŸ”<2 Xu–xХРHлЖ€сУ@ ^І VнИ(ыЩs(Жс]U„@p8Ўоіт€ш•гB7$СDІџ2)і|Ўђыa`nлтSrѓ №frkŒ0ЫЫW’УЛf ˜Ђ–Š…б!МŠ™ЧŽыюш}u€$bм+8RxЛ ,)TРз5тG?.oЫœ6LXuc€ˆ’"љ†ЭžЛ6 ЇЫkŠт‰UьК9?М*ЎЉf…И§š‚hзd†#0№СЬ@`+єuŸОО8Н,ИYиXБѓ,Œ4T ё} ,–€`M aК% љ^З[8lЇ!ц}Иб[<мzкЪЋ ƒReRšb}Г{ ЂO:@њYBЩiUuЁчї] Ў@т‡2х‚€оas‚VCз` gЫ@шŽvPР9Q#NJ#§ЦIЉMјS†@...›““pVQXяЃF,GТЃ†п˜hqh,nквB€кNLЈЙЭлU#йїЦ.–€(ўX/)<”ўo„y{Вкњџ*КpВЊp˜ыЉхаьIџ ›jšwBфt27kч 7Ює„В`XfіНфGЇ‰šХ c1амXхœ™SѕEотз›S Tз?:С‹TdтdЕП:РкdQ№ВœšqЇШЋљ/ё-6м и„@ѓНкфy№ЄŒУХ$Ц DЅEБ–Ци2 ДъeAM8•lВЈr,›mѓ;ХZšмє,љ{6-oзЖ‰Б'№ЫИ4„C#uM'їІЋ€™md~}‘”)Чоb˜я)u%vIyКю`.Њ.АIn P™ TXƒŽЅЭ=oГf7^7ЉЉƒ?PKaзqЈš.Аb ињЅЖ!0i23Pэу.b @Tђ(ј!ƒddeР,жh{­šДqc|ы5пд%пZY NЛ@•нdѕјla;OyššyрŒgjLкݘVy8ЏЊ”п2;wzР‰&јF,fЋ€<&+Lq•8хЈєПN[1rНвІВ`•ўвNЎS56ž3A[ОъIѓжЙ]ћ›„Р&ГРњ=L`Ы мѓ~ДкeэIІXВYрї˜]зуи$c№Т1љ…‚=€3(i/ю y%FЮ™jђˆ­А&дД‰Љ>Мu#9\х07сT;›М:#чЈOc3N]и1…ы•Ox.ь)Ис'&u(іœяЃ.ccЋљрЬ‘ШН9%yЛoL5mіжЬIої`хi“Zh5Як20`ŒНЯJэ–њ>XfТљш•иЁ€Y);БEж#ёР&kshФќЮхъaœЯ,Х1ЮЕ_B@ ЭЃ#`Ъg m tОюl6j•uчДk*sMRЛфFR7ЪИЙ™вMу;+зU.l7ЫˆЄЗN-А v]“Йф-Ф›бvьвaKБWX!‘МќЏ7хєAТ†ЪЈh#Й[ЊЭHмUdUxc~G/о: щї":Ќ /јНЬuь“ЎlЦЪ–~„ЦZXынЪЙ#ˆЃЉё}Иг\ё€1ФуlІЪЭVш4YрЙiЖъћuфd| ;пš“I‰лSва E9jbџюЈ1РИ ГЂкп~у.ЂNБ]яЕ‰bD†€з<iQЩмйg_Чдnј“@8БІŒAtЕHXРЪ/ЇMК@*ЯЂЬњ@Й фИJ3Зо атлlЎ\лV&А+Дг›СZIU а{IЈ;Ы ,жr'^Я‘Є@1і†;іпmє2Ъ{‰ZЬo’hSvМ­stэœНJЗМіРЏЎ'rbF * 4Rџв‡и› CnСјЙЕЦщчИГ2bё3@^аv‹ Ушd}œ”YАv —>‡њVУЄЄ/§BJBСŒє‰k‚X”Eрn=№Р“,9')XЁ" Н [гs,ж#нiуМЬЧ4xрŒ6U\л6EЭфт$ЛЇQо&”Рф€)jзЈЌhѕgZњЛŽщю~Ј8l]1И; Icѓ@UрT6Зp…ЦFKаmЙ—(кўТKЅЕ6 ,ТЅ0‚ЁnА,|sЫЦ웈ДЫ2ГРжL‹иЄ •Хм­eИП%:›{psd˜5&EпЏЕ m˜Дžб6эўVb'N~Ѓр§ EЌ3–› 5 6 @7f…БŠэсAъ’мl!9з`ЉœЭ‰ ЉgMTеЬ-J“JQždnё=|akРхфU ѓёТХЛ+3ЯmцѕпиE{WЕЛьUvSЇъ}Зg"mВ›+‘w€œо•ХŽ@J–kйеdіAЅМ|№/­јј\“&в l T9ZЗ`h‡Л0ёYŒХв&Бy9ЮМ&ІўJљЧ3,(ƒqЂ;ЛэK”ЮНЂЗhv‰§йbШч}—€ЄнnУїŠQкю$ћ )Ф‰ш$pыт*Ц­VХœa^л˜у+нЦ<4-ўшgАС­цH%МябгРё(ƒмНLOqЕ‚ІЕtXјвчf§М*ЏQјлЈяЃ)™UуgA‚Щ$<ЇмкoXОhЅNНШ0’LќЗX‘ймж!№•`УЗIќЁJ•тŒЗа†РŒ™c”ƒ@>џ ЃПчAT5пхКDС–1Š\l :9LmŸ`тюdцЖМлт›(;ЩраЃœK@ЗУ™Є&лHЮьћ2ЦPЌHz)Їп †\• ЭjЭKяm&_sŠ(Шb#ЦcыЃТ„€— _„ЙЅ&UЧsнйЙНА FтBŒGv@ЃFрNƒ_oЯ;Р4Nи€ ѓ›>041Ѓ}sјЩG)6Шюk\чgvа: ­щљиz#оГ[ЦЁ@ЧлЙi‹ne tЎ ЦгјŽ3Ф% Fф|ZСс9й1{Ёл4УЅ“] t3Ђ[?rРFDш’šoАJ p7х @У@wюІ5ЧVм…н—f€SrEб3З>5gМD\хгиь њƒМн/ФжVТР-ы>WEDРињЋX}‡€Д#LˆЋxТI;yЛw%вObjэ&ЕSь0бци1у˜щъCšƒЅ@1W‘фМŠЂС}gŸ њД>nжYSY |abє:ЦХy‰ E“ЈНlЮКІОXJ”ЄK-prЯ…=ЪmD+З0йЉTeвDъkkвUhY_жgОф9у'xB;ƒ$(хBхЦ Yд­ыC,,А&ƒгукдІ<"р!hХt&фїKfІыюю­v0GRlл 2wyнЫTЙM|…З§<еэІˆфЪxdЗ‰Э_МВЁ ŒcЫrђ\Eч[™pzкЋ‰ГKJьfИЃ<ƒVхЦNМН[хдђˆlвпœ’Z qyL"€Ф~dVЙє'qfP'TЎЪІM-ц’gчЌIi? )х|U{‚яў(А!1QєY­mфЋ˜€Зц РxІ мLDАnUѓ”ЫРTw_ ŒКЩ-›Ш%Š@Щчі0cрV*‚м%lтBшбйš‹м[оё€э#xGeQ"АнLЫ`НЂ ­_BуbK™GTД[Š’€@€Džд1MŒидЭf63Р–rЁ`цzЪ'œТXС!ЗЩ&UWт82veН™i'\9ЯтШіЃнž0QХ$b`чtЦД>%љч­| ЧMн0гЈ„ЙP•K@й;1GЯLО I ў“MЋpС%ёР;XђR—ТїчdЋ‹ЏЌ c ЬЏфbFЫ@ ђЎЪvЙ?З#щЖ,ЬdK:мбD;УhА•яЂ(`RздЙ [BуЯ›Dlѓ[д_f‹ёўљ§ЎфИG‰ГгЯп›9 ~ГЩ`цид/јЈйч%˜X…iіжLБfЏL/sВBKТијиь ќQŸм0EРŒ€c™‡РœФЄЭXЃ••њNСw_р-ыЫи sQSœшЏq*Ж+РEKПєFlА!юi§МVaЬидЖG”к3жHoЃR{I [s8иK8вбfŸСu7ї•OъѓкФњЭ9PЊ—hžЪŒfSŠzŠ}px"jЮ&ћ ўI_ШмОа„Р;'5C„* е%meb ц@ЃзцUБЩnSжЛ2ѓnsгЋr,K(фŠи')їbiіšˆ\uРш‰žмєЊœ›*Q>ЈdЇX`J kWЗ[оsJйО…:D|™Ь{@е‚}љёnNЇ‹˜Fй9oTср<ЗЦЪЬШac€/ЯСд§\џїнSвфFƒжѓBяЩ*?/сЬгa o†>:EгѓГ`…+р"Г7 l,ƒўєЧoЉєЂQЋ€Њ™=‘Ф3ЃЦm2МЦ"ЋAo§H =Й X5И1Гч I Ф^ОСtc'ф З>hј.—ёu‡У]lСc:Kp›Z‰Jј}пк-Фц Ъ_ˆD­Њ&—cцHžЁ’Z`JJ$lѓtјйИрCžќц =wŠ™ѕ–€šИN)т*kОu3”„iњ*зЭіg,6Є€#T{С(б §оŒЋTэЫ§c’$ИŸRш`#œa{@юeљЮгіАИ/у€CUFеНСѓŒƒ0Дй u[X›й^ЯZV—% KФЛќ‡uˆ'є€t;Л*‰LžФ+€g‚ТiЉноkі>2АВ@$ју3y8Ќ'e.ќќoE—B—€Dтf;о ЪЖŠeр‹ЙОQ›!№% ‡а§*гЋŠџpNЛHDєtФ2№'b7H Єkrу н7Љ‘še ХЪЛ@ ъјз.60/5ек[GgќЎхИєmлdТЕксд6lН+ <СТyƒо-x§№w5Оітa b b/йМшT‘/] нЮIЦБчєзBЛ№ь2Аb ьƒmё[шчќewдt“Яš†žЩTT‹cSByF%”'F5ž9#-зСЂяPчѕSЖтDЋ7№4nGrМ—ˆ&‘MŒРзAК,К@4Ѕd]Ÿа7_в&žМвЈкfr/™€nЛaљо‰ЌИ@сD‰/ƒЦС­„œT%вхqR№ќКЇTat~еЛ:<Т”аi‘3ИwР:­‹‰L'zк$ѓ&“ЇЉŽsќЏвЬжгР$cно PSЮT2mr,с[hG‹ђ‰ЦѓУжЭљ№кqcб@ g?KR­Цп#0cЗ)ZžЦ] юД! ›аЏ'ˆmXЬЊПРtŽ–qЦ7ЅГTЂ&zоsЎчL-№ЎЪ xлwаЎДpƒРV˜хЩb0Џ wNIЋ №bГ4RЄHЊq-ŸŽхGJ5|dњOvNА'SћE™?W0)ўf=EРЃEЫкХЏђ)1†\ЖNrьnPйЗMЖР“ћE{T$Њˆе9АуЇTЂwрНY I<Ц#k7NsZ!iђi“UшO P$U1­pR‹лЎ9'Л@)MЄВњjуєэš•4пPрpх‚ЧL3гF~>]WBКA#ђgѕСЈМuє{zћЭпш[лQ_7wŸ“fЋJИ Ё:qы№lk|†ъzшЕy@ЩЩзј‚bм0ы5Oђц`ф№М*Х№kk‡ќG0кЉ }ъЯ:Иh/зуMjУJ„R€8]е[ЇE›Е и‹йЧ+€‘ЖтsZƒv@^ЃїЫp˜^o2НРйє“U@Б)О]каЇ~јх`гы‡иЅњш№rMЖvі†gC•П7Е@Jišє€иЭЏ#№єj,Ђ-1bР†ˆŸмƒŠYрРнђЮ<+ZqхJH1ђiˆQop„@рРD…УMl&RER%тФяЋqбˆ+з†Д :мкУ*Ÿ~чЎм@1Мˆ`ж“лБа ИSN №віr@RAYT‡Ї' љ_^юˆГQ$Ю@ј№ъUY оŸмtKHй LђLЋггЋEѕ‘‚sгпнКzGKв.ОЁ7кЅЧpbЌB/УьxšЗяп{рйї pїЂrчН­ЋяМ”gЄхХѕЕbAwЖ—ЗŽ`ђ<ЬnЃмФД"‚БtЭЗплНњ№О<Ыj!l„ыю+Ÿxрv;З.œќ№ўЃ§ё–82uц\–ёэіќ№ЊxQђ] p.E˜ђ9шд"А§№ўnq#Nрoё9]њэфА‰яВлУТЯпœмЙ D•Ё8к‹РCЈдн“Л]qšЈ|ТР$jВч]  рШ39™RpЏЂZШУУќе ~*`Щ'2ЮГлЬ'U№#№˜WŸ.8ЃžuHЏУЭBПxўу?н+ткcоцЗOлБДzзZСG€јъЩЈHT8Ч™gœwъx 8%IwMѓžжЯŸм?щK8іРєVїіЦ…еОY"ѕХ‘‰пRЊ›…г^etšЦ‹›Š€|q„@™ЬUtћщї­‘=.hIЕОˆњ@ЮJ”ц{Iѕжѕ­;@bs–ЬЪшіњо~ёмƒ,S№йXЙ-aђѓшњFiх€ћбэЭb#њ] z'РnМђF6І"JИsј&LПŸŠ“Hэ:рб&јц1ъАmo РёЈ№зp;Й і2м€Лб')LєЧQЕхдБиˆ~€›1”pTј%г% ДЁ<‰6у}‚р&3Юуp&\˜Pї$ш›кph›иЏ`5Švтэ-Ц4н9 M#0х‰iДwувY$F„*РэxZ‚Š‹#SТБsv’ОэБFьнŽBчЃЊИ’м'рN<§XTw‹ђв7cyœ?ХЪїкѓРvX№€{‰иоŠёXНBЕЙмI$Ьzы5PlЙ^k:ЏЈ—ЁSЖ7тŸъџђѕ ~сЁs&†_0ЕРрhSшe(ЫЕЎ§Jwц&№{ ™GПБiњњІgJю “ПOЛмt).HЋ№Юœnœcw И}™уО0“€Yn€а~рЄгъ Y* ™T№ ЮAЬ;ЫkUЕUлЉ6Ÿ­Ђ И “YtЛ Є˜ƒЦеЋюУЄЪqН,ф_2УчrAЧ1wЪ‚Яќ0=лœBЄ CчQŒЋддФfСћИТC‡&ШgO‰фїё+yb”‚`'rФ <гŸЯMј#i•ŽЅЗЌп“уdњћќ$lЃ2‹ШЉвФ1CNИУФѓрXpђ *Э/UпAYлс,б}Во8ляГ` žџ1еІNrнИƒЫ9}лќn№P ё.._›c%Ec­%NQК†ЯЦG\@дЭeЬ†'’q{К пlW\`чM• w“,кGXР”г•0%NїnсI)ИЧІКH x з&3h4x:•80@ЛMЖЄючMжБйB„‰ŸДйБСЋГ›WфќXрјіќu\zђvЊ1’ s6‡1П №+LAъьps{ћЪїŽ,PегupТЎіж +Г›еМЊ гІ8ќсg(b!Э•8_реЉлsУзt…Яь„1YнтЉО"›џ,Ћь€яWlВе!P‡@UјЇ_тFОIЇ‘чwМ1ьоžЊё‚“ЦB ьsї`aŒ"/ЪgяТœ„лB…ї‚Њѓ9GnУ*wO§­sЗаŽР{мбYŠ+{Д.Ѕ=$Мƒ€5>дЈ2@ЛAМ{.1mbсEvA§чВ<ЄЄ1Зmч“ъ™N PšЊMћР$+CeГRьp•JбІl^в.3SэИ„ј,jмН€1sœёФЉИѓ&Rщs~ўž€Ю4тбТЧdbТ4Ы@ ŸэКЕSmЮŸХг7дIvЧћЬЯtsjŽћKњ@211ЗЏǘ}я8`сКѓ8ЭgД+gHsœНГг…“ЇŒЧ АМЋ ˜˜h\?Œхa>С™"/MЏ4= нy'xРOюёёЫХФ<`ДьЏ"Мgˆ{cБїOAŸX /гЭjfЅђ;<ИЂzЂюМ7лњ†`ф Й0iož$вŠMёчПSrЇ,xЩGс vZш‚~v;€bZЉD3q7Y$ЅuMЊ цS5‰8ИрёxЦЕц ћ@Лg Зсс<‰ˆч7в•зЏZж›B(7C‚"Ѓ<‡ўсљќ7LД)ЯšY9ЙО•{&ГАѕк ;Qe€ЄWЩЗБЪЦYпЊдб8NnчЊ )JЎjБѓѓ(˜БелђŒР„ьЮz *>ПГћЯYУF” )ЯЗ7увЬсšŸ=Ѕƒј™Н$ЃкPz3JїYРЙ{јw эo‘bџ‹Ф<ь!Ђ›N„/м–"FЙ‚OЎ'цœФxI‡СЦ<т Š5ки‚ЊM ђdТo€uНѓљи”,5x‚4к“авKТhy3}Qѓ™Nz •4œР1‡ьITИRŽфqLжUЎyJ†–ѕ>|TxМ^ЪYsZoЌY8ЬTю;)FеyB-”iž1Њ|y4ЖТќб„-ЊY‹v>Щл )bХGу*MёЈЮTГЪPљРуNp6†auл"въ €;‡рЛ:bє>мВMLN2)хƒS8ЃшЮŽй3[дљоЙШш”йY›џ‘ѕtqѓ4K,’вг&Ћ% Є4Л ЗhвЃZЄŸцFd­сƒOKуЗаШ АŒ7*Vt$БнШ ѓОЈEdшИЈ7БљмHw.@ы: л;)zиKЬ•&СaЇР?’[ЫsЪЃ(_ ЬMеЩяЅАЉqTћф7Еў“”ŽƒŒ(ђeMоЬ{=[ЇаБ@ИСП?Нр‰VЙДОHА<с“b‹v›gлœoјЧ'$b/KkKpчрLp%єэ?ђ<іЯ36ёсЗ_žффZM0yу•жЯЁAЗGЈЬbгЄ г^Ы@zD!Ж-EСKЁЋKtž=G™Т™­Ž§M‹Ј2{\ж mЎрУБЌ…о#›5‘ЖіЭоxGf‹ћЅ›žХоІцРu‘Р†Ђ,лqkN{л„їaфЦ|,# ‡џŽ#Д XВ№ §ј™ІгЕ-№R; Qaa мq|ЃсЎ№Й!d…зB‘ПлŠƒ„Я]‚/-ижЬ˜˜цZк0ТЂЁФ4x$хulrœ;„€РсЏ… 2hм§9ћЅМ”†Ь3[eѓ0LЏp^ГE`€ЈmўYC *EћQщм&|`ЦŠ˜šwnŽA+Q0 OЎ7љз’|л˜kчсСKИ ч—ˆтF1wƒ G“уУРrhZvТэтѓyžн”ЫнIТ"ГLЙя+ѓpž8”Р‡F1{\0%cнAЈ„+ЄkŸ/Э9CebЃS]ўgьFu"bф ЎxдЏн§Э5—‰qЫ л%Ю1Zˆђ.юsІУР8V‰ P Z("ЊВ<ыГ…Kq[кЇa№ЇъдЊwTД…$`ХЇ1ЗvЛ4%*ЎPЎCр„Ккє6ОWPёУNўЇѕєЫшš4E1 Dёt1§&т)6>[:хм<Л=uЯЮJfК+з!%[КgaРF” •pT№y2IiZЄ”ЂКˆт"S+T”ЖЪЮђxдК0@ќф EP*н•ыXї\‰РŒќ"ФЃїYЉвщЪнpgLБЪюrK•Oѕ ]—#јЈЕ5Ќ=1 xЇ2w ‡ ФнЈGмП‹ўQЦ.Мv—ЇУЅqT~Y`8RЫЕxё‡`Їпi{іyХOy1[S=1ь'˜5ШЫNЁжЬG-ƒ+Њ{цмВв+L†ъЕ ,XХќ {,’1к#нlˆ3<ЈXЦї31EOj:@˜(ŸŸmžOЩеWќє$qЖ›bбш(§}ЖBНЇЧw€`&нё3˜)їЙ†~.,0жкЎEtЊ“yК№]O ;@ь{ђ–EЦ‡RЊѕйч PБ)ИёZsˆвsнКПƒ ЊKZKс'ЉˆЗ-2Ё‘LЅЦ„3Qрлўi!4oНЧƒ`y‚@ЩgЎ‚{'ђƒЌJЌMШ јКŸ%ёєф9˜sю+Ћ4 hD ѕєБi3>0рК'† F“BАЋ8Š€ілhи€G> 9ШX!YчЉт}`ЩЯ„ЗЇ{†_eуЏєŒ•i3.iоyz( В1h§ИCŽЦrТž`Є€Ц„оŸоррNLMH™6Йпrd|Г№Јр% ЩтU‰­‡8`az@žЅџ-к#Фk€цЬR,AAЈђЗЯ„0Ч8†@OжЖ†Jš8_еаYE˜’lN%ѓ›fЙ'|вћ* >щХt]ƒќьПјO nЇ*lЛЁв“š^•Ж)§Й5Y“у0NИ—Ј"td е“š?­Гжs*т&K3_†U@.?žЂцЪ\ъOšŒзБУъ`aћRгвMёЉhЎ/ЕІ8,;К”њЇ/5= 9-7 ŸЭЫp‹Рx~™†JяИы>а•SQФRг1m= ŠО^–šаШM,УŠЄЯОЉ“†Ђг№ЫЕИгў`Зa ™pь хц+‚ЯŸэ.&"pО,5} 5 Tн“вiš]ЪЁыНСrг=c§ЃКƒЂНi˜-KMШ#ЋћЄкkЌЋТЉ&IЛзцЫRгВM.Qj~LO№Єk џ‰UРЦЌЋ} т/ЖЛРЩ€д,5*'єt'†ŸŸх€2сhЕ›йЇЫКfXт‰Чн1ЛаВGLииOS­;UТ|9эЄ_сђЅ '’цмТLС!ДдЩK@озiEGXФ|ЭГcšЁN^жшo›ћZ.hхЄФLџцdl0ТМў^ lbяЁДvёgџЪARŸ›љn`$  UьМ–уTUsоt}ўNатm~6bр_%лЁА [‰ћ•WМхoк ~ђЁ9rѕдЋШ—Gђаoйi0Йџђ[шяВ:”т-л&ё#€~tж#ѓlF=ŠЭiS'їўцk€^Дъ ›эёBП€Q§=ОзЕГРzЙЃ+šU@nOŽ@gVй\ЛияђРКnЎŸЏCaЌ†ыидДшф ?Kl№•ф7Ћуи,ЩфIПuжэѓХ0ъР@:ўBЂџ”™Ў0ЗxC@_ T?јoЋёидЇ,p`р Дn˜+йЪ>sћ(>Юz­НшŸGŸ˜D :КйњБІ•ћdшzХFSМУФj/Їїћdh=НkЪJжЭGтЭwЛп[žёVkлˆ.†HЋf=ыpEŸшAй4Uѓн”щ?|щz гd§\D=ЧxHw­КчT0:ѕѕIвK,ЏуG—ДЦцŽ7.гѕпZ Ќћ•Ajд›\‡ц“UРхЩš€ЃaXЌWmје9зъ<ыЎі:@ћ6wq†‡uUќР~#ЖщTіхКгЕРІЏлmЎHјVёРЅF,СЭћЇ:ЎjТРўt†™ћКkу%ЏT}=P(ё:64ƒЎіQ™@š{ЕЋšpАпˆсЃ'з7с*`яaPMRшq\%…+uЏJI/2КJ W;ЯY‚Wєчiшкж+›pА_gйез*вЏ ьx$:ЎЦђCОіGЅa ГэЉЦЧлžoœvvŠЏЎёJ`ПЮ1\-4k€НŽььчь‰Ру€Кы‡ЊZ-4ы€Uч#џК~ѓ>иuыƒNnжєё: .У‚ГМXг%krјГЖyx<АОВZз%kС’pчŠ5R§P Щ[ЕЖKж‡ гŠѕ5^Ќ–;ДZп%лЅ"ЖbнА{’г+bЕ^жЂћљУ|ш‚?ŽїPЖљ]<дХѕyс еНВ%хњЫн/ь$4>Ь{А~-о#€к#=j ћЃю:ЧЧ™ўє1п|$P<љ—>њѕРџџЊІЙiIZвIENDЎB`‚шŠTщ(`рŸ8 ђю/Ш 0веЗDTimes New RomanЬ­бœк„кvЧ 0œк(н 0\ЗDWingdingsRomanЬ­бœк„кvЧ 0œк(н 0\ ЗDSymbolgsRomanЬ­бœк„кvЧ 0œк(н 0\0ЗDComic Sans MSnЬ­бœк„кvЧ 0œк(н 0\B@ЗDLucida ConsoleЬ­бœк„кvЧ 0œк(н 0\1PЗDArial ConsoleЬ­бœк„кvЧ 0œк(н 0\"`ЗDArial Unicode MSбœк„кvЧ 0œк(н 0Є €bџџџџ ЅВ).oиЉ  @Ѓnџ§?" dd@џџяџџџџџџ  @@``€€ Ъ№Т№h0 L‰      0   Šay yЮ^ub  vИ V   $|МСѓ     '    (]36"Н%’t7GXe—ORЯ83kфшZ' H`    \  %     e@nlp       !ЅѕfІЂ ’,ђкд№€РkbOwJ uMi  =Ÿ   b%-       :8‰W" ')*+,-2./10 $2 =+FFF_№м№$џ№$џ№$џb№$BjMFsŽХ(ѓ5mРžL aџFb№$гŸEB_ўРа•7юЩNЉьџ–;F №0e‚˜Вƒ0e„˜В…‡ˆ‰П є   €‚ƒ„… †A‡Сˆ‰Š‹ŒŽ‘’“”•–—С˜™š›œ@П РСТџџџУ ФХAЦСЧШЩЪЫ5%ЬЭЮЯСзџЫЫЫ 8c8c     ?€‚ƒœ1„…№љ†‡їˆ ПРСТdУФХЦЧШЩЪ0uЫаЬ0эьџЭ@T‰Ю€Я€џџаyџб2в NгPУде'жp”зА<џџий'кp”џAЈ)BCD|ОE„|О…†|О‡S"ё‘’П‚‚€ё џ3РsPџfџџџЬџf™џњм˜ѕзU@ёџџџџџџџџї№ѓ€а;ЂЪš;mNЭЩЪš;њgў§4TdTdvЧ 0к2џџџЦџџџpћppћ0 <§4!d!d`ѓ 0LоИЎб<§4dddd`ѓ 0LоИЎбџ <§4BdBdМкйє 0LоуˆИŠАК___PPT9‹’{€йЏo20}rКVC:\Silvano\DIDATTICA\PROGR_OGGETTI\OOP1.htm| 20?й к Oй к=№ѓ7ѓЎŸЈ+JCL: Programmi concorrenti (Multithreading)Њ<  Ÿ 0Piљ attivitр sequenziali (processi, tasks, threads) possono essere eseguite in modo concorrente architetture monoprocessore interleaving, priority, preemption, time-slicing architetture multiprocessore architetture distribuite Le azioni svolte all interno di diversi threads possono essere tra loro indipendenti (asincrone) in competizione per l uso di risorse comuni (sincronizzate) cooperanti (comunicanti)ЁО`16Hn` џ3ў1 џ3ў  џ3ўHnЊф$; A†ѓ ЌŸЈJCL: Thread statesЊ.  Ÿ аBorn Thread was just created Ready Thread s start method invoked Thread can now execute; it competes with other threads for a processor to run Running Thread is assigned a processor and running Dead Thread has completed or exited Eventually disposed of by system Waiting Thread has suspended its own execution until a given system state has been reached Sleeping Thread has suspended its own execution for a specified period of time Blocked Thread has been suspended by some other threadЁjZZZlZZ+ZZ@ZZTZ ZFZZ/Z џ3ў^+  @  T F/Њz S  E . ѓ­ŸЈJCL: Life cycle of threadsЊ  ѓБŸЈJCL: Thread priority schedulingЊ.  ѓАŸЈJCL: Thread Class (1)Њ  ŸЈрWhen code running in some thread creates a new Thread object, the new thread has its priority initially set equal to the priority of the creating thread, and is a daemon thread if and only if the creating thread is a daemon.Ё0сZ/џ3ўЌѓВŸЈJCL: Thread Class (2)Њ  ѓГŸЈ'JCL: Creating and Executing Threads (1)ЊH    ѓДŸЈ'JCL: Creating and Executing Threads (2)ЊH   ѓЕŸЈ'JCL: Creating and Executing Threads (3)ЊH   ѓЏŸЈJCL: Runnable Interface (1)Њ.    ŸЈLIf the class supporting multithreading already extends from some class, it cannot extend from class Thread too The Runnable interface is a common protocol for objects that wish to execute code while they are active (a thread has been started and has not yet been stopped) The Runnable interface is implemented by class Thread A class that implements Runnable can run without sub classing Thread by instantiating a Thread instance and passing itself in as the target The Runnable interface should be used if you are only planning to override the run() method and no other Thread methodsЁMZdџ3ў џ3ўšџ3ў$џ3ўџ3ўџ3ўџ3ў2џ3ўCџ3ўџ3ў Њt !     M6  kkѓ%ФŸЈJCL: Runnable Interface (2)Њ.  ѓ&ХŸЈJCL: Runnable Interface (3)Њ.  ѓ'ЦŸЈJCL: Runnable Interface (4)Њ.  ѓЖŸЈJCL: Thread Synchronization (1)Њ  ŸЈJava uses monitors (C.A.R. Hoare, 1974) for thread synchronization Every object with synchronized methods is a monitor The monitor allows one thread at a time to execute a synchronized method on the object Mutual exclusion is accomplished by locking the object when a synchronized method is invoked If there are several synchronized methods in an object, only one of them may be active at once; all other threads attempting to invoke synchronized methods must wait When a synchronized method finishes executing, the lock on the object is released and the monitor lets the highest-priority ready thread attempting to invoke a synchronized method proceed ЁrŽ џ3ўC џ3ўџ3ўџ3ў) џ3ў:џ3ў џ3ў( џ3ўf џ3ў џ3ў џ3ў#џ3ў? џ3ўЊ.  m ѓИŸЈJCL: Thread Synchronization (2)Њ  ŸЈ§A thread executing in a synchronized method may determine that it cannot proceed, so it voluntary calls wait The thread now waits in the waiting state while other threads try to enter the monitor object When a thread executing a synchronized method completes, it can notify a waiting thread to become ready again and then eligible to reenter the monitor (attempting to obtain the lock on the object) If a thread calls notifyAll, then all threads waiting for the object become eligible to reenter the monitorЁ(ў џ3ўDџ3ўџ3ў-џ3ў" џ3ўџ3ўџ3ў(џ3ўџ3ў" џ3ўIџ3ўЊn ‹   P ѓЗŸЈ'JCL: Producer/Consumer Relationship (1)Њ " ŸЈ7Buffer Shared memory region Producer thread Generates data to add to buffer Calls wait if consumer has not read previous message in buffer Writes to empty buffer and calls notify for consumer Consumer thread Reads data from buffer Calls wait if buffer empty Threads must be synchronized to avoid corrupted dataЁўZZZ”ZZ2Z6Z&џ3ўVџ3ўџ3ў6Њ7 ѓЙŸЈ'JCL: Producer/Consumer Relationship (2)Њ " ѓКŸЈ'JCL: Producer/Consumer Relationship (3)Њ " ѓЛŸЈ'JCL: Producer/Consumer Relationship (4)Њ " ѓМŸЈ'JCL: Producer/Consumer Relationship (5)Њ " ѓ ПŸЈ'JCL: Producer/Consumer Relationship (6)Њ " ѓ!РŸЈ'JCL: Producer/Consumer Relationship (7)Њ " ѓ"СŸЈ'JCL: Producer/Consumer Relationship (8)Њ " ѓ#ТŸЈ'JCL: Producer/Consumer Relationship (9)Њ " ѓНŸЈ(JCL: Producer/Consumer Relationship (10)Њ # ѓОŸЈ(JCL: Producer/Consumer Relationship (11)Њ # ѓ$УŸЈJCL: Daemon ThreadsЊ  ŸЈAThreads that run for benefit of other threads Run in the background (when processor time is available that would otherwise go to waste) Do not prevent program from terminating (unlike conventional user threads) Garbage collector is a daemon thread A thread is designated as a daemon with the method call setDaemon(true)Ё8BZдџ3ўMџ3ўЊ.2    ѓ(ЧŸ >JCL: Esercizio  Message bufferЊ.Ÿ  Un processo produttore deposita una sequenza illimitata di messaggi in un buffer di dimensione N, bloccandosi quando il buffer ш completo Un processo consumatore estrae i messaggi dal buffer nell ordine di arrivo, bloccandosi quando il buffer ш vuoto Le posizioni del buffer liberate dal consumatore vengono riutilizzate dal produttore Produttore e consumatore accedono al buffer in mutua esclusioneЁ8‘Z_1Њѓ)ШŸ HJCL: Esercizio  Readers and WritersЊ<Ÿ 4N processi reader ed M processi writer accedono in modo concorrente ad una struttura dati comune (ad esempio contenente le prenotazioni sui voli di una compagnia aerea) I processi reader (che non modificano i dati) possono accedere simultaneamente alla struttura I processi writer (che possono modificare i dati) possono accedere alla struttura unicamente in mutua esclusione con ogni altro processo I processi writer hanno precedenza rispetto ai processi reader Suggerimento: implementare un monitor avente i seguenti metodi readRequest, readRelease, writeRequest, writeRelease ogni processo effettua una Request prima dell accesso ai dati ed una Release al termineЁvZZ  XO$'?P# ЊL W‚&?    " ъј[ я `№ џџџџџџџ™џџџ–––`№ џџџ€€€Ь™33ЬЬЬџВВВ`№ џџџ333ннн€€€MMMъъъ`№ џџЬff3€€3™3€3ЬџЬf`№ џџџ€€€џЬfџЬЬРРР`№ џџџ€€€РРРfџџ™`№ џџџ€€€3™џ™џЬЬЬВВВЃ>џ§?" dd@џџяџџџџџџџ3ўЃ’џ§?иddи@џџяџџџџџџ €Їд В" а@0№`АЛ€ Ѓnџ§?" dd@џџяџџџџџџ   @@``€€PЃR    @ ` €`Ѓ pЃ>€Ѓ> q №i № № №( № №№х № ƒ №0€L “ №6€h ‚ƒ„ПЫџ?"ёП€€№К 0№  №QŸЈCЁ @ ўЊ№Ъ №?L  №ŒB NC NEСFСПРЫg Юабзџ?ˆ№џЭMЭMЭMЭMЭM@ЌЌ`€"ёП€€№Œ уь C№Э №@L “ №6€` ‚ƒ„ПЫџ?"ёП€€№Љ р p №QŸЈEЁ @ ўЊ№Ъ №AL  №ŒB NC NEСFСПРЫg Юабзџ?ˆ№џЭMЭMЭMЭMЭM@ЌЌ`€"ёП€€№|умC№Э №BL “ №6€а ‚ƒ„ПЫџ?"ёП€€№™аp №QŸЈFЁ @ ўЊ№Ъ №CL  №ŒB NC NEСFСПРЫg Юабзџ?ˆ№џЭMЭMЭMЭMЭM@ЌЌ`€"ёП€€№œ вќ 2 №Э №DL “ №6€@ ‚ƒ„ПЫџ?"ёП€€№К џ№ `  №QŸЈGЁ @ ўЊ№Ъ №EL  №ŒB NC NEСFСПРЫg Юабзџ?ˆ№џЭMЭMЭMЭMЭM@ЌЌ`€"ёП€€№œ С ќ ! №Э №FL “ №6€ф ‚ƒ„ПЫџ?"ёП€€№К я № P  №QŸЈHЁ @ ўЊ№Ъ №GL  №ŒB NC NEСFСПРЫg Юабзџ?ˆ№џЭMЭMЭMЭMЭM@ЌЌ`€"ёП€€№Œ С ь ! №н №HL “ №6€\# ‚ƒ„ПЫџ?"ёП€€№Љ я р P  №aŸЈIЁ. @ў ўЊ№Ъ №IL  №ŒB NC NEСFСПРЫg Юабзџ?ˆ№џЭMЭMЭMЭMЭM@ЌЌ`€"ёП€€№œ  ќ я №Э №JL “ №6€Ј' ‚ƒ„ПЫџ?"ёП€€№К П №  №QŸЈJЁ @ ўЊ№Ъ №KL  №ŒB NC NEСFСПРЫg Юабзџ?ˆ№џЭMЭMЭMЭMЭM@ЌЌ`€"ёП€€№Œ  ь я №Э №LL “ №6€@+ ‚ƒ„ПЫџ?"ёП€€№Љ П р  №QŸЈKЁ @ ўЊ№й №ML “ №6€/ ‚ƒ„ПЫџ?"ёП€€№S OVА №]ŸЈ Ready threadsЁ @ ўЊ№Ш №NL # №ŠB NC NEСFСПРЫg Юабвгзџ?ˆ№џшM@ЌЌ€"ёП€€№Ь †Ь №Ш №OL # №ŠB NC NEСFСПРЫg Юабвгзџ?ˆ№џЮM@ЌЌ€"ёП€€№Ь ЄЬ №Ш №PL # №ŠB NC NEСFСПРЫg Юабвгзџ?ˆ№џЮM@ЌЌ€"ёП€€№Ь ƒЬ ф№Ш №QL # №ŠB NC NEСFСПРЫg Юабвгзџ?ˆ№џЮM@ЌЌ€"ёП€€№Ь rЬ г№Ш №RL # №ŠB NC NEСFСПРЫg Юабвгзџ?ˆ№џЭM@ЌЌ€"ёП€€№Ь ` Ь С №Ш №SL # №ŠB NC NEСFСПРЫg Юабвгзџ?ˆ№џЮM@ЌЌ€"ёП€€№Ь . Ь  №й №TL “ №6€А3 ‚ƒ„ПЫџ?"ёП€€№А ў  №]ŸЈThread.MIN_PRIORITYЁ @ Њ№й №UL “ №6€t7 ‚ƒ„ПЫџ?"ёП€€№@ў   №]ŸЈThread.MAX_PRIORITYЁ @ Њ№к №VL “ №6€h; ‚ƒ„ПЫџ?"ёП€€№№ $ P  №^ŸЈThread.NORM_PRIORITYЁ @ Њ№H №L ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВює7я € Є7№œ7р№6ˆH№47№( № №H№r №H S №€DA Пџ№Аhр№У   № ž№r №zH S №€B Пџ№А  Р№У   № ž№6№’ № З  №ˆH №#"ёJŸ У>rrrrrrrrrrrrrr№ З № №ƒH г №N€|K Пннн‚€ПРџ?Пџ"ёП‚‚№А  Ф №‰ŸЈReturns this thread's name.Ё ЊІј @`€№Л №H г №N€ŒW Пннн‚€ПРџ?Пџ"ёП‚‚№А Ф №'ŸЈString getName ()ЁH    Њ4ђѓџ!0пђѓџ!0пІј @`€№љ №}H г №N€Ь_ Пннн‚€ПРџ?Пџ"ёП‚‚№А Ф p №eŸЈWaits for this thread to die.Ё Іј @`€№š №{H г №N€Мj Пннн‚€ПРџ?Пџ"ёП‚‚№ФА p №ŸЈ void join ()ЁP     Њ@ђѓџ!0п Іј @`€№ №_H г №N€dt Пннн‚€ПРџ?Пџ"ёП‚‚№А h  №|ŸЈAllocates a new Thread object.Ё,   Іј @`€№ђ №]H г №N€Р~ Пннн‚€ПРџ?Пџ"ёП‚‚№hА  №^ŸЈ&Thread (Runnable target, String name) Ё.' џ3ў  џ3ўЊ@ ђѓџ!0пђѓџ!0пђѓџ!0пІј @`€№ №H г №N€Аˆ Пннн‚€ПРџ?Пџ"ёП‚‚№А  М №|ŸЈAllocates a new Thread object.Ё,   Іј @`€№T №H г №N€Ј’ Пннн‚€ПРџ?Пџ"ёП‚‚№А М №РŸЈ Thread () Ё.  џ3ў џ3ўЊђѓ!0пІј @`€№ №H г №N€L› Пннн‚€ПРџ?Пџ"ёП‚‚№А М h №|ŸЈAllocates a new Thread object.Ё,   Іј @`€№П №H г №N€ЌЇ Пннн‚€ПРџ?Пџ"ёП‚‚№МА h №+ŸЈThread (Runnable target) Ё< џ3ў џ3ў џ3ўЊ< ђѓ!0пђѓ!0пІј @`€№ №H г №N€рА Пннн‚€ПРџ?Пџ"ёП‚‚№А  Р №|ŸЈAllocates a new Thread object.Ё,   Іј @`€№ž № H г №N€ К Пннн‚€ПРџ?Пџ"ёП‚‚№А Р № ŸЈThread (String name)Ё. џ3ў џ3ўЊ.ђѓџ!0пђѓџ!0пІј @`€№ №!H г №N€ќУ Пннн‚€ПРџ?Пџ"ёП‚‚№А Р l №|ŸЈAllocates a new Thread object.Ё,   Іј @`€№љ №"H г №N€Я Пннн‚€ПРџ?Пџ"ёП‚‚№РА l №eŸЈ+Thread (ThreadGroup group, Runnable target)Ё., џ3ў% џ3ўЊB  ђѓ!0пђѓ!0пђѓ!0п#Іј @`€№A №'H г №N€HШ Пннн‚€ПРџ?Пџ"ёП‚‚№А ˜ З  №­ŸЈeCauses the currently executing thread object to temporarily pause and allow other threads to execute.Ёff Іј @`€№Ї №(H г №N€@ф Пннн‚€ПРџ?Пџ"ёП‚‚№˜ А З  №ŸЈstatic void yield()Ёp џ3ў     Њ& ђѓ!0п Іј @`€№V №)H г №N€Фю Пннн‚€ПРџ?Пџ"ёП‚‚№А y ˜  №ТŸЈdCauses this thread to begin execution; the Java Virtual Machine calls the run method of this thread.Ё,eJ   Іј @`€№‘ №*H г №N€Мљ Пннн‚€ПРџ?Пџ"ёП‚‚№y А ˜  №§ŸЈ  void start()Ё`     Њ&ђѓ!0п Іј @`€№R №+H г №N€јПннн‚€ПРџ?Пџ"ёП‚‚№А Z y  №ОŸЈvCauses the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds.Ёww Іј @`€№Ф №,H г №N€ЌПннн‚€ПРџ?Пџ"ёП‚‚№Z А y  №0ŸЈstatic void sleep(long millis)Ёp џ3ў     Њ8 ђѓ!0п Іј @`€№ №-H г №N€pПннн‚€ПРџ?Пџ"ёП‚‚№А Ў Z  №lŸЈ$Changes the priority of this thread.Ё%% Іј @`€№У №.H г №N€Ќ%Пннн‚€ПРџ?Пџ"ёП‚‚№Ў А Z  №/ŸЈ#void setPriority (int newPriority) ЁP$     ЊR ђѓ!0пІј @`€№ №/H г №N€p.Пннн‚€ПРџ?Пџ"ёП‚‚№А  Ў  №…ŸЈ=Marks this thread as either a daemon thread or a user thread.Ё>> Іј @`€№Џ №0H г №N€œ9Пннн‚€ПРџ?Пџ"ёП‚‚№ А Ў  №ŸЈvoid setDaemon (boolean on)ЁP      ЊF ђѓ!0пІј @`€№љ №1H г №N€ЬGПннн‚€ПРџ?Пџ"ёП‚‚№А p   №eŸЈЇIf this thread was constructed using a separate Runnable run object, then that Runnable object's run method is called; otherwise, this method does nothing and returns.ЁXЈ0      D Њ,/  QІј @`€№™ №2H г №N€hSПннн‚€ПРџ?Пџ"ёП‚‚№pА   №ŸЈ void run ()ЁP     Њ@ђѓ!0пІј @`€№ №3H г №N€0\Пннн‚€ПРџ?Пџ"ёП‚‚№А l  №…ŸЈ=Returns a reference to the currently executing thread object.Ё>> Іј @`€№ш №4H г №N€дgПннн‚€ПРџ?Пџ"ёП‚‚№lА  №TŸЈstatic Thread currentThread ()Ё` џ3ў    Њ< ђѓ!0п ђѓ!0пІј @`€№ŒB №5H г №NПннн‚€ПРџ3Ыœ1зџ ?Пџ"ёП‚‚№ №†B №6H У №HПннн‚€ПРџ3Ыœ1џ ?Пџ"ёП‚‚№ №†B №7H У №HПннн‚€ПРџ3Ыœ1џ ?Пџ"ёП‚‚№  №†B №8H У №HПннн‚€ПРџ3Ыœ1џ ?Пџ"ёП‚‚№Ў Ў №†B №9H У №HПннн‚€ПРџ3Ыœ1џ ?Пџ"ёП‚‚№Z Z №†B №:H У №HПннн‚€ПРџ3Ыœ1џ ?Пџ"ёП‚‚№y y №†B №;H У №HПннн‚€ПРџ3Ыœ1џ ?Пџ"ёП‚‚№˜ ˜ №ŒB №№6№№!T№Ю№( № №T№r №T S №€˜HПџ№Аhр№У   № ž№s№F №0Р €  №T №ˆ№ ``№Œ №T г №N…‡ППРЫjJџ?Пџ"ёП‚‚№0Р € №‰Ђ №T У №H€PhППРџ3ЫjJџ?Пџ"ёП‚‚№0Р y  №ћŸЈ-Methods inherited from class java.lang.ObjectЁ6.В o2 џ3ў ЊD"ђѓџ!0п'(№Ё№j №`PY  №!T №#"ё"Ÿ Уrrrr№``i №y №T г №N€œ™Пннн‚€ПРџ?Пџ"ёП‚‚№, Ч Y  №хŸЈЋCauses current thread to wait until either another thread invokes the notify() method or the notifyAll() method for this object, or a specified amount of time has elapsed.ЁnЌF      D Њ2F Dђѓ!0пFNђѓ!0п]hІј @`€№І №T г №N€ІПннн‚€ПРџ?Пџ"ёП‚‚№`Ч , Y  №ŸЈvoid wait (long timeout)ЁP    Њ@ђѓ!0п Іј @`€№G № T г №N€ˆЎПннн‚€ПРџ?Пџ"ёП‚‚№, ЈЧ  №ГŸЈyCauses current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object.Ёnz?       Њ2? ђѓ!0п?Gђѓ!0пVaІј @`€№š №T г №N€`ППннн‚€ПРџ?Пџ"ёП‚‚№`Ј, Ч  №ŸЈ void wait ()ЁP     Њ@ђѓ!0п Іј @`€№ №T г №N€\ЧПннн‚€ПРџ?Пџ"ёП‚‚№, ќЈ №‡ŸЈ?Wakes up all threads that are waiting on this object's monitor.Ё@@ Іј @`€№ №T г №N€œбПннн‚€ПРџ?Пџ"ёП‚‚№`ќ, Ј №љŸЈvoid notifyAll ()Ё>    Њ@ ђѓ!0пІј @`€№ №T г №N€кПннн‚€ПРџ?Пџ"ёП‚‚№, Pќ №ŠŸЈBWakes up a single thread that is waiting on this object's monitor.ЁCC Іј @`€№Ё №T г №N€DфПннн‚€ПРџ?Пџ"ёП‚‚№`P, ќ № ŸЈ void notify ()Ё`     Њ4ђѓ!0п Іј @`€№ŒB №T г №NПннн‚€ПРџ3Ыœ1зџ ?Пџ"ёП‚‚№`PP№†B №T У №HПннн‚€ПРџ3Ыœ1џ ?Пџ"ёП‚‚№`ќќ№†B №T У №HПннн‚€ПРџ3Ыœ1џ ?Пџ"ёП‚‚№`ЈЈ№†B №T У №HПннн‚€ПРџ3Ыœ1џ ?Пџ"ёП‚‚№`Ч Ч №ŒB №T г №NПннн‚€ПРџ3Ыœ1зџ ?Пџ"ёП‚‚№`Y Y №ŒB №T г №NПннн‚€ПРџ3Ыœ1зџ ?Пџ"ёП‚‚№`P`Y №†B №T У №HПннн‚€ПРџ3Ыœ1џ ?Пџ"ёП‚‚№, P, Y №ŒB №T г №NПннн‚€ПРџ3Ыœ1зџ ?Пџ"ёП‚‚№PY №H №T ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюFя € і№ю№ \ ё№v№( № №\№r №\ S №€иŸПџ№Аhр№У   № ž№Ф№8 №Р@1 № \№@P1№  №\ “ №6€Д Пњм˜ПРџ №Р@в1 № ŸЈ“1 // ThreadTester.java 2 // Multiple threads printing at different intervals. 3 4 public class ThreadTester { 5 6 public static void main( String [] args ) 7 { 8 // create and name each thread 9 PrintThread thread1 = new PrintThread( "thread1" ); 10 PrintThread thread2 = new PrintThread( "thread2" ); 11 PrintThread thread3 = new PrintThread( "thread3" ); 12 13 System.err.println( "Starting threads" ); 14 15 thread1.start(); // start thread1 and place it in ready state 16 thread2.start(); // start thread2 and place it in ready state 17 thread3.start(); // start thread3 and place it in ready state 18 19 System.err.println( "Threads started, main ends\n" ); 20 21 } // end main 22 23 } // end class ThreadTester 24 ЁŒ”В иg ___ўg €ўg ўg ___ў4g €ўg ўg ___ўg ўg ___ўg џўg ўg џўg ўg ___ўg ўg ___ўg ўg џўg ўg џўg ўg џўg ўg ___ўg ўg ___ўg ўg €ўg ўg ___ўg ўg џўg ў g ™џўg ўg ___ўg ўg џўg ў g ™џўg ўg ___ўg ўg џўg ў g ™џўg ўg ___ў g ўg ___ўg ўg ™џўg ўg ___ў g ўg ___ўg ў,g €ўg ўg ___ўg ў,g €ўg ўg ___ўg ў,g €ўg ўg ___ў g ўg ___ўg ўg ™џўg ўg ___ў g ўg ___ўg ў g €ўg ўg ___ўg ўg ___ўg ўg €ўg ўg ___ўG ЊD    ^   8  G                  5  +  j    Іјида№№-Ђ №\ У №H€дП™ЬџПРџ?Пџˆ"ёП‚‚№0€є №ŸŸЈcreate three PrintThreadsЁ<( 2 b cbЊ&     №ŒB №\B г №NПDПРбџ?Пџˆ"ёП‚‚№@@0№ Ђ №\ У №H€фП™ЬџПРџ?Пџˆ"ёП‚‚№0@  №~ŸЈcall start methodsЁ<( 2bc bЊ  №ŒB № \B г №NПDПРбџ?Пџˆ"ёП‚‚№pК0Р №H №\ ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюя € Ю№Ц№ `0ё №J№( № №`№r №` S №€ Пџ№Аhр№У   № ž№˜№8 № @А1 № `№@ А1№ђ  №` “ №6€„•Пњм˜ПРџ № @В1 №„ ŸЈ25 // class PrintThread controls thread execution 26 class PrintThread extends Thread { 27 private int sleepTime; 28 29 // assign name to thread by calling superclass constructor 30 public PrintThread( String name ) 31 { 32 super( name ); 33 34 // pick random sleep time between 0 and 5 seconds 35 sleepTime = ( int ) ( Math.random() * 5001 ); 36 } 37 38 // method run is the code to be executed by new thread 39 public void run() 40 { 41 // put thread to sleep for sleepTime amount of time 42 try { 43 System.err.println( 44 getName() + " going to sleep for " + sleepTime ); 45 46 sleep( sleepTime ); 47 } 48ЁђВ иg ___ў=g €ўg ўg ___ўg џў g ўg џў%g ўg ___ўg ўg џўg ўg џў0g ўg ___ў>g ўg ___ўg ў:g €ўg ўg ___ўg ўg џў5g ўg ___ўg ўg ___ўg ўg џў g ўg ___ў g ўg ___ўg ў1g €ўg ўg ___ўg ўg џўg ўg ™џўg ўg ___ў g ўg ___ўg ўg ___ўg ў?g €ўg ўg ___ўg ўg џўg ўg џў1g ўg ___ў?g ўg ___ўg ў8g €ўg ўg ___ўg ўg џў6g ўg ___ў?g ўg ___ўg ўg ™џўg ўg ___ў?g ўg ___ў8g ўg ___ў?g ўg ___ўG ЊD   6   >   —      Ј     5   t  6     `   f Іјида№№2Ђ №` У №H€˜П™ЬџПРџ?Пџˆ"ёП‚‚№pјPl №ЄŸЈPrintThread extends ThreadЁL( 2 c bcbЊ   №ŒB №`Т г №NПDПРбџ?Пџˆ"ёП‚‚№ 0pР№'Ђ №` У №H€$ˆП™ЬџПРџ?Пџˆ"ёП‚‚№p‚Аі №™ŸЈ!Constructor initializes sleepTimeЁ."( 2b cЊ&    №ŒB № `Т г №NПDПРбџ?Пџˆ"ёП‚‚№Рp6№1Ђ № ` У №H€ЄŒП™ЬџПРџ?Пџˆ"ёП‚‚№ Р €Ю  №ЃŸЈ7When the thread enters the running state, run is calledЁ<8( 2*bc bЊ 8 №ŒB № `Т г №NПDПРбџ?Пџˆ"ёП‚‚№  р №H №` ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВю я € У №Л №d№S №( № №d№r №d S №€ ’Пџ№Аhр№У   № ž№Ф №d “ №6€1Пњм˜ПРџ № №Ё №^ŸЈ˜49 // if thread interrupted during sleep, print stack trace 50 catch ( InterruptedException exception ) { 51 exception.printStackTrace(); 52 } 53 54 // print thread name 55 System.err.println( getName() + " done sleeping" ); 56 57 } // end method run 58 59 } // end class PrintThreadЁў™В иg ___ўg ў8g €ўg ўg ___ўg ўg џў4g ўg ___ў?g ўg ___ў?g ўg ___ў?g ўg ___ўg ў8g €ўg ўg ___ў&g ўg ™џў g ўg ___ў?g ўg ___ўg ў9g €ўg ўg ___ўg ўg ___ўg ўg €ўG ЊŽY  6      Ш    Іјида№№е №d “ №6€Ф2ППРџ №` № №oŸЈЯStarting threads Threads started, main ends   thread1 going to sleep for 1217 thread2 going to sleep for 3989 thread3 going to sleep for 662 thread3 done sleeping thread1 done sleeping thread2 done sleeping Ёpа,g ўc Œg ўg C Њ а №H №d ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюЈя € X№P0№ 7D№ш№( № №D№r №D S №€ЮПџ№Аhр№У   № ž№r №7D S №€аЮПџ№ар€Р №У  № ž№М№^ №p №6D №#"ёŸ У r№ В№й №D г №N€<%Пннн‚€ПРџ?Пџ"ёП‚‚№  p №EŸЈЏWhen an object implementing interface Runnable is used to create a thread, starting the thread causes the object's run method to be called in that separately executing thread.ЁBА&  E  : Њ% ‚Іј @`€№ №D г №N€ЈёПннн‚€ПРџ?Пџ"ёП‚‚№p   №ћŸЈ  void run()Ё`      Њ&ђѓ!0п Іј @`€№ŒB №D г №NПннн‚€ПРџ3Ыœ1зџ ?Пџ"ёП‚‚№№ŒB №D г №NПннн‚€ПРџ3Ыœ1зџ ?Пџ"ёП‚‚№p№ŒB №D г №NПннн‚€ПРџ3Ыœ1зџ ?Пџ"ёП‚‚№p№ŒB №D г №NПннн‚€ПРџ3Ыœ1зџ ?Пџ"ёП‚‚№pp№†B №D У №HПннн‚€ПРџ3Ыœ1џ ?Пџ"ёП‚‚№  p  №H №D ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюдя € „№|@№ №№( № № №x №  c №$€є Пџˆ№Аhр№У   № ž№\№F №Р@1 №  №ˆ№@P1№Ь  №  “ №6€x@Пњм˜ПРџ №Р@в1 №^ ŸЈД1 // RunnableTester.java 2 // Multiple threads printing at different intervals. 3 4 public class RunnableTester { 5 6 public static void main( String [] args ) 7 { 8 // create and name each thread 9 Thread thread1 = new Thread( new PrintThread(), "thread1" ); 10 Thread thread2 = new Thread( new PrintThread(), "thread2" ); 11 Thread thread3 = new Thread( new PrintThread(), "thread3" ); 12 13 System.err.println( "Starting threads" ); 14 15 thread1.start(); // start thread1 and place it in ready state 16 thread2.start(); // start thread2 and place it in ready state 17 thread3.start(); // start thread3 and place it in ready state 18 19 System.err.println( "Threads started, main ends\n" ); 20 21 } // end main 22 23 } // end class RunnableTester 24 ЁzЕВ иg ___ўg €ўg ўg ___ў4g €ўg ўg ___ўg ўg ___ўg џўg ўg џўg ўg ___ўg ўg ___ўg ўg џўg ўg џўg ўg џўg ўg ___ўg ўg ___ўg ўg €ўg ўg ___ўg ўg џўg ў g ™џўg ўg ___ўg ўg џўg ў g ™џўg ўg ___ўg ўg џўg ў g ™џўg ўg ___ў g ўg ___ўg ўg ™џўg ўg ___ў g ўg ___ўg ў,g €ўg ўg ___ўg ў,g €ўg ўg ___ўg ў,g €ўg ўg ___ў g ўg ___ўg ўg ™џўg ўg ___ў g ўg ___ўg ў g €ўg ўg ___ўg ўg ___ўg ўg €ўg ўg ___ўЊі   ^  8  h   >   >   7  +  j   Іјида№№Ђ №  Г №B€˜AП™ЬџПРџ?Пџ"ёП‚‚№0€є №€ŸЈcreate three ThreadsЁ<( 2 bcbЊ  №†B № B У №HПDПРбџ?Пџ"ёП‚‚№@@0№Ђ №  Г №B€GП™ЬџПРџ?Пџ"ёП‚‚№0@  №~ŸЈcall start methodsЁ<( 2bc bЊ  №†B № B У №HПDПРбџ?Пџ"ёП‚‚№pК0Р №H №  ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВю я € К№ВP№ Єё№>№( № №Є№x №Є c №$€ДПџˆ№Аhр№У   № ž№9 №Є Ѓ №<€шПњм˜ПРџ ˆ№@ Ва№`ˆXŠPК___PPT9‹2Ќ* ( №e ŸЈћ25 // class PrintThread controls thread execution 26 class PrintThread implements Runnable { 27 private int sleepTime; 28 29 // assign sleep time 30 public PrintThread() 31 { 32 // pick random sleep time between 0 and 5 seconds 33 sleepTime = ( int ) ( Math.random() * 5001 ); 34 } 35 36 // method run is the code to be executed by new thread 37 public void run() 38 { Thread cT = Thread.currentThread(); 41 // put thread to sleep for sleepTime amount of time 42 try { 43 System.err.println( 44 cT.getName() + " going to sleep for " + sleepTime ); 45 46 Thread.sleep( sleepTime ); 47 } 48ЁžАВ иcГ ищВ иg ___ў=g €ўg ўg ___ўg џў g ў g џў'g ўg ___ўg ўg џўg ўg џў0g ўg ___ў>g ўg ___ўg ўg €ўg ўg ___ўg ўg џў(g ўg ___ўg ўg ___ў g ўg ___ўg ў1g €ўg ўg ___ўg ўg џўg ўg ™џўg ўg ___ў g ўg ___ўg ўg ___ўg ў?g €ўg ўg ___ўg ўg џўg ўg џў<g ўcg ўg ___ўg ў8g €ўg ўg ___ўg ўg џў6g ўg ___ў?g ўg ___ўg ўg ™џўg ўg ___ў?g ўg ___ў?g ўg ___ў?g ўg ___ўЊ’   6      /   ˜   }     т      c   t  6       g   f Іј @`€ №IЂ №Є У №H€ЉП™ЬџПРџ?Пџˆ"ёП‚‚№p €~ №УŸЈPrintThread implements RunnableЁL ( 2 c bcbЊ4      №„B №ЄР г №NПDПРбџ?Пџˆ"ёП‚‚№0  №Ђ №Є У №H€ьЏП™ЬџПРџ?Пџˆ"ёП‚‚№`pАд №™ŸЈ!Constructor initializes sleepTimeЁ."( 2b cЊ&    №„B №ЄР г №NПDПРбџ?Пџˆ"ёП‚‚№юРp№)Ђ № Є У №H€МДП™ЬџПРџ?Пџˆ"ёП‚‚№а €о  №ЃŸЈ7When the thread enters the running state, run is calledЁ<8( 2*bc bЊ 8 №„B № ЄР г №NПDПРбџ?Пџˆ"ёП‚‚№0  № №H №Є ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВю6 я € ц №о `№Ј№v №( № №Ј№x №Ј c №$€,МПџˆ№Аhр№У   № ž№с №Ј “ №6€ДчПњм˜ПРџ № №Ё №{ŸЈ›49 // if thread interrupted during sleep, print stack trace 50 catch ( InterruptedException exception ) { 51 exception.printStackTrace(); 52 } 53 54 // print thread name 55 System.err.println( cT.getName() + " done sleeping" ); 56 57 } // end method run 58 59 } // end class PrintThreadЁўœВ иg ___ўg ў8g €ўg ўg ___ўg ўg џў4g ўg ___ў?g ўg ___ў?g ўg ___ў?g ўg ___ўg ў8g €ўg ўg ___ў)g ўg ™џў g ўg ___ў?g ўg ___ўg ў9g €ўg ўg ___ўg ўg ___ўg ўg €ўG ЊЈY  6        Ш    Іјида№№е №Ј “ №6€@сППРџ №` № №oŸЈЯStarting threads Threads started, main ends   thread1 going to sleep for 1217 thread2 going to sleep for 3989 thread3 going to sleep for 662 thread3 done sleeping thread1 done sleeping thread2 done sleeping Ёpа,g ўc Œg ўg C Њ а №H №Ј ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюфя € ”№Œp№h№$№( № №h№r №h S №€жПџ№Аhр№У   № ž№r №h S №€ЬжПџ№@€@ №У  № ž№H №h ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюфя € ”№Œ€№p№$№( № №p№r №p S №€МПџ№Аhр№У   № ž№r №p S №€xПџ№№р˜№У  № ž№H №p ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюфя € ”№Œ№l№$№( № №l№r №l S №€ˆПџ№Аhр№У   № ž№r №l S №€DПџ№pр˜№У  № ž№H №l ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВю'я € з№Я № t ё№W№( № №t№r №t S №€є7Пџ№Аhр№У   № ž№Ѕ№8 № А №t№ А№ №t “ №6€ŒpПњм˜ПРџ №  №ЋŸЈЕ1 // SynchronizedBuffer.java 2 // SynchronizedBuffer synchronizes access to a single shared integer. 3 4 public class SynchronizedBuffer { 5 private int buffer = -1; // shared by producer and consumer threads 6 private int occupiedBufferCount = 0; // count of occupied buffers 7 8 // place value into buffer 9 public synchronized void set( int value ) 10 { 11 // for output purposes, get name of thread that called this method 12 String name = Thread.currentThread().getName(); 14 // while there are no empty locations, place thread in waiting state 15 while ( occupiedBufferCount == 1 ) { 17 // output thread information and buffer information, then wait 18 try { 19 System.err.println( name + " tries to write." ); 20 System.err.println( "Buffer full. " + name + " waits.\n" ); 21 wait(); 22 } 24 // if waiting thread interrupted, print stack trace 25 catch ( InterruptedException exception ) { 26 exception.printStackTrace(); 27 } 28 } // end whileЁ^ ЖВ иg ___ўg €ўg ўg ___ўEg €ўg ўg ___ўg ўg ___ўg џўg ўg џўg ўg ___ўg ўg џўg ўg џў g ўg ™џўg ў*g €ўg ўg ___ўg ўg џўg ўg џўg ўg ™џўg ўg €ўg ўg ___ўg ўg ___ўg ўg €ўg ўg ___ўg ўg џўg ў g џўg ўg џўg ўg џў g ўg ___ўg ўg ___ўg ўBg €ўg ўg ___ў5g ўg ___ўg ўg ___ўg ўDg €ўg ўg ___ўg ўg џўg ўg ™џўg ўg ___ў g ўg ___ў g ў>g €ўg ўg ___ў g ўg џўg ўg ___ў'g ўg ™џўg ў g ___ўg ўg ™џў g ў g ™џўg ўg ___ўg ўg ___ў g ўg ___ўg ўg ___ў g ў3g €ўg ўg ___ў g ўg џў&g ўg ___ў5g ўg ___ўg ў g €ўЊ^     M    K  {  „     m  —  7  Б  +  + Іј @`€ №s№@ №p Ак  №t№p Ак №ћЂ №t У №H€ьqП™ЬџПРџ?Пџˆ"ёП‚‚№№ Ак  №mŸЈWait while the buffer is filledЁ ( 2 bЊ  №ŒB №tТ г №NПDПРбџ?Пџˆ"ёП‚‚№0  №` №ŒB №tТ г №NПDПРбџ?Пџˆ"ёП‚‚№p0 №` №-Ђ №t У №H€tvП™ЬџПРџ?Пџˆ"ёП‚‚№А € №ŸŸЈ#Method set is declared synchronizedЁL$( 2bc b cЊ $ №ŒB №tB г №NПDПРбџ?Пџˆ"ёП‚‚№@`АР№H №t ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюŸя € O№GА№ x@ё№Ч№( № №x№r №x S №€dlПџ№Аhр№У   № ž№№8 № Ар  №x№ Ар №Y  №x “ №6€ФGПњм˜ПРџ № вр  №ыŸЈЧ30 31 buffer = value; // set new buffer value 32 33 // indicate producer cannot store another value 34 // until consumer retrieves current buffer value 35 ++occupiedBufferCount; 36 37 displayState( name + " writes " + buffer ); 38 39 notify(); // tell a waiting thread to enter ready state 40 41 } // end method set; releases lock on SynchronizedBuffer 42 43 // return value from buffer 44 public synchronized int get() 45 { 46 // for output purposes, get name of thread that called this method 47 String name = Thread.currentThread().getName(); 48Ё>ШВ иg ___ў g ўg ___ўg ўg €ўg ўg ___ў g ўg ___ўg ў/g €ўg ўg ___ўg ў0g €ўg ўg ___ўg ўg ___ў g ўg ___ўg ў g ™џў g ўg ___ўg ўg ___ўg ў-g €ўg ўg ___ў g ўg ___ўg ў7g €ўg ўg ___ўg ўg ___ўg ўg €ўg ўg ___ўg ўg џўg ў g џўg ўg џўg ўg ___ўg ўg ___ўg ўBg €ўg ўg ___ў6g ўg ___ўg ўЊЌй     Џ  M  ‚      Іјида№№яЂ №x У №H€ЄП™ЬџПРџ?Пџˆ"ёП‚‚№pр К №aŸЈWrite to the bufferЁ( 2bЊ  №ŒB №xТ г №NПDПРбџ?Пџˆ"ёП‚‚№@рpZ№іЂ №x У №H€D П™ЬџПРџ?Пџˆ"ёП‚‚№€`А: №hŸЈIncrement the buffer countЁ( 2bЊ  №ŒB № xТ г №NПDПРбџ?Пџˆ"ёП‚‚№€ Р€к№ђЂ № x У №H€ П™ЬџПРџ?Пџˆ"ёП‚‚№P€Z №dŸЈAlert a waiting threadЁ( 2bЊ  №ŒB № xB г №NПDПРбџ?Пџˆ"ёП‚‚№Pp№-Ђ №x У №H€CП™ЬџПРџ?Пџˆ"ёП‚‚№ P №Ф  №ŸŸЈ#Method get is declared synchronizedЁL$( 2bc b cЊ $ №ŒB №xB г №NПDПРбџ?Пџˆ"ёП‚‚№p  p №H №x ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюя € /№'Р№|@ё№Ї№( № №|№r №| S №€|JПџ№Аhр№У   № ž№ѕ№8 №0 №|№0Р№Š  №| “ №6€Пњм˜ПРџ №0 № ŸЈв49 // while no data to read, place thread in waiting state 50 while ( occupiedBufferCount == 0 ) { 51 52 // output thread information and buffer information, then wait 53 try { 54 System.err.println( name + " tries to read." ); 55 System.err.println( "Buffer empty. " + name + " waits.\n" ); 56 wait(); 57 } 59 // if waiting thread interrupted, print stack trace 60 catch ( InterruptedException exception ) { 61 exception.printStackTrace(); 62 } 63 64 } // end while 65 66 // indicate that producer can store another value 67 // because consumer just retrieved buffer value 68 --occupiedBufferCount; 69 70 displayState( name + " reads " + buffer ); 71 72 notify(); // tell a waiting thread to become ready to execute 73 74 return buffer;ЁJгВ иg ___ўg ў7g €ўg ўg ___ўg ўg џўg ўg ™џўg ўg ___ўG g ___ў g ў>g €ўg ўg ___ў g ўg џўg ўg ___ў'g ўg ™џўg ў g ___ўg ўg ™џў g ў g ™џўg ўg ___ўg ўg ___ў g ўg ___ўg ўg ___ў g ў3g €ўg ўg ___ў g ўg џў&g ўg ___ў)g ўg ___ў g ўg ___ўg ўg ___ўg ў g €ўg ўg ___ўg ўg ___ўg ў2g €ўg ўg ___ўg ў/g €ўg ўg ___ўg ўg ___ўg ўg ___ўg ў g ™џў g ўg ___ўg ўg ___ўg ў3g €ўg ўg ___ўg ўg ___ўg ўg џў g ўЊЦX  ‘  6  В  +  Ч     ˜ Іјида№№r№@ № 0 к №|№ 0 к№њЂ №| У №H€pП™ЬџПРџ?Пџˆ"ёП‚‚№р  к №lŸЈWait while the buffer is emptyЁ( 2bЊ  №ŒB №|Т г №NПDПРбџ?Пџˆ"ёП‚‚№ 0р `№ŒB №|Т г №NПDПРбџ?Пџˆ"ёП‚‚№ 0р `№іЂ № | У №H€аП™ЬџПРџ?Пџˆ"ёП‚‚№`а Њ  №hŸЈDecrement the buffer countЁ( 2bЊ  №ŒB № |Т г №NПDПРбџ?Пџˆ"ёП‚‚№@ 0 `J №ђЂ № | У №H€ќ П™ЬџПРџ?Пџˆ"ёП‚‚№ № 0Ъ  №dŸЈAlert a waiting threadЁ( 2bЊ  №ŒB № |B г №NПDПРбџ?Пџˆ"ёП‚‚№€ №эЂ №| У №H€№ П™ЬџПРџ?Пџˆ"ёП‚‚№€ 0z №_ŸЈReturn the bufferЁ( 2bЊ  №ŒB №|B г №NПDПРбџ?Пџˆ"ёП‚‚№` €`№H №| ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюкя € Š№‚а№€№№( № №€№r №€ S №€lПџ№Аhр№У   № ž№h №€ “ №6€МaПњм˜ПРџ №P`Р0  №ŸЈ№75 76 } // end method get; releases lock on SynchronizedBuffer 77 78 // display current operation and buffer state 79 public void displayState( String operation ) 80 { 81 StringBuffer outputLine = new StringBuffer( operation ); 82 83 outputLine.append("\t\t" + buffer + "\t" + occupiedBufferCount ); 84 System.err.println( outputLine ); 85 System.err.println(); 86 } 87 88 } // end class SynchronizedBufferЁШёВ иg ___ўg ўg ___ўg ў7g €ўg ўg ___ўg ўg ___ўg ў-g €ўg ўg ___ўg ўg џўg ўg џў"g ўg ___ўg ўg ___ў g ўg џўg ўg ___ўg ўg ___ўg ўg ™џў g ўg ™џўg ўg ___ў(g ўg ___ўg ўg ___ўg ўg ___ўg ўg ___ўg ў g €ўЊ6  W   ,        !         /   Іјида№№H №€ ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВю-я € н №е р№Œ№m №( № №Œ№r №Œ S №€”Пџ№Аhр№У   № ž№Л  №Œ “ №6€ˆ\Пњм˜ПРџ №0B‘ №U ŸЈS1 // Producer.java 2 // Producer's run method controls a thread that 3 // stores values from 1 to 4 in sharedLocation. 4 5 public class Producer extends Thread { 6 private SynchronizedBuffer sharedLocation; // reference to shared object 7 8 // constructor 9 public Producer(SynchronizedBuffer shared ) 10 { 11 super( "Producer" ); 12 sharedLocation = shared; 13 } 14 15 // store values from 1 to 4 in sharedLocation 16 public void run() 17 { 18 for ( int count = 1; count <= 4; count++ ) { 19 20 // sleep 0 to 3 seconds, then place value in Buffer 21 try { 22 Thread.sleep( ( int ) ( Math.random() * 3001 ) ); 23 sharedLocation.set( count ); 24 } 25ЁшTВ иg ___ўg €ўg ўg ___ў/g €ўg ўg ___ў/g €ўg ўg ___ўg ўg ___ўg џўg ўg џў g ўg џў g ўg ___ўg ўg џў$g ўg €ўg ўg ___ўg ўg ___ўg ўg €ўg ўg ___ўg ўg џў&g ўg ___ўg ўg ___ўg ўg џўg ў g ™џўg ўg ___ў g ўg ___ўg ўg ___ўg ўg ___ўg ў-g €ўg ўg ___ўg ўg џўg ўg џўg ўg ___ўg ўg ___ўg ўg џўg ўg џў g ўg ™џў g ўg ™џўg ўg ___ў g ўg ___ў g ў3g €ўg ўg ___ў g ўg џўg ўg ___ўg ўg џўg ўg ™џўg ўg ___ў+g ўg ___ў g ўg ___ўЊрv  J ! [  D  E  9  А  !  % Іјида№№H №Œ ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВю я € Н№Е№№№M№( № №№r № S №€ьПџ№Аhр№У   № ž№› № “ №6€DэПњм˜ПРџ №€РвЁ  №5ŸЈЅ26 // if sleeping thread interrupted, print stack trace 27 catch ( InterruptedException exception ) { 28 exception.printStackTrace(); 29 } 30 31 } // end for 32 33 System.err.println( getName() + " done producing." + 34 "\nTerminating " + getName() + ".\n"); 35 36 } // end method run 37 38 } // end class ProducerЁЎІВ иg ___ў g ў4g €ўg ўg ___ў g ўg џў&g ўg ___ў)g ўg ___ў g ўg ___ўg ўg ___ўg ў g €ўg ўg ___ўg ўg ___ў&g ўg ™џўg ўg ___ў g ўg ™џўg ўg ™џўg ўg ___ўg ўg ___ўg ўg €ўg ўg ___ўg ўg ___ўg ўg €ўG ЊЈ[  +  S    ,     V Іјида№№H № ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюя € Ж№Ў№”№F№( № №”№r №” S №€МЃПџ№Аhр№У   № ž№”  №” “ №6€ Пњм˜ПРџ №02 №. ŸЈ„1 // Consumer.java 2 // Consumer's run method controls a thread that loops four 3 // times and reads a value from sharedLocation each time. 4 5 public class Consumer extends Thread { 6 private Buffer sharedLocation; // reference to shared object 7 8 // constructor 9 public Consumer( Buffer shared ) 10 { 11 super( "Consumer" ); 12 sharedLocation = shared; 13 } 14 15 // read sharedLocation's value four times and sum the values 16 public void run() 17 { 18 int sum = 0; 20 for ( int count = 1; count <= 4; count++ ) { 21 22 // sleep 0 to 3 seconds, read value from Buffer and add to sum 23 try { 24 Thread.sleep( ( int ) ( Math.random() * 3001 ) ); 25 sum += sharedLocation.get(); 26 }Ё”…В иg ___ўg €ўg ўg ___ў:g €ўg ўg ___ў9g €ўg ўg ___ўg ўg ___ўg џўg ўg џў g ўg џў g ўg ___ўg ўg џўg ўg €ўg ўg ___ўg ўg ___ўg ўg €ўg ўg ___ўg ўg џўg ўg ___ўg ўg ___ўg ўg џўg ў g ™џўg ўg ___ўg ўg ___ўg ўg ___ўg ўg ___ўg ў<g €ўg ўg ___ўg ўg џўg ўg џўg ўg ___ўg ўg ___ўg ўg џўg ўg ™џўg ўg ___ўg ўg ___ўg ўg џўg ўg џў g ўg ™џў g ўg ™џўg ўg ___ў g ўg ___ў g ў>g €ўg ўg ___ў g ўg џўg ўg ___ўg ўg џўg ўg ™џў g ўg ___ў)g ўg ___ў g ўG Њм  \  Є  .  W     Й  <   Іјида№№H №” ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюБя € a№Y№˜№ё№( № №˜№r №˜ S №€œ#Пџ№Аhр№У   № ž№? №˜ “ №6€d}Пњм˜ПРџ №@0  №йŸЈЁ28 // if sleeping thread interrupted, print stack trace 29 catch ( InterruptedException exception ) { 30 exception.printStackTrace(); 31 } 32 } 33 34 System.err.println( getName() + " read values totaling: " + sum + 35 ".\nTerminating " + getName() + ".\n"); 36 37 } // end method run 38 39 } // end class ConsumerЁVЂВ иg ___ў g ў4g €ўg ўg ___ў g ўg џў&g ўg ___ў)g ўg ___ў g ўg ___ўg ўg ___ўg ўg ___ў&g ўg ™џў g ўg ___ў g ўg ™џўg ўg ™џўg ўg ___ўg ўg ___ўg ўg €ўg ўg ___ўg ўg ___ўg ўg €ўG ЊЈ[  +  A    :     V Іјида№№H №˜ ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВю|я € ,№$ №„ ё№Ќ№( № №„№r №„ S №€hПџ№Аhр№У   № ž№ь №„ Ѓ №<€$ТПњм˜ПРџ ˆ№аТ№`ˆXŠPК___PPT9‹2Ќ*  №ŸЈ(1 // SharedBufferTest.java 2 // SharedBufferTest creates producer and consumer threads. 3 4 public class SharedBufferTest { 5 6 public static void main( String [] args ) 7 { 8 // create shared object used by threads 11 SynchronizedBuffer sharedLocation = new SynchronizedBuffer(); 12 13 // Display column heads for output 14 StringBuffer columnHeads = new StringBuffer( "Operation" ); 16 columnHeads.append("\t\t\tBuffer\tOccupied_Count" ); 17 System.err.println( columnHeads ); 18 System.err.println(); 19 sharedLocation.displayState( "Initial State\t" ); 20 21 // create producer and consumer objects 22 Producer producer = new Producer( sharedLocation ); 23 Consumer consumer = new Consumer( sharedLocation ); 25 producer.start(); // start producer thread consumer.start(); // start consumer thread 28 } // end main 30 } // end class SharedBufferTestЁМЉВ и=Г иCВ иg ___ўg €ўg ўg ___ў:g €ўg ўg ___ўg ўg ___ўg џўg ўg џўg ўg ___ўg ўg ___ўg ўg џўg ўg џўg ўg џўg ўg ___ўg ўg ___ўg ў'g €ўg ўg ___ў*g ўg џўg ўg ___ў g ўg ___ўg ў"g €ўg ўg ___ў!g ўg џўg ў g ™џўg ўg ___ўg ўg ™џўg ўg ___ў)g ўg ___ўg ўg ___ў#g ўg ™џўg ўg ___ў g ўg ___ўg ў'g €ўg ўg ___ўg ўg џўg ўg ___ўg ўg џўg ўg ___ўg ўg €ўg ўg ўg €ўg ___ў g ўg ___ўg ў g €ўg ___ўg ўg ___ўg ўg €ўЊњ     C  8  P !   N             "            ˆ  2  Ћ   Іј @`€ №№8 № р†  №„№P 0ж №*Ђ № „ У №H€№УП™ЬџПРџ?Пџˆ"ёП‚‚№ рt  №œŸЈ Create a Producer and a ConsumerЁL!( 2 bcb cЊ ! №ŒB № „B г №NПDПРбџ?Пџˆ"ёП‚‚№У † №H №„ ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюГя € c№[0№ˆ№ѓ№( № №ˆ№r №ˆ S №€МЫПџ№Аhр№У   № ž№A №ˆ “ №6€№ЬППРџ №0€ q №лŸЈ{Operation Buffer Occupied_Count Initial State -1 0 Consumer tries to read. Buffer empty. Consumer waits. Producer writes 1 1 1 Consumer reads 1 1 0 Consumer tries to read. Buffer empty. Consumer waits. Producer writes 2 2 1 Consumer reads 2 2 0 Producer writes 3 3 1 Consumer reads 3 3 0 Consumer tries to read. Buffer empty. Consumer waits. Producer writes 4 4 1 Consumer reads 4 4 0 Producer done producing. Terminating Producer. Consumer read values totaling: 10. Terminating Consumer.Ё0Т 2К|g ўЊ | №H №ˆ ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюфя € ”№Œ@№œ№$№( № №œ№r №œ S №€АгПџ№Аhр№У   № ž№r №œ S №€lдПџ№№р˜№У  № ž№H №œ ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюфя € ”№ŒP№Ќ№$№( № №Ќ№r №Ќ S №€кПџ№Аhр№У   № ž№r №Ќ S №€РкПџ№№р˜№У  № ž№H №Ќ ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВюфя € ”№Œ`№А№$№( № №А№r №А S №€l Пџ№Аhр№У   № ž№r №А S №€ќ Пџ№ р˜ №У  № ž№H №А ƒ №0ƒ“@—”оНhПџ ?№ џџџ€€€Ь™33ЬЬЬџВВВr”’T ѕaшh а pјq nсœћdкфжl3КEрZзžЏЂУ ›ЄЪКqЬјсыo*къљ$2*0Ћm‡™”24ѕœ ю5E ўџр…ŸђљOhЋ‘+'Гй00L `hŒЄ МШ ш є  фPresentazione di PowerPointSilvano RivoiraSilvano Rivoira211Microsoft PowerPointrPo@А]Eх@аЁбќАС@№ZЫ•€§Фб GKџџџџ; *  ‚%б$&џџџџ &џџџџ&#џџџџTNPPЌИ2џџOMi & TNPPє &џџџџ&TNPP    џџџ б$A Ьo ( o`E€€€€€€€€€РРРРмР№ЪІ """)))UUUMMMBBB999€|џPPџ“жџьЬЦжяжччЉ­3f™Ь3333f3™3Ь3џff3fff™fЬfџ™™3™f™™™Ь™џЬЬ3ЬfЬ™ЬЬЬџџfџ™џЬ3333f3™3Ь3џ3333333f33™33Ь33џ3f3f33ff3f™3fЬ3fџ3™3™33™f3™™3™Ь3™џ3Ь3Ь33Ьf3Ь™3ЬЬ3Ьџ3џ33џf3џ™3џЬ3џџff3fff™fЬfџf3f33f3ff3™f3Ьf3џffff3fffff™ffЬf™f™3f™ff™™f™Ьf™џfЬfЬ3fЬ™fЬЬfЬџfџfџ3fџ™fџЬЬџџЬ™™™3™™™™Ь™™33™f™3Ь™џ™f™f3™3f™f™™fЬ™3џ™™3™™f™™™™™Ь™™џ™Ь™Ь3fЬf™Ь™™ЬЬ™Ьџ™џ™џ3™Ьf™џ™™џЬ™џџЬ™3ЬfЬ™ЬЬ™3Ь33Ь3fЬ3™Ь3ЬЬ3џЬfЬf3™ffЬf™ЬfЬ™fџЬ™Ь™3Ь™fЬ™™Ь™ЬЬ™џЬЬЬЬ3ЬЬfЬЬ™ЬЬЬЬЬџЬџЬџ3™џfЬџ™ЬџЬЬџџЬ3џfџ™Ь3џ33џ3fџ3™џ3Ьџ3џџfџf3Ьffџf™џfЬЬfџџ™џ™3џ™fџ™™џ™Ьџ™џџЬџЬ3џЬfџЬ™џЬЬџЬџџџ3Ьџfџџ™џџЬffџfџffџџџffџfџџџf!Ѕ___www†††–––ЫЫЫВВВзззнннуууъъъёёёјјј№ћџЄ  €€€џџџџџџџџџџџџттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттыттттттттттятттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттяттттттттттттттттттттятяmтт’ттттяятяяяятяяяяяяяяяяяяятяяяяятяяяяяяяяятяяяяттяятяяяяяяяяяяятяяяяттттятяяяяяяяяяяяяяяятяяятятяяяяяяяятяяятяяяяттятяяяятяятяттяяяяяттяяяяяятятттттттттттmттmяттяттятяяяяятяяяяяяяяяяяяятяяяяятяяяяяяяяятяяяяттяятяяяяяяяяяяятяяяяттятяяяяяяяяяяяяяяяяятяяятятяяяяяяяятятятятяяяяятяяяятяятяяяяяяяятттяяяяяяятттттттттттъттmттыытттяятяттттттяттттттттттттяятяттттттттттттятттттттятттяттттттттяттттттяяттяятттттттятттттяятяятттятттттяяттяяяятттттттттяятяттттяттттяттттттяттттттттттэытъттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттыт’ттmытттяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяятттттттттт’тытттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттэттттэттятттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттятттттттттяттттяттятттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттяттттттттттятттттттятттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттятттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттЇЇтЇЇЇЇЇЇтЇтЇЇттЇЇЇтЇЇЇтЇтЇЇЇЇтЇЇЇттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттЇттЇЇЇЇЇттЇтЇтттЇтЇтЇЇттЇтЇтЇЇтЇтЇттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттЇЇтЇЇЇЇЇЇтЇЇЇЇттЇЇЇЇЇЇттЇтЇЇтЇЇЇЇтттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттЇттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттЇЇтттттттттттттттттттттттттттттттттттттттттттттЇтттттЇЇЇтЇЇттЇЇЇЇЇЇтЇЇЇЇтЇЇттЇЇтЇтЇЇЇЇтЇЇЇттЇЇЇЇЇтттЇтЇтЇЇЇЇтЇтЇтЇЇЇЇтЇЇЇЇттЇЇЇЇттЇЇЇтЇтЇЇЇттЇЇЇтЇЇтЇЇЇЇЇЇЇЇЇЇттЇтЇЇЇЇЇЇЇЇЇЇЇЇтЇЇЇЇтттттттттттттттттттттттттттттЇЇтттЇтттЇтттЇЇттЇЇтЇтЇЇтЇЇттЇЇЇЇтЇтЇЇтЇЇтттЇЇтЇЇтттЇтЇтЇЇЇттЇтЇтЇЇтЇтЇтЇЇттЇтЇЇтЇЇЇттЇтЇЇЇттЇтЇтЇЇтЇтЇЇтЇтЇЇЇттЇтЇЇтЇЇЇЇЇЇтЇЇтЇЇтЇтттттттттттттттттттттттттттттЇЇтттЇтттЇЇттЇЇтЇЇЇтЇЇтЇЇтЇттЇЇЇтЇЇЇтЇтЇЇЇттЇЇтЇЇтттЇтЇЇтЇЇЇтЇЇЇЇтЇЇттЇЇЇЇттЇЇЇЇтЇтЇЇтЇЇЇЇЇттЇЇЇЇтЇЇЇЇЇЇтЇЇЇЇЇттЇЇтЇЇтЇЇЇЇЇЇтЇЇтЇЇтттттттттттттттттттттттттттттЇтттттЇтттттттттттттттттттттттттттттттЇтттттттттЇЇттЇттттттттттттттттттттЇтттттЇттттттттттттттттЇтттттттттттЇтттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттт&&т&&&&&т&&&т&&т&&&&тттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттт&&т&&т&&т&&&т&&т&&&&ттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттт&тттт&ттт&тттттт&тттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттт&ттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттт&&&&&&т&&&&&т&т&&т&&&&&&&&&&т&т&&ттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттт&&&&&&т&&&&&т&т&&т&т&&&т&т&&т&т&&тттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттт&&тттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттт&тттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттт&&&&&&т&&т&&т&&т&&&т&&&&&&&&&&т&т&&ттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттт&&&&&&т&&т&&т&&т&&&т&т&&&т&т&&т&т&&ттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттЇЇтттттттттттттттттттттттттттттттттттттттттттЇЇЇттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттЇтЇЇЇЇЇЇЇЇЇЇЇЇтЇЇЇЇттЇЇтЇЇЇЇЇЇтЇтЇЇттЇЇтЇЇЇЇтЇттЇЇЇтЇЇЇттЇтЇтЇтЇтЇЇтЇЇЇЇЇЇЇЇЇтЇЇтЇЇЇЇтЇЇтЇЇЇЇтЇтЇЇтЇтЇЇЇЇтттттттттттттттттттттттттттттттттттттттттттттттттттттттЇтЇЇтЇЇЇЇЇЇтЇЇтЇЇтЇттЇттЇЇЇЇЇттЇтЇтттЇттЇЇЇттЇЇтЇтЇтЇЇтттЇтЇтЇтЇтЇЇтЇтЇЇтЇЇтЇтЇттЇтЇЇтЇттЇтЇЇтЇтЇттЇтЇтЇттттттттттттттттттттттттттттттттттттттттттттттттттттттттЇЇтЇЇтЇЇЇЇЇЇтЇЇтЇЇтттЇЇтЇЇЇЇЇЇтЇЇЇЇттЇЇтЇЇЇЇтЇЇЇЇтЇтЇЇЇттЇтЇЇттЇЇтЇтЇЇтЇЇЇЇЇттЇЇтЇЇтЇЇЇЇтЇЇтЇЇЇЇЇЇтЇЇЇЇЇЇттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттЇттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттЇЇтттттттттттттттттттЇтЇЇтттттттттттттттттЇттттттттттттттЇтттттттттттттттттттЇттттттттттттттттттттттттттттттттттттттттттЇтттттЇттЇтЇЇЇттЇЇЇЇЇЇЇттЇЇтЇЇЇЇттЇЇЇЇтЇтЇЇЇЇЇтЇтЇЇЇЇтЇЇЇтЇттЇтЇтЇЇтЇЇЇЇЇЇЇтЇЇЇЇЇтЇттЇЇЇЇЇЇЇЇЇтЇЇЇттЇЇЇтЇтЇЇтЇЇЇЇЇЇЇЇтЇттттттттттттттттттттттттттттттттттттттттттЇЇтттЇЇтЇтЇтЇттЇЇЇтЇтЇтЇЇЇтЇЇЇтттЇЇЇттЇтЇЇтЇттЇтЇтЇЇтЇЇЇтЇттЇтЇтЇЇтЇтЇЇтЇттЇЇЇЇЇттттЇтЇЇтЇЇЇЇтЇЇтттЇтЇтЇтЇттЇЇтЇтЇЇЇтЇттттттттттттттттттттттттттттттттттттттттттЇЇтттЇтЇЇтЇтЇттЇЇЇЇЇЇЇтЇтЇтЇЇЇтттЇЇЇЇтЇЇЇЇтЇЇтЇЇтЇЇЇтЇЇЇтЇттЇтЇЇтЇЇЇЇтЇЇЇЇтЇЇЇЇЇттттЇЇЇЇтЇЇЇЇтЇЇтттЇЇЇЇЇЇЇЇтЇЇтЇЇЇЇЇтЇтттттттттттттттттттттттттттттттттттттттттЇтттттЇЇЇтттЇттттттттттттттттЇттттттттттттттттттттттттттЇттттЇттттттттттттттттттттттттттттттЇтттттттттЇтттттттттттЇттЇттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттжтжтнттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттцжтттттddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddтттттттттттттттжтнтттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттЖтнтжтттттттттттттттттттттттттттттттттттттт&&&тттттттттттттттттттттттттттттттттттттттттттт&ттттттттттттттттттттттттттттттттт&&&&ттттттттттттттттттттттттттттттттутттттттттттттттттттт&&&&&т&&&тт&тт&тт&т&&&&тт&&&&&т&&&т&&т&тт&&т&&&&т&&т&&&&т&т&&т&т&&&тт&т&т&т&&&&&т&&т&&&т&&&&т&&&&&&&&т&&ттт&ттттттттттттттттттттттттттттттт”т”ттттттттттттттттттт&&ттт&ттттттт&&т&т&т&&&т&&&т&т&&&т&&т&тт&тт&т&&т&тт&т&&т&т&тт&т&т&тт&т&&&т&&т&&т&&т&т&т&&&тт&&т&т&&&т&&&тт&тттттттттттттттттттттттттттттттНттттттттттттттттттттт&&ттт&тттт&тт&т&&&&&т&&&&&&т&&т&&&т&т&тт&&т&&т&&&&т&&т&&&&&&т&&&&&тт&тт&т&&&т&&т&&т&&&&т&&&т&&т&&&&&&т&&&т&ттттттттттттттттттттттттттттттттттттттттттттттттт&&&&&&ттттттт&&&тттттттттттттттттттттттттттттттттттттттттттттттттттт&т&ттт&ттт&тттттт&ттттттттттт&ттттттт&тттттттттттттттттттттттттттттЇЇљљтттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттЇЇљЇттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттЇтЇљтЇЇтттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттЇЇтљЇЇттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттњ-ќ-&TNPP &џџџџўџеЭеœ.“—+,љЎ0|ˆЈШаир ш №ј   фA4 (21x29,7 cm)Politecnico di Torino Šu э %Times New Roman WingdingsSymbolComic Sans MSLucida ConsoleArialArial Unicode MSStruttura predefinita,JCL: Programmi concorrenti (Multithreading)JCL: Thread statesJCL: Life cycle of threads JCL: Thread priority schedulingJCL: Thread Class (1)JCL: Thread Class (2)(JCL: Creating and Executing Threads (1)(JCL: Creating and Executing Threads (2)(JCL: Creating and Executing Threads (3)JCL: Runnable Interface (1)JCL: Runnable Interface (2)JCL: Runnable Interface (3)JCL: Runnable Interface (4) JCL: Thread Synchronization (1) JCL: Thread Synchronization (2)(JCL: Producer/Consumer Relationship (1)(JCL: Producer/Consumer Relationship (2)(JCL: Producer/Consumer Relationship (3)(JCL: Producer/Consumer Relationship (4)(JCL: Producer/Consumer Relationship (5)(JCL: Producer/Consumer Relationship (6)(JCL: Producer/Consumer Relationship (7)(JCL: Producer/Consumer Relationship (8)(JCL: Producer/Consumer Relationship (9))JCL: Producer/Consumer Relationship (10))JCL: Producer/Consumer Relationship (11)JCL: Daemon Threads JCL: Esercizio – Message buffer%JCL: Esercizio – Readers and Writers Caratteri utilizzatiModello strutturaTitoli diapositiveі'_Р‘уŠ6єбSilvano RivoiraSilvano Rivoira ўџџџ!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ      !"#$%&'()*+,-./0123456789:;ўџџџ=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abўџџџdefghijўџџџlmnopqrўџџџ§џџџ§џџџ§џџџwўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџRoot Entryџџџџџџџџd›OЯ†ъЊЙ)шўџџџPicturesџџџџџџџџџџџџм>Current UserџџџџџџџџkSummaryInformation(џџџџ<`LPowerPoint Document(џџџџџџџџџџџџ Ў6DocumentSummaryInformation8џџџџџџџџcџџџџџџџџџџџџџџџџџџџџџџџџRoot Entryџџџџџџџџd›OЯ†ъЊЙ)шp †‚љХ{€Picturesџџџџџџџџм>Current UserџџџџџџџџџџџџASummaryInformation(џџџџ<`L      !"#$%&'()*+,-./0123456789:;ўџџџ=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abўџџџdefghijўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џџџ§џџџџџџџџџџџўџџџw§џџџўџџџўџџџџџџџџџџџџџџџџџџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџі#_Р‘уŠ6 єLuca ArditoLuca Ardito