жІ•…D 94&+ 9 9 Wa_ЫŒф0Љ-UљMФѕџSиA–4Iу†УgнНЧу3†–…ЅзS\эETmeпЧяЫЊe]ѕ%ž›лЊAєŸ=Ёњ{waƒ}с&ТщЂэ{`uV#ЈZиЫ.@^џщРš›ЇYДљњPЭлaП›‘-7WЉat„І.А[ї* ƒkоAllФшНCі\|hdŒ!юцAн ї• ќ ГИЯ—ь™Э)0yљdm‹‰в&ї‰ 6ђПОJCмcб‘žRя4э'Яn-ŽК2КzY}/ Я/*фIB"JdаrW+W=!„ЋЯLЬ-ПЏxЬ};Н(Џ=’ш ‘ќCNаёВџ…ˆcЪHXqЎкŠ–р;rJ#ІЉыœ„ьRЦu‡іŠЏžэЌ!ьžIIы[‰Ouл–МBWЯVd'ђЌм}8ЛгfўаБтіTwf‘Є`ёЌ”xђЮ_ wjЎуOк ŠNтЄFfЏиЏ‘%/jхЈЊс%кsѓ'‘– ЋњКчњд,Шvюœq<kgАЁГиlSШ` O СЭ$Bќj x]t­У˜ї:ЯюœUъЋ&ќ ћж‹Ў”ŠЇЧѓ›XFвW:йˆЖйм†кЮжЈlOGŸМKНWї/fћCŽ Юk@,љУУKGgѓіGџ,™HэRAŠњ9Xќ?zz–(Гž!ю~ќEm`хца˜;Ьpzюnђ;ћђ> ЖaЇ~ыё\мG‡ UІяvrƒ DjzžІ`їиё+ЗFЊ06ђœy'Жš:,Cm}ЄBЅЁџэ шŒГ!јˆžRфсЗА“Џ"гœzЧt4T`ИСУ|XзŸИД'AЬїзвЉС‘пŠЬ ИхъвtA!џƒ>}њЯщŠЊs F›ЉEЪn–]ЙB†ЧИ†ˆn›—ЖяŒau39Ч@fdШСјг]ИWэЦ‡wєЈz•ЦоW;Рd‰њУњ?єїСЊ›Ї#ЌИ~<‡jКЩFfpШвВ}ŽЎ8T@цZ•F“ ћ9T8€Ч>ђZфИАo–ЅдхGЄ‹ИgБм 4'ЋіŽYЙБалч§ŸёгЖt>?§csДX Y>ћшмМъИПЛrzПsAљџПХc:l]šAЭ\B€?€?€?жІ•…D 9 209 9 WaL {­Уyaa‚H6ˆЎƒ=mDўaУв ЊЖIiф“OљЩАakry€œО…П1CНЉИё'Œclі™^ZdАVPQЬ pm&”#)Tsѕч†}AbЁфѕ‘ЃXTЉ–6”<Г)OeЩЄrРЃЗџ‚Y§> мнѕi™*Х§”]ЩёmгЬR„„ШУaюK2’ТЄ`kФ4aўѕуz…‡((ѕ†ВИ§ЫoЋе!!E‡љb@мєўм=Х"XЈМRCG‚+[[Žх$<_x'[Нн6Œ9ЕќМ]фgВd/ЫƒАљ )Š‹E“ьНPЂXЄЖˆ9‰^›эQ*IXbі„6z§е3[6ЩoЗTЭІ1ј(бэA3K ]Kлxрt8ym76^G5NœхyћnЕЙяхeЁЃ‹‹iб4ыŠи‘аŒƒВyJЗеК—b 4њ,[$ТVСО(<&AmЈ\MœbOцКч™ЙЄejє№O’СУнœxжыЏTo,C#Ѕ=їЎ7УсfYcŽk›Ы`f…ЭhЗ?žЫDЁ2{т\Ь]мЙоRшSnџ‡Xс†јУ~g%RАг1}ˆK20|‡MKњЩ2МHОOАЖЄ].>D/Lн9 Ь sБ zEЪ ~Zhfc4кЖ€‚TЎіЦуЪ ^эS’"‰ [f(Hl#’цЃЛ^z˜ЌЈЁw ]ЛФskі‡ЂУюmСЭЊНЂ™lOпCLњ„—Ѓј)1ќŒРэ­2aлї4Ѕ.}EgwdО%тЗ іщёЯZтШv u$‡:љ#aCД­Р™ая‹Џ]ёы)m…tЫцЎ9Rwъ)Oœ№ИOgUIЬsЬмkјЂ#ПQ“IL ЎŸ<ЇвЅtўтьЄдз•U›ап ЌЗпhќ’Т"ˆЂ‚ЎjВ’_†€zАЃOwiX2н 18ЧTртtрУьaџљ‡Й:Є;МжwPЅВœs{ѕ -eц$УХ4Ль§RёBB)ƒВ“IgЬ/S,™и/шŠЃяPH{ІтЗ?uЄэ,„ˆIЊ‡ иЦюI‘ћцъ?іџяІж—Ÿrъ(ЇХi\зWсИ–\m[щЌb`вџ†ўЉ†suœ€ну‡дuђьА…ZA}So2Lцl‰Ядм…9a^dЖ7xђЄдcЁp%.ТдmЕњєшАTбШ поˆђЦwvШкIЧoS#QЃётщŒЬU(-*Ьžї@ЪH™ qY‚ў9‘T- ‡y§бмSМ[P‚AКл,!]Зџ’sЊdЩБщІeєC~оГjžщ јїPрu№E/ЪiNsа шЛWсvиE,ѕ‰=уЛ0OсйJ$ZќzuЊR%wЯРˆћOѕKЭrxО6иV[UЕ%й‚ї№ЋsсGQХ 5b›>&Оъ||hя№oXTF„И$ bsЭИо%пџлYЯюq‹QXюЩъWoTЅОјбчДh+ПїТ›onя]zžІftлАы0AwЬ­hC%!J „†YфŽIТ\в†Еl!ЊПиЃхцЇ‚ш‡шњ›­ jШ1L“Ъ Šт^Їв`mыЕЮQRKћF€)оўKпžt­Бds‚зс…В‡ъъHюk›Щ№@:ЭЁеdЇЋI-хˆ{iEђAМ99{џп#§KLDБћj€юИY,bш˜&ŽD+сѓ •^€ќŽp}68>aC‚b‡Хщ˜­SГJ0гd…z‰jўn2Ъe9jЄсЭвZЪфЈDѓН7нмЫемviћfЧx‡^`"зЫC)Є‰…мЉeЦ=c4Fц9l^ujU‘нQSжf нEр&щC§шЩ‘J^*Ћ0œАvHЭ5‘]Аќ2Йо Žй)˜х$БшпЬnа1ЎЃAЫ&Ю>ŒQњžдEю БPg8Bi Œ$њц5Кб”Ы$C=/‹Nќ‚т№&ЦШXф=оР@$7Œ9(к­$N,;ђМK69kbUfаьEVЎ€ž~U*ФХШ-msŒлyпmv“ѕџ0§зzПNя+ќ ѕЈд^ЉSjйvЂ{§№ц{–Б:[ЕŒQп(ŠХ,ж,Œџ”,Џ7oFф4агщф*ЖЄ›‚^Ў`tџЙ’~\•#vzг'њ>е“ЧАЏб0ђрЈŽЂ0‰=ъйn?§џ>€О A€?€?€?€?жІ•…D 9 +6519 9 Waq.lYe6щжМr5iБСўШ3ѕЪкn.o•žƒ…ƒз4BTNї>›ЕIZ ё%8=w^Ќ!В‹ю‡мЯЮ'КVз Ѕ§ћЏћвЊю‰†+ П9АQioiOчоIkаkRFiтprЮЊЄЩџ“xiWK™u ИsБA%u§AѕРЖpпї'|ћ~Й+uYо0шю8iw„й•oћФ9ˆu‰ЫЛb'О “o:ЪЭz"/ТО}>ЇПЭIyДЬxНяX‰ёƒш=wIЂŽІ@Мну^шm6рЧнFгuр$54\MЯ)B*~Ш’мЯ€ЫnБ—КVFфHЃ ЂšŒ—kТХXk‚тOjрIr™:ЭФtѕ…DМЈиЛе?{ќ€ф№ьŠ9›єЋXD@‚Bй"К#мКь Д;]ь…ЃбПoХ]“[uъ5pуvh,>кЕЅџŽJXc‡8џ*Ье1†uŒ9џќй-Ш]ЅfБpЯa‡}lo‹='zаЈаІ(ф1Ћ[тf‘i2HgBё9 #НУђr•Шš|,ХslX9T›F\m“FІѕї Жѓpё\’Д/E)kфJФI€СУ|Ћp$~JSѕŠrˆб›R?Oђ(Yў›ƒ;$Z(tб~„т›O€`њQ SЦvЧqЃ8 † гlg]ю.цC>l‚[;­4Ёк 5дoBШˆ@R>О(ИY~Љ8;ў&мSЙ#x–уЦkЋ\‰eLU(Јy›Ђ9GСАU'бЃžЧэ(УSDj}bЊkJАрТ_јЙlьгяDГЃjŽЦДг}є„Ы†\#{РVпRaAТч5ѓ<$>ž—— ЄуMХЕ5V”яQбќ]еRКёAџv‘-‹–…- ЛH,›ЕилHЁО[<šnЈЁ] ŽХ*lЎ‡ћdЂ~7НЦuьЎЋuiЪ—ЌыѓВ јcђ*o­Єд№ dnу.ЎвˆИ NE Žƒе§XjЩйї—•ыџp9ч‹З“"ЖЮћ†a€Д=ма‹ўЋbа?НЃ­8Awу$Ч†Гya‹ ЕwŠд šTТЖяDД&YЎюŒYFФдбюНАЮnžб@z|KƒЁЮПж›;?eЫn”ФAЊ“Еu!j6Ъ3зЏёзhц\!Y}П р-uEurмц†œ>ž=ЄљLZ„єЈO˜XЏ5! W^;ДmŽдшЧжА,gВT‚‘N‰CbѓsбсЫeЃaѕї•\Fѕ№=7ПЬыа&иqU…tи AгcЈVЯІKRє†.яEјjЉа‡&"ЅGэКП&†б/(•]Њ|ЕьЕИЊђ‘ŽMр‚ЙВ8 ьY’gыkй‡mБР2_S$ТXE_Оy ПНІŒЋМ›Ѓx?­m†BЫ9?№0?ХZ)О@єžС€?€?€?жІ•…D 9 58:09 9 WaX(Бq'ѕ`Oљ­tЦ­‡xпћœTЗ “дЃžІН]V7э‘гBсШ;tђбм\mр Лžкђ‹пО#к­ždTHokHbЌ)ы_кКцж}pRj.њ ђѕЫ­юžА€к№еK›Е. iъЄ•$kђЇwzi^л§z{ŽоLІ7…зШзKrнxЪ zуэ[)еђžЃ;„6`ШЧ‚h\лќC7œF;{ѓђ\вŸїоTYжй”'WЦ"ЁdСt›ѓig4NЧIŽ\Iіˆ?ЈЄ'3ѕ#ž~iЕmšQiSе ї™зQЗkVу_єл№@ЪZ})M$ \™ЗяЛgЇ‚Ям82OKІFЬsт ы’“н™],ЖдЅ_’n№Iеlrp[Ля*„xtап­ќdьр  |p,Ю r?šp\c•ЋжcV‚.ОТЌoМvЏЧЂLљŒg"ptЏ-"В@§СИСCїН'>з6<єO‡/RY‰ъЁYž“Ћ“ѓЛ zћvƒЦЄ!џ+|Б1t Ў@яЛLNˆ%=њlИ“ы;Џob7щ˜1 а‡x)`{/}Sšž‡–ЄкhpЏ‡q1лt€7j’лї0kмэLР§і4эUмwЋѕVo`:yiї3J‡ЕВюЛ М!ЖЏфbЉМŽœь›zМЇIŸ7<ŠН‡5)7–ˆёlэbLшЛ%ћSsEї<rиwЦ*ЌЖ3ТіШЉFЯ€й>2‘}0€8„vZУаЩLІiе­LŠёiЂЋЂ4WбnGVр/}ЩЁэЬџН'ЛGхAљвйя\u ˜`OЖэUY•+§/+ ЗЙ,лFђ_ƒА0ЗЇЊДБШ'бКHУ‚&­ѓ6ЃаХ‰ўM,КŸa‡z7дсМ—ђabгл|^ё%ъOFлЕy?ѕ№W@(MbчN%пЗРu Ъ†{фІb9*їлB[yDдФ7сШ|ЫЕч†•–![ˆ#RФЕЯ}y3ПKя ъ6в$mгГ$y)їLОТ$35•йЯЮfџў"Л~D]tЩ2‘Ш™ьТg.гкНљP_s&аВ"XŽгXсu MЅЭ‡‚э>uКїАrqњчœa№.ŠGбЫШ‘šЮ-ЫbќлБGƒ4џаъЪ’ђh”žwOЛрGжС3Иј|ба:і’l~kwюРX”№Б­<]В•Џw&зhˆЯ2К­mЋп­Ъ(’˜ѕи˜=СƒМjЋGh–[і`jвnч7Б0hй*UP™ѕЃђG}"Л>ЖŠЛМvUМh4nПœJлAБXz>I;x?yљAиA€?€?€?А H 00000CamChaseжІ•…D 94&+ 9 9 Wa_ЫŒф0Љ-UљMФѕџSиA–4Iу†УgнНЧу3†–…ЅзS\эETmeпЧяЫЊe]ѕ%ž›лЊAєŸ=Ёњ{waƒ}с&ТщЂэ{`uV#ЈZиЫ.@^џщРš›ЇYДљњPЭлaП›‘-7WЉat„І.А[ї* ƒkоAllФшНCі\|hdŒ!юцAн ї• ќ ГИЯ—ь™Э)0yљdm‹‰в&ї‰ 6ђПОJCмcб‘žRя4э'Яn-ŽК2КzY}/ Я/*фIB"JdаrW+W=!„ЋЯLЬ-ПЏxЬ};Н(Џ=’ш ‘ќCNаёВџ…ˆcЪHXqЎкŠ–р;rJ#ІЉыœ„ьRЦu‡іŠЏžэЌ!ьžIIы[‰Ouл–МBWЯVd'ђЌм}8ЛгfўаБтіTwf‘Є`ёЌ”xђЮ_ wjЎуOк ŠNтЄFfЏиЏ‘%/jхЈЊс%кsѓ'‘– ЋњКчњд,Шvюœq<kgАЁГиlSШ` O СЭ$Bќj x]t­У˜ї:ЯюœUъЋ&ќ ћж‹Ў”ŠЇЧѓ›XFвW:йˆЖйм†кЮжЈlOGŸМKНWї/fћCŽ Юk@,љУУKGgѓіGџ,™HэRAŠњ9Xќ?zz–(Гž!ю~ќEm`хца˜;Ьpzюnђ;ћђ> ЖaЇ~ыё\мG‡ UІяvrƒ DjzžІ`їиё+ЗFЊ06ђœy'Жš:,Cm}ЄBЅЁџэ шŒГ!јˆžRфсЗА“Џ"гœzЧt4T`ИСУ|XзŸИД'AЬїзвЉС‘пŠЬ ИхъвtA!џƒ>}њЯщŠЊs F›ЉEЪn–]ЙB†ЧИ†ˆn›—ЖяŒau39Ч@fdШСјг]ИWэЦ‡wєЈz•ЦоW;Рd‰њУњ?єїСЊ›Ї#ЌИ~<‡jКЩFfpШвВ}ŽЎ8T@цZ•F“ ћ9T8€Ч>ђZфИАo–ЅдхGЄ‹ИgБм 4'ЋіŽYЙБалч§ŸёгЖt>?§csДљџПХc:l]šAЭ\B€?€?€?X Y>ћшмМъИПЛrzПsA?’’š™™>ЭЬL=pB€?€?@Ffff?џџџџˆBN 00002SkinMesh : TorusKnotжІ•…D 9 209 9 WaL {­Уyaa‚H6ˆЎƒ=mDўaУв ЊЖIiф“OљЩАakry€œО…П1CНЉИё'Œclі™^ZdАVPQЬ pm&”#)Tsѕч†}AbЁфѕ‘ЃXTЉ–6”<Г)OeЩЄrРЃЗџ‚Y§> мнѕi™*Х§”]ЩёmгЬR„„ШУaюK2’ТЄ`kФ4aўѕуz…‡((ѕ†ВИ§ЫoЋе!!E‡љb@мєўм=Х"XЈМRCG‚+[[Žх$<_x'[Нн6Œ9ЕќМ]фgВd/ЫƒАљ )Š‹E“ьНPЂXЄЖˆ9‰^›эQ*IXbі„6z§е3[6ЩoЗTЭІ1ј(бэA3K ]Kлxрt8ym76^G5NœхyћnЕЙяхeЁЃ‹‹iб4ыŠи‘аŒƒВyJЗеК—b 4њ,[$ТVСО(<&AmЈ\MœbOцКч™ЙЄejє№O’СУнœxжыЏTo,C#Ѕ=їЎ7УсfYcŽk›Ы`f…ЭhЗ?žЫDЁ2{т\Ь]мЙоRшSnџ‡Xс†јУ~g%RАг1}ˆK20|‡MKњЩ2МHОOАЖЄ].>D/Lн9 Ь sБ zEЪ ~Zhfc4кЖ€‚TЎіЦуЪ ^эS’"‰ [f(Hl#’цЃЛ^z˜ЌЈЁw ]ЛФskі‡ЂУюmСЭЊНЂ™lOпCLњ„—Ѓј)1ќŒРэ­2aлї4Ѕ.}EgwdО%тЗ іщёЯZтШv u$‡:љ#aCД­Р™ая‹Џ]ёы)m…tЫцЎ9Rwъ)Oœ№ИOgUIЬsЬмkјЂ#ПQ“IL ЎŸ<ЇвЅtўтьЄдз•U›ап ЌЗпhќ’Т"ˆЂ‚ЎjВ’_†€zАЃOwiX2н 18ЧTртtрУьaџљ‡Й:Є;МжwPЅВœs{ѕ -eц$УХ4Ль§RёBB)ƒВ“IgЬ A A A3DRad_res\system\shaders\0002_pp_smooth_glossy.fx€??ShaderTesting_TorusKnot€?€?€?€?H 00003Script: shader codeжІ•…D 9.#509 9 WaFЫ1=Ћ ˜uѕ•ЬFžХБДќрOЈв‘шДgLЈS”tїгю0тўУ]н‚р–їvŒ*Ат`У юƒЙ”%ЕqчьOБМЄАvƒИyNOщ–ПЌi/>/S,™и/шŠЃяPH{ІтЗ?uЄэ,„ˆIЊ‡ иЦюI‘ћцъ?іџяІж—Ÿrъ(ЇХi\зWсИ–\m[щЌb`вџ†ўЉ†suœ€ну‡дuђьА…ZA}So2Lцl‰Ядм…9a^dЖ7xђЄдcЁp%.ТдmЕњєшАTбШ поˆђЦwvШкIЧoS#QЃётщŒЬU(-*Ьžї@ЪH™ qY‚ў9‘T- ‡y§бмSМ[P‚AКл,!]Зџ’sЊdЩБщІeєC~оГjžщ јїPрu№E/ЪiNsа шЛWсvиE,ѕ‰=уЛ0OсйJ$ZќzuЊR%wЯРˆћOѕKЭrxО6иV[UЕ%й‚ї№ЋsсGQХ 5b›>&Оъ||hя№oXTF„И$ bsЭИо%пџлYЯюq‹QXюЩъWoTЅОјбчДh+ПїТ›onя]zžІftлАы0AwЬ­hC%!J „†YфŽIТ\в†Еl!ЊПиЃхцЇ‚ш‡шњ›­ jШ1L“Ъ Šт^Їв`mыЕЮQRKћF€)оўKпžt­Бds‚зс…В‡ъъHюk›Щ№@:ЭЁеdЇЋI-хˆ{iEђAМ99{џп#§KLDБћj€юИY,bш˜&ŽD+сѓ •^€ќŽp}68>aC‚b‡Хщ˜­SГJ0гd…z‰jўn2Ъe9jЄсЭвZЪфЈDѓН7нмЫемviћfЧx‡^`"зЫC)Є‰…мЉeЦ=c4Fц9l^ujU‘нQSжf нEр&щC§шЩ‘J^*Ћ0œАvHЭ5‘]Аќ2Йо Žй)˜х$БшпЬnа1ЎЃAЫ&Ю>ŒQњžдEю БPg8Bi Œ$њц5Кб”Ы$C=/‹Nќ‚т№&ЦШXф=оР@$7Œ9(к­$N,;ђМK69kbUfаьEVЎ€ž~U*ФХШ-msŒлyпmv“ѕџ0§зzПNя+ќ ѕЈд^ЉSjйvЂ{§№ц{–Б:[ЕŒQп(ŠХ,ж,Œџ”,Џ7oFф4агщф*ЖЄ›‚^Ў`tџЙ’~\•#vzг'њ>е“ЧАЏб0ђрЈŽ€?€?€?€?Ђ0‰=ъйn?§џ>€О AxјџћxSkinMesh : TorusKnot    џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ џџ џџ џџ џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџi5/////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Applying "The CG Tutorial" examples to 3DRad HLSL shaders // http://http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter06.html // // In this C6E1v_bulge vertex program, you will learn how to make an object deform periodically so that it // appears to bulge. The goal is to take a time parameter as input and then modify the vertex positions of the // object geometry based on the time.As a little extra, I've added a 'glow' effect as the object pulsates. // // You could compute animation updates on the CPU and pass the animated data to the GPU. However, a more // efficient approach is to perform as much of the animation computation as possible on the GPU with a vertex // program, rather than require the CPU to do all the number-crunching. Offloading animation work from the CPU // can help balance the CPU and GPU resources and free up the CPU for more involved computations, such as // collision detection, artificial intelligence, and game play. /////////////////////////////////////////////////////////////////////////////////////////////////////////////// /*HLSLSTART C6E1v //The following data structures represent the vertex format //for animated (skinned) and static meshes respectively, //as it is passed by 3D Rad to the VS_Skinning(), VS_NoSkinning() //vertex shader functions (see below). This format cannot be changed. struct VS_INPUT { float4 Position : POSITION; float3 BlendWeights : BLENDWEIGHT; float4 BlendIndices : BLENDINDICES; float3 Normal : NORMAL; float2 TexCoord : TEXCOORD0; float3 T : TEXCOORD1; //in object space float3 B : TEXCOORD2; //in object space }; struct VS_INPUT_NOSKINNING { float4 Position : POSITION; //in object space float3 Normal : NORMAL; //in object space float2 TexCoord : TEXCOORD0; float3 T : TEXCOORD1; //in object space float3 B : TEXCOORD2; //in object space }; //The following data structure represents the vertex format //that the PS_Alpha() pixel shader function will receive from //the vertex shader functions. This format is user-definable. struct VS_OUTPUT { float4 Position : POSITION; //in projection space float2 TexCoord0 : TEXCOORD0; float2 TexCoord1 : TEXCOORD1; float3 Normal : TEXCOORD2; //in tangent space float3 LightVector : TEXCOORD3; //in tangent space }; //The following data structure represents the input/output data format //for the VS_Bones() function. struct VS_BONES_INPUT { float4 vPos; float3 vBlendWeights; float4 vBlendIndices; float3 vNor; float3 vT; float3 vB; }; struct VS_BONES_OUTPUT { float4 vPos; float3 vNor; float3 vT; float3 vB; }; //************************************** // Added for this example (C6E1v) //************************************** struct C6E1v_VS_OUTPUT { float4 oPosition : POSITION; //in projection space float4 color : COLOR; }; //The following shader variables may be set automatically by 3D Rad, run-time, //depending on SkinMesh property dialog settings const int MATRIX_PALETTE_SIZE = MATRIX_PALETTE_SIZE_DEFAULT; float4x3 amPalette[MATRIX_PALETTE_SIZE_DEFAULT]; int boneCount = 2; float4x4 mxWorld : WORLD; float4x4 mxWorldIT : amPalette; float4x4 mxViewProj : VIEWPROJECTION; float4 lightDir : DIRECTION = {0.0f,0.0f,-1.0f,1.0f}; float4 lightColor : DIFFUSE = {1.0f,1.0f,1.0f,1.0f}; float4 lightAmbient : AMBIENT = {0.1f,0.1f,0.1f,1.0f}; float ambient; float4 materialDiffuse : DIFFUSE = {0.8f,0.8f,0.8f,1.0f}; float4 materialSpecular : SPECULAR = {1.0f,1.0f,1.0f,1.0f}; float materialSpecularPower : SPECULARPOWER = 30.0f; float3 worldEyePos; texture diffuseMap; //the mesh texture assigned to the currently processed vertex or pixel texture environmentMap; //the environment-map texture assigned to the currently processed vertex or pixel float environmentMapBlend; texture normalMap; //the bump-map texture assigned to the currently processed vertex or pixel float bumpScale; float4 pointLightPos01 = {0.0f,0.0f,-1.0f,1.0f}; float4 pointLightPos02 = {1.0f,0.0f,-1.0f,1.0f}; float4 pointLightPos03 = {-1.0f,0.0f,-1.0f,1.0f}; float4 pointLightPos04 = {-1.0f,0.0f,1.0f,1.0f}; float4 pointLightColor01 = {1.0f,1.0f,1.0f,1.0f}; float4 pointLightColor02 = {1.0f,0.0f,0.0f,1.0f}; float4 pointLightColor03 = {0.0f,1.0f,0.0f,1.0f}; float4 pointLightColor04 = {0.0f,0.0f,1.0f,1.0f}; float3 fogColor = {1.0f,1.0f,1.0f}; float fogStart = 1; float fogEnd = 25; //The following variable will be set by our script code (see Main() section, below) float fAlpha = 1.0f; //The following declarations specify how textures will be //read (sampled) by the pixel shader function. sampler DiffuseMapSampler = sampler_state { Texture = ; MinFilter = LINEAR; MagFilter = LINEAR; MipFilter = LINEAR; AddressU = WRAP; AddressV = WRAP; }; sampler NormalMapSampler = sampler_state { Texture = ; MinFilter = LINEAR; MagFilter = LINEAR; MipFilter = LINEAR; AddressU = WRAP; AddressV = WRAP; }; sampler EnvironmentMapSampler = sampler_state { Texture = ; MinFilter = LINEAR; MagFilter = LINEAR; MipFilter = LINEAR; AddressU = WRAP; AddressV = WRAP; }; //The following is a user-defined function VS_BONES_OUTPUT VS_Bones( const VS_BONES_INPUT vInput, int iNumBones ) { //This function is called by VS_Skinning(), the main //vertex shader function for skinned meshes //It applies bone matrices to vertex coordinates, normals and tangents, //which also transforms from model-space to world space VS_BONES_OUTPUT vOutput = (VS_BONES_OUTPUT) 0; float fLastWeight = 1.0; float fWeight; float afBlendWeights[3] = (float[3])vInput.vBlendWeights; int aiIndices[4] = (int[4])D3DCOLORtoUBYTE4(vInput.vBlendIndices); for (int iBone=0;(iBone<3) && (iBone<(iNumBones-1));iBone++) { fWeight = afBlendWeights[iBone]; fLastWeight -= fWeight; vOutput.vPos.xyz += mul(vInput.vPos,amPalette[aiIndices[iBone]])*fWeight; vOutput.vNor += mul(vInput.vNor,amPalette[aiIndices[iBone]])*fWeight; vOutput.vT += mul(vInput.vT,amPalette[aiIndices[iBone]])*fWeight; vOutput.vB += mul(vInput.vB,amPalette[aiIndices[iBone]])*fWeight; } vOutput.vPos.xyz += mul(vInput.vPos,amPalette[aiIndices[iNumBones-1]])*fLastWeight; vOutput.vNor += mul(vInput.vNor,amPalette[aiIndices[iNumBones-1]])*fLastWeight; vOutput.vT += mul(vInput.vT,amPalette[aiIndices[iNumBones-1]])*fLastWeight; vOutput.vB += mul(vInput.vB,amPalette[aiIndices[iNumBones-1]])*fLastWeight; return vOutput; } //The following is the vertex shader function for bone-animated meshes (for example Andro) //This function is called for each vertex of the SkinMesh that is rendered. VS_OUTPUT VS_Skinning(VS_INPUT IN, uniform int iNumBones) { VS_OUTPUT OUT; OUT.TexCoord0 = IN.TexCoord.xy; OUT.TexCoord1 = IN.TexCoord.xy; VS_BONES_INPUT vsi = { IN.Position, IN.BlendWeights, IN.BlendIndices, IN.Normal, IN.T, -IN.B }; VS_BONES_OUTPUT vso = VS_Bones( vsi, iNumBones ); // Compute matrix which transforms to tangent space float3x3 objToTangentSpace; objToTangentSpace[0] = normalize(vso.vT); objToTangentSpace[1] = normalize(vso.vB); objToTangentSpace[2] = normalize(vso.vNor); // Output packed constant tangent-space normal. OUT.Normal = float3(0.5,0.5,1); // Transform light vector from object space to tangent space, and pack into [0..1] range OUT.LightVector = normalize(mul(objToTangentSpace, -lightDir.xyz)) * 0.5 + 0.5.xxx; OUT.Position = mul(float4(vso.vPos.xyz,1.0f),mxViewProj); return OUT; } //The following is the vertex shader function for static meshes (for example the default yellow fish) //This function is called for each vertex of the SkinMesh that is rendered. VS_OUTPUT VS_NoSkinning(VS_INPUT_NOSKINNING IN) { VS_OUTPUT OUT; OUT.TexCoord0 = IN.TexCoord.xy; OUT.TexCoord1 = IN.TexCoord.xy; // Compute matrix which transforms to tangent space float3x3 objToTangentSpace; objToTangentSpace[0] = mul(IN.T,mxWorldIT); objToTangentSpace[1] = mul(-IN.B,mxWorldIT); objToTangentSpace[2] = mul(IN.Normal,mxWorldIT); // Output packed constant tangent-space normal. OUT.Normal = float3(0.5,0.5,1); // Transform light vector from object space to tangent space, and pack into [0..1] range OUT.LightVector = normalize(mul(objToTangentSpace, -lightDir.xyz)) * 0.5 + 0.5.xxx; OUT.Position = mul(IN.Position, mxViewProj); return OUT; } //************************************** // Added for this example (C6E1v) //************************************** float time;//ever-increasing system time (used in the sin() function to obtain varying values between 0 and 1) float frequency;//controls the speed of the displacement float scaleFactor;//controls the amplitude of the displacement float3 Ke; //material's emissive color float3 Kd; //material's diffuse color float shininess; float3 globalAmbient; float3 my_lightColor; float3 lightPosition; float3 eyePosition; //************************************** // Added for this example (C6E1v) //************************************** float3 computeLighting(float3 lightPosition, float3 lightColor, float3 Kd, float shininess, float3 P, float3 N, float3 eyePosition) { // Compute the diffuse lighting float3 L = normalize(lightPosition - P).xyz; float diffuseLight = max(dot(N, L), 0); float3 diffuseResult = Kd * lightColor * diffuseLight; // Compute the specular lighting float3 V = normalize(eyePosition - P).xyz; float3 H = normalize(L + V); float3 specularLight = lightColor * pow(max(dot(N, H), 0),shininess); if (diffuseLight <= 0) specularLight = 0; float3 specularResult = lightColor * specularLight; return diffuseResult + specularResult; } C6E1v_VS_OUTPUT C6E1v_bulge(VS_INPUT_NOSKINNING IN) { C6E1v_VS_OUTPUT OUT; //*** Use this to demonstrate how the vertex position on the Yaxis affects the displacement //float displacement = scaleFactor * 0.5 * (sin(IN.Position.y * frequency * time) + 1); //*** Use this to show uniform displacement float displacement = scaleFactor * 0.5 * (sin(frequency * time) + 1); float4 displacementDirection = float4(IN.Normal.x, IN.Normal.y, IN.Normal.z, 0); float4 newPosition = IN.Position + displacement * displacementDirection; OUT.oPosition = mul(newPosition,mxViewProj); float3 emissive = Ke * (sin(frequency * time) + 1);//periodic glowing at same rate as the displacement OUT.color.xyz = emissive + computeLighting(lightPosition,my_lightColor,Kd, shininess,newPosition,IN.Normal.xyz,eyePosition); OUT.color.w = 1; return OUT; } //The following is the pixel shader function. //This function is called for each pixel that is plotted on the screen, for the SkinMesh that is rendered. //************************************** // Added for this example (C6E1v) //************************************** float4 C6E1v_PS(C6E1v_VS_OUTPUT IN) : COLOR { float4 color = IN.color; return color; } //The following fills an user-defined array with compiled techniques. //Run-time the right technique will be picked based on the number of bones //to process. VertexShader vsArray[4] = { compile vs_2_0 VS_Skinning(1), compile vs_2_0 VS_Skinning(2), compile vs_2_0 VS_Skinning(3), compile vs_2_0 VS_Skinning(4) }; //The following declaration specifies the rendering technique for animated meshes //The technique name must be 'Skinning'. What is inside the code block is user-definable. technique Skinning { pass P0 { //VertexShader = (vsArray[boneCount]); //PixelShader = compile ps_2_0 C6E1v_PS(); } } //The following declaration specifies the rendering technique for static meshes //The technique name must be 'NoSkinning'. What is inside the code block is user-definable. technique NoSkinning { pass P0 { VertexShader = compile vs_2_0 C6E1v_bulge(); PixelShader = compile ps_2_0 C6E1v_PS(); } } HLSLEND*/ ////////////////////////////////////////////////////////////////////////////////// //The following is our regular script code which sets and manipulates the shader above float Time = 0; void Main() { if (iInitializing()) { iShaderSet(OBJ_0,"C6E1v"); } iShaderFloatSet(OBJ_0,"time",Time); iShaderFloatSet(OBJ_0,"frequency",2.0);//controls the speed of the displacement iShaderFloatSet(OBJ_0,"scaleFactor",0.5);//controls the amplitude of the displacement iShaderFloat3Set(OBJ_0,"Ke",0.0,0.0,0.7);//emissive color iShaderFloat3Set(OBJ_0,"Kd",0.0,0.0,1.0);//diffuse color iShaderFloatSet(OBJ_0,"shininess",50);//specular power (range 1-100) iShaderFloat3Set(OBJ_0,"globalAmbient",0.1,0.1,0.1);//ambient color iShaderFloat3Set(OBJ_0,"my_lightColor",1.0,1.0,1.0); iShaderFloat3Set(OBJ_0,"lightPosition",0.0,31.0,27.0); iShaderFloat3Set(OBJ_0,"eyePosition",0,19,32); Time += 0.016667; } k3ˆBБ 00004RigidBody : FloorжІ•…D 9 +6519 9 Waq.lYe6щжМr5iБСўШ3ѕЪкn.o•žƒ…ƒз4BTNї>›ЕIZ ё%8=w^Ќ!В‹ю‡мЯЮ'КVз Ѕ§ћЏћвЊю‰†+ П9АQioiOчоIkаkRFiтprЮЊЄЩџ“xiWK™u ИsБA%u§AѕРЖpпї'|ћ~Й+uYо0шю8iw„й•oћФ9ˆu‰ЫЛb'О “o:ЪЭz"/ТО}>ЇПЭIyДЬxНяX‰ёƒш=wIЂŽІ@Мну^шm6рЧнFгuр$54\MЯ)B*~Ш’мЯ€ЫnБ—КVFфHЃ ЂšŒ—kТХXk‚тOjрIr™:ЭФtѕ…DМЈиЛе?{ќ€ф№ьŠ9›єЋXD@‚Bй"К#мКь Д;]ь…ЃбПoХ]“[uъ5pуvh,>кЕЅџŽJXc‡8џ*Ье1†uŒ9џќй-Ш]ЅfБpЯa‡}lo‹='zаЈаІ(ф1Ћ[тf‘i2HgBё9 #НУђr•Шš|,ХslX9T›F\m“FІѕї Жѓpё\’Д/E)kфJФI€СУ|Ћp$~JSѕŠrˆб›R?Oђ(Yў›ƒ;$Z(tб~„т›O€`њQ SЦvЧqЃ8 † гlg]ю.цC>l‚[;­4Ёк 5дoBШˆ@R>О(ИY~Љ8;ў&мSЙ#x–уЦkЋ\‰eLU(Јy›Ђ9GСАU'бЃžЧэ(УSDj}bЊkJАрТ_јЙlьгяDГЃjŽЦДг}є„Ы†\#{РVпRaAТч5ѓ<$>ž—— ЄуMХЕ5V”яQбќ]еRКёAџv‘-‹–…- ЛH,›ЕилHЁО[<šnЈЁ] ŽХ*lЎ‡ћdЂ~7НЦuьЎЋuiЪ—ЌыѓВ јcђ*o­Єд№ dnу.ЎвˆИ NE Žƒе§XjЩйї—•ыџp9ч‹З“"ЖЮћ†a€Д=ма‹ўЋbа?НЃ­8Awу$Ч†Гya‹ ЕwŠд šTТЖяDД&YЎюŒYFФдбюНАЮnžб@z|KƒЁЮПж›;?eЫn”ФAЊ“Еu!j6Ъ3зЏёзhц\!Y}П р-uEurмц†œ>ž=ЄљLZ„єЈO˜XЏ5! W^;ДmŽдшЧжА,gВT‚‘N‰CbѓsбсЫeЃaѕї•\Fѕ№=7ПЬыа&иqU…tи AгcЈVЯІKRє†.яEјjЉа‡&"ЅGэКП&†б/(•]Њ|ЕьЕИЊђ‘ŽMр‚ЙВ8 ьY’gыkй‡mБР2_S$ТШ,Љ?HBЫ9?№0?ХZ)О@єžС€?€?€?XE_Оy ПНІŒЋМ›Ѓx?­m†B? Aš™™=€П?HB Aoƒ:wО?wО?HBHBPlatform100mHB(knN`ъFА 700001SunLightжІ•…D 9 58:09 9 WaX(Бq'ѕ`Oљ­tЦ­‡xпћœTЗ “дЃžІН]V7э‘гBсШ;tђбм\mр Лžкђ‹пО#к­ždTHokHbЌ)ы_кКцж}pRj.њ ђѕЫ­юžА€к№еK›Е. iъЄ•$kђЇwzi^л§z{ŽоLІ7…зШзKrнxЪ zуэ[)еђžЃ;„6`ШЧ‚h\лќC7œF;{ѓђ\вŸїоTYжй”'WЦ"ЁdСt›ѓig4NЧIŽ\Iіˆ?ЈЄ'3ѕ#ž~iЕmšQiSе ї™зQЗkVу_єл№@ЪZ})M$ \™ЗяЛgЇ‚Ям82OKІFЬsт ы’“н™],ЖдЅ_’n№Iеlrp[Ля*„xtап­ќdьр  |p,Ю r?šp\c•ЋжcV‚.ОТЌoМvЏЧЂLљŒg"ptЏ-"В@§СИСCїН'>з6<єO‡/RY‰ъЁYž“Ћ“ѓЛ zћvƒЦЄ!џ+|Б1t Ў@яЛLNˆ%=њlИ“ы;Џob7щ˜1 а‡x)`{/}Sšž‡–ЄкhpЏ‡q1лt€7j’лї0kмэLР§і4эUмwЋѕVo`:yiї3J‡ЕВюЛ М!ЖЏфbЉМŽœь›zМЇIŸ7<ŠН‡5)7–ˆёlэbLшЛ%ћSsEї<rиwЦ*ЌЖ3ТіШЉFЯ€й>2‘}0€8„vZУаЩLІiе­LŠёiЂЋЂ4WбnGVр/}ЩЁэЬџН'ЛGхAљвйя\u ˜`OЖэUY•+§/+ ЗЙ,лFђ_ƒА0ЗЇЊДБШ'бКHУ‚&­ѓ6ЃаХ‰ўM,КŸa‡z7дсМ—ђabгл|^ё%ъOFлЕy?ѕ№W@(MbчN%пЗРu Ъ†{фІb9*їлB[yDдФ7сШ|ЫЕч†•–![ˆ#RФЕЯ}y3ПKя ъ6в$mгГ$y)їLОТ$35•йЯЮfџў"Л~D]tЩ2‘Ш™ьТg.гкНљP_s&аВ"XŽгXсu MЅЭ‡‚э>uКїАrqњчœa№.ŠGбЫШ‘šЮ-ЫbќлБGƒ4џаъЪ’ђh”žwOЛрGжС3Иј|ба:і’l~kwюРX”№Б­<]В•Џw&зhˆЯ2К­mЋп­Ъ(’˜ѕи˜=СƒМjЋGh–[і`jвnч7Б0hй*UP™ѕЃђGБXz>I;x?yљAиA€?€?€?}"Л>ЖŠЛМvUМh4nПœJлA?XX€?€?€?33Г>@?@?@?€?Ш€?€?а€?€?Ы€?€?Э€?€?€?€?,€?€?€?€?-€?€? €?€?.€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€? €?€? €?€? €?€?;€?€?<€?€?=€?€?>€?€??€?€?@€?€?A€?€?B€?€?C€?€?€?€?