From 7a52133846f6001d5f3e9b6ba89a0cd6bdecffb6 Mon Sep 17 00:00:00 2001 From: huxingyi Date: Mon, 9 Nov 2020 20:16:06 +0930 Subject: [PATCH] Introduce procedural motion generator Removed pose editor and motion timeline editor. Introduced simple procedural motion generator (Added experiment walk cycle). --- ACKNOWLEDGEMENTS.html | 11 + dust3d.pro | 84 +- include/dust3d.h | 2 +- resources.qrc | 4 + resources/model-cat.ds3 | 2430 ++-------------------- resources/model-dog.ds3 | 532 ++--- resources/model-mosquito.ds3 | 210 +- shaders/scene.frag | 125 ++ shaders/scene.vert | 23 + shaders/shadow.frag | 10 + shaders/shadow.vert | 14 + src/animalposer.cpp | 222 -- src/animalposer.h | 20 - src/animationclipplayer.cpp | 75 - src/animationclipplayer.h | 43 - src/blockmesh.cpp | 86 + src/blockmesh.h | 69 + src/ccdikresolver.cpp | 80 +- src/ccdikresolver.h | 23 +- src/chainsimulator.cpp | 117 ++ src/chainsimulator.h | 70 + src/document.cpp | 321 +-- src/document.h | 165 +- src/documentsaver.cpp | 8 - src/documentwindow.cpp | 48 +- src/documentwindow.h | 2 - src/fbxfile.cpp | 6 +- src/genericspineandpseudophysics.cpp | 87 + src/genericspineandpseudophysics.h | 19 + src/glbfile.cpp | 16 +- src/hermitecurveinterpolation.cpp | 54 + src/hermitecurveinterpolation.h | 41 + src/interpolationtype.cpp | 78 - src/interpolationtype.h | 229 -- src/jointnodetree.cpp | 107 +- src/jointnodetree.h | 14 +- src/libdust3d.cpp | 2 +- src/logbrowser.cpp | 2 +- src/materialeditwidget.cpp | 1 + src/materiallistwidget.cpp | 2 +- src/modelwidget.cpp | 12 +- src/modelwidget.h | 4 +- src/motionclipwidget.cpp | 132 -- src/motionclipwidget.h | 28 - src/motioneditwidget.cpp | 358 ++-- src/motioneditwidget.h | 80 +- src/motionlistwidget.cpp | 13 +- src/motionmanagewidget.cpp | 17 +- src/motionsgenerator.cpp | 660 +++--- src/motionsgenerator.h | 51 +- src/motiontimelinewidget.cpp | 411 ---- src/motiontimelinewidget.h | 44 - src/normalanddepthmapsgenerator.cpp | 2 - src/planemesh.cpp | 59 + src/planemesh.h | 66 + src/posedocument.cpp | 734 ------- src/posedocument.h | 101 - src/poseeditwidget.cpp | 668 ------ src/poseeditwidget.h | 88 - src/poselistwidget.cpp | 307 --- src/poselistwidget.h | 43 - src/posemanagewidget.cpp | 90 - src/posemanagewidget.h | 26 - src/posemeshcreator.cpp | 46 - src/posemeshcreator.h | 29 - src/posepreviewmanager.cpp | 59 - src/posepreviewmanager.h | 30 - src/posepreviewsgenerator.cpp | 72 - src/posepreviewsgenerator.h | 38 - src/poser.cpp | 98 - src/poser.h | 32 - src/poserconstruct.cpp | 9 - src/poserconstruct.h | 9 - src/posewidget.cpp | 116 -- src/posewidget.h | 36 - src/riggenerator.cpp | 252 ++- src/riggenerator.h | 5 + src/rigger.h | 5 + src/rigwidget.cpp | 1 + src/simplerendermeshgenerator.cpp | 34 + src/simplerendermeshgenerator.h | 51 + src/simpleshadermesh.cpp | 2 + src/simpleshadermesh.h | 56 + src/simpleshadermeshbinder.cpp | 220 ++ src/simpleshadermeshbinder.h | 62 + src/simpleshaderwidget.cpp | 247 +++ src/simpleshaderwidget.h | 63 + src/skeletondocument.h | 4 +- src/skeletongraphicswidget.cpp | 2 +- src/skeletongraphicswidget.h | 2 +- src/skeletonikmover.cpp | 2 +- src/snapshot.h | 99 +- src/snapshotxml.cpp | 113 +- src/snapshotxml.h | 4 +- src/vertebratamotion.cpp | 296 +++ src/vertebratamotion.h | 100 + src/vertebratamotionparameterswidget.cpp | 170 ++ src/vertebratamotionparameterswidget.h | 28 + 98 files changed, 3785 insertions(+), 8053 deletions(-) create mode 100644 shaders/scene.frag create mode 100644 shaders/scene.vert create mode 100644 shaders/shadow.frag create mode 100644 shaders/shadow.vert delete mode 100644 src/animalposer.cpp delete mode 100644 src/animalposer.h delete mode 100644 src/animationclipplayer.cpp delete mode 100644 src/animationclipplayer.h create mode 100644 src/blockmesh.cpp create mode 100644 src/blockmesh.h create mode 100644 src/chainsimulator.cpp create mode 100644 src/chainsimulator.h create mode 100644 src/genericspineandpseudophysics.cpp create mode 100644 src/genericspineandpseudophysics.h create mode 100644 src/hermitecurveinterpolation.cpp create mode 100644 src/hermitecurveinterpolation.h delete mode 100644 src/interpolationtype.cpp delete mode 100644 src/interpolationtype.h delete mode 100644 src/motionclipwidget.cpp delete mode 100644 src/motionclipwidget.h delete mode 100644 src/motiontimelinewidget.cpp delete mode 100644 src/motiontimelinewidget.h create mode 100644 src/planemesh.cpp create mode 100644 src/planemesh.h delete mode 100644 src/posedocument.cpp delete mode 100644 src/posedocument.h delete mode 100644 src/poseeditwidget.cpp delete mode 100644 src/poseeditwidget.h delete mode 100644 src/poselistwidget.cpp delete mode 100644 src/poselistwidget.h delete mode 100644 src/posemanagewidget.cpp delete mode 100644 src/posemanagewidget.h delete mode 100644 src/posemeshcreator.cpp delete mode 100644 src/posemeshcreator.h delete mode 100644 src/posepreviewmanager.cpp delete mode 100644 src/posepreviewmanager.h delete mode 100644 src/posepreviewsgenerator.cpp delete mode 100644 src/posepreviewsgenerator.h delete mode 100644 src/poser.cpp delete mode 100644 src/poser.h delete mode 100644 src/poserconstruct.cpp delete mode 100644 src/poserconstruct.h delete mode 100644 src/posewidget.cpp delete mode 100644 src/posewidget.h create mode 100644 src/simplerendermeshgenerator.cpp create mode 100644 src/simplerendermeshgenerator.h create mode 100644 src/simpleshadermesh.cpp create mode 100644 src/simpleshadermesh.h create mode 100644 src/simpleshadermeshbinder.cpp create mode 100644 src/simpleshadermeshbinder.h create mode 100644 src/simpleshaderwidget.cpp create mode 100644 src/simpleshaderwidget.h create mode 100644 src/vertebratamotion.cpp create mode 100644 src/vertebratamotion.h create mode 100644 src/vertebratamotionparameterswidget.cpp create mode 100644 src/vertebratamotionparameterswidget.h diff --git a/ACKNOWLEDGEMENTS.html b/ACKNOWLEDGEMENTS.html index 66518d47..9e4fc5b0 100644 --- a/ACKNOWLEDGEMENTS.html +++ b/ACKNOWLEDGEMENTS.html @@ -1364,3 +1364,14 @@ https://www.reddit.com/r/gamedev/comments/5iuf3h/i_am_writting_a_3d_monster_mode exception to your version of the library, but you are not obliged to do so. If you do not wish to do so, delete this exception statement from your version. + +

Prashanth Udupa

+
+    https://www.vcreatelogic.com/index.php/2020/02/28/leveraging-shadow-maps-in-qt-without-using-qopenglframebufferobject/
+
+ +

Ahmad Abdul Karim, Alexandre Meyer, Thibaut Gaudin, Axel Buendia and Saida Bouakaz

+
+    Generic Spine Model with Simple Physics for Life-Like Quadrupeds and Reptiles
+    https://www.ahmadabdulkarim.com/?page_id=16
+
diff --git a/dust3d.pro b/dust3d.pro index 8a06ab55..0644e00a 100644 --- a/dust3d.pro +++ b/dust3d.pro @@ -278,36 +278,9 @@ HEADERS += src/skinnedmeshcreator.h SOURCES += src/jointnodetree.cpp HEADERS += src/jointnodetree.h -SOURCES += src/poser.cpp -HEADERS += src/poser.h - -SOURCES += src/posemeshcreator.cpp -HEADERS += src/posemeshcreator.h - -SOURCES += src/posepreviewmanager.cpp -HEADERS += src/posepreviewmanager.h - -SOURCES += src/poseeditwidget.cpp -HEADERS += src/poseeditwidget.h - -SOURCES += src/poselistwidget.cpp -HEADERS += src/poselistwidget.h - -SOURCES += src/posemanagewidget.cpp -HEADERS += src/posemanagewidget.h - -SOURCES += src/posepreviewsgenerator.cpp -HEADERS += src/posepreviewsgenerator.h - -SOURCES += src/posewidget.cpp -HEADERS += src/posewidget.h - SOURCES += src/preferenceswidget.cpp HEADERS += src/preferenceswidget.h -SOURCES += src/motioneditwidget.cpp -HEADERS += src/motioneditwidget.h - SOURCES += src/motionmanagewidget.cpp HEADERS += src/motionmanagewidget.h @@ -320,9 +293,6 @@ HEADERS += src/motionwidget.h SOURCES += src/motionsgenerator.cpp HEADERS += src/motionsgenerator.h -SOURCES += src/animationclipplayer.cpp -HEADERS += src/animationclipplayer.h - SOURCES += src/texturetype.cpp HEADERS += src/texturetype.h @@ -350,15 +320,6 @@ HEADERS += src/material.h SOURCES += src/fbxfile.cpp HEADERS += src/fbxfile.h -SOURCES += src/motiontimelinewidget.cpp -HEADERS += src/motiontimelinewidget.h - -SOURCES += src/interpolationtype.cpp -HEADERS += src/interpolationtype.h - -SOURCES += src/motionclipwidget.cpp -HEADERS += src/motionclipwidget.h - SOURCES += src/tabwidget.cpp HEADERS += src/tabwidget.h @@ -377,18 +338,9 @@ HEADERS += src/uvunwrap.h SOURCES += src/triangletangentresolve.cpp HEADERS += src/triangletangentresolve.h -SOURCES += src/animalposer.cpp -HEADERS += src/animalposer.h - -SOURCES += src/poserconstruct.cpp -HEADERS += src/poserconstruct.h - SOURCES += src/skeletondocument.cpp HEADERS += src/skeletondocument.h -SOURCES += src/posedocument.cpp -HEADERS += src/posedocument.h - SOURCES += src/combinemode.cpp HEADERS += src/combinemode.h @@ -544,6 +496,42 @@ HEADERS += src/remeshhole.h SOURCES += src/centripetalcatmullromspline.cpp HEADERS += src/centripetalcatmullromspline.h +SOURCES += src/simpleshadermesh.cpp +HEADERS += src/simpleshadermesh.h + +SOURCES += src/simpleshadermeshbinder.cpp +HEADERS += src/simpleshadermeshbinder.h + +SOURCES += src/simpleshaderwidget.cpp +HEADERS += src/simpleshaderwidget.h + +SOURCES += src/blockmesh.cpp +HEADERS += src/blockmesh.h + +SOURCES += src/planemesh.cpp +HEADERS += src/planemesh.h + +SOURCES += src/hermitecurveinterpolation.cpp +HEADERS += src/hermitecurveinterpolation.h + +SOURCES += src/genericspineandpseudophysics.cpp +HEADERS += src/genericspineandpseudophysics.h + +SOURCES += src/chainsimulator.cpp +HEADERS += src/chainsimulator.h + +SOURCES += src/vertebratamotion.cpp +HEADERS += src/vertebratamotion.h + +SOURCES += src/simplerendermeshgenerator.cpp +HEADERS += src/simplerendermeshgenerator.h + +SOURCES += src/motioneditwidget.cpp +HEADERS += src/motioneditwidget.h + +SOURCES += src/vertebratamotionparameterswidget.cpp +HEADERS += src/vertebratamotionparameterswidget.h + SOURCES += src/main.cpp HEADERS += src/version.h diff --git a/include/dust3d.h b/include/dust3d.h index aa7c519d..da97e9e5 100644 --- a/include/dust3d.h +++ b/include/dust3d.h @@ -39,7 +39,7 @@ DUST3D_DLL int DUST3D_API dust3dGetMeshTriangleAndQuadCount(dust3d *ds3 DUST3D_DLL void DUST3D_API dust3dGetMeshTriangleAndQuadIndices(dust3d *ds3, int *indices); DUST3D_DLL void DUST3D_API dust3dClose(dust3d *ds3); DUST3D_DLL int DUST3D_API dust3dError(dust3d *ds3); -DUST3D_DLL const char * DUST3D_API dust3dVersion(void); +DUST3D_DLL const char * DUST3D_API dust3dVersion(); #ifdef __cplusplus } diff --git a/resources.qrc b/resources.qrc index 97b13252..0debe1d9 100644 --- a/resources.qrc +++ b/resources.qrc @@ -30,6 +30,10 @@ shaders/default.frag shaders/default.core.vert shaders/default.core.frag + shaders/scene.vert + shaders/scene.frag + shaders/shadow.vert + shaders/shadow.frag thirdparty/three.js/dust3d.three.js languages/dust3d_zh_CN.qm ACKNOWLEDGEMENTS.html diff --git a/resources/model-cat.ds3 b/resources/model-cat.ds3 index 9babf805..c56e192f 100644 --- a/resources/model-cat.ds3 +++ b/resources/model-cat.ds3 @@ -1,480 +1,188 @@ -DUST3D 1.0 xml 0000000294 +DUST3D 1.0 xml 0000000193 - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + ‰PNG  @@ -4072,1798 +3780,4 @@ Jm0B! ’¬‘ª& —1|lÁuø”ËF’0h kª2RRŒ2]"M”"|§‘EM! R&´1C¬Ÿ3_ÑuKº®¥Y6”Õ¥j\¿~¯¬ÅZ‹g"!8<>?À¬…$»Ü(žr¦bL ˆ9³Q¤Ìy|)­U…¡|îGKä h’ÊÄ!¼'Ç̶\¼t…Ù™Nyý7¾gïÞ'ÌŽ*Œ$*\ê°ÑÒE‹õàÒú5g&)ä{‹O)uÎÅ“™ ,$Z Œ’ÈÚSx*Rh™‹FÈJCë;H–h@eHB!dVŠ ráLŒ!+÷b$ -••€ëÚ–˜>DBH„˜Ö‚˜5JiŠ¢ÆT¬ƒ€Áuä@„€ 7ºePÚäèu;jL‰à¡÷´Í’®ïØoòæ[orëþ-nܸÆxgL]æò¢ª©#PŠ?úñ+H³âƒ[?#-=z8ࣻ’,— GH½»{X[ƒ§(-R&.œßÆ·Œ tÅ|¶ ?6t­Ãõ5Óé—/Ýà°9dr6†JiùÕ/ÿƒý÷Q刡©Xv=½]QhÁ¤bdIëR©9waÄÿàeN2N89iPËÈÉÃ9±ÿÚ¦Á3üŽâI“çWƒÏ{®3å×—ÓÿÞ´ò"?‹ž–G‹³Ú/HÆIDATP$b¥Q2äÍ1!Ö¹\àC@Ê|¯”R#N½Ž¬•…Éù†)}BCúÞ¡ôk¦(××#²Š\*BÈ©\R>ÉåJ)­y‘'Ñ$ŸýÚÎÆÎ>/ž+OT`-¤9Ž)`'SŽqQ2g®†•3…D(²;lýû„¤˜ÿEžfʬÒBà}.ÅK©|JY ˆœ=驼9à5ÚÙxÿ"ø¼óÒiéËÓÑ OïYEü),r–ö3áK>ÃÎü CÖÒ>•IEND®B`‚‰PNG - - IHDRŸÁ ² pHYs  šœÂzTXtXML:com.adobe.xmpH‰–[Ú:Çß÷SDô¥GUâ ¹ "qm‘ŠX-«ê¼šÄ@Ns«cøöµs¡ „=K‘’ÉüÏŒ'œÜSœÅ”åGI=¤êŠki=¥pá?‡½—ÏÊ$eT14]ƒ=ïIQ” ¶îËt^ÉÅÝ°·ç iÂs¡C:Á\.›A‹¬k~ƒ)ÃÅq§2ç/tû¾2=g¼Ð<=0Ÿ -÷OÝ Ù4{KêD}],Ÿ[uß…qVäBæ®KÁÃíEÈ'wÓ-pï¿ñ¥¡dO5zÀýžúD6Ö„QÂiàµàE÷É4ÕàcòÎ(ë}zLþ6Ƶ¸á…îÂœ³óâá%t*[ìãÇ”ý\±Õæ?êóGÜ—ä~r1ÙÑõ!Ë¢²øšþjÃßU•Ìï¡O“<ý8®CÐx»¢¼ÐîˆJâ$ÍÎ,Üíùê˜<°à»²Aà»ó”Å„{¡Œ ²d7Œ Ïb¼ˆyÊÂ7ÌYó4#,§rK{õžî]½V1]Ü0É9I|º˜z‚¤…aà©aîëÆ#43ì1ìÏœ¾9ÑGSs6ÑàFÚERÿ 'cEþõÿ#7¤ÍœÝ,õ6‹ŽåX†‰6¦©ÚòUݺ!˜ª6 t‚6ć¤_³]KªÐßÄ–JÙ¹»¸mký -?XŒKâÄœvý=Ivb𙎦á¾$O·üHíDÖ¼¯b$+XCPù¼$¾²ZÿS“Ú~÷yÇ=M< 1,¿¥¯¹»ºù:nÖ´Âë>¤£µ ¨¦c•ú¦£êªƒ¡¸r¬íÖÞ+@ýš~¯½Z1ˆ/Ǩ—ѵ°²ÝT”%¹* ¸­`Ý ·¯wÛmkÛ6Âã)ÈAEkOÄfÌô)¶ÆSˆ.ÝÛÙÚ峕˜aB¢ü|lͲthahÚÙ&SÜécö/ Üh„‘o÷5Œéš“8óacDziZèXpåp-}Žߊ ä•mUù_¬×î?(Ëe%d+jH¯Ükëµ÷èy!¢¢¢Åb1xÞh€X,ÐW,KêöŠÒaÏÛßÖ†÷^,ÃÐЪªªÐÔÔ„\.Wò>×ü±Âý¨¨¨úm×òù|Éu£Ç~s]^»Ö†G»Õ­õϸïÑh´äæ%÷y](JÆŠûomÇb1är9WÇëåßöŽÕ‰DËåY1¸ýH$´íñAåΟ?úúzÔÔÔ”ð‡‹ñ$ŒßÆÏh4ZÒŽòÊx¤²eïe³Ùº¹¯Æ³0ô=k—ßËçó®p¿***Ïçþ…éëY$A,Ã… P(ÐÕÕ´UQQŒG4-é³ÉóÀþ6øUŠÑk4Ú5æ>oיߞþóó^]VLŽm\ùyÏZûlÿŒž|>Ø­—åÎl4·iüåv¹M{ÿäÉ“hnntÁ“5¦ÛŠñÖÆ}…òÌô9›Í"—Ë¡P( ²²ù|¾D‡y¼Xv"‘*++Kd—û¦íšüÙ»J³Éé‹Õg>ÏJ6› þ6=ˆD"8wîÒé4z{{‘Ï烾°«/`[ëùOþ[}­Úäh4ØTÓwæóƒëP™c]a¹´úô9¦Áøem)Oç*m·bãfchã¢> Ì2ÿͱ|r‰D"Ç©S§°zõêYöÏë]‹ÅbÈçóH§ÓˆÅb¨ªªrÇ1×g<Ô1âq3^d³Ù’ûŒ ***>YÖFžÑöÙŽèXpÉçó%X«ªª -…BÓÓÓGWW¢Ñ(r¹\ ža¾*MsÉ Û=Å”&êƒíoæë“ê8û¦0ù óa}P¬ªþq«ñIûÇ…Ç×£ÉdÜúmúË~ß+¬Ç©T -ÙlµµµAýÆ;æ¯é•ÑÅvÃäÏþ.‡˜NgÅ ü¼×oÅY^ãx„ŸÏd2ˆÅbÍ´ëét:Å/Š­~~ÿþýèîîFKK ²ÙlàCì}K³iöžéŒÙÖ?³Æ#£ÁtßxicÂú—ÉdJl×ËrÏ~ØÓY»–ÍfQ]]]‚«9Vd›[QQt:b±ˆx<РØØúÃ}°~pÕÎyöÙ‹ñØW©ŸÖ4brrGŽÁš5kPUUUïq½†eªªª™6¿ÆmsQL ×m\s¹\0æê÷Ôîñ8)ßoò57ãm,‰‡ƒÑb±ˆÊÊJd³Ù™žàê3C<æX‡l€Õ Ú}þrÚ\Åê6ºÃ‚ûùÖ¥ÌfñÖ/©¢E´ÿÊ=£4°³ˆÅb%Æâ¢ÿl<-Èåë^QÄFÆþ±ÑàbrZ­¾h4"aýTE³Âcá%±ì6Ø&ÿª+ œYNÌ€ðû˜)J»E¦·üÜ\òÃ4±ƒaÇŸÉdJžÕ$–<ómï㶠-î¸hP4W)à¼g¸Ï)y|g;0Ÿö´XßYÞ5Pî]“t•³5¸÷@«:zjp¥…û¥ žŒ¬³Æ/pµ¢öeÖ“¡\.‡ŠŠ -TVVβël{<0¢úà=c)ŽÐ6lüX­ –9ŽI˜aú«É³rx'Œÿ|M'Ž¬ŸL ×ku[’6‘H ²²2èg¬¢¢ÕÕÕˆÅb³^L¥RˆD"%Ù»§€"¬á0#® gU0Y<æϧh âú0ЪÅ, t€ö(ÍÂ{ÀïͧoŸõo3–d |½Å’æx9; Ì6„Ü/ÏÙ;üÛkžÅóè3ÞÚŒÆvßã;·­Æ™Yî+·­|õ²úÌ^™fœõ}–eÎb‡Í̆QaÇÇÎ’*;L a IËõè«“]]±Ä -Ošx²0öìë»f^ÃäUuEWḨßêœæËG– Ëb‡Õ¯t[Ÿøºìx:Ë@œÛ1zÂl¸Ñʉ(Î2ïÕ׳Ï`;Ì<`à6 ã-…B333³&&8°`zL,€P»XÎg0v`»Ä÷˜oL“Þª«\Œ~ãF†xxµ³É²h*¾gûÁI$ã3ÿÍãi|­ªªše£´ØXg³ÙÀnòÊ(NÐÙ$—½gm1ߘv¶óžÝ`ŒÃ³üŠ±Ô—r[F°þšíðð&Ç%J£ad¾îÉóMWéóaÉ(o\¬=öƶ‘,7¼êEm,ÿÖø€Ÿgsß™f剮üàd½®ev, A?++0ú0¡.ØZýL<;{uœz] קëà>Ø ² ðòHtÍ$yýTZu–ŒëäëaA3^ö­Š&ÔÈ3j„íMVpÿYÈX‰ðè–6ø -Ô…#ÓÉƘéÕÂõ±±÷ 2;B•3Â|Ÿ!ÓÌʬãj÷«««g§GWt&Üã•ê°_6ÄÌW[ ÄA—Rã×ÏΞi×w힌…=ÃÙ}î³õ…yÀc§Þê"å ˽É2÷O ˙ڮŸë`~²Õí+ -Ø”OV¼ÏÑyãÅuÚo¶õÞóú÷“WŽ„=Ët«½Òån<`ȶF‹’MÞkËýxÖÊÙ~®P(ÌJ® œàæÙSæ‡çkyŒ¹ k ï•0°cüÓ„)×o¶ŽÇ‡iç‹g©¬ð, -·au2¿¬Ÿ<^†Mì=¦KíµÚ)Ó_¿rv‚ÇÕOO•—:lëÌgØÊk_“@ö¬aõåýZÒ¢ Û?ë/ë¬]·$Š·j@iöü˜âˆrXŠÛå÷¸èJ þì–Y«ÓžWì ã{–ŽÏLÆTt¦Úd®P( ººzV ®x›Ûá±öì¦Ù„bñÚÖq~Ž}“öÞQÌÈï)†eYòìãRû›'‘xEËŠíì8ç¾)?te°Ž£µÉú­>Óî3/2™Ì¬í+,7ö>cHÃÅb16œXŒÕÕÕ%dfêÀsQ¦…}7Ìø~Ü¢ Ú»g¿Ùh²!ÒŒ‰¨1*W<ï)n9Ðfÿ³å½#sñ^•Ä©\Ô¹ª!ôøìñÓãA9§Î4Ú3ð™CbÇÅÎŽ †9Zu - ÊÉ Ë(g‹­­°DÐõÈ´çüË%t<þ3ˆæwÃd•÷«©±ŽD"ÁÒ65v_+gæ’¹r…ƒ`vàJ Ë·,Øêb:¼€FùëZžÕÐ~yàËø«‚ê–:/î£s 6Õ*Íå -?§‰ ­{®zØŽÎ×'hñ¬ëꃼq³>Ì·ð̃öL&3 Àhõ7ë?pa4†éµ‡rñ5µ%ªÊS†Ô·z:^NÞ¬¾Báê,°Îš†“½WÎ.éum_ùÃ|ðxɼʱ=Ç­Ú’rrëÝçq÷&wTÿìyn—y©úÄü0ÚÍ&YaÜc}²>Ûl=ûO^˜¾rø‡yÍ4é=û­=L›ÑÎcaòm}¬¨¨˜5©Â²­¶û¤2­füoYeùQ¾)Ÿr¹Òét3±n0y{ûp–Åoæß-ÎçKÏvâq4[ÎË»Ã&´ø]õíž_â±ôp Pºê ²²2ØÒªÏêD„ÙK“ î‡ay‹öI‹Ê“>˶Ӟá8óõœôñô=ŒßL“>c«g;ø^]^Ûû°ŽÇÔ)Y&ʉ™Ä–+a†~¾åãÅùÐáÑÂBÈŠSQQááa$“Éà@Möþ\ôjÛl¤=§VŽVÔxk >ߢÎG•ÄÞ}í³Òο=àë:Î<êÁP^`eï±ñˆD®ng±v]ÖªŠ¤ ÌûÍÉ2¾_®Ÿ×S‚.•r²ç9.å€u±XÄôôtI ćӨñcgëîãÇ)<~, -ØÙɨsµ¶y+ÏøÎE7ËË©Ý£ÉìLmåÆŠ—âñsfGlÆv>2ò¼àÀúw=…óézÇ\í óøãêV¹¢~¸–Å׃Œ¶ÞJNÒÌwË•Úï¹úîù4¦ÕêÑ•Ñrßž=RâÑÇí¨ -×?žýôfH”zÝ€—äô@™ð°ÀSŸÕëlGt[œÒÆïÚ¸)öâ¿ù­ëÑú=·ß¨4YñÎõá Ó L¸M³a~Lùj>_ëóžãqb ïÉ‚Ç{Oî4PÓ~ê8qÊÙvõ™fÇu%×ÅÏp‚À,9eœÉ8Šeƒ sÙÏŽ3ÖâÉBí›ÑÇ Ë´õ­¢âÚ™+ÞØs`¦‰¥W'/gffÇgFËÉ^y¬I}õ‡–›ššríúéh4dzËj£íÝX,†t:T*U’Pœn}˜™™ hÓåÞV¸/f uË5ëk>õàSÛ²À~Ž—½3-jc½j–YK¬3/¬-¶3ÀÕ•6vŸ•KÏ.z|Sä³!˜VÖ^Öo×دq™Ëß›©Î‡ÙjÓÛ\.‡l6[¢ÃZx™f«7f±@šj¶Š‰câuÔ؆9Êù2sÏx±Ü@xÏ[У 3,PsÖ8±Ñóx¡lÍzzBÍïz<õfx¹]«ß3®Þÿa žÏÀ(Ó`…—`+½jÀù^ÆÃJlüd#‹Å011šššÀ°èri60š™÷xÅKUè˜hŸ<¹ðøÇz¶š"¬„mà -ƒiî‹ý¶ ŸÁóÐþ7Yö‚–]ÞF?¯Œ:ÊÀµ½Oa¼P‡ÇÉ&ÍTs[ìàô+üŒÉ'Óª36dXŸ“ÚO–ëY‚ŸS4§a”Î3_<Ы% ¸[ÖŽõEÛ1€0Ýaãe|V~ê, êLXýÊcß+W®`||¼$bû¦Ëñ h¢@í]çú.súétñx<˜ÓgÕ{×VJq°Äco²©zÍcU,ƒÉ‰‰ TWW#—$³9 7~¥R)D£Ñ’mN&‡jë -…&&&L&g­l1¹7ÿdü¨¬¬D4uX•Ñm“¹\A_yTßÍx{žsD"‘Èrà  ÑŠýŽÇã®M7º<\¢3ØžæwY.ío-ZëoS‰Åb˜žžÆùóç±páÂY 9 $¼ ˜[{„(è5úÙÎêv+aû~Ã0‹¡Ê+£Á[9htX½lã¼U6vö··üžû¤>‡y©þ5:nõY€ªý3:Ù(Öb:ùæT6Ù'ið«ø”éáÉ‚° Èèf¿ÎÅ«ß‚KÆ‚ŠaŒWæƒÌþ™éÁ‡,6Ö™L&à;ûo…˜%41eu²0›R,Q]]]âïTG9¹P___ÂÖI¿h4Zr§â2æa:Fuu5’Éd ÏT‡í÷ää$ ™LºòjöÄhÎår¨©© xÁ>Ûøit£¾¾>8—ÎK Z™ššBUUUàxòÅè綦§§Kt’uÂ0­ýmrÅ“‘œ4b¾ru¼­¿FËÌÌ ªªª_Ï: ö4Nc||‘H$HÐx8ÇhH§Ó%±Q$AŒ4‰”,Od÷‚- vð}­' ŒÍ·xK1ÊÑéöwmm-jjj\'ìõ‰ ;u -Þ½þ+˜óúã½ÇŠÉu¨1öúÀ‚ÆÏzïó½°b†&l|™a DÁghÙ!q £€Ö²d–9d ”Ê«:«/ìº×g¯úìõÈæÇÕëiCÓášš$‰a´yà˜»^dCÍ2 3—V7£‚*$s]¬ÿåìƒ{ãÃ|d\id¹bÇd Dg’Y—µÚ^X1 d¼U]˜¯~—ë+ÓZ®> æÛ†Ö¥z½´[a˺`31–7ÚuŸ±:j“'ÉêwÃü-ÿÖñÖgÂx£:`ô˜,³4°À€Îþ7™3 a3u¬êÒZOí^XrIyžqÝú÷\>É›5ôl†çû”/Ì_­ŸiJmp5©ªÚ/®¾:ÂtÌ3ØóaòÈc[(\]666†\.‡ªª*ðßa>˜½Üä¾6àmTýÖ1W[ …iòÆÎ{o.¾[=ªïzß~på¿X¼–(²äW6›E<wqÝ\ôðsjŠÅ¢è{Ïs½œ\ñ’Tžß÷~Û;|ΓÕÅKÙ­N¶5ª—\?ÏRóX[vO“œÌâ3F¬_ºZÂ@Khy|ŒfGo,ÕÍJ£Þöl"‘hÖ‰Kæw4  Ö[Ú®³Ä6¬{ØÕ^p[F‡Nxr•H$‚$1Ÿ3Á<à3êjjjJœÃá^)G3ðazÀ“¢,6&ls¹-OÖ¬^å ·¡Ï V_, ¶é³'¸ê Þ*Aœ%ó Œç¯cÿ›E…àã?ωXö(l6}.šø·*ü\´z€Âsrí^as®Rî½r|6GVnù€’Lh˜Ód£ FÏ»oõš2 -$“É°j†Ûa'4W¯‡§:^×[>îöŽù3<ÈT'ÆÙi½ÏÀF0»§À×{Îî)àÓºÃVV¨3Ѷ °™ÝóhðÆÙþ6  Ÿ} -³ŸÜ®'ï¦7ú¾ÒÀ:oí©\kÝæ”9pÓ6ÄZVZÝÇ-Þ¸X6šW#¨=›«®r×ÂJXŸ4`3‡[__ïÒÅ>“ùÇÿ<ÂÏÚØ(] -Xl6š¬ê‘Ú/«ÏÆžg¨¸FKØV•—H$‚úúúY+±¼÷ÉWõg_Ì^ÍåÆ*‰”Øõ0Û`ŸGuuõ¼¶#š_›Ðñü_"‘(ù›é®É„ɿϺ¨>ß ê=>˜ŒZ_Ù÷‹×V~¿***PSS3Ë®xÅì +ºÔêÌßãL°Ôò2ë0+7BÀŒ-WÊ=æ\Øq2ã5PäÀGÛãe•Ìóÿœ1.'èaÁ ¨¶ãÍ.Yj(ÙXy „mÿ€Ù'‡*F·ëÕç-ÕÓW<å°>yFAA’]ç:UiL±˜/êu,Ùaj°¤<âÿ•6¦‰ûæuœZ ªÝó ©.Ec^jâõ÷·sŸyYûïivž<þ|Ÿéðöé«,XŸ˜^uœ\''öì·ê²Í@Yïy“gBØ4ú˜–T©¨¨(Y -9WÒ‘e@Á ÚûÍ_r¨¨(=‘Z–¹OžŒ3-&+påUf¬WL†iîÚTæŸê¶U¯.ås2™ –Ññ‰½ÌàšsÕ/ë„å+ƒxµëü¼]ã‡ßeßl>†¿Žƒ0ÖköM¬_âµ?†Iwlƒ=™Ó¾˜¾WUU!xŠš¼÷•˜ë)óI °CRƒÃŠï -pØ»¶WP—2z€˜‹gTÕxñûÚW ¸¹.êجxÙQm‹ ';-L³Ž§WoØ3Ÿ=ÅàzÂêÐâ9¾Çï³¢³Áä¼ç=cì@µßmü„uv]Á®÷n˜Ž†é\ïù='lâñx M,kªošŒ±Â×9Ó¶Ü]­‚“5 *çâˆê0·Ã€‹uÁ°ò.Ìþ© RÚóýrI#¶ža0ÅzÀûÖŒž*ïžñäV¯yò«÷ËÉk¹þk{&_,7Ê+MÎY1›–½WyáöçJàh -n9ÉîÉ’Ú8þgïò¡©ªÞXj! Äð§h™Fî¿þV¾+íÊ¿¹la˜OQûÎ Úø \içqðdʳ•jóŒ¶^y–Z퀇k˜'õŸJ'N™¶0¾[[Š!Ôfò¿r˜Ð7/ù 2n:¤ÉT«C1”ÚM-<~öÏ[ͦv€}€Wt|Œ6/iåáHÇ,/|^‘׶a¸rx”uÀÞQ¹à‘ÒÄÉ4–m´•J‹—,U>„õÁó—žßôä0Œ¯auš,_¼U^ÎÂó¼m2ŸÏ³±Vê1óMiW|ÂxGy§cÂrÊt2¾b:Ô/i|¦M$r퓆&c,;†fm„í ãM«_q×gKüÚÿ,§L“â–Ìä-Æv“$êKµmõ‡^²{j;­]Ö-_wëÚB.a˜ž·P„xÅ:`ÀÞ²séÕ@èsž³#`å} -XùÂÍ\•3dzMgMíºbÁ•‚¦UÛÐç¼w­?ÜOOhÞ÷îkQþ…s@PCÎt”+åäI¹ÉìrΊ–éš ³ñÒëaξýú¸e>úVŒ™LfÖ,©¢´¨n)°ä{ú¬&o؈2Àá{a…e€A£}uœiµ÷Õ°+_Œ6Õ+åh Û’àÙÏ…ɵý¯c>æ*óyF “dðõ0À ¥œMS‡lc©€<Ìv{tΧ„%bÂèôo¬Â‚Iý›WxØ5ªZæÛ?qóäÏë›wŸ¥°ç™vöÝ^€ÏûW•NsKìkÝZÊ*n_ù6.a>ÛŠ— Ñ¢ ØêâÙ*µ^âÊ®sòË -å0;bïó,œýÏAÞõø1•mY³ßöŒñÁ«#¬ðì<÷w¾6¬Üs&Ÿ^b‹±”ʺâ/Å—amÛ8Úá^a‰;¦SÛVÙTŸÃ‰~®»œÿÓÂã¨ÁÛ\x‘Ûfz´„%å˜f#Ø„Ù[“ÞæÂ6Æ‚(˜œœ,¹Ïg¥(M–Ðѽöêw™~{Þž [Â_¦bþyç²xü¶ vÍ&ɬ¿šd×v<;T(\=¤Ò¾ ¶]‹õÝ{Õ–ž Ñ¸‡åŽq%'ÀƒØ{ó)ªg6©lÉ£Ñã9û:[­R,^=ÒúÂv:lU”µ­6ÈdÁúçž Zc¤‚O9º„Æ®)Ó2F+ðP ÏɮÛ=œ €G"W'á“/Y°˜Nv*ôšef>söŒ…NùÌ¿Ãf«óßa<(KOÇfjÿ˜¯Þ,•ÊËê·Í|µ™å—ÖÕ-{FOjf¹.¶\'gœ=Û&›VÔÙ¸ê¡EjÏ€R ¨ËÇö”x<`¹T°Ãôé²svÀa²Ïíªm¶:½­L–\aæñRíß\Åž-—ä°÷m)ë©5mÛ³ÁºÅŠ:Ã0PP[¢àÁÓMm‡ûÊöùÇcéñ›m‘<; IDATR¹qWŸ®vÂèáñ°ïSk¿t ½qÕ>ª}.·}’m©Új¦Cy¬e.ߤ«3Û2_Ï^jaù¶>±Ì²íÕ€ÛdÕ&n•Wÿ¹?&gÙlét‘H$8©_é`lþØ0¦¶Á…qŸb$Ói»nÛ²þ±Œ°)J?omüa,Âréù3µµœ@²ñ)gƒ‹Åâ,šGl›YÏز®h²Ÿm“ÉU4õWx; üœ -”'Ìž«òñ3:x³YPÙ³¢zŸ@òè`etóž9¥W3c^êP­^Ý ëõ‡ùÁ×=ƒÅuÛóꜹŸÌuÜ?΂²Âp;Ú†¶§<ñ~‡/3Š¼ 9÷Éf}¦¦¦‚´¼úÕQè’I$zŽe¹>z}šÏóžÑðÞ slô²¼ ‰ßac#¦¯žÌ³ž2­½šˆägM.Ù:f£ÂŠÑ¬{©¸nµ9*gÜ? =ø™0]·ÿÕÖ)VZ´_¦/joŒn êX–U^˜.6¦Ú/Áåì%óœy;×Á?žsW{iôiòƒû¤É ûçØ®í+µ(ï ¤z@ƒßñ~‡ÑÏã5Ûª}(¯}S“O*ÅbéYžæë\½ôÀ%óh.抶©3mœt›(篴oÚŸü·&µ¿¬«X²_ñêU>¨= -ë—Þ³¶½ÓÈÛÛ4ÕñÒ@RböŒúû›·xŸ–µ÷=y2ìƲa÷ÕÎÙ5›ùµƒ%™7ÞØ«mód¢œ{6’ŸUì­cÁÏxøMý'_gZÙ§è”ã³çÕ(Î(§Ïåìˆ&ÊÙ7¥Óèà”'êë”V^hü2Lé%”œxæd¤É¨&´Þr¼c̦´{¾^yÈ2Í×´.–7ÃL¦7Œ3tFu­æããÕÿ°Ž3¾1ú¼ÄŠ§S3Z½ZTÞ™?O«ª¬ñ}[áa‰9;ÝŸ}0ÓljKØØuµÊ+#@VØ Ø'"8Ăų¨s1c>Åc¬•°Ù”ruÍu@9#m gdU0<00õ=þ]djFÚJØŒ_ãþªÓµÂ[ÊÍv±âX}œYbšæâÂê+ÖŽÉ£—Yc#T®/öìõŒ¡÷,·3xõ®›[&Ô3aàTëcá÷ç3ÈaÙàò– [¹>+¨*GC¯õ7g°=04WÑÙ§¹J9@íµÏvGK¿XÊÍxp¢Â«Çž) -H¥Rnð3Ÿ¾‡ÙNnKëådªf¬Ã@«Ò?Mœ¸ Ó ~Þ³F«7+eÚ³­am±î±ƒJg6í™0Åò¬€Í›õûU‹&þ¸=£•ïÏeãT>T†æ3¾arm|SÀˆñsåäÛaùUyë­ìÒbºÂ+ ¬í°™X£ÙfŽx¶h¾Åê÷‚/çÉ¿Ç{¦£=ží1P_ÎnrÛlçÊÙö|È+Ë}.zfkK·xýÊúaôΧTVV΀sñ›ý¦9T“zÏr0Ëï†Ù}—g-¯‡'öž­ì°¶øà5¶åúƺ¦Áµ7é3VÑ~³ìÎ5^öÿÿ„/W4.ñ -÷›íE9,V/'çÂéZ8AÈ…z–iÅT<þ6ó¯ïhœ4ÿõ]ž\ô|a~*§fçËMr•ó‡Ö§wJP @¼Y+1ãejLÂ:Ôx WgÀ€‚×ÁY~OÛRúª««ƒOC„ÍØy)ì/ˆšë-Ê/Ã5WAÁQTÞYý×é%ÈTXÆ4Ðe_a³¹6©àé•ÖËcÇÏéŠ(æ¹g§Õ§½Êg¶£ê'Íny3ž<ØrmïDvO´°íR{¤{¯Y¿Ùgðß„éyñDMü<ϸó8{ø‚¯ë^i–m«ÇÀóÇƾΫ«<a]ç3‡Ì^{xÇÁKàé8¥+”fö¡<£VX~T×ÙgòÞ}ë‹wžA¹ß*׺åAý¿þcþš-³qÒ­‡FŸÊÛ•]õ mpŒOÊú¨‰i1[oIH&/æ×=ß–¸ô¶“ŘP­LËœU±xíCa`-̱0³Ê½¹ -;ç¹f½”&eÓg|( -8þ<’É$ÚÚÚf2uÔamyÅUåžõ“·œaü8E?“Ì^êÏHû5W˜síû±6=g©2ªÎ>ŸÏFÿÊ•+¨©©AMMͬÀÎŒ ŸüÊõ¹ü.qËØ…%·´ðØ*/™Oµµµ¸xñ"¾õ­oaÓ¦MÄää$vìØG}­­­Èd2³Œœ÷›à|éK§Ó%4•Ó}Í’ZæÓVEEE%JžAÀ< 3Ü×Ó>ÏØ(4Ihò §ª+lÔ='ë5:~ê\u—éP;£«=cÏs¿5ÉæÍha “%å?§3ò^Ôôùâŋؽ{7Ö­[‡¾¾¾`ÿ¥ÚM³}ö­xÓ鉉 Œm0xäÿ™–B¡NNVrŸ8§³!ÖþÍf‘Ï烙¿\7ó·P¸¶‘Þ´~s"Ðtží¼.1žššBuuõ¬ýÒ -lŒ&–aöÛ€žln ›u_ûšÉdJNø·þ*?ŒÏããã%`Ù+ -º´.µm–¤- -%ŸøâÂ4Y0Çç´§ü¾ö_e)Œ¯Tir¸¶-E¼öƒú™™™z¼1ŸТv¯1=×[¿Ú­ÃÃP×;|V’Î~3sáPmóÉ*/:ýªæ¿Ø¦±š«°\„•öSJ?û{§œ_`Ùõ0—C±XÄôô4ÆÆÆL&ÿÇÏqЕËåpùòe,X° „6 °Œo333/ù¥Ñì.'·ŒvnÇž5{Ï~q‡òf||555H&“%ò§ArEÅÕC'''Kð®7V©T -SSSW¿/tØÿŠqÆÆÆMMM%ô±­µ½ë©T -šÕVYÆ 444p~6Ú‹Åk'è+æ×IJ OqÆ—|>™™™™a;Âü©¨¨ÀÔÔb±‰D‰^qÆäqbb‰D‰D"ˆ_8þ0>çr9d³Yd2ÄãñYth,d 0㇕˜) gË_/+®BÃŒàÌ ¤µËŠ¨¢õêu{‡‹Q^QEãë&ä‘H¨­­u œg˜æð(PW^¥ßŸæl–:<~Ï!*?XˆÂ;C5RvO¯sŸÃ‚1¾7—ãS@Í -f†•O$ö”Û«­­-[mÇ”$Œ‡êUÙtß¹Ê%×vÏO+‰DwÝužþyüýßÿ=}ôQÜwß}˜˜˜ÀO~ò<öØcH$h7”hýa†“é²:èóÌ ?«<×6Ê =˜ŸUÐjK£t–Îì˜n³œÖSÿu<í=%2Æãmm(ûOçÌÛ9#çšLó{a 5î»=;55lSWž¨ÎñøZ‰±Ðª i‡<à'Û?xñâE\ºt +W®Dee%Òé4*++qìØ1är9ô÷÷#‰×u ¹^o†ÛËâhQ€©×=Ûïúúz7›ïÕr×-ÑÁ{:K¬/ 蘲±ôÚ5áåúµŸÌKc*ð| Ñ¨K‘Œfvžñ÷Ê|V+(èô‚InŸ—íšqcÐÎãlýó‰Qš$)8 ˾[Ñz= ÈÏÚÿ¹\ÝÝÝxøá‡ñòË/cbbëÖ­ÃƱk×. `Û¶mH$ÐD®Íž±óà#íŸaÁç0ù -a´ZŸ¬>]>¢x,9Xâg¸o&…g0-¡`+@Œ‡ÕÕÕ%ÛÌ(WVVA÷ÃÞ³¶¸OÞ%¸ÿüŽÕÃõò¸xÀˆÁ„>£3 ²ÂdÏîÙ»  ¹]+sé©Ž¡‚®W”£MA‚ö…ûȲÅ:kûý­½h4ŠÚÚZ,]º»wïÆ<€?û³?ÿøE,[¶,"ÙQ²íÍf³hjj -’%ÞL½ò…ÇŽÁ -L7ïѳ1òÆÃduuu‰.‡ñSß÷fWŠÅ«[¬¯ ÈØGhSWW<§cȲo¾Ï|‰×/ž €x<Žx<^‚)¸mþ¿ºººì˜0m·eu1/4†éƒ}³-æC3 -…BÉ¡mJ‹Öoï…aíƒÙ5žHÐwÔwZݼeÆƳºº“““Aww7ÚÚÚfÉ‘â‚0:=[£÷ÔÖ‡ûw¯oüŽGÛO˜ça}b>sp¤úŘKýƒW¯‡?ŒF tØ~(µ^+&§Ü–½ÃöIyÁ˜Ûú†#ð¸*ÆWQßa|fìÂØSmÆìãx´F"W±¿úfæ¯ØJ&“¨ªª*™\`{Ï G›­µoÂ{«Œ†ÊÊJÔÔÔÌ™ªçv/™LKðËÙ«b±Ø*»¦ø‹ý?«2f4ñÊ¡¦¦¦`ë4o1º …k+㪪ªßc×™.ÖG>—‰ý«Ú ó jÃq¼Ë“ +ìË”·¯Xÿš››Kð©ñ[ýM±XD"‘è¶ûœ P‰Çã¡8M¯{ÛubÆt^¾É¦%L°ôžuö©§žB__n¿ýv,^¼ƒƒƒøÛ¿ý[ÔÔÔàÞ{ïÅæÍ›QWW7 x«áõ‡ç¹oF#¬xFÙ¬ -¬Ôñ@lÉ…Ý/®}/“³pœiK&“%3Zlp’ÀêTc }ÒRŽÊ‹°:þ¿(sÑ9ŸwÙ ” Œ8I ½ÿÍâNJpU«««±fÍf/àòåËøÏÿüOìÝ»k׮Œ%KÐÔÔTâx8ˆT'¬2íûõÞ{ñôRmýÍŽÞïcÏd2˜žžF:ÆÌÌ ’É$ŠÅ"R©âñx°œª¢¢CCCˆD"hnnF6›E*• -fI›››ÑØØ8sK ‹Å § ¦\a}RG¤vÍÚagÁ×~•b<·ïój¦ÙmÿEA—W/'ü<h2`KôuňByƽ©© ---X±bn¹åü÷ÿ7¾øÅ/âßøn¼ñFÔÖÖ€%…X?jkk‘J¥‚DÁõŒ»wÝî1d=®%Ž™œ€*§“vßÀ:Ÿl÷y?,óÞ  T.,aÉ~³¡Ìs–{kËÞWÀ \Kèä‚œ˜Õ@!‹Ík+™¶÷«Œ£ÚHüæò7ÿûU¶#p˜Ži`’ËåðÎ;ïà»ßý.¾üå/cùòåhhhZ/Û²rA^˜üjR®¨Î(åç¼Â ¦eOÇQƒÃgŠ½zAfX°áÚgïÚ|eªX ?AœiõÑ×S¿§§VÓ3Îççu»‘׆razªvϧ°çç=¼huèJ‚H$l=೚¼¤ŸÒaI´cÛ©þN“wZ¿ÑÍ1Ÿá¶Ûf³yÅO~±^36á?Ì&ÛØ™ífZ̯«lÚ;–¼e~ñ¸*¦µL˜ ÙÿÑh‰D¢ì‡Æ#û$©Ò¦…õÞìªÊ¼õƒuÄôÓÓµ­¼ªE ëo˜-‰q¥V8xLPÃ¥÷MXÚÛÛqÇwàá‡ÆÃ?Œ;v`×®]hhhÀïüÎï`||ÇÇÆ6ÛÏÁ|9Ë}Qçn5³ÂƒfBf +×ɳïUUUÁ>Íl6‹Ë—/ãòåËH¥RÂ¥K—J¥0==Ë—/ʘËåÐÑÑ,U·=݉DõõõˆF£ˆÇãhmmEUUUà$ ÐG"‘ ]å!9/T£Ìΰòx3ÕÙd5®ÌcÏ0… oKQ%·k -d<àá5ž1ð–ˆ{ïjÀ¦Ž‡•Û3ðåhà÷ÄÉÉIÀ¾}û000€\.‡ªª*ÜÿýxꩧðGôGøßø lݺ·Þz+úúú‚Cß8siûxüÕ¡XᬬÇ7sÆ7ïºÇÏ–˜î½FC.—ÃÄÄ&''qúôiœÕoÙ³Ìc]šîÕô²¼èv#k¦Ë³™V§‡S«˜ŸR™e_ÃI*;ûƒß³288ˆW_}mmm¸ãŽ;ÐÐÐÄÊ[¦ÝdÞ¶{™­b9áv,`,çÓÀµOœ[¢•gþyeReeeÉ™`:–ÊÏb±ˆt:Øîo9ѯ!h°ÌÅžQÙ+‡2™LI²…ãö…<®<Žö¬Êë´—@c³¯Jý²>o×x›2·eÿsu»„ê®&È4iü¿€:"û›F•Ußa%bg¸~ýzüöoÿ6¾ÿýïãùçŸ|ÿûßG[[úúú°ÿ~œ;w}}}H§Óðñ€Ù°Ó@6¬(ÕΫ¡àìw±xu™ þɘn}³ìX4zuoíÈÈFFFpæÌ\¸p/^ÄáDZgÏ\ºt ÃÃá´Î§<ðÀ¸ùæ›PšH$ÐÐЀ-[¶ ££555Áj32Öÿ°Ì–Î,ªqöœå| -;/ðêcìý¶¿¹>mžÂ/ÔÙqá f¹þ* ó­òùÁ×ô½ÆÁïÔÔöíÛ‡‘‘Üzë­xë­·°{÷nÜpà شi&''qñâEìܹO?ý4ž~úi|ñ‹_ÄÖ­[QQqus"‘ÀªU«°téRÔÖÖ–|ÑŒŸ9=_A33ã£3Ü/øgaÅþæÃL8ña‰´“'OâðáÃ8tèN:…ýû÷ãÃ? žK&“˜žžþÞ±c:;;QSSƒÓ§OãèÑ£ˆF£øã?þc¬Zµ -W®\A]]zzzÐÔÔ„ÉÉI?~§OŸÆ‚ ÐÙÙ‰cÇŽaÏž=hllDMM z{{±|ùrÔÕÕÎQuÈ à˜j¦ÜŽ -èæš - U7øSWóÍ\40÷žWÝç€À;xÍÓ ˜™\êÌ%?¯N>›Í"cñâÅøþ÷¿ŽŽ|ôÑGèííE,ÓO>‰'Ÿ|x衇ÐÓÓƒ 6à–[nÁ‚ gZ__$[m|8éÑ¢ýS¿åñ¸&œ¬hÔÆ…ý¥8NúaddCCCøàƒ088àêÁM»víÂøø82™ :;;qåÊ ¡¢¢"HXYºt)zzzPYY‰ÁÁAô÷÷#‹aÙ²eèîîFKK –,Y‚ÞÞ^,X°µµµ%vÁ@%'*806p`ëÉ·½§:ä7•3q*«¬S @=;¦ú ö\ßó.¯hPF§Ê÷3 '…ùbO†ãñ8Ö¯_¸ñÆñÞ{ïáOþäON§qûí·cÁ‚Áö)T*5K>5ÈSZ™6¹Øçk˜y6È㳂k—ï+oŒ×Ö­´¤\¡P(ÙÒÊöÁ°¢âGNŽ²¬•K sßxßµŽ£óçÊ#å÷—éñ¶õ±=â‰!+ŒÛCÛ=^m¡rmïXßÌØ;懙–-N:+æ×kŠ]xÉ=Û*~Γ÷ááa<óÌ3˜ššÂ»ï¾‹‡z(تÉžtÛÿzþ®@´¾šOµd÷IÇV'#x g_”/¨3mj/9žRþ°M·ûv¨ŸM†r&¯Šø@Eë3ÓÅI•-•/]ùËc¨6˜ÇÊ{GæŸÉ먽«˜ÅKBèo[¥dIMt«\³üZ‰yÆ^;Ѽœq±bjmmÅŠ+[¶lÁ¢E‹‚ý”£££8zô(öìÙƒM›6¡«« Ë—/‚kÛ¾}γ–|Uƒx‰Žõ‹*;‰bñê²Q|Æ34ñxÓÓÓ8|ø0NŸ>‘‘ìÛ·ÿüÏÿÊ“ŽŽ\¸p°aäÓiLNN"—Ë¡½½mmm¨­­ÅòåË‘Ëå°ÿ~d³Y,Z´K—.Ess3¦¦¦N§1==ööv$“IüøÇ?F&“Aww7,X€ÞÞ^,^¼õõõÈçóAbÅOÁQ9àÎ×½1×À9ÌÑþoUV¯-ç¹öíZQà~½…d d¯§˜ìÚòÚÑÑQ<ù䓨¬¬Dss3Î;‡ à‘GAss3^yåÜtÓMžmÞ¼—/_FUU†††ðo|£¤þ;v`ýúõX½z5Ö¬Yƒ®®®’=rjÔóù<êêê‚31Øç`šîñ²}ã—éz>Ÿ>Ñ6==ááa bppxꩧ‚ScL&±páB455¡©© o½õ¶oߎîîn466Á[cc#€« ‚%K– ²²GŽÁùóç1>>$ͦ¤‘š÷ IDAT§§ÑÐЀºº:tww#™LËã²Ù,vî܉±±±`;Ó¢E‹ÐÓÓƒx<^²wÚO–°Ì±ñéãÊ_˜+×F9:ÌÙy–N&p}òÚõöÉôÂ’›L+·Ë -‘H`hhgÏž hmllD?.\ˆ“'O¢µµ{÷îÅøàÞÏþóøô§?ÚÚZìÝ»mmmøä'?‰ÆÆÆÀé2(ñ¥öè –€Ò@Wyωq­ß@ɉ ŒŒŒàܹs8räöìÙƒ7ß|ûöí›Ecuuup Þ… ‚U4---¨¨¨@*•BMM 6n܈ºº:LMMáòåËï>þüðCüîïþ.yäüÚ¯ý–-[†eË–[ìÄkó*@ž‹&^y©%̦*ïÃfß¼:5À¶±ä›ÙlcccAÒyff&Xñ™H$PWWÌDZ"¸šl³ºêëëÑÔÔÔ___ÚÚÚÀï°ÏôŠ§ìùÏ(Ùo[ª­|Èüÿõø)ÅžÿѺ=Ý+^Pnº¤¼óxÆö˜“0J£×®%4½½÷½½½Ø°a>úè#üë¿þ+ž}öYüÍßü nºé&466{¸ÙÞñvlÓ![]¬1ŠÀ†íMxÅ„ê†%Ôöò}æÃ\e.{ª6™'—,>c{m_¸áC¹?†5mˆý¥ñ˶tš|³±¾qì`ïqBÁîi?æ*š¸åÀ?Œštàd ÓhÅÆ•azÃEïÅT5ÖIð² ì¼s¹‰.\¸€?ü·Þz+î¹çüøÇ?Æ /¼€®®.ttt`ëÖ­¨««Ã_ÿõ_c÷îÝøêW¿Š-[¶Ÿ=ÇÚµkÑÑÑd2‰¦¦¦àp ždúxoãÌÌLðíM 0***ÐÐÐô&d&–ÝÇØتªª055…©©©à¤ÍK—.á•W^Áw¾óœ?>h¿®®ÍÍ͘žžÆÐÐà–[nA2™ÄÅ‹ñðÃcÉ’%8|ø0¦¦¦pûí·£¶¶ÓÓÓhkkÃñãÇ‘ËåÇqîÜ9TUUaåÊ•èééÁÌÌ ªªªÐÕÕ…îînÔÕÕa||'Nœ@&“ÁÉ“'±sçNTWWcõêÕ¸ãŽ;°páB444K:M@¨`y –³c<Îå’AšÕòžå:˜^2ç ° -»&‚ÿÀÁ²­a‰ ®‡VÑûʯ0í=¯<‹®<â~˜þ á›ßü&ð›¿ù›8räFGG±víZ,\¸GŽÁ¿øEìܹMMMX¼x1FFF0==·ß~ŸûÜçð•¯|GE:ƻヒçž{Ï=÷ ¯¯>ú(î¼óN¬_¿‰DÉd20\<;qìØ1$“Id2™% TUU¡®®.˜å+®.)6GfŸc±m,vj©õÓ–ïÙ³GÅØØñÁàøñã%¼íèè@gg'ªªª°páB¬Zµ -‰DƒƒƒØ±cº»»qæÌLMMŽ0ŸÏ£»»Ÿüä'ÑÓÓƒW_}÷w‡ 6`Æ ‡~ˆ#GŽ`Ù²e¸ù曑ÏçqêÔ)TUU¡µµÃÃÃÁ~²ÚÚZœ={o¾ù&Ö­[‡M›6¡­­-H˜-ÑD‡­·\Wh• -,Vx&Á - {Ïì;Ùr¥°ö€!PúI,£ƒAÊ\ ›ëçÙ*u®ú›¢½{æÌ<ýôÓxâ‰'ðØc!ŸÏ#cëÖ­8yò$²Ù,r¹Ö¬Yƒh4ŠT*…þþ~Œá _øB =?ü0n¼ñF¬[·.Ø2ÀË(yÖƒûoŸ©+¯ÎÄÛ*.æiMMMð¹àÚ}ã§é$ƒHÙl6ðY'NœÀÉ“'qäÈìܹ{÷î ÚŠÅbX´hQpÐ^<¾rÐÛÛ‹d2‰±±±@Ï+++1<<ŒŽŽ´´´`||/^ [öŸËå°víÚÀßäóy\¹r~ø!¾ýío£¥¥·Ür Ö®]‹•+WbéÒ¥hooGeee@¿%kr€å‘å,̨ŒÙ·»Ÿå7aþÇøÈz5W‚‚ýÂ\íqÒÌÛíáµ°:õú|“)¦K¶¥ê¾ûîÃã?ŽO}êSèëëÃÈÈž}öY<ûì³€Ç{ k×®E[[V®\$L/Xlåû×0ßj×,ÀÒYN[άþ–ÿ6\ÌNNr›&<£mtg2LLL`xx—.]‘#GpðàAœÔŠa Zù^¡P@KKK°JæÁÄîÝ»ñWõWèííÅöíÛ±téRtww—¬à597¼dØÉhàDãk£!‰”¬TcùŠD®}ÞÕ>7g¶×kMF«Ž²OR¬c÷9зú ó;v,XuvåÊD£Q´¶¶¢²²“““Èf³¨©©p5qf‡­Ú¤©õ³ºº X°`Apn“M{ºáaþÊÊÊY Ó°¢ºÅÅÆõ…ã(åYXQ=°DŽñ˜y­uY9a‰Dcð§Jæ5¬¨×YÇÆÆðoÿöo8uê¾õ­oahhù—ÌžG"´´´`ãÆؾ};vïÞ—_~K—.Åk¯½†'žx" aíÚµèïïÇ–-[°fÍ´¶¶ËríäDs,¹\CCCؽ{7öîÝ‹T*…ÖÖV¤R)œ={±X ›6mÂwÞ‰æææ ‘‘œ>}.\Àôô4Ž;†sçÎáÖ[oEww7>ŒÉÉIŒŽŽâ§?ý)Nž<‰ææflݺ50îöÍÇx===(‹X¸p!jkkqêÔ©`¦µ¯¯[·nEWW>úè#>ŽßÿýßDZcÇðóŸÿ­­­8qâ¾ýíoãäÉ“hooÇË/¿Œ¡¡!œ9sýýýhiiÁôô4°aÃ|úÓŸdóĉX¾|9Z[[ñÑGá›ßü&¾ùÍoâK_ú/^ŒÞÞ^ÔÕÕ¡··MMMÅK/½„ÇÝÝݘššÂ¹sçH$ÐÙÙ‰x<Žîînôöö¢¢¢"ØOœÉdN§ƒ=øÓÓÓ¸í¶ÛÐÕÕÖ766†ÑÑQœ9so¼ñFÀÛÖ²uëVTWW£½½‘ÈÕÓy»»»±gÏTVV"™L"NãŸø–/_ŽL&ƒwÞy¯¼ò -ÐÙىŋ㦛nÂÌÌ P(°páB¼ôÒKøüç?þþ~ìÙ³™L+W®Äš5k011C‡all kÖ¬ÁÞ½{F±lÙ2Ô××cÅŠèêêÂ{góçÏ£¾¾[¶lÁŠ+PQQQd°|òÞ?ŽÕ©zú£Eí²ç@t…ëD¹úÕž‡µf#4P×wùŒ{?ÌÙ2ŸlFÑKZhpPYY‰?üñW_}ˆÇãÁÊKÔZÝö]Ýt:ááaôõõaË–-¸pá**®ž¸ûæ›o[Ù>ùÉOâ×ý×±nÝ:455aÁ‚¨««›Å»|>©©)œ={GŽÁàà ¦¦¦‚DD¡P@]]n¸á,[¶lÖy› I§ÓÁìFee%¦§§122‚¼ñÆ8räÞzë­Þôöö"N£¹¹9¨»¾¾mmmˆD"hhh@OOÆÆÆpùòeŒŽŽ¢ªª -mmmV¦ÕÔÔ`ÿþýFmm-Ö¬YƒH$‚Ý»wc÷îÝؼy3n¼ñÆàÀÄd2‰ššôôôà­·Þ -‚¾gŸ}UUUøìg?‹uëÖ¡··7X±æí÷ Gl“ùW,{åä6Löì·Œ[½Ü†WL.8ï=ÃtyÉ ¾îÑéÕé%¿Ë½ÃmVVV¥×VJÍÌÌ`ÅŠÁýýèGøÑ~Ôñ¥/} ÷ÜsÒé4ÆÇÇÑØ؈¾¾>,Y²$v¬œ 0€·ñÇøøxppkUUjjjÐÒÒ¬â²B¶â(=ÌÙÃìûm»ŒÙpKª;w‡ÆþýûñþûïãäÉ“¸råJà›úúúÇqçwçˆtww³”MMM8{ö,>úè#´··ã†n@MMM@[SS¢Ñ(.\¸€Ã‡ãðáÃÁ}–-[†o¼MMMæ³3Hx¥¡ -˜Ñ™Ü0ye}ð’­ö¿¶[.Àf~{3Ê\‡ÎæM*ëÞ•Õo4òÞv{ÖäC}릌øópõó{\ñÖ½bñêJá 6àí·ßF2™Äm·Ý†\.‡^x/¾øbÐþý÷ßU«V¡«« [¶lA?¢Ñ(.^¼ˆl6¬öµ•Åb1ØžlÉ)K˜¾={û÷ïDZcÇ011æææ`b³P(`Íš5¸ñƱ`Á‚àÜSÞ·nöJ?Á«þ[ùlô™}Ã… pæÌ\¼xøÇüÇ ù¾ÿþ`;æ¶mÛP]]l6‹®®.LOOãÌ™3ÈçóooolA$ ¾ÖÓÜÜŒúúú@/ëëë]` Æ+ª««KC侩ÌzþHsÖ ÔyRÈ“oŽxUËÛeN"Xû`Ñ¢Eزe ²Ù,êêêPUU…ááa,\¸333 N" -N=sæ ~ñ‹_`íÚµˆD"X±b&&&ðꫯâý÷ßÇ}÷݇ææfÜtÓMèïïÇÌÌLðžb±ˆÏ~ö³hooÇ… ðÃþï¾û.¾óï »»©T ----ˆD"èíí ¾ ºgÏ bÅŠ¸ãŽ;‚%gš9P€‡9r†ž‹Ó¹f1¯÷žVâ° ÊŒ9/¥ù¸e¾4••¬¼ÀìÞ,£|áÂüèG?ÂÎ;qÿý÷£©© «W¯Æ/ùKÜpà Èf³xõÕWQ__%K–à¹çžÃøø8–/_ŽT*ÌÚL;vìÀ›o¾‰çž{;vìÀŽ;°eËüÃ?ü¾ûÝï–кzõj´µµg´¶¶â­·ÞB, g‰D½½½H$xî¹ç°ÿþ’:ZZZ‚Oêär9ìÞ½ï¼ó€«òÑÞÞŽsçÎaÛ¶mx衇‚ø- Ëf³¨¯¯Vëd2?~CCC¨««Ã™3gðóŸÿëׯG$Á¦M›ÐØ؈úúzŒa``===èïïÇÆ‘J¥J¥p×]wá±ÇCCC²Ù,î¸ãÜvÛmÁ,~*•Â 7Ü̯Y³ .ÄÔÔfffF±víZÔ××ãøñ㘙™Á|€‰‰ ¬Zµ -õõõ(‹%ŽÙø[aýÒ%ËaÁ°W88 Kð’1^]3×ì?M¨Í¥¿¥g‘„uìÃî—+–¨+ -xùå—ñçþçhnnÆwÞ‰3gÎàùçŸG±XDcc#^ýu\¾|Åb1–D°ÄÔªU«ÐÛÛ‹Ó§OcÏž=èèèÀªU«J¥ðÒK/ᥗ^Ü}÷ݸᆰ}ûv,[¶ •••ˆÇãH¥R8zô(Þ|óM|ï{ßÃ¥K—Z1::ZBÿ¾ðôôô ‰`dd$”vhR6›Åôôtp eee%†††000€“'O¸ª“6l–ÏÌÌ`ùòåH&“f„R©&&&³íh§OŸÆ©S§ÐÚÚŠ©©)tvvbùòåA€bßȾ|ù2 ¹¹gÏžÅƱnÝ:ôõõáÔ©SصkFGGƒ3î¹çž€¶ûÂ3Ï<ƒ§Ÿ~7nÄ=÷܃õë×_âm~`èrb–9»¶ÀfyôzX1Yä™$»–Ó¤›÷LX¹ÞY¡ù–ùÖcýâý¤ÓÓÓxã7ðÌ3Ï`ûöí8wî>ÿùÏ#“É੧ž -’ëׯ€îÂ… ±wïÞY>å¶ÛnêU«°víZ¬Y³mmm¨ªªB2™ ÎU± fzz:X vìØ18pÙlGÅ믿Ž `ݺu¸ãŽ;ÐÚÚŠåË—cãÆhjj*±!œìTÿËã™Ïç111èþÉ“'qìØ1œ8q»víÂîÝ»\Ý*³yóf¬^½X¹re0³|ùrÀÐÐ&''ƒ b||ù|Û·oG}}=†††pêÔ)´´´“2¶òóæ›oF¡PµL&ƒ_þò—AR„(¶"ÖV9ê6‰°U†óxæz.»Ë3îì£>®Œ–{7 kÎÕ–ú(ûÍ3ùó¡ËJ˜.3F6¾×V#X2ÆÇÇqøðá`…ÕÊ•+qøðaÔÔÔõàà FGG‰Dðøãã¶ÛnC]]8€b±ˆ¾¾>455¡½½«W¯ŒD®NŠtvv¢P(àðáÃxçwðî»ïâ'?ù ÆÇDZaÆàÓ-[¶ ÷ß?¶oߎM›6¡¹¹UUU%?€`›¦õ“$ºªØ¶èMOOcttƒƒƒØ·oöìÙƒ_üâ8zô(,X€M›6áþàÐÒÒ‚b±ˆ¯|å+hjj -Ît˜˜˜@.—Ccc#†‡‡Q]]žž444`jj -ÀÕm7}}}¨««ÃåË—qðàA|ôÑGhkkÃ[o½…M›6aÓ¦MˆD®&¹må·a[Ìý*‡ß51[N~¼àÝ›èàU‹ü¿Ê"?çÅßö¼wMWÞ¶0ŸÏí!T~‘;ÃNQ³hf¼Ÿ|òIüû¿ÿ;n¾ùfÜyçÈd2xüñÇñüóÏãOÿôOñ{¿÷{8{ö,¾ñoàk_ûR©vìØeË–3Ü[¶lAoo/FFFð½ï}hiiÁåË—ñÖ[oaffŸùÌgJ¥J²iV/^Œd2Y²ïxzz}}}Xºt)òù<6mÚ„t:;w"‰àÊ•+˜˜˜@]]]°'rffñxétË–-âE‹000€ . P( ¾¾>ØÏoY]Ûc‹ÅÐÙÙ‰Ó§OcéÒ¥hiiÁûï¿d2‰ŽŽÜzë­hhhÀ‘#G°wïÞ`;ÁßÿýßcÛ¶m¸xñ"öîÝ‹£G¢¢¢÷Üs/^Œb±ˆ÷ßù|[·nECC‚}—]]]ÅåË—ÑÑÑt:C‡ajj -›7oÆš5k‚`Ç–«p{T ü“ž"°!,çd8ƒ[.X×\Ô!qBÊFs–4±Œ3`àg€kÙ5oYÓ`tª’Z[ž“¶ëÑhSSSxâ‰'ðóŸÿ}}}˜œœÄâÅ‹ÑÚÚŠ}ûö‡j½óÎ;H¥Røìg?‹T*…·ß~©T -‰D"˜}K$X¶lFGGñôÓOãÿðÑÜÜŒŸþô§ˆF£¸ûî»100€ù—ÁêÕ«ƒ,¡}µâÊ•+hnn–e%“IÌÌÌ3|ÕÕÕ¸ñƱfͼ÷Þ{xî¹ç°bÅŠ’¥e–ŒÊd2Xºti°rÞyç8pÁ—1R©Tp`¦z¹k×® Ùqúôé`ÉýÌÌ ¶lÙ‚®®®€§“““Èd2èííÅ¡C‡Édðè£bóæÍÈårAÀf_;;;ÑÜÜŒK—.ahhmmm¨©©ÁÔÔT°ì³±±cccx饗011x Ø -páÂTWW#™LbÿþýÈår¸óÎ;±qãFÔ×׫’ŒñL…,üÌ•<ó×ËúVUU…™™œ:u -===%Kb«NiÐ\…ÙÖ!Ë‚{³0šöJ›×çL&ƒ×_ŸûÜç°víZÜsÏ=l‹Eœ;wù|gÏž >—i€-…´­\›7oÆ¢E‹ ¶ÚD£QÔÖÖâÊ•+xûí·KèjooGKK -Z„ñññ’ûëׯw[lú6::Š]»v¹<œ«tvvKïÍ–444Û×úúúP[[‹óçÏctt4Øf‰DpèÐ!ŒŽŽbóæÍÁv—ááá`{ܹsçð¥/} ÷Þ{/NŸ>çŸ>8c#—ËaÉ’%X»v-R©ª««‘H$pâÄ ¼÷Þ{¸|ù2±iÓ&\¹r/¾ø"n½õV<øàƒÈd28tè.]º„ÑÑQ¼ÿþû¸õÖ[ñÈ#`ÅŠhmm t˜=»¡rÂÛZTn › cß¾}¸ùæ›}œoPÌ^nÌx‰p| û®7 ,Úsa˹=°g÷Õ„õMûi>;‹áüùóøÿø|ýë_ÇÚµkkÖ¬Ág>óœ8q?øÁ‚ó8,€M¥Rxä‘GÐÙÙ‰_|çÏŸVi666âÔ©S8pà/^Œ¾¾>ÔÔÔ`áÂ…X¹r%>ñ‰O X,âàÁƒ8~ü8öïß^xÀÕ39.\ˆþþ~\ºt Ï=÷¦¦¦pøðaW“pŸúÔ§‚Õmf«xËì¶ÚôþòåË8{ö,qîÜ9ŒŽŽ¢P(I®ÎÎN,Z´(Ö[[[1==`§‰‰ ôöö¢¿¿ù|'OžÄk¯½†ÚÚZ´··£½½=À£333Áa¶}}}ضmàرc8uê–/_Ž¶¶6ŒŽŽ¢¢¢"8à÷رcˆÅb¸ýöÛÇqþüyÔÕÕ3Ç---®E@ég>U¢ÑhèX¸pap]åUõÃxÆ[hìzò’Ùª7ö·á+Õ_mߣ(=HÚdÒž3ùä/4x>¥¢¢"ød°PÈ´WVVâÒ¥K8xð ¶mÛVE£W{|÷Ýwñä“O¢¥¥Ñh4X‘ûÆoàí·ßê´/|­\¹ñx¯¿þ:~ö³ŸaãÆX¾|yp ñO~òÀ]wÝ…ÚÚZ¼ÿþûèééÁg>󌌌à?ø.]º„{î¹'°ÿ«W¯έ°/ˆ áܹsÈd28uêTp¸ñ‚ ‚eô±X,øêT°EÅê5Þår9ÌÌÌ`||<ÀãããÆþýûqáÂÔÕÕ6 ³³3ø|]CCNŸ>úúzlÞ¼ÕÕÕ8sæ Ž;†±±1´´´ ¶¶UUUÁŠÔC‡appíííˆÅb¨­­LLLIH¥R¸rå -®\¹‚K—.¡P(`Û¶mèééA{{{àûãñx¨°•Œ‰<\Ãgª©Œ²-D®“e«”ìžg«ye¤‡XÏ,ih«¸.¥ÙäQÏûˆyd„- #„;=>>Ž^xçÏŸÇ—¿üe,X°…Bÿõ_ÿ…ƒbùòåxá…ÐÞÞŽàÕW_ÅÖ­[ñÁ@À¤`ûöíhooGcc#}ôQ<ûì³8räH0SðöÛoãøñãhkkÃêÕ«ƒ¥ ¼ßßþç}.¶5À”²©©)˜ÅÏçóÁE===Á¡{Éd[¶lÁ’%Kðâ‹/bçÎèèè@.—ÃÞÜrË-¸ûî»q÷ÝwãâÅ‹Èd28pà¶mÛ†h4Šþþ~|õ«_EßÿåìKƒÛ<¯«@ ± @ î;)R"µ‘²dË›ì8Mìt’©›Œ3“Æ3ɸí43M<wÒþÈ´i3qÓi–Ɖ-;qäEŽeÓ²DmEIÜÅ\@ ±+¾ìsóê (§ß;£‘DïÞû<÷ž{î¹ååØÞÞF$ÁØØvvvðÐC‘ñËårÈd2”––B©TâÈ‘#ØÜܼ:÷È# //àr¹¨Õ1677)(cTí+W®à7Þ€ÅbA{{;U+¹FÉýÝf¢ûpÞý‚ öY.ªÅMŠ¹h;XRðY´LþuØßÜ$š‹R ªr&;ækì}ìÙ¹'÷g,ÀÈäüüë°ïû°×˜3 Äãq|ôÑGxùå—qðàAH$ˆD"ܹs&“ B¡sssp8¨ªªBgg'‰QY_|kk+Ôj5ÖÖÖH$M4à`0ˆÚÚZ( -\¿~W®\AccãŸÌce•t¡PH‹+ÐR©)„ߺu }ô>ÿùÏ㥗^B 8ND"Ú‰ŒF#:::L&qåÊ|øá‡8}ú4mŒ“‚‚ºVcc#T*nß¾MZxá… ‘HpóæMJ"‘JJJpâÄ Äb1èõz8ªš'~ IDATj‹‰DØØØ@8FMM òó󱺺Šp8Œ®®.$ ¸\.èt:xëÖ-( -ôôô@¥Rarr@€JµZMèþ~ô#455áÑGEmm-¤Ré} *Tãþ\;~Mñý_ùàöŒ2V—ÊÇ»ø×bŸåöŽqý‚{=¾ígÚ3Øgù{{ë'Ügû¬Š*»oÖ7xöìY¼ôÒK(//‡P(Äüü<щ¶µµ‹Å¿ßO•ŸÏ‡¬¬,Ú³˜°«F£V«…ÙlFgg'Î;™L†3gÎààÁƒ(**½{÷èÞ‚Á 1== ¡Pˆªª*ˆD"Å•Ùï÷C¯×C¥R!++ R©íííØØØ pŠUÏÓé?²T**** ‘Hàv»111¼¼<$“IJ^vvv ‘HP[[ ¡Pˆ?þ~¿ÅÅÅ -…4éâĉ¨­­ÅÚÚü~?iyôöö" -aee*• -;;;Ðjµ8vì‰qŠÅb1Ûx<•J…¥¥%ܹsYYYhmm¥Ø®ªª -J¥[[[T=d:Á`*± 4™¦°°ÙÙÙP*•ðx<ØØØ€Ùl&í—Ë`(dí˜Ìÿ›››é>wvvpíÚ5Z‡ãñ8ZZZHÌ6??wîÜÁÔÔ$ iÊ{Ùïž«GÃÀ2î àñ wD7&âîIüäžocÌö¸Eî>µ;¾íŠ±û`{÷àîÜûa÷ÌŠ¬Åƒ›ÔócÒÄãqRÏ9ûŽ¸ëK2Ù:ì/>Ÿ—.]¯~õ+ƒA´´´ •J¡··(,,¤I\$‘H„ææfäççS ?>>Žd2‰ÖÖV ÌÌÌ`kk :O>ù$Òé4.\¸‘H„çž{Z­n·.— ëëë‹Å$8™““ƒììläååA­VS¡hssxã7þˆ®¯¯'áeFµZ “É„ÒÒR¸Ýn buu•Š -………@m•"‘è>–Çã¡Ö¸ééi(•JŠK#‘àñx˜0 ØÙÙÁüü<1àÂá0Z[[I¤wii f³999ˆF£H§Óp¹\‡Óé$@çÚµkH§Óhoo§ý™[ d ?^aŸg9!‹Õø טͲü2ÈƧTêþ "Üü„[$eÿçK3­ù,L$$ÎJùË÷¾÷½ï³ᢅü‡ù¬ƒ¡ƒƒƒ|566"‹í½¤¤n··nÝÂÈÈš››±µµ·Û ±XŒ……+++C"‘ÀG}£Ñ½^_üâ0›Íøüç?¬¬,¼ýöÛ„níîî©•³¤,‘H`{{±X ƒÅÅÅtîÝÝ]8NŒŽŽ¢°°………¤ FñÑGÑë‹‹‹øâ¿HÈë»ï¾K=^eeeøÜç>‡_|Ï?ÿ<:::PRRBbejµ Tu—Ëåèîî†L&Ãôô4’É$:;;ÑÙÙ‰¦¦&8píííÐh4ØÚÚ¢^UN‡ÝÝ] ·Ú!‘HHLD,Ó‚Å5•J…BA"†ÓÓÓxÿý÷±ºº -½^üüüû‚fLÌ)˜ƒpi™Ÿup —»‘dJXØküþ›ýιßëÜÊ*;vww±¼¼LÏ¿ÂÌʸ×ÌôÚƒîƒ{^þÏøÎÊÎÁúóÏŸ?ƒ¢´´”Ø(555ˆD"X]]E~~>Z[[QWWXZZBvv64 Š‹‹¡Õj!‰`6›QTTǃüü|TVVbtt¯¼ò -b±ÆÇÇaµZ!“ɨm`kk yyy¨ªª¢ÅÈl6#;;”ì2ðŠ!ÌO<ñž~úitvv"™LbaaMMM8qâµ³°Iccc¸té***ðä“O‚)•JñØcáÑG…Á`€Z­&*µV«Eaa!:::PQQ‹Å­V ±XŒX,†ÅÅEäççSò‰DPXX“É„¬¬,¬¬¬ÀívÃn·ãܹs¸vínÞ¼‰W_}n·999ƒÂìì,ìv;ÆÆÆ(p£q©T -ápÐh4X__ÇÆÆ<4 š››ár¹ð?ÿó?…BH§ÓP«ÕÔ×™iàÚ Cÿ0Œo—ܤ‚oƒ[[[X__'ôœ¿aðÿðÙìgük°d•[ ÝÏwØ{˜eò¥L×⾟ÿ±ßQ?¾öµ¯‘F2™D0D<Çöö6Äb1ü~?JJJÐÐÐ§Ó ¡PˆÒÒRÈd2 -r®^½Šh4ŠÞÞ^¼óÎ;ØÚÚByy9D"æçç©‚ÀØ_ì»ÊÎÎF~~>KYYY$h”H$““…B‘HD}½^¯>Ÿ‰Dr¹œÊT*•J•J…h4 -ŸÏ‡üü|"‹Áét"Þ›¶#“É R©P\\ £Ñˆööv´µµÁb±À`0 ±±‘@„ššÈd2àÔ©S°X,˜ŸŸtuu¡¥¥eeeD¡T©Tp:$rÆèÑ>Ÿ‘Hsssĵk× —˱µµ…™™ÔÖÖÂh4bzz}}}8sæ N:`(immE<ÇÝ»w‘——‡žž<öØc¸sç^~ùeú1ßþtÒ«l0ý€ýFÞfee!cuu¥¥¥RmÌ”|Äb1ú7·êÉÏØ5Ãá0Ý/ŸÆ=£wïììÐÚ·_%‰=|ÏäWügfßS¦{Éô.0i·Ûñ£ý·nÝÂ7¿ùMhµZŠúúú Õj±±±·ÛMZ†Ú£X~mm-ÊÊÊh ÞÞÞFnn. - - -PYY‰¼¼<Øív´¶¶¢¶¶¹¹¹0™L” dggÃï÷# -QŒ8::ŠõõuÒ¯àRáN'µª±Ø)•JQñD§ÓáàÁƒèìì„L&Ãüü<Ñ«>úè#LNNë4;;—/_ÆÔÔR©VWW±¾¾Nì°ÂÂBª²½1??õõõÄ+--…Åb\.‡P(„V«…N§ƒ@ €\.‡Éd";g ¼@ €^¯G}}=:;;! a4a4©š™J¥àr¹Ðßß¿ßO±‹Y‚Ël‡éUùý~(•ÊÆ%Àu>+æáü=€›äs+ÿû%ïûÙ5ßVù~ÃÝ÷ؾÀtM”Jå}{÷€r æs\`‹û½°çñù|ØØØ@YY½ -…pöìY,,, ¥¥‰cccØÜÜÄÓO? …BAÀ —H$••…ÜÜ\b ˆD"b¯±–—Ë…¥¥%´´´à¡‡Bee%í]©T -Á`.— YYYðù|ö€,N ‡Ãp»ÝX]]%Û%¸©© ‡ÆñãÇQWW‡ŠŠ -Èd28NJ¼H$pçÎ8NÒrI¥RX[[ƒÇãAnn.*** a³ÙH¸|ff†Dÿrrr——•J—Ë…ÍÍMäççS;Øää$ ›çääÐwÁâ\@™L³ÙŒ¦¦& lllàÝwßE,ƒP(„ÑhDKK ´Z-iºy½^ŒaffN§.— µµµ$hË’~¼Ã -Lü H|ûe6Åž“í½™|ƒ½—‰Ô³bߟØý°u† jq}€Ÿgíîî"ßÇ|"€ëöÝ@ùÁ$eX[[Ãìì,Sâ^^^†Ëå‚T*%ÔäÚµkèììÄ‹/¾£ÑHtÌoûÛøêW¿ŠÞÞ^X,H$ܺu *• -¥¥¥4 •JáöíÛˆF£P(ˆÅbdcccˆÇãDad4wÖ[ !“ÉPWW‡ªª*|ñ‹_Dee%b±ÊÊÊÐØ؈Ç{ ---Ô† ‰011 . «« µµµØØØ ê$ë×ßß¾¾>„*--…ù)û2™ 333¸|ù2UOÙ R©‹Å —Ë Q¿}û6œN'B¡¦§§±¸¸H”»ÝŽþþ~šŒÀDzÄb19/‹€—‘H¥¥¥0 èëëùsç P(Eç* ab _¼k¿ƒû:?Áà&ùü€û‡kgü…—Ÿq†ŒqÏåñx T*IM—kó™‚*îµ¹è5ÿ^3%hûmZ|Ÿá?¯H$Âââ"nÞ¼‰œœ äææÂëõ"ÃétR;Jqq1‰U Y•¾  ‰W¯^Å•+W`µZ166†þþ~¨T*TUUáøñã8|ø0€=Ú”Á`@NN|>%J¥r¹œ’l¡PHC¯×‹ š°Á€0 âìÙ³hnnFWWJJJ‰DÇ155…±±1äääÌåramm sssdo###øàƒ099‰íímš¢×ë±½½¼¼<²Ù……âäÉ“ðz½¸}û6ÚÚÚ——‡ ¸\.x½^ ´··£²²GŽ!ôZ&“ݧ/Àz ÇÇÇ‘››K,$¿ß¡PˆÂÂBLMMÁår¡¾¾B¡—/_ÆÆÆT*QPP€žž455auu•fSÅ—i\»`è3?`ãûߦø¾ÉYŸÏçCAAÁ}þ²ŸM2»çú`&åú ×·ù‰ 78ã¯ÀŸêð;îÚÃÝD­ñµ×^ƒÓéDqq1¶··¡T*) S*•‡Ã´Æ-..ÂårA«ÕÂb±èúÈ#àÙgŸÅÎÎÊÊÊP[[‹Ýݽ±µz½ñxœÚCÞ{ï=¸\.H$J@˜’q^^i¸F,.."Ò¸IµZ ³ÙLë~gg'***àóùà÷ûa±XHȲ©©‰45fff(X3´Ï1=‹ÎÎNb:$ ª|²Š%/ÛÙÙÁôô4Ο?£G¢±±ñxF£±X @étR©”&0†Äúú:®\¹‚›7oâÊ•+ÉdÈÎÎÆèè(‚Á &''‰jêt:iRI4¥¶¥¥ÛÛÛ(((€ÅbA$¡žî{÷îáŸþ韋Š‹QTT¹\NöÁYõš|qP(»Ý³ÙL öƒì™Qƹz6ìšüÙÔîó—L>Éþ°j; Þ2\}›L{ûœü½ŒÛñï‰{^?LNNâ?ø~÷»ß¡££ÛÛÛ(**¢d~tt›››$zÉ*™ŒmÆX˜¥¥¥())AQQ²+++‹Åèèè€ÙlFVVúûûáv»!—ËÉVØz €ªn¬WØ` ƒX]]…ÍfÃÀÀUñår9 -***ÐÐЀææfªæ (•Jøý~Øl6²-,,Dqq1>Œîîntvvâðá說BUU***ˆÉÀæ¼¼<?~•••4>³¡¡Æ7×ÕÕQõÖårÁív#77—Äã -t:T*U}…½QŠlo×h4ÈÏÏǽ{÷à÷ûa0L&áv»‰D •JÑØØ…B¾¾>ܽ{BáÞ´+®[C½{ss“Zø¶Á=¸±R&ûæüÖ® #‹!¹ŒÈL~»ßÁÞÏßGøq"ûû;++‹ZYŒ˜ÉOÙý1€—Ÿ4qŸ‹1„0‹ÅðñÇãÕW_ųÏ>‹ºº:FÔ××C"‘ÀårQ;nvv6ÊËËa2™(ù×ëõ$®Ìò…Ãaìîµ½½½(,,$Ñr@…B­­-ø|>„Ãa[g6Ř°\ÛÔòÕÔÔ„úúzäççÃãñ •J¡¶¶TÈd`Óžaû–J¥‚R©„ÙlF]]ºººÐÖÖóÿ¶ú°gcv”ŸŸ¥R‰Ã‡ãñLJ@°Ç€eãy+++¡×ë¡×ëÑÔÔD@•D"A^^L&²³³!‘HLd-Ø»»»L²iOàv»¡Õja2™ Ñhˆ™'‰Çár¹““Cb¹\¦/[ÛÙnÛ4û?—åÂlž±ñ`)wa97Mdÿçæ1\áþ.srrþ$öb×avÎräúLÖ÷¾÷½ï–²ào"Ümgg£££xçwH$PZZŠd2‰ááaÉX^^ÆÊÊ -Ž;†ÆÆF„ÃaÌÍÍA¥R¡ºº­­­hmm…ÑhD0DVV8¸qãìv;àÂ… ¸pát:ï999Ðét¨¯¯§1aÜ`Áï÷#"‰Ðâ(—Ëi,†ßïǯ~õ+˜ÍfÔÖÖ¢ºº¥¥¥H$¸~ý:~ûÛßB"‘P‰ &ݺu N§7oÞD?‚Á ÖÖÖ¨Ÿ æääàÔ©Shhh@AAº»»!‹177GÉ©Ëå¢f&ü¶µµ…O>ù}}}8þ<.]º„ééiܼy«««p8¸sç¼^/ýGGGáóùðì³ÏÂb±`yy333ö¨ÙjµÕÕÕØÙÙÁï~÷;¼ÿþû°Ûí(«Tªû>vpû^tp“c~ÒËâ¹›½Í´Ès)þ|{äÚ+;˜¨Óu`ŸË„óï“¡€L,‡{~®Ãq}ˆ»Qî—0e:°× 677›Í†òòrX­VØívøý~x<R?U(ˆD"P©T0™LØÙÙÛíFQQ‰¾Û×ׇòòrøý~ܹs‡ìÚ`0  â·¿ý-êêê(9¨©©AYY - - - R©H±U*•Âh4’žÂîî.är9‚=ö ëÁ·Z­´ üüç?§Í‹%ë»»»X\\Äðð0Uâñ8l6&&&H8,;; -…@o¿ý6¡â,d‰ÎÎNœhð ã>³ßïÇÿ÷ãìÙ³8sæ Uëh¡P(——GÌB6îQ ÐøY¬dgg##`zzšØ,>ŸSSSÐëõ(++C:F8F<§$‡­¬?Ÿ×n·›4WŠ‹‹Q^^óÿ2Ý’É$Ôj5Ž9‚ÊÊJ{Îjµuuu(//GKK Âá0ÖÖÖ°¼¼Œ²²2TWWS'•JqäÈtuuA£Ñ  Òõ(n2™ R©ˆeÄÆÖ*•Jbb2A[VàÉÊÊ‚ÝnÇ¥K— áóù0??ååe¸ÝnÒè`ÓwÜn7ÑÅÍùñÇGee%‰„æåå!C  ¨¨555Ðjµ$º&‹ï›”ÀM^£Ñ(é%ð÷~å“o{™æÜ$ŸkËÜós1¾}îw~>°Å½g.èÀ÷U¡PHÉb¦B÷`{W,Ž¯Ýìêlìjii)iõõõÁb±@¥R‘“J¥¢˜‹é_èõz»ÛÝÝ…L&ƒ^¯G8F(¢ñlÿØÚÚÂíÛ·!‘HPZZŠêêjj˱Ùl…BTT`-$Œ•Äò¤……ÌÎÎ8ÇØ1»»»¨©©Aaa!âñ8‰VVV(F*))AYYMYYYÁúú:„B!µD"*H566B§ÓÁï÷c}}ÚIe2õò’xŸÃáÀôô44 êëëa6›ìi°øÔãñ`tt^¯2™ ~¿ÙÙÙľðûý4ŠËîÒétˆÇãÆîî.Ìf3"‘ìv;¶··IÐY§ÓáòåËèëëƒJ¥‚Z­¦}(NS>ÄlJ"‘Ü—\³øˆ¿ö2™»ócö^î¨ÔýÖy.hÆõ¹LþÁõfsý,ë»ßýî÷¹Iß‘¸gÚTÙø|>ô÷÷#™L¢²²2™Œ­ÝÝ]x½^z¯ÅbAKK ÖÖÖ022‚ªª*¡©© @CCC°Ûí°Z­H§ÓÐëõØÝÝÅüüÁÔÔ‰'Åb1”””P£V«Q__‹Å‹Å›ÍF ßïǯýk\¿~‹ÕÕÕä mmm0™Lp:˜ŸŸ‡Á` äN.—“*4«4ŒŒàÍ7ßÄøø8U[¸ú™¨Ë:ö[ȹÈ/?0â~†.×ðÙg3õÒðmØÛĺÊÔäùI~¦ÞÒýôLÏÂî»qî—¬eªj²Ï³ ê“O>ÁñãÇÑÑÑ÷ß—.]B~~þ}½G±X «««X[[ƒL&C @2™Dnn.õ­±D†1VWW100€ âÓO?%ú?CVóó󱶶F-7ËËˈD"ÈÍÍ…ÇãÝn'…×ëÅöö6¬V+’É$ÚÛÛÑÚÚŠƒÒ8¼ýèGÈÍÍEGG‚=%VNGš§OŸFmm-L&©8 D"ÌÏÏchhŸûÜçÐÒқ͆?ü«««p»ÝèïïÇÊÊ -é Ân·cjj -###èíí…^¯ÇÔÔ|>õ~ƒÊÉÉ!úXAAõÞÙl6$ üÕ_ýÊÊÊ‹ÅÐßߘÍfˆÅb !SõX"‘   ………t°Dˆ:ï¼ó’É$t:Ôj5Ù9\ãÿßËt°*1SÖ}²k2_ÈTÌtðƒ3þϹÇ~É?ÿ5þû÷{¶T*…ÙÙYüá@aa!­Y‰D‚üœm –Éd°ÛíÔßžH$ˆy²¶¶ŸÏ‡`0HþQYY‰'N ¼¼@R©z½žh¢L ’ ›¥Ó{S`˜~ «††ÃaJ–Ë‹U$ü~?|>ÖÖÖ ¹\NÆöö6Ün7, q:äëÌžX‹‚Ãá j~8F^^\.ü~?µæ áßþíß “É000€ÜÜ\ט”\.§qxÍÍÍ0›Í(..Fuu5Ù‹ÃáÀÍ›7±»» ©TŠ¬¬,Ò}añÒÂÂ1”£Ñ(¤R)%Ü333ðxhüY[×¹sf³ìu¾÷<ܼŠ1¸¯e½üòËßgÇ6¶‰p6“C2'a•?‡Ãºº:ˆÅb8ª²deww—èÆ¡P"‘ˆ”UN' ÊÊÊàp8ðÎ;ï ‹ahhV«MMMhnn& -ïòò2¢Ñ(JJJ V«QZZJ´âììlŒŒŒ`ddJ¥’Ä¡B¡\.õ`9NhµZœ:u -0(//Çìì,nݺ…¼¼<444PÅ¡´´7oÞ„H$ÂÓO?ÆÆF477ãôéÓ¨¬¬„@ ÀÆƆ‡‡ñ×ý×èîîÆøø8Þ{ï=ܽ{øÃðÚk¯ò722‚¼ùæ›hllDSSÖ××1>>Žºº:õ”••uR«Õ¢¬¬ -…Á`ÇÇßÿýßãĉ0™L¤ÀÌÆÇ1!+F‹fìtzOX¦±±¹¹¹p:Ðëõ¸{÷.Ο?ééiH¥RU(*¼ß±ŸÝ0;ão\ƒç9p¿ -ÿgmFì:lb wÎ/{÷ž¸6Ï2=ï~çƒ6/~bÄÎÁ(HCCC$L4??ÉÉIŸ522‚ÚÚZ|ðÁÔ¿Ï4:„úúzZlggg±¾¾Žõõu|üñÇH§Ó´ø¾ûî»” ×ÔÔÐs…B!ú}{•óùùydeeµŒ‰ë1fLnn.ÚÚÚPUU…üü|¸\.ø|>´µµ•ù­·Þ"Ê{qq1õ¢Ùíväç磪ª -F£Z­–|”'NœÀ±cÇPVV†x<ŽééiÌÌÌÀápàÚµk˜˜˜ÀÊÊ -~ýë_Ãf³Ñ¤‹––Äb1\¸pðxýôS|úé§$Höúë¯S/‹áóù°°°‡Ã—ËE3– - ‘L&©z`³Ù°¾¾ŽD£Q¬¬¬`ww—ª-\ ªª -MMM¨®®†L&ÃÐÐ%í ÿáR4[ZZPRRBÁ£F£!°û;vìär9>üðC\½z•”÷/]º„ÉÉI¸Ýn,,,`qq‘„­¶··ÑÒÒèïïÇÌÌ "‘"‘îܹƒìììÀh4beeáp˜Æ»±õlrr>ú()k4\¼xG¥žRö{ÒétÐh4ØØØ@__¬V+òóó‘››K­@===H$ø÷ÿwª±¹ë¬¿’[ÄàÚÛG×××IPu¿¢F&;ãWb2Ùä~¾Ä>»¿Ï¡åú?yá&Ó3dº>; ü/_¾Œh4J¶ -…H$àõz‰nÊ‚{·ÛMöÆX^¹¹¹xøá‡ñÔSOA.—css“„‰™ð3Göù|ÄTÜÝÝ¥QÇ^¯—Î[UU…šš{‰~II µœI¥Rè`+“ÉHà•é¬¯¯#NS Ãèô6› ·nÝ¢ö±XŒ•• e­„B!†‡‡±ºº -ƒÁ@1£\3 Œ‰Åbhhˆæ·gggc}}Ážh-Ó†ÒjµP«ÕT$c œÙÙY ÂívÃétâÞ½{Ëå(++ƒËå‚B¡€Ñh$iàO………4×€ÚÐXAM­V#•ÚÓÏP(÷Ùƒlñ³îˆM.€o‡\ €Þù ;¸çåúÿ<ÜX‘Ñ«™OñŸ‰ë« PÌä[Ü=Ççóagg—/_ÆÂÂŒF#”J%|>¬V+±¯âñ8òòòˆiƒƒƒz½YYYÄcZLœ–%ê»»»¸zõ*æææˆ!€ZB„i,,, ++ z½žØhJ¥‘H‡ƒ@4VÑW*•®²1~yyyhii¡¶•J…P(D1cDA§ÓÑ}.--ajj -R©”5Y;†T*EKK ÚÛÛIóìêÕ«ô݈D"ÌÌÌ ™LB¯×S;ku8¸rå -–——‘N§±±±«ÕJŪµµ5jß hmm…X,Æòò2jkkQSSƒ­­-8NjíÉËË£˜ìâÅ‹‡Ã(**¢Éüü„ý›ÛŽÆ}—QÆ÷îy¸û7÷áÆBüœãA×WvwwIškË$¸ßFÂ=ø› ;y*•ÂÆÆ.^¼ˆP(„ŠŠ -lnnbzz‡ªÀ^ÀÔPõz=t:¦§§177‡Ã‡£¡¡5550 H$P«Õ„Íf£/xxx˜Æa05ðt:MbOÙÙÙX\\„ßï'ªÈìì,ŠŠŠÐÚÚŠ;wî  B­Vcvv–D.T*jjjÐÞÞŽ¥¥%üò—¿$EM†¦mnnâòåË°X,èéé!‘ÖóÖÙÙ‰ÞÞ^?~‡"q‹p8Œªª*Èår\ºt N§“(,===hhh€V«…ÃáÀþðZÀ“É$ìv;æææ°±±Aãf|>Þ|óM<óÌ3èééANNðÖ[oÁï÷uÆf³ÁëõÒè¦Ó ×ëa³Ùà÷ûQYYI´H6êðâÅ‹8wîìv;U”Y«F}Ö±ŸeÚø¸”éó\d¿Yp7¡PHú -¬RÈEªù ·Ë}û3î5ù}˜™ž¿ä‡Ñ;=~ö³ŸáìÙ³8}ú4¬V+¾óïàÔ©Søú׿Ž£GÒøÊ_|O<ñär9QËÊÊ T*¡V«© -ÈfÓ3µâ­­-466âñÇGWWÜn7UJÜn7l6îܹƒ£G¢§§@€ª¥«««p¹\8tèQÆyäœ8qÝÝÝxæ™g››‹·Þz‹ªœËËËðx<Ðjµ¸rå -rssQ^^Žt:µµ5 @«Õ’PÍÜ܆††°½½§žz -===Ðh4÷õV·´´ ««‹¢Óé4¾úÕ¯âÀ8uêžxâ º¯¹¹9ŒŽŽ" -áÒ¥K$ -:77‡Ÿþô§‰DH$4ãùÀÔ·m6› O§Ó˜ššB~~>üqÃåraxxwïÞÅÎÎœN'nܸååe¨Õj:…B!d2‰Þ~ûm<òÈ#¤ôÞ×ׇßÿþ÷¤¦Ë|¸è/£ƒ=Tâ3¶2ÌfYÿ¬J¥¢×ö£ó0–(ðí›WÜûáÛúƒ;ölü$‡™8.ånii çÏŸÇúú:Ôj5õÛF£QÒ„™œœ„Ëå"z2뻬¨¨€Ãá ñx%%%8}ú41ˆrss žššÂ;ï¼—Ë…²²2èt:bá0”=™LR+cÊdeeјÙªÄô÷÷# -Áét"//€Îªª*´¶¶ÂétÒxØD"Ac*××׋ÅH€Œõ`²–ƒÁ©TŠŠŠ -´··“X ì|>ŠŠŠ°°°NGˆ¬ý§¥¥ÓÓÓ˜œœ„ÇãÁÄÄnܸ7n{mkk f³±X ï¼óD"“b‚x¬ÒÅÚŠŠŠ¨·3àã?Æ7ð¥/} 'Nœ@CC::: P(°¹¹‰ÖÖVTTTàìÙ³4i£¤¤~ø!Þ|óM{ó¬™6?9f¶+‰°½½ ¯× “ÉtŸ-q…o¹àÐÚÏÇ2í…üX‰ùôŸðý€;²“‹»‡òƒÃýÀjþ^ÅíÉfã¯]»†‚‚ -°C¡$ Ö×׉í266F{ëûO¥R´×0QÍÅÅEx½^b€„Ãa¤Ó{êÛb±˜˜7l¾w:½§7!—Ë‘““ƒŠŠ -H¥R¬¬¬àÖ­[¤ÉÂÚµc •Jaaa4mÊËË©•Íãñà÷¿ÿ= ½½˜9L|-•J¡¢¢‚´¥Xõ5''Éd·nÝB:ÆÃ?Œt:ùùyܼyãã㘜œÄ­[·HWÃf³áúõëˆD"ø¯ÿú/Š-Y1‹ „2;`•áœœôôô »»û>a3¼WVVÂd2Án·crr’ØK6› ˆF£†@ ¸O¸Žõ”Çb1üä'?!Ͷ÷ò«Š\⮿üŠb&À S…o×üŸgz?·šÏµùýÀ® -;û 7>c`Wø6èÀ|Š‰ñe*òp6-€1|ËËË©  ìõ׳iÉdV«‰D‰DT/,,Dgg'JJJhJŒF£Acc#„B!.^¼«Õ -©TŠ¥¥%Jô™ð7wŠD"!¦ -Kà½^/饱 Fmmm0 ”[,..B,£°°Æ6÷ööB$«…}·l2 ›–ÄúêKJJH€2 btt=öjjj -…°´´„‰‰ D£QŒ“èææ&Ýku())A,C*•"‘L‘HD"º"‘ˆŠÀB¡”[1»®®Ž¦@1F5ðÂÖvÁZM5 †††044Dl˜’~¦XŸ¿ÖsYl çÆS\»þ(þÌ„d¹ùíææ?™®òY-lͼo -ÀŸsðQ vr¹\Ž¡¡!|˜(`Ü [ ÀåráòåË0$ætàÀH¥Rô÷÷ã™gžAAAÜn7):»\.œŒçŸ=öŽ?Žîînôôô³‡õúÇãqTWWC Ø£šL&„B!¢ƒ3ñLVae "ÓÂI¥R˜žž¦Š=«B;v ßúÖ· HÁœù0óg&BÕ×ׇ`0³ÙŒŽŽÈd2œ={v»@®°[×™í±‘¤¬’›É^ùÿþs~µ‘p“˜?÷ÜÜøŠO7å¶ä°¿÷Û™pßÇž‘»ç¥Óiø|>  ´´v»¡Pˆ‚yÆla k™ÚÜܤvËx<Ž«W¯â׿þ5VWW©]åÆH&“¨®®F}}=L&D"ÖÖÖ‡éülJ‘Ñh¤ö¡Pˆ™™ìì즊×ëÅÅ‹Q__£GÒ$&f¦Ñh P( R©ÐÜÜŒ††LLLÜ7Ö‹‰î]¿~J¥’TÌëêêHU1JJJÐÝÝšš$“IÌÍÍáõ×_§ñf …BÅõë×111AÒ:xíµ×0;;Kº°Z­4¹Š‰Œ–••A­Vc}}hkkCGG»††† PPP€­­-,..B(’.Íàà fgg‹Å aUW³ÙŒT*…ååeܽ{—ô;¸‚´™¶†gªŠsšÿטðA±³ÉLG¦¢÷\\š?׸=ÐzNÆàïaÜûËÎΦDQ&“áúõëX\\¤>n3ÝT*Es$ÖÇDe™º<Wfãb™Ò»V«EEEš››a±X¨1//P*•4Ybuu›››H$X^^¦i1LwâöíÛÐh4¨®®&–Í¡C‡H9™Lbuu•Ú3××ש ²³³ƒÁ€üü|ø|>ÌÎÎB©T¢¤¤R©¥¥¥P«ÕÄ‚c;Sg½úkkkH&“4Mdii .— "‘‰D‚˜CápçÏŸ§öܳuQ­VS“µ\0@D©T«‚µò”––B£Ñ`rr’Àǵµ5¬¯¯ÓHÄíímjÙa€ž\.GQQ¥øö -à¾}€Ù"¿’É®Y†½7SžÂÏmþ×~¸HàÂw¿ûÝïgzˆý.RÆ”)• àðáÃÐjµ˜œœÄ|€ÚÚZ cii Ñh”Ôɧ¦¦Hù÷‘GACCvvv`·Û122»ÝŽóçÏ“ØJ~~>ÚÚÚh,…Ãá@4Ž{÷àp8°¶¶†‚‚|ãßÀ·¾õ-ÔÖÖbhhét«««xᅨש¸¸J¥’„Âär9®\¹‚ÅÅE455áÞ½{ÈÊÊBUU†‡‡ñüóÏ£´´”6¡TjoÁç?ÿy<öØcP*•Á¾ðÕ`UÖnPTT‹Å‚††”——“ò…ÜÜ\Äb1\¹rKKK(//ÇÊÊ -Ο? ¢¢+++Ðét¨««ÃÄÄ>ùä¨T*Èd2ŽÒjµhoo‡ÅbB¡€×ëÅìì,ÚÚÚPZZŠÍÍMX­VéÃ&+0¡2·ÛÉÉIÌÍÍa{{©TŠ(MŸ|ò ~ûÛß"òÈŒ‰ld -¨¸?ã'™œÛjÀ5üýPe¾òQåp8 ©Tú'ó>¹ïçÞ™ŽÌ¯ºðQðýî“ï´ì`Õ”ÿøÿ@ss3 -Ù³ÏçƒÏçý{÷ÍÎÎÆ… ðÊ+¯`qq‘DÅVWWÑ×ׇ‰‰ JúÙ,dF}ÜÙÙ¡döìÙ³(**ÂÌÌ ¾ñoàùçŸGKK ªªª¨ßëîÝ»x÷ÝwQTT„ööv -Ðãeff‰D•••X__Ç[o½…T*E³ÆF#„B!nß¾x<ŽîînFÒÓ`½ùŸûÜç`4a³ÙH5<B  // T­ŒÅb°Z­4 =??ŸC¡¢Ñ(Ôj5µ± okk jµeee0›ÍxòÉ'ÑÒÒ‚ÝÝ]Œ“:|4Åèè(GxõÕWqåÊôööÂ`0`mm N§O>ù$=SNNõX®¬¬àìÙ³ -…ÄÌ`B82™Œ¨äjµííí¨®®Æ+¯¼ŸÏGÓ¸ €ýhÃ\ç¢Ïû,( ƒ4~n?âûù4 ¨¹Œþûö2!èü“»ð×FIž˜˜ÀÉ“'áñxP\\ŒP(@€ÚÚZ>|uuu8v쪫«Ifmm ‡ƒ‚V}Çã°ÛíH§ÓX\\ÄÌÌ QuU*êêêpòäI=zÑh”Æ*MLL½¾¾Ž††<ôÐCxꩧÐÑÑt:ÍÍM@YYZ[[‘H$¨}­¼¼ÅÅÅÈÏχÝn§Š<;VXXˆ`0“É“É„p8L Ö -—››‹@ €ááa´¶¶¢«« z½ž|Ál6C«ÕØ[Û:::päÈÔÖÖ’îÖÖvwwQ]]M­/¬‚ÈtL&JJJ°µµ…®®.<üðÃt®­­QU3 baajµ6› }}}Ô¢sìØ1 -"+**›› ›Í†wß}—pYŸ5cœ‰D"lnnâüùó4a‡­ÍW¯^Åk¯½“É„êêjbapm¢Ñ(í]\€o³ûÔ™ü…Ï<àžc¿¤|¿ƒ½‡ ðƒ<q™7™’3þµ3í§ H¥RXZZÂ|€îîn¤R)ŒC.—Óx?@@É œ¶¶¶ •J¡V«‰éÂtY -1Õ¬V+ü~?‰–——166F3ÎYpÊ -Lhõø...’f›BcµZÑÐЀ¦¦&˜Íf444àÈ‘#hnnFNNfgg‘N§iü²ÃáÀO~ò*ååå!`uu¡Pˆf”çää ‘H "//Ú¼ «T*ÑÙÙ‰Ç{ Z­–*úõõõ4÷رc°X,¨¯¯‡Çã¡ ™™ ÂjµâÎ;¸yó&i-,,PYUU -\.Äb18@k^"‘€ÙlFuu5677100€³gÏâÑGEww7jkk¡Õj1==ÑÑQ¬­­‘ ÝÚÚT*ˆmZ[[K:[\±;¾gŠÓ¨ ìí/l?øsØ¡\ÐŒ³ñ“wþ½|À¿;õÜïYØk ,Øï¹½¶ÍP(D1+l(•JŒcssét0 0™L”hµZìîîâÞ½{H$P*•ØÜÜÄõë×ñÉ'Ÿ`ccr¹œ˜…Éd’@7¡po¬áøø8ÆÇÇi„3£¯³ucvv–Z§ŒF#A_XX@oo/ía\ðÝ«Ûíƽ{÷P[[‹x<¨©©¡všÊÊJäää`~~óóó¤¯ÅZ <âñ8ím¬%NÃb± ®® -…&“‰Öy¹\NmϨ­­…Óé„ÕjE0ÄÈÈÅ’¬½5N#‰`vvUUUÔÊ -…ÐÒÒB¬ Vìb{cü±"ѹsç0??OBèEEE$®.“É°²²‚ååešÒÅ·]®½0ö&WÃ%S,Ç=Ó5S{4?Æã/÷Û—¸¾Èe7±HÄÞôY(Ù㞌!J/½ô|>^~ùeܹs?üáÑÔÔ„……Äb1èt:»xñ"¦§§¡ÓéˆzµººJIÓéDWW -666ˆ -ÿå/.— ¿øÅ/Ï<ó ššš‰DPYY‰¦¦&ŒÃf³¡®®ßüæ7Iœeåg3q$V¥»{÷.;qóæM{óŠív;²³³)ùaýiŒríóùpõêUœŸ­­­ÈÊÊÂßýÝßᥗ^ÂÑ£GïÎ2%5\ÛdI kÿà - 1ûäÛ7ÿØïÜ×¹1%¿=t¿‚Œàʚéý™ö×Ý7ÛSYÌÅôÎ!°°°½^OúSáp˜ØÍMMM0èîî†Éd‚ÕjE,Cii) - - -PQQ¥RIB‡v»4 <ªªªðÌ3Ï@"‘ ‹amm 333¤Õd±XÐÔÔDm4ËËËXZZBoo/ÚÚÚ ÓéîKØ…B!M-`¬&äZ__OI³Óé$f5ÆeSi¤R)6771;;‹Ç¤Ñ«f³™Z±Ø4·Û N‡¢¢"H$Šg VWW‘L&±¼¼ `/ŽeÖ¼^/}O³³³ÀsÏ=‡ÚÚZÄb1\¿~ÀƆihh ñòét?øÁð·û·8sæ ^xáLLLàܹs¨ªªB{{;åhLÏŽíï½÷Òé4š››‰É·i®Ý²õ~?@‹{ðÛhøÿçæVüB)ÿúüërý7•J!ë•W^ùþŸ+4ÅG!vww1::ŠþçFaa!Ôj5Ξ=‹W_}‡ÂsÏ=‡ºº:Ëc4¹\N#µXpÂÔ`±¹¹IÆ‹Åàp8°¼¼ ¥R‰¬¬,ŒŽŽbaa§OŸÆ™3gP__ììl,--Qõ>`jj -¥¥¥ÐëõÔ“‹Å°´´DGvv6&''‘L&ñ•¯|…ª…åååp:øðÃqúôi466Âd2áÎ;øùÏŽ—_~ååå¸ví>þøc¬¬¬`nnÇŽƒÕjÅ_üÅ_PÅvssR©‰„6T*¿ß”°14K,ãàÁƒ8sæ yäÈårLMMa||W®\Áøø8Ž9‚ÆÆFX­VÌÏÏ£¡¡_ûÚ×pæÌTTT`kk ï¾û.ñÜsÏᡇ‚Éd‚ÇãÁ|‘H„šššûú»S©wZ\\Äÿãì½£ã<¯;ÿÏ ʃÞ1è•hD#Ø«‹lÉ’˜XŽ”“ı6öÚÎÆG›œÝ8qäÈYÅkkãMìmÙe[m‰E€$…  zô½ €Áïú¹ûò {s bæ˜ç>Ͻßû½ßoxx8EEEdgg³²²BSS“ø˜\¸p©©)bbb¤ë«µ5Ú,AÒþÑÏkŸ§KÓo¼[múÚE¯/:æççñõõXÏP§´ˆÖ†I¤ÚûÝ,áÛ,Ž´?ƒÓéॡ¡C‡a·Û(**âøñã?~œ/~ñ‹ìÝ»W’¥<¿²²"Ýþ‡ -•IÍ ÏÎÎ’––†··· Ê®(??Ÿµµ5øÑ~DUU>ä駟&;;[lÇ ¤æ˜šš"++K -ÅäQ—¢sµ··S\\̶mÛp:2—}èÐ!²³³Åf~~žÎÎNz{{IKK#//   ìv;ƒƒƒ˜L&˜žžæÃ?ÛB³Ù,ñ}ùòe¾ýíoËìegg'W¯^Ú»»»;&“IæènܸAAA0nZ[[Ù½{7»ví¢¯¯™™¾úÕ¯røða¼½½¹ÿ> ÄÆƲººJYY}ô‘ÐGN§Ì]«Ù3e/¥D²îß¿/V© -8p:äääàp8xýõ×Wjê›ÍÀk׺>n´É˜H[[[cyyYÄ -õëq«ÇV ¾s³Y÷GrÚ8ÕÆÛïºîVI¤úù»»»)++#""‚ÑÑQ ammŠŠ -îÞ½ËÙ³g9s挈5NLL(‡éÊÊŠx&FVWWe\]]0hhhˆòòrÙ:ÄÓO?-ã_ªˆïîîÀKù“[,)”šykk+sss8NºººXZZ×åÖ¢:} -ÜRóÁcccSXXHll,TVVòñÇãååE\\œœÑ b¦Ôð]\\˜ŸŸgqq‘{÷î122Âòò2ÿëý/~ùË_’™™ITT­­­üä'?‘âËËËRÜ+‘4¥?22ÂÂÂñññøøø0==ÍÂÂ¥¥¥„‡‡sïÞ=þÏÿù?TTT››KII QQQcžžžâ•®ŠË§Ÿ~š°°0aHÅÆÆŠ0–——333œ>}šééirrrddG}ÎJQ:""BaõÐÎJTp+pL›PmöПw¿«ÀÑ~OèÇÎôï± ®OLÕuõñ´¾¾ÎÅ‹yõÕWéï裂Ãá ´´”ÜÜ\¢££‰å‰'žÁcU8)q,WWW±˜TãMMMtww “#**Š;v°}ûvrrr„ÜÒÒÂðð0Ã#;ÁÑÑQ2228yò$»ví’\effÒÒÒ8xð Rl+K™™é*‘ÕèèhÑ}˜˜˜ ''GA”Ø^LLŒ8b$$$‘‘!Ì< èëëKRR&“Iœefff„­€85³¼¼,Ôd???¼½½9zô(%%%À#—)???±ë„G (Eøð!ãããp»»»JAAF£»ÝÎÆÆ#1P8ª&›š5w:ŒDvv6&“‰¯ýë¢Ï¥bn«µ¬]›úJÿø}€åO{èóBýC[älzpz³‚IûGWêÌÓÇ/ðX~¨ô€ˆ«Ä÷íÛ'º,ʱL©õ/..Lxx¸0f”^JLL III rãÆ a¸»»Ë8VXX Æ£ûúúÆl6À®]»Ø³g0 ýýý Šþ†rÀP£.---ÌÎÎb³Ù¨©©a×®]$%%166&@RWW³³³ÒÁWM»ÝNjj*{öì!..›Í&ºê󙚚"66www&''…!.Ú7J(1..î1èÒÒ’0ƒ”ð® ÔÞÝ»w±X,"ì§uq:b‡èîîN`` ,--QRRBVV‘‘‘âÐÖÒÒBgg'ËËËF¦§§™œœ”ÚÐÏÏŸÿü碿¥…ܬ(ߪ«çAZÐJåpÚ>žÚÚZ®^½J]]ZOOååå\»v?üÛ·oóå/™””ìv»ø©ÏÌÌ””$DZ±1šššÈÍÍåàÁƒ"¶±°°ÀÅ‹ÉÊÊâðáƆb0èíí»š¥¥%éØ(!¢›7oŠ%‘š½Âh4²}ûv¶mÛ†¯¯/÷ïß—Â-))‰’’’““éëëÃl6óµ¯}?þã?æСCâÕ®èyj^È××W«jBCC±X,"¶d6›%‰îììäÔ©S<ûì³md¤¸¸˜ÄÄDÊÊÊøéOJff&‰‰‰"œóiÅ¿Z”Ú¤F»ÁÚ¡ñûÚ R›¸*ÀTWu³Ù}1¢‚VŸDmö\à1ðCÿØ -ÅV%`™rjØ»w/qqqDEEa±<²©SÔñwß}«ÕÊüüÖmR”u«Õ*nBã¿3gÎ088HVVaaaÒõ[]]•n>fÔZÓžC[*ÙÒR;·«õëW{}m¸ٚ׃jú8S¯ÕžGê9*§ÓRDI2ÎGêä ¼ð b_ÚÕÕ%à”9INNq×°°0QöVÃÃìduuWWWFFFtU@“:KVWWE8õÁƒ|ö³Ÿå…^àСC>|˜””qG™}LGE‘ùûû‹M—šöööfdd»Ý.#UJp°¥¥…ŽŽ8@RRN§“¥¥%\\YîÞ½___>|HUU•Ø---‰5¨‰P"ά¬¬ÈÌvOO7oÞÖL@@€Ì:wwwc±X8|ø0;vìæ‚*òbcc™œœ”‚«½½ééiŒF#wîÜ¡¢¢‚††vìØABBjÚÝ݉‰ øàš››IHH <<\2#ú3âw›Ðÿ›OÚ¸Ñ -¥iÿO{F*§…­Fêôg–õ©õ½¡¡!Þyç~øÃJÑÚÖÖF^^žØVFGG“’’ÂÞ½{ILLdaa›ÍF@@€4+•y¿äk7nÜÀn·*µKZZ™™™dgg311!ü Ž;FQQyyyÄÅÅÉgîç燿¿?‡C\hªªª¨««Ãl6KýQVVÆ•+W(++ãСC<ñĸ¸¸ÐÝÝÍÆÆéé鸹¹&E°?ŒF#¹¹¹„……‰‹ÅÕ«W1™LøøøÐÒÒÂ;w„q7==- Ãá ³³“õõufggéèèæÕ‚ˆÒŽŽŽb·Û1ÙI§§§SZZJPP° "##E‹`ddDÄÞív;<íëëëF§§§ËzQLíÜÜ\©ŠŠ"22’¨¨(VWWéïï—:ê?ø111ÄÇÇK¯-èÕtqqyL_?^¬Ÿ´EÿfŒíÞ¯Î!íuUlèAaõ|íùáúßþÛûæf”틵tLup8®]»Æo~ó,ËcÉi^^ÙÙÙüìg?ã—¿ü%ï½÷wîÜ¡¬¬Œ>ø€ÁÁAŠØØØ‹%¨ât>R“UÖ ê—¡ÐÏÕÕUVVV„º¢þ?""‚¹¹9:ÄÎ;æìÙ³lß¾½{÷²¶¶ÆÄÄ„t$_}õUŽ?NFF®®®2ËUVV&4­¥¥%¡\MLLˆŸ|HHˆ+ÁÁÁ¬¬¬PZZJvv6ãããܺu‹¤¤$>ó™Ïàp8øó?ÿs邪9—¦¦&±—2›ÍtwwãååExx¸(‹ŽŒŒpúôi._¾Lvv6GŽÁh4ò/ÿò/˜Íf^{í5222äéîº‡ÃAvv6‘‘‘¢t àëëËìì,7nÜÎf³Q^^N{{;V«§ÓÉSO=ųÏ>‹‡‡‡ˆ7†„„"³/Ê£=**Šï|ç; r­ô›­v=iלöÿµß×S›ý¿úZ›Ø©õ«¼>ÝÝÝåÞ¶*jÔÁ§!о—>6ÔómX_T©ÃG›xé“>%|d4¥¡64àÊ:%22’ÔÔTöîÝËg>óž}öY>ó™Ïð /ð™Ï|†ƒrðàAJJJd&Øé|ä‘ž––&ÉƱcÇHLLääÉ“„‡‡sùòeL&&“‰ÆÆFâããñôôd``€ÑÑQ±,òðð 99™ÌÌL<==±Z­bä}Zær•ÀØؘ¸^ŒŒŒ044Äèè(aaalllàéé)ÞËsss˜Íf²³³yòÉ'‰ŠŠbrr’êêjNŸ>Íðð°$׋‹‹ÌÍÍ1::*,5ª: sss¢O‘’’BNNÌÌÌÐÑÑA`` «««ŒŒŒÈ¼îüü<¤¥¥‰}¥··7cccÂæ"99™„„–——©®®æرcìß¿_ -ÍÍÍ$%%‰°+@CC}}}R\\LAA%*1ÂúúzÂÂÂDLv}}›ÍÆÜÜœœª(RÎJHÐÍÍ©©)ÆÇÇ›é¾yó¦$±aaaÔ××súôi~ñ‹_ˆ€²5‹ŠŠ’ý<22RI•]RR÷ïߧ¬¬L\mX¡|«µà®8VkO{ž¨}_»þ´ñ¶À»¾¾ÎÚښЪµñ²Yá¯}hÁ¼­Î;ýýèïMŸÀ'Æ7npéÒ%òòò$^m6iiiôôôpþüyr¾yó&UUUŒ‹ °Ò•˜˜˜Àn·³¼¼Ìâ⢱Ê.Öáp088(3¼ª°0 üÙŸý™8?(f‰b…†‡‡Óé‘´õõu>|Èââ¢ØÏþú׿¦¬¬ «ÕÊúú:û÷ï'66–žž¦¦¦ˆ—K5*:66ÆÇYXX 77—àà`>|ÈÕ«W©ªªÖÙÈÈ×®]£¿¿@˜wV«•¹¹9ŒFãcgáôô4?üáioo'55???*++©®®&<<£Ñ(àÀÆÆ#;f%`–ššÊòò2/^¤¡¡ÈÈHvìØÉd¢¯¯‹ÅÂð÷÷çÞ½{<|øPÎJ›ÍÆ·¾õ-±Z­øùù‰hEE$%%I¬¬¬Ó(!!ëׯsõêUòòòÇápȾ®ÖÿV ®~¤EPiפŠí>®-|´­bDŠ¥6ïS÷¾¼¼Ìòò²0 ´1ªÏ凬÷ͺ¹€PàÏœ9Ão¼ÁsÏ=Çôô4eee ƒq8"’ªš‹ýýýÌÍÍ‘““#"}ƒƒƒ¢;¡€‡ÃADD&“‰ááaÚÚÚ˜˜˜ÀÓÓ»Ý.€®G%<<«Õ*,çK—.ÑßßOtt´¨÷Ûl6a ÄÄÄcåáÇxzzräÈÙïØ=66ÆÀÀ€ðyzzŠK@KK mmm$%%‘››Ëèè(ÍÍÍŒŒŒ066F~~¾0¸ÖÖÖ¤¤3*wQ‚ 477sùòeŒF#)))ÌÎÎÒÒÒ"zS¤¥¥‰¥bZ+`{yy™ÁÁAÑzéêêâÂ… âv³k×.ÑRŒ„¾¾>¬V+±±±xyyáêúÈ844TF,æææ„íëë‹ÅbÁÃßþô§˜L&"""D?DË Qú)[é9i:êµÚN½^hY]C+nnnR_¨çê›:jû, ¤¤„£GòòË/sðàAbccéïï—ùHU_¾|YDTâ΂ˆý  ½Suè÷íÛǾ}ûDxOÍ®’œœ,³•N§“l6•••”––ògög"’äîîNCCðÈ{RÍûòÃþX]]åÂ… ¼ýöÛ$$$››K@@€ØËÅÆÆAWWo¼ñ'Ož$77—ææf–——9vì˜PÖªªª(++cyyY -­àà`<<<Q+W®ÐÓÓCRR’Ø&ýà?`yy™'NÁÒÒKKKÜ»wÿñ?þo¿ý6û~;׬ì.ŒF£ˆ„††b49þúè#~ö³ŸASSO>ù$/¼ð‚ÊÊìÂ… 8p€œœL&YYY¼üòËäçç³±±ACC÷wGcc#Ï=÷¥¥¥äääÀ¨Ä7óòòettOOO&&&0›ÍDGGÀž={øÑ~$ŠîÞÞÞBK×®­ÈŒ¾°ÖÇ–òßVʸÚQma¢âN{íÍbLubµ”zíf±ª-ðµÏÓjhÁíu7Û¢„*Õ9ÔÛÛ+q¡üÂÂÂÈÈÈ ;;›ððpòóóùÓ?ýS¾ñoð‡ø‡¼ôÒK|å+_á…^ °°nÞ¼ÉÔÔf³‡ÃÁØØ“““bS¦õ>.//§¸¸Xì%]\ Á®­­ÑÚÚ*žÛf³»ÝÎ… „™™™Irr2¾¾¾ ‰)//Çl6333C]]aaa"d§„/ÕÞ*ݪª*>Lff&ËËË\½z•þþ~ž|òIrrrãÊ•+$&&²oß>à‘Ϻ¿¿?]]]ŒñÄOÃÆÆMMMÔÔÔàêꊇ‡6›Mbc``€ºº:bcc%æ;::¨¯¯—ΦÃáàÁƒrn«ÎNLL ééé|éK_"&&FFõ”UcLL 'Ož$44”ÙÙY%0™L„††âëëKTTëëëܺuK>Ÿôôtúúúøçþg233IMM`ppÐÐPéjAcµÕߪØÔÆ…~}ªõ½¼¼,û¸úÞfJу‡ÃÁêêªìéú?ÚûRÅÈfg‹öÚú×ëÏ\-(®-ÚÜÜÜhll¤®®NÄÊvíÚEQQtvvÒÖÖÆ… hnn–ÑE³Ù,V© RLzxxˆJ¶Ú#Tâ€ÑhdnnNÄ•µ«²ßjnn¦¼¼œŸüä'´··%¹‡¢ì;NiL,--Ió"22RÆ?JJJððð•q56³¸¸HRR...bsh0ÈÎÎFçÆƆÜcjj*QQQx{{c³ÙÄšvzzšóçÏóÞ{ïQTTDrr2¡¡¡òžCCC\ºt‰èèh’““‰ŠŠ"11Q¾¯~7ÊA¡££ƒ_ýêWâ€111›››ì ÊUCåvîîîÜ»wo}ë[DEE‘M||«æ„Ü/¡ IDATŽZ×éééäææR[[Ë|@bb"ñññuÒõg–% ‚ÕƶªÍËô炾á¢=?6{h_¯Ï«ÔØ–RäWj_Ö>_CŠ=»¼¼,{ñf¹§­üÍo~#6Úžžžxzz’ŸŸO||<ׯ_ç­·Þbtt”ööv.\¸@]]v»]Š\]]™ŸŸgtt§ó‘ð ÒäP£Ánnn²§®¬¬°²²Bss3ëëëŠ ’j>ž˜˜™)ONN&((H°……Š‹‹III¡  €çŸž—_~™}ûö‰°˜B™ÕLYJJ -­­­ìÙ³‡×_¢¢"FFFhll$$$„„„Þ}÷]¡Ö¨ÂÂ`xäÇi±X8qâtvvrïÞ=æççåù333¤¦¦ŠHÚ;w())aß¾}„††ÒÛÛËíÛ·‰ŠŠ’ñ¼¼œÚÚZJJJ°X,"6¡æ_N:EAAj‹¢1ÿõ_ÿµXö­­­qëÖ-BCC9vìƒëׯKWrzzšË—/388Èücž}öY±¶â—¿ü%—.]bÿþýìܹ“°°0x饗Ä:NuP%)--Mü²U€ÎÏϳgÏüüüdF)è···!Ö…j®¯§§‡þþ~nß¾‹‹ BkR ÷Ó -výºÓ/hýëô‹ûÓ^c0˜žž& à1‹(ý¡¡MT©.ŽvÝë1-­¾Öø›TÚŸy³÷'))I@¸€€*>r¨?…nÞ¼ÉØع¹¹oÝÝÝ\¾|™ÒÒRŠ‹‹IKK#99YºÞÞÞX,é$%$$066F[[¡¡¡â’°´´ÄåË—¹ÿ>MMM$&&ò—ù—2×ÖÖFSSçΓyMEÅWâSƒƒƒØív]R:?#4Ñ©©)Ñ0›Í8p€ÌÌL>|È7¾ñ êëë18p€¬¬,üüüD¸}û6íííll<òr—½jxxX欛››ñññÁb±ðý„RRRÄ?^­/íÞ¬¾Vç„Š5õ¹iצ6^H h×ÚB[½^/ -ìÕwãµ1 ÝßU¬*&ÁïŠ!ƒú3J È«ûSŽcccDGG311Ann.ÙÙÙdggsôèQ^|ñEq9ª¨¨Àßß_oóóó"vªì½¬V+6› ???)ª•Ú¸Óédzz’““EWBÙ766ÊHšÙlfaaA(éýýýØív¿[^^æÞ½{’?~œíÛ·ãëë‹Íf“ëæÍ›âj166FRR€(~ÇÅÅ‹Éd7¤þþ~ÖÖÖ$§›ŸŸ§¹¹™˜˜òóóqww§²²’ùùyÝS m}}=¤¥¥QTTDJJ ->>>DEEáææFmm-V«•°°0Y]]e||œÖÖVÐWvTUUáííÍöíÛYXX`mm oooÆÇǹrå -dgg‹æÖ¾}ûˆˆˆ §§‡êêjÒÓÓÙ¶mðˆq¨Ü»TçÔd2‘˜˜Hjj*ýýý|ûÛßuµõ{»v­éèÍ@`ízÔ*.ôöÿ  m,)'íÙ©¿†Ê«”E¬ôÐÞ‡:§ýýýE9&&†œœ - - -'!!C‡a±XhSÚ/ÊrÛ`0Ðßß/9•ú<ûúúØØØ`aaADý¦§§ÉÈÈÀM@šÍf666˜ššâã?fnnŽââbo³ÙlR¬«=²··ƒá‘Ht?r-•Ï)¶§ÉdÂáp`±X˜™™%~£ÑHXX«««xyy £`||œúúúÈÎÎ&''‡••êùêgÑÞÏfý{éAí½jÁ•ªAmÚëªw8xxxÐÝÝÍ›o¾)¶Ejs\YYá¿ø…xÏÏÏËŒóÞ½{1¢ü­¨û®®®,,,ˆ·­êü“M`` PxëëëÅÞ³µµ•ù—áìÙ³9r„'Ÿ|’àà`:;;ÉÌÌ$88»ÝÎÄħOŸ¦½½¸¸8g[ZZ¢²²’wß}WPoe?ÓÝÝ͇~È+¯¼B^^žžž QVVFEE…TªÀR¦ò½íèè ¦¦†ÀÀ@±:4›Í”••ñŸþÓâW¿ú"ôÖÛÛKee¥ˆÇÕ××ÓÑÑ»»»xS«yN¥ÊJ~~¾Xð9Nq `dd„¤¤$é455ÑÜÜLNN}ôžžždffJA«5ÿ¼™#€ZcŠý²ºº*ÞÓz±@}B¥¥u꟣]oÚ‡6žÔ=*ôY»†õ‰•öÚúÃQÚ¸ÒDzÉdbÇŽäææÊúЈj/Ä‘EÑ?ÕïDi 1::J]]¢Þ¿Ÿøøx^{í5ÒÓÓñòòÂÍÍMº!!!llø@l7aaa<ñÄâÌÄ;wP ‹j´¨Qª›7oÒÐÐ@?³³³RTTÄüü<÷ïß5õååe¦¦¦˜ŸŸÇn·KÓ¦©© OOO´:­goLLŒP—üüü>q½€€ˆŽŽÆ××÷1+6õÇÏÏÄÄD¡[¤¥¥1::Êòò2f³™mÛ¶‘’’À7¸yó&»víÂétRSSƒÙlæóŸÿ¼ˆ~|ùË_&&&«ÕJ]]gÏžÅjµ -Õº¾¾ž¶¶6rssÉÏϧ··—ÎÎN.\¸ –Ko¼ñ¿úÕ¯øìg?+…‹Õjåÿð1ܺu‹ï~÷»Ò gnnŽƒrèÐ!Ž9‚Á` ¼¼œ¯}ík$%%ñÕ¯~•ÄÄD†††¨¬¬äþýû8†‡‡¹wïíííBWÉcII !!!üâ¿à+_ù -§N¢¿¿Ÿ#GŽPRRÂxæ™g‘ ¥´´”?øƒ? >>»ÝNgg'ÍÍÍܸqƒ;wîÈ笨®îîî,--±sçN|||Z__'$$„¨¨(ææædIÍÎ*t;11‘÷Þ{••JJJ>! ¨OêÕc³DH»Ù«k7öÍú‚ÄR­5½¬> µ©=m¡£ý·öjóÖäV€öçÓ_k³ïk"ma<ØjÓW‡ÙÚÚ—/_¦¢¢‚ŽŽª««qww§¥¥…sçÎ177GAAÉÉÉäää0??ŸŸ{öìÁÛÛ›™™œN§t²ÕÏçt>²­tssÃßߟÏ}îs -jl6›…i¢¼e•Æ…b­­­Q[[Ëõë׉ßb¥ÖªF…œÎG‚_ÊrSÙY>|ø«ÕÊÈȈØ䬬¬`4¤®®OOOZZZø¾@ii©—/_fïÞ½øûûSQQÁÌÌ ”——sëÖ-©©© ¥¨¼ººÊ™3gø«¿ú+&&&DÙº¨¨H¨þJÉZQöIMM%==ý±~uu³ÙLRRÓÓÓ455I’ÒÕÕEmm-{öì!??Ÿ¿û»¿#22’¼¼QHÿ®µ¹Ù÷¶êÔè#-°§=Ô€ÇâE{-í¡¨õ—Þ¬Ów–”늶ÈÑ&¬ÚDTOê>U·5((ˆ••>üðCé–ª}_u -ÇÆÆèííZ777mÍÌÌ1Í°°0XSÅØä䤼—º†Åba``€³gÏÊËÚÚùùùÂúòòòb||\túûû©­­åüùó\ºtI(ÀÊgÜÏÏ»ÝNcc#ׯ_§²²’ØØX7R¿£ÑÑQ***!""B(™<`pp’’’°X,<|øPŠÁ¯|å+¼ôÒKTVVR[[‹¿¿?­­­DGGc6›ùÍo~CEE‰‰‰äççKá¡üÓ]\\¨­­ŸùÔÔTŒF#ôöörýúuÎœ9#€ÝngllŒ¢¢"UHKKcÇŽÒ™ñòò¢½½€€>üðCJKKÙ¾}û'ÖÔf{-|²‹¾ÕC»^õq ×ÐæOÚsBú¯õÅ–žš­‘Õk¶:3U(-‹ÅBRR.\`}}]ò£&“‰ôôtž{î9^}õUNœ8Áž={(..æàÁƒb1¶cÇŽ9ÂñãÇñó󣬬Ll pqqÖFQQŸûÜ爊ŠâÀÄÇÇ355ÅÔÔ”hE ‰——³³³8ìv;CCCgÊfeeEÖòôô4CCC„„„s¦¼¼‹ÅÂöíÛ™››ãÎ;ÔÕÕáååEZZšx—«Y}íâããCXXóóóÒMKK#))‰¹¹9ill¤»»›ÒÒR>÷¹Ï!M“ÆÆFúúúHII5txÔUìî·³Ù,³gÎœarr’´´4àQ¾›žžÎÎ;eLÈb±œœÌñãljŠŠbddD4xBBBHNNfÇŽR°ŒŒŒÐÜÜLGG!!!„‡‡‹…­£$&&†€€¾÷½ïMBB‚€Æ›íÿŸúu«¿6Ûÿõ1¤öuúתÏL›‚o êzÚzG§Ú‡ŠG­×½{QãfŠ©©Ffƒƒƒ‰ˆˆzwll¬ŒªqÃPXX(LWWWNŸ>Ýn'..Žååez{{ñññ‘‘(›ÍÆÑ£G)(( 11OOOÆÇÇ1â>177Grr2F£‘ŽŽ\]]IOOÇÛÛ[Ôí•€j*>xð€ÉÉI±‡ˆˆ¢»  @j°ÞÞ^¾ûÝï’ŸŸ/vë -4U,Р  \]]etNåf®®®Âä¶Ûí¸¸¶×®]ã™gž!$$„ìv;ÓÓÓâ€QSSÃ?þã?râÄ ²³³¹pá6›ÖÖVŒF#&“‰žž|||¤óÊo¼ÁK/½DTT}}}¼ûî» ÒÙÙÉž={ÈÍÍÅl6K'xhhˆsçÎI'¶¾¾žôôt222d}h}ºýüüÈÊÊbnnŽîînžyæAž·oßNWW6›Ó§Osüøq±!Tk@u°õëB¨ßaPPЖLœß÷±Y1¡ý·~]n6"£Mî~ך×Ré6»=¢ÄÑî-›½~³Ÿßñ—/_& €øøx±“’’ÄoþöíÛ\»v„„äÚ¶m;vìÀétŠ‹blllË`x4RGCC¸¹¹±²²Â­[·dôK‰£ÕÔÔ0>>.{CCCB›ÏÊÊ"44”êêj.^¼(±¡ön•ì\¼x‘ÁÁAjjj¸rå -|ð~~~LMMqèÐ!233…Ö]RRBAA°ÕæææX]]%::šíÛ·“‘‘Att´Œ ½ôÒK”––òóŸÿ‡ÃAVVKKKãííMcc#_ýêWyíµ×ˆ‰‰¡­­ÚÚZBBBøú׿ÎýÑáááÁ×¾ö5nß¾ÍÀÀÿ÷Oqq1ôõõ‰¾ŽšG÷ôô¤»»[DUÁyùòe™w6 ìÞ½›€€hÚêQkF}½U¼ü¾ç›vן7j/ÕvYõÅŽú[ûg³8Ü -PÓŸ™ZdccCö]%¦@ý a™¹ºº.ŹbØ(qc—G~âj$§¨¨ˆ#GŽ°¾¾NEEQQQxyy0??OZZ‹Eºû‡€ÌÌLÑ|rww§°°WWW:::XYYvoooÑjP3Ô333øúúât:¹rå -ËËËâþa2™Øµk™™™ l6÷ïßgqq‘¼¼<:::èííerr’„„RSS ”ÏÆápÐÛÛKhh(‡&**ŠååefffèîîæÎ;)5ÐÆÆ£‘ ÔÍÏÏc³Ù'88X4, ßùÎwHJJbÛ¶mŸh -nöPë_ÕÖzàÓÖ¶¶À×^_ß Rß×6b> MSÔÒwô4OQüí! þÞŠf­OÌ´›€¢]¯­­Q]]MYYú§Ê‘#Gø·û7.^¼ÈÆÆó7ÃË/¿ŒÑhä׿þ5ÝÝÝüõ_ÿ5466RUU…¿¿?åå唕•a2™$(ÝÝÝâäÉ“äååáp8 áooo233ñ÷÷ç—¿ü% lß¾íÛ·FQQ‘l”MMMLMMñâ‹/——ÃÃÃÌÌÌPUU%b1ü1ìܹ“§žzŠˆˆ†‡‡ill$55•W^yƒÁÀ»ï¾+”ü êêêøò—¿ŒÅb¡¶¶–‘$”úÑ IDAT‘>ÿùÏóŸÿóæèÑ£ÑÑÑÁ÷¾÷=^ýu²²²°X,2kd³Ùðöö橧žâ©§žâèÑ£|ö³Ÿe×®]òôÓO“ŸŸÝn'""‚¿ø‹¿ ..î1ˆvžÅ`0AAAÝÝݤ¥¥1<<ÌÐÐÌÌÌÅÏ~ö3öïßÅbùÄbÜ UÕŠÅl–Té×Íïz¨µ©ñ­À=ÍY;{©]×Ú‡þþ´”öÚê¹ÚCHÿm hƒ{«ŸI{›ÝžÒªC___VVVÈÈÈàµ×^£´´€¦¦&®\¹Â¿ÿû¿ó…/|¬¬,ºººøè£äÞœN'SSSÝ·²7{â‰' ²²’ÖÖVÆÆÆèììäæÍ›R$(&ˆ¢þ*_WEes:ÒýSóÁŠq£CJIÖétRZZʱcÇxꩧÈÊÊ››––îß¿Orr2,..Òßß/TÏ¿ù›¿áèÑ£„„„ÐÙÙIqq1EEEtww‹ -¿ÙlÆÇLJ©©)þüÏÿœÃ‡c2™˜žž¦¢¢‚úúz;ÍËËÃÃÃÙÙYZ[[9þ<·oß L)ή­­‘šš*N'ÚôêꪗŽŽríÚ5æççå+//ÇÅÅEüë³³³EØGŸDmFSëCRþþþò™þ>IÜf´k\»¶Õk6CŸOĈž¦¦½®>>·Š}õ<-˜¬Í:½›]SÛ2 xxx`·Ûù×ýWüýý±ÙlüøÇ?÷‰þþ~._¾L___üâIIIaee…žžbbb0 455‰€ê€ª9SƒáQgQ ¯¥¥¥ å:88‹Å"ÔË……ššš¨««ãîÝ»¢5¡:¢¡¡¡LOO À¬”œ»ººp:ÒuWãiêó9zô(Ï=÷Ï?ÿ<)))˜L&îÝ»Çû￧§'ÉÉÉ"º¶¶¶Æôô4—.]"22’Ï~ö³$&&²¾¾N{{;ÕÕÕTUUqðàA - - -p8ܸqƒääd‰!eu–’’"tç²²2®]»FDD'Nœ ุ8JJJøƒ?øž|òI¼½½ikkchhˆ©©)úûûioo—‚mppk×® e´¡¡™™ð¯^½Š¿¿¿¼ïÚÚÚcyŒv]jÙ+›1!ÕúѲp~×þ¬]cz&6^´1£;}·P ¾þ\ÕŸ­*Ž]\\ÄzV)àWu•ZµÃá}[5sÔïM½¨õc±X¤ñ ôrssY]]ebb£Ñ(ºM«««DEEáçç'€™3P÷399)b‘ª3=00ÀØؘ8hxzz2<<ŒÓéJ³ÒÝPà«Ãá`ff†ÑÑQ¬V«X™544ˆ­˜¢ó£nå¥K—8uê „„„Hl(§›7obµZ¥Ã>00€ÍfÃ××—ÎÎNŽ9"c ÊdÇŽ2³m±Xpuu¥¥¥EF~BCCIOO§ªªŠ7ÞxC -Z5¦óàÁ>þøcšššDø6!!Ab¡¼¼œ‰‰ ”€ îMÚñ(å~Íù/ÿE, µûòfëJ»æ6˯Ô^½YηÕõÔ5U.¦=»ôyz¶ø×ä›*þ”ºº6¾Õ}«8WbŽv»]öy///"""ÄùÁ`0<¦Ù´±ñhU±ŸU³S5$•cŽŠ)¥6ŸMbb¢8>øøøÐÜÜÌáÇÉÍÍehhWWW"""ððð ©©‰òòrÑÑèîîfpp””wqqÁÇLJµµ5Ñ}ZYY!$$„¤¤$ßT‚Á³³³ ÓÚÚ*]ú¶¶6i®-,,p÷î]ÖÖÖdM $ª±QeZQQÁôô4ûöíÃòÛñå^055Eqq±èç<|øÆÆFl6kkk2­4l6²¾¾ÎùóçIOO'>>ž 233Å鶶–ÙÙYrrrØ»w/–ß²í>þøc–——¥ {ðàA - YYYkôºº:ºººðôôdff†ððp - - -0 ´´´Èç³mÛ6¾ùÍo’ŸŸOJJÊ'€¦­Î5*©ÚøÚì¡mNjȶj’èó³ÇFôªG¼6+Ø´àÀf½ö†ôßf×Ô>êuAAA<ûì³dee‘@VV/¾ø"ù—ITT×®]£¥¥…Ý»wó¥/}‰ÂÂBÆÆÆ8}ú4f³™°°0Z[[YYY›xF£‘ÔÔT&''ùÑ~„——6›‹/2>>N\\ÁÁÁBS>°Ê^IYuwwÓÚÚÊ«¯¾Ê±cÇD%Ry3ÿÑýo½õ¯¼ò -ÞÞÞÌÍÍ‘‘‘ÁÀÀÿþïÿιsçÈÊÊbcãÛÓÓÃââ¢Ì;vŒÜÜ\®^½ÊßþíßòÚk¯ñÊ+¯œœ,È___‰‰‰2­l2’’’((( ..Ž€€A>|ÈÔÔnnn²É(a#GŽˆj¹JRÔfª>E÷wssã[ßú–|VsssŒ‹M}}=GŽ1‘­:p›zj«µ¨¿Ž>©RÞÖú"^ûíÔÞö Úì±¾U'h3Pû³èãh³ÇfE˜ö¡ï´*—‹/ùËtwwsæÌÂÂÂâ­·Þbbb‚“'Oò¥/}‰„„&&&xï½÷°Z­øúú277'Hêêê*„††Jdd$»wïïô;w277Ç÷¾÷=æææ$i‹‹‹“QÞ~ûmN:%Ý"wwwaª¨™h@€‚™™¬V+}}}˜L&±*²Z­TVVŠò±: •úñàà ÍÍÍôôôðÿð<ýôÓ¸ººrëÖ-ÊÊÊ8räˆX³³³lß¾˜˜™[3›ÍÒ)¹rå -§Nâõ×_çäÉ“ÄÅÅqåʾúÕ¯ò?ÿçÿÄápˆ3€òV>ج¯¯Ká¡Ÿ‘Tš*‹…[·nñþûï‹Íôô4_øÂÄjJÙi•ú·*þÕ{)VQ@@Àï,üŸ‡66µ_kG¶*fÔóõ@ÙV‡ãï{Úät³kkÁ‰Í®­su.ŽŽË/¾ÈÔÔ?üáqww§¸¸˜¿ø‹¿ °°ÑÑQÞ{ï=&''IOO€±±1é&¬¯¯c4ÙØØ`qq“É„å·] j¼FÙ!åç狇*8¢££IKKc}}òòrüüüHHH`qq‘¡¡!'رc!!!òÞcccX­V66‰W%$$ÅÆÆV«•©©)‰%«ÕÊää¤Ä<šQïèèñE™¶Z­üÓ?ýEEEœƒácCËRЂÆúbf³øù´¤S{NiÏ\-{F=O=g~~^º}zÀD{>«{Tv_f³Þÿ}Ìf3ƒAÊÅÂétÒÔÔÄõë×ñôô$!!‡ÃÁøø¸(­ONN233#c4îî§'f³™€€ä}•«SEE?ýéOèïïg``WWWüüüäþýû,//“ššJ||<|ÿûß—ëªÏf}}™™&''¹~ý:6›ÁÁA®_¿.®Vããã|þóŸÇb±È8˜Á``xxXtx\]]¹~ý:ÿõ¿þWNœ8Á+¯¼BZZï¿ÿ>v»†‡‡‰ejjŠoûÛX,âââðôôÄËË‹Ý»w³cÇ¡ÿWVVâééIii©Ðö¸tév»çŸžÄÄD9KÕÌ·b$¨±¢ÅÅEùývttP[[Kww7û÷ï—\N­ýzÔ2Yô9›ö9ÚfàÿËCÖi÷öÍíý|@®m–¨¢]­ýû¹ººŠí\dd¤€ÊRÕ`0|ÂZ±iÕÒݛŬº/___ikkcee…ÎÎN222dÖ\1ƪ««™åäÉ“deeÑ××Ç¿ýÛ¿‘––&rgg' ¢Ë±´´Dxx8&“‰€€RSSñõõÅÛÛ[ƃ•FDhh( lllÐÒÒBÐÿGÚ{GÇYÝùÿ¯õ‘FeF½Žz·eÛ’eËÛØØLL'ä,lYvÉfOør¶$»›† 6Tƒ1nànŒ»ªUlU«—Q×HÓ$F¿?”{÷ñ“‘Éžß=gŽ­™§?ŸÏ½Ÿú~¬\¹’¬¬,ÆÆÆðõõ•`“uuuTWWË -4‘•Ÿššbÿþý’åÉb±0==-JuuuŒ‡Ãá ¥¥E+âããyä‘GÈËË“×633Cff&ÅÅÅÐOD’’’(,,dllŒO>ù„ÇsåÊâââHLLdff†ýû÷ó‹_üBÚµJÖ¥ùùyjjjèêê’™ÌÌL™´í;‚ËÏÏOÒwž={V&vDÀG™ôPW—©b¾Q²”k•R‡ÔÇR'«í¯çŸþ'jÇNœx¹€ÒÀRî£ÜVyLe”N¹­º¿F­À€DTnoogxx˜Ë—/sùòerrrÐh4üüç?çOú?ùÉO())!44”ÑÑQ>ùä~ÿûß³nÝ:, ü1F£‘……IyæííMVV–t^ dÿþý¼ù曬\¹RfÁËË˹óÎ;illäå—_–¥ X:rä€ ÅápÐØ؈ŸŸ?þ8ØívYr¼wï^Ù+"8œ/]º„Ùl&&&†ÅÅEV¯^ÍöíÛ g``€ƒb2™¸ÿþû‰ŽŽ¦ººš^x¨¨(zè!V¬X^¯§­­¦¦&ÚÚÚèíí¥¯¯ºº:Î;Ç•+W–†Äää$f³™©©)1ý¹?Nð zš¤”ïLô A•ÀÜÜ555äçç“““s“¤Ê€òoe4w¹ÅD=Äïbt¢œQ½ŸzÂUÊ÷W”û+uC­ÊczºV¥Ã¢¼oõPNžî_¹À‰@ÍÔÔ/½ôÓÓÓlݺ•{ï½—¾¾>ž{î9zzzØøgÄ`»ÝÎää$W®\‘^IÐQ…„„PZZJzzº}ú4_|ñ<ðiiiÌÍÍ144Dnn.=ö˜d2ñòò¢»»[V+ óå—_rãÆ ÊËË¥ó¢v6XêªU«ˆgppP:‰lÚ´‰œœªªªèêê’•ž06Ô%±Ð[­VIãóÿ7 >—§¿ÅZ ”kµóãÉIW”Ç_î:ÔsÇrŸ[•›zšÜn·Dv6™L28ºzõj{ì1víÚ…V«åرc455‘œœÌæÍ›e鯠NF£! @²:ÐÛÛKuuµmmmm¸ÝnÂÃÃe%Ì—_~Ihh(mmmèt:âãã)..–½Ð°TÆìííÍÌÌ yyyr=Ì‚uBÀY,I ;55…Ùl–Ž^pp0V«UV!¤¥¥‘ššÊçŸ.÷×h4´´´pöìYY»v­¤éœ˜˜ÁˆææfNŸ>-«ñî¸ãV®\‰Ëåâ‹/¾@£ÑPRR‚ÍfãÈ‘#¼óÎ;œ9s†™™Z[[yýõ×%¿|RR’Ø=sæ ·Ýv¥¥¥2ƒÕÞÞNoo¯dJOOgqq‘ÑÑQ~ó›ßJAA¬ÊQÚ/êuà«Ö®¯ÚFl§>žÒ˜SÛ?b»åªW”ÿ¿•®,·ž¨÷Wn«ü(×”™™‰A¡®æQWit -‡*""B–솇‡S__/çøÇÓÕÕEaa!ßÿþ÷Yµjmmm¼ñÆøøøM`` ׯ_—T¦Â©Ñ÷œMXX°TÚ¬Óéd%Oxx8ƒA¶Œ ˆ‰‰ÁÛÛ[:Ä‚2U¯×c·Ûeµ•Õj•ÁpÑÈúõë),,”ë]oo/CCCŒŽŽ¢Ñ,ŠIdrÁRÇ®]»ÈÉÉ!**ŠÈÈHɲ³{÷nâââxë­·Ðét ÆÇÇÉÌÌÄb± Óéxøá‡IJJbllŒúúz>ùä~ö³ŸñØcQPP@{{;¯½öqqq<ñÄäåå1??ÅbÁn·sîÜ9‰ÓÑÕÕÅè訬fp¹\´¶¶rôèQfgg%Èo||¼ÌTªmO:±\@)ÿÿ—µÈ“C£ö#”ëŒhåR¯·ê!®EYìIÅq-‹LrÀÿ¶ G_y]™S·}Õ|!Ú-‰ŠŠ’8..—KR' ÀÞÞ^²³³yì±ÇÈÍÍ• -wß}7[·nennŽÆÆF:::€¥ò}»ÝŽÅb! @rÞÏÎÎ222‚ËåÂb±’’Bnn.z½^êÉ7hii‘@é´µµI0äîînÆÇÇeuÃìì¬Ôრߤ¯¯ƒÒßßF£!""â¦j¯©©)ù ÊÊÊHLL¤££ƒöövâãã)--¥ººš‘‘e맿¿?MMMäççÓÛÛË»ï¾+Á™õz½ Ð×ÖÖ¢Óé€%V9Áœe³Ù8wîû÷ï—´ñ)))h4®^½JVV–´5ƒ‚‚$@]]iiidggóì³Ï²}ûv’’’n²ÓÔz¡Õjå=ª«ë…,¨ýu;¾8®R'•,øñü“¿Æ0R:aÊ‹QÞÈr¬T ¥‚)·Q‚â____, Ï?ÿ!&&FSž8N dgg“ššJPPcccœ={“É$Kº’““Ñjµ 3::ÊéÓ§e§———œTOž<Éøø8SSSôôôH¦‚ÒÒRfggyå•W¨¯¯'00½^Ïm·Ý&{·>ùäüq - - -8|ø0ƒƒƒdddÈ>˜ßüæ7ŒŒŒ°gÏî¸ã, |ðN§“Ç{Œ¸¸8Ün7½½½|øá‡;v ­V+Q?…¢ÇÇÇK”t‡ÃAFFAAA’NÆ(…K-TBNDÔS€¾þúëÄÆƈÅballLR° ¬¡ž&ýÅÅEù»¥\Y2©–›å”I ­V+Êãˆ}ÕN¹§Þu‹z¨ÏïÉyQ~/œ -q¯ê³ØÖÓPFüø &“‰ãÇ311ADD¦?—,¶¶¶J0?‡ÃAww7ƒƒƒtwwÓ××'ˬ’’’ áÒ¥K¬ZµŠ²²2Š‹‹ÉÏÏ—Ù‘ÉÉI‚ƒƒÉÌÌ$%%E\ÌÎÎâçç‡Ùl¦³³³Ù,[ BBB¸÷Þ{yì±ÇX¿~=.—‹ññqŒF#.\à—¿ü%EEE7õÞ –‹/¾ø‚Ë—/óØcñàƒJŒ‹+W® ÕjÙ¾};AAAX­V())aÕªUñöܹs8p@–ûùùIà˜††š››™ŸŸ—¼³‚;[¼SQ¢¬Ñhxå•Wˆˆˆ °°œœÂÃÃäŸÿùŸe5’ ÜTïB–Äÿ½½½™ŸŸgzzZf³„ì(31j‡D-çâ¸Ë9ÖÂÐñ´`)õ"§4è”Ñk¥Ì/7”F¥Èø*¯S}Ÿž†r>Rß·ÝngppP‚B655QWW‡Ùl&00³ÙÌþýûijjâ‘GaóæÍøøøÐÚÚÊåË—eF_§wJJ -Z­–¡¡!i MMM199ÉØØV«U¢DÛl6ôz=>>>²\R`Vx{{Ë>T»ÝÎØظÝnÆÆÆèëë#$$„ÅÅEéx€¾¾>|}} ezzšîîn\.6›þþ~bccùÁ~ 999ìÞ½[¶ äääPTTÄÄÄ]]]xyyqéÒ%ìv;ÞÞÞÔÖÖ²wï^vîÜÉæÍ›Ñh–èmƒ‚‚ëÂÉ“'9pà€žŸŸ—†ÌÌL¦§§9uê;w´”ááa™=:qâ;wîD«]¢Ø‹‹#%%…””ª««ñóó£´´­VËÙ³gyûí·ÉÏÏçƒ> %%…üüü›‚UJ}ðäd/gŒ)çõ>jR˧Rn2Òí· -4¨m§¿ÆÉP~¯<‡¸f5Áââ"‹E¶5)«”ÃSéꂤà–«V­’ŽÉš5k¤±ìççGSSׯ_'==ŠŠ -¾rå -ÞÞÞ’þÌ××—ØØX, sss²ÇY¯×3==-×›ØØXrss),,”4ЋEÎà ØívºººHJJB«ÕÊÀwPP¹¹¹’¡I§Ó199Éõë×1›ÍËFØ™===tvvÒ×ׇÉd’”™¢­âôéÓtuu±aÃV¯^MTT£££ÔÖÖröìYÌf3·ß~;)))Ô××322")ùrss±Ùl\¿~¢¢"t:ccc\»vóçϳqãFÒÒÒ $$$„­[·RXXHpp0n·[–+ÃRuÍêÕ«q:œ:u -²²² •8Â~Û¼y3ƒƒƒòZDVS-›â£Î^Âÿ&0ÔvÊr2ªNx¨õÑS²R­êmÔjjýRã’ ™Çxããã²]Eè‚8‡2ð-öU;€jŸG©w"k®´µEIÿñãÇe5myy9¥¥¥’¶sÍš5xyyqñâE>üðCI i6›éíí%!!¨¨(YÅ"ÚuÎ’½~ý:~~~ 3==¯¯/£££LLL––FZZš¬"1  |}}º ["$$Dx -€h»Ý.[œóòò(((`óæͲeLþ‰kHHH`aa‘‘éÓˆ¤ÐöíÛ)++#$$„Ç ,á‹réÒ%ÆÇÇY±b‘‘‘|ðÁ<ûì³<úè£X±¶¶–¡¡!V­ZÅí·ß.«\¿üòKêêêø›¿ù²²²¨©©‘t·ñññFi#‹÷)pMrrrbxx˜Ö®]+A­…ì)åK¼{Œ¯ž£•kƒð“ÄöÊý•A.uÒTix½øâ‹?Q+•§ñ ˆl©P*%í†Ø^,²êÒ6µ2¸Ýnôz=ãããŒñÔSOQTTD]]¿øÅ/$GjCC<ð7nÄ`0àååEGG‡¤ Ôjµ²¿wjjŠ™™¦¦¦0™LøûûsõêUþð‡?põêU™]9|ø0v»æçç‰eff†††n¿ývn¿ývòóó%  -À¡C‡0 444põêU&&&$òdHH333´´´È £««‹¶¶6|}}Ù±cëׯgÕªUØív:::øè£X\\dÏž=2 °wï^|}}yî¹ç$·²hQØ´i“Œú‰ ½Œ -j™’’JKKÉÌÌ$''‡+V}oñWxÜn7¡¡¡¤¦¦ráÂêëëÑétTVV277ÇÜÜ===øùù±fÍYY 68”=]BÔ½aê®'¹õätPD¡DÊÉÜSPA)¿ãài!SzÊm• •²ÌGÙÛ¦Ä\Pß—§€RÿÄb#@‘jjjø¯ÿú/rrr¤´zõjÖ¬YCdd$6›¦¦&î»ï>Š‹‹Y\\¤££CoæææÐhþMZ”k K¤åÉÉI|||ãøñãfqq €&77—ôôt¦§§ •}˃ááaÉ zæ„stùòeRSS‰%??ŸÌÌLÉ4b³Ùd4[T+гÙ̆ dÏgŸ}&K¦oê¿þòË/Ù¿??ü0òû;vM[[o¿ý6üãyúé§ÉÎΦ²²’W_}•cÇŽKHH---ìÛ·ªª*YrçïïÏÌÌ |ùå—´··ËÅyvvVöçMOO333ƒÓéD£Ñ ×ë1™–ZsÄ󈋋£¶¶–矞‚‚>øà kÖ¬‘YuðK9ß -]ôiBVÔ™<¥œz’w±¯º÷ÿ¯•}µQ¦–_µ>ÝÊùWžCP[9¿(uö«æ8·Û-3ž¢„xtt”¾¾>n»í6ùñLcc#III’_»³³“ÎÎN´Z­\DÖßÏÏŒŒ )ã}}}²- ¹¹™ööv¶oßNpp0'NœóÏØØ&“‰¯}ík¬[·»ÝNCCMMM8NYc³Ù¤3#À`;;;% -¸ÝnÇ××—ÙÙYõõõ=\8MãããDDDÐÙÙÉîÝ»ÉÈÈÀjµ288Haa! 8p€ÑÑQV¯^MJJ -\¿~üü|Ö¬YCLL ÔÕÕ‘ššÊúõëq»Ý²"/;;[™×®]crr’„„JKK%ßõää$‰‰‰±fÍrrr˜åÌ™3$$$ÈžåØØXôz=UUU¸\.ì,--•í!!!444044„ÑhdddD¶ßegg£ÕjÿÂøÿ*ÛH O:ã 7f9]YΡW¯·ºžåì2õ÷žÎ¡Lʈ„:ˆ°¸¸(ùÁE“2¨þ¨[ÚóââEmhh(€,µMNNÆns™€î IDAT·³ÿ~Ž9½÷ÞËÆ fhhˆ¦¦&š››e+À³f‹‹ÅBgg'N§«ÕJoo/ÌÌÌÈ Zxx8°Ô[<<´'ÝQÛ:Êmo¼Õø¿<}çIé•ß{:—F³”)±Ûíœ9s†/¿üRr\ðä“O²cÇââ☞ž–à&þþþ477sùòeÚÚÚ°Z­ࢯ¯²²2‰æív»Ù»w/‡¢¶¶V¾ˆöövÆÇÇåÄ:??Obb¢l ellLFáÂÃÃeOÊÑ£GÙ³g„……ÉlŽ¯¯/V«•®®.\.ÑÕÕÅ™3gرcÅÅÅrÂY½z5‘‘‘ÔÖÖp×]w±a‚‚8tè.\à»ßý.)))˜ÍfÞxã ~øÃÆÊ•+ñõõ¥··—Ó§Oó«_ýŠ3gÎÐÑÑAHH«V­’È•ÃÃÃøøøHtfQš-¢I·2<Äû\XX ..ŽU«VÑÔÔ$£{ƒG}”U«Vñꫯ’‘‘A^^Þ_¿R¦”ÙC儨<ŸZ•Céü‹§§§å$!œk¥R¨÷W;F· -¨{s–»&µl+J¥!¥^ˆûöt¿ÂÀô´°*û8OŸ>ͱcÇ°Z­¤¦¦òÔSOQ\\, 266&ö8 +`Âspp0óóóœ9s†ššbbbÀétb4ÉÏÏ—|Ò£££X,FFF°Z­ÔÕÕa4e©²¿¿?---tvvJdý¢¢"Ù_600@gg§älmoo'##NGww7çÎctt”‘‘ÙË ðÄOð­o}K–e;Nš››1›Í´¶¶¢Óé$ÅŸ)))X­V®\¹BQQF£‘¾¾>‰`4¹qã}ôlÛ¶ «ÕÊo~óN:EWW&“‰¾¾>Þÿ}†‡‡%è¤F£‘=Þƒ½^Ott4111säÈŽ?ξ}ûxóÍ7©©©á“O>ÁÏÏO–“™L&¹FGGS[[Ë©S§HJJB¯×óÑG±zõjÙbã O9sss8NBCCo -º)õM¹ÏrÃÓܯþ¿ú”å9={~~þ/tâVCm`) ê¹F­[jGk¹ ‡à çwÈÉÉaýúõ•¼»»[žÿĉ=z___鼈^ö…… ƒì­Mf³YV‹lÙ²EñÅÄÄàr¹hii!..N™FDD„¯¯/^^^7UãëëKzz:IIIÌÏÏããã#+Þrss¥s<33 Ã}}}LMM‘””$K:a©TT§ÓÄÂÂccc¤¦¦JŠ³äädi(ÎÍÍÑßß/ííííF` TL”U,³»UUUÔ×׳°°@AA>kooG£ÑPTTDvv6üçþ'òùFâââðòò¢§§‡ÿøDz"11‘èèh©gÝÝÝ,,,ÐÑÑÁwÜÁí·ßNss3ÞÞÞ¤§§Ktù[µ|-ç x’UONørÇRÎáÊjIOòúUc¹Òåå®UºDårmT®k×DÔ¤Ê9HiœŠ{Îü«¯¾Jdd$---477Ë>û£Gòî»ï.Koܸ!1 D`[— *KáD·¶¶âv»±X,tuu1==Íää$W¯^•ô–z½ƒÁ€ÕjåêÕ«²‡:""Bf+8áÈȈԋððpBBB˜œœÄf³1;;Kkk+£££DFFÙlÆf³IärI ½°° 瀅…Þ}÷]²²²(..&00ÖÖVNž}‡ÃAhh(‡ÆÇLJ{ï½—ùùyz{{1 ’®MPùö÷÷S]]M]]³³³’ÝÄn·S]]ÍsÏ='uLÐë)í.uE‹ºªFȆè‡÷¤ êuäV å‚Ây$ƒ”²²T½–ÍÎÎ2??¯¯ïMß+[t´Z­×ÊkPgQ½¨ -ˆßE_,‡¼Nq€'±ŸIQÝ!âø2 Î²xZà”ʨ6ö”C­0Êï”ÀÊý–ËDy{{ãp8øüóÏ©¬¬dppüü|vìØ!û‘ËËË1™L8p€³gÏrüøqN:ÅåË—eÁÇLJÉÉIÒÓÓÙ¾};!!!TVVâãã#—BCCe™IEE›7oÆb±P]]MCCäååáëëË… $¯q\\œì»œššâàÁƒØl6Ö­[Gzz:Ô××K ˜ððpYZ&///L&<÷ÜsÌÎÎ’””ÄÐÐW¯^åž{îaÍš5$ÿ™ÊìÅ_äÛßþ6ëÖ­chhˆ·ß~›—_~YGõõõñÙgŸñ«_ýŠwß}—ÌÌL¶mÛFyy9ééétvvòÆoðÚk¯ññÇãv»éééA§ÓIEóäl{2B„!wùðÃetùk_ûš,gþÿøÒÓÓÉÍÍý ÃH™­TW,JQgó< !?n·›îînBBB$W«ÚÙQOÉt¡ÜN]à)H¡Ö!OפüM¹`Š(´§L¥§ç¯ž(” ®ò;§ÓÉçŸÎ¥K—ˆŽŽ–@fÍ9<<œèèh¼¼¼$Û…0àÅñD¤¿¿¿¤ôÊËË“÷333ò˜×®]“t2ÑÑÑlÞ¼€ššªªªHOO—4Fããã455‘””Ä–-[¸qãÓÓӒ꯶¶–ÚÚZ™%ÆBDD7n”»víb÷îÝ<úè£lß¾]–ö¯X±‚üü|"""¨®®æ³Ï>“¸Bæûúú¸~ý:+W®”}ýÝÝÝlÛ¶ŒŒ †††8{ö,ÇŽcûöílØ°€ÊÊJ¼½½Y³f ÝÝÝìÛ·-[¶Èþe½^OII DGGËŒŒf³™ÅÅE¢££eߧ(5›Í|øᇔ——/ŒCCC:tHRå\¿~¬¬,ÊË˱Z­ÌÏÏI@@€h2$ {Q¹áQ”óµ¸^ON³ØF©+Ê`™zx2æ”ß+ׇås¥¼‹ÅR|S~¯Ô7OØrs‡òwåo"Óèp8øýïÑh”%õQQQ”——SXX(ƒK111²’J‚9N‰žnµZ±ÛíÄÇÇc³Ùèéé‘r]XXHRR555=z”ùùyÙ«9>>ÎåË—eO®É´Ä?lµZå³ÈÎÎÆ`0`0d WÐrÎÌ̆N§£§§‡ææf‰¨.ÐÖ|ðAÉÒÛÛKgg'¾¾¾h4œN§äw6 ²T8""—Ë%»ÀËË‹œœV­Z…V«Åf³ËOÍÅ‹ äöÛo'==ððp¬V+ É­-³—"Ø???Oaa!x{{SUU%qqqP\\Ìàà ï½÷333FÂÃÃq¹\’þVTõôôôHÀÀ††Y‰ÐØØÈØØN§S¶} -Ÿ››cË–-ìÚµ F#qÒÒÒ$ö‡`›ì!‡â‘G!44”ªª*ÉI¾qãF6mÚ„ÓéäðáÃ’^M€Ãµ´´ Ñ,cfee111!ƒ':N"Ë‹5L°sæ’¤¤$¹‰D@gg'6›’’RRRhllä·¿ý-YYYüö·¿¥°°“ÉtÓ\-dÉS°Wi?©“ž†zPÚÊDŽ§K»Ý.k¡oÊ„R7•¡+ÊõTìãåå%Ûoú]½ÞiµK˜J:êåtÊ`€`ŒQV„í077Çþð=öÊ•+e•Ç¥K—ÈÏÏgÆ ¬[·Ž°°0öíÛGGG555|ôÑG¸ÎÛÛ[R»ÆÅÅa4%Ê Ïôõõ%;;›ØØX´Z­ ———£×ë9xð }}}F‚‚‚èíí•€®ííí177ÇÀÀcccØl6†††p»ÝF, ÃÃÃÌÏÏÓÚÚŠF³T…)ðŠÄ|)J™™™DFF‚Íf“mÙ<òñññÌÏÏÓÜÜŒ¯¯/²ZC`¬6‘h`Ï6›ÆÆF¾øâ qqq\¿~³gÏA?¹¹¹deeÉkff&&“‰øøxL&AAADDD Óéصk«W¯ÆårqüøqRSS‰ˆˆø‹JßÅÅEfffdpIiÇ(‡°P§Ä°UDPú5.— ‡Ã!ƒZbx½ð ?U—r-§€ê ÿV -ëÉaTbÊ¿•E(áüü<ÇŽ£±±‘ññqæææ$Ê‚Œ‹ J§Ó1::*ûPD­F£!55.\¸ 3W¯^•(—ÅÅŘL&6oÞLDD×®]£»»›;w’™™Ikk+555ÔÖÖLJJ -2ªm³Ùðööæ‹/¾Àív“ŸŸN§ãܹsøûûc2-ìÍÎÎÒÔÔ$["## “†¥Ûífff†£GÒÞÞÎ÷¾÷=Š‹‹immåw¿û½½½Ü{、§§Kà—»ï¾›ûî»°°0³³³LMM‘ššÊC=$«êêêøàƒ°Z­DDDHšÄ“'Orï½÷’œœü‰'ÇU-b‚MLL$44”¡¡!y䢢¢¨¬¬äý÷ß'88˜?üm۶ɾ)å»W™n˜r«LˆÒ!ÑHÁÌ ìÕRÊ©Z.ÅB¥\<É°ØÎSÆHmü¨‡:B.ž¯ÚðòôüÕ:¤6ºÄ5 CæèÑ£¹Ùl6K^ZaØI\\œ<ž(Ó¨ÃW®\‘ýÊ͵··—Õ«WÓßßÏaqq õ?66–ÐÐPBCC),,¤¨¨ˆÉÉIbcc™ššâ•W^allŒÑÑQî¹çÖ®]+{}%dYY™ØËËËcÛ¶mÜqÇTTTPZZ*£¾ñññr‘Ž¯V«%66–   Þ}÷]bbbHNN–A©ÎÎNfggyàÈÏÏÇÇLJŒŒ - - -Ðh4œ:uJ‡III”––¢Ñ,1‚tww“““ömÛX·nÃÃÃ\¼x‘¬¬,n¿ývIAuõêUª««ijjÂf³ÉÒPoooœN'>>>’¢Q§Ó1>>ŽF£¡¢¢B¶ïÌÍÍñÖ[oñÙgŸHqq1999lÙ²…mÛ¶qñâE.\¸@ZZšÌð+ƒJZ­VöÞEGGßdˆ)eK©Ê¡6Ö<éŒò_åPeê —:È @QÖ®4˜<Íâ#úâ¼¼¼<êãr¢òwå}úøøàr¹$ç÷øø¸4¸†††HNNf÷îÝ”••ÉÅ_d-»»»ihhÀét2::ŠÃá@«]Â#àÚµkÒ¡³X, ÐÜÜÌèè(&“I¢„‹ö2Q)ÚÐÐPYÚ?<<Ìøø8IIIÓÑÑAgg'çÏŸgxx˜‰‰ úûû '&&F:@¥¥¥|ë[ßâ?ø>ú¨Ì šþ”>räSSSÔ××ÓÙÙ)qfl6AAA 0;;‹ËåÂétJ'66V:#"óÎ;ïÐÓÓÃÎ;‰ŽŽæèÑ£¼ñÆr>ÌÊÊ"66–ééizzzd©qVV£££’×½¼¼\bï\¼x‘>úˆ––¢¢¢0™L¤¥¥ñÒK/±{÷nL&ÁÁÁ¬^½½^O@@[·nÅ`0ÐÒÒ")®^zé%INN–À^êùViˆ+hB.ÕèáF‚` {DÌOJʧåœ$ñ›2Ó.tE>>œ?žÀÀ@’’’0?~\®- ÔÖÖòÛßþ–;w²~ýz Ð,*Ož<‰Ûí&--M ½¼¼¨©©áÌ™32ékµZyõÕWùüóÏIHHÀÏÏ@jjª¬DÕh4¡¹¹™üü|ùìËËËo*#ï\éô«Ê2Eµ ©åI)Gsss’û\\¯§}ÔÎÆru´V™ýWˆË9DÊëÛ+Ÿçr´[ßÄu*Ï(3ÃGejj -·ÛMss3CCC¸\.¨¬¬”,ýýýÌÏÏ£Õj1 LOO³°°À]wÝÅ?þã?²víZŠŠŠ(((`÷îÝlØ°µk×rÿý÷S\\ÌåË—%—p\\Û·o'##ƒÈÈHÌf3yyyìܹSfÌMYJJ -%%%¬[·ŽÒÒRxàxàîºë.Y“’’Bhh(~~~HLܯ§ -#Áÿ+hÐ>Ììì,£££èõz‚‚‚((( !!Aöv§¦¦¢×ëàòåËÔ××ãp8¸çž{HHH ¡¡·Þz €ððp‚‚‚p:\ºt‰sçÎñÀ’’Bkk+¿þõ¯ùôÓOÉÉÉ!((H.ýýý1²¿022’ôôtJKKIJJB£Ñ°yófylÑëFtt4O<ñƒÎÎNIGó£ýˆÎÎN’’’HLL”¬R¾Ün·“SʽøM9ïŠùZüRî§vüðC¶lÙBTTÔMU'†QÛ'"X$dUù›`ŸÑjµÒ¸ΈR÷Ô¿úÿb]:)tM=ß«AÕkÒ)Sê¦Ø^@ö¤o¢g>88ø¦¾§yAù·0B…ŽÆÆÆÉ;ï¼#©‘ÓÓÓÙµkÅÅÅ$&&b2™ðóóãðáÃÇâСC’÷[茨 Õ•7nÜ <<£Ñ(©š»»»% ê•+Whii¡½½«ÕJrr2ô÷÷HJJŠÌ0 -æ»ÝŽÙl–Àd"c_]]M?6›¢¢"‚‚‚¸ýöÛÉÉÉ¡¶¶ö&ªËÀÀ@¦¦¦ - -"88˜7nKjj*f³™úúzfggÉÊÊÂår122‚F£‘n¢ŠÆårI6A9;;Kcc#ýýýdgg£×ëioo—åØQQQ ®\¹Â[o½Eqq1»ví"66›ÍƱcÇøÙÏ~F?QQQPnaaÙÙYþþïÿžëׯSSSÃwÞÉ7¿ùMJKKeÐB¯×KjZµ¨ç\µå©_m;)·QÏïžì,R-æ??¿¿¨TSꉷ··¬¶©Ô©·÷õõ•t©‚µK¸®¬26«H¸,7”ÏKÌçë¹p - -HKK“4ÄN‡ô9æçç1 ˜LK˜BÅÅÅ„……IL -F#í ÁRNZZN§“k×®Ñ××G~~¾¬”v¹\ÒiÏÎÎ&11‹ÅÂÐÐaaa’JÓh42;;KGG‡d1 288(ƒÈ‚ÆsaaAV”nÚ´‰üü|&&&Ðétìܹ“   Yižž. SSS2 7<ï¿ÿ¾¤/êïïgÕªU²œK‘ ¶ˆ‰‰¡¸¸˜ØØXŠ‹‹¹ë®»Ðét’[vqq‘ÍÅMZ IDATîîn>ýôSù 333ÉÈÈ`ÅŠÔÔÔÐÖÖÆwÜÁúõëÉÍÍåÔ©Sxyy!ÑË™Ë墨¨HigÏže~~›ÍÆØØþþþÄÇÇKcËjµbµZ§¿¿ŸŽŽ^{í5|ðAòóóy÷Ýw©¬¬$==]F_=ŠÅbᥗ^"**ŠcÇŽqéÒ%Nž<ÉßýÝß±aÃË~hU¼Ð€\Ää¢îëZn²RNò"âêïïO~~>‡æĉtttŵk×xõÕW)..f÷îÝhµÚ›z£”´ú¼‹‹‹Ra”N‹zuv&$$D*ƒÚ@Rg;ÕÙ 1 +ŸƒÚ òäÈ/7”Š©üN™‘T:²Ês(·Q>q^Ñ»*îßápHcú¾ûîcëÖ­\¾|™·ß~‹Å¾}ûØ·oßM×âëëKHHØív®]»ÆÓO?Í£>Jll¬lóP.ÊRY‘)ommÅÏÏONHQQQ²—X§Ó(lÇÇǹ~ý:F£‘ØØØ›" âýˆ2'F#K©•Y1u°H<71èõz¾þõ¯sãÆ :Äää$ „††Ê¬œ1Â`0HîèÀÀ@òóóñõõ¥¶¶–£GK%ÖZ­–'NÐÖÖ†Ùl¦¢¢‚ÐÐP†‡‡illdjjŠ;wJð2a¬ÍÍÍÉg3>>.ÁµV®\Inn./¿üòMýÓóóó$$$ðÌ3ÏÐ××ÇÅ‹Ñh4ÄÇÇsêÔ)®]»Fbb"çΣ¦¦†W^y…Ûn»MòÙÎÎÎKz®t†•ÏΓŒ‹ÕÈüj¹]ÎpSn¯×To£Ô áT ÇAÝë¦Öå5*ß¿zåßʹËÓvâ¼Âù fóæͼ÷Þ{,,,É'0ý9ÃlµZ‰‰‰¡¤¤ƒÁÀüü<eYÜ—F£!88˜   ÙßÚÚ -,¡rÛívÞ|óMÒÓÓY³f ÁÁÁøûûKœŽ¾¾>4d†ˆ¥¯¯´´46oÞL||¼tT}||ÐëõÒ(ï@™ó¶ USö¯_¿žï|ç;¼öÚkdeeaµZ% ®¨F¤­­M²¼LNNKÁàÚÚZºººØ½{7åååìܹ“;ï¼S:Sƒƒƒ:t€²²2, dggsîÜ9ª««Y\\”<ÌÃÃÃ<ûì³deeqðàA^ýurss™››cÛ¶m˜L&ššš0›Í¬[·Ž_þò—TWWóoÿöo5;;›ï|ç;üüç?§µµ³ÙÌää$:NóGŽÁÛÛ›+V°¸¸ˆÓé”ÏKïTé(å[¬m¢¤XÙ¦²œ åi(õQ8eÊL¨ò™Që™zÛål;åÚ*þ/®U€©qĶâ¼â=Þ2ÿ®]»8pàçÎ#??Ÿ«W¯âííMtt4ááá$''K$ü‹/ÒÙÙIrr2‘‘‘ÌÍÍáïï/í§7Þxƒþþ~¢££Ñh4TWW388Hjj*SSSœ;wŽÀÀ@&''—U’²: ;;›îînš››ILL”:#²Áííí´µµÑÓÓƒËå"""ƒÁÀwÜAtt4„††âïïOvv6³³³Øl6&&&èììdxx˜œœôz=—.]"22’ 6HG <<\þîv» `hhFÃ×¾ö5t«««#77—ŠŠ -, ÇŽ£¹¹£ÑˆÉdB§ÓÉÀ‚Ûí–4† ÌÌÌpåÊ:;;ÉÊÊ¢¿¿_âñ\¿~ÜÜ\ - - -$°¬ .))á_ÿõ_ùðÃÙ¾};wß}7F£‡ÃŸŸgÎœ¡¾¾ž;w¢Óép:iÅð䤨í6ep -ø‹à›R®”ÛªmG±æ©[Ö”‰qLe Zm#*¯WéH²úLi³©çq¬[”Û‰g¤|6b~s‰(3ïîîæ§?ý)ýýý2É#œÜôôtY A€Íf3†+V Óéfzzš””rrrHMMÅétÊR|$ÈËË#11QÎeB^ýýýéééahhHÒÊ öØØ/^¤¤¤„ÀÀ@l6‡‹Å"A&Eþå—_–¾ÉüüI‘é7™LäææÊ^š°°0™Ñ ………¬_¿ž72::*û¯\¹Bww7eee,..²oß>*++e§»»›_|‘ÎÎN^xáöìÙƒÍfãƒ>e]---rR=…‹…°°0Ù3$]•‹¿òýÜÊ`¿‹ÅÙívóâ‹/2<<ŒÍf#22’Çœo|ã’–0..NR·)±œ¡/dQYjéi;¡$bqõóó“…Ò©WËœZÆ…ƒ¤6„Ô¿Òi÷XP_Ûr‹€Z·–{BÑÅ}(£Õâþùö·¿M}}ýM GùùùÜu×]ìÙ³GÒû”––b0p»Ý’o9..Ž•+WòôÓO˲%eŸ¨¸Q•¡Õj  99™‚‚òó󉌌¤­­ááaiD ”––9zô(UUUlÛ¶M:"Ø3??/ÿV/ÂâÙ¬O­LÊùF 8ôÑG$%%K¥b Ò@Hááá’¦ïÀ’>ñÊ•+ÒZ\\”tmAAARZZŠÙlæƒ>àüùóÄÅŇN§£··—ÑÑQt:²,\,è===Ò™¬®®F¯×Ë>gq¾¾¾FÂÂÂhjj¢©©‰ .ðå—_¢Óé ¡··Wf>ñöö–Â`²íi.÷d¤(e]-ãJYWgr”¿/'ó"¤Ô3¥ƒ²œ.‰¡ \«µ¾ª¯AiX©%å3ñõõÅÏϸ¸8BBBhmm¥··—Ë…Ýn—†HOOV«U‚*Ë–///BCCijj’©YYYFé¼›L&i¨‹j‘èèhÒÓÓIHH%¤"k’™™Ijj*ÞÞÞøùù±uëVd‰shh¨Ä†àCn·[ö¥+9u’pB‚ƒƒùŸÿùéÄúûûßÔ¦!X‹‹‹äååa2™ˆŠŠ’˜LOOSPP@XX¾¾¾èt:ŒF#ìرƒüü|ZZZ¨­­••+âùŠÌHPPaaa377Gss³dÎX·nÅÅÅ,,,ÐÕÕE__)))œ;wŽ÷Þ{OâF“i‰Ê´ªªŠììlìv;¹¹¹²š®¥¥…žžIs%ž›¥¼ ýTf?Õr¤–çåœ µc­ü[í (uW­Jd9=ðô½'€j~~~Pù»!e@P©gÊêP‹ŽŽæÃ?”ÙȪª*éôj4™,Y»v-«W¯–kŸŸN§S¶PÅÆÆÊþmX¢ì¬]»VöTÇÇÇÁâ⢼—±±1®_¿.yÕƒ‚‚ðññaffFÒåääðÔSOño|C‚RsÇw°eËòóóIKKÃd2I -¾¸¸88À«¯¾J{{;ÍÍÍØl6®^½*[ÂÍ®···¤Ms:øùùÉ$•N§#!!˜˜’’’˜šš">>^‚¿þñ”ÁøøxÉÈ!ô< €‰‰ YÊÍ<€Ãá`ÿþý|ùå—ÌÏÏCQQ999ôõõÑØØHpp0deeÉ9*33“€€I-ÛÒÒÂ3Ï<#9E2É“­åiŽAHõ:¡ö?„.¨·2¦”w¥¢ÖåqÔvœ²Z} b½ýè‚LY £¾?±¨HP¯5Ê{׸¸¸Þ&’!ËWX°gÏ™ØX±bv»£ÑÈôô4CCC’VP@Úív š)*ž•CàŒˆjšþþ~´Z­ÄA–6¡ó - -"$$„©©)ºººhhh8[·n%""½^/›6m"!!A¶)FÆÆÆ–àŠ¢ŠcnnŽÀÀ@ ƒt¶–ÚÅ‹‰‹‹cvv–'N055ÅwÞIFF†|n·›òòrrrr§¥¥E²]õõõQTTDHH555´¶¶âp8X±bþþþ|þùç|üñÇÜÿý¤§§ÐÕÕÅ¡C‡hmmåâÅ‹¤§§“““,1e%&&òÉ'ŸpåÊtL>QQQDDDÈyHüVÊ„ÚÆIS¥o¢Lü©åZÉr¡”Ÿ›<(åÂ¥VÄ[-0ž„y¹ñUÛ*-zzz8yò$ FrssÙ±céééäååáïïÃá **ŠÅÅE®^½ÊáÇihh ­­‡zˆ'Ÿ|’ŒŒ –¸;{zzd¯Æøø8ííí$''“••%Ñ!ä$ Õj‰ŠŠ’ˆÌ™Œ—J"^žP"áˆÉW™á†%§C‰T:5ÞÞÞèt:n»í6ÒÓÓ¹pႤ¤xòÉ'‰‰‰‘½nÞÞÞ466ÒÜÜLww7kÖ¬¡°°£ÑHmm-­­­2Ãk4 ”} ")JMìv;=ô¯¿þ:{öì¹ÉÙ¾ÕûRNŽJ‡  °°Ï?ÿœÿþïÿÆÇLJòòrIÉd±XøÛ¿ý[žxâ öìÙCLLÌMÀË[©ÊÅ“§(™ÏXLÚBÕÇSŸCÜR/žÎ§·zvês)!OçC 2¥6G¸¸¦ŽŽ*++©©©aïÞ½lÛ¶œœ|}}‰ŠŠ’Ô>© ÄjµrâÄ }ôQ¾÷½ïÉŒ(£SÞ³:X¢üMD!SRR°Ùl<ñÄØívÂÃÃ9wîÜ_<‡+V055EDDÄ_Ü·ú‰÷(ôëVmB·¨×Úµkyúé§%+…ÕjÅÏϪª*&''ÉÊÊbëÖ­¸\.jkkåå—_Æf³QYYI^^ ʲKZ»}ûvJJJhiiáÒ¥K¤¥¥„V«¥»»›‰‰ BCC1›Í„„„P\\ŒÃá|³ÿþïÿNQQ•••ìÙ³Gb¨ô´´4víÚÅ¿üË¿PSSCII‰Ì@oܸ‘;ÁÀ§Ÿ~ŠËåbãÆèõzéÈ -cD™íýª¡ÜFD¥ÅâãÉRu‹—úžÄûR¾;õ¶Ë½cOc9}RßÓ­æqî®®.Ñjµìܹ“²²2*++9xð ííí’û[ŒððpÉŸ,°]œN'uuuìرƒ¼¼<ŠŠŠÈÈÈλN§Ãf³Q__OSS'Ožäã?æã?æ™gž¡°°PùDïz[[ twwóþûï³bÅ -¶lÙÂââÍ(ÒâYÎÎÎÊ’tåü­Îˆ‰÷år¹ÈËËãG?ú?ýéO)((kžÃá`rrR^ÿØØUUUôöö%Ѩ'&&8~ü8»ví"%%‡Ã!eÚh4Ê -¿õë×óÞ{ïI Þ¬¬,Þzë-´Z­,'u:ìÛ·‰‰ ™•Fáðð0.\àøñãäææJ0³ÌÌL&''ùõ¯M?O=õyyyäääðÊ+¯ðË_þ’7ß|€W^y…°°0TÛ·o÷ß?_ÿú×Y³f :Ž¹¹¹›Þµ˜ƒ<­œz2ô”ô[ɧ2³ó×èŠz1Ôï]},F#HâœÂÉòtÏê ’:`K¶SYY{÷îåòåËœ;wŽªª*ÚÛÛ™™™‘ÌLEEE¸®¯¯™™¢££ •ÕM.—‹ÔÔT’““¦»»[fƒ‚‚HNN–,œ?^VSj4©«W¯æÙgŸ•½ò"àK-ê]S%²v"`-ñ)))üð‡?d||œ®®.®]»ÆçŸ.ÛÌf³ ˆ -Ñ´´4¸|ù2:ƒÁ@__AAAÒqxðÁÐétìÞ½ƒÁÀéÓ§æÀddd°fÍFGG% ‰À1˜ -QQQèõzΟ?O]])))$%%a2™dËkpp°¬X;rä+W®”ëfDDááá\½z•S§Nq÷ÝwóOÿôO ñÝï~W¶Ð¨åËÓó‰ ®‹á)8í)9u+Y÷äUþ®–}õù=]¸¥>(ïÇÓöêêõõ)÷±¾ª÷Q&< QQQ|ó›ß$==“É$ñNFFFd¾`$r»—0 úûû1›Í8NÜn÷M-/ 7?îÿãìÍ£«®Îýÿ×Ir’“œ 'ÉÉ<‘9! I€Â@ED´*Zµ•ZkêÐ¥®¶~uÝjµµ^kmm•ÞŠ8*™‡@  óDæyžCN~äîÝ͉zŸµ²’œá3ìýÌÃû ‘ºC`$''ÓÕÕE^^UUUÜ~ûí,_¾\¶«‰*iŠ'qÃÃÃ2¡¡¶üêW¿bË–-œ;wN¶XŸŸOtt´³'Ð&“‰|P:ò–]¼x1ÑÑÑ´¶¶råÊfÍšÅM7ÝD__Ÿl‡Ð)--•-Ñýýý2ÙÕÕEAA]êïïOgg'yyyìß¿ŸV®\IXX˜­Õobtáøø8)))Üwß}DEEáççGuu5CCC¤¤¤\. “Éu:²Gï:p ½Ö$?M=‰Z>)þÖ2•ˆ¿Ï9´wˆ‹ë‘kÕÐS#^gÎœá™gž‘ß¿ãŽ;HLLäÛo¿åÊ•+ÄÇÇãèèHss3‘‘‘xyyÉöíÛùýïÏ]wÝ…Õj•„VYYÉË/¿Ì¶mÛìÞ_tt4ï¾û.ÉÉɬ ¥‘âB^gFñ·ղɩKwDì•>«‡½’|}¦ú®zÿúwôs«çR…±Ùlœ={V:žžžžœà†nT!!!Ò6¸F£QÎç6›Íb³Ù$­˜.a6›åÌîÔÔT¢££qss“¼åéé)«Nôꉡ¡! *'öKo5R“ããÕªùË_øõ¯ÍáÇe«ªÙl&99Y® Œ1ãÝßß_šL&*++ijj¢ªªŠÈÈH.\(åÓêÕ«™?>ýýý¬]»–Ï>ûŒÈÿ¥ÙÖÖ&+ëD¥©‡‡ü1þþþô÷÷…‹‹ ŒŒŒðÕW_qñâEš››e‚­¾¾žíÛ·ó /àëë+¦ªª*:Ä’%KX¿~=´··Ë6'1NxªÌ½àµMÆž|ŸÊßPiTõ1„>QϧҪ®Tšü-þÖ+rÄßj+¢=§_§ @ÿ¬N7ú:釸¦ÁðŸàœÅb¡½½]c:8LL6èì줥¥///ðôô$<<ooo<<<(**bllL–ËÇÇÇ„Ñh”#/dppG}”‘‘ (|à 7àää„Åb! `’^Ϭ¢Ô«SÔVNƒÁ@bb"O?ý4ŒŽŽJ9~úôi‰÷"@¦ÃÂÂä$5oooðkkk“ßmŸþ9óæÍ#&&†¸¸8Þ{ï=Ìf³›{øðaÙ6nµZ1äççËI5Ï?ÿ<ÉÉÉÓÔÔDoo/¤¥¥‘••EMM r$¼ 1GGG‚‚‚øíoKHH¥¥¥²BúÙgŸåÙgŸeÎœ9“øCwþÕC¯6ÖéRü/hJÕ+“’‰/¾øâ‹zÔA%*õBº£cϳwØ3Ät&TKuÚÚÚèîî&''‡sçαpáBjjjHMMeùòå888ðÆoðÕW_±ÿ~vìØÁ‘#G8pà{öìá׿þ5?ùÉO$ð—X´O?ý”7ß|“ÔÔT|||d‡ŸŸ...¼øâ‹dffʹçSeTe© -a< -‚‹.5R¯FÆÕ¾Wõ3œÈÆÐÐ däççËŒ­È€ “ŸŸÏñãÇ™6mšT€ÂQ”‚ØËË ³ÙÌÀÀ6›ááa‰tm0dÉ·=‡Jý±gø«k# ÈÀÀ@ZZZ8{ö,ÕÕÕìÙ³‡žžbcc9þ<ùùùddd& oQ梞ÿ‡÷êZŽOdÂ<<<® ¨û¢2ÔTÎÍÿå°w>}Å}%ÿ TˆsØ‹,‹×D`ËÁÁË—/“Í‘#GرcMMMäææJš­-‰‰‰,]º”U«V‘ #°—/_–Ózè!9fF´ ˆÊÝP´÷ÜꚎáéé‰ÑhäÝwß%::˜ìh™L&º»»Y·náááוªòë#Öh*Ð7u}Õ÷E¦¦  €üü||}}qttdhhƒÁ€ÅbáàÁƒìÛ·¡¡!–-[FXXƒƒƒ2±téRÂÂÂèïïgÆŒãææFyy9—.]¢²²''§Isµûúú(++#77Wf’<<<§»»???Ö¬YCvv6nnnìÚµKfŠõ’D•.¬V+³fÍbÙ²eDDDP[[KXX6›’’*++ ¤°°¼¼<*** Ájµb2™&Í;¶·†êk:/¨k¯êù„™ª_wHÕ½¶ÇSzỂp:ªòÊÙÙ™®®.¾úê+9ÖRŒæرc>.AÇÆƸ馛$p‘þÜj©¿úÞT{¼%ž'88˜ììlúûû9zô(!!!“2AAAX, - - -èèèÀßß_–—º»»ËàŠ»»»%F¾yzzâíí-÷¦´´”ÐÐPfÎœITTO<ñ„Ì$Î;—ÔÔTÒÒÒ - -âüùóÐØØHYY...dffÊL—Zº-ÖÀf›ß‰ŒŒdÖ¬Y˜L&>ø຺ºhmmåÔ©SØl ŒÍÍÍ<õÔS¬\¹’ÊËËeæVàcè€ÌS×[¥E{‡ÊƒjVó»>+®­C©iqèYEÕ¨SyUýûªñ$czzzø׿þÅã?ή]»hhh ¦¦Fº^^^8rxx˜Í›7³oß>:::hjjšTv{äÈRRRعs'7ÜpäYÔêóÛ£uQ–IXX;wî$::ZL¢·&ÚÊ\\\èîî–­.‚gÕR\ÕKQÕ5QïMЛÑhÄÛÛ›¦¦&Nœ8!ˇżuƒÁ0)Ø.©qvv¦­­Ûn» Èsêû$îS<ó‚ HMM%<<œÜÜ\>ûì3††† ”ÑÑQšššdKKUU•4";;;quuÅÝÝ]–¬^»v ¢££)//çã?fåÊ•„††bµZ‰góæÍìß¿_–zº¹¹QZZÊÏþsî½÷^Ù7)ýP“S•ñ .*íDÕ‰J£*}Û£{²ò»´ê¡;,ª|·xwrr¢¿¿_ŽVzY•G*¯ªIñ %%%¼öÚk\¸pÀÀ@ŒF#ûöí£­­P__OKK 5552+žžžNzz:)))$%%áèè(Á0]]]¹÷Þ{yôÑGÉÎÎ&99™ÈÈHBCC%h_KK œ?žÒÒR.^¼(±\Þ{ï="##IOOÇ`0ȉº3ªåª aÏ)›*ûJff&ãããýôS‚ƒƒ‰ŠŠÂd2I]ªÓª=»eªCMFÛ³£&t…!6Vn«JI\@'L=Ò£+{Œ,"ËûÛßøàƒ¨©©‘ã­DÔÌd2ÑÚÚJxx8QQQx{{SSS#ç°>|˜û~///i”ÀDàÂ… ¼þúë2;&2ÓÅÅŬ^½šÇ{ ___ÙÏ¥fO¦Zªp²§¤uFЫ(Ä¡Gu&JI8K‚¹]\\¨­­¥¤¤„††9ž¢¾¾î¿ÿ~RSS©®®¦±±‘®®.Ö®]Krr2###tvv288Èœ9sX°`DYàŠË–-ÃËË뺈“J„ú3«Ï¨x˜'$$„mÛ¶ÉY™o¼ñË–-£¢¢‚7òÎ;ïÈŒ½«««õfϨQB•æÔõ•ê}ªÂ]§Gõ3ª¡jï˜JéŸQXý:ºs«fwà?è·ªÃ3::ʹsçغu+µµµ\»v WWWŽ9B{{»Ä‚¨¬¬”‚@ôÕÕÕQTTDMM 'Ožäã?æ•W^á¶Ûn“r±×*R«þLª®Ë}D oûöíNÂÇ 6l ::z’{,xD5Êôr:UÖˆïèÙNq^«ÕJHH{÷î•™ðþþ~™½Â××—¼¼<¶mÛ†Ùl&,, gggòòòxî¹ç¨¯¯—Ý—_~Ikk+ÍÍÍÒ ìîî桇bÆ lØ°Õ«WËé >>>•WôvŠ>q£ÑÈ•+WdõêÕR.©•BâÕꢣ£IMMåÌ™3¼óÎ;DDDH°¦¾¾>6lØ@||¼Ü;wrþüyL&“,{S{œíí±Ê‡ºÃ ^ôŠ15 ¦ëñ}UÁéçÓöä¬=½£zyžƒƒƒ¬Ð¨¨¨ 77—gžyoooÂÃÃihh »»[ôÂx !33“™3gÒÑÑA^^ß~û-§N"??Ÿ‹/SkæÏŸ? pOÜ—hsRi[𺸎Ñh”èÂ#+œœ0ôôôàêêJpp0¾¾¾r®±¨ÙKÐֳк S3b}E…Azz:MMMœMww7]]]- oÕæU-º-`¯’Fð®Êç*¿‹ñzqqqäææâçç'ÓDÅ£˜RXX(GŠ ¬£ãÄT’¦¦&ŒF#iii¸ººJ-îOð¸Åbaúôé²ýÁÑÑ‘’’ - eRxx8AAA2蜜œLGGNNNôõõQPP@__qqqX­VJKKqww'%%…ññq®\¹ÂƹñÆ¥óP\\Ìؼy3KŒÕ~P{õÐi_ð”½sŠ=ßÑjÅ:é6‹JÿªþR+ñŒF#Øl6iϨ÷ ò†àK¤œŠÿTºŽ°TÐ}(‡ ܧòòrî¸ãvïÞ-KØ{zz(**b``€ÎÎNé3988ÈÀ0 [D°§¥¥…«W¯JŸáìÙ³ŒŽŽÒÒÒÂêÕ«%V—ª/t{U·¯u¹%¾#ðÔ  QU׋6e1Ž=%%…¬¬,æÎKSS;wîd``€ÐÐPÚÛÛ— Ï{÷îåôéÓäååQTT$ôŠŠ -†‡‡™9s&©©©rêÁôéÓ1™L\¼x‘¡¡!üýýñõõ%**Š'NÐÒÒ"A,X@`` uuuäää°cÇÖ­[Ç´iÓ¨¨¨`dd„ôôtÆÇÇe[çÎ;eûÌÈÈÈ&sçΕ~¨B×eŽïöä´zè6¹n_Œ_P¾JÌö¢`öŒ@ñ·Ò \Ü„èQ3 ´··³{÷nššš0›Í$&&AUU®®®¤§§“ÉD]]Ÿ|ò ›6mâòåËdeeñüóÏJÿ¤1H---¼ýöÛ\ºtIöUyzzRTTÄ 7ÜÀ /¼@TT”4ŸJüºñi/“¥2²ÊPööA]³k×®I%²téRÖ­[Ç­·ÞJHH‡">>^2 +V¬àž{î‘Ž¡wãëëËôéÓ£²²Rö9çççDff&&“iÒ+AˆBxª÷¬—ûªFåØØĈÀéÓ§“˜˜Èàà ‡a³Ù8tèÍÍÍxzz’““Ç~HOOf³™   Yö'Œ {{¡®X³ÆÆFÜÜÜ®™ŠŽõ=ü®€®PìôóÛsJì"TEÍz -óïÿ›Í›7³wï^RSS™?>þþþ¤¥¥áïïOMMÌ¥¹¹™ŽŽÙ½{7 ü¿ÿ÷ÿX³f4$Ô ž@UûºÄºŠÿÕL@¶×?k0hmmåƒ>e–0¡€<<<dñâÅ$&&N§S÷T Á -¥!uJ€ú#2k*-ªk/F·åääDmm­luÙÈÀÀ@<==Ù»w/GŽ¡¥¥…ññq‰½nÝ:RSSY¿~=·ß~;wß}77Þx#÷ÝwÏ>û,k×®%55«ÕŠ‡‡0)"@pO 㢵µ•ÆÆFŽ=JXX7Þx£4”ušQ vÕø÷ññaîܹDGGó駟b±X$;;›Ûn»MfZZZøä“OøÛßþÆÑ£G›m'JÔU¹¤Ê.ÁûâÄkâ>„ÒÑøÏh={eÓº‚çP³8êþ©Æ…îÀ¨rJ½ŽXo¡{€ÑG}Ä+¯¼Â_ÿúWÎ;GZZš,/Žõàà €Ì>‡„„àêê*ƒ9bäž@ëïêê"''‡Å‹388(DuÝ„ó*d’¾~ÃDðÔÃÃ???þçþ‡ŽŽbcce¹ãøøD‰¾@Þnlldppôôt|}}%êA}±.j¿¶.Ô=•#Ørrr°Z­444ÈûUe¬Š*íââB{{;sçÎ%))IcõýF²àÁ×...øùù‘žžÎ’%K˜>}:ûöí£³³“ÑÑQz{{yúé§Y¿~=---\¹r…«W¯âááAZZ\ºtIcÃʬY³$æ@vv6F£‘ÀÀ@9mgÏž=`îÖ[o•Øããã<ðÀôööŠ¿¿ÿ$zS÷XнXO!cUO-5Wy[`鶀~~=“¦VˆÏêÁ55°ªß§øŽj Úl6Z[[åÕ†QyQ謮®.*++9tèü1åååôõõa³Ùhii¡§§GŽï€a###ÄÇdzbÅ -/^,§k\¸pA777³k×.xàî¾ûnÌf³1{ Jâ[[[eŽ··7~~~Øl6|}}±Z­Ô×תU«ät ÕÞµÇ º¬Råî鎭¨Ü‰‹‹#""‚·ß~›ÐÐP¢££qwwÇßߟÖÖV†††d"LT/ŽŒŒHð@«ÕJyy9K—.ÅÇÇGŽÝSmá 3kÖ,æÍ›‡««+UUU²2Ó`0P__Ï¡C‡¸|ù2AAATVVÒÐÐÀÌ™3e{žÙlfÞ¼yŒŽŽò駟R[[KTT·Þz+7Üp'OžÄb±`±X¨®®æüùóœ]fRUÙ¯¯“® T¡¾.’*ß©4?66Fww·ç¨Úð aÁ3*&‰®ï] ùtõêUl6›œ@¡êDÁ[â5¾(ì •wÔûÏ)/bïu¹"‚3---ôõõJii)_ý5‹…¨¨(<==%°²““ÝÝÝtvvríÚ5êëëiooçË/¿¤¡¡ÈÈH®]»F¿ ܹ¸¸ÈàFii)÷Þ{¯lwÐuŠø»··w’üÑ} ±·b_\\\ä{ª?¡' D+ª³³3ãããøùù‘””ĬY³HKKÃf³ÑÐÐ@]]eeeô÷÷S[[ËÿøG.^¼HMM ‘‘‘xzzò駟rúôiÚÚÚhii!44TNzóõõÅÍÍ’’êêê¸é¦›puu%//OV²‰à{BB—/_¦§§‡™3gâãã#Û,Š‹‹%ŽHqq1}}}²æÃ?¤¾¾ž˜˜®]»ÆŠ+X²d IIIôõõñÕW_I<www™Vå¨zÀž ,hP(!} = ¼Ú;¨;´z„Ký¾=ƒQ?l¶‰Ò‘¹?vì˜DÞäòåˬZµJ¢à«Â¡­­íÛ·séÒ%Á}ðÁyþùçIJJ’N¼ø¼³³3UUU<ýôÓr‘““ÅÅÅòÞ{ïÉ@*XEgg'ß;nN~U)¨B®fªëmïÜzY|NŒÙóõõÅÇLJØØXBBBÈÏÏçܹsÄÅÅ1::*A3Dô¯­­K—.ITJ1Gº»»›/¾ø‚²²2 8#„fPPf³ww÷I†©Jtâ·š•Ó™XÐ…èï‰';;ooo¾þúk:::¢¸¸˜ááa¦M›FKK Ìž=[‚Ñ™ÍfI›úè@uMÅoÑ«%ú®UÃZHúÚë´¬Ò ú£òÁw9ÿbÔàÄTŸWiFD?EIQ?999üóŸÿä–[nÁÍͲ²29¶dÎœ9dff/A#¯^½*KÉD@¨¯¯çž{ŽGy„Å‹ãèè(«4Äa4éî½IŠK¥KuïEÔZ•"ûèèèH}}='Nœ8¨ªªâÁ$&&f’œQiL(ká@ˆµÔ÷T¬¯Ð÷IÈ‚-[¶ÐÛÛ+{¶Ý8;;ÓÛÛ‹‹‹ þþþ´µµqìØ1E^ºt)YYY„‡‡M||¼œa.*]j¸ZÒfϹ²ÙltwwS__/³É,Y²DVáè´­ò˜Xg!ÿáÍ7ßL@@ÕÕÕ²$Pdp?ûì3.^¼H||Ë™3gèêê’Ïm4e†¬³³Sö춵µáà0[!°UJKKiooÇh4âääÄùóçéêêâÝwßeõêÕ×É u…ã'ÖÄžNŽ¢——qqqìÙ³‡ööv™åpqqadd„ÞÞ^ÂÂÂ8zô(AAAÌœ9ÓîÞ©?ÂhÕªáªî‰zÿ›6m’}“¢MT³~óðð'''>ÿüsV¬X¿¿ÿ$ý¨:O¢eM¼g0dfÔÉÉ ³ÙL||>ÀmmmeëÖ­¼õÖ[xxx””DBBþþþx{{‹««+]]]ŒOº…-W[[ËåË—9|ø0¿úÕ¯dÅàøøDp\绎Ž¸í¶Û$¸¬¾ƒADŶ CÁSz²¢½½777iߪû®ËÑ®¬Êh˜©©©¬X±‚ÔÔTjjjèëëcáÂ…¤§§ƒÍfã›o¾ 33“iÓ¦Q^^Î7ß|#§m466òÉ'Ÿ››Ë•+W¸çž{puueóæÍ„„„ÐÛÛK[[YYY˜L& - ¹õÖ[¨««ÃÛÛ[Åç΋‹‹ *44”   `ä9>>ž;3fPQQAaa!ÿøÇ?xóÍ71 `±X&U‹ [Oüo/±¬Ê{±"é!>ó-:SÚ+•±w1uãt'JÝ´¦¦&víÚÅ믿ÎÇLAAtØW®\Izz:AAA888PVV&³....øøøPYYIWW›6mâþûï',,lRéªX(Glj)_|ñ…tttðöÛo“™™)³ŠâL(f\ÚcjÕ¼X?u켺‘ªGÝPqN!„á800€Á`ÀÏÏOö#Ÿ={–ãÇÓÒÒBBB•••™™ÉüùóÉÌÌ”%ÿ ”——300€»»; ŠÁ`àÕW_¥¿¿_ffUçKœÚ3nUC\ý_¬¯»»;˜L&{ì1Ž9‚‡‡‡SÖÑÑÁã?Îüùó¹víMMM\¹rEövŠŒ—*8„!« -Í™uÖv!ŒÔg°—‰SËÇÔÃ^fV?¿º"bm/@¦ï»jð]¼x‘÷ß_Fu÷ïßÏÒ¥KY¸p¡QY__Onn® ¹¹¹144Daa!MMM±`Áxàžyæn¿ýv®³‡ƒƒƒ,ë™{÷¬®ÈîÚSÜf³Y’ªªªÈÎÎæþûï—QR]ˆûÊI\K]7u}Åû*ˆŽx&Á?„……‘˜˜ÈöíÛ¥×rtt”Žž( Æl6S]]Ím·ÝFBB¤=箋ÐÂä¨ú±FF£‘êêj - )--%##ƒeË–áææv}ˆC_#!CGFF0„††Êª >øà¶nÝJnn.}}}²ÍÃl6̉'øè£$—¯¯¯Ì˜ þk«Ò²j€Ù ¬©!U7ØÓê³êrUÝC•TÉÞwÄýséÒ%Þzë-^zé%.^¼HTT”ÌÜ‹ÿØؘÄJ±X,Ò9hkkÃh4Êé ===ŒŒŒÈÌCcc#«V­âÕW_妛n’ u¿TGBк4ÓeŠX_'''RRRX³f ƒƒ(ƒ×ýýý àää$±^–.]*Ë …ŽSƒ*6›MŽø•7öxK•_>>>,X°€‚‚Z[[eE €««+^^^r­EEPEE±±±ÜsÏ=² X× jÖMÝSý³ŽŽŽ3}út233Y²d nnnÔÕÕÑÐÐ@ss³Ä $..OOO‰`-ªÝªªª¸páf³™¦¦&JJJ˜;w®Ìè™ÍfÒÓÓY³f õõõ¼þúëìÚµ‹ýû÷SXX('ï[fùòåDGG_˜Öå’úª¯Û -Â! R*Oé7õ==à ¯§.CÔó©çTyY¼ÖÒÒ‚Õj•Ûêý:::ÒÔÔÄ|ÀÏ~ö3NŸ>͵k× - -"<<œ––***ððð >>žøøx  ÚÚÚ*e@oo/UUU´µµIšdÒç…^à駟&""b’“§>‡0x­V+--->|XV¯£Z8cýýýlØ°ÐÐÐIÏɲ¢Î IDAT¤;üú½÷ô=Ñ3Ö¢J8ë‘‘‘¤¦¦ÆÙ³g9xð 555rš¨0ÁØ¡¡!±ÙlÔÖÖÊ~//¯I¶Šêx‰À’ø1›ÍxxxDzeËÇÁÁAVØX­V._¾ÌçŸNuu5555$%%aµZ¹té{C8Ãøøø°iÓ&Ö¬YƒÅbáôéÓ„‡‡K‡iíÚµ„„„HÜ'ÿIúdª £~è|¥®ûT4-ì~=P DÕ¯z-}_ † g·µµGGÇI³ÜU~Sù^ì·¨ŠÒŸK•uj«ŸØç)..fóæÍüý茶¾žÝ»w3<<ŒŸŸqqqDEEÉñ¨CCC²ŠÄf›>vì®®®üùÏ桇"66–O?ý”††¼¼¼0 ÜÏb±põêUn¸áV­Z5©j[× Bž‰QèêZèALƒa"«/t“øŒH©ŸU÷IØºÍ ôŽ··7!!!¤¤¤°dÉ.\È¢E‹X¾|9«V­â†n™ú¡¡!¼¼¼èééaß¾}ÔÔÔPSSÉ'‘@§OŸæÊ•+ŒáããƒF£‘öövº»»àÒ¥K¤¤¤ààà@cc#ÎÎÎ,Z´Ξ=+ïÝÝÝ]NZµj?þñ¥Žìëëãرc²åvÇŽœ>}š°°0Ù%ž[ض"±§Vÿ¨vÑT¯9::^¨þ¨JD&*sêßµw.µÔ 3Åÿõ¯1::Jvv6{÷îÅÓÓ“òòrÚÚÚd/^TTV«•üü|†‡‡qww§  gggîºë.ž~úinºé&ÜÝÝ–‚O< jh—••‘——GXXÅÅÅDGGóØcÉ1â¾ÅœJÁ¨:ˆ‚þÜúš¨ŽÆ÷ ±©ÝqÖ…–Êx¢Ú`0LVV·ß~;ôôôpîÜ9’’’øãÿÈ}÷ÝGRR’œMyòäI6mÚ$ÇX‰Ò8‹ÅÂðð0.\àêÕ«\¹r…ææfYª¦ŽçSŸGÎBXŠ5R QúNvv6¾¾¾ìß¿_–vÎœ9“uëÖÉòéááaž{î9^ýuúûû¥‘.œ6a¼ª?a8‹H£º¾j–M ¨ëo¯|\7LUú×U@NÅ'úª ‡‰¢W_}•+W®ƒ——ƒƒƒ ±téR¢££éë룢¢£ÑÈøæ›oprr¢··—ãÇðÊ+¯ðøã³téR¢¢¢pppYò©îOD===¯ žè‡ª(õª›mbü’Ífãƒ>™Bñ¬6›µk×ʯn¬ªN‰øßž!¦ò‰Zò¤>z~€¸¸8²²²ÈÉÉ}¦...ÐOLDèêêÂÕÕ•öövn¼ñFRSS¯[ÝáÓýóê½\¸pßýîwxyy±páBæÌ™s]vK«‚jä2,Qz333(//§¹¹Y:Ç£££r2ÊÎ;±X,Ìœ9SŽÈüL -˜ŠuÕõ}ñº®„T>œŠÔ¿íѪ*óuÃC-:::ÈÏÏ—#b9B||<3gÎ$22’ÁÁA"""X°`¾¾¾²£··—ÄÄD‰j-®ÓÙÙIee¥Díä±ÇãñÇgãÆÌ;wÒ³©ºT§oU9ëxz«„££#¤¤¤ÐÕÕÅáÇ •N¼ Ñ:uóÍ7ãëë;©4Y—ÑF£Q*¯é묨QQQ¤¤¤ðî»ïÒÞÞN@@===Øl6™ae›ííí¬ZµŠµk×Ê2X]†ŠuF¸¾×꽈2TNLLdñâŬZµŠŸþô§<üðÃ<øàƒ,^¼gggª««©­­åĉtvvò›ßü†ôôt:::d¥Û… hii!++K¡ 9¦3==]öc ÆÆF¢¢¢aÿþý,X°€ÐÐÐëæ:«U/:¨¯«sçm›L¦I#quÛB•jUŒÄÖe¡Ê“êk*½ª÷)èÇÝÝ]‹Ôïööö²iÓ&^}õU, 3fÌcÂHHHÀf³QXXˆÉd" €ªªªèïï—•,f³™þþ~Ù–˜ŸŸÏ-·Ü›o¾É­·Þ*GU~êòÉf³a±Xˆ‹‹£¾¾žÎÎN¬V«Ôy^^^ÄÆÆ%Nz³ØÕðV¯)Õaу’öd½x}ll ¢¢¢X´h‹-",,Œ'NPQQŸŸ½½½´¶¶ÒÓÓÃàà Ä  eÿþý˜L&f̘!ÁbU¹£Ò–ztuuÉ*—Y³f±zõj9wî»ví’SGÚÚÚ°Ùllܸ‘„„ &=44Äðð0ß|ó ;vì >>žÐÐP:;;yüñÇY¿~=CCCìÙ³‡¾¾>î¾ûnÒÓÓeéÌ™3ôõõ~.Wm®ïÒ›*ª˜"â3‚>õŠÕUÁ‹*]«òI· »ººpssÃÛÛ[&U>r^¥#Õδwèü-l@ñzee%yyy455áêêÊÃ?̪U«¸|ù2›6mÂÁÁAVŠº»»ãééÉÀÀííí”””PZZÊüc^~ùe–.]*+bÆÇÇ)--eÚ´i²t]øBùùùlܸ‘ôôtùLz•“ 9µF•º¾Ÿ\m ó“zˆõVe£  q~µºFœ×ÕÕ“É„‹‹ f³///âãã™={6ÅÅÅlÛ¶MV6{zzJü¦ÂÂBþö·¿q×]w1mÚ4YÁ2::*ÛZ - - -(++“#Íf3&“‰’’Ž9Bll¬lÃniiahhˆŠŠ -JJJ$@g__³gÏ–A†úúzŠ‹‹),,Äl6ãïïOrr2“ª…?nO¾èº]Ý#‘4‘{£ô²µ\® :ÑÚc(ñºp®]»Fmm-ccceRŒ?•³EEEìرÜÝÝiooçܹsÔÖÖ²fÍ~ûÛß²aéPT†ÕÏññq<<<¸ví999`4¹zõªŒ‰ù–ýýýÒ ÀÃÃã:§ÌÞóÙ#X±ðS1»=†˜*``ϘŒ :ÔÃDÕ‚Õj•ãÞ|||0›Í,Y²€ãdzmÛ6¶lÙÂÑ£G‰ŒŒ”à7„……áááA^^>ø ·Ür _~ù%ååå9r„˜˜RRR¾SˆéŽ™*àUcR¥   æÌ™ÃòåËñòòâäÉ“Ì;WöÏ–””°e˾üòKBBB8vì;vì ³³“ññÿôÀÚlÿ/"†p‚„à×÷T¿*ø¸/{t¥ -8•æU†TŸm*ZÑ÷_WÚÝÝÝ´µµQSSÃŽ;èííÅßߟÈÈHüýýeÀLD™«˜®››‹££#?úÑøÍo~ÃÊ•+ñòò’ç|ºVïOdñt0Èï:TcL7žœilläâÅ‹xyyɶŽ‹/rË-·9iݧ¢±©±öªã¥—ºŠ¿EÖÁÉɉ\\\øì³ÏðòòÂÍÍþþ~™!Fá$·µµù¿Hå&“Én;Š¸¾*ì­¡jÜ€F€ììlf̘q1ªË7{ϯӪ0l£¢¢HKKcÆŒ$$$àêê*ç× e9>>Ž¿¿?$&&J|Uþ‰µS÷W}F{A}ýõÏéÿëôó]´ ;‰"Ð\ZZÊÁƒùꫯ¨®®fddooo‰ÃàääDLL ÑÑÑrÚŠ³³3ÍÍ͸»»Èžñááaš››©ªª¢¯¯¹sç²víZxà^zé%n¹åÒÒÒðòò’c¡TCI—;ºlQ?§GðÅ^ -ÃÉb±Ä¿ÿýoù¼###Ò ²X,qçw"Y^T£¾§W<©v€Ø—   .\È¥K—(,,$((ˆžž:::èêêÂd2a6›quu¥¥¥…… ²páB š§êõùÄëö*Žô{m/ÃD†ÅÏÏàà`¬V+AAADDD0}út™ #<½¼¼§±±‘ÎÎN †‰rËcÇŽ±páB'(zyyMšUðàAÙ#ÛÚÚŠ··7µµµ=z”ÌÌÌIåä:_¨Ž€x= >'²ß"HcÏ!ÒyNÕ_ß\²VÜ.gtGVèUq•fOž<ÉË/¿LDD}}}˜L& ÅÍÍèèhpvv¦°°’’Ìf³L8twwãîî.1#Î;Gss3ÞÞÞüþ÷¿ç‰'ž`ÆŒ2X)ÖJ=TÝ!ž_´òìܹ“ððpÙ::>>YÓØØȼy󈌌´»Fúz¨k¯–‡Û³‰t[Aj ÿAC÷óó#&&†ÌÌLÖ®]KDD}ôDDDœœ,«bEõ§··7999Œƒ]ð8õºŽŽŽôööJl“É$«œ¦M›FRRK—.eÞ¼y¬[·Ž›o¾YÒù·ß~Kee¥¬ÊMMM¥¾¾^V200@vv6óçÏ—v‹/–z²¯¯S§NñóŸÿœØØX¢££'á‚ØÓ!SÉu-§¢m½ÂS×7â;ª3©:áêyŽ9::Ê‘å£G·iUú窥X§+Q­¡Òwnn.øÃpss#33OOO¼¼¼d/ü¬Y³¸téŸþ9MMM´µµ166F{{;õõõÜqÇüæ7¿aýúõÄÄÄÈŠ—ºº:JJJäHYQ­ JÖׯ_OPP]}¯®­¨¦V3Ò*6‚ú#‚Ãö’lª\6¼ Ô÷B•[ÂÖà†âGòóóyï½÷d•¬Ñh¤¿¿oooNŸ>Í“O>É< […DÐ@Ñ::Nj Àظ¸8š››yíµ×(++`ùò夤¤ÐÑÑAii)W¯^%==¹sç266†ÕjåÀX­Vn¾ùf:;;Ù¸q#ýýý066Fqq1÷Þ{/+V¬ÀÑq¼sllLNk°gWØó9UšVÇ^xáEñ^v«3ÈwÔÏÛ{MÂÁƒÙ²e‹4NþýïKôbDzüøqbbbðóóc÷îݲ<ÝÙÙ™çž{ŽÇ{Œ”””I=z¤ ÑÓ™““Cee%ááá˜L&öíÛGnn.eee;vŒÝ»w³uëVöíÛGss3ñññ²´êÿNå÷¬öÖNß8{ŠG%z5â&„Ròöö¥+UUU=z”o¾ùggg,‹4,®]»FDD´¶¶òÓŸþ”E‹ÑÕÕ…ƒƒ111TTT°~ýz‰.mO@ꎟ¸o™¶€ ú3DFF’‘‘ÁŠ+pvvæÀüå/á­·ÞâüùóL›6M*uŽ=ÊçŸÎåË— %44˜SÔlšnìê#b‡‡‡'lê襺êwUƒ@|Vý_ßc52ÝÕÕ%´Á``pp¯¿þZVa8;;3mÚ4øðÃijj’û_XXHtt4?ùÉOxâ‰'¸óÎ;Yµj•TÐöîYßñº(c"¿ï°§\Åëccc¸»»388ÈgŸ}†ŸŸCCC¸¹¹ÑÒÒB\\))),O§%A'â=uŸÄkªñ§NUVjöKLñññÌ;—ññqŠŠŠ0™L´´´ÐÚÚŠ‹‹‹l­°ÙløùùñÅ_0sæLˆ÷«?¿®øì9aãã㲬ììÙ³xxx°bÅ -¢££¯{N]vØ3<õó“c¾¾¾ÒØÀ‘"ã366Fxx8ááá455/{ÿT¨Ó±ømÏPÖß³g©U#ú>~ß3ªÕ$TWWóùçŸóÌ3ÏðñÇF||E ±ý{xxL||<ééé'ÊÏÏoooüýýåŒõùóçóÈ#°zõjZZZðññÁÍÍ?ýéOL›69sæ’’‚‹‹ gÎœáܹsäççsúôiŽ?Îèè(Ÿ|ò ©©©$&&Êõ³§ßôª]¶ê{.O5Q¦®‹.ßtÛÈÿ¨¼'&›8:NàHˆ €®§Ô{› -Õ_ÿ_½‘‰¯««ãÅ_äÀ¸»»3cÆ ÒÓÓéííåêÕ«Òf4 DGGS[[Knn..\`úôé<öØcÜ~ûíÄÄÄH°gÑÚ722©S§¸té’ô„uuuÅb±HA jªÏ¨®ÌÔ+Ôçk]׫ç¿Ž’=9hϯÁÕf2™Lœ8q‚åË—ãää„Åb‘2ÌÅÅ…Ó§OóË_þ’G}‹ÅÂÀÀ€Ôç...””DVV7Þx#ëׯ'..Ž‘‘, 7Ýt÷ß??ü0YYY’¦üüüðððà׿þµÔ•‹…óçϳvíZ²²²ˆüßV cÇŽqùòe¬V+Üu×]Txtt”¿ÿýï\¾|<==å^ªö¬Îóª<ŸdKˆ€XD½¬SÝ”ï30§RHBX•——óæ›oR]]MII 0V$ü°°0m*//§¬¬Œññq"##Y¹r%O>ù$+W®ÄÛÛ[nŠnHªBY}PáÏœ9“šš¾ýö[¦M›†—.]"??ŸóçÏS\\L]]ããã|ýõׄ††Ê¾ŽÿK@Uô?ô°gàªM>8J0™Š4ìääDCCUUUtttpùòeŽ?ÎîÝ»imm¥££ƒÎÎNÚÛÛ% Tzz:ÃÃÃx{{³zõjŒF#áááÜxãP\\ÌÓO?=iì‰=ZP…¸nPª‡¾w6›MFFF/g8αcb³MŒ¦òóóãÛo¿å“O>aÖ¬Y2º)®)Jz€F7ÒÅ3Øë÷­ïSí«úÕxô+„PUUçÎc÷îÝĤ©©‰îîn***¤ðûꫯdÔ²¼¼œÂÂB - - -¸ùæ›yòÉ'Ù°aK–,‘ñº!h/J­®…@h€ï;ì)>Õx†£››yyyÔ××ãããÃèè(~~~9rDöW £×l6_×ç$hOW¦ú³¨k<•©~ÏÝÝ]ŽƒÉÏÏ'//˜˜ÂÃÃñóó“U$F£Qf1:ÄâÅ‹ ¹ÎAV×{ªëª¡ƒÃrö… (--eõêÕrB‡º_S9ˆSÑ¢x]T2ˆ@fB“’’ÈÈÈ hß~û-ÎÎÎ$&&ʨ´½ –ÊëbÍEPM¼®—OuØ3 ¾ë;*‰gú(7näç?ÿ9wß}·œ;/xl*Ù ÛGâ}ñšÉd¢¦¦†ýû÷ãéé)Q´===illdÙ²e0Ó^°D¿–x_-qÖƒz“ºÏbÍÕ½×>Qaëçç‡ÅbÁÇLJÐÐPâââHMM•€ì¾¾¾“’’ÂŒ3£ªªŠŠŠ -z{{åz???YÍÆâÅ‹eUOLL ‹/ÆÍÍššòòòسgÛ¶mãý÷ß—#>ÅHga³ëÀ–b­Ô$¦Á`Àn-ŠNú¦r¨"Zô/õôôÐÜÜLff¦ì›¨««£¯¯___bcc fæÌ™¬X±‚ŒŒ )(J°ÎºÑ%—úšƒƒYYY„……ñÚk¯ñÑGÉrXA4"îååE}}=¥¥¥ IÁûCŸ_/ú¡ßû¾5µ„‡j988PSSÃ7ß|Ù3g8~ü8555$$$°nÝ:¦OŸNDD555œ;wŽ/¾ø‚êêjÜÝÝqsscëÖ­,[¶Œ 6ÐÖÖFCC¿üå/‰ŒŒœäëJùûŽbü‹¬‘Éd";;›Ù³gsÿý÷söìYN:Å_|!¿ãåå…ÕjeÞ¼ytuuñç?ÿ™¸¸¸ëJÉÕk«´#Þ ¤V¨ô¯ï…^^©z4Spzzxx˜²²2Ξ=K~~¾T¤¢ëܹs¸ººÊýjhh`tt”­[·rÇwð_ÿõ_ãîîNLLŒ4DE6P\G ª¢ªQ¨:ËÂ8tppQZäÿÏ!Œ•ÐÐP}ôQî»ï>üýýéíí•Æoû[>úè#æÍ›'Òàà`L&“¬ ¬Êë*©ÏñCxOUHŽŽŽ$%%ñÆoðöÛoSZZJdd$ÕÕÕr”ÅballŒàà`Ο?ÏË/¿Ì_þò—I½¿âø.§\—_B¹xzzRQQÁ0›ÍÄÆÆb±X®3 ~è!ä†pr„b -{xxggg’’’ˆ‹‹cÉ’%”””0<êZêk#dšþ9AïÝÝÝÂÿÇÞ›GÉ]•ùߪê}MïY:I'ÝNg_I ‘Ð@ãF@ŒŠ¨£è8ð\fpf”qåàˆqa‘¸ ,! !;I:tÒé$½¤÷êª^ªêý£Ÿ›O=¹Õ ¾ï{Þ÷üŽ÷œ>Ý]õýÞå¹ÏòyžûÜ{,X°íííøÚ׾態D"˜7o¾ño`úôé¸îºëœ“Ìö¸ -¾`Áüû¿ÿ;æÍ›‡üÇLž<hnnv[gè,Éß,z%ÛK•AÀ­N;¶ ùšb~N ¨ûûõ+ƒÔº’ÚÝÝ;wâÏþ3Âá0öîÝ‹´´4ÔÖÖ"‰àÌ™3hkk\~ùå˜:u*222P[[‹²²2wž@VVÆŽë¶ çAä6øÁùÖ¿c±Øyû‡‡‡óàƒ"77×Ñš…®D^¬Þ²x‚[þKURᎅJ8ÆîÝ»Ñßßììlddd`âĉèïïGkk+"‘N:…iÓ¦¹ñP¤*¾E%u¦Èƒ,Dàv…Õ«WcÛ¶mØ·oV®\‰£GbhhÈÐÿô§?¡ªª -î,’¯~õ«hkkC^^:::Üù%ÿüÏÿŒo}ë[˜ˆ¯|å+(**rir:4èZšh6ˆ¦’ {¾•Å¾}ûpÿý÷ãg?û>ò‘`úôé8yò¤K=æùÍÍÍxýõןúÔ§°jÕ*LŸ>S¦LqFŽÎ‹®Àrü¾qú@7?SE’ŠgSý\\ZZ®ºê*lÞ¼[·nÅáÇqâÄ cúôéˆÅbxá…ðÈ# ¨¨ .DEEJJJPQQáöÆĦâ#_?ìÜ‘u5%cÆŒøô§?Ï}îsîîkòñcÇŸŸP(„ à駟Ɔ ðÁ~ÐëûøGeEõU~~¾;eöÙgŸÅw¿û]\ýõøÌg>ã¶Þ(`¿Ø¢cµÎõÜ„ 0iÒ$ècp,UŠžýLÁ”Ž1o¨NµY)veÀWb±‘ëc[ZZÐÖÖ†5kÖ b„ ˆÇãxíµ×8Ü»woÒ»ŸÿüçÝ -9„àž~½VRm‘ôiñÉÿ~; Š<ªç• ¡¦¦wÜqN:…òòr;v ™™™‡Ã˜6m~þóŸã½ï}/Ö­[—2ÅÙ×ûç›ë8†B!wIgg§Ûv×ÑÑá²ù¦M›†½{÷âÕW_Åœ9s’€¨:ÿÊg¾vù¹nµà,/j,‰ -- ïxÇ;‰Dð¡}‹/v‡ÀöíÛ±fÍw.û¾F"TTT೟ý,æÏŸ‡zgÎœAZZšKkWgÙöIƒªÖ1÷ÉŠu€­¡Î¿¶£u¨&/éç–/|Γ:a---èîîF0t‡Ðž={===€+¯¼6lÀÔ©SÝIñ\Q¦“«rÄÛ8&KíƒÏqH¥“ÒÒÒP]]íôÚ¸qãÜÝØ:§©ì‰/ ŹP ™ü­ó¡óFgUm£¶uêÔ)üô§?Å“O>‰ÊÊJ· - -…ÐÝÝíNx?zô(xàwå¨âU_ö[ p+íÊOÖ¶ôÕ•lbúuëÖ¡¦¦Ï=÷ZZZ0<<Œ¢¢"\{íµø¾€êêj,_¾CCCXºt)¾ñoàïÿþïñ§?ýÉí‘®¬¬Ä–-[pÉ%—`Ó¦MNÞ”6Še8ŸÖÆ3¥Ý—¨‹/v>Sajèÿ´™z•«ÒÊò µ‡6ài矇ÙE£Q´¶¶:§uîܹ(..ƶmÛPZZŠ}èC¸ì²Ë°xñbwŽÛ"ÏhÛö öTVV¢§§ÇÔÚÔÔä²Ý”O}>£êîÑü›T¶ÇêX«ïì³V¿i?4@ÞÐЀo~ó›8uêÖ¬Y㲈OŸ>ÌÌL\{íµ¸êª«PQQát™âjû­™;JCµGºpF1~üx\~ùå8pà€³=ä^cJŒQPP€+¯¼Ó¦MÓO>‰ø‡‡y»»»‘™™‰9sæàÞ{ïűcÇpÇw`þüùŽ­ì£s'Œ±§_ªó¯ «b£Jœ€¶¶69rñøÈfÝÝÝhjjÂôéÓ“òtò/~ñ‹X´h***PUUåVœxýp."Ê6• XÔ *£ê˜ 7mÚ„E‹áÅ_Ä¡C‡ ‘ŸŸ©S§¢¿¿uuu¸âŠ+’¢Ž{ª¨¼øBÅ:*24ü­ã²Æ…Š½±±¯¿þ:z{{QQQOúÓX³f -ZäÒxtÅ; bõêÕ¸í¶Ûðµ¯} UUUÈÏÏGgg'î½÷^lÛ¶ kÖ¬Á%—\’DS›ò¬ÊšÏ轪¯K-Õ ˆÇãn~zz:ÆŽ‹òòr,Y²ápúЇÐÔÔ„ƒâàÁƒX½zµ»[WÓrµMmÛ:ËC©VùÕðd8c»‚œ´´4¬[·7nÄàà >ŒÃ‡#9¡½½Ý,ò‘|×]w/^ŒÒÒR×_:ý>åéã#kp”•§ìÊÐÅ88¾Ï­ÑŽÇãÈÏÏÇ5×\ƒ’’<õÔSÈÎÎF<w:‹¹»l›šš°k×.,]º xî¹çðå/«V­ò:oÇ1ÖU3à\ô4º}ã÷ß?n¸á„B#÷ÑNŸ>ÝÝÝhiiqï½õÖ[èïïw†SiàÓSºÊfj 0²WÎüä'?AVV¾öµ¯¹ÝßÎ8µ~eÕhY0¢'Û¾ûp>ˆ²ÿ[ž´€TÁßO¼8O”©p8Œp8Œüü|ÔÔÔ¸ñ´´´ ¡¡/¾ø"`ܸq¸þúëQ^^Ž‰'bÉ’%˜6mš[Ù×=ä¬#9Q?$e‚‘߬LÙ•Ÿ¦tUØWR9`‰Ä¹ì¤Ì›7ßûÞ÷\ÚæSO=…¶¶6455¾þõ¯cîܹ˜:uª¶^ý_õ³~§à”ôÉÍÍE__Ÿ£óÎ;qõÕWcÍš5.˜¼cÇ?~Á`¿ùÍo°~ýzŒ;6i¯>ëæ¸TFXìª$Û… -åÒ‘@]AoFFV¯^ø‡À?ýÓ?¹›Æûï¿7Ýt“»^—ý£cÀOtå•WbæÌ™îð;îÙ¤Œ¥Z¡òÙk£|2c·’èsš¾¯™ê²> (}Çb>µíápû÷ïÇž={\B4EOOî¼óN,^¼S§NEee¥;³‰s­,r ü,==ý¼`µ])·:ÖÚ--|vìرX·nvíÚ…^xeee˜3g - ±uëV\uÕUî&Ívó9i©Æ|N‹ÒŸXHÓ›m&Q<>rÕÛÃ?Œ|õõõHOOwÁøÎÎN âõ×_ÇâÅ‹ñ›ßüË—/wóÇ9¶Á1~®}æ;Áใ¥­žöñj"‘p†•••7···»ãh4Šo}ë[˜2e -***000€Å‹ã{ßûþå_þO<ñ.\ˆS§Naîܹ¸÷Þ{±lÙ2\rÉ%I´WÞL$Îï³E¤}(rÁÕçŠÅì»>{Hš©Íæ³äY+J{ëƒ(ϧ’mÒœ|‹ÅÐÔÔ„çž{999ˆD"èêê¿øE¼ç=ïÁ´iÓ\@‰ºÙúlÔ”==ãX·nrrrÜ¡¨@ë֭êU«ÜíƒêÅ-º5ØóµðL.Ÿ¯C½cñ‡m7•íâœ0«á?ø^ýuL™2ápcÆŒÁÞ½{qå•WâÖ[oEQQººº\¶V*¹V¾Q!Mù¹ö›3£÷رcˆÅb¨¬¬Dcc#ŠŠŠPVVæžS¿ª²²Ÿüä'±|ùrüâ¿Àw¿û]pgúô÷÷cñâÅøå/‰C‡á‡?ü!.\è| åE‡Ç•pú¥o–é} -˜ÿ777ãÀv§´ïÞ½]]]˜0a*++qòäI466âæ›oÆúõë±`Á¹Éåj½âíp<ñôÉeË–¹tŠx<Žœœww¦®´ý¿Q|Øç´i¿íó¾’žžŽ¢¢"̘1×\s ®¸â -Lž<………ÈÈÈ@oo¯cd¦Ç¦§§£¿¿ßíý¡qÅbhmmE,þðTUU!¦ì§ÖkŽéÕ©hê .YÚp™ ÀHúÿüùó±páB\yå•èèè@ff¦;|Ê*auh}QEßx¨hìÖ•ß¼¨óßÜÜŒh4Š¬¬,ôõõ!''Ë—/0rÏñÑ£G±eËÀòå˱téR|üãÇÂ… Q[[‹ÒÒR·78w}!i¥¿m¿RŸÀ`4z©œ)pÒþ(Ý5ýrÁ‚…BرcöìÙƒæææ$ç"‘H ''“&M±cÇ0mÚ4deeá®»î½÷Þ‹… &7ßùèÀyåjŸê0I«,pòäIŒ3UUU(**¾}û••…3gÎ`úôéX»v-233Sn“PªÔynê‰'0þ|üú׿ÆÊ•+qíµ×:ð£ªÑ -y_A½-Ê¿ä{ŸÓ®¼®ÅôT¤>cuÄÛ)|¿»»Û¶mC"‘p·3´··chh/¾ø"vïÞÛn» 3fÌpÛI222’®VëííMª“ëj13@F³ ²U:fK›TÅGkà\–ÚŒŒ ÌŸ?‡F{{;fÏž¢¢"üô§?E^^<ˆ={ö¸k·R6µ¯äÆ,úCCžyæìܹ·Þz+±lÙ2wmÔ«¯¾Š`pd[Z<ÇÒ¥KÇ]Z*e—©òÑhÔÝÀC>÷ñˆÅ%ì·ï9¸÷›}gªë7Þˆ“'OâÑGE]]Kݺu+êëë“ ¶Ã9d–#‚dÍçl°í»Ïé׿}XÁ:–wmáóºGT»u\øŽu~ØŸááa477ã·¿ý-š››‹ÅpàÀÀC=„w¾ó.m8‹¡¿¿ÿ¼`yØ: -\œøK±Ÿ-¤qq1Þÿþ÷ãšk®AKK öïßïîÙþ¯ÿú/ÜvÛm.3€ãTÛgm›=—A¿³úÍò:0jg[ZZðÒK/áþûïÇ®]»pÉ%—¸Å0¶ÕÔÔ„ææf|á _À‡?üaÔÕÕ%9Ç£¥ÿúøÅ:ö¾ «‡T…B!¬X± xùå—±bÅ -ôôô`É’%øÃþ€;vàºë®C,ÃÀÀêëëñõ¯EEExà0g΄B#7¼õÖ[X´hÑçÞb.µMÚWˆÍ”=ëâ/Á÷ä'=dÁDò„:Â\ëëëØ1c‘‘áú壩êg.ÐÑoIKKC[[¾ð…/à]ïz—»áL+µsæÓ÷–NcÇŽu·¢Äb1·PXRRâ9´¸×¶CY·mÚ>éØ´X€:‰ó¦uèéÏñQžNŸ>Í›7ã¾ûîÃ%—\‚3gθÆ>ÿùÏãÓŸþ4¦L™‚“'OâÔ©SnaDeÃê&Ðà.åŸës¡PùùùÎ?©¨¨@aa¡»òœ<£A‘XläðÁ… bÊ”)X»v-yä<ùä“())Á¤I“Ð×ׇ¥K—bûöíxꩧP__ï²ÖépAÇ–4«´HpßD+¸×È"¿Àïÿ{=zÇÇo¼`ä°‘úúz$#© /¿ü2.½ôR|ãßÀÊ•+QRRâVD•ˆj¨,Ã)ÓùLǤL¡ œ6î)¶`4‰ ‹!##ã¼4½‹iÓ~ç D¤2Øì+çÂ^Ñ$ïÕ´Â<88ˆ›o¾Ùíâ•WÊ`ú^,Ãþð<øàƒ˜={6:;;ÑÑÑòòr466âßþíß°téRñM¥L”ù ®) êTøÀ Ç­ãP'„ÿë|rŸ;÷VTT ‘H¸ …:J–”æ©Œ€*‚뻶n;6>ûöíÃã?ŽD"ÚÚZ;v õõõ?~<Þ|óMlÙ²ñxwÜq&OžŒåË—cܸqÈÎÎv§۽ǖŽÊ –÷RþÑÀ|N€}.@·}d&ÀÐÐÆŒƒ•+W¢®®[·nE(¯ýkç”±ðôZ®íر‡ÂìÙ³ÏK#Õ6­óÀßäUÍ.á÷ ”ý÷ÿ7öíÛ‡Õ«Wã•W^qÁ†îînôöö¢¥¥ñx÷ÝwæÏŸ¸`Ûª/Sé-~—ŸŸ 6 ??_ûÚ×044„9sæ ´´O<ñ–.]Š‰':YÖyM5ä?ʤ>ùJô±À\éÉâ3Ö:F¶åsà´í“꘡¡!ìÙ³<ðJJJh4Šááa<óÌ3¸öÚkñï|õõõîêœDâÜJ’:%––ª7ØO+wVÖ8&«—µ>Ÿ,ZÙç­ä÷º%€Ï—••aÁ‚ÈËËÃñãDZwï^TUU€»âŽ7ÛØ~§*6‹ÅÐØ؈ŠŠ -ôöö⩧žB__þæoþÆ­gff¢©© øÝï~‡gŸ}ð“Ÿük×®u²Gºr¢Ñ(Nž<‰ššמê ù]*ýÇ1X=Æ60aÂÜ~ûíؽ{7ÚÛÛQPPîü„™3g" ;;Û­P¤s9ä¨誃$ß¾ ×ê++jkù?ŸS[dõ ô5ëØR7ë; -p鈦§§###8yò$ÒÓÓÑ×ׇY³fá–[nÁ•W^é®Vfši¥«ÍÊ{lC+·ŽÇêQ«—ô=½2pÞ¼yèééÁĉ1vìXäççã±Ç0äåǶ^ŸŒØyV[ÉÏ)»:¿>  ÝaÇ{÷îŲeË°fÍ466âìÙ³n/¿ü2*++ñØcaÕªUn{’öIT«[TGùœŸ>Jeßù>ökÖ¬ÁÎ;qúôiTWW£»»%%%xüñÇqÙe—9¬ܦñ¥/} iii¸ï¾û°hÑ¢¤yöÙ‹itL:_|GeÂbT¸Q›­mja¬“¶Vÿ0ë“çZéö‹M(/ (pQaìر(--Eww7†‡‡1þ|¹…:]\³´³ó$” -…PQQ±cǺkŸyˆ^ww·»éDçÀêdý;6µÿüã¸å–[Ü•+4J0¤T-U”ÒW”êL[ÅÎÏÐ×ׇ²²²¤(TªºUÑjš³2ªÀùŠ*+*Mqäjgí{KK :äN¯&©a§¢`Ê |:X(--Å°jÕ*w˜O¦ÕdV4ÞšîÆñ«Q²ãU€éS&, -Ü4Í‘cT:è“žÚ'åû ­Ä©Q·À“ýò9šÚ‡7ß|=ôöíÛ‡ŒŒ <ÿüó‡ÃøÃþ€ááaÌœ9×_=.½ôR!33Ó¥°QN8àÜ!?º÷Œý² ÊnUP+M´Äã#©Š¼UAŒå]•%à\Z½]1ñè &à}ï{–.]Šo¼ÑÝ‚••…½{÷â¹çžÃðð0:::pèÐ!ÔÕÕaæÌ™Ié¢ 8±´··£°°ÐQ¶¥+ç‘H­­­îp*`D!?ú裸óÎ;1oÞ< cüøñ8}ú4ZZZPPP€S§N¡µµ[¶lÁŠ+\ªž¹Ôáà|iÊ Õm¤Í”)Spã7¢¾¾<òˆ¨ûØÇPXX˜t²¸ª3u.Y(+š à›OÊ>_ñ9½¼ïZcd3åý­cÒÏÒÒÒÐÙÙ‰çž{/¿ü2.\ˆ³gÏ¢±±Àȶ²›o¾S§Nu'‘HĵÇþù ¶uô™NʾèX4SÌ:q6àf3è”W´^0¢^$ˆ MPúð½üü|,X°­­­èîîÆÆqèÐ!¼õÖ[n£:YÁàÈ•l<+Eu5W±˜e |SVVæú¿|ùr=zgÎœA8Fss3Nœ8ÎÎNüøÇ?lܸ·ß~;êëëÝ®˜±ÞŒŒ ääm–Ïíê8iE£9û§ŸÓÕ±qîêêêð•¯|_úÒ—PSSƒôôtìß¿×]w6n܈ŒŒ L:×]wŠŠŠ’¶^Ù $åi_:9ùɦ3XÀ•UëÛ½ÐÊ+ª£•F6mUéiSóÙ®Õ#Ê£”FÇ“7n܈«®º -¹¹¹®¶Ëy³Û´(_ÚL__4 Ü'Çj÷ÙžM‡‘““ƒË.» úÓŸpèÐ!¼òÊ+X¶l™;hÍçÜ[]Iš³?öÐlÚpµ¾lšp8ìÎÀ©¨¨@{{;Ž?ŽöövwûáÇqÓM7aÓ¦Mn?0@è¸åçç»ö(ߺÝSqûAyÐ=ô¾€•å-Å}ÃÃ议ƦM›pß}÷¹k+**°eËìܹÓQ -\/àna6¬Ž…ç7qÑ‘ãËÉÉA08rCQ[[ÑÙÙ‰£Gbüøñîdí§OÕîjˆ7zpOüñãÇ1iÒ$ ¢¿¿¡P¹¹¹Is®±b)ò éÉñû¶ÿÐÿÐ4ó“‡_²n.JêÁ‹Ì§ãLùniiÁøC<þøãX±búúú‘‘?ÿùÏøð‡?Œ~ðƒ(((@WW222ÐÙÙ‰îînD" $,sÛB9/ÃÃÃç]ñª6_uóÀÀ²²²H$0vìXL˜0Ám“aÖyž™†ö̕ϲ²2\wÝu¨¯¯ÇŒ3ðÿñ€êêj<û쳸á†0~üx#ÁtÊòàà ;\•üï½`´¢F€DÅb±cÇ¢©© ÇGnn.¶oߎɓ'£ººŸùÌg°fÍÌ;åååˆF£I ë+£}§Ï¤r¦G‹FA©Ð¢Ñ(Ξ=ë@NªB!µQU ù,™ÔöA'[•I08r°V¡2ÉËËsLÅ+‚XÎœ9ƒ§Ÿ~'OžDAA&OžœÔž‚¢´´4ôööâ¿ø…‹ŽŸ:u -999®?·Ýv*++Ýi z²<ë´€W…`´’*¥N ¶cÓðSÔÐñôï©S§:Ðu¡~]¨¨¤ªË:mmmxúé§eeeسgf̘ÊÊJlØ°—_~9JJJ’=}}}çv£´WЦ€MyÖÎ p.boÁ%ë§ G¶‚ôôôx‹}Oyßç„Ò0ªS£Ž{0DUU&Mšäê`0ˆÎÎN|âŸ@ww7‰„Sœ‡Ã.F]„<âÈ‘#¨ª9Ï"9(ŽF‚wwwcÏž=HKKsÀ綾^·¾õ-Œ3N‰‡B!dggãõ×_ÇäÉ“ñÀ`ñâÅèììD[[›“)¨ä×ÊÊÊ$césÔ ðŒñãÇcáÂ…hjjÂ¥—^ê‚tt)œO• m###íííˆF£î¶{­öÁ÷ou iŒ•ç|A5 2§â#k@óWÞ JJJ°~ýztvvâå—_Fii)®½öZ\vÙe¸üòË‘ŸŸïæÙŽÇ(Q@IFÑÐЀªª*wûû£ï«S¯A}ÎÙõs›å¥s©@Õ®àj¤y^^Âá0&L˜€÷¼ç=øÅ/~ÆÆF¼ð hkks÷©óù®®.¤@4E$A¿£Caa!ÆŽëtF~~>NŸ>C‡¡³³===èêêÂ[o½…íÛ·»@ ÔÖÖâ–[nAmm-ÚÚÚÐÛÛ{#Ïœ={;wîtÁŒÜÜ\ºCk5e}hhÝÝÝ.]U¤£:Ó¼>N6e‡2‹Å°téR\uÕUxíµ×0sæLäääàôéÓøÞ÷¾çÆsøða|êSŸrgtÄ€sW“j_9׶/¿ü2zzzpõÕW»=§6Èo|àR±‚ÊŽuZ•GÕ6Ú€ŠG1pÉzô`P‚÷×^{ “'OÆæÍ›±råJ\}õÕÈÌÌD__ŸÛb¡õèüøŠâ -þï ŒV‡Ò‚m²¾œœÔÔÔ`xxÛ¶mÃàà æ΋††´··§¼òÖêk‡®¨ªüG£Q—¾Ï•ÆñãÇ'a›x<Žîîn:tGuvlß¾}xþùç1<<ŒåË—ãË_þ2V¯^qãÆ¡¿¿ßµb±ºººÐÑÑ᮫¥¾ËÉÉIj‹´ ¿28Fú(ϲÐÎèvCꥳÕÖ¯_—^z ßþö·±k×.lÞ¼?ûÙÏ°xñbwl @oo/B¡;€óøñãîŒ:µ©gtþ}8Œ²F»Ÿd}Ø=8g‘ç½X»£²000€üüüóú¥ l##ºóÍ4à Žl3ëèèp'ÌÓyã6šììì$Gò_ÿõ_ñòË/cÆ ˜2e -"‘ÆŒ“´øÃþ¨<0['''ÇYèðR¿ñ|“ÌÌL§Giìa²äýžžwõ"ß!žäœòÀ»®®.×iÍ…æ¾¾>ôööºþŸ={ÈÉÉqvTÏc #--Í] >cÆ D£Q aÌr IDATß¾}øÄ'>n¸¹¹¹nk3ªåU¥”åÜÜܤ\9}}}²* 6˜ÚÛÛëüŽüü|¬_¿¿ýíoqäÈ·àD‡ÿ…^@yy9-Zt^],Ü]WW‡;î¸ëׯǶmÛ°{÷n¬X±@ÀE¥¼Î€»òóyA²B¦ÌßÔÔä#yá…púôittt 94iüøñx÷»ßºº:Ìž=n_Ÿ:ÿ©"Ul“Åg«.Ö©³ãQ±Q@mËö+UÔx±Móէ΢Ö ÑÚÚŠÒÒRäçç»È¨®^3Õ# ‰ ¡¡µµµ¨­­MŠ$é™ -ªÄ_zé%<øàƒX´hNŸ>íîmhhÀÝwßË.»Ì šÖA…§c" Õøø ºò›f”¨Ãiù@ëÖXí©ºü›àQiï‡ï3ߘ5âi³컬wîܹxàÐÒÒ‚¼¼<”””¸SÇËÊÊÜêÁ*ƒl©ºÒÑò¦«>E£ -ÊúÀ–O¨Éï¾sFs€ÈϤW&ËËËÝõ†lY2 -Lù),,tõ3µ7777ÉàR&³²²púôiw0h0D?.½ôR<þøãxðÁñ /¸Lb±öîÝ‹5kÖà¶ÛnÃÊ•+¿–——'~º´´´œQRþ!o36uêT|âŸ@¿“ ÝBAÞW'Wy_yÀyAí“GŽCùIWG´¨}ÐzÕ!öñ¯(_[çVß ƒX´h¦NŠS§N!++ 'Nt«&ºeIyPWiÔñÖç¸j‡±cÇ`ܸqIõXÏ9#ÐbÕ!PþW “íêaÊ(5^Ó‰D‰DÎËøáêõgzz:²³³ÑØ؈)S¦àÃþ0:;;ñÌ3Ï`×®]¨úß[ÐN:åVõéàegg;>KKKCAA²²²\ÊiGG^yåìÙ³999hnnFKK‹;ß'''÷ÜsV®\é²ép‰sûYIÇôôt·ª Œ1˜mFðHzªlµ¶¶º´ZÝFhu7ÛdPƒ²DÇ”ó?fÌ|ô£Åþýû±{÷nŒ7'NDqq±V÷Ýwâñ8þîïþ………Iö]í¾ÝŒl!?~< - O«|é{¾ízÔ«:ÿªCT×Û”ÕïÔ)–vj‡$9~ü8ÒÓÓÝ™BÅÅŨ¨¨@QQŽ?Žï}ï{˜6m¦OŸî²PêêêÎë“ê ý­úÌê+§ÖAôÙFKŽ“uñƒŠŠŠó2N|ØRÛ ýÙgò*$Ê6Ó©{zzÐÑÑ & ==‘HÑhÑhû÷ïǃ>ˆ?þñI®}ò“ŸÄúõë1iÒ$TVV"‘H ££ÃµAG«§§mmmn{u"‹¡x³Íĉ“0‡f¨‘æ\ÎÍÍMÒljD"é–¥XldÏruu5ººº°víZ”––bëÖ­xòÉ'ñ|W]uU’Þ:räJJJ°`ÁÌ;7i»†ÚìTükçDå¼Ëà½ÅßÚêR‹a¬#HÚòÐ_ €Ûm>Ü¡Ô¬C³W¸?œN[VV:::ÐÙÙéú@ûÓÑÑþþ~8p;vìÀÉ“'ñîw¿Ó§OGqqñyn‹ØW ®sŠYÛ]]]‡ÃÈÎÎF8v" Xºð{ÅŽš9À™¸–ÙÌ¡PÈ­¼Ó&edd ¬¬ iii.–™¢ ^quÑ…|úÙÏ~8zô(öíÛ‡Ï|æ3øìg?‹qãÆ9M»Ê+Hiÿˆhk©{)ßQçûô¹ö“Ù´Ó§OGcc#^{í57÷ ,p‡ª®W £Y=X¾|9æÏŸîînddd¸óÏ”ÿ‰‘ë¥é:œ¡`DÓ˜Ô(ã“{öìÁƒ>è¢é§NB$AAA&NœˆÕ«WãÊ+¯Duuµ›`¸[AÕÿ}J—ŒlPª^ Ì”A5Ì* Ö›™™éVÜ}N• 'ƒõqUN±]iUAщRàÍþsò)3-ŸÌµsçN<ýôÓ¸üòËqå•Wº Ý[¾ açÎxøá‡1uêTw8]"‘@CC¾ÿýïã½ï}/²²²Üu94n`;VMýµ«í:§:ÇT¶dÒ×*;·Vµ -B¡;eÓΧòëK(ìœùøÒ+8ÎááaäååaÍš5IüÈ÷i`$RŽÍò©Ê¥n­PùU^²4òmÇДA¶Çr"¿YÈñ(ÀâÜéüjÿmêµ]öUWR¨7؆®Tð´mö_cMÑ%]0SG£¶¶ÖñWéì;v ÀÈjűcÇpï½÷â½ï}/²³³“ô -8òœ®kz0ûÁ±Ù ¼!OŽ3Æ'‚2êk€•NÊÓÌ„t¶ ßµ+Z - µ,ä1}V¯¿ñ(ߊŽ XXKgZë%ÏŒ7Î]ù§+Ëú¬ê`:=ǪsI ®bè -…ò«ê,›¶lå(Uà“|®¼O9Ö¿µ^݃n3xôè@`$_]]ŠŠ -Lš4 ÀÈA£ï|ç;‘™™‰h4Š¼õÖ[¨®®v§×  ³³Àˆ-ÌÈÈ@GGš››±gÏ0Ø·o8€D"án€+®¸_úÒ—pÉ%—  âÀÈÈÈ@QQ‘»BÖ®VqÕ…‹qãƹ>(r%ŠôÊÌÌtg?èunvÞù|aa!ŠŠŠÎãU”™={6î¾ûn|ðƒÄÁƒÀÙ & ªª -§Nr‡°Úzt®HΞ=û¼À˜åCA›qbÓùéxè8Õþ©¾V½©öYùž}'?Rž€=L}Cà:iÒ$tww£²²ð|cÇŽusœ“““äX9°™ê-u&¬Co2Ž…u¥Z9¦LE" ¢ºº—^z)ž}öYÜtÓM. Œº´eñÉ2$ÒKç#-- ÙÙÙÈÌÌDvv6ÊËË‘––†öövìÚµ ‡F[[víÚ…ÁÁAÔÔÔ`hhÈ¥ò.[¶ Ó§Ow|@^³sÇsž4+ÅêIµ¡Ì6$Vãwz0£Ò“7¨C -…\vƒO¦OŸŽ¦¦&lß¾%%%øèG?Š¯~õ«8sæÌyÎ ÏúèëëKr´´K{~žj¡Žu“NÊwü­ï¨žÕŒZŽÇê>›——çä^yÖ\ÈLÁVldýåûDâÜ"ØÔ©SqÍ5×à;ßù - 1cÆ TUUaÛ¶møùÏŽ-[¶œw‚½ò!ÛBII‰Ó}™™™8pà~úÓŸâôéÓÈÍÍEoo/²²²pöìY,^¼eeeI< zMé––†1cÆ¸Ì Å‹Ô/j3©[TO)^P,Ávµ.öAhllDvv6 - ]–ƺuëÜM’®Ë’méÅ~2@Oû’VØ}>"1æ˜1cœîg—^z)úúúð³Ÿý óæÍs‹VÌÀ°¾ Cu‹ -qeff&ÆçæWqÏ/uc¶ÎŒ -‡þ¯tðàAlÞ¼ÙÝ…ÝÕÕ…x<Ž‚‚ÜtÓMns~~>‰„‹z\L±”öÏ _IeXR_ûümS0ßNQªÃ À)ëááaäææ&>eþÎËËKŠHj_)dBVVjjj0{ölwøïµîííEoo/òóó1fÌ9rO<ñ„c__‚Á Ž=ŠGy×^{­«ÛçÄ_ˆŽ4L5eH•‘uÔÕq"ÍÕ¨;ZÛê\k{Tª;ž·;ï£õ‰€OW^l€ƒ}¶Äÿ;Eƒ¾”öÏYئ Ùûdõ]¶£´¶ý·Æ;UêˆÙqXÃÕŠ6P£8A³\¸µFƒ}±ØÈÍMMMسg‰öìÙxøá‡ñÞ÷¾×8Ý/©>ͶQ¹U>N5 -Âuþt§ê9 @òymõ]5"öYµN0ûŠW}ÅW·m[O@V‘ª_2>ÙWÀ¢ï÷÷÷'9hö°4ÙÌÌÌ$àbÇbW…¹‚¤AeŸ ¤¡çjêH2à›——‡X,†]»váĉhhhÀ’%KðÚk¯¹ízìûàà - - -Ðßßžž=zßùÎwpâÄ ÔÖÖ¢°°íííxá…¼ã€w½ë]n‹ßĉQVVèííEsss’c¥éí¤1®ÊOé0å\éžíöÕ¦Òç“훣x<Ž%K–à駟ƛo¾‰ýû÷ã7¿ù öíÛ‡ÖÖV#º ´´4I§þQT¯q¾8×¾à“ulu,ö3ŸûœKê&òž¦ôê‚ê›@ €òòr· ©  +V¬À¯~õ+ìÚµ k׮Œ%K“““´7Zƒ t8}Ø“rä›C•EÕyÖѲcæçZOOO Úååå!??+V¬Àõ×_ïVGÓZ'ϬÈÎÎ0âPi€Bm¹{÷îÅ£>Š^xÇTUU¡±±7nć>ô!,X°À¥Þ÷õõ%Í=ë¤Ýágº0£Î4yQu»Ê£µ¿Úë%(Ž¢®Ñkdž‡‡ÝjæþçbáÂ…Xµjþöoÿ§OŸN -p.µM ü§âïÑŠÅwÖNúžWÚð3ßÜë" ƒÍ:/Öî¨ åÿ–oU¶H?}ŸudeeaÉ’%ظq#¶mÛæ¶3M™2§OŸFCC.\èæI±5ûF'[làùçŸÇW¾òw5n__Ÿ[ÌhkkêU«PTTä¶$¯}X}VÚr,Ôí|¯³³---¨¨¨pÅn>ù¥3«gSiP€AäÜsÏ=˜={¶»‡må]ê_¥IoSÊ ƒdäÕí©|1¸΃S›šš‰DP__ïü+:ïÄÿ>ýÈö,c0…²âó휤©piš¢•@{{;6oÞŒ­[·bîܹ8qↆ†põÕWã]ïzêêꜥ㧠¨OÕ9;p JGvÊ4ös;®Ñžû†x°¯>ÛGkd´Ÿz€b,C{{;233]j2·X26‡U”ª”rrr0kÖ,dgg£®®Î=?44„W_}O?ý4Nœ8%K–`ÆŒxþùç±cÇäää ±±ååå8tè¾ùÍobݺuI€Tû6šBÖù¡°épVsÿ‘¦Ÿé@ºŠ’Já(½ì\h$WçLŠo>ís–OR9GVaéªâäx}Ž²ÛT¼mÿ·„öWÛÔñ鼪ÒVÞµ}ò*uX,ý,€ñõ9•Q¡£GúQ Pè-Ô;¼ÉƒŽz<Gkk+ÒÓÓ1fÌç| b``½½½hmmÅ/ùKüþ÷¿Ço¼+Vàë_ÿº»ç;33­­­èêêrûó¶‰äó ¸m ··×eÑç2\Xl0€4°+ŠºBÀ¢Î¼‰ü!¨¦ÞP~ôÍÃhræãm›åáÓÑ©êÔºRµùvÊh²bŸóEÅUO' „Ãatww;>Ñ`’äµ¼øÚÈÊÊruêJ õ6÷°²Þ³gÏ"-- UUUI«Â:oªc™ú ñÛßþcÆŒAyy9zzzœ£PVV†p8Œ×_?ü0ÚÛÛqèÐ!HÚË_]]í¶W477£½½ýèG±~ýzÌ›7Ïí?Ö€r<>²ÿuppЭæó' ºŒ'ÒÊHFú¿x> å©£êì(ÍÕe Í:9ÊЛ3gæ΋þþ~|ìcCkk+¶mÛ†qãÆaÎœ9I6Š?¾U!þÏï4¨­A9¾“*8Å:T×jàئ‹ÚÕKµ§ìƒ‚Hí‹oåSäûiÓ¦áöÛodzÏ>‹•+Wb„ .åÝÒ–úÑfXúÛ¹±öÇ‚t>£ßs%Œò800àn éééAEEšššðꫯâOún¹åŒ;Öͽòˆ¯ ö©¯¯(((píi–So466âÉ'ŸÄ£>ŠššÌ›7‘H“'OÆ7¾ñ \vÙe(//G p[Çtá®Àëâ3åˆÙlP:»y±™G©æCçò©|xêÔ)—®ÍmKÑh………ظq#Nž<‰ÞÞ^TVVâw¿ûn¸áTUU9‡RWÀ53@iî+©/˾€µ}žcREÛµ‹7ŠG| T©¶Ûúp—bUâ¦jkð†s·~ýzÌœ9Û¶mìرÀH&£/› 8ô<~ü8Ž9‚x<Ž3fàرc¸å–[Ð×ׇٳg»[qNž<‰+V ¶¶Ñháp8)‹Iui i;°n°,nÇ¢Ÿ ‹9´w¬‡ãg$1©Î¥åôéÓ‘ŸŸîîn=zÔ]·Çþ°-nŸÑÌ[=‡uòÜÕõƒÇÝÙhhh@nn.†‡G´^¼x±ÛÖmõ{*žµ|mm¿O®-ï%‰ä mJ^¿Åb(((ÀÊ•+‘••…‚‚\qŨ««ÃäÉ“ÝŠÛH•X*¥Ê¢LeF¾£õ¥œú¹¯¯»"ê3H9ÒIQãʶ™ÊØÛÛ‹H$âö-ªÓ«à&¹•Ñ3^oÇ:•QÝcª~NNz{{ñôÓOcÓ¦MFÒõ«_9ðÞÏñãÇãàÁƒøøÇ?Ž7º=h4JOuB¬W‡[ç–ýTc¥tÒ9°4° -]ûbWJŒ1ø@¡gJåàà ;éT ¥¶í›[ N”WíßÄh_SE÷¬¡¸P°L›ö)•C¨Îë'Ïpž²>Ý–¡ïêÔ0hè–5Š -Ž¬’²àU³p†††pöìY ºôa‚I¦?2c…mŸ>}S§NÅÐÐ:::°k×.444 cÚ´i˜¸é€*ßV¨3gû­[CÄ”è~ÞÖÒÑÑáö³-‚®‚‚$ vêëëݱsçÎESS“sÎûúúœc~ìØ1455ᡇÂ+¯¼‚Y³f¡¦¦À¹½«'OžDCCCM{ì1,]ºyyy€îînwƒÎàà »¢lûöíÈÈÈ@}}="‘ˆ\ÜóŸ™™ `„ÿZZZÐØ؈ùó绬5–ŒŒ äää ¸¸ØõKO€Neò9·JwS OÉÎÎÆ”)S0uêTÌš5Ëéê^ÕsÊŠØê-å]¹U›gm†­—mÓiR½¯xÆÊÚIÍFЭ-jib±˜»ÚýÉÊÊÂÚµk±téR—îϱð¼ô ÎÝ>à[™Õ@ˆ:‰ªÿØwwm`‡Îp?º»»‘——‡œœ—²¾{÷n444 §§½½½î°d:$–æš®ÌvÉ·ÜJC§G=(¿CCCؽ{7žxâ ¼öÚk˜={6‚Á‘Cv9‚{î¹W\q…sŽ222œƒT\\œ”Ekuño OØ >çRƒµZÅs(rÓÙÀI<GEEš››ñâ‹/âĉî<•qãÆ׶µ‡,>¨ý³r§úVm—ê`}´ ’Å•jS€³ÿ*‹Ú҈ϫƒÎBþ ìëŒx<žtƒ3Æf̘‰'ºŒ®þþ~Ì™3ÇLosÎ^~ùe<þøãؾ}»{¾±±eee˜4iÞ|óM·ug×®]Ø´i/^ì¶]ñÌ%;OœŸÜÜ\g/³³³]À7 -¹³kx ¢:üÝÝÝànFÐÃõ|³¾¾>tuu¡¯¯ÏÑ‹üƒAwØæþýû±yóf?~‡BAA6mÚ„ŠŠ -w uiÎKy­s,s«ö´Çô%àvJÅ[Ê+ÁàÈaÓ§OŸÆSO=…¶¶6„Ãa?~ëÖ­sgC͘1Ã]É÷”—ɳªÛ|¾µÐôœÌ$ $¨‘d[Ø!*ûË.» ñxÜí¡sÊô.ÛYN˜/rb+˜,v…)•cÄr!è{žãÌÍÍu{dmZ°©ð§ê™ƒ“4qâĤ,õŠ"íK"‘ÀäÉ“]¶ÝÓ¤…Ʋ²²999èëëÃý÷ßoûÛ¨­­uiy%%%H$.¥µ²²û÷ïÇ7Þˆ;î¸cÆŒqs©Yv¼£:ßTʤ¬/‘H¸ô1mc´L Ž.TXwFFöíÛ‡œœÔÕÕ¡»»ííí¨¬¬L -ª¨pÙ ‡öÅ°¬UáL•ê=ZQ`4«ÑJõŒ ˆòtXÆŒ“ôœ5` -põ«t40£ýçó\=¡³OžÎ^žÎÌéYê¬]»ÍÍÍøÉO~‚3gΠººÚ]/óãÿYYY˜4iZ[[qäÈäää ½½ëÖ­Ãúõë1cÆ çÄhŸÒÓÓQSSã"·üaIù433óçÏwòMV}¢ ÇçZZò=ò63g4Àf·$ g|ù¿®˜òË{äauØ/E^}õU,[¶Ì$°+Û©J*þÓïߎ>ÿKÞ×g¨ŸóòòpóÍ7».uú¸¡iÒ¾´o߸ÔùRÛCç…ö–¼Ÿ––†²²2„B!tuuH>|ˆ *cóæÍÂÔ©S ñæ›o"9¸ï=ïy»%€}7nòòò°víZ¼òÊ+Ø·oŠ‹‹ÑÑÑáú;kÖ,,]ºÓ§OG]] - Q]]`0ˆ®®. ܼÑÛÛë®o"x­««s+>ÇFÝ7÷øñãÝMÚ>‚°ÁÁAôôô$Ù#.:hQ Ýv8zÆ9Ðg }Ž»‚Qû®Õi*¬'33o¼ñòòòP__ÞÞÞ$‡Å:#ºGiküHv mŸmÂg³Èà  &¯2S^^îþ§^áVGM±U€Í+ù4`nm‰ýÌÒWõ'1<$Œí1í–2ÔÓӃ͛7Š‹‹1oÞ÷Ò)WÞ?~`çëCªñeff&]ÃBf=l[Á¸ -ƒmOsf444`îܹ^šÛò|wÝuª««Ýa,·: -Áใ=¬#¨cçs4˜JuZí<ê|ªe¢T+àû¡P8|ø0jjj0mÚ4ôôô ±±uuuÈÈÈHÚÿh‹Ö¥@@Çn&+¸¿Ø Êh ‡4²÷ +lýlßwH¥þ¶c廚Fè“9-š–¯«¹¬SÓU¾4sï( g}ñø¹4›ŽhKVVöíÛ‡[o½sæÌÁûÞ÷>üñD?ZZZÜ -hGGÊËË1nÜ8\uÕUX¶l™»u€rš••u^Ÿ8N¥‡ò;y‘©ÞÊ ªSTÞ•—|zßk?Hs?ÿW Cú)¨Ñ :š,4”¶Ÿ–Ÿþy”••aÖ¬Yn¥ÊλAVN­nVž¶úÜÊÖÅ+OÊoú ÛÑíIäc‚í¿SÙ ¸Ú@±êêKò¶µ1*/¬_ç$##À׿þuÔ××ãûßÿ~RÛ¥¥¥xöÙgQ]]p8ìêg[ÑhÄÿüÏÿàñÇGMM .\ˆw¼ã˜3gŠŠŠžžî®b⡱Ä”=t–ãàt-i©s­+wê ªLðÄs®¶Ú­sªWX8ÃÃÃnÅ–@PRÒÓÚ&½ÃZçÍò ?W^Oµ“ïdffbÇŽغu+6lØpÞõ§*kJ#Õ/>ùP¹P[ÎçUèê>%kÛÉ#ä?ž¹AÚZÝ’Êáá3lG37|¶W1ŸñÉA¸òS$Á‘#GÜ¢Çc=†§žz -óæÍÃðð0N:…ììlô÷÷ãÎ;ïĪU«ÜvŸ-gHå's}VÏááa;v /½ôZ[[ÑÒÒ‚²²2¼ûÝïƼyó\Ly(W©°Žå'µ œ3~OgG1ˆå[ì"„ŽMçVõx08rmïÎ;qôèQw=]?*++qùå—£   ¥cc±ŽËò¸¦¦&”——#777I&8Ÿ 8ªÍµã´tRÙ%žÕÔ~îE'¯¥ÚƧreåm²èÕe:Ÿ*_êêù*º$ -áÙgŸÅc=†ÒÒR=zÔWÁkøÊËËÝâa…¤ IDATÅòåËqýõ×»l2¥™.(ßÙ¿Õÿc?ôæ¥^×vÔ·d?¬?I¹åùNýýý(((péöšñ§ØŒúž™ -\ˆÒ¹á¢í–ÅÖWQÌL[‡ƒOžà¡‰Ä#––vÜÚ'•9‹'Ék¤åž4êééy>‰$´B%®/j¦©@2Pc=¸ŒV.æÖ«JMÇcKë¶ý³EA²Ï€<­¥ÆWi¤Ð'T*D>#£íißÒÓÓÑÕÕ…ƒ¢§§ÇÈ;N™ÖÈw§L™âöî¥n;þ U€úž ÒÀ*|uZø™ÒO™_ÛP^P€‹ÅÜÞQ*ù;w¢ªª -“'Ov@ÖÞeÛW°¤s©`Ê*Jk@}@ÇÒ›m+`óÑÏg0/4'ÊS¶}åu×qúŒ¨ÖÃâÍìC*£®íùÚPÙ³roå€4<{ö¬3@6ãA•|^^ÆŽ‹`0˜ÜT]— -ì©·ó®ãÖ÷}Á¿åy~n«¡¶:Oémi£ïiѾêgÚê“òòrô÷÷ã™gžÁŠ+ÜÕ(´Û?F+>{¡²ÎÂz rl?íÿVF|6C‹ê>Môh`|Û“5ºŸÊæZpÁzõê(ò›òb(ÂþýûñÆo$¥;ggg£»»µµµX¾|9¸lÕ]ý£<¤Î=€$É'<“žV×p|6`ìk×iø;•î¢¬ŸtάîÕùÑ÷s׶*}¬\ê¼F£Qœ9siiièîîÆÌ™3ÝÜøð‹öEõ ·ðw>€ Bóo¥‰ÅÀ@òÕ¢>ùe0qxxØmHOOw÷ÈûùtøtÏ3yŠãT~áŠ?õ…­ÓÚ`ò®mWŸÑñQ¶´.Åþ*wêÌ*?ð³TA^¨ï™mÑÙÙ‰ÆÆF$ wFlõÌ µwÖ.kýjç}:8dPÒnë±öÞGÅvŒ>Û 4·¶Ôâ7þÏ-Ç}}}.ÈDždaÀ# -¡°°™™™IWªÚ~úð‹³)¶ðñ–Ú6k‹Uèûú Ç«ò¡úüÜØTýl1“}Vûa± ŽY}½Š]í¡µê#úæ]Û·¶ÉW´Ÿú.íNCCCr€„þmÁµ¯1Ëx>Ã7‰£•‹QlëbS­Sõ¸ð‰£I¿­ð) Î/Ô†Ž×'4‰DÂE§ùŒþ­‚À¥êéøm½>…¡>É'¢kßiœôo_–ªH­P°h¤•‘ZxF¨ƒÁ - “²×·¤èZôsM5ó¥S[v±3U€ÿS‰úŠ|Žö éfAûÅò¾¥WRɬŽA#¢>8ÚØôó@àÜÞ;¶©ÛR¬ƒ ÑbÛ'>§FE?÷øCKÞàœY:ÿ% H#Ào‡NÉœò=îÿïêê‚ pêÔ)U± Æ×–2e^sêxXðŸÊÓz.tøœs֥̩ÀÒÒZûæ3(VYó=õ–ïÓéÑï9çì«ÏÑañ|[,¤<š’™ªØö87£PŽSZWî(hÜ‹ÖÕÕåV¿ìŠšmC¯bã˜pùÆËñXçà/v-ªðSÉigy*UtõËÇ—‹þ±Å.lŸ}« Ú¦¾?Z±†P 0t)rºOJ¿³óľªì¾¢+•²cóÊÑäîb?¿˜2jZkZZ¶lÙ‚ÆÆFLŸ>زe Ö¬Yãö Ò¸¾]~RÏ3ûfW‘Fk'•}³FÚ~$oûÐçÀ)?[ýM½cí¬ò—•‰‹±¡ö=5úÀ¹sU4¸kAžŽ‰úò¢©Š -Ø--õs ¬ó®}Q›jm P(`²ôðzàülß<³Ÿ£?Z¡ÑÒ¨_HgÕmCff&ÆŒƒßüæ7˜6mjkk“€¸öAÓY'÷èªmÑy·Å:!úCûª[Ol¾E ÖëÓeú|Ó”òw(”|þ‘]ﱇ4N•í -œWÀ•ZkŸÕb°RVåië$XÁ~ø°§ÚÖ§úY;«Á}» CžRzÚ¹¿žµ}׶­Ì*õ;Ž…A -ÝGµ¸ZÛúKì“ ÎqnP__ïnM¡ Ù…"ŸÃÈú•.|N1¥:üzeŸÆ–ά‹ü©ÎŸ±ïªîP kõœ~®ãâûÑhÔu©«´¯šýäà ¶¨°´ÕgøÛÒ‚ïúæ:_¾ƒSé}ê/ê]ÛÆhe4¼©m©móÍ=éNþÔàlªEŸ÷=Ç¢¾M*Ìãkƒï£²²þþþ?’÷|Ú•@@2èÑý -,(8–p¾è¤U®V$ ¶Sœ8«ŒäÕDuº•@Ö8ú&Üצö_ÇÇñ§2h:Ѿè -ú²€Uc)UP¤ éF]ê¿Ö¥ôô)h+p¬WûŸÊY!ÑðÙSçyÈÓhÂj…BAƒ¦úúe j0Dkk+b±ÊËËÑÝÝœœäåå%ñë…hòvŠí«}ÆFþ©˜}©÷ -ô _ѹÐÏ”çUÞ•V©À¾Œ‹Yi° -ìí:ÓöÙT²jŸOEkûgkÄh¸SÕw±ýWP &_‘9Z?GkWûœÊ(ñ} dí³Ê£ì£O/G£Qœ>}]]]8yò$š››±aÃäçç»»ä QRRrÞ¾Á¿„f¾€­ê/«¿õ} îl?Rî¬ãg,[yöÉÚ…xÝø¹uÔm;>zè3œsÕÊs–¶¶«[íXÔž«ž³Ïøú­ßYG_AN*gGx£Í¯Å&£ÅZ·]ÁQ»£ã³;%#g6´µµáèÑ£˜5kŠŠŠpäÈ„B!w(EîofŠ‰ìáÁÌ Ðm™,¤JW­C5×>¹Qc¯bä3š3Ÿ^W>ÕàS*¯tõ}O׳~ì»çúxVõò«Î ûìëŸmág´ ˜öCëÓ¶¬ÜY=f1V*Ûí³öyíÓh:ÞΉϵcæsŠ1ÔÙ 1&ƒûÁ`Ð]Ç:(KvÑëBºj4,AÚhÀCùÄ–Tõ_ ~Ó:Tw+ÝTæØç}cV;j}ŸKå+·j&ˆµÚ‹âBkK,FRl¢ÁuËWÖ6*m´ßÊ×øñÕgíÜhÛ꧱~_ÐG ç‹r (Ês–”Å'–'øšNŽV¤Qv`$0ÀÃIôp$e~=Q–FAõœÏ3UÇîÓå3ìW£RZ>ãsž”èV!s‚}Æ^ûì[ì'ie–iìû–IY‡ -²Ýc¬ÊÐ2‡Òœ´±÷ïZ&J$έÙýðVØío6úVÒÙ{ W\µ/Ö`Ø6HF|u¿Yª÷˜£¹¹gÎœAYY™»É‚4¶k d.Æáµ´Í(ðUÀQùôoËÏ–f£[ -l|ÊÝ:‚v©-Ö`ؾYðãD¶¾T ß;©ê°HÇmë´ýñÕ§ÏêXl±Зzë¾zìÿ -Bõ]ý_ùËʽŽo´1RËËËQSSƒ¥K—bïÞ½ÈÌÌD^^ - QTTä¿’ñI5Ûç ÑÕò‘o®U¦h Ôh?T|ýòé=U£Ñ,Uða´býÜg ´TôñÙI¾gm íùÅÚpŸ½’÷]úú’ªmû·f©xÁ¶¥Ÿ]HŽ.f^TŸrŒúoþµ;`còäÉîà*ux5sO3øT®È jÛ-Þ²ã¤<ðv^Ǩ“Åäaáÿ d² Ö¡[è4Ûì¬Î÷ñ:jí¼¥âmµŸÚ®ÛÑŠO·X·mðs~çË‚³c¾­æxÈú¹Õ©úx±ûTXUÇp12Ä÷Éw‹…l€NÇ444„·Þz }}}nßz^^ž;å^Qjø¿:š>ܤºÝòŠò£ŽGéâàçû™Õöyß÷Ú¾fmÙàÔhŇo}mY[¡}à»ê„ò;Ë+–®”‹¬œ¤â9‹7ì3ì¯õSaDß»£Í ‹ÅbÂTZ¿GÅÿ,¾1ؾúp¨b=H{ì±Çœ»„¤¥¥¹ξ¾>$ç®lÓ“‘Idž -ËFxê¦*|TU„\ S#ÁÝ“È2@ÁÓ+íàySf ؈¡#„IqÔ ¡Ò²ÑþTQ&}–ŠŠã´¸ÒÀqMGtÁ‰‘Àˆ¾oé¡Š_ˆ -˜MñÒ¸ÖeiÉçìþ$Î7çD•°Í\àûª`uN,Ókt8:wœÎ ikùª¶¶ÖKç€üª -Ìf_Øàˆò¥¹ÄT Ô‚tœœW­Ïv8f«ÀSµ§ -Çò³&>Y#ô©€¹-øøÀ)ßõõÉ'§ö·T^ÀP¦íj é©û1}ÀSûîkOiÇzR9£ö«Èõ{Íø¹‘´ ÇÏÑÀ§Ž/77Á๠¯±cÇ¢··.«‡Ûq”oSõËÒIû£vIÇïã1[Pc1å±TZK¥¥OÖl¹ÐüÚ>ë3ÔŸ8ûìmSû§«jâM[§j©ŠÏñ­ØçTWë»vûöyßJ¹oõ]_ÆÇ?v•ÊþøøByYéC™---E{{;Âá0ŠŠŠ›››´‰4P§†õê–þÐ!g@[6C“ýâwšÍ©´¶[/Ày«Rº¤ôòe%¦Â+–^¾}û©öª§â‹T[xt¾-Ø÷}s¯}µ«ÖF³Ÿºº’l·ÖÇö”¯´¯¾E;~û·Ê¿-–N¶©ôøhÁNí·O_ñòŠÒMß#?E"w€sQQ‘£ïÀÀ@^e¿ÉŸöL‹t,©Æ¡4Ñû ëõ-Ä(6±ßùô°~nÛÐg}AJû¿O´í[ªÀŸŽAÛP¾öé¬Ttµ6Ïî™·²jé®}²øAû­ £>ýoºø¹Î‰þv¼£ýöÑÝâ[‹¹í¨Œ¨ÍÓ­C÷FµÐ¹¹¹‡Ã£=òÿ›RVVæ&‰Á®®.çöâ:%žŸŸï¢àÁ`ÐÝI œ;t‡Á f50ªM%C㦠-›§>Sð322ÜÉÌÖ(fee%¼©Æ›F> -!##™™™Nxx#àî×Õè<ûÂô(½+Ý|ݨ @’s¬ Ò˜t ÀÏyÈ`VVVÒ•,ƒƒƒÈÊÊJrþé\«sO¦MKKs§¼r» -ƒÑû„)¼¤C pî¾tÒNçZ›‚— -çOÓå}Q?íœ=HISÉ34P¬W3$lª¦*|«üdêaº‡[ƒrºõ‡¿ù, -ôÙ>i `”òhŸöѧÈùåSâ!oØ«Z8? âPnH+öÃöhŽÎǯtÒï•^Iã°àó­´QP¯ûóÈû¼ÛØ µï|WƒWJgÒƒ´ðeP)OÛƒ¥XÔÁçaLÜ^dõ‰ÍtP€¢úSÛQþ¶|¢ Ã:!Z7ÿÖªûááa7o:>»r¢ŸÙ@°Ê鯼¬Á`~nǬ'¶Û@¹u¾ôf.ÖÑ þ³«+ÚW• :ˆœ7µ ,>ðEž¶o!ÉÒÓò¬ÚEµà+è¶úš?Ú7Õ!”/Ÿ=µÁ0ÕQ œ’/õÅ=:WÊ“úcq€ö+̺ÉÏêHi€`,''‘H‰Ä¹h6… $Åãqäçç']uH㘙™éÚOOOO -ðD"H¢+³o¸%H¯¾¡î Ã744„ÂÂBèa»ìo^^ž;¥™F1ºûɹ-chhYYYF2•"‘²³³] ) -!+++É(YÐË9à 9 hNNŽSÞlQƒÅþéJuÚmj Ótãñ‘Ó©ø²à.::G"‘¤ÓÜÉ L&M8gÔÑ¡PÈÍ-¯¶RÅOç×õ©Dnnn’QÍÊÊr4ÒÀɨT§‡²Kþ¶Nw<wóÂzòòòÜUu:ôdpÑÎßa?HÓììlGcö…c#-ÕaWƒMg_ÂáðyÎyƒF™+QYYYIà‘ãÔ Š‚¥@à\æ˜]ýÎ¥YsŒ -ä©/©ƒtÎì³ÏÔ±ØÈU©ÔTÞÕ€/?K$Î] ǾsL¾ÀûNÙÕÕ…X,†¢¢"׶¥:šã'+èff¢Ê%7_Á๠<û700€ÌÌ̤à."ûžíè«2…:§Ô§'°×`3 ƒ,êHªÓª«ê*çê„«sKý«2Ç~Òñ&=©{•O¨ßÙWÖ©ò˾è&º( ó500d+ØwpQ,Gý§©ò+O4·N¯êYÊ.Ú– -èm68븳nŸƒ¥!çP ö3•u¥3éBÞÑÀ;yBƒQ¬Î[Õƒê$r¾ÔNRFìÜiÑE2=tR32HKåWÅæ|N1yJy´RþÕq°^b -ʾu¬YŸÚëDShЂïé•ŠÄ0äq]( ­uŒ:³Öy¤a?øŒ]HTªt´ŽmÒ\ñ„â!Îu¦mŸë"  :Zçžï¨mSÛ©uSß(Ö,$‹•-ã8ì°nË·Jý^í‘åyìÒq².Õƒœ{¥çÈšYG,K’m>§˜DyÏöSíf†“(ÊÓ”!Å®¹sç&èøhÔG AÐÃAÐy¡ÉÉÉA"1©¥áÊ -ß¡RÕèœ:"YYYÎɧpj¤’Œ¡Ÿ³Ÿ:Q èD[€­ D#F|žÌk™VAû¥ÆK£ä:ašKp }¡Pê;ÅR¥ -œ†^WÌs=ÖG§AûÍq«ÐÒ¸p~ôs_äVª)ö…ï–d^5âÙÙÙ‡ÃIJ\•(ƒ@4,‘HEEEèííMš‹ÿ“‹*ß¿–¿–ÿ¯Š:Z---y7nJKKÑÝÝ .ÀJ§# -!???ÉN2(RXX˜ä¸iæ›:«´óº‚Ï•I¶Q988˜|dÝ ”'Pè2óø‚w3+8—  ±ŒYè¨Ð©ý¿Ø{·Û²²~û]‡:Ÿ«víÞ}’Ý tC7 ˜/¢/4C ‰WxçáÆÄ I4ÑÈ%‘pcâ…ñpaŒ„;cŒJ$DM@l é¦÷ÞU{ïªUµªjÕa­ÿE}ÏXÏ|k¬ªÝþŸÉ×3©TÕZsÎ1Æ{ü½‡9&É‹Á`Pö,À7’„e=ŒEàJ’Ï؈kee¥$…˜º ÁÇ`b'@@<88hTýfggËÆË4¹Þk†fµÀºðº2è$9²CpLð̺IjÁ3cc‚J0š1# ,tž'Fxnsâ×I)0.ãºr FvÞÉnwŒ°FxL2˜…5ÃGøJ ýÑ!:kK2ŒŽ<Åüü|#©ÌÚÑ/wZt‘Pl·Ç]}èTÖeéB…0ýÌÌL‘KÇ |ÏÁ÷.ÞoµZ­ÒŒTµpp~#ΚP ùää¤(€«OÎPÃTÚm;ó×ÜÆÁÁAa,ßÑžÄcìÓ`GÏ\b0Ľ{÷J»¼¢j†¢ºŠáʘ I;*”Þ‚Ün·JÜÌÍÍçë¬2Δj­¢ÏÔ´Ácà)|tuq4•7¸[ÅÉ ÀJ]Ü1vN„ØÙá0XûÑÑÑ…Š¯ßïÇÌÌLÅÑÑQ‘¯ˆqÕc€a¹Í€Ã¯8ÌYw;—\•Ã(bØ“ƒÏhqã@^vww‹¬8ÉzíLLMM5¡É­s¹â3ý®`A· š·\žbgggƒn*Û+ŽÜÂê/æÆu€µÁ`P*ÜØ÷Ê÷p½BÈ&ëpÕƒ}8w®Qºg°o$ƒá•“€*Ü-œùw Ö`ÀÆýùÜ´Gnܺ@ðºÝEcyåW'r7€ím fffʽI°R½ ±¸¸£Ñ(z‰ÏA÷NNNâÑG-o !9‰|t:"‡–éü½«Œ¼’íÎ;±¾¾Ýn7¶··Ëœ°1Ãá°è)ów‚‘Š oûüÁÁÁA#c'í…÷£Ñ(®]»íöù«N~øá899‰û÷ï9s˾;¸œ”Aî°³öŠ ®#ƃ–Åœô˜d—Ð+û=¬ƒÁ æççczz:ö÷÷ ù ú.,,ÄÙÙYôz½ØØ؈™™™¸ÿ~Ü¿¿$ÓX'vÓÕU’1??ß(H¸r‹M!QØjµŠ¼‘ \\\¼r;ÁýùÛ•NËürÕÊvщ't ½“þ¾žqœ|Ç^FDIàzŽN@1¾“ÜNúØ&b ‘/Î3ßÁ(ȶÝå^þ1½ñòÌ5ÐÃUZÛRÛZ0„«Ö–eÏ_d܉, 7–/'BIÜsWþ)0 vÙ¶Ju~ÎÞy,ÖÁãƒðBz_((±° ëqÅñ˜§uÞøßëÎRð—»\5–Ì…4c -Ë£í£DLÛ2 IDAT‹7ÈvÖ V|ëÉÉIlllÄêêj|ï{ß» ûîRñ]Pp×#ÏŒ 9á'²ftñÀNÎaÝÈ,ü¡ 4;;[*õÜ+"ÊþfìÅÅã•çû³¸[,ÎC¦ðùŽ2­±Ð1©ð™¶sîvF>ŽŽÞ.VXŸ]@6Ž4¦k·ÛEÎl·°É. -!·è‚“äÖuì k±>r öÔ{CÀSèƒüð×ܸq£Q\0áE§Ó‰~¿_Š5ÄNà—ÅÅÅqGœÙÙÙDØXø½(œ.Åà21ájbDЕ« ÛÁhÃÊ“+c~þnff&K%–ÀÂ]‹‹‹Ô¸:‘[±øÛÕÁ„ˆÀ'€µ±cm8h‹òøY_Gê ö\]6 ƒÇÐÉΚÄÏññq£‹Á­‚Ü ¾âôhs#q„‚âÄáð¹Ó9ß°‚€iaa¡±TW&Q$óÄ(...6ªÞ.yœ7^d dÍÁs››»°Ñ†œ @²‹yÁ òZ”׎ÒÆtqq±<›Œ Úˆu:qÎÒÒR 6ì„\-Äâ4L7ô¹ 9Â133Sä×z‚îpO@†ï‘ùÁ`Pè -˜/ÛC ûý~i ƒOÌi8Npá¶5‚Øåååbˆýî`@rÂsòðš °ìÄ(ãGD "  ²‡^X÷à•2A‹ >6›ëçw±­Ø·Ù¶ÛíX\\l9ØMœŒ“ªüïd.ÛÕétb¿òèKKKÑn·c?–––bcc£lȺ°°½^/NOOËw$2\õít:±¼¼\غvû|“×åååèõz8 Ø;ÀzˆÊŽÁ Éßl #Î÷«è÷ûÅWrýòòr¹ò~tt+++1==]ÖŽÄÞ˜¡¯;ÄœdÇÑíd²@’`J П*zŠ|---Åééiìììž#?L°»ÕÖÝF¶ÆîzÁƒ5£Ýn—\ì°[½I\t¼¸€ñÕ¯~5†ÃaiyÄÞ‚KÐÍ“““¢—2·ðº{âŽ2@¬“ËØöPq˜í1úH›?~þNOO7@ô“‰óðƒu¡‹ðù;ødð Ï -Or‡ëŒ‹°×` d=Ãæ‚WY““ŒÈ¾¬ÁNÅÉEœNŽùšŸØ=œ7\$X³ àI"0ä]Æöº*ìë„×ð½u"Bf©ô´Z­òèOèÝn7VWW‹½B>Ð ®±]îv»+r‰\íííú#¯Ië.< Ié6}héÄ2v ¬±dpò‹ùÐeÂÜ;ÂóÚÈ ü')Epˆ¸Âµ²²Rèã„2æg{¡3d㮜áð¼ -Ž|pXoì3à~Û-kŠˆ,8)Á|°Ë¶á¶Å–Iû<è@Uʶ¿íŽìv€„LbKÐ}è@ðïJ“ý¯ÔØxŸá)2iŒâàÄò‚ÿE¡µ:HBÈ Ë¹¹¹âcd}F1d@<Ž/ð;à5Úsž× –ã­>< %òg¬ÙÀçEDшȗåu8]„wT/ 2ÿ–;èŠ=Cîé¼2.DN]¸Ào8ßÀ*Ü‹ƒêÌÌLãÑH' ík·yl‰µãOŒ‰xZº8€œA·ùùù²)¯»là!>™ù˜²VdÛš’dã†ÐKÖ¼°°P‘ÐÐ6Ê ÍÃÃÃb,÷|ïøÙ&ÆÁÝn·ñŒ¶«¯Üß¾4b{{»??_ÞGðꄦ1½ 8t`×m‘ l(8,â"`ÖQì³ãOèIòäýOÐ~ƒ™ð7è!óÄ3wëüD¾< -$.þ¸ØMóæËe^7²L#S$·¸¿‹EÜ»8==k×®}Ô€¥ßï!"[aŠs¶á0-..6²µÑE(½ÉÄ$r ´v`>™máçgP;5œàÃBPùÆÈ0wBoÃØÈJlFðÌxW›0.²~Ýîx'sÂÝî:@(1¦®ÔÃ/ô7øôç´ë[° » -kŠ?Kl8ìÚ¸b$ᛀt±Ðs=´„†ŒirÂÊÎØ÷€>èò m÷Ä A#dy¡K€óá+ÆËz/úƒã¤Vs¯—ûX„Q­Y^^.z:Kk­7«qʼnϜ4ÂbG0’OëòHã3',‡æµŽ«è²czãˆX¼„v§§§å"æL Œãw é - Ú˜86;"c6Ê$ÉÐ}ª.$zHî@c’’Øtšƒ W ÏÎÆ---›}ÐuöÐÄXTløžyq7Ú@‡ápX6õàÂ?œ<öζ‹û¡ãT GØWø‚Ü9cÎÚ°©NÄÖœÜuâÛ aaa¡øƒÁ`Pxdy1±!AIrûq ýýýFe⡇ŠùùùØÝÝv»]‚®‡.Œ5žw'Pmbý–GûXä »ŸK…äÈbîç@›j 2 -ÿr"Á<â|@;b­N´á°'çðÊÊJÑaë'º Ef\­öøÈ–mú Ø£Ò‚®ël!§ø°÷Ä;øŽo°kÿÅyÌÙc? gôÌÕ2t¢2H· zÂX.0‡.|Ï|ì`3øž1ÁÆ/Ø -(Tǘ£ßûÎ9*œOòÔv:A|¸“Åà’VØnÓu8–+?ò†¯e^è k¯±žRÁF'œD›âwœ4ƒ·Æá+++e$ä-Û{`Iw5a¹¿ý6ŸeqRÒÁ“Ïa~–ul'²hœ‹üb÷\tÁö!wÈ3Up?î‡ÿ0Ÿˆ1ët² ¾ºà天±>Ș[ïk8ŒÌ8øOþÆà‡\äqLuvv÷ïß/ºlŒè ÞÓiâb¶ œéW¬; >>>Ž¹¹¹²×ZƬ. "×þí$µ“U~´„5Ù¦|4vA®§sÑ -[låuð7´· ‰ëD±e [ÂXîC¾\ågmè#tpLäd¹±;rµAV‘)ü®m¢åÁþÛ -ðB6œˆeNl7YÖ€>±o‚“0‰TÉ)˜ ­¶Ü‹À‡ur ‡ðÚ¼·urÚò.Ú¾pž;à³<ó›† ƒð9ðÊ ]'ïÌà>ÙÙ#ôbÎîè899i‰îÅšñ=~=`þN¬šÖð=£âm_ ­]xp¡m¿èv"cø€]s’[#áïá³ñ3ŸAC?þˆ­4ïlç¡3òÅÿè¶Ô*¸ÓÃEc³ð'Æ?èv»âĤmsèv»:], À]°;.žúqÎa­è$2àîÖê·^XÞ™¿ UNÜØ΀± |‡Ï2†pbÁ¸2ÛäÌGNHØ?/œ Xš 舓ÄŸŽ_Ï@h¹p862+ÄBêŠêLÊŒb3ig[]Ô¸ó9ãÛÁð›AQÙÄQ£8Á»Vs†ÆYCgPÙñßŃҒŽ‘‚è(™+IÖ…Dy-¨Ãá°8QÚ„ Òr6žë ¼ò9ngEIH‚až‹cŽÆ”Ïœ9# à#Wòo8`@1†£B†š±ðÆA8Á ÖäÇZPN’((ŸÃCŒ@Ž™AéݾÈÚ 3 ¹ÆÃC?ÇÈÜé®Aî¹*€!B·X@ãà,£Ÿó3(öº zG£ñ;II®8ÆyüO&º¦·€îÁÿXÖsØŒ–FЃɵè0Šž™¶4 0v žxîÐ ÐlGeÇïD @]G?ü˜ ™r~hA„Ož“í²ä÷„c?hC÷çØe’§ð3bœÀòw£Ñy— 6–6QË=û P­ƒT… ¶´ÝwF ‡ÃÒú‹Ü“Ü°ÓCÞ˜#‰‰³³ó÷É“Ø°ÂÆ¡C‡‡‡¥Í È½ò³œü ­F£æQØ4.âànll9„G9áPŒÍÎÎF¯×+zHÂÉ›? ö’s""nܸÝn7nݺSSSåõªØyì2´¸¸kkk…G®<ä°VdÅ:F_Œ¼ ³Nžã[Iì¡3®Zå*' †ê¥Á"ö:fÈ<㻢eÿíD²kèâ4´f<ÆD² ³ B{tÔvîvò\íÏùßrÄÿXcV«kkkå™ünwü¨cqÖëªþÛêñ¡=ç™îY˜³»œèö&vØ&·ë"Æ.øpƒm¾œ`ŒÎæG7L’›èFN0‚ÞÌ_?­ö»Èƒ\ð ~>öûý†- x’173~ßŵ¬Zð=AÚ`0( àŽýýý"NXæd¥“[ðÏ>Y÷"—N†£wØhdLŽm2¾µ<06÷ö³Úðq0”Î쌓ÄçÏY“€óµàúÙÙÙRtÛÝÝ-s$þÈIMdßÝO¼’­×ë50¬õ×Ýa裓Ì—±è¶0>g.ð‘0±´C“©©©òÌ¿ã0°¿¿ßa'Ÿr²Â=> =‰h¾áÆ9ø!w{1_óÐI<|¾»‡lÛ\4ažî®°¢3È'ø¿ öGÇ?ìûÒÒRÙœÓñƒïæ“ÃÐÄEjûÐ…ù---5b]'ÄùŸûpmgccã£0AÇ¡aXhõ\[[+‚…°!L0jff¦@œ ºÅÅÔ¸h'ï ¿«[®axa˜³È̉s0óÏ»W³6œu‚­qË!A¤w+÷úpJSSçïö%™€ÐÀl胃Bá©ÊÀ‹¼wBËîȦt%Gæ*'k ³ sBÀ¸Æ• ”ŠLâññqìïï7vºufŠ¶`Æ40²ò|f‡c#âä³zÎ|al܆†ó@X#ôd6 Q8µLod6+¯ƒ0°aá~6Ö¬õ: EÐîv|6ù3ȱø;w 9Äœ1f^'žõ¹Êlãí 4z ï1ØvÀÐsË®AŠ³¬ØëeCÎœ3È¢òp8,-ÏØdØſt/¦l4™››+íÞ­V«±;³e9cÄ°w|Gµ ¹Ø!ƒxÓÍNüøø8–——‹¬­­ç1êÓŒïÊ;VÛöb7øš»#úÕôŒŸ~¿_ÞPÃ܃AöÀ;òppp?þxÌÎÎÆÖÖVÑ]Z‚l8¾ jnn.^yå•rÿãããØ’¤@vyã|g-è:v›OegnÀB’È:‡s?::Š½½½ò²ÏB‘)?ã/ ûÁµ®ð@/'!ñ'pWBñ•Èv™p2²-sÚ•WÖ‚ „w²-cø‡ˆñ£\Øö ´X{©L¦Ñ£œÜç\oÎÆ~Ø1臽! Îõ–±5@ë“u{boÁlQªrŒmÀéJ¥í/çض Ïvž7Fþ­ÃN¼¸Õ}ii©èÍpxþ6'xŠî9±‰@7Ñ-ðÉVdκc¯#¢`æê–~ŒàñÁÁAC/à94& -f±ŸÏÁ1Å/l)º J†¬á-2d´Ÿ‹»úÈœÌctšâ?0ñÞÖkl‚ýÉFb?&J2ƒ_ŽjA'h´ñ#xä;þìX‡Ãq5áóŽ¯.q€ (ô¼Ø܆ÿI0_”ÐmªÒrû¦+þÞÎs0”L°[Ñ0î(3†Æ™Ã#'2˜MO_»\ÅqfÖÆcç`:@3 –3I'»˜—yÀ<3°b|dÀItƾƒ@œ—ŸÓÁhœ qâ‹œ9¹f¢ªÁ¦Hd^»C‡äNç‡nèA_®”ÐÚ Eg`AW$9¸úÄÜí¬œÁ%@r{šæéÖoPœÐÁ‰%k†§¬)büHÛäû=‘-‚5ä‚Š‘‡.ÎdDD£e›±ÍZ6;NÙ`oo¯<±¿¿ßpÎØä ™Ï[÷—––Êóäý~¿l¦ý¨­V«t@!_TSY›ž7¡"xr]C'­{Ø'{¹a@ÂÎÑ'''Ñï÷ ¯]UäzæÊsÌ‘qvww ‘•ƒƒƒh£S쳃LC'óŸè*¢càürD”Ç™7¼„Ès£-™¶nÙRUå';¹€×Åä™@Šy"·´s¶q8–¤˜íó¤õ“ù@Gû |‰ ü‘¼øa‚Á1¾0Iïöí`ÅÉ:¾ !ÿnþ_^^n<†ˆCîœTqEØ v ÛÀwüæ‘î…O7o±—ö|Î5Ì“ Ú8šcÑecDìtuõ<Æ‚vø®#2îØE¯\ A¿è rk·»<#¢ì¬M€oüI! tÔãDµZ­òh­ßF€?GfyÄ¡Ý>¥­ºÌ›*-r }©TsÓžs×ÖÖŠ.¡»Ø^Šwô!3¶©N¼90b ägâ;ý‘{ö½±îµÛíòغ¹˼Øÿáäd¼ó?ú¸±±Ýîø c¶“ãäl«Õ*]¬}c”u‘<¥K»‹. Ø/’¡`fä î#&€çÆÃœwvvVW³ F^ë¸CÚ•kðºuÄxžâ…“ÃèvžDþÙŠuE4“—ã=QŒGlÑ/ôŽû’\r7þ‹ã #ØH½°‹œMpœà*½çædqñ`0ˆÝÝÝb‹‰³ÁoäÞ0rͼœ³?/ø>ÇkÇÇDZ²²Ò(Üvžx≃øîw¿­V+^xá…h·Û¥"ýÒK/ÅêêjÌÌÌÄ~ô£øÞ÷¾ׯ_¹¹¹¸sçNÉ61 @ Èlˆ’€8Ë{zzZ€+ -iG†ÕÕîÃwdDX*5$-¨†bŒÈLºÅbee%æææJR„ï©ŠåÄIcÔØP fcP™›×€ðÍÎÎ ɼX?ÂØdU™s0.cQ…É­ïVWHæø¦n·[èã -‰tMº :x”‚€ƒJpÃ*üïÝ^I0ø5!dÚ9ãÇz©à4ÙÉ<<ŒƒƒƒF€üÜ7ë4P‰WP]%ñÚM*î¸@7ܼµµ±ººZ€ 2ä.sè Ï‰Bª·è¯×»Ð’èJœåýÆž¸;Å{‡`ë¡þ½t0Í}™7²ëDë$iâÊ›Á ;æf Åß9·,¸›Í•BGäź1~ö_€La?rµÎ6Cæ,È+ú…F×±%Ìˉeì„;6˜2M"{ꪎçá -Ž“ÙÚXºê _oqòŶõãã‘o;?w–1˜õÚ‘xˆœà;|˜ïïï7:ø6ü!òÆœ½'¾ =ÅŸyíà"¼+aÜ ¹r‘ Yolú9{|4Î÷clƳ¥¥yii)¦¦¦âþýû¥£ÅÉudˆG¨.â8oqq±_ؽ~¿óóóec_޼⢠<Æ8€wqÀÕHWkùÌv3ßÏÉ™ÅÅÅ¢³ºdbÏ™çä™ßÖ!û¬ˆˆÍÍÍâG#ΓæÌ>墘“xN¬9AƒîºÈD ÁýÐi‚À¥¥¥F÷ÖÝÝÝ¢[.J™¦È'¶áàà ìää!ñká3,;`QhèdŸó^ |wZ@Sôßßaßjšçdlîòuš; AÂýlëÙ#9Cfù­ÂOCOt™Žlü:áuó¸ ‡šÜ—:aè‚ þ»asBÛ +èmÌGrŒ„#˜ú5ÔŒÝú½ßû½Ê€QÛÙÙidVPP2„sssqppP@YJ6 q÷îÝèt:Ñëõb{{;ÖÖÖâ±Ç‹ØÞÞŽïÿûñÚñ?sжˆ¡ “Èsq$ììiËÚÙÙ)Õ\” ð‡`ô9@ÉÏ:»Úg¥Ã¸%·ñAáñÃ0"›>lj'.W²P -ÞY^æmë¬ mô'@F†Õ•‹ˆ±sB¡àŠhnø‚“Á@;nƒ¼ìˆ'€MþÇ C—v»ÝxT£í,'Æ– ‚ÇRprTž#)æõC[Ö -XÀ`"[Ì!bÜE„Á÷µTò¡7Á"@Ïtç· É*ˇi•3Ëk¿kšõ!ÛŒÉw–%g…íp:3¾«×8UÖc‡_ÈÕPd…ÊI('‰œØá`ŒßA+© èÌ98Cä×Ïþ9eî¶ h‡ -M'gÞiM$çl€rK ë iƒ“…G¦Ÿ›ßNÞôûüNgüœk·{¾Ëv¿ß~¿_öþ Xõ IDAT*D@Œ]FfOOOË3~ƽ¹foo¯Ø}øwvv««« @çd­Ó‚.6þòü%ö™*îþþ~DŒŸëe|Ö¯üF ’–ðÙÕ\|-~™ûB3èλwè|¡Sl8lî»Ãa`IÂz:Á:#ÆcÈ2@‚d!ØÂAòF±··W - ´Ö/..–ÇHšØ÷®¬¬” ‰@ÜÏÆR)™™‰ ±ººZ@ôžB6Œs²’äþªÕjÝìv»¥’îâ@ÄøU|î9£ÀC"ìììÄææf,//{³¿¿'''¥¥œ{áëI"b/×××c4:/ÊQÄÂb_‚z½^Ù»ÅûFѽI OÀN;ÑDqÞ»Z -á9Xy!©ƒŸç­Ñm 豇ØÓ^¯‹‹‹åq -t Áï d=æ3§øXð6ƒäºåäIćøvíZI–£CÈZD4ž‹ÇÖ ?TßI´@c -±$Žýmƒ.$OÑsð“‹B.Ô`KXƤèyÄy\Òï÷ãðð°$þÑ]øæñ È4óA'¡6ÆÉÐ~¿333…Ö$dHœ³FI€¯~KÛp8ŒÕÕÕ8>>.g¢³Bs²Ð…$~X‰@Ó9Â7ŒF£†N +øktšÁô[ꢒ íl̉Ž¶îܹ3rõÀY*"n²ó7 ììì¬?ŒA@xÆ!„ý~¿‘Õ£íçQC ɸÀ,œ  J`Š2ô»ÂöïÿþïñØc56´"È…™<†c&[ (b~üPeAð¨°omm5°´´{{{155{{{q÷îÝ"˜½^/nܸÃá0ÖÖÖboo/^|ñÅb8ó/Ö××ãÞ½{¾ˆ¸yóæÿo3TÒþ·®Á+++¥…çâØÜÜŒééé¸uëVÙ¡öþýûEg¨ðãpIô­­­{±³³+++ÅÙß¹s'–——K[ãp8œ(ƒëëëå¼x衇bqq1îÝ»·oߎ½½½xÛÛÞwïÞ—_~¹q=ÉH®ç½õìl1²},..'D—É͈(;)GŒwrm·Û÷+¯­­Åááaܺu+"¢<çŠcšššŠµµµ˜ŸŸ½½½Òî$ ‰•¹¹¹ØÚÚªÒçâƒdL§Ó©Òx’þSµ¬ÙŽÿÇÆÆFܽ{·ú»/&ðjggçbzÿmG»}ÞâM’½Ûí–àÐçDŒÛiñ]¦ Ðávúˆó ƒ"|ŽŸD:¡CÕÉUB]€ €– Ç:I"?Â愳“™!dß8ÂU¨ˆ(›g1ot„yR™‰h¾â E0€ïf, $@"Æoq¢®V1ãÿÜ!aàç`ß:ë$/sºÿ~<òÈ#ÑétÊ#xŒãäxNZ‚ŸÄ$òÜÑçÄ:t†fÜ™#yÉyNÄóÃZ¹§ïL17àODsðÙÙÙØßßotq´ÛíLíìì”ë(Pe<®³2‹_c/æãMHís¡½ƒLl0·iã„']M$THº¸7S<);GÎ…Éc;gJP / @a§Éç¹ÃàÈç°»2Ã=œ„€HÜû¹çž‹›7oe581“œ÷Áœ,ÈN  /ë%û„á3gÉ ,`n-!Yál‚âuÛ)³&èg§Ž XáY}ƒ8’93'`)¯ç‹15ùŸä«ê´ïáÄM+Ú‘ó³³R!rµÜ­<6¤(ó$AEËÝÚÚZi[=;;‹^¯ÓÓÓe—ó^¯Wè†ó‡ædÕQl %÷Æج¬¬g¦ªH…Ê€Jûõõõèv»åù`€;<0šð–O6ºÔï÷cmm-Úívܽ{7–——coo¯ üh ¼ Óésȳ)ÔññùfS¬ykk+Úív<òÈ#±µµ·nÝ*•~thww·Ì½¡µr?vvvŠñ?;;‹¸{÷n,--ÅææfqÆoî%AwïÞ½xùå—cjê|#ÏÛ·oÇááa<õÔSå¹ù“““øÑ~Ãá0®_¿·oߎÍÍÍ¢;›››qxx;;;ñýï?ÞøÆ7ÆÜÜ\looÇòòrÙ©}gg'z½^q~̇*r ‡åQ.;62öç™ì‡z(NNNÊcZ8‹û÷ïÇêêjc¯‚Wo„ÄáMóhû¥ê²»»[ø=ÏÎÎÛbŸxâ‰X___|1"¢è-qÆk×®P†Ü±ÑN·;~ ;æÊU*ônoo¯òp䀠;wîpÎëüÐO·:cÏI,a?Ѫt Þð†7ÄöövìîîÆÓO?½^/ö÷÷ þ»Ž›7oF·ÛW^y¥dÿ_;þ÷o}ë[ãÆñÿðÿ_Oåÿê±°°P’Í«««ñÈ#ÄsÏ=×8Çv—ê4ûÝЙ: bii)ºÝó×f¶Z­ØÜÜ,I:Rúý~éÀ?Gœ'y©þSÇVã«I8DD ˜Ù |qxxXªœØ\ìùÑ:‚xì–[0†ì !lllÄþþ~\x||×®]‹áp[[[ÅßcÃÀz'''¥Âfó&i|1NVÞ½{·ør?îÃ9c‚¯†Ãaìíí•7N‘,oFŒ“~N¼A;coWÓ½gkÇ^çGòÏà/¦™Ë`0h`’ ýh-r»Ýn<M2_áà‘1¡18™wgžé -?"¢tÍ 3ãGcÁæøÔˆ(˜•¤-Æùt],//N Ÿ‰¼sOxf¬Žî0'cŒÁ‘ ó žcãÓY&émÀÒ\¬,--• ™#^u2ÉIbäÎøDZ$DNh€;ˆ‡™ÓðÿíÒ vq7Š»Z ¶ÈúÄø<ÞjµJ!~8É OZGGG#þ1Aóÿf&†ÉË4œ>?gÅ9rEËÿ;ȇ!ÏI®õõù{ŸÇÿÜë‡?üaܸq£<óRÎwßÂÇÍ¿Ý™¯q…ÀA‡y'\2 d›ñ2Ú¸8xg>C3Æt•ÄG^›?"Šc<·æçµ0– ¡ï•éCÅÂï%§K„*ª³ÿ¬Í‡eÅI'˜‹bž3Ÿ€2ÆtÇÃcE9YD†/+~NÈ8qâög·µZçïæÝßßk×®•ö+®³ü‘ aþ6†NDe£i'eÛà5ØÑÚY™§d®1fÐ.b\ÅRYpõŠñÝvÅ}?¦ÂйgýNº1O€ /gjIlø¾œÏ\á‘ù mö½‡Ãæ3ÎÎx“I'èüÚFÖô :Y–8×zMœÐåºüÌ2Á5üoÝaî8pøŽ¼3gì†ÛñOOO£×ëÅììlbÃÉjrnAöz ƼvZ­æ»í»çÁgÐÉ-‰è¶yHUÙÌIcä†kü¬ ëç<û-haßèê2-½ÙŸ9™M0/Y$þ\aA—¬£Ñ(~ðƒÄúúz¬¯¯7ü ü1f­tbkmÓ]™„'Þl‹d1t^€Hº™a[KÞ/ÀÕ9oiÙ‡À ç1™^¯o{ÛÛbzz:ž}öÙÆûr`»#¢Q C.^~ùåhµZ±²²R6÷ÆŽ£gؽáð¼vcc£tÒ!…í"`%!”³F êMàKד7ú£zw»ÝXYY)Õ@?GüÊ+¯9 b}}½¬`nww·$íHʾôÒKqíÚµðþÛ¿ý[ã9ì7nĽ{÷âøø8žxâ‰899‰­­­òýÿ–ã²Î¨×Ž×Ž×Ž×$ØÏ⪣k°1äœYÈA¹!ÀÔÉ>†LÖ€’ÿç|¹ÚÜ:ArŽ1¬/íöÅ}hNå•„¼ä€ÎÌo8–·ˆ°ß ØÀI8'Àœt²=ä|ë@–W>Ëû”8Ém?j¹6V2fðÜrRÞúþn}vb–ñ¸|±ýq…ÙÉs’^ö)Ü“õšNðÅc!ÏøBË?vÓÕãˆ(›¡FãM5[­VÙǵ ¼ËkdL?;ïnÓº£k$-¡9úê®XÖŽ|À5ý¼É/g!_$ÔÐgtƒ„éÞÞ^ÙôÝ1˜ñIV°¯‹4Ž“¼O• Ì ûCÇv ­l‡ò<°¥$´é´€æ.̸KÛ±!:B Žüyo!:6íH`rOâNû Ça¶ïî ‚.ø*:€°§Ì“k׆#Ô ®óá*ǃV0Wb >s€jàø ¿¹gþŒÃNËcòDe£$•óñ}ý»–4aí®êäëó5©yÓÈ ¹6ŸÜ8P¾Û©BÓ´ÙÈš.t3ˆ¤ -€R2ó5¼øzæ˜róW3ÞŽX#?Þ”Šµb¬í”¸Ž€…ƒµbx r 88Ræš)4ÈÁ}w®ªåd€·ŸM48µc†Ær ýtàjZXÇ-_ÉFîg¹¶]çZì³õÞ²‡Ýõ¸¦éešú5®#ð¼ÿ~,..6*Íž—7šB6kJðÐã6mÛŠì7l?"šÏ¦£¸Õ”yšgnöït¿¹mºã[rå sð`Í€KKKl[f¼ÐZ~ü7ï4çžN^âÏ쇤sgG ¿Ù—Á'óºf;ôqX®2Æá{ÛsË£mç1oûdÖ -ÿY2ínë ã ®…vNÞFDédð&~¶›N¸cËÅ'æ€ßF­O>lŒ²¯ËvԶŸÀ¾Í~,ÛÏþÔÿû|:®¸/ö'ÛëŒéÎü<†ãÛðš^0žyo_ê Šó]8rÙDŸÃzÍàöf÷˜ö1ö=|Æ}¬'Ð>_kz8 h;™1sg~%ºééä‘Ç°/qºl{”׎Aì‹øÛ bαM²üXç8‡¢ó¶®Ú†Ã#ÛIÏy6_‘³|ó='ÝȘպd^ ‡ÃèZȳ±S¯ÎLx°I‡¶³Q΢ä À÷Ì@ÐgC ƒ @Yž2 âG£Q Ø!Z/͇lˆ×Öè§u ‡™Ët%ÛZ¯ t+¶uŠë3¯j~†Œ¹÷ ±\äûxž>ß\¦A¶ùv¾¦¢ù` à5ŽFÍÞ9/¦I™ÇÀ½¶î—mJ’ Žm›25Øâ|îW÷gggV~ìAN´0–çõÖ6‹y3®uÏv+ãÛó1ûsÆtr˜Ã À|¾u4Oë…+³Ø³öÑN”yS±ŒEò¹¦›Ï¥boÚ3ìŽ}|–‘œÈ@Úß¡ëæGÖ}ì¤Á¾1jD4lŸeóÜ‘qe¶•¦‰u4ÛÐVküÊ¿ˆñ+¾Tä'0²¯ )Ä\H’›¶-Y&mSŒ_ùZø­-“pçœæ£†yÏsÍ$Ö±¬oT»Ýn£B m'?ºbÛWÃýØó—ÏmýÛ»šM±/1u’œßÌ/ -ßã˜Î|žq{ÍÇú;ó3ûc¯;'ñóÌ#Ûyt)ó4c-ÇS~¤ÎççõÃËlç<žy˜m]Æ'Ö™Z‚<ì®BwûpR˾:Þ. ˜o^»å&Ó;büJnîe;`žfxÿ£ûx,Ƨfôxµçs`Ø3X3ã/;²!ÉÎ%Ï/+µïŸ!ÌÍFòª9ÙHdf9³”+!ÙXÙYZÙÜ:—Á{W™Vÿ>]FKÏÁÎíÆ`µöϬ¤pø|ï ÊÀ¡ÝW*|äļ­­!Óè¿B3§‘ãÌ»¬Ü7Ù xísÉÁf‰–ÏšÎÙÓæhͲ[Ëhf=È÷¯9éüýeç\öyÄÅ@¿vdÇší…yÑÔ‰Lëý.û{ØbîylëÓ¤c’ÎúƒTWÌ“ü›¿¯ºmµŽ)ß3¯óAä‹õ8`¯ÍãAæšïÿ ÷™d‡m¯&éc¶9èaVòº Y-l°õÚ:™yž×ê ÈÁ¶½æK9ÏöÛëÌ>ͶÇàÍùN>r•«ItwðÌ÷ø¡¬ç×æíQ¶ÏµÃ4š”l5­20´ÍÏxì1oüåu€grP•(>}rpn Z«\ºÛȘ©–dôz̳r¢§– E^„º -퀢¦KÐ?'2v°Œf»å¿])4ïùÍzM6Ä×úp÷ý2cAý¬g^7çÑáÏkG~„c’Ÿðõyy ækþeŸ”éf¼Q³]ùÈ<Ê4Éó¬ñÔtω‚ZrÐøÜcx—Ú£yÜ?Û*£ÑÅ 7'[j4ð¹y¾N§tÝ-..^Ö1ÉZ–ø8–„% ¹˜«çrŸì“òõWaÛ…Ë°æƒàËhÆ‚5íû×h—?Ëç]…CñsùóIcåÿ–_[Tþ,ƒ›¼ˆ,H|dz Ùùל|OþÏm-\“xĸµ!t–ÌÄ'@·“ÌëœtävpÏ™qɲ:C˜™k›¹eÑ30ó}ò8—¹ÚâùºM;;hèVã9÷µæù™¯vÌnÃ4e~µ,mžKMά5Ù¬üšáÌsºŒÞµ5ç{×BÖûL³ZUû~’ëɘyÀßjö¢F“Ú\ •/ÕEWر7W'^vø{Û­ ø>ÓäAó§Ó¿£Ûëe.—Ý7I´Í4µÌÕx™P–­ì3óy~”¦¦ ™ÙÆ×ôÀàtM²ìÛvŽFãÄk^ù›ußö‰àÁ~ŒG’X§õÅ¿¤iò3µøñš¯²IxÇ6—ùÔ@Õ$>^†<ž]å5–5P_“ædžf»…¾ç±ñ)ÊÁIm}ö+üŸw1϶~‡ãW7y­y ¬¼1¥“ \ë},rá„ûf{›ýQÆøFë4ÁÉ'XGMþ2m¡“e¶æ¿|ψ‹U|Ó'Ÿë9qÏZG›åˆóm'k<Ëß[n}y‹<šæ¦A­ì5f{Ïg9ðô½3n°¾O²ßy –]Ç#“üºï‘;#}®ífö59åÍ;5šÔt—ßÙFç9×üTîÚ±>å1XGïØ ë&cð¶m¦':ŽóúùÛ1H¶žk.<Öh™yò ˜%ûÌl¿²üÙÖg^ä¹ûúI|˜4ÇF 5æf¢æÏkÿׄ˻×êÌ-ÀÁ‡ÛsVn°ñ9µª”‰H»‘S&rÓà ·_¸Íí1ÙرfºYˆ³svµÈóÈYx, ŽyU£çã´³ñãÞââb ƒ í`cÇìgà·Û«ì™ÛÔÔTlooÇoýÖoÅíÛ·ã=ïyO|üã7½éMg2-C¯“œç$'\“쨲L¸n9®?®ÉÏ “-ÞÛÛ‹ýýýx衇.Ì#Ï-;žllø›Ž ö 0Øã:'TàYv¦™A ¤u fGL¿œX€6–õIYÜ,óÈT¦³õkÒz&9Ìüÿ¤q ®­Ÿ“ˆ“am“ìñeç0'hwzzþNço~ó›qûöíò*½òÌè£>?üp,--Å#Ó8üàõæÍé|~-ak?ë6wÓ7Ë7acN|oz›‡ökÌÉ2Nj“Ž'¬s al€oðÞ>YÆ ¹ý[æƒ æ‘»1rW‹õŠÍþx¯×Ì8ŒÅÚI°rO?_ž[m7í¯¬ÌÉxÊÛNe¿œý>Ÿ¹øhC·ˆŸÙ®aœàzcá\ÄaÜŒ ¡­; <d'ï[â{³9_^gwÌÑö*óúÛ^øžNB9!—q®i㵃[·mWy Ç2]+Àñ7´ív»ÅFf,b‚rR¥–P6ÍI*fÙõ¹Ü›±&½yͲh<ˆýC>³ ×h™é`:Ç2GÎÉ›ofŸœ¼‡XÍÿG¢ÿÞôÖçxÝ–SÓÅÇ$|Qyà?{XÀ¬Œ—µŒ†…¿Ë„õ3™¡:W„ª5 ÿ$\KŽLCù¼ˆæ3|—ƒ*ƒ|­ïmCé{ýW˜a§`ëIíÀ^_.ù‘‰^¯ÇÇÇñ®w½+¾ð…/ÄŸýÙŸÅïüÎï”” R/÷5zCS;ü¼NÿŸ•Õà+ól’NXƳa[XXhtRdG‘ Ùeã0ßùùùjV܆yôûý8;;+í¥ä<†A`äÙÁÖæqq¿ 攇ï—uªvø»<æl‡yÙa•Ç¨ç9{]ù¼IŸû¸ìó‡MI*±»uĸ€Í4°÷ý±§µ–òLãL?ëuÝyÍþ;ûd'\õÁÇØfääÏÍ@1ƒu6–â^­¸Ž]ÌŽŽÊë †Á2—åuÍÌÌ\¢æ©7ÐÊ6߬ƒ€ÐcpEŒ» jŠy‡läJ›÷@ñ£€~ÖÞ¸Âïµq/äÐ-ôG\ܤŒƒ$¼ðæ]9HDÎó½-kÆêW"ÆÕjïjïõçë³É¶ÅcãóMKèëûy_/æÄ\¼Fã›<‡œr‚"'r2:mð•¿³½„¶­Èi탛˜öÃá°ñüu­èƒÎ˜'N¦d^›>Ì ÚäD<`Ì\|â¨%jÉÓ<çZ‡ÿs¼—mÏãp÷3çZ—mŒ}³Žf]ÉkË÷2<à9礉ù‚™tdLÍÏU˜‰qØ°6W³ÿ¸jìÚÿù¸4àI×ÀKÍQ^uäk8l˜-0µñqj†W DhdGfsÖËYmƒ$¯#P>³áÉ Ï# / -Ÿ7ÉŽÂÊÊwÞ½ó2°[Ëeºä±=†ngggÑëõ±šS›d"ÆN ƒ633›››ñüóÏÇë_ÿúøó?ÿóø¥_ú·hJà IDAT¥ø‰Ÿø‰â¨ mP2³!ñ¸þ>¯?ëCδc@œ¤Êô4=,7¦‡_XÓƒ ð ˜jGv–5¾FŒåW– sÌ1¢¾)‘éjyPÛp™œeúx=Ùáf™Í2çûÙùh{<5À›í”ï™iŸï“מyÌ÷¦©³å“hŒüŸÅ·¾õ­øÊW¾³³³ñøãÇ[ßúÖøà?Ï?ÿ|LMMÅááayx§Ó‰[·nÅÍ›7ã}ï{_<õÔSå>سËìnMg8?gÀ’×3‰FqØòJÄ©ù.ßו·IþÎcÛf×>¯—ÁS èÕç¾g¦I͆{-|f÷w—ÑÇòdð…Îçg‚ ŒüÊ&¿Mû˜wÏóÉ<°¬äê£×UãtÍt¦#¿‘í|Ž ¶Ÿœ“»Š2-I¢2G„>~û[ãsÒ“àÎ ªxÌ/ÛDü‚ƒgûlw8 0^ñiÀÐÝN§S^Ê‘ïÇ÷NxãOÓÝÜ‹ˆ ?óë¯X‹iž}$çeû m<žéƽ³\Õ0ß9ȱ«žè úd™ÌüªÙ7Wȳ<»jk]³}æ0?²mö\,óÓÓÓå2ïõ„z|ì‚ïãÃÁ¾dÌͯYf¸'kô«ßjxÕI.Ëu'c}ëCÍ/qí›×ˆžðö 줌 ³2ÿk˜•¹/;¡æùfßìïòlƒóõ©XYY‰Vë¼Bûå/9677ãýï¼ûÝ¼å-±¶¶v!)–íºæ -ìÀYy{Y‹j­¢É÷¾~{{;æææ.¼êÇçúÏÃöÔÓ€Ãòf›á9ÕÆðÿþÌàÖï*Î D>ó†J×6ÞºB yfiµZåÙoÛ=Wí ²‡Ãaìïï7^oæu3Õªü|7þËí \óÍo~3Ö××cii©¼~ͺƜ;N•î2Ë…cë€ -™´½eþÌ£×ë5ü¥± |ónüÞYyÉòÇÆ«ù1/æOÒzœžžF¯×+¯#¶ìd{ÍœîÞ½kkk177×ð ¹PáçÓÁX—«¬|nlà6月‰¿ÚúÄ-·ž£õL³ÐáÀu$%¡}­Í8ƒò,SN¢äëíü7÷³]ȉYë=ßÛØB“Û·oÇÜÜ\ÌÍÍ5Ö]“Ë·1D­ÁøÌÝ5>ÇóqÂúeÌÛjµ<ÊíùÆEÐ"wåd×B_t œÊœ\àÞ~ÈsqͶŸûDŒq´|òyNZ¯¬nÙ>::j¬#ã@o˜gý4Í3>ÎIwß;Ï=cËtÏŸ×ðIÆCþ;ÏÍ<F±··SSS%9o_åD²ýùl¿–¬ß™f–?c¼ÇX¹p˜“@\cNâ[>jX²v>çå„A¶GÙ¿Lú¿6ß<îéëZpÄa"Ö×lè ô/»§³#5 Š`^vŸÚàÇY齃ÌÚ²Àdåôÿ9»1Í9è2H5¸ãz;)ßóA’#̉VMß×ÀcØÏÁ1NÁíÂþÞNÏŽ±r‹Aäht¾¿ÀÍ›7ëüÊW¾¿ð ¿«««eN†šqË ø2Úäĉƒ¡Ë@…w«žtÁ¨Ç«éåÉFzÖ;4º -8²¾y\hãÊÑ$:ù^yÜ|0F-éçy×Ö‘é˜ÑUUŽlÖŽZæœûÙNÕæœ ~æ‘ïãïk÷òhƯ4hÍ™ün··nÝŠ¿üË¿Œ§žz*¶··ãë_ÿz<ýôÓ1ãúõëñîw¿;ŽŽŽâk_ûZܸq#>ò‘Ä;ßùÎxæ™gbee¥úþï±)¹S‰¹2Ïœ ã¾Y²Œc[jIGwYÀΑ«Fæ¡y}•¿Úz:¨¨µ2n­-õ²{×:샜¤µ/Ê`µfÿ3}8w4•ç#=®ób=ÇÇDZ··×Ìjc(4¾·,Õì ú’ß)Ÿ“­V«‘4áÞtÈ0góÁˆ±|°fƒR' óÛlrG­#!t£Ñ(úý~ –j²0 AÄp8ÞƒÇór×rÏœ¸±]¤̽ØÄ’dõÐdƒÁ šœ1ßTÀdÊr¿X[ÆY¶½.û¹lG[­æTÜ?·óçBë£ûÃr“¯?;;‹ƒƒƒ2~ÔÐ+ƯùÁÚÁÜÀvîÆa]9à€9ÈgÐÎ3dÜX‹¿sÂyÈÿ€s_wdÀ¶œ•®EÓÉÁeö¿5›š1ÏͬðëË<0½9ßúY»_–¯Z ‘ùßDó{¿ÛžÕÖžçb¹°O»sçNLOOÇÂÂB±cyÑèæq¢¦fÇs¢°¶^Ï›XÃ]|ŸçoüfùÏ:™“š5]Ìršý–¯÷ø¶­|þ ¸ãÕb“¢ù>µIåA²‚çÁkÎñ2 ng– °ïÇqÈ÷ôy™à50T#l·Û¥¥¥(åÍ`&ѤF œ 눒!ó¹N:ä -†.q™7|158ÄÈfúXq¯Ú¸€ƒ;ºI` âçº „ld§§§ãMozSDŒƒ¢ýèG*Oóóó×|eÃ=I½6Œn¶“¯õÉÁò‘Ç«éS-HÎíPæ_^— þ$Ïòi#hyÌ:fþd:O:#o–V››çb°—é’éYã'ss–·& Ü7—Û@/ƒïj DÓ9¢¾ã0çe›055kkk œ6ÅßÿýßÇýÑÅÏÿüÏÇ_ýÕ_Åg>ó™øÕ_ýÕxó›ßý~?–––âÛßþvüú¯ÿz|ðƒŒ§Ÿ~:fff.tsX''ÙÔL?~“ÿ·]±½¸ ˆFã@ÆIB€a–E®ÉüÍvȈÙ'8ñj€›ù”?Ÿ3_]7ø1}-C“œ{ÖËI>*Q;Ù^ç{³NëM¾§å&ƒM>ã>zäZCóÿçææ.èçÕ’4Þl-ûCË7¯’d|Ö}zz{{{Ñívcnn®±&ÓÉ)Ÿ; ò›lc|÷`rrÓÓÓqzzZuðINå¤.´Á?f”í¢ùg¼ÂšWì£ÝA`wâÄIn^}733S>sPãŠ4÷ö#W¦5GÞ À~ÏÉFNª8(¦2èÇ jòžý­ƒ³«Zï¹vffæB&<–ñv;Þ6×UX:W²î»Â45–cm¾íìü_³WNÜZg-§¾¦Ýny‡¯~sòÁoã,R–KÓŶ%ûxÏ—ï݉Fr™6Ÿllß¹‡åÃëÍ×g™²œø3ËUæ¹NPüá\?Ö”c.ëµÆ9ieš¦È’?ö:á+º“P^—ñwm^¦w S¡¿ÃyÈ–ïá$‘»óL§üÛ4÷ÿþíE¾~Râ÷*û‘éë#óÕÿw ììrkФ!Œö@5£ŸÏÉÈĹŠXt™`µÀÉŽÃë‡Åœœ‡ãvìlø«Vmq°\SÞ¼”†¿]±ãâzWŽÜggŸ+éž¿³¬®œg N„àP'g1ØÀñÜØ‘fy²ÁH4Ò677#â¼½rcc#þéŸþ)¶¶¶bss³ÈÃôôtqxðÛFؼÈr˜ùÃuÌÅ­ah[2 f6lyÜv»]ä ââ†x-¬Õ:l#™×èvLÿΆ´¦sæ­×ÈË9ye[Nmg|xÜ|èc{Rs˜Ö—|oÛ¦ Øk6)Û¾lÌác>7;ùÜÖ–×kƒïûåv9äÏ×rX§¿öµ¯ÅŸüɟĵk×â_ÿõ_css3NOOãÿøãç~îçâøø8Þþö·ÇoþæoÆ3Ï<ëëëÅáYîkëÎkôœ™«ÏÉr˜[0­[5“ižçâ×ÈègÝñ=sÒÈ|²#ÙˆÜhG£æé9yY;2ݬ/¶!Ùx=?5?È9\ǘ7Û%ëkæ2_kâ óÂÿS™½â»1nÕµð<²†7ðÒtp•…õº:g:.//7Æ„6$s§}+Y~ ,³M÷úù p&¹LPÂ÷`—ѨÙB1"Á8–9Ƴs±Þv: {0eyõßÌÁ;¸ŠäLN<ÔtØߔ۟A¿L;Öb[“ñ ²="½¿…ÖQÆÈrÎy®`sùm,›þ»¬™>¶Æ ЙB kw°ÃOÍ.»}ß´Cs2ƺ˜í°m(ô Äضό餘ïÇo'ÅÙ”ÑU`=©áœŒc²ö£=Ãá°$¨k=Ë'rëñM7¯•9ñï•m‡í0úŽLdÿaL†~úÛàŒÝ-Syÿ+>gkcäÄòŸý,Ø7ó?c'岞˜ææ>€s‘_k;n:äX#6²\›¾^íM-n€vØØÑhÜQgl[‹Uòºs2>ZÖø€ L3¡ôÉ`^Pâ5Bå£tN>Ÿê1JêÍ×2(Šˆ†3ÌÀ•ÃÊb2)Éb…3¨É÷Π˜Ìä$…À äMf2hò¼kÊacš3í(³ (ûà`m1†N:ä@§º¹¹?õS?Ÿÿüç㩧žŠ»wïÆøÃxæ™gJ£}í¤jrð GÍI>È5™µÃÎÅÀ&¢ùH-ëô¹f6Ü333177×Ð-;ë È8jëuõªuZvò3Y|Í«áQÖ ù—]_³yÙN]ud`õ ²’Á\íœÚÑétbzz:¾ñoÄ'?ùÉèv»±±±Q6š—_~9ž}öÙøßøøéŸþéØÜÜ,ÁlNòœ^íqÙu–ëËËÎ4'# Ðk2ƒ—IcÄ<s’Ç÷³.è©Àd`èó àøßàÖóB‡jÁ§ÇAÇ<ÔÖq•îzÞ¶žkÒÙ/:aàu8»îlß,§þñ‘ƒYÓ‘£ÖAh˜^–oLV€”@°?÷‘íyÄÅvRì>¾ÑàÍvÁ¿e×,ce_ (·op"– ¹[WÁ³sò*ÝY¦3}éŠ0&ÊArfúr É£ì' Ø¡»ïÅgÆcŒkùs° èL:0c«üè’ñŽéhúÔè•msíóˆñ› à¡qdN”œœÄ`0h<æÁ÷ÈŒ1pDÓxã;*NêMò-–ÑZ@›q¡ùÉ#$¬ÃØšß–s'•Œ=<¿\q@îBŸc¶Ö¥Vëü'’]ŒŸœëñlsrð‹Œ»qM-À¬éHƆ5õš c31OÛ9ÓÊspb-Ëq­Zco|Ø_geYËkÉ ¯Úýóݽh;Èœ,¿rdŸm™¬ñ&ãÓqócyÝ«@N&h­åêªÅÔεÂOú~Ò8ý™¯«}>‰‰>j™EŸ—ïá®j ßÎàxl&+˜•ûªà &g@S£I¾gþ®¶~'lò³· °.oª‚‘@ ¬ØY1rV(>[\\ŒŸüÉŸŒÏþó…7ßýîwãðð°bgs¶4óÒ_tåÀzOj×úïZÀ X¨|;.¾?>>.ï±ÍM-hÅ9‘´bL¯Çú×ɽ&Èš®g£ìó,#ù~“ô8ÿ]ç²ûp®Át¦´š4~^Omþ–ýüsx´œy5>ø@Æ÷¿ÿýøÓ?ýÓ˜››‹ŸýÙŸgŸ}6nݺkkkñ…/|!>üáǯüʯÄ3Ï<ÓÓÓqtttdz\%ã“x’uƇÄ$?ÎͯjÂF1ÿ\­Ê‰µIðeº™íƤµñ~D!_ã1Ð_žS-0Ï€ˆ9äÄ:s7PaÐÍþ½6ÿ¬/öݨfZÙÿ91 hv¯³Þ0ßhÚ6Öø˜eºf[j¶Ü2ãsL#w5Õ‚¬l舣 -ok?;==ݘkîÎ#ñåÄ|^SD4ºù_š+üÇÇÇ1 Š¹mØúFª¶#ðÕ:n9ço߯&C¹ÊæÇv8X“í%A†é o±Æ[îÚDr¦æ;²]'1ɸ~ÌÓöˆk#êh—yê9f»É8옟ý„u7ÓÛkËvÇh¹ëbzzºšC^¡‡»9,#ž¾Ì|2ÍwäÇÅÛߣvø~Æ_Ùç" Ùƺ轞¬+ÐÌúÍg¶á¶ÃžKž¯í¶íõÊI&ž5¼ŸZÖ»Œ;óç¶UÖ‰I‰v'Jlsâ×ßqØÞ˜fÖïŒù.wª@¿´{¶—¹“ÅâNÀz>.’f]„irWš×íó³]r‡x¦ ÿw}C;É !TÍhd…3(p6ÇAY­ 8„šÁãš,°5gëEû3¯#g6” ¤~fnÎF=4gÝóÜÌÀldsFÔç3&J“ÛH=ß|n~æÆÊçk/sòÙH›¦µwv2Á¼ÐÐÚÑ|>: +ì.qþðˆˆ»wïÆÑÑQ¬¬¬\pØ(ªiÍ|sW@v˜>×ô½ÌÀåÃ÷s+®e›yeà’³úæKvrÕY³þf“ùZèx>Çú3 OêÄ°¾Ô>ÏOš»inòÜ\á©%Pl›|¯<´ò÷5çêyÚÞÙ^ÖŸyçµùÞ÷ïß¿ø‹¿ˆÏ}îsñ‹¿ø‹ñÔSOÅÞð†ø—ù—øä'?¿ýÛ¿¿üË¿¯{Ýëâðð0Ë8×Gí3gÝðü¨ ÔÞ1nzLºgípÂ5-?Ãå’ñ¬o™ï¶ æ;¼Ê@–ßÙ³û†,ÿÒ¶÷>ÌÃt–;þ¶=1(És¦<ËdæOÖÉ\ Ëv„s sàÏxN.³Q•[G¡ku è -£ç7)À²Íâ;c ¯fà0Œ+Éæk¥®¾³¶5=ÈÁ[-@åM -Ì¥¦SøQËk`î~ >º Z1> x„ÆzÈ‘ƒhê„X…1qøáqÛÎña;a»‘é–;ÀßûAp¢}þÎUtæŸu1Û?peÿà¹^vd\“¯‡ö@º<<È‘ žA{ÓîmGå–ˆIó°1ÌGÎŽäùºåíAˆ]»÷¯ÎÚ9Hv4^¶Î<Ï Zj3ßë2¾èQ9ä0Oì„1bÍ~k@GàŠßA6:;;‹×½îuñÆ7¾1~ðƒ\xô€¿ 2¼†I<Í ö29Š¸Xm¯¤ÙXú3Ÿ—­eúY™¯âU^Ûµ2²~sdã_Ç?v ™Ná B<çrï\9ÉNçAÓGãyäõ1Î$½ªÑ‰û!ãÜÛûE<Èa{a‡œåÙóÀ±þÝßý]|ìc‹w¼ãñì³ÏÆÌÌL¼ç=ï‰G}4>ñ‰Oć>ô¡X__ƒƒƒ+ùújæš ÎjëŸ$¯vüˆÉüHÕ‚ú9&ÙÓIcÖæ—u£ øœ«‹–¯?'_óû¨ó6ÈÈÀ ’»Ë<¶ÿ®%Ë~À÷á;?ëhÝÊ÷ú¯€èë@ â"¨œtœÖæ褟) ûÃ5è3<àún·3331 ŠÞû:æÜÓs²­°½Ãoº2Ûn·K;½çÅr0@÷ÉèÑLàË]X˜äû9²~qŽŸ­öoh夊ïëÇ5<>2âà†uB£œ`Ë88¢Ùn.u‚ŠkY¸’¹:ð&x£+‹9p­ù3­˜kr{µåÏçY–}­há·£p@gwŸØ&™–Zös§S®rf\™ç˜ñ€ƒ(|Þü/cÐÙÎ>›Ö3æiCNÛívËxÒ±NörÜÀœ˜_ÆI^³e‚ë´Îx8'8œ ¹,¶ÊX?Ë“maîüða9ÍcÔöAp2Ü÷ªÅW¾oî8u¢†…Ìë¼Z¦ë´ˆˆ† És3Ï®òùŒ[»±b–ƒÚaÞvó‡“.àgRöò²#¹õ#g]òBœM¬PµqkBçàª&ìÌ“€W³Þˆæfv“æés"šïpµÃ7Ýr”ƒÓ+i#ê%ÓŒŸšÃã¾€Baãƒa0XAÙp|y-v~^­ÍSSStìííÅööv|ðƒŒÓÓÓøÌg>=ôÐ`ä &󮧓®} 5ËYMÆ °­K5ûŒÁë)kó¿ -T1ŽwgµËÁD¾o¾Öë ²Óä(}Øaø¼L'óôª#ëA­R”ï㶭«œ k̹ Ã§§§×væ{xül³hãÌÉAƒÍééé888ˆ¿ù›¿‰O|âñ¶·½-vww㥗^Š'Ÿ|2¾ð…/Ä;ÞñŽxï{ß³³³1 þSÁíÜI×ÛÎû3ËPnÅ»*øš4ŽýR>ò&h¯öàž¶™ðüAïm}‚‡¾¿ÇðgŒä5gÙtåŠ{YÖM{ËSöØÌÜÞ˜é‘×æïóÏɃ~²|d:e9Ê4³ße®¶/LWú¦§§ ]¬‹™ø„l73YCîr4Ž±O4¼ÿóqÕ^EDÖ3ï;aB`I× ó„ñ2fs²ɺá 3m'0PýmàÛÎuÂÖÉqŸýŠA¶ƒ†,üæþ¹e×táúìçMSÚYOὃN'bè‚däœ@ÏDÆ‘Ö9¯—õ™ÎŒ•m5cyCBó¥Õwªd™v°Ä8È¡»'<'ëuît¬aã'cOë½×”÷[Öpñ$º¡ó5ìä$sÍ 7öƒ0„Îæ…u óÞ²•åЃÚv8ya¹Î:i™}Pl•æǺs‚ †uk6="ëÍvxÒ¦œ¦×™gÙßÕüQ¶WŽY,¯9¾ã3+ýXOD4x> ?dZØÇ/Ú—g?X;Ì÷núÜ,;\‹Ók -èIsxƬDœïLFžø$‚øp Ì½3H1#íè LT3)ÁI„öõ6Ø55éz+uvŒžSÎz®Œia§Ÿ]ÎpB‘¡Ÿ×`'•3‚dÎõÎœ6^Ãáx#¬^¯ßúÖ·âᇎ÷¼ç=ñðñú׿>¦§§K‘ۼÏ)ó×gÐàs&u Øé¢2Èg6Ðvòv 80;kîkb#g¹£=ÚŽÐòhÇâ#W 9rͺ„Ìfºe¹0-"ÆNØÀ.Ë>kît:ÅÁÔl“χ~¶;n9Ã.ù=à5ÙÈtaŽ\c0–é™íLÌÌ‘sl‡á'`ŒW\ŽF£x饗ⳟýl|îsŸ‹7½éMñòË/ÇÜÜ\¬¯¯Ç_ÿõ_ÇG>ò‘ø™Ÿù™òVŽ°0 šáEÞæ™íe¦Oné3ØÌŸ[}ï<_ÓkÜ&ŸÏ³<ø»IÉlË· 5ûOÏ-ÛŽÜ¢ -rõÒºÁÊ6Œ±¡«eØvßëá3Àh-!äuÔædg]†FÈ@N8Z.X?ÉÝìÌçˆ(zËÜYsö‡Ì“*úpx¾q\¯×‹ƒƒƒ˜ššŠ………˜ŸŸ/ó¸´¡ßnõÌþ<Ëœ+Ï c™&ƒÁ Ã ~e:—9·,Ù&ᘓï“íoöMQZÝæ<;;ÛHPZŸ©öZF3x‡Dó­a6æâŠpD46t¢XvhY¯ÙvÛóÇuëŽýlöQ¶Ü‡Öu·þf¾’0¶Ë‹çZ³s¬ÁSXwk '¾˜ÿ;.ð¨úo|øhdjff¦1oËží.?lLèûÏÌÌ”ù°FcëdÞ+2oL¿œ`ÈØò ÄㇿÎyÌ/Û@Û2dŽî -ó1'Jø›×Gf94ݬóþmÛääÅ>YÀ—eÿ oùÛ2n{ï9ºÐi{Á¬ÃŸsd縂ϲüÛîfbº£ó$­Í[ëó°ï„§^Ÿ±]¦·u~.É>˜Ã6.Çþ¼a§|sÔŠé¿9ç¿ãÀÉ(òy&èU÷±g`R»WvnV:žaC1&eh^Í0e€cg0aÁ¬}– [íຠ‡ÃqF‹¹@?Fg_}=sÍAqL*<‡EÅe˲äg‘++Äééi¼øâ‹ñ¥/})Þò–·Ä;ßùÎ899)üË ÆëËÎ&·â1f^o>ì$\¦¦i§Ó‰£££ óà<éà/w"ØùÙqzîN‚`Ìì 9o’\ú³L‹IëÍríÏ.“Ùl”köÚ{ˆÚøÖ•Ì÷ZRÂàÅ6e’Qõ÷™îüŸé›ˆ[óyÖ'œÎíÛ·ãÎ;ñüóÏǧ?ýéØÝÝøÔö)Y IDATqttŸþô§ãøø8vvvâýï¼÷½ï-•Óøªƒu(Ögí`\cà™ÁË$~\vä@»åuF\| ^vÒ“dÇ_&㓾«é ÀI=ÙI»"~¿Lƒ˜\våܾ~ÙwØÎa»,åuûþ9Qˆ³Ë‘l_­oP×€/"b{{;z½^|ï{ß‹ï~÷»1;;ý~?þã?þ#vvvâúõëÑn·ã‰'žˆ'Ÿ|2æçç£ÓéÄc=åÙ]@Ø´#š•OªN Hw»Ýò¬>÷s2Ƽ³¯wR¼Ý>oßçudÙ¾DDé@3TLMM5æÄß~¶ÞÕYV²=vÒðäääB°›i˜'¯k³«É+òñœeÌ-Æ–¶A\“Wf-¯ÞÌض~8)¬OÐÞ kX·yeˇƒÿÜù9yÆ2³rRÆ2„¬åÍ®œÚgºÚmGžòÙ?ZÌ?ÆÌtuÒ†u7xÝ^“ñ´ÇŸä¸Ç`0hüϵ¬× e<~¨ýÃý,›è ‰.Ûܬ{ì£Âyè²åÓkÊ:‚夓ižyÇ]s‡øf’/2}\å_¡1öÆcÔê5|œqL–ÇIÖ óñ‰O”{½ï}ï‹çŸ>úý~¬®®Æ¿øÅxï{ß¿ök¿?öc?Öب(WÐ&ÑÏ ë2óòú²Ð9Ë]K¬Ô‚ô«|‹Ç<==-Õˆšý©ñŽï¯ÒÛ j÷©vêÈ•Á‘×àùzý8sh—il}rÀ_ L/[_^óÎn|–‡ùdlmmÅW¿úÕxÝë^<òH<öØc¥«Ì>ÙÏ|çê)4œæMêl‹­£Ñ¨$ËI ¸Ýß {ûZ:,/³³³%€wPŒŸ±N:ÁG°gÚÛÏg}°ÌptpöÃòâ6hÖhY·Ýà>YF™‰ ‚O¯Çx dŸä¹;I -²ÎMòû­V«‘¼0~.nÆ:ããã¢çÞYžuÚž9±’}¼7]µåä |p×ç`íÆ}®úBW·û{O„LË\l1_²|F4B¦F£Q5ü©±’» ÌßlÃì{ïðY¶ñÖ5ÿmšZíûà—éših?šc›ÌsµûCw]MÂnYŽåMÓ’ƒyæD˜åîôô4Êÿµ#_—çYæü¶Ïû?1ˆ½AIp‰Å)QŠ,Éò’­Ä#r¢8Ž“ó5MӦ׌Ë]3zMÒ¦¹6éµçô’¦i›4ÃqœeGòˆ#¯8’¬=Hš”DŠ¤¸Àb‚~°Ï«¯@%ý½w:IÀï÷Ïø<ã}Þ;QSSƒÝ»wã@ (Ê´áFw>ÉsâëÀ÷ŒæJ†‚,‡eYMsG#ß#ùý2MÉ€ƒ(™?e°NYôon¤pÞç¿çÎúŽËS¾62 ÉúÖ‚ë9²1Ìûà´Ë3_[¾žœOÊËË‹ä½¼? -ÅÍ:|}ˆ.8˜%pŸL&¡ÓénéG¬LD¢häLçE2‰vb±Òé´“*•ª(ÏÇÁ÷™ä“J¥B2™D?^yå|ï{ßk³k×.<ôÐCؾ};ìv;ôz=º»»ñôÓOãÂ… Ø¿?ü~?***àóùÐ×ׇOúÓ¨­­ÅÁƒqøðaX­Ö[Ö—ï'çS¾Î4g™ï¹óÏö;›ÍB¯×սḂӓB¡@*•Ž`žúN¿¡Ïä}晜։‰Ç¹l¢¹òÔ]Ꟃ%<À@´±¾~ó>ê\.'ö–gºpºæ¼Ïo) gK¡P(:NããŽWÊæä•æy:5íñ9§ål6[ÄSÜàýÑšrºà{I8¯ çkú]YY‰,Ë-a7Y¦pýH²n\âz±.äsáz‹h3—Ë¡¼¼ü–wqš§±ð÷‘óË®¹^¦yÉx…cU¾Î4nÞ¯ŒµKÓà™0´öôÇrFpkº9§1¢y~“Çbœ¦i} Kq§§^,ë ->>þ9ý¡L rBÐ{ùºs9Mã£qБÍR -â?YÇÉr™ÏR©ŒF# -…›µŒøšòwðySãö‚Œ­9]R¿¤[ -…‚Ð9|œ²Í%ó7§3nqYÎeœUËùºŽ‘ƒKÜàŽ3nÓÊNej2†å´ÎñG)gc‘@6VäògJR›µÍ» Žd£„ &Îp|Óoçéà@VŽŠ”fô>F“É´©WŽ·RÆA)FÏÊkÊ×B\øqg Wì·kü]Dàœ€KÍ{i¼ô RîùšrPÇßM}rgˆL|¼²P6" ±X GŽA.—ƒÉdÀºººÄõCÄLd •Ú¿ÛÑ0“,ø[SÎp7ÍfkÃA?W‚:®¨N7|øøxŽ{ƒåµäû\ª²*½“§4ѹRÙA ÿûvk(d› ´ÿKãÂV6‚hi®€Qã|SÊH+5;/Öhn28âÆ3ýžö…;ùR©ÆÇÇqéÒ%¼üòËxã7ÐÕ՛͆ÞÞ^h4TUU!ŸÏ£¡¡J¥N§÷Ýw\.WI‡ì#»ùÚ’läó%šäwŠðµ*¥Sè»?†žJõÁ• 7 €ñ£3²ÈÉòǬ×C2Ím¦Gdº$ú#æ@i3ÀÁ2_o9K -¸5›B>?ÊÇÄe+ß²lã{NßSª¥lÈÐ89¸ã†:§}þ[“Õj-ÊŽŠ£œ4æ²²2QX‰Æ¥T*‡±¸¸ˆK—.áܹsø⿈H$‚Ó§Ocnn/¾ø"4 ÚÛÛ±ººŠúúz<ñÄÂoû[ñ~‡Ã²²2lÛ¶ 'NœÀ™3gÉdðä“OÂn·#“É,¾NŠ¢I2ŽÐjµE¿6/ŸÏÃd2 €N}xçgÒIfkµÚ¢ˆ­9w.Ñ8è¼0epz£ì”éý¼NJ&“Ïðsδ.<‹€è—Gqi yD^Æ ô™lðpúàNLnxñ¬CNGÜñÎe#…Æ#¥|l¼¨¢œ¹Å÷YÖÍ|?‰g €ÙlY-¼?¢{žZNkDãàs—õïƒÆFº¯ϧ9ò½ J‡æÆ&9\(ƒ–þÍû'ºãºƒÆGØCvæsšá|/Qh¬\ÿË2™ï‹¼üyz·ìà¦÷R`†;Ja Y?Ȇ³l¤ñïø{‰ÖåÌ -n|Ê'59óƒãc¾†¥œpr+5~þ<õ›ËåN§oÁÀ²^¤¿å@ï“:éÿ|<²㺞Ó>w.ó}ãMv¬”‡¥Æ"ggð½iJÆ\rzÝ +ñ}×—¿“xLÆ€üÝ›^(¿¼•šÄf On´l~è{ù7DXò¢rEnÄìò¦mÖˆPH@‘€(edðu(œäMá -§€ä›_*ÂÎÿÈÄ»x– ˆ¬”—Š›ô;Zg.ädaMï‘=©¥½‹+,Yhq€§T*¡Õj111ãÇã½ï}/B¡ŒF#ð‰O|EŒa4 ˜þ__×RÞ4z†;¬ägH€Ós²!MÊ~O‘øÉdÁ`>Ÿ¯h r„’ƒ¾î¥è³Ô¾qá)Ó ½+$îHجñý :âN½?VŽ”«ìh’ùŽ;›x+Å7·¶²råïãF 5>ÈâHYPS_\Qe2\½z¿ÿýïñ“Ÿüããã""Y]]ÖÖVtvvâøñãˆÅbÐëõAww7î¾ûn¸\®"úÇÊÀRs£qÊ ‚ÛqYÅeäZcîðºÝ3²¥=&ã‰2™ G‘qEò= -Áét -CìvÏ…~¥ž#ú–Yú7ñ¦\LMVÐ| …BQd€ÕÔ8ŸqNv$òþåÈ'}G´Ì£sDTž÷  œ’Î$ÆÏíò4z¾. -…6›í–+¸ø:rÚã@Fƒ`0ˆÿøÇP(XZZB2™DGGª««ÑÔÔ„^xW¯^Å… ðñ¸çž{„‘â÷û±´´„h4ŠÁÁAØl6èt:A7õõõøÆ7¾«ÕŠC‡Ájµ -'_w>¢O¾œŽøoéw<+‚B•J%jÅ€ã êŸÓñ½‹;Ž¸Î žåú•¢µÜñ@}Sº+ÏÌ$D¯×³2Øæiþ¥²¢øñF|"ãîdà†×µÜ!È uîH—HYNr*ã>?ŒÓgüHß⾟v»åååE4ÎÜÈç¼L{Ê#Œ|>²<&9XJÑøJÉ/>ÏRÙV´¿Ô?Ç—2–&YÊ3Gxªµ”e"5ZW9°ÀŽ4~L†^Šîø©?žñÆo<“‹¯ §¢Où]2Î’õ$w¼ñ9É{˃\VR -ÅÍl/í})§ -_9È%7NcG8}äÚ\ÜnfºÊ˜’ã·Íh€;ÄåZ{’\ã™Crö¦¼7¼Úþ™œU,Û4OŽÅJí#_‹?„Gè7›a9Y?”ÂÔÊþæoþæ«|ã©É,ýãÏ—2" a¥ÕjÅYv|Ò|¡eJßÓ³¥Þ-ùûR¿¡Ïe0IïˆF£0E)g›½·”êÍ‹pë5Mü9î0áÑXž®Ã…8@²0%fT*•Èd2â{yíxß41sƒ…ƒr":z–ßcLó” ‘ÓÑ /–ƒ“““ø×ýW@]]R©Î;øÚ×¾†ššš"æ'†×ét·ÌÏσ{zK6¾F2X“Ÿ‘ßþWŽ¹\o¿ý6–——a6›Q(pùòeü×ý²Ù,jjjŠ”³ t¸2,éV(nfFÐxiè9¾·|J).y.¥ÖƒÿŸ§¨É{Á×^·ãïÍ[¥žåÏS£wsGÊŽ¯g)á.y]ùúrzãtL&qõêU¼ð øö·¿ŸÿüçˆD"¨©©B¡€ÅbAWWvïÞÚÚZ¨Õj\¾|Z­ŸùÌgpàÀ˜L&¡£÷É(®ôù8eyBßq0VÊ‘CkÇ"Í‹¾+elò=å€D6^ùsò^®¯¯#“ÉÀl6íשS§pùòeTTT^*//ÇÄľô¥/A¥R¡¦¦¦¨p`)‡§ÕÍhŠ?'}ârX‡ÜX)E·|Må÷—Œœg¹#P8Dóœï¸>’u}W -ÜÐo7;ãÌ dymi\³³³"=_‡¼qà¦P(0>>Ž§Ÿ~¯¿þ:`jj -}}}( -ðz½p:0p8°Ùl˜™™Á`@8Æèè(fffÍfa6›ÑÔÔ„ééi„B!¤Ói\¿~z½---xíµ×àõzÑÔÔTdˆÉk.§ér§7ºJ2Þ½ƒjp™ÉוúZZZ‚Ýn‡Ñhz;"xD¼P¸y„ƒgÐ;œ§ÓiÄb1¨Õj‘NOý“\'€Í4/~üƒgæñuáN¾&\®sÂUœÆ¸ƒ’ó¨Ìcrðˆ¿ƒ?CÎ0Ž×¸þ—åeYÑH´ §Xóµ_^^Fyy9t:]Iǧ¹øžBq3JLû¯ң~hì\^qìÏi@6åõ—u(ñ-í;Ñ€"•ï7Í‹Ë+rÒÈ2¯7·OxFßk¢ÚCY>ËŽzþjô,?ÆCõ©Oá?þã?ðÈ#¥‚ñýáJ >GˆÓ˜Hˆs¯(q’ÏI¾ôüÿ…7ùoJ)?ù9™¾8þCcÙ¬?Óüùÿo·nòüøØägJÉKYyÄb1 ãÕW_Å3Ï<ƒ¹¹9TTT »»@sss8{ö,ŒF#Ο?ÅÅEx½^äóy¼ÿýïÇÃ?ŒÎÎNú(rÀy˜\îËŠ^vbð9КqYZJos#£”¼Û Èü¡&Ó‡¼¶&“ [·nÅ}÷݇cÇŽá‰'ž@cc#t:.^¼ˆ®®.ŒŽŽÂápàî»ï.i²ž >K9GJ‹ÖH–)òº’a!¿O^“Rux€b`Àõ Ñ2}¿ººŠ\.½^‹¾pÙl~ùüÍ+ÑøÑ4ÙY#ƒWyÎ|¼4oºî‹ž•×CÎ( -¸zõ*¾öµ¯áĉ8tèZ[[¡ÓéÐÑÑX,†û·Ccc#Ìf3Ìf3ôz=ìv;*++a0ððÃ#™Lbvvccc˜œœÄ›o¾ £Ñˆªª* á‰'ž€J¥Â§>õ)8NìÙ³Gd•är9^Éh“i€ËT>¾¯ÌÉúÿ†GýkµZ˜L&á&ãšöšŒO>.úžÆÁÁ­Bq³ˆÑ=e¯½öÔj58 0õuâÄ ŒŒŒàþûï‡ßï¿ÅáAýPŸ™LF¤s@Ë‹*•JÔ” µ&Þಛø—Jäuçô';˹|$Ù•ÏçEv_GÙèçs$¾ uãÆ?ýáF.e"QÀ„Ï“æÅ÷ˆx€öŽg]ʼÊuS)ìJã#cQþžšlqZåkË¿§½¤5–Ž²a"&€›6ÿ=ý–2ˆ^e:§çøÒ¸é÷|åùO¯S‘Gþ=w pÌPVV&®Õét¢–wÓïy”ŸÓ’Œ‰W(Êï ×Ü —í+Þ'/´ÈñŒd¼ ë -N§Ôw)Ú•kïpŒOtHÎCÂï$#R©” S¾¿›avNC·sDÓ^q}&ëD™>8öÙ r=FŸQ}4ÙžàúAޣ͚ü^>?Nëô_/¡ÿþïÿþ«œA6›P)x»ÁÑF.//ãÇ?þ12™ qáÂ(•JØíö"/Y© Ê ÎÁ9Ö2Aqs#^Ž¤k4ñ‡†RV‚Á`Q$®og¤ð5+„è;uç -š+¾&²—‰o0g7‚ùûùçôÇgz Ê}ST„Xyy9T*Ξ=‹ÉÉI<÷ÜsP(ؾ};>øÁbnnn·.—KÐ#èó÷óqÓZ‚•ÞC -(ŸÏ#™Lbyy‹‹‹ƒ˜ŸŸG$J¥Byy¹¸&«”ñ/¯­ün%A=GŠ–ÆÉù›ž‘½è2ÍoöÞÛSç­?ÈÓŽü—|lø®_¿Ž#GŽà©§žÂ‘#Gàõzáõz±ºº -£Ñˆ-[¶ ªª -+++âHÈÑ£Ga4ñÞ÷¾‡BCC€[EYžÈÆ»¬è¸'™ï3ß÷RrŽ÷A¿•ÂÛé yÏ8È“çÂßOû”L&a4‹ä€ÍfƒÑhÄw¿û]œ:u -—.]‘#G0==Çã]ïzòù< t:Hq&ƒCÎÒ¥öžëR)YÁe„¥ä.ñ?—+/Ó$çåþezàëÍç(YˆhK×/HeÞàt -…àp8`0n9ºÂ÷@§Ó!ãùçŸÇÓO?·ß~{÷îE8Æ…  ×ëÑÐЀ½{÷Âb±à;ßùúûûñ|øÀ°ÿ~477£²²‹N§>ŸMMMhmmEyy9úûû199 ¯× …B!úL§Óxꩧðø㣢¢Bd5rÀ); [£Å2/Ð%@O† }ÏSàe' íÅÒÒ’¨@Ϧ#g…†ƒPN•ÝÌ¡½¥Lº?ÿó?G4…Á`€Á`@YÙFÒüÇÄ/ùKÄb1´µµÁh4õÉ näÒœxF̓;=8]ðì,î§ßpºã´-Ë®Íh’ÏhW\q¾åÙ²üä67ð8?æóy¤R)KåŒH›Êùo§“B¡øŽsj4G^ÈŽ÷Ç¿™€Öœ0 9>¸Ž!“Gâé·|^ÄCÜH’Œ²ŒåF:7U6©q¹EÏÊ8ŠþæŽSú-ŸÍ…ë¥R‰±±1ôõõ‰[HˆhÍÒétQaU¢ -„ñql¦7¹‘.cN¾‡œ¶ùžq:ç8œ¿—Û -²~¡½%Þ&\It¥T*E1ÓD"!œ­ápÑh‹‹‹ÅÂÂÖ×בH$DvÒyjµååå(++Cyyù-c¤Æå"ÑÙ!¼˜µ<¿RúŽÉ®ûh½eùÁmúœœ6tt¬” à{Í¢›aÉRŽ™Û‹öMžŸŠXŠpd È…,LùKˆIÕj5&&&ðOÿôOøìg? …B—_~ÍÍÍøÜç>‡¶¶6AP\QÊžXî¡¡÷¯¯¯!â6 \* 4>>Ž……d2³X,¨©©R¹Q|M¥R!"“É ‰à÷¿ÿ=Ö××ár¹ V«a·Ûáv»Q]] ŸÏ«Õ*‘{3iÜÀ'/-~¼885Ù!CÌÊ…÷F“"äÄ$;Ud ͯŠ!ÂæûÍçÀû-5&.ðˆáÉÓ)÷_VvójC9¢ÁŸJ¥°²²‚k×®áèÑ£x饗###p8(//ÇóÏ?¯×‹ººº"¦ *¯9O™ãµ8ýox“Áo¼îÕ¥ïd°" -¨®®Æ»Þõ.=z]]]‚>, ñýï{öìAUU\.ôz=T*022‚X,&œ F£ù|:H§Ó°Z­0 ˆÇ㘞žF0Äââ"ÆÆÆ°´´„D"H$‚²²2˜ÍfÔÕÕ¡±±[·nEMM ŒFã-|(š)ÏUŽìpa'¯дGôo¾F²±Äe<—òäryÆéŽÓ9ýÙìw©&ËJþ^>šK6›Åµk×pöìY¼õÖ[xë­·°}ûvTTT@§Ó!“ÉàÒ¥KÐh4¨¬¬ôõõ>ò‘àŸøZ[[QVVVTµZ'|þ4öŠ‚êæýÖ¼ÉëÀå± ˜9P£hÊ2Páýò>6ã¿Rc"ÜL›6 Ø¿?¶oßµZÙÙYLLLà«_ý*¬V+²Ù,._¾ŒcÇŽ¡­­ UUUÂi@ï‰ï ƒ8_H‘ .w9@&ÝÄ÷¢H7—¡¥è˜ëÙ ¡½Š¨¼Ž²ñ@ôGËtY—\ÏrýÄ ‡¢¥hï£ô‡d3SºÿZ¥Rabb¿ùÍoð•¯|uuuÈår¸qãöïßµZááaœ?­­­¨­­ÅOúSÔÕÕÁëõŠc Dßëëë""£T*a4qàÀTWWãßø®\¹‚]»v¡§§ÓÓÓ‚¾.^¼ˆêêj -…[î[§hç?~¾•g>ÐÚPq^ú<•JíOå)³Ôäì¹²:í9‘ÖÖÖD@ë|ÿø¾qšY[[C Àßþíßâë_ÿ:~ùË_⡇‚Ëå¹sçà÷û±ÿ~üþ÷¿Çðð°8¶Dt.;Æh­Ôjõ-wœÓ¿9q ýV6ÂêÌP^ IDAT)ŠÍo  }!¾”k9RÊ ßÐÒžò(¬Œÿhü4®÷ù˜è]däv £üؽ‡g>ÐÞðJꥰñ:? N4Ãa—œ†9—óDg\mf”’ñ[*Û€ph­¹ñNëÅ® -Ågúe'½“}<#T¶)øúqš§¾ù^sù'9îp:8räˆÈRjkkô -…ðÆo`||wß}7º»»Å(’}\¯q9Ê÷‰è?Ãi€ëQÚ7êŸ×á{)ï=?’BÎ z†öI£Ñ N#“É •J! Šã(+++˜žžÆÔÔz{{±°°€––‘ñšÉdàõzÑÜÜ ¥R‰D"ǻ݅B«Õ -£Ñ“ɇÃ!Žg——— »‘ö…Û²,ãVn'Q¶‘¬¯8OsL/ã+îôãkÍeçGîÐâr–c[·ð=’1MÆ·|,ü7*DqÐÀ‰‡/Êf‘<>iŠÀZ,|øÆZ­F8ÆÌÌ vïÞ ÇƒË—/£¶¶N§S- )=º•5)8NtD«««ƒ˜››Ã7pöìY¼ù曃·Œ¶mۻݎûî»kkkÅÛo¿ÙÙÙ’ÏSûà?(ÆMg F#œN'Ìf³ð4QÊ­k:F:ìõz=’É$ -…‚87§×ë‹<Å pb¤õ'¡ÉA$'6¾¼q¥É=¶ü;`9Q‘â wî1å„Gƒϑ¼ƒ+++XYYÁÔÔ.^¼ˆóçÏãܹsøØÇ>†þð‡èïïÇ~ð¸\.\¹r@{{; C‘0¦õ'Zå -\V`2qE@kLÏɹ$ƒw¾î\yr>ŠÏ‘23›Íرcþå_þV«U'º*›Í⩧žÂøø8öîÝ »ÝŽT*…þþ~ÌÏÏoJ·;wîÄÊÊ -öìÙƒ@ €P($Ö˜Z}}½¡Ìž{î9ÔÔÔ ±±ضmêêêD´•œI*Õj5´Z-l6,‹M²Ÿ¯—%òÑy-7Ëv g8 %À&)xùzCN§ü}¥ä}Ï›,üéoš«Z­F,†ÿÑ£GÑÛÛ‹ŠŠ -lÛ¶ ëëëH§ÓX^^ ½¹¹¹\¿þõ¯QQQÏ}îsÂAÔÒÒR8åuäkÃçÄçÆéŸGdº,±+åQ–×F^ÿRà‘¯/$HŸ—Ú¹on$Ñ3ëë먬¬„ÏçÃK/½„îînèt: £££Cœ ïïïµE:::àt:‘N§122¿ßŽŽlÙ²ƒù|ååå°Ùl⶘ååe,--!NC«Õ"›Í"‰ ›ÍÂjµ¢¹¹555°ÙlâŠ"î àF)~ åQyÍe…Ï´œ.y;Ú¥5æ2‹—²Ü”×[#üÜ/×Q|ìcÛo¾‰|ä#8pà ~ñ‹_À`0àÎ;ïÄÀÀìv;:;;±¾~³8"o²þãY_–¢/ÙŽãëÁ/¯#Ñýž²Gim³Ù,B¡æææ011‘‘LLL`rrçÏŸ/šƒR©Ä¡C‡°oß>X­V$“I(•JX,¤Óièõz¸\.h4ŒŒŒàÈ‘#P(hjjÏF( -¸\.ÔÔÔÀl6 [ŒêgPQ¦N»r& —Ëüß|îœïJÙHÜÞu¢Á`r€ä·Ãø>l¦ße¼+ÓàÐxx?òüŠJ.–Ý¥šLDò`iä•ìêêBOO¾ò•¯ àŽ;îÀûÞ÷>LMMáèѣضm›(àäv»a4‘Éd011k×®ann¡PHwä!×h4hkkCmm-‰FFFð»ßýÇ/ZŸÏWäy€ÆÆFá8GYYŒF#~øaá-¼~ý:ÆÇÇ¡V«FEŠô¯~õ+ÀÞ½{qúôiñ®öövTWW£ªª -jµñx\\­’L&±¸¸ˆÉÉILOOã=ïy, ‚Á VVV`2™ÐØ؈ŠŠ -¨Õj hµZhµZTVVÂápÀápˆ# -<Èñ½’›L¼¥€g Rû/g6ÈÂ:›Í -Fã©êkkk‡Ã‡Ã"Ò -…pýúuœ9sׯ_G$ïkkkCuu5FFFÇqåÊø|>|úÓŸ†ÏçÆ91øxyE©ågä9–J¿áÎ u×T^o¾/ògÄœ$H ¯­­‰¼N§C0D6›…Ãá@]]<’É$2™ æææ‹ÅF‘ÏçÑÒÒ" -8äQ'Âk¯½†gŸ}n·[(rV -d\.ÊÊÊ‹Åð /à{ßûôz½ÈHðûýÐét6«««0 hnnFCCvìØ!Š­ýp…ÌéJ©TŠ£Lså*¯§¼|_¸CŠ¿ƒ¸üýô÷’…ÜÉ@ÿç¿åF”B±QüÚµk8}ú4¾óï bÛ¶mسgÌf3&&&0;; ¯×+®µôz½ˆÅbX^^Æg>ó<øàƒ"M9ŸÏ#Ué–×DVò<é+¥Ëk(ƒ+BeÏöíÞu»ÆåÖfÀ–—42’ÉÐå—Ba£€æK/½„ÇC¥Ra``?ûÙÏpï½÷¢­­ •••"rœL&‘ËåpâÄ a,...ââÅ‹›Ž»¹¹+++XXX¸íü°gÏtttˆl‹Å"Œ Nßr¤‰¯“ â¹1CkÆ£dlߎ8ÝÊ€›7Tä&>¹^á{KÏñb»œŽU*"‘N:…/ù˘™™G¾:::à÷û133ƒ¾¾>ŒŽŽ¢»»»wï7Àó”Æ.˹ÑóíííøÄ'>¿ú«¿Bss3,‹_t|®Ôмx0…ÿòsôN¾§ü¾zFƒL&# À­5_JéýRï¡,!àfäZ6èפÃIßû|>lÛ¶ o¼ñ°¶¶& -ÎÌÌ`ff===xñűoß>‘…C -WWW¡×ëáv»a6›EZoYY™¸ñ€gð=ã:ô0Í;™¹\n:8 Ðz’ÎÛÌIO{H}ÉQEjÙlV\Çû"‡*²ðT|Òu‹å–¾é·äð ³ÒÄÓò>sw‚S¶ ÉJ¾¿²^-e’QE*î¨-%㹬‘ùDvDÉßñÌR¾¾|Ïé<’]jßȸß,ëP¶_¸³†øËU¾F\'ò÷ñÀƒZ­Æ–-[ðÀàõ×_Ç׿þu;vL ?þñcË–-0˜žžFCCƒ]$dcSæMàæ-ôAt®‘õ ç.«9ßP –œË™L¡PW®\ÁéÓ§1::Š‘‘èt:ÔÕÕ¡¢¢ýèG¡P(D–J¥‚Á`@yy9R©¶mÛ«ÕŠx<.²´•J% ***ÐÕÕ³ÙŒªª* ŒcvvVd ŽŽ"B«Õ" ­­ 555°ÛíÂáúŠËK¾w2v’m2íÊ‘yêK¦iÙ‰TÊùÊ/Ó!ײ3^Ö§|²C_ž›˜ÿBöf”Átò5AœðhÂkkk0›Íغu+€ /EÓé4ž}öY(•JƒAØívÜyçðûýƒ8~ü8._¾|ËBý¡ær¹`2™„a¹²²‹Å‚B¡€x<Žt:-²¸ÙµkxàlÛ¶ ‰Dsss6RÊN'êëë333hhhцk×®A«Õb``ýýý›ŽËh4"™L¢¢¢GšE__–––Š~CáþýûÑÑѻ݇ËÅ"<ëV«z½^œu'0LBš¼÷œ e°-;Wb¼.7èü\!/FV(lD‡£Ñ(B¡ÆÆÆpñâEôõõa||KKKP©T°Z­xüñÇáñxpñâEh4¬¬¬àܹs˜ššÂÚÚ¾ð…/@¯×ãÀðûý"m‡ÎPq€Ê•)~Ѭì•ãQ9Ržô]©Æ™•{ó¸ÇM$Ì‘` ôâ3gÎàå—_ÆÎ;‹ÅPUU•J…™™8,,,ÁNïñûýÈf³X]]FãÊÊ -Ünw‘`* -¨¬¬D]]”J%"‘2™ ¬V«x<GMM , R©”8°²²›Í§Ó)jlݺUØR©TˆÇãb­z{{qòäIô÷÷£³³S(›Í­V+„)Wt$´IÙÓZò´J…bà MÑ$®ÀHá“æ ‚Ó­=ß#nÔrá2NþœžW©T"µ’À^&“A0µ¾ÿýï žß¶mr¹jjjPWW‡ŽŽÌÍÍazzùüF%gǃGy]]]hjj‚Ãá¬t:-øœ;76sjÈ4(¯çRÆ¢¬ddð ë zß‹R†,'7ìeþás¥ÊÇÇe“Z­ÆéÓ§qøðaTWWcbbÁ`‡†ÕjE8F(B&“Ïç믾 -·Û-Î{G£Q‘©EûËëBÄãq\¿~À†ã‹²uˆf $ X­VX­V âرcP*•¸ï¾ûpèÐ!qË"Y6p#¸ D8MË2¥0à–ŒžFJ´Gï ç¸aÀe(?ê%G\e15~f—h(¾’æ4??Ÿýìgâ*>ŸÏ…b£úÿ¥K— R©H$P__]»v¡¶¶ƒ¡ÈÑK4AºTæ ¾fr -öìÙƒ»ï¾ÇW°€ÉdYOÊúQ”1À/Ú[2.iï©/.÷dZ E{AÙD´žd¸QPƒó"7¹îä¼VVV& S__Þxã 477#Ÿß¨³´´„x<Ž{ï½---xçwÐÛÛ‹S§N€pv% 8ìÚµ [¶lÁ–-[P__/èÑårNÈØH$H&“Âõz½p»Ý¢r>Ñ.ÑeÀðàû´®4'¢½l6 ­V+²FxÑ·õõu‘ÞœL&ÅùíL&ƒX,†ÉÉI±Oñx…ÂFf'¿ŽX«ÕŠ¢”F£QèNÊ"Ç=ç_+?GOsⲟc.¿‰Neãžú'žà©ÝÔ'Oç†4õ%;Ù¹¢cY²¬âgàúŽ ÐþqþáHÆa4>ÎK´fܱÅçËõ"wÀÈYô;2D¹ìãk@öO]]âñ8 -z{{ÑÙÙ‰ƒŠÏðð0.\¸€™™tww£²²:…ÂF6&Øíö¢ã­\¾Ñ~“L಄p! ˆ~òù¼¸vR¡PÇãêê*²Ù,âñ8’É$¢Ñ(¢Ñ¨È¬!,8>>Ž“'OâÚµk±]YY‰`0ˆ¦¦& -Yn6› V«À†ó4‘H`zz -…‘HMMMH§Ó¸pá&&&àv»QWW‡ÊÊJlݺn·±X ׯ_‡Z­ÿùÏãÍ7ßÄ¥K—F ‹¢) â}Z­V)EɈH?7³¶¶‡Ã¦¦&ŒŒŒ@£ÑÀh4Â`0Àl6Ãjµ"‘H`bb:«««¸pá¶oß.ŒQƒÁ€D"B¡€@ €öövär9œ?ããã¸xñ¢kkkhnnÌJ©¢Dkkkâ\¯ÙlFgg' ÕjQSS#î!nhh€ËåB&“ÆÑhD<ǯ~õ+„B!%ƒÁ—Ë›Í&þït:QWWŸÏ' -ÅqO3Ou’•½™¡q7 g:¸W›X6›E&“A:F*•Âôô4ÆÆÆÐßß„B!¡h=¼^/î½÷^ìÛ·ÇŽË/¾ˆúúzD£Q¸\.ìܹSD°ÉB@€¿›þ&’ŸqâLÄ01¿,P73tdæä‰ìd‘•‚ü;$Z­¹\'OžÄ7¿ùMQ`)‰ NÃétB¥R¡¿¿_ÐÍfÃÊÊ -‰L&“8#5;;‹\.­V‹T*%@!¥'BžÆªÓé`·Ûát:‘Íf1;;+Ö»²²n·ù|ÓÓÓÈår" ¶ªª -F£@jµ###"õš@òää$~ô£¡¹¹ííí(++ƒ^¯GMM ***ŠY,ÃÊÊ -"‘4P^¹\F£V«…BF£Q(8ÊÊårP«ÕâÝM-§üÓ~ó;à üОpÁÊé€. åóyÄb1ƒAôôôà•W^Á©S§°´´„¦¦&X,,,,`ii :£££0 hmmE:Æôô4vìØ{ï½õõõ"Íœ”)í9údÞóµLo<]V¦Y™‡9Op…)ï2½Ó;xú3€¥¦Üè]<±T„‹Àý­Õj144„‡zxï{ß‹X,†ÅÅE„Ãa444Àáp âüùó"úo³Ù0>>¿ßššôõõaff&“ID(———Åÿ=°¸¸(Ú©TJð\"‘ã­¬¬„ßïGmm-jjj022‚£Gbnn>ú(êêê`0ŠÎ’AG”dm:.Û´6¥09t8H¤ýåÆ=Ç q‘ËQn¸Óßrª´L“¼Ê5a(ÛèÚµkøÉO~‚£G¢¹¹YDŠkjj`µZ®hjjB µIdž 5åtDï—e3ÉB¡€ªª*8pLJ^¯G4°IÈ8*¥#¸Ó‹!ˆæÆŒì áÎuîácçÆ,í9RSŸœ>xŒŒeÙP“.¯tEí_þå_ØHoN§ÓXYYÓéWõÒµÏjµV«Uè”|>/äþÂÂŽ;†cÇŽ€À`ÍÍÍؾ};P(F‘H$0<<Œ`0ˆP(„X,xàDQG—˯×[”%Iz•7š#­#­F£:+›Íbaa+++ˆÅb"pD5sB¡077'®‘lmm…ÕjÅøø¸¸™Ád2A§ÓA§Ó!•Jaff¹\‹‹‹0 hiiÇ㘶ººõõõðz½Âà£õ§ëJe~¤yð´ñB¡PtL‚ø›ö‘ó57êeç9§'¢9¥R)ÆBã!ýW -/É'ÎoԸ΢±Ž'9Äõ2ÉC*¬&<¥Æ@¿çïäzŠѲž*å0—ñ3Ÿ­«F£Áðð0®\¹øìg? ½^'N`ppõõõEG—ž{î9¼ø⋸÷Þ{QVV&hÐb± ººZdθÝnx½^a÷èt:ᤠc=bjj -ãããˆÅbP*72¬m6²Ù,ÊËËEÆA&“A8ÆÔÔ„ -…àõz‰D°¸¸¥R‰X,†¥¥%FØl6q|±¿¿_ÔÙ¡£¤O?ý4ºººàõz=®­­a~~ƒKKKXXX€ËåB6›ÅÒÒB¡t:¨³B5Èæ°X,¿.--A©T¢±±>Ÿ“““˜œœÄ‘#G044„@ €ªª*TUUÁn· Ç÷IÆK\Îršâ5©x•Û2pÛ‹~+Ó½L·\.ÉÎ+N[\'ÈÎÞ¯Lï||¥sÓnÓx4B6ªøIÑÅb1<ÿüóøÑ~„ÆÆF ayyYM»Ý.Ràé ‡Ïçm£Ñ(†‡‡Ç•••Â0H¥REž­h4ŠT*…ÊÊJØl6Q=Ûb±àúõëX[[ƒÓéDmm-L&fff°´´„±±1Á¬ýýýؾ};q×]w!‰àù矧\.N'® Ìd2EW[P¥Zyy9Ün7‰¦¦¦`2™ËåpíÚ5”——ãÑG‘†H$‚7n`aaAT·Îd2ÐjµH§Óhnn©ÃóóóXXX̾cÇ´··£»»F£uuup»ÝBòâ…<úÀ½³29H"ÁL…:•J pÉdËå„—üwÞÁðð0UUUؾ};€(Xwúôi<òÈ#¸ÿþû¡ÕjqðàAx½^|ÿûßGuu5z{{‘Éd°{÷nøý~èõz‘†I”<,tmˆÉdŒÎ£<‚K -†€E‚ø9ÕBáæY]òþ›Íf¤¹’àüÁ *চQ>¿‘Î}üøqüô§?ìÜÜœptõ÷÷C«Õbjj -À`ÊårÂЧcÉdRdÀÄãq±6…ÂFQ4Rð䀊딗—C«ÕŠ”tŠø+•Å2ÉÉ511µZH$›Í¢Êk6›E.—ƒËåB[[¶lÙ"” y–Ïž=‹ééiìܹS€?½^¹¹9ÌÌ̈*Ó©å§T*%Œ°\.'Š@ƒAQIÜãñ ®®f³Yût …Š-QDŒœpÉŽ3Zfòù<‰„¨í -…pãÆ ŠÌ½^ǃúúzèõzØl6ø|>Q ¤¯¯n·[€ª?ù“?A{{»¨±J¥Ç…ÂQ«ÕH$XZZ‚Ûís A¹ÉŠ‡Ó(ýF>JÀI^ôõõ!™LâêÕ«8qât:¨½RUU«ÕŠÆÆFÜsÏ=Èd28þ<ıŠ€¬®®Âï÷£²²R8Å"‘ˆ -Jy¦³þgÎœÁ‰'PUU…††|øÃÆÊÊ -.^¼ˆ‘‘ŒŒŒ N  b4¡×ëÐ"£Àd29³JEü8 ¬¯¯ceeE"g ñ¢B¡´FFEÁ5¨NNNŠ^øÑh4°Z­"³‡Wi.5FÙ9ÁÇ9;;‹‹/âÂ… øïÿþo€ÏçCuu5Z[[liii÷Þ“ó“ëê¿P(ˆ´ržÉPŠÖÈð£ãLÀF´€ˆ`Ñ휾o0!7ฑ&ës8†^¯‡Ùl.ŠDsÀÊûX]]Åêêª("'KîŒàGθa$W‚ç©ç:çÎÓO> …BŽŽÄãqTP©TâV£G"ÃjµŠLÒ“©T -ápFù±XLÈšk×®áÚµk·ìF£ÇãÅbQ¿ññq ajj -*• -;vìÀ>ðÜu×]?ÝÓš§R)¡Ÿè¨™V«Á’p8ŒÙÙYŒŒŒ`pp§OŸF8.Kkk« ½ŽŽèt:Aÿ™L=ôª««‰DF‹2=èÖ—;wŠÓÉdù|~¿™L/¾ø¢ÈJ¢Ú;&“IÔØ!Úâ¼N´Ã¢ŽMxäØà»t:|>L&ƒÙÙYqã E„U*•ÐY.— .— v»]¤ssœÁu¢7™nK5ÂfÜТŒ*~3ÑõêêjÿðwPv_¾NÔE…9þãüC†é?Â4/Ú ÂÑòïÇÇÇñÝï~¯¾ú*þîïþD__N:…d2‰ýû÷#ŸÏÃçóA§Ó¡³³¿øÅ/ P(N§ñ?ÿó?EkDM¸óÎ;Åñ`r Sd>ŸÏcddDdß8Î[²‹à‰'ž@kk+Ö××qéÒ%ŒŽŽÂn· ½ÓÝÝ-‚¥óóóâx§Á`ÀØØæçça2™PQQ!²€ï¸ã´µµA­VÃëõ" -! - z±Z­Ø±c1??ßýîwèïï‡ÇãÁ‡>ô! `pp;vì€ËåÂää$ÆÆÆÍfá÷û¯...bhhH\ﻺº*dŽ^¯G®5 ü~?:;;Ef+/èÈ÷šœ@Ž r*r®ìÜ’(œö¸!OMv(ñƲÜÈ玺?¦ÿsG0¨¸A~¥¼e2䆥WÐBÅãq<óÌ3øÝï~‡»ï¾ׯ_‡V«Eww7´Z-®\¹‚ÅÅE477czzCCC€ÚÚZX,¸Ýn‘†Ï+ÅF"Q<”õúú:ŒF#***ÄÙùd2 ðûý˜œœ@}iiIœU³Z­8|ø0¢Ñ(pæÌLNNâÑGEgg':::011wÞyz½?ü0ŒF#^~ùeœ:u -þÿMCw»ÝX[[ƒÍfÿøEF,//#‰`~~sss˜ššžð™™Qár~~‡[¶lN§C4Åää$B¡¸m€¼éÛ·oW!E"X­VTVVbË–-8tèÆÇÇ122‚'NàG?úàŽ;î@]]Ø+›Í&"¾TQ?›Í"N Ob*•B>Ÿ`–RÞT*b±˜8—˜H$„÷Ðh4Âãñ`aaCCCðeãÎ IDATx<Èd2ðûý8tèr¹ž~úiQá³³³GŽLOOãìÙ³P«ÕسgÚÚÚ Óé000€ºº:¼ÿýïÇÖ­[‹2ˆ¹ˆ9¹#f}}ápXxü¸°æJ“ xbFŠìPôBü·”šÆÓà8À$ðËSÙ9ß’Z]]ÅñãÇñƒüv»ååå…BB™L&„B!ÁŸtË`0ˆ±Ûí4‰D(¡ -¥z•••ÁétB¡P  þYZZ‚^¯G8â­V‹ÅÅE,//£ºº‡ÝÝÝèííÅüü<\.¦¦¦àñxP]]-ª½’ƒ¬ººD:|*•‚V«Emm-ÞyçÄãq˜Íf!Ä•J%<0.\.—ˆî­­m\a˜N§ÅÚ---amm v»Ñho¿ý¶H;£«fœN'æççFáp8`·ÛáñxDa+ª8ëñxPQQ!œ%ÜkMïËç7Ò^çææ0??/n™œœÄèè¨a¢º¦‹€v.—Cmm-üq8NÁÇN§Sd8—½¹DóD_Ê©^\í“b“y?Ã#ýœö9¸áàRÞh᭔ǿŸ÷ÃûãcPäŒÔjµÐét˜ššÂ?üÃ? ‘HàñLJZ­Æ©S§püøq477C£Ñ```½½½P*•ðz½Â¡811`ÑåõzQ[[ —˳Ù, ûªª*æçç188(Ò×ÖÖ`2™H$°°° Šýåóy,//c~~^T­_\\D[[vìØ…B!ôÄsÏ=‡ÍZGGöíÛ‡]»v ƒ€dérJQ&ÂÂÂæçç111P($"C“““Â!577³ÙŒ+W®À`0 ººZd¸\.,// ^ …BÂY¢R©ÐÖÖ‡Ã!Œ2‹Å‚@ «Õ*"¾¤»)J·B¡ ²{¨0æÈÈ~ü〢ñxƒƒƒ°Ùlâ(ŒF£Éd‚Õj-™ÚÏMœF)Ú'Gô˜Ñm d´sÓd2 G"9NeƒBŽñsü<òO²(®ÀùÏb±ÊGæ¹QÂù€ŒqšOw¦>¸s„@$UÖÜn·À3¯½ö®^½ -Ç#"öSSSb¿oܸBaã(¨ÏçƒV«…Ýng†ßxã"ž£è!9o(€Bõ;(‹Å022‚²²2qýáòò2FQ__/2<ˆŠŠ -iÍd2hjjYqÍçóèïïÇðð0êëëEôV£ÑÀb±‡Ï#Œ ßÂtª1DΑÉÉIM#‘¦§§±²²"öŒèfÿþýƒxíµ×ÐÙÙ‰úúzTWW£½½µµµBG ‘Lk(;-¹žàµx )2¸8¦£l¹ú=ñ òíËŽâ-ú·ì@¡>å,ê—d„CGFFðÍo~½½½øЇ>„@ €x<.ê†Ýÿý¨¯¯G>ŸÇ¹sçàp8°sçNœøÁÂ`0 §§o¿ý6¶nÝŠ×_7nÜë·¶¶†úúztvvŠÏ€ˆœS¦ò¹sçPVV†††ø|>1ÏŠŠ -q´˜ø;cëÖ­hiiA2™ÄÂÂt:jkká÷ûáõzQQQ|>H$"ä³ÓéDKK ,‹pS tddû÷ï‡Ãá@"‘YÁ©T ->Ÿ*• -0›ÍˆÅbp:ÂAnµZE`%‘Hˆ -ev* -˜L&d³YÌÌÌ`yyV« عs'GQRN³D|¿ù‘!¹X1Ï¢‘1Ç[¥ ¥pÑñÇ?Ü>—i–¾—ÛfÁz™lðó‰Ë ÁŸ“=JåÆ9‘#GŽà™gžÁáljDD¤8›Íbyy¯¾ú*àv»Eú.¼óóó‚ «ªªF…q<66&Îùùý~X,$“IQ¹œ -‘7mmM¤i& Š%Àâv»Q[[‹7nˆ>ÇÆÆPUU…~ô£xöÙg…—´¢¢;vì@<G,g¹–——1::*ÎœRdŠ -ø‘CƒRä©@…×ëÅôô4ž}öYqÅ`>ŸÇââ"¦§§±¼¼Œ={öˆô6—Ë…|~ãÞØÎÎN¡¸m6›ˆ•——ãàÁƒ°Ùl¸pá~ö³ŸÝ²ù"ýÈn·#c||…ÂÍH7);J­Öjµ…B˜œœéKcccâhF"‘@]]º»»ÇqâÄ ÍXZZÂúú:z{{ÑÞÞ.">V«§OŸÆ/ùKüéŸþ)ª««qáÂ$“I|éK_Â{Þó!œx=~VŒŸC¥£”:Í€35g*îã€PfhÞOÏ£ïJ1ÿ­l´À¥K—ðÔSO :¡ý'Ï7¥uQaHƒÁ "ž;vì@GGÖÖÖpùòeq¥é#Oa"‘€N§‚"ýTA¡P`nn¹\ ¸óÎ;±}ûva8кÃn·‹B\/¾ø"FFF°¼¼ŒíÛ·£¶¶VÐÂòò2nܸ!öC§Ó!‹!N‹(<íI&“"ê@Æñteeeѹ5Š¾Ñ@N³Ù —Ë…ÙÙYD"øý~$“ID" -qw÷ââ"´Z­p€ÄãqŒŒŒˆ,•êêja´ÌÌ̈}T«ÕhkkC$ÁØØ€£>n·*•JT•Ïd2Èd2X\\üìóù@T,÷ûýؽ{7öìÙ#Ø-òH Éêòòrá¸ãF?ÿýŸš¬8ÍÊu™†‰ÆIQr%Å îT# ÅÁÞí"¥@éT6Þ‡œJ4 @D_{í5ôôô ££CCCصkººº0;;‹D"!Ò#Óé4|>ü~?4 ¦¦¦ðîw¿ûöíC>¿qÔå…^Àêê*ìv;šššDÍ2ÐÍ)•Jqß3Cðx<âÛíF0D:F8Æ·¾õ-Üu×]¨ªªÂÚÚ*++ññëë똟ŸÇÔÔ”˜+eSåóy B©T¢©© ™Lããã°X,¢VA"‘ÙX###‡Ãhiiõ@"‘´Z-êþ÷z<Z{öìÙÁ`555XZZB?<ˆ{ï½étçÏŸÇúú:êêê`±X0==W_}+++èììD(Ža½^/ï”9@Î?N'Šâ¾üòËÂÙ_[[+ä‡Õj ›Í†]»v ž·X,EZŽa8/AAz‚»Dwd¤%›ÍÂ`0ˆhÿÂÂÆÆÆ°{÷nQÑžú’2ŸÈYœÈAMßQ…|¥wnÐïd>#¤ÏÈñÍùˆë=>fú?#òäI|ò“ŸDee%öîÝ ‹Å‚ÑÑQ$ ±†jµo¾ù¦XW‡Ã!¢ÆT¯D¥R¡¾¾]]]0èééÁÉ“'¡T*…cuuuUè-ºœjËÐ:Óq0ºZŒKv:Bf«Õj±o¤O)C®ººV«±XLdÂÔÕÕáÀ‚ÕjÇ+§¦¦péÒ%ìܹÛ¶mC,É'àóù`4±¸¸ˆááa‹GGG‹Å°ººŠ©©)q«Tmm-Z[[áp8°²²"ƒÓÓÓ…Bâÿ"}ÉdÐÓÓ#ª “qµeËTTTˆPÜH °f2™Äää$’ɤ¶­¬¬`ll W¯^…Ãá™—@@œå>sæ ²Ù,ÚÚÚ`4q×]w¡¥¥¯¿þ:‰NŸ>'Nà±ÇÃc=†={öˆo2vâ‘D÷ä“‹íqgzŸSÆ®LÇ¥‚—œwd§6?ÆʳaxöõË3b¹“@Žê*•J„B!üô§?E(Âc=†­[·b}}===¸Àáp`ii ãã㘜œø§··µµµèîîÆ{Þó¸\.är9œ:u -W¯^…ËåÂc=†®®.œ:u -:÷Üs -… irÀF"a<¸‹²Èzzzðæ›o"—Ë¡¹¹Yè‘òòrLLL ™Lb}}]…†††‰DPUU…öövÌÏÏcttTÐàõë×qþüyìÚµKØR¼€e,Ãàà jkk±cÇð LgÊôš››Ã™3g R©D6·ÓéõÜèO"‘€J¥««« «««˜››Ãââ¢8¦Dz'ãÌ™3ؾ}»¨gÅk÷p9Êe­l„ó` -Ç]r NCr&æÛdš¦¬Â?œ¹ÃqT)|§âð—È °”aC¿á/V*7îpá…ðë_ÿ­­­H&“C(BCCÞxã ¼õÖ[èééÍf 6—Ëall N§ûöíƒËåÂÚÚš00šššàñx°sçN\¸p×®]C<ÞAò‘888(ÒñEJe¤R)$ LNN¢«« @ -ÅÆyèt:·ß~[d»ví·¾õ-\¾|_þò—QSS¿ß¾¾>qwôôô4ÆÇÇñÒK/Áb± ¿¿åååèêêJ‡Œ––LNNÂçóáÝï~7êêêD5ãááaŒ ðÔ×ׇƒbÿþý¢ðÔôô4€ £¿¢¢“““8{ö,š››ÑØØ(RÔèxE{{»pŽ¢‡Ã˜››C{{;öîÝ‹|>©©)„ÃaÌÏÏcrrñxÁ`@@¤ˆQd?™L" ¥T[[+@5„±±1¬®®â…^€J¥ÂDÿdpÕÔÔ ¿¿:Z­ׯ_ÇÖ­[ñàƒÂëõ -??dÅX8ˆ¡: „QZ*eG¦sꃞ/å ãç©7krŠ{é=333xå•WÄûfgg‘N§¡P(DÑHš X,†B¡ Ž ¸ÝnD"\½z>ŸO¹`0(a”>IžKJɧÔLµZ@ €ÚÚZ¨T*X,,//caaAxá½^¯XË|>ûï¿wÝu—HÑ'°ÖÖÖ¿ß“'OâüùóP*•ðûý˜››Ã¹sçP(Dd{äɱ¡TnA¡Ôw:3ÏMÔT×£P(àÊ•+H¥RhiiA8F< -©¢¢ H¥RX^^ªCF±wï^Üu×]X__ÇÄÄ„p9N8d³YTVVbqqgÎœÁ3Ï<`#úüàƒÂáp “Ɉ£rT'æÑG…ÉdÂÜÜ&''F‰DpåÊÄãqq“GuuµpF444ˆ"©$7Ö××188ˆX,†Ç{L“‹Åb(++Ccc#ŒF#VWWqß}÷‰›Ö×בJ¥Dž -:µ··cç΀ÁÁAœ;wÃÃÃEF¢F£AGGfffn¹®Ôb± ¦¦¹\‘HD¬g<Çìì,î¾ûn8p­­­¢¹QçôÁ ×ðT^NëœvÉ9LY:ä” ðKŽbÒ#Üh§Æu‘BM´Í&§}9rD)µ¤‡¸d-×-Ä«4:²Á³ ¸qÃÇÀÇÁ³$z{{ñ×ý×"#•JÁb±Àáp N#‘HýHGÅ('‹‰çr9ÌÏÏ‹4à@ €mÛ¶!ãâÅ‹"Ó-‹#3”™C`—2ÇPAirrÏÎÎbfff³óó󨬬¿×étÐh4ÂÙE€ßh4¢¼¼\dÅb1‘Ö¯V«a³Ù ×ëñÐC¡¹¹ ¸~ý::$ŽÝÕÕÕaçÎèììDcc£8ΧP(ÄqLÊ®¤Ân333ˆD"¨©©×ëE"‘@<g«) “œ!ápXó¸q㦧§a±XPWW‡²²²¢ì5’Gkkk"ËàòåË8uêŒF£(šyðàA444 ºº*• -µµµØ·oŸ8‚ØÒңшW_}™L&“ SSS"[¯×Ãét"ŸÏchhŸÿüçñä“Oâðá說ãÉP—SìyÍnhqZ$z&^àFeæ'Þ•õ ç â1ž¥ÀùžhŸœÝrýY^ð>h.‹‹‹8räÒé4þìÏþL._¾Œ .ˆ¾/\¸€òòr\¹r?üáÑÚÚ*êA544ˆZH~¿_¬ÁÖ­[1;;‹cÇŽáðáÃزe &&&DÚ¿Á`@2™‰žžÌÌÌ ¼¼ííí"õ3NÃjµÂív#•J¡ªª -õõõ¸zõ*ÆÇÇE–ÎÀ“×xii ½½½‡ÃXYYAEE…8û«T*±²²¿ß––èõzá5W«ÕEOO”­àõzEeù¾¾>¼óÎ;âºÊÊJ´´´@©TbllL\…822‚D"FƒúúzÔÕý?ÆÞ<¸­ó:~p‚$Hb# î$¸‰%KÖjk©,Ëjìd;ÿѤÍ4ÓL›ÌtÒf:™¶3étÒiÝÔ§mâ$JÅK[²%/’hŠ¢J⾂ H‚ØH‚;¾?èsòò–Î÷»3‰pïðž÷œóœç<ÇÁAð¡C‡àp8°µµ·ÛÍTW‹Å‚“'O¢££ÇŽã~ö}ûöááÇdJöùóçÑÖÖ†––˜L&&HO@Ü„éÿbÀC‹_ì[__ß‘‰È/"­RJ÷¡ÀB .)Ø Q´)X Ý(ÄJöòò2®]»†«W¯Ân·3Þï÷#??Ÿ,JB ¶¶¶‹ÅŸŸÏ›ºÇãÁÆÆöhE¢/..bmm iiÛ -æ4f%Ãf³1ðüµŒÇãÈÊÊÂêê*"‘T*«®:Ž=¦«««ÈÏχÅba%ÛÍÍM˜L&X,”••±0Ìââ"‘žž¾#±¡ž~¢ûý~¤§ošŸŸ‡R©d‡C½[äÔ¨ŠRUUÅtgê]KKKCAA -ÊË˹G? -Áï÷cmm 6›«è -…f³rù¶nI<GZZ÷…ggg#àÞ½{(//ÇþýûQZZŠúúz,..bnnŽAj§‘ÉdèîîÆúú:¾õ­oaÏž=œôS@$MìÅ5#&½"ý’qí‰Á ChI׬ø»Ô‰íæ`¶¶þ FÙH£ïE¼·Ý®»[ &ývs^2™ŒY¹\Ž`0ˆú§BZZ\.ŠŠŠ0<<Œ«W¯Âétbccƒ+D)ŒÅbƒ<ºÕd2á£>âÄB©TÂf³¡«« ¡Pˆ{x©–èÉrù¶f ë‡MMMÐh4Ľ{÷ðÉ'Ÿ ­­íV­V£®®uuuƒðöÛo£ªªŠÛiÄ0™LÐjµ,F™™ãp8L&9q‡Ã\%]^^æ1†tŽx<N…B™™ Àd2a``ï½÷Z[[ÑÖÖÆ:=‡ÂÚÚÚÛÛ Yßeeeééé<Å"++ ³³³¬Cl¥­­m]•¬¬,TVVâôéÓðûý¬â?99Éš3±XŒƒ®ÚÚZ477³J|mm-ôz=ïU´Öh]Ò!]7R ‰ìŽÎ!&Õ2™lG+#‰îíßjµB­V3˜ ²bÈÈVéÜ”ÄÐè¾¥¬3,¤Z5båQ¼%+¢8)K¨‚)µy²#Q0ØPæææðúë¯cee6›Ù+>DQQÑŽdŠSRÀÜl6C£ÑpRàõz™UF•mj /¶Ä½œÆ Òç“H$øzÔâ–‘‘Á ;°=­iuuN§N§ëëë*** ·ÛÒÒR<÷Üs¬¹ÑÕÕ…¹¹9ÔÔÔ ´´KKK˜™™ÁØØ&&&°gÏTUUA.—c``ííí¨©©áqãJ¥’‹´Ä5#Æ=â^º[Q…âibþy…ÑwH÷iiaHŒ±Äu+õƒd7Òckk Šï~÷»ÿ .pz¡4ØûrèFé$bPÚÓÓƒ‹/2ý„ú£Ñ(£º„l–––rï×ÆÆöïߧžz -yyy¸sçÞyç¦VE£QôôôàÃ?d”˜PáX,†ééi”——ãäÉ“Ø¿?Ž9‚³gÏ¢¥¥…Èèè(nݺ»ÝŽ/}éK8pàZ[[QYYÉÁ %'¤Fi0ØÉåÛã -õz=–––pÿþ}Û•ø’’Øívžñ¹±±G!==GZ¤¥¥!//6› ………(//ÇÊÊ -fgga±X`µZQRR—Ë…ÚÚZ8NÔÔÔÀd2amm ápJ¥’{…£Ñ(æççwô‹ÐT€@ €ëׯsÏtqq1S¿ITzõ, L&fgg111ÁbŒõõõhjjBAAVWWá÷ûáp8ÐÖÖ†ÖÖVž£M‰ÌÍÍ!ó|f½^ÏBŒ+++ˆÅbhhhÀÓO?óçÏ㩧žbÑúì(¸ ‹’ ©s‘dqî=€=AÒj¢è<è"°@†/nübÒ%}® R +þ@‰ôôtLMMáµ×^ÛAý+;³³³ÐétØÜÜ„Á`€L&ã@’ÚN¨WŠ6g¢%R.—3ËÅd2¡  6› 'Nœàj…ÏçC8ÆÍ›7y²…8†‰út©*—J¥˜ÞOã -÷DÛ ]0d@Œª¥¸L¡PðÄZ£4Õ`ss[¼‘’1¢ÙËårN8ìv;vzQÕcyyyGµˆœóÚÚ - ¡Ñh‰D––FÃU|Ò  ?//ûL ¸1ÈË˃R©„F£ÝnG]]d2 ÆÉår|ó›ßÄ_üÅ_`ïÞ½,öGÕ'ÚG¥Õy1™÷`q3'LñqZgâZ"ú—ž»[’/>&Ú…t=ÿ1„[¼òdWÒóKqºéߥסsÊdÛ”Ç>øñxuuu|zÿDA¦õDà)µ©Õj$“IÔ××3Pü駟ò#ÚKJJ˜ID“dòóóáp8x  Ýngš~"‘àqŽeeeX\\D?¦§§ ÑÝÝÍÕúúzÔÕÕ±Â<Ù¼Xe'ƵôPÿu*µ=###V«=öŽ;†òòrÃh4ò¤Jôü~?÷?xð€“@•J…ÙÙYLOO#++‹iþÄØR*•Ì XXXÀµk׸ºKš >Ÿ>Ÿ(**‚Ýn‡^¯Çøø8FGGÑÐЀ¢¢" þüR©†‡‡¸P«Õ8uêž|òIÔÖÖ2ÓG -}^…N¤¤ ’týIí@ºÛ·o£½½6› ~¿_þò—±wïÞýŸîE iÝS|$&¢“½Ò=ãb®Ï³zŸÉd’׶ؾF?bp(îbÕ”î—üÑÍ›7ñÃþv»z²#z¯¢î€Vnll ??Z­‹‹‹lt¦3 IDAT/kkk°X,Ðh4˜œœäx†Ú. -ƒ§”lNèÞ¨ZGÓ`ÖÖÖ°²²Âchp»¤ÃáàÖ´ÙÙYŒ!•J¡¤¤„Y`999¬EáõzüJ¥¶§ØÜ»wÝÝÝÜÊ@SCH×errãããÉd(..FQQÓùi„tnn.O äÄô(A"†„L&c-úlü~?ŒF#œN'·¶& FrLY\\ŒŠŠ -F¾?òoT½7 LC'`=;;›µh=*•Jäääðë322››Ëñ ƒA¨Õj|éK_‚J¥Â·¿ýmØl68¶%±ª*®1‘¡ïú­k‘¢/R ‰ÙCì@œ}…M¼gѾd2ÙÿÛúÈÀĪ]hssSSSxã7àñxPPP€x<Ž@¡Ppÿ UJ(8§¾|‡Ãh4Š·ß~›{Õj5Ün7oÊN§õõõÐét˜™™A à îܹs8}ú4JJJ¸‚·¸¸ˆO>ù999,^vðàAÄãqFÌh¼ Ñï÷d•™T—µZ-««ûý~( -Øív,.."£«« ¸JSXXˆ§žz -kkk<æ«¿¿=<ýôÓ8zô( úºMèœR©Dkk+¹’$“ÉPYY ûgT{JP¨µ¹¹‰p8Œ‰‰ ØíÛ*Õ2Ùöd†[·náÙgŸEqq1ÚÛÛ1;; ¹\Ž×_/¼ð¬V+–––àñxXi<77---(++Ã;#‹/òªp¬®®Âëõ2Hxá777C«Õ¢©©‰?CêY¥Qm´@IØK¬pR•ƒ‚?ªî‹ ýóª…"²K}†â¹¥É×nÿÒãtTßÍàÅCÊPß %æiiixòÉ'9§Ïsyyy‡z5Uö(‰Áââ"ª««a4199‰X,ƽ£‰Dl;±œœ¦ää(;;›‘ø¦¦&¬¯¯£³³yyy¬äKA1‚¦¦¦0>>Žœœ¬¬¬`mm­oê]__‡ÑhÄñãÇ™¹CÀÝÄÄîÞ½ËTOÒ·…B<†‡”vi< ²‘íôõõÁh42HFÁGZZÿ-™L2Û€tˆ¥Çát:ÑßßÌÌL<ñĨ««ã -'}6R'"»­kñ ;!G1 Ú-¡ÞíÜâA•щü¿,îFÛíHÿ˜ÍÐó 5ÿcŸý}kk[‚*R¡Pn·›«2Äš¡jQ¼N'W·è3p¹\<¦§§©TŠ•–777¹"ì÷ûy¿¦þLª -äå塱±µµµ Ð:oooÇÐÐŽ?Žêêj$“I abbZ­ÍÍͨ­­Åìì,.]º•J…3gÎpÇ™’ÿ“ŸüÃÃÃ<Ùfmm«GÉdãããHOOg±ÉP(„¥¥%28³ÙŒááa|üñÇX\\Äøø8´Z-æææP]]ºº:äæærõ(--Yd@¥¥¥ÜîõÁðw“žžFƒ‚‚FØívîÉÖjµ¼†›ššP__cÇŽauuÃÃøsçžþyœ>}f³™ƒ7ÚCÅ`†’zl7Ö—¸fhÏ+-tHþ’ª¨4n¬¢¢XÙ_znñ_éA6 í5.©~ïÙŒ˜üˆ¦ÔÞ¤ }*‹ R2™d6%%‡´¾IÍŸ(¼( -fQ0N ð•+W€‹ r¹6› P(¶õz"‘ÞÔ:€Û HÂØ$:F-ZcÎÏϳ ŸV«åâUÙWVVððáC<|øeeexöÙgQWW‡üü|Øl6ô÷÷ckk ÕÕÕðx<¸~ý:ŒF#ÊËË‘H$píÚ5ìÝ»åååX__‡Á`À±cÇøýSEàDM^^^ƧŸ~Ê­44ÆÖb±@¥RñX_‡Ã²²2¸ÝnŒ£ººµµµX__G Àýû÷¡Ñh¸÷9;;eee˜ŸŸ‡Ûí†ÑhD8ÆÔÔòòòXä7??f³™ U”ÜP âµµµ¡¢¢ûöíÃÂÂÂá0;f½^½^ŸÏFÃMô³µµ­îm0`6›Yí}uu¡Pˆ« ~¿KKK0™La¡´¬¬,X,î‡$uö‰‰ üêW¿Â—¿üe”••í±Ä¤[ ØÅ=x7Ú–˜øÐZ“²tˆõÝtĽ\d·ˆÕ{z|·JÝ«”ž,>ŸìY¤zJé½KõÝPs:¯\.‡R©DCCÂá0ψŸššb–„ØjB*ÚT]3™L(,,„\.ÇÊÊ -ÆÇÇ™Š¸¹¹‰ÎÎN¨Õj^›À¶ðäÉ“'‘h4Šd2 ŸÏ‡àôéÓhnn†N§ãi$ÊJ´ê¡¡!x<´´´ ¦¦555xûí·ñ·û·(++ÃK/½Ä -ߟ~ú)¾öµ¯Áh4âæÍ›<iÏž=øÊW¾‚ëׯ£¿¿Ÿé¨CCCèééa¿UXXÈL2Rœ¦QƒÕÕÕÐh4p»ÝP«Õp¹\ø⿈d2‰ Ø?kK"`„FðÒôZW*• -wïÞeñ5Òža±²îînôöö²¸nAA²³³‘H$‰D¸Ê588ˆ™™îK]XX౦”‹8ç"}}·5*ú3± -(íǧ=ö(|¢Ñ(Î;‡²²2öYbP%e•‰çíŒl_\ß”à¨@ °x.±ªIïüí~-’¯¡ñó {þPà?ÓÕÕU®‚mmmkÿ¨T*Ö¤Y[[c1IŠéÐ%fÿGlÁÞÞ^LOO³€XQQ÷F3”€*Ðz£Ï‘کȇw€4Ä4¨¨¨€×ë…Ûí†ÛíFEEŠ‹‹a6›YÈo||~¿·nÝâ~|U¾rå - - ÑÚÚŠªª*^‹===ÈÏχßïÇ78~¥©.ÄzôûýH$,ðJ:6› óóó¸~ý:~ÿûßcdd8\YYÁ£Gðüóϳ¨Ûïÿ{ÀSO=…ÌÌL|üñÇP©Tø¾Àà¼\.G,ƒV«å™ë4B2@&“¡¶¶–ÛÐèû²Z­œhJ“kq-ÛÌR«ÕÊ¢oEEE¸rå -|>òóó¹8²°°µZÆÆFüó?ÿ3ŒF#žþy7ÄÞ²AZëÄ”¡Dü—ÔO‰lO…BÁ q ÿ*î "È&Ƥ­rR@\ÜKÄŽâ»……x½^n/¤÷BLMul·ÛY„^G£amíÉÉItuu!''‡ÙŸÉd.\àVbe x½^x<¶“É$ç=³³³vsssÐjµ<;´££gÏžecœ˜˜@uu5œN'Š‹‹1==‰‰ „B!LLL`~~žÕDe2«ÏZ­V=zûöíƒÉd‚F£ÙlæéƒgXSo­±ÿR:JC¤‰­9š5K•éÆOF@ÉÿÖÖ±d$¢C¡uM÷BNB¬lR€A€ˆÖ‰Á£˜œ‰ïIšPÑëƒÁ :;;€+ð4~‡Þ!æ4α‚‚X­V¤¥¥! -±@ }ÖD\ZZâóÑ(«ééiø|>dff¢ºº¥¥¥Ðh4ü$ ÌÌÌ`mm V«z½áp2™ «««œ„ÓŒûŠŠ -´´´ ¢¢yyy¬:KãÜÜ <¦R)øhƒ&"­ ö´X,ÜSIJÿ‰Dõõõ(++c[$Ñ3£ÑÈAžÙlFII –––022‚T*Ž›@R`j·Û±¶¶Æjît?¤—@ë~cc•••8pàR©¦§§a³ÙÐØØÈ&©úÒ´“wÞyÑhf³¹¹¹¼Óž+‚»%ÔÒêýTuwc°ˆÏ«€RCŽô¹ÒÄHŠ$ïHíö>¤Uñý‹À²˜‰÷'½¦øþ(ˆÃéÓ§ÑÖÖ¿ßëׯ3øIU­©©)·¼ÿ>käååauuwîÜÁG}„¡¡!f!˜Ááp‘Hƒƒƒ(//ÇŸþ韢¼¼™™™¬ƒóàÁžA ™ßïÇüclmmÏþ& -®ý3ªü½{÷pëÖ-˜L&ÔÔÔð8§3gÎ@£Ñà§?ý) - - -ÐÔÔ„ÜÜ\¦<’p_(‚F£áŠÇÌÌ l6ƒ™™™ðx<,8›L&qáÂœtÔKNS¡PðâžžF__æççY42‹T[)á[XXÀÝ»w1==®®.¼óÎ;¨««Ãž={X„B©TÂþYo¦×ëÅÂÂ4 š››ÇñoÿöoˆÅbØ·oöîÝ‹ªª*C£ÑÀëõÂëõ²Ê:õú=™î«  333èêê‚ÛíF"‘@nn.Ìf3Ôj5ÿNó0e²m*[?666ÐÙÙ ÇÃIÞôô4ŠŠŠ ×ë !“mÓþE*5UP¦§§100ÀA©„vtt`bb±X ™™™,&²´´„p8Œ‘‘ôõõA«Õr_×Ë/¿Œöövܸqï¿ÿ>Þ|óMLOOóƹ¸¸ˆ‡r{Ú£ÇÉñÓæ+ ÄDÇ"­”Ðc´ “A‰¨šè4èqi‚N÷B÷ *`‹‡¸¶766d“ û§÷IAÔnŸô SSSèééaŠzôHm:‹±èX<çQXd2™ŒG~Ñœm™L†ååe¶ -¦ˆ@I‹Å›ÍÆAêç#u_¨ÊËË‘J¥055Åâ™>Ÿ«««ÐétÜ‚@š©TŠéh \}§¤›ý••Öµ˜œœäi[[[LÝ/..Æææ&k Puskk ¥¥¥P«Õ”Þ½{ËËËH$H$¬ =55…îînlmm1È V«™¥DkzöˆU‡¹ÚU__£ÑÈlÒ¹„L¶=+<‘H`aa2™Œ ¹\•J…ááaܺu‹Å?ÕjõŽŠ;ÑøȈë|·}xkkkG¬¸Nw[‡R§D‡x~©R¸xMqýJyéóÄßÉ©ÑkÅj«¸ÿ‹÷¼›mŠ`hÃô{2™„Çãa gbbÝÝÝ<6vnnŽ>JBH8,??………H$p»ÝX[[ãñb¤2LLb;QËX?¢Ñ(8€gžy.— ±X ¿ýíoñÁ`uu³³³øàƒ8‰ÍÍÍ…V«E4Å;ï¼ÃZ8¤Ïa·Û±ÿ~>|6› ¹¹¹Ü¯_RRÂãÖS’oܸƒÁÀ¢¶EEE(--ÅÌÌ <JJJ˜)‘••§Ó‰ææfÔÕÕ¡¤¤ÍÍÍ;&`íB(ÉéîîÆðð01::ŠÉÉIfúlnn²`hGGöíÛ‡Ãññq477ãÈ‘#ÈÉÉ×ë儈F£UTT ??mmmxüñÇY¯&-- o¼ñ¼^/ëq Q*)–Ò€i]‰@”¸¶wëá¥ç£¢»»W¯^ÅßüÍßà¹çžã¶’Ý€3°#ßFÁ9ð‡)bRCÙ+HÍZ¬HP@ ý³NÈJAE:7Ý«¨pNŸƒØ000€®®.<ÿüóhiiÇãÛíÞQ¡%ôôtΣ½Z>|ˆ¡¡!ž4“••ÅŠ÷ƒV«•§@Q²§T*ù:iii,¸'NšÅìì,ïùô’þ‹Á`@QQjjj`6›100€Û·o³ÐfCC3L¯'ÇÃñioP[ 1ñ - yϸ}û6úúú¸`uæÌìÝ»¡Pñx†Åj D§Ê0ÑÃá0òòòpøða( -ŒŽŽ"àðáÃP©T|þ¼¼<ÌÏÏczz:‡¹¹¹ÜW‡177‡¹¹9,--¡ººû÷ïGYYßh?§5+& âÚA©ÍÍMfkR2HÚMçG£Qôôô0ˆ2<<ÌBsR€—Ö?]ŸÖ¯¸ÿSuUL²è»!À€Ö¹X1¥×H+zþn•TÑŠ‡”éFþ‹ö›`0ˆöövddd ²²ðz½…B;«®Ÿµ¼Ðxm­¼wï’É$Çù:Ž™žZ­‘H=Âýû÷qïÞ=ܽ{2™Œõ¹(þ ‡Ã\X”Ëåhlld!äT*N‡gŸ}eeeÜz@£$õz=àÆX^^F*•BAAŽ= -™L†••ÓG ~ ÀÉ“'ÑÒÒ‚ Äb1ÖŸ ­¶……dddp;§B¡ÀÜÜïÔ¶ -…¯}íkÜëßÕÕ™L·Û÷Þ{Ÿ|ò êëëa³ÙÐÓÓƒ©©)nomhh@ee% b±z{{±¾¾—ËF¹\Ž’’”——Ãd2qµ¹¹ÉÅZm ƒ˜™™AFF222 T*¹È¹µµ…»wïâ“O>ÁÅ‹¹Ð¦R©˜*¶fÑú™\⚤ÿïƦ“ýÏ‹ñv|ÿØãTÈTüÝßýÝ?ˆ‹\Lx¤NNt¦âèKàþÚ(¤„„šUOÂ&lQ¥;##+++ º©Õjx<øý~®d¨ÕjVi&j?Q8©w3¢··Éd’„@ €ÞÞ^žàr¹8pXZZ‚ÃáàD€¨ø¤ÆNHzVVB¡<«Ü¾öÚk<ý‚z‹§¦¦055Åì”ââbFFFðèÑ#ŒŒŒàöíÛ˜žž†L&cžzO)¸¥ÍX,ÆIÁ`€Z­Æ|€ööv|øᇅBÜ2`4‘‘‘ÁS4är9>üðC®dŠÚ¢Ýˆ•AéžKr¦â!îÑdob¢Më.©]‰ëWŠ0ïæèÞ¥>A àÈÞ½ IDATFD Azߟw}éãØ‘€é¯ýkttt ??=Â+¯¼™L†—^z .\ÀÁƒÑÚÚŠÇ/¼ðÎ;‡ôôtÞ'©òàñxàóù‹Åv0‹d2Âá0+++ˆD"8sæ ^zé%8„B!ø|>¸\.œ;wŽ×bZZÚÛÛQTT„††äää° -þØØ - ™‰öèÑ#ÿL¥Rðù|èííÅÏ~ö3ƒA1Û³g¬V+fffXˆ¾k›ÍN‡……ÄãqÊFFF0::Šùùyäç磾¾ÙÙÙ< ئùÎÍÍaff‘HƒõõõÈÊÊBww7>üðCܾ}|ð<æææFFá÷ûY—‡˜4ÉdíííÜ>Amõõõp¹\Ü[.2Åòòò™™‰ååeÌÎÎbttiiiøõ¯`0NÇÉ®ø‰ÉŒ¸¦¥ ­-1±‘V!‰õ±µµÝÒó—ù—(((àû“Ü“qÿ—ÒøÅû"HI¿h+t^¤UPÚCH‡„Ä©5ƒ®CÕuÑ÷Ò^"Ý -"‘z{{ÑßßÏkdnnŽE }>¶¶¶X†Ú2)ˆ¦é1¹¹¹,ÐG}·¡P‘H[[Û‚ª4é‡&KÄb1è '›Ì‘‘ø|>466âÌ™3¸páöîÝË}êmmm0 ‚Ûíæž_*mllÀb± ¸¸˜bJ@ôz=ìv;Çwyyyp:¶GIËsuu•…ýVWW±oß>\¸p§NByy9·ÁMLLàÆ‚×ëÅåË—ñÖ[oáƸté***àp8 “m3#‘žzê)8Nx½^ttt`rr%%%ûNís ())a‘SŠ §Þóºº:ÿŸÄšþ/&Óv°*EÛÆLDÏÎÎƇ~ˆ>ú©T -z½EEEÈÊÊBOOÒÒÒÐÚÚÊ,žÝªú´.E@Ošìˆ>‚X,Ràâ[‘ Úíå"AïKê E`AZ¹Á®ŒŒ LLL ©© û÷ïG8Æ¥K—‡€Å-•J%677‘H$pçÎ%L¢Â´N©‘ZY(©ïììÄýû÷ÑÔÔ„'N ®®‹‹‹ÆG}„¾¾>deeáÙgŸefbZZü~? - ÑÒÒ§ÓÉ?¦RÛ-ÔfVTT³ÙÌãþ&''yt{ee%ëE‘îÃòò2Þ}÷]¼úê«0›ÍXXXÀÍ›7\#¦Äää$‰>ù䬭­1( —omjj‚ÍfÃðð0úûûQPP€ùùy´··#‹aÏž=hnn†ÕjE"‘À«¯¾ÊþŸØHjµ¸{÷.Ôj5·œfàÍãñ`vv–ÌÕÕUÄb1h4 äææ"33“ãdjC*))AMM îÝ»‡‹/bbb‚‹gZ­–A(ZÓ"Ø$§wkÓ”ÆP»Ùƒø<éñyãkŠÀç!Øô˜ø&¤I×òò2¹ÖëõbzzšÇµ$“I­˜ÅÜÜ{ÈÉÉaÔ/#cii ‹‹‹;PnêÖëõp:H$ðz½8vì¾ô¥/Án·³¸1)&ð÷<=|øýýýnÞ¼‰ÉÉIV“+b¾¸ ‹I€È”Â":(Z—„ìŠÏ -êù%ú¯˜ÄˆGŽBZý­Ý9ÑQ‘#ØÍ( ¤óÐFü_ÿõ_øÝï~‡ììl®6S+ Q]Íf3rrr8)'Öõ®¯®®²@%µŠÌÏÏC¥Rñû"Õr…BÁ"^DÑ$û%1”ÉÉIs¹%4“ «ÕŠ SY -„äF£Q8 …BH¥Rp8Ðh4aQ›ÜÜ\þž‰JJJx¬ Í‚U«Õ<Æs~~~¿ÙÙÙ\…¤¾8HÔ“„¨Z[[ÑØØÈ6––¶c$ŒZ­f&1sss\Å‘V¾×××áõz™Î]UU—Ë…ôôtM¡€ì·¿ý-ªªªàøl~³üÐÚ«1"àDÏ!€†˜T¢c: -ºgÑሠÀnhŸ¢ó‘jÑGHíYŠn‹‰–è|Ä{ßíµbõFàQ5ÿõ×_Ç÷¾÷=ŒŒŒ`xx>Ÿ'“0cËårA­Vsòáóù°¾¾ŽÜÜ\ø|>LLL ''2™ŒÅô -û:ÕÖ át:‘““ƒp8Œ¾¾>dff¢±±ƒ4:èëëƒÅbáž|NÇ íúú:B¡®]»†ŸÿüçÇúú:Ï?6™L,®j6›yQ$œ»¹¹É{Eqq1*++±ÿ~äååáæÍ›‡ÃÉåÛ½«n·ßûÞ÷ P(`0¸ÂJãÀ(™,--E*•ÂÈÈ'íýýýxë­·p÷î]ýu:²³³QXX¥R‰?þ+++(//çñ§Ñh999¬^½¼¼ ¿ßÙÙY¬­­!77V«ÍÍͬ+àõzñßÿýß8uꊊŠþ%˜ 1Y ý‰ªîÒ Š>7i°–––†ââb<öØc0Ü~FçÝØØØÑþ Úën€ÈX Wz £QRFz/ôZú¡b -ÅFKKK TŠI•ØMÇnè}+•JLOOãÒ¥Kxøð!ƒLTlnnÆáÇQSSN¥R‰“'OâìÙ³Ü/^o~~žcÀ¥¥% ! r’Cëmrr’ý6Í'wšZAí¢gϞşüÉŸ ¶¶MMM())A(ÂÔÔôz=Z[[qêÔ)œ8qYYYxï½÷ÐÝÝG!‰ ²²’ÅØ=zÄÀ±Z­†R©)«¯¯‡Ãá`ݪ”æç磨¨F£{÷îeæhee%JKKQYY µZžž<|ø·nÝÂØØÇQhnnFuu5”J%–––`0ø3ñù|èîîÆ‘#Gpøða ‰° ¦\.G?&''y|`*•‚V«…Éd©¾ççç³Ò9Ϧï^ôqâþO놞'ÍÄd™b=³Ù ‹Å‚±±1´··#ãìÙ³¨­­Åèè(._¾ŒÆÆF”––²­íˆk“b1‘@~…Ö7Ù¼˜ðSœ$Ú£ø@ “Ý*¨Òk‰þSÒˆšH$ÐÛÛ ‹Å‚¼¼<ÌÍÍattV«ËËË…BØÜÜÄàà ._¾Œ®®.ŒŽŽ¢°°ƒ---œì0æõzñ»ßýËË˼§ÖÔÔà¹çžã1ã=µk×_|çÎcÁíX,ÆvJã3220<<Ìí0ÔæÕÞÞŽ‘‘ôööâСC¨­­ÅÄij‹d²m‚ÚÚZäææ"£»»‡jµšGž‡B!ìÛ·¹¹¹¸wïT*Âá0, ²²²ððáCüË¿ü ¹ÃOúS»><<Œ—_~÷ïßGII b±ìv;Ο?“'Obkk W¯^Å•+WPZZŠÖÖV455±ö@8Æàà €màŽ|- ½‹I>Ur¹œ'ÕÏ8wîž~úi”––"33vûöÈõ¶¶68NƒA”””àË_þ2ª««qçÎ\¼x‘§5hàç1¡ÅµFëV -dIÁbiaDô7¢ˆ×Úm]Ëd’)ta1±¢ ˆ¨Ÿ4ÈÜÚÚÂøø8Ï»ƒ˜ŸŸçzzjµ*• -ñxœ›’r¢[…Ãa~,#™L²c#Ú¿\¾­Öír¹àp8pêÔ)ØívÌÏÏã“O>AII £/Ô“[^^Îýd2ÉC”\uÃï÷£²²2™Œ‰¾¾>¤§§cß¾}0 øö·¿ÖÖVTTTð†óꫯò¼âÇ{ Á`?øÁpìØ18444àÚµkL#•Éd;f$S¢J#©ˆšLÊÓ/^äûÎ;<ê ZZZÇ199 ‡Ãï|ç;hhh`áþþ~v^$ôDUb½^ºº:ÞÀŠ‹‹qõêU[E,¢Ôy½^tvvâÁƒÈÍÍÅùóç¹—‰d¢HJ„øˆˆ­Xq§.†h 2Ù6‰¨íâX1±!jb$a!z\œñ:"íMj0dŠ‚†â}ïfOâ(²d2‰?üp:‰ \½zPSSÃveÿ¬EŒ,tTÙÀºÑhN§ðz½¸sçû{ñÅ‘‘‘™™¨Õj:tÕÕÕÉdøßÿý_üà?@ff&ZZZ°wï^\¿~ƒå’’¤R)VC¾|ù2ôz=b±Ï{& ‹ÅÂ#ÐÄ5]TT„ééi¸Ýn<öØc fËd2<óÌ3<úrqq?øÁ••…••áw¿ûd²í–Ç•JÅtG -, ‹1ŽŽÂh4¢ºº^¯åååÐjµèííÅòò2OÊþ ˜¼ººŠË—/ãòåËxꩧðÔSO±ßÇÇŒ‰‰ ´¶¶â‰'žÀ³Ï>‹••ÔÕÕáµ×^Ãìì,ÚÛÛYC€Ö3þØú…8)QcÒ.¡*%iÙ¬®®î°)ñ3!;¡*–xMº/ò¿b!E|žÔ>É^¨A¤õèe¦û\\\äö*º œŠ í9Ô†F쪸ÎÍÍáâÅ‹xå•WäZ]]Eqq1Oa!M—ËÅš0©TŠ§¤àNÔZ¢Ëd2aíà–Š2D W©T;~ˆ9B#)m6 -VVV˜B*ãkkkE*•B~~>ìv;L&W` 쟉67·ÇlR )Ȥ-%2öºººðöÛoC£Ñ ‹±º?éäææ"++‹ãNÇÅúÞ .\¸§Ó‰h4ŠŸÿü笑‡ -…xDõõ÷ôôÀb±àñLJÅbÁèè(ÚÛÛñ駟"ÂápàÁƒèèèÀŸýÙŸáÀ3J«‰J¥CCCxæ™gðïÿþï8yò$O¢˜|PtZ£tˆ ™rmll ¦¦ßùÎwXÀÛív#++ ¥¥¥Á_ÿõ_ãÒ¥K¨ªªâ˜q7[¥±È¢=ˆïILæ¥ç ?HïKzßtˆ…Eéëé »&nŽïC0Äùó籸¸ˆŸüä'˜žžÆO<½{÷"ÂçóñHE­V‹……|ôÑG‡Ã0™LˆF£H¥¶Çó‘nÓÜÜïûX^^FCCòòòxd÷àà ðì³ÏrU¼¯¯×®]cýhhh@WWîÞ½ËLçÅÅELNN¢®®Ž‹P©TŠ“àû÷ï3ÓX0J¥kkk¨¨¨@NNJJJ¸å“¦m^N4ÅÒÒúûû™Q¦×ë¹e€Š´Ô:M ‹Å—Ëhmm…ÕjÅúú:|>3±Ÿ}öYìÝ»v»õO¨0U[[˺5 èêêÂÐÐfgg‘ŸŸååeÎ'ŠŠŠpá„Ãah4fcFpÛ“V«eæƒF£Áüü<âñ8***°wï^lllàý÷ßǻヒ¯ýë¸páÌf3¯âzÜ-oŸ#Mü üÝíuŸwˆëVzü9 ñGzHƒ»Gá7¿ù SÒJ¥PWW‡ƒ¢©© ÍÍÍ;zi‘lnn²‚¼Ïçcg -€!áDÃmjjbjJuuõŽjƒÉdÂÂÂ÷W566¢­­…lÆÆÆ°´´´ƒrFÔçÛ·o3“¨˜©T -===äD†hM*• -333èëëCii) - ¹*ÓÐЀÚÚZh4ø|>LMM¡¸¸vû¶šùøø8 µÑŒÐ@ € VpÛÑ¿JÔn¢\ëõzÿ”™™‰P(„´´4”——£¼¼œB&IÈ-Ãd21b³ÙPSS£ÑˆŽŽüøÇ?F{{;3 ƒxûí·qùòe”””àèÑ£°Ùl˜œœä*¬X)•&õâB–nèâF/n¬âkÅ×í‹‚w±gŒ‚)…b{Æüúú:WŠh£—VëE0‹¿”æFë^&“±ã¤CD˜¥NŽ2•J1Êÿ駟²PW0dʸÍf〖˜0ôÙR%^«Õ2³$0ã†h™£££ÜW¨R© ×ëù}õÉd2aÿþýp¹\ÈÍÍEqq1\.222066¯×ËÁõX@Õ(›ÍÆ€± Èquª¼¼œ{C ’É$ÆÆÆ`4Q[[ ûgâ{Á`KKK¼áÎÍÍ¡¿¿kkk,Ÿ¸½^Ïí6MMMhhh@}}=jkk!“Éx¶.õ㣣£ƒÛ%¢Ñ(fgg Y·ƒ„U*R©âñ8”J%£æD§ÔjµÐét\A¦9æ”°•”” ªª -f³&“‰·ÛëׯÃív£²²ÈÊÊBYYÏ祵"¶•P /b!—o‹[&“Iäååñëi îÖÖBß™ø˜ø¸èŠ ƒô_r€”˜Ð=Š÷ D[©Ú»í »Ý“øùˆ6E3½_~ùeX­V$“I¤§§#‰à±ÇÑ#G8دªªB0į~õ+hµZØl6˜L&ÙEŒ%Hï—„+ÉOQÅ5™L²–ŠL¶­ù066Ƶ‹]ºt ~¿ŸïëþýûˆÇãÜ“Lý»999La¤çÑ4ªXY,˜L&ö‡ÕÕÕHOOÇÐÐ|>šššpúôi8dgg£©© $~k±XpðàAØív,//#--}”ÓéÄÄÄ¢Ñ(jkk‘‘‘›7orâN½Än·ÃÃÃÈÎÎfÃàà ÷z* -”””@©Tbbb‚'~Ðõ†††ÐÕÕ§ÓÉ"l×®]Ãïÿ{îw-++CKK ŠŠŠ0??@ À€ƒÓédÿNÕD ¦Š*Ù‘h/´FÉv¤”ø8±"ÄÇE6›ôµŸ÷w:/dŠÀ¶²‘_#€¾sÈg‰ !Ùáúú:W–©uE<¯2Øáoé9”äܼyßÿþ÷¹JKÀ,Åããã¸wï¢Ñ(Sz»ººpñâEÖ³¡Ê*QöEÐ@4b¢---A.—3]V&“q@MG—ËÅ“5–——Ñ×ׇ˗/ÿ@cyy››Ûb óóóܶxðàAÖÉd<†6#33¹¹¹ÈËËC*•â•4¤¨¨ˆÁµZH$‚¡¡!Ü»wÛî¨ç~rrcccÜšJ­5‹gÎœÁ“O> ‡Ã¹¹9\½zÅÅÅLUžššâ( -áÖ­[ˆD"8r䊋‹‹Åðá‡â7ÞÀ /¼€³gÏâÀ0™L…BGSSÊËË96¢û&¡2™l[wêµ×^c¶)Å2RàIdDŠ{´h3d[ô:J¨óóóQ]] ·ÛÍ=ðdGdÏuuu¼æ¤ñdÓTeA²W©ÿ ß"êAÑýÛAÀ;wX¨¯¯{²Ifxx^¯*• -ÙÙÙÌLðûýhnn†J¥B?^~ùeÔÔÔÀår!++ ccc¸|ù2nß¾­­-SZZ -…B¾¾>ddd0ÍY.—ãðáÃ8|ø0ôz=®\¹‚µµ5¦~¦R)VÉÍÌÌ„^¯G4ePæ;“²%õµÀ •¤ÚJ‰“ÙlFQQT*;¾ ??þ0VH üÅÄÖmæbUD¤üJ…ž¤¿ht^ròôºÌÌLhµZ6°ÝÖ7°“ý"núÒàI4ÑÀD@B´'éÿ©JòàÁ( -Þ«©©áéUUU¬ÌªÓé˜öGJør¹eee8{ö,žyæœ>}O<ñNž<‰Ó§OãôéÓ8vìÓÉ<òòòXèK¥RÁ`0`uu^¯—«ÑÃÃØ››CYY'×À6Òëõ² ŠB±=_5‰@¥R¡°°V«V«&“‰7õµ5VmnllDZZnÞ¼ ¿ßƒÁ§Ó‰ÌÌLx½^Äãq¤R)®Ñúõù|˜œœÄææ&rrrXõkk[M]&Û®XšÍf8NhµZƒA®Þ)•Jܺu ]]]TÑ÷MÕ|b*-,,p€Mâ…"(PTTÄâOF£‘ÑnR¾Öëõü>ÒÒÒÐßßwß}©TŠÕnWWW™úL@"aâÚ"‘VÜÉFT*ÕŽ 8£u)ÚÙ‰‚I¯)ýû©Å~Piò#¶нÐ=ŠÉˆL&Û¡ÿ"‚s"àGï•î‹lˆž¯Óéàt:qýúuN$ü~?Î;‡'Ÿ|ÇŽÉ'päÈ9rMMMXXX@GGƒ@UUU¨©©ÁáÇqêÔ)¦ËS M» ûNOOGff&òóó!“ɸêuâÄ äççãîÝ»ðz½‡Ã¸wïk×ér¹PSSÕ]£Ñˆ’’Äãqtvvbee'Nœ@UUFGG¹5(33“ͨ—1C¥RÁl6s"£T*YëB«Õò„jû!¦€Ëå©S§püøqÔÕÕÁápÀ`0àîÝ»èèè€R©Äèè(Þ}÷]¼ÿþû¸ví:;;ùýSMM ûãG¢ºº‘H³³³>Žx<Žééiî -,,ÄÂÂWÎ4 ÏšŽD"¬Š-Rsi½Ð4ÒÊ¿ã}»K<Ÿ¸6ÅóKýŠø˜˜¬‹DÊD“2|(!}µp‰¾HZ ‰F£0 œÐ‰v)Ù¥ÓwÄó¸Ýn\¹r…Ù\”| nb±‹‘ÍÎÎr±ƒb)úŒEæùŽÕÕUfu‰‰—B¡àÄŸ*ˆO>ù$, íúä“O¸z‰DpëÖ-ŒŽŽr’ Óé°µµ=馼¼UUU0 P©T¨¨¨@zz:îܹƒD"µZÍû5±Ü"‘¦¦¦x¾xee%”J%>úè#Õ—žžŽµµ5ö999ˆF£xÿý÷100ÀSúúú yθF£Áðð0úúúÐØ؈ ¼õÖ[ÆÄÄär9k‚;v çÏŸGcc#VWWy¤æ׿þu<þøã(,,„F£áÄrttt‡B|{{;._¾ŒH$ÂÌ­­-<|øjµãããhkkãV ÚÛiˆl1¦ØNÜó¥úG©TŠãíW_}•[<²²²‰D —ËqàÀþ®D{£óˆ×£D^*H—úJñÞD0€<)M¯÷zÎnÔm±etrr?ùÉOðèÑ#dffrœa6›áóù -…øû%-ŒÑÑQ¼òÊ+øþ÷¿`›}‰Dx]Š`f"‘Àêê*·FNOOcccƒ‹‡:‡Byy9 *accz½žA%›Í†Tj[Sfii‰§v-,,`tt”{úí±ß™™™˜››c»°Z­¨¬¬D<Ç7HîèèÀôô4***¸Ý„€ÃD"Ø?+ôäääàĉ#b‡˜ IDATÈÉÉÁÌÿGÙ{7z^gÃX XÀ²ìË^—mW[´U²%˲-Ëžxì”ÉäGþeâ؉tttÀl63è677¯× ¥R‰@ €íímìììpB"—Ë™ò) -tž·ÚÝÝeª1 ™Y,–Cct “:?u¶d2ÏommmJ$C¡±¹¹ÉÏ'Ef²9Fàu°÷ööàõzy×5)¼j4>àism¡ùpF£ÑÈû¯—––pÿþ}x<Vû …BèééAkk+ÚÛÛQVV«ÕŠ¾¾>¬®®btt ¨©©áΓÔÆÄC\üÙ8%ÑTàˆþ"v/È)Q“)kEìÂH}@=±ˆ‚¢¿Õé§ÿ§ï6::úïHß»ÐèAß!éHP§://•€«««a0˜¦×ëQTT„êêjœ8qÏ=÷¾ò•¯àùçŸÇ¹sçpêÔ)ÔÕÕ¡ºº¸xñ"¯êííeËöö6ü~?ƒ]««« 0èt:Þbãóù€òòr.Øi׳ËåÂíÛ·ñ駟bhhCCCxüø1¯KLLDtt4³Üv»Ýlw4>§V«Ys£  ËËËxûí·ñôéS¶oNÇ[.°²4ÙtTTòòò¸ØäxBDQ%zäÈÈd2¯{ã¸B€{^^« áäÉ“¨­­…R©„^¯‡ÙlF^^Nœ8S§N¡  F£r¹?Æ믿ŽÉÉIhµZîn¯®®¢¯¯›››ðx<‚V«e-iŒ {‹fiüýA<ßEŸÚ¯˜tIA2ú·Øµ'{–ÆB1Ç¢yfº¶WÄQC©T" -!Àh4rQ$E"ðG…H‘& 0>>;;;¸ÿ>¬V+©III¨¨¨`ù _ø®\¹‚ââbD"ôôôÀívsÎåraqq‘W©’ÝPs# -qó„>jÞFvv6¯º›˜˜ÀÌÌ òóóa6›ùïããã155…øøx””” 99™gš“““Y‡†6…ƒAèõz|üñÇ Šù,)€Ÿ:u -qqqxøð!bbb`4¡Óé8®rLÚÞÞfa»®®.îøS1ªÑhX·ƒ´/VVV`2™¸0¡•š¹¹¹ø¾€‹/òª¾H$ÂãåååÜ$#v å9###æ.§Éd‚ÝnÇÕ«Wa6›Q]]Í«§¦¦ø>sssYôVÔ>’Ú'Ù<Ù}fbž'õ—´´4Èd2|øᇰZ­ðûý°X,èëëÃåË—ÈýC¼Žs¤l2ÑŸ¤õ‰Ôï §¿}]d‰ šè§¢?IÁµééi¼ýöÛÌv¤3Ól6ãÒ¥K0™LèììÄ[o½………ܾ}›AR¢—Édp8̲$ª¸J¥‚ÏçÃúú:¯¹ÛÝÝEII o:~ü8òó󱶶†;wî`bb999ÈÌÌ„ßïÇãÇa·Ûáv»yÔ—6µ544pW½  x Ûáp ¯¯J¥‹‹‹‡Ã0‡Ãhhh`Axýõ×¹“N V‹Å‚´´4flllp‡Ýãñ`ff~¿Ÿãw?ÚÛÛÑßßÙÙY\¸pZ­]]]8wîö÷÷qëÖ-¤¤¤à‹_ü"Îœ9Ãël×××1::ŠGÁd2áäÉ“Ðh4xøð!þå_þ‡;õjµ³³³,J9??LNNbkk ™™™HKKCGGªªªÀ ù4%˜ÅØسvÝn7™´ýí“O>Áîî.¥ŽÊoȇ¤~(Ú­ÔOÄx!Æ £j1ßT|ï{ß{M|¡ÿí!þ¡\.碠­­ [[[Œ>Sñ’››‹S§N!!! ™ºú‘ÈÁœp0ä]³_þò—ñÍo~.\ÀéÓ§ñì³ÏâòåËxùå—ñÅ/~õõõþd¨111¨¨¨àÂíím¦áø|>x½^ê Q3Z%Gë®155u(™’Ë刋‹c5íÑÑQ„Ãa<óÌ3(..†ÙlÆôô4nܸ™L†ÜÜ\èõz bnn‡*•Š÷kgffòµÉ(¥³™R„–ÖþСK?£½ñRqJÄä†pJÆ £©t}*„ŽB‹¥sfGô;Ñ餎)&ôztý¨¨(X,Â`00-˜f9cccyÄ$))‰)³eeeÈÉÉáÕ’t¯Dí¢® -%Ä.ðù|¼n’V»loos±T__½½=fåttt`||ÃÃÃP*•(((@II Ïs‘&©ô“z*­°Ôëõ())á$¤§§ƒƒƒX__g â-3(Aâ9n·ãã㌲îìì`~~žç’IäejjŠ)sÄHIIZ­Æðð0Ïí’¨¡Ð”ÌÑêJDÕj5|>ß¡ÏÑëõr¢I -Øt@ Àã¤jët:yÇìÀÀ¬V+´Z-ï6Ðjµ°Ûí°ÙlHOO?´Jò(ð ø¼“II‰R§F¤þ&v0èiÑý¿òô{ˆ Û¯)^O¤wŠ>A>*²¤×—F“ÝÔét¢¼¼œW¸æååá½÷ÞÃÒÒƒ5Ô}ŠŠBbb"¯ò¢®7%T\ÇÆÆ2×ÔÔ„çž{z½žíímÖ¸ÐjµX__Çôô4†††¸óMÛ/T*FGGÑÑѬ­­áÞ½{p8Ü›ššbÅe¢Ù ð>s²5ê¼ûý~ø|>œ={ÍÍÍLÏ,//çm4P(X\\äq8êY­VDEEÁívcyy@€Á¼””$%%aqq‘Á¦­­-¬¯¯ãk_ûÎœ9ƒµµ5ÌÏÏcii‰ ó———199 ™L†óçÏ3ÝõôéÓ(--åñ7‹Å‚ÌÌL.Ú“““‘™™Ébii)Ž?Î ³ôôt˜L&¶Gêt àç?ÿ9rss‘’’¾$íà‘MSÑ">Žê¬Ð‹]A±8‚×b^$õ#*lE@Œâôôä¢6ÅOò¹H$ÂLzÆÓµE…u˜ ×GxDÿ$e·Û¶¶6TTT°Ø,m¢õ‘6› ………,ZLìŽ+W®àüùóxá…ðÒK/á…^@MM  ££ƒÇÐHÈ–4XÀ•ËåÌÚ#ÀÔçó!11¹¹¹\Sg...‡¨®®æ±5#àzzÝÝÝ(..F~~>ÆÇÇyN˜r‡Ã¼¼<ÄÆÆ¢§§III8vìär9Ó² -2>v5 (((ÀÒÒnß¾óçÏ£¹¹µµµÈÊÊÂÞÞ22ö’¯¯¯ãúõëp»Ý,N¬Ñh0??“É„¦¦&η··ÑÓÓƒ>ú}}}())Ùl†ÝnG[[¼^/²³³˜˜Û~õ«_! Âf³Ád2A.—ãúõëhhh@mm-233±¾¾ŽÞÞ^<|ø™™™ÈÈÈ` QŒ1R Mê+ô{—ĸAbsƒ###,€šŸŸ‰‰ Q#?}Š®IóõÎHÇÁüØ%ÌEß_øœaCïWºÙƒô|Š9"§V«áp80:: -­V‹p8Ììãšš¢¬¬ /¾ø"._¾Œúúz¤¤¤`bb‚çÊ©– õ³¤ãÐÚÚŠ••˜ÍfÖ.#}0b§‘S__âããQWW‡cÇŽñgY[[‹””8næ½ÿþû8sæ *++±»»‹©©)¬­­a}}gï5 ZZZðôéS}V(èîî†N§ã3ÆŒÛÚÚ¸Á²²²‚ªª*Ö^‹ŽŽF\\¢££±°°€G!55—/_Ftt4ºººðÚk¯¡¬¬Œ×J°(5éÃ<û쳬sAëx].VWWÑÓÓƒGq|÷ûý<“ɽ^P(§ÓÉ1”š3###ðûýÈøllpkk ï¼ó¯$¡3™rûÝßßǃ -…`±X ×ëñôéSÌÎÎ"‰ ''|ð ***~l’>Äø!¦èLãˆô~j -)¾ûÝï¾&}!Ñi¤Tza20N‡äädLNNrRJÊÃÍÍÍ(++ãùÿ´´4¦{½^äææâüùóøÊW¾‚W_}§OŸæ™cNÇsÑiiiÐjµ,ê×ÕÕ…””¤§§3……œÙÙY¼ñÆxôè¯×Ëül·+m àI…'Í«…B!žuœ™™ÁÒÒ€ƒBruu•g[²²²°´´„ññqœ={ƒ“““\ŒŽŽ¢«« ü1Ï·б¸¸—Ë…¢¢"äååÁï÷#9˜›ÚÝÝEww7¦¦¦PSSƒS§N¡¹¹™5|>FGG‘““ƒ””LNNâ7¿ù ÓNÝn7¢¢¢¸ëE"5£££hkkÃüü<Ö××™’m4‘™™‰êêjÔÖÖ"77UUUˆ‹‹ã™NÇŠ¿µµµ¨®®FFF -ìv;†††xÛí}¥™±è r¢ÌÓÁJ¿£‚YL˜D¡–p8Ì]} -bç„l•„d¤Å²˜ŒI i—Gê<"-þ­ôgä;ô;éV¥RÉsxŸ‰Åíìì°ÐQBB‹ªOï[‚»_ô<šG¦g´FX "ز½½’’ÔÖÖ"))‰ÅºH]—Dx…©Ó{&ªôÖÖ ¯¨T* "àVWW144„»w§~¿Ÿ“_*ŠÌf3žžŽÕÕUî¸ÐÚ£íím~o‡¡P111ˆD"ŒZÓj?G²Z­,\IëDéþ···±´´„­­-îèÓ8n·sssP©TŒN§;äbAGÉ#…âù@tðÄÄDd~¶ú>úè#d|Fi¤næôô4ZZZ0>>ŽW^y/^ÄÞÞ>|ÈjÜ †B¡@\\w­SRRXÏÀãñ ¶¶–·^¸Ýn„B!îÆF<ûì³(++ƒÇãa› ƒxóÍ7y-™ÝnÇ{g²²2œ8q‚é‘;;;°ÙlÐétðûý˜˜˜À½{÷p÷î](•JX­VÞRCcG±±±X]]ESS^|ñEÄÆÆâÓO?…ËåBJJ -ö÷÷yuÒòò2fggá÷ûÑÜÜŒÊÊJŽGÅÅÅðûýxã7ÐÒÒ¬ŠÄèéëëÃ;wxô‡Ó@ ÀE¾Ùlf@`uuÛÛÛX\\DJJ -L&7"è{”vÅÂF€¥E¾ô9bq!Ê¢m‰ =—~O Å8ò'1ï"$Šùþþþ¡î¤øúb> -…éG1¤Å¤ÒÏË`0 ¸¸•••œü^»v ápf³ÉÉÉ̬£¼¬¢¢uuu¨©©AQQÓïI³¥¨¨ååå(//‡ÝnGww7Ó؃Á ƒøÄ,ŽŽÆÊÊ -°»»{ˆŽ‡a2™xe,ÙàíÛ·‘””„ÜÜ\fÞ½{—ý‰ÖRÒÈc8|0¿]]]Íœv»7ƒALMM¡¿¿SSSÌÄ£5¸2™ŒutHÌöìÙ³ÈÉÉR©äu³4ê266†ÎÎN¶··¹áSQQÁã0v»˜žžÆoû[fËÅÄÄàáÇø?ÿçÿ ??ååå¼C>** -III¨¬¬„ËåÂßüÍßÀív£ªªŠW´åææ")) ±±±<2uÿþ}CiK5LDŸ;Ä\‡ÎQ‘–OõJ¥Â½{÷PVV†´´4èõzlnn¢ººšcu⥯!ýGŒmÒâfÿÈ‘±yDÏ0)è.ú–*HÙvÀ›*==ÓÓÓÐëõ8yò$666`µZ‘——‡„„X,Ž$2Êl6ÐÐЀúúz|ç;ßÁóÏ?††œ8q{{{èééA(B8æüÃçóáرc°X,èèè@aa!®\¹ŸÏÇ«Y;ÆBΨ¬¬DII ×<‰‰‰X\\ÄÊÊ -¶¶¶¸3M,КšÞN P(°±±GA©Tbyy·oßFnn.°··‡ŠŠ -444`~~ããã,lMŒ““'O"??ŸWÎÒfžÇÃëõâÒ¥K¬Möøñc,//Ãf³¡££ç΃Z­F__îÞ½‹ëׯÃëõ"ó³mÏ<ó ššš€G±].FGGṳ̀MEEE,¦Lç"­Ë¬­­…ÍfÃôô4QWW‡„„„C]{±‘¨V«Yßmvv–ÇÕÌíïïÃd2áwÞÁåË—‘™™yh¦ø ˜Gç·›È6űj:ã©Ž}Bé3µeù—ùš4 þo1¸Q2™––›ÍvÈQ‰ÖÏJ©„„VVV2í²±±ÇçÙ*Zè@¡ @Í*¿ýöÛ˜››Ã›o¾‰ŽŽFÕÞyç´··ãÅ_DSSâããyoøÚÚo Ùöpø@„æs¶¶¶™™‰íímLMM¡½½·n݃8!‰D؃ƒƒHLLDQQSÓü~?<ccc¬‡ñæ›ob||/^Ä•+W_þò—‡Ð¾Ó§O###ƒQQQÇèè(–——át:Y–Tx;:: V«177‡œœV·\[[c±0J,ëëëQVVÆók‹‹‹ØÙÙÙlæuK7nÜÀøC¦±’¨L&cÄ~~~£££¼ãÄÞˆº—ÀݱmM¤OR×Zì𓉎'GÞTÐœ%éâ.íöSˆÝ)&ˆ¡‡XÔ‹`…T„FÚY¢ BÃœœ”••¡  à€#Rä¤ «x0H}“^K¥Rq2­Ñhàóù055ÅèªÛíæQz?4ãL -§ËËËèëëãGض) ÑwE÷@]󑑺¤<°V«•ÿ.33rùå·  €UÓåòƒynJ É÷÷÷a4™9±°°€P(Äû¥×ÖÖ033ÃZ"$†HTf±%Û í u»D¤Ž‰ .//ó\2 ‡*•JÞtÒ××Ç3µZ ¯× §Ó‰µµ5þ¬ÛÛÛQZZŠÜÜ\Þ LŸ£4Á¿g:ŵ›âóÄl„ŠØѧ`#Žè}‹€ý˜4‘½ˆ†ÕýIZdI&BòE1€Iô^ÅÙPXÌÈÈàÍÀçh)("ý줠Ãþþ> q¦¥¥a||œg¢—–– V«a0 Óé Óé’’à ™…ÛíæUe¢~ö¶¶àr¹ V«QZZŠË—/£´´”?N'ë°_QwÈï÷£¥¥ëëëX^^Æîî.Ξ=‹ÒÒRF$''³&Ëòò2o ÙÚÚBzz:bbbX̬­­ ½½½¨©©ÓéÄ¿þë¿rwÉ`00n?Æââ"«•»\.fè¼¼/¿ü2bbbðÉ'Ÿ°à™ÅbaÊd{{;`µZ¡Óé°¼¼Œ'OžàÍ7ßÄúú:bcc‘žžÎñ´¨¨ˆYbT  î÷ûÕÕU"­ñœ&»¦ï^Z̈]sŠEb$=t‰ì6±(mXŒoGÙ›È" çЈ]OF¶AqéõésWªÑ5Ň8Æ@L*\ª««y,Ðjµ2@ïºÙt}ú¼Dš¸N§Cnn.êêêPXXˆÑÑQÞúB"ƒ2™Œ)é‘H†7_x½^f;ÎÏϳ-lmmaee…ç«M&ŒF#ŠŠŠð /@©Tbii @r¹¹¹¹ì[ ÜXJLL„Åba°933©©©HJJBqq1jkkQ\\ÌE-é MNNbttuuu°Z­XYYÁƒÐÙÙ‰µµ5¦Føá‡ØßßGjj*kÑœ?:SSS˜ÅÐЊ‹‹QXX§Ó‰îîn.0T*úúú022‚­­-$%%!99r¹œGhÔ´¦¦<Àêê*Ó»`4yÌM£Ñ ²²øLíK Eö¢ ‹ç¨3éïH·ê£>BZZÏ´OOOó{ý„üŽŠÑ_EMñçÄNTüSL’Ž¥Js&ñwbLc°£è½) -n¤[„Öû,222ððáCLOO#::iiiØÚÚ›o¾‰çž{ùùù¬9×ÒÒÂ`vnn.ƒld£2™ &“ III°Z­8~ü8´Zí!§P(„ééilmmA«Õ"::•••¨ªª‚\~°eèæÍ›¨®®Fnnî¡Ü]´ j’«íÉ“'<ŠA‰“®Bee%Û­èC"p,-–²[D¦˜XoÕPc‡h׊¿þë¿~MP~_2D1I¤ Z­Väææ"33óóóøÏÿüO ¦„“Sêõz¤¥¥!##ƒ‹}âë‹ €»¹¿ùÍoàp8PRR‚—^z :Ž;wqqqHOO‡ËåƒÐÖÖÇÃ3æôZÁ`×ÉЇ¨R©xNûÌ™38yò$«‹ÇÅÅñœÈ… PSSƒÿøÇÈÉÉaŠ´\~°K’f‡I¬†¨¥dxóóó\ämnnâý÷ßÇÌÌ 'åçç#`rr×®]ÃÍ›7¹ ¹¼¼ŒÅÅE›!•ÞØØXTVVÂl63Ó€‚ÚIèoݺ…žž¨ÕjX,,..¢··‡###hiiáÕ82™ ccc¸u릦¦`0œœŒ¸¸8¦îÉårîp‘j¶X‹5¦BºµÒäž_£>ö4 ®ð.&\tMñ`§ŽêÞH¢RðÁ ú{QðC,¦Ä„¢XAhž˜Š¯/*â!í²îìì`ll sssHMME}}=***PSSƒÌÌLþlæææð駟²ÖDBB+ûÓg@€”˜ P‡>ûíímÞd y6uii‰Àp8Œùùyèt:¸4®B¢J azzš¯EÉ……8Nlll0À@j÷±±±l[¡P^¯—¯éóù©+)..ŽW«Q×[©T2b44óûýC||<š››QRR‚ýý}ܼyÓÓÓÈÊÊBaa!Sìæççy>Îãñ Ã`0`aa&“‰{mKüo¹üŽZ¹Ô¾¥?§ïH -ÌÑCÕ¤ÁF,†Ž²3ªÄ¤|Lz–‹÷,}ñž~_’&-ä艊Š:4ë,vvEQ¼žBúþéš4KO[,H˜L.ÿ\Å|ffÝÝÝèííåM-*• -@+++, ¶¿¿””Þžb4±··‡îîntuuaxx˜)Ó -‡ÃèîîFww7-·oßf Ìãñ`ww—µÂá0ßsò IDAT¯^ÊÏχËåÂìì,***X<‰6Ж ª««ã„””†‡‡‡¹ð p„(Ú¤ðmµZ1<<Œ_üâX]]ål;;;xøð!€0?##.— o¾ù&ÚÚÚP\\ŒS§N!##%%%,VKÉ1m®!¶Ñææ&Ö××d»sçVVV——½^™ìs ‘þ/Itv“ïЙwTAMç2ýŒüB°Å߉ìéY-‚mômOŒ+"Õš”ìz<Ž¹ô~¨›+&‰¢ÿÒý`-äï´b²  eeeHJJb?£3R,öE]htS&“Ál6#77—×ඵµñ¨7»»»ÐjµÈÈÈ€ÅbáǃP(„¡¡!<}ú”ßßÆÆobZ^^föÊþþ>æææpãÆ Ü¼yr¹œ·iмõàà ¯y%ÅtÚ;N¢›¤§Aâ¶óóóÜn7 ¦íïì·X,L›2¸}û6¯·p:XYYa¥Éºº:œŸ@€w¹FGGÃ`0ðgK ’ÓéädzggÓÓÓ¬ó¡T*QTTÄë””J%|>vvvxü‚¶jø‹ÙlfÀLܛͦV«6› F£‘Y4ªA›bcc!—Ë144„žžlllp7™æ{é{¥1 êfPâ%Ú€Ä'Ú‹ЙBE ½žH¦ÿ“*Ѿ¥E’Ô6ÉWDàMd;m‹à€˜tIߟX˜ÉåòCÀ!ý÷Q=%ˆ"}N -ˆ«ÂD$ý§Ó‰””DE(øÏÍÍáÞ½{ØØØ`àK ÀtVLLL0­¸¼¼Ï?ÿ<^~ùeäååñØ ‰’-Óg¹»»‹ØØXDGGÃl6ó*ÉØØX>‡«««‘žžÎàíÈÈVVV°¸¸ÈëtÒÓÓQ[[ £Ñˆ¹¹9´´´Àãñ ªª - ÈÉÉAaa!|>>|ˆååeTTTÀb±Àårq¤³Ò`0`ww+++xî¹çxì"55Á`v» hkkƒÛíF||<ÊËËqéÒ%<ÿüóÉd„ÝnG__N:¥RÉkwN'7´þ–€sÒà óR©T"##ãpu;EPM¤“ ‰­˜¨‹~$žáôýŠ~!=éß´ÆOô#©‹÷C9ù—4»¤tÆ‘-еDðPÍ(ÖJF©ÐßS<¦s\Û¤ç€4þ‰1Þ#4:`0ðÑG±°°ÈœKMMå•}[[[̺¨®®Fss3¼^/ÚÚÚ ×둘˜‡Ãþþ~ ¡¥¥7oÞDww7Nœ8¼¼¼Cû؉!ãóùàt:™=BñÎívckk ‹‹‹˜™™Áèè(Ÿ‰ãããHLLä­“““‹FGGqïÞ=( -TWW£¤¤„UÑÓÓÓX3«»»}}}…B\“i.SWôøñ㨬¬DZZ–––ðÞ{ïáÎ;X]]Åàà >|ˆ'Ož ))‰•ö333­ŠNKKƒÓéDoo/ìv;yœJ,hD0€r4Ñžè,ó©M‘FCkk+çëëëxæ™g““öB¶'¾¾è";‡|I´a1 y)“@løH`±$úˆèsÒœKÔHˆ›¨ÿ¤/-ðhó¨x-ž5ÚÄÇÇ#''ƒï¾û.êë뇥¥% ã£>ÂØØ&&&ÐÞÞŽ¯}íkxùå—áóùàr¹ðÝï~,zÃ딧 §Ó “É„……<~ü˜…}>*++a³Ù˜M]WW‡ììläççÃh4bbb*•Š×ìÉålNµZ‹/B¯×Ãáp0Sòí·ßÆÔÔü~?7ÿHç,&&†µ§þöoÿf³W®\J¥Âƒ000Àóÿ“““ BOMMáwÞAWW Oûý~h4¬¬¬ðH7Ù±7u:¿ïÎÎNDGG£¡¡·X‰6$Ú˜h;&“ éééxôè7¦hÛˆV«EVV< - - -XKüîE{cÉQ ±£DŸÁW±†ÏäH$r  ÐG=Y¼ º¸èb¢ a999¼ÓœŠ?i7SLŇx?âÏ(Ñ&ZQëKJJðÊ+¯àÂ… ¨¨¨ÀØØØ¡.Ëîî.VWWY æãµZ-JKK‘œœ §Ó‰ùùyž#v8xúô)VVVƒÝÝ]èõz¬¬¬pÁîõzñÖ[o!Àb±ðª¯¡¡!,..Âf³¡®®ùùùHLL„ÇãáYÐ3gÎàâÅ‹xæ™gPRR‚ÕÕULNNB¯×óÌÍÄÄbbb ×ëáóùx,B.—3gvvßþö·QZZŠÖÖVDEE!ó³íLå$Á <æææxnoggø¯ÿú/œ;w¯¾ú****CCCp¹\ØÜÜÄÅ‹qñâEdeeñªÁýýƒ 4W=55…ëׯÃét¢®®Ž¿'1Ùÿ‹iWP¤o‘½ˆÏWÿ…ÃaƒAþJääâa/2i’"IŸ+zˆ “4Àˆö.-pDŸ£×¢¹ODú¨Ø}•2è³’Éf¦§§ñøñcV6NHH@?ü~?1::Š™™Èd2äåå!%%…dœN'ðäÉ,--ÁëõÂï÷# r&®ÕQGvwwY¤29›q:Ì UjÔ]€¬¬,æ#ªóúú:âââššŠãÇC&“¡«« ÓÓÓXZZ‚N§c¤™ÔÁ}>ƒ}t/r¹œ•þ `KNNFss3l6FFFàñxXL“îAœq·ÙlÈÊÊBuu5ÊËËáv»ñÑGñvJ -µZ-Ün7677±ººÊà"!¨ÕjÄÇÇ£°°2™ ^¯.— ÃÃü*‰¨ÌRŒXJÒŽ¦H· hñìí†ìSZÐ{¥÷MIÈQ…=ÄkH+Ñ'ÄäPÚ‰¡û<ê!âß’-R§Wômé™!¾g)Å•>óíím^ézýúuüò—¿Ä¿ýÛ¿axxeee(**‚R©Dvv6JJJpóæMfy…Ãaîð“ÄÆÆ"338wîêëë¡V«±´´—ËÅ…PII ‰SJÊ÷öö¸óW__„„¬­­¡²²ååå())Ann.••…óçÏ#77Á`«««øä“O››‹¬¬,h4lnn¢³³óóóøƒ?øTTT`ÓÓÓXXXÀÀÀvwwñõ¯ùùù˜žžÆÀÀÜn7RSSy¼ŽîÕjµ²}Ðœ4̓–––â«_ý*š››‘““ƒÝÝ] àÁƒ˜ššÂ©S§ðï|P©TLÀÞÞŒF#³ËÂá0zzzø;IMM…ÝnÇÒÒÖ×ב‘‘ŒŒ f -ˆ6 ÒƒE›“ú…ТçŠçš‰…ɯŇlÎu1vP#&‚"KNèuÂá0|>ç[t?âýÑû¢Mš×ÑýSg_ZÜÈ"þ\ü ¥ì ñšôO¾b6›aµZÑÛÛ‹ÅÅE†e2B¡<XdØãñ  ¢²²¥¥¥ˆŠŠbý **(iojjBee%ÓçÃá0&&&055…Þ„Aú ‰‰‰ˆŠŠ‚N§ƒÅba¿#ÆeTT\.kÃP.9>>Ž÷Þ{ƒz½ ˜œœÄsÏ=‡ææf´´´0ýÝívógä÷ûaµZQ__—_~.\@^^3"öööÐ×ׇééihµZ¬¬¬ ··—…üÞ{ï=ܺu‹7$¤§§£¡¡ÍÍÍ°Û툎ŽFLL ’’’8–äçç#)) ~¿0™L€Ÿüä'¼rNT*Ùˆây/ÚŽ˜ÇK.•J…ÅÅEܸqƒY¿‡_úÒ—˜5+Ú<éIu“è÷¨‰qA´/ŠcâÙO?}F,ÜÉŸ¤“˜¯‰ï‰žK³üô ¨—‚ â{¯/>¤yÅ':Û³³³166†k×®! ªª -6› ccc¸|ù2žþylmmáêÕ«¸rå -ÒÓÓñ駟òö¢¢"¤§§³­ ¸\..^x¤…F :::`0 -…°¹¹‰ŽŽèõzèõz®›úûûS§NÁf³awwýýý0™L¼Í­»»QQQÈÉÉAvv6t:Ìf3j———C«Õr7::ŠK—.¡¾¾“““øÉO~‚ÁÁAüÙŸý¾õ­o±X_CCÑ >Óhå\Ô4õù|ˆ‰‰A ÀñãÇ‘——‡™™´¶¶Âív£²²gÎœá-Rb$^t.H`±XžžŽ»wﲨT*ÔÕÕÁ`0àç?ÿ9³±©>íìD´iñ!Öb<ø}ѾÄûVüÕ_ýÕk¢#‰†/é‹ÓC<Än’t&G<(¤£ñ¦fffðÑGÁëõbhhÙÙÙ(**bJºÁ`ÀÜÜ677¹!a;µZ}¨Ã°°°€ååeƒAÄÄÄÀb± p›hôÞ’““‘••Å3bo¾ù&ÓH¼^/–––àñx022¯×‹””DGGcnncccˆD"¼¶ÆårazzËËˈD"p»Ý†\.çù·èèhîhÓìÚÎβ³³ÑÐЀãÇÃ`0`bb¿ýíoyÏsVVÞyçD"Þm`0ÈJï^¯—•¡ÛÛÛÑFÉi - - -ŸŸ . ''‡…«FGG±²²Â«Köööi …B())Aee%wfé! ²)ñÿE#— -bˆ Ñèºtø“º0%" ELŠèïD§· Ðïéï)QòFë$EçýßwØK 4z/ôZÒ"†~OIšè‹ôÙy½^Vø…F£a±%bÍÌÏÏÃãñ`ss“çèÇÇÇyî”DòL& - ‘žžÎIæÊÊ -#ØÛÛÛÜy—Éd<LÂe4ƒMûÈ­V+ :™™™ˆ‰‰á.½ïèúÁ`Rr%º ͇ß‹þ‘ê?ý´¢‡’K¿ß@ À"ƒ´ÿ™À(šó&;ØÙÙÁêê*žø2ÙA—_­V3ÍžDœvwwyì+**Š3ôo*ˆ(ÖÒÚÎÁÁA„B!s%ªrjj*âââ033ƒ®®.LLL`wwçÏŸGBB|}øá‡ðxôöö"::šGŒF#³p€&Ѷ¥¥%˜L&X,Èås÷ü1Ÿ ìõôô  %%¡Pˆ™V«•AåHä@v~~—.]ÂW¾ò”——£  €)þ³³³xýõ×ñÏÿüÏÜÝÃ~ðܾ}]]]HLLĉ'Ô¶X,08qâ***`2™À³ÕjEjj*FFFðÿñ¼ÿÜápðHZAAøˆß£ÈpR¿ çŠ¹Øââ"®_¿ŽÍÍM¬­­¡¨¨¯¾ú*ôz= ^Š •4F‘ ‘0¦+ÄóžìUÌëÄ¿§kR>H6)^W¤\‹¾-e Ð}‹[¦Dÿ§3F -„IÁñúbÜs^…Bqè<ôx<èííEEE - qæÌÔ××#::~¿ °Ûíø÷ÿwèõzLNNâïÿþïa6›Q\\Ì`*mÙ FÙêê*²²²`µZ111Fƒ¬¬,d|¶)bcc'Nœ@RRªªª`µZñƒü€W:Øív<}ú”×½ 3..~¿SSSˆEZZ¯‡ÎÎÎfÐ8%%>Ÿýýý8v쯾NKKCWW?~Œ/~ñ‹øÓ?ýSÞŽæõzáóùøtmnn²¶…Ïçcö·ÍfcÁfbÈÄÅÅ1+& -ñ†¦ŒŒ Þ"‚ â÷+æd[6› jµ¯¿þ:3.ÊÊÊXíõ×_ǹsç`³Ù~ǷȆª‡È†¤ œÔÎ_ý.úâûßÿþkÒÀ(Mî¤Ûï+âE”[Z¸…rÑÏ¥"z⛧àEëº~ýë_³}òÉ'ØÚÚâ` -…033ƒééi„B¡Cˆ Ѽd²ƒÙ¹ññq^£FsDÓ"#¢ Ñßttt8 —“ -±ÛíÆÌÌ òòòœœŒŽŽÈd2LOOÃëõbnnýýý|pÐAA{kIMygg‡E—ö÷÷111Á4­}¡yM“É„³gÏÂjµrqGxcc#´Z-ž¦ëÓwOßµV«ån*FTUU±ˆçÖÖSÝiÖ,9Ö!ugÚqMgK0d:=­!?"×h4ØÝÝåûûû<7‡yåYvv6Šƒå´xqqÁ`»Œ›››œÀommñÌttt4«´ŽŽB¡PÀçó1`°¸¸ˆ¹¹9tuu! âĉ0 ‡Îò}ZJ,RÙ€àÝwßÅ;#_ÿú×xÿý÷ññÇãƒ>€ÉdBYYp!)ÄN»~ôyH)üdÏbðù}g²˜ô`àOôMz¾X°½‰ ù€xн’/H‘oiÀS(ðûýp»Ý¼›W -P‹ï“ü‡dW¸uë~ô£áêÕ«XXXà54ª¡V«ÑÞÞŽû÷ïsB¦Óé——‡ªª*dgg£¿¿›››Ü1 jáÖÖ&&&pãÆ ôõõÁáp0(çñxàt:1==••? ±Ò 1K•JÅk  -Ï(?~üØØØ`ådFƒÁÁAôööâòåË8qâ -ô÷÷#33§NâUQ­­­ ¨+²··‡Gauu)))x饗 ×ëÑÙÙ N‡¬¬,$&&¢¡¡7µ´´Àd2¡±±ØÛÛï~õ+üô§?Err2òòòpåÊ<û쳨¨¨@8FGG>|È]_³Ù ‹ÅFÃI!©“““p:°X, λ\.|úé§HJJÂðð0‹RѾiFÃàíQ€l$Áææ&wkèyd;äK HoAÓm ø|E-(íÓYJç½´Ÿ }’=Ó}‹À0M -…‚µ‰è=èAÝÝ]Öþ_OŸ}RêÓÒdRêßÔ›¥cô{º¦TŒèõz.€‰5Eç1ißáp`ggœ»Ñ¸ßøø8:::066‡Ã“'Oâ•W^AEEy{ÀÈÈ"‘ojcûe¥R‰……””” ¼¼[[[Ess3êêê¸Ád·Û±±±Áëqßxã ¨T*477C.—c||†µhHd‘Ø¡2·´´àÚµkhmmp°Ÿ=++ 8}ú4 ¬%%%áĉÐh4xúô)bbb`2™ yÓ‰î>yòÇŽƒÙlÆòò2VVVPZZŠ„„tuu!//_úÒ—°¿¿Ï€‚vQ¡+j`Pþ#žëbgâÒÄÄïw—Ë娭­Eccã!½'1‰Å4ÙÙ8 -*ƺ/b G6&þ¿˜Ø#óÄ"ŠØWb&ÌD0OZˆ‰1žG9©HJã.][|¨T*8NlooC§Ó¡¬¬ ÑÑÑXZZBgg'nÞ¼‰^xsÿžž<|øÙÙÙ°Ûíü~zzzx ¤ ÈdkM&Ó¡Í@<àU²¢Øøðð0 *S-tãÆ „ÃŒ¸ÑÑQìììð*\b+ -˜L&;vŒ74‘NÒ—¾ô%<ûì³ÈÎΆJ¥Â£G°²²‚?ÿó?GSSÔj5ìv;îÝ»‡«W¯âæÍ›¸{÷.ž>}Ê#{ôš"(E[ŒF#onŠeqf¯­V+ŸáÉÉÉ¿3V%>軣³rYò½p8Œ?ú£?B$Á“'Oàp8x…zII Ÿ[b Ù*bí-úGårR°I|¾xvG"(¾÷½ï½†ÿ‡ˆ²ý>£<êñÿ÷ùâs¥É,bU©Thiißï‡Ífc#£$U£ÑÀf³1*&ST\„Ãa.¦IŒæøi~Ãl6#55YYYÉÄÊRRRÐÙÙÉÉÜÞÞw$U*ŠŠŠP[[Ë_ÐÊÊ -T*jµš;6´ƒÙétêîÒ~j‹Å‚¤¤$ø|>þB766±’ÉdÈülÕíò¤ H*µrù8_uu5bccùžqåÊFŒŽŽbjj - -…6› eeeØßßÇ£GðóŸÿCCChmmÅÜÜÖÖÖXå\ æ@~¿Ÿ‘ò ܹso¿ý6Ž;†ÔÔTÄÄÄ:ŒE¡?ƒŒŒéà$ª"Þ"âL¨s(BRR‚Áà!Ç7 -¢Z29ŒˆÎŠ××’ÍŠ~BK‰$%>bÒDÁŒ~N¶+ú  -âû"&VÈèè(îß¿û÷ïcccz½žU¿Éžiöw¢W-//3úk4yþÎëõr’0>>Îb†¤ÖL´%ŸLOOgð,..ñññ¼¾Œ:öd#´mƒl—Š¸@ ÀBš÷VQq]©T²¦sèÇÃÉ#ÙhUUU¼®©«« >ÄÎ΢££±½½ ­VËžP(ÄÉ8Ïì˜Ð IDATÈÉÉßïÇÈÈööö——‡ . ±±‘Wñ$$$àÂ… 8qâ4~¿Ÿ‹Ò {MJJBaa!€ƒ=¿„T Çh4"%%111p:hlläl1Ñ&ýƒŸ˜ô“=€ ;“Q¤•¾Jèe²Ã -Ít z¾èsô9ŠÁJžÅ®ÇQ¢gG¸@ €P(Ä^b°µØ$¦ÉÂÂÞÿ}|ùË_Æ'Ÿ|‚ÙÙYdffÂb±@&“a}}‹—P(£Ñˆ­­-ܸqccc¬…¡Ñh——‡²²2Èårlnn²0Tyy9¾ñoàÅ_Dcc#¯|]__‡R©d±2±S¬PìONNf?'æ ½ÇØØXÖÙHNNf•eC(Aõz½èììDff&JJJ —Ëa·ÛÙ ¤[\\Äää$T*ŸáDv¹\ÐëõˆÇÞÞ&''177ÇgFUUpûöm\¿~…–²²²ŽŽüð‡?DRRnß¾ÍTM…BÁ#=£GV«•x‘HÁ`G⶷·111ÁÝ°½½=Oè\¡8300€{÷îñjHi×P´#²múÑ~D:®X@SÜeú~D&PkÄÂZŒ3ä·D¦dR,l¤`ÁÎÎÖ××yv]ô#1©>bˆ±ÎI¦‡*>W™¦kü¾Ž=—â¬8¡çÐg‡™A8;; »Ý•J“É„¹¹9,//óú,ºz‰fM3íÎíïïó¬½B¡€N§ã‘¬²²2^‰üÁàí·ßÆìì,7thÌÞÞ´Z-bccYïƒb§Ëå‚V«EQQ"‘ƒQ«Õ -…Bååe(•JTWW#..ŽÇ€ˆ=êñx088ˆÝÝ]Œ!)) åååÈË˃B¡Àèè(&&&ðøñcüâ¿ÀÀÀÎ;‡o|ã8qâ222pîÜ9¤¥¥A&ûœ&/êS•”” ‰ 33Á`­­­0™LÐjµØÞÞ†Á`€V«Egg'nܸӧO£¸¸ÑÑÑÌ23™LœCˆEmWeqSÓQlÒŒƒèèèÀÝ»wqùòe466¢¹¹™›GD*¾èGb³ˆ^_?(FÑß‹Ôt às°\Œ#d£G‚¢­‹à1åátнI›©ôß”‡ˆì±Á#-öŽj˜Šì½^¥R‰öövfƒÝ¹s·nÝÂ+¯¼‚cÇŽaxxï½÷ëHh4fÞ¹s‡›-¤ ßÝÝ ™ì`$srr’•ÿgffÐÒÒ‚¡¡!Þ´177Ç«ñ|>fgg¹ ˜199‰ììlf>OLL°`áÊÊ -7jT*–——ár¹8Ïûò—¿ŒêêjÄÇÇÃn·ãÇ?þ1’’’ðío»»»¸yó&Þzë-ö)b­Ò=‘ŸRž¿½½ÍÑr¹‹¥¥¥,ÖHÛÜH—C&“áþýû˜™™Azz:ît~‹y†R“É„P(„‚‚tvvB.—Ãl6£¥¥§>½%[¡s–ò$i>&Æ,©‰±Dd>Š±L|ü?R‡ùyHô÷Ý„ô ÐóÄä‘œess­­­xôèÒÓÓÑÔÔ•J…'Ož°PÑæææ¡âž:‡ô…Rמègrù2lSSjjjPQQÌÌLFqÔj5Ž;£Ñ»ÝŽ‘‘îü$''sr¶¿°Öï÷óáFÝ>r&HZ[[ƒ×ëå}è -…‚‹BŠi}[$9¤¬ŸŸŸÊÊJ¦ýíììðNÞíím¬­­A­V£³³cccÜÉÁšçnjjB]] - - -xÇãAII ï!íïïgÁh4B&û|Ý×DŦéééL JLLÄîî.®_¿³ÙŒ¬¬,hµÚCß·xøŠF,‹v1¡pè@gpi¸Tă‚”˜ ‰÷DÛ(aµ,D{¦çx#MèèyÈ%>¨;C¯Oô4z½7ñ   mmmXXXàƧOŸÂãñp¼»»‹™™žß¢®!uñÉ&¨À¥µv2™Œ)÷Du‹‹‹ÃÊÊ -Ö×סÑhœœ ³ÙŒ´´4îÆ@ ¤,KŸKTTS·ö÷÷áñx3;;;\œƒAî¢ÐF äóZ­†í†Ä÷àâÅ‹N÷G­4_-&¼ÒK~Jç½Èd#ÿ"C,Ö¥€½7 sLZ‰ŒbSuuuáêÕ«øÙÏ~†wß}—Y3‰‰‰¼f°½½n·f³ùÐg'Æ}µZÍgêææ&«;6hØívܾ}›™1‰‰‰ VPLÔ]»{÷.(ápkkkèííÞ´ -…099Éç‚Ñhd&uiæØjµB­V#//ƒÁ`±±±˜œœÄãÇÑÓÓÇÃ…åþᢾ¾ûûûX^^†Ùl†ÓéÄÐО)²ÈþĦèÛÒšI,âD ™LÆ›ıRº†ø¹ˆÀ±Íf3úûû188¹\ÎuÊÒÒ666ðñ¨¯¯‡N§Cyy9jjj››‹‹/âÌ™3¬#ÃL Ê×h„1-- ÙÙÙ<:­V«Ù¶rssa±X066…BÁ¬͉ŠŠ‚Õjå¸Kß…Ïçcqçp8Œ™™8Ô××£²²N§¸wïúûûQWW‡ÆÆF„Ãaf'ËårÌÏÏ#++ 6›$Êiãã㹡E÷¥ÓéÇk¥+++y] ÍfÃÎÎ3h÷öö°¶¶†{÷¼MMM¬e&m0ˆ9–øs¬™ðöÛoctt”…q#‘VVVPYY‰ÂÂÂC¹ÕQ—’ÖôŠIÒzý¨Ü(JL¾¤ÔzHƒ™èô\iQ$ÞäÿVô‹7/veÅ.íQ%êù?ýÓ?! ¾¾§OŸÆéÓ§‘žžŽ®®. bff†¯mµZ‰¤ÃC©T²ð­ˆøã?þc<ÿüóü\ŸÏÇ;˜cbb Óé°¿¿ŒŒ äççc``€¾‘‘.T’’’’’·ÛÍ«]ˆºŒ ?~555,¶433ÃH8|ãß@jj*¢££¹¸•Ø×ÖÖ011±±1ÖˆD"HMMåõ† p:…V«E{{;S‹‹‹Yp†ÄÖ(‘¢ŽERRrss×ëõ,²177‡¹¹9ìììÀh4"##›››Ðh4ø¿¤½wp•ç™6~õ®££Þ{ïBˆ.ºc°cÇ;ÁØÞdÓ½›]g“8›õ$;I6»“d3™ÍN쉳q ^°   „PG託S$U¤s~(×í[¯Eæû¾ß;£‘tÊ[žçîåº'''!22±±±øÑ~«ÕŠ§žzJ¢^šh5MÐÐ2Fdu6œ´IG„z -1u¤q¢…2Áá(„ù9mQP³¼Ym:·ÆM]Ý FÍ+ŒîiåÂÏjgK—U¸k``W®\Á‰'ˆÊÊJDFF¢¹¹ÂËt–9›ÖjµJųEÌ|øùùÁn·#<<\¢ÌtÚ³³³E€a÷îÝXµj•”çÒ8²ÙlHKK“2¡¡¡ Cå@EÃ6"æR¡‘)“¤÷Æáp`jjJª ¸O4Þx –ìqî«VÈ¡¡¡°Ûí8uê” ÏšÍf¤¤¤ ..cccb°EDD```@hÒápÀápˆq277‡ÀÀ@)ƒ»pá‚€u†††JyWW—ê°Ärvv3332 -‘ã@“’’¤¯¯¬¬ 6›M@N§ W_¼xk×®•¹ÃÌ’ΊŠ(ùÌæpï×Iþ<iš4£ mt@Âèè ·–ùZùiaTrFž1ÔŒAdò¯çr¹pôèQ<ûì³"kˆçÀv&ŽddðÐl6cvvN§Sd§Û½`Æ©~ø!>üðC1Ú###e²ÆéÓ§ñ£ý “l¤ÅbÁæÍ›¥šixx‡CÖ…A¶ˆˆ˜L& ±knnNFO3€Á®ÄÄDäääàÎ;hnnÆää$ÆÆÆP[[+ÆGãr\ÙÆQ\\Œ«W¯Âd2¡¯¯«W¯ÆC=„„„œ?===2-†Y×ùùy\¸p(..Fcc#*++±ÿ~„„„àƸ}û6öíÛ‡{î¹v»õõõèïïÇÍ›7qåÊ£¨¨ÞÞÞÈÊÊBkk+Ξ=+Î]PPœN'æææ`³Ù088ˆÉÉIœ9sUUUbTö÷÷Kû“ÝnÇ7CCC(--ELL Ìfó’6ÚH'ÍÐé%é¬6ùŒ¯ëªþБgÑre¤šæu‹i\ßQ—ñ|º}MÛfº __ºKËqÒÙXÍk*8ñññdv:ÜúÇ?þ………Rqäv»Å~êïïµX,(//— 7Ïâ梢"\¾|Y0NŸ>¤¤$¤§§£«« IIIxæ™gœœ,ù‹/¾ˆ_|q ½úø,Žwf £½½ééé(((@vv6bbb033»ÝŽ   LLLÀãñ ;;»víBtt4z{{ÑÕÕ%U¨\×O>ù À=÷܃x@@ÕHÿF‡CW1Ñžñx<èëëg™6Ò˜±=ŒôD}¶\²Hó î©gÏ7'ƒϚŸy«z´þ0–fëçÖ•oš?´.ÕçÓÁc[Žq-¼Ä íV¬^½)))8räŽ=*“e|||d„äìì,úûû‘’’‚üü|LOO#00sssøðÃ¥0))I*ÒaµZqåÊ”——/©tÁôô4êëë…ÜÜ\dddà•W^ÁúõëÅ¡¶Ûí¸xñ""##‘˜˜(œ¬¬v»Ý’DeU uÉ+¯¼‚ÆÆF”––bçÎ - -ÂñãÇa·ÛñØc‰ORWW‡“'O¢½½###p8b 08è嵈±#×`YzzºØÿøßÿý_ܼyëÖ­“I?)))HLL\ˆç>÷~¹ -___”””àôéÓ¸|ù²Ø~QQQX±bŽ?Ž 6 ''ç3í`ÔALjšÐv‘Nà胯iCÓò’KcDÜHÄËEÌÿ_#C‘áÄßÖÖ†C‡áðáÃ"ð¥üåüùóøÆ7¾ôôt¤¤¤`ïÞ½ð÷÷ÇØØúûûqöìYܾ}[²/Œˆ†……É””TUUI_˜—×"ÂJJŠ(f///™ËºnÝ:LLLØÙ“O> »ÝŽÐÐPX,sf·Û—”ó Ù_Å’fötVÍl6 ¨•.b$|aa ÈÍÍÅêÕ«Q[[‹ššùîøø8ÂÂÂ$dtt Åí¿Ì|A}}=z{{¥Ú <<³³³8~ü8âââ$Bf2™$ÃÄøø8:;;‘ŸŸ‚‚A©mmmÅôô´_±±±¢T+++ñÊ+¯Àb±`ß¾}HaHÚ ñjâ&“^´Q¬…Ζ耖f£Saì­° ™ -†%XÆè3/—uÑ÷ʃH—¾iå ïQ#Ñ÷õõáøñãøàƒðá‡b÷îÝØ´irrràíí ›Í&ã"Yjžšš*ôH'žÆŠ—×"ª¬Ëå’êfüø|S–œœŒŒŒ lß¾kÖ¬A||¼q–r€ÏívÃn· h 1(Ø6Á¾w«ÕŠŒŒ Ëš3ËZ[[ 2*¥¶¶V%fïH6žGuu51::Šññq1|˜ù»yó¦dÝîEŒ —Ë…ÄÅÅÁ××W~sO (877‡öövÈv¶Âp>óØØŽ9"A5–§ÇÅÅ!"".— .—K‚:tâZÚÕÕ…ÆÆF\¼x«V­BEE…É '%%áرcxòÉ'\JÓïÝd­Q~ó=VŠhž¹›¼×Á,:!ºoÓxwup‹ßÕF}°ÜyŒŠ¿µ!¥ŸKË —Ë…·ß~Ï>û¬8‚¤•‡UI6› ‡ã3׊ŠÂèèèg^_³f Ö®] ‹Å‚’’$&&Ê:ä[·nÅŸþô'ÔÕÕ¡«« Ÿ|ò V­Z…ØØXÁ¯˜››ƒÓéDOOŒ—$/óêôôô ··~~~ÈÈÈ€Åb‘€V@@222 ·Û³gÏ"++ yyy - -Bkk«”ÄÛív_Ål͹sç033ƒ¼¼<£¾¾?øÁàïïíÛ·Ãét⥗^’v"¦»\.ÄÇÇcÇŽÈÊÊB]]þþïÿðË_þUUU¸páþçþ°oß>Üÿý2žsll CCCð÷÷Çý÷ߢ¢"deeI_çÐÐBBB0?¿8ŸÚËË gÏž˜eÐlɸï¾û0::Š™™¬V+víÚ…M›6!++ ýýý¨««ÃáÇ‘ŸŸ/™wfu£¢¢àåå…¶¶6ÄÇÇËØãÞÞ^¹§ÄÄD©ªá¤&eKÇ]"//©©©K‚rÙÙÙ°Z­hmmE\\œØ1ÆãÄWâÔŽ½;yò$üüü——‡Ë—/Ë~vuuá‰'žÀ¾ð„††JuLBB~ò“Ÿ`xxÁÁÁ>^èP'ù þ2èOôx›Í†””i-Õ6‘êêÀ—0ŸVKRß芄Ö~‹æ‚k~Ö¼¤+Hõ±\PMóžö‘¨Ûȯ´muV_'·˜pd†ëq·c9Û7##ûöíÃää$~ò“Ÿ`ýúõ°X,8uêúûûQPP/// bhhÝÝݲ¶µµµf*²3-- sss˜™™ÁÇŒššÌÎÎ -F‡Õjœ9sçÏŸÇÍ›7QTT‡ÃË—/KU–ÇãÁÍ›7‘žžŽððp466 -V’···€aûöíèïïÇ~ðÄÇÇãÀ0›Í¨©©ÁG}„àóŸÿ<‚‚‚ÐÒÒ"xPn·—.]’ÖVâCq«ïæçç‘œœŒòòrDFF.iíëëC]]nÞ¼‰äädŒŒŒ ³³óóóˆE]]"##QUU…¬¬¬%ŽúÝöˆ4111xàpùòei˜žž\¬ãÇ#%%e €Qÿh;K¿n¤yšæ–Œ4:1M¡ýßÆ€³GD+EOO<ˆ'N ==]}nn‡iiip»Ý8þ<¢¢¢¤ç255p¹\ÈÈÈ@KK šššÐ××'ˆÈ.—K¢TßûÞ÷PXXø™r8:ešùCCC¥„S3¾6(222d(t_.I ãACÏ•>E½'Î{S¼½½ñóŸÿ¾¾¾Â CÔdZD£MHH@ÿ’¾AFM&222ÐÙÙ)¹ŒX1ZÏÐÐPéSæŒÛÊÊJs377'B#77o¼ñ¬V+¶nÝ*s©ùl:ªKù¹t§§§Ehj1£áatƵc¯i‘‘]‚Ûhe¤ +îçÜë}å¾ñ¼Ü[ ̼ri€sýyÍùùE´ýË—/ãСCxýõ×±aÃ|á _@II ÒÒÒÄxp:fDp?³Ù,¨ú¤CfƉ033ƒ‹/Êg|||PZZ -‹Å‚+V 77yyyÒGëååµ\…3η7™LHLL°ìX·n¦¦¦`·Ûa·Û%ƒçãム  *qŽòøø8víÚ%•:¾¾¾x衇¤mÇétJU [¦§§%ø$ ^Ïétbddñññhll„dzXºïñ,–€ `ttÓÓÓHNNÆôô4¼½½‘’’???tvv. ÜõôôÀf³IåÇjºÝnéÓœEBB,‹€rÍÏÏK_:g8Š*..NJÑŽ?.e¢êÒèmhhÀ… ––&#xŒA/-o5éÃF9£ûÍõ¡ %^“ÿ3³c4 u…外Àgõ _3*Bý}~^ƒ)ñû:Š>;;+Îii©pé|xyy‰|Ú½{7Ö®]‹èèhx{/N¡àüjàÓ€Ûb‚‚‚???);¤ÇiúbeMBBnܸ¡¡!ܾ}PPP€ÒÒR¬_¿ÓÓÓ˜˜˜€Ï"È'÷ššé·4™L2ÊŒÀeÄähmmEHHˆÌa& "¶ž°²ÈÏÏ×®]ƒËåàÂøøx˜Ífœ9s¿úÕ¯,:ìûöíC]]^zé%`hh}}}¸s纺ºŸŸ/¥÷ÁÁÁ¨¬¬D]]†††0==ÜÜ\üö·¿Åôô´L 8uêZ[[gÏžÅÓO?ªª* H¥\ww7"""¤ï”:‹½ÈÈHqœššŠÔÔT”––JËƹsç„7ŠóJÚ×)Í7@ú”ÏFƒ\;éËñði»×Á÷¿ÿ}´c?.ƒ¬ Agg'^{í5¬\¹qqq2Æ–j ÂÃÃáp8Ð×ׇ¤¤$”””àÚµk"æççg&006› —/_F@@RRRdDdpp0\.—´Ðþàä‡Ã!í›t\˜)ebÄí^ f"ƒCèëë‹ÄÄDtuuáÚµk¨¨¨@MM ®^½ -³ÙŒ‰‰ |ç;ßÁ¶mÛŠÚÚZ|ðÁèëëCNN¾øÅ/b÷îÝ]Þ»¯¯/._¾ ³ÙŒ’’ÑcÁÁÁˆŽŽ†ÅbÁèè¨T!8Nô÷÷#11Qì‚І††Ê«¸¸8¤¥¥aÍš5ÄþçbÕªUظq£´àhß@„ âØÙÙ‰?þ©©©hhhÀ¿ýÛ¿!##cIž¼À„í=m‡/,,` vüõõIó:™c hk=£yÔÈ[Zßð·Xhÿ@W»ƒv¤…Dë?-Cø~Ž˜>úÐö©®NbõIdd$žyæ$&&âç?ÿ9Î;‡œœ¼õÖ[0›ÍHHH@ww·T¾_éÌ™3Fbb"òóó100 m¤¬ˆ‹‹C~~>‚‚‚pýúuŒŽŽ -Z__ŸœsõêÕ0›Í8yò$HÒ–ËøÌœ.C;*??_l{ö컫§§G¦éLLL ­­ MMMøïÿþo¸\.¬Y³1118pàüýýô‰Þ½{÷ŠnžŸŸGJJŠdý9™```'Nœ€ÍfC^^¦¦¦Lm0·nݳÏ>‹­[·âùçŸÇŠ+JÛëÚäAŸ ¢¢Ï=÷þð‡? %%v»]]]ˆˆˆÀ¹sç°bÅ -lØ°aÉy4ýQ®.¸6¢´³ià¡{¿ŒŒ¢Ymhiæ0^ˆÇreú5ŽXaÔ7°°°ˆÐ:==‚‚€aÙ!ïÅd2!)) ááá¸téZ[[áããƒuëÖ ‹¿¿¿ (³ÜƒF|ii)¶lÙ"ã(øœt.i$èH‹Þm4 P-Px¯³³³KJt9ÚOµ:¢©ßãßz#™I ÜZ{Q IDATÆŽ;0>>ŽŸýìg Åðð0FGGqôèQÜÿýØ°aƒô sž¨¿¿?bbb066†ãÇ£££QQQRžÌ’òØØX8N˜L‹=¬sssEll,088ˆ¾¾>´µµÁb±`jj -ÃÃÃ(,,”1=ÄK˜˜˜¼õÖ[xë­·°oß>ìÚµ ©©©2#݈Ñ΋QPSájç…ô¨ÛttšKÌô^K|]žÆ½1î½Þm(òûTjúÞ`/Y@@À€›ÙÙYttt ®®|ðjkk±zõjøøø 77"ÈzzzÄ©f$—Q_ŽNþ[:M4ÀÖ¯_/Š‚#ð¼¼¼d¶1#ÕTÐƨ#ŸOÍè ¥¤¤,ù.3.:®yKï­v4yè^i£¬ÒùÌÌ &&&àv»ÅP$8ÙÐм½½QSS___TVVÂn·KëÁ;w’’‚ÈÈHé+›™™Y’eæóéÖ —Ë…þþ~LNNb||\ÖÛf³ÉÜw*ÇÇLJ $$D°4ÜîE¬Žèèh ««K¢ö©©©ðö^ÄpÈËËÃsÏ=‡˜˜ÜsÏ=ˆÒkHú2Ê Ý^ÂõÓ|¦¿§ -£Á£³º¤ÒËËKÆDêò~­ȯ< 7¾oäyÞ£.åë¤íœ0ûâçç‡ööv<ûì³HIIÁìì,Ün·8ÌÀb%ÉßþíßbçÎÈÉÉAtt4—誻#´BfpL£‡¯¾ú*~ýë_#55UÊúÙÿðã´´TJŠ].nݺ%å-ùQ£Ïg…­c~~~p8 ÄÕ«Wqûöm™‚Âé,QfjDDâãã¥j†èÒ333ÒÒRZZ*UçΓ)8óóóعs§*&''£¹¹ýýý2ùÆétbÕªUHMM…ÕjE{{;ÚÛÛ±víZxyyáرchjj‚ÃáÀøø8yäŒãã?F__Ÿ!Åš¨×999ÒGžãT”ŽŽdeeaçÎHIIA^^ñøããµ×^æM›–Ø—ÛgwÚØÓUe¤K]îOú üÒeü<¿v´cáñx¤mÇËËK‚ZïO©ÿ–»Oò1ïQ·áí“É´$°«-´ƒE§O—\k™ìv»ÑØ؈^x‡™™™‘À§iÌÍÍáæÍ›ðññÁ™3gðÎ;ï*++¥*--MdeŒÍfƒÉ´8n¶¾¾‡’faaaîçåå…ØØXx<‹-ž¬¾Š‹‹“ 9{|¹ 2’–º‹˜/Ô/¬8›žžFll,üüü˜˜(%ÇŸûÜç0??[·náÂ… ðññÁ©S§011!X eeeX³f BBBpèÐ!üâ¿@dd$rssáp8ÐÖÖ†¹¹9\¾|2¥ÀÇÇ­­­Åèè¨ë`·Û¥m‘@™ˆ‰‰Áõë×qíÚ5©ÒóõõŦM›¤ZbffGŽAqq1{ì1ã½÷ÞÃóÏ?;v`ÿþýX¹rå’VÊ!ÒóÄÄNŸ>k×®Á××_úÒ—°mÛ6Y;Ú&#¿>µ~×aÍw: @Z5¯Ä•ü¥ôùŒ> ícpZë#òª¾yœß×úX_GÛ:ù£~ú™5íkJ ¼½{÷Âd2áûßÿ>æææ‰ÆÆFܼyåååØ·orssQRR·Û- —ÞÞ^´´´`åÊ•(--Åèè(ìv;nß¾‘‘<øàƒÈÏχÉdÂÚµk¥ÕŠA0N:‰GJJ -}ôQܼyˆ‹‹Cff¦ÚÎÏÏKeŒÛ½8¾–c]PPP€…… ¢³³StÖ /¼€ùùyìÚµ ßüæ7eRÚÜÜnß¾ »Ý¾Ä6LJJÂÚµk‘––¶D2!`2-€vttˆMÀJ ¾ït:%ÅêóŠû«qc4½pŸ}||°aÃô÷÷ãøñãÈÊÊBgg'®_¿»ÝŽ—^zIZ4X%e¯‘/´ß©?g´QŒ|ÂϪ@µ&.Íÿ¯‡V¢¼afqoß¾úúzœ9sgÎœ‘Í DAAÞ4> ÜGçŠ÷üü|x<gÄÃl6K¯²··7ÆÆÆ «ÕŠþð‡2vFo˜Î&ëç7FP– ÆÏ,Çøú:Ü-hŒåHÆh¾¦Éd’¹Ï>ú(, ž{î9ÉdšÍfA:÷xQb“““ˆ±±1X­VÌÌÌ`jjJÊÝ\.—dhi„twwK¯ ûÎfffP\\Œàà`¾ñöö–ìg•³w–Š?33‹cccxýõ×ñúë¯#77[¶lAVVV¯^-ãÐôZ2hB¦¤Â0öyŸö÷‘ðI/ …»qOõßÚèÑÆéF#4ó~41ÃOC‚ ~–¶œN':::ÐÐЀ÷ßmmm¨¬¬Äš5k`³Ù-3JY2O:eé?8gÎœÁ®]»PXXˆüü|äää °°PöCW0øøøÈ2 -K -LwË)O½æFÇ{¦×Œ¥ñ»šøžþ.NÒЙg~W+"Ò’÷XÒ¦Gú±û×ÖÖ†ÆÆF466âèÑ£ 8ÉÉɲ§¬  VWW—(ýÉÉI8NÌÏÏczzZ‚ûÌÊÊBvv¶ô_Þ¾}[ÀÑ86fppPJR½½½¥µ··¾¾¾ÒÛDQQ’““—(#Mƒ´Æ &yE·±÷GÓ?Ø>@zæ}é}fÎ(Ç4½_Óÿ/ç|ÓñÐU<Ë=7ÇžrßX²^^^ŽêêjAþ•²{±ŒÙT#Íþ5#’`kk+¾öµ¯¡§§GÚa&''±eË|å+_ANNŽÐ‰ÝnGDD„Œð"*zkk+‚‚‚d„-A™4Š‹‹[Ha@Ÿà“ F²z‹•Z“““DMM fff°~ýz™àqçδ··#** -ááá°Ùlxë­·P[[+¨íëׯGSSþüç?#&&——‡ùùy´¶¶¢££_ÿúב““ƒ_ýêW8r䈴æpdaUU, V¯^èèh477ãðáøï¾û°ać‡ €att´Ø V«U2™W®\A||¼ô{z<i×!Opp0öîÝ‹£G"33YYYŸÑýšÎŒA¨åhQóÌrÙ£á¦ú ^ mÓ™âfíù›öñ|š—õ}ðsË9Q¼?Ÿ©"ÐïégÑï“yÐ~šŸŸÇ7ðë_ÿv»‰‰‰èîî4m–À———crrRú‰éINLLD\\œd‚õôÒ}II ªªªpúôiÔÖÖ¢»»[x™÷DœÚŒÔ‹­­­’0òóóCDD¬V+æææd²F@@<TxšL&„††.Ã5›Í– -¡žžìß¿_zŠY5ˆ„„äääàêÕ«p:8þ¼ ³ÏÍÍ¡»»ÇG{{;úûûeSRRŒŒŒ ”””HIqjj*FGGÑÐÐ @>>>FMM víÚ…ÜÜ\œ9s.\ÀöíÛe h__òòò››‹––Y;³ÙŒõë×Ãjµâ•W^ÁÐоüå/cÅŠbí±óçÏãOú***ðàƒbÛ¶mˆŒŒ\Xfp‹ôoL§ø:yÒÈKtžéòûºýÄXªå¶1Ù¤ù];ZšæµÇ¿ur‡•¤ ØjÞfðÊãY,¹÷x>ű"ÿñ\:X§+nØ`à¡©© (((ÀÁƒqùòeœ>}ÿôOÿ„±±1ÄÆÆJ‹”¯¯¯`…††"66###‚‡–ö<¯ÁÁAx{{#77ÁÁÁ˜žž–X¡Ìç)))è}¯”ÄjâjVÜü×ý†‡‡‘ŸŸ/{¸oß>i7&²~CC.^¼(­uÞÞÞbC¥¥¥ €eRR’`ZõõõI°»¥¥/^Pl›Í†€€ÁûðòZ¬ne2ç»ßý.¦§§ñw÷wX¹r%8€ÜÜ\‘G:FÚ¢]O÷êêj\¼xQ€¡ïܹƒ¬¬,¼÷Þ{¨®®ÆO<±¨Ùxí càw¹ÏéĈ~}I €Ž2ÿ5#ýÿäàwt$‹¿ïܹ‡ÃÆÆF¼ýöÛ8sæ ’’’¤—•™zfŠé@2Z<00°$BÂ,¤‡=00PÄ;w(ÆULL Z[[QXX(óYu$\/×e9Ç^ËmÀ_;´Ò]îºdnfŒëoÜ–ûûûcçΘÅ/~ñ aŽ¦9}ú4ìv;âãã+ãÚ&&&ÔŠÆU__Ÿ E³ŒkÂL>ƒGÊJyï999ð÷÷Gss3¼¼µRSSÅ霞žÆøø8ŠŠŠÄPfèæÍ›ñÄOˆaÈ1ÏM‡™Qy4"-û¼Ž+ +Ò‡1Ò¬÷HÿÍ(×^h¼éÖm˜éŒFü§p˜ššÂíÛ·ÑÝÝ «ÕŠ«W¯ -8O||‡Î -V½MLL`ttÃÃÃèîîFSS“àV  -l\\ÊÊÊ cˆ`µZqýúuy®””i `áÓO?-ýä¬2YXXì>|ø0jkkÅ©ÎÏÏǵkפÕîüùóâh¬X±cccèîîFKK L&&''%•€ôôt|ôÑGرcž~úi=zëׯGNNŽ?à¾ûîÃæÍ›±°° /¿ü2’““‘šš*òÎb± ººZ²Á ø³mhvvV«===2V£:‰b¬’1òŠæ#½Ò©Ñ2Ž³¢HóŸæÍ?:û¬3‰ÔãäYÊIê<­Søò±vÞu5ïÁHÃúù)w©ßô¹ŒÏªƒ Ôƒ­­­øÉO~‚®®.deeÉD Î -øᇱuëV$&&Âl6Kµp]`‰#¤+68Ú‹û‚ììlˆ}H™dµZ±nÝ:8p2=†Õ ¬$•çç>ÎÎÎ"..NZ„H…)4ÜW& ’’’ðãÿ¯¼ò -:::¤Gßf³!99pêÔ)\¸p øêW¿Š;w¢··WF-ôÑGø裰k×.©Z`E [`ÓÓÓ/£½½]ÚÍ\.¢££‘ŸŸ††#33S°{&''ÑÕÕ…––wËÌÌDRRÆÆƤ:©¹¹÷ß?öïßšš¼ûî»(//‡¿¿?ÒÒÒPYY  ,,,à+_ùŠLëÒÕ¬3ÊN-ß5ýj;„ôÅu¦ž$8ÏÁß òiZÒô«e»±¢KëE}OºÚŽçÓ-ÃÚöÓÕŠšÇõÿ¬¢3<¨cÕ}ü{~~---xýõ×ñÉ'Ÿà‡?ü!Ö­[‹Å‚¢¢"„„„ ¹¹õõõ¸yó&œN'®\¹»ÝŽôôt©*EFFâããeÜrRRÒ9D»›-‡|>ÚO¼_“iqŠu(c£=¨LkÖ¬ÁåË—qìØ1ÑO111ðö^Ä5[µj"""àv/ŽeKiDDV¬X´´4ôôôHµGoo¯L¤ D[[z{{qãÆ ¤ -©,§Î¦¿˜––†äädtww£¤¤åååðx<¸}û6þã?þv»ÿðÿ€ÌÌÌ%r˜k íR" ¶nÝŠ7ß|eee²ç%%%øãÿˆŠŠ -”––.¡á»ÙGËù…š–4§ƒ[&“ >F&ÐŽ?¿¨£\FfÑ7 Ë¿Hf†Y·ÙÙYÌÎÎbrr·nÝBMM :::Ührr±±±R²DƒŒ(óéÓDƒhjjJ¼Ãá@XX˜”‘鉊<77' vìKùçþgAZÕJNGôø\z#´Óþת#ôûF#QGñ–û,¯ÏïiB2–Ø‘¡áô÷÷Çž={àããƒßÿþ÷8þ<ŠŠŠ`±Xàp8pêÔ)8N"%%iiiÍ Ñââb¡ ‡Ã7nàÃ?”8™úÚµkBô,k#"_§ÀLHHÀÂÂ%*æíí-Áññqøúú¢¾¾§NÂðÈ#Èì]’%š9#«Æè–6VŒkF'Ê^ï­fý]ÚNšà9´ƒOÇG;ÚÉÒ4þY\»v ‡«V­Bxx8&&&DØúúú"77W‚6~~~hkk‡qhhYYYØôð$ -qf·M&“”:`’Î+3©4¬´C§£ã¤?cù(ß×4MšÕJQ¯é_ãžC¯+t‡{¥¿§E½ï” š‡Ýn·n·[€<µ=33ƒññqX­VX­V466âÝwßÌ……}bù1Û‡&''ÑÜÜ, ÑÑш‹‹Ã­[·ÐÝݽl`VÒ†399)=ˆPM'ujj -‹ðÞ{ï!??_z3k¨.FžÑä/]Ö¬+\´£¤-·øc̤ë{Ô{´œs­2ý÷GÓ§ùùùaxx/^Dtt´è·‚‚¤¥¥‰“­ C£½Ûó'ÚaäëÄʈ‹‹“R?¶›}éK_ÂÊ•+—dOÙ>ÀÌ¡Åb‘{`ù±Óé”ꕦ¦& Áív‹á«Aãã㑘˜ˆ­[·ÂÏÏOz‡“““‘˜˜ˆùùyI0x¹*‘ììl‘yëÖ-¼ñÆÒã¹}ûvøûûãw¿û”?3;´°°ØÆ·gÏÄÆÆâܹsèììÄÚµkQ^^Ž‚‚TVVbxxXªº»»qáÂddd 44çÎCaa!ŠŠŠžžŽ //¿ûÝïÐÕÕ%ŽnïâÞˆˆtvvâÌ™3èïïG[[°eËDFF¢¯¯o¼ñâãã±råJýeÀŠrBäFۇδy(û yä ByKYÇ÷HpXWŒiÛßÕAií´m7ÊêLcfÈè¸h»„²œ÷ª±ytV—ôìp8ðî»ïâÂ… ())Áøø¸Ð9G_=þøã2eFË>eÏ | -ÇÏQž±Rêƒ>ÀË/¿ŒÌÌLi"NÂÐжlÙ‚¯}ík(**ùKdžϻœîã^3øBn9Þ§mÄÉ,¸÷Þ{áñx°ÿ~”––¢¹¹qqq Áõë×aµZƒêêjìÙ³GFº\.444 ³³ëׯÇæÍ›áëë‹#GŽÀjµbppIIIؽ{·;Ÿ|XÖá÷¿ÿ=¶nÝŠ<õÔSˆŒŒDEE…T]’Æ4 ו÷¨í }P¦ñ}­cÈHšû íB­ëuÀŽ×g¥ miÚâºìZó†PèëuYäàãùynÚVš/¹4Goo/^{í5´´´`ûöíHNNÆ­[·000Ç#~–ÛíÆÅ‹ÑÓÓƒììlDEEáöíÛ\~íÚ5|ë[ß’•\'®¹–´´=H~Õº6²æ#ãúQúûûËXq³Ù ³Ù,;ŽD&†’É´^ëp8°°0 â“ž7n܈øøxLMMáÆ8þüðCœ>}­­­¸uërssˆöövüáÀÊ•+QRR‚”” 55ÑÑÑbˆ0[Ÿ––‡ÃƒbÇŽ(..Ôf§Ó)“8jƒš¸¸8Ý"¸Kl’’’d¶——‚ƒƒ­§§¯¼ò -jkkñ /`åÊ•‚’Éò)®µÊP(k#…kÌ×ù=-Ø–ã51fXîI6fVt–UßßØØN:…_ÿú×2&ŽÀ;022"¥ˆn·[ÀˆØGLÔý¹¹9¤¦¦bÕªU¨¬¬DZZš8øThÎì6f7I‹ú9ù?¼ŽòÒ°ÑëD¾Ók¡Ÿ™ø ð-eÏÊî×ËhèsŸN/ÿg„]óûe™e#èùOï·ñ|MË`ý£¼ÕÆ -í¬¹ÝnŒ#""“““˜››Cvv¶TŠÑØ3ê^ËèéUÿoìžžFCCNœ8§Ó)ŸŸ˜˜4a–ÏêsëóéêÇ#€ƒ&ÓbÛWUU•`Sðy ˆÉŠ¶ @*¹ÞÚ¹2ÚþþþÈÎ΢  xñÅqñâE1Üš››±sçN¬Y³FÑH;Lxx¸\£¸¸nºoß>dee¡¦¦ÈËËÃèè(Þ}÷] àÇ?þ1 - …{î¹hhhÀåË—qéÒ%8N„„„ <<\ž÷Î;"S™4˜ŸŸÇ'Ÿ|"Žugg'^}õUdddà«_ý****¼¤ÔV9u‹y”í8Ì@’vøymÐ1¨}íè2át:¥"Dgߎ%äCò 4Š,©š3&j´œÐF:ùW'FŒÁ=Þ!t²ÚÛÛñÚk¯¡¤¤D€Êîܹƒ|;wî„ÅbYÒC«å·‘y_ÄÑv™ÎÊòóÃÃȈˆÀàà ¢££qëÖ-<÷ÜsX±b…È ·Û-€°ºLYƒyê{#=« x0ÄókX\\Œ½{÷â½÷ÞêU«““§Ó‰k×® XÙ£>*•]úÓŸÐØ؈իWcÿþý˜ššBMM þüç?£«« ™™™ðööÆÓO?{î¹³³³(((@^^Nœ8……)i& q:;;áåå…ÄÄD œÍÎÎ"11ÑÑÑp:hhh€Ç³˜)}ñÅ‘€—_~/¿ü2222PUU%4o·ÛñôÓOãСCX»v-vîÜ)Ž/u°–§š¦hËë µõ‡¶Q´3¶Y2XÅ=ÕŽ¶¶54MkgÉèük›NÅ5ÝëÊž‹Î m)mj}²œM¤m[Dພ;w·o߆Ûí–òø×_‡†.]º„{ï½÷Üsî»ï> `zz&“I¦õööâ{ßû¶nݺ„õ=èõÖº—ûÉuàÚÑ$}ð|Ÿ²Gï_ZZþæoþ?ûÙÏ044‡Ã!m©¬æ!tËÉ+W®Äƒ>ˆëׯ£«« ===øóŸÿ,Õ:LÀn·KðxzzZZ­€Å :ïmhhHZP__>ø ˜œœÄ•+WðÒK/!-- %%%ÈÉÉÁC=„œœ9é듘˜ˆ§Ÿ~ZxnãÆHLLDAAÆÆÆpîÜ9¬^½Z’Õ´#ÿÿËÑ™÷~ðƒþÚ‡µ»[$‚Ÿ#ƒÌÎ΢µµ'OžÄ­[·¤ôn~~^úcÅc‡C¢/sss- € Df9§¾†Íf“òu -jºt‰‹‹Ã7ðÝï~<òȲ$FŽ‰¡Є»Ü×ÌÈÀÆ€û‚µ@1®³Î0;¥#‡¼G£ãDƒ‘Ïåëë‹ääd”••aãÆ(++Cii)ŠŠŠ¤gxýúõX¹r%rrr°jÕ*#&&FúKuä;**Jf=³7ó{ýüü,‘8–Ö0Êi2™„˜m6l6áçç' N§¡¡¡ÈÌÌð9‹Å‚––¼óÎ;ˆŽŽ–2PQã³êýauÁìììP<“É$‘v.è\i`ÜG~ƘÐN½¦ñÖY¾;wîàÖ­[xçwðÓŸþAAAÈÉÉg€Y :SãÚ¸q#¶mÛ&# ž†Õ«W£ººZœP­8uæv``@ÊàuëÁÿ©”ÉCF‡Áhüs@>z YÂke_;¼gml‘§)´R_ι§1§384Ìù|šoÙ$`i°“kÁ{0™LÒW\^^.#à"##™½\K¶TmÚår D/ºÁ IDATÌÎÎÂn· ¦å« Hw4JžžŽàà`ãæÍ›())‘ñhš?tǤásê>zÕ׆ʞŽ ×ÒhóûF,m|éuç{ü®væ{Gšv¹\0™L2ÿY?7-]]]Òû¾råJìܹf³y‰ž3:š>ŒºOë„å Jg±õãå—_Æ[o½%NÖÈÈöîÝ‹gžy©©©Rz¨ àôéÓèíí…Íf“9ÐÍÍÍhmmEII Ö®]‹¦¦&üæ7¿AUU6oÞŒÙÙY ¡²²RZÖDÕÜÜŒŒŒ ÄÄÄÈŽ¯ -GOOjjjàv»¥’Æív£°°ñññ°ÛíèëëCll, - 1;;+c±BCCa·ÛqäÈLNN"''GFZ÷žrAWñs”ü›8­ó¹Ú‘ -éJ%Ê2µŒ¤ƒÏ -Hò›æm¯Qé*.¾¯³‘¼Gfô¢åºæV°ŒŽŽâƒ>ã? áááسgzè!$%%IVXÀ´ã¡×\ëí¸kÀµjooÇÉ“'Å) <ššB^^>÷¹ÏIeÖ÷\-sxÞ‹^~Çø£ï…ûÈ}6›ÍÈÊÊ‚···L{©««“{IMM§î§?ý)Ün7¶oߎ½{÷">>gÎœACCÊÊʧӉ={öàá‡Fdd¤Lï(..FFFîܹƒžžž%Ui¼m8Nµr¹\BZZL&nݺ…¨¨($$$`bbW¯^Euuµôþ_¸píííÄÜÜÂÃÃ…úúzTVVʈP­ãëÍ}¥.áþ“§¨;Iózj _>Eþ׉0®9÷Eg¯ï&ÃIZwéjN£s¬ƒÚ>2Ò³æ9êNÜå=ÜÍÉ#­ó{¼nww7^{í5 £³³{öìAYYÂÃÃÑÖÖ&ò·¥¥E05¨/&&&d:SLLŒë1x¼œÜÓkMÞÓk«e“µ´{uÐQët®+÷•- DFF†LÃa0722±±±–Ö¨™™\½zû÷ïÇç?ÿy¬\¹>>>øå/)c—uõRll¬™ÓÑ'ø¸æÛ´´Å KCCCÈË˃ÓéÄ¡C‡ðñÇcaagÎœ‘Š3ŽÙ|ûí·ˆòòr9'×NÓQBBbbbàv»¥ê¢¿¿ÍÍÍ8xð ø¤—¿–á_îÐ{f”«â<ÿüó/ð MÀw;ŒÎ¿&2ñðð0š››ÑÛÛ+}S‡Cʸ!ðòZœEÎE¡€mnn–Т¢"dgg£²²?þ88€ÊÊJ .…¡ çæZ,455áÙgŸÅÓO?ðððe#p¼‡ÑÑQéDåltl¸ˆËHô•ìôôô’<üŒŽ4s=™‘áõ)$´sG!Êî%_@LL ÒÓÓQRR‚ÒÒR9UYY‰ââbdeeIf‰Y+\*Y²²²¤¬.;;[ÊuØ—¦rfO 8ECe®ƒ355%t1>>.ÏAâСC8uê - - -YžïHgóèÀrÌËõuòr -ÃÛÛû3#¢¸'FFg%šúsF#%á'NœÀoû[¼ÿþûHHH6"!Ûívi‹ÈÉÉAEEžzê)<úè£())‘Ñwýýý¨¯¯ÇÌÌŒ”ïéûÖJˆzrrRœ†å””n§³\[½¾tÀ4ú:÷ç–F¯™mÕQp½¿\7fl´âᵩDŒk«³ú³^^Ÿb.PëÏ‘¯ø-dµ1¢¿C¾ -  ¶üü|ÉèÌÍÍáÚµkR2f2™¿„•1,ÇÖë@ðBCCÑsÝ`b;U`` D¥ÃÃÃqöìY¡¤¤DöW¯t÷¸îÜK½ÚÙ7Kzï¸W:KGC“ß纒·øºÞ£ 6¾Ï}áµx½ññq™ÿ«K§yÐÁ>sæ æææ°qãFìÞ½yyyB?úàuõ}hšÓ²BË|cЂƌÇãÕjÅôô4‚‚‚ÐÝÝÇ{ ›6m`:í@jƒS·zÝõu©/´þÔ¯iý`ü,õŽñÿå]M#À"°nnn.ª««QPP€C‡á{ßûâââðꫯ¢¹¹sssÄž={`6›qùòeô÷÷ãÉ'ŸDhh(Ž?Ž¦¦&|ùË_Fzz:¬V+FFF022·Û »Ý«ÕŠÈÈHܺu 'Ož„··7bbb///DDD ¸¸k×®Evv6º»»QWW'8”ý‡‡ÉÉÉؽ{7æææP[[‹+Vˆ†?þñðòòBNNŽ€*êVÒ5÷EëdP6:Ô)F§ ÕØ5¤C~OgÐŒƒ °#,,l -é ¨åìŒåvü®®b2Ê:SÄàÑAV¶Š“XÌz=üðÈÇNÛ:¨b¤×™™I†hšåç¸mmmxýõ×áãパ‘ÑIâ{â‰'P]]€€Ù#ˆ™‘ŸÉ—FÞ0êý=½þF§688===8{ö¬$ÆØÞ677‡wß}W®\Ác=†'Ÿ|ÕÕÕÒ&022‚Í›7Ãl6cddDü«ªª&G:õ´í8ú ¹‘‘‘Kô­ÇãÝn‡ËåÂêÕ«ŠÆÆF¬[·IIIF}}=²³³qÿý÷#..v»÷Þ{/ - - -044$Tõõõ2~s9çVÖ¹¶”q P¸·z­5=rß5h÷Ìd2‰­gÔ/úÐôd ”r_é€ér#ohGÖøš¶!øìÆç0:lÚþ&ð___LLLàwÞACCîܹƒÐÐPlÛ¶ IIIˆˆˆ€ÓéÄïÿ{DFFÂßßCCC2vobb---°Z­¨­­Å·¿ýmTUUݵÊXó…ÞG}ïúsÃÃÃð÷÷Ì)-oô^è}6Ž¿~ý:bbb$Ñà嵈Y¨¨(©¿sçFFFP^^ŽÒÒRiOOOGkk+ÚÚÚ²¤­’ÁJ0yL6³Ôß××WÚXÞyç|ôÑGøö·¿üÇDTTŽ=Šòòr‘ñqqqp»ÝX·nÌfó’ì½–<ÿää$.\¸ ­À===€cÇŽ¡´´T€Ù²Fï‘–ÙFÿSï‰q½ÿå_þåm„?¼aêó;ÆÐÐFFFàr¹8…ßg¯"{Ž9G±¿¿gÏž•,Mvv6Ö®]‹êêjlÚ´ [¶lÁîÝ»±gÏlÛ¶ ›7oÆŠ+PTT„øøxÔ××KoºÍf›Š)&&½½½Ø½{7¾õ­oIº&J½À¢R`D]+9ìììÄøø8jkk±yófdddÈõ(â¸çŠŠ -DGGcddèèè@oo/bcc‘’’—Ë…‘‘AL CTTZ[[ñæ›ob``@ÚkÖ®]‹DGGcÓ¦MˆŽŽFnn.ÊÊÊ011ööv8NlݺBƒ:cOýJú×AFÒ/i“û£uµ®Ñ8^‹ô£ùˆÕSºÑãñHà˜öÞÝô#å¿æk:æFÐüÁß:©F|^›×á½±ÅNÛOZ/ûøø`||GŽACCÃ’Ji^ÏÇgqmSSÅù˜˜ÀÈÈG¡3¹DàT£ÿÀûã¾èÇr> ×jllL0¨èë}ÕA·Û-òÆËËK*.]º„ÆÆFDDD¶ å“…“““ðööÆàà 6oÞŒ¢¢"I\eggcݺuˆˆˆÀÑ£Ga³Ù–LúÑö¦¶wzzz››‹Í›7c~~YYY D}}=ðÈ#`íÚµ€ÜÜ\DEEa``QQQ‚°uëVInkšÔ2ß×wq”ïÍ›7QWW'Õhááá°X,¸téJJJ·ÄÁ7ÚøËwóÛµMãýüóÏ¿°œ3 -¶å.HBhkkÃG}„®®.tttÀår- ëïïÇèè(úûûqõêU\¿~SSSD?***°{÷n|ñ‹_ÄSO=…]»vaÅŠ(--Evv6’’’˜˜ˆ„„DDDHôÖãñà“O>Á¿þë¿",,lI)åôô4<Ì%.** /¼€¬¬¬%†±Ñð×Q`N#ЂE;€ÚÈ2FµÑ¤‘å H­ÂFŸËËËë3ezÚ!ÒÏ£gùòúËU h'F+9#hƒBg¯áã?Æøø8ÒÓÓ±aÃlܸf³ýýýøðÃqâÄ ôõõ¡§§QQQ¨¬¬§¶¯¯MMMGpp0ŠŠŠÏêñx’’‚††ôöö -ÈÎœÑXã>Ò!d„QüÚØâçu0@ z-¸ôA…¡ ÿ»1ç7ðãÿ999——ííí°Ùlxá…ð•¯|÷ÝwŸÌ<&’* 6V¹P൴´Àív£¬¬ QQQ‚Bot¨tæ‡ücŒàj%ª #}#Àºlkºi^Ñ+m„iÃXò©÷N_ß(ïvm½_Z©óZÆÏ.·‡FÃΨüx‹Å‚ÂÂB‰ÄgggKIóÈÈ"""*ΛçsFFFÂl6Kéj@@"##áåõi?/ƒN­­­X·nžzê)x<;v ™™™2Ç^;\_MÇäîæ%í|o½VFG•†<×[+@cæn¼²\`¸÷ºÑd2IvKߧɴèKNNFZZšŒÐÓŽ„1nTšFCÎ(?Œ´Ãû£¼nhh@__Ÿ8:9rçÏŸ‡——\.H¿¯ Qíl𵿶†Fm¹ÏØË×Hï<ÈG¬D)..†ÓéÄo~óØl6ÄÅʼnñO$q"’ ¡µµøêW¿ -oootuu¡»»ýýý°X,ˆˆˆ@dd¤$ -cæñäÉ“˜žžFXX˜ɼ½ÛÔ²³³QRR‚¬¬, 8ŒŒH»ÏŸ””$¯ûøø 11cccˆÇáÇa³Ù™™‰¨¨¨%Š–™¤NÓ< [,Óëg¤3qæy©‡¦¦¦,:°ä_°öx+êBBB>Ó -Ç{Ð6„v&H\Œ÷£«ŒòÀÐüÊë1!—Ë%=ãluÓ4¹œÃÄ×t5‘Dh’ÏÜÖÖ†'NÀb±H²) ­­­xú駱gÏž%àZ\GÍ7z´Ü2ò¸q/5¿h‡IŽy­äädãÝwßEnn.†††àç燀€tuuá‰'ž@NNêëëñæ›oâúõëhllÄÕ«We'§(9lÚ´ ………Kä!“n·!!!ÈÌÌDYYª««±}ûväååavvVF“ÎÏÏ#33“““˜m2-V¯ÅÄÄ`jj -UUU(..F?nݺ…ÞÞ^\ºt 111X¹r%z{{QWW‡ÁÁATUU!33s‰×6¯¶/¨7´Ý«õ -ÿ§=®md®+×ÝX)¥ š¶´ `L(hºÔ¼¦ƒ©Ú¾$ÏÓñÖÏÉóiœÒ…‘fø¿¾mRcÁŸ‰‰ Ü{ï½xꩧÐÝÝ_þò—èêêBDDrrrÐÔÔ$ýølG - Css3²³³ñío[ªrôsu¼¶ŒúDÛvš_–.üE:5ú8ÞÞ‹@µREÎé4“““èëëÃàà l6¼¼«ÆÆÆ°uëV”—— ûùù!..¨®®Fbb"Ž=*ôƱº”­ª§Ï˜˜‡Ã!SpÚÛÛ±cÇ<öØcKƆ„„ ºº‘‘‘xÿý÷‘””„-[¶, hš#úøø ""‹ÇŽÃÄÄ„<‹ÙlƆ ƒÈÈÈ¿ªK´=´œ¾_Î.ZXXXÚ Íšyõ——pøða477crrRÊ>022‚ÎÎN455Áãñ ++ Û¶mÃ>ˆ½{÷⡇Âã?Ž½{÷bãÆ(..y*9m±ÜŒÖ---øéO -g1º633#†²Ìf3ZZZ°gÏüèG?BQQÑ]HGtɬz¤ƒ.4³^T -x£ÓÑDÚã÷µb\ÎÕ×ÓÎ*H„´ºWÎh h!¤…®1‹È×4Ð9tè8ªn·ÑÑÑ())Azz:bbbPYY‰íÛ·ãsŸû¶mÛ†ììl¤¥¥!!!AæÞr VBBÌf³81t’FGG‘””„ÑÑQ/yU—Oë×Æ(Ï©¯gt“““‘™™‰ööv´¶¶"99ÞÞÞ(--Åôô4NŸ> ³Ù ///ܾ}«W¯ÆîÝ»áåå…Ç£¡¡A¦ô$''Ë öÑÑQæ#Øìøø8<ˆ¾¾>Øl6x{{ËÚ²6-- EEE(,,DYY™TZäää ½½ÃÃÈŒŒ”É3!!!˜˜˜€Ãá@jj*Ž;†Ë—/£°°pÉt méõ1: ¬´ÓòHïìåŒ:àÓ±`Ofv^Iõ^SG2KFÚ1êï™™™%zÏA¼-Ã<Ô†=éF 5-’69¿žÙøììl$=2 «iÜHë´)¸NFYÍ5öñY—¾páfgge\¬†‡‡ñµ¯} eeeKžQg‚NŒþ{9Ç?F{ÈÈ#zÏ4/ÅÄÄ`ãƈŠŠÂ•+W¤zobbv»ÃÃøzõ*Þ}÷]qJØæÑÐÐ ‰ »ÝŽÄÄD¬X±Bäõ=ïqffˆŠŠBrr2²²²PTT„ÊÊJäçç#44Tl^“É„‹/ÊhÚ -7oÞ›«W¯bppèêêÂøø8BCCaµZ100‹Å‚ÆÆFq`4š^#jÚñÕû¡MF]ÄC·èpϘ$âu¹>´©Œ ¨úõ^j^&.g73(mL:êÏj½q·V>#å÷;w`µZÑÔÔ„ÁÁA|ùË_Ɔ  ǃ÷ßþþþX»v-’““qõêUÌÏÏ BýÄÄvìØo|ãÈÎÎ^ÖU¼7£~\Î6Òz…{ÇêV-'—³5xÞåtqLL - - -022"=ooo„††Âl6#>>~~~˜•éV«V­;‰÷æïשּׁ,”••¡¼¼ÓÓÓ2Q§££ÃÃØžžFll¬èéÐÐPŒŒŒH†Ÿ•þÒvÎÊe¶iVUUÁl6£¾¾pÏ=÷ÈO½‡úIW±±±HMMÅÙ³gˆ¹¹9ìÞ½»wïFHHˆ€ëv4mÃð¼Ëù·w³SÜn7¼ÿùŸÿù£¡¤—»Zàž;wíííÒ§uáÂ\¼x}}}°X,Ø·oöîÝ‹µk×¢ªª -yyyÈÊÊç/<<\œ. f -£QÅ^ó·ß~Ddd$úûû@²ŒX>óÌ3xöÙgøǨ 5±éEr¹\Rú¦r¹(8$'m¨jãU;F¡Ç»9JFB+#}$f½õ÷—{Vý>™˜ŸÕP %¾F`bb7nÜ@OOL&Zÿ?òÞ46Îë<¾f!‡äœá6ÜERIQ”¨ÅÚlKr¬ÄŠ/²7¶ëfišE—-R H€ÂMÓ¢-ŠÉE§A›I“"‰d;r\G^dÙr´Y»(JÜ)’â>3ÜfæýÁï:ºææC%Á÷½¿¾ HÎ<ÏyιϽ\÷rιzGŽAII ÚÛÛ±iÓ&lݺèèè@cc#***ÐÐЀµk×¢µµؽ{· tX»GÿPIƒAô÷÷ãÖ­[¸ï¾ûÜyêjh9 -´á= -tx¯Uhö8å]««ŠQw:F$Á¶mÛðÐCáá‡ÆÇ?þq<óÌ38xð Z[[“ª&çÀ–“¦Ói·Æ¶¬¬ »vírG8Úl’:îÎ1Ó,(ŽU/uä(‘×È×ÖY·Í*x}Ž™²¤ß©ü©N°}µ|Í{ôÝÖ°é}ü­•?^}Ñ1ØÌ:ŸÍËËCaa!ÊÊÊÐÚÚŠíÛ·cÏž=8pàZ[[Q__ï‚–ÓÓÓH&“èïïGww7Âá0víÚ…ýû÷cÏž=ÎÀ³,˜ËEΞ=‹+W® »»£££¨¬¬ÄÈÈ~úÓŸbnnuuuˆÅbY ÚÕ?^tѹ¥~°çF65ˆâ5w*£lËžìüÒqa@m—WÀÖËySçBÁêoûœ¥‘Õ“¤u °¼ÙWCCNž<‰¹¹9””” ²²»wïÆý÷߆†\¸p—/_Æ7¿ùMø|>466¢´´ÔSgñò’!¯‹}Ñqòy•a+›ú<ÇIJI¥mwnn.Ö­[‡={ö ¾¾GE:FII ®_¿Žx<H$nçq–ó$™……¬_¿õõõ˜ššÂØØZ[[ 155…™™WS]]žžüà?À·¾õ-´µµ¡°°ÐmJÇ>‹9ÛSSSãŽ@ìîîF<GCCB¡&&&ÜQžÍÍÍÂéÓ§±iÓ&°vØ: š´àgtLÐã¥v‡óå÷ûÝ’:wì¼T*åöQþ$ø¦c¯I›ÐPžàsÄ%/ShÐœc%/1XÇñÞ{ï¡  £££x衇°mÛ¶¬çØ®Ú k JeAí‰â’[·náÝwß…ÏçsG™MNNbëÖ­xòÉ'ƒdƒ(*Çú™—£bq1ù_3ÌšÜÑ -¥k8ÆÚµk‘““ƒ÷ßßU¢£¿¿¯½örrrÜÆlÕÕÕîØÚÚZWÃý4*++ÝyäKKKn“EVý±ü, -!‹aÍš5غu«³3ùÈG°ÿ~ÔÔÔ ºº¸ÿþû±sçN´µµ¡¶¶…BÇÅ‹qùòewŒèµk× -…põêU¤R)lß¾Ýmܬ4ѵû¬$Tz+Ÿ( •oé1H¥üOçJ±·Úò Õ¥|·MpÞ•g«é²Zåå-ŒWd{ªG”¡P]]]8rä<ˆÂÂBçÈòømñ]]]ŽŽË'²¼óÎ;xüñÇñðhkkË¢Òqµ/Û§> ?O$…BYAKCmŸÙdlii)05æso® IDAT5…£G¢¢¢ÓÓÓ˜ŸŸÇÒÒ’;ݧ¯¯[·nÅC=ä’Ú.+Z[[Ýr¤ƒbÏž=hooG^^Þ~ûm·I9O©­­E}}=Ξ=‹ÉÉITWW#ãÖ­[ÁÙ³gqûömÔÔÔ`jj -'Nœ@uu5>$ûü(ߪýPÚ­Y³ÍÍÍ8wî>þñãñÇwUtèééAQQ‘ ÖY©zÊÎb¥ñª§x-û7°¼æ´¤¤¡P‘Hزe 8€'Ÿ|<òˆ+y¦BRbÐá±Ù€}w °\þüýï·nÝrëFÂá°+£ºuë¾ô¥/á3Ÿù ªªªÜQIÊ dëè.--arrÒµ§÷*ð±ÙH>¯ íå´èý6Û¨‘©‘d; -¬©x4Ó¦ï±Aý\™Ï*FÛw*IÛ#©©ÔòçMMM˜Å©S§Ü¦?ùÉO°wï^ÔÔÔd-ÝP>`ûÁ`EEEˆÅb¨©©Akk«ÛH­«« ˆF£H¥–w”¯¬¬Ä¹sç°°°€M›6!‰¬pò¨ŒéH¨h0‡<ÈQä‡d2é2LºÖSç]Aë´Ëk,ÑÒÒ‚õë×gmܧ}Qþ· Â ºº:”——£ªªÊ@/Ä9ššr%OlC Ç¥mX'‡é@À¡ QÊ‹5ò:fË‹ttC;k,îå éx4Zª÷S†l9¿cŸ0µt‹íyU+ñ¤-³0kÖ¬Agg'öîÝ‹|ûöís?öØc8|ø0:„`×®]noÍ›7ã@~~>~üãX>±äÚµkNNOO» -„—_~ X»v-ÊÊÊVÍb²Ÿƒ-‹eT_ùÁ«´RçFõAžî}¢ýàsj¬Ô¹´N¹þÍ - ­àw¬òÊìX`b¦ò¥:*úmÏy‚ÔÆÆF—yøàƒ——ç;O9ùÎw¾ƒ’’477» ””Ÿô=Ê·^—ÒAuœ:¡ì¯ ÐXÇËï¿{2‰WŽ:¤ªª -ííí¨¯¯GUU"‘ˆ;é%‘H¸êîz̬!Ï D"COO€åÀÂØؘ;9„Ÿ »¶ÊËËñ£ýëׯw•~ìÇÀªÀp8ŒÊÊJ466¢¡¡‹‹‹èééqU„étÚjRQQ‰‰ œ?Þ-#QþЪ'så{u¾ÕÑÐgøœf“ý~¿+Ûe5€êA~Ï£°hŸhß5 `u¤ê4ÕwÚ•oþÖ -/¿cà—ññq¼÷Þ{˜žžÆ'?ùI´¶¶fÉ£:œ -”7i#ƒ×™L¯¼ò -þã?þÃe}¾å ?úѺcé´ÏÈ°¼Lì ÎKwÙÄê/u@•–t\S©ŠŠŠÜ).™Ìr`§²²õõõëlÞ¼ÍÍ͘™™A&“ÁÜÜ&''ÝÉ;EEEøáˆøÃhnn^ÄgI3ßO;Àùäñ¢±XÌé¥7bçÎؼy3Z[[]§µµíííhmmņ \™ÿ•+WÜÑmétUUUxýõ×ݦӚDP>N&“Ž~v@ÍF«þVLªmÚ@.ýä¦ov9¡µú·òŸò›ÝÄkî9—üÍ÷êþ3z¿Ú•Ž]±y(B2™Äo¼çŸEEExì±Çðƒü£££nyHww7Q^^ŽH$‚“'OâÑGÅÿñ£¶¶ÖUf(^VÛÊK—)-,SßN7·T:Ù¶)ƒŠÏù=í4Ecc£“ñêêê¬û8G‰Dû÷ïwkæ½èKya5LGGî»ï><øàƒøЇ>„]»vaïÞ½èìì°4QžD"Âk¯½†S§NallÌí;óî»ïâwÞq¸MyAySùŒzÂï÷£¹¹H&“ÈËËÃôô4ð‹_üGŽqîñ¤<è%#vnØgïµÀ‚}h5‡Àï÷£ªª -7nĶmÛ°cÇìر›6mš5k\)†þèŽÀʳ-ÓÙ\¸pÿðÿ€ŠŠ -'d˜››CWWþò/ÿ‡^qÜ™PÕqQèæççWl–æ¥üÉ´ÊøÚ¦‚,«¶µš"°m¨N££U¬6úÅçÔ°[¦Ô1é»TÈÕIÓösssQ]] 6 ºº§OŸFUU¾ô¥/aûöí®¤Y³×šyç¥Ê’™Óµk×¢½½ãããø¯ÿú/Ô××#77“““hnnÆñãÇ133ƒ––W9@Þ!xbFš{(èÎöüÑñ•f4Ô,s×,/W­`!ohtŽÔaT±›1êýjœ‚Á ;z‡àÈrêà@<w»"[yWç<Ç{tM«ò;yÅk#Då B5c?é¢óæe”¼äÍË`*@S‡‡íY§ý&uLúýŒàBiÏÏ5 ÂMYÀ #À---hiiASS"‘HÖq¤<5ƒÙ™›7o"“É8@IÙòû—7ÒéèèÀ… póæM·9¡öÍ+ci£´å8ÔÈkP/žÑþé=ê Ð鮯¯Ç¦M›ÜyäSSSèëëÃÐÐ2™ &''1>>ŽGy[¶lAEE…£—ò­‚W/Ç_eKíŽSDò²ÒÜË6±ml4òÿP(„ÆÆFlÞ¼UUU¸víñáápÃÃî nÜÐЀœœ\¹rÅ•©ÏÍÍ!‘H`ll ………ðù–7fhEE|¾åýúûûñüóÏ»µÐöG”îPYY‰ÑÑQôõõ¹u ©Ôò±±X áp¯¼ò -jkk±fÍçPÐ+ßYš‘n^ß©²¥A[ÝDº¸»‰!ÛÖ„ƒVo²tzyÝy]]|>ŸÃ…%%%Y¥Û6{Êþh@Ro^*^~¿ýýý8zô(Š‹‹]òfttŸüä'±}ûö¬²ðL&ãìÛ´kªT?pÜŠ‘Uþé(ªÃ¯ò¡™á`0ˆuëÖ¡¼¼¯¾ú*"‘ˆ›f:£Ñ(‰fff\P€-Žill »víÂÆWT6xÉ°®c×Òoâôüü|w¼(çUÇÈ;::ÐÒÒ‚Ë—/cll ±XÌá…‰‰ ÔÔÔ`Û¶mðùî:ôJS+'üNù @V5.éÍõâœk•/â?‹½ÁVíeýÎ'q¡ÚJŽƒ²JÚzõ[“?äEÚP^KKKÎQ×ÊJî•ÕÝݦ¦&ìÛ·©T -k×®ÅÔÔFGG166æ–i cÛ¶møÜç>‡–––¬ý›óËZ_Aõç†}§nÒ*\bo.ƒ°E¥«b0M¦)†­¨¨ÀæÍ›ÝÒ2. #î`í‘GÁºuëVàeµ‡¶Ò677eeehnnƆ Ü1·»ví®]»°eËìܹ;wîÄŽ;°k×.—Xþ½ßû=´´´`xx'NœÀ믿Žßú­ßB[[ÛŠÄš—¯kƒA±X ÝÝÝøêW¿Š3gÎàõ×_G__rssqúôiô÷÷£¹¹%%%YtU]åÅ¿ú>ÎaàÏþìÏ^°„VCf#2*°: œœ·#³ -‡UDTþVH´“j”Ah‡‡‡qäÈüüç?Gii©ËÎ.,, ¸¸/¼ðžzê)e­÷QØqh¢¹¡šuŽõ²ÆÕ2¶½´|Ö*?/³¿Ú7ë´(¨³Ž–:BªpUÈmÿ•xZg‡ÇåóùPVV†¶¶6|èC£>Šööv·‘Fñ-€VP«cåÜTTT ½½ë֭éS§ÐÛÛ‹ÂÂB·«ó±cÇ099‰uëÖe‡¬¥ÙäEÍÆOøZþSã® -Ýò ùÝÒŒcUGÞ*^ý±Q=>¯`]ÓAÔ>{ñY&“qëIPÞ±L#·@öº|U(ä'~Ïç­Œñ\°A }Ö9fmWÇÀgu^¬¤†ØòœÊÊŠ¤Ê¢ÊÛÑì…ÒM7v´Ñ\ -0ñâÎÚmmm˜››ÃÙ³gÎef‚»wûýËUX¿~½Û9]ò¿fÂØguð4{Æñ©Á·ãTzè„V¿)­Õ²:ÔK_j™§Vk‘Hk/ ¯÷ÚËÚA àØà€‹å)òG"lØ°Û·oGGGvíÚ…ÎÎN¢¤¤÷ß?öìÙƒ¶¶6wT­ Ò*Àµ:÷Ù2mêgu m°Â xé»8n-™µÁ@fªY=•ŸŸh4êª׬Yƒùùy¼òÊ+®ßóóó…B˜ššÂìì,"‘ˆ+wŸ™™qÙ¬¥¥%äåå9  -…ÐÑÑH$‚©©)tvvâÙgŸEyyy–ìé .Ê¿üÉËËsIŒöövãêÕ«s{1Èùo|hiiÉâWþÖ²`[úku’:Óª‹˜õg E3‡ªŸôÝóóóŽ_(÷«}–󯎸ÊyÁâ‹Õ°ÇCLÀ@œßïGEEî»ï>tvv¢¼¼Üµ«Õ ³¨lƒË;¥Ó²xLõ2y‰›žqFFFðÙÏ~k×®ÍZãmí­êÍxZ\¦PM¾¨nÐÀ¯êMÕê8r²Ë—/ãøñãn©B(rÁ©žžLMM9”ÉNLL`qqÑh?üáÑÜÜŒ5kÖdv¬S{©ö‘ºZ¼Ãð –”——£¼¼Çw¥Ù `?~ýèGQUUåœNõ”·4qE>$t3HušlrEyHj;~Ò@mŸ×Xí^6Zñ§º×:ÈùÖ&;4p¦"¶¡óDZª>g³··ßÿþ÷Q\\ì2Ûååå(--EYYR©***ðä“Oâ7~ã7œ滕ø¿êp/lL:Ø -(ê9¿ßd2 {ÃD^*[ª“4h®Ž»nfÜ×ׇS§N9»ÀeÂ>ŸwîÜÁ¶mÛ°iÓ¦,fe—}`RïW_€ÉV¥ñ¤…P(„p8ì–„Ëû´üìg?Ã¥K—000€gŸ}Öm8ϹÕ÷(=mÿrrrP[[‹D"ý×EII‰;ö±¶¶ï¿ÿ>nݺ…––·§”Ú½,Ÿ«Î°\ Xpãà}Ö°?Àé É8ú^e$vXûDÆ:zô(¾öµ¯¡­­ £££(((@~~>nÞ¼‰¿ÿû¿ÇáÇÝ5Ö™³ ©cfPÁËàx]V©x['|5£ji¬FX™Gi¬FX?SÅa˜·62ê¾õ²L¬‘úœœÄb1D£ÑÊAKF6´0Š»´´„H$‚¶¶6lܸ~ÿòQÜÄ©ªª -gÎœÁÅ‹ÑÒ …–«{)öAçG£âJC54:¼O«¬²QCe ½ö‰÷ÛìªÒÏFÇ•¿ø Kêy4’ò’•;Ë‹:ß vPaòsuÂðZ¹QŬ¼Áï4cbï·ò í{éŸÏ—”Tz*½5;hu“.•Pe»Ú{½gVVu~-oÙç´_ä-Ÿo9úÆo ºç•—®]»†ëׯãw~çw°cÇ—EUú¨ìÛ÷zõÝò†ò¶í/ûBϵ¨öÒö­L­v?ßÇ=èxðÒ€‹åi/‡Cû®ô¶òM[¤ë·õÒþÛß4ðeee¨¯¯GMM êêêÜ>)ÍÍͨ¬¬DAAsä,]õ3h³ãð›Ú -‚_kV³e -ðÈ‹Ä(nàû¹yGG6lØ€úúzãÂ… ¸uëJKKÝffáp7oÞt²1==Ý»w£½½óó󘜜t'dÐQ:{ö,žyæìÝ»étör:+vY‹ö•€:‹aݺuhnnÆàà Î;‡ææf·Ñ`]]¾ùÍobýúõ.ÃC½¡à‹´U^QÝÏÏíò4Ò‹z5 -¹$†öŸ%Þ׋‹‹.Ófõ­ê/[¢}µØÏÒÌÊ髺T«¨{™Ef_­3¥zTm0õ™ïIż~~.\À;w°¸¸ˆœœTVVºõÿ´ÉÖqÑDÇ`±¨Ê µ}*KJcÞC\Âl©Ê5±ÆæÍ›±}ûv\»v ®Ú‘Ïšš77Ü€ŒXVÌœÔAñäV0KdŸÑÌöTßkFÈò©•#Õ–/Õ±$íx–¶–*ϨáSù÷â}å-û¼¾“Ï*À°Î¸•ok4ƒÀfÑ³Ö -«måüh •}´küÕùÕþ‘¿tެͰ´QÛeùÃ˹P~*,,Dqq1ª««±mÛ6<ðÀØ»w/ - 100à‚ápW®\Á;#D"áÖfò8Á+W®`íÚµ())A<Goo/ü~?~÷wuuu.8F¾$­mEˆÚ2“œœ444 ££étï¿ÿ>***œþ*--Å¿ýÛ¿¡¼¼®ª€Û°Ïï÷»2oÕáê,ÐÎ(P·(?(+˜U[Á]âmÐHu«—ͷΆò( šÍdÿT¾½ðò>3wÜŒÐ:Öª‡õóL&³bÇv‹‹”ÿ‚Áå#9‚äææ"‘H ­­ û÷ïÏš' –SïjåÇëÅÿ:^:Ö‰àØuÎ3¨®UýÒÐÐà6LnkkÃÒÒFGGÀóÈÌi¯H»d2‰X,†ññq ¡µµÕÕÕŽŽŠ/ÔÉVºê^>” ry9®Ú‡ŠŠ -TTT¸Ê™‰‰ ÔÖÖâå—_ÆîݻݞNÔ÷”9Ή҄ýÐ@”µ¼WyT1Û ½t®5¨ä•|³ü¡÷si6¼_q€õ,ÏèirEm$Û>yò$^zé%׿ššLOOchhÓÓÓEyy9>ó™Ï`ûöíYË]TG¨¨nî.m%͵ŸJ~O:¥ÓiwD,«þÔÖñ9Ž§»%“I àúõë¸víFGG‘N/ŸxÕÕÕ…455¡®®ÎíÍÅ}èrrrÇáóù°wï^TTT¬ðŸ¼äÞÚw«+µB’õ{ @4Eoo/Ž;†üü|455¹ üh_­nµXÀÒcii ÅÅÅhjjÂÆ 144„‰‰ ø|ËË.\¸€ÉÉIlÚ´ ………žIu³¾ò•¯¼`A2¦>öû2RýNŸW†±°³¹¹¹¸zõ*þñÿo¼ñ - - -Üä_½z¿ù›¿‰/|á ˆF£Y xÞëÇ~ÇÈ’ X'^Ç·pR0©ŠÄ -…ÒfCù¾ó^ÊDN½ôët©0ð^;O:Ûžfm†ÝòŽ¶M£OáRåg«TiaݺuˆF£øÅ/~áÖž¢  À• -£±±±X,Kyr¼líø~Žƒ¥öŒ Ó¡`ˆ¬JD;Òw*ÏhZ š05zº~LçÀ:uº'''QPPà²E¼ò„:ä–G½ oh_”FZΦ2¨üAã¯K.8V~ë¬z}¿ßŸ”RžãýºV?ËÉÉqs¯òÌKu€äÖÉU™²ÆV»VÐp¾sssqóæM¼üòË(..F&“ÁéÓ§ñùχr§kTVV®"ú·:‰ºÔƒcSÙÐ9SaÁ‘΃uÒ9~˧^Ñx¥›¶ÍÌ.³z¡P(KTëÜ*Ÿé}ªŸHZ¾Ô±éüj›6â¯ö‘í’§uo/£mmò—Ê°:Ê#|‡×8”OïeÓí¼zÙ+/Vßs¾€åJ¢¢"¬Y³»wïÆŽ;pàÀlݺÍÍÍxì±ÇðÜsÏáSŸúvî܉>øï¾û.öíۇÇ»ý‰Þ|óM>|O=õ”gðŸüÌ€‡u”Þ:ÿÕÕÕظq#å=‡ÊÊÊÀollÄ¿üË¿¸µ™ápØmrëE ®‡ ƒY'ʨ~µ™Uf[¹Ñ[nn®sˆU·¥ÓË›_¬);ß^üÏï¨?鸪sK¤òξ³ºÊÚ4uô”ÆšmµöŸŸY»eí¡¾SÇ|éÒ%¼úê«»¥ÓiìÛ·>ø - - -²œo¥µ•U‹£´?VÚ2j‹+mÒ€—ö;“É`ff~¿ßZÁ Árss155…ÁÁAÌÌ̸}!¢Ñ¨ã ÚI&D†††ÐÝÝ5kÖ ªªjímÐÜÒžz_—´ØK1ïáf‚ŒçŸõõõ®JŽýÕ~[ F¯˜Uet°¸I}:çªG”×IÙ™tuu¹ã^OŸ>ÿþïÿÆO~ò¼ùæ›èëësc½téòòòF]%+½™,+((@ Àý÷ßšš×wM)í•ÔÞ©_Ä>k–ãf•+Ο?O}êSØ·oß -ýÊKõŠ J«^çURR‚ŽŽwêÍàà «>xóÍ7±~ýz´´´¸¤Åܖ椇ßïGàË_þò ªÌ•*(Á¼ž×Ëm_‰BÆRÅÉûÞxã üíßþ-~ü㣸¸ nƒ¿L&ƒ/}éK+6?±„ÿe— -Ãää$òóóWl£Bl£J^ôÓ±ÙÏ,S¤ÓÙ¥‹ªTÈ”‰-ãhÛ«Í™edK :¿J#Þ·šóC'[*ÒŒˆ¾‹sF!æ4¯ö•î¡P hkkÃ;wÐÛÛ‹ÒÒR,..bbb---ÄK/½„ææfÔ×ׯËv÷z+à6X£ã²ÀœŠY£ étÚ)dÎ ŸW°©n@Åûi¸Ø¥3­SÍHX188ˆüü|·Ày¶3??ŸµI ïÕ€J*•r†>d­Tþa8ÇB€Æ÷¨¼ë•N/—;Ò‘Q™PGTºýŽã·elÉd Y%ªä5ÒP匎²ÒW¼‚c:<ÚéÅûø›ÆÄ‚3Ê‹:ºÉdÉdÒUœÜ¸qo¿ý¶;ÚìæÍ›øÈG>‚ööv·Ù%ù€;³oä7ÒeqqÑm4EþRÇ}¥\k€Êií÷û‘H$ÜR-VT§¨Ü霑o9Êû ³~Ì6h6‰¿uý0 ¤Úå;}n5Û¡À ¸ Ô¸qêbÕ¡JŸ……—©Ö€//Õ³êÐS^)ClSAªnŒ¤ßkŸIO•¯þZÚèñCÖþë}ä3ò°Ž‹ã ® ‡ÃXZZBSSÊËË‹ÅPUU…ÆÆå]úS©å’H–—––ºuÌð~ö³ŸÅºu벎¼#ò Ò‘Á]ÒºØçó9¹–«rJKK±fÍ$ ¼ýöÛ(..F^^R©jjjðÖ[oá‡?ü!.^¼è²ÑhÔñ\*•Âìì¬ÓÔ™ -9Gj·ÉÌj±2DËü¡ (**rïd;Ôjcø½ @+Ïé>=¶òŒ*j7ùÅú çÝîy xDyÑ«]]³«I‡P(„D"cÇŽáwÞqe±eeexþùçÑÜÜìt—ʸîC=nƒÜì·öËöW1®öÙnì$e@™Snn®«€¬¨¨À† °aô··#‘HX>}kddÄÉ;ñƒ0±X ×®]ÃÐÐ6nÜ財ªkôýäuê´"K+FT/(Æà|äåå!??‹‹‹Å;wW®\ÁÇ>ö1ÔÔÔdÍåÒÎ3í‘—CcùŒmèüq>l# -eÉŸ×`»Îµ ¨þ³ò«X]éÅq*½ÉœsY:ÓK6ù<õÜÅ‹ÑßßL&ƒ©©)d|ì±Çðì³ÏbÍš5˜››Ãüü¼gÅ“î"?«~P:è,†çfÔÜ|‘8Ã`0ˆ……\¿~?ýéOñóŸÿ===èîîÆÉ“'qëÖ-—°Ã|€3gÎàƒ>pG$ XÖe‰DÂ--¼zs Ø IDATõ*Z[[ñ裺MòïQÿhƒã²vÝ ŸèÅ}¯‚Á nܸ'N //¿ýÛ¿¦¦&Ï€úœc{Z/Å–¡PÈm=>>Ž÷ßßíEàóùÐÚÚê‚ß:wz©œ8ð•¯|å˜K…Ú2¹2Š-^Ž¢ý±ÀŽ[ç$ùý~œ?ŸýìgÑßß–– ¡¬¬ MMM˜ššÂ¿øE<þøãŽUÉòªø,SXE?77‡¾¾>”––f•¬êÄXF si¤Ï‚+àîñ2V•ùTAPÐm;Öqct¬ ´}NºÍô±=7ÅdbÄòU† û®™ýßfb©,³¢¼ì'’:ߤûZYY‰ÖÖV,,,`bbÂmÇ]öfÿþýYkâ¬ã +»¢`Œe¸š¡Óˆ8û§Ž¢#5b:KgÎC"‘p@OéJž¢â áÇãY™……çÔ©¡]XXÀðð°«P~æüè¦?ÉdÒ½Oç“sÄ~q1L­¶à•ÿôô´ë¯$/•ÓŠ ÞOUefvvÖÑ›¼DZ/õEƒehì«5 ¤+×åêqœSö‡NÛ°›f|>âñ8âñ¸ jÎÏÏge-tc¦x<ŽÙÙY·ë÷ÄÄ.\¸€p8Œ@ €®®.lØ°[·nE0tkñ|>_Vp‰ò¨ëˆ)Wší£ãÌh7ù”ýcœ;µ ,ÃGiié -½eíI¬ÎS;Bþ˜œœÄââ"Š‹‹=+þÏì+Á‚Õ±ª I/íŸQЙÉ,o°I}`í‹Ë jq¼l#@òùØžÕÌg(7<ÊNu¤Ú>ís"‘€ßŸ½þ”íé³l{zz:k‰‚ò½¾#N»Œ&Ë m€cN&“¸xñ"JJJœÎà»gff0::êúüïÿþïxï½÷022‚¹¹9œ;w÷w‡‡zh…\ñ]´¡´]¼l™º:tÀr¦©© øÎw¾ƒuëÖavv@[·nESSÒé4¾õ­o¡¥¥Å•n/--9P¦ÀŒôcOy¸ëäò^0ø¼•¡ùùyÄãqº±Û¤€‚tŽÝÊ!«ÛÔž“ß(ïû¨ž%¨}U:s~ؾåMÝgÅKGªŽ× HI›7nàèÑ£YûýtvvâÑGuÇ«#ã%÷ú>Õëjƒçææ²îÊó|/¿S‡Ž:CéÂwçää```À £82 ¢¢¢---î8½ .¸hsrrP]]íd¥®®—.]Bcc#ÚÚÚ\ ¸WFq²n ku—Õ—–ù\8v»¤ÿô§?Euu5Ý‘‚äe¥Êœêxö“ÏX´zPå„ýáXì¼+*¿Ùßú½Ê³.Q$j`QåZid“”7¾Ã>£:izz'OžÄ¥K—088ˆ©©)Äb1·ð _ø>ñ‰O °°Ð%rt#JÒ—:Š|éå0ªÞ`… r+k°wjjÊí7¥NïÌÌ Îœ9ƒ#GŽàå—_Æüü<îܹƒþþ~ Ó½(Âá0ŠŠŠPZZŠüü|ø|>äåå!“Y^úÄM0srrðÈ#àÓŸþ4Ö¯_¿B†mà†ýÖ@õò!ïÕ½MønâÓ÷Þ{§OŸÆ¶mÛ°ÿ~wúÒÑËwÐËêlò„&˜ª««ÑÙÙ‰†† ¹ví6lØ€ÊÊʬ¥˜:vÕoÚ§ uÄmÄ‹Aµƒ–iThõ‘Ð6”Px)`—.]ÂßüÍß £  ³³³hjj¼úê«øú׿ŽC‡! -a~~~…aSRè{U™(›œœtd¯}WCp¦FΗ:âd@f~耩ƒ¥Žû1;;ëÎm§EçŒL©LCN`¡@çQ•¼uþÙž*F:P¶ Ps¾‹}&“Ér45⦎Ÿqý¤f4ª}¥ƒé÷/gD«««ñè£"''çÎsGB2;ôÀdE‚é`“×Øžò¦–kr¬Z²È9VºƒA7N–œ¦Ó鬑mUß«ÁÉËd2YT&ø.Ušeáüg2D£Q·aŠ•wÛ÷¼¼¼¬’.ò’: œ¿ß‚‚O£¢Ù5À4,”5ëø±/ÌZά´Ò¬#ëj¬¦H›ÅÅEWåcËù•gÉo -„Ô jÐM£¾äϼ¼¼¬,»`Ñåšâœä%*t¿ßÊÊJ„ÃaÄãq D"ŽÎ*O¤5ûÊ¿uÙŽî=Á˜–×ëÙÝvøŒF·óòò‰D²2 -ä7kÔWƒ¨ NyŽ÷Ñy±:]ùœ´ðûzYÝgŠ h1¯<Û®¾OÁ"Ç¡à„ãð -"“/l©ãe¬‚i¨Ú/ࡺÉKGÐÆXc»\ÃnÇ¥²O¤óª4™˜˜À™3g011`0ˆëׯ»ìb*•Âùóçñíoû÷ïw4PÐÇñ3ÉÀuùw0t•Q -Úæçç‹ÅðùÏùùùøîw¿ë2ÌEEEnÿŽÝ»w£±±Ñköƒtà{tž¨ÇI òx^^^VðE7”Õù"vÐ_²*OüŸ%=’“ôãÅÏué•V‘FˆZ\\t•™¤-Û¡þQÜÀ@A½ÚZ/Œ©²HZrL333¸rå -z{{]{ÉdÒÙ;MlèiûÕSü«4¥>£}ñ’Õ‰Dñx%%%žz†c#ONOO£¸¸xE9çétk×®Å;wðÅ/~>ú(Nž<‰T*…ÆÆF”••¡¶¶ƒƒƒH&“H¥–O©ªªZ‘×€—òŒâeÕÏŠ ­mÖdé–——‡ŠŠ -ìß¿7nÜÀ‘#G‹ÅpâÄ c‘×÷Jgu.43© ¨ œŠT3¶Ä…c£#¨LÎ1(=¬Ø4E™^ª ø¿²……¬Y³Ÿüä'±k×.LMMáÒ¥K¸rå -šššÜÑ€¯uÆTÙëû ÂéD1:IgJÇi£uê,[‡\H~¦ÁÒ\•°xöY7Öãüð]”=:–¡PÈ u˜ÉªàTÁp uÀU…B¡¬%3²þVà Ý2:œ42Tjˆî†kHÍJÒp\«"e[ä5Ízé:[-ËâXØ®–ârŒº§‚•Aà³ÎR*•B^^ - - -²Œ¿:µz8vã -(++C]]ÆÆÆÜR › ·àV ‹Í\s¾U‡´Û1Y=Ïöxú€ò„΋•ùÕì„Ò—ÿëÉvÞlÿ¬ã|¯‹„LÙǹґÒMWë¿ŽMƒÖ -~ù>݇‚ãÐŒ§¥…VNYÄû8ûý~WB¨ýµÀ[Û.,,ÌÊfj”cgáp8k¾•¿”>ŸÅÅÅYr2==>øçÎs›YMLLXŠ¿ùæ›ø‹¿ø <ñÄ.K®`Mu¸íï!mUoªœê}±X Ï=÷FFFðöÛo£ªª -7nÜ@ °¼ÔÐЮ\¹‚-[¶ //ñx<Ëa¶:Àö‡÷hŸUÏ©ý´Îˆ—³ÍçÀ$Opœ^}^0b;šIÓ¾éoµ^ãSÌómÇêP«§h+”¦sssèïïGyy9JJJpûömƒA´¶¶ºª*ս싥+ß©6Ìö…vÙŽOõz&“qYZ)ee4–77.,,\Ñ?åÉÉÉI„Ãa|ñ‹_D<Ç?ýÓ?áøñã¸|ù²Û‘œUxcccø“?ù|øÃvξV´ªÞ¡MÔÀ:ööˆUýÛI°šŸŸG}}=öîÝ‹oûÛØ´iÇ‹ÅÜ1qÀ]=£N³^¤#õ¢ F¬¦oyb>–©ÓŽÓQÔ½o´MušÔGîÚGfõùNMþY>Ò±êeñ»¾ppçÏŸÇ[o½…Ë—/£¤¤Äáâ·~ô£8tè«ú#&ѤQ*•rÁ:óö]¶O¼‡|AþW›ÅïYõ˜““ƒââb‡É2™ŒÛ¯å¥—^rÉ5¿9q477‡²²2wTqii)033ƒD"ÊÊÊ,ù‹Åb¨®®Fmm-jjj‡QVV†L&ã’-êP«Ìªß 6ˆ|L;dWhkp¸ëÎÌÌ ''ÑhÔ–––\àq5¼ÃñXÝ£[‹U|¾»K¤±fÍçŸèòFkgV»‚^ÆÑ Àh‡õ35´ªÌy©ƒ«÷Zàg¯T*…cÇŽág?ûZZZ0<<ŒX,†+W® ££ßøÆ7°k×.ѱ›‚iÕy·N®—QàŽ)²ÏR4©Ž §Ïçs- YÎ0ûc•(’›Z°TY74VffèÄ°ïuÔ9"Ú¨iI#DLJ÷ñ½Úo5š -¬˜Ù'±•ÚfÓH*f¥é©sLÚbË–-€¶¶6œ9sµµµ+@¶КyRÏçH#`ñÕ ˆO~O… N3ÛT¾Ó¹Ô(¬5ÌlÓKAÙ¬œ—bã}ê i Aƒ n"lOyÉ+¦r¯`‹˜†SƒwJöSåS)ˆ1ã¬{1è=^A†L&“µdAåD =`Fvu®t¾) Z -¨ Õêò®:}¼OÏ0W™# ãñ8FFFÜñ3ùùùîbê!¶ÄMyD³X|¯ò£u<Ô¹VYæý¤·fVÕHÙyVêp}—uà87ÚgÛž¬¶-í‹ô:;Ç*/Ômzܤòš½(Ÿz¶µê 궩d¥±•-;VKòßiÕì3y’ö†ÁÕ~YL ôÓwyŽ|>¦¦¦ÜnÑ@‰DÃÃøvínݺ…þþ~¼óÎ;ˆD"èééA^^¾õ­oᡇr0Ù,¤¾‹s ìZ»C›•H$œîSºú|ËÙ­ŠŠ -<ýôÓ¸víš ¾ÍÎÎ"''xá…°nÝ:ìÙ³gEÙ­ò>A€%öªcUß©^$ý¹V\ËÆuÉ£ª«µŠOA²•m•G Öz9]Ô]gÙ¹æÉW6 Å÷jCû­÷óóÅÅEÌÎ΢  k×®…ßïÇéÓ§ñøããá‡vó®ô´tÕyâß -Ø@a²‰úZåN±¡:[«ÙCÒÏX¬LL133ƒ¾¾>ÇOÑh>ø ^}õUäå塼¼MMM¸sçfffþÓ?ýS8pÀ-Y³É'µ7^‰ªÕ‚C?Zü -…\m~~>Š‹‹ÑÑÑ¢¢"ÔÖÖ:ü¦<©Î0º):ûoý`Ù&———;š,--Ÿfñþûï#cnn×®]CCC~øa´··£ªª -uuuYÕ›sssY{¾ÉVû°²šc£þ£"þP?GeÏ‚užÉºdZåèúõë¸yó&ÚÛÛÑÐÐUÕb}K+;Ê3V¿+ŽWËç¸L”¼¥v‹}ô²ÑÚ‡¬%zƒ -’:5VI²³ö{;X Nìç4¾óÎ;øêW¿ê¢)¸yó&î»ï>üõ_ÿ5¶mÛæŠ5vÚ?ë°s”G Ú)°`_tÏÍÔûìì,ººº088ˆëׯ£»»Ûm„WWW‡Ã‡cxxØí)055åÊ›Už¨êü+Y½`N¤Unn® RZ ›Éd\†–»öê÷z)=¬>·ûFCh-ïáåe»ô½J{ò¡ò¤¾×‚@wäp¯Ài©zÌ‚sòƒeÀÝ`’Õ - ¼ì±ÎåÁ–s<ºdM÷Eásì÷j• -~ùceü~áÂœžžäææbzzÚeÁûúúÐÖÖæ–åß4¡]í·×X-) ïè¼i °ÚK¶G}ÁïY™G\1??‹/¢§§W®\ɲ™SSS¸páÞzë-TUU¹£}ãñ8ÊÊÊðû¿ÿûرcÒé´Û$˜}²ºWu¿Å^z’cô²Ûšèb ¾»»ÛµßÔÔ„X,ànõƒ:ðä'½49`ûæÅÛªÃu.Õ^ëwv9ù— <ëôª}н(¬Ci}ÕëŠõ•èŸ[†<77‡D"±"PhùÃVsè}j-öd;Úþõë×199‰––¸J›þþ~LMM¡µµ‘HÄÍ»—®°þ®Ý×JÇïeÃÙ†%î…[9‡v®x߯T ©éÃúýÿ›K•k^^.^¼ˆ_|uuuYQ»üÑý¶oßîŽÆ!~~x)ளC'ÆÉ*K -–%YÀcÁž (¨°QÐñWI7SR%IeÌöuó(¯’[Of´]¶M‡Î k$Ti²M‚D¥‹FÞ´Àk´>N»’6]·Äqr-iÇL˃аm›ÉUÚr|:à.P±àÖò–‚O*]:´ -”¼¢}j0ìgü[N*^‚ýàŒ™nLhûjé£YåYÎ4žJ3u0TÑÁàÒH¾lƒ¤f´mUÜ,«Öìù“ËS(gì?õ eš@Sƒg¤£lÍÍÍeEë‰D°ó¤ºNaΡf\Ù¦>›J¥ÜúàÿùŸÿÁÈÈŠ‹‹Q\\ìø|qqÕÕÕ…Bnåʆ¬T7hôœßyéVgDþ]ÉŒ—5¾ÇÊŸòÒ€í‘W¬®³ŽM&“q©Žýu.ul½ìû¹ ì‘n|†Î¤ê.óPºiVVe‘€Zõ>3%@ +ø¢úÝ‚}‡^ Ü1e«0Tÿ’fJ;/J3mt||cccøÑ~„®®.„B!|ï{ßËÚ7`ffÆ•‚æååáSŸúžþyÔÕÕ9ð§@KƒÑ:nÕ‡vÚ'Y§£èœªLácûz{{ñ³ŸýÌiÈvxìšî Ž i—N§111üü|D"‘¬“bt¾HKµË²l‰Úq/Õ1(ÈÒkÖê}^N¬—M²xB?óÒêü©> /òsMV°Rä¿øNŸ>ÆÆF$“IGïââbD£Ñ¬ñ_(Öb{6È®ëø‰ËHKµ/ª?|¾»Á6ê] - ]™¼î]•L&1==ípßåË—qõêUÌÏÏ»' ··µµµˆÅbCoo/6n܈͛7ã‰'žÀÎ;³ì’uüulŠcVÓµJuŠtŽ)çýýýxíµ×‹ÅJ¥ðÞ{ïaíÚµ¸~ý:ÚÚÚÜ:÷Õ°Ó½tö…s§ûïØ`«WæÛŽGÿ×à†ò…íŸ ”r¼b-¥1?Sìj/µù™Ìò EH&“α,,,Äââ"òòòðØcaÏž=ˆÅbˆÇã+üöAí‹ò€êîÕlŸÒGñ,ï×±i;êÈ455ásŸûQPP€H$âöêâF¯ÑhÔÑÓË)ç|“6¬(±O«ËÔgQì¥zJçc ÿ300€—^z 7oÞÄîÝ»QZZŠÒÒR âÚµk‡Ãhllt¥/õs¼ì¥¥µýßÞgç‘´R¹d›2fm†íÐ ¤Â²L`_ê¥8Wûß~ÎÉ ƒèîîÆ‹/¾ˆ—_~¥¥¥î¨xæ™gpÿý÷»ÁÛL’pª¤UU¡Ûçø›@@£*;¥‹fè|èÆ34h -¬ÔqÖ±hÖ€LÏÍ€je…G`ÀïÓ1jÆJ³÷Œ’Ó)ÓuÔt0 Ò­½´´äœqݹš XR8ÒU•¹*yÒI˜Î¡‚h:·ÀÝͥ̑,×U‡Å*7s Œl¶ýᘹ^ŠŸ3ûéÔ,UÎ>ßݽåeuu-›ò¤*aDlš:¤?yR¬Ê—‹Øw:Ø -Æ™!Éd²KʨHsÍÐ(=Øàn)¦fÃ(ãÜÑœï×5Q„áýÌŒpîÙ*M‚&uÀ¸Ï瑆J×rø‘'”o•®:¿zÙ²D:y”³™™ܺuË-:yò$B¡ÊÊÊpêÔ)LLLàÿðQTT„L&ãÀƒò›•;í«¸UÞæßäïÅÅE\¿~óóóhnnvåÈz¿fèu¼^-ÞcyÕõìk&“qï³\Çe//€é¼xÝRmpÇ:5” ûJU‘G-¸R>dŸ<Ð}I8v›APB`B>W}»šãÏ -&ê‚kc-°±¶3 -áòåËøÁ~€ºº:·i[YY™;Êõƨ¯¯G,C^^:;;ñôÓO£³³Ó÷fyFûam¾-Muþl¿Ù¾:§Ø·oªªª055…'NàöíÛ8tè>ñ‰O ¨¨(«dTƒ÷ìKww7Þ}÷]ÔÔÔ ³³ÓU ÙGùY{¨|©AQ VXû¢—V@ð>]BéeÔþXÇÎ…i«éxëÚXVqð>Ú³d2éô€ ¾úý˧5QÇ]¹rœc‰D022âl -$j”F©ÔÝcV½#öÙÚ5»öVu]öH^›™™A2™ÄÄÄ.]º„ééiw²ÄØؘk7“É`bbîøÞêêjÌÏÏ£¸¸Ø-÷šœœÄÁƒqàÀtvv¢¸¸8k÷wγb.#ç×.µTYRþRçHù€òÑßß_|O<ñ„£Ïçî]»°sçNGo:KV[=¢¶“|K{‡1;;‹¬Y³>ŸÏUËÓétÖÅTì·Õ[”3u>õåbIÝ·@yÁÊ­ ‚ñ~†nß¾¾¾>LOOcbb###Äðð0rrrPVV†gŸ}<ð€kcTye?‰¥“žJ_ÕÕ^úÓúª€ìý¼2™Œ;X*¸å¸|?+–uSÒC+LËx‚KÆt^hÛÔÏ°}Õ>«ÓyV]×ÛÛ‹W^y7nÜ@~~>nÞ¼‰ëׯ; ÆMȹ1¬¾cµ ¬¾Ku›ÅFœ#êí+ñ´ÊÐjÕ/©TÊ-UãóàK$}¡3«1¿+°ÖI±Ó{ø>2íÐÐnß¾íÀµ:œuuuhnnÎ2ê$jß5GcJbiW•–Pòù{•X¨båó³y¢!ãXÉä -^ùlNNŽ[ÿ¢ KNûÁcix×ÿ0ÊÊÏì0Ú. š:ô -(ЦÓi·3.«à¨l9Ž‰‘oîÊïHCn~F£M'Ì®kX ª4“ËþqŒä5^j´&&&‡]é#­ãšá¶'=èÅûyѱ%ààxX”ʉ–Å+ åX òU¹« pÎ8ߪt~lÂ7Þ£Y+uX5XÇ~ze/­¼Ù=ht. -FÕW@¦²­r˜J¥² ¡ŽSñt:íŽ-Ô* uüXIBhÕ†©D%Ï°|eUÞ¸q#jkk]ÿÔ¸®fØ•¼@€*Ž'žýýýèèèp÷*iNõ­¾—x¬îUCøë\«øöÁL~Ùel­`ZÝÏgìrJ˼—¼¢KìØ´ï”GöKåEáÕª=<Ò1ñZždçŶ“É,Ê._¾Œ¯ýëèííEss3òóó1<<Œ……ÄãqTWW;~ÿÄ'>½{÷¢¬¬Ì95v •ê6«;Õny]JƒÊë–ÏTOóÀÄĪ««‹Åœ}S`©÷7HLm IDAT¢«« ét%%%8þ<|ðÁ,§ˆÏó8VVºØet¤«êHÅ$yš:W7ÆâÅ>꾪笓Ã{ôHH­¤Ò>Ù@‹:"ŠÙTÇо,--eã÷û1>>ŽS§NáÝwßÅÅ‹±´´ä6ýËËËÃSO=…õë×c~~ÞékÚeÅ -¤Ÿ:ˆÄJ¤·Ú6å{W ˜¨¼³'Nàƒ>@__R©&''Ýzéññq—M§Ó¨­­E8Æàà FFFÜñfÄwKKKxâ‰'°gÏTVV:úóDu"È«Uxq9.#þ­í©ÞRÞ¹pá~ü㣥¥¡P===(++ÃŽ;ÜÒÒÖ–@[¾U^ѹ£¬ áêÕ«8{ö,žyæÔÕÕ!™Lf°|¾»{f©nR¿AmŒ >ÙósÅ¥À]ξyS©÷UNù Û={ö,Ž=Š¹¹9äçç»yÎÉÉÁ¦M›ðàƒ¢©©iÅX(Ÿt¶» :ý¡\ªþW^ÖÝóÙ®âK•EÕ)”Ê“VQ°‹­“Ì>Y\e1¼Å0j¯gr\Êãœ7M´Ú€(e|nnGÅ׿þu´··#??߀uŧŸ~Ú¾ tW^òò£mÿ”·Èó@Àí=bõ¿¶£ü­¼ ,ËÏää$€åcm]ÐRäÿ²Àj€ìW h'­råäSñ+¨â{ dlÖÄËTª Itf3H©@©ÁÐññ3¾[7a ¡´#×õðjuX^¬e5tzyî+ N¡›#ªA³A…KOc¨`ÑM~§A Ò2N»²}öQêââ¢3pŒP«CD£ÃH®öA 6 ÚhCyýG__b±JJJPPP€ÁÁAäææºc<¨$YÚMGÜ‚d (Ð"¿±äø¬±Q‡^LöÏê>Ï@ˆf´­ÂÖ3^½6÷T:Q>É'º¨r´Ì<‘o,8ÿ¤•Cø½ ’©lRÆÙG5vvÏåöÕ:¥ê8ê<ð˜>5jÌ’ªn°ŽÙ¯P^á\ÑxP§NOO£»»÷Ýwà÷ûQ^^žµÖóÁ%U«½ýüe¾_ŸU~öº,Øá¥úOåÉ,ô^½GùÀö_‡Wö‹<¥ï!«­´N­ê:í·êIeõC;6ÕQ*êzÑÂk.Òé4ÆÆÆ044„H$‚’’ŒŒŒ //ÏÙòm4E:v;-k¶[idý­úÔâ¯ùU»fä ÎhÕ3Κuö¢×÷NMMarr===xì±Ç²ª+Øßd2‰ùùy·Ì@é̹ Í¶ïQùSÞ#®P0­8Ku+ùtIï'ž±íS7xÙ$Î…:¢*¿ -Ð5© s˜N/W?~ï¾û®«ÄªªªBMM ¶nÝŠææf×?ê͉‰ ÌÌ̸±çææºXtkO5ðNYÑ€ûÅÀÇK~¦ ãµ×^s빊ŠŠ0>>ŽD"T*å_tòóóó122‚D"-[¶ X>u¢®®uuuضmrssÝrÚò&€,~UG^m>û©ºDù€ó§Õ5Šy —ôènå}Ÿo¥½–Ïd28~ü8ÐÔÔ„t:õë×»g•‡¬Ódñ••ýŸïõ²[¼4ø£òf}$ ¾ª!f美Ž¡PÉdO?ý4~øa—´8RHòãÒÒ’[¦Hyäçê'鳜b)~Ïû‰eÕ‘'ԡͧ H']êgmˆê-[elm$û­I;W:Fþ­UHétÚáFÅØétÃÃÃpIÔÅÅE#77×U÷éRúA“X„ôÒñ¨~$ØÀ›/[àßôYHŸÑÑQ¹À’/»',ã®fÀÕP úr}Î*ýÕڲ׶id'¸[žd³ìêx°ïì“N¢öÁN°®Éô~ýßkbt *\—§“¡5(ú<ûO£Fa¤`ñ{‹Ž‘®ÑU/G€ýÒ ûÌÝDµ¬‡ýS!³F€Îwe”L£ˆt€4ºÊ‹Ê0''' ¤hð‡|Àh® -ŠUvPTT„H$‚3gΠ½½¡P7oÞDCCƒSTŒÀ©bÓŠë||7#ñœ'V(ÈPj$ÒßTóÿÕœiVx)ml$•mZCf Ç¥Qo‚# ¬Ù¹ã»lÙé©Á4ÞÏÿX[ú¨¡Ö= ,gUûN¾·:P -»c²—1òʼé<èhÔ\#öj¬Õê¹´>_v–Jƒ‹ -îØ_•{5„:§ -¼¬W`®`†òyúôiÄãqD£QTTT¸7IʬÒFiâÅ^FSéÉç”·íXµ¿ú>½_©–ìòû{-}§—ÜzéL»DL™ÚµÇ\T seí¢Úk:˜©TÊU·XÇQçZåEA¸Þ§}UÚ(]´=:^~êdkÀŽt²e:/«½CǼ@Ò9²zέí´c%mÄcß½‚¤´}}}èêêBII êëëQQQYÁ³D"¥¥¥¬#â,ïß+ ¤:MùÓ“l@ -¸{rŒb Ž[ùÎÒžã´›®ñY/ЫíèüR÷ªŽ£>Áôô4ŠŠŠÜi±X,K°VhhÓÕùÐ$«ÿÔ^kÕ¡æ#j›m¦R)7Ÿét:ëH6¾S±ËÀPTT„h4êŽóåÆ>ŸÏaEÏÔi#ý­å[ÛMj9Î@ °bÃ>å+¶¯6Oƒx¤‡ž ã…É4 ]>È÷ðgnn]]]èèèÈâMö‹ĪÝá=šÜS¹'Í”Ëó>ÒTÿçø¬=ã½´í»“¯úúúpâÄ Œ¹J–²²2ôôôàá‡ÆæÍ›1==t:íŽpå»ôÄ ¾›É6 T²ŸšÀäsÊÇ”;¥™–¢ë†–^^xÄKØÀÞj˜Z“|vž”ÇÈ'Jw¯¹²÷k°Wy•¶ª”royTe˜¼JÚYÍ9ò’•kkl;^öÍçó9;322‚h4ŠH$‚ááa,..¢¢¢b™æ«-ÐËþ¯/ó?Vá{ݯóy`:;8S’‚û{95Ú–;R^‰Pˆm›ASÁоó½ãgZî¬k¹­Q¤ÂÈd2Y‘«ÕœE»þßTKiÞÎÛ·@XǤβ-íaF˜‘55ölO‚hdtQÁPñ¨2PCuçÎŒ¡­­ —.]B<Ç<à2˜µµµY{6X§Oi¥A Ì”ŽÖi°‚­CDUtV©Œ•·¼úÀK5ïá{ÔaP¥jÇ¡ÿ¯v:¯^€Ò^ªˆíUxü©ñb;zŸ«jè­qægVwYÇÈ¢Hgë4XƒcéÈjŽ[ºÔéSyb”ÇuŽU~uªÒ^sª/ø=븴 Êk2™Ä¥K—°nÝ:„Ãá¬çÔÑÓcä¼€ ~ÇöU~ z=k/ð²c³—fŒl ÈK×[ku:‚úûE¨àÌ^ -ص? -ôÔnÛ9R›ciæå´«Rš­viŸìç@¶N²ý°6}5pcA£‚fµ¹öý÷Â2:§Šloµ ”wä>Ϲå8(k,Íd–§Fyy9®_¿Ž‚‚466fe’É$Òéåewº.V²‚NKs{ì*6Q½aƒ«š-ÔñY ¡s¦òjºÃ΃¬x?ûÊê:5 -°ù<Çë÷û³î!P9wªgVÓEÖ!õÒ³^+À¬ÎÕ*/» -dó"€¬ - +ŠÉË*æb›¶$[qšÒˆ‰ŠLæî&¦^eÇ^:œó¨|¤?*«VÏ*O*]ÓétV2Hƒ„¡Pýýýƒ¨­­u2Çvað|5›AúiàWåLu«~æµ/ùFç‘<©U¹´ýŠËC¡« â&y>Ÿ/+ÈåEºñ¨Êò’å[Å.Šø¿âlÅý^˜úÏ 3XŸGçÎÊåReÍ+€¹æµ<É÷ë}*¯^Ïj‚åmÕu6ॺ“}PŒ©ûnÅüÎ&£W«^ÖÖSƒAŒŒŒ «« Á`7nÄüü™LâÖ­[hllÄÔÔTÖ=j#©>PgØËÞÛ1ë¥Ï²=ìt ê0( ¼ìŽ.´AQK;ÊCÔ“ì›â -fSµm¥‘ *è|R7膯jxõ1;§^càoÅ¡zñŽ ÐXY¶Ÿg2™åó*3œÕ}öÝšÐâû5ÐDy·¯íßj´U^·vŠc·A{Õ]Šù=¤ÊÊJtuu¡¨¨áp8‹îZÝg¯_†Õ&)ù™VêÜñ;í+i£A›ðà½EEEYÇâùý~”””dU Úª>ÒI±ójA-Ÿ¥‹ÒMíˆå‡Õèdç–>õåjöWqü½‚¹*£^—ât½l‚ýж¬­âß|Vƒ5^÷ë¸H‹_džjðˆ£N½þð> æ+P ™ŽW1µ –·x¿¾‹<¤tÓ¹³ôX —zÉ¡ŽQi`m°Þ¯ó¢8ËöÍò´Å|^ü¬Îœu4ÛÊv­îç3J;ÒÜúXÐ>xáZ•5¯÷iÙµßw™7Û½sç¢Ñè -½â÷ûÝѹ¿ìRZªC­¼Ì~f2ÙKuî»*öå=\檸JçGç€U 6Qiu¢ú&ª¬^öJ)?*^Wý©r®|¥vAŸQŸÄ+¦mø|w“@Jg+Ã*#¶öº×ûÔÙÖ1x•Ø†¶QyÔ˶«î·IIm[/¯$4ùBõ™ŽËʸՙ̲¿333ƒ¾¾>tww»s]]Ý2ÍIøt:µÖI#îÖ QCÈ¢FŸÕAU%© F'U']A' -#åú½‚€ë4ØGñ¢SÊçyQæÓÜ€¤ÓiWŽ®tÓ ”1¬c@¥Åq±ÿÜ8HËÒTyX2²Î’y¥“2n û -…²2ú<þo×kYæW¾`?œ’UçNǨÎi¢ N¥Ë@Ò™Aö—G'’Þ¤¯òjMM»—óÃMè¸Û©*=¾ã³ -£f¹•nK€•o€»ŽŒ Ο¤£ö…cfP#“ÉdmÈ£Š>77sssYGuRUa)ÈS9PcÃ@«˜U$‘?õÈV‹èÿšµ áÔLåžÎ½ÝRÇ¢YVݘ£åææfíÂϱs ˜8Vpb瀙¥Ê û¡àIXu”yO*•Ê:¹@u´:?üNËîl@AÇÃLïãÜ) Ö¾§R©¬£Óé4Š‹‹‹Å0;;‹X,ææÁêhµº|‚2¡r³š§¾¢¾gt^Ûበ:Ï~¿?kÉ…—¤—ê"öÕAGò­Õ/\âX”GÔXS?¨~åz}Íàëû|>Ÿs -U_s¼ä1/]­¼fw¶ÀCwßW›Êö¬æw -†8^€FïÕ -?¥'iIr,Š;Ô¾ë\ë<è3\3I¬øBu­urlÙ¯ò‹êJËûìC:FCCCÖ‚\§óC\¢²Áv(³êxð²¶Iï±7å}Ú)­Ò1ð~ h0Ã+;¤ó¥ÏkMt:5 0±Mê€`0èvî'hà\Ó60àHøý~w4£îÎ #ûcûLÝ¡š¨ßx/u?u­òßAþPÇïá½ì3u>õ€b}Nö]K¸I «Ø®nLªú™€t¥+4x¨tS^ç¼So¨S§6€òEú°Ÿ:ÿª¯‰„Ãg !OhðŠfIkåeÝüLyXeãTgPmŸ:êÓ!R£:Kñ¥ê'Õ!Jµ êTØK$¯{lpÂí», ·@œ¿ylq0Ì -"(_«>U]­s£m[§ØêW/šYg[eDaʬ&T·)oi½úa@ä)«?ÕA¡nW]©üælð+û­´K$ΦÒjÂÈ:ç|¯:±ª35@lí1õŠ:xÊwvŽUת­eT¿XgPŸe¢V«TO)v÷º”G»'ˆp,üQg_oÒÖêAÕ§LœÐ®[~QÃ>éÜèo fò> ì*­,Ï(&VZêØì{õ=^Ž¹â.ÒAƒÊ«Š_giÿîuÛÙSßØ>iLyæÿĺSSSÈd2¨¨¨¸{ŠÄž={2‰DÁ`ÐÝtëÖ-TUU¡¨¨sssÈÍÍÅÔÔ”s6§§§]”š „ÇÚ„B!ܸq‘Háp7oÞÄÖ­[177‡[·n!™Lºåää bttô—þ×½Ö­[‡®®®ÿÏÛýÿëÕÐЀžžž¬Ï6oÞŒ‰‰ ôööþ_ÿÚµk188è§_÷*((ø?Ô½Ùn\Yrþ9‘™ÌdŽLÅ¢ªJ5u—ínÀFÛ@_Ø×¾ð#õ¥Èà ð…·]®.´jP©4pÌyžÏÏ/øehS]>ç€ã ’È̽׊Ã_ÄZÛÐs*¾Ÿ|ò‰ŒÁ`à†ùûßÿþÿظyÞÿÓ1?yòÄþøÇ?š™ÙãÇ­×ëÙp8üÙ÷øÅ/~aËåÒÞ¼ycù|Þêõº ‡C+•JÖl6m2™Ø`0°;==µN§ã‰.àrooÏ^¼xaívÛž>}jffÝn×ûJ¥b¥RÉJ¥’·«íïïÛññ±e³YkµZÖívm4Ùáá¡e³Y÷8F(IË?üÃ?X¿ß·üÇ´/¾øÂZ­–]]]™Ù»lm¼ÎÎάR©ØW_}å?cl•JÅ–Ë¥u»]k6›–ËåìööÖ}›Ùv;¸™Ùáá¡ -?µûôôÔjµš\ƒÁÀúý¾½}ûÖ“²ÕjeOŸ>µ««+›ÍfN®ìììX£Ñ°ñxl···v~~n™ÌÝ{^!:“ÉÄ«{Œ$7ívÛz½^·ÃÃCËd2vsscFÃæó¹ÛŠžú>|Þœ,M#(€–Ë¥íííùÁD$róùÜ÷(îîî:YƒýpÀz½¶z½nËåÒ†ÃáaPTÐJÇ Ìd2±B¡`»»»žCzB"bdÄY6›µápèóÑäJÉI}]I"¤c,•J–Éܽʋõ€3»À±Ê˜ˆPè2Õ&ºpÐod4™L,—ËY±X´ÉdbµZÍ&“‰õû}ÛÝÝõ}¯€Èýý}›L&[¯qB¯ôUEÚ–®(Jª™ÝwSl6÷¯7ÊçóþNšFÔ¢/ØÊz}×Y×n·}̪oÌlëÝÇfæĆ¾¼vL»ä(H¨N37PMN(VŒF#'üÍÌÆã±ë”¾ÞJ‹Èz¹\Úh4rp(×Ï)ðV‚4“¹{½sF—!Ð-õ ¬¤)d&ãT_ÉõH¢Ax’âÓcwX$cÒÁ½5C/"©£€p¾«T0¨Â$b$ŒI«¨Ì ŸÍÏ#ÐçÞü½b~Ú=‚0ø˜§zøL¹4ASÝU’†ïª¿Cž¬¡ ÄÖ_‹Cª_‘¨Ó\}E$¥±%þYG]wM†#1 d:Vt–±i…ï’«Í«ž™ÝÖÆ\59ãOLB5éåÈ )IT;Q‚{ó<õUÑ–b’ªóQrQ“[Õa%˜C´Gµ7µCMú“ˆZb+߀gnZ•Vr -YèX¢Þ+Y©òâ|N¿£Ÿå3Äõ;ªã|Wß -¥~HuGNøµ‡Ø¯…#äÄs“HâÅm°€’ùœ·„ÞQP šb8 ’8•JYêïÿþï7ôT*eÃáÐ+Ɉ“(a¶Ûí¶F#ÇœJݽÃv::Há4K”GÛdµÅ,¾ýÊh4Úrô8uôü4Y­V³F£aívÛZ­–W>ÕajÕ PÜlîâ Y.—-“ÉX·ÛÝzßv:¶ýý} ªìj*•òà‚"ìïz½öê1 FpÒª2!Èd³YO\ÓéÔ«}FÓÛ~¿o¥RÉ×IßkÒ, ›L&îlHJ`W‘#€Ýn··ºPÆýý}‡¶³³cÝn×6›ƒyîevG(Õj5+ -^F·f³™- {üø±¥Ói»¹¹±b±èDY6›µb±hý~ß+þaªç···V©T,›ÍZ¥R1³;€·¿¿ï]£ÑÈõGT©T¬Óé¸nãR©”Õj5›N§î´úB+çf³±b±¸.7›»÷¼’œjE5e}øL±X´\.goß¾Ýr$o¥RɆá]^^ºœÊå²'—6›µF£aéô]g>¥RÉÉör_]]Y¥Rq§²³³ãï.VÛÜÛÛ³|>o®?oÞ¼ÙbÏqd{{{~@Éjµ²·oßú=J¥’=~üØÆã±½xñÂWÈH þÚqÃk²‹… ‡Cw„t›ÇߌÇc«ÕjnÃ$Æ؉G·Ûõ$Š±BžŒF#ûŒe½^ÛÕÕ•rÆL’—J¥¼ë„û¥Ói«T*Öív½Š[©T<ñEÇã±u:UP.—³^¯g'''V­V½ce0Øb±°z½n···ÖívíÑ£G6N­Ýn[±X´ÃÃC+—ËÖív„`F#¬¼ IDAT{õê•=zôÈnnnl±XX£Ñ°;<<ôµÀ´Z-eý~ßNNNìââÂæó¹Úõõµƒƒ›Íf®{\ÕjÕŽŽŽìúúÚ:Ž=yòÄêõº]]]Ù£G,NÛþçnù€ããc+—Ë6 üõX11€HÓëÑ£GööíÛw~þÿ§+NÛ_|aÓéÔ...<Ùýßx=}úÔR©”ýðÃïýÜùù¹ÙÅÅ…ÌOŸ>µl6kß~û­™Ýw† -ןããc'üñGhŸþ¹‹E»ºº²››Ûl6ögög»¯¯¯-ŸÏ[¡P°ËËKmÓéÔ gggï%»yù÷ßïDËéé©- ûᇬX,Z©Tr"óÃ?´Z­f××׶X,ìòòÒžüðCëv»ö‡?üÁãÀÙÙ™½yóÆÉÏÅba•JÅvwwý•Pü±m6{þü¹™™ýö·¿µÝÝ]Ÿ÷l6ó1K§ÓöôéSk·ÛV*•<ÆÍf3Ûßß·|>ïX*“ÉX±X´F£aËåÒƒŸ½sqq±UtÊçó.#€-] “ÉÄÉ[0ÄË—/­T*ÙÙÙ™ ›L&Öl6·0X·ÛõÑívíôôÔÞ¼yc½^ÏÎÎÎìÉ“'ÖëõOµZ-…±v-åóyët:îÛËå²Ç\pF«Õ²l6kårنáòl6k···ŽçªÕª5 k4>nˆ›““33µý~ßñ&–øAŠŸƒ„¸—·Z-Ç»à˜ñxìgOììì8yFÙÝݵßþö·vyyi_ýµÍçsk4V(ìââÂ*•Še2{óæÍV·$ä¹\vÂ-aétÚÚí¶ËŒÄˆ±¶Ûm·^ëȼ2™ŒÕj5ïÚEqGüÞÛÛsâx½^Ûh4ò­JÞ”J%—cµZµ\.gNÇ㘤éèèÈ‹…Çá^¯ç÷b¾Ø8¼M÷«n$•àCºzg³™x'22¡¹Re'™#Ách¦Ó÷Ý­fæà'0÷;ÁŒÓéÔõ]M*ÁË$­Z­†hÒî(0ù¿c>äyÚ½ˆ¼É{”¼Rr ÿ¡¯„ÜÕ\EIp*ëKf4Y±Xt¹BдÛí­m…ä·/ }x¥z¿ßw½$^ñ·Zä$¯aÌø•b±è[]ˆ™Ì]×{§Ó±““ïN_¯×ÖívmooÏ×{ÿîU©ý×½Á YLÌb’< ‡Cw¤$ÉÊúB™Ìh4ò ÷ûý-6ŠÄEœÊuß:÷×Vi~® =ôªÛíº2¡lÊ®@:$PœÅbaù|Þúý¾+ NP‰ñéëé"³§Ž’2Wœ2ØÝݵ½½=w|®^¯[¿ß÷ï¨!”Øþ°¿¿ï`ŸjË…F#OÌŽŽl>ŸÛh4rb„.Žétj‹ÅÂŽŽŽ¬X,Z»ÝöJN½^·Ùlfoß¾õêåþþ¾dT.—­^¯Ût:õD¿ÓéØf³±F£a777ž¬£O$«TNZ­–íîîZ¹\v0Fõ­Z­zpÄ!™™¿xßç„Π8äT*eƒÁÀr¹œÕëu¯r‹EÇN\(#Nâ†VÐüуÛþþ¾'Ÿ/Îbe4¹n ÛÛÛóä[ºÌÊå²]__Û|>·““‡`.Z™,•Jn/Ú²‹“Íd25AFObè(~§P(X³Ù´Á``NÇÛWÙvBUB+¤eb÷ööœ¸Ùßß÷€¢œ´2Û0¶“ÉÄA UUlð3õ+ø‚ ŽWmƒ Ïö”õzíÎ^eKËs%pDð |ȶ^¯;‚4%˜A „QªÔ™LÆ«‡µZ͆á- «Õj\BT·!=´¢„O‡Ä€˜:::²n·ë:DpÂÎtžøV­d°vª·lwÑJ²n±¢²OÂÁÿÑ‚çÁÁwg@4üôÓO[‚Ž€­](øîÑ‹\Y#È\üðÎÎŽ¢"½”hW1¹c;GÄeÈF*,ľñxl“ÉdK Úñm¬±ž»¡cÀw'ˆKÚbNw€2ä~µZÍ2™ŒÇí´P{ÃÆG£‘­V+;99ñbC£Ñ°ÅbaívÛ×  ¹•J¥¬X,:ø. -Nzo6ûè£lww×¾ùæÿ=‰`*&fæÉÞîî®Çc3l j·Û6 ¬V«Ùjµòù’@Œ@HhU’›õ!N€‹X3È,tâààÀ -…Â;¶Ï­ÕjÖëõøÀ1êb±°/^ø³Z­–Ût:µétêÝ_ívÛŽŽŽl8ZµZµÁ``ÓéÔnooÝ_ŸœœxÜþþ¾]__Ûp8´ÛÛ[‹W:¶óósÇc@Þ¼yc———v~~îñ‚¬V«Y§ÓqBóÙ³göòåK›Ïçvttä„Æ÷ßoü±žžÚþðËf³vrrb“ÉÄ.//=yþðÃ]·)FP˜ Þ½J {ùòebgòC×þþ¾¿)"—ËÙ`0ðT*•Ü@ C¤R)+—ËÖn·íÍ›7.wbÞîî®Û¾òúúÚí|0Øz½¶J¥b­VËÌî091¾R©X¹\öxÎ{‚uõªù|î…i5»Ãr“ÉÄö÷÷¨i4¾Å{ooÏcÍz½¶Ô_þå_npR$þ°G€ôx<¶étjÙlÖ+ËZÕ“tÓNIâØ‚E£c€ç*dj 4hó$²p3m1ÒVXÜétꀆyÀa¾r¹œ•J% föîaCÚæ±ƳaÀ`)‘ÃÎÎŽ6É%r¤KÂÄüIzÝ S¥/—ËîÄQ6*Ïûûû¶··ç¹\κݮ†Åbá•Í|>o•JÅ×¹X¯×³^¯çë‰~ årÙF£‘ eÓ;Ž -I7 &¼×ëY>Ÿ·R©är§Óñ6EOº H¦HêÐ-äW¯×äåóy»ºº²f³i{{{îé!±%9ìv»[k¥k¼Z­ü÷ÉZ­fµZ̓Ás§‰Äc‚ùÆÎОż‹Å¢u»];88°|>o¿ÿýï=q'qÂQ³n$Öè5zÌÀÎ }ôˆÎÀ„ -N‡d*ŸÏ[¯×óäb‹¤æPŒ]sßÝÝ]+ -n;ø -@A› á™Íf¶··çö ØL¥Rïèv¬˜Ý·ã*•Š'€Úá‘8T¨øUÆ;KõžJà²Ýn»ý- »½½uŸÈ¨Àm6 V©THÐÙÀUl|?#h¬×kï X.ïU‚0ÀŸáË =zdívÛx3³^¯g­VËNNN\wyUªÙl¶u&•È*ö[«Õ¬ßï»náË!0HÖTG–Ë¥žžúxè‚Z¯×žüáoIšØÀ; Åžî:y mçó¹ííí9È Îév¹V«åݼ÷¹Z­:ð©V«6™Lœb]èÁö¨ZÓ/æ Hô}Æ7’¤â¯±ÍÑhd=²ýý}{þü¹¥Óik6›ngê'ˆ ZÅl‚œ€´B¶WWW¶³³c{{{6­ÓéxÕV;£ LÒ鴘ׯ_;±ÍsÍÌ·è!”Ð5l’ŒƒíÈHü‰#ËåÒ^¿~í2Ò¶m’Et˜±ƒƒët: &“‰ŸŸÛh4²««+K¥Rî߉ èîx<öÊ$ä<€œ -(‰=$ rþàƒ<¶c»$Fø/ÅM|*øh4r\R.—½ T­V½‡çµðÁÄxÅ€È` Ö¢‡øÜjµ<>›ÙÖ!Ì$×èi¥Rq\1¼B^©Tœ§ÓŽM:#IÞ ŸˆõzÝ‹…Û2[ÖèÈR]G7‰×××^ Ð -´s˜:ƒÎ‹Eï"@×(Ððùb±è ýææÆ÷ïöû}ßJ¦2B‡è.h·Ûn{è4„aµZõBˆV¬IB¾ýö[;<|N` æ›N§Ýw3Wžƒ¯zýúµW±K¥’ãc’³B¡`¶X,¬Õj9æÇ®èÄÄ—hA’ ,ͼÉ- ¸´™õ%o"óYÖ`<[¹\öÏpÍÅO&“ñœDÉçÉd²E -ãG‰MŒƒ,Ñ:!{("A¦Qd%–€ÙµËŒ¡E)ˆY|$?ÿ'ÏÑíh`Š\Ú! nЮ|ö ¡ÝÀ—Š“ ÒÙ–F'.xì¡@ÎM·ù«Ùÿ}6R­Vûeð€&8'© É@j ,Ê©UÝ&€ p.,íøʈaÀ?§Äx4!GHh¹&îÌ@¤-3899ŽJOzÅ`cb®Î‹ -2ÏÔ$ˆJÒ‚r¥R)+fæÝÚöDC¦jXÚ…›L&ÎÈȵMqP™Ö˜ "df[{8I@p’ZÀ*N‡ - m`€:£d†óØ£/Tpʹ\Î+ÿù|ÞH£‚…Žâ°0‚¼xœÉFÛ7@‚ÐÐv­T*åÉëB%²‰î¶)0–åré•jQ·°ž|ÆÙ¡+TOÙÏ›N§} 6 Q¡Õnl¦\.{‹”Ù]ë6] nþ¯oX@µ:C¢º··gÍfÓÉ@tݼÀ¼BŠè–íÀx6„Á ?¢¤N—ß1³ûÃw¨ìS€ä ‰D— Áä[qJÈ4°èÄ  &_í›À‹O‚Ä÷uÛ 0ó%I73×­˜Ã¦X4y&S=D§T'ù‰ -•„H;h˜72 J§-•Tw!é@£’N"Ì|ñÕÌ¿€ýøø¾=ÑuÓê+É;É,Ÿgï>IÀ - á¤vFâ¸ZÝmñà»|Ÿí$)øRdˆÞv‰ifw[K°Óétj‡‡‡¾†ZýGúý¾år9÷WÚéF×A:}× ñ‹ß#Öc£€]õ_$TÌÙÚÉFµ×ë98‡øf>±ƒ‡Þ…Eåy>Ÿ»<Ј#°R­V³££#&m–0ÄH@/¤b©TòªÕ$*æÚy°³³³µ… -îl6³ÛÛÛ-?E’«T©TrÌDüd«ÕLõ3···Ž?f³™õû}'ëW«•ÝÜÜX­Vs IRDõüÇZCFQì÷ûÖn·ýþÄíJ‰it²ÑÖ©N!Ð¥õøñcOHÖëµËB»Ùаh§Óñyºj–Ë¥õû}—U¿ß÷Ÿ‘d-—K¯¼ÓEfƒt2»ßßž¡›Œ¦„+8‘؇œÐIH ð])í(¾áH˜ ¥(<@¨€e!lö÷÷­P(lùM|ø†npŽ&RÄG-.ÒÆL'ºE\‡Ð%q#©¤(Ga‘äâŸ<m4Y¯×³v»íºB…|0¸ÏD7‹…wî ïV«åùøz0ØO?ýä:Žëv»[¤[0I¸è‚Dv“ÉÄ:ŽM§Sëõzv{{ëÇÃáÐF£‘“t>ñ¼ÑhätSP`bí)Îõû}ÿ,Ûzø<tƒ1¢ïpæóùÖ8ˆ[ÈU Yô~WWW^@‡ÞÙ¬¶nBòã'ûý¾¯ëx<ö ò1Ö†ŽlQ·×€³9oe½^{1‹g€WétF^Ø°Ú9¸Œñ+¡ -.,Õ¢.˜ƒÏà{ÀŒ“µ³‘ƒé>Ç·ã5W à&Ïf³î£À¡™F£ñ;ÚtÊâ©Ð¸ò,8‡ás$@êØ ¤ü税`¤I5Œ;€DJà -ÃÖjº²ÓTY¹' ‹ç0V d|4qGéA*Ce¦H¾pˆü@áªÃb3@ -•Nßµ%#g€ 2¢šAp#(ÁVÃÂNÔ‘ÄQ0ÀÄI+ûÄÙ'ƒœÍÌ ’  ƪ­p€ô…$ }Ô³ÿeµZYµZõÊ!‰IÇp8tFÃ"ñE‡FŒX?::òïàøHì”@ (3W˜v‚&-Ì -Ô©jñ’.Ö0¥$À–çꊺȻSÂMÉÖ„¤ŸÍfÖh4Ü™lcóì$)Ò±ò¥\.{7±݃à˜N§ÞÎM20íñãÇNH˜g³™oWàÜŽn·ëÉ6ëÀ ¢«ÄËõzíÄXŽø®1‰ïv»GÑ1%Ë!u‘#2×n-l’Ê¿â"|>šñöû}Ç¡ø=|¸i:úy ÄkÈüc€Ø!¾°¾ Ø&c%vär9ïø`¾è=D -Õ|0¥ú«Åb᾿Ójµ<ãûJæBðöÄÓµ¡E.â¸,EáO«çzN¶y¶WýWYš™Ç½˜o¨¡à6ü]Ä~Å6Ÿµ †/QýŲžŠ°m~CJï üît:uÒ ’ñùóçöÃ?øýˆ½šƒ1f…X8T,áÇ<¸èÊ#þkU\«æê»ø7z †¤“Ý ªÎÚ€U‘äè?ÇŸ /›ÐUž…Ï y%Vë¶Lþ¿û"[ -ÕÜáÿ!š ÃÁT<}!Ça>f÷oS´›q2-¬èZ5‰•Œ<­Er=à -2Tõˆ1ñ‡œ;ÄVˆY©TÊ2Ož<ùV"“„™Ì°Ø,– ßÓ*íjµòDD’IB­rkeˆ z+"›Íz•‡v €*J 0Bù ‚"ñ,7 ¨àŽ1i À`Ìî9*1Ì…Ï2? Å#á׊Î#N¥R¾Ç˜1iå—{“(“œ3*l(%Éû,i»ÔJ²2­ZI`ï=íË$ÔªljÜ´™™Z.—³ããcËårv}}íÆ…œHøHÞÕ°Ÿ¢gÂ:aܬK±XôCËvvv¬^¯{›OeV›*¹Vx;ŽŸu€l‘Àhwºƒn`ÜüNs¿ß÷Š­i -dÃ}˜›}Ö•í¹\ÎAN ÐÈ¥ý‘.‘T*åûâH< ‘Ó=ÿÈK“j3ó­è-ÉÁ;Àñ°vww­Ùlzëa&“ñ.‚túî€H ‡öpü 32<88Ø -$T88ߊ~ß z†N#{ü`$—»{ó ëV(<ÁFþÌ›õ˜+ëŒÞPÌî:0t ú $‘m6›þüo< IÈsÞ ‰RÔCü$UVÝþ€k@Ó­eóùÜŽ½ ›Án9Œ‡ƒx jÇ㱂Èøñ7Ä"âV*•rò_Fû&¶'àùøt|$4Öè§ujð¤¯ÛÅnð·©TÊ[Rñ±ìmd<¬ >ÿ…ŸÁSÅ$ñe-J¥’Õëõ-}TßM2:Ýã‹´Í™ßá#ôUÁè5IkÁ)è!n‘ü¢‹"Õ/MvØÒC¥†ä†{2G|'*ü¼T*mU#ÑÝÁ`à[¢¾ûî;Cd)U.l”DXÇ>RäÄ!rëõÚ»ætk$(8`>ŸÛÅÅ…wÁñö΢ªJÁÛ–°}õÄ{ü=zÈسÆZôŒÒš¤ •ºÕ-¶yÏœjµš“¸ti"滳s÷Öõ!è ].ÓéÔ†ÿÌJ¥ŽŒ}û×××¢µC“Ê Vâ””"~3_tOZb¢&×Ú5áELj& ê{ÁÍ`ųÙÌ·²Qt` –&%Ä!ìãwJXjuœÄR‘Ci9ç‡ï2f0 —bzÅ<"ƒê(I1±‡xhf®ŸZÌÁGƒs‰ z{ñ!èt«Õòب‰¾Û+‹ EñÝ((æh =Ý óùÜ =RÖRŠ\ ]b½YŠ†*OMàµc …¾“§àw•¤Ñ"Šú_Íý×jµ²ÃÃÃ-’…\_€^ˉi¬ zBòK‡³äÒdhÂPX8œŽe%xkâj2©¿ãZ½aQ3@–¤†$à­ŽVçjór¹ô*¸²F8OÆŒ±À¾&)Õ_gZ•˜`³Ùø€;;÷§³“R©€í¤ue„‘¡À3™L<~â/Øz²\.ýÜÞÜ™ºZ­<ÉÆoPÍfžÈ·ÙlÚf³q MÕ'ŸÏom $-Hkµšûo*±è=2Ã÷Ôëu¿wŒ›ÍfkO&kŠâ7R©”Ÿ¬ŸÍf}‹ -‰.¶ŒÞ¨M“W*u¹\Î>øàŸ°QÝ Ëù(è¾½Óî)M>‘$ Ý%Ž“„¡$5yÓéÔ+E¾š„jÅ—ƒv‰ŸÌÿƒ_¥CP«|$(TBÑtB1„¿Ùý6 âvý9DÀ;èCŸYOæÕétÞñø³ûDH[õ¹ø9þ\mŠøBrÂù,|¹é9$›ü  îA&øtœ¤Åµ 4&¢[‘‘¨Õ$H±¶v]Aú#sHedGÌD6øLd®'È3.% ³Ù¬w’Æ–kžÅ˜'¿wBzjÂø°!-’SáOÐw}«Ïo‘óCHTÁ”¬ ÛFYW°¶ƒ]ãt\J¬ó½'+†W’üˆí!;õAظž‰¦¹ë>i±Pçˆ`>üÍg(Š‚wÕGàÓÐI| Ä ¹'ϧ–ËeǬ?˜ü¥ùQ,v£¡£ÈKç¨X›ñê¿/,òRõ¯nÿ‡‡‡¿KJf•íÔEÁ`XìT*µ”9baP¾KÀ8cîƒñ‘H¡H!ŽåKb–ô÷€[*ƒ£ÑÈ…Åéj«óų٬'Á$GétÚ[9õdÀø0>þ€á•eFV´üirSÉž5ä Ξdº˜3Ž—{³†•JÅr¹œÝÜܸseO:Ž€6T€ J`ÑNˆÅâ~ï6I-¯«A™1 Mt–Ë¥WJiÏeï˜È@#¬IzÀ#g YÍçs?¥–“…5ù¥•ÙáàV>ˆªããã­vït:í‰6‰‹™ùÞ/’/ÚÁÐ0Ú<Ñ¡Tê®óR„¤’–AÖK[ŒH`©©­€â(èã8 RšÄ¥$¸0Ž8:¡êƒž¦Ów)õz}+!Å5QežJ"ð,@Š<³ûóKpìÚ°\Þµ«g2w'˜—J%'Ò§ IDATôŒŠ|þî-|}d–”2^_^/ -Sð¨ÄßGGÐ9À«%)H63ì|üø±¿ö» ëh¹\nú¥“‚Œ¸Å? èP–2ƒç°~Ü7Vôˆ/è²ÙÝA‚¼î¦×ë9ñ‹ík"Kµ_€M²$µÄ~fˆ8$ã!àã[ÿlvwÎ `Öƒ¸‰Xd®d·Vûˆ‘ÚÉÃ8V«•³t¥ð +°Æ0]'*¬À°¸»»ë[·ˆ½ÄZÚ·3™»ÎÚ\‰iÄPíÀOPÔ*öÃgˆÌi±¸?´_¢§ÊÐWmm… "†N§Ó­­2€SºoMEêã8@} - =1³­*: #~ø‡O#i…˜îðæ~Ï6HˆF£a½^ÏO!GÆt¨ø†DÒÄ“¤=CÞœ€­3dÇÜt{H>ŸwbC·ˆBQPÀv”°w‚ˆµzÒ¼þNI]k¬ 46Œ gšh‘ódNœƒ°å3ºåˆ¸«E;ªž¬ö³ðÓÄXâ¹¾r[cŽv°^¬q²r–Ä¢E/´xÂÜ p‰ºÞØ4÷åyè•úMÎÁåw˜Ïáá¡ûVM&ñ³ÄBô_íy£Ä{°kŒoµZÍc­è È_KdÁ|!BÁTÌ‘x„l‰¯`N|?ãU -!ˆ¼ (xi®…iцûã‰y¬3Ïå"‡§Çñíš0^3{gÈFI7Ýœµ€D„"6:ÅØÉÁð£ÑqÅààôß¡ºLœ$²Í™L§SËœŸŸÿÇE{ÁÖì¾Êëi*Z RTÙ ŒY«œL„ß© aQMò8¬'—ËùkLXte@µ‚NÀ¹(£„2 PÆL0U– æQ§¦L©VZT‰”5Å('ŽG¯€;—ËùÞ[”€J7HZ,™3ÆÄÏ–Ë¥;üÍfcGGGžÀ“8l¨#ßÝݵN§ãí|VÂ^fœJ‰ƒ EAõ›€Žâj·‘,N{ïÒEŽT£yG/˜ûS#P­×k;::²\îîà*š*»¨UqîKðDÿioÔ×ùqø"€¹pÓÖ‹s%!ÇXIÌî÷Qê át$‘^jk´´b_°Ž$¿8«È -³þèì"6M€Ð6ZZ©s¹»C¥êõº‹E'Ñ/­NÔhåâ€uıb{ø \T -3I}.—s²‡I·À" g}! ݾŒæV¤&ÀÈ‘ÖS‚úû‹ ÷¦Mõ‰•{ü€Ê™’üSÕÔýØóÖm%'¦·r¹œ'¢øZŠ袒Ùè`Š3(žŸÛõõõÖ6$s]Ó7Ÿ°mߢD zÞ@&覒ÄØ%>‰çƒˆt`~ºýE“Öâx¦¤5~ç"7ôŸ~iÕ“×⇔¬ÕDÌ‚<õ`åO$càYdŽOh’Á3 Îñ|~w$‰ã@7”ÜÕ¢˜ˆ5€Q‚™WÈø7¤?3»ß÷ŸOñAÄ9ìnE¿Âzf³Y?ØR‹[àaä~k^Ä[¹è åÂö!@‰·ÈŠìT§°3õƒàD°¸_ñ>+—Ëù[© .5n˜™w²2'Ö“¹ê¼µãKJt ù£G$󼑢JóEMÜ•@EwtɇÀ‚ÌW;KˆÃÜO»*ÑÖYPD6»ïŠT†ñ*^P$€µ5öêš1t"He­JþðY|<1™K»ë GÈ9ÁÇÄ)°G¯×³½½=ß–èÝŸ~úéïpn°¢ „Å‚™V D+&ð5Àâ1)œób±ð÷Åêk(T Taa5©a°0wž6ZÀ¹‚| RÛ½–Ì'D@bQ`ã¡ Œ9‰Å¡³ç €ÖeSq˜´°&“‰ï·"×n’jMè  æùTè¼æŠV6›µ««+$$¦ìe%È0NX3îƒSåµ´R›ÝŸÁ€¼`ˆµcA÷’*¤:Q.—·öí’qÈ pÏš+A¢+ÊêçóygiÑÖ”?$HÈXYdö‹á˜¨37ª«ÊÌâüâþ;=hDYDZÛƼŠŒ=«€uö8¢‹T9ÈŒ1d¸Nm:úAQ¬7O“üI D Á;+ -Þª=ŸÏ}« ¤ ‘Û™¿§² ÉA…‰±a‹€GZ$Ys9Io.—ó-óùÜ[i ÄÈ{¥U¬¤ W÷£¶ñ…øAeþ»Ý®ûX䨠 ÿ€n NÑÆùcçl—ᙌ—àA¥Ž*$A}U¿¦Dû}yÝFëõÚŽÝž >ÙlÖ÷†ãkñ ¹\Îß(Ón·”!`!wi£G÷3™Œ¿ïšä›Aßto3‰:¤¯ÆQŸ€¡çȪÄ÷êt:6›Ý^MåŸS¤y·8{À!YI©àcøbl ðG‹¿&Lºÿí?€JÈ@ìH«„ü¿‹_áõC¦zxxèmî777Nš¯³Ù¬¿æ h¡ -”Ïç½Ã Ž¼±…Ífã÷)Ò7ÉgðGeœ©€iárywÆA½^ßz½$Ûy$0`‘l6ë>¡^¯{w…’1l[ ›ˆ˜YÈv7bÈkˆ*ÝFŒ<::òn8ÞŽîaÛëõÚm€ˆÒnp’g©ÔýžW:Õ~ˆ` Å(ø0ÎàPQðñ2“Éx'ñ™xmv×=ÈatàÞù]©TÜN´Z^©T|] éù½z©øk6›¹Íììܽ*X#Ö²\.Ûfs¿}C»ªØÎNä»yª{$}#!1!(Ìî›Õ®5p¡&ªN1Ñ0»;·ŸE,ÖJ)>ƒñéz‚?u Jò+©:Ê÷V«•ÇR%· …‚'ÇÈ}µZù™O踘çƒa‘' z‰ [[Æ6#jUW ˆ5°8r#1Sb“¢I«Ô›ÍÆoU<‹cíµãâßHA‚V(¸ÊårnäÌUÛªvvv¼úW((²WÐðœ²Ãù0.Úwvv|Ï(Fq‚A’lc(èÎÎÎŽõû}ÿ*­‡`²–ËåìääÄ9¶@²XèX­Vþš%ˆ6@:-Í%|ž hÄqcØ€*êìµe¯Ùlzå{17뇮snƒ™9›‹Ýõz½­dT×9"õ€6£Äùhr ¡2•Jy{¬ˆÈ}Ɖâ' -…‚ú!y|Œ‹Ö\dNÐ¥ÅW+tmЭ §V<Ð[3ó¿Yˆì -G cMb ®6‰ÞàÐël6k=ò Æçx.í¨Ü@ø`œ‘aG¿øw¹\vr„¶ë½½=¯ì8%$)0êÚƒ½3>Ö–Ê%¾‚}Ð=: °MôG»¶Höñ i­Üó}ârFÖt‰Ê+~uí÷ûÖëõ|ŒÌ•ØÈÀÎŽ›ÍÆ×i8zåÂÿª ¹Z­üucÚšŽ_W‚/¾ÛJÆ+°„c||{#CŸ™ã|~·ÿŒï†@ÀOé– :ðÑÏ>ûÌßÉ®À±Óé˜Ù]ÛIúXKÖ˜d–ùaZaÛ#ÌîòÝŽ|IÕ/cš%•¸!÷Àð†*¾¡KÌ…|;¥Ói·|6ó!.‹•$D>øGžFÂGƒ c‰$^qtòop2çû<“{aèò³£ÚNNåŸ$ùéípÀo*nÒ5VÕB0EÖ Nhñ |K®F‡ Õ”J"r/ˆ1-&£kzõ“¬«vs(1Œ}óLžÏ:Ó!ª•„Ñ®)üÁry€¶úlΊ:Ç3!`ôßø%â5ƒ?`-µEí.â>úæðªI‰]™ßüæ7¿K¥RÖh4|+J†Â’´f³Y?œ…Ã×X$€}6›µF£a‹ÅÂO‡½=;;³óósÛÝݵ?ÿó?·ëëk.@®P(Øùù¹ƒ'B˜wö²Ó^ERL•…}ø¼—– -•þ& V«U¯>ö–9=Ð‡ä €CeÇ ¢ØAY™™¿bCƒ`>m'8oÇÇÇž’¸ñ :š´Ê›%˜“lxÐ_öc{¨ø:3óyÒN\©TìððÐÌîÚOOO=¡‡¨An´™\´;²7NÛÙÙ™')¼«Â2”Ê sü’p/ø !ÚµÅÏ©°²Ï™5¡ò®À”¸¡ç°N|†`­¯þ£CK«4èÏÔöhÈ5üu©TògjR¯¤$÷Ç®ëõºCíbÂ÷+Y‚íBê(á„^ó|=Ôp…ŸÇg°…‹˜I©äR&“ñdЂÿ«T*.[äP.—-ŸÏû65¶c°&è°V–$ ™óù܆ûôñ ‡Ø’ÙÝÖÀšVµrX¤ „=Å$ñƒÁÀñ 1 }%1F¾Õ©V«¹Íj›=˜A}¤X,ºýÑY´X,Üßù:2b þÖÌìÑ£Gk((l6{üø±oýÂ'”Ëeߦç;³è,ÔâM­V³n·k'''ž¸²f$[ËåÝ¡~ÍfÓ}ID¬¶ãîííY£Ñp{"¡$®@dPØAÝ<0NŒ'¡‡0%î¡'è# I~…ãé(@Ø0Å l Œ±aÿè+~ÿö ©")ÒÓí¹2ÅÇ«<5ÙSEŸqRIÕí¢z`Qd@µˆ¡à`a¾KlÇ!_ü÷Ö"[, -às '´a4¹-0VÈ_|:»ÝîV—~H㸛ÃÖ7ghè3ñ北‰¾kI YgÖU±œ’Aº•š{êÙX¬;ø ;#n6''6B1Ž\G‰°]ì¢@|Ž8¢g±(±Ç…-©®â{Áš¨üÁŠCˆ È“µQÂF»ž°>Ïg'Ï!âo| •Ïð=°9qbïjÑ™g9Iøñ`Þ¾}k>h*·¦ápèΧ ~ssãàh6›Ù£GÜñ¡fŒÒl6íööÖž?nz¥R){ûö­ÿŸI³àÿÛ¯J¥b¿þõ¯­ÛíÚwß}÷ÞÏþú׿¶‹‹ »¸¸°'OžØf³±7oÞlUM?~l777ÞUð_ÿõ_öôéS{ñâÅÏÓëׯí“O>±Á``V­V½]ùððÐnnnü™¼ŽíììÌz½ž']¯_¿¶ÕêîÕ ×××Ön·ÍÌìôôÔ«SÏž=³jµjívÛêõºýøã¾w³ÙØÁÁ·^Ò-À~Æõzm———öÑG¹±~üñÇ6íõë×öôéS[¯×öüùs{óæ}òÉ'¶³³coÞ¼±R©dNÇ#‡C­×k{ûö­õz=›Íföå—_Z.—³v»m···~•™Ùßþíߺs£Åò«¯¾²/¾øÂæó¹u:«×ë¶X,ìôôÔR©”ýøãöøñc›N§öí·ßÚ/ùK«T*–Ïçm<Ûå好~ýÚOrþþûïÍìΰoooíêêÊ>üðCûàƒl8ú¾Î/^¸³ââ=ÕÐÌÌþæoþÆZ­–ýñÜú|:¶Ï>û̦өýË¿ü‹}þùç6íÇÜú\½^÷D>›ÍÚ/ùKûþûï-ŸÏÛåå¥Õëu;99qY,íßÿýß­\.ÛO?ýôŽ®qPât:µ««+gé|ðÓ§O=þÜ*•Š}öÙgöâÅ »¾¾Þ 'Nÿt>^Ïž=³¯¿þÚÒ³gÏlggÇõ‰+›ÍÚùù¹½zõʱÙ]u† -g:¶O?ýÔ^½zµUÍx™™Û‰^€Ë|>oŸ~ú©¿n,é" ¨Ž’´šÝ%EŸ|ò‰Íf3ûæ›o¶‚£^*÷çÏŸÛáá¡W×ÎÎÎìùóç[údföå—_Úõõµ]]]Y±X´Ñhä¯dk "• -3³››ûýïo=ò$~½^ÛÅÅ…}úé§Öï÷m<[³Ù´››{ûö­={öÌ+K©TÊ× ‡oùå/i¯_¿¶¯¿þÚ×BeüìÙ3 vyyi§§§öúõë‡Taëúè£ìúúzKÎÿÛ®³³3·Å>øÀ«üT«[ß}÷w<œY©T²?üáv~~nÞ½Àö'Zo;ŽWĆ]]]yò ÛO8œPB‚Ä6 ’šo¿ýÖ^¾|éûçIj8 ¯X,Úå奨‡C«V«¶^¯­Õj9ñÎ+å®®®<¶) áJ"ôêÕ+'‚8,Ž.‡Édbß|ó¥R)/B@¬ª>‚{hÍdî´¥K²‚›ÕjeÝnצө“ØO»Ý¶££#+•JÖjµìèèÈqÅáá¡Û1—dåââÂ?~ì€wooÏ_ï YG^£Ñðsnoo½‚¤_œôèÑ#›L&öòåK;::ra è ƒˆÔmtu€Úí¶5›Í­m»»»žôCÑ^^*•üµž‡‡‡>7ð%]›ÍÆÏÍi·ÛNŠàç´CŠ·Jð¶> _v³Ùô„"K[ëÝGC¶Dƒ× -…‚F#«Õj6A–Ñ-¨EÞ”¡0£_Œ ‚yñïÙlæg¯@ÞB,aÚ™Bw²À†è~Ò$Úì~ûE8í<â3È Ÿ A ]tA.h¯v -áA—ëÈöWlußúý¾ÏŸBëDQÍf–zñâņÁ³ßÞl»½QOžGÐ:Ê ŒJ¤-d0&L硇|(ûSevÏ ¢8T" -Ï¢è¾jmQÑÖmiã»J‰âj•AYNÀŒ8m›´Z©#¤’¡áœ1>ä `Ã08°ÙlfõzÝ×PMõ…j •7Fƒ,ù¨Â`Û`²q\(“Êÿ³öü yÓª¦lÏgÝ`ØÌî÷´ÀüÓòκ°þ´¦â´pv¼–C™Lˆ,äñó]d¥ºŽ-¨]aåé¬ pad°{ù|ÞÁ£¶ºieƒv>ì]ÕVl{Aî8t­è({¿  úš#˜WZÃHøX#æ^PÐ l‡½çƒÚE„³Q]A7#ÓÍ}±kÆÆçap±beŠi•G¦èsU›ÆÖµ“FǨÕEæ„C>êèÑ!HÚ:Èz*“M»)÷@µ• ‚.à‡° ~†![:°+õ¹[í¸`Nü B €OjµZ9˜Eÿ²Ùû}§è)så@Lª3Œ J•+•Jyë+]5Ú5ˆDGX7ˆ´ÕjåITdX3žÚòÊÅ92È2[í}׶wd@ÁPY"èãóøžVk°Kbk­1 -ö‡ÌÐSö\R¥ Â¯šÏï^uz{{k»»»vvvfÍfÓ¾ûî;»¼¼´³³3O®Ûí¶£tGe³w¯6XìîîzòH7q·yL&ßw¾3ôF~7]'8ì¹.—K NœÒ9EÜB¦;;w‡e¾~ýÚ;ª´ÛÄh)†PÒVU*~ÄÎÆ¡—çONNìêêÊãú«W¯¼‹‡Ž1žµX,|»^­V³étjßÿýVw óùÜêõºØåå¥w½t»]¯úÏf3»¸¸°çÏŸÛ¯ýkûꫯìüüÜùÓÓSû·û7«T*öå—_Ú?þèÉø„ñd³Yëõzff¾EG}1É,¯QüçþgûÍo~ã þÍÍ ‡Ck6›v~~nëõÚ^¿~mÿú¯ÿj§§§v~~nÕjÕ¾ûî;Ûl6v~~nóù|kËK¿ß÷nΛ›'y»IµZµ««+µff^Íl4.ËR©d···v{{k™LÆ;x5ñÅÅ…w#ÒÕÓét”kU’·‘äá¿ùæËçóÞyxxh_}õ•ýêW¿òm’È«ÕjY»Ý¶_üâþ– -r­VË;ðÉø*Û³ÙÌ^½zå‰DØ¿9„®‚ËËKÇiß~û­™%Ñ\{'Õëuk·Ûvpp`ý~ßšÍæAnv7ç󹜜X«Õr]$Žg³w‡NÙjµ²×¯_[£Ñ°Ífc/_¾t¢í4ÍfÓý In»Ývû%!#Á„ؤ#™í¹ä.Ø ‰d°Ûí:±p{{ëkÎÇÖï÷·ºróx<Þêî ÿ€Œ¡›Bý5x ¤•eˆüÉ)ÿJ¥âD çPt%6?Xý¹ú3ºÔRœ 9'Öñ–ÝÞJ•œnaü ¸«ßï»ï$y§Ë|ª[gˆ•äwšÃ°í"Gþ=!&iË>d'ã0»ï¦ÖŽâˆæ0¬#q‚T×KG±Ù]q˜­tŒ•}bF¥RÙ²#æ¾ Ð.Pb3¤Rj>Ÿop…‚#$Ξ›“´HÑ€”˜KÛ!˜z€6Lk²È½|†s/ŸÏ+1¡ J“Áز¡„ƒVÚõsjLÜ pȦ­™ÏAp˜™ÿœù*¹Â½ooom:Úáá¡ßƒöM“ - -™Ï|3v$£îÿã{ê¬Ðt„ä‰ÏÆyñ œ¢ê˜2ƒ`]½?k¡€ÝRç¨+Ùƒ<Ì‘tR½R}S;ѽd8%¼?crеQ¢AeÃ:ð<.ÕñhÇzïH1'æËg£ÞÇ$I®l¦~8k݇©ì2ò×DQ‰ÅhºßLǤ@”±ãwtîQöŒ%úm«Sy¨ÿÐö3æ¬:Ž™ÝŸ ÀøX?HlEÉÕ+ýCÕ-¡úl•ŸÑä9®~ ÊÁÌìêêÊ‹…}ðÁïȈ¤Km2Ú©Êr€Kí“X ú ÄrU}×9ê} Õ"ƒ(›$â²°¦z¯öcvO<ó ’wÝ:m‘uR½`<¬=fÛûâX[l/ê…ê”þR0êŸÚ¨V)X{þ*XOü:ãÅ'²ÖاÆ]æ®þ™1ÅØ ‰ÎgЯ½½=‡öÃ?ØÇìÕ õÄǨ#Ì3-X7È*ÆŠ_ãB¦´“Ç´øÀ|â÷?±>Ì“¹b«‘ ƒh AQ¿—Édù±úg IDATì¿ÿû¿-›ÍÚçŸî$—’Ù¾/ -r!5T¿°gªª«íx€|#¡ ÑÕjÅLæ®Mœí\¿ñS€xÈ8 -àµu%&Yb“’ÿè8ÕñÕjåÉ6kJÀºßï;¸‡D`MÌî -:€{ -H¬T*å2D¶¦è*  *2Ò"b5ð?GÆŠ§ó ‡C' H.‹…wq±v$1låPÿâDZü„îëÇ?Øe2ë÷ûn—ãñØÏ#ã¼%¾O§Šžƒá®UÖV«å zªc~üø±}÷Ýw6ìôôÔZ­–Wþùìh4ò.ÃÛÛ[K§ÓöÓO?yL&–ÛÞÞž–Ùh4l0X¿ß÷³/nnnl¹\Z¥Rqòò†ÎŽZ­æ„ÞÑÑ‘w`‹TÎÍîßòtuuå6R*•ìòòÒ 4º£þê¯þʲٻí²×××öõ×_ûÿêW¿²N§c¹\λŒÏÏÏ}{Õ«W¯¬Ñh8ñÒëõœèÕ«R©X³Ù´ÃÃCǶß|óŒË–$¶• -;88ð„ŸÎ‚N§c?ýô“·Â÷z½wºö¬ÝnÛçŸn³ÙÌÞ¾}kãñØ>ùä'¨!5vww­ÛíÚõõµ5›Mïöév»öüùs×bË“'Oœ\‚T\­VNŒr={öÌãÜb±°ããc33»½½µN§c~ø¡Ìnv×UÒëõ|Û0rÜÝݵ?üÐ}-1“sÌÀœøj= ÒÜî5ÝÖÉø‹…¥¦ÓéF0ÁHA>ÁQ¦ÎCQÈ¥‰þŒ¿5¹3»OD”\P`ÄgQú˜ +0æÿz¯XíÕgGðÏs#\š)pQP¬ûä`ÿ*€³˜FàOÀäu%ì›|Åõ XèºikŠ¨Ú5ÉÕä+®AlqáóÌ[Ûe´ãC×LåÇ\ bÚ!A 43 ŒE æÇÅÏU¦ -ÈUï£Nó{ä ßU½FæÈI™½“hû™Ùý»_cÒ­„r×j êQü·ÚAÔe4?S`Çiõ–{Æ„3&{ªOÜ[É%ô0êŽJ«êú•÷ÖŽ] Õ}­ ê8•èÑ{ð]àši’É3p¨ÊJ£Ë€ Õ{šú%,™23»ïòàwÜOõ–õˆ¾P® Tç‰Íõõµ-—KfjÇ|›ç¶F"CIƨWŒ ë|Ñ7tSý»Æ«h1®D_¨º xHîÔæÐq‹J¾ðsÕ]G]3@8:¾ê=Ñ5䢶Ï\¹ÔªÿŽ>æOì"Q§?KZ3óÙkL¼£ž‘x¨ýÇ5Ư+u\¶\Þ½fswÐ}>¶ÇÍxõ;èµú<õ­Ø¿ßÌ!&û:î‹ÐM>¯˜,ê®®O´i½/Û—Òé´=}út‹Øˆ²C§Õv#®Ó窞éÜu~ü[ÉK%êU·x~:Þ"="FT™™™¯ òRÂ*â•gŒ<_qÎG‹QQ磭ªü”ü5ÛŽiêë˜'Ý=¼íE}©’¦Ñn4Vèx¢Öb㡃@ )Ö‘K×@×?¦2Rÿq*þv³Ùx'­¶Œ'é©ÊKý—¨«þ¡KÄ_HLt‘*°ð“èrä;Š›ø9$0gšÐýD7bŸb±èíóàDƨ~ˆ¹ðÝåòn;[3©ì_3:R©”wXéyT܇dS·7ð:¨–Cêø þtM”0FÇwvvü-$¬qlw¡#©ßï{…Ÿ1(žÂGpα–x¹G§˜ú#Î'ÐNRµt¢€bL|½ú8íêT_B?ToÓé»…W¯^Ù?ýÓ?ÙßýÝßÙ'Ÿ|âsѸ¡]eϽ‘¯.õûêÃÐã,djäêÌÕÆà¡HºâÏ# R£N -.*PØŌԙDç€A²ID¤Î<&VÜ7=A¥Þ'¢W+h1¨ñ,M²b€çb~ÑécÀœ¨aƃ&I¸Î; @/5>£\ú³HV蜵"¯zɘ•xP#WƒT]ÔõS=TУÁ\å¤É¡Ê%ÎG׋ -OìJàJJTTbŽ€Im2éot„yÄùF@©Î]ÇÇw`ܹ'Ÿ„™:WæGpR0AX’¾éø’æý/dèïq QŸGÙŒ™ß1îèãô»J -D@­v¦nuâê“£ü¹’ä}ßÓû¨ŸŠ¾*•ºßf¡óRð£rƒ¸‹•ú¤x¡ãkÄ¿“|+zõ)Ú°‚a• I_Râ¢@&)1Iš‡®'ɼ®)ŸdÏ43¯ÜðÔúàÄ ò~(¦"ýŒn«‰¤B’.ATD|èŠë¬—&‡ñ; -Æbí;iάš”x™™Wz”P’>É6Tƒ(‰§ß]$ü;)Þ£‡ÚŧþBqŒÚP\‡$¿vJ"ÓYW·úC“ÚCœ¯Ú~Oã*?ã{¨,T¾:Ÿh©Ô}÷_|®Ú—ê÷áRò"BýuÄpü›ß©oV?‰,3ÛJ\õR;ÆDÀ³ˆ/ªÇ1ÁægZÌÒ±1Žˆ‰u‡¹EâVsb$˜@;xUWÏbþj¿Ñ‡².º~J©ÿ¢ó¿¡¹ÚšÚG&“ñƒK¥’ýêW¿Úz3JR¼AWÕ–0®8~•5÷Úò‚I€ŒA'9…ÿ¯®„̶C¯Á%5„ﯤEGH€²èôôß|cŽ‚cÓ€kf[Áû!àÆŸ˜òwR°4³­Àéûd`¶Mˆè³P$Œ¶W?¯ÏŽ„CttñÒ@«º òÖDN™Xeî"úS@5Ž'IçŽþÄÀbf[À(VÃyîCãÓu{è™fÛàI/Ýç“EOμ&:½”ä`šÄè½"¸K#Ivm=’ 1!"ÈL‚|^õ_uR[(™·6Õ%w’Î(hàßëõz‹ÈŠã_­îOjÕqEûK’OÔ‘hãÑ)€QŸ/MP£KòsŒý!?¦kô8ÝJñYI¾K¦²×ï=´–1^ ô,vßèŘ#ðˆ²ˆ:}q›Xº¸_Ò¼#€ŒòIú[…ÆJ•‹ÆM|¸>WÔ‡bJ”·^ZÁÐ -¡Î5Ž7)~EÙ<ãç#0Òõ0³w¶ï%$ºÆŠ’Æ z¡s‹—Ê,Î;i=ÿTLÇÆõóËãw¢¯Ö1D»Šò?Oò‰Ü#&4úû$ß—¤Cï[çè7’sü·Î;>Q\õ">C+ìè—ú•ˆqÔò{þ<Ô5¡ºÌ}’0Ai—$Ÿ$_ɳ’®8‡h|O‹$*¿áp¸UÅÜl6[ vô1ëõÚ·eÄdù*&Wò‰¹Å„ŒJêfsΔÎKïŸJÝŸ¸N Çöù³^¯ýl>ü'ÿ“â+òˆßÁ×p.úJ»zìL¦Ûûr>ƒê£’ Œyd³ÙwÎrŠ8JeËö!ü{«Õò„WeÀ8é‚S{£Óµ×õaL©TÊ·IéÚDŸÀ÷´˜¥Ý¡ªCêËØN£þ(¨Ö«m¢›‘˜‹6Ôn·íòòÒ¾øâ ?ËH»ã˜t ÝjµÚ­` š£E¿‘U° ˜+‚¯lUaš^ê@Þ$ôJræê@ô%%þ‘(˜IÚ?®ãÕÏFgÁbü]’U%R°¬óSfP+CŒ]÷úƪ…: žôÅ«Ê©ŸI"c˜·ÊP$rS‡® ßWö'†AëxŸ:&5DÆ™E‡^ÜW ’xM’€D’¾k0Ò'±É:·‡ÀƒÞÿ!Ç£ÿWð•´žjú=è¬óâg0ÄT!ô™ÚFÍ÷¸_t¶Ì-î V]`-ÕÆ“À$Wdm„ðý˜(ù¼:[‚àÇÊýt-¹cM"ÊÐ]%cõ\×0„üôŒ1Ž7Ο±è¸¢îèw9<Žqªý±v|žŠû_uÜqý“ÖF›ÐMõWç­rå»È=:Ÿ¥k®6ª÷Lþj㪠Ü[}ŸãèÓu\¼FÝ׸ƥ¾KJ¼x–nõѱë8’lJe+o1öÆä1i̪IWÄÈ;¶½ÇÏs˜Ÿ>Cãf$¤U磬¢ßP{ÕïF}4³wbR’ T—Õk§ú„ˆ+ÝWm…$#I§Ñ{¾‡¡ÌCc^y«?ç"ï‡ä‘„‘Cô!Š1Ô/ÄʾÞ3ÉÖÂ¥±ºc°& šÄûsEÿÎzª^©íèWÅ:z¯˜”¨o‰Ï²‹2Š8Uÿ¯ »Ææןǘ¢ãM"lt ÐÖAõQ±›úxý¾âî£{À•,I"ù1 ¢gwéµZ­ü Dg‰Ñ$fêûcË6ãD6ãùŽúì*©ƒ vkbªãSÂg6›û¤WçSb*ÆIÝ^¤~ÌD•|™No¤Ìsø~Œµ1§JÚj¢˜_ã êÇn Íg6›;‚A·¢èÖä¤ñ¨îri¾¤ºŒóV2íÑ.;µôUñ’v„ézÅx¦~‡Ë·¨`2 -PT¸‡È€hˆñRÇ¥ŽNŸY \R¥ÏŠŸc‰¿cî«ÕÊX@¨IV•4 LÄq`Ä*¯¤û¢pz‚&÷IjkŠk¡òT‡˜4®(£¤9è÷ÙR÷çi 0Û>K">q*à‰k£Œ(dA”[dÔÞ·öú9•…oÒ8tÌjt$\Ý ½Žåž´†ñŠë”t%Ù€‚Œ$'ÈuRçï×8úœ›¶1%%Ø¢ïˆòWç•$§(CìDuEGcº~zÀU’Ü‘Ž›àà æÜçq©èÜ#`Ñ€ÏÀ¢Ó>§Á\ 6ivß.‰¯¸N*Wþ¯À†@Íwi3Ô¶ÕÈÌl‹°Ñ{FÝ#pé<¢=hU8Æô/Iþ& ¨¢#ZÝWÐå}7:Û&£­¢ûívÛvvv¬R©l%bZýQ&_ÁDôuцT®Œ]§8¶$_Œn 0Ûî&{_Ò™ô¼¤Ø£rëªq.ÚI\.•¾YÇ}W$Hk¬êç5Î(9£¶¯2NÂTñß:Î÷}?Æ ¤ß=„ƒ”¨Š10ú6ýßS‚7Þ/vdªl£nÅqý©+ÎQm- Ëè•Ô½}V$ ù¼Úg$>bŸn븗%á.%[U®‘@æûIö£cÓÿG;àgØL”ÅC2Šº©2~h=’Æ唤Ûü.vÎñ<¯IsçLþ‰0ÝVa¶STVÄ@ö›#®Ñø‚þ0võóŒS«óz¨«ŽCå»Ù$o7ྱ0I?—Êë!ŸžDjÆßë=” Õä:Ú\/=ŒU;4¡Ñ¯Dl¥ë§Dfœ§vˆ&%Èü„5OÔkÖÌìîÖÇÇǾ&’‘1†'­ÎOŸýZÄ4Ût©\±B÷>Ç úÌCIßÓI$]ªBðÿæRbvß’KZЇ®èpãsôßêl’~¦ÌŸÙý+Êx¾oNïûÿϹb€ãŠJ«ñЭ° C1Ðè<ø.d‚&gü“ÀöCsàžIÁ*i~ê`cÂ?«¤G¼/2ÑÄ3:Oÿÿ?¥ãQgã -Øy6É&ìt$hô“8½4ùˆA,)X'ƇŒcuåçø£t:½•Ä¨óÕªA:v¦Ç·ÎhÀgf÷À$‰èà÷Z©z_0M=Ü/—ô=@€&Šür@Ûäb VùòÀR$&ø[ƒŒî[¨â–Ôø[íßÌÞ±eÇÕ®Õ.“ôB}&k¯sÖÊÌ>+‚}nLœ’-½tíÕOÆ5ˆ•U½b‚•46%fßw=',kEõ!€ïõêçØêŸú¹Ê\=KJpø<'òCœÅ{jlÇN“lBÇmEÇ’dÓ:n}v¨‹—‚ø‡ä£úøNK¥îßÛão¬']è¤&6Qïc+;¿c½"!ós0eÒõ>üŸàž‡ânw{H®‘ÜПG¼¡\ýWLd¢~è˜ÀIQOã–™xEß矔<ÅùÇ£ˆ¤ëû.QçþÔwõ1)çwIxBÇŸË}”èMêÕ¶nþ¯E¶²ëÆ»Ñb’¬cVÒ(bïl6û`%Z;(ø¼v”ýO¯÷å6ñsÑ>øo áÉüN×)â•÷=ƒïÇq©üêÊãgQ¿vŸF¼¬~0 ÓÇ!® ÷CGJ¥’ãXÄ1»?[Feq“âÕ•XTÒõØl6w@ÈÑ@ª‹¯7zÈø?ïKÖâÏ5àh•1~^Ç'ñh`Ž€K¦àÊlûð»Ÿ~4шòŠ­_ŒKÛib1»SÀE¬È$¥*›£¤Ö8žÉxHr0‚XuR§HRö™#SMÕhôZMTp¬?S™¨ÜÌî»5̶÷£ò;.}¾‹êŒêD$­bÕ5ÀÌ©ÈFýŒléû@~R¥ã}ŽXuLŸ©$ èXT†<¸§2ÊèG<YŸÍ¥[ ”4‰$Š¾‡lX×ZuA혱©£V&˜ÿ«`'JZÄ ©¯WÒ{j›Uô1ØþŒg’Üs©À†xNøƒh»I­–1P0]Ëè³XÞ‘­ DL>t £¾!³w»ôó1yU_uYh;gôQÇcg„ÚrlÖÏësÕG0®¤8}Ï|>·r¹l«Õý+ÕÔgÄô’JN«?ÖäcŒJä© ›vh÷Šeý[d”±ÞWå§v–ä#HQÿ£~LIz}F\ßñxlFà >]o@ºÊçªV_™J¥ÞIøÕ/FûP}B÷ñƒ±À‚NëÏ°9õg*3Õ»ÆRæË+ß"(Ôy'iì/¾¥Yèx"ðU&aLî£ÿÿŽ¸OÇ® œÆpÕG•âlI»mt­øë¬Å ‡Æ¯±qDÜÇgµÀÃøÇD Äኇ5žÅöå¤ô5Þ©Žj¼Rœ£ëñ~?®wÔCÕM½â:+Þ‰þTc„„Æì;i̺þŠñÕ>")1žþm?úõuQÿÕ¬V+ï&PûW=UÝQŒ¤óÓõ22Ð.½HdDÌ}’Ž#úŽxás”¸â³joÜ?éÙ|^ñ‘úc]ñ>*ê·¢o‹~_çÀÖˆèã«rE̦ó@nœ 18É_Æøo¶¨ÿã{Š ˆª[Y>´’œ³ -E¯¸€ñç%-Ýïò»¨ü<.*¿Ç£"ëßÞ—ü뉌ѱ'Ý?:J’ ½â÷¸P2Uú¸VfÛ§½Ç¤ˆ{*QeÑï˜mƒ: ž™¨ÔPà¬yG.—ó}™ãñت¨¸©TÊ_›¢É_tê˜UÏ–ú¾h,z)8TY©ÓU9«ÜpÑÑc´IvÁúñì$Æññ‡ìAƒxÒ÷4 2ÖÔ£3ÕŸ)ðŒšõS€©Ê@ƒšLf÷ïÎN²Cõ[ªC*Gµ=ƒBǪŽ[“ŒøÌhÛ±©:£Ì>ãÔ×¾á7´e/^ªWªŸ<ñ®iÔQ]#Å|î!?þ?T_¢˜C×0®y$ô¾ú;³>+'Uw¢Òñé}õ{q4f$Í3êdÒß1.êc—’ªßI>'IÇŸã›Ô•ÔÓ5ÖøŸ1­’SÓétëlµžåÈý‹æ[[¯äR§E¼ÔáDç¨ÂM I—>ûO}ö¡ñàÌX”‡ÚŸ£“zh<Ü÷çü^ €?,¶ÊR«Uï ‚j¸úª–˜¼=ȸo¬Žñ}‚ -cR£å3ªÐ(þCÎ[èl6Ûj‡b ù|~Ë‘Æuàÿ$& -2tü€dœdÄQw£ƒŠòVPÂÏ“æŸeŒzÒi1‘Ññ&9§Ÿ{i vÔ+Õ—hë:.•MtžŒ1^јݿ?6þ<S1%b¢cOÒËx%vMÂðУ$ð“táÈ£L’lQ1òAι\ÎO -Ö1™ÙÖÖ‚8.žË\bЉ†\g³Ù§ÛøïEF–1 ®V+·o -Û¨42VQ$ ’b>ˆd´P(xë`.—Û'•¯Èj«ÎÆ -†ú|¾³^¯m4Ùd2±B¡°ut-ú3ª9ãñØöööÜ÷E€„ÌÊ}ÕÊ4úÈxyÏ0rÔƒWc¥2‚KµkºÊHôg³ÙVâ¢Iº°Ùl¶žäCø.ßÓ=›úYÕçØ:Ÿø˜2ÝÛÛÛQ -ü¹f³™Çãw'òJ:1:Æ ];>Ã+"5áŽrÖ?¼jP[u¹oô Œñ}à3iŒ -ð’|=Žù¶¤DZ»Ì¶[Sõï$»ŽãŒÿÖç%‘»IWÒØuLè4sPãr¼þ6|h|Š-â½´sMí(Ê9&¤øÍŠ-ôTvµSõAøÔ¤9ÿ\¼ñsq|œ»Ž‡±óÚh>;á¢Ü4QRO‰cm½÷Ðu‰ºªñ1Ž—GŒåóø€‡Š=ú\“H">Œ~GýD´#hÖÿ»¢$F”¹Ž_ï¥ñJ?£±+æáo^ñÈú%=S/IÑï%ù Å{Ñ)ž~:Ê4Þ|E!½ˆÏRŸ¢rÆX´ÑEûÕ1ðû¤×ªiΔÕ0¢Â$9OƤµ­(&TzϨ(IW ZQ1«²©ðÔˆ¹Ža<oíy˜Ñê˜&Gd«(€ÑÅU™r_uæZ±ÐdÇ8™Lð!g½§‚(œQÒXTÖ*#m7ÔõÔñ/ [.—V(<±HÔÔ9òóétêÿ§…WOeîZ­PcU€ÐŒ•’•}l¯I"stæé. VO:NÒ'u º¶º6ŒOVÇ”Ô-¢WtŒ&éz ŠIÿŽ÷ŒsŠÎn6›Y©TÚú¬²jïq}ÑsÝbb–ü‘¨×üMÅ‹Š,@7]3t», -žÐ>Ð+µWž£{lñA:nÆùï»ÙÜ¿yA¿¯:«à^“Øx Ê7¶JG0ÂXt¬¬i:öÊ“Ú6:‰õ}µÌSõGƒ=?;ú]ÖYý¼’…f¶UM×í -¢µ½P×ZÁ˜p±$z -ZAÚe F£‘e³Y+ -[ WuD’¢m˜ÙlÖI ³m¿¦1&V_t‘,S?£ yĪºnyS ­ñÄ9’rêGø>äEZ* QÇtl<àÌZh‡W¼êïûâbFý†ÄÚÞœ”Ä‹y"'tgaëØNìžQùêú2®(S³>3éJÂéꋹŸVl“Åb> ÷Š2ÔgFBDï­¯ä;Ñn5GHòƒá3ÛòÅØ[ÔÅúöˆ‹Os)©ñ»®?˜T;ptÍ¢ŽDŒ¦[ë¥ÏäYÑ'EyñÍ Õ—îììxÑA;§uÎÑ_`#I1DŸ©óH’#ò׳="¦W]PÂS×N×3“Éla%À8è)þPñŒÙ» IkÇ8ðujOê›uí”àÁ¦´x⺠ÿÑDg¯¤ÄL©?ûS쮋Z\˜èØø;É©é\ÔÑê˜p$% -˜ÕqÅ€§¿‹÷yHú=­æ©!èÛÌî_ÂüètˆÌ^£ÊS•0¾74 <*hC™ùžV“÷Ëår[F¥ ‘µÇq¬Õ)DpevÏ#7Œ3n-ˆÎ›10VÆ¢zôý£C?¯NYG$qTßõ¤euìê¬uMâ¥I§®ßûÀ®ÊG“‹‡º~’lQÇ¢sU§¤²Þlî_©I+u„Êlëz'5 ª¯Z¥Å1ª_`}’ìšù˜½[ùÂq?D”DY«œÐod¥ÀB×M;"ñ¡sågÚ²ª÷ÑϪoIòÝüžgçóù-R ÝÕ- »èë"È໌U -î}•ú8_­ˆ=¤ƒ}Âø•dä>u’%Õ™úóf³¹¥;:[>Ÿ÷û†øÃáH$Ùø#º -â™FŒ—úq:Tfê»ãúêÅx—Ë¥ð$±Â§ÏàmÊúšBeØ$¶Ê@ =£&“Éøš±5ûÕ±+Pþ¿X{³ßȯ3½ÿ©âR$«¸ïlv7{U·vk䌜‰ìq™ 0A.s᛹Jnr“ƒ\à÷$ÈE‚ä&@€‰cð2“ÈŽÇ‹dYê‘-É-©ÕûÂf7›ds¯bq«ú]0ÏéO½}ª%9Aò»œå=ïò¼ïyÏùòÓN 4R7z^Xb%ÒÏsƒw´Ôc“?ë)µ~’¨e¹\.§þÄÀ ³oœ DÙgàŠ6ƒç —9Ÿæx8Ú>_g`œüL›,ÔÅñ7ÛXCN IDATqqŸ!¿øÊrÎÉ`–Çèp ¤9å5ê:Òòm4·ÀPî¨d[|†mÆÀNÄfn‡vÙôâx™ÝD^ “Þ¼1Çq±ûü¬¿ÙïˆyˆKb›ÄäeêoòLÎYõØi—H;Òš2çwc{”YÖ忈ˆïp~£ Ê•ˆ‹I[©Õ¡f½Ñ†Kj ŽÅûQ©÷8†Øâí8¿Ñ§ œÇÅë°Èä+ûÊv‰Orãa‰Ø’cu{c䨓bЧýQ‹Êùv% -i;È*C"7 (œQ!æúDÐ××÷T¿rýs»ŒVS ä€gìGœ*¦\d3®–˜ùúúúZVøž•¾Û‹”ÌFs© EôŠ¥Û§0Ø@S‘q>ø·Û¤RtÔÔ{Å–´¦³âz(Àvì ~#ˆp?è|D¡Ñ3 Üïèø=‹¯£’§±Ë->Ë1’w -…'Û 8‡_¶Äz£!%PIp%"Éb¥§W’ –iÀròs£ÑÐÖÖVËj8;g”wË¿B}ç´`ÈÉ©ç›A‘¨Çrüî€y…οç’|Æû´W‡WTT Ïø·ûìì)󅑤§V,9=Ãq–J¥”Æ_¯×[ž§îãÜÄ`±ï›í¨ÅÓПUr¶0§/9W ¬ÇíÛÍæÑ -’Ó†éÄG‘ŽfÆØ^1ÀÁ97bz,õ"1NÔ÷,í2ùH__#/HÒq0ŸÑ>“ÖÑÞSÎÌ{^É6݉Øï®®.moo§À ÏùÉŒ›ÍfK —õ§¹­¨ßi§I'Ó%®òÆyñóíœUÒ¢¯˜·b=t®ˆ´#¿ÛˆYktäcñõØŸ€ö³ílIÄH¹b=y°]ý7Ïø2:€ýÈÉHçDÜm¯EÇ‘ŽY»þ°]Ú ÖeÒ²F¾h‡Ñ¢ím7Öܸí|ž(Ïî·ÛË1Ú-l‡˜Q—Ógþßö=|‹²˜ã;/ôtt}çÞõÅÅ¡(g¼ÿþm ñG¤GÃòÙBáÉ"B Ò²>OgŸÛ<|ÿ‹úúeÆI\q –9ÛEwširÄ¡b!˜Xñ©5rò¬ÒðEæž0Y§•„W}HÇèøqœìG\ ɆŽ <¶8Ÿõz]ÅbQ===Ùzü,Wuýfä>¦Ö‹ON"¶##ÃtÚÕX"d¿s†”tó}_cÚgäó"eËÏÄç™%ÁqÒõ\çÆœ‹`šÞ±}¶C^¬×ë-sW°ý|nltþݶûBq…+ž«çÖï -O>?Øl6[‚\<ÃÄíúNÄ4÷Üœy^sç -önÃ[¥¢¬/¤Öí3RëwÁsF*Îs”#¶G:FÏ6Ø>ug”HÆïDõ‚ߣãNÙŠF:&ÇbñÉÞ{?g(6]¢þöÜÓá l¹ƒZ÷[¥ü^Ôý®ƒ4ʾuµë <3S+c»l|°¢ÇG}k1=»ºº422¢B¡Îð¸,kRk°‡6†€?:âž?nÙá¼’FÄ,qÅÉsCYN‰çŸ´ ûÄùb»¥RI===-Ù=æA;:œçÞÞÞ¢\¸NA{ƬëHWr+É‘?"ýYÈ[QoÄ 'ùßvxͺ‰:Õ%‡ó\b0Ñó@þ2ÿ‹Eõ÷÷«V«iww÷©€³yÌ㢠­h‹©_I#bÒ3âgË]K±½¨Ï8ö\0&bö6<â>×ç†4Éá"÷ƒçPE'ÌÏÄ õ§±éûM™e‰¶/êOê:I-º:ò3Çé:sòuõmRìk¤O;ÌÛ#_Å1›Žæ)~…Dz qn¤'zÑzŸÁpÊ7ƒÜQGûKzxÜ‘×ÙÊ-3ƒbp7ê.Ï%Ÿã–»˜A`»Äs¼âaQ¢oʾx<ô“s)Ëé@ -UN¡æŒ€+´Q±²ŠÏ· QIæ -±K'T|.Çȱ=ö`Ïcˆ†¤]t®ÝX©°Ø'3‘™€š S™64f´Ü=d2)ïå˜9*]¦@FEçþ™'èpÛ<éßÌi@í>ÅL¦üÑ aÔï›Æì #tò #xqNÌ39@à:œ’Ê-ÑèDþ£°30ë~VÉÉ+ïEÂBÃDCûIef¾àÊzÌha!X÷3”-÷3^ç¸r«Þä¿îîî–C»b”Ü`Ïså>3+%<Ê£ÇkÅçÁ[G’oÍ“¤Ûr9gä#¾ãßQ¯ÄlÒ•´æu÷­««ë©H¶õKtpܯf]r«ÑPq¥:Ê^n¾M#îŒüÀ¹"?²më5¶é¾ÛPÓ`ݬ+ghŠA'™uXO:-êM©U_P§ùõ’¯yœÖ—v²iïHÏ°ç¼Ç=½\1¡3è…|¶å±˜Ïã\òÎ7yž¶†|Î10øD¾@“z‡÷sX‡cŠ6ÏÏP¿Hj™[·Gev½¦5ç"bηm¦W~©Ó#¶bP6wà/é¤uÇNºP“ž¦/ƒ_lƒ|`™gƒüÉy4 ÙŽ¯9ø–ÓÁ¼fš°n걟™Î¦?ë¯V«-Lœ»ˆËÚÙÂØoêΗy€›=h7Ü—Ü؈Y#OpØÿ(뤣ëÌÕïþ»äì çÁý¤N¢Žd4ö›ÏÐqN¢_B¬dÜËì>Ϲt?b¦q¤í1éÂÏôÒq‘6‘‡r™„îc|Ö:ŠôÈeÄÐÁ%Ƨ>§Þg‰x9Ò†óßòB¾v@(Êu2m:u0ŸçØ]u õ y×ÍþÝžiÇmaÜVœ ª4$÷¾W,ŸÞ@N1¹Ñ8Yq‚þ_XE)¿GˆÎÈÕA`¬'põ;шÆâwrßÒŽ -NÞ—-‘Arà*¦6Æ>ÇÿéPÛ€ñ:W$bˆAëÁÁÑ¡¦)3(¤'ïûz;:æœaÙ/SŽ6¹6ø¬Ï-ø2%C¦±E0Î’Kw#@rr@ï‹J.B˜“m>ã±p\üÍècä¾Où0ä‚)T lÃÏ›–Vdñg”]?·ÊäÆû΃.]Ot¶r²Ï½Æ~‡©ÎQ¸÷Ÿ©õ9ž¦Ñ!§aûmuHŽ.¦Aþ…B!hGÇ6gÈ¿Lq£³ÏBy§Ž´´®Ë­LÄUÛ/[h&bÿžrÎ7Wyº»»[d‰ÁŒœÌÇöÞ;‚’è°ž/cr%ÚÓ\!¸ŒÁ3Ïéð,,a>ã\ü¸­h_ÙéᶭÝF®Oþ¡­ös¬“tv¿J¥R -HÆ“°sô{Ö5ëBö”µ¼ÆmÖQÌB ³í¾G@oÚæ‚+®Ÿ²CŽ݆ëæüQr|”£•ŸiÇŸ±òW;{ùeäƒô=ö1âúR9lqzœÓ¨3¢ž- --[ÚÚa»È#î›ÿfv)¯Å~x,œÃv…XÃmÅ@j®¿ÔÍQähý?C?ŽzÐó³Cý7³YhÏrrE™b@*ÎW'™=*3wš‡"  Ñÿ«'76öÇïTPGcëöß.Qø Š@&ˆÌŸ¡°º^*‡@¨Ð|ÍÑd×åS“ɹ@A‡ëâ©»7ÇÌ@Ì ÀF„Yñt{:Tü6­™éȹõüµ“)éél*ªhè"/Jjá:â9°G]Áùõs ^D€D£Êþ“iý$Ï D>òQä‹H‹Ø7?çþäÀÇåÀ‡ß#ð#½#Ÿpü<ÔÏso9e—sìq0Ài@Z°/¼FÁ6 - 옉Veæ%fý¸ì¿éGÇ“z²ïÿëõzúÜ^;ùz:ò6ÇlÚX“¿yrB’§X7y0Ò˜4ÌÉ­í¯õjGGGË·õ8ë 8˜FçÀÄ««Ò“€R´õ,”ÉFãÉç}vWaÝŸ8G¤Sä/ÒÏíÅþø¾í©¯‹­_« 8ÀŸüÒè|2XÏ ¿¨Ëùl̸Š´ˆ×£]gró̹6 r8/Î#ë æ3_môáº1@Oí3÷èrŽ¥'Ûhc\/-Ê|ì;ç\:ÂG>8”X†ýj‡!À1_0Ãдd0’sE~÷"Hl7Ú‡¨‡l_˜ÇKZ>«Î(C9Yv»+·ÜÑFÒ!"úY·Ç€ùýc°ŸÁšØϨ3â"A ñ}:ÂæÑ„aŸŒÇÁÈEBë]Êc †F»ûoÚ·£âý®®®d÷h3h8nÊ@ԥĦ|—´d¿¸‰ÙKĬ‡4gP,ÒMk©u‰uåp¼%žl‡w˜5J^%ŸD½›³ÁoµÝ+ŒÊ* -÷6¶Süÿ/ #89‚çŒR,íÀ€ ëmç@·4NBd\ן´~Ïûä 8-¸^1{̘Þ%µ*¨| ¼ XsïÚèóS/Ž3;¿EÌAdÚ8Ž|ñ³Y~Ö㉂OƒKC ›û¶»»«ÃÃÖCÿžUølþ…ÂÓŸ2ü¢º<¾hÜ¿¨DÅÍëtÀÙçhœ¨lÛvM¶Eþh‚b]rN¬Ÿ5>+@aƒÛá<µ»gÞ±cá4kFs4`±óEƒçżcê ¾› XÄþÐym÷ e?òN쟯÷öö¦ût´X¢îlâ#¿ç²¨K£Žðs9~fßY"xqFWþ Àì"€uŸã>o×W©TžrV=ö/k7©ïhcø,An¬Ç¿sÔ|$ ãýÜól#Ê%ÁŒ¯ÇàS´±ï9Ýuï³è—³3*m•ÛÉ:š´=¹ö©_cÛQ/»î`9·ñù0ÚÚÚR¹\~ -Ìçx‡ýt]¾ï@ˆ?YéBýîú¸Å×½:Êñ´k?un“3M¨‹rv2®”³Þ´åçÏ_×`@&òwÄËÏ -PDú+Źq¿y¸2Ÿ(ã;¶‡vü¼HŸ—ž–q.Båèë±ò]–œ|PÇoÝRrÁ¯Íðö‹v-ò%éÊ .ß‹ºÈºšgÐP×ó½È ”O·áz:;;Ó'Bœ%ÖŽÏætwtJI σù†úæY¾F®Žˆïs4Žóì¶âj=çêÊ•v˜%Ò#Ö— <«N¾O=“Ë#žúmúI^‹zÛ´r ‘A«8žv:&fìPîÈ#æŸÎhÉ~©R® g¢-¤ÌEÚ‘?)Äd\Yã\³ ò\\ &?qÔ}öBûeºÓÎåtwÔëù·unı)c†Ÿò‹<˜ ,2ˆI,Â~QoD,Ò3Óù$Ófû9Û<. -±}ž‰Áv˜½±8OQWòZÄ^Õµœç¶þùYê€(³î_Ñ–Ä,“ÈÔ³n—®øe¬œlR—KJzß«ý h˜bfyßýeŸr¾ ÛŒ6.bJÚBÒˆs]ûԴˤqéíú£|D›gºsÛ‰ûÅ~D»hþ<q?3-ùõùËh¤G”%òùÊ:Ì}K€vÆ/F @BS±3Ý„ÌE Óé"ˆp»¹š(48{$`L/ŒJµ]ñ$Ç”t2`t”cê2•“ ÕÌæ~Ó0E¥Æq€óóÑ0GeIá‹ô$艫qÑY0Œä¸_d^*qééχ唶ë1}øã^Ó±X,¶šD¡Î­†{nÀp½Ñ¹q[!,\í“ÚgŽ˜ö\}$/¹P¡F9¤¦Û¢ó>ÓÝYø…ÎoŽ^Èø}*tÓJŽcåøÍ_”!Ó™2Kàgy £þ’” „ƒaäm‚8®\ñË–ó¸çF8Î%Û‰Ž éÇëÈÔån`ÃïsÎ,¾ÞÛÛ«óçÏkss3=G§˜ºÄ[~¥§O—gA –뉟1dŸ£&»fqPO›l¨Y|ܯÌpî‹õŽù„z×õ z¾MKo§°L™_<ÎúIÊ%õm£ÑHçʸ¦{ÎV˜6tÝÛ (”ò@\ÑÎÑ<ò äçc¥'ú¼^¯kkkKƒƒƒOáŽËãŒcŸ”³ël“¼ØÎ‡‡I‰¤Ö ÏŸù—Ÿòm6Ÿœ×Ä­äQ—œãâqFÛæ¾Æ¹ÞÝÝÕÎÎNú´-m^¡PH™í>Å1%û篹DüHZzŒvny$Çè÷嘈٤'XÞôô3Ô¯´¶|&Úb󌟡Þs_ÌS.ܳ¿»»›dÓúϸÁmDÞ¥Þ§s\*•²YÒ7‰Á2Çrë:Ì»Q‡åx‹áŸrîHxNïPvXg”‘H—œžb¿Œ°óDƒD€I…nÞæ¸r‘áøâüºý¨s#Í脹m·Ÿ˜¹²è±0 È:"Ø%`ã³îk|††Ó}§þ¢ÁªŸçû¾ï¹q{\mea=´m¤1u"êgò4ÈqžÌÓûûû-+8qež}aæ”ë7 Œv«X,¶€MŽ1wÆCäQ()CäC×a¬Àçž ›4uû žy\ûûû)æ@eœbp4 ýcG×™*l—6ÄúœöúYöŠ§éçt;eŒ ?Ól6[ð -õ±õÇââ ´ß‹ØÃu3¸E=k™v’¶üJÏÒˆýlÐráuëzÓÆõpu’mP/»_´¥æטÝ@íz8~â{¿ëByp¢¯G‡¨Px’uÅÅJfÓÚ&x11‡›ˆç‚ƒåŠŽ;o\µ%/1¨çÄ4£}¦þâÜ’È%]ÝWbËø ùŸ[9ˆ‰¼ÄÌ™8Ò“º<ãz8w ò¸.êAúsQp<¤ö짟}¢Žäõø¼ëïîî~j‘ ‡å¢Ý‰ø†´6R·zÌqÀ}16›ÍÖ ç” -…¹Ë—/ëoþæoÔÓÓ£ååemmmill,¥äq¢"sG…åk„Üêûg#Ê4ÖbñÉj -'˜Î©ô$âØÓÓÓ¢h<>®ô”Ä}ãîO»T‰ªd 4vÞËÍïQÉJ­§¼ò¾iÁ牘¿\ÛT°>E™A˜acý/¬¨ÔØoÏŸ'““Ÿr"‚@*–x` -ûï¹Î§H_λۉ 1>·²²¢bñhõr{{;¥¶NOO·Œ…}‰¿c_9Wì“&¤ŸãŒÆÉ ÿxΣ¢Œ4¢Q âXâ -™ôttÓ’È_¨Èц`Ü«È PïDÀ•\F½c:V.ÈDœSö•¼Â¿i„ù<õ#ב_8~eÚ€i”\iÁmœw?k]ƒµ9Ðêqþæ3Ïj;áÑ)¥óõ¡¡¡ä<žhÜýN©TJ‡“úYÖϹ2O°sžnÔÛÛ›ìuõ Ž^ æ¾ì¸µ¢Pxò-V â IDAThfӇΨyÒ|·'q,œòZ´ïÔ?”MÎC;–·ïçHSÿO½^­VÓ88oäe:ôG(7›Oœ>sÎ&ñ‰ÇNÌ$=qžhó"xuÿ¢sï6Ì/ܳoZFçv_;;;ªV«-²íú܆ûmžqF‘çÇsÏíSž#†rä>yÒuwuu¥ïÍG,cyå=ÁóEâ;Î…å?ç Ðq¢¬Zæ)Äu´MîGt¢M÷¼88…–E:ǹ9眎5·ÄP¿D=gú‹ÅdK¹rK¹0ÌwW³PÿyÎ#.£Œ¸/î³ßç,âÖt³£½³³£ŽŽŽ$«³¯¢| -…§…Wú=Þb±¨Z­vä4eVô‰£¢ŽŽæAf\DŒNð{Ô¡9ìñ*})Ë„ùÒ…öÅã ^‹ -òdGGGʲ+—ˉîÕjU{{{É>Ú¦õööjww7Í·uu®m‡õ$õy€z<ê Ú(‹´I´=Ô³9{•Ó3¦+qHÄ9[“¦Ô‘ghŸ£­wÔEü›sÄ3°˜1Ñl6ŸÎp¡ãÕ."w²T*©R©heeE/½ô’^~ùåÄTTHå”dx*ŒØ.Îk.ì$¬“¾ßgª08Nbd_ãŠt"Ò˜}6°èììT½^Oã'Pb›ì»ðЧÈ‘&œ¹d¸#8¦‚¡2¡Q‹ó4§ö1MŒ‚HG‹†Úóã¾Æ:çFŸÂãkVêtLü¢‘eÝÌ0ˆóžãל2‰ï²ÿ~Æ}ÞÙÙѵk×T,588˜ŒSQiŒþoŠû>éÏ~2é+=ù$ÇÝ®xŽ ðc¦‰éÂ~™Çã^m: QyGz³=¾Ÿ»ÿ&xËÕg}aÈ}“<'#קg-‚ _§ÜEG:ÓÈ“Qž¢#Í’ 605Î<Šée½kÐjC%=Ä9PéÛ®P_»ë¾¾>‹Å\rÀÌ $§ç" "½s…z›Äms%$êOå¬7íXÑy·ƒFÝc f烺š«úLúóªW}<__Ds÷™6ˆ«ÌnÓ÷ NH/χWc{î/Oww·*•ÊSY ±f>D0èë”;:”1økz‘/86Øʃ‚Ö\à -!H‘×:::400 ÞÞÞ›Ç`$A´·ìyþM/~P÷÷ôô´`òu‹…ÞÞÞ‡ÓnŸ‰v™º…²E~o Hò¹øCÁÅzÓ…X×í{Lþ¬ŸÛ´SÿèÑ#-..jqqQ?nÙN±´´¤^xAÚÝÝU½^W©TÒèèhò»»»Sà‘AXgDE,íÂíÊîŸeãËø¯”UÊp¤c;ŒF¾l÷LGÿ6…}jW/m!m=1:íDgNÙ¶S®è‹:ÞÙÙ©ééi9sFÝÝÝš™™‘$­®®ª§§G}}}©q¿(Pt´üLt¼#È%!8!íZ.’+=}P•éÁ=5tm ]§û’Kå#­Ü–Œ€F)”8g FÍ|×m°ËƒPu§â ò˜¸êévLK:@̈ £º>Öï{¾¾¿¿¯Z­¦J¥Ò’ßåɧ4œÒ“s8Fò…,ŽÇçøÿG…M^㼸m÷ixxXÃÃÃ)‹fxx¸ee“+¦±ßQ¢á÷5®ÅþDeHã”+t nr Ït´1ŒŽ09 »¤äÌÄ€SÎ(š/)Ÿ¦Inu…sD°ÆyËVê ÿïU2Ó…‘_ÊjŽ§b‰`€cÊÍ7õN;é{.^ícJ£ÛºŒ 1í=®qe…ãá -“Ôúëè(ù'!<‡æ§ÈÛûûûºyó¦:;;õâ‹/ª§§§E?wtt¨¯¯ï)'Ü}sûÔý䇸 -êßÔãì7R÷™+²n‡NW”¥8o´e´Güñ½ˆ0P¥3·P‘·ÈoÑÉq!q@†g(¸Ê™ÛeæmWÔE®ÛpÅyàÿ¶½½½½* -)=¾C]Ãúð2N Þ¡ìX§Ñ ¸+¶OÚp¿´ë‰ú†Á[óªéCÌãúɧÆeQŽ¼ÍÙ)RëaŽl›üá{ÝÝÝÉq¤|G§†Aa®¸ÆG,Q÷å@è8FþHÀøÿðÇhY¢ cF~`ˆ8ÇrqûJçßs],Sà²K»yÇÏñÊfÔ§+ß!~¡n±Ó[(ÒAt9[•›ÿèT{¼ÄŽÔC´£ÖGÔ7þ]*•´··—¶Ù{ÆÀ1o£Ñh9ÁöŽóéçm-Ó”oÛ;~æ—_ðx(ƒÄ¥.<—%bšÜÿäÊëd0‡YF¢ý³çÜhyyYëëëzüø±nÞ¼©Ë—/ëöíÛ©¥RIårYšŸŸ×|ÎòaxêîîÖèè¨fffT*•Ôß߯ӧOkhhHÍf3¹­(Ê[ô‘âj7 ÇFù¸ÍÏ’/iï]¯Û¢ŒŽ>õ+rýã<°Q¦ý7±;ùÄòÙΗn Ä“€dß‹¢òžššÒìì¬îܹ£‡ª^¯kaaA===PWW—†††422’Á{îÁ±³'µ¦ÿDð$š#¶ÒÓ # §™ËBΉõ8éXzœFö¬H• AWtmpÝߨÈØo sWW—êõzK$ÒíÅtG_ã!\ÍæG=F–H7;2¡Çn!ˆð¸íT<Ž¨ÐÑ/ -ÚÙÙÑãÇU©TÒ8È3q|ž' -8Xtf¢‘òœ’¿8^ ùèo8îø f¥RÑÐÐêõzK°‹‡„ù:O¸u›“ÊócÇ+È"¸ˆi{¾ûî±äV\Íbú¡é@‡ÁÅülcN îÒh4ZVœÔs&…WÜr`!Î9Çg½À~’bæ ù›òK:GG)Þ'ÀŒÎŸù‹ïPÇÐXRVìèˆq¼œKÊ©ç‚üä9‰ôŠÁºv…€›`ˆF65¨ƒé x•J%­¯¯ëŸý³¦?û³?Óo¼¡¡¡!IGX«««ZYYщ'4==èE}瀕f\îiÅþçÆ÷;:S.Üóì1“V,î_ ¸P'G½ãÓoÛÙ3ß'OÒ9!ïE ùÅý°LÓn‘¸K=u«Çê1r1Ðìë °ºÿÑVûYÓƒgxÐ^Fýè÷̳´{ždh>oç$S¦èpÅ@nttYOäcÚM·gÇOR -¨E;GÇÂ}wàÀ×™V_x?â/ž“KÕ1(ÂçÜ?Ï…f`p̦#ëìììLYûûûéog«pÆcaß™éá{tnÈó´áüqàÕíÆÀ”¯³½Èü›Ï»~ËéçÛòźهˆ-̯®‹¼ÄkQv åxcZµZMŽ£Ÿu@Ž4LÃAœhw)·^€9<|rØu­VKtâ9 ®›¶Ì@`ª»±+eÄuç²X¨‹)>žV«éþýûºqã†>úè#=zôHÛÛÛzøð¡ÆÆÆ’ìééÑþþ¾îß¿¯fóèP]nÙ0oþ1óÒIᾫè´G‡Òÿ{Ÿ¢ÝuÐpÿ!¶¨bä; -ÇÇñ³XHèŒRé„DS(E|'&&²ƒ?1eÐiØÜœƒ4ºn‹Æ¢?E£÷¬’ãKƒ GM777U,¥jmoo§ Z¥RÑàà`Z% ãÏy¢ð¬Ók—2•£U®D%KåÊþÄ#é.1sÅ}¥ãBÅîBîú8v‚‹¨'b‰Jÿ‹h@>%­sûÙ¾¨ž\?È)û¹À^t\üLt^ýAV.¾NgŠAƨ?¬wéEãhpÃŠÓ cvD,íd9ÁÎÎNÍÍÍéâÅ‹úÇÿøë[ßú–Ξ=«ƒƒmmméöíÛ* -ú—ÿò_jff&«Û¼×^z:˜làmEÎØG}îbpÊUñ\`'êÆ(7±½8Çî×—‘i¾÷SrsgÚÑÉ6)7¶k1HåËÀ5‚ëòxÇD²C@ç5‚ÌÜ<\Ó^Òã<ù÷rni{(¯w”ûè°ðzÑÁä³ÿö; ÐÆ@õ ƒuQtâøâ£ì³¿~Þ²ÒNGDÝà6'ÈëyLÕj5f{ïÞ=ݼySËËË* -êëëÓÌÌŒN:•0êÎÎŽ¤£½Ð}}}êêêJŽ¡&9LGšE›%µ~ËÝtúÜÿÇ~ÒÜ Êç5Ç31hÙl>9,Ž|ÁþÆ@¬y†8À6Äú”ºÔuE›æ÷é¬q>c?)?Ñ¿‰™+qÁ"%Lsf!Ôëõäè^¹rE•JEÇW³ÙÔãÇÕÑÑ¡ÑÑQÕëõT·é㈈ Üß\Ü÷#&åuU”‡ÎÎN•J¥ô…&CüEó»ûU¯×µ±±¡••-,,¨Z­jyyYW®\ÑúúºvvvT*•499©±±±–1ìîîªR©èððPƒƒƒi;†·:›ùvwwµ¹¹™¾¾S*•´¹¹©ŽŽÝ»wOï¾û®.^¼¨'NèìÙ³:qâ„æææRfe{äêß$ ä°¾ûk““NÜFäIòe®pã»ôK"®$&Œ¾š¯»>âüθ"C%KñEp]]]ÚÚÚÒÏ~ö3ýæ7¿ÑW¿úUõ÷÷kddD;;;Ò›o¾©ÇkhhHºÿ¾®^½šˆüÙgŸéôéÓºpá‚Þxã }ãßÐÙ³gÓ>,öÏ“àk4FQqD&à{9åA§) -"³iã÷8)dXF¤:::RJÎã8£‘6cÄ=´LULÝn\±DELúQÈKtb±â‰©x¤÷cR¬4œZä=FŽ¶’Žž—xØ…3€•u¬°i˜9æÈ,Ïr\âs|ßtßÞÞÖêêªêõº¶··5>>®ÞÞÞ´šùãÿX»»»š˜˜ÐÄÄ„fggU©TÒžÏB¡ žž•Ëå–ÃØ_ó^ÎᢌÄ1F`ËwhHg‚øHoòVGGG hŠ ÉóÓŸbßmLãJK;ÇÀ¿s†ÏåÆæ6r5¤];þÈ{ók\qý§\圉v ™òKCÄ¿]<'”[óy˜ÎUä=ò ƒ’ZŒi XF0OZF2½´ÑhhttT¯¿þºÞzë-ݺuKׯ_×ãÇõ /èððPãããªT*-zŽWM" tÍéÎÜ<ðïÜŠ¨ŸÉ92œ  ¤'Û¸"Í:::Z¶ß±®ÈÔÚÍÿã³,².ÏQt ùÕ\›”3:èä?×KžåÜšO ’é D»BgÑôa›,9zÑYeZ+¯¼±ïä=òVÔÅ^ÝŽøÁz©Ý– ÚJË£G¯~§°?þ¨¤W;<;grjÒ³.¥ÓHLFyëèèÐæ榖——µººªk×®iiiIõz]W¯^Õâ⢎?®þþ~õõõéöíÛzçwÔÕÕ•R‹Å¢¦¦¦Ôß߯ééi©¿¿_CCCi5Úãâ¢.:ûÒ“ÏÒyë)iÀùuig¨»¼….—Eç$méD{@=éoÙ#67Œ¶'—å%µn•ÖÅÅ8¿GüÀ@ŠûÇÌ÷Ѽá{äê’b±¨7nè7¿ùÞ|óM éí·ß–$ýý¿ÿ÷5;;Ûp%Ær´wY°Dû©Ì7¶|öðð0íÑ_]]Õãǵ²²’ûGiooOýýýª×ëº}û¶>úè#MOO«§§G+++*—ËiA·Z­jkkKÛÛÛj6›*—ËP±XÔÊÊŠ¶¶¶Ò'p%imm-Ñ°V«©¿¿?ml4)Ã`ttTÃÃÚžžNXÿÞ½{ºzõª._¾œ¶Â^¼xQ¯¼òŠfff4>>ž>“Ižö<ÓžÅù€¸Õôo‡WýÛDn—Œ‹+®3w-ö-¤ ä{ÞÆb?ˆ}d?cPº3FLrѵØ)vÄq÷î]ýä'?Ñ{ァcÇŽiddD)º300 ÙÙYmnnª³³SÇ×éÓ§U¯×µ¶¶¦ÕÕUMMMixxXÕjUÿå¿üýçÿüŸõÏÿù?×׿þõôé‰Qã·-cô‹J*:ÁœüQ7CPH©°H|*ãÈ 1JËɌǠÈ-·EÐìw¸ŒÏQáz¼S4´¦—†®å”«ûè­þÎ5y†Œ[,>9½˜ã!³òYÖM!( -É(Ò¸DZ:åÍδ•*¯|yü (p•&Ñ£<´ EÁ·‚ˆ|áÿ÷÷÷µ²²¢ùùy=xð@¥R)m—a–H¹\Öááa.|ðjµš¦§§ÕÛÛ«F£¡‘‘9sF³³³êïïO™1JɾR r<ñ~œ¿$b ˆ ßÏ3S…¼ê´Ñ\6 iÅÌU×c£Ï>;e’’@‘F`=¢8otÄV£BŽ×#m¸Š ”yÇú¨Ùl¶¬z.)ÓÑm׶u˜ÁikYð=ê7¿Ï½ÃäS:9Èyôêy.Mö=:…1Àëb¾)•J:þ¼$¥œFGGÕÝÝ­­­-Ý»wO—/_VËX"'M£Ãçýv_ ü#oðò¦yÂé~\e3˜v‚mS.,sæê=Ú?ç@õmå‡sÍùm§?Ü_ÊYtò\(§–3ë –˜‚I¹öXl8‡ „úºíy‹À.$ã˜MÓ™º‰ã³s¿sv&Ç×ÑÞ°žsŸº1¢=öûÍf3ÉŹsç422¢ƒƒ-..êÁƒ:{ö¬[>¯çþG=ç¾Fù¡¼û§.Gƒ9ÌÊ]/<ÔU^}øð¡nݺ¥;wîèã?Ö;wZëïï×ùóç522¢ýý}ŽŽª¯¯O;;;ÚÝÝÕÚÚZÚ¦÷É'Ÿ¤CzGFF466¦óçÏëäÉ“šœœT___·b:8ubäeöŸ¼L§vÂÿç¤Ö¯øoÚ»øÕ(æ®F²ïä+¿Ïó¦<¿n›+šäcϽW©¹uSæã"ÄhOéüQ÷FÓáá¡Êå²¾ò•¯$ýuæÌ™”-çósˆñgA;;;522’ü‘íím=xð@ÒÑ×Õü\½^×ÜÜœzzzôèÑ£´ÿkkKŸþ¹$)855¥ŽŽ­¯¯ëþýûúðÃõßÿû׋/¾¨ßÿýß× /¼ “'O¦6b°ÊXÔŸeÐ9ç{H­ç2XÇPn<¹/íDÜCþ¤®‹‹DÜNFÙ¡Î`!¿°ÔÃ~N’:)tT’Ñø°!ËT«U]ºtI¿øÅ/T«ÕÔ×קÝÝ]]»vM«««:88ÐÒÒ’šÍ¦’s333£¡¡!uuu¥ÉvT¨¯¯O'OžÔÊÊŠþÃøzÿý÷5>>®áááúúú4>>®™™¤tï7acßé,ºÐ±ŠÚ…FÎL£ô¹ÉÉM˘!`°àÃM"CÑ©¦§q÷!K<”‹iET2±ßsG¼FEšó³ø(:uÑéf„<:«±®v…Šš_£àûEíh›ë¿ßɾØ>·s€Œ i6N-ïííM‡¢Xyîîîjtt49M^¹*‹ZXXHs²»»«wÞyGgÏžÕéÓ§uñâEÍÌÌd÷iûoâÜøÛ•vN^nÌ_æ¹\ýÏšo×MËwâ^Fd*_ËL;Ï*1ÝŸ†…+î+ ¤¨Oܧ/jûÿEᘙ^ÇÞ®/ ˜R¯EGG?¶+=½ºš“©h4­Ÿ½Š¶¸¸¨Û·oëôéÓêîîÖýû÷uúôiÍÍÍittTï¿ÿ¾þäOþDÿôŸþSýÑý‘^~ùeU*•ÔGžÝ„äØ81åw#i»rmÑY¤~ŽïòºçÖúÂ@1Š¬ƒëõzÒÉ>øŠ6#·5€§Ýüo¸?íìo;>#€¦ ñL\@ƒ‘˜ÊÉ7(ãü;d“Žä=×Oþˆz&Çó1¨“ÃaÏ*Ѷ±´;Ke±XÔ/~ñ ½÷Þ{ú½ßû=èƒ>Ðüü¼¾ò•¯è÷ÿ÷S -p´wÑÖF'=稳Ä»D0ƒQ~ü·ÒÕëu=|ø0­,~þùçºÿ¾666466–hî½íím­­­éóÏ?×ÖÖ–Î;§ãǧ{v´ŠÅ¢&''õÜsϵôýÇ?þ±577—V,'&&4<<Ü✘ÝonÊaY_çâç=âÊC,~ßÏÆ0:ç³Ù‰!ÑÞ=«>ëñÒº-ë -ë!Ê5ùÅŽ¿ÿ§œ;«0Ò‡4cpÑòj>5 ìhÙÙ;vì˜.^¼¨ýý}-..ªR©è÷~ï÷488¨?üP]]]Oz—:ŽA/·í•lgùE÷;ÕÝ»w5??¯ùùùÄß^X5ž¬ÕjšœœT¥RQOO$illL…BAµZ-áÇþþþô50/‹ÅÔoÏßÚÚZÚ¢º³³£F£‘¶©ŽŒŒ¨\.§¾T*õ÷÷«££Cår9 -ï•ëééiõõõijjJårYCCCéë½½½êïïW±XÔõë×õÖ[o©««KÓÓÓÚÜÜÔ¥K—ôÉ'Ÿh||\ÿðþC}ýë_×ääd²)ž+â0ú9Yb`ÕòF™aÌsG_Ð…m}ÞµÌ1°ïçp3õçÊvÝ™óÄ-.L›£m׉`AóªãG}”¾û¸±±¡ƒƒ­®®êÃ?T©TR½^O©£NLç~ýõ×µµµ¥û÷ïkggGËËËêïï×±cÇÒ§ÐÞ~ûíǾT*ixxX===ÚÙÙI{²Îœ9£×^{MÇo!, .O¦C<ˆNæ:¹W9®¬GúјðTÆífäô¢¡sý\%bôÐÑ%‚ŒvL™žQ¡SX¢a‰À“õFpÀ•0þÍCírÁŠvNu£nƒ+”ìiGƒÉ68‡ž‡H¿ÜÊWŽѤI£qt¸ßƒôðáC‹Eíííi{{[‡‡‡º~ýº¤#þÜÙÙÑÖÖ–ööö´¼¼¬ÎÎN½ð ºpáBRä÷ïßׂÖ××µ½½­O>ùD—/_Ö‚^~ùe;wNýýýi,"W!rà+GwÓ€¼•«ã‹a¤w|>77ñ?oúÚ€rµ!¤ÙoÊll7×OÒ€+Ž1°d^Ë¥t<9iØc #y'–¿åôyîšÛ‹ÆèTÆ i;ÚºÄ@bŽ¦üMžÊéŽUjý’@­VÓǬï~÷»úÉO~¢±±1moo§wÕÓÓ£ÉÉImmméßþÛ«¿ú«¿ÒŸüÉŸèoÿí¿­3gΨR©´èϸ2é9Ïéö…ý§ƒ‰\1¦ÎñsŒðS_ûù¸7Ú2Q­VÓêÐüü¼’ŽM{š›Íf -Äöôô¤4ær¹¬ññq•Ëå–6,_§iç(®pøºÇÇw#¨Šc%Xr&?ëë|ïYvÐ4àŠdtR‰X/ñ÷ûæê'#Ķ|Í…§œãE»âvÄ0Ð!§žb†I¿.\¸ ?ýÓ?Õ~ô# jffF/^Ô­[·T*•ô‡ø‡ ûx¨Ý_¦Uçä—t -sv–2FÂ}ð¦S•WWWuãÆ Ý»wOwïÞUµZÕÒÒ’Êå².^¼¨fóh%seeE«««ÚÙÙIuuuu¥àù‚®^½šöT÷>xð@ããã ë.--©»»[½½½šÕøø¸>ÿüsýð‡?Ô… ôwþÎßÑôôôSA/÷Ý4Ë-|D>Š…z;§“c ÛŽ³>tfåÑ5ÁzzzZêfÀ*ö‰ómžÏ2 ³š¢ŽÌñO ¦»p•Õ÷Yù‰øÛrÂ,~‚ÙX»¿¿_ºvíšuîÜ98qBÍfS|ð~ùË_ê•W^Q¥RÑ©S§455¥½½=---éÑ£G*ŽÎ•èééÑøø¸¦¦¦´½½Îx2mý¹½z½®õõuݸqCŸ~ú©nݺ¥žž-..jyyYÍfSCCCšMA“ÞÞÞ\èììÔÔÔ”†††´¶¶¦ÑÑQ­­­©P(hddD¥RIûûûZ]]ÕÐÐPÊ’s@µZUoo¯¦§§522¢­­-ݹs'õõÒ¥KêèèÐÅ‹599©Ó§Ok||\+++)Òl6uùòe}ôÑGšœœÔÒÒ’$éÕW_ÕéÓ§511Ñ’Ö¾··§ ;wN?N a/½ô’úúú411¡û÷ïëûßÿ¾ææætæÌMMMµØËCÌ^£=i‡W¢ ¢l™§"¿’¯Ûá0¿Ã%Ì~ IDATæ\m;yß²ypp 7nèÁƒ)Øóâ‹/¶bÎúÒW¨¨#àËuЃY\\ÔÛo¿­jµª—^zIÕjU<Ðîî®ööö´¾¾žöONNjdd$á'N¤”•ÕÕUÕjµIìííÕéÓ§Õh4´±±¡z½®½½½EòŠèøøxK$jyyYwîÜÑ_ÿõ_ëÍ7ßÔïþîïêâÅ‹ND%–sæq‹œ• -'‚«¤ü®7ž -™K'€1îå÷³Œðú´ÞÜžGö7þÍS¬T`Úo±¦)i®Æ”GŽ;nSðó] ò‹\yŠ«+QÀ\·¤Äs -×Ï£Àð#*>G°Î6|=¦›¦Øöö¶õøñcIGߣGÔhÌR(R4x{{»Å0¹oN§òßþvëÁÁ´±±¡……>}:mÕ1mmˆÌ qu‘Î\†@£ÑH+žg‚hÓ€´ÈÒ–× äé Ðñ}¥ücšÇ•ƒ˜é@ÇÉ9#ï»>ß‹Nyžÿ;!îG4Qö¸ŠaZðð*®ZÐ1¥Ì[·Å÷X§ç/F²)ƒ¯û÷ÅG™va¦¥ç3‚v÷Çïp.ÉS±^ŽwooOW¯^ÕÛo¿­þð‡º~ýºÎ;§ÃÃC­®®êk_ûšžþymmméÒ¥Kzôè‘:::ôÜsÏiggGög¦'Nèÿøõæ›oêìÙ³ÖÀÀ@‹®0ÿQF"À0¨uÿâvò}Ôû”Ì ´1Ò‘®tpccCËËËÚÜÜÔÖÖ–nݺ¥……ݹsG—.]j‘½3gÎhnnNׯ_W©TRww·úúú488˜§NÒsÏ=§¹¹9khhH“““iÕ†û:£Ü“8Îgü^±XT½^W£ÑP___‹£Wä}R¼º2Ý)Ã.”ÿÏ N´å´w~Þuûí¤eÃüà,EÊe–m{®™íùͲâ{Ä>3&¾g>i6Ÿ|2× ßµópöìYýÁüîß¿¯þþ~ÍÌÌèôéÓúÊW¾¢ííí8=w¶Õц’—MÒ’zžsÂ’³µÝÝÝ-§íW«Umoo§̼ÒïO—YÇë›ßü¦†‡‡Óåýý}?~\‡‡‡Z[[ÓÆÆF:ÝÙ@;;;Ñ«¯¾ªÉÉI-//§O$JÒÖÖ–ôèÑ#õôôèøñãéÀ¸ÃÃCMLLèöíÛº}û¶Þxã ½üòËmÑ‹´59Ü@>ÉÑ„AÃÜ‚9œCÝÅ…0fR6|Ø”ö=ÜÜ'Û?âÇÎÎΖ3ÈïÔí dï¹ DgŽºUj=xÔã0}Ü@FJw÷â?yë­}}}j6›ÚÜÜÔÞÞžÊå²=z¤µµ5¦=öñ¡µµ5uwwk||\šŸŸ×ÁÁÆÆÆÒÁ/¼ð‚^ýuÝ¿_:sæŒFFF$I÷îÝÓíÛ·U­Vuÿþ}mmm%šŽŒŒh`` }EÄ¿ûúútêÔ©8èèèP­VS¹\V±XT¥RQ£ÑÐââ¢:::´°° ¾¾>U*•ÔÎÚÚZúÊÅææ¦677544”|²J¥’¶ž|¨³gϪV«ijjJÇ×ÊÊJ¸‘‘:u*qxx¨Z­¦µµ5mnnêÎ;é»”Ï?ÿ¼^~ùe jdd$}``` 14"ñäæ”+•Œ•¥W—Óžk:¡ÓžD*u2¥ÛrœZ³²²¢±±±ÀC%ÙÌGç4Ž!FK­\ù>èD±ð-®TÄþ;#„Ž#ÊLÐY‹†‡À‰¿ ¶™•A c¦!åüøÝ<"PŒ2éëÙÛÛÓÊÊŠ®\¹¢jµšR1¨éîîV­VK6}}}‰fkkkêêêJÊryyYÅb1¥%îîî¦m£££ÚÙÙIQÜK—.é³Ï>K -Ø §««K³³³:qâ„Ž;–¾¸Àó/<®H?ó‡Û኎Ç•*ó A2Ó]?Á7#ðT¤T Qf£Ž‹%Œ#ŸÄ ËJ*¹9&_PDZ·Ó…B!Ð;22òp¢¼¸ð>ë#à‰sß5°'0ÏÈH§/S¢‰ºËõÓv;\t=¤‰zµZÕµk×ôío[?ýéOÓ4>Á¸¯¯OÆÑþþÁÁA5›M=zô(µ]©TôüóÏ«Z­ê?ý§ÿ¤ÿïÿ½þÞßû{zþùçuþüy?~\sssšžž~*µ9êGêWƒ+Ë쿃³tbÉ×ÑVXú›Ìóóóúì³ÏÒ*ç| µµµd¿}ØÌÌŒÞx㤇m—766’C´ººªB¡-ŽÒEÿçÿüŸé3MFC333ºpá‚~çw~GÏ?ÿ|‹3ƹ¥ÌšFqÏ$ùÖ%âÝ¢>öÃÓ§O·¥(Ûæ!Ãâ>yÖïmVtÈÙϱŸçŒt˜™á>ð-:é»»»)#= âçôiÛ -ò]Ž¶‹óÕh#399™Î£qPauuU¿ùÍotûöm½öÚkÔèèèSÙ?ÎÑ›o¾©_|±eµÚ©Å>Hz¤‹‘GÍ›Îû¾Bë€î·ì³$Œ«öööÒ)þ¹þx±%Úd:J®ßY–—6uð¤Ùl¶|ž±]1ÏQþ)çÖ¦5ñ4ñåÄã³­sšú¥K—ôë_ÿZcccZ]]Õüü¼^z饴-`_õz]cccª×ëºyófÊ´rÿœaõÉ'Ÿè­·ÞÒÉ“'ÕÝÝ­¿üË¿Ôúúºfggµ´´¤ÞÞ^ ¤ÅÒbñèн½½=õõõ%ýa¹ïííU___ÚûÞÛÛ«jµª……•Ëe}õ«_ÕÔÔ”vwwSÆŠñÞøøxòùœ®ï¾:˜¼¾¾žÒû···ÕÕÕ¥çŸ^¯¾úª®\¹¢wÞyG ÓÅ‹Ó¶ÕZ­¦ßýÝßÕ±cÇ´ººª‡êÒ¥Kzðà?~¬_þò—mù’‚P¡PÐÒÒ’®^½ª……;vL.\P£ÑÐðð°jµš¾ÿýïëÁƒzíµ×4==>ûK½é9ˆ¶¾‹ù‰ö™þœŸa0Ö¬FY4ÒFúYÊ õ¡eÄr¼²²¢¿þë¿Öû￯îînU*íïïkvv69ÿ´­©¯ŒRðF»¨¸Ÿyøð¡þê¯þJ=ÒäädrR½ºï”bŸFÞÑÑ‘"¤¦{÷î%ƒjAèîîNg,--ipp0¢:11¡b±˜”Äèè¨*•ŠFGGU(´°°”¤ÍfSW®\ÑÝ»wÕÝÝ­±±1?~<"&''U.—Õß߯ÑÑÑ£âá¸ãDEeSîí„:’èÕƒØÌtV€ŽîÇ褅Sv¬ÜèhqeŸÌ¶•†—ü@gœ€\1Ø$ƒS˜Ì[®ß )èæû‘žn#FÞ¢Ðð]¿ãñú‡ÏzVL³æüЉŠ4p[1€DÁµ±Ó´¼¼¬¿ù›¿ÑÆƆ†††T«ÕZ¾pàÏÍÔëõÔ?ŸipâĉܲbßÜÜT___’½½=-,,¤³5|®„#©Þ+T,µ¹¹© ݹsGÍfSzùå—uâÄ 9s&`éB]Á€”W–Úñ‰uKLõÜRîù4ïGÇË´g)¯tFèdøÿ¸º3"8Öø<Ž(St -¸"Ù亟ÌZ‰F):L`»Ä,ž\q­býÔœÇf³™‚ª¤²O+›&œ“žžžŒ4‰ú„«KÅbQóóóúó?ÿs­®®êµ×^K§yó³L¿þõ¯õ«_ý*eÓìxŽÒâ?®¥¥%ýèG?Ò~ô#IGsÿþÑ?JÙfssséÚPöÏccàÈ+®äƒ0ÓŒûÚ¹Êpxx¨……½ÿþûº|ù²~õ«_éæÍ›)òÌ™3:þ¼z{{“þ®V«iEË«ž]]]Z]]MŸ]^^nI%ÒØØXú¼¯u‡³úªÕª~úÓŸê½÷ÞÓ믿®7ß|SÏ?ÿ|‹ÜÑ9µG<â÷Û ÀƒÚ(”Ñèp¸>×íf¶ƒœ#ÛnIO(ÉÛ®rö2·jĺÛ\£îŠrïk~Þ‡n™N©Ôs¤°R©¤µµ5mmm©³³SkkkºråJJÑíééѻᆱï|ç;š››Óo¼¡¯ýëm ¨¸.ËhÔ‰ÑQd?ö5›G§]»vM¿üå/Ójÿþþ~r\†‡‡µ··§‡&ÜØØHÔµk×týúõtÈÙàà vww5??¯¯~õ«:yò¤544¤cÇŽéøñãZ[[Ó§Ÿ~ªO?ýTÉ©«ÕjÚÙÙÑöö¶þàþ@7nÜÐÖÖV²ÞbÔßߟl°Ó¡õßþÛÓ7¾ñ }ík_ÓÀÀ@’of¯Ði ,ä°N´¦#ù-ÚN—<ðʼñ„q~,´ÕqÁǸÅuRæs]È´Á>(Ö:‹‹;ìƒÔzX_ôi¸pÀ`_³ÙLûÙÜ0ÖàøšÍ¦z{{U«ÕôãÿXþçžhT¯×uüøqmmméòåËZ]]MaqqQ)ÚÛÐü)¾­­-•Ëe=ÿüóÉU*•ä›LOO§>W«U §•oãâõõuIJòêAOOFFFÔÝÝ­S§NimmMýýýZ\\T__ŸÆÆÆÒíÆ>£PÓ¨\.kzzZëëëZ\\LYZ}ô‘>ùäÍÍÍ¥ìm~ººÑh¤OÀïïï«\.§Ì€®®.Ý»wO÷îÝÓÀÀ@ -:ݽ{W·nÝRoo¯ÆÆÆ4==­r¹¬;wîèÊ•+Vww·nݺ¥>ø@«««j4Ž¾úóöÛoë׿þuÚözîÜ9=Å1sÄz†òD¾Êe P§ÙfYæ¸l™$oÒ6F›sž“«W¯ê{ßûž>ýôSIJçï륗^j[$uü«õ¯þ?VJã…‰ƒ{ðà®\¹’Rð‹Å¢z{{søG›jµZV–––tÿþý´—åã?VµZÕ‰'ôüóÏëĉšM§Inmm%¿^¯§ïRîïïk~~^wîÜÑ­[·´¼¼¬sçÎé…^HŸ¯pŠs±XT¿¶··õ駟êG?ú‘Þ}÷]}üñÇúä“O´¹¹™V\ À¸ÊD£JCD%FCîçèt’¦ 6ÐyŠÌ`#ë:‹Å'§óÇôW*83žI*=ö}5ƒs×uD:$†‚°øo*h:Yä/:ã¾GÀç>xLq–Ÿñ};¢³@0Áè°ÛŒï‘N9cÉy㻜CÒψ-,,¤ UwwwI^½p`çðð0ÞÂè®SÔ¸òÔh4´¾¾žVŽëõºªÕjJ¬ÕjêééI+‚ø´â™™MLL¨··W‹‹‹úüóÏSg¦ÅÛy¤£kùˆÁ5fPD>ˆ¼Fþ4=—‘÷)§~.~(»žŠ+V9Ùb:7ûêW9öhp(î›ûà4^^7?³¿”žTKÝbÚY×yîü)Ÿ‰‰‰4O90îw=ÇÔ ”~G£åÔci'S—>ÅŸsæ{·oßÖ÷¾÷=]ºt)mI“¤ÍÍMU*•”öèÓ» ®%¥€´T¯hüñÿ±¾ùÍojzz:;~þóŸë?ø?~¬J¥òTªµu7u0W„Ô1Ý …')ͦÙÎÎŽÖ×ד“ãŸ.]º¤ï|ç;úwÿîß%YŸ˜˜ÐùóçÓ‰ãÅâÑJß;wT«Õôøñã´ïT’ffftìØ1$'†'J{UÁu¬­­%çveeEi•seeE?üᵸ¸˜V@úúúT.—ŸrÌÉŸ” Ë"eŒüJÛB§ÇŽûo|B[#³èüú†¬ƒ=ŸL“¦ÜZr¾¹=€Åc÷ŠŸáI简҅Áö؇F£¡û÷ïkddD###-ã2èiøªøú7ôÓŸþTëëëÉ®ø3\ÇŽÓää¤:;;uãÆ mllèáǺ~ýº®^½ªëׯëƺ}û¶¶¶¶ÔÕÕ•ä–2í¶r¸Çãs -}£ÑÐÖÖ–nÞ¼©wÞyGï¾û®®\¹’öä{«N:8zooO{{{Z[[“¤´eÅ_û8}útú”_µZMmÝ¿_>Ôµk×´¿¿¯¾¾>]¾|Yù—©;wî¨^¯«¯¯OKKKêëëÓK/½¤¯~õ«:{öl: lccCëëë)T.—U©TÒW} -…Bú,ö¥K—tåÊõõõéĉIg×j5U*•¾±Íú–<ŸsL¨w¹E…¶’8-3Ÿe‡ÍþmœëSä¶ív¬›X0ʳùÞ6ËÏûoâ<ömE»Ã îá᡺»»µººªŸüä'úîw¿«ÞÞ^Õëu=zôHºpá‚fggµ°°ä¢Ñh¤m^ìôÖÓ»V«©Ùl¦ÕzéÈßÙÚÚJÙ ÅâÑB¨eÃÛBÝ7ŽÁ6ÉqooOƒƒƒšÕÖÖ–êõº?~œ¶+ìïï§E Û×»¶¶¦jµªÎΣCûΟ?¯óçÏk`` eÕù°ê´ ÂóQ(Ò‚ëÖÖ–>|¨Ãã/XùìÛŒÞÞ^;vLår9e/”J%U«U-..jccCµZ--ŽýÎïüŽtçÎÔ?žŸµ»»«Û·oëêÕ«ºwïž=z¤­­­Ä ¶R -…dëÈû´[\´h6Ÿ|üñ+yœ|eÀ¿y¯««K;;;úéOªoûÛºsçN -xnllèäÉ“úÖ·¾¥cÇŽµQ-On³“ø"(vÊÏÚ Û)õ)Âþ¶£÷ÇìììhqqQ»»»êì<úìßÐе±±‘>õpìØ1ÍÍÍ%Â÷õõiqqQ·nÝRgg§¶··ÓjÃ455¥ÙÙYÍĮ̀\.«Z­ªR©hddDëëëj6›i;™3g´¾¾žê‘¤“'Oê•W^Q­VÓÊÊŠ¤£hÙÏ~ö3}üñÇzî¹çôÜsÏ¥ƒŸn#m¢Ò ‚!Ñ-\åt‰ ÁóA@èú Ö¥ÖCélp²]0?çB1£2U’ÎCŒ¸FãÁÀDWWWŠ’—H ®JpLŽò3{"ö›†´Í;¡Ï8lWX/ûža~žŸ¬$Ð<~ü¸ -…B¦A½^OÀÙûG···Õßߟ>çç•ûZ­¦¥¥%uuu¥m8þVëêꪶ¶¶T*•RšY±XL[f -…BÚzP©TtâÄ íïï'±ººšN·}ÿý÷õÊ+¯´œÀt(ò_³ùäû¨œëœÌ<Ë“Ç$%#è½Æþ›Û:è Gcι¢ÃlždæA ȱNÖ Ê|nÅ!4bà)ˆ¤‘ï‘. Eþcp0¾ãú£,ÚX3-4ÊNü\¼Ïë¹l‰ØoÒÆô6=iHi˜m|>|¨oûÛúÁ~ cÇŽioo/9……B¡…g¬‡††Òa²ž³r¹¬ƒƒÍÏÏknnNÝÝݺpáB:ðëþýû)ðý›ßüFo¿ý¶^}õU={V333)UÓƒ®®.MMM%9óZüü›mgµZM'8/--éÃ?ÔÍ›7Óê|GGGrN^yå½øâ‹iŸ¾¥©©©ä°y¼¥RIëëë:<<ÔãÇ533£©©©ÔóéäºsçŽ -…BZÝÙÙIŸâÖ… ÒÖ Ó¡££C###ÚÛÛÓý¯ÿUÃÃÃzùå—õÍo~3e"x.¬ŒŽJ,æIÚ'ò -ù×Á -§¡ÇÕ™ÿÆ€`sÒèêééI`‘ö"gË …'_eÉé$?ãyÎÇŒ>ûE™<–÷›éÿ.Ä}î3·_þò—úö·¿­ÝÝ] i}}]CCCzî¹çtxx¨+W®hccC…BASSSºÿ¾FGGµ¼¼¬wÞyG=== ðW*?^ÇŽÓÙ³guæÌ § •ƒ”^Ý<88úÜ Ç·¶¶¦{÷î¥ëÅÅÅ´ ÔÛNïÞ½«÷Þ{OÓÄÄ„úúú477—>ÝçÕÄW_}UãããzôèQZéüì³ÏÔß߯ÁÁAݾ}[;;;‰ßÞ~ûmýâ¿H‹Q¥RIÇOöU’fgg5<<¬F£¡W^y%¥"ûÂO>ùDõz]'OžÔÉ“'uñâÅ”T©TôàÁý¯ÿõ¿tãÆ ýéŸþ©^{í5uuuµœ9b;õhÄêžsÛÏ«·1›Òz•¢ˆñ¤l4-YYÔ×,ÐÎÑþ±>ò{”ø·åÁ[¯[§°]nhW?“üµ¼k9§½¢¼mllè­·ÞÒ¯~õ+¥ƒ–½R¿··§ëׯ§€)lX§3ϺººÒâÊÎÎNKVR¡PHξOÎLvÂÙ ŒŒ$ZxÅ¿Z­êÖ­[êèèHA¯™™=xð@KKKéuŸµ»»›Æ2::ªh~~^/^Ô /¼$i``@o¾ù¦–––ôÑG©Z­jggG•JESSSj6›ZZZÒôô´¦§§“m«Õjz÷Ýwõî»ï¦ oq”¤çž{N/¾ø¢¶¶¶RÀºÑ8Ún677§½½=ÍÏϧ`Ãðð°Êå²Îž=« ÍÏÏ'Ùk4épÎ{÷îéÆÚÙÙIŸÆJv{pp0Ùg#œƒ¥”ȳ´SÑ7ð‚C 6Ç:,C\éòñãÇúè£tíÚ5ݼyS³³³JÄ÷¡úÙÙYMLL¤ÑÙÙÙ¤Ô>þøcÕj5;w.E ¨p#Aé|ÒpÇÕ2¦ü0ň΀ëˆ`Ña§±ËÑÉáê·0²HëÂÔT¾ïßv8f‚}:¼Q!Ó`pÅÄF**c:Û\±¥Rõ;t|r´f4™Û2~ÛÂmœΟûì¹¥¡NçeÜ»w/E.´2¯W*•ä¬÷öö¦Ãdó)©KKKI1x¯Ôöö¶677ÓÇÇÇ5==xÉ|Ù©ðÖî—ö×Ï8à·£C^Ë9ÛþM9µløþŽô$c7}¢#Á”·œ#gÁ\¿ÛÝwâ*ªßÝÝÝÕ§Ÿ~ª?þ8}ÎË+ÉÎx›E¬“.<õNk–Žd×{ U­VU«Õ´¿¿Ÿ¶Ó ë­·ÞÒ[o½õTß\¾öµ¯éÍ7ßÔßú[K'NœH Ô{‘—––4??¯›7ojqqQkkkúõ¯-I x'9;{öl:ìl}}=9à^uìêêJ¿‡††T,“^OòS.—uîܹô-è‘‘½ñÆêììÔâ⢮^½šRKËå²^|ñE½òÊ+él¯.éúõëé@ÀÇëW¿ú•>üðCýÑý‘þîßý»šššjùŽµç®ÏЉ6>G^æêe|.–3q¯=ùË΃{|7^³c+©ÅÎ3pϾX¶¢Œó=걸¢ÇæghOÙwNŒØÝÝÕ÷¾÷=ýÅ_üEÒãHŒŒ¨¿¿_zï½÷´¹¹©ÉÉI}6òîÝ»N«Œ…B!e~Þ¸qCŸ}ö™~ðƒèÕW_Õ¹sçÒIâÞ‡îo–/..¦­h£££º{÷®>ûì3uww§`IéÜos¹{÷nÒC>Ü™m‡‡‡zð຺ºôàÁ ibb"¥ Ÿ;w.áÉÉÉÉt¦F±x´Ÿß2㳯æææôÁèç?ÿ¹¾ûÝïêßøFúààà uáÂMOOkiiI»»»úþ÷¿¯·ÞzKcccúÖ·¾¥×_=­OOOkppPûûûú×ÿú_ë_ü‹¡³g϶`.ŽPsP·›—=¿¶ŸÜþ)µxý¨ÿH¢   ‡}Ù-nñï\qÛióÿøñ>m\»öãB\<+Š¶Ít´]¨×ëúÉO~¢ÿý¿ÿ÷ÿÏؗŶ™_×’Z)‘I‘¢¸kßmË»=3™‰“™&E&@ƒ4A’&Hô©oéCQ]Zôµ@Ó‡AРmŠ6ÉÔÍdÆ3{Æv<ÞeK²öWqÑ..ÿå\_}Ñä_†m‰ËGòÞß½÷ÜsÏ…Ãáú>í¼±±òyj˜ IDAT©T -{{{Èd2"’W­Ž -´¶¶Jì©VŸÎ±î¡.”Ùl–‚šE7ó-‚^Ôn2™LrF{<' ã£,Æ=zzzÐÖÖ&9ÏM/ûûû8sæ ÚÚÚDÁ?‰ÀívceeÕê![c&“ ËËËðù|aPjpŒìÞ½{(‹3NëQr¹,×ØÒÒ‚û÷ïÃb±  -! “É`qqOŸ> ?N ‹`hhÅbQ€ËÉÉI -aÑîìì`jjJFß~ûm´¶¶¢¥¥EšÌ¡PN§SÀ£s-ÆÝ|5Ú1g~i·:ÿ!ÝmmMÆ™–––àñxP­® ßÝÝE[[þðÿƒƒƒâ£žŒy¢ÉdB‘>Ä›1׉p˜t···‹1“b2R™ìv».,¸ívûó±±11¼ééiØl6AŸ›ššÐÙÙ‰îînƒAA·ŠÅ"Òé4ÆÇDZ¼¼, U2‰sÚétÂív Ê;33ƒ™™$“I™íªTi ‰D>Ÿáp^¯W(3KKKBG¡Ð….hôª¿D­üBBƒú1üÂi8ºÃ@ôO'>z®Šè%¿7îvÖ=‹îäd±·³³s¤háóÙív1n^?gÖ˜Y­VÙÈÀƒ˜tgPx¸²ƒOý¾õ{áûÓ…ð<é¢I'0ü<ùúš…¡ošA¡µx_ Ž|ÜÍöjèbö@•~OŠñ•Ëe)î Šñç~ÿv»]ù|^Öinoo£X,"™L"ŸÏËóîïïckkKQ³Ù,c9ÅbQ®‡E>•]ùØívd³YÑØ(—Ë‚²QÝÙÙ:¹ÆÆFY!ÓÚÚzD,HYã÷¬+¢ò¿uâ§_Cíì è×Òþ ¯Yû€þtáe ôgÄßékâcÙ× ý¼Èãó “ÉÈ5lllÈÉQšýý}¡E¦R)ø|>¸Ýné2×ÖÖ"™L -;¬££ápH§ÓX\\° P(Hœp:ˆD"òÞxëb÷öíÛ¸}û6```ÑhÁ`P®/‹awwW·»»‹¾¾>ÙdÃÍ LR(¾KPÝív£\.#ckkK -ñ¥¥%$“Itvv" ¢­­M>‚òKKK(•J²>Èd:T|&å{ssÉdRù|>Ÿ­­­Rvww£±±¹\N„KÃá0vwwñæ›oâñãÇøæ7¿‰þþ~aðЦh§Ú^臺õ¹Á3ÁØAÑ€®.´/h3úˆî2‰Ò ¿Kú+_Oûíó¸J¿?0gþé×ü½ösý:F ÎXðýTŸ?| Ï: -(Þ¼y×®]C å––Ô××#‘H`ll uuuˆÅbhllD,C*•AL>§Óé„×ëE"‘@:F °akk 7nÜÀîîî‘Žq¡P}X,&1Ïf³áĉòYìíí!NKáÕÜÜŒK—.IqŸÍfeº^_900€D"d2 ³ÙŒÑÑQØív¤Óiœ>}ZTÊ[[[Q, -…`±XÐÓӯ׋ææf™Cç–ª††±ë††7ýZ[|þkÆh–_[û£ÖÒ¹¥Îç·¶¶pýúu¼ù曢OÃüX7(ÉÌä÷ÊñK‡Ã!ã)Ô~‰F£H¥RH§ÓˆÇãp:¢®¿¿¿'N`ooObÁçÖÖV¤Óé#€L$‘Õèd”Ëeäóy9ãZZZP*•L&a±X$þPäowwWš=œ•ßÙÙAMMÌðwttHÀñ¢d2‰þþ~œ>}&“IrS·ÛŽŽ˜L&Äb1<}ú555"<ÍѵÖÖVØív”J%çŒÌÆçÕÕUd³Y„B!\¼x½½½X__—í}}}ÂN³ÙlØÝÝÅÅ‹ñäÉŒ #Iù6› Ùl{{{ˆÇãxðà¬V«èƒ¸Ýn„Ãaø|>á¡ø;ómϺa©oÿ¿& ó_“É„ùùyܼy{{{¸|ù2FFF0>>«ÕŠ…… âÛßþ6zzz¤¹a÷hÛ2 -£Àqˆ—þ¿FæVVVJ¥Ž8)/´¡¡333ØÜÜ„ÝnŠW¥R‘2MÓ'ÕkssN§Sfi z5Å&hŒù|V«U‚ç½J¥’ˆú1ác"477'…òææ¦äétZ‚ѱææf¡U>}ú---2¿Åõ†fósµvÀö÷÷ElŠï•>éc¤û‡…‚ëÖÖ–ŸÇÜܲÙ,‰z{{e…×—N§šqd¦R©H®Æq´†† äÆ -Úy?úûûát:±»»‹k×®annN¶Gy<d2™«&%zccñx===ðûýØØØ@©TÂèè¨Ä;Îh»\.ÄãqüøÇ?†ÕjÅ믿ŽŽŽEš››ÑÓÓƒ¹¹9d2D£QT«Uâc±^xá\ºt ÛÛÛÂþY\\ î…^ÀÜܾûÝïâoÿöo1::*y1_Ò@€‹Œ¾d̽>.ÿÒg»Ö¯Ñ~§C;×öª¯‰×u\œ¤Ÿødìák¯Q1ÀQ6ŸŽ£Ú'ŽËtÇ_7ꘟh£Ô`|* - ¹·>·¶¶$æs´¬¦¦^¯‡Éd›››’CÙl6455Áï÷cssSfóN'jjjd?KŽ -p; Ç^šššD;ªX,ÊŸJ¥"Bè¥R óóó°Ûí"èv»Q[[+c¡¡P555XXXÕ€{{{(‹xöì™hT={^¯óóóèïï‡Ífm¶ššÙ$DçyÁ3škß/^¼³ÙŒk×®amm ¥RIò4ê‡p+s“¶¶6ôôô MÑúú:VVV¤^óz½hooÇúú:Ds@çÁš!ÍõŸlŒ¥Óiìíí!•J¡¯¯O„±ý~¿Œ¢ÓtÓGÛ·äÒ¾¡ã¹\cccøùÏŽ_ÿú×øÄ'>´´´àààÛÛÛXYYÁg?ûY|ùË_Fww÷o5X5ÀÇëàÏjŒÝ¥ßu£Ñã¿ÿû¿ÑÔÔ„ºº:D£Qô÷÷cgg'Nœ@:–‚|>Ÿl`šJ¥d½“|>Å2¶··177'Â+ FCCCØÝÝÅìì,fggÑÒÒ—Ë%l6‹|>X,v$ úý~ # Šò9·0aH$( -Èf³¨V«zh:Æòòò‘N©×땃–‚,Dê˜P°¨®¯¯—n,ŠL&Ó‘UmL¼Ø¹M$âPDš,‹ VTr&E„Œ -v_Ø)æz›öövÔÕÕÁçó¡¾¾Ùl‹E0 -lD£Qø|>¡Ölá{=88€ËåÂÖÖb±˜°/( -BêÁ¾'&ÿFDLòƈ…²î¨hDK;‘‚ƧQ5#úkLÞ~Wq¥o ¨|-p˜8êמT`aaAÐNv>‰b±˜tàêêêËåÍfEx©¾¾^[XT²©º‡C¨c+++²²…ëUÚÚÚ`2™N§…b™N§1<<Œ@ “ép< -‰-s%P¥R‘ÑÈd2B¥¶Z­¨««C±XD6›zhCCƒmÒîøÙÐYäsw9G¶¶¶Äv´óµ¸Y„¾ È£££2fÔÒÒ"óÔ>ŸO’U~OŸ>ųgϤ;Äל' ƒ²ž‡ Š“øo£véhkfmÃXHÿ_ìïwÛ´EÞOS#÷û]6m¼¿~œ‘±t@¡ %£ëâx¤Œ‰A#°§Kú°ÅbA$Á«¯¾ŠÕÕULLLȘ…Ãá°°@U«U¤R)¡Ês’vÇ‘H$´æŠ<~×ôŽfQœ“ñý½½=lnn¢¹¹‘HD4:’ɤnoo£P(Àï÷# -Áf³‰âs0Äââ"îÝ»'³ÄMMMbWÜèÁ9F&Œ äy̳€É![5552#É38`ff¹\ñxÙlVÔ£/^¼(±“I¯¦§§ñçþçøüç?/|á Â$cÏ×7vó´miû¤íðñŒ´§³uý\FŸä@'mÆ»´=7Bg¼éîª~- fÑfM¦çsùÚôsèB‰Ÿ‹Ú$)ø:>i µT*!ŸÏãæÍ›xôèZZZD8 €è^°›Éd¤+]©T$ß3™LB=æÜ.óÝ©¤hç™766àõzÑÔÔ$¬Ñd2)Ÿ?7M}¶X,ÂÁÁîÝ»‡û÷ï “Óf³¡­­ /^ÄãÇkÃP¥R‘}ì¸uëœN§Ð„yšö¿¾¾³ùp@¯v+ -xûí·e¯; 6úó,ŽßtvvÂçóÉ}é§CCCxíµ×dëÇãÁ«¯¾ŠÇ£··===Òô0ž•º@g¤Ói”J‡ÛÔ -…‚l@ã÷@¦W"‘ü5C<ÇÁÁ±¿¿¦¦&„Ãa¬¯¯£®®N6Àüü¼ä¡lú¥Óiܽ{~¿066†ÉÉI˜L&iÔìííɶ*¯× ¿ß³Ù, cGG‡0¬766D; P(àöíÛX[[“Ñ»öövaonnÂï÷#›ÍÂl6ãÑ£G @FCCƒl9sæ <vwwá÷ûár¹°´´„ ‰;+™#;ÑaMÔÝÝD"!c~Ü ÂW$A{{»Ô|Üy†k€çL°Rép3Ïìì,îß¿;wî`gg½½½’Ïloocll Õj¯¿þ:¾ýío£µµõ3ÜXËhÿ@†F¤Œ7í¼“““øÙÏ~&3…ìV0XuBzV’ÎÀBšrkk«Ìcð:a³Ù¤ÃV__p8,Ôbvßš››¥#¢i“=(—ËBû¢ò1Q -º“BöÁ³gÏÉd$™"2Í9‚‰D÷ïß—õÛÛÛB#Îd2Èçó‚fµJ¥R¨¯¯—"ªX,J@aáÃÎn¥r(·¿¿T*%‡6÷ïÖÔÔ —Ë uuucccØÞÞ`†»{[[[6› ;;;ÒUf·Ÿ~R¤Ëå2R©”([»\.x½^ $ÛÛÛ‚nÖÔÔídvv…B[[[øè£pëÖ- `pp‘HDÄZx0ñОÓyy¸Q2&„ 4Ú>y¸ëµ|‰ÖNÇ`AÄOÛ_O'HFvöˆŒô2MùÖ -¢ýý}LNNâÞ½{Ò]ä¨ ]Ù5å’É }Ì ™9>F'Bú¹µ~}LwêufŒ%ÇÍìkÿ¦/ëëÒ~Æφ¯¡?KÕjXZZÂöö¶$Ïž=“LR­V+ìv;Ìf3R©:::$iÈçóxðà¢Ñõ~ÝÝÝp»Ý˜››º2¯qkkKÄÞ4@Í®®.Øl6ÄãqIÙ¥ˆÇ㘜œD{{;†‡‡eTmgÏž•3™sìVž>}Ñh³³³rFpÛM±X”ïŒ#_•Êsá¤íím颲“J¥äsÜßßÇÈÈjjjdGy<‡Ï瓱!&¨ÝÝÝXZZ±@®g2™ç@ɪá -¨D"!]]‹Å"¢»/^ÄÈÈ\.<0ì²  ÅîØéXA;Õök,\tÑÌâ—ÔWÒ_5¸d6›¥ §w;ëN*ÿ­ýBw}þ6OÛÖ µÙl–•‹F›ç9adèsƒ`AQ#à¦ï_*•pïÞ=¼÷Þ{Â,ÜÝÝ•¤Ûf³É9½µµ«Õ*¹·>q“ôÙÙYQ³_XXm\E«AI êëëÑÔÔ„l6+g»¡ápG’lǃååeÉ÷Èü¼yó&úúúÐÑÑ! '·Û@ ‡Ã!×C ™Ì¶D"ùùy”J%tttavvÓÓÓðûýÂf¬T*¸uë2™ŒÄ¢ýý}”ã¨Þõë׉D`·ÛñéO§N‚ÙlÆ“'OdÛ@µZÅ… ÐÒÒ"­²Ù¬ˆ(þó?ÿ3®\¹‚ÑÑQÔÝrú -éÌZ¸¬Z=œ&‹“9$m…¾@£MmAÕÀðñco:fÑÝvúï£éü:ÿ¢’}¢YŸ:ßãkòú9rÌæ–`× ™Ñ—Ydòµ9nœN§±¹¹y„IÇqažÃ¼j ±6 M‹EÏâø'Aeæºlˆr6ßår #åĉ2jº3öù|^´¡Øt-—Ëp¹\€ÏçÃââ"¬V+ÚÛÛ±´´$+_c±˜ÁÛÛÛH$hhhÀÀÀ.^¼ˆºº:ŒN:%`ý-—Ë¡X,¢»»ƒƒƒ(‹øõ¯-³úÃÃÈÇãH§ÓòÞÂá°œS˜œœDMM ÚÚÚ°¹¹)ÚøPÌ°T*I÷£:ÃÃÃR¤“agµZqõêUܾ}íííEWW—Œ2SÄ"‹´+jq\š#uÌíiWííí°Z­xðàŒhøý~ttt §§>ŸOXðdê\~@qß©©)YY[[+l(2°–——1??x<Žo}ë[¸råŠÔßôgãø³ÚØ$©V³@ߎC­éÜ[[[xôèb±˜ÐBêëë±´´$ˆ âb±ˆµµ5ÄãqìïïÃívKaX.—E4‚{(ív»$lÑhT„ˆ´ð[±XD>Ÿ‡ËåJç¶H§3²h &“xμÙb‘o2™Žìf]__Çþþ¾€ ™LF’DR}z{{ÑÚÚ*ÎÙÒÒ‚t:-ÅM,C.—C0ÄÆƆІWWWÅð¹Å ›Íbpp‡CèÆñx2¿Æ¤žÊ˜…XXX€ÇãA,“/¾P(€’L&±°°·Û-s›¤eòÀäßìRe2LLLÀl6ˬ479ð³«T*"þÑÝÝ-644$ÀËþ碳³çÎCGG‡\zÖÒØ!4&5íÖè©Ñ™Ø‘Ô@^f´kFó~º¸âÿ?Ž Þ߬ÑïjµŠ©©)üìg?ƒÏçC>ŸÇòò2ü~¿G~¿V«UhWZâÈ -ç2I#å™t+~>ì¼577£¿¿.—K”ÈÙ•7™©Äýýýðûýò\…B›››²¦†c8ÕjU:ߎ¨¾Ö××#“ÉÈe³Ù`22]˜’šIŸ¤Ÿ”J%x<8ÔÔ - òà¤ïs%N}}=FFF¤Ëf³ØØØ€ÃádB¡€†Ò\.šššP,aµZEȇó¯ù|^ÀÍööv˜ÍfœuH8Îx^ˆk;ù¸sXß·ŒÀ‹›ãl_û–îøÐÞþ§íYûìqׯýG;ÆûèëЯ«Á8àywW#ÜÇ]ûââ"Þyç>Ž7ß|SŠ@ €p8Œîînôõõ øOÆf}ÆÔmóãì•@‚¦äë•sºH¢*¼ö—ãìS¿Îq²ÑŽ¿7›ÍÂ@©T*2&ñqg†~¬1þ1H2¾>Ùžìëë“×"KªZ=T˜Îd2G:ÌŸhkÔ‰aþEinnÆÀÀ伞ŸŸÇÎÎŽÄÚA tiŠãnllÈspD”»ÃÍf³0söööðÁÈçÐÐЀt:-¤,‹°¸ñìÙ3,//ãSŸú…Y7;; “éP# ‰àNVßïVÅsàæÍ›hooG8Æk¯½†¾¾>X­V477£¥¥;;;X[[C,C[[`aaA˜3dWtuu!•Já»ßý.^{í5x½^ÙÓ¾µµ%ç AÆlŽûµ´´Àd2 í¹½½]@›p8,[´VptÍxÓ`Ùã@)ú&s£OÐk¶èç ‰öÅßñµ‚~.²Hø£ï®ñç:¶²IA˜ §J¥":M$¯Ò€:óÒÖÖÖ#ÍGægdÌ„6I† çÚOž<) -þŽ4ÌK£8ÛÎqQŽ4Ö××£³³S -à@ €––<{öLÀ>§Ó‰L&ƒB¡€'Ožà¥—^ÂéÓ§EP«ªÉ<`ó*•J‰Ný¿¡¡n·Åb+++Â6«©©Ûí–-7ÜH•L&@ìš Çã‘æ -×{^ºt ƒƒƒb»ì¶ ®««C__jjjpõêUÌÏÏË[¥R!kŽ“éS©®Nåf,³Ù,õ"µfff$§£Î•Ùü\_ëƸqãl6›4b™w2'Öyé½{÷ððáCììì ‰Àjµ€l/"˜177§Ó‰?þã?ÆÅ‹åõŒ6¯ã“è´?þðq7#BÆ¢‘”}ÎXqÛí–”Ô`v-y@òz<)´i8tf¢.M#Å™ëX€òñDÿVWWqpp€ååeÄb1Ù)ɤ¸¥¥EBÒÖI!ÊGŠôÁÁ¢¿é d2,//Ãétæææ„TSSƒ®®.ŒŽŽÂl6Ëáι¹¹Y¨3TmfçÅd2‰L__ŸèüÜØÕ¤bt ¹ï`0ˆ½½=D£Qé¼ÐØœN'ìv» Éd4pV†ô'Ò4…”H*•Âòò2îß¿/IÅFX”ÄÓl6K€1™ÕŸëëëøàƒ°¾¾.¶ñ…/|W®\AOOЦiÓÚ^˜¤³Ñ¯3ÞtÒÏÂ鸎¡.<Œ`[]]°;ø3&þF½ câ‰ëq,£¦Áq…Òq7&캛zÜûgÇ… -±%ΛÍf‰Wü¸Íd2IŽÇ‘ÉdÐÙÙ‰ÆÆFLNNÊêe -1ësŠM~ˆ*•Š€Ñ)WÈh{òä < ãÌ™3’ÿù|>iy<ÙâÑÛÛ‹¦¦&éššL‡¡†††äÜ'CÁétÂl6ËH5ŽÒé4æææ°²²",n“ŠF£³¯\¹rDw#›ÍbzzÓÓÓp82³}îÜ9ð¤ZzKK ÖÖÖ„ºmµZ144„ÅÅE@bÏh6æ(ôZ©TdL˜l0Z­VÇ’É$vwwqçÎ$ ‰‘0ÖÖÖä;e~ÖÝÝsçÎÁï÷ËZêB¡§Ó‰³gÏ¢µµÓÓÓ²å*“É \. ¨›wÌY›ššàt:eµûÅ‹ÑÞÞŽr¹Œ§OŸ¢¾¾^„hs¹’É$ZZZÁþþ>þñÿQj¿ÍÍM¬­­á+_ù ->÷¹ÏÁår‰ýìïï‹vÔüü¼Äy‚)Ô}àÈÞØØÒé4š››¥AJVëÖJ¥‚‡bjj -555‡Ã¸rå -œN'îÞ½‹k×®IlnnFww7, fff„屺ºŠS§NáK_úN:%g4mÞhÇ´[Í0Õ±î·M%âøo›Í†h4Šû÷ïËü Ú+W®`mm óóóH§ÓBåW*•d–™A%™L - ÷y²ƒÂ™Hp¡Pênss3úúúàóùD†]Jå¹ú²Õj• FåFP¤Kðß,Ú8Ê™vRAH7fŸH4g=[[[a±X¤(£[SS:::d>šES[[›¬—àáR*•°ººŠºº:¸Ýî#Ý~Ž»»»°X,ˆF£hnnÆîî.’É$r¹œ8SµZ•ùn"iœõa²G€ôF&‘HD’ Š –J%éJ“ö955%ŘËå‚Ûíý~vv»]:ZTâ¼víÒé4>ûÙÏ"ÿV€áhì¨ën¿NŽëð0PG•˜Ku`cÒ³–|œö ®iÓÅ;~:1ÓŽÈ÷@1˜P(„'N`cc'Nœ9XÒx¥Óié1±/ -x2™ŒÌO´J§Ó"(³¶¶&Â-N§ñx\xA•(_}}½¬AÊårÈç󨯯GKK ªÕ*¦§§¥sèp8D|”ÂÖÖV HEÆÁ€|>/É•ÅÓé4\.Âá°PÉÖ×פ"C†ëív;\.—¬loo—DŠ~Fæ ´ÇãÊ6ý«¡h´¶¶Šh\©T±S .òœ(—Ë¢BFáñx¤xšŸŸÇãÇ%(F£Qœ\ûõÆoàí·ß†Ûí–{³ùp.°P( ³³Ñh˜™™Áüü¼WårV«…BAÀ²……ñ “É$‰w=×××#c{{[>;8dÕT«UƒA\¸p½½½Rx?yòwîÜÉd³gÏpéÒ%Iâ™ìüÁü¨ §R),..ŠÞ5n˜€ŽŽ -½±£¶¶VÆ8ëyúôiT«Ué]¼x¹\ï¿ÿ>æææD™<‹!NãìÙ³2n°»»‹Ç‹ÙHì†q nnn&Ó¡¦w0Çb1Q­Îçó2Æäv»pàGPž#Io¼ñÞxã À7¿ùM\¾|YhœÌ×€—Ét(IpÄر×>Apߘÿðyic|&äü¼™üj€MÇÒ~uBŸÕc7555Rt²`×óØ8ÖBpÀëõ"¢££C:èdj†B!tuuaxxårYVg -%º··ׯ_±ÁR©„ëׯ# âôéÓ8þ<îܹƒ‰‰ Ô××Ë -Pg¸®—9[oo/.\¸€ÑÑQlmmarr±XLX®GÖÁ-..bssápX6ò455 +³¦¦“““˜œœ”± -Žvîììè½¹¹)ì²€ŒÄV*´µµáßø†¬ æ&jµ*L¤ƒƒøý~ôöö¢¶¶ÓÓÓø÷ÿwø|>eëïï—‚”ñˆ6¤Yþ^ûž4£ïiú=É—iëkt bC?eüÑk7uüѯ©Y]°ÓÀ³~=‹mmmäÖÖÖ -›’ ßà Õ¥Ø+ó#ýY°eNͧÓ)ºPl>2 …B¨­­Åää¤Ôl"µ··Ãï÷ Q,1;;+ ÚÒÒš››eüwrrRV±s ‡+9- ¼^/Î;‡‘‘d2üâ¿@±X”q6- Ün7¼^/ž>}Š‘‘Cr8ÂÞaí”Ïça2™„-Mpz~~årYjÂÖÖVaHß½{ׯ_G}}=º»»ÑÝÝt:ÉÉIx½^är9tvv¢½½===øÖ·¾…ññq¬¬¬c¯··ÝÝÝG¾gŠ"z<¸ÝnÑèᦠ-bS$‘zSËáêÐ,..¢¡¡¯¾ú*NŸ>T*…™™466Âjµbxx>ŸO¾s6J÷÷÷ÑÙÙ‰þþ~T«‡#™Ln·_ýêWqæÌyœn„Ðçt®¤k BK~ùñM'Ó(™qf‡ËîÆÊÊ -€C¿îînôôô «« hooG.—Ô‚ˆp©TB0y__L¦Ãµ,"e¶½\.ÃãñH‡€Ú8sæ B¡êëë‘L&EäNRŠ± ‡Ãhmm…ÏçƒÏç;‚dS™ÝÍL&#«Ž¸ÎlaaA6ƒAAIùš,r8Ïâšt¿ß/Å ÇÜn7àp8D Úçó¡©© ¹\±XL -¦½½=}àgŸ3x“nǤìÊpîˆ]¯×‹³gÏbtt£££DWW¢Ñ¨° xˆñ0! àñxÐÕÕ%b4“““XZZ’Î2uXøñ äLg¹\ÊwµzH+4võ5ª¬Ñd-2C×h0ÏÃÜXŸt‘¢wÞkM øZV«UºÕ¤bƒA„Ãa„ÃaD" " -K‚ŽÌ".—Ë µqee}ô‘tcL&²Ù,R©Ün·(ssv¿¹¹YÆO2™Œ(“UÃÕ~étZ(†X]]•ÙãjµŠ§OŸÊ¬>)HñÁÎ{¥R‘ÙÑúúzAÌIÅb€d!ÎëÚØØ€Õj•g¥RJtMM ‚Á ZZZdö› -ëô²Wæææ033#; 9*Àñ T*%`Ùå:RŠ¡€` ®­­•äŒûÔý~¿ØÖÓ§OñöÛoãÞ½{Ãôô´ÌlDÕ(®Ñfu¬íÔX¼kÐ7 èy0þŽÏOÿb±‹Å$IÔ…“¾.]põ62xèOƤN³ ˜¼ñ9yn3QÔ¯£“5³ÙŒõõuüô§?•óž+–(ùÑGáÞ½{¸ví–––ðôéSܹsóóóGÆF˜Œ1èòu -…2™Œèfp LoÜ F -Ï5“É„¶¶6XŸ¸2©P(`rrR˜`¥RIæé×ÖÖDã†ñ •J‰¶‹ v$Ù™!4^&Ô&“IŠ®ùùy,..boo‘H‹E - ݉©¯¯‡×ëÅÎÎœ={V¶ÚPižA&<ì@Ûl6À|€ýèG’‡»ÝîßÊ“( ÍïQÛýB ´5Ú­¶i½Q‡×ÈÇhðNñú>®@ÇÅýXÆ÷Æ÷Áç]XXÀÿüÏÿ`jjJ´B>466 -PNVA;Ú¨Åb9²™‹ç,»ÈápX˜ÔÛà*JÚk6N¹>þW,a2™âgœËå°ºº*E,ó:Ül¬„c£»»'OžD¥RÓéD__Ÿ€¾Œwkkk¢ÍÑØØ(b€Ò¶··Ñ××'[6hà ¨T*bÛš9Ì"zyy‰DBÀœ?]]]¢)³¹¹‰õõuÑu#óœìlÖY[,‹€£££xýõ×e㙎üÞ‡ˆŠvuuÁçó‰@0µ8¶Àœ|nnN4MÎ;‡ÚÚZܼyóÈ{¦æÃÆÆfff°³³# …†i“/¼ð¾ô¥/áÌ™3Â@560 |ëÚ†þ¦mš¾b2™Ž *ÆDR#à‡ÃhhhÀÚÚš& -°‘HÁ`ííírØ~úÓŸÆ'?ùI\¹r—/_ƹsçpîÜ9ŒŽŽÂårazzZ -»ÝŽhôp?2÷kkkaµZEÁ~uuwïÞÅ­[·`6› eF„É5Å1¨hÉî¾f°ãZ.—%‘²X,RP;4(6F0„]ÎO2Ю­­aqqQ^HÅ`ÀXYYA*?ÕjU’ *Ÿ`ll ËËËrðÒ8bÀ9¿ÝÝ]d2™QáNHª’~FQ R õ¼!_#•J!‘HH@ebT©T„úI €|'Tn'ÁÝôårÁ`PD8Þyçgˆjø뢀t”™œoúgš:ÆÿëçÓ…>H Æ@Âk4¾Ž~ ÞW3È5S ’sAüìY|QsLŽÕ´´´ ££ýýý8þ<^zé%œ={'Nœ1$ÒŸ‹Å"ZZZÐÓÓÇÇ#É{]]èo_à¿™HU*ÙbÁÀGú·ZàÙØØÀòò² ¬‹©TJ’|ê2Ë5 L$™¤°ãFÑÚÚ*ÀãÜÜâñ8VVV¤ØI¥Rxòä ¦¦¦ä3jll?·Xçó{{{ár¹‹Å°¸¸ˆàÚµkÒéâœ)•n3™ ¶··@®—ݲÝÝ]9.ê½ï¤}&úžN§qãÆ ¼ýöÛXXXÀ…Ý^ÚmPwŒ>`LŒø{mß|œ¶i~/ÚîÍf³¤qÇãqT«‡]l~'Æë`Á<§›“;þ­}Y÷Ú/5XÁk4&fÚ—L&“zOž<‘ïžêÂÃÃøxñ"zzzd£‰ÍfCkk+¬V+l6›ø$…l €2\J¥’h0Æ°#lµZeËÅÃ’É$Êå²$I@f³Y„XU«‡Ûîß¿G‰½S°’õýý}™[d,£íQCÇn·Ëœ2×!ñ|éèè@oo/b±nݺ…P($`·ÅbAkk«èt$“IkN§h’V[[‹ååe -¬¬¬`hh/¾ø¢tz8NĽÊV«UÞuøýDmjj’N»2ù|¿üå/ñÃþP€zÇ#ÛröööD5[ƒÁÐHLšu±®m—€¶ö}‚kì’ò=èØÂë1‚Ë<“Ißåsò~ºÒ±‰¯Çÿ³h¦o–ËeÌÏÏ CJÇ,Ù{{{˜˜˜!+Ú1 5¹\Nò4»Ý“É$£†f³YVÙ²³M kmmMl–*æ‡CVæ,Âé×{ôz½H&“ƒ(RK%™Lb{{[D†§¦¦ä,æ¶(>‹EÎ{úg±Xm›¡¡!\ºt Á`PÄž»ºº‡E‡~©·vüú׿ÆíÛ·Ça2™„’‰DðÚk¯áK_úNŸ>¶¶6ØwvvDØw}}OŸ>ÅÆƆPÂÀn·ãĉp:X\\”î/sNÆÁÓ§Oi,¹Ýn˜L‡#¥Ož<9²Èëõ¢¦¦©T - xø𡨥“™1<<Œ––üà?8¢3B@ˆ6¨Ï{}Ž³ðà™É¼I³qŒ€˜à=Î_Œ µ±qÃûÑ×éK:&i`”ÏcÌç´?år9üä'?Á;ï¼#zAôõþþ~^:;;‰DÄ' dÏ…³ ²ù’N§ÑÞÞŽööv)ü€Ã.´Ù|8CÀÁb±GÑ8ÂLd d³Ù,J÷\g˱ã@ [78êHŸ#PBacv¼C0ñ½÷ÞÃøø¸ä}ñx\Ä,ûûûÑÓÓƒ Œ€ŒT*‡k«S©Ô!EÆÚMKK‹0ò‚Á N:%M[6¡›››¥éÌÚòâÅ‹ÐØívcww ¸s玀þÕinnÆ™3gd,Θ§hú¾Éd’9Á`===ˆD"2––Ïç133s¤‘ÔÐЀL&ƒD"!¶ÀÜ°®®¨TÇ1È,Èf³ƒÆùóçñòË/cppPƃø™i_a¼4Þt-¢GfÄ_þò/ÿò¯ùCëòðÖÐЀ`0·Ûµµ5ÌÎÎJG‚-¯×+]þ‘‘œ2$c±˜òÄb1ììì §§ápõõõX__ÇÿþïÿJ!ŃÈXôð`дIc‡T;Ãq……&:éÓAÈ6|\ÇÈx?ýš­Çç×E”Ùl–"œºDýµ G3zzz044„žžD£QÉèG'OžÄ©S§`³Ù°´´$àmßår‰­²xálóææ&‡Ðý©zëõzÑÒÒ"#.—KÖ’6F&Ù>Lb8_̃T'×<àWVV¹nmm•Ud.z{{…®ypp¸”,‹®õõu "ÕjKKK 3|\姙d¶”ˇIøÐO·¶¶dÛAH -ßPð3ŸÏËÁNÚ›Íf“ÏŠÙ5¤³rÔ`yywîÜ‘‘¯£7£èN·ñP×ç˜NšŒ³¾¿F‹ëÔð~a4›Í|ôë}TÓ’ù|ÀóyN}_cád¾xÜóòû% Ëq°¥¥%ºpá._¾ŒóçÏãôéÓ¸páúúúÉdðþûï£Z=d8‘¹B?©©©Í¾o®'ã $ð|s )õ¸xñ"¥ƒ‘ÉdÉd°´´„ååeT«Õ#ó¢ãããÒ9 “#6ìÈ,--ÉÌ<6-Xi6›eœÌb±ˆF í €€Úÿ"Uúúõ먫«C$‘Q»®®.!¥¯”J%ùŠÅ¢ô£ º add X^^ÆÜÜŠÅ¢¬êåJSvŒÇ\ÿËÄËív˘!ÏÍÍÍ2ÆtóæMüøÇ?F±X6“_ÍÈÒE2oìZj VwùGfü,õ˜±×ø\ÐvOÆ7ž—:ÉÓ¾k|c×SS=y¿d2)ë(5ý™ÝÔwÞy?øÁÉdDÀ¹½½ŸøÄ'œ7›ÍÄ+¯¼‚@ ß¹Ýn-(z¤=?~ü}ô‘Ø7çù³Ù,VWWe#”ök0år>Ÿ§N’^<G¡P6sT*%¢šÉdkkkR  !ú›q°jõPÓfaaóóó"hÝßßÑÑQY H0#•Jɹ^(8 k%‹aooÙl$·"åþ³Ÿý,Ο?¿ß/ùM¹\ÆÂÂ=z„»wïâÙ³g°X,èììÄ©S§088(1jrr›››2§Í˜ÍØžH$D(ñĉðz½¨T*Âå:îææfar“Íîî.l6Nœ8!q–±ž›£J¥’° ~ô£!ŸÏÃï÷YÅFà÷ÇÏOÐ>éOÚþiÏúþˆÖ¶ldè˜aÒvN0ÌqHwüé·•JwîÜÁ[o½ŸÏ'u ÏoÖ¬gHs„ãBÌKÈ`“kb©ÞO€ŠÚF|ï555ÂÜdŽÌF Ç©çD6›Ì5¸Â»±±Ñh‘H­­­’Ë‘­C?Êår…Bhkk“Bv{{[Þ“î˜sÌ2‹ ›Íf111ÝÝ]ùÌçó²&“ .¯×‹¶¶6ß¹‘ƒß?Eo=æçç111÷ßµµµ8yò$%¤H&“¸qãžjM„Ãa|æ3ŸÁ׿þuüÞïýÎ;'£pF`LƒÀô!Æ2=ÚÅÏPCÚ,õWõ×:ˆh‡ÒŽa 8‹---ðx<…Bðù|"¸¤çéi°ZøŠ‚w<ì™Hø|>ôõõÁl6ãöíÛ2 -Ça6›¥¸æšÁJ¥"‡[c±‰„è˜L&é,ÐÁHµc0bÀe÷Š]Í­­-9¼–––d&¹¿¿ƒƒƒÒÅlnnÆÈȺººD¸…B2v»]÷9MƒpzzårYV"êïôFΣ¹Ýn axxXŠ Z¼Ïn· õŽ!›Í¯×+ ™¹\OŸ>Å›o¾)`í!‹ƒÓa©#ÀçfÒÃC0 btt½½½888@<Çøø¸<–{> cmm ßÿþ÷Ñ×ׇžžž#¨®1ù7&jF5Æû3 Ðñè ´yýZú ÐNc,dôk4ãߤ!içdÀ¤=“|úïG Ú&J>—ßï—±“É$»”Ùmjj¶ ©a,~Élà 5;4ÃÆ÷á®çíímÞØ1%û„CîÇ%EŽ [[[„ZÅŽ³Ìd PÌR' ´)(~ñ‹_àÙ³g2?ÎZ¢é™L+++p8Á%Ú#çA?üðC\½zf³YDm˜Àèƒ_ŸÕ:™2ú‹öú¨¶]L±Ö߯o¨þ«“2=w¬ðmf¬Ñg}3&lÚ_Éš±C«ÏàŒŒþFEžÅ5m©½½¤qlƒº õõõ¨¯¯G"‘ÀãÇ¥‹Æâ–ïkk ?Ÿ `Q?Nž<)‰>ÙRd­ÑÏvvv¤›A &‡z>œg:Ùm,â'H=eQÌß³@ç…s p­Bßø⿈®®.ÌÎÎJ—ŠãC©TJX:LüXìmmm‰O9sŸÿüçñꫯ" -‰Rsoo/>ñ‰OàÊ•+èèèÀþþ>VWWQ.—¥cI}“X,†ùùyär9ÈK¥2™Œ€¢:®…B!ÙÁ|õêUüÛ¿ý›¼/¾ÆGCxcatùo#(Æ•ŠLÞX$¤Ó1Fû¬±ø×>¨c’±ËÏî)ý÷?\Ö@clJ¥R"¬Ìç£ݺu ÷w'ãLÅdneµZ -…022‚p8,"x\íÊ™gævì®U*äóy;㘠ó/æZµµµbÛ{{{ðz½rmÔ"“‚š3¤ðöööââÅ‹Ô‘eÀ±,ÒšÃá°ä&ƒƒƒ…B¢óAæ*)ø7nÜ‚ž(l;==-ÂjÎõ¨ÈÞÞ\.†‡IÖ IDAT‡ñ©O} -]]]H§Óxï½÷„ÇqçÎüâ¿A°¾¾¾#kyÙpšššÂØØ–––dúÒÒ–––X´Ùlèîî–U\K;00€ááaœ>}ƒƒƒ"ºLõy»ÝŽÖÖVìïïãáǘ››“0>>ŽÉÉIlll •JÁçóásŸû:::033#‰˜ÓÒVËåò‘\ßX¤ó+m‡ú|Õ1ÀHeæã5hMû×4o²õ˜k*•JrÍŒQƘ©cÚÖÖÞzë-ÌÌÌȦ.ýš<#M&“Œ2kUv -qs«YMMÍ‘s£Ž—éFýš6ÎÆ·T«U`/ -Òa×@_ƒŒŸÍÍM466¢­­ …BårÃÃÃGr–ææfœ?ÑhT4'(:ÇÏ• V²ÁÈ+—Ëðûý²A‰¹s²â(rÍs0‘H X, -óˆ›Õr¹:::ÐÔÔ$±ï¾û.fggeL“ì»ÝŽžžÉ?ÙL%ˆ<88([€Œ¹¼Î›xÞëâ›ß ÏKj ãÔ©Sxå•WpâÄ ø|>aë‘wúôiœ>}gÏžÅåË—ñÉO~gÏžEGG‡0h¯züWçPü¯ÙÈб‹y$ýÌl6Ô]c¢¦oº€!²©?( Ò´3ëî¬þC£W^yEhœuáÜ–Ûí–uJ¹\=B(’¾Iîô¶Z­ÈårRÐS}8 Ê<W9±`·Ùl¢°~pp H™N¬8ßE´Œ"4Ô rE -&t -ªiãì'¿˜l6‹D"r¹Œ¦¦&IL92àp8088(ÎÓÓÓ#s¬™LFV3R´³³SÊJ¥"Ô*ʲ+ãt:ár¹DY´Z­"N#NK‚¦_®škll”®0;D¬:;; -…péÒ%¼õÖ[xï½÷D|hÜÚÚ<.\¸€ú§Bgg'Ο?/Ź‘rl4øã:üÚ–5¥ÔX˜m‘7cñoü¹v.cpÓ÷Ñg—\ êçfÑËU=Æ÷ÄàEàLwzŽëšššpöìY™[ÆE±X;ïîîFoo¯$~¼ÎÙÙY‡—_~YŠo£ííÍx;àÏ5Ýј\éŸSÙ×HôùmäøüºÉ‹"à98 é—¿ë¦ýF4>¯ÅbÛˆD"xã7ððáCæ kîQ¦Èß EL …–——ñ«_ý -‹‹‹hllAÛššÃ}ñôŠz½^x½^ î(&+‹¬£x<Ž§OŸâÂ… 8}ú´(g³Y#xÊxÂÍì¼¢Btmm-VVVDû€ûªN'J¥|>ŸÌŒr}æÄÄÂá0l62™ŒP¿I³äû+—Ëòv ùÙY,äóy¼õÖ[¨©©‘ÍM¸oº©© Ñß°ÍöööpçÎÉ1H£e’Šô&“I:Ó4Y‘yÅs—[xÖ”J%aŠ–ËeŒaww".ûøñc$“IܺuKþ(Ê™Ëå¤Þßß—íTV«Ul› V‹Å‚•• ‹Éšç¥¥%aK0ÁgcennNl€Œ/vèInhhņ̃OŸâÆ(‹hkk“ÍÑ;s挬ޛ›Ú3W[›L‡ÌÔ‡ŠX•Ýÿ÷ÝÝÝ’Y,Ç`Ƴœêÿd p^½\.£³³[[[“‘>®u¹\ØÞÞÆÈÈÎ;‡û÷ïã;ßù¾öµ¯áþèDËAÏ:o;..00žûŒ~£íü¸˜@`ؘò9ùZ|m v3†jŸgaW­ŽtttàÝwßE>Ÿ—Bšy9RjuqdL³055%ºl6 ŸÏ‡ÚÚZ¬¯¯£\.cmmM¶BèmEd™³›L&ÑäbÞ¨}®\>´e”E?ÏŸææfìíí ów||\|“MN“épýçêê*²Ù,^xáD"Ö‰ÃáÀ‹/¾(cddHkjjÂää¤lÞÈçó"dÚÜÜŒÍÍMäóyÄ»»»Ek‡À9Á^žíííÀåË—‡±½½wß}·oß>2Þí÷ûÑÙÙ ‹Å"¹GSË岬?' €š%º†àÙkl.ê›fQ˜å÷ĺ˜k8yÖÓùÝT«ÏµÃ¸B3f´íÒ7ŒŒIú_çã@—U«UÔü.çâÍØ9Ò§‹#E”7}0ðoýaòàÐÜÜŒÑÑQܹsGÄHíëìì„ÓéÄÈÈÊå2fggv¹\B«!—H$DñÑívË}Øugm²Ù,677Çå '«"©T -@»»»ÇÁÁîÞ½‹b±ˆK—.¡©©IÈššÃõcD] .ú<§²0¤ªhµZ•½ð‹‹‹p:ˆF£R ±ëDŠp8ŒÎÎNLMMÁd2akk «««¨VŸÓMIùÚßßÇýû÷Q.— -…ÐÓÓƒ¾¾> J¸»»+ã CCCЂÈwCCÃDŠ‡çyøR#```o½õ–Ð_J¥’Ì#uuu¡¾¾ï½÷<Âáð£ÍW˜Ó†tñbtÐÚ^5Æh‹ú54R­#€¥ më±Öÿ7¾}0ðàӜ՟‡ àÿyˆx½^¼ð ˜™™‘ ‹1~ûûûB ¤s›¬‹Å"Œ"“É„ááaÙ!œJ¥Dˆw~~ããã2J¥dT/•J‰HQ__š››‘J¥ §Â9A´\.‡ññqŒãÞ½{øÌg># -ç+++ØÝÝ•ïÁår ŽßÉÓ§Oñõ¯_ùÊW„AÁÂpss_ùÊWðþûïãêÕ«GbšÉdêwcc£¬û×ýWäóyüÉŸü FGGŶÇ´ÍÓ&Yˆk{Õ ð\ç‚E¹Ðç>ŸƒÉ¬ÛŒñ‹~¥ v95p¦›+:¶ñ5É -bü ?Ówiç¤x&8FÎÓS¼1‹áúõë(•JRtéĆËÊÊÊýÆ›Í&Ÿg&“‘1²²xÆ“sçÎ!#™LâöíÛH$ðûý2¢ -…àp80==‡Âårá‹_ü¢¬Acg•cKH§ÓÈd2(•J˜™™Aoo/FFFPp8p:˜˜˜Àêêªä¼.ŽA²yB æ'¤tsl† ¢?ügÎœÁ—¿üei‘ͳ³³#ÅüÎÎ>øàŒ! -k–q–Ú0!- ¾öµ¯á“ŸüäÝ]äÒùSø–¶B›ˆD"8qâ^{í5Äãq|ôÑGøðÃÇQ[[+±ë£>B"‘Àää$ñ½ï}ËËËøÓ?ýSô÷÷Kg—6gG¡lãë똠ãc¥iÏ:nÐàÏùþ4{ÆÈÐÑÏ¥Ai]ð¼¸pá&&&0==-¨---8uꔌ}6-UãY¤û|>œ?‘H¡PHX4l@>{ö kkk¨­­•1Ä­­-455¡v3âjY‚ºù|^ÞsG2'8Â1J¿ß/L–|>/ç{oo/ÑÐЀGáñãÇ2šIí›l6+ì®x<d³YÌÏÏK¼æ†nÿâ&'æjŒÛn·/½ô¢Ñ(æççñ«_ýJD®yî±îéííÅË/¿,+içç籿¿W^yEΞWü^µ&²@;;;e\͘³ë&‹>ûyÓg®>«õϘ3ñ»aÎç¢ëºDçaÌutƒFƒX|~m»¼ŸnÌðy¸¥Lr&Š‡‘kã¿y?í\ÆB긓Îl|Mý½û›œL&111³ùPU™=©WÙlV:ç•JETj …‚¨+ro&;[[[йÖfmmMÖv8NÔÔÔ`ccccc°Ùl @<åC§h “h½†‡ÔÚ\.'":.“X¢lVWW±¶¶†ééiÄb1a(LLLjHÀÁb9Üß955…ååeÌÎΊ’­ÃáÊôýû÷q÷î]$ é`:ápX’ͺº:$ Œ16¤>QÕœ‡1é®BµZÅOúSYŸV­Vá÷ûqåÊ´··#“ÉH‡Z'ÿÆn¢¾i§1vGè mæÁ¢ƒ‹¾i4Y?·¦vjûÖ7ÚºÑ1ù^Œ…»úy?îýðÆÄIû±`¢/`uuUPnÒ…777¥Û¹¼¼Œýý}¡J÷÷÷cddýýýèììD8F î:éoœý¯V«²:Š(/ÕžÛÚÚD‹€3nü·]UÃuŸ¥R ±X ³³³ÈårÂ,àz>/…sÒé´i¤ìsc;—333˜››ÃÂÂfgg‘Éd°ºº*ãL"|>Ÿ¬ ä9@(²h¸ƒâŒV«Á`P6¡i°±±††|úÓŸÆåË—PWW‡¥¥%ñ_®•s82 ×ÚÚŠ‡bbbB(fÔÐÁGÛ)Ï&TšR¬‘m#¢M[Ñ>±RùJºûnÒŒ¶jô?#(a¼é"Èx_£þ±A=Ž8hÿc`dP×cM >ŸÈf³¸zõ*€ˆ½’mÂÎåúú:nݺ…¹¹¹#BUdDqU*»3Ü»]­VÑÑÑîînôõõ HËÏÀf³ÉŠ0vñìv;ZZZD"•JÉF®ªíëëƒÓé”D3‹àäòò2¦§§±¾¾. ìÔÔ¬V«ŒPloo ‡ 2*•Š¬÷ã:BŠV%“Ié$û|><{ö o¼ñ†h Çêê**•CŸGᥗ^ÂÉ“'Ÿw(~Ãp°ÙlˆD"8uêÎœ9ƒ¶¶6ܼy³³³²/™ù€fñܾ}W¯^E$7Ú‹Nøøo]„:—9n®’ öE>§¦FÓ˜äÏçÞ Œëû¯vaŒ:ùc¡Ɖ••†ÔàÍfƒÃáÀ;w°±±¯×+Z1'NœÀèè(Îœ9#ÔTdQØ eBÏ3’[5˜T«ÏÕø©¯¡©Òdz½^´··cggÓÓÓ¾2ÚÜÜD]]R©²Ù¬4XX°ÛívaŽ°BAÈÑÑQƒA˜L&¬¯¯Ë¬3-·Ût:¶¶6´µµ‰XGò8ÒÀ3›Âdü¹Ñcffÿ²/û<Îöàµä’»K.—ä’Ëå}ˆ‡DR”uَȱ'ná4‰ë4Hk(‚A€¢Z ý\¤@Q M>$Ns4E’ÖMR7±-Ù–dY¢(‰)J<–âÍ%—÷òZ’{ü?0Ïhøfåæÿ’{üΙwfž™y&ã¹çžÃ—¾ô%œ8qBª,–ƒ¶T6› wîÜA__Ö××á÷û¥ª•=ÇÀ©¬¬,!*dŒ²Ç¿5 b,H&“ÒÊê÷ûÑØ؈£G¢ºº³³³8þ<222¤Çœúʬ¸ÕjESSœN'vwwÙm£´œ ü2°1ÏÑluÑŸç{f–6¸Ìë'¸Àsà–îÞL£žp”+ŠY9[[[‹ÊÊJ444 ¶¶@EEEèîîƹsçðôÓOã™gžÁ±cÇd¢§ÁƒA477ã±ÇCww·Læb³álkØÝÝE[[:::Ä`[%í€æ}²X*è—ollHÌC.6Þ+^Ccc#¼^/B¡.^¼ˆ›7oJ[Ǫ3ñC?pxxXª-ƒÌÜf³I &ŸÛœN§ð¿-//c~~~¿_Zœ¹¶²½§¶¶èééÁøø8:::DB¡.\¸ ¶euuUªëXIÁš8~ü8|>ß!]ù¸ -.½æšk2_×åú¦œÑÇ2ã -3)£÷kÆÖÚ¶ð3ÉB]Ð>u€@D"‘H?ÀÜôëÿ—ãfn¦ò?ê¦jG”ˆ2Ù;::päÈTTTˆ²W’¥6«««ÆÐЦ¦¦pçÎÜ¿_ø8Ò…e”ìÛ¹ÿ>666`µZÅ™ç Û¥¥¥Csk———ár¹PRR"èƒdùùùR¾ÃRÿÌÏÏ#‹Ñ´Xz¦çææ0<<,A3¤>Ÿv»ÑhTˆ WVVPTT„úúzAîööö$#IãLÔ˜=ãéät:‘““#\D¡uy93S“““ÂÏOÇ@277+++‡Ãâ(R -š1ŸY°@ â\ìïïcpp###rOÍ8܆¢•@g -¹™Áº–GÐz”|j¹ç§­tßMèÏ›A”Ðñó4NÜuÎéŽCg!77WJC¡LŒ ûq4•V.Ò”=–ü†ÃaŒIsffFfHo<ƒ‚F$ßËÍÍENNfffd$g‡Ãúúzá)))ùkjj’EÚápÈdf H g(ô—„%%%‡œ"îtA3u‚„‡,Ý#áû²Ø;Y[[‹µµ5LNN -À€-''Gø?Š‹‹‹Å1'¹gss³=͵‘™™)ã¬Öƒ±h×®]ƒËåB 8ääpÓF"ÝššN®LÒ„òÉñX¯§uÇMæêýs¿&úÌë5¿kÊ2ÿç~u€•N¯¦ê^Cí4¦ûôõ00Ó=ÉuuuXYYÁ{ï½'r·³³kG‘¥Ÿ‰·±±ÌÏÏ 50‹Å"„‘ä!»·gÆ™çÇiÐ777…™’,M˜˜@,ÃÔÔ”ÈÓüü¼¬½œ0Bb>=Â×ívË:aµZ…È/‘8 %™Òcccxâ‰'„ø–ÄM‰D?þñÅŽj`8™LJ (ËR=˜ò¹k`3++K’Ÿ}öYƒAü÷ÿ7¦§§Q\\ ›Í&Är‰D555€þð‡ÈÉÉAKK‹,\Ã5¨K™ÔÙA-wZ¦M}âߺzFŸ¿>žÖ},ʶy\Ê©Ö Láþø>KζS’œJŸwQQ|>ŸÛ[[[¨®®Æ™3gpäÈáÌ`¶/;;—/_ÆÀÀ€¬ÃÂØÆ™““# å”wf² rr\ Á§Ó)–cccBÆœJ¥$^[[BJ ###ØÚÚBVV–Ø™X,†ÉÉID£Q!¨e©:'B±*€íZšà²°°PÚ[ÈÑÁj8‹l÷$÷K‰É¡ÐÔÔ„ÖÖVäçç# -áÒ¥K¸yó&îÞ½‹ÁÁAœ?ÓÓÓRÊJú¾lKc’ˆn¬.:yò$ü~ÿ!N]‘ÉõV\ùºÎ ²ÚˆÄÎÁ`­­­8sæ <b±†‡‡±½½ ¯×+ "’“ši|N\÷Y9à IŸ‹h¥óÝ´Œk[Ç5\—;óu]-`Æ3f%¶ ´Oûûû¬Äãqá;*..FYY™´Ãú|>á‚iooG}}=|>ŸÄV«UgV°]€­Ã>ŸeeeB[ZZ*`<ù666011!c(iïhsMàˆGN°X,’È¡GNŽ¡Ô¶%•:¨–ŒD"¨®®Fss3ö÷÷‰DÐ×ׇ+W®`ttëëë‘ÂqàœVÀ±ìVëµ×땉.À´´$Ï“qù’’é×çdÚ™ÒÒR©6kiiÁ“O>‰ÎÎNÓ¾¼¼,ÕbœLf·ÛÑÔÔ$•”PIç{è ZËe­è\Óu®ý nf,Ã÷M€A˾™ V|é„©#P®yNLgN+¡ySÒm -PøûPÂïJ8bŒ™ñ™™,,,ºp»Ý.Hçš’=77ÑhV«U2áìI¦r€ÎRQQ‘œ…€’ÔÅb1”––"‹aeeEÐk(‰bHÙ ™g@fš“4InØsÏQg4H, þŽèÊétšÓΩ$æéèè@0ÃHÖdž³ûÌöfeeáÖ­[xûí·ñÞ{ïáþýûÒ3³µµ…ññqÌÌÌ©V^^, ±°° &Q6’x°ÌœÂš™™‰ššÔ×× ˜Ã~ZŽêùè£ðÑG¡¥¥EzhMåÓJ¡¸GÉ]:dOgóÓmü.åÕ,ñ1c­|uæñuðÄ×Ì`.Ni½ÓFþQúÇ÷¸h±<øöíÛRÂÌùöö¶ŒcZ__ÇÈÈnÞ¼‰7n ··~ø!B¡d5ÈÇáõze²‰ºb±˜Œ?âTà ŠL¸‡CÀ/qÉdRúéܱ·€°©\[]]Åýû÷±½½-cvXLR´¢¢"!±";<¯¬¬,ƒA”””`mm ðz½2ÒluuU‚–;wîàöíÛp:¨ªªB]]|>l6&''ñ‹_üBJ[ÙïœH$077‡;wî©Ùöö¶Œ5µZƈÖÖÖŠAOO¶¶¶`;Cvv6®\¹»Ý.í2¼O”?ÊœY +LÌÒIÊ”Øù›Í&•$Rå÷´ã¥‘jÇôÎÿM‡” t:ú(9׺ûqÀdê›,ñÚè„æu¹Ýntvv¢¼¼—/_–™âì&HJG—:åÐjµbmm wîÜ‘*–ù’PrddSSSBv”JŒÝci>ùg¶¶¶$3Bn Vå°µÄf; ÌÊÊ’ìG¨¥R)iñZ­R"­3kkkÒ“JLÙívÌÌÌ ##ÝÝÝhoolj'¤ùÈ‘#¨¯¯ÇýÑ¡¹¹Y®sccCCCbÇXÎ]ZZŠP(„õõuÌÎ΢¡¡O?ý´€m”C>+>·ŒŒ øý~9r§OŸ†ÓéÄ[o½…™™™’L&e -Jaa!~ùË_"™L¢¶¶Vª"(o”a‚ŸÔ¾¯åƒeð¦Æ€A¼<†ÙÃo/fÉ¿i}ÐÊ£l—Åòpòp°62ˆÓ- <Žó%Éòøø8&''aµZ”"ðpêÔ)¼ôÒK8{ö,žzê)|ò“ŸÄ“O>‰çž{/¼ðNž<‰ÖÖVi{"²åååCºgšd‰ÄC N·°Z­RaVUU…ÖÖVƒAŒaxx333˜›› 7##CªBXyéÒ%D£QÉ~fff -¸644„íím¹WÑh¡P7nÜ@FF|>Ÿ?œ<ÀéKíííxá…pâÄ a…B¸rå -–––ÐÖÖ†¶¶6”——c}}ï¿ÿ¾TJX­%Óuuuhkkƒßï—Šú‹ä˜šœœD]]ž}öY¸ÝîC ×K‚#‘–——å¾蜜ă0::zè9ddd`vv===’ °X,»\.”••!33ñxGųÏ>‹®®.Ù÷ÌÌ "‘{ì1<ÿüóx饗¤š‚S`pâÄ dddàÂ… ˜˜˜@aa!Ȭt•›››’xÄ믿Ž£Gª4áGð+Ýš«å‰rÿ¨Œ¢ -8I¡ªªJ‚âüü|ÔÖÖ"33{{{¸zõ*~ûÛßbggGZ¯´¯Äcðüt>ÏWëu<]¢m¿«× ½³%Žë™n``®õÆ\ÿµÝq¹\ðûý(//?T=¢©mƒô¾ :êëÔÏŒD°¬öÝØØö`&T‰„»ÉdRî=G@²u,ÊuWÉjµ -i$ãö¦ïïïcggçP ÎÝ»w…¹¢¢ûûû˜ŸŸGAA€ ¤¢€~II‰´’—ç¢ ¤ пä3éêêBmm-fggqíÚ5„ÃaáuÚÜÜÄ•+WðÞ{ïáöíÛÀÐЮ^½ŠË—/cmmMìAFF†´é,--áG?ú‘p“D"i_Óà$+à˜4+F_hzúü&8GùÒ¯™ —–½öó;HÐ:­õDËm:?‰ß{$`:HZéôÉþ¡Aˆét1#rýúu¼ÿþûxï½÷d¶ýèè(FGG¥œ&"‰`llL2Ð$’XYYÁðð0úúú°°°€••X­VLLL`{{[‰™¹‡Ã’Eaoƒ^Þdö¨™¥€ÌØ“Êét"bnn^¯eeeðz½xÓPQÀÙKFaä}&2E6}ŸÏ‡‚‚)f°°°^¯W”q||sssˆÇãðz½ØÝÝ•~:cW¦§§…MÚårazz7nÜ–OVös···ãìÙ³hkkCðwdð÷z½ˆÅb‡Ã‚˜õÌÏÏ™Ê^7²sá£äóùPZZŠ¡¡!¬¬¬`ooO²Nyyy z½^ÉÈÑÈ™ÁDº`Y˳™!Ôßׯé* VnSѨ´Ú`˜¥&QÓÇâg(c&ø¨kÓÇý8½ÓF‹}ë‹E‚o‡Ãêêjx½^!DimmE{{; $ 3¢ïß¿H$"~dü§œ' ¬¬¬`ggGF¿p\ ËëÃá°Œec)2§ ƒA”——K[@ee¥•––Êûšåv||\‚™ÝÝ]©Ê!˜Çò3’ùLMM A¿ßd2)AJyy9Ž?Žh4Šßüæ71¨¹¹¹(((x·Û-$‰7YÉ`µZár¹„/„NˆÍvÐÃÜØØ¿ß¡¡!n€ììlßyáÂ!4dv–:¯åOËjºL‡^—)sfFÉßïyKgÈLljŸã«åÓby8âH—§š œ™Áâ±xuÐdSÉÑÇà>xîä2a•ˆ^ÿiØöuûömÏ¢Ñ(ÊÊÊP\\ ‡Ã)¥g:##UUUØÔ#‘ˆdÈp̲ÇÜÜ\Éœ8NÄãq h‰D¤Z×ÉqI|}ŸÌº·¶¶ -‹ˆVVV¤Œ”À§T*%åÉñx¥¥¥8rä<Ï¡þÒþþ~\¹rçÏŸÇo¼ï|ç;Rwÿþ})¹Á7000€ÉÉIÌÌÌHiæÜÜ>ÿùÏ£­­ ÀÃrfí`é@‚Î3òUUUèèèÀ±cÇpåÊ©¸áõ¦R)ƒA\¸p‹‹‹2>z¨3ïfå––c3ÓCÝ£|ê€F_‡vþôšLYÔY%3ÓçÂ㦳 úí,ÎÍÍâкÇýQ?rrrÐÑÑîîn‘ÉtSÞ{òfhe6//UUUhllˆÓ$t°¤IÁìv»Ì£O&“¹Áˆ>ÆØØîܹ¯×‹††TTTà‰'ž@GG‡L©TJø (‡ÝÝÝÒÄ Á¯p8,#–õÚF€7??_*P©÷‘H|ð.]º„d2‰îînQH´ååe!w¦Î3 tïÞ=\¹r|ðÆÆÆ°²²‚ùùy96«Q»ººðòË/Ãçó’OÊ€.ÁgÀ­?£åˆ„Ž”3Ýžcf,ƒÊѳgÏâĉp¹\¸v횬‘÷ãÚµkX^^Fuuµ¬:A£í Wu‹×j^ƒÎškÿMgýµ®p½¦L¦³mÜx,úãÔU hª“PJ,i~,fýõú`Ú2smÓkõ §§G²ã™S©”Ä-´i;;;R!c³Ùd9øxÕö²`µZF1==--7‘HH&“B Êsç8sŽºÛÜÜÂ?¶L$Ònʹ æççaµZ¥’—òóóÑÜÜŒ’’iQ²Z­(,,Äââ"FGG±°°€x<ŽÜÜ\™CbeBó\Ŷ•––¢§§¿øÅ/ðÎ;ïà­·ÞB__®]»†ââb™.Grk3ØçÚ§“’ôgh_Ó@Ü´ì˜2ªãmLßNïSƒÀ¦LS§(ûÌkc¡?›NùôëæûÉdRÊqö³Ÿá—¿ü¥0ß½{WfS&“#¨HöŽiÉÏÏÇÑ£GQWW‡ŠŠ -a­ŒF£ØÙÙ‘}.//K¶„(ÙÖÖ–…ÃaÌÏÏK0ÞÍÍÍMa;gé> a–––000€ññqÌÎÎâÞ½{èëë“l:o6³Š ˜ŸŸGnnî¡ò]–]3ëÏRy΢ÞÞÞç„|Ž¯±ÛFNNN" -I–‡}8$@dÁ Êëõ"cjj -V«@'OžDss3’É$†‡‡…Ôãñ ''‰DBJügff¤OhccYYYÂFÍj‡T*%@’Ü\i‰„€&ï¿ÿ>VVVdÎûæ榔ݲ|P/Úr*ï9\ËÌœP.)ڡѲ¯3Cº”SX~W³–jçq4!ÈÞÞöööÒ:s<¾>/SŸ¸À˜‹ õSó<ØÌY²%%%ðx<(++“6šÝÝ]S655…±±1LLLk9uˆH.{{ÉNn‰Tê`”äìì¬ÙÙÙBä‰D`³°±sÞ7ç*sD j‚G¬R¹wïåzXÕL&‡Fár¹ e<% RNNŽÈêð𰌰¡žÔÔÔ ;;‹‹‹’íîîF}}½èÝÄÄnݺ…ŠŠ -iµa0177‡±±1TTTàÔ©S(--•‘lwîÜA~~¾ônêõ‘ãäH0Jp…Áßìì¬ôÂýæ7¿AAA*++9(ºRÆÚ˜P¦(k&y™¦"‘b±Ün÷¡ÞJ3c¡õ€Î÷¥9­SZ.µhã¦eYó˜}=æõéûÀõT#ê¼Và U%KY¿Ö3žÕz@èo¾ù¦ôÅó3ûûûXYYA<GEEª««Åña;Î*×ÙY:kkk²^ôå¬î¼¼>.ºt=§ü/VôéRh­Ô=žçKP‹× dÝ›››…t+ -! -¡¨¨HJ‘9F0‘H ¨¨±XL*6GGGÑÛÛ‹œœመ››Cee%Z[[åTTTÀétbjj -7nÜrW=ñ† MN›J¥P]]-Sf8ýÉjµJ²‰2¨É É~ÿÖ[oáwÞÍfCww7žxâ äççãÁƒ¸pá>øàô÷÷£¿¿o¿ý6nÞ¼‰ññqITù|>””” ™LJ²Ãby8WžDÒ<À믿ŽÎÎÎCÏM˘Õj=DÆg®Ã¦|P–´¯cÊðpDAE¿ß«ÕŠ{÷îÉÄ€T*·Ûžž¬¯¯£¦¦^¯÷o¥eXéº -‹ÇÕÀ¶–½t:¥A» “*|Ogß)×”Yžÿ×~ ¡«´îR¹é1˜Ü¸iN"Ý3ÎçÀï#Ï=Üò³°’ €LX\\„ÏçƒÓéÿŒUIl‹ä~8 ‰d¹$]§MŠÅb’åd›í ýQ'7=ìv»p(íîîJ+ù×áp8pôèQ´¶¶J‹ôþþ¾L9K&“X^^–¶%¶Åb1„B!ìííIå)ŸYVVš››QZZ*\N¬Š¶Û탇ªÌq×ë•êÐÌÌL¼ûî»øÔ§>…ÊÊJ™¦Àç÷qA¼®”2«R´lëï™þPºÊ ®€æ¦q3®Ñ[:@ëcIå„iC ¿«oŒvlµF–#Eè —”” Kð© ÍŒLÈn·ê›_]]•u›››ÒkÆEŽ(‰œÈÎOæ}2ËÆãqqø餤RL¶,Á%jE$øîÝ»°X,Ò‹I'kuuׯ_ÇÔÔ”ô9Y­VLMMá£>Âúú:‚Á *++%X‰ÇãÂüFA&c9K4¹H`öfaaA”™O4™ó¨9×½££^¯‰ÄAßr¿egg# -áÝwßE8–j -ž§õf±” -Cº&äÑ­¦P²mƒåß8v옌è`5ä&É7:$Úèi@Ë°6”ufh¡e¿Ë€p:“¨ ¨v¼ÒeKéTZ,1š&ò« 5¿«¶‰ˆëM_³ ÀY,é}ôx<â6½½=„B!¼óÎ;¸tézzzÐ××'½W<Ç)§âÂé÷ûQSS#†hee‹E w"²V«;;;ØØØ€÷Áƒ…BÇÚÚ‡èh?.]º„ééix½^ƒAdffbggcccèééÁÜÜöööP]]ªª*©Z‰Ç㘘˜ ‚F€€Dnn®0ý assN§]]]8sæŒ\ÃÔÔfffPXXˆãÇ£½½.— kkkèííÅÕ«Wáv»¥E °°Pø˜ýgï©.çÕ tii)jjj077‡>øn·[ÊþŠŠŠàr¹ðᇢªª -eee‡ä ]­Ñksš–-¯\ûb± - 9VÚ1Ó:ª& L¹ >®þmj}Óixù:uWƒÕf9'eêû÷¹ÎPFMcLGgnnNÊ•···…Ï%##C5–šonnbssSª;,‹¬³¬¨â´…ììløý~qZØÒFî €ðz9–YJ·Ûd2‰ééi,..b``×®]Ãææ&ˆ=eõY2™”ÀÊf³¡¤¤ ¨¨¨@CCƒ£££R:ýóŸÿ³³³BÖùÌ3Ï  Êñ®®.aßg™(A —Ë%c?———QYY‰OúÓ¨ªª’uQ?+N[Еy”Y>£X,&ëÁùÉÉI ¿Èææ¦Ìˆþ·û7ÔÕÕ¡¸¸X¸DL@™ëÛSXNùÓ$·Ô öºªPû”U-Wü,GÍéuAÔ9ž—©“ ãÿSSS2¢—ç í‡Î,éÀL :`âߺ2Î Ä4èG½ç¿ªª*À7¤½ÉétÊÚÄà—½ÿl¹b&‘>3û7nÜÀ;w°½½P(„ÞÞ^¸Ýn¼ø⋈Çãx÷Ýw -…L&‘»\.ɲ’ ­¤¤‹EÚ žíîîÂf³IûB*•Ò?~¯½½X\\ÄÕ«WñÁàÎ;xï½÷033#óÁ™å=ö—¶$‘8 ‡+((ÀÒÒ†††ÐÝÝ/|á ‡È‘5èK9âÈ]ú,&`¤ý–‚ó¸ž'“IáCášÍñÂ|fÁ`ÅÅŸsçîÞ½‹úúzi÷;{ö¬È§žx¢+¶Òèv Ôꥶ)ÚgÓk9¯-‘H ¯v€ß×\Zר×ô!i{t"ɬJàyP÷¹¾ò ‰ÚÚZ#HÖÒÒ‚“'OÂëõbggGúX ºº¤,|eekkk…B˜˜˜1R•åo¿ß¶¶6Äb1äæ梳³SFú¼Çb±È5í„ia×¥œ4‚za¦üR1)»ZátFÔÌ2g ã~ÌÄTV:êLºR ž£y}é‚$½R­ìTþ½½=ŒŒŒ`}}]FñщÒå\yÝzšy/X^Ï…‘ãʘÑ!XÄóbŸ]2™”Òù††1ö;;;‚ô²­„•ˆD"Rééi\ºt ýýýÈÌÌÄc=†ææf¸ÝnX­VÌÌÌ`ppKKK2ÝëõbqqëëëJĘ•±ÙˆÔ8'{›››ÈÏÏG[[žyæÑs›Í†²²2ÔÖÖJUÀöö6úúú°¸¸(Î ˜ÚÑ`pc±Xàv»ÑÚÚŠòòr¼ñÆbØ9}dgg½½½ÒK6 Ì¢ RNL'†`­Ív0Ã^'Ê•’i'(›Ú ÒÀêŠýÀ˜:¦ ®v¼ô9›ç¯u›ïëÍ´of D0Ì<m`óòòPVV†þþ~™.£AºT*u([ÁŠ¶üü|±7‰DB¦¨8!õc€°¶¶&çË66–³onnbff{{{bsüíïïc}}]ÈiCÉ@xssS@q»Ý.£Óö÷÷qïÞ=ø|>TTTÈÍééiiï"€FÑÕÕ…¯}íkxî¹çP\\,#ÒÜn7òòòL'PAFkê÷ýû÷qîÜ9¼òÊ+6é{Nùå¢åFººœ·¡¡_üâQXXˆ_ýêWp8Ò¢An—Ë…Ÿüä'8uê‚Á È§\€h9bå›vþ¹.óVÆÑ÷ÐA9ÏŸŸç: ÷gú\<†€Mð[ë¡ 0»­¿gnf¯í‹ XhÐR롶ëZ§ “¤ƒýýýâ nmm £< ò¹0sèp8pïÞ= `£££D$ÁíÛ·166†ÌÌLi=ä¨Ìêêj=zåååp:XYY‘jO¶¿±ÿccã cå'u';;[Jô9r3`qq7oÞÄðð0JKKñÔSOáñÇÇÉ“'%ãõz҉ÅbBúI?Šœ,=¦owïÞ=üÕ_ý:::~Ð4ýMf¦eC~LÒ`._ìãÚK ÝzsòäI455! -!ãÿø…ãƒ>@ee¥s›>í$ê˜^³Í$b:_LÿOû¤ ºu’xXÑÀýi{£ufÇô9u{§yM¼ºº×Éõ8œXÕÏ”ÇfBáâÅ‹B|\^^.¾–®pÒª$Ùi·Û±¹¹‰H$‹å`Ä-åTê }€z:‰ép8äÙqÚAÏ¥¥%G PckÎéÓ§ñÄOH"¥¾¾^&…‹>...bggGü¶jÒ'äøAº³ '"•J!cdd¡PHxÛ¬V«ØÉ¥¥%D"‘CÏ—I‹x<.6Áf³aaaŸþô§Q]]-z¥õB¯ÇL+y1åŒÿ¤Ñëeºõ6]oÚýžÖmct|¡ nùcûû¿ÿûo>*Ђh,­ˆæÐ?à=¼wï¥7˜Á3ìºdž¤'ÌB¥R)é©'‹Å011!ãdx³‰ú±žÎ³V^.–©úõGéÌ£ôI“ìÙ×Ϊ©g féd¼û&0ƒGÐmqqQ2î,ÿ'h\ZZ -ŸÏ'™xÂüÏ*®…,AfY?uƒcaõ³§ƒÉê)¶æÐ~­¬¬È3\\\„Íf“`gooÇG L:ÇëÑyK$hkkË/¾(D€»»»2Óœíx¬vâ\æõõu‘!‚©T -8uê²³³e5õZ˜®*Cgìµù|>TVV¢¾¾ÇŽÃÂÂFFFñêØív)Kmii‘u´+¦³Æß”sÚ]• õˆ¾eˆ• fàApƒß¥ƒm±XÄY5A7 ‚™@žô--- _ _ç>ô ÿ6ƒJ½ 0òžè€_?/Þ']yL´ 644 ///^„Ûí–‘ÎÜ_8–J¬ŒŒ 444`kk £££X^^–€¹  @Æ@›žžÆÏþsdggãÔ©SxüñÇÑÜÜŒ­­-ŒŒŒ bmm sssp:Ò³>88( B*•Âìì¬L–!é'[Ãèç ˜œœDMM ž{î9œ9sFfÂgeeagg###xðàø’•ÉÇCs¶_z½^ìïïãÝwßÅ7¾ñ |á _pPûú7A0-[|¦úy¬5eV¦¿o³Ùø<·Ûºº:iñèëëC?&&&066†k×®ÁçóÉ” ­\.Õ IDAT+ ÄõúLÒí7¼6­k<7}­™¢hÙä= =1³ÿú8Ú.Ó¦éjíß™mú8úÞiùçq¹0~1on~¿¥¥¥øðÑJ¥<ârS$“IiSa%ØÒÒÖ××qòäI¼øâ‹8zô(<JKKQ[[ 2Ù¦­­MH4S©ÆÇÇœŽÇãØÝÝEaa!jkkÑÐЀ#GŽ  ¬¬ 'OžòècÇŽáèÑ£RµÃ–„D"!Õ4©ÔAU5IÔ9΄…ΉQ‚8-d{{[ì`VV–Äg{{{²fhd±X¤m°º„¿———ñòË/£¼¼üкø(¿‚ß3ý8­§Àa¿ŸûÕr¦}3<ªmK‡ßãké)š0l÷w÷MÀÜ™>…ÿÙôE0ÀfÉ:g!/--‰rë,ÉÄÄ,–ÖÚ>ú›››XZZB,Ãþþ¾@pÜQ*•’^“¡¡!LMMazzZ@„íím£¦¦FPKfH¸¿þþ~Ëø™ììlH)>Qæ‹/ -GF{È'°¾¾.s)+**àñx„ •ßËÎÎF}}=JKK…̆DRd…f•@4EEEü~?VWW‰D$HO¥R8vì***%ïëëÃúúºT(¸=—åååR4>>.H"²ï²Ê"//OÚ1l6fgg±ºº*¬ž±X ãããBøQõ;–ô©©)ÉŠ2ëÂ^°ììl©Lðx<‡k·°°n·½½½2b™ÛÌÌLaÇ-,,t3]C%¢l›Áp8cÁÍ ¾5⬳ö44fy™îã~2œf°bmÚˆ"›A>÷¡4îsvv?ûÙÏpåʹ–œœìïïË8¾¥¥%©Î‰Çã"³ÜËØN',–‡cÈòóóe<`uuµ’‹ƒÈ4™É‹ŠŠ$¨'˜GP*‰H92+¦i¶Vö‡2ƒÂ¾éD"©©)ŒŽŽ - &KÌ8î/‹áþýû°Ûíðûý°X,ÂoŒd¹}{{;*++‡qÿþ}™vL&122‚Ë—/c}}CCC¢ó$ìééÁêê**++‘••%¼8räÊËË‘L&•ëÀ–LSSš››±¶¶&òÆq;999ˆÅb8vì˜8‡fn®Ëú½éÏä±X,R"Î †–}-ÇÚ!3õúaÚ¾˜óûZÆÓZÿÓé„©_éÞãÆ’X–a§»?<ÇŒŒ )Ã|ë­·`±X0??/3¡ãñ8Ö××eÝà¸&n$¶,..z~~–ã1CÏÖö4ïíí‰ ø|>qèÉŸÁ`|,ÌÚoll`ccCf˜'“IwãñRÙÚÚZïE%8bµZqúôi<ÿüóhhhLÔÞÞúûûñ“ŸüCCC¸yó&fff044„;wîšïr¹`·vuuáÕW_{¦Ÿ½ÎÊk‡ØôKt€N±Z­Â½ÓÑѬ¬,üèG?‚Ç㑪–ââbœ?µµµ2ÉÄ >U²i+ümÏKÿê™:¥yd¸mŸ¨_ôba:šZ?¬V«”³ëàp cêœähB?¬ð~ðØZßø>å˜× ÑÐЀ;wî`ooOJ‰)—ÅÅÅÈÈÈÀÊÊŠŒäËÌÌ”d$Ûc?ñÒÒ^~ùeœ9síííX]]Å;# .`hhÙÙÙˆD"hmmÅc=&¶Š=ÿ‹^¯………‡Z"XÎì÷ûQ\\ŒX,†{÷îajjJüX,†ÑÑQôôôàý÷ßÇG}„¡¡!„Ãa„B!Äb1äåå ã8«2srr áñx¤åÎn·ãÌ™38uêZ[[o-L·ŽSFMßHû, „²”³ÊàQÇÒòâóùÐÔÔ·ÛwÞyóóó(//Ǿÿýï£êwÓ#t—Ö!ž7ƒw€ ò}¾¦³û¹>ëõßå9ë ‹ku‰ënãá¹é -î“rMÙ×:Å5ŒçI[JPØLñ|´MäÚ?99‰óçÏ i2ýMVŽ0¶X,2= ‘H 77ù—‰§žz -Á`uuu(--…×ëE @ee%rrrdye’É$666 ñôÓOãܹsxòÉ'ñÄOàøñãhkkCgg':::P__¢¢"™ŽDÊ8O· 26¤ŒÓæ0QX\\,vŽÜPL~ðgssStˆv¥¶¶Vüªp8,-¼Ï|îäL£`› ùŸÎœ9ƒêêêCUÄ’}Êï;Ÿ?ßãߌYu2MsIh@Nß'íš(z3r 6¥0ìÚQº‹¤ð§ðGm|orrwîÜ‘ryÎ Áø¥K—°¸¸ˆ£GÂçóáŸø„þ½{÷DAïÝ»¨¨¨Y‘ 8{ö¬”°ìacc+++ØßßGÀf³IɤËåÂË/¿Œ¼¼ÿùÏ£©© v»]A.ŠeeeøÌg>ƒ7Þx<ů®®F[[›T%˜Ne™X:dVŽŠ¦ åÿµ™e\g]µ›N—¨Œé>óqH£@Òe`ô>¸ñ^LMM!‰ ¡¡Aˆóóóáõze”ƒ -‚Z’M°ÙJÁY!SPP •/+˜™™ §Ó)sÆO:…²²2ܺuKJ±\.—ˆ1ðõz½b¬¹°¢¬¬ 555(,,”àczz‹EjÏ;‡¢¢"ÑËééiÉb.--I™4ûÛìÙívj±XÄ!t»Ý¨ªªB"‘”z{{qíÚ5”••Án·Ë딡¼¼<„ÃaܺuK€ºÅÅE©lÈÊÊÂèè¨L!áˆD‡Ãñ{(0~f=ȼüÏÿüϸ~ý:ö÷÷QZZŠ‰‰ LNN"Ò2ÃL¤6LédË Ì’2±¤ŒúeîOË°™Íø¿lÍÿïgL`@hºŒTïÑõÿë3Ôóüü|¼ôÒKÒ#F100€……É¢X­VqfR©”ôI’À•£ý^zé%ØívÌÍÍazzZÆÜêL’§Ñ‰ ߃ý±±1 ,Ø·¬¿³³³#ë.û­srràñxpíÚ5\»vM˜àY"I›\QQ!¥¡¡P£££p8ÈÏÏÇw¿û],//cvvV*^<ð°Ôsii sssøìg?‹¦¦¦ß[¿ÍçnÍ4A«Têa?'›Í†ÚÚZ|ñ‹_„ÝnÇo¼D"!#îž}öY¼óÎ;ˆD"xñÅ%ˆ!ð IÁÌãÓJW%¦½v3èç÷ß' ãçè'Pouõ€Î®k‚AXÓ€yßø· š¥Óim»¸ÆDÐà…^?F逋A pÐ*ÑÙÙ‰ééiüð‡?”€¾·lçä:´kY­V’hKXñyêÔ)477Ãápàƒ>@oo/ÖÖÖà÷û¥ ‡ãm™(ÙØرh‰Äù1ƒz -&“I„B!looK»)Ÿ_8Æää¤ØE«ÕŠþþ~´´´  âèÑ£8}ú´F+++ÒÄvºTê€X×ï÷£££(,,öt §™œ3×^ý )'´ZŽÒ[Úf˜òÃgÏJ?úq'NœÀ׿þu|îsŸÃòò²´Ø¼õÖ[2ÒZgÈùÜ€‡AéCQžuuÿÖ ›Ö9M°§ï‡–wÊ®¾—fe®Â¡<ëJ³ÊEë+Ixnü>?Ã{]¹¡×‹å!ÏHnn.ÚÛÛå9ñ¼˜Ìcå¯Y '/¯½ü·oßÆÂÂrrr°¹¹‰»wï -?†ÓéDgg'’É$Ž;&mÎ îc±˜Ü;Þk ôéþzú’¼?¬x ¸fµZQSS#-ýýýâ îííIU©Ý~@F¸½½ŒŒ 8Nlnnb}}>Ÿ999p8’áßÞÞF~~>òòòd?œÞQUU%¼1ä³"ÀÍŠ²ô‡ø/ÚWÒë¥æüÒŸÕ€ÑGÅæqô{f F,Òí8QÖ -ü¨mgg÷ïßGOOÜP.vD„677ñÕ¯~Ç—ŒzfîhH Fa¶Z­BH¢àÀùc™þÂÂÆÆÆ„È€ ½999’éòù|ˆÇãƒØÜÜÄøø8rsse¶&1Bùùù¨¬¬DCCêëëqéÒ%¤R)iuØØØÀÜÜœŒœà\röÒƒAóDÁ]ZZÂÔÔ,‹0¹%L¥R¢xEEEðù|ÈÊÊÂþþ>\.êëëQ[[+½>,KÛÜÜD^^¦§§e†;{·>ùÉO"++ ãããX\\€†Ù£ëׯcttÁ`P˜ ŒajjJ6—Ë›Í&½­«Õz(Ó£?§ƒu"kgÍüѺfîGŸ¿.ïÑ×Áàœ‘HDÆArl‹ž_Î@Åj=`³ßßß—1Eú˜YYYÈÉÉÁâ⢔`edd`}}½½½…ßï—²µ@ €û÷ïcvvVæçÀ‚dEóóóaµZ%Accã¡Ì)¯‹ -011dò€ä†å÷ÌXÂoµô‚Ñ€sT <¾n±T5ÙåÂ/^Ä7ÇñüóÏãÔ©S(((ÀÚÚŽ?Ž`0ˆ¢¢"ܽ{?úÑ022‚W^yÏ?ÿ¼|ŽåÎœŒÑÓÓƒ’’ÔÕÕÉh¬ÝÝ]q&¸6ë’ÇÆÆF¼úê«èííÅÒÒ¢Ñ(jjjpõêUx½^455 í&™$èa–ïSçÒé€þ,噈è÷Í ÍÔýºvbõgÿ/›ÂϘºa_ú=mpÍ€GŸsºJ¡GTê;Gã]½z}}}X[[†qÎb&ƒ<Ë° ÚÍÌ̘²··‡¢¢"444 77yyyB4HJ:*\3YòJî:̈p¤SII‰8Œ¬`! æÚÚºººÐÕÕèééAOOZZZ°½½-ÎV*•Âüü<^{í5twwÃáp ¿¿ï¼ó._¾ —Ë…¯ýë8qâ‰ÆÆÆàõzqýúuá˜á¬÷ýý}„B!|ùË_Ɖ'¤bB?3{‘.@ÕÏŠr¬Éé´W\\Œ¯|å+èêê¯ýk© ¢?øÁðƒüÏ<ó ^yåœ;wNZðx,ÞsSWtu˜Ö_-ï”ÉGg¦-Ñû&È£LÞ/Êÿ×Õf\C4·'hStÅ®šãûÚNšçªmÏÇ×N´ÖN”ß'Ÿ|ûûû¸|ù2æææ¤B€Øàa¦:‘8ÛÊàfii ¡PŸúÔ§püøqTVV -9óÐÐãþýû())AEE²²²d -MQQ¶··ed-GRgff¢¤¤ÕÕÕ2æ“sµµµ(((Àòò²”ZŒóù|øâ¿(Õ‰DB¦ìíí€TU666bmm n·ååå8zô¨Œ•e«Ÿ‹Îx? -¸1ƒT>K-£” «õ`rÀþþ¾ðUèì¼~nÜá¦{æigNž<‰7ß|×®]ÃÿþïÿÂn·ÃçóabbBFpò¼pé–AÝW¯6¤,àuóó:©cúqÔÓÏ¢žñX\“ ¨SæLàkæšÄ`œçO¿V&Ú^êÌ.÷Ï÷É™âp8ÐÚÚŠ'žxB¦ÕŒ ¬ÝnG$‘ï0Žš››C8F}}½ø;[[[¸qã~ûÛߢ¢¢Édxÿý÷¥= ž{î9™ìÂë`"ýN]áÇkã{\»h 4ëª.«Õ*ã/¼ðººº0==ááa Án·£¨¨ÓÓÓro40ÍXèþýû¢+<î—Áx2™”I6 - ÊÊÊFÑÖÖ†ãÇËXužŸ–5Ó‡Ò¿ÖAóo-ÏxM2íæš®õ_ƒÎ|ÏÔ[ó\ùÛn:qé…t €vUÀ“ k%‰°ˆÔ²”~~~/¿ü2^{í5aë60³üBŸ·vêxcËápÀív£¦¦uuu¸~ýº°Ü¯¬¬«q2™”l\QQ***dú@oo/®\¹"lØ\\<‚Á 82Õž¬–±XL2.l) ¿~¢UÌÞŒŽŽÊزŠŠ -ddd`uu÷ïßG(B}}½Œn"«X:66†œœ455¡¸¸«««˜ŸŸÇƒL&ÑÒÒ‚ööv444àêÕ«˜šš‚Ýn—’::4Šn·[²8õõõ2«÷Ö­[p:‚º‘ɳ°°PΛ¥à+++(..ƃðOÿôOxõÕWÑÙÙ ·Û-è‹ÊÊJ|õ«_Åùóç‰DÐÝÝ-% ôØGm:g,³1'íÀð5¬sÓA4{ÃéˆiŽ²Èch½Ðˆeb:«åZ;vzK(QÌE×Ü'Ï‹3˜Iಹ¹‰[·n‰gdd`kkKH‘Š‹‹ át:‘™™‰‰‰ )ef[NNNŽd¡333áñx022‚­­-ܾ};;;hooGNNŽ<ûÍÍM,,,H€“™™)cû¸Ï……ѽ¾¾>ÌÏÏ#??_ˆïîÞ½‹ååeq H0Ér2«õ Eˆ‹!÷m6›V² ¦¦FfÉ&“I© I'ûþ‰>³%Çb±  -áÚµk€šš466Âï÷Ë$@ ¿ßÍÍM ```ƒƒƒÄêê*Îœ9ƒ§Ÿ~ZÆðð™›`åæìÙ³øö·¿ù—Áúú:ššš™™)ã˜þôOÿmmm¿×kGg‰z¢ðûA†îƒ×%lZîMùՆɔ_ÝÇf~ΔßtA´k#©í€Ö%ÓyÔX:À€÷†û×¶Í 4µ>Úív”——ãرcXZZB?nß¾’’-¹~¿¬Ìl}±Z­X[[Ûo¾‰ªª*qØçi±´©Ð)a/£Ûí–ª‹ExH.KJ:@EgÛãñè{ýúuƒAtvv"‰àêÕ«677£¦¦ÛÛÛ¸yó&Þ~ûm\ºt Ï>û,222ÐÓÓƒ‰‰ äçç#bnnNÚŠ8»™¦ºº:|æ3ŸÛíNlèA+ôúªmx›Á©ÅrÀ«qòäItttà_ÿõ_å¾<ýôÓÈÏÏÇÔÔ¾úÕ¯â›ßü&^{í5M«å€ f0­ePë7Ó¯Ò&m‹ØÀgªm—ÖAÓöp´9Üo:ÙÖvŽïiûd^uFL9ü¯Só(è×µ>¦R)ásŸû:;;ñÞ{ïá·¿ý­$}âñ8ü~? - - -¤t—vv6’É$ - ñâ‹/¢¾¾©TJ8]*++ÑÑÑ¢¢"ÌÍÍavv£££Ò–È ›sÒÉã‘£GâìÙ³ÂEÙb4«¹ÎŠÝ ¸îóù„C‰ÜVœþ‘J¥¤‡ tå«cé7êl©^ït›Ï]ë’¶Rtň Ú4âçèG˜k©® à>tv»»»íííxòÉ'Ñ××à€(zrrûûû(,,p‘z }xí÷h¥Œ›6‰7Ï›f~GÇ.fàÆÿu5¨ÅøÝV õœ×¯¹.Ìêƒt6˜ºªí•ÕjùÐm‰D.— §OŸÆ½{÷`µZe|^,Ãüü¼TàÍËË“2úíííCשFñxÓÓÓH¥RÈÌÌ”1˜ápssshoo?š×F›®m3yÛ€‡ -ú^1Á©'`p_,åohhÀã?.•bSSSØÙÙ‘6! Žs¬°`R7##ÃÃÃH¥R2Y§®®ÂqDŸxxxápmmm(++ DWh9b¼¢ÝF¢õGgÿM×rÅ}èµZƒkÚ'áý¤.j;¨mÖiµë“0 .7í(™ˆšn^,¢6 -Ìò³? €íp´…FŸÓ•d›¤…M#ÌÜtF”}ëŸøÄ'ÐÜÜŒóçÏãÃ?”ÒŸÏǃd2‰íímܺuK²‡,Y[[d§±±­­­‚f±¿rddñøÁÌn¶ -loochhH‚þÑÑQX,ad‘ÒìêêjX­V!ÃËÈÈ@YY***H$°²²‚ÿøÿ@2™D{{»,¬}ùùùøéO*#PóòòpëÖ-üÃ?ü¾ô¥/á™gž‘Ö3ø0ƒÊlº¬‰¹™ÎüÇmú˜éûC6}¦àöqçÈzbîCƒÄétÎ ú?nÓŽs0Äk¯½†§žz -ýýý¸{÷.dLk8Â"Nš Ye´  ³³³‡ÃbN§Ìg ¬Ð\ÏYÀÍn·Kƃ÷’ëI÷@°å*??KKK–ifŸØ“¼¶¶†'N`ff/^ÄíÛ·ÇñÔSO¡¹¹ ˜•~·Ûp8 ‹Å"N¥ÓéDii)®_¿Ž×_mmm‡2ÂæóÐŽ9pØaçÚi: zcV\߇D"ŸÏ‡sçÎÁëõâ»ßý.ÆÆÆPZZ*•OgÎœÁ7¿ùMäååáóŸÿ<ŠŠŠõìêc2“ý¨5Yë®tÐÄkÔN÷a‚ÀÚi4A<Ô` ð°òÄ´oæ=×Á~Ý|Oë’6)‡:†Þ_ ¾èçf×%4ÚHhEÖJd¢eZÌ÷ôÃeÉÇÚÚòòò„¬Åjµ¢²²ÿó?ÿƒS§N OºGßpð›È?£3IThf¥KJJpüøq " -akk ÑhTÐäø|>ìì숳”““ÂzNöåõõu™=Éñ3Ñh}}}p¹\¨­­ÅÞÞ¦¦¦dldžUýŽ5<‹!++ CCCØØØ@II ‚Á jjjÕs:ÂpÎ>d‡Ã!¥À'Nœ4„~n·¹¹¹ÒöÀ6¥¥¥ÂÀ’/§Ó‰'N  8 ¨b‘xà ÷N³h:dgg 1cFF*++‘L& ƒH$())AAAô^sžíøø¸LøÚ×¾&Löìäç磵µÿõ_ÿ…wß}N§«««…B(,,Ä믿.ü4&T8­d¦4±þ ÏÍù$*++¥}Ç äYݦe^?> ½Þéʘò³\³ Â3¨Hüèj h9Ñ6†òÀl´ÍfCyy9nݺ…k×®all {{{øÛ¿ý[‰ß¦õZïKûg´gºšAû^¦}жIÚú^Q?ô¼uóøétHûzét–ë“_ü~ffæ¡i º½GÓdÙÝÝÅG}„[·nÁårI{nn.b±VWW¥]†-©ÔÁˆ¿sçΡ¼¼\ž3σ\JRið°U…ÓÐÒe–u†š2Ã{C96[2¸&è{¢å‡Ó×a¢Éãñ »»[ZJ{{{±ºº*ÄÒ»»»X__—L>[Nž<‰Ç999‡ÖO蔇ÃÊÊJ©àkii‘礃qÊ ×5Óïç½1}~½6ꬼ­¨e‡úÅ5Nƒ éü_Ÿ‹^£M ÞÍ5Q½™ÆB/úàÚØZ­s………ÒïD‡•£‰¬V«dÝ´ú¨ÀKxä˜7FX½ð1ÓÞÞÞŽh4ŠÍÍMÌÎÎbll £££@VV–ôqòždeeÉlqöt²§‹hUUUÂ[À œÕj•òâññq×ÁQ—Ë…ÒÒR´··ciiIæ³sL K49~iggçñׂb"q Êõ‚E!$Y,33^¯W*H<ÈYº©TJ€›Í†7nHb±´1I4? 8,((£‡1>>ŽT*…ììl!Säx˜žžD£Q|å+_Agg'<,d………8qâ¾ño ··(((@__ÊÊÊðꫯJv•Î t/µ¹QÖ)'×2§3¥z#8ÂÅ„ÏFÿh§‡¬Ù&Ñ zÓÉÒJ® Ћ¬VòTê  xyy‡»»»BNNÊËËe´g±þÍßüd@¼^¯”6vww£®®………8}ú´ÌfF?"‘ˆ}ÑÐåÍl`Ér<Çææ&z×ïï=gÏîμï}où”çSî綵¡«« tUùkkk±xñb>|ØU°‹‹Caa!fffÜ~ì;v`ÅŠ(,,t Œõ-ü~?víÚ…çŸûØÇpéÒ%ìܹ·Ýv¦¦¦œBEss3RSS‘››‹Hd¶~ÁîÝ»±gÏwRÂòåËQPPà¶ãP^VTT¸ ¤††\{íµøÑ~„  ££Ã¥¸=öØcÈÊÊÂõ×_ïhߦ3’Æ|>Ÿ‹ «|%]Sž[c@õ"i‘í¨2ŸËø·é¤Úf(rÛÅÔ°ÒzÖ ‹F/§ªNcT¡«±333ã¶éùïseæ0bEùÊÈ åOrr2ªªªPQQáê×ИCww7:;;]6£,LÿeÊ&Z”ƒƒƒ.›…Î5:¾ºººÐÖÖ†††¤¤¤¸ôæ––—M011ájZ”””àÀ5×\ƒüü|ìر[·nuûI»ºº\5è´´4´µµáƒ>pg™oÞ¼W]u•ÛârðàAD"¤§§»±§§§»Z###˜žžÆªU«P^^£³m -9邼¦é²333î3=²ozzöèØÑÑQW4JA©Fôø®+Vàßøž{î9<óÌ3Nþ±"üO<êêj|ô£ÅÂ… ]°BûGÙ¯|Áï‰iHiTÌÄ祳QM¯šÙ Dþ¯ø-‰Äœj |©Q^ ru,œ+½W·:~¬Ôvù7ÿŸœœtÛüˆ4 Ã1©ÎkiiÁ±cÇ\ZÿÅ‹^‹F£î¤!Êݱ±1¼ÿþûhmmui§§§±iÓ&,]ºÔJ:‡ÄŽŒà‡B!´¶¶º"cÔM &E£QÌ›7Ï9ìœsŒÉç󡦦ùùù¨C€ÛBj11û¥rŒN3´k®FœgZ[™GakÀ(¦R^& ¿ÑàZ½z5088ˆßþö·¨¯¯Ç½÷Þ Îø¶Û€5EÜ:’ø­e@º ~˜˜˜pÇ‹*Ð9Á9÷ÚöÀû(3l€Ò:UÔat0«;ˆX³GÄ‘” txÔ××cÛ¶mHMMÅðð0|>ŸÛ>;66†ÂÂB§ÃxDeSS®¹æšc;‰¸Ìè––§›(»9î ¸*ùÊ÷*ƒ,M‘®,¿ª£”*5¨)§˜…“qt§‘••…yóæ!55Õe•1s¦««Ëmuf`sÇŽÈÍÍÅ¢E‹‰D\+M©'¥¥¥¹bºÌ@àûý~çTŒÏ1«ƒ„ôA,Àw0Ó‰„Ïp®¸Îj/ó¦µ_J‡t(c;œC~6==8«.”zâíÿêiÐÿõÒð¦ ÓiiiAjj* - ‡>|õõõ®ù\é™|¿zõy©ã@=˜b 799Ùéååå.¥½©© nÑÚÚÚpàÀW‰ûîéåbÕô`0ˆÌÌLTVVâŽ;îÀää$:„¾¾>$&&báÂ…®˜S²³³³QTT„ÄÄDwŽ:£7ìw8vóÂHªU¸¶L ä¥éSvÝ0”8'&&œ7ñüùóèììÄÉ“'qüøqäææ"''ÇE>/^Œääd àÂ… îø?‚@wéÒ%w”Û… F]ñ¥@ à*Ž.Y²ãããøÛ¿ý[Ü{ク뮻œ$cÁ‚øö·¿þð‡®¢|jj*öíÛ‡uëÖaþüùW¤+`ñòÔq>HúÌŸz©óI+¹j[^¼C!¨àHŸÓÿÕ˜Ñ}®v‘¸`þüùèíí…Ïçsûrý~¿+b‡Q__öövœ>½½½¸å–[PSSƒÓ§O# -!%%Å¥Eso~¡PÈ99âYÑÝÝݘ?>QQQáj >|yyyˆF£N¾âܹs8xð FGG1oÞìœÓÓÓ®^Ààà fff\”dÞ¼yîX'ÖâX°`*++]„†§´ŽFGGc[gFGGQYY‰{î¹ÕÕÕ(--ué’4Fø®¼¼<Œ¹fÁYñ‡,1ðû÷ïÇ[o½…—_~ÙíQ]´húúúpöìYw4âéÓ§1oÞ}===(//Çøø¸›+Òë;1ý:.nö4™‘‘·ætÚF"³[Jy´4R­­­îTööv\wÝuÈÈÈð4¦H[Üë­EÃh0øk@Žü¡*^ì' f¿ÿò)%¼Ôñ¤|Cg£blmWe¤ÊrŸÏçŽÐý‹¿ø ¤¦¦âõ×_Ç?þã?¢¡¡uuuWÛ§Y\{íÔQÊš}Cç€Òû«sÍ{¬üg¿ÈÃÄÔª8f¥Y~Núá\kÀNçM«S/!!ÁÎ,X€ÜÜܘ¨1 £3K™}‡Ã(--ÅÝwßòòrwÔ+É ® „&Ò‘ºvíZW]ø”¹tZs=fffb2g¸ŽÔ“ºµ…:Q:ÿ|žøïĉ8}ú4öîÝ‹Ý»w»ìÎ-[¶ ''éééÓ2c"??o½õ6n܈ÔÔTW³Je -ùª¸¸‹-† °lÙ2·œ+ųS€4j·npŽÔ ×€²Òê$‹—HÃ\o¥/½_yUí¹ڋ³³!/%nþ­b¯K= hhh@YYV®\‰îînœ9s}}}àR-Zäölx1ÛÕ~è¤q`ú[…½_ªì¨È¢ÑËiþ܃¯é0,Ø744„h4ê¼Cün``CCCΩÀ"j¡PUUUnï`VV–S–Á`Ðy{(xÕªŠ -O#H\l*zÞ«‹¯i%:w$–øøx$''Ç©¢¢"TTT¸£ãrrrpüøqôööbbbðù|X½z5ŠŠŠ››‹={ö¸íL³.//Gzz:&''122âŠÂŒŒ¸HïÅ‹Ñ××ç¢F•••øýï7Þx?ü06oÞì"W‹/Æ¿øE|æ3ŸqžÀ]»v¡½½ ,ˆa -FÛ9O\weαWÛQƒÇòœ? DÉd:ÏJ»ÄÊÈÖ°×þ©Ae/Uºj$©²ª¯¯Ç† °uëV—ÁÊø‘HÄEF¸·²¢¢ÂñbZZÊÊÊÜ‘TêœJJJBuu5Š‹‹ÑØØèRŠi0_¼x.\ÀÅ‹1>>Ž‚‚”••arrÒEdx$g^^€Ë‘Uò-‹GF£Qmà -RÆÇÇ£¢böü䎎D£Q´··cxxçÏŸ0kðOLL¸¢‡õÔS8}ú´; 窫®Âš5k0::Š¾¾>Ì›7¹¹¹n[P$Á¥K—pðàA\}õÕ1Q/¥KÕš¢L¥!3¡R™ªF'ÿ'eåëåË—ãСCøÁ~€žž$''#11›6mÂèè(~÷»ßaõêÕ(++sŽ*ö_£¨¤?kä3­TZÌŒ<\Þú¢ºAÛ¥œÒ袆ºmŒ*üŽ:J#ÞsÉ &­ÎRLÆyàúªSÁÊ / ªÏ+oëZjt¬¹¹»ví™3g\q¯ÒÒR,\¸~ÿlaØýû÷£¯¯EEEèììtY”Ã}}}(((p‘a«¿§§§Q[[‹O~ò“øû¿ÿ{—=Gƒ.++ Î!×ÑÑþþ~pÛLûûû]fBRRΞ=‹ŒŒ ƒÁ˜1©1Äû•ÆU&R&ñ7×ÚÊ^¥A®SFFFŒüeJė̶ñÊaßC©îà=qqq¨¯¯Ç¾ð¤¦¦âg?û>ì²û´êôÓL¥Î·Uy¥ï+­’tù>ÝOÃŽü¨Îµ;”V­Ž¡üa;¬¦6m$¶­Ù”===xõÕW199‰ŠŠÙÂã'NœpÛûúúô÷÷»º@ƒƒƒøìg?‹¢¢"W|]õ0ëOp«Œß?›­‰Ìnù¥³—Çn+}èüÑ @‡ W‹>Óa£N,ŽÙAFww·Ëîanû¤ü+))ÁÄÄ„Ë0çQ€ÍÍÍ8|ø0¾ýío£©©)FîX§ëÓUTT¸m˜Ô§¤3 ¶®‰f&X™iIj€ëvk³jP›viÐÒ±Õ5¤5¯¶¸ö1Ž15V,«'×25h¼.vŽç_çä丈£T,Á)ŸïÊ´k¬r°ú^¯~zJÚÂ*AŽ¸@999¨¬¬ôlÏöOZqq±&^ó£ÄÅÅÓè=…Xõ6išŸ}¿ -,ͤP/h4)Jb£~¿ßíg­®®ÆÒ¥KqäȼòÊ+xã7ÐÑÑ7Þx6l@yy9rrrÐÕÕ匧ââb,X°(Šsüøq´··£§§ÇyÕyþu[[›«WÀS-Z„ƒâ _øÆÇÇqÿý÷»‚Œ øÎw¾ƒo~ó›(--uÅ ¯¹æç©ã¼¨SE•õ4Rá©’åí -^ ¸ôý‰‰ TUUáÚk¯E]]Ý B£ III¨ªªByy¹Û;Ξi|þüyÐx"Èàà :„ŠŠ -ÄÅŹêæ‘HÄ9ˆÉäö—ÜÜ\—þÎ=‘j<ŒŽŽºLF Þ••å¶÷äçç; ÄââfOÀHMME~~>¦§§Ý1¢wÝuî¿ÿ~ ¡¼¼gÎœAFF.]º„ÁÁAäää8Å̺çÎÞ={\aܾ};Þÿ}D"äåå!-- —.]r)ß<Ú³»»Ûe>455!!!­­­Ø¿?Ö®]ëý’%Kðè£"ºb™Üb -…ðïÿþïxûí·ñ™Ï|×]w]LäÕ+z­ÊIÿVI¹Éçt¯¢¥QKëV[ð¤í©sÌÊ/5<¬nÒþzõÉËPàluŒîeU‡ˆ}?ÿ·ïâxù»µµ»wïFQQ&&&pþüyüÕ_ý|ðA9£ihho¾ù&þçþÇÔ´´4”——»ýêäuÊÎC$2[ŒRç‹ŸÓ! þž7o–-[†ï|ç;Î!¥u>y¡1ì—[n¹Å9$FGGÝ´èïïGss3ÚÛÛ ñÚk¯¡ºº·Þz«ËÂãÜhueöOSÄê:hê/ê(×µR O¹Í @ €µk×î¼óNbþüùî8Ͻ{÷âÝwßÅÇ?þq·]iª«5Ð@YEçéLÁ£:‹ærx1ÍSû#ǯxNS^y¿¦kÊ(å /uRkD9...&+GiLùBÓ­µ] Å0Ö±À¹ãE§‰À'OžÄW¾òTWW»*ýeeeîøæ³gÏ⪫®Âm·Ý†²²2ìܹ>ú(jjjÜ|œ>}ëׯwÀµ.ßïwÅV‹ŠŠèróïjGåää ¶¶}}}.âÏmxÔa###ˆF£hnnÆÈȲ²²Ü¼¶9VµÌÿÉ»¤®9 2®‡¦µëZqν¶FÒé®ôÉgˆwH?Š5ørÖɬ´QYY‰{ï½ÇÇo¼‚‚ÜvÛm1F:ÛâxUWX¬f³j¬NR¨XY1´ò”:ÚÔ)£mðR‡¤Ž™t«Ûv,ý*©NNHH@{{» Üäææ:¾åLNNºíÁ¤Ó‰‰ üùŸÿ9V¬X#{¢Ñ¨«9Æcг²²Ü)b~ÿì–MÖ=ñræY:R»QLj)/ë¼ó;­EFqôèQ<÷Üs8qâÎœ9ãŽÛ w´Áã™Óßßàî»ïÆ·¿ýmw¤ùD×…kË Nn'SÝbÌV׫]å#ÿ:fŽMéÇ ï+¿Q‡if…Ú"s Ug”åA¿ß—»1JÔúý\¿€¾L\hFÁx¯î‰þcï°‹ cðòê÷Ò÷k›ÜBãQ¤ÞO%¥Š‘c¥`Uci®qQ(Ù>Sزïê¥×"–˜”xH±eX îy©÷Õï÷#??×]w–.]Š‡zmmmèëësç‹îܹÍÍÍX·n‘™™éöýwtt «« ###.B™™™‰`0è2B§¦¦•+W"ãßø&''ñ‘|ÄGºnÝ:|å+_Áüc¬X±û÷ïÇí·ßŽÌÌLÇ -V¬a¯@R]k -e›6déÊ®§®ù\¼eÁÒŸB÷z©1Äöø¹*Ò'k%¤¦¦b×®]HOOGmm-ÒÓÓ‘ŸŸïæ‰G¬ÀÊ•+ÑØØèÒË”6tlê@ã'`¶hf^^–.]Š¦¦&tuuarrííí(--Ekk+Nž<‰E‹azzgÎœÁÙ³gQTTäö8ççç#!!{öìq{%ûûû166æ² ººº°lÙ2ÜtÓM®XS4:›rÏ­9~¿xë­·pîÜ9\¸p~¿™™™ÎÀceô%K– >>;wît)ÿ ,À²eˇñÖ[o¡¯¯ï½÷,X€ÆÆFŒŽŽ¢££Ãs¡¡!çPá¾½îînçô,++sÎö9 -¹í‘ÈìÙ¼ëׯGuu5jjjpþüyWU7Ý#^^^ŽÇ{ O?ý4¶nÝê¶æäää ##½½½øò—¿Œ¯ýë¸ï¾û––SçÂKÙk.:&Msg¨Øç¼>ã;(§-m«‚£|VÇ‚uSvé=l^|¨ÀÌË¡§²R?×wq-É_½½½N6…Ãa¢¯¯@__Ÿ"IIIŽ.è >pàŽ?îhTç_4jTs>tÔ9A=ÎfíZµ -÷Üs>÷¹Ïaùòåhoow†? äÖ ¿ßGy‹-¶mÛÐÒÒ‚ .àüùóÎHŠFgOö œÏÊÊÂSO=…øøx—NO€£s¬zUçUïÓ5ˆDf£¹Å -â­Ìâ¥éæŒæNMM¡©© [·nÅ¿þë¿â¥—^ÂÒ¥K‘€µk×â…^ÀúõëQYYé -1—Ëj¼ÐxWG½F‰¼èSq!ŸS 4ÌùñÂ1\{öe®K1… pNZuŽY^àgJÊÛª¯,©·Fûùóçã/ÿò/qéÒ%·½íìÙ³hooÇàà «uÑØ؈©©),_¾kÖ¬Aww·sðt$Ö.Ò4m:§§§‡]& kq¹Ï7›Y__ÜÜ\ cûöíxùå—ÑÕÕ…ššÁŒ‹‹Cqq1>ŒP(äêø±Ñ>•ÙÖ¦ü¢s©í(.Ðû5sK׈÷‘~l Åòe$‰‰œªsU ¾™™Ô××ãá‡Æ#<‚}ìc1Y^|^E*K•þmM •Çc©°¼ÅwsÏ?i €Ë¢"ÿZ Í`¦:©õ^Ê7uÔw™½ }åšMMMappÀl!õ‹/"##ÃÕÇ¢³‡x‚ O}êS¸îºëœì$ÆPÁº IDATÀ`åÊ•ÈÊÊÂM7Ý„“'Oâ—¿ü%RSSÑ×ׇúúz×_f¨§ÒKùq^t-4Ú —γ][]÷¹xÇKù(ý1Ú×uÔ¶,Oéx)pëëëQPP€Í›7#¸‚'Á«•sß"UÒ^t£…£Ñ¨;#-- ÕÕÕàjMh¡¿‘‘œ={6f‹P4:{FtVVB¡B¡rrr\a¾ªª*W𦠠YYY1Tf°lÙ2,[¶ —.]™3gðÎ;ï¸÷µµµ9¾ÊÎÎF^^ž;ÅÆÆÆpòäIw&;«³Ž»bn………n,iiiÈÏÏG4ÅñãÇqîÜ9 "))ÉeFÅÇÇ»½ß<ΆÈ1==í*ÿæææº -î×㜗••áŸø„3¼‰åöŠââbüà?ÀÈÈzè!—‘`ÁÒ\²UeË\ôhe yÁ«-/žP‡¤*<ò»¯Ûï÷_áÀÓ¶UžÍåŒS^µºÊ‚K5˜­<˜‹ÿ|s'Afbb"ž}öY<ûì³®ª1÷ûý³éÀì)©©©øõ¯íŒE¶slA¯ŽÁöüMC÷ÏþìÏ°}ûvw a]]süæææºÌ‰‰ \ºt {öìÁ¹sçM¦§§ãðáÃHOOg(õ÷÷###O=õŠ‹‹±bÅŠ˜mz -¤U÷©A¦—¦ÓG£Ñº&µko YfÚQnMOO£©© EEE())Áïÿ{,[¶ ÉÉÉ8þ<^zé%|âŸpÎQ­älu‡Ò ûÉhš×V1]CŽ}fº‚|GÞÓ¶x$¯F‚xiDO?¼O`ûº'X£¿Š©Ô)8¿«ž´s¥Fu’¨SÂçó¹ãÉÉI'7“““]1Ëõë×£´´ÔÕuÈËËÃÊ•+±eË'S³³³ñÞ{ïáÂ… .L·wP‡r‹Zaa!ÚÚÚÎ:ÍvíÚ…Ïþó¸í¶ÛÜ3<vÑ¢ExõÕWñÒK/¹Óh"‘ˆËþzíµ×ÜtªèœÑ%í[½ËKçPÿVœ£iÀœ[}Þb -®u -#Á^2]Š+IŸä+òYSSžxâ \ºtÉÕ -"[~'_)M±lW3ÇØŽM¹×1ëxÙ¥k¾“'Hp{ï×ȾâJö‘󡵡âââ\±;öôÂwÇÅÍV°ï½÷°{÷näää`ttEEEƒHHH@AAúúú088ˆ`0è¶qÞ{ï½X°`AŒÎ¤Ïg8ÇÀì¶ê>øGuy§§§]­H*++QSSãŽH/--Eee%JJJÜ–•±:Ê+>ßl–Oeb`Å}È{½lNË'ÔA¬¥¤N*ûn/'Š:Î(K½ð™å_{ñ HóÙ8Uù|ˆÂÂ>4×K¼<»^ÏkJïµé :¼¬±‹Éçídh£:T8j$ߎm©¯}Öû­2·† 5 -µŸ -^U¡sîøŒî—Ñ9Òß|ÎöQÇ®m+cÛ{X©!@C¬  ~¿ßvcccDYY–-[†#GŽ`ttÔ Õ¤¤$äçç#99}}}®ÉØØúûûÝWÌ©««Ã… pß}÷áË_þ2î¾ûn”””`íڵطoŸ+>Çõ%àáük$ÈË0.ïÍQÐÉçíU¥ pX°Í5Sz°^T5zô3 vO©Ulº¶:?ÇfAn$2[å•Çoy)q*:¥c‚ú™öKçÂzN ú|>w|dnn®§ßïÇÒ¥KÝé\3‚'S¾È·6Bfwêù,,,DII –,Y‚uëÖ¹"žCCChooÇ›o¾‰·Þz Á`Á`ÙÙÙX¼x1.\ˆ‹/âƒ>Àùóç‘ììl;v èêêrçó¾óÎ;Ø·oRSSqà 7 ¡¡o¾ù&víÚåŒ>Ž½­­ HLLÄÐÐK%eaPèîîƻヒ„„¼ÿþû8wîÊÊÊbÒófffPUU…Ç¿þõ¯ÑÙÙ‰üü|wªGBBî¼óN9r?ýéOqÛm·¡¾¾>Fn†è©×ý’¤ëmV:祺€ -_Óç纼”«n¿±Ž{i¤)½œ*KÀ©Æ2é‰üD0g‹Z]¨Ž—÷Ýþ­`˜´[__Õ«W£½½ÝÕHY¼x±+øÑÑQtvv:'SÛ022‚ŸýìgĪU«\ú°‚0/°Â>Ù´Fx–––âöÛoÇÛo¿íÎfÏÏÏwQþééi´µµ¡¤¤Û¶mÃÌÌ B¡+ˆ–žžŽÄÄD·ß™'a0zJ9}Ï=÷àÉ'ŸÄÝwßíŽsRà¢s?WǤ§7èºY£QK{:7ÓÓ³ÇØ~õ«_Eff&ž~úi¬\¹)))øþ÷¿… âšk®q÷Òáàóù\ÄN¶K‡p¹â¿.ºvÚwöÍâ]o/cZõ A(u}@Ì(GiÔ¢lª+m„^ùTû«… íúq½hÈñýêp¶†éãôéÓؽ{·s¦ÍŸ?ßEôX|Ny5%%K–,Á~ô#¸ªü°mÛ6ÌŸ?ßÕ¬PlnnÆ{ï½ç²Dô˜°™™”––ºã79Ïiii¸æšk˜˜ˆmÛ¶! -9c - - -°eË455aåÊ•1kÊõ¦‘¦rV l/l ø^çÖlO#Û:Ç”ü\iÇâmÍjQ]ßÁçu½ùæ›±gÏž{À:9Ôq¦²_qï#ßèå%+óô-V§|D¹¢i×z¼®ÚÄÁ:ŠOÔÆQ ùÂï÷cll ‡¯~õ+tttÄèNêç„„ää丣ǧ¦¦p×]w]qŠ…ÅC#ëc³Gköôô`Íš5X¼xqŒ¾TG£”£~t˜‘ÅÁ”†•néøêèèÀÛo¿ÁÁA¤¥¥!>>ÃÃÃXºt).\ˆüü|äåå!''‰‰‰înãÚG(Gô²2rzúò1¹t+Í«3Rq:Ÿçü)fÖº0úíÛ°­é¢ųìƒÕåÚ>³Y”>IqÖPä5—GÐ’¼¼>›ëRFÕÁó]êaæýs½ë“~¯ M4ÛwU’ú· -_ ,>ìÒÅþS/æì;ЦtÙÔ;öo¯¢A62dû¯—p¨0䑈yyy¨­­ÅÔÔn¾ùfUŽF£ƹsçÐÖÖ†ÔÔT¼üò˸å–[œœŒÌÌLW”JÂï÷£¢¢¥¥¥øÍo~ãö1M¶¸¸ØyûU1Z`ãìÉ 6’¨ Ç*P;Ï^že;tDyE|´­?FS¶Ý?…¾¸Îê ±mÏ«]Ò‡xZYZrmˆÝh24ì5ë€ÊF 5] ®µ}+p¬%$$ ¬¬,†ö£Ñ(6n܈––ìÞ½¿üå/ .D||<^~ùe=zÔ˜˜ˆP(äN¤˜ššÂ»ï¾‹®®.,Z´…Bv5.€;Ææܹshoowžø©©)£¸¸¹¹¹8uêâãã‘——‡¾¾>W•W•†ÊÕ«®º - èêêBOOâââ\öGܱc¾õ­oáÀÕW_íö˜Ú -¾sì–>­U9¢U¿ÿ/têúyY'—Þ§À„—î…ËÈšKþ[½¡Ž0 À?l,Ê/555xôÑGñÿñ®È^zzºÛ¿œ‘‘áªFs¦ž””„={öàùçŸÇO<‡~eeen|^Q‡­±`Í=Ë–-Ãç>÷9|ík_CEEfffÐÛÛ붘йÔÚÚêêú–(󳳇c -`ú|>w:AFFžxâ œ={_øÂPQQSžGKgº:>›¦¬å - ÊáH$â¤U®ÕØØ - - -pß}÷a÷îÝα–’’‚#GŽ`åÊ•nK:´ ë|¶´I=Ë‘+ퟎ—:ŸãVCHõ•vÕýZˆÊf2DOÄPG :P€Øí?ªK-¦´üÆõTº#ýR‡°=ŽUןô;88ˆ‹/býúõƒèééAww7000€¢¢"ÔÔÔ ))ÉÕ²ˆF£X³f žxâ lݺեýá›ßü&ª««qíµ×"))ÉmíjkkÃóÏ? ¤¤­­­HMM…ß?›¡sã7bppÐ\ãÚ‡B!ìÚµ ;vìp•ØY¨, "ãĉxã7P^^ŽÜÜܘ¨1u›bÎiLÓ­uÎy©dç›m(ÞUzP\øaX\iÑçó¹c:LЂ–¤¹©©)TVV"555¦†‰pZ‹A·<)Ìe³ð7yˆsªóbñŒ•…êS nßËþØÏÔÀ÷ù.Ÿp¡á­“øäÉ“øõ¯ôôtLMM¡··Àl݈œœ £··iiiHIIÁ¼yópß}÷aÙ²ecë»TŽ¿333‘žžŽ¾¾>ddd¸{cö™Î©VÖuçÚèg”mZùAYÛÛÛ‹¡¡!WóꫯÆõ×_‚‚¤¤¤ ===†Tos+¹:TTÞèº+ÐÂõb¡B;NÅüÛÚjØT|u€)+ÖRGŸ×¾òoåŹð¿Óà¶ÓqßøÆ7¾©VЯŠÊ2PA¤ÏÛK=$ *në%³Öéï³Â˾×Ë “¬?zŸöIÇ©ãõšx/£éÀ¬¶eÛå¢ñ(M #CÏ•†j/5†U[CŠ÷z]lL -ÀÕ« -/++ ÙÙÙÈÍÍEmm--Z„+VàÖ[oE]]Q]]¢¢"dff¢  ÀEPX᳸¸.\À›o¾é -ÎmÞ¼ÙÝAf³QI ˆtÜ4Ì•8gcccN xyÉ-(]+ðáÜh¤HŸWG…åIK[vέR¶tÊöéeUcLÛ°N'¯5·cÓþúý~·'ÖÉèÅϪ´Ïê0àœ«Ñ1Û9`; -ôI‹¢bb¤€ãâÞüåË—cýúõèééßïGII ñúë¯#===fsrrÜqn‹/:…Ó×ׇÑÑQ7###Ƶ×^‹åË—chháp÷ÝwòóóÑÚÚêÞõ±}Ì«¨²“²!77Ë–-ÃÀÀÎœ9ƒ´´4wÜ#ë/~ñ „Ãaäçç#;;b惌ëbéÁ®¯åpª¢—¶cuŠ®§Þo=òö{Ò¢fHx½ÏrÞØW½_#˜–ÞçÓ\óÂ~“FÊËË]æÇîÝ»133ƒôôtŒa×®]èììt§c$$$`bbÂᬬ,”””àí·ßÆØØŠŠŠŸŸïÆ­:AuºFÓôÓÕÈB0Dyy9âââðóŸÿCCC.3…Ç·Ò)íÚ'x .Õ”€”@ Âá0âããQ^^Ž—^z |ð233QUUåä-ûb JÊz«³€[ -xÇue„Êï÷»ýòö]<"+..[¶lAqq1&&&™™‰eË–!)))&j­ýU½ÊùÑ{IäYk¬kvž:ÞU«!ae]?233]¡0-$¬:Zù@£—:ÿªÃ(—-m[KÛ²ÎxÅhê×yáýÊ‹lÛððàA´´´`rrÒeNMMatt7nĺuë\Ú5ç…ÇѾýöÛr†Ree%^zé%ôôôàܹsxå•WðôÓOãõ×_G{{»«ÅÁÓ&èLŽDf“®¯¯GBBÂá0º»»±cÇlÙ²---ÈÈÈ@$2›úÏ‚f¡PÉÉÉ…B.ËF/Žƒô§ó ²…ÿ󷮇*T=¬2Âêg^\#u¬Û÷[,M矊¹,Ž`6eªÚ ö]|ÆÜÖè±ãP>ÑùR_|—Úê`õrœ(¿S–Ð@Ô>é¼Ñ@š˜˜ÀöíÛñÞ{ï¹y¡|âi@ Üpà øèG?Š¥K—Æà:å%»†ì×±cÇðî»ï¢¬¬Ì X±b–/_Cã¯éºëùM¾X ¶3&,CÙËëYLöœU¼_2µMm`ÛÊ\ê%WC‹Œ§ŠUUW£íºX*ðìBÚ}È¥W%¦ÂÍ^$"îO´’U ^?^B]›Ôg½.]Gk´r¾ô>þ¦ç‹©Ðååå(//GEEÙŠ¤ååån?ÏçsgÕ ¡··•••ÈÌÌÄG>òÜtÓM.jf "·^4¨Æ¸Ò?c¤J¡2©¥«\¸Îʘ -®Z^SþÑ6íÚX³k¨Q)í£¿ZA¢BUûh…S(s/•ÒÈ\´ÁöTتࢠf_Ôó«ŠWé—´mß©|¥ü¡à M{­ªªÂUW]…S§NáwÞÁÈÈQñ‡l*ᬬ, ¸=o¬y‘™™‰ÁÁAwœÇÄÂh4šø¾””—9 -…°gÏÔÕÕaxxØ=]ZZŠ[n¹Å¥Ž[ ‰Ì¦?æå塺º‘H'OžDrr2’““111ÄÄDŒ#âÔ©SØ¿?"‘òóó‘ššêhrzzÚU×UƒÁÒ¯u\G:„rø½ãwÊ»^ü¥——¬²²ZÛ²^p^Zû‚øt\êA×4PåÛ¹d°Fp•ƒÁ - QWW‡+V`þüùHOOw'¡<òÈ#ø⿈o¼W]u‘••å2اúúz´´´`ëÖ­ÈÌÌDuuµn|§hª8O¶¼222°téR”••aëÖ­(--uÑ#nÛb”N°H$â²cXÔ°™™w¾y$qGÍnÙ²%%%¨­­Ié·ë§¶xì,eŽ‚U:Xc@A”P:ÈC|€˜êÐ]]]®fMAAV­ZåÒhµœ[¯ãœ¨K”T>’¦¦¦\}Ýwo/ËúÓ-¼ÔYa±Ïç‹ÙBãÅGÑèåb^Êwš¡D¼âÅwÊŠe¬Là;«ñž±±1´µµ¡¸¸“““èééq)ÿÉÉÉØ°aJKKÝ88ýýý8uêÎ;ç -ŸoÖ9755…_|Û¶mÃñãÇ\ñbb»ÖÖV„B!äæ梺º«V­BQQ"‘Ù£.:„Ý»wãôéÓ.Š=44ä2x088¿öÔ©ýû÷cÓ¦M(++‹9Í(‰¸,3 ¢i­3kœ*¿{áX΋­”®sþt‹”âjìÙ­QlKÅÃ6¢¯tÍ6ئ¯¨~b1ο³,5H•ÖH ä;–.ÓE£—k˜LK/©|Fy´gÏ>|Øe{±àj8Fii)òóó]=§O|âØ°aæÍ›³žñ·òFåܱcÇpöìYW™™L·Þz+¯ÐcŠg9‹=•öø,ÛÖÏH¿ê(èììÄÉ“'áóùpóÍ7£®®Î9vÕv²˜]õ:)ì¥zŽó -…ðÊ+¯ààÁƒðûý®V™:Òµ-Î)ùF3Ê,æàÜÙ¿ö•<`3ã5³‹|§2XßaíK;?Ú'±§ü1€õÿò¹m“ß@ÙT'4^Ê<êåž«vðVYgÛ³©kÖ€ñz—Þ«ýÓ/"Òg´ßµbÄÄ>§JT‰Ý«^ ]…!€¡nÇíe˜òsmËkl*°çêNí͸¸8ÔÕÕáK_úŽ?Ž'N ¤¤¯¾ú*€Ùóm‹ŠŠbú¤¤$dff" -9or$q{¸»ººPVV†ºº:œ:u -.¢×]waõêÕ¨ªªBbb"Ž;æÒò:::Ü v»†Ž‘÷ÂÂB<øàƒhllÄË/¿ŒcÇŽ!##ÃUå-))Ajj*š››ñ½ï}­­­¸ãŽ;PYYs2‹®ïŸB:Ç^—F*tí­CQeÒ²:[|HÛ¤ ššŠ‘qú½:4¬l³— VÎëûçz^ÇÇ÷¹Z)£££Næçç# :úššÂøø8.\ˆ'Ÿ|)))ÈÊÊrÇZ677ã“Ÿü$¾÷½ïáž{îANNNLZº¦YcÒêòËÔÔ - - -ð™Ï|Á`>ú(ªªªPXXˆÑÑQWmffápØS:}ú´3ªxj‡¦a@ff&ÆÇÇÑÕÕ…¤¤$Tü!ýÿñÇwÙa¤C`Ö×$Á?yO r‘¦XÏ‚ó­†=L¡¶Uí9wÿ999¨©©ÁÎ;Ý>s½ÏÊ|ö…x'^¡k)›mðEé]éÍÖð|ªw9S>ãs¼ÛÂØûcõ çšs:66v…üQZ·càü0³²7#„v^”Vù·ÎÏ7›¡wìØ1TVVÂçó¹#(C¡ªªªPRR‚ÄÄDŒ¡¹¹GÅØØ.\¸€‹/"++ËÕ¤èîîvãnhh@JJ -ÆÆÆÜ^äÁÁAdee!Ý*vÍ5× ò‹ƒÁ Ž;†ßþö·èïï‡ÏçsŽ×yó桽½ÑhÔÉï‘‘·]òܹsxì±ÇP[[å$½s;Ž[åœÎ«×z(V³Ùu4ÀX£‰kGg‡>£ø]ƒfŠÕánqiMmêR#Î: ìúk›4½p¶âP+5ý\Ç«ü¯5Vé=Ö9Á9a–ˆêTöŽö®®.lÙ².\@zz:¦§§1>>îœ÷Üj¸páBÜpà ®J¿ÖæRŒ«cW™È¬ÖØErr2¸#“é€Tf»J'ê,§¡ÊµÔµPýb×UeE8Æ’%K°`Á”••¹,3‰·†0ß1îP½¬|ÂŒµåË—ã·¿ý-¶lÙ‚™™ÔÕÕ¹¬eÊ=¶Ëÿm €ïñê/k·êÖÍìV½Â6ÕéªXŸsóÁð¿û»¿û¦/æ™Ëè³ÀG•  -)½ì‚«‡Oš -Ëü\4M°@QÚN8ûåe8ÛH±. »Î™íŸz«È0V€{µmœH$âŽû°^x‡×ÚÙ{ù>®ƒUÎ^ iûgßmûjéľÛöƒs®ïKMME\\^ýuìß¿.:Ê£TRSS‘œœŒøøxüêW¿rYII‰;a@†Žy.e¢éYÓ½­©Ïª°óâ)K+ö9¯k.eÎËk´ÿÀ•Y^‚TçÅöç=Çÿ„{¶ÒñZ'Œ¨U`¬FŸFdµ]ÞcK²™J‹4yfCñý¬ÐØ؈+V`ÅŠ®[JJŠ+ÚÇódYív÷îÝ„;v hmmEcc#,Xà,û•™™‰»ï¾ÛµµµÈÌÌDKK‹Èñññ¸é¦›œ×Þ˹Ã9žššBrr2***P]]´´4ôöö¢¹¹---îØÌ`0ˆªª*8p'OžÄ²eËΦj«¶òÉÒ™M¼j4×ËÐ.+湚_iT®q-é”±rNiˆële­ê&Õy*?¬>a?,_Y^Ð{"‘Ùý©iiiHKKs)ôÔsœ—ÄÄDTWW£ºº'Nœp•†`Á‚())q…ͯ˜_ë´7½GÇ333[xª¾¾«V­BOO^{í5W ptt (++sò²££Ãe¨ÌÌÌ ¢¢………HHH@0tQû¤¤$äåå!##Ãm˜žžÆ#<âŽq²Ùj¼’×ÉÙÜZSDq?£“`ÎêFÒ™ßïGjj*¢Ñ(vìØ¿ßk¯½‹-ºb¾8f ÖÙE™È ‡Ê;ßIÍf½TnÚÏü~?úúú’’âj2XšÕ6-põ’Ǽ4£Â ƒ± Å|^÷t«SÆÊr¾S¸·LNNbÿþýøÕ¯~åŽleâêêjÜtÓM˜ššÂÖ­[ñýïO=õ:„óçÏ£··½½½Îa:00àh’}á¶Ƕ~ýz<üðøãŽ;°|ùr`rr‡«¯¾ŠÖÖVLLL §§ÃÃÇÃî¸@¶9==ááa477#===öî¿ÿ~gÐQv'&&bttÝÝÝ1QIÞ£óê¥ã,F·¸‘ëã÷ûÔ¹Wã\ÿ×çH㪧ÉW”½”!^¸›k˨½bP¥Q‹¬ý ŽaöE\Öɦ:ÆêöU«·ÓÈ&^b÷«ó‚m*}³]k0«"àÌ™3xíµ×0<<ìdù„êoºé&lØ°iii®»Öv›†å¿øøx„B!¼÷Þ{èëës*ápιàµÝCé‹ëõÒ` Ÿ££þg–‰nuRÚHLLtÆ¿ßôJ£*ƒ”~¼hŸŸ+]rssFc°¿¿YYYn»…¶©%‹±½ì_•Ý^v(Ç£´ÎñÚL>u8iÆéËÊd/LqJ€6uA/ˤú? -m\Ÿ×ï•Ôƒ¢éìÖH£"U"æ{U8èsÚ?ejs–pà©¡açA/í“Ûæø´Ê$|–Œ¡cй¤pà¸-8ák.#A‰ˆÀÒF¸Uˆèu|Ös«óãåìpÌ)ï IDATP `éŒtH¨««Ã† ðúë¯ãìÙ³8pàV¯^íÎ\ïïïwí,^¼½½½hmmÅüc¬Y³•••nO¬/O"«3ç%;áoSj̪£ŠžU/Ê~¨0±çy+íªpTž›K¸y)o/ÚÕù×þëzªpaÛZ Ï˃˹¡@SÀÂçŒÛµ`–¦ø<´T]_»BeŒÊ“ê°Óñ)ýò˜šœœ¬]»ÖBŒœLLL¸Ôþäää˜g˜sçÎáý÷ßÇÔÔºººÜù»gÎœÁ“O>‰yóæ¹#=Š}ûö!)) ½½½ˆGaa¡ÛdS–ïT¶WTT   ëׯGss3öìÙƒmÛ¶aÿþýX½z5†††PVV†‹/âÝwßuÇ*òC-Ìd•«¥;½‡™×¶%•ãAñº——Ý¥k©ÙlO£M^Ê’÷Ài4TÇK™É¿õüf¥m«s4}Qi‹²ŸýÔH·ÊÕÌd¸é¦›P\\Œ§Ÿ~w\fMM žyæ\}õÕX¼xñc# Õ~ZcTAõÕøø¸{wCC®¿þz<õÔS…Bðûý8þ<‚Á ÛKš˜˜ˆäädTVVbzzÈÊÊÂàà B¡ÚÚÚãã㨭­Åèè(RSSqäÈ<ù䓨®®ŽIeÕì.ö—:OÓ0•ü~ÿ¡ðêF+3€ØêÎqqqX´hn¹åô÷÷ãÚk¯uŽàr6Šfè(@Vg2yB×[kW)žŸÑ8e¡9]7åE+­Í1k ö“ßéýÊ“:úNö“s¦÷pþø9ïSpkuŸd/<¦FGee%Ö­[‡ãÇ#!!yyy˜œœDRR¦¦¦pðàA<üðøñÆÑÔÔ„`0hmmÅØؘۊÅcjéppŸEEEX³f Ö¯_ï -î¨Ñ§sIå˵ãw^)>º>ÊCªhí3lS _~Îu° N¼hP…¬—Ïò£®‡Ò¬0w(Þ£ ÎÎ'#{êزJ1º*Èããã11½ìsssÑØ؈ÄÄD„ÃatvvbÏž=èééÁôô4º»»166†¦¦&—ÆOcU\;ÊW îÄŒ•+WâÖ[oÅ¡C‡°sçN´··cppéééxñÅ122‚¯~õ«WÐŒ:I*KÔW%ÅH®M_³¸\GBç•ëÏ_]Vns¨\5JN^§üR¹344i#m(ÈPZ!¨ç^×›ïŠwŸïÊêØ -nø¬•Ë:ÿTìøô§?þþ~ìß¿çÏŸGzz:ªªªðÚk¯aÏž=¨©©q‘qÒÊÔÔ”«§BÝ©rQï%ÿÐ MZQQ‡zxôÑG1<<ì -™ñ(¶™™wÔe{{;8€¥K—:C«¦¦GŽAkk+º»»gÏžÜxãˆFg·‡³…§§§/sUžÐxB?RSS¯pL*~QšTÇ /5.ø7çãþûïwÇT‘+°}­åßì×Rõ¢Ê]Å!|–i=“\éCñO\\œ;BŽcRú´zMÇ®¼ \Þ&H¾µÀ[ºÎŸå /½då,p呇¼ô}l·¡¡K–,ÁÏþsœ>}ÙÙÙDvv¶ËFÉÊÊBJJ -B¡:;;Ýz¶µµ¡»»ÝÝÝhjjB^^NŸ>üü|$%%abbóæÍÃí·ßŽåË—cpp;vìÀÑ£GÑÙÙ“¡822‚žž”——#33Ó¥Vwtt¸sÜ׬YƒÏþóX²d jkk]=§óÏ9P®:ªUZCØ®…ÒŒ:cÔØç¥ÎG5Ê,íPŽ°Ï1[O´-uti‰ß©_Âá08Ge7é_ù["ÖÙdbÚ³2ßÓqÃñqž­3ƒr”cWþãs¼WyÞçó¡­­ §OŸÆÞ½{qèÐ! ))ÉÉÐÉÉI¬[·×]wJKKcƪó sÃ÷D£Q‡/ôt€³gÏâ7ÞpRêŸÏ‡•+W";;ÛÍ—ÊKë(Qþ´6ß555…‘‘ddd¸“’&&&\½;÷~¿ß9Æ©CÕy¢ôÊ>záþV\Lì¡rô‡ªª*ddd`zz£££îÄ¥'å5K6°ÄùR,¨—ŽEûdéÆÕt|¼ßËÁäHã;ã” 5•ÔÙ*ÐUy‘¬a`/U„sTvų‚Á ÖTtJ„ZäC8kD—=Âún¶¥E¦û°…ÓñÒ \Ž°= -2—òûýT©0UGÂôô4ÆÆÆ000€‚‚‚9ú¿ÎŽ“몞Kþo•™B#‹¼OA7ûé5/Zù›—l:±`Ñ%K– »»ÛEüÏ;‡K—.áþûïǪU«ÐÒÒ‚ÎÎN·®¨««ÃÀÀöïߧžz -ÿôOÿ„;ï¼Óyù½$:¤*:z yé¾8Žõ -h,½[Ç×_HQûa—Òº: -¼@ÿ×v­òæo¶aŸ'ýYaÄf댎ŽºèßiûÉ(S#uߣ]àÊ'ì§×1s~¿ßenØÔ^ölkbbápiii1ô­©ªìÛá¾QõþRYqLAF£hkkÃþçºHktuuá@II‰;àøñãøàƒÌÆ),,D^^\Ex‚$¯ææ¹n3…Á` ¨««Ã 7Ü€ööv\¸píííÎÐç~WŽ‹sÃâDJs4Ь”àƒÆ²®Û%XäÜjÁG]+58”>¼À(Á§zÂyyEÄ87^†Íb#Íp-8°Q0Ò)iJ£¯Ô?l›‘'þ¤!}ÿää$,X€ÇÏ>û,^{í5TUU9Yxüøq //ÏÑ-ßÏb©:gJǼ/»ªÈÖ¸ˆÇÆñÿðx衇P[[‹””³Qýp8ŒP(„íÛ·cÅŠøÊW¾‚êêj¼ñÆDnnnŒ#t``cccxî¹ç0þüƒˆ‹—Ý `;cttÔEñ¸ÞÄ -*›'''0ÖÈù†´m·ddd !!ÁÝ© Ÿ²û㕾,-Ûm ¤[®‡*å{È÷ÐœåÍÄÄúûûQXXèæA í›êz Ì•HÓ£££ƒž€”÷©#ƒ[”­±5G,Ú~³ú811GŽÁðð0 - - -ššŠ¢¢"TTT  âꫯÆ?ÿó?c÷îݨ®®FAAÜV-ÖIðûg·a>|Ï=÷*++QQQøøx$$$àèÑ£8xð B¡Ûf000àê9sÆÑÞUW]…œœdgg#%%%%%(,,Dii©sNùý³E 5“…ò–8”tϵ.Ÿp¡CÄ”¡PÈ}^úÀ.ºî¤Å(êð¡<'½)ÿj@òNõ¦u.(¿(=ò;Ÿo6›‚Ïé÷”QV¯+ÞÐqèój§P¶òoâWÕAjˆñ:Ùôª”~5ú;>>ŽcÇŽaß¾}ضmÆÆÆššêœð¬Ó³aÃÜ~ûíÈÏÏwºƒÁ*ðê4¡®P<Éì!n[ܵköíÛç¶Û2ÃðþûïÇæÍ›sZ1•ê2êrkkÐA˾qÝy -çGu½êj˜Q}cñ9ûdí •Šìú*mð½ñññ¨¨¨pºƒºØ>KT§GL*~!_zaaWöUçïSç ßCÝfí6Òpåvžq -ö½Ò¾´­åbªGB^ª ù?'F™Xû255åŠeÙg”ùtó{-£@“ K­r -øt"­1Æq«¢äœðFl›‘ãb»*ôÕèf”1)))¦:—j¬éÿ:Jª@¨ I¨Ú/Ž‡Uœmø·¾Ç2ª²½_™Pç’¿KKKÑÔÔxóÍ7‘‘‘sçÎ!"//Ï/xàÀ–˜:µqãFlÚ´ ‡Fee%Ö®]C«:'^Ñ¥154uýÉÚ®®­uJ©@VãY÷ËÛy³L¬t«ŠÎë‹uìYƒØ®•~¦ÂÛ>§N9ŸÏç "¥K¶© -”.àr¦ $é’4g)2PêøÈólWùÆÊ*:çTyêœñýºUD?SPAÃ^ :Îß;#Ÿþô§X±b†††››‹¸¸8Ü}÷ÝøøÇ?cóòòÐÒÒâ€ÈÂ… ÝÞ<¿ßï¼ÿv]¼h…—:°8Öyóæ!??‹/vé’ܶ`i†FçUùÀzóù£ïUú¡\öù|®è®«²ÖçuŸRrmu šv¬Q"î»'xfHÔ1lŸºO+ij¿š‘å÷û‘––æÞkï'í[‡µ:½ô ûT[[‹/}éKX¾|9¶nÝŠÔÔÔ8Â,f9q||—òˆÎ5!ò3 eK“““w)ªýýýÎiÐÞÞŽÉÉIlÚ´ <ò***ÐÑÑôôt¼ûî».£ >>8þ<þå_þ6l¸Â§¡ÌH‡ò¶êÀl}œêZ“—õ¹äää+ôµR¾q-h Ñ ¦éœœSÞ˾Ræ«3Eû¦Ž$Ò±Ž“³J½=Šu”ߘդéÏ\w/CP)Ä”Õ -Â-hÿ0C“Ϩ ±ß³O”ùÓÓÓ®æ:àÈF"³E9‚ààÁƒFnn.¦§§Q__5kÖ %%Åê[½z5€+r¦øÖã?dF£QìÛ·Á`­­­xñÅÑ×ׇ’’ÄÇÇ;ݵvíZäå塸¸Ø˜’’‚ÌÌLƒAÄÇÇ# ºà@4uµ.”)÷ÿ)>Óûø·êe¥%žk®ur_û‘6x© '_ª“Wå­<wÔu(ÂÌÌ 6n܈͛7#77×a -/¾çßjÑqKgÝÉ“'Î7|ìر˜Ì™™‡µÓÒÒÜQÎœ3ΫÚ6Jw–§)k(ó˜þO¹I~æsäqÊV¿ßEöˆ¶¯²@ñ€Þcq€:ÔAÏñ)NSÜi‹¶Z|¢˜CeßÉ÷éVn›]¢Á ->Ïß–Ï-+á=6#Øâ@ŸÏ7›@fóö²‚ÜKy|˜Ñ§‹¥UÃG#­Ú;vÐ\P¤ì'• FRP¯€_›Ð^ó`ó¼N5ìt¾Ø½fœs%P+É8yyy1û ô"¡ª€Vá©[ಡ¥Æ¬î‹Q!e %F¼¢å -°ø¿2Š®©ÊjÀX§Œß?[%»±±ÇŽsi®<Ó8-- Ë—/Gnn.víÚ…¾¾>TUUahhYYYÈÉÉAbb"š››±dÉW[çX½¦4n4W×ã¶Ñ'uÜ(=ªñà%”ì\è|z]*ètô~/à¥ïÐK£ýܶéÅûT ¼‡ÕŽÅ«TRºö¤aΙ3Ò‘™öÒtFõÖÌr}™ÆM£Æ‹‡u¼¶_^s£…”(Óvìاžz -«V­ÂÐÐ3ø¯¼òŠ+h911öövtttàÁĪU«088ˆ .`ÿþýxë­·0==ÜÜ\ô÷÷#>>­­­¨¯¯Ç/~ñ lܸ~¿?FF³vŸ­5„8GZÀÍ‚1fÙ €]kÐÛµñÚ"¥kFÇ‹:Fm–¥•‰Vç’^hÌ©Š50¸~ê¬g[4pòóó‘’’c\ê3¼×Ò¸å ¥fiêø•×8÷ºvº÷Ö‹·‹Z,dù‡ëwðàA¼úê«8zô¨+.ɱ555¡¼¼<;òÄu±¯¨ÉÏÏÇÍ7ߌ]»v¡¥¥ÅÕ¿`‹‚‚¬]»uuu())Arr²Ã˜Ê?j„*¸§Þd$˜ôÃñ«³(##ÃÑ#ÓÂõ^­-À>h Çâv®oú>‹í6\Þo,‹£Ñ¨£¥7¥më¶rô¤sÉu#³]¨,Ïó}êÐ%Î#Îåô }(Íé³l‹}Óôrט5 -aïÞ½8pà€kw``>ŸÇǦM›°páBÔÔÔ`É’%n -çU Uν0ë:ø|>>|[¶lq{÷9'‰‰‰ÈÌÌÄðð0V¬X¢¢"·%ÊnmTݨ²Hõ±—›÷ª#Dñœ®‰âQöƒmè;”&­lâxÝké\ùHe§ÒŽÚÖVáq¥®»ös¥v–:•5 Øƒï²ö²f›*“8ÖÃõn €~a•„2…»6d…µe@LÈF<نóš(%8ëˆPÂPãN…‘ -F~¦ŒäuéäÚ=«V€Yc˜}R'ÿV'S¤-ÀTC_AŽ‡sbÓÊTÉ°_ôfòÝ| 25Z-¸Òµçÿ^‚H <ë°ÑöÙ™ƒÇFƒA¤¥¥¹";j ———#cË–-ÎÛ¾{÷ntuu¡±±7Üp€ËilÚW[œ_*^õ,«÷NÇÎgÔIe¿5ô;«<”oþÿ^Ú¶åQöÓ8 ðôí»Î­ÈsõEµ}zá©4T!—«Ézõ`ŸÂ•¼Å¾ÙB*X]ð/ÿ·kÈq$&&bhhGEGG0::ŠýèGhiiAvv¶RóçÏÇwÜ‚‚·¥€ýZµjÂá0öîÝ‹`0ˆÕ«W£©©ÉEçUÑiu­5ê§ón?ão Æôô´ÕbxÀέRîØwYï½ÊÛW/ZR…àã=lÇ*K•ÏÚUðÚËÃìë\ºÎŽ—óêÅc:>ûcç’¿­Ü‡ÃHJJBYYòòòÐÖÖ†žžž˜4zÕ{ -Šhhø|³iøgÏžEGGòòòP[[‹´´4ŒŒŒ ­­ §N©S§ðꫯbÏž=€k®¹;vìpýljjÂ׿þuÔÔÔÀï÷ãùçŸÇÿ÷cÞ¼y¨¬¬DWW—Ûn³}ûvÜu×]øÊW¾‚Å‹cjj*¦ Á­]w5,,2P׎4§@?¸ú# -íå…¨PZ¯üiq”½Gלm™âªéà@l- ÕõJ¬ÿ¡¯ví'uõûiéÔ è¥4¦cSyïÕqžÖƒ²}ŒD"8vìžyæôöö"''###ƒHNNÆÍ7ߌ•+WºùÖ÷ÆÅÅ9ǯfáú–––â–[nÁ³Ï>‹ÔÔTƒAÜxãXµj•;š˜N)òë38-F®Žƒï"HW¹§r…t–žž³Þ -îÕðPŒ>×¥ôHG¹ÏwÙq­sm,±¸Ïþ­εâ]»EÁ #Ûm\tÚ«þÎX.‰G'™…Ê÷(Ï+M‘Ô¢ØÃò³•A¤/ë@öù|Agg'Ž?î2KxôïÔÔŠŠŠ°nÝ:Üy稩©qAEŽWñ×ÁâV1ŽFŸÏ‡ŽŽìÝ»YYYAbb"&&&022âh´¦¦7ÜpRRR<ÛTy¬²×^jP«¾Ñôx½TîqýI_^˜@å#?W¹®òÄËY£8—ß‘—Ô©«ô`ñ‹¥­Ó¢²MmU¾C·ìØwY=¢2×þxáÅÓ^ãWœF§ Íìâê‹ì}vRx)ز ÊK8y=+èÔ¥“7Wô^. …žIýÞŽÏŽÙëRï œBÃöI‰A…Ž‹dj Rø…¡.4÷õx­™Uêú½Q)`Q€«€KçUÇÁõPÃJ`¶mÛä½öž¸¸8ô÷÷£¹¹'Nœ@ss3òóóñÃ÷RàUVV¢±±­­­¸á†pÝu×áàÁƒÎÐJNNvŽ* 5()P8?š%aiÊËøâo‚4+(tŽ-ÙõÑ5œ ˜j»zYϨ×åõnu©PÒ9à3J[Jïú=çIH6Φƒ+ÐÐwZ²Ú_K˺÷—€‡àZS°àt¼äk}®¾“[—ZZZðÌ3Ïॗ^B{{;***••Ÿo6ǪÓ;vìÀ×¾ö5,X°ÓÓ³ÇBŽŽ"!!===˜ššÂØØrss±sçNüÛ¿ýÊËËcøLÇ®tbe£ò¢ý–ØÖÌÌåZ(*«ÈŸä=•Q*ÏôÒþêú¨CЋ¿tžu¼Ê[ú.kÐó¢ƒS?§ Òè©f9ñ]jˆjd ìkº8ßÅvÔPb×ËKîX^W233[Á¹¬¬ gÎœAyy¹Ëæ‡Ã1ë¦ýD"hiiÁÑ£GñÞ{ïaûöí…B(--ÅÒ¥KQZZŠþþ~ìÝ»ï¿ÿ>`óæÍxâ‰'\­Ï~ö³hnnFkk+î½÷^,]º---øÉO~‚£G¢°°ùùùΰ»té.\¸€G}>ú(ªªªÜZØôL«(£È³Š8'LµEþ4s‹kDçŸÊ®³ê^öIª¯4U”tCù¨€]åf4uYbÚ75©Sè\Ôºì«ü£¼cJ½ò‹âåµHär=#¿ßSüRߣºÉlå1Å ŠÃ,&ä÷Ö¨8hxxØ^ŒF£hiiqY~§Nr÷®Zµ -×_=ÒÒÒœGǚςúxÓù Ÿ2Ò|ŽSRRPÊ`]¹‚aÚ¥ÆXïUÆ•^ µ>‹w* Ð¾†N@YjúÇ}‡ÿÿøÇöòË/ÛÆƆÙÅÅ…Ÿñ¼ººj?¶?û³?³¯|å+Ç­ÝnÛ?ÿó?Û?þã?ÚÝ»w-‰ØÅÅ…}ðÁ‹ÅìÍ7ß´7ÞxÃâñ¸¦vÙ|èuùÊ¥ ]Ìår û°¨^„?C¬„et -¸_ƒcuj¡ ‡Áýu%za¿¯Ó'í?Óg>x)9¨T… ¶RƒËб+ÁÀ‰q¿¾×̬^¯[±Xôc×F£‘ïX¯‡jV+´;¡¾ëûT6#‘ËÔ4ypöâ3µkúî0hSß­€˜9 -m¶b4 Ny¾úÖH˜L&öøñc{çw,—ËY:¶n·kårÙwô‡¶¹¹i¿ñ¿a…BaiætåÒ1 ÛÛÛvïÞ=;;;³×^{ÍÊå²c®e˜1ë -¾Ã1›Ïç ›¶¹¢¬¿Z­.`VÝLߣ䤎oüs)FÓÏCSYP Ýëõ,‰8¶Ò„ûC]Õ±[æyÆ2Y{òä‰e³YÛÚÚ²~¿ï6•õìºWÁ©–ÏkФýçR«Tþµ<Ì´ëØâ;Úí¶ýô§?µø¼çr9FÖh4lssÓ‰„ýʯüŠ½õÖ[V.—}o îy¦Î»¶?‰,ÉÇý£ÑÈöööìßø†/#ŽÅb–Íf-›Íú< -……öëÿágj/(‰of ‰VÕ·e±cø|j(7j«Sr?÷…2®:M›µ­Œƒ¾cY©òªö-´Wú¿âGH,M¨~´kL«v…çèØq)æ…´V»~çúíí¯¹Â ;«ƒ‰„“¦÷Р°‘*$a£,xŒ¶GÛªkYé›…0S©ßUc¨lKv—ß\ 5šÓéÔËÝÙ…“{q:vô•Ïh3†@©kžÃò$ž¥ÑÐȤR)'’ɤ$ÚªBLÿ¹Ô0\§˜(0;©f2?žgß666,Z³Ù´Ñhd¿ù›¿iÕjuA†BVVV,—ËÙ|>÷Ý}9RåððÐAg˜"7ûûû¶³³ó c£›Á¨ þO.ýÎuÁɧ]*Ëz]Ì- |¸Ùß ¾êŠ–qéx«ñÓ´WuRAsèìyŸ{]£«cK«¥Úuð0þ‘È#® Õ1cÞ‡Ãá'ÆTç|>¿"Ÿd2i§§§ö×ý×öøñcûÒ—¾d§§§6™LlssÓÎÏÏí¿þë¿l>ŸÛÁÁýñÿ±ýÉŸü‰•J%;??·ÿøÇöíoÛž>}j‹Åìââ -…‚u:û£?ú#»{÷îBUJÎ?M.‘¼©\j`«¥Åšít:¾¹X"‘°v»mNÇ^xá……µ˜ª÷Ë6S -u!$ÆÔI/ Š8h?ÃþÒ2a0mf ÇV ƒ…ö!ÓZ&ˆ]] ©O ÛŒ++Oé=2Íz`ʾU¯4;‡ßÓ "@|{{ÛÞzë-kµZ&#‘Ëu³½^σŸÔqxxhó7cßýîwí¥—^²Édb'''öÑGy_J¥’•Ëe{çw,NÛ;wì‡?ü¡=|øÐþöoÿÖªÕª}üñÇNn ‡CkµZ^ÖšL&­×ëÙl6³‹‹ ûÖ·¾eð`»»»‰D¬Ýnû¦HêW•S©÷©?S¹Å/ifG3ÝDOñŠús³«£î”˜áÒv„6Må!”Å'OžØùù¹}õ«_õã´‡Úþç.ø‰V«eétÚ*•Š=yòÄ~ï÷~Ïîܹã¾&Ä`!Ù±Ìf2NÉdÒnß¾m÷ïß·§OŸÚÍ›7ݯhöBÇBìªãL&Ýf(i£>»¢v¢T*y%ÁmèÃ4#¯k÷5±Ú[õÿ!n m-÷+æCëž!P™R9Sœ¡ï u‰öôz=;88°ÇÛW¾òÛÞÞv\X­VÜÔ“hÞ£Á”¾%©…/+¹4Ԫ߰߼ëéÓ§ö/ÿò/F}-?$s&“±v»mƒÁÀ¾ô¥/Ùd2±§OŸ.$¶l9mƒvC K, ¤-Œq"‘°—_~Ù1I.0‹ú°0ˆeŽÑ{ÕÅøŠs•ÈÔä,ïÑø‹¹À~ÓWÅtJˆréÆšú¬ë3[ˆùhºNQ¿ì™è»bJd{µØ Æ\uBŸÏ;ùû²}ôâú,ƽÙlZ¿ßw²¬ÓéØêêªW\^ -.õ -ƒe7BÅWP­ÁnèL¸_™H5XüÓãvBV“Ž3™L¶¹¼+l§ÙÕúeœ¦n€qÀ 7É`ÇMÞ’ ª$¼_%ß™L&~Ô™yÆOwÙít:õÀ'¢AZÈ2ó.þW!Fèù;Lº‡Ð`„®Ɩ²O®|Oÿì3ú çÿ†ò¬@^‰0àó ÎƒŸÕ~D£‹U/j¬Ë5»,Ýßß·J¥bo¼ñ†™]’jårÙJ¥’1Á lÿ|`?øÁìñãǶµµe±XÌúý¾o¸²²bï½÷žýÎïüŽµZ-wxZ¶©2¤À]åI/•Û0¸Tg«6]KØb±˜ësAÿ«ÕªŸõKŸUÞU†–-¡né¥÷„[ÿ¾L¸W׫³ç9|'¬ˆRYå³Ð×™]•>jtSŒÜ£c¡ êªê'ã~]{S©”½þúë¾¾ÒàÑhäk™™ÓÕÕUûÆ7¾a_ûÚ×|¯³+"˜l››=}úÔþò/ÿÒ¾ýíoûûö÷÷mß/•JÖh4ÌÌìèèha÷öö¬P(ØÅÅ…=þ|a7h–h16؉hôjcQÍöÍçW)A¥ò ÐeÜÀfWIü©’Ø|®êr[ -üŒ© ŸN§¾i\½^÷òòD"á• -zu³¿Ð¯¨I0øTUàb3½/´íáßBÿ >OmpØF.ÚžàÁóíþá¬ÓéØp8´µµ5k·Û–N§]Æí›ßü¦}õ«_uü 8+l¿^úwýŸ üë_ÿº„dQg³™û·v»íû¥°Œ 9 觬[Ù£'B•T§5pQ|©Ø†¹SÜ&¤Ôç…}×9@ÎÂ]ÚC¹W‘÷ªl*–¦jo5î¶BTÛŠ·Z-{ã7¬Z­Ú¿ýÛ¿Ùïÿþïûæ–µZÍ -…‚ë Ø6k&Uq7ÏGVBl†l€÷UæU^CþܼyÓþðÿÐÆã±µZ-÷•z´j>Ÿ÷#EÙÄ‘ÍÁÅjc 9Ô?«}Qç´]—˜(y­˜I³úá¨_RÌ°ìôµ1úÆ]±¿ê!ö\ý¥þ]å&´)ȘÎÁu³ -Ël™Ê±ŽiXÙ¤Ÿ…÷`7xwØnˆ=Þ¿ö]1Z8Îj;S©”=yòÄ -…‚år9«×ë6ýt•Èx<ö„†AÁ†N@²TàU iˆfߺë ýÐ3³…Ì’¶{4[«Ì¯A@ý~xÄ[¸Æ–ç„c -K¸&Dƒ1X&$ -2G~f5äá8, ĹÂþ/caµËX@³E&÷—¹)]/:ŠPÐ5ÓBÆŠ ˆ‘W¥åYa Ã?È£L&cý~ßÞyçÛÛÛ³Û·o›™ÙáᡵZ-{å•Wü}´…ó¾™ß0“©ÆMËÂôï*kÊŒ^7_ä(éÉ¡åC×ÉÏ -tCˬ4ûµlžiË2[°,¸Ö~é¹Óét¡º% À”øвr5̉Dƒ,m%Ðc8Ne‰ÃŠ­ˆÑ1ãý -œg³«3ÞÇã±  –J¥|ùß õøñãÇöw÷wöÑG9iòÒK/ÙÆƆ­¬¬ØtzYŠÿÊ+¯ØÍ›7„êÎÿËd‡9âÒì±Þ‹­YVñÊW4µn·ë Ç¢WÖh4ìå—_þDvLÇPB[T–BÛ -ú3ßWÙ_´ÐÚ™êiø½ø0~ÚVd–ûµ¯\ËH ÀmXV–hf DŠ–ªŽ©}Ç’qRÀÍEpÌ34˜À6 Чáphßÿþ÷íßÿýß­×ëÙîî®Ý½{×:ŽµÛí[nvu - -ǵ² P‹,Ó/t Y<.6`¸[€«U=н;¨Oâ=̳’`JHªŸQ™QðÊ|(AÉûÛí¶ïBÍáá¡Ùç?ÿùOìp®úʺÚ8%×C(a®ƒ…v_eû:} -õ |¯úÝG…6©½Övk¿Ì.íï‡~hßùÎw¬×ëÙéé©—IÏf—K&S©”ݾ}Û~ë·~Ë*•Šu»]—…P—a¸Ð_i G–L§Së÷ûÖív­ÑhØt:µL&ãä°ÙU°õ5N­P(¸îœi §ÄITñ?Ïç’w‡¸5$ETŽ–³Ë°‰¶I±º„!aŽ‘‹O›o0–Êrxzzj±XÌnÞ¼iÏŸ?÷e4ý~ßž„Õ7 -pµ á窇¡¡D¿CbFA2m˜™'Y•gÞÃÜCÌ°œ…ŸÍ®dTK yw½^·££#k6›V.—mooÏAZ,³n·ë$cÚmuDÿ+€ê)ó›J¥¬^¯Û÷¿ÿ}{ë­·l2™X³Ù´ÝÝ]K$~bÁ+¯¼b¥RiaCEž£ãVi„r:ÊeŒÚ}Žö?´O˜¼«<à£ø¾®Ÿæ½\!pоê=aà8Ÿ/®ÿÕÿöh[Õ'«ž1·j³±Œq UÕ6„™ÆˆŸÏ/7?›Íf–Íf-“ɸ/R’BmˆêŽVÍf3Ïvaß_­$ö¢óš‰„$L3GŒ‘ÊZØ×°ZCçG‰Çp]µê˜Ž«þ®sÈ; ,ÿã?þÃvwwí…^ðÏß{ï=¯ÐÍëjEax…~YíŸÞ£º¤¶/$9ôoŸö®#* V‰²eÏâÒvO§Sët:Né¼D£Q?ˆå‰êÃê†ëÞ·ìb¼±[Ë‚þŽßÔV×%+Ù§½÷™]-uãj÷”ØV¿¤H8Ö:—¡½dÎÔ–†øEƒ¢e&z¯Á±^ËÕ° ê'4×6Äãq;::²\.g7nÜðjÑÙlfü±¥Ói[___XÂÇƼŒã²8c6›-ÝwHe%´iØ ®YvB»ÁTÄŠðŽçCÇuÙmTÄç̶Y¥ïJ$‡~OIïeØNŸOÛhó2€¾¡kÐÿeu•-íoØ&ƹ Šð -q2Ï×ØLÛ¡~PÛ¥íW¹Öq -mçu]} ã ¶~n¦ -[¢•I|/»ÜƒâáÇöꫯºþ¬¯¯_Þÿçþço‡NJ'â:%]6°aà*:!Ü£(îРè¥ÏPð¤ÃgËcÙÄ©Áâ¹Ëú­÷i{¹7ü§Æ‡ñ -ï73ÏJþqúÞ}Ýz ª–oá؇óõiW8¾ú>³OžwËøbx†L}„y -®‡ ”X³@Œ‹‚5 ëþþ¾ŸŸ[»Ý¶µµ5f“ÉÄÊåò@Â`k‰iȼi;B9ÇNå)|FxéóÔø-3pŸöþ¾L·Ã@ K:·Ú†ð­~aÎt9‰2ÎÕ-GíW˜ ážf³iFÞ?t:× p–Ù ž¯ãJ{èï²ï*HT°È}!¡f£–éAØ–°ï -ZC§¨º°¹\Îîß¿oï¿ÿ¾mnnÚíÛ·­×ëÙp8ôLÜdr¹½’0ˈ£ecù‹ôaÙßC› þ@šþ=$'–“×ÉÈuú¥2ýËèø2‡þiò§`tÙü‡súc• m¯ÙâäÐŽq©ßW_vžèx.#ÇÃñã;!h É€p,ˆ!o!QÈϺ¨VRq_¸~4l›Ú:m«!pÖù63ßO¡Ùlº_yò䉭­­Y·ÛµX,æˤòËäA}N8aByѾ„¤ÊI\„¶3œóe2ÞŽM(ûf‹þB!w ¬Âþ/³}¡¼†ãp -ûª÷"ŸŸ&ÏÚŽe:¥Ï ±µ>O‰/MP\gkôoø•eK½tž¯³½aÔ)aËs–ù õw„x„çN§WkÝ¿÷½ïÙáá¡õz=+—Ë–J¥ììì̲٬¥R)K&“–Íf-‰øÒ"ÝÜ0LéØjp¥¾6ó¹q|Y@¯ý@c±«C?­>F³ü*÷Jx*‰Ägaö˜çêrOþêX(£Ì¯ú3­ÈP²W?‡àåy*sa ‹ŒhÎÊM(›êƒ®³úœ0n£OümÙ²Þe¤•ü¬>4ÔG½–a æVcF“P÷õgÚͲ¡¨â]Ä6FÃ666¼?ÉdÒ"ƒÁ`Ž¨ 0x V8*¸lÈh¨a ÿ¦“¡:t˲ËeïVc GRA29 ®¤O§jäÔ(¨!п- T–ý cE<—¾!Ô’c”C783[$ `©øh߸f’1PôLnTuNTѬµ]´)œ‹OcÊÈ@…àN‰5 ÑèÕ†”£ª èD"ët:®hêôtnu®Õpª<‡F;4|!‰¥÷„ÁZlÔH¨üiûÂ,RØO>Ó>ò Õ'tYߥÎFõP†0 Ü»Î‰j[Crƒ{”U53_'L›~Ñ¥q™ „ÀlðNJϯ³™š™]öLú¬™)••m•­°ágÚWu€êÜC0¨ e>¿\ÃÿàÁ›ÏçöÊ+¯¸ÿÀN%“I/Õ°¨ìé<.ëó2@B›¹g™¬s¦¤©ü¯ã©zÃiùåu·Ž¥ŽÙuúö‰qÃn-¿Ì¥m -퉒EŒëòUW±ïÜÚ -µ#jïk³Ž¥~¦ú´¬ýú92®°ÐèÑ­×á%„5Œ]½Î¶2, —â뀇€–g+Ö½W:ŽM&_ÏL À{to"%(–%mBl þCu=´=øÛe8ƒ>…:ʶê3ï å"Ô—ð¢Ï:‡ËVÕ§0x ÇCeAËðÕ6²ÖÒ…q Ç5ôkê—]Œ©Ž‡&f®ÃËú86ŒŸú/×eóú"õ…¡*Fºî½X&“I vqqaëëë¾i4õe²z/kÆÕö©h[¿ƒíF£‘ÛGõy:žºíU».ž¢ØY÷SQef œgПh4jý~ßNNN¼zH±˜îè¯ò¥ýTYQ[’àü¿¬ ->ªì€†û©`»Ø´u@¥ã¬Õ¶Ø%µÙ*Ç\×éŸ^áX„>Eñ|(ûz¯^Ø“P¯ô:Vê‹´oªóÈOØ'ý}™žÒ6ÆŸÿuÞÊÊŠc±Ñhd‘ù|>W%Q ¦Æ‰Î‡¸ ¼i°¢Â¤ƒ¯ ·*š:(Ú¡@‹ûé`8(Ë¥UAU׉\(:6 -ÒµÔEŸ¾GK$KËõ>„ùRCª +ÏÑeÊé˜j¿õYÜÃúe5*l -µ”᤺ÑÏäwž¡N‚ŒoxÞ-ï n\i—¶UÑ€$PP`]¿pãÈ] L™Ö²ó •qåOŸ­2¤ò¦Æ!ÜôŠ1à\Jº,»W3“¡ü2~Ø‚Ø(ø ‰"•¡$ªÓWc‰aRàÚ¹|‡ ¹1º‘’ê*msHdªn©ÎêX2.¡³RÀÅë»x¿Ê,ÏFgBîJÞ”ÅW™ ç=Òªd?Ūk×9"Œ8’v»mvïÞ½QߧmÔgh{ÑoÝìG}Ã2¤º¦dmgLùLuƒqT9Ð÷ ï:ü]åûº½^h›ôj÷Õg2O -Ðø\A«ö»¼,°Q=Ò¿sbýæ]*O9þ®¤q¨›ôSýc(Oj£3pm ÷±QYÑà9g ì<ëŸõø5Æ1ÔmõŒ)>R÷äaW~}¿f^õ˜\Ú¥rŠ É -%[Ì®N9@&Uæù<Ä:Ï*³áɪ»êÂù'hÀ¿éxé܇¶CÛÅ{uUFiõ!þÒ9âº- šÂ¤Cˆ_µü]ñŠ:ê£xãýáwÕuäk·Û6›Í¬T*-è4ϧ„3mÑ„‹®WÇ/1‡š´ ÇìÃçˆ"*Çãñ؃aÅÈû2üÚQ HÁKøÿ0H湺ù:¤{ˆ¨ŒF£Q'èÔ61þlàLU×4Y¦="<Œ¡óªþ_WŠ“ÉäÂæ¥,™R;Ž QLÞl6ÍÌ|_ žwzzjña_ÿú×íÍ7ßüıŠ»ÁŽ`'âñ¸åa¥°ú"•9íH~„öVÇ?ÔIµ?j7™Wâì+v„9SbŸK훶GeJu•9Õø($-èê¨öS÷hã™ÚæЫ!7Jt¯é³t^x?mÑÀ=ÁOrŸ’Ṅö+þ³ŸýÌ€‰a÷I¦†…«SETEÒ @4îGÉU˜”qbsÐÑhÔƒ±T*åiaLf³ËònŽÍÓÐìêleŽD >5c:d„SƒXÆIš:ë÷ûFýè”p£Ÿùüòè†xŸ;Ž{ôè‘Õj5ûµ_ûµlˆìépø(%–;ÈÕ­ŠÇtCA}†ÂáäDÈw¨»:ÆJ(ÙƒMàù¼ŸÊ¸®¬¬Øx<¶N§ãeÿq‘HÄ7å™Ì“úrõ%<ƒqÕMKÁKl"ˆÍRìÑl6ý¸>Æœ9fc=l#s ¸OÇdßXìòŒö^¯çÇAâ3[­–Z­V³{÷îÙúúºûŃƒûÞ÷¾g{{{¾t›O¢ -ÿ¦øYñv«Õ²X,æK'˜tR‰ %fØÔ;ˆn‚˱…Ì%~߃Íÿ{n°?!3ܯŸ+>!WŸ VS¼œÍfÝN)©ƒÍÁ6!ñxÜz½ÞBU¾ÀŠà²l6kù|ÞãdØ‹ïcƒ5ègÎæóË£ ‘iä“#Êûý¾Ë}"‘°n·ë2Θôû}?F2•Jùœ(VŸÏçùâ¿8ï÷ûn¤WVV,‘HØÉÉÉBÐFíç?ÿ¹mnnú±V|ðÁ‚ñ x O¥RV(ìììÌíÎÎŽ}üñÇ ,É/s¥ÓiŒL&³pDÜÿ¹þ×®Ï|æ3öàÁƒO|¾¶¶fÙlÖö÷÷m:úF:ß;;;V*•¬ÛíúY½©—H$ìý÷ß·íím›ÏçöìÙ³OÌÏÜØØ°““33{饗U–TOѵ¾¾n§§§¿Ô½ÿ»]ÿ»÷]³<ŸvmllX.—³““ët:×Þ·¹¹iÇÇÇþûK/½dFÃm¥ ÿ_\ÉdÒîÝ»gÏž=ó x¶··-‘HØÓ§OÍ첉|>ï6kß2™Œ•J%;::²—_~٢ѨY&“±ÕÕU‡Öï÷mkkË×¾¶Ûí…õЀZJãs¹œnJðär9 Öétü¬ò••zÝn×ÌÌÉ#~F£Ž&“‰e2'n¹o6›Y.—óÀûlfN–ðlŽuk·Û–5«EÀͼB\$“I+‹Öëõ‚O€c¹\v JJI{m”÷û}ëõz¶²²â!|ñ; Òì2¹yó¦µZ-k4>¯ø HÆh8úºåÁ``“ÉÕÞétڢѨ“sndø5¾£¤m:¶f³ióùÜ -…‚¿ ²JIK|$¾PWå¢étÚb±Ë} -...²‹±ØåîÔd^9Ñ@ñ$ý…FV­VÝ·M§—Gêt‘]æossÓ[­×ëV,muuÕÚí¶äJÄonnÚt:µ³³3Ÿ?6`³Ðˆ-³+²ƒ€¦ÑhX:ö ^3‡à ‚0ȧÓÓSB>üðC»uë–år9O BȤ€) uÑMÞ@ð?ó‹Å¬X,zàI¢Äˆ™-j`)ÈÆHŸ©G0›™“qÄívÛF£‘mllx?2™Œ÷«Óé8>ì÷ûŽÛz½že2ÇÖjµlssÓ¿×jµ’ƒÁÀ3ãŸ-Ø.°%m†lPb„ñE'!Q/..Ènž‹ÅÜž÷z=/cž' ·gxàÐL&c§§§¶¿¿o;;; ™ÚÙl¶0, J¥RöôéS;>>¶r¹lñøåæÁ¥RÉêõºF#×ÝétêóÏ•¹\ΟM ¸¾¾î6&º®öz=¯À‡L&—›c§Ói? ˆä¶3“É8Fe¼H2àcr¹œµÛmª±£½^Ïòù¼“kétچáÙÞÞžF#'KZ­–œœX&“ñjD’kGGG6-—ËY,³R©dçççnÑ‘V«eƒÁÀŠÅ¢ÖÈÂéé© -«T*vqqa½^ÏûÇ;¶¶¶|žØ4¼^¯ÛÊÊŠžžZ©T²½½=ûðÃ]_’ɤ¿ŒÅbV¯×m6›Ùöö¶»œrLìÁÁ•J¥…“ɢѨ«Ûív­^¯{? kòù¼ûl7s? ,òÖ[oÍÇã±³çšåÅ™à »Ý®¥ÓiËf³Ön·íââ²٬ ˜cU0 Ãéé©‹Ew†&z<[³ÙtG´²²âŸÃÚÂ2œ9ÌßqÊ($ʨ†¶0ŸÏÛd2±³³3wf½^Ï™xX:’ 1½¬@€¥Æ¨b`é?cÂs˜peœ/&HÙ" z»Ý^p@0Y™LÆC¯×ó ©@GK_âñ¸Ÿ‰Š1F"+•JÖëõ˜nÆ6™LÚùù¹Ë`yRû²²b£ÑÈòù¼?;[£Ñ°D"aù|ÞÙP -µÉdâNrttdÛÛÛÞ@Áùù¹ ßÜ‚Àt{{Ûf³Ù‚3¡Ú…ïW«UËd2V¯×­Ýn»’à‰„›­­-›Ïçvttdff{{{–J¥¬Ýn[.—³ããcÇ–Ïç­Z­Z©T²ÓÓS—·X,fù|ޚͦëà0Ífm0¸c„¬8??·^¯gëëë>&£ÑÈÆã± ‡C+ -–Ífíääd¡ ´X,:aœ1?ãñØL$F:ŸÏ;xЭ¯¯[$±f³éU -œµêD3JÜ«MÍâ)(¤=´•ùÍL§ÓÖn·­Ñhø;C£•³ÙÌ -…‚믖Qæ`”5K¬òK–ˆß3™Œ+PšiÂvh.ÓéÔòù¼ ú‹Þd2ÿ8ð~¿ïº‰mÔ -tZ«Fyp ìÎ`‹ÍfŒ4ËFðÆ;´ÂƒyÆ.áLg³™ƒ;lR˜¥ÃQQAC€-Ć“Ñ$ã‡ìF#ËÙlÖŸÝL&V(,‹Ùññ±W6»»»vzzjkkk6=ø43'[­–Û•jµjÖn·­¯¯»='Ài·ÛÇ­ÓéX³Ù´|>ﶒ‹@G —J¥b™LÆå¢V«Ùd2±µµ5;;;óvÅãq»¸¸°ÿé…MXVíÅ|Ahöz=Ͼ,k?¤æ/ºîܹcÍfÓ™ñxl…BÁR©”moo[»Ý¶ÇÛææ¦%“IkµZ‰D~á³_{í5K&“öðáC{ã7l:Úûï¿o•JÅ*•Š={öÌŽŽŽ\?Òé´e2»wïžýð‡?´ÍÍM[[[³µµ5‡öî»ï:(~íµ×‚**4 &ÏÎάZ­Z»Ý¶R©d»»»®·ï¾û®•J%ët:ž¼)—Ëvûömk6›ÖjµlggÇ=zdOž<±T*eŸùÌgœÈÚÝݵL&³@¸ƒVWW­Ñh¸©×ëöâ‹/:&àM¥RöÑGyv¬V«Y.—³µµ5ǵZÍJ¥’mllسgÏÜÏÙÍ›7Ý榟?nöꫯúi ÏŸ?÷lèöö¶“?à—øÏ7oÞ´Z­fOŸ>õÀ®Ñh,ÛffwïÞµjµj?úÑÌÌìƶ¹¹iõz݉Àb±hÍfÓ^}õUçÏþsëv»¶µµe/¾ø¢]\\Øöö¶=}úÔ>øàÛÝݵýýýOÈð`0°B¡àd(6ëºkooÏž?þ å>¼îß¿oõzÝýÝËdüöíÛ‹ÅìÃ?ü=ÿõ×_·Z­fñxÜÖÖÖìààÀž?n÷îÝó1ŠÇãvzzj½^Ϻݮ -kµZþ äÿwpp`Ÿýìg-Ú{ï½·ð¾/~ñ‹V(ìèèÈb±˜oÝh4¬ÕjÙ|>·N§c­VË666ìÑ£GÞobl™Úó?þØÉ\°.di¥Rq¢ÎìÒö°E£Q¯^DoÚí¶e³Y'˜À—T6ò3DØ7¬ÓéØh4rB¢¿vÌd2V­VóO&ët:‰Düÿ^xÁýøºR©¸o vzzêXÀÌ\O³Ù¬Õj5‹F£–Ïç-NÛÅÅ…'×Àh´“ùD/ñùñxÜÉ^l }ÔŠ>ôµ×ëY6›µb±hççç–ÏçÍìjÙI/âUÈNë‹‹ OþKðØ=îRòËål4ùÜB8Œƒû©T-‹fv¹›Édœl7»\V´²²bÅbÑZ­–ãµV«e‰D <Èsú ¹ù¾0O§ÓÎ$³FPÔív=TæAË›P¹—{´Ü™²}‚_–k(Êøš]­õ¨Ã´Ã5ÙÙÅbÑÙ̼3¸0R°ƒZ†Æs¨„´¡ÈÓv-·A0Ò(/Š¸²²âÌ–þ¡ÌL*%k1eŒ´‘q…eƒ‡6Nmww×ÌÌêõúBép6›](wƒ R9@6´¢"ˆ9ÑŒ™&\ÈÞE @p¢+óÌsé;²FÛ0R”Ñt:—7=+8”5•·ÉdbívÛw% Ëf³nˆPl-óQf¢ Q†Ëd2 D[2™´^¯·‡Cëv»–ËåØÅb1«T*6œ`¡üU2W±b±èì>2ÃXÏf3«V«6 ¬ÑhøQLúnäY&€ÂQk¹ r–ù’‚Œ"€TÂ>Á"˜?;;s"}¦¯dÚ˜c˜z]/Œh&çÁ|â(膕J%×-ÈKäÝÌÎx×913··2¦ñxÜjµšU*[YYqV7‰x›(«Õj.‡èºƒ­¡=G•JÅR©”5 ·1ƒÁÀ‰—t:íºF -AÅøcß±-d;tŸôˆ2Ãóós'‹[­–—Pâ!Vçó¹•J%›ÏçNî| «Ôö d:*•Š‹Ek·ÛžeB~d ‚W³>T‘m6›6mwww!; -ÑÉ„-BOÕOŽF#ë÷û~B¥†øDæ±Å¾Cë)š1aŽÉžÎçsÏä@A,’ý…ÔÏd2Öét¬ßï»ÞPŠîv»]Ï:PªJ‰vÈh+öŸ9 `‡5[®Ë€ðØ(@tܹCUC¸LE}jX–Š^¨l0þ|ŽŒ"Ø5t¢Œ -«Ñhä­¶€1FYv¼Ð/d™ûðšäàÙTËäóyËår6x†`E'c±˜e233{þü¹•Ëe'I ³WVV,›Í:1Aßétœ¬Ó£ “ɤx0B–|:ú‰ÊÝn×û˜L&xã@A¼#ËÜŸH$ìààÀA2ÿȶZ-kµZžLÈd2nGÀétÚñ Ø0Úùù¹ËDŒË¼@(«ŸaüI€÷©#Ün·ªm&“Ë»ãGyE­V³5›MËf³>GãñØ“œÄ6àŸ|>ïÕXÇÇÇNDPÑ ÈôJ;äø™ -–@PÊd2¾|»H5¤@±X\H6a?*•Š“ÿè4U%$ó©â3ü-þÒìr Nl}}ýíN§ãN[A¤fÒ0îL‚ŽAÀÉêúve$P!¨§Ì‚Õ¬Ï'3Âç(cŒN§S7dÝ`ÔlÍÞðNŒ®dôOב°&•L]$q€…° Œ«>ƒKÖ’va0¡SF‘4aÁ˜èc\PJþsY¯×½ŸŒ2Ñív]È´ ’±§-0oJPÔëuŽff A«Õ²áphõzÝëh4²V«å’@¢q|¿\.["‘°V«å‚‚ÑhdgggÞO€ -©Ž”ì7ã1„\#s”½ëº0 cƒÜ꺯‹‹ 7è$D*6< ŒÓÒ@’R;Ɖ9£ë£Ñȃ†n·ë㈠ŽF#«Õj DÌ+㱂laî©fÑõd9Zi@¾¸¸p›„î+@D"î”ÑÈ9%è3ΞyÔÀ…¹"ˆÐŠ@*:M0€ €dBþÇã±Ï ÷pTú¦òp 27T¬43Ï:+P’9¤ 8.ÈÆ,‰X¥Rñ9ÕµÏdÊÍÌ+ ü(óƒ  ½´¶9ŸÏ»¤­*#š¥`ožCp°UШU&Ýn×+ÄÔç´Z-ë÷ûNtáX-ÁÅŠR©”u:ŸGm·Ûu§•/\€RÊ&ù÷ñNÊEãñ¸ÛÙÑhäå‹”DRµÅ¼â7•DP@¦´Z-žûý¾ÖØè^¯çcŠQùý䙌'}T‚PÆŸ…6¦Óé¸]‡™ÍfN œœX¯×³F£á•OõzÝí ¾ðââb¡Ìœ -$l;ÿ(Dø;ÅÌœàPyÔõ¿,Ÿ"Hd’ɤ“ÍfÓ+°˜o@>vÛOy¨fÖ†¹Ý¤Z£Ýn[­Vsù¢ -ŠýßQuFÖÀWGGGn‘º<âììÌKh‘?3Á[»Ýö3ØñUØ<‚xÌZ­æY>²Åí¬cÍf>NgÀüp8´ããc·$f³™=}úÔO0~ÀþÌS!ƒþ#;抰OÈ:$-vÿifÞ—pIÅh4ò¬'Ïó ?êOkµšõz=«ÕjÖjµ|IX€ù¥êµÛí:3ãà“™'l$Kg OÐÁ`°`ƒð%ØãøøØI%0 öÛ‚Œð<ÅÇÍfs 36È($;•Çȶb†›ŠÁ±È ò ùÎ;úý¾·»Ä{ñ¹Øì>²†NáÏÁZÌ!1û‚hå-v›À]1qb;Æe8zÖÆ@â1'È3sÛO‚¢ÙlÚx<¶Z­æ´ßï{B¡Ppßjµ¬T*9éGb”%(ƒíˆ)ñwŒøtü˜Nå1áSc«ñë`Æ¿ N§ßà$t0F§ÓñÊ7>ª,1 êÝÇ—ã›”Ô]FÀð~M<1$ÂJ@ì>8¶jü 5»ÚŠ1F£»qãÆÛ1Î[Ùo²(=ÆU4@VKó™| JC€"V¶ç€RB¸6”Ls/ ‹5->™9ÃÌÏ<æ‹Á†Ô¤R)gE ¹ø›–Cvð~@3ì6›1ÅC˜Pþ¦ÙHª&4ÇE»˜pJ•4pe®µÂ@É „–¹Õð1FfæÏ& £>úwþ¯Õj `G剹T…µEN!°r¹œï´Ëç8E‹|>ïÙP‚7À…fNÃÒä•Ì^2™\` )éÖÌsÃ;´4 5‘Hx†ð],Ý!éÆhÌ) -úT¯×Ũ »Œ§?žÃç¬OÓ`\û YIžÏ˜`œpÀdÅÂŒc¡†'ƒ|ȪñÅid‘©Â¹QÖ…¡‚ùÔê%ƃÌ$U?¡ !RýPòVàÈx¤R)è¹tþ”Ñƾ0nÈ9`  €‚‚Õ&›¤ÄòÉxkrÆøèf@€9ºÉxA ¨MF_t]™•V«eù|Þ³ŒfWGwjú‰DìììÌ+ŸÔO@â*¡f|°_Ø72AØAÆ2C¿h4êeÝØJù°ê»b±˜•Ëå… 2¯ËÐmdˆq°@4Äb—kõÈ  Ù@‡vŸ¹ƒÐÔiEAmS;É÷J2Ò~lóÃW*—)l/}Ö, -Y@+~˜9&ÏD/À<ÜBåU[<è,kë±S,"kBPLF²ót:íz], i¢¢T*¹jåU4øC|v£Ñpý… ¼f³Y[]]u{ˆ]Âÿ’)#ÐbŒ Z±ÛØkJEiAq£Ñ03óìú‰¯b=%æétza©6Dý%vyB{J¶™wðG§Ó±ÍÍMÇô;ŸÏÛáá¡è­VËêõºùŽéê§évÅÌ<0CözhŸÊ—Ê7ýÔ*/ªÌ¨ô©.G£W{1PU„¬ðþl6ë º¡öyÁ®°ý h"{NÙ›]R\ÀòAÞ iLEøç=ø"älpzzêXÛE€€÷ºÝ®Ïa&“ñMàÐcªÖØÛ€w#¯Œ5=8¦V«ùçL²´øð 6AíœV¦©_A†‘}py`?ÚšN§­R©8ÎÅ’]o6›V(,ŸÏ;&¡j&•ºÜ'¤\.; ¡­Õš`Æ‚ùa¹3ïEæÙ#9TùšÍfëàc“ɤ“dø|"ï¯ÐðïšÍf¶¶¶æXF“ªTd [Øä)—Ë-Ä¥š¼Ð -0¿ÖÌÄ9òÅø©Ý -u ÛT«Õ\/cÕjõm^ŠqàgÀÆ‚ì˜f-P>Œ ¤|!,#R @µ-°€v‚k !† ¡ÄSÁUœ3íç3ÍúĘ8Öe’mÐòC%Ú@ À8i6€‰V‰aØÑ+Æ–à„RžÁwˆXãDg cO„ -GXg¼aê40CHé#ìïE1Tql0À<ƒ Y3ž:vÓéÔƒ¾L&㊊ƒfÌ5(%[…‘.‹n¬QX -æXËÂP,uš”Ü`ìY>]n‚Ñe‰êŒ1º€ˆ^¯gÕju!Ë ‹Çã¾ -ã¦ef0Øl¢D_R©ËÍ7‘ tße! â‘uœ:Àà»!ÀFîx¦Ík– Eß1Ð8ƱÕ@ #É<´ÓäÃÈ»q|ÈíT' -hå}è  -8%;°-€- DÐiîEîÈ&‘1 ß€Je&“ñ,•Ê£Ž•#D±yÈz§ÓqïÐ> bp ÀÕeŒtŸt+®Äêt:µ­­-+—ËXT«ÕOT}0¾‰(ä~hÀ.Ñ¢}Ì)í¢êŒ÷ªló<%.!¾é+ãe¶x‘Ê#ºŽ$ÀÃ'ØÜ„ú‰ì »È´øÈ#º¢g&­\£l^÷ìàýdyÑyöª€0碿ìµCÿðÇÌ6 -_Šoãýø l1@}' ¢b‹¬•ƒ'ˆ0ì K# ‚2æ?P­V=Õ½=”Ü$S¦¶žù"ÙADU¶Gñ ãÆÜA²©Í@ÍÌ÷„ |bÛ°_øt–¦Äb1ï+cŠMe.”ðÏiFÙaC®b±èP*XFFu6 ¸ËìEÉ1^nê‰D¬V«9NËçó‘ÍÔ%MT›€(¡ª ¬)þ¤RT+P!±µÌ.eï`ûð ŠM}%(ÑaÅXàB²ÞÈòƒlëþKà p!¡°$f³™Ë¯îƒ~CºÐož 6Â籿{â@(€4Áþ†~?ÝG. Ê¡5H¦Oè>‚g€ywM¦Åb1·øhÅ<ìGcf¼a/ñ¥l–M&¼P(X.—óªð0+òÃ2,JÂ5¨l4N0×øVª8Ô2fæóÌûùŒöáƒ!Ž´ ŠÔ/RI P2>—Ë9FÕ…’è¶Cƒ]°m!`Ìr¹œË?:¢ñ„žÒ„oÓ(¡Ìrpµ™è¼úBHYM|«ï@OØhUsüú ¶@Ɖ‹WôA‰gÖî«}a)Çdr¹üL¡I&tž¹ÃžB6é²Ãt:m±µµµ·µTÿ)£ÈE‘fÔÉ(²–ƒ¦`;t’i4ŠM @Uƒ5’ -ª4F F’Ÿi‹>“6ÓJPNUjçÒN͘1N=e¸Ùì²¼ˆŒ-@OïƒÒžà@‚±€ébP”S3¢Z= YØi²ü£Ñhan™—pwÎs¡pÈ&ÏÒ€¶®®®.š±Ô šŒ%è)¿ù|î» #s<ƒ¶`W &“‰°Œ@E3xdAÀ2¢•ØÞšÜóWЫ•gRDÌÊ IDATØj2~YÉÆÉäj Ë1Ô“•™Ïç^B©Ù@¢Ý +y¦X@ #æ=ðk¦VÁ&ö”Ä€V`D"ß0Eÿxr£KêÀ2»š]UE"w” -#?Œ2½P²A×|ƒ ”ÒJŠáðrCXƪ´ñxì>ŒBPúe3óD™N0½^ÏŠÅ¢Åb1;==õRØ““o/U1ßàK0àh4òM )ûgþÙ»Ñh8®£ä™ñév»¾Áö†Dû1žÌ­‚âÙlf¥RÉ&“‰/'TÒÛC–¹CT?#‘ˆ­­­9QF…rŸf8㨠\m7zApÇçŒ%vßF6‹Ö²aÍæãŸÑWÚ¥âE})²G†à—v–J%;l>ì‰D| ,£Ñ«ã]±Ä#j ÎÁdÌ+c¨O“Aô,Më’ a4i¹„ÒDã9@ß@|˜™ÛCpÿˆ-FîÀƒº'™ù2:t[Ê=¼_OSÁN`ã5³Íܳä K[ ¨SìIÃÉdâI9mdøÙt߀ò~äS“ÈI>*þÐ0 -²€U™Pœ˜L&mmm͸IöT@ÏÀl´q ^Ä>ñü ö?Fl£ûP ƒ$n¸LDò¿öÁß' ÛÛÛóØYOB¾#»*oÔ,1Šííí½Í¡ìšSFV§ñ05,‚ªÙR ²”ù`"ªïƒšÉPBAK×qByJí/ÇLð;&¢Á>««Yñ0hPà @e\è†!¤­Ècày0:GæñÓ²*Œ³‚¾étê»Nâ`Ȥ"à(¢(=Áª.õÀb¨`É'“‰ï K…²†P–Æn0šÈÂó£­·k8QŒ°rùX2DPŽ D yu-Ÿ±)Ÿ’Md¯0*dЛd2é$‡:A -Y!æŸw¡ø3s焾j•G y/ÆF'r¨Î[4ãŽN0?Ü‹3FOa­ÖJ<*hC†µÏZ¾®ì&ÆNßAAC•}"¨Æn1–Œ-2De:ž¡óø§ÊD 0²CdI•C¾¾ò•¯¸Ó⻉DÂW2·€R@€FZå÷ ï´yÆ™3æØldM CGd ‘eÚgfn#ÈFà$CÕq§´¤ÀÊçó–Ïç}m;Yµ—Êî£[xì=>?àç~6nb¼ÙĈ`”1ÂþP2×Ø}ÆŸ‰½g<ÃÙl¶°©(úL¦ ¬•ø|m ½ -HÑÅÐvAVè²/6’BñØvì;ó£¤v’ûÉŒb_gü¹út²-Ø?%Ä°ø 86‡‹¹Ôù% ÀÏ°Ó7ò yJ[Á+‘HÄËJ9ùAsÓŠtЦ T1A&KÑ 4еÍø ôW+ ‘Aì%åèC¯×³µµµ…ì3ÁÏh4òÝ×™ûDâêÄt‹¹F^ú[©T\÷!«"‘ËL½"©TÊn=‡\0Èãù|n«««ŽÁXªŠ¿¤  yÒ’wæ‘å Ø+dƒ¹§”}d¾wÆ‘v3l„‡Þ÷û}¯Ä«ÕjŽ˜'pýÖ”[µ_Èk«Õò“Àn$üžN§­X,ºÐ$>“*&ü´Vöj⿦Õ~« ã¹Ø$°%8q8ú‰ @ål$ˆÞð^üƺJ H ~ó+ ÚYHâÉdâÇd²ÄìíŒáB÷”ÂÆhÉ¢T*µ ëZQ€~¡cuÈ 8šþCè ÇãqÇÒÜ!D[‘9|7¶©P(øÆyà>pO˜À>0Ø%Ð!|Øôš}ˆ °‹È™u~ÇjÕ&¸– /±·šPrƒäø‚ ÷8~¬q/d”fäÑmˆZtâY7ÏKª?äûŒUô9ÂרÅ&à¯nß¾méôåQ…ü<®{ €9À1¯­­]öccãm&ƒŠðhù<ÂpàÀù `…ñ339ÃÃcÌP8Í6(€c`h«f¤x}c¢1^´ÉØ’x ‚¬y ŽC­ïcò5£;½Ó€œŒ)eL˜*@´Î‹–:i¦…÷ãú‹d ”i+A˜#îT¡ú^Ú¢Ì2ÄB6›µ—^ziÃÑ£ˆô‰€Ã®;lr¯BKTNÈRãdp>8úápèFHK5Qr5Œ)5à6”rXúÆ3´#Vn@¸tÀ@·Z­gƒq2wE­Vk¡Ò€÷  A™p­P`ÜØx¡e‘è: þ¦%q´Gß©²Íܤ0è] Öµt•v›]m܃ãýÔàS+i4{‡=T[‚žC~ ×”J.o€ýÓç¢+ÃáÐÏÅb¾O·Ûµõõu‹Ç¯6qÒŠd”çCüè;‘ä¹Ð¬9¶ Ù`° ‘Èå±fØ!ŽØ¡j‡¹Óuô0ã4ÑCÆŒ ‡ì' àÀUçÈ@l@D)›Ž\ë\ñ?}d|¸g1F½”Sí&kúx¯€_lŸ€Y¢Ó¥;Z¹….Ïf3ß´-™LúîâdSð©ZÒï®köX—¤0ßñxÜ}í¤]Ø ÍÄ!»”hkÖœ#N!¶°¥ - Ðut÷jà3ŸÏ6©ãî¤i@ÄüÐVæ›þ(ó]&cLé:㫶M÷B' 8è6ˆçC´Z-K&“¾”ªdc„èFkØS²<à Ö›þ±h2÷~ôKñžVCÉT¨Y>Æ)êK”„áät•ù†Xׄ󧲘Éd¬Ñh8¡–Íf½¿fæþ‡¾(‰†~²é§ÙÕþZEÄüëéÈ䶌¡Øƒ@ïA -êr)‚ -*°iz<%2-Ánb‡ôŒM["™S|:¿ØB&3ÎTªbØ+ý™±ß@ 3,-Ôk%u.”xÇ'T*ñ¥$ýŠÇã GzÒwpz«2ma®A%!9š’~òNÚK"†gÐ'°+IÍ(³Þ=™LÚÅÅ…åóù…Š -¾×õÚØ%ˆX­NÁÎôûý…ãøð·`Nô‚þPõÄ?äçüüÜm2v Ô 4²J½ßï»þ3ÎØFô‡Ó­X‡}×) Ðý•GÅØ»èšb/ņø:H7µ¿Š‘ÐeúNü«ö\+”9›ÌœÐnÅ4“ÉÄIK’àQú¼Ó&Þ§ñ û ƒDÌ¡ÚR’f`'N—©T*—ï¿qãÆÛ(›6TƒVÀ¨ ;†M²ÙÕZpÍúaÄPr3óg°P2€%ÂMЄ°ð}‚t-yR¶…§­ú;“¯ÄC,vu䟂@ºfíq|ƃ¬Œ*™ ­” }()Ùguð°8 -ŠP%(øfûɊà0ÐÍê3?8FØ<î¡ç(Ѫ֔ѲýåryÁqBPš£;Ïf3;<<ôÀ ÈU¾qÌ9ïÒŠœe‡ðITp@Æ2”žKŸƒZ‰DìääÄYC ÄÑu”N‚PT‚9äÈF% 4pŽÅbžÙE"+ - YIÆYCv•ÐšÏ¯6 -"ÀEÎqæ|G  ÏF®ÓºÁKÈf+!©A7ŽŸ9á¹t‰ùÑuaÈc³Ù\Øpæ(á`!t?ôœïj6™ì†æd'5ðR¦VKYz£óÙjµ¬V«-”ùã„il €ÂøÒÆ($eµZ„ •’1׬‹ê¶hvUF¨d@`¯¥{óùÜFclcOvEí0¤ààPôŸÇsñ Øa%j8¶ ¿ñA»´ÚIKûÜ(SFÎ5¸`,G£‘—m*èÙ9ÍÆàG°å3ú6™Lœ8D_uí=r¡+¾…1V?©*"µ‘Ì!ºˆ#j‡Í®Jåù>>¢Ÿß/²Ô -D òÍÑåg6¸SycЧÉdâ2CEÜúúº™™ºÖäÀ‹y`9‹’1d¤ ?4ðÐJ úD֖焘„]¹'“‰÷“eø&ä…ïhåF7‘%|ã¤Iú«ØkeeÅîܹã;ÇÇb1k4N¤ÕëuÏàS1±±±aÑèåFÄ,aB§±ø2Ýè0YSæ ÀR‘±Ñ’ãh4ê›Éá 1À=aˆÀ³T*ùNÿŠ±¦Ó©W[­¯¯ûò -tP3¨È'zþ@Ÿ°£è Ë+ðÁÚwÍ‚c»u‰›&ÅS|ë²ÁöØsì.¸ñÆßM&¯hã¾O¢;F@Œ-FÀkštBi3‹uØð“úüó¾€ðµÈ—f¨µ‡ç€£˜oÚ¬º€¬¤Ói'c õô(Íøbûøœ¾¥R)?†Ýb¬ÔA:`›ðÍØjjŽ­ÃATD£WÇ c§C[q ëÛñ½È,qq -cŽmI|ŽãÕ% ô“ñà¹Ìýp8tâÀ—͉™À±qŠc R!ñ‘IÆ ;ˆßç¢r ×ë¹ ¸¸¸p}#ɉD|ÃH­«°!FÐwÚ«ú q‰ŒiU*ö¼Õjù) õzÝjµšë -1ö[üŽ\×4›ÍKÜÛÛ{#hvµAž²ÞhlOU:&TÙL„’‰TÆœïb`¹¬\jfAÔ O3æDž…àÃx…†åÆ9òw‡õ{ܯÌ(Aªc` ‹¹‘@¡‰«óB5 Ž`2µÒ#sV0Â= -™3œœ~@0@\AóPÀ  º> ¥f~0(ò ýcî=zäJ«›÷Ð?ŒB®ì02ƒF¹(qáôæ¨Ùlú˜‡`‰uPº‘¾@pÌ”ãje’nvB;È ;èË]˜/tÒCËŽq|WKÀZÅ@i(ৢà`G?Ø”j6»\kŒ}Ð -(2' ƒÎÎçs_ë‹CÄ¡›Jüã]šéQ]PB™˜rfr±Y9<ßÌ<¨cìؤ­Ä1þ¢Ä 2´P(X¿ß÷]S9¤}ø.æ‡8…pk6›¶¶¶¶ c©TÊËõÆ 0‚=b͸ÙåÚkŽ3„±[2º°e¾ð+Œ/„äêêê€UÙBO.Ì—fÞ°aê÷ÇÙlækWÑ -ñ1èò=D×™;l¶BS}:• ø#ÈS%•Ü“è> „©È¼f©ðÃfW$öp2¹Ü£ YÅgE£Q„Jžjõ™hÖfÒ%×8‘€±À¯Sñ|*€U ’Ëå<£iæ“€ qÆ|"o`q6äD­Ø I&“¶µµå¾™zµlŸ“m””Æg06,kBþðå -‚•xÂN1~ÃáÐ÷+!k¨UñªWØ0Jó‘=Ú…=ÂV¨Î©&“—ëlÙ1$‹5a… ¥”E£ÿÈ%dvÝ É:p‘ê?ÏÖÊHm|"ÏËè­b~°‹nÀ¨YwöÆ è#ÀäPd ½Ãb?)÷Gà˜ÈD|ªbCÆç+®QR¹×ä¶B«#”œC*(–H$\ç!ê°y—FÃVWW¤N¥R û@¾á§h ö›W©T–+A:k²ÛƒÌ0÷È÷Ђ ±ÍØYú³¾¾îYk–8à+)¹G6!Â9â<vQy§*– ^ù -ÞG 1µØ ð8z§ M­Ðdþñ¥RÉm¶yÇ°¤ŸGU¸E ÆL“”´ B‰¤ˆ’ØNÇO«¡z;Œiiö˜ÛÍV¼JglssómU@ &|œÎ²ì®¥‹zž1œû•é$0¡sÊ¢L8-ý#ðGÙÌ®J×4`&XåëÝÖ××]ôdJÌmjìq2Êœ’©cR º`m5S³¤,ïà#<|®Á·f¥B¦ †±¥]¼OKv´ÒBG±X\8‡¶â1D>PFÞ«:Y1ƃËX«S‹Å.ËQXk«„G£q¼hÆCwJû{e¹5Û®FŸ@p 3 8Áà–WVVü\vœR±Z­æÆs2™x¶™Åá”(Û#Ô2Lݵ×ÌÚÃø"ß°ŒÈŠfa‘}B‚ ˆô]SgÈ8¢#ãñØw/ÅùPF5›]-û€¨SðØäYØæC3'fæFVAï¼V*×KlÏ‚”ažCò‘1 ½dù>ýã^ÆV÷ÎH$¾¯†fh‘ %b±ØÂAqÆ´Ÿñc¸Pm«®£}Œ­fæ•{ôÍý¸‡ç «©Tjaí¿£Ëj£è6 y¥Í€:ì%U:8cªwøžî Q,*C´¢w`—°M+++V©Tdšy‡ø-‹ l‚tl2ÃâÓصž -˜­­-Øl±’'Zƒ.ñ2ÙÈ6—‚t³+b×ì5~nuuuÁ¯*¦|áYRÈ8¶”ϱ÷è?r‰íãwtBqà– z@†(™Lúnmvù¿Äb—GV«UϨ£³,ÓÌÞlv¹|B²Êì2CMuK8Ô¦BR¡Oš¡ÂÞ­¬¬ø²€`,óvmll,d^#‘ÈBUžx±X̶··lÄ%߃dåCMРãñØòù¼•ËåÒqÁ§°‡ @šlw6›]8=@](¬V«ù^&Ø.]bÙl6 †ddèú Ô Õ·2F½^ÏKz‰„gњͦ¿ Ùe"2©I#2î¹dÕTw¦Ó«‹xëÝc±Ø¦Ҍ;A*ŸÓ/ú`vu’>‹jO`ÞIuUèϮΕ7³‚[‘L&½’–›Ú,ÿÁæB¾h¶S+”x…€ƒ“±-š Sò—$˜@«3c±Ëe<rTKa«°qóùÕ†¹œ®ƒŽk² Ò*‹ÙÅÅ…ÛyŽæ=årÙ—Œa¿O­Xæ£c­VË—Œ±ù&•OÑèÕ YàÆÿCÕ×êêªÐøÓJ¥â² NW¼ N&È%ž*—ËNäBÎçr9ÛÜÜ\XM’ƒùÓø»Èüy”,!®Ñ}Š¨‚ ïZý ¾ÐDñ›&¦Àü‘HdáHFp,•¨Œ1•ê¾¹Ýn{Õ.>=ÂBp`'!"±¯`ð!D©b8­¢Ç×C°ñ!Hr$¶ Qyùò—¿<‡W§M ËE™ -ÿH>g0\0ç¼4½ÚO@K^4£%š=EI5›óHðG°Öív­R©¸2†PbÖÊL§—gŒ²iÊx<ö}J„MfŒ!íÅ1áüPV¨–ÄLYÄÒò, fÓ”õ4)èňÃÄbdp2 -Î1€d -_xá……ÒT€(`P¬#¹¥¿È BóFÙ?2EŸ´Ä‰ y2™¸Rã¡# â=€Bƶ;»¬Ì€ˆ"sÃs Àé{:ö㌢Ѩ5›M´È¸V*33?{YC®Xje•¬ê÷ûä@¶!3 -Vy·‹‹ —/5ŠÈ¥~ØäBÁ Œk<~µLB³:d‰4 ìèyéè¤VnmDŽ1\èFŒÝ`aÌ!Ï°[€ßxüjrÊE žØÀ °„Þ\‹E7Ê¡³Lñs4zYbZ.—½-èsnvµÇ -6-Ì jˆÊ¿îc¡»°“¡­V«V.—­V«Y»ÝöMK×××íððТѨU*;??·Û·o[,³gÏž¹¬ÃØomm-”Fçr9»¸¸ð@œ 8çó¹Ý¸qÃÁ_½^÷À¼ßïûùëçççÖjµìÎ;–ÍfíèèȃU*•ÛnÉsK¥’ë^*uyž<ã­Ç â TV“ɤžž~ ÷ûý ˆi·Û~Ü+ý¡šAÌ"¯ãñسðºã9df‹ù;à}ÅÆB§‘;l?C‘IP Œ/àg}†"jÛ±ßØl.%ˆVô_3ŸÏ½lRûݤ=ì ]E§ñ+$ô^%ãuý7L—¸6ÕVqo½^w3›ÍœˆÆþãÔ¿BViI>Á6 ýcÌèÁ9kõè;Dw¿ß·ÝÝ]_»O[{²‰Ø0¾³··çËbÄÒdÏ÷öö,¹Ü˜Q×9³C6Yuª™ÕÕU«V«vvvæsÎÆaÅbÑf³Ë Nñ%ÕjÕÎÏÏÝ^ééHJêqÀd qL.Õ+ãñåqsAºÄ €< /È! l;þˆûð àÍ„#Óø·µµ5Çbúðápx¹ÏB¦ñMØýx<î¤[Ì?Ï‚\Ä~` 7ì7€?f,ÀÌä³.9ѤŸnà¦ØCÎÀ¦è$»ë&º¼›y.—Ë Á_§Óñ~á÷—£ûà=ä.—ý>âtC+Öð?Èûéé©™™ã -ôEŸµˆŸ!Š±eAš\¯k…d ˜FKì±fW¤ï‡\b®i[¹\ö\¹\¶n·ë>>›Íú¾PTãv:»¸¸pB“~)NãˆG|• à;ÈZ䘱ǎöûý…|%˜kb9üºDuؼ†ÇÞ«îd³Yët:n“oܸá~ùððÐ’ÉË%ȇ‡‡ŽíÁðZé‹Åìüü܉X,fÇÇÇ6íÖ­[>×,ƒÒ=ìH6pO&syl8d -X†uý`A=]‚ŒÏ5öÖ¤º&O5þÔê­\Œüöoÿö ‚1"HÅèa4+>Ÿ_íÖCÁSÊ ;Iƒ0Œ -M„c€tÀð#Ø€+Ýô 'J €ÁV&JJƒÚÍ}P5½N§³°32ŽaÁøi¡Ïzƹ–Áh¦‡g!lëp8´N§ãeB­VËNOO¤mÅØ‘I S‚!ä0UÔóós;;;³íím80ö¬‘M§Ó>®}ô‘³´ôU—¡0îÞ½kÓéÔž>}êrpÓŒ—êÉd2ñ@ooÏËBçó¹}ôÑGî`Ëå²`3³jµjƒÁÀ˦ùŒc\*•Š3³Û·oÛÓ§OY>99±B¡`­VËvvv¬×ëY­V³\.ç¶áÎ;î¬"‘ˆŸŸ»ÃîpíììX"‘°'OžØÿW±X´f³ùKßÒ PΘ˜™Ý¼yÓž={æ¿¿òÊ+öþûï›™y‰º™Ùk¯½fï¾ûîÂóÖ××m4ùúÛd2i;;;V*•l0øsÖÖÖ<°zòä‰Ûž1 ìÞ½{öìÙ3;;;³;wî8I)p"‘°jµêÄÝt:µ££#‡¶µµekkk>7ççç6D±óïl6s9ìÄÎ&“—›ݺuËGöFõzÝ:Žmmmyu dºÀ3p¾ÍfÓÎÎάÕjY£Ñp°Q©T¬\.ÛÉɉ­­­Y$±ÃÃC+—Ëvpp`;;;öá‡þÒóÎuûömK¥RöàÁƒÿñwÿÏõÿŸK1Ë/ºnݺeƒÁÀŽŽŽþ½Kõòºëå—_¶‡šÙ¥^PW*_—ùµ¯}͢Ѩ=|øÐÚí¶}ö³ŸµÓÓS_Þrxxèþ7¼VV.7 -ÃFQEppp`ý~ßîß¿ïÄ×úúºýä'?±[·nyb?cv‰'J¥’—tSjÜn·­ÓéX·Ûµb±èvåïÿþïí×ý×-ÛóçÏí¥—^²Édb?ùÉOlww×vwwíÁƒö³ŸýÌ^|ñE‹Çãvç΋D"öüùs{ñÅ}·{*!Kóù¼Ý»wÏ}­V³üන±á¾¤Z­Z³Ù´?üÐöööœÌÁ6 {þü¹™™}îsŸ³éôrß+ü"¶ ŸÜï÷íÍ7ß´h4jÿú¯ÿj•JÅ666ìÁƒvûöm»qã†}ðÁv~~n¿ú«¿jóùÜŽŽŽœ0R¿`f¶¹¹iÇÇÇö /X$±'OžØîÓi{ôè‘íììX,³³³3ÏŒS-ľ GGGÖét|™.dÆíÛ·m}}݃>úK ¬A¸Ùr„=M&“¶±±aûûûŸ³d2i¥RÉZ­–­®®:Ñuttd;;;ž n6›¤Ói'É9úquuÕñ«úKO$ìÀ0|vvvæ›ÞµÛm¯2<>>¶­­-¯Tk4V(Ü¿™]½É˜mnnZ¹\ö}§ÌÌ7,‹î£ƒ5›MÛÝÝõ]ûwvv¬ßï;®¿qã†_„#ªà€#Š‚J%ÄÄ!NÇv°ÇÖl5íÕ©Õÿƒy¯G¿¾t¯n9ð¾'ÿU¥’ÔýŠÕÕÕX^^®xÜï÷ã•W^‰ÓÓÓøÉO~RáÍÍÍx‚—¥ì IDATôèÑÈ{ïµh¨Ý4o¿ývUÒ¼ÄÓÓÓxüøqܼy³:ÿàñãÇ155·nÝŠ¹¹¹ -ã¾ñÆñÚk¯Å7¾ñ8==­­­øè£âå—_Žv»ï¼óN…oVVVâ½÷Þ«to¿ÒŸ~¿7nÜy4)"FNõ?99‰Ÿÿü籺ºF#>|‡‡‡ÕéýŸ~úi ‡/Óh6›N™­Þˆæ ‘*ÊíììÄêêjœžžV6.--UoYPqúää$ž>}W¯^­ŠM‡‡‡Õ"c½þâðáÚoýÖo ù¼„’ùÿú¯ÿŠ»wïV[JÞy爈 -ä+€µZ­899¹àìþÿÔ> Èø¿ÕÆÈÁur¥Ön·cnn.^zé¥èõzñèÑ£ØÞÞŽ………xõÕW«êÖÎÎN¼òÊ+#|<|ø0Z­V\¿~=vwwG*ïÚ®ÄÝ[[[ÕÖë'OžD«ÕŠÇÇÆÆF¬¬¬ÄÖÖV´Z­h·ÛqttW¯^N§üqå 4Ïáp«««Õ -†VÂTmSp_XX/Ož<©VÛµM_‰t§Ó‰÷ß?^~ùåêAze’ŠI}ôQEëêêj\¿~=ºÝnlooWÏ?j¥ññãDZ¶¶«««Õ -±\âvUU¸ªg›NOOãÎ;1==Ož<© - -Ú¥£â‹Vú\üˆ -¼ÍÌÌTÉ:Wtµ¥Mé’ôY´yPÒj¯¾Ó–>­4ª‚¬gÄ”ài+äüü|õngí>PQK+‡ªÌ«`¦b™V†U0ÓxJl•Dj•B}h.ý~¿Z9Sr,Öê(W]µB¤‚•¢øì…8óT¬=*,EDU°Òn[µ’ÈGŒ"Οæ -èÓßjšƒŠZ5eÑU¼àJ“d(ýâ¶X­¬KWX¼¿TÔbeZ²¿´ÚñìÙ³øÅ/~¯¿þz4›ÍªÐì»:TÖÿ|ÌDsŠ8_­ÓçZ­ÒxZ‰PáXsP‘~C¼“Œ”LȈ&É@…lÎÉKÉ—;ÑX`§>©(?¢B»’Ké™ü‡ä¢ ‹Ä²Ñ1z¼ø¦9H^<÷B«˜’»ltfæÅûæ>|7oÞ¬¶Ò÷¨è«¹S§X€—/~¨7:C«Dò’wIÏè$i“4É;èNO_¶¤âµüŠV/¹¢#›Óª£t¯ßïW˜H+hZ Œ™`jõJ|ÐŽE¾UA;G峺Ýnµ‚¦ÝÚU£]ÔW-_®DLchQ‡|š™™‰­­­*®©È!z¥Zñ×3²òi{{{#[W¥sZu–\|µpÄÝ}gggÑn·+™ lkQE+‰+++Õ‚VQ©»ŠgŠEõz½Ââ§'âþýûÀWߊ­Úù¦Å-í¸ÐuZPà÷ŠJêc}}½š }¨ÍFPÌWb¦Ý5 ñìÙ³ÊEœï♚šªð{DT;”wvv¢ÑhT«ÈÚ)]‹x±å½ÙlÆýû÷£ÓéŒ`$­æ #EDU Ðê³lR<ÑJ²VÄeOÚiªGt4ï~¿Ïž=yS“ôWgá(oÑBgd{Â-zŽ[ùlOvÓn·+|¨“Â@ÂÒW%¦|í~ànÆÅ3UüÒ£0²CÞOL#Ÿ¦yËK×¹#UqWòÖëNõX–d.*v ¿ˆù5áâ bù -éç/Ú5w}ϱ…ÍÛ4÷¼ñ÷ÿ÷C%QzöSÐ ñÐ):u>Åç}E4·k°) -°h\Š æÏ!‰^­¾‹.‚01LŠGN «gïÄ­¤s›¢x#'¥ƒŸ¸P<ÑJ° QÛ…¸}Gtèn»©ÕÎ_yÁ„ŒÁQ|’’ȈÈ䌸#B«Þ¢—ÀQÛp"¢RK2VpŸ›;u˜x(db"™ð 5S)¤è¦BKvê[[S5íQ²CyéZé²þ×\e Ò9Kmsºÿ~Æîîn¬¯¯W•Kîø ã㜥SúŽò”.ÔÈaëq6‚hMþûî½>îÊ•+¨P¦ŒiÒIÊ_}jLñ‰|Œ8æZß4ÓFU‘H‘ øÈd®­M,´9HTPmîd}÷OÄùJƒ‚õÓù+}`¡Achl ñzÏ$K})ðpn²Ñç<–mÈÿq*ñˆ~\´kƒyÍ¢5>(3ù1—“ì V{ñžðwÞy'¾ùÍoV»ô½hãã1JˆäÔ—Wn¯§ É?‘‡.ꌚo¸W«ä½èáN5²Ä'é…º¶üEÄÈösÊBE;úKÎ]º+>Ñ'S¢ƒàòÒ÷Ü­%À¦Ï´#CŸÑ~ô[ßqî²9W¤ûÔ]ѦdVü`áMü×uúž±Y<`á‡4ÑêòžzC]SÔaîþ£lD#}±hŽˆ½TŒ_yô‹g‡p ²ÓI¬¸HÞùÎDPÆ×úEñˆ_I¯Üg:¶“núöêc9ï£gË|¹Æ‡ñøñã¸víZå{è·™hóÑMÚ±¾8/&—ŸðqJÅvúab}&HþZ!¶ÖøòÒú>ÚžÇ4]'¹©?ÙŽí$#ö˜p8?¸ƒN˜W|àÎbb:Ú¦æ%Ì"_)¹hèþþ~\»v­*ÐS)~(/Î -§ëðñ>.(©ÏÏù­ûUb(&Ýâ³ûgÆ{Ù<1½ä¥8-»Ð.Ú>e¡ÏeãòMÄjÒ!]+¹(ÖêzÓEíöÌϹs•;•‰E³ÐÈ;Æ©qXGñ\vGžH¿äŸÔÄå<ؘ±Ñc½â†ü:qý ±´x®&ßÈ¿ˆN-øi®²ñ‡±Ü[úýþHÒ©x2(;ø¦“'¢#2ÐØ š% 7$2‹Œ¢ðilš¤¯þ¨_VXÄHUFuÚ/A›¯äèYk>(XÑLÞQñ¨ìúLó¥3Ñ5oÝ#à„<÷$NÆB>ê:òR ’4hk<Œ<2ÙPqÅ#ÞÏg¹,¹òÊUn½ƒ/:$ÍOàYN4tPG9wòV2NNNâáÇÑétâÁƒ±±±SSSÕá!*lIÆLrµ*¤ñt-mBŸ‰Þ,ˆIÇisš—x˹iëÔÞÞ^ܼyóÂõžÐ®4¾äGçåÀR2cà à Ø‘³’ "¼è#¡ûu/u`Ä1õË&Z¥—´Iõɦe¦Â§|õ[<×=1ÚÔHã`p¾Û@sØgÒNNÙ³ ÄDÐ5Ñé—òýnï®#¼‡¾Qz©ïeï[[[ñöÛoÇïþîïV…JX4†hb!su”¼t­t‡€Füà|¥.^pèù]zSºŸ&a¢E?š }“L×o»L»½¨CÐâ´d „b†À*“(&ƒš/cù¡Â4mGý“ÇŒõâ·tBv¡¤AãJfìÀs¤_ ŒÝv$&µh¼ŸEMâ,ñ€ 9$­¤K<Ð|4nDT:&|" úÝÿÐ&ÈWÑ Ý¥xìmŠ!š³ð—ó€úG·TD9 .­dTó¤²Qát?›[z¤IJT}µ€ýðo:5ñ–+4PòIN÷‘ÚÆÊÃâ(ÊZFÃDrÍL"2–Éš Ê­k)9!m+ô$GΚ׋ -™.H>xð âÁƒ±ºº‹‹‹Õ™ -4°Zíü zæN ƒzÏæó&H£î3h0ÐÐ!:ˆÝßß­­­¸{÷néØ܉JN癞¼Ô˜Nû¦Þ‹&ã‰#VÊF4ÓA³?ç¡æâ׈j´]õIº¹Å˜ÁÔƒ?ã -úö‚.ÇõÄ—ÀR×:MYð%Ÿ™àˆ/ ¦ X¼—ýéºL_|^¢‡ôq—‘ÆšGÅüãø½ßû½ê05ŽëI«ü&‹~Þ{¨«’·øºŽzÆØ!JÎøï|¡|ç®›\%õ•ÝLFÙx™ ¸ïõ$"£_ãøØ:?F° €8O¨¿LàœVÚü8ºÈLjÑŸÇÓŒOÄgggÕ\x "FßÚ‘ùöCÛ£,²y9h_%_(ßâýéÇKÚ¨ã% Ùbƒóß¿óïéÜ6Ýÿº/t^º>¬óÍž„ëÍŒCÎgõ#žfºH½(ñ€61º“#KÚÙ71‹ œ7çì>:Kn¼¸ì¸!ã]Äùnby ôÁêÃñ ý9·¿3ö“·œãp8¬VÝÙÙ‰õõõ‘k5GÂÄ / Ò§2Á¢OœÈóRâK|J\H:Äß#>ûn2é¼Gãªoê‡ -§, -úîe™¿æXº†z➉(Pû²B£cDâÚ“câaǘH;¶a㜉3˜øµYÂûÚÝ®–ÅÁ̺¡½:)ÑÅï™e~qšÂôê*•ÏƒhÆH7rKÅõ€Ç‰Ž (œÇÊh"ý>¦Ï‡«ŽJ} ¿ßic2ÍÕ"êÃ+i™ãö9»“¦á2Xya‚A) pYuQºÀ­£j4Dwøœ#åÍ•wÞGPàWtªB‡Ê{]'Ô—;[ÒIy¸ŒÜÁÊ õz½êTpU½ÀÃ{Ø—úðJ?˜àx1ƒôS¾—;Ä+ßñà¼w»q¹zÍuV:ã«ß’7%П§Ï|î.swœä%/õ˜…ö©k¸" ïUÅwŸ—›ï¢JðšR"ªq3Ÿšù5çý‹&Æù[]§Uëˆów¶“—ÚÍ gdõ™¯Tf¾f\0ö9úgp¹:ð" 4¾Ç@ŽíóÉ€º':Yñ‰¿ÇÑQú,³Ÿq÷e÷3ngò¿,=™q="ÏØϸ¤°„ 2{ˆÝú,LÕvUcJIžË¸d[.÷R!KýÈ…ä_=A¦ŸÍüñ8~Ôjµ‘âtæó¹‹KŸeÍǦåoÆÁ£ÊeýrÞô×ÃáÅx]Ã]jJþ$SÆFÎ8ƒÀœôé3ÆaoŽIÉÙy¦ nÜáBÞ98oÊŸ>¬´Šít«?gÈ'Ç~îk){ÊT+ÿ¼ßíˆ|÷<$òY¡I×GŒ¾¶—XËWî#Îw²8ÿœ7™¬ˆ {ë3b?Òà8±TcQB×s!‘«ß”WÉF}®ÙgYL Ž³Päd:ÏØI›rÚü3§Ùy~Ù¸æ6ιg<Ðé³ÇæxLäu@ìò ùËL7Å×l[¤ßçÍ d.›R£Ìl'[ ]’ƒm6ö¯Ã±ÜnÇÙe¨²ùeþg\ìáw²[é¨ómœ”âaF£þvÌX6ÎggóÉhs~”bèeZF{)!G—>ËäAÝ+3¾ø½ü®U¬ÚÙÙ©6“ÊÅs>¨{Žç]/Ig¦ó”|‘ƒs#^â˜|ÔDßK—\g²Âû²ÌƲæv¯œŒç7•ìÝeè¾Ã2ÞNÂñN»lÔèÛØq$§õê'T: _æ¡YP¡“d¢âÀƒÉ± ‚Ê •#}Wª–g ŽJãÓ˜8g>Ïä -¬>XAqRAù\Œ;2ÍÇW´¹]˜}ðY ˆó“Bùš@ÍÕ…ËûDŸñ× ¸¬2ž?#ë[„ø¼ Œñ@¡q¼‚+]Òýš(“l/¶Ïp8¬N­×GÏ“ˆ=Tã0¸¨1hsEAÏâë¹²n·[½Â."ªCUpGåÏê8С~p!sl²-¨ |ÍfsD_²ÇhÜfô??£}:Qó]ëÀOtÐÇð^n&ÿÔiÒÁmò´¹â½j%¢ñ(C¿^ÁªÝnWºÆNÅúOçAÄyåœï¸.%2>ï,añ™w×9ÎÕWëTu雚=[Dýˆ´MÑeÄù°oÆ)^ë÷»=8_KºG]=Î#¤ÈuŽ¼æs‘~m¦ëždËßúüüqï—´ø¼/“Ô9ŸÄƒ ÔfE;5É. -è€É'ùç+èèþ ´ò7±ƒ?ŽC½e|”~2V»xRqžôù®‚.Ùˆ'îÝg»oö¤G¿y¿Ç?÷§Ân›z,}zsýÈpŽÓ¬yÛ¸|]æ¼G1~”˜”«öî'2™îÃù¥þ×÷Žý…Ù4.ŸÅ=^èç?§?c\`ÂJ¿éIËLóѽŒ³LüÝŸŠ¯Ä¾ÛWåÃyÈ"ý¼ÆËp/ýã¿Î@Q~$¿¡k2<ä¼ñØϳü< bté¡Ûùç¸.óEä™Ç%æ|zó„®e‚: ª·–h†…*ÅÝ/žÓö鳨#Ô=Ò¬yñ1Ÿ cÑæô·2¤pÝ£ùãiŒoî/É?_Dô¾]¿¤'ìƒt×ëõ˜ævRnw4p ÜY:(Vs]¯¥V -8—m¾mÜ™qÑùzf£±«Oß -Ìï¤ä,¸cwÐ šœFîNP¡F÷êù}îÏü;€àß2ž|+:©d¢[Ž…óæy<¨Ì)>¢G]Ÿ]v ŸC6çIò‡/JØDú¨×né &î¼¹lcbÃÑRÑ5£‡´^V—K:ే±äk3Úü:—É$~•ú¢NŽÃ}š“ß-8nLÇd™pnÜB«“â/c?úÞ_-ëx‘ø¥„‘=¹›Ô\:ðÎýK–8:¿ÎÎÎcSL‹8OØ„=é·“½P"ã¡î?yX¤÷éXÝÐk“'ãü´øÀŸ ­èä³õÎg.&rÎW²&^ŠoºO;g2LÂBôe[ïô9}DÉf}>L†é%o/Œ(†²ÇÝÇ|»‹Ÿ™à¸ÊýF)‡bÞCÞÉïgóTßn^H¡•“~÷s—‘ß8lœ]ëqZmZ[5õ%+2ã”-bô”RMd\€c2™+'2ï¥ êú è;¨ÌCÚ¥¼¥`À £ÏÜH¨4„,Øé;O–KAPN‡C}Îûx(Oi¥óä*<·;g ›B‰°NbU’+ßöà€™}ñ3/ è~nò  ùÈa¨rèú0ÉP2]¤¬5gò•••ˆxQèPðƒcXQÖ£Î_„—ì¬dƒÁàÂséÔ=Ý; à‘VÚ/õe_³6)‘sgž]ïóQcŽüŸDå^ò?,}>Ô]:aŸ_Éá‹^³Ë‚Î˶Œ&ú}Í­Ô'ùèçpÎ%>ƒêàœLHò¥F>ãEÆGΛq^› éÿ²–Ù}‰æL7}.nÎ_õ_Z¡÷q¦ûNOO«Ø‘%—íŸs¿LÁi ½L¨k#ÎwDQžYâr~9¤ÏÉüOc9×q6ïàη²gÉ}b–ÇÙ>y•=îVºÞ â%àžÝï«uÙ8~§Ø¬Ç¸XâM|çáÂÂ3ÓYÒÅ…–›þªç\7'éa)±È|wdدäOõ9Ÿ1'­ê›ßKçä“\öâ«d¿ÄÌôÉăÚÝê4ËMô›9qñ§ -Ôé>}aöhA)¾9¾r|àrñ~üpÚqØÅyª~…•Ü—ø‚ZÆ;öÇ<†~¼Ëü-1·óˆ8š4éMHzE°úäãnk¾àê8Ìýî÷EŽˆ¸0e—Ù‹îÉbù5Ifä3ï÷X2®¯i1•Ù'íŠHCåÖ+¡ÏÉl:™“²íDêGÆ(çáÌÐd¼ÏÎF_Eå†ê€ƒcIѾedªÆI]˜4ÒÍç¥"ηp’§‹@<ÖµÃá芿*kgg燅ñõT¬Âq×€hTTÐ=ªŠi~zµæ¢­½®€4pjn}—ÎDÄÈÖ `rîºOjµómV*º0©! ‚¥p\ñúCÞ3!õqü•OþXGöº%nåbs¾Fœ?{&Û` –|6—iÄhá‘üå®}ïúãÛ¯HéõÕ:nÿc`÷ L»’\YÑ÷Õñ"Û.ÈyËÆ'5qöAÝ ÝQG4OúW}ÇÍùN²'ÚMÆïÓÓÓ8>>¡•ÅC¿4¸}«I.z§2ß5¬ÆG{Ôï½^¯zœ‡¯FŠ8÷õò…~拾×k+)[ÆD]Çí¯º†g#6ÆQ߬Ϩ7²õ«>2[ä8´-~Îx«yxâG{*Aý£ÞÓN¨Ïžð:ÔG_Ç$“À8+ú’?⣮¥ŸËÀ°ë7wˆy\Ê'ýùK:Égé‡v£ñQ:Ý/^ºž2&I¾oHKÉ?“Ÿ%°é²#$[®ìñ{™Y¿üž¼rýÔµŒM¾ˆåý«ÏÁ`P½_^sõ“Ú9žâôÑí?›+qiæÛhëžXÒ?”i?¹-<â¼Ð鯾“Þ2157âß>OûË0·øá¯Xåiõ¥Ä˜L+Ç«Õ¸ªNß.YR4'ÑD¬é¾›¶!>ù[Z犷ÍMãr®Oy„?Òâ9‡æ­BÈÌÌLýübAê]V¬¤Üô71–t+˽'¨G.+újb·]ñ»^¯>›|°Jè;uJ<ó@ÏGNètÝy^¶1ùî;@¢¾g´’ÏêCE4}~gAÐ+¬þãÍ}Ó7NÆ,ž$Mº¯Ô29Ž³jd¼/ç‡ïô¡\ÂKþÂû&ÀÈxNâ<#ݲG³l•®V«ìÞðùÑV¨ŸNoi…Å  žÜe¼Ñx¾“Çù!ýqààL×È: ÿž?F#µoŽ9nîÛç¦þ¨Ék×YõW«Õ*`¦J“p ùDú(o^¦¾R7TŒPÂáó¤pÛ9ç™ÍŸ`š|å"Š/Ppžô“ãÀ©®÷‚œÆž”°”ìå²²»Œ/ô Ñx||ív{Ä×gqR8ƒ±ÒipÉ¢"ÌËšüÈ8~Жý‘ž WÑEŸ|-LaËgÏžÅôôt´ÛíJ~™®K—„¹Ü/’Çn3¥ùЧ0‘¢Ü\gÕ§pGÖ„Ÿ3y9ÏÉKðÜ×Ë7ëŠ#‡>j<ßq¡ùÈWd…¢ŒVæYóøF}fò9 ªâ‹¹\ÖJx‡´g ¯þVñ„ÉfòUƒ5tmY¸÷¼FØÐã>í×1 }1}©øMüëñ”ýKïYrúÜh,ö_’ ãeIŽÓ·Eœ¾Aà– ‹ EÓI‘al Ðþ™¶£Ké³ê@É5ç¢ù0¹T¿Ú6§bW¤E+ƒÁ¬ú¤Ò°Ò¦-Ÿê…Î#KVYýhcM‡«äõz½:ù^ ºhóSJ¥púžKé»T Õ£"ê‹À†´;ýL¸M–4P¹¥?ªþeA„‰"wЈsnlêOö077WÍmvv¶ÚàÛý²~DƒWÁE?‹ Ô9oÔñ„AÎyJp@ ñ2У±xúŒ¸ø~l5Žï`˜óöyÈ&8+ü š vì—Ž™÷Qø( í€c“ò‡²sÝd£ {2${¥írn²Ïf³9ÒG)+`RÆâ=‹ˆâ“Û®oW]žL©ÿÜ£®åi¾º^~Šz©±ÝgÉ?Ò5GÊT0I_r8g&W\]*5&FÔZmt‰æÌäˆgP¯Ù4®öºz1Aúç[kÝH+õOºæ´0Ž{’é¿%/ÊUŸÑæ3ÀC=Ô\=Y–l5wò•ã± @=ÓÿL¾D¯hs&ߘ”¸¯"/ü Fœ?oNzH¿Óÿ’ëÉÉIU¬dü ÿà{á©Oú-šÈ?ê)eÆ‚#u-k´¡Zíü1ú›Ì÷zrL»vÙº­;ï%K¿Fã‘þw­V«ÞB¢7ù8ßô·/’9lŒ«L’Ý7f÷”py.LIdMã‘·ôç’ -Cz¼Óãµøë;Qˆ3ù9ï—á㤛…Ú<Nh«¢}8V‹[Ífs$éb¬S|טÔKÆâNÆìwÄùÎÚ¶úò$ÚçÎX¤þ²œG|àý~ã®®°{‚K»pl¬ï]椟ºHÚIúaŒêŸßë~ѦUÅ‹Z­VÉ›…Ú?ý8±ŸcMŸ/õÀyŸÁ9RÎô±õz½:+DŸ‹½=lyyy¤¸•áMÊUbôÙ2ŽÌá3À~ †«~trƒÁ`ä5[ -~lt|ª€Šç [ô)‚`ò‡EŠùùùʘgggãììÅ«³"ÎOÚ×\ä¸<RnY¢“Ò¼¥ÐÜÎÄàAç"žPoP$Ü1ʸ*C0ìÛ®è<¤©G>ê一éÆ®¾Úívt»ÝhµZ±¼¼½¨äãzÂã}“ápx¾’É‚} …l^ÙüÝÞÝe^D#¯éϸc…ýiν^o¤`•É(kŒý333•ýE”ϲq O»ÎôoÜØ¥x¢æ¸Aýò|b8/ -ØûXYe¬eÃõÊé£ÿˆÈ_k«~ÆÅ9êð1±u£ÝnWs÷yz2ìñ‚ý‹Féµ ¥ž»æ8¢[ÿ ;q%W8YØQÅ]+ÌLì-™p¡“²Ëü5iMõz=Ž+™ùb >ãÜ<#ܹ|Ôô?qeÍ]\“¾d±nf×\WÉC_¨‘ 8ÿésÙ¯üã†c2Ú±ç].vLâÍ1å4É÷Ôëç¯Ïv–‰.¾.Ð}ó[çi¦'ž««±¨ï¿³yL»qi )± Ì¡tÜÑù)É^/1ŸŸIèî\Ôdðªu:ŠÑ*xÐVÔœ$¸™™™ª -,F:c#bd…P´±úCú jåÌ€iÌøšÍæHå’àA7âü‘ð¡±É/ÍQôzqƒésÉ—[ÛÅS9\òF²Òÿú^ó¥näÊ9h.7wè¤[Nœ¼Ï$ƒÖ¸ œ5¯kû«Î{ ( -¾ãœŽ;xî¾wŸÓ¥yg¯0ñàtÏ>X䢞êìƒqmR²ê+P ÓÜYä Eoöû‹]å \½yÐ1ú®äß² Îÿ]fÔ÷’']âýcvß$aЕž8€f’@ÿ¢‚æ¸~ Šå_d‹¼†…DCŽõïó›”ô?PÔç“âž7f—1WP²Ý˜—µï dÔGŒ&PŠÅÙî'6úâI×’†ˆy•Úeîñ„dœï#PšäS¼IÖ\½c¿Œe>']£ßžœóÝü,Û¹CÀÙ¦Dê³ÆÉŒ²EêuézÑÌ98Hf²võ¡9;ùÆj4vT¨ŽE¾ÒöÄ« ” -½Î?úxöãIÒ8Ýt;u$½ð1¸b.x2’̓|¡U_òÁžC¨9F&ï(‹ _+o¡¿”þ*ëªቑûhúZÆvõ)¼ Ø¥üƒœéÀHõEߨ±¸CVºÂsˆsÐ_Òþ$Ñ>œ&~ÆbùG™SfÞùÉDe\á˜ÍcQ©ÑŽÜçh —YDŒ$JŒŽ…ÎÎÎ ÿ¤ƒ+öÄ#½|ôŽ:æ:CÚ4_ÿ”%Çpߤ{üQÀÌJ6Y‚¦ë<¤þ8æq]眈K©§»Þ¸½ÓèGu­h¡ß#_Üçÿx^£ù2o%O\Dÿ4¡3ÆáקŸŒœ¼&x|ŠŒçõ¬4ézV¦yÖ«otVÚîïBpGªÆï9:R¯ì‘gggqppgggÕÉß -ú[ơϸí‡ÅÍ«ßïWΑ[IÝøuWó%cOµ øfˆDƒf1ƒ«ÞÒ-¾zGý¸NzPt]¢‰´•¾ã½½^/cww7†ÃalllÄôôt´Z­h4øpzz‡‡‡Ñn·GY©˜fãóê»ï®ˆ­¬«ÀçôM⋾ÏÀ…Û&3ˆHG½hçÎ’2e_N‹<\²&ž²Æ`§ùeÏzùÙJ4g6@zø½¦¤ûé÷h—¥Æ>¯î2¾3F0ˆI¤Yäøøìsff¦:¿„ý2‰bÐãÖ¸Æ ±òE!ÕË)H 築òŠíìì¬Jœ‡Ã+½þœ&›ÿïó¡1{‰×hU¬ßïW‰@F¯œ½x Åg¡CÛ•ôÆÉ„Ž.†ºN?\µe°`?L´†ÃóŠ«Šš ç¤&ªÕý¹¹¹TF -’7‹%îŒ. <³¦ WÏܺu« -¼ª€KǸbæÍA‘þ—œ|žr$œÿf0ѽ_[¼0u¾HÞ -® ¼¹~{uV}ê:õÉ"bF£óç22Í­ƒx®gꇫ—i ”Bi³“üí¸FÐË@ëýd‰Ïeú-%oNƒ}V$8o{§ÓÇ—¥ÏÁ«Ïï²²‘}inÇÇÇQ¯Ÿ\•]O»eâu™6^|SûŽ¸è#|Uó¦¼Ç% ¥¹g¾^ ¿äwø›n=)»,}ãšÏ9R¤±¤‹ÿÔ2>f<Ëø$:3L k˜,±Hä~•úÑOßÉ·L²ÑFP=©q…ÚõܼQ¿²xî}‘6Ÿ;ÿ'2=V+Åé %Û'NV¿\\R  íó<«qú ¾Ê¶´Q¼Ð\Kòuº‰™)3Ô?&Áì—òPbJè?Ûy½ú¡¾ú£¬úñ¢hÉðmĹ­éqažßÁ¦¸à;Yl æflÐ8gg£%«?ßÂûÈ[·ñˆó·y!V|âÇÙMWüZÍO:‘½RZ| Å'.Po™×d>ÅeÁ¹Sÿ²æ¼¤þ³ŸR_“â9çæ¶BYŠˆ‘|Ì1/ió¦ï¹Ã—ß¹Ÿâ®šÌ¿êÿi:‰ìu¼Q€W  C£¢Ñá³ ß>a& -¬Ò‰qe^÷‹ rº0mÁ @\}ÌVy3+½˜âÎlvv6–––.8 õëüqPŸ%) Ì -d¾E™´g ×Wä9'xúŸ+9’­ô=³-§ƒ÷‘÷p¨‹^Ì o4ê8²W ¥—N›ŸÁ’5ÚƸ@AЛ%É¥„/KDýoK8³AूŸxM¿*ŸàÁ]ô; ~êßeJÉ Ìyd|ÍÙŠÉ8;àü=î¹ tõS?,@øÜÜoSoi‹¾EžôgÅj×ùƒƒƒê,O¼à¦±/€ÆHò“÷¹\9?O ³UÊ‹‰›â®ÇqñNãeÅÚ’ÿññõÛ¿ã}GýPŸL|è;™àp›/i ,S]7=àØêÏÇvLÃí½3¹ýpLú&É×1þéoñ“J²¾#V—Xi,]Ïä‘«ÅúL;ϳVòÉœ ã˜æÏyë{áSï—6Å•YÉWg)‰^Êc}Ä$žt7Ë׈ožàЦ¨“”·îWßµÚ‹WVS?ø:MùIbOê·ãkÞ™{<¡¿¦.e‡WÒ‹/ã°µãzæ7ô-\=®ÕÎß(#~è{áq~^ù¦ÓuFãK_4?ÒB‰Vê>ÿ'/øØçC~Sî,š¸<ÜÆhŸî‹KøÎ飈>÷•gd9F61¿—®(¶3îô]”îu<âEúëF¡ÿôÏøy­V; [Öy3_Â%8%1tÜwvv~J$ w‚ÉhmÙÑV¯de[Ý]IÊ)X9:D΋N€‚W6+€xpôyRÉØ?y™LÉH‚`˜P¯°ët:Nú%Höª¢šÀ[É‘cÓ‘e´gEÄ€A¥Aû› -HϸÀ—Ñë¿Õ¨swaa!jµ4Ç"ºX\—8gç¡Óì´d²q§$:z½^t:T>-2½åXtI¯û¿×uEßûVDþô/|ŽÖiß p2€ËFÄBc‰Çn/úß}'g|f#Ÿ|¼R£L}¥¹;½Í”}<úR~Æ ¬¾Æ…UŃ’$MÙo¥Ý8~Ö2ù*?é@$ã½Ç7Ñ–m $íúÜ·óúÒn¼L>%þxãçKHIN¤#›ŸóJcÒ¶³bAæO$ &bàá|¼Èã«zÜا󇟹ßâù¾õ9£[÷ -hìŒWl‹YËéf!¤d›îk³"›ó˜ýºöë)Ë’_‰ˆT®>®ÓÍ$ÆçÏ9e¼r^d2ókE£bzv±ÓÁyd2m²;&³>OÙ'u¦äÔ¼hà2'ÿ³¿UXàê2q–®gŒ×oâ4Ç|Tazz:z½ÞÈgZÀq_,¤1ÄÀìôq|âNÙ?ùKëz÷EêzÆ©î·ô7Wù&—'mŒ:Ë¢ßÔÔTGÄù!{NŸ¯dû§'“ZÕ÷sÐ2|#‘cÓÏj®äã¢æ­±ø\¾¿é9•ÇJ>–~@‹/r1+ y‘<óϺ>ócÔMñZ4d‡îg:DyQY°¢Îg´RŽëÏ[ ÆuFå» €Ôÿ.,ª¬”ÑÐ3¥" gBªç æææFáI–DªfÑaûœtŸqÒ½np\Íðjô¸F(a‹7T()5y¥çgt-‹›E îBPÿ¬»ÜÜiX{õK}ÓÙøêu6wòÝw9Ð)¸Œ&ñ™×g6qþLÿññq4ê{½EB+9ú\…©l+SFOV(§I÷g×FÄÈklDŒállÚai\®Ñ™–èÊŠ…¨ô•ƒˆ¨ô’€TúF©?ùdãšëºó©Ä+êà8,ÝGTÿ.“…_÷¿Õ8V– zs>é$?úìììÂ*²^º¼¼\ ¾ä c‚Û¾ËppK Di¾òGÒ7ÎÉõ1btµ†~Ãåíň¬}–˜’ñd0D£ÑI¤ÇÍ™»ÑJ×2™ðù‘Ú¸$A˜®ËVOÆÍ9+ plO“õ#ó%ÀâwÄ,lÄ>§¬¯RsÀNÛÉôÃy–ù,¿ŽrñXËëK<òy{|=Œ-óé“šëœßKYð§ä«3'5ê(‹çÇ‹Ðc8Žœš^*ºdÍç(®æüJzqþ¶+ù3ÊÙ$ýÏ›¼–§Ÿ“Mó>~O_Å$Z1„UXEø‰žpºÇh&Y<Ë䮢F6wÇÆž{H§Tä¦rû•ìNO_¼Kº­æù”æÍ•s-—ý³ØNߙńïõ(µç‘“ã¬è 1A}éÛ{”|¸P™u/•QŒ¦ˆ ÙêŒ>çxÎ2™×{ð%€eR!0º¼¼œVÉŸˆ¨¤ðTÑ¢3q€!áá³zêÛÑ <"^8ÁÙÙÙêùx:Ä,:˜ê÷ûÕòQ2Û"”&Jcãö<~牓v9pêŒúS?,°È¹°Ê-Tü¡CõDKã•Viéÿ~¿GGGÑï÷£ÛíF¿ß^¯½^¯*¶³XÃâ†"Á¸t‰…§¬ù6*]+Ýs>žžžÆöövÅ#Òâ €[—tø©g>¢úÜ¢#ÔØÔßÇÀJ½fðçÜ|k©S^jYäNÚuË»úQ&$G×1÷Å*ÚF«ÕñI”3›äç‰,Fp¼OÎËýKÆê0wΈ>ý||{{{#[âëõúÈ*e®¦Ç&Í—+NyÊ9‰VMQÆ꼃4ý-»—¾“wÔa¯Þ‹O”‘ë.íaœ^e-Óê‚ôƒ2Êô„ô+np|/”SW9.û#}Š´ï×iò˜'_¥ïÄ+ÅxÚG¦Çô®7N—>÷95ê¨ô‹ÛD}»¼óZ¶@¼P:_†ºâŸ3ñ ¯øø :äc±]ñ€=nï¥\=™K@–ñ8bô TÊ…räÿYœr{•½ËP¶Ž§2žgI•hea‹zBàϸJDLË-½ôÿÒS_Àq{È0ñ‘v†2Añmö\â<§xrí *u¥×ë]ˆ×´]Ç&ü_²É{bìÓ“u·mÍG/:!ë8ÞI!9òFÆÈñ¨hRvdhÌ䕾§"RF™aÓ9ÒÙP/d¬ 2“ú_ŸòÉøC}£NèQÑ¥Õ•L'ù=ÁñééilmmÅááa¼÷Þ{Ñl6ãÚµkq||ÓÓÓ±¶¶vá^½6rff¦z\ÀÏ&ÐõÒ':o˜t2+«¨º_|===­¶•œf6wÉÓ“·uʽÄCoç;›¯ˆ:]!Òµz›„îg Ï’rߎ§k¥?ãtÌ‚°~çWc‰‡:µõo?–——SŸä@c€-ÍÅ?' T¿ <ôûý~t:Ê6¥ -ÀÍfóBÒx Eý'}*iñÀíógŸ*Hg¥:ê†xÃsWx@‘žÝd¢"šõ?ý®è+%¾þø–ÉN±M±ŠsgßL2˜µÕÕÁ*å}xxëëëÆÕüÆŧÓã%}å8ùes^‘\¨;ô¿®/ò9ò+ä›q‚ô [uö$†r¤ßÏäç<$þ!O¹«Fó¦Oö91)à¡ož¨zËÀ§'LY°çøš«bªÇ3ÃVãlÞGsYp7\¯×‹……… ºD›Í‹Ï—Ñg&ç{ˆ‰hKŽiÜ&(OꙚ9~'¾«)×ëèx’¾0Ûüüü…G>õX!‹€Š»ä•tœE^.Vt»Ý¨ÕFŸ{W àB$}ðk·ÛçÏŸWþ‡ò’mÔj/ÕÔ -µ’KÚ?ñ¡c\Æ‘ “zÈå!^ˆŸžÌSîÒáî*Õœ?'ïÝ—Ñnè‡2ß纘ÑGûÐ},°JFîo©/zí5c)ƒ+«pªñggg+º¼ñ^êsî ™­>“Íñ1ß “g”«tYþÅW圄{œ¿Îk Ž'u}’çlä¯ß;ö-ƒ½:ïAÐï§! x“(lîØ¿Ò¸Ùõãš;wñI“§?Gåý°š›9™I- šyâ€nÒüôãà'bT•`e+ÐY`f?ãÆÎ@»_ã׈Ÿî#eãÁhDçÜÜ\,..iuPé¼›4W6OXô›6]º¦Äê%ýKDTÏd÷:€÷‚íÿV“îp7’Æôæ …À¢¨\®ìÇ“4·!׿Ҙ“šã2U>ܶè´QÄ™oû¬>Ä&éSã˜ÜÚË澌+VãâÇf_sý ¼ÉSnCöùÑG³/ ;¨€¯ëD—^ý6;;[íB+ñÝíYqÙ î%|Ez9r%:Ä{›}d8.k¼Æ =œE ~‰Ë,Fv( IDATÎÎÎbgg'F,,,\Àxº^réõz#±qº¤dZ×Oò+œ¯—øcµë$m˜?ç<–ÌßrnmÙü Œè« dt¿èŽêû,Ž’ÿ>žïÈgúFÙy˜%Ñî~œ×P¯(—G|çççãÊ•+#tSg|ÌL']¦ô¡¤K×xŒ% þQ'ø˜œZ©hÁï2õk+K+i¤‰÷^4âJŸä íÚ¾ÂÊ¢1W³¼ðG›¡Ýë:ñTŸyÇÝã2öð$Ãi¡8ÎâxŒi™ÎPw}·†úQò"ÑüT¬á<ÜN¦¦ÎÏóaÎç#:‰gïFŒžeäý8†q K,¦ñh‹›]ÆÃá°ÂKz=4ã/‚œ†………*>ÍÏÏW SL\h/žˆWÒoÙ}2ýVL©ÕjÕ6q=˸.ü%lÌDš+´ÂXŽ˜”k1…±Ì“TOr5Ï£££˜ùùùÞðíe’øN|EÜë¶á§Ø3ÁÕý’;ùé» JúÈæºä¸×Ѿ˜ I~óóó•ÎqN^èðñ½(@þ°0ᾪV;ÏQ¦¦Îߘ¦yûÎÊ2ó}”±ú—.ÒÒž§§§£ÑhÏ~‡Õ¢¢dTŠ…,±ˆàò æ Vª×ëç¸÷ç­ô›ÛY¼c5:$wÐN¯§ºA±ÒMP%&³êáU)2‘ÆàÕ@¿ÎT¼‚î¿`h¨°¡ãôDǃ¤ ³Î$È‚«±¾È/ßÅà2q ©¾)_‚õIžPþ -” ˆ¢½Ø(;]¯ùyw}›ää¨Wt`wii©Ú6¨•ýÖùN­ÓM:5Ç h»ÌÜ6©w´'Umc?n÷ÒYR|7Œ®¥žÑyzŒvå“´è{N¼×¡ÿÍë3Z¨¯Ùú-ÝÔµf—iÃÇ¿2^¨¹Î8_ÜF3?Ê{²9g`ž¿=tzÅ÷¬_¬ˆyõÛ½>/%ˆ—6’Å]Cº2Ú\‡¼eô°ù¸L˜d>?ĺ‡²×u%=Êp5çÎ)\HòÉD” œ§Æ⢛oчժ¦tÙ“ñ€ñ@Uy៘—…[]Cß¡· ðM3Ôò‘:'kµóݸ’ùå>‚òâ5?ûÙÏbww7¾ùÍoVŠÊvù6ÎGØÊý‡’GݧœŒ;€sp¸¸ˆÈ"‹xL=õb’ÆáBª ½°I}ðbõ‰yki‰v­"–äC²1wS<æЖ‰+u åF=ôüE#ç'õÎãç1Ýívcqqq$aæ@ºÁ+:¾Òì£æh(MßÓ8Èõ•!) …îDQ çËù»`)x&«—ÀÒ·Œ”‚3¼Ô(͇K6<œŠ1_•Õ¼å²äj\D™0™÷íæ/îD³d‡S:¸z½^UfuGÂI[©eÉ•õƒâàà *ÌÍÍUj»Ÿlcnn¬xó‘ê²þ÷ÂQ¶z>N -à¥Cž"â‚íÓNKöC]Ó8ö4WßJL›òǾH+Ï®½ã7z¿.³­}¾ãxíý_¦eþ†€pmq!y›Du‰|ŠÕ’O¾ì¼8ÿ_óëõz‚ƒ˜sþ_ -pl™ÜI‡ƒÁŒ~Ÿ3çäþé²¾1£Ï½wã”æê€æ³È¨ÔפkôÛ·{_¶µÒuÿ“9”W—ÜÒÖ2^g¶Bõ"»ËŸÿ3n9Í>ã£2Æ*Ždg ×ñQf×˵ó¢uÉßfºNúE[öãM6Ájî»YäÉ|&}‹t¶V{ñîeìT1L ¥9góãb[É^ˆ“¼(äXz ¾0# ùÔÔTµvv¾ æ>“v¡ïõh¤Æ‘\ý\ &-â)õ#Ã&>Rј§½³@ïýHþÂ`Y¡SEk?OŒo âçäÆæ999‰ƒƒƒxóÍ7ãôô4þèþ(–––ªD“vI¨0åö¡q„ ?þøãx饗*ÙI®Ž%½‰n/Âü:­„±™Äk|Ðq¥~¼ØÅqÔ÷e1¼_¯>uP_¶SÐwvd-ÃN«ÇwâíR“‹wⓇ¼(˜³Æ±§¥„Ri»•Ó«d$Œ}9 òàéÎ…Œ$È“ñù½äE»Æf•Å«Žš9'VKõl1zUšä( &A2j®n°¢9f -H%fâNåõ¤Fså6öårÎþ¦“Ì’À,1rç#âN ò„Û…èœi8Ly¾W¡Åʇ†çësÖµ^pêõzñoÿöoñÒK/œb«C=TåXÚvèÀƒü/9ÒUrˆº'sâÒiñG'«g}¸=ñP(ñ6àÍI ýz`ÌôÄWs\nœ«µ¥ÄM×» M -¥–UXI“Ï)³ÁËF^KZÝçªñï (Œã~eó¹lÀuŸ(ºý•¥º† ËッMÚ5mIúMX1isšuÈÁS6ïRr^ò—¥ïÅ nÅäuLÞ4>ý‡û/úålŽnS¤Åcì¸ùyŒ/]ï2ÊlÏu:Ÿs¥_ãübs½ î¹.Oò¯›Åið,†pužÀ–ôù˜nôe<¼Š÷‰WÒ±,n³ÈÀþ‰Sh«š9D?y$:\§¥›%Y—d@úè#(?•Ñ”鱟ÛýV67nÛÍtÈu_ÿkÛ81Ç–žÒ9&ýiåÿÄÉ%ûr=”ÿ¥ì©ŸÔ-ò„zÉ$’üß8Ž®óíþÔш‹…~ÊD4NOOG¿ß~¿?òªeîâ8<µŸzÀÔm¹^¯GÞ»"–w]“¿þõ¯ÇÒÒRìïïG«ÕªÆÒ£ zTA}{‹òíSSSqãÆêl0ÑGÞ2y¤~ -›òÑ%èÜÿ³I/3SÞìÃ0åü|A,Óyšë1‰:E~¨¹/t»ö˜ã~ÔMÜã›Æö…±ìQ=÷Q^”£ë3 Jß³°P¯×cšÏôj@°o¢@È«W't ·F‘p”TæRÕz¢óåv]''SJœ¤°4:4 ‹×ºò¹Â©Ñ°`xЈ\ÄÅÓx Du?ˆ+ ¯ç½r-çA¥4¨w%0£ÿWƒÁ nß¾Íf3Ö×׫çþ›Íf´Ûíˆ8ß²*Øï÷£ÙlŽœ›!ù8}*b°˜E-%2@ݪi·sñÅ«õÃápä­L¿2@âvïô9¿³Š=š'à¸Ðã8 JºQÒI°ã’ªR?%Kt—>§#÷ëù] tó:5&0.37^ã²Öç^tÕï™™™èõzÕµ,¬úxìGtg4q.,ðZù‹N§sssÕUçg©è–}ç6¨Ï†³‚/û`šów{Ë@>çoñË“3ÎÓåF›d_Œ‰Ô’è§ÄK—»Ë>ã±ü“Ÿ/Á­ó‡}Òßó{ê€A5cyé )>§,»÷äᯣ®RO8GÅdò“ÏE‹Wî¿3?I{)î:=ú¬ä£ïч»œÉS÷kl¢µ3Rty¡Äý ±l¦‹N ïÓß~ãlf{ŒÓ¢3;ä6?‹±lÒ_ùÉw—MC"FÏOáùACøÌ‹ü´+ÊAóäXÂqak¶h ­s }O åÉ>·ˆó^úaÄÉ…Æ ƒP§jµ'ÞŸœœÄââb|üñDZµµkkk±°°333Õ£(zc _Í(yŸ‘>œa;§U:)^ú9<ÃuC 9‹M®¯êOovð°TÀ`_îÓˆÃu™£,¤SO–üïØUm’o/%²¥Fýc‚ª¾ÆÝ_lÄÜì1«Î_beò\=å"ÓÊßÄOLì²ÝG%ÿ=.é¥O­ÄÒ®®ë3ͯ $ L¸…ɆÃ…ÜV«ua‘idµóÿ즞wLÙï÷£ÑhTcé®F#ÅLRy^æ­ÿwvvbss3:N•Üÿò—¿Œ‡ÆÊÊJÌÎÎF»ÝŽèt:Q¯×ã•W^‰V«sss±°°ÓÓÓUQ ßï$ê, -+TGŒbJ>âA›£ìý@õL|¡ˆ¾Ú}ºd-¹ó1‡ÌÇdbÜ"Eiq†;®Î±Jýú<3[óq‰A>+F#þ‘!9EDLg¯ŽñäÙ ;K*És:O%Ólܦá@Ö«XtÏ«u4ÞëÜûÒõz.ŠÂÊaˆyŸÉž×)yÿ®ÛºŸzVŽ>[•Q£ƒö¾>k#½,º¼2˜9gÊŸ÷K½HÁ“‚éƒ}nîÙ(«qÍsiNÞ¯hr JÞdA”¿Ý¿ùxôùô‹úN ŒVO¼±hGÿ«q˜0N -Ðä§äÅs9œ/¾-0³AÆ”RÀ.ÉÝã¿g¿¼—üÎøY²Ÿ’=¹œ}Ò&š¹Ë‡¶ä«†º†Ï¢k%Iþ.[ÅRÜÓ˜³³³177wáÕH¤Gò'/<Ùcœ>“ÁjÉV'}F]dáÈùX¡ô±J|ç›b©Ó‘Ù´ÁD‰ºOÞs7æ¤â—ëñpx~P4Ÿå¦s5Õû)}®1|у~bR’ã¶ç¼çx³³³#« ŽÉOÑE‘õícò~çØ—úªÿ™¤ù3¾µZ­ò­ŒOsss#ØD4¨Tìü¦½jÞî·©S­<ÈNôˆ>é—Û.ýó‚©©©jgŠmI1>V1+̯>ƒÁÈyPò=Ô#êr¯×«Î2?4ÍO<ñíéÄäÜ)ÝëõâÓO?>ø nܸ­V+ÚívœžžÆ|üqÌÏÏÇêêjÜ¿?âùóçÑjµbuu5âæÍ›qõêÕX]]X^^¡ßåÌ<‡öM{¤^é^="*_®"£çc¥M, 1ɇ#Ïý{,Ê÷úíPn|dIö£G¤¸{µV«ìX.Ù¥tܱíß!Ke/ÒÁ¬xGÂÿ'5ÇÜ>‡’ÿö|^ŸMKI8:Xþ΀ ïÏ&àJ¦>üù"NBŠèÌÌÌTÎE×{eœÏñ=¦þCZ( n+öí@¤Óƒ*?×ÿ¢Ißù ìþ7•NãsŽ ³#ÑÀç!u¯Û8çF=Ôwœ./¢– ñŸ:¨ï¼éÃ=AõD#+:eòÈZø¸‘óXã11¬×ÏOø><<ŒÁ`Ýn7>þøãX^^Ž³³³xüøq<|ø0£ÛíÆññq“õš.°………8<<ŒF£±±±/½ôR¬­­Åââbe·*"±h@¾ÑŸ‹nÍÃcïw~°eñÙ›G9 ì–b«äí+þ¤3{¼M×ú¶\ý°ˆÂÏî3³ïÔÜè{¥Ã´H‹Ç쟶“a•,& ûQn¥"ã–ïFðë‰Q¼Ø•5ý®%á܈µµó‰ã‡/žtÐßááa…54ÆÞÞ^D¯×‹ÝÝÝxþüyt»Ý8<<Œˆˆ»wïÆÕ«Wcaa!†Ãa,//WŒ(ŽiþsssUÂ-]ÔJ3}¡ÏC÷KO3}>;;«¶hgÉ¿xíÅ÷ÎWá.a!-ÔÑq7©ï v¼!Ý•oóÉG²rí،ϵÆ[o½1??333ÕŠÿõë×£ÛíÆÂÂBåŽ¢^¯ÇöövƒÁÏééi'ñÛý±' ~ ?Ÿ4¶Æ×*Wœ>¾DsåJå(àç;×|nŒEôüÞÿ÷¿™ld4kÎÓŒ.&ÿ—ág6¯’Îü:Íã¼â«bìôôtt:8<<Œ§OŸÆãÇc{{;>|ûûû±µµUmW=<<Œ½½½˜››‹ýýýŠ›››åÇgggcff&šÍf|ÿûß•••X]][·nÅç?ÿù˜ŸŸ+W®ÄÆÆFµªÉdÅ‹¢|*}æúñëòMý— -—m£«œYB©ÿY¸¥]ñ/&,n·ÂN®¾Uœ4+Š°Õëõøàƒâ¿ÿû¿ãõ×_¥¥¥t—ý³ÆVßœoö9çä1êC÷³bÇÿ¤¯,Vinâ¿âÃ`0¨ŠhÇÇÇ•­looÇ/ùËxüøqLOOÇææfü⿈F£Q½C~{{;~ñ‹_Tï–¿víZlnnF»ÝŽÝÝÝh6›qzzW®\‰F£ëëëÕ«‹¯\¹ÇÇÇ1==] fgg«GgggãöíÛ±±±ëëëÑn·+™xÁCóÓg|,Oßч3W`1“MŸñmU£Å¶ZíÅ;ä¹ÛÀíF>,Ë 4íU nV8b?LÀ2Ãéýýýxã7âûßÿ~\½z5ö÷÷ãÓO?ÇW‹'SSSÑívcww7cii):N•g\¹r%–——«wÿÿþû±··¿ÿû¿kkk±ºº:RX¯×ë±°°P=ƒ?caa¡¢•…âbi׳ŪÒw.G/œpŒãz.á>,Û–‘¬ä»”À³(+¤ŸÚùÁÇ­"^¼:»ÓéŒô}pp'''U1Mˆhׄt·ÙlÆÂÂB¥3óóóÕÂ6çÀyK&ÙáŸÜé ú/ûÈ•ó²â‹V¸jµZ<þ¼š+K2:nÓa"]Jj= ¹ƒÌ*T>C•%*£Ê¤6®*%%ø%íúa±óðñ3†k¼o—0´Uüðð0ŽGœ‘øüü|uâ©[¥Js'Ýîx`>WV¸%ÊåËyò;êÇåuúá›t¿ï ‘<õ|i.¡œ7%ùj¾N'Ž£ÛíÆóçÏc{{;c~~>šÍfÌÏÏW2V€ÚÛÛ‹Z­Vhˆ¤(“,A¡>ÒIºÜéPjµ…µªá`…NG}q{'Çaa‰•àÌKN¢]ýÒ/8ßé7¸£"ÓÉ̶pاtCrÛÝݽ½½xï½÷âÍ7ߌ÷ß?~úÓŸ^Љ¬µÛíøÆ7¾ßøÆ7â _øB|ùË_Žµµµh4ÕØ™ y‚ÅkJ[…%ë“““èt:±´´4ñÜq –ôPVßýǸÀKtº)ó©©©jHsRÓ*–ó"óË*(dïç%}ôÝúŒ4:Œˆ‘“ºéç4ÉŒI™ÏÅ}—Vñ¨Ë^3õ9·n«°:??_­Þ÷ûýxþüyüô§?>ø >|=Šùùù -ÌMMMÅÁÁA,,,Äüü|Ôjµ¸uëVå3www£ÕjÅË/¿kkk155Ïž=‹ýýý8==µµµ¸}ûvìïïÇ'Ÿ|o½õV´Ûí Ñn·ãsŸû\µvuuµzýª’" %°¥T&_Œ—ÜŽLg:>®‘çL"Îã?SßLrˆA¼ ë¥÷JR$;ïÓ‹´Þ8/é/cǤý¹n‰¯ûûûñôéÓøàƒâîÝ»qíÚµ4žg[÷K>ÊyÄbïÉæÏïÆõÏû¥ÃÜv™–i5&ü*(E§Ó‰§OŸÆîînƃb{{;vvvâþýûV¸ÿ~\¹r%fffb{{;ÚívVú±ºº_ûÚ×âèè(jµZ,,,Äúúzõ¸ÓÌÌLÌÏÏÇÑÑQ,..ÆááalnnF«ÕŠO>ù$ÎÎ^ìVl6›1 â—¿üåÈÜîܹ_ýêWãk_ûZ|å+_‰»wïVÖ9¾#¶•~2vâz, -»L›˜Œcp|íBòÅ:bbê‡Û*ñ#‹‰ü›þX÷zN£ïäOÆcóš;ÉEKÉN-[|¤Þ¥}²XÁØ湈ìC}igøÑÑQµ3ñàà ž={½^/fgg+}R ™™™‰£££h6›Ñëõâèè(ºÝnÌÏÏÇÚÚZ,//`mÙv¿Ôj/Î[[[‹f³Íf³ò龕ó%ïÆù3úGÇoŽÍ½¿im £è´}%™E®Âf ÑÁ•Àh24(* ŒW¯<È›3Eý8ˆåÊÕÔÔè{R=0ùüØ¥k´ÍëéÓ§ñ駟Ư~õ«ØÜÜŒ……… -°ÌÏÏÇÜÜ\µ)ƒn·ÛJ8ǬzG!=\Q èP¹ (".ðRæòf ¥sív»1 FPD\H3“—hY\\¬Š)Ÿº2)È»S×}JV¶¶¶bii)fgg£ÓéTEí¤Ð¶º“““‘g4_VC}eÑ·å’%(š“tšsÒX^Åðõ JžH¼Yhñ‚dÉ¢é%Ÿ8um‰n~§1H+‹üjN'Þyçø÷ÿ÷xë­·â7ÞˆÝÝÝ™¿ôÒKÑl6« '€®gDIã·¿ýíøö·¿÷îÝ‹o}ë[qûöí¸råJüÁüA|îsŸ«æ™­Ȧ2.^‹gúŸ¯˜ÌîaË>w¿ãþ“A“{Òï[ø4O¦ä;¸Ný*±!ð’®²÷ë\ib°ˆ þ™zL©{OOO«´€`Ó›eI⥿êÐù(ú´š¨¹¯A IDATE9P>îS7úß“%>— ú‰ýýýøøããý÷ßTIÞññq,//ÇÕ«WãÊ•+ñüùó*íîîÆÎÎNU ^]]­Š}ôQDD7Fåâää$ŽŽŽbii)ƒA¬®®Æ½{÷*pªghß~ûíèõz±²²ív»ZÍ\^^ŽÅÅÅ8>>ŽÛ·oǽ{÷ªD”ò -  ÒO–t©Ôˆ/hžÐ³?¾ýA€_Å1â.÷³Ä>/÷…¼ÇA³®wûôþ‰8w…èyé{÷îÅòòòˆ.1†q+¹tQrp~ªñ^Çq¼Ö}U&›LßÉ“gÏžÅÚÚZõœ¸÷A^f>@ßÑ>Ÿ>}[[[±µµñ駟Ƈ~Ož<‰O>ù$ž>}sssqttSSSÑh4byy¹JôîܹF#ccc#fggcww7fff*Ü¡‚óãÇ£×ëÅ`0¨OlµZñúë¯ÇêêjWŶƒƒƒX\\Œ~¿óóóÑn·ãêÕ«qïÞ½èv»Ñjµb0ÄÖÖV|ôÑGñ/ÿò/Ñh4âw~çwâîÝ»ñòË/ÇoÿöoWϲ÷z½jLírd'ßê2cÌ`²ÃDOzæüU‚ÍÏ´»Qýk¨° íŽr¢½±ðLœ%VŽûå×¥;ý~?677ã­·ÞŠï~÷»±´´ý~?NNNbvv6677«$_IåÜÜ\ܸqcäsåb#¸YoXXXˆ?þ8~üãÇ'Ÿ|R%«Ýn·¢gff&Ž«7 ¬¬¬Ä«¯¾Íf³JHµ€5+ÿ­UqÑ ¸¬®¹º¯r¤kÄk}ÎG&x6€ç+'''Õk=¦)†H6š¿p: ÛÒ§ãããêÑ´gÏžÅááaF¿ßÇÇÓ§OãæÍ›Ñív+Ü×l6«¢s£Ñˆv»Íf³¢qq±Â›gg/ µ¨®Ýq:ØñwÞ‰µµµxíµ×ªóÄbqâ(ϳX@ŸåxÍ}±e½^i2vqq±"ˆh O ܉Ó)²"ãȯ‘j¾Í>sâ¢Û“jß’­Ð¸¢:((Ñç 8ûÜ™®€¨-Œj[[[ñÉ'ŸÄ»ï¾?ÿùÏãƒ>ˆ·ß~»R2m=Q2Y«Õ¢ÝnÇÞÞ^ܹs'¾ò•¯Ä—¾ô¥¸~ýzܹs'–——G¬óŒç:{õy}§Õv&L¼56•Á™4øÊ&w|8°ÊæÄû@¼Zë•é–óIÉ|½^¯ßÌÌL¬®®Æõë×#â…³T^ýÖjçogðòäÄL–{R ŸÌLU\až€»óñmH~°‹äãѱézÎ…ÌyD½ÑuÚ}ñá‡Æw¾óøË¿üË×××cii)êõzµÒ©ù+À®¬¬ÄÎÎN<}ú4fggãùóçUÕ]E¦ÍÍÍø«¿ú«ªßo~ó›ñçþçñÇüDZ¾¾^É·$ÃIM×7›Í‘ç`30:®ÑÞ\Ïx]ú< Jlžsl6.3_Áõ&Ú€˜xñ{næ|¨KÎ3}F{˜Ô¸BAÀ¨Æä[6âÛ_³ùñÒêÅCç·'M`‡‡‡ñ«_ý*Þ|óÍøÇüÇŠGqóæ͸uëVòµâ>??·nÝŠ/ùËqzzZÙ¹¹¹èõzñôéÓXZZªÀ_9¼°°ƒÁ VVVâôô4ž?N'Ö××ãå—_ŽëׯW«—­V«º·V{±›ê¥—^ŠÓÓÓjËô»ï¾óóóñ§ú§ñÚk¯Åµk×bcc£*¤‹¿ÔYú²Ïj—¼6Ã;¾Zï…1é‚øŸÉWº[«Õ‚ 5ž,ëtqO\¯ãD\ÜAwÙ¦¾¶¶¶âñãDZ¾¾^%-?øÁ¢ÙlÆK/½333±¸¸Fc„ï,Ž±Oçé¤F»TÒ)ý`aºäÓô[¯gËŠÖYQÂɾÓéÄ{ï½ï¾ûnüçþg¼÷Þ{ñþûïÇ­[·bjjªZ(hµZÑjµbgg'VWWãììü …½½½jÛðììl\¿~=677cÿÂ.Ãn·[Å/ÙêÎÎNF~I~[mê±û° **!&®âViS´!ú[-’PH³VtYÀÓ5º¯ÓéÄüãxã7¢ÕjÅç?ÿùøðãßïÇÒÒR,..ÆíÛ·£×ëÅÜÜ\¬¯¯Çââbܼy³Â‘ûûûñèÑ£˜™™©V¦Ev65ØÙÙ‰ÝÝÝêÑÍ_…Íyvv6b8|q6Žv‚*9•:NÌÏÏWgÔëõê«W¯ÆÔÔÔˆæÎ䬉7’±ª¾ïõzq||\íâît»Ýèt:Ñëõ*:==]=Ê sƒo Ñcgý~¿ZÙ?>>Ž£££hµZ6?>>ŽT6vvv­V+šÍfܽ{7¦¦¦bkk+†ÃauöÆÂÂB´Z­¸yóæÈùzŒ9 ¤SSS±¾¾·oߎ³³g‡é€ÇŸýìgqõêÕ¸sçNuþƒJÄ#_Äö&Yñ°M5baú]Æ¥iUþl$,:ÄRÒåwÂœH‚-£Ç•c9 šîY½Ó8 vb •‘×ùó ¾ú*úXIâêä¸j‹€¶b=|ø0"^œû÷ïÇ~ðƒøÎw¾µZ­z¦ø7ó7GVŠ´%¥ÕjŵkתgˆÎÎÎâ‡?üa|ï{ß‹7nT€éæÍ›ñå/9666*G(>Òá–ªëä«kLü´Ý%kêSz¤ -Ÿ¯^ƒ‘-:jÔ?‚+é&eéŸëQVøñà­°q¾³³³Ñëõ¢ÛíÆÕ«W+ãwOÝRQ€ügÑ„sá!sÞ\Éc:ˆRACURÚ1ùêŸ9oiCüß“@ê—^ŽÇ-ǼÖw•®,A#Åÿíííx÷Ýwã»ßýnüÝßý]|ôÑG±±±F£OÒß~¿_%üQ%ËË˱±±Ãá‹C”>ýôÓxöìYìîîÆüÇÄ•+W¢ÙlV—E¼¨JÿèG?ŠýèGñññgögñÚk¯U[Ä4¯Ì‡Œ›³t†;p>K ¤T¼êÌ-ñl,ædãx"JßÏŸˆ¸°:®¹yüÐ÷^õæ÷üŸúõ¥ÕöíííØÛÛ‹………j‹+ƒ±èÏø–b2›ôñ]æú¿Äoç­'‰ä±À}õˆþSþìþýûñ¯ÿú¯ñOÿôOÑl6ãóŸÿ|ìííUüE¼(˜Ýºu+Z­Vµj9==7n܈v»=rÀ_DÄññqEÓÎÎNôûýXYY‰n·ËËËÕŽ›ƒƒƒˆˆ -„öûý -°®­­UÀ´ÕjÅþþ~•Ø_»v-šÍf%¿×_½ZyùáƒÁ ¾ð…/Ä—¾ô¥jÛkö¾h—[¦‡žä¸/¦ŽºßtÛ¦ýèr5R?ÜÍDY«±ˆæ«Öü[‰‹¶î87ׯZ­V=+»··›››133SÿpppßûÞ÷¢^ñ¸âµk×â‹_übµKcvv¶Ú~|vvVÇ%ûvœElªypKuf”Å`0ˆõõõ‘×¼q,úÆëˆó3ŽŽŽbss3~ðƒÄßüÍßÄO~ò“¸wï^,--Åk¯½Vy´^Û³™ܾ};^yå•juQxpjj*Þÿý888ˆ£££X^^ŽF£GGGqóæÍjnZu¼}ûv,,,D£Ñˆ§OŸÆÁÁAlllT¼¯|å+ñèÑ£8<<ŒÅÅŸqãFܾ};=zÛÛÛÕ®¸›7oÆúúz<}ú4¶··caaáÿ#îMƒÛº¯³ñ WÄH‚û¦Í’-ÉŽ*ÅŽÝxâLÓ&“¶Étœm&m’éL¿uùÒæC›Ng2nû¡Mšd7q2mb;±cÇòDz%;¢eY¢%Râ;@pð~`ž£ÃkPiÿÿwæ½3R pqïïžßYžóœspâÄ ueHÛ{²ËZ·RÇSN´|¿ƒ©Ö»F_„ÿ®_¿Ž§Ÿ~Z˜•JMMMðx<à¬hnn°›tõz½hmm]f2™àõz% F%ù ûP…Ãa¹.·Û-6Ûï÷£R©`mmMü›Í†ŽŽ’666dÄáúúº$¸R©Ö××199 —Ë%@Ûí†ÃáØ|544H3Pî £¯Ã£Z­"›Í"ŸÏc{{ét…BA|S]J9"CpggGzT@"sŒ:’ Z:F>ŸÇÒÒúûûåºÝn·œ“à K-|>¼^/Êå2r¹œ”UÐ?t»Ý²Þš±gd©®¯¯ @€56<ÞÜÜD±XÄää$‡4êmÝxRËÝ~þQ=ƒçѱ¯Ûª³yFjŽV|Ú©Ð]–JYo|þþÛœyc°¨k…¸YÊ€Ò¸8FGKÿÔŠ€¯Õ©÷ýøS 7ÿO$Ñl6#›Í"‹abb¿úÕ¯Ïçvé㣣‚RQˆççç…šâ÷ûev¨×ë…ÓéÜCs¯T*XXXÀÅ‹Q(püøq<ðÀG0”ûÑ¥ z-Îm=gE#xÚA¡R5NkÐÏS×ÖƒîÛ¬úû¹1ðÓ÷BãR«Õ„êVÏ€kGÍèphãZ­ -5ŽŠ ‘H Z­J€§iöŸ‡ÅbŠ«`Òkk\‹ý!cP½C¯ ‘qå׸–Æš>~§Òõõð5½WŒß¡t¾¦eí|ês®G妔Ïç111³gÏâ[ßúÀétbxx¥R µÚîô† ÙëF½°ººŠ lnnâÒ¥KÅÐРï‹ÇG8F.—C4E>ŸG¹\†ÅbÁèè(ªÕ*¾ñoà[ßú¾ð…/àá‡ÆÈȈ8¿,3ÐG=…®ƒ}ìºc€ÂûÔ¯s¾FùÐ×VOçëƒÏÐëûÑÙ{³Ù,sŽµnÕ6É(ãÚ 3ž_ƒ½„¥ãÍkàë™Lßþö·ñãÿ_ýêWñ»¿û»rÏ<—>¿ñûø»ñZõ?#º^àI§¸žã=Ÿ…ñþk§õ¸Þcº+âܹsxüñÇ111îîn„B!d³YqÜï¿ÿ~ttt X,Âf³Áb±Hfßn·KM`¯ƒ_,…fi·Ûát:e]%ø³ÛíÒüÊjµ¢X,Ê^¥l²v²P( ¯¯p´··£X,ʱF³X,bqq³³³…B8x𠆆†P­îmFe”ùýì?×Nÿ_ëAm/´<òÿ:Òçg™eŸõ$#^§‘áÆša½/ô5iÎõ®MË_=ÐBRÛÛÛ˜››C±XD ,oo/‰Î;‡ææf$“I\»v ¹\NŠc¶¹¹‰p8Œ@ €P(„P($× }£üòÐvS?3ÝûAû&šq¦mm¶Ñ†i;W­V%ÙA†K©T’2¯¿þ:®^½ -“É„±±1¡çóy öÙ<–¥œ‘HDš™šL& c``@€‚B¡€b±ˆ¡¡!äóyܸqC쯛5Ì---GGG‡¬3ƒ­T*%³æC¡œN'&&&ðÜsÏ¡­­ §OŸFOOFFF¤¬ƒº¡¡¡.— mmmðx<(—ËhkkÃÑ£Ga6›qáÂ<ÿüóøò—¿Œ~ðƒèììØXÈòà–¿ mW¨«5PNÔ¿ÙlÞãûóo”mö)ÑA¾¦„×Ó¥FŸRïÙz =õI:Æ«¯¾Š¥¥%„B!T*»ÍÉ”r:ò\xF°fyy‰D•JEô]©T‚ßïG©TB.—“ýÓÚÚº'ïõz%CÞÙÙ “É$`(<’%T­V‘ÉdDG³‡J©TBWW—0•wvvàõz±±±x<Žx<.ì‡Ã‡Ã!%+ÕjUüK2%š››%Цo–H$J¥P*•°¹¹)`„ÍfƒÕº;†1—ËI¹ •Jår™L•Ên_§Ó‰­­-D£QƒAÔj5d2‰½˜ý׉J®õ }÷ææfa€:x<ôööbkk «««H&“¸xñ"ÚÛÛÑÑÑ!¶Œ¬,ö%²X,’H`r©R©Hó¿jµ*ëM¶=Ë„ãñ¸è ê'Úcìbô‰´O¬“µÆ¤=e[ëNk=§B+VcvN+b½iN•8Gk‹zY°zŽ”>ô÷ilTÆMj<§Ñ˜j…¯ƒšÿm–Ê&bbb.\ÀO}ËËËøÿøLMMáSŸúNž<)Í”4MÏH§«§µ®«wÔ Vù¼ö|~Û¡ÙOÿ›£žî5. 2Ò ë·Æ{1~ŸQÿó³û]_­¶;Éã{ßû–——ñ /àøñãðz½²ÿ'‡Ñî× ž3~žÿŒ ¤zÀƒ‘ír»C#ý\Òæ/\¸€³gÏbaa---8zô(, <ìv;"‘ìv»8¬­­akk /½ô._¾Œ‘‘ÉXêõ®g§t/c`z;ùÐÁÍ~ï3–ª59Zõ/ê,‘¶' ”ŒvYËQ^ô=ðà½S_ß¼yèí핽Ë1tmmmƒâÄ755Áív#ŸÏ#“ÉHb£Z­âÊ•+ÈårèêêÂ}÷݇{î¹Gtêm«ôzè^2ú^´Õ:‡{‡€Š«Õªìy£oÈÿ³‘ÝÖÖ.]º„ .àå—_ÆK/½„£G"KÝcc£€[ííí0‘®¬›õËf³˜šš’ëªT*ÂœÙÚÚ’` ØÍ(F£Q´¶¶€€mÀ.…¼½½]úFmnnbjj -f³Y@—ááaa=,//#›Í¢¥¥E@ Ö6³ÁÙÌÌ Þzë-är9É·´´`ll SSSøË¿üKüùŸÿ9~ÿ÷}}}²g¹†·ëmRÏï4‚púÿõʤ45›¿²FYƒÃõäÊþA@îK€nõ²!…žÏJÓc0º³³ƒ@ €îîn¡³óÞâñ¸gù|^‚óóÕjU˜Rv»]Ú¹\.loo£¹¹Y²ê¤Ì³î¿P(ÈúEN§n·«««{ú58Øl6loocssSt''---Éu´¶¶ÂçóakkK˜”ëëëBÃç¾Ïf³Ò¿…Mf‰„Ððóù<¿gii ËËËXYYÙSÖÔÔÔ«Õ*{‚û.ò›’‚\.·gB”Ùl–æ¤)äÚÚ¦¦¦ÐÙÙ‰H$²§œXƒ[:çAÝoŒaôÁÏëXÎd2ÁÊú§zò~! I=ÇEo"^¸vöçãïy3:(áïÜx º‰bëï7±z÷b¼f}Æ{ªwݼÖ˜\¼x>ú(žxâ ÀáÇqðàA¸\.´@ €¶¶6A‹Òé4‰Ün7ìv;zzz¤yk}òù<–——±°°¯× Ç#Q_«ÕŠ`0ˆ¾¾>\¾|‹‹‹ø³?û3Üu×]’ ×÷ZÏ™à³äO]÷T/ø0ÌÆghgŒël\S:Ûh lu@Cù¢Åq ÄõùxLÕ pFÇl6Ëyûûû1== ŸÏ‡ööv8N´¶¶JGjÝ8…ˆ"7³vFŒÏÂd2‰Q6RõyzOŸ¡ñ9è×Y· ÜæŒë¯³²FÆE½C_×Öp ê½nÜÓF§×†ÏŠh2é—årÓÓÓøÏÿüOüë¿þ+H“0Ö‘¸Ýntvv -¥®££ñx~¿‘HµZMŸE£QX,tuuÁãñ`~~•J333ÈårèëëÃòò2ÖÖÖàp8pàÀÜ}÷ÝÈf³Èf³¸qã¼^/¼^/fgg166†W_}¯¾ú*î¼óNœ:u -DOO߶¶6jHSæ?Ò5cI;0|õöR½àv—Q&4hU/CZï0:Sü^ã¾âOÖ™ 3–ei™çuèý ¿·ÞïÆûÕz-byygÎœÁw¿û]<øàƒxàöŒŠ42˜´Lß.äõkPÒȠП¯gÜAÖÍŒ7‚r¼W ÝÞÞF&“Á{ggŸ}O?ý4Ìf3"‘…VßÒÒ—Ë…ÎÎNqfÑÛÛ ’ŒÅbH$R3ÉkÜÜÜDGG|>677Å)ã¬òL&#emù|ï¾û.vvvðÀàèÑ£ƒ0°Ië¡}>ŸE•J6›Mf¤Ûív ðJ¥’8¦ì©³½½«W¯bjj -xðÁÑÕÕõ>ÇIëV£éµÕϳžÌëŸZöô³Ôò«ËõÈP0™öN^2Ú=õt,Ÿ»ùãw£}ж'⩧žÂÊÊ -ÚÛÛ±¶¶†LâL&#N:éfO -l:Ébúý~¤R)üüç?G¡PÀwÞ)ÍÐôµh¶¡®æu2ˆ€ y_£?ÀzÛZ­¶„ep }!ÊY¹\ÆÔÔÞ~ûm¬¬¬à駟ÆÌÌ úúúpàÀ ’¨Ë[[[áv»á÷û¥Qfss³tþŸŸŸG¹\–z}öQX^^F¹\– 0ƒ -2M&ŠÅ"Z[[%Èv:(•Jxíµ×ÇÑ×ׇƒ¢¿¿>Ÿ¨V«Â>]^^–ýxòäIœ8qØÙÙA&“Áôô4r¹fgg199) •¦¦&ttt­Øí{ÔÛÛ ‹Å‚çž{“““xðÁqâÄ ÉDÓné:{-¿Zn5{R×Ø׋1جŽþ€ÂêíU} Z_R.ŒIIîmõõè{£íæ³bÎ׫Õ]öh[[¶··eT#Ëgx¿H·¶¶H$äZZZ¤¬€@Îææ¦ô£2›ÍR:Bà•÷Ì`—2Îëæ>,—Ë°Ûíðx<ÈçóÂÖ1™Lš°Þž K¥R©”d¶c±Þ|óM¿Èj {žsmmMl -û³¬®®J0Þ××'Ì"Ê<›ÏÒ¯#¸F‰ÏŸ€ECCÚÚÚP*•P­V…êÏ©dJ¥’ɤ€Ü»\/>»ÖÖVD"´´´ÈèMNÐnÅH|.­C_‚SȨ£®)•JÒ4—¶¸^Su½o´Í7&NŒ{‹ûC'¬Zˆuó=¾n4õ‚n¬ýœJc­›Ñ0êÒJ€×¡-0Îjaþ¬~:Õò¡)^ú9êë5RëùÝ4lZVõ÷#}ÚHБ°Ùlp¹\¨p»ÝRÿªå‘•‰¦Y^7×J3ŒûÆ|hY5f’M&“Pù´¨wèÏiº‘qýôýi¸žS©Ÿu=g؆èój‡A7jbVãå—_Æ7¿ùMÌÎ΢»»&“Iê·˜…Éd2¢DÙ —ÎÓé744$T0Ö{™L»Tº¶¶6¸\.tuua~~B[;zô(Ün7~õ«_ “‡]ÓqäÈ´¶¶"—ËáŸÿùŸemî¸ãôõõattèèè€×ëÔ™²Ãý§A¡ýžá~Yd#CǨÿxN£Óo¬Ï¿Ìè Æ(»|Î:SW«Õ¤Sq=¦?«_«wÔ»W~Fëx^c©T•+WìÖø=z_ûÚ×°¹¹‰cÇŽI¦‚™^ ¿‡Ïƒrº_P_j®ËéèôÓ€‹ÑÕÈ´ä~ѵ›H$¸pá^|ñEœ;wÑhCCCB‘d ¡{b -éRït:Ü ƒƒ(—Ë(—˘™™‘†Mù|&“IÞïr¹àñx°¹¹‰ååe¤ÓiØívÜqÇèêêB¥RÁñãÇñÎ;ïàÚµkØÙÙÁÈȼ^¯¿Ìþëæh­­­R÷Ì 2kkk(—Ë{:5óóœ•>66†K—.á­·ÞÂúú:>üác`` n0bœÞb):P1Ú2|¦”K£LhY7I¡¢Ä IDAT‚ úÏk´5šÚ¯^¯´Ðrjtù½:h¢|ÎÎÎâÚµkB¯ÝØØ@4Åüü¼Ôº‹E$ Ôj»%W6›MÀmíT«Ui6gµZñÚk¯arrRJêjµ²Ù,L&<ÏÌçóI3J:÷étMMMdU«»tg&œN'FGG¥¦¹µµU3¤í'“Iär9äóyÌÎÎâ{ßûªÕ*úûûÑÕÕ% ÉÔ (˜ bmõàà FFF`2™ðÞ{ïáüùóX\\„Åb‘¹îô M¦Ý®î>ŸoŽ˜››C¹\–ò×p8ŒP(·ÛÉÉI<ÿüó¸óÎ;122Ç#3iÙü÷ÓŸþÅbýèG8”ë››Ã{ï½'ýo‰Ìf³Œè, -Èd2¨Õj…ßïÇ… pþüy<ôÐC¸ûî»ÑÚÚ*3ééËi ªž¯ny5›Xëp‚ƒÚ·Ðài­¶w"€¶ŸEˆAMïCc€¥xtd]·Ùl–æ}‹E&‹Ea’ÊÏÉ3ëëëH&“H&“¨Õj°ÛíR@}Áf¨cccR.µºº*ëE1{¾žH$¤ï -™~¿_ô4ïÝb±ÀëõÂl6Kát:%'@ı•´fó.S§«« ýýý²G;::`6›÷ôù`£>2·t?›Í&ÓD,‹uƒÉ&à9iç(á°ùl*•’g^«ÝjîGP®\.cvvV@‡@ ŸÏ'öŸàÐÎÎ\.|>Ÿ¼/]ÚÂÉ•JE’P™LFJD è444ì™@¶íA$6þ¤m×ri¯u‰‰öñ´?Âuà{¬ #Š`tôµs¨”Ÿ1:BÆsèg øú~NæíÎÇëÛ²o4¦¼ñýÎWÏêkªV«(,.."‘HàwÞÁÏþsœ;w‡B0”F(lŽÙl>ŸOƒ`ÀñãÇE(æææ°´´$þ––‹E¬¯¯ÃãñàÌ™3…Bèëë“Z”L&ƒÅÅElllH½ŠÍfÃN§ñƒü7nÜÀ‰'088Ç#÷²_àv»õ¾Ýû´c±ß9Œ¿‘Í×µ<ŸƒVöúÿº!Œ10åµé¦#ûÑâ×k±XÄ©e)Y Ø÷Êx?Ƶù¿}‚~ÆNV}è`܈Ö;´ÂÙ"®\ xh%¦ÏÇkÕŸ¥sË7nÜÀóÏ?û·C, "ŸÏKö’”/rß©TJhª¤#;LLL µµØÜÜ”ñJÉdRjÙ\.úûûÑÞÞŽX,†ëׯ£³³@årÀn-2–x<ŽD"‘‘©ýkllÄÌÌŒ€I‘véÒ¥÷­Û™3g044„žžÜu×]ðù|hllD__Ÿ¬ÑoÓ•ÿ¯Žýöñwê«ÕŠÞÞ^qÜë}–N°—õ³_à³ß¡ëL&ƒ7Þx@;;;øÀ>€……<üðÃø½ßû= ¢½½ƒƒƒˆü†O&›HÒ9¢cEz1¿CƒÙ¼fm¢#Iù6„F@Ž ­âþ£T*•P*•°¶¶†¥¥%ÌÎÎâÍ7ßÄ /¼ ÙÁûï¿ÛÛÛp»ÝèïïG[[›²l^tõêU´¶¶JÀïr¹ÐÑÑjµ*{qcc¡PH¨ ©TJe·ÆHi†Ç*1ûá÷û100€ÙÙYÉ pú ×¢X,"ŸÏÃápˆ#ëv»÷BÁ^]]§m{{[2Â;;;p8ø“?ùܸqO<ñî½÷^8p@tòuH=©÷àÿ—}h¤pAr~/;àVƒ;ãuÔÓÁÚÆAVí<Öù~í|ÏÌÌà½÷ÞÃÖÖ„r¾ºº*uñÔ­‘HÁ`áp~¿_ö˨ÿ(ÿÌþ1S:??B¡‡Ã|>/™<ŽãJ$Èår¸zõ*ÆÆÆÐØØ(Îy¹\'=ŸÏcaa•J‰D €¾¾>ô÷÷£µµUü¹Z­&AÓÖÖ&&&d=†‡‡E“ÑÀ`„ÉNµH§Óxï½÷033#|fd¹v¡PMMMèîîÆÈȈÔ=[­V$ éO …ÁÂöö¶ô£¹ví666`6›ÑÛÛ‹»îº v»³³³XXX@:†Ûí–Æo\_‚Ú~¿­­­øå/ «ÕŠ~ðƒR—ÜØ؈`0ˆ@ €Ã‡#™L"‹á½÷ÞÃ¥K—FQ(àóù°³³ƒÎÎNœ8qãããÈd2xòÉ'ñðÃãk_ûzè!ùn­ëÉu›Ÿ5P­KRé3Öj·XrF‚¶–²®› -j Ü8>›¾ '‰é8‡¾”'Èþ- -Ò\€Øìì¬B Ľ^/ªÕ]*?{=ÌÌÌÈžåx@‚±f³¡PÝ3.àŠ¾çB¡€T*…X,†d2)@ W3“ït:Q­Þš˜FV2›Snllȼ{&WÀ´T* ÛŠA0™‡Cü}\ê42èq_r&Ÿm±XÄòò2âñ¸€€,±Íçóâ+˜L&™@YaÙ&Y‡Æð𰔣Q÷Xf¢‡ñìÕÑÔÔ$úƒ1{2€&°¸¶¶&~(›zÒ§¨ÕjÂ’ÒÓ= -…–——ÑÜÜ ŸÏ·§Ÿ€–aàý“]´®ßÏG·R ÙЂm ^tfÖhdŒ™<¾¦¿±Ô¼ß9Œ‡‘Ë̼F´õ=h@_‹ÑØ23Fgv}žžÆ‹/¾ˆ³gÏ"âÀ8vì˜8Š¤î3sR©T$h`?—Ë%ô - ©äÕjóóóBñb¦ÇãÙƒnÅãq\¹r›››8xð Ün7Âá°Ô¥Ói¤Ói\¾|¯¼ò -þèþ=ô”#è`¼ÞšŸ‹1€4>W£sQï™sù:ƒhüñZР‘vØô¡¯¯Þ³Ô5“ÆÏêû׊ŸY.:ž¼fÊ"•?ÇC7húmûävA]½€YƒZÞ÷[o?0×ÞXN³ g”£ÃÉï1›Í’‘¡BÕÍùxNýLyÛÛÛH&“8þ<þýßÿ.\@CCÂá0jµšÐ²îPéÓy`0ïv»Å‘ ‚Îk¥¡ƒ’QÌd28räŽ9‚p8Œõõud2¼ýöÛH$8|ø° ãDxûúúÐÓÓ#Æwkk ===R²099)´=—Ë%,Ò:­V+r¹Þxã <úè£ØÚÚ¡C‡pèÐ!|æ3ŸÁwÜ!ÙMf)5XÆ{®ðÔ{Žú0îëÛ®üi”;ý7ý~¾Oëf}Ý:d¼‚„öts¯wM¼cGËt­VÃÕ«WñË_þR24.— …BÇŽïýk<õÔSrî'NHvÎf³!NÃãñH'{–]uuuI @œ±R©«ÕŠ d³Y©\__”ßår ûÄãñHàÊ÷ìì숳A§‰2§Ì,//ãæÍ›ˆF£Èår˜™™6ËG?úQ8·º|SŽjµ\.—°a‰®]»†ÁÁA8När9”Ëe,--É3Ó,2’ɤ4ŒjooGSS“L°ihhØÓ˜Š:” }>ŸÈk­é»µÍ¤•úý~:t^¯Wžgss3º»»á÷û±²²‚ÕÕUa0˜L&¹‡p8Œ¦¦&tuu!™Lâ¿þë¿ËåpæÌéˆÍ룞Ðú“2©uïíö”Qoósõö—qïiûÉk0žOû+õÀ á>Ðç××¥÷,í@,Õ+W`2™ÐÙÙ)õæÌè›Ífa+ - ˆÙp‹k¿¾¾.#ì˜õgÆÓív£ZÝ¥©kú¾Óé„ËåBµZ•†j¼g·Û|ä#hllÄúúºóMMM‡ÃÂ6ËÎÎâñ8²Ù,2™ VWWár¹°¼¼,2Äàëž{î‘€ŠYÚ……Ôj5ÑÕ6›M‚NŒ! ¦X,J£76-«V«xë­·pìØ1±]ü;º††a;X,¹nÖ2çr9¡8÷õõÁçóI``·ÛqÏ=÷àðáà°¹'H±CºÛíF0DµZ•çþFÀ-à]ÊÃá0Ž;†x/^Äc=&¬sss¸yó&ÖÖÖpøðaüõ_ÿ52™ þðÿÁ`Pô‹NþPîupÍÃhtæ_gáuÃA®©Xœi› ºLKÿäò=ˆàu[,»£ã^{í5,//Ãl6 ˜ÝÔÔ$:Ÿãù$S¿óy²i&ÕÕÕ=öÔårÁb±`eeù|¤›~µZ•òa=]‚€›É´›aç(WÍônii6m³Ûô‰ÖÖÖÐÖÖ&嬡P~¿_’KKK°Z­Ò[ “Ɉ?ÌÀßår‰Îo2ɽßÖÖ§Ó¹gY‚Í×ÖÖ°¸¸(}_*dæ¤Â­ÕjH§Ó:ƒAx<Y'i×~”ö+Ù÷„Ô#ªÞ?ð­­-añ“½À²~Ë’É$‰"‘úûûâ3¤¯L¶œö£úÝhs¬ëë뢀yS¼x}ðƒ:k¡%ã†Ö¨›1ÃZ/ƒe¤ŠëŒi½ë¨(ËŒÁ‰¾>.”ñf³YÉ讯¯ ÄšÑ7ß|gÏžÅåË—ùÈGpÇwHí¡ÉdBGG8 ”J¯×+Ž!냹Žkkk˜››CCCÒé´ «sss0›Í8zô¨P4ý~¿l°ååeLOO#•JÁåráÌ™3èèèæIétsssX__>ú(Z[[qß}÷ Àµ×ŸvôsÓT+®m=§Þȶ¨óuÝØG?c^x™L·ê†iìôæ5~O½ÀÕèX4ž‡Ï“ª¦ðk6õZjª°ñÐÁN½kÑï«÷> ½f:âu°.‰ -Q£…ÆßyNí„êõàï:8ãžåLc¢h4Š›7oâÊ•+X]]Åèè(B¡tTePEçN;ˆg2\¾|O?ý4^zé%»6¡‘v©ÜTš_Ä@‰ô2ǃT*%h1ŸŸÇãÕjE<Çúú:B¡>üáãÌ™3ˆD"€X,†––>|XFËìììàæÍ›˜žž]b2™ÐÛÛ+3 Ýn·\c<Êû}ôöö¢VÛmÊ322"40vçM§ÓX__Ç3Ï<ƒ×^{ 'Ož”é!: ¦ è½É¬‰ö Vxh¯÷Œ1È Œ÷­–W£!âyidÉÊÐÝΩ¹'ŒàE=0Ùò|”m^[SSâñ8Ξ= àVYD"ææfŒŽŽ¢±±ù|o¾ùæm× ¼^/~øaÜsÏ=èèèLúôô´d!“É$fgg155õ¾Ï“ÙÔÔ„C‡Áår½/pcFk{{Gšämnn"K×ûH$"6ˆ]¤çææ`µZEΙ¹Íf³°Z­ðù|’QšŸŸ‡Éd’L­É´Ë˜xíµ×`±XÐÖÖ†J¥‚p8¼‡yÀ «ßïGOO<ÏFV¹\–¦cOÆ2“É$)Õ¤¾ÒS×/..JV‰þõ]kk+†††088(Sx‰„0èÚÛÛe4³L¯½öL&î¼óNé:­eXû¹Zîµç5S>“–kýÔ@ƒÖÇü^#¬¿[—þ?€=zÓ÷ǃɎ·Þz •ìkf5–:Ù‡C@ÞOcc#R© -…‚èn‚܃N§^¯‘HDš—q,—Ùl†ßïÇää$Ün·€²:;;¥^¸V«‰üær9Ôj5ŒK}mmMhÖ&Ón‰r¹,}\ìvû@bkk ³³³¨Õjëîî–1d„+• -–––°³³#™áD"d2 —Ë…\.'÷Í–·ÖÐЀL&ƒt:-=X¶ uGEddFtss©T -7oÞÄÔÔ:::pçwÊ8Rú™åäcp\­V%ÈvÍ®®.tvvbdd?ûÙÏðóŸÿ‰DBt+›=V«UižHæokk+z{{‘J¥$ ÐØ؈íímär9d³Y´µµ Ä2  ªã‘eUì®_©ìŽ<õù|RzS«Õàóù044·Û-¾33õ¼®3YV,]!åžty–vuu €çñxÐÙÙ)À‘ÉdB2™Œzý‘øœ¸·´re&“ÝnF4ÏÉ,9YYœVÃ&‰;;;(‹X]]Åââ¢ÈA3Ú~o$‘Q}Ô[&“IØôãHi{ÐÜÜ, ‚&R˜ÔåcŒèqýý~? -…‰¢Ñ(b±º»»E¯Ræ)ßd æÚi@W˹î#£õ¿àÀªë䌉‚§…†µžägvvvö4Z1ý<¸ÈtTŽg½ÃˆnÜî0~¯FÅÝ‘kkkx÷Ýw1??ÞÞ^d2¡3nnn"“É`jj -‰D€ÓéD6›ºªZ­ÂãñÀëõJÍ ëÔØüˆ5T˜ì -Éy°"6Ú!ÒÆÛÛÛhiiAGG‡#+++ˆÇã{(e|?‘4‹Å‚—_~===•±Ü4:Õ‚Âß÷C»ŒÏF#¥ÆgQ/Pn)\ã¡í\iH_;ÏkŒ ípéƒßÃ?›Íâ—¿ü%±´´„ÅÅEqryÝš¦IåÆú&#ƃAïÿôØωÔ×Ϭa¥RÁÜÜb±˜tmÖ -ÍèHꌒqŸAÒ€’F…†xéÒ%üð‡?Ü÷>:::pï½÷b``Ò8lyy/^ÄÛo¿-@¡é“žÆNà•Ê­Q+\666¤É&çÇ‘çHÍju—†çp8 ÑÖÖ†3gÎH†°¿¿½½½t9rDö -é[dp$Zss3ÂáðžF<üÙÐЀ±±1455áâÅ‹8}ú4î¾ûn¡·¶¶Š_XX€ÙlÆ$㺰°€gŸ}=ö>ô¡áŸø„P`µ“¤•þoÓÿ“ƒò ÷Š€ê[Z^4ƒŽÏ¥F}ݺϊþHÓ3î#ð¦ÿé*‹á'?ù }ôQ™À²µµ…™™qˆ `‘ÆØÛÛ+×O*¡®‘ÞÙÙÝúÈ#à‘G‘Æ ñx¼îº°´‹{FçÎÃðð°täßØØ€ÝnG[[›€eV«“““ˆÅb’i÷z½èëëC,Ãêê*®^½*QµZÅÊÊŠPˆô£íÍ×ÙÙ)e3CCCp82™ôiά¶ÙlB^ZZB6›• §µµwÜq‡L͸|ù²4ýËår˜ŸŸ—lßOG8NÃf³all V«ÍÍÍÒÀ‰%uÌe2©[6Òé4xc§çååeK7;;‹ôõõÁívãúõëØÜÜÄñãÇeª1È×À²QojùP×ÔþÍ~ûÒ¸ °ñ³z/í5Ï¥¿_ÿ_Æk Az{{»ÔâW«UÑ©Hö‰SYÊå²$+˜ %•Ýn·K©ktív»L0›ÍÒD®©© ¹\N¤¹\. Ë8´k×®!Ãív –J¥¤³x<Çòò2ZZZ°²²"}{ÈÊzï½÷J¥ ‘ÉdÐÑÑ!¥LfÝÓÓ›Í&ýHçu»ÝX\\„Éd’ïå¸fSSS"ǯ¼ò -*•Šè{`·*ËȨ#)×ëRi¸xýúua¸ÝnôööÂår¡X,baa¹\‡CX”%úŽ.— Éd¥RIÔ•Úo¦ìèAss3î¾ûn\¿~]îO÷0ØÙÙÁg>ó„B!\¸pù|ãããrŸdèèzzíÛhj¿–g n1Ó̸D']hµ/ª÷R=@Θ¬Ô,ÍŸŒ["CŠåÒÒ._¾Œ……øý~looãÀ2zÆf³¡V«ann ØØØ@8F[[²Ù¬Ô«Žçv»F‘N§÷(B=0:Ô¨¨ñ¹è€[3ö“-:æ|ͼk¡Ö‘þÊ.ÿ¦,Õûn-šFSï}¼7"mtJs¹‰òù¼ÔÖøY‚aéÖ×PD¹ÝatFÌb± ›ÍâÙgŸE>ŸÇ•+WÐßß}èCïûœ~æ\Çz fÁ_yå<óÌ3¸xñâžëíêê’Ï2xÊçóˆÇã·œN':$híêêªܬc£G>¢î}}}èèèÑKÛ’É$Ün· Á¥RIØœ•ÜÓÓƒ É ,//ãàÁƒðz½Bá[[[*[gg§Ô…ÓÁÔla‹Å‚X,†'Nà@WWü~?Ö××% wåʼûxñ" -…>÷¹ÏaxxXùcÇŽ¡«« /½ô^~ùe|þóŸÇÇ>ö1´··ïÉÖèg÷¿9n'‡F9ÓÙzç +ƒM»´üÈÔ¯é@FË©‘™ ß£Y@:è×ë0;;‹o|ãøÎw¾ƒŽŽ©gfsggGêáYÇÎÀ[#þk°›L&ôõõÉ5.--IéA"Mç5™L<8Î=ö•´g:RµZMf'›L&8tuuÉ5ÍÏÏcqqQøP(„®®.çÅZT2ý>,õŸlTU( qèÐ!D~Óï@3O.\¸ÊñÖÖ&''eo²G³DÍÍÍXYYÁôô4677144„`0ˆ“'OJÂÝÕwvv`·Û¥iˬÌf³d—Ìf³ôÒ!:›ÍJÖ†ë§uKÃá°Ì`ŸÅ7Ä=räÚÛÛa6›‘N§qþüyôööbxxxϨ/£Ìʯîa´/´KÚ1ÔçÓvH³±ŒúVï‹Å"åGìÍ e^åF[aŒ~šÙ|«9Ú$“IlooKÉD¹\–:a6œ z>‘H P(£†™HŽQÕï¥.XZZ’.ç…Ba½±±`0ˆ ¡ñ2ø/•JX\\ܵZM‚w›Í&lJ–¡0heg}fsµßÐßß@ €ÕÕU ‚3™ âñ¸d"é«0 ?Q«Õ$+Ì ŸÏ'ÁÈÒÒL&“”µU«U\ºtIôÐøø8B¡âñ8òù<†††dÄZ<G[[ü~¿ô˜b¶šZ¯×+`ºö‘´|P?wvv¢½½ccc¸|ù2žzê)¼ð hoo—óp”ÛÆÆÞzë-¼üòËÃÀÀe:A{~÷ý&ÒØpÕj5¬¬¬hÇ@ÚjµÊ¤‚ÃÆØÀÈ^åÞÒ{ˆû”çÑr˜L&ñÒK/aqqQä’×Êž\”yÆ^¯WæÝ -lmmICÇææfatX­V™^Dj>G}û|>é Æf6› ~¿_Ö ™LJ -õíg:ÛØÚÚ*ebn·[&&“IØyAÎ}Í}@9¢œ²é+K”Ù€±T*!#—Ë¡T*!‘HÀf³É¤–<3اžÉf³ˆÇãhÀšñû „ÃaiLØØ؈t:- 6¾F’A³ÓéD±X”éOápãããèïï—Þõ˜d~è¸Cƒµ¼íÛÏÁýÌ=çp8Ðßß/%«««Èçó,píYêJ0 ©Žq™t2&U´Îçû­DEŒ¿Ô˜!Õ7l4õŒ™y0~¦R©`vv?þ8b±˜Ôq|á _ÀéÓ§eT„ñæŒFØèÖ[|ù|—.]Â3Ï<ƒï}ï{vü{î¹G²‰Õênm›¥:9??jµ*üéÓ§ñöÛo£R©ˆ3G»^nnnJó¸Z­†ŽŽT*»ãÅ8âNQ©T’ ³X,âÔ©SFOOÌf³Ô~ȈÅb˜™™Áöö¶(WŽš`Ý3k2Yc233ƒÁÁAtwwË:Ë0(8Æ@U ³VˆZ´Ã£å Þ³£ÒÕ0­|µ¤åI£k|dÜÆ@_߇>¿©Õj’ ;|ø0Þ|óMY;fäŒh1Q‚4rüN®¯J´1ÒA¸–g}= vtÖIßG<Ç—¿üeù̧?ýid³YtvvÊùô½rˆÓ¸ê½G½@åS«ÕdFð÷¿ÿ}\½z¤&¸5æMwñ§Ò§SE´tmm ÍÍÍ"³D®Ùi˜ôcf ñ÷®®®=Î*»O¯®®¢P(ì°Ìæ[5S…BA²:lðÉq¯¼ò -ÆÆƤCk<GSS†‡‡ÑÙÙ) çææ¦ô!­Œ]t———Åylj(¶®mlkkCOOî¿ÿ~Äb1Äb1ÌÎÎÂétbjjɵjö IDAT -+++¨V«8zô(r¹þæoþ©TJ(–Ô ®äì h©Þ^Ñç¤Üêl©1@¢£Ëç§mZàµRƒRšÞÆl»ûToh €FµZŹsçðÈ#àõ×_G(’qZdSq/°®žÔFf’Òé4º»»¥'‹Íf“xd…Äãq˜L&„Ãa˜Íf¬®®b||n·+++âˆsÆ1ýµµ5a68æè;¯×‹ÞÞ^ÌÌÌ`bbBFÂööö" -‰Üqœé…º#²ÏçƒÓé”fk …‚d]è`1{Ã@|jj -Á`‘HDœúææf¬¯¯£££CôP6é£, Àáp »»@ù|SSS˜ŸŸG:ÆÐÐúúúd“&m±X$óEG‡ûÃápȵhÆõ)åˆúØ X?ùâ‹/âüùó2Á¥­­Mü·ß~¿þõ¯ñÅ/~ÝÝÝ°ç~öÛ3·ÓÉ”Om·ôþÒ}Wôwh‚AŒиGè‹|Ð@ƒÆ«ÕÝ© ¤Œ =ê!ž›ºßåraffæ}×iì¼Í=LZ?)®Åb¥RIº¤³d¤ZÝÑEŽÅb¨T*p8Èd2èêêÚSã @XŽlüe2í&5R©Ìf³ô˜I&“{Æ×577cii ‰DBz21 Ï~dÊ°æÙãñˆÇ„ÍÍMI°T«»½ Èjൻ\.øý~Éì.--!‹ Å›à;;;e¼&4ììžÍf¥f0„Õj•Žå—.]ö@ ÀG?úQa;P¾"‘¬V«Ð¢É^hhh@gg'ÌæÝÑelÀÉ€œ¬-£´—dCr_ĸ뮻‡qäÈ<óÌ3Èf³p8Èf³Ú755á­·ÞÂc=øÛ¿ý[Ü{ï½2‹™O~³æ1éhß„2Iš¸þ›fŒé Ÿroب;´o¦}5îAî¿ææfD"­È> -ºÄH'UÈjaCÓjµ*¬'‚Ê”óH$"™hú1´;;;2v“þÃÎÎŽŒ‘d?ÆRìk´´´’„ä¼z2Ò¦Òÿ£\³$,,®U[[›0é?qúc Ý = Âb±ÈdzÙ,Lέ­-xŸlì™Íf±ºº -‹Å">7YVétÉdRü*î—ÉÉI¤R)ˆØ¿€ýf¬V+"‘ü~¿dVÐ_ä}jðƒ÷C˜û„É0úEúïHÓ¿S'óu»Ý¾\^^†ßïGww7Ün·ìÃr¹,:¢å™2h+L&¬›››{^àÁÿkº ƒmÐöËÈhºÐW>ŸÇÓO?ù—Agg'ššš077'ó"Ož<)9]ûÀkùmÙf*«ÙÙYü÷ÿ7¾þõ¯Øí Îú :E¤˜„ÃatuuIcŒ……´´´ ›ÍâwÞÄVwÀe³b±ˆl6+u4vlNÁ¿ÏÏÏ‹Áv7‹|ðƒÆ@“¢¹¹9 -ÌÏÏ£X,J†@°Œ¥R)ÌÌÌšèv»qéÒ%ÌÏÏãÁö¡3W*©ß¤à3P׈*׿ÞÁ€x¿`Coã?³yw »œ÷sÄ4u×kÌ&ÞîZö;øÝ4&t2صšH‘8}oT‚ºNZB <4hBVD½½Åë©·ö|>ù|¯¾ú*H¤þð‡èííÅÇ?þqQÆÏÒ¡á,X*M·ÒÖÅ‹ñÙÏ~Vš×ôôôˆ#C– Rf44Š}3xÿt<ÖÖÖ¤¿‰8fLOe`o ›Í†ÙÙYaÐ0°ÛíXYYA­¶ÛéœuÎl¼ÇÆ1ÌÖ  ½½#a·Û‘N§±µµ%Mܘ±r¹\ÂÈá±±±!Ýewvv000€¡¡!466ŠÑýHÙ°K5{÷Ýwqùòe¼ýöÛxã7àr¹àv»ÅhÜwß}xüñÇ1??/}éK8|ø°<§zÌ®ÿÍ¡Á "ðZµŽ× åŠ2Í¿A„Z­&™+#8l<ô߸ŸŒ:ƒÁêÉçž{_úÒ—ÝÝÝÈårBlmmÅÚÚÚž±C dIŸçs,‹2j‰µ—Ì’éAIº<õm0Äòò²È{0‹Å„°¾¾ŽT*…ÁÁAtvv"‰`ppo¾ù&&&&°ººŠ»îº ¡P&Ónã¾íím¬¬¬ˆã¸ººŠ––9qÔn·[ö)úÑhtóV©TÐ××' 2F“öŽ¥N²ÑIê@^ëžIee)u©ÎÊrd!A;] A#£Ìð»-–݆L‘HûØÇpõêU\ºtI²Ó,|öÙgÑÛÛ‹O~ò“ÂBÔ²¼ß^¡N5²õdTÿ®KAh0x§¬so544% ¦è‡i°–ç1ÌÔ©ûÝ‹öñ¼F£QD£QѳÕjUh©,Ovïb±(#ÑؘRÛnŽþªV«p:âk9Ž=vµ½½íííp»Ý(—˘ŸŸê2)ƒèèè€ÛíÆàà š››%¨ˆÅbÒ@²»»‘H[[[R@ÀÚ¬ £»»KKKBŸçH³ÆÆF`ý~¿P‹ív»¬{*•’Œ%›µ577ÃétbxxX7—Ë…ÎÎNéÑAz¸¦þ†B!Ñ)lÀ¶ººŠ¥¥%ÉŒŒ```‰D“““¸ví²Ù,îºë.ã8~ŽÁ8Ënx]£££ØÚÚ’@‰¶)ô1(·ÔË|===¸ûî»±°°€·ß~gÏžE¹\†Ùl–N÷wÞy'677ñÕ¯~[[[x衇„J@‚~½ïèŸè€œ6G³ãÞâujRË;}äs3!¡÷yMn·÷Þ{/J¥&&&¤¤– Œ¥¥%ܸqCü{“É$='Ø‘žûs¹†††000 = È>ñù|Òt’ cúdL2Ñ~pz€ÍfC__Ÿô¬2™vÙ/‹ííí°ÛíbÿX×®k×Ù3Êï÷‹gãB»ÝŽŽŽ´¶¶ÊØåh4ŠÉÉI477£··>Ÿù|^|? Br¼.»á³Œ”ö€×ÞµZ ËËËXYY‘2ê@ }Íâñ8æçç‹ÅÉd„Ñc2™di/XÚMùïéé‘ÆÍÅb+++˜–)ý–0e2é3FÀr¤e=@âiÙáÞ©—h¤à3bS[³Ù,ý~l¦R))cèííEOOÏûbrÆõ|²J¥«®UÕ“NôO]2ÀÒ›Ôx³¼aãF¦ZYYÁsÏ='t“i·ÎéÝwßÅßýÝßá/þâ/püøqq”Ù°B;¸`Ðh!kO–––ðä“Oâ?øúûûÑÓÓ#Î Ab±˜Œ,""ÄlÎÅYš¤Ø0X ƒÒð($ƒf÷«ÕÝzL6c˵µ5loo# -Áf³!‰H]–É´ÛY6NKðÃF’°Ûí"˜>ŸO£T*‹åÖ(»J¥‚k×®áþá`·Û1::* (ÚÛÛ¥.šNg+SÑê,e…Š•¿k‰ÄÏŒ©Ò>‰ê™$œ¢ÜiÁ§òa ÉÏékÐry»ƒ×@%¨ë¯8§—”F®0ÞÁ ®•þ)3lĹßué}¥ .--á'?ù H#¦¶¶6üýßÿ=^~ùeÜsÏ=ÒÉ•¨,³7oÞÄõë׉DMíïï—®á¤âOLLà›ßü&’É$ÉdL&%óOCÊg¨­PvXk]*•P©T¤n”Ž QÛ••Aæ[Íþ -…‚€UlÞD'‰cr¹œ”Ö°! é[ ¾L&®_¿.ûïôéÓ8zô¨ìeÍR`°Æì-3Îx&rKùྠz† vG×ÊYfV«GŽA?‰~çw~étV«Uæ2W*9rét_ûÚ×ð§ú§8uêÔ¹2ÊÍÿP€çÐ àVV½`ž@A=™tðzà-¾Î“ú3õö6qö_zé%üÕ_ý•èìX,&VSSü~¿Y«ØáØn·Kgs¯×‹t:-%'fóîh¦íím;G*6*Ê>Ÿííí’Ad&Ãd2app½½½“ÙȤ'g2éRLjåìì,²Ù¬ÌšöûýR“].—166†ƒJ³6ö1™L²¿L¦]–O­¯¯ ³€Ì—­­-óÅNÕÊ岌f"ˆQ,‘Ëå011žž™xS­VÔ¶ÛíâärO¤R),//cuuUêD+• -8€¦¦&é{ÀŒ5{ç°F¸5]³Ç´Ÿ¡î»ï>Œ#¸Õ‡¨P(àСCxì±ÇÐÝÝ“'OŠþÒ V=Šf’èÀ‚ßäÒÙ| °9'–N¥v©S5c³V«ÉëªxŸzŸêuÑûrgggO ¯cqqQ²\‡Ch¼,*•Jò¼y=ÌVµµµ {„kÓÓÓ¯×+¿É ÃM“Eù|^ÊùýìžM]ÊÆȉDB‚ -‚÷mmmBÍßÚÚ’ùßìùÁyê,KÇãÒèÓh‰„Ôø“¹R.—áñx$áCZ=›Ý²¬Ün7<\ ëuóKÞ#Ác2sü~?î¸ãlooKðb³Ù°¾¾ŽcÇŽáôéÓâܳübmmMúÌìììHo€¾¾>2qõêULOOcllLäà™°õìýv2Ãàà :„¼ð øÙÏ~†®®.¡ô777ãþûïÇúú:^zé%x½^aXÙív¡œ3Q`LVº|&´_È÷ë=¡¯Ûø7ãžæßè«Qæù–IƒAÜ{ï½X]]E.—C(B?:::°µµ…ùùyüô§?E:–Ìr8–}¤Ò“¢>33ƒwß}WžË ™"“†“„Xöãt:%ð®V«BËg2†}18’ì-fú[ZZöÄ~ì#¶µµ%=Ìf³L³`ÃJfäIÙ§D]S,åýô‰˜ý§íÝØØÀìì,VWWÑØ؈D~À îÑe\G€gîB¡€l6‹«W¯ -X×ÖÖ†H$"Ÿ#ÈÈl±Éºäúð¾(«”Ú,² ÔœÑz•IR=ÎV3µkиÇØívŒ#Ës×=cÂõõui$ïõzÅ>h_M'u²ÑªoR;oÜ,<è÷ÔsÚH{ÐÀ‘ Fïìì`jj -W®\Á¡C‡dá677qìØ1\½zŸûÜçð¹Ï}ãããBŸœœ”&` 0™v9ŒŒŒÀçó¡VÛ­‘|á…pýúuüâ¿@GGî»ï>§áv»¥Û8=Àáp §§ }êééA¥RÏç:‹Ûí–`“ˆ 7X$ã–N§„@ÊÑ=íÌ@"‘^D¯>ŒÃ‡ ÕŽtHÒŸ¹y?~¿_šêçF—L&½[]]4WÏq¶ÛíhnnJ+7ÑW|Æ€žÂª>3HP ™½ s¶ó\t<µSa766"›Í⩧žÂ©S§päÈqðµ’7þäÑÀ—Fõ´âÏår’yf`K”@f6ˆX,»cv’É$æçç¥G6›:6YL¤8¡ŠkCÀŸ\;ÖÒHår9,//‹1‘®»KKKøÊW¾‚ï|ç;8uêÔžþ)ÚÒ œ–¿ÛÀÓΘÞ7Fã¤ß¯åž2AA–fŒé÷êspd’îEbškµ]fÁã?ŽüÇD¿8_ J™½#í£Â<Ø©t:l6+-iï…BA²0ÌıÓ0ëóùÿùÏãÔ©S¢{5¸ÆDýRùzè!Œ£··Ï=÷®_¿8}ú4Ž;†¶¶6¼õÖ[øÙÏ~†cÇŽIožøÃ8yò$Z[[÷Øf_5#“Ì-ÍR`pH¥Uš‘`ÀÀ¿qó» @Ò—dp첈?ûÙÏâìÙ³˜ŸŸÇìì,¬V+º»»q÷ÝwchhH¦­X,é%ÔÒÒ" îá¡!©M'ÈP,Ç‘J¥ä ~QжZ­H&“ÂúÝØØ€Íf“ò/“É$"L&“°YžLV+°[†’H$ÐÕÕ% Ø¦§§‡aµZ,w¹\èèèˆR:ß«¡¡©T - ²/õÈKN?[ZZÂÉ“'Eïz½^”J%IÐoà^¿yó¦dù F3ã¤úÕLx³×Ë‘8É‚ã4_PnØàöº©© årYöX*•]h6ßš¬ÁR _Sµꘈ²È=ÖÖÖ†––¤Óii>šJ¥d´jww·ŒK¥Ž¡]¡¬j{±Ç³/zcè@Nj¬·º! ˆ1C« ’ހܔ¹\Nº|³Æž_­VÑ×ׇÅÅE|÷»ßÅÿæÁ©S§`·ÛqáÂ\¸pÍÍÍä( -²ËŒ7©¤ìŒŒŒ ò›6{›™™‘9—~¿_@Þ6±Y3çÚ(i6ç'ŒŒ `ii ¯¿þ:*•ŠT*%Ôáùùy,-- U˜L®ƒbmm ÑhT˜,¤rÊ3þdlnnÂçóÁãñÈ:²vsqq•JeOÀ‰D`6›qäÈq†Îmoo#‘H`ee.—Kjyf„éÀb¿…sçÎÉu;NqxWVV¤vØ zÏ;‡ùùyiÔh·Û -…àt:ñ|gÎœ‘q‰õdºžÑ²Z«Õ„•FñꫯÂápàÈ‘#¸çž{ÄÆÍÎÎbllL‚A£^×çåAYÕvù·íŸz{MëAí;ÑNèÏè½¢©Òú=F} ÷°›µ»yó&žxâ ¤R)‘¿ß/ãˆÄb1˜L&ña–––„1Cÿ„ ŽLÝÙÙ‘æeH–T±XÄââ"r¹º»»ÑßßÎÎN™wÎ '3zLVÌÌÌ R©ìiXÈ€ˆ4,¼Ú;bÃÈ\1›ÍèééÁ7Ä~Õj5 ¢ššš‡ár¹055…ëׯcdd###¢Xg2™d |Õj5aC°>›É"Ç# ™7n·.\=À²‡ÉÉI¼øâ‹0™LèììÄðð0ÓÓÓÈår’ɤí¥Î¬TvGP¿óÎ;×j5x½^d2iȇFqþüy=zTtœNà“F0ëÀp»Ý8sæ ‰&&&pãÆ ,..ŠÎ:~ü8ÖÖÖ011¸yó&æççqêÔ)D"Y?ö˜0™L £üòÿ¼Wð:)Á=ª“<<´ ÒLTTŒ‹´?788ǃwÞyGä†=Š:::D‡jû§Ù¡\G·Û'NàúõëXYY‘ÆÄ^¯WtxSS“<Ób±( ›/,,`vvVü¡t:-ìG~?{0È"HÄ釡PÒؘ 9Ýn7–––$àe¢Ðjµ¢§§GXGv»GÎÇ ·©©IØ\g·Û-vǃH$"£^+•ŠLÕ)‹rïdUsê›?s544 T*ajj -[[[…B°Z­R*ÊRÌX,†‰‰ aͱ ˆr–ÏçÅOå=SvªÕ*VWWeâÁií»Yó”%Úý¡çg qB*•¦)WœÊR­V¥T‘À‚.1Ú)™ 3éÚ`hÔ[gn´á Bà éÀM ¬Õj5\¿~o¼ñ:¿ß/†ƒ›ƒl{{»du8Æ‹5<Q§ÍÍMD£Q|ûÛßéìÈäææfY:¦ÃÃÃèïïÚ&x6Þ¨T*R›399‰×_Õj×®]ÃÖÖº»»EÙl6éØL)élœËåý#†Ê9‹Áb± ¯¯N§Á`¡PHžßf³!—Ë!£¡¡AèwºCjµZ:6ƒ1-¨ÕjÒsÁãñ NÃï÷Kݦ×ëÝCÅæ3N&“°Ùl22*“ÉHÝ gø¦Ói8N¡^“úNYÐv£3¢ë¶ø}PajÊ•97³Dn·û}Á•ÎÈèßyìì0‹NÊA/©È¸3™ŒFDà´C¸ø¡Y3·;´2Ѩ÷ÊÊ -ž~úi<óÌ3èîî–‘.œÌl^µZCÂÀ›H(gç2à´Xv;ÛѤ¡ Œs/à…è5g0”Z26˜aofâÉ\ÙÚÚ’`õi&“IÎE§Äd2!"•J!™LJ 3lNe2™D‘“ÇŒÁˆh4*}¸çï¿ÿ~|ñ‹_”J@̆B!Äb1™óÌ{˜››ÃÊÊŠ¬a&“ĘHüÅ‹%³A_ïÐ:TgÂív;Z[[ñ©O} -Ï<ó ¾ÿýïKÍXïof?ùä“øƒ?ø„Ãa·¨úÆ Å(ÿûÚÜN.÷÷®Ð†6D­˜©1›÷6­ÑŸÕ{•²¯@£Ýb -ÜÒ‡f³Y 4{38NyF BØoaaÅbq: -„L9 B¡jµšè Ê÷‡ÅbAOOÂá°¸ù|ÓÓÓp¹\Òူ¸^œsß××'žMMMèîî†ßïP- \.KK‡Ã!uÍ hoo—Ò>ív;úúúÐÛÛ+YLŽkäžG¹\–,ˆÉdBWW‚Á <êǃ@ €h4ŠééiØl69rD¦ ,// ÙÞÞàÿPö¥Ámž×Õ÷ @‚±ƒ;)’¢DK–l9Ž,/j&öLÒ&i’vêöG§™iäW—iûe:î´Óifš8ËxšI“Æ©ÓIâ8vGv­Z¶%Y–µ)î ¸`%‚àbù~ çêákÒIß$Þåyîrî¹çBÆ^ª€:Ï!•Jáûßÿ>¾ò•¯àÓŸþ4L&“L•ø«‡Œ›L&œ?ÝÝÝxçwÍfE˜±¢¢sssƒ†Ãá`U]‹¼fµêÂ×Ô÷j÷Ôa÷ŠZiU/ÕGòýj!â0B½võ=|=›ÍâÂ… xã7àp8pùòe x‡…î\QQX,& Š²O¿©© ‡C&…BÁ`Pz• è -‰]ZZZ066&¶ž×CæT,“¸†ŒV-ÙŠÀµÏÞhúúßááa477‹Ha*•B©Tn™ –ÍI« •72†ØòsöìYIŽ÷ööÐÞÞŽ¹¹9Äãq=zT -Oñx\ªŸd=p "í㘺º:‰ÏªªªL&ñöÛoãèÑ£ØÛÛC(™h…Bׯ_—)7²?ùƒAª–d4Ðoœ¡½ÊE‚ÚÚZ|ðÁˆÇãÂ~S×'‹`jLÆ5G?ÈÂC±XÄ}÷݇`0ˆ«W¯âÍ7߶«^_žñ^]]c'PLð IDATÇŽÁl6ãæÍ›˜Åàà ˆ”áwÒ‡Ò¿“å¢êgÂX„ "îÆ‘j>¢@yoø;\§f³gϞř3g$æ£X%mü¨ûÃê,×?ãŒÖÖV¼õÖ[‡Ãèìì¶Ó_õEñÚÚæææL&÷é(±U­T*Io=õÎÆf³YÌÍ͉Γd¶Ç]æt:e]T¢ˆgSS“°TÈ `k‹†%;ˆ- µµµðûýhooÿD–G©Tp@Y=z½^â)ƒÁ Ï}}]Öt©T’ö6“É$ €êêjÑZ`ñ‰­p¼›››ðz½ÂHfËH,8Q+ˆÏ‘À#sf¶ø©¹6÷ -׫꿸Þø 9Åàøñã°Ùl¸víšh50daí ø £‚IKkS“ ž¬šà«T%n,måJ äTd£T*«‡ÿøÇ?ÆØؘPdZZZ¤g™Dss³ˆpèõzØl6™¡ÉófNöÀðð°T')Ü@1)›d#i4œI%æD"p8Œx<Ž®®.X,?~õõõ˜AŽ;a¥Ól6 -Œ•h~{eÔ¾5žƒJ©çø>ö&ÖÔÔHA¡¶\.‹Å"•VÔ˜l d²¥>L&ƒŽŽ=zThhtäDŽh¤Øó¤.(V̸6R©æçç¡Óéàv»Ñ××·oÔ‹º Õd¸×#¯í+æ¡EθNÕ ‰A<[­×l*j­&\ßT§epIƒÇß c(øE:?-}Tu¬¶«×pС¥1Y⹬¬¬à?øþáþn·[ '0 Ÿ绪 +]›¢aS÷-I‚˜\Óè˜ÓéʽJ¢# -m±X°··‡™™¡ü³§R¯× ›†€PVÉe(Uü[[[a±X‡è0òÌÔ>Z>«úúzìììÕ­µµ===B]]–——199)†ˆ8éϤðmllH[O6›•À¢©©IZ$¸'FFFDSA]›ÚC ˜rí0HlkkÃg?ûY444àùçŸGee%|ðA ˆ@ )Ú\C²j‚®VÕCuL¿  Òþƒ¤ƒª¡*X¬^·ö  #…–Áz=ü]5a U|ªÝäÊd2¢:ÌÀª¾¾ápX*þ›››Øëõz ª«ªªP__/½•µµµÒ§ØØ؈õõu©â“þL»’J¥0;;‹t:-É ÿpÏr,Ãá€Á`Àââ¢è¤R)ùǪ'çs“Ïç \k¬ èõåyëTÁÇã°Ùlðx‘ßAÿÆïhmm…Ëå !™LÂ`0ˆ¸1pƒÁ€––ié æÁVÈÙÂbOUU•ô¼±ÑhD0Á*Švww˹mnnJ[q©TÀ¼rå -¼^/î»ï¾1ØRe6›100€ºº:ÔÕÕaooOD>©@bo2S©”´ 566J«ÁžG6›•Ñ»R\æ{9“Z2h?x˜{©q KôÅœæÃ8"›ÍbffFØdÒ×rí°pF? ]_jÏ؃뤺º]]]2ùƒEÆÉ›››˜ŸŸGgg燴 ÔB=Tð ÔdGíYÐj ¦.f-HÝ*´P(àöíÛxî¹çðÒK/Áçó m±P(Hÿºj¨8¢¥¦¦Ff`’JE•ßÇ Ž˜T”|>/ÕN>&ÓœJʵ7n`iiIPH**Søˆâa¤û39PÇUÐ0—J¥}S¤C“.Ìþèx<¾oœH[[Ž=*×f4E]SM”9j¦Tº7·š‰<«öLÔ2™Œ¨Z³Ï˜c͘ˆÑIîíí‰z') -ŒÐ‘èt:As÷öö°¾¾Ž©©)„ÒÒ[Ô…yØÚâ¦Pµú>õ÷˜$644àĉBkÕïÒ&!*+AM²Õ5ÌÏ 2IöŒšÄ©~oà^Kƒš˜¨÷@»ŸCíÔ}Aç133ƒgŸ}ßÿþ÷a·Û%á­­­•ëQ{‘è ÔsV‘lV±ÔÊ ¯U¥osÏÓÀ -¸\.TVV"‘H`eez½^‚FöOår9Ùs¬555Áét¢X,ÊœZŽÜcpZkµZE¤’†´¦¦ ’È@#’Êû—Ïçt£³ïßt|Ôu¨À•ZAÒ*à /T§¦îs9‹‹‹î Ÿ‹EÌÌ̈ "cDòwwweŽ²v­WVVŠmÓëõ"\»¸¸(ý±«««Òï¼¹¹‰Ó§OÃívK'÷ -Aì|>¡¡!ØívñC)cu“kjÇT/okkÃöö6æææ¤=q -–•J%ôõõIEß`0 ‰`||f³~¿•••RÉUûúUµ}N˜¡¸Y Ldø]ÕÕÕÒ‚³³³ƒh4*"µ^Ëf³‡ÃØÚÚ0(+:§Óié‡&Øe4a6›át:a00??@ €ëׯÃétŠp“Zµ;l-j×;×}óÈÈÆÇÇñÊ+¯àæÍ›ÈçË3ÞgffpñâE466Êyd˹føùZ0MÞhŸ ¨r©¡Ö1éRGFòwµ»v¾Ÿ “ÑhÄÐЦ¦¦P[[‹ÁÁA466buuUöÅ;wP(챦V¨R©”¨wtt@§Ó!`iiIbÆÙlf³YTÁ[[[‹ÅÐÔÔ„X,†\.'JᬌÖÔÔˆ žÍfCoo/ªªªD…L¤Ò x½^™‹ÎVEÿ6› ‰D7oÞÐgqq‰DÕÕÕ˜œœÄ©S§000 ‚”Á`‰DB€¶õ) G€2+®­­ Éd[[[Ò~ ~>ý± -BQ$8—Ëappÿò/ÿ‚P(„GyF£Qª¶œ àv»%Æçúfïú(þ÷ÿ/½ôb±¬V«(Í›Íflllà+_ù -®^½Š/|á Ö-ÙŒ±¸ÿ¹¶¹¯øcVþ™ük7•™ÆÏÑVì{U|¶œ¨m<Ô˜’ßKf®Ö6‹e†¢ÍfC$A[[L&“è¸\.˜ÍfôööŠX§N§6¤NWn×Rm -‹1´åÍÍÍÒÉx©T*I»ó&íÔ½ ¾ÇÓïñ; nܸ½^¡¡!)j’͹»»‹›7o"‹ÁëõÂjµŠÆÁÌÌŒÐé}>Ÿôè/--arr@¹õ”ÀPMMøTRðÕ‘’…BaßÄ ŽÍëìì„Ëå’œ‡{¬µÐ¢®jòPT›Å2ænµµµ25&N˺`^`2™àv»¥íñ -þªlfÆ*´ï\Gv»f³©TJÆ{ ƒA~=åjpppßÖDÔd@ýÒ:ÔÔ¨*ÂÆÀ.NãÚµkøÿø\¹reßœ].`öJˆ:pooO(…ì{d/‘_³Ù,I.‘íd2)ŠÅ{{{²‰ÖÖÖðÞ{ïaoov»2OÒápÀçó!crrét]]]’èÓÐf2AWN'ª««e| ÑmVEôzý>Ú£ª´ÉYÑD›¨ö@Íd2¹o$ˆZÝã†g®Ó•ûW˜DÕ"Zåp8ÐÛÛ+¿§O.B ö•pC°"ÜØØ(Tx*÷rf.ƒ”™™,//Ãçó¡µµuŸ¡Õ"ª<´tN5É>h!ÓàÅæ|aVGx?TDV5ºü¿!ãù±bÈóçFÕ‚jÂOú×·Z­Q÷ÖGi]'?'ãæÍ›xþùçñË_þR= ±¥€1bŽ½ÃVõ=êX‹Å‚R©$û³ªªJhaT¢åÔ ŠÃ444ˆJi:Æêêê>ÆÊöö6–––ÉdDÐÆf³IÕ€(6©z…BA„h8c]aNHj&{¼hdY :yò$, âñ8†††Äi9 ‡Ã"ÎÉ‹T±H$‚H$"¢jãkii‘ŠÔïR©<¾†@{{»ˆÌUTTÈxO®ÁƒŽÃÚ~ÖéÓ§QSSƒÅÅEÌÏÏC¯×ãêÕ«xî¹çð /àܹsû€´ÃlûAppä7Zí ŸpðûÔ–HæÿÕ}Ê× æææðÃþN§S’Iª"SOù¢Ñ¨TùY±ä˜®L&‹Å"û—ÕpŽ²\YY‘v-Vr-OMM ˆjµZ±¾¾.~Òù³Ù¬uqïÆ}ý¨ëëë"ðÔÒÒ"z;;;¸sçŽT›&&&pëÖ-Üwß}x衇„´·WøÎ;ï »»[X0::*Àiœd³„B!,,,HIp™:Ô!å—Uã™™$ ‘ÆQMì]4 2Š ¶„ _eUtggßùÎw077‡'Ÿ|£££b[ †{"a‡ZšTE**Ðßß/mI³³³H$2¾-Pí¥ßä¡-†h} -_§ÏR«ïLæU`Y›Lp°V­ ißóÛÚ‚¤¥R ^¯çÏŸÇÍ›7e„%õD¶¶¶ÐÞÞŽ·Þz étZfÌ3ñx<DGGzzzÐÐЀT*…T*…ªª*Äãq¹÷ ¨ÛÚÚ¤Âͤ“í5,´P‹‚c·$‘'Smcc¹\MMMÂ’a 3öî³xÒÖÖ†©©)TT”gÎ/..¢T*I´¹¹‰—_~YΕ£=)ªFñòË/£··WFsݽ{cccèííE__ôz½(±Ûíö}-:[[[H$ŸÆãqMæ!‹26›Mžýæèè(ººº$N.•Êãç’É$¦§§e¯eÖ\,R¯Ù6AEvŽe ƒRܪ®.ÏŒÿîw¿{ &×ç>÷9|ùË_–*'÷ƒÚšC/sÆO---xì±Ç022‚Ï}îs¸|ù2®]»&½×H&“èîîƯ~õ+\¹rý×3gΠ¥¥EÖ“YíþSsµ`IÀCeÉä÷èƒTÑ6‚ÊjžÄXeoooŸ_g<­2$˜² ©=·L&ƒ`0ˆññq„B!FD£Qi©âÈrN‘ uS2™ŒŒ¤­f>µF‘N§@˜ËÔÁ±Z­èééA"‘Àää$ÆÇÇe<ûûûeÚA:±NNOâ½QBj÷FŽ³ïž€1E\G¬°³è`€L½ -<³4™L¢¦¦fÓ¯P(sŽtü|>/û¢££CZðÒg \Û555²Ÿ766$ÿàD“|>/`²i8/vvvÙlv»]*~lµ‰Åb2–ÈårÉühžƒ¢ÝÝ]¬¬¬Ë€ˆ0×5t: Ç#JÊdÃp?ic2™°¼¼Œ\.'ŠåëëëÒ#FЀŒÝ$Èû­ ´O‘H§N:7AF: õ¹«À˜º&r¹Ü¾ûÎ?´·z½###°Z­…B¸{÷.¦§§Ï>û,œN'úûû?”À«‰½º×´x„Ó‚wêš=è`RL”ß©VcÔóQ“%dÖ*i«çȽ¡Ó••îŸ{î9Y3LªŒF#L&“Ðb™ çóyyý¶Ɉ쳂ÅÊ|cc#L&“Œ¥£/EË -…b±òù¼T™tŠHàŒëdaaA|!é—©TJÚÄööö$x¡k:ÆÞÞ¼¿îQœ››C*•B8–>ãb±,@ÉŠý©ßï—JŸ×ëÝöáF£Q„B!™]NÀ‹ÁœJig¯(EP92Œ~¡P(`zzZ¨—´ ¤i²òH²¶¶&›l6+`y €ÍfCuuµq?øÁpãÆ |êSŸº¹ßïÁ@®AûZ‰vŽëšmNgÎœÑhÄ+¯¼‚ÝÝ]ô÷÷ãþûïG>ŸÇ­[·°³³ƒÎÎNy¶Œ›Ô½«δ@_×ÝêÞãûÔ*°_¬ŒþS½&}ZpMÖÕ÷ó;›ššpüøqTUUaffp¹\p:Bû¦ÀäÇ>ö1X½^/\.—Ätz½ÙlwîÜAuu5¤oŸ1[SR©”ø'••˜N§%ödkYc\SSS"îÉëàϬV+,‹ì3¶æ‹EñwäÈD"ƒAú#èWSSƒüãÛíF}}=’É$¬V«3[,tuu¡§§‘HG*ñdS²"O-²ä‰l6›ôò‡B!aŠÅ¢€‡©T -+++²¿˜MLLàîÝ»€s!ǽ16¡ÿçu…ÃaY«j@À&ÈD²h«ªªàv»¥Êìƒ/¼ð~çw~GôY\/LÞø\øŒ -…¶¶¶Dk¡­­ >Ÿ·oßÆ¥K—ÄŽ#‘HXù—ù—ø⿈‡z¥R 'NœØ—”«1–ú½\ó<Ô=ÇCÕlb|Äç¨ü}~ã_ÄÓ²,ùìh/¹.éãX¡Ú;í2’±XL’UUñl\¶g2n"pk2™`4åz“ɤŒnÎçË“1H÷ç„––Ô××£§§¥R XXX€ÃáABj̤R)ÉuTöEüø7)ó´Ñ›››aµZ¥ÝgmmMèóýýý2Ê|eeSSS0 ÒŽB†¯‰:7lX^^–i?SJ¿©© ™LFŠ;étZ@,Nò¡(<µÞè¯Ø^Á‡ÌVŠ–ÔW[5ÈúˆD"X\\”uÂwhh?ü0º»»%®TcDµÐÁµ×ÔÔ„¾¾>\¿~ËËËðûýÈf³˜EGGN:%kQõÀpîܹÿGê¼T©ÎJEõÔ ‘'Gz¡šhe±–çŸû· ‡Ã!4e&±\t[[[2…ÕCŠ ÔÖÖÊQÎsÜÚÚ$†=üAà Œh1«’>Ÿ^¯ÕÕÕ‚ÐÔÖÖÂëõ¢··èììDmm-’ɤŒíóûý¢èéýµB¥Õj5t&™L¤Žšâf³YèÇÔ7Èd2H§ÓbtH]£ócÒÍ*+QñP(„;wîˆ8QÜh4*¢=¬Z:ÆçDŠ [˜ÐЀhû«h¼Héá³) -Rí¹uëR©”TÀß¾}étZz ‰HT™×&÷êZ%hBŠ¹i×°6Ø:è³Ô“²µ¹¹‰×_»»»b@˜Ä2ùe%„Ÿg0°°° ›_íGU15ð$°uPåF%^{í5üÝßýü~¿ôWò~Sy•h'>/|! µ»»»Ï ª=«*(H‚ǪPÍwssSzÖâñ¸¬P„B!9Ú­­­‚ÇãA$Áä䤜;ûêù|)lFÚ¿zOÕê pöORYÙl6czzW¯^¦€Ñh=…ÑVVVd[OO0ƒ¼¿Ö! àÁ¾Å|>@ €l6 ‹Å‚‡~Xæš—J%©H© •1Å{®‚CBS® Õ¨WVVbrrÿøÿˆh4Š¾¾>\½zÞ_÷[2`PAmòÁŸñPÁ(mÒ­:'íšåµ¨`®zÅb×®]Cuu5º»»?ôùZ;Àʵ:)FõAÅbY¤ì_ÿõ_ñ_ÿõ_èîî–J-{ȱÂ@ª ëëëH&“*Åb1iq"ÈÂê÷¼º—)–Ê„™ !m=}5~dÚ  Y‰ÛÝÝÅêꪌHZXX@4'Ï›---â{ÈjÑétÁ¹sçàõza2™P*•Ç¡ÓéÐÙÙ‰¾¾>¸\.ìííamm kkk8‹e -ªQ]™£ P°“o@YD,ïSZ§º3ARN=˜žžÆìì,òù{sÏ)~K6õ¶¶¶Ä¿Y,looã•W^Á/~ñ ¼øâ‹xá…„ɧN:Ò®S­ÝgÒLû×ÚÚŠÎÎNôöö -“J¥055…—_~Y˜ $Uƒ=¼ÒêþÓžça{C ì´=Øêžâ¿µß§îe~6‡b±Ü’UWW'`J]]úûûqêÔ)œ:u -÷ÝwŽ?Ž¾¾>]?TV–Uú¯]»&•:›Í&Šõ¬P³O?aµZ…b®º«««¢3@ÁU‚r¤òÆ^SSæççqåʼóÎ;XXXÀÔÔ.\¸€OúÓðûýhkkÃñãÇáóùÐÙÙ ›Í&âd¥R 8s挀Ԭ ÐëõèïïÇðð0l6›$‡+++¢ZNz¼Ïçƒ^¯—Â'&¹\.”J%)Àp 2¥?cÂÉdä=z½¡PÓÓÓÒN½ úiÆeãããÒ¢Àç¨Ú$N%èííÅÉ“'qôèQŒŒŒ`ppmmmØÙÙݶpЦÓi8™¦£Úmà^?÷A9gúCƒÁ»ÝŽÑÑQ<úè£hiiÁË/¿,=âl~óÍ7ñòË/cqq§N’‰Än© {¤¹¾µ…mÑE=W^§ê¿hWø^¾v][ë×y*;B§+é€h¯°õ£££CØgl¡º?[¶òù¼Tôytttˆo MÍf³(ÊS[<Ü©T -KKKØÞÞ–sdÌÅvËÕÕU$“I444ˆ¿ãõíìì ceeEƪ-š;;;ÂN¡v˜ -&Q#™L"‹‰Ï&ÓI§Ó!cuu@---èëë“‘µdí‘`4‘N§¤g…É>ç«««Âg4´!GŽp³X,JROR0Äää$ŠÅ¢€™ß1¯%xÀ6u¶“SÀ™í?SSSH&“2ÝŠÏ@¯š»píY,%Ùâ«Óé°¶¶†ÎÎN©«ã*º»»EÙS[Á9( ák“':|¾‡pkk o¿ý6žyæ ÈÆãfbòÎàL§Ó! -É(ˆúúú}âjD\˜èÕ×׋¸ŠÝnrn0n8‹Å‚H$"Õ#öGët:éIÓëõ¼°B -…dä“c>”ÊÊò¨™3gÎÀív#•J‰Ò&EØ/oµZ…ºX]]-Œ~²¤0ù`rƤS¯/SV£Ñ(vww±¶¶†íím444Àív å€ô™²×’É¿^_å -=::ºo&§Ê9,x¢óÐëõ‚²2{ãÆ LMM oooG…^_ž1lµZE¥[›p|ÔúÓþ\EÄŠÅ¢¨®rj߯EjBþQßQ,±¼¼Œh4*}n ²VøœÔ«¿Gã®:Ã’{õÐnpÕÑd³YŒÉ{I}bÂP(”YZZB©T@„ëÉ%_cbN'Fà‡˜^¯æ -,+~«¶··….ì÷û…õ255…R©$UÞŠHŒŒˆ¢øC=„H$‚©©)¾, <(…s|_¡P€Íf$šAÀöö6î»ï>466ÊO‚Rlí9räÈ>á<ö,3xóz½²þ)Âê1û8×h‹ IDAT½¨.ÏäÌd2¡¯¯ˆD"ØÞÞÆÐÐìOu}j#5PçâëÚCµÉ¬h=ñĸpá‚€Žä´ëP[ ÑV/ÕJÊAßýÛË\[dy©¬í}QA>mÒÄ5_(°ººŠï}ï{ðù|2åAÕp Z/$YV´˜8¨“ZXÕPÇšQ×awwWF0’ Æ÷Y­VTTTHÕ ¡Ýnp€´aönnmmI2¾¹¹)”Jªäg2nß¾x^¯~¿^¯W>{jjJÚÞQÙ¹T*³ˆ***¤eŽêâ/^Dww7FFFöUì8šM¯×cgg‰D¡PHÄœÈÑg³Ylllì»·ü9mEkk«´ê¬¯¯£T* PÉþðîîn˜Ífô …B˜˜˜Àòò²<+½^/ÕÁÚÚZd2üüç?àlõàu¤MCÐG èòù<ÖÖÖ¤ -[YY‰ \¸p—.]ÂÓO?-ã%µ•w5W5†b¤=?ž#í1÷àîUÀi‹¹·UöÍoò{ÔCèêêm(~nSSÓ¾vQ~6ï™N§“$ýÒ¥KÂL9}ú4ZZZdÂ[8óÞçóÁívcssápXb„’ɤPvÉ®ã>bBj2™P[[+¢°¡Pmmm"ÔÇu°½½ £Ñˆ––ôöö¢££C*íápsss( -øàƒ03ˆÇ㘜œ”6°õõuÌÍ̀؂f‹‹‹¨¬¬ÄÑ£GPa5¾¶¶}}}hnn–Q¢lU[ZZB<—Ñ|ÞétZâ?¶644H;(KL¨³Ù쾟S;Ì -ds\i{{»üÍ5LÇêêª (ïMšòù|xöÙgÑÓÓƒGyDÀu}rx%¨ËµÏµK} ²FFFF066†çž{;;;èííÅÈÈêêêðî»ïâ—¿ü%l6›ô`«HQ*À}Ð~,•î1íèSùY\ÿjÌxP (c1‚Ìd‘ñ¹ð3Ȉ#-Ÿ69‘H`ll ï½÷ -…–——¥Ïœeú9¶Ã09¬¨¨@:–ä“mSîè Uæ6+åœð²»»‹õõu´··£¶¶VDmikqóæM„B!œ;wN„þJ¥’|_<Çøø8¢Ñ¨Äd¹\ëëëÇÚÚšLe«¨¨¶-“É$Âí³³³r¯‰„¬ý\.«Õ -›Í“É$:!555¢›¦Ž—ÖétÂ̤ÏgûEEYT¶ÛíRü¥]ád¶QÈ“AØš§¶ºýJÚ¶_ -xÍØ#ŽçHsnn+++8räˆ<߃*ø´ {{{èééASS^{í5,,,Àb±`~~wïÞ•b4×*?«"“ÉÀf³í£«DëUª'¿œ4{õƒy³³Ù,nÞ¼ Ç#J0 XUB:o]]ôæRõ•‰ -N'â8*â\z½^æ@ÏÌÌÀn·ËF1 2F…ÔEŽl"ŠBJÎÎÎÚÚÚ„®ÜÔԛͻÝ.c$ˆÄ€ C`¥)™LJòHJ±ÌçóÒ·ÍÖ„\.‡™™Y|¤È±G•U6nâ­­-FAöì³m€†hnnnŸr=Ñ]m’ ÛÚê…ú7¶ÛíÆøø8nݺ%ýkaE½Vb¢«ëŽÏ^¥+òçZº$Y¾¦ž»–Žù›ú Õïçºb2Ì‘_¥RIª„4ª¬R³ÂÅÏSï÷ÍAˆÞaçÁg“Ëå¤êĤž{×I‹ 5éú4V¤/³@C«Š=R‘˜I(G ±bÉïbPÁ -( a2™ÄÒÒl6Nœ8#GŽà7ÞÀÂÂHß±XÄÊÊ -.]º„£GÂçóáÈ‘#ÐëË4Ϲ¹9¬®®¢T*ÉÞu8eCVQ¶¶6477 ;f}}]Lja¤Ói¤R)ìììàƨ««ƒÝn—6N‡“'OÂl6Ãn·Ãf³ •šÕ¦……™gÍýÆÞ­îîn8N8X­VÑM°Ùlhnn––5H! @CÏ?\c*ˆÄ÷«k\­,vvvâË_þ2|>Ÿè–Œå^ãçª-2Ú H¥:ªïá÷Üißs¨Áßc2¡öPªß©îîú  P×d2á3Ÿù ^ýu¸Ýn™H”GRá­­Mª\@y Á/&9<ßêêj©*?Y[ìÛÔëõp¹\Ò‡ÙÚÚ*¬7ª˜3èRiªÉd³³³(Ë­(V«555"2F†Y.—CUU¢Ñ(|>¦¦¦ðÞ{ïÁjµbddDì×ëÅÌÌ .\¸ Tá'žxN§‰Do¾ù¦°ÏzzzÄVµ´´ ›Íbbb~¿…BA˜môd 644 ‹ ”ý±Tn^[[C[[›´-˜Íf™çMLÚ™\.'ú5¤sR‘žBRTugÈ •‰.mØêê*þôOÿ^¯W죶§R[ÄP_W×+«`i[ZZÂ[o½…¥¥%x½^8N|ìcCkk«ø~×A@Ÿ¶"ÏÿkYL|?턶g™×D}µª ”«–lëRYF\ËZ]ݳj¯NP“¾ÆïTã&ºo½õ2™ {ì1lnnâêÕ«hll”J#×c Dˆ,»x<ŽH$"­%Ôd ­àñúú:ªªª`·ÛÑÜÜŒîîn¡38f"œH$°°°€¥¥%|õ«_…ËåÂïýÞï‰Zxcc£Œð¥ÏÚÜÜÄþçâæÍ›0& 455!ã­·ÞÂÓO?žž8N™“H$Ç177'ß¿½½P(¿ßt:-ìÌh4*- ¤ “åJ•rÚ)Ú{*Î3Þ¦.uI˜ÕÖÖbaaA¦šèt:B÷ööÄcÜR,ü¤îÙTôŒ©UAâååe‰IxžjÒ¬Ú÷b±(Up¸ÆÀb±àìÙ³8}ú4Ο?Ë—/㥗^ÂÍ›7áóùðÀàë_ÿ:z{{ñÈ#Èï3q"Ð̵M[ÁýB0¸¢1ÎS7^O<ÇÚÚšŒ,f>C`”‰%A®d2)1"ój¶]l0”L“É侩A{{{ÒžÒÞÞ.“g2™ ÖÖÖPSS#Zd ò¢‘IÍýL»©Ó•…í¨ÑAÀ‰Ì±ÕÕUô÷÷chhHZ@a2™066&E¨ÖÖV)£µµ+++ØÛÛŸÀï%“3 - pçóùÐØØ(ka{{H§ÓÜ1÷ãøNGÁ`Gçx<ŽÅÅEèõåöŸ­­-d2ø|>2ä³åãÙù7©ûdÃ1†ÞÞÞFGGººº„áC»¨ŽhTuìØŠ£Ó•[åX˜àˆÍêêjax0÷­ªªÂªªªà÷û÷åÚXMªœN'Îœ9ƒ¥¥%¤R))pz‹@ü¬ -Žjnnþ#àÁÍÉ ©: Õ©1Ab€ ”)Æn·ñx\T;ù]têIñ¤Q`rÏ@+ -U‚+++‚r÷D&X`2Àk$kagg•••ÒsBô†•ÀÍÍM455É"ÕétH$Hó÷‰È²ÇžzggápX¨&2n‰=ž4æ¤T -å±….—KÀV/ÙçOƒê÷ûQ__/I! t"‘𣩩IF>Ñ9///cee>ŸO ¿¬´:häé€2½lxxxï½÷‡ÑÞÞ.•¦µµ5\»v ?þ8<P¶yi“ m5ã0Ðê0ÖÊa×¥ Àôz½ˆjétå>ØD"H$"ÔoÞsŽÒã¦Ìf³Ò3tP°Éï8¨Z¤Þ>Õ‰:.ߣÞÒžT°ÉK¾‡†‹{†Ïƒêöìkg¥–”&•ÔÓ0¢ÈÌ€‘N§ár¹D¸hqqKKK˜E0”À„*Ó¬ö¸\. Àëõîëy¤a‡Ûí–QJêø0ö„©z Gd€È jÉÐÝÝ-“Gòù¼£dƒpƒAX­V¤R);v £££"0ʪ£Á`ðk!õù¨Aøa{î06@±X„ÃáÀ¿øEÌÏÏcmm @W®\ACCìvû>:ØA{á À‡º.Õ6-P¨ÝCü›ö™l."ßêû»V5 :è;ü~?ž~úi,,, P(HÛ˜ÏçƒÝnÇÌÌ ÆÇÇ%ià~$=‘,šÃÇét‘HDöÏòò2š››qôèQ• 6qî1[´€r[ÜÂÂ***„"Éj ÕÄ p0€UÙlMMMðz½èîîÆ›o¾‰_þò—"@Å–åÂá0®^½Šõõu Šºy$̓‘‘tttõ‘à@©TÖÒXYY‘>c‚~UUU’0…Ãa™öBÑ£ŠŠ -D">£\__G"‘0nnnN\dP”J%Äb1„B!¡x²U€Ï¼½½]Z{tº2ƒbvvV«õCš:ªýç:V×æakŸÿgßõ©S§ÐØ؈Ÿüä'xë­·ÐÛÛ Ç#m‰ÜW,L0QU~êÞcòÄï9lý«ç¤ý<Õ~ðÚøº -Bhc6õ»´µúýÚ S{~À‡u{&&&ðî»ïÂãñHu|£Ñ(z,ÔK"ÐDÑ7¶¯°`BÐ@øææ¦$F£QöK6›•Ø†ûš½ýÍÍÍèëëC[[nß¾ÕÕU<ÿüó…BA{{»~æ3ŸA¡PQX»Ý»Ý. ©¿KKK( -Ò6ÃE&ÉìÝæôƒ©©)¬¯¯KQxÄãqÙ¯¹\Nü§ZÀaåØß2L[ÏýÀµ«ª-Tã6þ©¯¯ÇÈÈŽ9‚³gÏÊúzá…ð¥/} ÝÝÝò™Œ_ÔÏWí&&eô‡j '÷c˜X,†±±1\¿~@™LF¦“¨ú (™Èû{ôk1á\YYAmm­ÄSóV]]H$‚ÍÍMTTTHë,sN'Êų̀S(`¢­# (·‹E¥Ìk6›ÍÈår˜ŸŸ— -ö‰'`6›a2™¤_ŸÅ!ÞÇÚÚZÑD!Èg0„eã÷ûÑÙÙ‰……ŒáîÝ»˜œœD>Ÿ—naaóóó¢KÁ¶½^/í,̧8šÔårÁb± ²² ¢ÝP´Ù2™Œä]mmm¢aP,–…ygff099‰p8,­LÜ7ñx±X ­­­¨¨¨"oss3Âá0–——¥HKp’ñk,V2sŸ|>¥¥%™ôQUU…¹¹9IçD†T*… .ࡇÂÐÐì m¡Dݹ\~¿=ö~üã Sè öQ¨`ś㠀S[uR© ü¿*ÞGJ)dì9R‘yV¿Iäg -kÑét² )0Â^N‚ìâ8#‚:% TUU‰é*iQÏ™A—ÕjEGG‡,Ž …BÒKRQQ!}4üŠ®$ ôööJ‚oµZ÷ Tg„²ÿ„•‚¼ù|Y%]E—J¥2õ„÷„ªÕ±XLF[0YK&“X]]Å~ô#|üã—9º rò‡ÚÊÿ¦ñíïï‡Õjŵk×Ę–J%´´´`rrÿþïÿŽ?ÿó?ߧ®¯=Ô@M]ê¹r­h“&5ÀcPô9Ôkb¯ªJ %¥žÉÑo\DµŸyP@ªÞSm È×*0Qa¬Šš“^FƒÁ¤’ &µ\ïétZÎçOF‰š”²Z@ @œ“(hŠ¦Y­VQoÎår¸rå -r¹Ž?Ž‘‘ŒŽŽbrr/^D*•’ - ûßÿ}ƒA´µµ‰p'”J%455 ø5;; ‹Å"ôDž[(‚ÅbÙç¨i€²c'PXQQ…… (ÇÇÇñþûï˽^¿ÏHSÓ¤¿¿'NœÀÈȈP6ùȸQŸ«ÚIƒ®VçUFÌAkV]Úd˜¯566¢³³S”œ'&&Fñ¹Ï}Nú™Ó›8l/û)huhþ¡¿`0ÿ›5iá½Q[ÖÔÍ`0àþûïÇ—¾ô%üñÿ1æççñÄOÀl6cppCCC0øÆ7¾!½°<º»»Ñ×ׇcÇŽ‰*q6›Åää$Þ~ûmìîîâرcðz½¢*¼´´$¶x@zeWVV°´´Ç#g<ß—–J%I¾¹Gø'Nckk »»»¸|ù²}ýýý"ÞGÇÞÝÝË—/ãÒ¥Kâ7º»»¥bÓÕÕ…`0ˆ7n µµ}}}¨®®†ßïÇõë× -…PYY)⸑H.— ­­­0 ØØØ€Çã‘v;²ÑŒF#:::ÐÜÜŒ½½=ƒA¤Ói©Ø²ÝM­Ò—¥R)är9Ñé±Ùl"z¥Ž}+‹2¡#‘HÔï÷cdd}}}(•JÒ~CV|rßÕu¥úÃö«çü¬úúzœ9s?þ¸PŒlÅãq`²Ùl’ÜüÒú­Ã€ˆÃö“ZaIÛ¯.XT÷jÒ÷yÐþh‡Ãl‘º/é[¹·óù<–——‰DPSS##«Îž=‹ÅÅEƒAÄb1¼ñÆb ²Ù¬ˆœ i]"ížë„ýº¤XÃÖ0ƒÁ€ÉÉIQ×___‡ÍfCSS“Øjú‰‰ ù÷«¯¾Šõõu ¡µµÝÝÝp8( -X^^–ÉFTH¯¨¨€Åbkll :NÚ‰qÿý÷Ãd2ÁétÂçóa}}¡P«««R0#p^]]- -þuuu2Í(›ÍJ[ÐÊÊŠ´ÓpŒ*ug‡°Åžc¶‘Á$‘}á¤À¶´´„+W®àĉR9${”-lÿÓëõ’Ô–#þŒßIš8ã Æ»ôÁFU¨®'þ.cȾ¾>twwãÌ™3xüñÇÑßß/Ï‹É? 7|Æ*ãNõ¿êypÝdb\‹Å0??>ø±X Àþ6 -&¬¼fµ%Z¯×Ãd2IU›{(3ØVLöõ,8¿> -%ÜëõJÁ"#E¿©kÆûO–‹3ôŸd'ÏÏÏC§ÓIÅ™H,üXºví**ÊS‹ø…fK¥’Äf.— 6›MbâR©„ññqìîîb``@hôœUYY‰÷ß¡Pp8âŸI]ÿùÏ.ÎÛÛÛ¼ ð­^¯¶j>ŸÇðð°ˆ6r„3Ù×KKK6¨Ó}h+È€H§Óèëë&ÛÆÆêëëEœ#=ˆ^A6ÝÑhTr9N4!sÕårI|ÙØ؈ëׯ £ŒâÓ555X]]Å/~ñ ”J% É>:Ìsí;v «««øçþgi½?è¨hllê«fü05`Ó{Õ1¨È±J#çæ‰D"ÈårÒ7Iª¹àT -,«šz½^ÔXUŠ[UU•šT €çks“cß iÐDɘ8³×8‘HxppPúÿ©ŒLcßÐЀÁÁAÑPØÞÞ B?áwP ŠcW€{b%¼×¤[óò|™äommíë1Ê -æÙlV«z½^/Éœ¨ªª‚Åb§Ï>¿ß¾¾¾}=¸ÚÊÁA• |öÚJ¼j¸‹Å²þÁ#<‚l6+t%ÒÌ_{í5 ੧žúP¯¼º°ÕïU6®þ[ý~-(¡®eíµñüù{ü|RÅH-¬®®’ÖÖVIþùý\§˜(vÅûDj™dqÿ¤Y :$ö—ƒA¼ÿþûBÃeÒÈ=Ä5ÏõD§¨*w³m‡zjpIñ%N'=î*zÎÙ䤒²m'™LJe„”0³ÙŒP($€b±ˆŸþô§øÙÏ~†GyCCCØÛÛŽ¦¦&lnnbaaÉdN§SŒéÞÞžLÍ ˜5cvvKKK2þ‰`‰^_Ö»XXX@cc£ô3  ãi¬144„••\¾|YÆSÈ$mÐ`0ÈøB“É$údUÑ!ª½²Ú5­&Ê|Zº2ÏS}ŸºnU{¬eø½ï}›››øö·¿T*…/ùËRÁ9(Rƒ#í>ù¿CµLsjròQ A2*€¦ÞÛÚÚZœ;w/½ô~õ«_á›ßü¦hôôôàᇆÏç“¿ÊÊÊ}s»)ÄÏËf³øÃ?üC™Ã -7«2lï =XXXÀúú:<€Eñx@@hó ˆ°ëÆƆÉì_6 ÃÍ›7 ã> ÝÝétâóŸÿ<ÆÇÇe”¥ÙlFkk«´wQÔ–ûÁb±àôéÓhhhÀOúSÌÌÌ  -áôéÓðù|„ÑéÊl# -íìì}“ ©†ÕÕÕXYYÁµk×D–ÔÉééiÄãqIr*++eJN©T‚Ëå‚ÏçýR› /,,àý÷ßÇÒÒ’´ÐöY,©jH9~ü¸ˆË©ûCm»¢½U+ØÚ*‰š¨s r½z½^iíØØص镕¼ñÆèïïǧ>õ)Øíö}àÿÖúZí¾"Ð¥îyµšÏßUu”´{YÕC}]Ô¿ùYRã_Æ@üýÅÅE÷Mª?Ù[[[ÂP¡}¶X,¢Wäv»ed$Yl ®®®Q¹d2)SOÊ766¢«« .— @ñxwîÜÁîî®°‚µû™-Ñ:Nr#êH;‚_omm…Éd’sdÒËV”ééiÑ7£^Çææ&æææPUU…ãÇK—¶›:47oÞD?ºººàt:¥­UyãŒÛ†‡‡áv»a6›¥½­P(`hhHDœ)B¨Ú%ƸÅù{{{²Ï²Ù,Ö××¥=:™Lb}}]À¢d2)ûŸ…/Šànoocjj -ÍÍÍp:2N˜L æd©TJZy(ZË‚/Åä;::ÐÝÝP($ÓØâ²²@/¾ø"¦¦¦ðØcÁápì+òoàžŽ\uu5üqÔ××Ëyædªm¯`•pkkk_ð¥R Ô`Pýû §¡:)¢§¯¾ú*ù¢p ƒe>4¤ÑhtßÅPÑ€°ˆ’…ÃaIvww±³³#I6Û ¨ÀÎJ!{ŸØ#D„:ŸÏËÃO&“èííE]]ô€loo ßétâÈ‘#hjj’9Ç ft:Tˆ>æóåqPÍÍͲx‰^±gšˆ¥Za%ªÃë¦z¬¶_X§+ÓÈt:(»sRš ƒŒ„ÙÚÚ‚ÇãAOOÏ>ƒK‡OèÚç­=ÔÀIMxˆs­Ý¾}Èd2èììÄO~òtvvâèÑ£VÕ`L ÈÔÀCQÔÄE]ìjÒ¯½5™8(1+‹ -MMMI2N%|&ƒªs#Š§¢v]‹ºoxžê{x z½«««xíµ×Fá÷û…¦Ä$œçÀ™ëôIîsÒ©ØÆM)Tæ€*TIº2“zêðs¹gY'3§¡¡AhÙËËËxýõ×ñú므T\y?Xí Ø—ßï‡Çã‘Jb8–êïq8F[[›TÿÉxÈd2’8‘4öµ1ؤæY4“““°Z­8vìS¦T*É8´ºº:D£QLOOc~~^Œüùóçár¹\QîY•ŽÈµKC®& ­Y5)gR¢&7|~:^¯ýýýø§ú'<õÔSøÚ×¾†ÁÁA<ùä“b´—ÕÔ¡&ÚCûºê´XA¥Í;ìwÕóT1õ>ñïææfœ={CCC8wîÂá°ÍÇŽéS§¤/’‰?Skc8u¦½½˜•‘H œ].Íf¥BÍQ\$ųªª<š•}ÂdñRÄ–¢sº …Þ}÷]ÌÏÏcttù|~¿f³Yݹ¹9ܹssss°X,¢¶”}çÏ~ö3\¸p÷ÝwŽ9"Õ¬ùùyìîîJKS{{;2™ B¡Ð€×ÖÖP(ÐÚÚ*í;7nÜ@KK †‡‡¥zÓÑÑ! ¿555hii‘Ö!êq”J¥} -ŤI”få/âÎ;xï½÷ö­ &;Ôû Úçó‰îÉAkP Ä©Ï]»T`@M>ˆÏår˜˜˜ÀßüÍßÈ,çÛ·o#™Lâ‹_ü"¼^¯$uÜ«jï3_Óž¯vïñ5uí´ïÔsÕîÚŸª¯áû¸/ÔäM ŒÐvíìì`}}—.]B,“BO<G2™”>}V¯Éø*•J¢FÎÏŸíZlwãd&ùÕÕÕèííE±XÄââ"…yN§%A{çw`0ÐÕÕ%í^¬Òmnnbqqkkk¸rå -jkkñàƒ¢«« µµµhoo—q¶‰DÕÕÕèììD?ŒF#Þ~ûmé=&ÈÇÊ(Ao \bAŠ@àèè(|>$X§}ÜØØÀÜÜ.]º„_|¨­­a9µXÆ#‹=˜Ý°:¹¹¹‰––455!K»Dmm­°6Ž¸kà IDAT77qëÖ-i› ðx<øä'?)`„Åb–’ÏçÃôô4DK¸××Oæ/‹X|֌ڧÜcZ'xN'€ª¥EàˆÉ0[–Ôý 2fØÆËçG/& ¤è'“I9÷T*…D"!í]²XÅgQZaÌMT˜Íf·\^^–éZÌSÈž€®®.™ŒÄµÊ}QQQVÛÏçó2怴Š -QÊgï<!ÚfÚ%£Ñ›Í†ÚÚZ¤Ói)þ0Nb™Ç|ÏÌ“ŠÅ"Z[[qòäID£Ñ}‰y]]zzzP__»wïJHáêêêjX­V<øàƒ–ó¢ -?A‚‘dv©Eµ@ÉuÒÜÜ,15ŸñÆÆÑßß[·na||ˆÔ ^5Qêêê°³³#{¾X,kfPÓ¬²²‡CÖûýiÇèÉxÛÙÙf‚ºgX€ ƒxýõ×±¶¶†?û³?Ckkë‡Fž«¾„1Ð'?ùÉ}…}mŽS¡Þ¼ßæPhZ'Å^.R¼Þ|óMœ8qB‚cRÙ/Ås õ7€•KnJ -%Ñ`0á. -ˆD"Rg/†:fÉJ>Ÿº95Âá°&¤;R –(íÛo¿ªª*|ìcÃÑ£G188ˆ¦¦&,//crr³³³˜››C.—CGGȼsž“Éd’ÎŽÅb²é¹0éÔñE<RÞT†€‚æý‹#Gò°ZDTÙd2¡££---òYjµDhü&zâosPÓd2áâÅ‹èííEOOl -•ºõ›í¹¨ÁËoóþßæàg c/<û Ã>KMThìˆêÔ9©ûG­©è^©TVÞ}õÕWñ­o} Þ_£÷4€4:ÜKDÖy?¹öTÑP’Ž§¶àh +i…LjTÆN'ÆŸçÌ b{{[³ÚVCZT,C$ãIѼÊÊJAyI»âìÖÊÊJ\½zUPå“'OÂívËøL -#ѪìV+N§ì9¶=°âÆ*e>_VœN§ÓˆÅbâ¨tñ÷X¥\ZZ¹sçðôÓO 3ˆkâ 5Ë¿i˜¹ßhüxs-}Ô:ÕRu¹ëëëñ'ò'Èd2¸xñ"î¿ÿ~¼ôÒK8~ü8\.×¾¾úÃ辿͡®}m»ö³¸öèTU BëOb!v½*{‡ì£óçÏ‹$ ¦=gâoÔà€ì Šü Œ ÚÛÛEñ›â´ôI§NBggç>ÅjRû™8rtA3&òX\\Í *c¯®®beeccc8vìjjj 155…ÕÕU¹³ÙŒ¡¡! ̺|ù2ÆÇÇŒ?wî|>nݺ%l´=¬ð‹eÎ ¸Ýn8Ntuu!‹Iu– l³~~yyYF†Ãa ˆŸT…¨úûûeœi6›E ÀÈÈ>ûÙÏJ{{Q›šš°±±™™\¼x_øÂD˜ê°ã£@-œâ:Ò¾W , ž;wuuuxûí·ñýƒx÷Ýwa4ñû¿ÿûâkµkKý^õßÜCZ¶Úa ÛA×qØûU›¡úÚú Uk¸×v@ÿB`9›ÍâÖ­[¸s玴ƒŒŽŽâîÝ»X[[Ãââ¢,×××K<@Š;:]¹jIÖ#ý*f‚tuuuˆÅbf³ULÇå}¦hØÎÎpõêU\»v ]]]p8ØÚÚÂÄÄ„ø&ƒÁ b€<'VB‹Å¢¬=—ˣш˜L&x½^‰«’É$þçþG@=Åöö6‚Á m>ŸO<ñ„LF *x©T–K.—Ãèè(zè!<ðÀøÊW¾“É„––Q†§¨&ý°Z ¥>{ -›R“«££CÙ³ÌçrÐñÍo~>ú¨¬&mÓÓÓøÆ7¾`0ˆp8,÷[õ À=}*•Í¥_´ ¶v=«àãV®e5¡çõ«¯ÑŸær¹}yŒN§“X[ýy2™ÄíÛ· 1 ¸~ý:€òD2»œN'–——eåÀÀ€T¥9Ñ­L,ž0ŽJ&“’«Ì &ÆÊÊ -jjjPWW'L'ÈŒÿ©A92L"‘²Ù,N:…¸\.Ñ%!•ffccc˜žžÆÆÆL&º»»Ec# -¡X, -3ŽL&Á^¯W’âb±ˆµµ5”J%ÇåHOi9J²²²RØd$p-×ÖÖ¢©©IZ®ù3Õ>ѪŒVõY«ì_­=ä:ä^·X,èììĉ'°¸¸ˆD"d2)ô‚Ó>0‡L&“²(ÄHÁÀ½½=?·¶¶x´Ûí’púû1ÿõz½hjj’I‘H¯¾ú*}ôQiyá=aŒ­‚j\Ä=¦²y+HåU“?õf©¯ŠX«‡J=ãÇãq¼üòËøïÿþo É ®¯¯Ë $ 477K0Í™¾V«U”.Y%g2ƒ‡x<.ªú|Ø H𰺺*O>PÞ說*Øl6I666d0aàêëëƒ^¯ÇÀÀººº`6›…-Çár¹pâÄ ¡[ååÁ$Šã¡xo¹qˆˆÓPloo#‹Ád2I?ÁûF’X,™C$TEªhpvww±°°€`0(½nj%’÷E­®ñ߇Uµ¹J·W~~ee%FGGñ÷ÿ÷‡Ãhmm•`‚„ÜÐêw«ÁŒºFÕu§ž§¶Ú£2x.ÚÏ:,`äÚç {ƒÁ ªÔj¡ÇHWÏí öŒÚÂ{xXõÿÅ_”ÄF‰ .9Òà˜Œ“‘B™¤ì-g2Ä}E*;Á&ÀüLö}1_^^F @gg'¬V+‰Ä>$˜•NµÉ`0Àëõ -%št9¢­tPf³GÐvö yg0Áûd2™ö%d -;ìÙ“eÉdäsXyRרÑhÜçìiWÕ5¢>sî • ÀÀ•·ºn´•iu­Ö>B§h³Ùðñp¹\X\\”oleÐ~¦*0vµ˜ë•ë^Ý÷R©” ý ˆD"û„²¸r¹R©”ìkî/VÈ«««…Ic0”E/_¾ »Ý¯×+A- -nooC¯/Ó¥­V+†††d¶3×ñ‘#G$/ʺ;œ¡\(”G9ŽŽÂjµÂårÁëõ¢¹¹Y’V )Œ9??/€S 2K½­­M„›(RIDe¼E£Q\¹rGŽÁ“O>)­l\?dÍår9Œ¡«« ò µÉ¶ºWª®3ù?øæzV×8× Pž ñ‰O|B’µþð‡ˆÅbøîw¿‹ŠŠ -üÁü° «T©Ÿ­ž—º‡ÔóVXÚýÏóâµòo^÷¸ -þUVVÊÄ£¥¥%am9Nìîî""‹awwW(¦333ø«¿ú+´´´ ­­ >ú¨ˆ3^¹r·oß–YõŒcXÅæyd2q¦m%K‡•s¶ð¾1ð^YY‘×È£Ð'ïÁF®¬%E€Šët솆F„Ãa¬­­íÓ¥¨ïöö6Þ~ûm¡þ—Je=“É$=Ö±X ³³³¢áÔÒÒ‚‘‘¡8{<8i[PY ,FчwwwËTšgžy8zô¨ÜµP@›Ia·ÙÙYtPÅ@øÉ“'áñx`·ÛÑÐЀööv2™ ®\¹"Õ`2l V ãôéÓøÅ/~!1™m´ÃŒÿx®j—oÒfsï©‚£jòÏŸ©ì7ÆÒêžaÞ¢Ú~u_p_Ñoð½{êëëÑÚÚŠ®®.|ò“ŸÄÞÞÜn·´`ò;c±¦§§qñâElmmIÑ1 -‹Ô bá…b—ôm™LFX¾´ù›K$RÍçûÓé4ÆÇÇårŒò™3gÐÙÙ‰ááa˜L&©ôóÙX,ø|>øý~ܾ}Á`PüQ4Åâ⢌TYVõõõ"X]]-SäB¡b±R©”°³õz=Ž;»Ý.ùßêê*ŠÅ{E‡Cb&̸ÿUû«‚\¼VÕ~ª6R[ÐÚ{õ¹eÀÚëõJkàÎÎŽˆur²ÀÔÔâñ8æçç…È–8‚wÅbQÚ’Z[[Q(DÐT‘K=6Od¿³PÁø±T*Ië8ÿÖ­[ˆÅbxòÉ'¥%‚{æ°¸L-ò«×]¡ -ñÑùh“=:RUÕS‹J«(PvÜwïÞ•„£Ñ(U7&±µµµâÄø3µê_*•öÍBF£‚|©P»Ý.ã}>ŸTœ‹Å{ê˜:NÊ97Òh4"›Í"•J!NC§+« s{efgg±ºº*Š¶uuuðûý‚Þ²Te.°¢ÉQ<öè3áŠD"ZpÑÆãq©1ÁRƒ.N§Ó)=JD‡i 8¢imm W¯^Źsçàt:÷4\¨tØ51ÐK$B£O&“q”‡ê˜ø¬ª«”7íýâw¨ õ}™LñxV«U[:.&åt”ê5)V+4TìÙßÜÜ”ß%@Àkåy©"J:¢£4Þœ¹Nú³ÚÁà’ë“Áp]]Ĺîììàƒ>@8†N§æÐÆÆƾJ-5F(Ev)Ö<ïššèt:nܸšš 㩧žª^uuµôþ½ñÆ€}½¼ FÉ´aÕ€ôH«A u©{N èÕ -úA趺.Õ5­ø œhÚívüÑý‘(@G"¤Óiøýþ}=ïZ[~ؾPÁ+­s>¨ºscVm¼ê¤Ôó§ÿá>äç38V÷›ö{Pj÷“jç¸{A†ú¼J¥’T]¨PœËåàp8ľ{<œ;w6› ·nÝ•+WÕŸ˜˜@ ÀÚÚšTÌ·¶¶äz———÷µ -Åãqèõz™JC ú_Räív;ºººÄèt:tuu u±··W†ƒÁ ¦§§‘N§%¡cE?‹‰îîî–Ùà¬ö÷÷ S‹â§´Ë܇jpÎÞjÎ6ç4šºº:x<a¥©Ú!KKK8P£†”ÿãÇãüùóû„bÕ„©P(àÚµkxæ™gð /H¹pU5!æßÚàPûo$¦íQý#mLss3Ο?ÞÞ^üüç?Çw¾ó|õ«_…ÃáÀùóç?¤ Â5¦ž³ Öֱø¨÷kf0”Ãæççqùòe¼÷Þ{bg™H°7ýúõëøÑ~„šš©¤ß¹shmmÁ-»Ý.Àã%®·d2)±ű¸÷V±â¹¹¹)OiÈeÏ -(ãA5Vlmm•ŸÑn¨ ÿ0ÙUïšL4ég\.—ßÓÓÓ(‹2ʯ¡¡A´ ~øa¸Ýnøý~ôôôÀn· 5›× ú5†àóa¬WSSƒ³gÏÂf³áêÕ«¸sçÞyç,//À>h Ü—ïóùððÃKÒÜalµZáv»¥-•újoµú;f³³³³ŸÓßñžöôôˆ U)Ú\wZ¿@ûzÐ:WoÁ¸„v›{š~“¯©{¾SmÅTnôSJ‡Ã/|á ÒkÏØ€kµ5>æìÙ³èîîÆ׿þuyÈKKK ¶ýúìÏ's9ŸÏc}}}߈l¶³0Ž…Bp»ÝÕjÅOñ ?~\|¾«s«,íQÁ - öršÜ0D»Xàÿµ +XD½èèÙ/GdŒ£‚Á T±¤‘ÚÞÞ*q2™”žGN‡¥¥%´µµahhH¾Ÿ›Àår€ˆnPƒ@E”)ÎÀó²Ùl¢‚Iza[[›ˆ2ð°ÒCúÈÞÞ¶¶¶Ëå‰DD}œã0øoÕi¥R)I€ˆDÓ ÚF– …–×ÅëÕét¢®™ÏçE3aeeEÔKC¡vvv02òÿY{ó(»Ëú~üu—ÙçÞ;ûšÌL&™L2Éd™•Ђ@€`@„"Q‘ÖZ«§ÒƒÇ£ßžV­õØÔj ¸à‘,e3²ÉBB Û$“Ùg2û¾Ï½¿?n_O^÷Ï Øþžsr’Üû¹ÏçyÞÏ{ßžµ¨¬¬Lð°ªQªÊâ¥Ò²ì¸”"¢DÆë†|>Ÿ«‘9vìüqüå_þ%Ö¬Yã˜z²Ú`5(€xFëߨXñ¹÷»~¯wÁÓ3ØÚÚŠŽŽTTT`xx%%% ×½ðÌÙ,…‚´¢Œ‰J4¯[×t'«¸åå塺º‡B~~¾óÓ«Ìh6ëúÙ@‹çÇ®È^ƒN£ÇèÉ„É|èÄ ’ÉÒ@bIŽ*t00mŒÑIŸÏçšVòœ;::šššÐTŒÌŽsöööºLâhII‰cü™™™^ŠË¤#^ç×\s n¼ñF¬X±ÂEoÈ<ý~?&''ñÁ~o½õpøðaœ:uÊEÉX_ Æo™œœDyy9öíÛ‡gŸ}wÜq‡»ëP…Dq @‚ò©õ‘jÀRp+)ž$Ë4ÑÞ %%%8pà~ùË_brr›7oÆ•W^éú„htÒΣ”kP^¢øÊ¿u. .”¨¸ONN¢§§ÇÓÁÁg$ô™Ð²Uøù9×¢]£½xq5‹¹ˆ ×Fzå™477ã±ÇC{{;¾ô¥/! bïÞ½8xð Kwf÷z:šè(lllÄøø8º»»]M0³j˜ÈÈ&Û@\‘fÍfJJ -ÊÊÊ°yófŒŒŒàí·ßÆìì,:::œ611P(äœ%%%ã·ZìÛ·mmmðûýÈÎÎF(rŒÌÌLttt`pp¹¹¹¨®®Æºuë°`Á—²Mù§Fk4uŽEU¢RSS³ ººÚeä¨#G h:ýTö÷÷ã駟F]]Ké',4RÄïùå—±mÛ6äææzâ#qQ«^ŽÅY‹#Ì–QEM£ŠÔ#b±x§¶¶ŸùÌgPVV†/|á xøá‡QZZŠuëÖ%ðH]§:’•üØ¡QS ØÌÅ{ýlbbGÅË/¿Œ7ÞxçÏŸÇ–-[°lÙ2äççcÕªU¨®®vpÈÌÌÄòåËíÒ(÷ù|èêêr™olFCy||Ñh¹¹¹ÈÍÍu·“°üƒs38Ä+ÏfggQ^^î26M«««CAAÓ—&''±ÿ~Äb1×€¶ººÚu®§K}MÓu ;-¯¤“mjj -EEE.[}e(ƒÂá0úúúàóÅ3­V®\‰ ¸;²²²\yª2tz9eÔAL¸sëׯÇÚµkŽÇš››1==¼¼<ÔÖÖbéÒ¥‡ÃÈËËsxIÎ÷ÑYÆ÷¨!̬[âIZZšëù±|ùräææ:g ÞÌÀk™«²@qÜ˨S9`¹NäÀ…’9Õ”féüatU³ï¸òêšäs쉢맡E݇?òRÂtÐÁµk×.W«?33ƒžž;v ˜››ÃÙ³gQVV†ÎÎNñ ÃÄÄ„»A"%%yyy´YX“¯å:Œ.\ͨ0g0ˆ´§FèêÕ«122‚ááasvÇïêê‚ßïwôœ——‡@ €7bddÄe‡±©mQQ‘ÓmYJ©¼Š8§ç¬ŸYG‡u–i;( ©X>ä·j€x£ÞP(„… bݺuÎÞS|eÓõ@ àìF:íú5¡|žeªg³yÈìì,,X€¾¾><öØcèëëÃ7Þèô¥+u”SÖÔæX*ô4e†„IàêKTpòÿ@åååX¾|9ÚÚÚÒYÙh„ÝXÙ4©»»û¢?—]vÂá0–.]ŠÚÚZdffºT˜… "cñâŨ®®F4uÝÆY;944„’’ÔÔÔ ¸¸ØÕŒŒ8»Qý~¿«uéïïGVV,X€ÚÚZ„B!;v çÏŸÇþýûÝ}ælÊrúôi466¢«« K–,A}}½slÐ3ÆÈh4Oý¡WÓçó¹µÓóCÆM'Š"¯zDÙÑ|hhmmmèììDgg':„††|àÀ®]»Üµl¶>R½EÊ­'N•xõºY¯®eêVù ³¦¢{èÐ!´¶¶bhh¿ùÍo\Ãvê\òÄK:²T¹R¼´óX¥C½Àj¬7ÿÏ€¼¦kpp iè„âðð°KïQª’ŸMNN:æ«©åÜ[UUn¹åìÙ³‘HÄuå&~¥¥¥¡¿¿ƒƒƒ® - ]³¯íÛ·ãºë®s ßzë-¼þúëNð/Z´±XÌ1}2|ÂUá‹]èªK’a~dª—6<<<ì sâSnn®cìôd³žš·Lh¤~>~?3›MmØ°Û·oÇòåË]ôŠWZþ–žžŽ††,[¶ }}}Xºt)Î;‡ææf º9ÇÇÇ‘’’‚… ºûœÙ‰´ \(•²ŽÍÑÔfÅSî_Kµ”•W'£Â;-- ¥¥¥8uêNŸ>Çc``»wïFII‰›SßÃwXã{Pήƒ/o¦ Fšdʨå7:w0DGGNŸ>í ס¡!wï2£ä¬ßuÞrŸÏç¿Æb1çÐ"̧§§]³¬üü|W‡L%evv/¿ü2~úÓŸbãÆHOOÇ¢E‹pèÐ!¬—üHe©—,ã;ˆœC?ã3äw„{ ·wî܉””<üðÃøÏÿüO—òFäºÂBÿme©Ò&ߣN;ë°Óg¹w>?66†gŸ}ÿøÿˆ¦¦&ÜqǸᆰråJ×ëdttøÃ’¿’ìàÁƒˆD"ÈÍÍE0¿^yttÔ•Sæää¸ÈrYY™»1£½½ÝÎÜ;åñnddÄÝ%Ϧ]###ÈÏÏw71¥¦¦bñâÅX´hQÂukóóñR€ÿú¯ÿÂ099‰œœœ„ 8F ãH$âÊÕ˜ZPPà²TØûƒ£ÙÙø5­­­X»v-n»í6„ÃañÒSÞ—ÎH/‘jt¨L ¡­™:ÙTw`Éçó9™I>¢M}U!>OÕ!Ên÷Äþ[å3ƒVÐÒÒ‚O}êS())ÁŽ;PSSã2qYRpøða¬_¿Þ]?FƒYomRL<å;h|2pÂÞ<Ô¡I‡ÔGúûû] B 2Ò¦`Ô«Ø»Hu[Ê:›uÍ< -$ÜÕéÜÞÞŽ§žzÊÁÖ­[‡;wbûöí…BÎaÂëÁ;;;]ŸŠÓ§Oc||K—.u)æ±XüŠoÞDTXXè®)VcŸç¥ý54ó’ö÷iaÄиWÜP=Ïï÷»w1@©™QÊëÕ!©ï¶NeËûÔy¯!ÒÏTy2ÏJÏH f…¨MK¤:ŒÒH0¿.QƒÜ3u --;"=—yf^üšŸs­±XÌÙ¹¤ésçÎatt‘H8xð - - -°uëÖ„rNîÅËi¤љìe Wc+ìTÔwíÚ…üü|<úè£î°èí­®®vMaØPe×®]®±  À1|Öâ—BF¥‡ŠÊüü<úúú°ÿ~466¢­­ÍyCÉÄYgŸššŠÕ«W;soo/zzz\ªv0DNNúûû]ƒ˜²²2äæ梼¼~¿o½õ–3²-ZäîþF£îj½¶¶6×ittÁ`ÙÙÙX°` - ÝýÑ4²Hì4x›ÓŽhpÑ‘áóÅû&ðN]jåå娮®ÆÎ;®Uâi”€[âJ¦¤i„QñƒÿöRP¼H$‚¢¢"üû¿ÿ»K¡jjjBcc#ŠŠŠ’â%ßGƒ‚{¢Ã„ åRëx?2UM[JK»p·;o£`±­/F/4•!“Qçš:ǘÕÁ†ê˜¡Qpà 7àßþíßpß}÷¹è7û;ø|>WË~Í5×8<|å•Wpÿý÷㪫®rª)˜·mÛ†ââbüÃ?ü6lØ€p8ŒÞÞ^w}=ØššÎ3K‡Ñ :ª”ç©$8¡qüøquÀ–-[PSSã®»ñù|èééqÞtè’Nc±†††\Ó!ò³ÆÆF§P\ýõØ°aêêêPU¿º‹iŽ¼&±«« ­­­®¦“ó³—†ßïw÷¹³!$û™dff:/-;ø–••¹s$N؈½F$4•^•A+ÀÔADüÑȤ¥ûYEEî¹çÜsÏ=X»v-~ö³Ÿ!77»wï£Ø®å IDATv -ºòvÔŠßú ÿVÜ¥ƒCiMyâ ¿ÓèM4O­=~ü8~ýë_ã?ø–-[†ÉÉI—R©cõêÕ(--Å™3gpæÌ]ç¹þ_F}}=º»»ñæ›o¢··­­­â]·Ož<‰œœ´¶¶ºÞ3‹/v4833ƒááaD"×€¸:44„™™ô÷÷»/ìöMc-==gÏžuWÜ2ÒCYÉl³––ìÛ·---˜ŸŸw˜¯¾új¬Y³Æý.//EEE®ìŒ‘u®)/'¯.(X¤å—ÝSà¹Z\à÷œ—Êÿ‰'PPP€¥K—:C‘Š™:#Ξ=‹‡z÷Ýw®»î:W>¦¸®N îAq—ë·Ž5ÍàÐÒ>ÎK:Ö¬ŽÇF"Üzë­XµjŽ9âºL“öu-^벊3ßO…s||Ü5ËR¹­Õã˜Å0>>ŽßýîwxòÉ'QUU…«¯¾;wîD~~¾sètuuáäÉ“8|øpBSÕŠŠ -”——chh>ŸÏ•ðîúþþ~Äb1TWW#‰ ¬¬ÌEµÚÚڜÕ:*ÑLCF£8uê"‘æçã×nvuuáòË/ǺuëP]]í‡ -;–8qÂe -pei§OŸvW²?%%%®w,C?222œŽFG;e¯–¤NJcŸôA埆{X|׳UC@ KÄ9{÷©VÃt¢ˆÒ±¦s~ë4â³X±b…KüñÇž©¬¬ÄòåËñ /àꫯƲeË.’^Î,åjówêÄãÞ‰/Ü“å/ÚèF—ò+êÓ@bÙ:(¸ÂDñLõ9ÎIÝ}Ë–-X¼x1ü~?–-[æʉ©ûøý~ר»¬¬ Ë—/wïâÕäyyyjŒ2Mžû¦c‹|[ù5£©áœ‹øéóù?Pýg¡N5J@B4_#ÌzÖÊwÉÃ5¢¯zþÛ î¤ü›8‘‘òòräç磲²Òeìõõõ¡§§¯¿þ:¢Ñ¨ j‡ÃaD£QwFzý¥Ž vWO µ¦KeDÔÚÚZ”——cåÊ•øío‹×^{ÍÕ禧§ã²Ë.ömÛ°mÛ6¤¤¤ ¶¶@ÀÕEè)8|¾ø•LÅÅÅ ¾sáÂ…èèèÀ+¯¼‚ÂÂBWkßÓÓãîyœŸŸGYY™kÖÇ” , î6ÞçYXXˆììlTVV";;ÃÃÃhiiÏçCkk+\䚊]II‰»¾‚Ì‚é4óóó.uŽMÚb±X‚‡:‹7ž¡Ñ?99éîa¥ÑYZZŠ+V   À5û ‘êyz)fJ@—J^BŸQ#†s'Kg ¨­­ÅM7Ý„¯|å+X²d ÆÇÇqìØ1¬]»Ö¥ÖëºíûTpØuªâj£MɆ2@4ÓkËÊÊpæÌw_7+ï×ël!#꺙º¯µ‹êÙT¦ -ÑP(„]»v!33ßýîw±ÿ~7ïM7Ý„¿þë¿vÊo¸îºëPPP€ššg“a³æõº¬Öuó.eÞÜ3!8… ÷Ͻ„ÃaTVVº»Êõú¯ööv¼üòË.ÂF]¹POOãQ*(h|óýl@W\qvìØåË—céÒ¥X°`«Û§‘Á=µ´´àÉ'ŸÄ /¼àºü2c¡ººK–,AYYÆÇÇ]CÞ†VSSSîJÒsçÎá¹çžÃÊ•+÷ÜÒž52hØ(¿©€æ³T@T™$4ß‹N£Ñx3¬ë¯¿=ôžyæ„Ãa¼þúë¸òÊ+zpx9Þ) 25Zƒä ,U±† ×ùùy¼øâ‹øÔ§> a;yò$¸Ýw{{;Ž= -¿ßÒÒR—’Ì÷°¯ËmX›Lc[Yòl6ãõu¿úÕ¯°cÇ\ýõhhhÀÿ÷;ZjllÄÄÄòòò\ge: ˜Ñ qäÈp a©,†ÃaW_9::êœL =q⮼òJLLL8\€††lÚ´ +W®ÄªU«œlÉËËC$q×C±No]¡ %­r=¶ÌCÏH8¥Ád#™¾`Ÿ!~—••áðáÃèííEyy9$DU¸¦ÞÞ^lÞ¼ò'âúþØ.æÜñLe‚:²­â©Î ¯}ð=äGº>~΀RRRP__Å‹»=’Gò7Äa/XYcÿžŸŸwM^­_vî•p£^qúôi§«­^½YYYÎpîííE{{»sd¾ûî»N¿FUUªªªÐÚÚêè„}ÊËË]I$¯_¦îÇHëÀÀ@•Щ©©îJ4òþ´´4TUUaçÎX¶l™ktìe ù|>,Z´•••í›rœÍ2§§§111ᮧ¤Î~6Ìèàw¬ÃW\Ô³aj7³äˆ–·)®[£RŸ±ú‹}Þâ¬:i‰¿Ô“u.ê…”§ª›éó|†È `ÇŽxå•Wà÷ÇbÓhâ5xííí¨­­E]]sÈÓ#íñoVZ°éØ„¿L‡²²²„Ì…¡¥YÎM£ŒyfŽé@±&uPS6“¦JKKqÓM79¡3YtHXƒ•0Òk ­ÎÌÈ>ñå(äJë:ø5n­SQù8{Iiæ—ê×ÄuX9a×aÏEéÁž«þ­Îk¸WÕÂ5[赫çØwØý¨Ý¡ú:qËâ“:MtOJçšy¡ïÖ {rƒA§÷°/ÄÌÌ :;;ÑÞÞŽììl”””8~®²ÉföIPŠèEâÂù¦ÚÅjúª¦ÓoݺÕÕÕX»v-Ξ=‹`0ˆúúzTWW»{ê­Â¡^"XÒKƒA¬Zµ -uuuèììÄâÅ‹âFC…ÝI¸fnn®kêFC§ªªÊ6………®™ ß933ãêÚV¯^Å‹;XÍÎκ46¦²QP§¦¦¢§§ããã®Û$…9£:<й¹9 "‹§ˆÓ‹È>ôPS Ó¡J$Nfˆs(A(Ü-rz9’ÍG&BœâœÊÔ¯¿þzD"<ùä“xꩧpå•W&tCµ]Ñ9·2dž o‡°µ^^N„dƒëä¾rss]w\6Ì!ƒ'cÕzB,käø~ž³6bážhŒ°^ÛÂg’k¯½uuuîrÖž•——'tf¶Ëôôt•‘š*744DSS“»ã€kfÇýª0±Zf"ðLfff\3¾ÑÑQÔ××;CWÂP åççcjj -¿úÕ¯\GXz-iðr]œ{zz®c8\wÝuصk6mÚ„ââb÷¼ ŠãMMMøÑ~„‡z¡PUUU.’Ž(6àRûy囲֟™{÷îÅÇ>ö1×#DqÀòWu¾òl¬SN…‡¥K« êï¼pž¸žžŽÛn» ëׯlj'2-xÆ*tMö}úzªhj~¿ß9|µy鮧§Ï>û,`éÒ¥®©—òÜ°N˜i–EEE®÷ùM8vMsH¬fäˆ|—)Æt655aÇŽ¸ñÆQ[[ë®ýÛ¿¿ëì\PP€ `bbùùù.sì…^À»ï¾ ø¾€;v¸Þ4>ŸÏ5š››sÍ“ÚÚÚÐÝݾ¾>D"ðù|¸æškÜÕ›‘HëÖ­Ã’%K\—òç¨8¦ŽMC§2 \Wùl¿ã¹+Žñ{Uü¼ä„}&ˆ÷à9|ø°khEœ¢b ÑÙÙ‰½{÷b×®]X²d‰SêÕRü÷Rz.ú¹®Ç*ª”qò) J¨ÑÎgéLå÷ʇ“/Ö(ãžø•1Äg -ª3WÊT:™®=00€ÿøÿ@ZZÊËË1<<ìêŠy;鹩©ÉE¿™¥E½mvvÖÝ"ÁÞ2”?” Ð)ÀsgJz4¿Z±©© ›7oÆwÜánwPƒÄꪈ+¾ó<³³³]Éçó%ÜÁ¹ÔPýBßGØY~¨e^j0r¨òíeÜp–~ô÷^N"Õë,mª\Q€ê*^’Ê(¿?µ^¹r%î¾ûn|õ«_EJJ -/^ ŸÏçÝìÃÔÜÜŒŠŠ -w³y¾gÖ0Òýª±GùÀl -â8ߧ)ÕjP[šáyÒHSù¡Î<#Å)k ©iƒ£ìÆß깲܃g£6°:áK+˜áÎþ$ÅÅÅðùâ×q¿ûî»(**Bmm­ƒµÊ,âvP»Î+øG#J4vôP•(84:EÀ²îu˜¼RŸ'q‰ Í2q}¿2¦ 544à­·ÞBgg§‹†Ó àÒÒÒ055…ùùøG$N–0úÈ»’¹QDD¦„éÍ‚<ÔÙÙøµ…4Ö†‡‡qŸ——‡‰‰ wÿg4ïe0>>Ž––LMM¡½½Á`ÿøDZqãFÍ!lI8 -GÂD/ÃþŸ{ÐhŽ…»ž çV$·ór]ši¡ç;7¿’Žž¯ºê*,^¼GÅÂ… ±bÅ -·/e,?Ô3JÜÓt›÷ãÐg”Ù…B!ÇXy'gYY™c„¼ê‡ ›¸¢†çR¦¢‚ŠÂÌtŠïdXŒÚ¨rAé¾›Ñ/+pZ[[ñâ‹/€s0±W…e¨z5ˬ¬,Œ;¡ÂnÎdT@¼3êÄÄZ[[5eq``CCC.€kœ\£Ëþþ~× ªªª°yófÔÔÔ ¶¶UUU.ŠMH­ÑJ£Çï_Cú“Ÿü=ô/^쮽â /Ðî´tZºÚ^?H”——‡'NàwÞq×´ðì½ñÁ*7V‰Tž§¸a‹CŠKÄËÌÌL¬\¹555.JF’¬Hcܯ,=!ìøà+ßW\Öš|žêïÚàΞ£Ê¾Ÿ:›å3ÖA¥¸æµ»݃êú;ÕÔ?jÓFÕ_ôßJ‡Ä‹h4š9¨Ïé™ëú,]ëï´o‹u”YZR;›Ïß)§÷8¿·²‡Ï«OYÁß‘ؘ<º&‹tî `ddÄ5ž´¶U‘°ŒÀ -²÷Š+B±ÒÆÔ~*sêí± -íûhkÖ¬ÁÕW_Gyk×®E8F8vž¹ááa§Ô±.S›ièü“““hkkC?FFF\äžsåçç#''™™™ÈËËs{fCücccèííŹsçC¡b``@ÜÓÓßßï®ãèèè@__®¾újÜ~ûí®Y DëJ”ØŽÉ`ô~àJ" áYÂÿßk è;ëêêPTT„ññq¼õÖ[øío‹Ïþó.-9Ù\:¬q¡Ìéý¬ÍË0KIIqײ0u,++ËÕÁ«cB7aèõ,»+VØXao•;ݫ¡¯¯'NœpW‘°ƒiOO}ôQìÝ»î>ZÅ)­g$ӥË0 -!%%ÇO -W6é.ÔÆfdd ‰`õêÕ˜˜˜À;#X,æ"~,uѳùä'?‰+V ¬¬ UUUÈËËs‘k¦–ò*ÂÀ*ˆ„áÉ“'ñÈ#¸k@}>V¯^íú”tww»ë§€ eè¨Sï1ˆ)))®±è™3g\Z+ØD‡gF!£ -?÷ù|.êq)#KñDÆdôjq/‹9eè¿øÆÇÇñ|[¶lqBVçâz-þ%[÷¢Ê0•y¡æo¨áãÿ¸38Xâñ¿eeeîjXUôx[…'i•ÊISSî¾ûnÜqÇ8wîî¾ûn7çªU«PSSã2öíÛ ~mK¼b±¶lÙ‚¿ýۿŪU«\(5*T‰ œètg„²“ÊéP_ÂZ +8¼”=¯ï9÷;¬RÆ=XƒH•\îkóæÍ8uê”+é+..F4¿vñСCøÎw¾ƒüਨ¨p¼Håx2ãßkXCËKF%ƒßÍX¸¯h‡øèZíû8ŸÒ xͳ°d& -ccc®ãxzz:†††Ü}õ/½ôººº‡1::ŠX,^Ÿß××çð(==999®q``8rä***°nÝ:üÙŸýÖ¬Yƒªª*§xÞqÇ®ÑsSS“[+aæ÷ÇKÀXnYZZŠ­[·âÊ+¯ÄÊ•+‘““ãŒ@Ê$Å)k(ô̬±®ò]Ÿ³Î5”½æÒ99Ty·<ŸëJ¦O[ÃPÿVC†¿O†ç*ÇuNàB7xÅ3‹ë–(ïÂá0vìØ àŽ;î@gg'úúú\éH[[zzzðÌ3Ïà‰'žÀO~ò¬Y³iii5'T٦ݷŒÊ’h ò†,ÎË3$,--ÒMç?£áîóùÜ J”_:´ÌC G…¡òq{¶ê¼"«sUÖ\I°â4ÏVñQש‘gåúu¨1ÊóÖ[ž,Npí„5ËÉÈÕÙ 8F9EG¶f'+h-çS^¨sZ£ÚÂœ{RZP©º:a¤½¬¼†òþΫoŽ×ï¸&ý­Ò¶îƒz¦Ò=Çk¶Ù,˜g2??H$‚±±1œ;wK–,I(MV=,È(5N‰í‚lÝœŒ*´úr Ñض† Î£ÏXæàŨC¡n¾ùfŒŽŽâÁÄ-·ÜâRÔxµßùóç\¤‡é ¬Åç7gÏžEss3Ž;æê~c±˜KÕ …BHMMEEEêêê\cÃââbƒÁ„:"*qƒƒƒˆF£®KlOO«Ÿ£ÁAùÅ/~;wîDeeeÃa¶ C£¿Ἄ+üÞ|^ñ ™"£ŒVÏA Y=oÛk=™™™hmmÅÏþs âùçŸG(Â}÷݇ŠŠŠ¦b¥®E•b®31sß^ƒŒCÓ”£Ñ¨«§'Ùï÷'0 wÅjã -¶þ†´¥p÷2ò½h‹0§À¦—Ï?ÿ<>ûÙÏâþûïwÑ›‰‰ ¼þúë8wŠœ¡B¡£ÍbxfdêsssÈÊÊrŽµÁÁAttt`Ë–-(,,Äàà «¯Ÿ››ÃéÓ§ÑÓÓƒ‚‚WŠÀÝz‰DPQQ… âäÉ“8qâàÚk¯Åe—]†¬¬,bÙ²eîª5:"T@1ZJÅóãßdøÐÙÙ‰“'OâsŸûjjj››‹P(äŒÃ—_~ÿò/ÿâðh~~Þ•£ðÿT<¸îÔÊhy=ÜÚóA«„·*¸”ª¬$Ã]JÖ˜ Yž«¸‡‘ŸŸï~÷»Ø»w/¾þõ¯»Î²|6(='£!â»ubŸ´WßÃ3ÌÊÊÂúõëñÍo~?þñqýõ×£ªª -Á`¼áb^^žÖ³³³ÆÙ³g±gÏw„ÿž={2H€xãªp8œÀ#‰ëz·ýää$¶oߎµk׺«4—,Y⮣³¢¼¼åååhnn†ÏÏZ ƒ8vìn»í6,[¶,¡ó¶UUÒ¨.,Ur‰‹jP©ÃÅK IöNýž0ð -XY $*¦V9³2FG*›t]>_ÜÈ«­­Evv6^xá<ñÄ®™î¡C‡0::ŠššG+š’mu«T%“}Ês-\¼àgy6•0â®FÂ,<¬ÃÁ¾ÓÊRÛ]ÚÊUöV">°IæÉ“'ñÚk¯ÁçóáÈ‘#ÈÌÌÄøø8FFF\ß/ÁË9y&,m‰Åbα Æ6Ï…z _:÷è$нðÕN#<ÕH}Ce¶éн«3šCaÉ9´?ƒêŒV®33‡g©™ÓöŒ$èSÄuk*Í22nû³(ñÝäÙlì­t£º‘â„WF±—¾®ëÔç†ÜŸÕ”ÇXÞbyõàŒŒ wóõ`èííEff&***ààpU s¾QQ arrÒÝ;îµ9Þ -\+P“!µŽdÌÖKŸŸ™™A$ÁG>òtvvâ駟Ɗ+‹ÅÐÙÙ‰ªª*,_¾Üí)Œ_eÃ,LLL ©© t¤+**ÜÝͪô°æm``ÀÝ^ÐÚÚêºØ§§§###ápYYY.’|þüyô÷÷;†iC£££¨¬¬Äƒ>ˆÍ›7#»ºv/Úú$+ùy2@¥Q J Fÿï5”àUðp.®“Ã*‰Tœ***Ð×ׇ£GbÓ¦Mx衇°råJÜzë­ ó¹Úµp.mù~"•^CÔ`0ˆ¢¢"W É?šâm…Ò—¦­ùý~WãNa¢™<@„÷¦iq“““èííÅùóçÑÓÓƒîîn×Áù™gžAii)¾ÿýï_´¿²²2LNN&x3•q7¹—©©)—1366†ÆÆFࡇÂÆp•{MOODZcÇð½ï}¯¾ú*RSSñ?::ŠãÇc||¥¥¥ðùâQøûï¿›7oF~~¾kà¦)€T Upð{«x+~E£ñž sss‡ÃHIIAÕÿ”po¿ý6Þ|óM´´´¸+©($XV ]sN ÞŒ…ÜðOÿôO¸æšk\7V‹Êóˆ[Š'dК^´kqWqU¿S¡¤Š“:|£Ñøõ–·Þz+æææðÀàÔ©S.Ǩ •4åç—â š -ÇÁ5PÉQØès@¼Ë}÷Ý碼êM•5ŸÏç<â7Ýt“+Í¡ÒqþüywãË©S§pôèQç(°ƒ7e¦UUU‡Ã.m‘{¢±uôèQ¬Zµ -X¶lRSS xå•WP^^ŽíÛ·;§°u qhäFÏV£}Ê#8HŸª°ßTF+?·0W<áœz^Š§—1eeµ5œ¸Fëx òLý~?-Z„[n¹7ntýE ¹¹=ö~ó›ß ººÚݘCZþ©k³2Í®E•.ݛ•ëTú´p²´¨Jœ×û’+ùƒÂšÙü|üšÓ§žz -ÃÃØœœt÷ïßïdV4Åš5kÀkŸiPóæFg‡‡‡ñæ›obÕªUðù|¨¬¬DUUn¸ág˜—”” ¸¸ÙÙÙ %Õà ,Uöý~¿ëO£2Ya¤¼‘på5T½äµÕ3­®¸léË>ç5,_ò¢ ¯w«Qfå«×°C¹À[(‚Á –-[† 6àÑGźuë066†ï|ç;Îy¯)þ ¸ñ\•/ùý2ˆù«ÿYãˆ{$~ký´â{-q- Ôií¾åŸ$jpj–ñ„k 3œú„Ò»ò"þ_#é -;u¢^Ü‹Øü[û(ý¯Wø{½ò°.d)P¶Q®ÓÀg9‰î›{!\4ÛQy¶u¨Ó[åÿÌÌ ºººÜÍMÄfù©|!þ°91÷¢úáÈÿÓicJʯ, *Î*=êçêô×ÏÉGTo£³‰s10F[ ££ÍÍÍÈÎÎvYrV橬Ӽó£ÇH§ªˆ®ÆÐ¥”Ã÷£8ês—bÎúlZZ¦§§‰DpÇw ¥¥ÅÝį¡ñûýÈËËs‡Ìn´dp---G__Þzë­‹Þú¦‰‰ ejiiAgg'233133ã -pw¶2U™ï¦—ˆÚÚÚŠ¬¬,|ò“ŸÄ–-[‚1šjÏÄ –^‘‹d0õšëý U5ý”„ÍÏljV²3W'DUUî½÷^|ö³ŸE{{;êëë|ÞË£f…ßÿuP ¡ÁóS¡O¼×¨÷Ê´5]Ûðð0Ž9‚¦¦&”–÷¡’7 IDAT–º;Ã;::PTT„ÂÂBç¥fdY›vMLL »»‡r÷”Ÿ8q¿ÿýïîŸå`§ñŠŠŠ„tt¦¬Ò©Å󜘘pe,ŒtV”••¡©©Éíç/þâ/pë­·¢®®î"ÞÀÁŒ˜wÞy¯¾úªK åý¬=þ<òóóñµ¯} [¶lqBE.%3qèåVãÆýŽÞÒ… ºÌzÛgff°oß>|úÓŸÔÖÖºÞ—)))X½z56lØ€Ë/¿«V­Â‚ jÐíZ¬ ^iuÀòÌU±´‰W•F#¬â©ôTRR‚~ô£ðù|hllľ}ûð¡}ÈEñ•ç[ÅÄ‹§x)Üü7¯1J¶.;oiii¯ám)TVV–/_ž ø ¼¼ÜɱññqWæqàÀ´¶¶bbbÍÍÍ8~ü8ÚÚÚÐÕÕ î$KIIÁ¡C‡’’‚£GâòË/G4ÅñãÇÝÕ™èììÄ¢E‹F100àÊÍyäÔÖÖ:E(¿ýcø–Α̩úǼC×¥Fôûv^‹+ÉÖeqˆr„¸RUU…êêêÇ;Ô·´´¸fTÄÕPÒ5Yzùc`v©=[¥U[Ö`ñÂq«Gq{¾–wðÝÝÝÝxñÅʪ|¾ø=ñ‘H™™™hjjÂØØV¯^ÁÁA¼ø⋸ì²Ëpøða„B!\~ùåXºt)î¼óNÔÕÕ!==¥¥¥ÈËËsÙ‘lb¬üIå2×l aÝ‹Âü¿_Ó?„FVÿ˜A¸ªÁKG -/ßò9{NÖ¹ ß+,t\ -ßì»,.XcÂëŠÿVñWGå©zrÔa’ñyÕÿ|¾x²p8ŒÝ»wcrrgÏžEjj*V¬XáJ +++^èGdaÎH<ßË5¨Î©Ï'£uèëwÌØäomÖƒ{üC¼ã:,ŽÚ^^|Oߥëôr&*ÿ£n©Æ¹žçñù.” òýê´W×5)SãU nÒ‰Å#žuD¾“óš‘É}Ò ¥#“¸§;uð(ÌTþÇbñÞL{öìÁóÏ?êêj|èCÂòåË/‚7ñ‹xÅwëœtp)MpßÔ£Ñ¨ë ¡kõûý¬üSžw©aù¾—-Íy+Ú -l<ž••…îîn,]ºÕÕÕ ™ê¼ jã1­G´Ñ*.Œ+¯è¿URÕë¢ì-rÚ¡U–i$È$T ^‡¹téR´µµ9†?33ƒÁÁA´´´8ƒ€Q(¦HÏÏÏ£©© [¶lÁ×¾ö5dee¹ëOœ8^xÁuße}’ÏÍÏÏ»ŽÐìÒÜÞÞî:¢ææ梬¬ ¹¹¹.²ØÞÞŽÜÜ\Üzë­X½z5ƒÖ½Zæ§Ä®„l×Â^™¶þìŒì³*ðÕ#$Þ«ªÏë9Ú9æçç±mÛ6|ùË_Æ™3g°nÝ:ÔÔÔ8Â"C±¸Bü|¿JÂûQ”¹G¦Ó ¸zñX,ñú6­ã™±C<™Ôìì,^zé%|ãßÀ©S§›6mŠ+púôi,X°K–,qõÉyyyo&&&œgïÌ™38|øðEkNMMuxE/íÄÄD‚ÁO‡FÂAj¥¥¥! -!;;§OŸÆW\;ï¼eeeîŠ<ÂÜhzÑh4á®q î˜ÈÈÈp©¡øû¿ÿ{lݺÕ1gzÇé T>¥üÇÕ^gMz c·tý°±cii©;ŸÍ›7cÍš5X¸p¡ëcÂÌ:óxSÒ5x¨ø­üU³®Ô`åoY꣞|+ÈlÒÒ¾¥]¥e ^–‘ŸŸ»îº <òî¹ç<ûì³ÎàUXò]œÓë}^<‰ƒg«i€v¥QFßéóŠ¨j ¶~gùËW.\ˆÕ«W»+–xcÅØ؆‡‡100€à‡?ü!¾ýíoãŠ+®@II ªªª\æ -®ÎÎNƒA466¢ºº'NœpŠÉöíÛ=•]“¯õ^|ËËÐò: *\ö<¼~§†•ŠoÄu)C^ó©ÑdéØ 7ÉWT ‡Ãؼy3&&&ÐÓÓƒH$ânlà\ú¼Ò‹}‡…·ê3—’§êäp‘ܱgJøØ …ÿŸLO²)¹>Ÿ%%%øô§?žž´··»kô†‡‡ÑÛÛ‹•+WbóæÍnOõõõ¸þúë]ÆD(Bzz:JJJPPP€H$â:M«ó‘º}ÂG#ü^ú›Ý—ïP}Aå96ÒëeÔz7ºÅ9‹ -W/‰k³¸ïE{ú{ýÛ ïT~©.k÷E¸xá¯O&*¾)PoÕï½PÞš¾náBYVUU…ûï¿ûöíÃã?îrÌæcªr$q¸ÅA}Üçó%ÜCO‡®Â“°Òò®ý%¨/ªAL¹JºP“Ïù4 Ïê¯))) VÙØY£ô\O pÁ<®ƒz«:‰cÖ©H\áwüLK¬Ìä:½Ê°­Þ ßëù3²oi›8@}RSé…·Žåš £e¶ÊûÕ¶ã°úS{{;¾÷½ï¹[Õº»»ñùÏ‹-r®Ý6æ#©oÆbÞW0+Ì•îT¯SÛG˵ìÎi—²•4WßOç érrrpÕUW%ð Ý/ñ;H‘5 qH,CCCHOOw÷#+²Zæ¯É…Z¥Fk¡t/AâõœþŸµ6ccc8yò$Ž9â¢û333vµ$T¦òÎhîýìÙ³xðÁ±}ûö†ØÞÞŽX,†ïÿûX¶l†‡‡‘——ç:FÏÍ]蘋ÅÜíì ME¶««ËE°ÚÛÛqçwâƒü`Bº1Ћø¬¢Âó²ðÕÿ«wO…¶"êûJ8ÖP!E›ì\9Ù³²²pã7b||Ü : t¿v~2ýdÃK9Óï Î1::êR,ÙH‰Î6¶¤¡ªLÁÖúž9s<òFGG±råJŒŒŒ`ÿþýØ¿Òµzôôtiäþy«ë7333]í8×H+5¦¹_Å=ÖG3 -þ§ú§øä'?‰åË—_Ô Eëµ(¼y^CCC8pà€8£gJR~~>233Ñ×ׇxW\q…û½ -6Þ$CVf˜ìL­Ñ¿IdøâãããhnnF4EMM î¾ûnlØ°+V¬p>‰Ë̤aò¥+þÆKù´´­ÌŸŒžëU~Êßq~k0yvÉcý?á‡ñáMMMøሢ¢",Y²ä"þë¥ë;¼j}&+++¡´ÃÊ UV,½ZeUO¤=wÅ>C¡M™À{˜ ÛééiTTTàí·ßÆ»ï¾ëÒú+++ÝM.ljɦ~ÅÅÅ8tèðàƒâòË/w -¡ž¯ž×¥p×åß—‚¯×ðrš(ÌUé¢CS -/ENqÑž»Ý«×Zœ›Ž! üŠ -e @}}=Z[[1<<ìn"¡>Cš±2Naeá­²ÄË@´:‡—ü¸”¾£¿³ôÊßXylùá¬u©¼ù„‡çlÎÈÈ@vv6rrrššŠ¡¡!!''ǽ—8î]ëŽõŒ4õÖ‹·’þ’9uxá ÂÓ ô}^¸¤¸©ŸëõlUáæ9Ø`’òl«¤[=Ù+==Yª¯ÒŽI|†:C2>MÕh¥5N´1±=ᦳGSÊ9iÑâ%×Åõðy¯¤¤×]wêêêÐ×ׇââbTTT¸sàÈY`Í -u )ÿ¶ør)ùGc–% >ŸÏ•Âð}zv:Ÿ®Ùï÷»24ùêˆÐ`Ÿ!|l•-k£QÉ÷3[3+++á\ÕAÂ5jÍ^P<åo4Ý]ágëðt~ëÐd)‡òQ•ÁºV¯}~G¸r^fÕªs ‰ ´´/¾ø"ÊÊÊÐÑщ‰ ‰½±ønâ5¿W8î´Í(¹ÂÇff’OYÙ üQéDéHù–P¨^£¸¨x¥ïây0 eÏKÏ5"È+‹ØFYFÑ×ׇüü|Äb¼YvAèøø¸K?±Œ‹Ãë·\¬ÛA ŒîŽŽâ™gžÁ—¾ô%ÀUW]å®ÊÌÌDNNúúúœ×ŠëbjG?Îœ9ƒ~ô£¸ì²Ëxffùùùضm<ˆÆÆF—Mð^£¶¶ÈÈÈÀøø8ÆÇÇ]:x^^žë"Íõh•ø½„…ÈÌÌŒóÜQ“ÁOkp’)+< ûœ+º&ëiÒ¡çû^Ÿó]ìX?66–ÐøͦԓaƒA×dŽé×–áý1ƒ8Å=¶´´Àç󡧧Çw„™‘‘áÂååå!§ãÌÎ΢­­ ùùù…B˜Å¹sçðÚk¯¡¾¾ÝÝÝðûý.®‚ŸWO²±ŽÖ³ùý~ £¿¿ßÑÓ’è &“`Ý;Ï=55£££.ë… ’L1//@gÎœlØ°»ví 7Ü€²²²Ø’y©@™ýû÷ã駟v©¼ä¼%c÷îݸì²Ë.â9677‡H$‚µk×&”{‘ŸkÎE<°ÎI6ìãoc± Qiò,lôß„RÜ"}0«Ìç»à PŠp&LUÞ«sÌ:óU?aÖš¦¿«åïÕȤ`Ä^ø«™…\+ñɦµ+/¼d£Òçõ¢ Â’ß3ËAiFaªûÐÌs+s¬‘NÜRFã×þóŸGMM+g*//wÙJZ¾H8«ÌÚvxö|>8Caj•MëÜó¢iËtxEè>Jë xüñÇñôÓOãÍ7ßDmmmBš_2ãž8Ê þ™››ÃÐÐÃ_å]VqŸŸŸw¥7Ä[k˜ð3:s}¾ åÜ·å§VÁQá7ÞÀg>óLOO£´´Ô9ÕÚÚÚ‘‘‚‚Ô××ã­·ÞBVV–s–ý¿ÿ÷ÿ°sçN¬X±"Avò=Ä‘Ký{ñ./¾®pSü°kÐßè:Ôà♩²kKņc5¼Ö)|á÷J›êìRÃW#l .D0DOOÏEÊ¢Upu¯Vµ‘{V1UeUñNçâ9©l x®WŸÕó%Lôsk˜ðlù ù¦î…ïWGÏŠÙL -7Å»Îd:‡î9,u…¥¾ÃKç°xc?³çmùÃ¥ä“5Âb± MÔµUC_ù¹}‡×ß4̼‚_ºÔýZ<â>n^Ï[‘ƒm¬iŸ±¸ª†¢MÖÞ?Ôß5â­|vllÌõÎ➈³š ¡øG^£=¦ø.:4zMùbûÃpPÇ`™ùr0t]š®çC¾Dǃ–DpÝ40¹7•;5·{äUÉ¡PÈ}‹](måïèL°Ù -ö&5̽²>´i ¼hú£®‹¦Ês#‹G\/yŸÑ ³ê7z±Ï#ÞsmÌÖŒF£®ü@u ->Ër?Õ]UN(ü¼èBá§ü†g444äJË•h …‹åeœAêõ¬R¹¨k²×{éĪãÃá0rss/2ä•È¹øÌÌL×=“†"… -ìP(äzE ËÄ­òÎCaª~(J0,U1˜™™Acc#ž{î9>|ÍÍÍ8uê6lØ€M›6¡®®‘H'Ožt„066†’’”••9#ýÝwßEoo/àoþæopûí·£ªª*À 42áf÷£{ad‰‘®={öà‹_ü"vïÞŒŒ ácûêëë -….2Ä-ê°°ôûý õÜ„—õüx!´­²J†2?="œ*–y{“õÎÚAdç`À¾}ûpèÐ!üë¿þ«K?×ý‘0ôš_ñìRÃÂ_•ééi Áï÷#??ßE¤KJJ\]kÃ}¾xCœ¼¼<—~9??7â[ßú~ýë_ãßø€xs²¡¡!wÛD$A(B0tõÿ|V›&²É -σÌ ·uü\—ÂÍËÀPÇ?V¡ÓCM‰ã\›—QÂwY/·Îí÷ûQXXˆë¯¿Þ9;mÖW2æzÕ“î-b$H÷ª0ÒýÎÏ_¸ŠÑË¡ÂßðY•güÛ -D*\ ×MMM8yò$ÒÒÒpæÌ™Žý`JKK‘žžŽââb¼ù書âŠ+ðàƒbË–-®ŽU•3«ôÙµé“ ý½UøUð«"EÅKy¡Å ŸðÓkÔiÁÏü~¿Ëà(,,LÀ?>ciV÷ªô­t«Š¨vŸ››s}D¸V:Âáp‚Ø®UÏ›pa#Q 3þßöQ¥Vé‹<Å:¸GΡç¡çhç%ΨóŒ:ÅiŸÏç:ÿkwuÝ«þ[³È,¯´2R×iyqD÷¨¼€s[\׆djxëû,^*¿¶kå OàwÄ6íR'5é$¸¨4õ/þ^eqY1ºÕe”·±‰/u2ËßÖÄÊuˆrß<¿ùùùg›5˜•ÌÏÏ»ýQÿà;Õˆå¾æçç1== çHcj@ñ}lhªÎ'KÓät3C‡²Wý¨áãóÅj###ÈÊÊBzzºËˆãººººPXX˜Ð+ˆó¦ËS·ðrdzŠÇÜ/áÍ_íM¤rZíÂõñœCÏŠ8®½Õ”—'Õ¡ Æ?aÈyø;ÂYévS0t™|¤91-UCÙ:©´ì•åp:¬ž£øA‡Žêz<{®[ƒZÊ/”ÞU?¤Í©Žʲdz¤:C•>hC(nZCZé’¿ÍÎÎNèkD:#Üô÷ºþŸ%1œ“|[3%”Ʀ|^qÏ–âs¯ÑhAÞÍ/tqúIëp`À¥Ñï÷»ë>ÔHàâ,‚Ø‹Å#ã…ðûý˜œœÄèè(Ž9‚'Ÿ|{÷îE ïP¾téRŒŽŽâ¹çžÃ7ÞˆÚÚZÌÍÍ¡«« ãã㘛›Ãèè¨C¬ôôt|êSŸBEEš››qûí·£¦¦ÆÕÐ),ômÊ*÷¢ûå¡ddd ??W^y%þüÏÿW_}5²³³qðàA”––¢°°Ð9 -tž÷V™}?¿á ,éÁ£¡À /5^ì{ÞOJž"ø¥öÀaaéóÅ;oß¾‡ÂÖ­[]Çú¬¬¬„wp• ¯îµ—‚­—Ñ¥©=uuu(**B__6mÚ„… bdd………ÈËËÃâÅ‹QPPà<´yyyhmmuÆøää$ÒÓÓ±fÍ”——£¸¸?ü0QTTäŒù`0ˆöövOX]êŒGGG“~ç5*++±nÝ:”••!33eeeCee%¶mÛ惪 *.$Ã; -œ@ ^rC¥]™UVVNž<‰ë®»·Ür B¡¦¦¦*”õ{5Ľ`¢Ã ÉžU¹ò -nUHm}™—‘¨ð{?ƒB6-- Ë–-saÎAx)Tásèꦙ׷éïu}z6TÒ5}ÒkF9PÄFøoÒù«¯¾Šxßüæ7ñÀàµ×^CKK NŸ>±±1ôöö"77§Nr™2õW…{ï½K—.u -„up zF^ð÷:£÷ó × ¥dVn©R¡¼ßÙ¡J37|‡*›^ŽŽ÷ -ͲïæßäMÎpòÂ!Ëôâ’UüU‘âgŠ§<;Þ -G®÷¦ÎS+Ÿ.Ò: Â?ºÞ\“šéúÙ#4§øg×’Ì٤߫’m^ûÐ=j¤Ø³Öòœdó*ŸT#‚ká<6=;º›g´ä…ºçÐF¿„­:t½Ü'Tò!ëÜ°°¢î\pxpN=:Õ}¾ ™öìøl4uWìÙ¸F’ [éz­# u«“ç©ø§†0é@yNvv¶ƒ1 n5Ð,œtTØ.™™™.СëáüÙÙÙî;ÂHì+¢¢££CCC‡Ã¸çž{°mÛ6dee¹ÔkÖ÷©Õ‘a™ÎîEΦlt0íõرc(//Ç¢E‹`fçx/ƒUËK=¯C£SªÄ©R¥ŒÍzëíõsUÒt}ú;ŽK)ñ|çòåËQYY‰wÞyÇE®kkká£D‚÷rÚðU8t­4PTÙRaTSSãRÑ‹‹‹‡‘••…ÌÌLøýñ+'''111áÈàà ÚÛÛ]s1¦–eggc÷îÝX´h~ñ‹_`Ïž=(..F4E[[>ô¡aË–-€ÁÁA9r())ACC,X€ôôt,^¼ØýÐÐ1:: -ŸÏçº<9réééXµj•3¸òóó±`Á×ÚïOlR“žžž |© TüSÆe…¨—ˆ%“Ï}îs¨®®Nˆ&XÝÒUÜ­"æeHÙµª U\ѹù>Uà“íÝ–V,R±âoÕøàs* ©hXåCa¥ß龕þt­—\£ -mò UrTˆjd^÷Ì(oŸ ¦¤¤ ;ÅBy©=KÒ§ž•Ü/p!³Á öúoÂoff'OžÄ™3gpîÜ9lÚ´ 'OžDee%–,Y‚  àí·ßFnn.Z[[1::Š;vàãÿ8®½öZ:åÜ*ÐÖ°öÖå…oVÀ+¬”NôüõlÔ±üÙÒ -qYy¤UTÂá°ëá`™dr;t^Õ9t|¿âÑÀÖ}ª¢ûT™eÜÕ§Z3o#-šŠIEŒõšÒJe›ïâÿ ¥mU°½p™¨ŸQáVž§Wæææœá©D«¨J aÎ=jê߯ÞV}¯—’¥kÔwó9“—çÐù - - -på•W⩧žÂéÓ§±dÉ·&„Ä-zÆ­!I†­Ñþ>-- gÏžÅôô4V®\‰©©)Ǹ®óçÏcëÖ­N ÅÈȈëëÀTÍááaÌÍÍ!??8xð ÒÒÒ\&@jj*²²²°qãFø|>üìg?COOÛï½÷Þ‹††wÝÝÝèèè@(Bmm-Âá°K‰åyMNNbýúõ.R›™™‰””ôöö"¸~¤qMRåES¨;ÛÀMO› -I355…––ìÝ»À§Szz:Î;‡»îº «W¯¾HAõÂ)}¯Wš/Ï›ÂÖâ¯*#Ê‹¨0*N¨@P¤<ÏË@⥮[á¤B^ç·¥5°u.«ô«2¦|]¡œU)Ó¨ž*®ÓÓÓ˜™™A(rŠÔÜÜÆÆÆ\Ú­Î \HÇdš ÷´xñbÌÌÌ8#RÏÚî×:ïô=Ê7•ÿ¨L"~ðÏÌÌ öîÝ‹¯ýë8pà¾ð…/àøFFF°gϤ¦¦¢¨¨éééˆD"8räV¬X/ùËؼy3 - ÃLe÷béŒCe qGá¦çh•þžp²ÆšÂËòaUæ9¬\¶J¢ò~s^ -ñÎ&º=G-'Sþ®ç«pRÅNÓ5íà>4­“ëã¿©¥²šÌ!å¥ÏPV‰©©^²†òÕÒ©Wæ¯2YÏTq- "===Oó¼&&&žžîðÔ‹^8—ò9åŠkº'‹‡ -w{üL•tÎå5,ÏÖuÚ¡óYÈÒ ç...vÏ)¶´¤Ê?çPÚU9£0´Æ®òÐ:(”.•+¬¬ÃH÷Gç,ÿíu6ܯ:x5íŸz¤£Ä%:ë9¿¥q¥Këx$ÌÈ3¬‰0V¾‹%Ö¨Çb±„úpFÆUŽs~–ǨsZñ™Aê-Ê£õü¼hÔòd›Í¢òTõH]§/Ý¿vîW}Ô‹÷)oÐ`Žê{´S,mª.mq•ÿÖ, -Ý‹ââ³ÊsþF=–ÿ¯ì KÊOùNîEo.àó -+:©4¨§¶çÔ Jµ¿,ÿW=”ß+\T¶ðo¾Ky˜â“~ÆwxÙ×êìV^jõ;ž£½¥Ëê)))22i¦}±´v(Qy)ðúÜ{ýú,!++ ,@qq1011ÉÉIwx[[Ξ=ëëQAåZýO¶?üáˆÅb(++Cii)RRRðæ›o" -aÉ’%˜Ÿ×²Î”Æ -SŒ´7b4ÅØØØEÊ2aFX²ëú™3gðꫯ:X=zW]urssÝÁ1²fćÃz¾q”!ë°Í<”‘ÈŒìœú·—r -\tJ$—Éœ@X½z5n½õV´µµáùçŸGuu5 - - -Ü3*L,|¸ÆÔÔT¹[ºti‚ó ¹¹ÍÍÍÂùóç±iÓ&—…ÂõOOO£¨¨™™™èïïG,o—ÂÂBç…BEjjª»c¸àÍŒÅb®.bÕªUøõ¯7Þx±X õõõX»v­Ëpðûã÷Óó†@ à2\xÕ“z×™®Î½UWW'xy¶êô!¾1ÍÍ‹iégdÔÊT}>FFFÐÚÚŠsçΡµµÇŽÃO<ÒÒR—^Æ7+W®tÐ -«€éH&Ĭah·5°uí6µPÿXœR&ªós Á´Ñ}žžb®Ë:]¬Rn-QºSÃ*aÚ@HÏ1ÙPcS'zzzpæÌ×’Ïwww»+Æô^ä´´4tuu9ZVUUU…±±1Œ;#ÐF,Œ½ŒM{ÎúoåÓÓÓ.úDŲ³³?ýéOqàÀ¬Zµ -¿úÕ¯pã7"-- 'NœÀüü<233qàÀÔÔÔà+_ù -vïÞåË—;e›5z—Z÷3ÔÙ‘ì÷ÖXôz¯þѵ$3–¶*HÌÆSeW•"«äpXç‡]g²ý陫bìµg/‡´?_¡aLÜL¶ -þ sÝäÌT¤b¯§5P¹ðÙó!ÍxÉÊ;4{GÏK£ïg(ÞèùÞ¸z)ŸÏÁƒe ü­:ph 'sBZE sž˨ønÍ*TÛ€0`ÓAݧâ&ßíu¡ÂU×`qÅf’ñsÒ¥Ò®=#ÍÑŒnKêĶïÒýç– -[k·©¥rEᨎgâçÔ}©\±å^ö·êöÔ/µ§™r¢ÌN‘['R€éH¦dð·Éˆóäß~<=)++ óóóÈÉÉIàªU«®ô£aÄ£â<44äRñÕã??o–Â}öõõ¹›²³³Ý{Y£­‰8‡ƒz™ø#½ÓÓÓxóÍ7ÑÑÑ5kÖàüùóÈÊÊBvv6†‡‡]gkí³ Ì]™‚Ev*VXxŸ¡âÍ®™ú"»UV¬±eqpµ5V—”0-Z„úúzüó?ÿ3öìك͛7ãꫯNðÚª“AqWq³½½™™™HKKC¿»B©¯¯K–,Aaa!}ôQ×á›D‹Å›Í°Io…Bîüx§=Hj܃ALMM!==Ý)cdÞ™™™Øºu+Ö¯_hôB´‡©Ud‚lˆ©}MõŠÌž,;à™êùÑÎ  ©©)wóoðÂ;…/ûW466⥗^Â3Ï<ƒ³gϺ³¨®®FGGÊËË -…ÐÖÖ†+V`ãƈÅ.d÷ôÌ,Oáš“9"UéÕÏÕ ¯¿UÃ_a£Üdøn  Äy­df‘ò7åq^sëw‚††D"‘„È ßç…‹ví:l4–Ce“:ÇtN»W 3ÂFJÅM»>>£ðUÇkv§¦¦ø‰ßîÙþ[×a ,>«´`y‚…—¥C»ÿdkò:ڳе)}¨¡\PšùÌìì,Nœ8P(„ŠŠŠE½†X®•L·Rga¢Ê¡WðÅ:l¹O~¦†—=}¿ÂÒ®ÏÂÆ öªë™êþôÿœg’¬NÛîÓÂÍ o¬ìÒ2GÍÌ°¸v)–î—ÿV¾®¼šÿ'ñ¯ôvåã\ׯ2ÐÊŒd¿õÒ±Õ×/ê$WØRç ÁÉ÷ëžõý^4Ìu(¼õì9¯5y¦Ôw¨·Ð §Æ/›@Ò‘¡={êê4ö’½vJ JgJSã÷¬qWWÜÓ@+ŸŸ™™qeÉŠÇ~¿ßuÉðÏçó¹ÞJêèã÷”_„›Pªîhcí ¡@ü^³xÖà¶úqUõ1®O3ë¨;PVþ¨^VÓ’#Å{®‘sèû•¯r6(« - [}†ø¬:••œ‹thq–çD¡4˽ÑùÅÅÄÄDB™÷¤Gš÷˜[cO–zg¼˜®.ÊKÈr>/†ªJzB¸AeŠä4äøW­ ï/·ÂÄæóù\DK#¤ŠØ* H úÍ<`RȦM›°mÛ6·WÞr@CKk~^°´ß[oí¥`¯LÎ e‚:Ô Ô÷Ù”*Î祌Ñ1q©5y e*YYY¸öÚk1==³gÏ¢¹¹ÝÝÝ())I 8U–•Ñò³œœÇ ‚Á Îœ9ƒššÔÕÕ¹Tù{ï½×ÝíMüŸ˜˜@ww7ZZZPTT„P(„žž—Ò×ׇºº:WëOÇOJJŠ3Ø5«Ñ\®Y›åÅb1w›@2¡dá§Ê¸hú;«ài6Hjj*ÒÓÓ=Sj™CattÔݾÁÆxSSS ÷“¯Ò™e•x -ª÷âyöŒùÌü|üŠÀÑÑQ¡îïïwŽÙÎÎN9rî -ªãÇ{Îoǵ×^‹;v ¡¡õõõÈËËs8jפ=¼ŒÂT÷§°°ŠyÏüü¼ËF²òïQú¶ÄM«„«RÄ98˜ÁÄŒ8ݾS‡Í¶Ñ5XdžÊdÍfS£UÓó-¬”×q-^4ì…[êðórhÛ=èsú½òæh4Þ¾»»¯¿þ:ŠŠŠ¢¢"LNN"%%ããã8~ü8¶nÝêhWLQÉWù¬º‘UÊÔXô:WÎÑLŽ'sv‰Î+5n•¯YY¬¼ŒC#rÖÁóR¥ßK®óYUøUÑæ¼–êy)=h´ÂÍ«ÖX»³s¯úoîG»{+NêwŠŸšš®üX*ŸÏçä$ *ýÜ›þ[ñE÷ >ø êõz:¨ÕjEQÉø0«/¸H:ƒ£JU5õ)Š"šÍf´ÛíÒ˜_}õU¶GUøò€Æ!¬\ÅìµZùú<4 7›¯¾‰ô³ì3u’¯¬ v½ÃÀBËÙÎ*{P…oþî󪲭 -†ØGíp8Œï¾û.VWWãìì,Ýf1›Í¢ßïÇùùyŒF£xðàA\\\¼ƒwŽç¸–ü)1H=_•¼_ßÌù‰Azò=ƒA! œ«ú²²$âæNrêÉ¡xÏ“« º—––R²Åà^MÁ€oLÈ/ÒÖ:ú‹ZôС ò'µ¢)šh¾J˜²¬[xäÖ=Ñs>¿I°ŸøA}$w v4w· Ô3|_0 -Ué¶MêÏ›XfÎ9s|ž°Ï¦>“É$~ýõ×t[ÐO?ýÛÛÛ1›ÍâÅ‹é\(º:[F™\=Õ¯ø×ü\¿»O.:4›ÍÒ­ÔËŠKÜο~ýºdÿJð0Nl|ƘhÊ3OôŽèÏ„¢Vž%'”/ÁÃ@—+JHP>õM&­(Ôóä9ž ïÉáX‡µÊý˜4òŸ© ‹þ±‚B´åª:($Gô]©³è{‘_¨sÙ}Â.¯ê—óåkµZ ƒ899‰Ñh}ôQšó‹/¢ßï—âÌÆááa¬®®F»ÝŽáp÷ïßO«—B‘ïÎ…;<ì«~îlV!GŒ£jE#÷¾”‘¿+dÑ©à»"²~¦KeË÷ô»²hÌ6ó=9]Ä•­…3$ñNF¦c#X™eô€Ð… -š†Ó +2\Ùw2Œ4ÆÞ—ð, 24Cmß a¢’bÔÇR¥KQñøñãÇñõ×_G§Ó‰gÏžÅææf ‡Ã8;;‹Ùl½^/)r -âÅÅE,--Å`0HgSH®¯¯— £”*yß3fõL -=‡:,U¾§o嚯ªFÇ#"JŽ.xÑ}ii)]3UEììì”èDÜС¥‚•Œºn!,t¢D÷*¾b:ñlUŠ™y™|É1éêg×]¤! ŽÓ…™nHò¾ó;û„U8wY¹­Íf³èv»ñðáÃlëfŒF£ý~?%Xv§=Œ·áÛƒ5ÎA¸ñV«]ß½»²²R - åQöèXéÝù|^¢õbÄMåyžðrEÅy@MpP¦s¶)7oñ·ï…%OQWR¿Tñ´àÖétpߤó m“^Äq­èÓ ÷D«¾¡±è°¸ü«N~(·ñ{O®{|=üî€ë÷Édý~?îÝ»§§§ñöíÛXYYIöè³Ï>‹ÃÃÃØÞÞ.98\׋†Läèï9œ.²Élœ'6§¯ût.#L†PÏ7›ÍÒµ Gz•tï+Pd£¥ñõ¿¾Ç Æý$ât>Ÿ§ê¡Á`õz=Æãq)PçÊ©~VOf¯×ëi«‘àй‘ʺ̈‡Ä*aÎ}ôäÿœ­›ÍnöújnL^T=sŸ‚A’Æ`ð£êD_ú+™@Ò¿¦f)ºë %gwwwã?þˆƒƒƒØÛÛK«ÊõúõÕàÚ~ÉÊñŽX¹åøÓ6XÍLd¸Ï0. ½qž§é¸å­.۹ğø‚¸gÕT9G_TóQÒœº™¿snÚ²ìvÕí'zÑ^|NßFpÊ®N½Ï3(èÃñP_Ê*j™ps9âžx&-hsE#ŽÉ*ùzL¨Üÿ8-(ÃU>u¸'úõOU4;;;ñôéÓøðãÛíÆþþ~üüóÏ©:3átoo/êõë¬áææf,//G£ÑH&à̼ÒYwÀéÑ1rØ—È%±)B¶&ÊŒ¿£Ÿ¹ÏŽYèœÂÔ;<„KÌ0ŸÏK -Mc‹ÈRTtiprsuâz¢Â™Ã‰ÎÀËû,:@ý¸"“3ðžÝ¯‚‹Š‰AáÌ1N(üYΡá ÒÄñá´¦ó½»»ÿüóO|ùå—éऱ766Jü*¼FDL&“8;;‹µµµ(Š"Z­V,//§«„šÍfZáaÂG14WB4·««ë“ýY.­æ+'ܾáÊBô'o9ž]ðï;ç€úϤŸóúŽÅýJÜò¢±}¯\nÅœÉõ¥¡q^t8<Ø$¯i.4h4òtúýœC,^ò1r:É ¾«y+ÙèûºÜ!!¾¨Ÿ=Àp}ë<Á~÷îÝ‹û÷ïÇåået»Ý’X__OÏôŽ/êâ‚svûà6†ôsýB|ë™d+¢¼§ÔyWzœpsÎõ?Çö¤€7Ò—Ï!·Ò½¨åô§`tœähée¶j¹„—täOwŽ]oTÁ®‡Ûùî «åd0ÇK„›°JQªêF?ÇœƒÛ^ÂQ¯_—ÖžžžÆ`0ˆ¢(ÒÁi¥p{{;c4ÅÖÖVéŒÍ]<§„#õ{ÄÍõ€<ûˆ|^•¾K£,’Ï©‰#ʤÙüŽþNÞ½|µ•ÉÏÙl–n¢¢žs?úÌyŸc{¾‹¢ˆñxÃá0-¹$›ëá©Ûí¾ãwqžÞè[ê&QÈÛ,ùnH3%'´§;·º.XÅ7J:— ü˜l¸Cüë]õePM<FUMŠ¿y¶“ÆÞÜÜL1ÈÆÆF’Ñõõõ’h·Ûi!}-É`ò­†š9‡}:¦«ú\GÐGuH~ñ³ ¼º@¬qF«ªÌˆ¹ç™žÄå»LÓo’Üæt9}WÊZ•æ?ž¹Á¾ÔWâÁ%Ý×l6ãòò²t.ó1s.Pßp\êpOþ¸ÞOçìnNŸÜņŽ\cõŒx¹Ê.×jµ8::ŠçÏŸÇ_|­V+ŽãáDZ¶¶kkkqrr;;;éý†2oß¾óóóÄHºB̯fñeÄtµ †‚ˆxctºƒäNŸk,žß“`2“ãJ€¢0è¹gÖ ¿„™™+7š—œ TsLKœ±…eâ€HhhPyÈ ³‰î$VÒŒ‰˜ro.à dŽ› *©|G^Næÿøž O£Ñˆo¾ù&"¢t…“+&‘ÈžŸŸ'!\YY‰Fãú€?UˆfÚÿO~ŸÍf¥ƒýç&š1CI>œÍnnŸà57ÄN±ø\ùÜŸ18u|:½È°;ÂäòQÄy ¼¨yPÕ‡Š<çÜëÿE{•1p£Re8ç-c˜snåx -7Lnêü½o[dÔTâùüù󸺺Š~¿Ÿdª×ëé€<}ãêê*&“I©“üQv¤É/U DÍ[}]‡1yK¾ÈáŸcWц8æ·ÿ+.ý»üÙûåèWõ~n,µE³éèè(666Ï5~øá‡tˆ†¥k6›Ñëõ¢Ýn§Ó4µ'ºV«E»ÝŽ×¯_ÇÙÙYt:X[[K÷‘«Ô†ÀÐ\P¦R /ƒ?N´Ýn'&àIü:Kn•åc6̓ žÉååe\]]½sR¾‚9ÎË•¤ž) «L§ð5™L’ë”x  KáRUc°¨ñ5_ÂÃ};ıÃJ \ä&: |N%D΃èÀd ÇXäx²?ÿNzøœêõë²>f=Њ¸9ü†ÖåååhµZQ¯×c8&út:”L`0!㩃Òh84:2z'gPid¸"YµOÈiã¸asÇÉi"œxrŽß­Rz‚#·âá01ðÈÁ¿¨Ñû^>+gH<;ì´Š¸‘5áž2¤ï»î¹mÎUÏÿ%ûä2Âq—é¶V%{‘’ÿÿþ{|ûí·ÉyRÒÒõ·ë!éBꑈ›@…ÕSÄ­¾C'ÇçKG†:¡*ySÅÔÑÝ«þo«úËbÝ6ÞõïK•cåý¤‹¸Rr—oG”WS«ú¾OËEÿ¥Io{%í$ý…ܸ²ÃKKKɶ·Ûí899‰äï¼yó&’<óªLñqU(›ÁJDùÊ.Éœ| õ‘¨F-—ö¹ê» \ªd‹¸‘½sÙ¾­Q~ù¬*ÙÃ~^å˜ë¯`MŒ1Ä…üᩪ:dÑôž` gà” 2<¤¯¥æòÄ$ƒWÇ¡úѶ1h'îé ¸|§'}üîx~Gø ß&^+Š"VWW­t r«ÕJIfá¬^¯—¶VD¼{E'íÙt:-UÓŽÈ–sn\ýg’‹yˆ#ÊeD¹²S8bïüJÜr §‘x™þ%÷ê“OÄó,´^OYV¬ EÀD”àP¼£äŠÆà6̓[îâçTéVjyuoØRsÿƒß_¤çõ¹K£¯Jýê(Ú€F£›››1b2™ÄãÇãû￈ëí"ý~?^¾|/_¾Œ­­­ˆˆø”ÿ F"ZSÔIEND®B`‚ \ No newline at end of file +••€ëÚ–˜>DBH„˜Ö‚˜5JiŠ¢ÆT¬ƒ€Áuä@„€ 7ºePÚäèu;jL‰à¡÷´Í’®ïØoòæ[orëþ-nܸÆxgL]æò¢ª©#PŠ?úñ+H³âƒ[?#-=z8ࣻ’,— GH½»{X[ƒ§(-R&.œßÆ·Œ tÅ|¶ ?6t­Ãõ5Óé—/Ýà°9dr6†JiùÕ/ÿƒý÷Q刡©Xv=½]QhÁ¤bdIëR©9waÄÿàeN2N89iPËÈÉÃ9±ÿÚ¦Á3üŽâI“çWƒÏ{®3å×—ÓÿÞ´ò"?‹ž–G‹³Ú/HÆIDATP$b¥Q2äÍ1!Ö¹\àC@Ê|¯”R#N½Ž¬•…Éù†)}BCúÞ¡ôk¦(××#²Š\*BÈ©\R>ÉåJ)­y‘'Ñ$ŸýÚÎÆÎ>/ž+OT`-¤9Ž)`'SŽqQ2g®†•3…D(²;lýû„¤˜ÿEžfʬÒBà}.ÅK©|JY ˆœ=驼9à5ÚÙxÿ"ø¼óÒiéËÓÑ OïYEü),r–ö3áK>ÃÎü CÖÒ>•IEND®B`‚ \ No newline at end of file diff --git a/resources/model-dog.ds3 b/resources/model-dog.ds3 index 564f9307..016d33ba 100644 --- a/resources/model-dog.ds3 +++ b/resources/model-dog.ds3 @@ -7,281 +7,281 @@ DUST3D 1.0 xml 0000000194 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + diff --git a/resources/model-mosquito.ds3 b/resources/model-mosquito.ds3 index e413d5a2..62ddf8f7 100644 --- a/resources/model-mosquito.ds3 +++ b/resources/model-mosquito.ds3 @@ -1,120 +1,120 @@ DUST3D 1.0 xml 0000000193 - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + diff --git a/shaders/scene.frag b/shaders/scene.frag new file mode 100644 index 00000000..4e62e9bf --- /dev/null +++ b/shaders/scene.frag @@ -0,0 +1,125 @@ +#version 110 +/* + * This file follow the Stackoverflow content license: CC BY-SA 4.0, + * since it's based on Prashanth N Udupa's work: https://stackoverflow.com/questions/35134270/how-to-use-qopenglframebufferobject-for-shadow-mapping +*/ +struct directional_light +{ + vec3 direction; + vec3 eye; + vec4 ambient; + vec4 diffuse; + vec4 specular; +}; + +struct material_properties +{ + vec4 ambient; + vec4 diffuse; + vec4 specular; + float specularPower; + float opacity; + float brightness; +}; + +uniform directional_light qt_Light; +uniform material_properties qt_Material; +uniform sampler2D qt_ShadowMap; +uniform bool qt_ShadowEnabled; + +varying vec4 v_Normal; +varying vec4 v_ShadowPosition; + +const float c_zNear = 0.1; +const float c_ZFar = 1000.0; +const float c_zero = 0.0; +const float c_one = 1.0; +const float c_half = 0.5; +const float textureSize = 2048.0; +const vec2 texelSize = 1.0 / vec2(textureSize,textureSize); + +vec4 evaluateLightMaterialColor(in vec4 normal) +{ + // Start with black color + vec3 finalColor = vec3(c_zero, c_zero, c_zero); + + // Upgrade black color to the base ambient color + finalColor += qt_Light.ambient.rgb * qt_Material.ambient.rgb; + + // Add diffuse component to it + vec4 lightDir = vec4( normalize(qt_Light.direction), 0.0 ); + float diffuseFactor = max( c_zero, dot(lightDir, normal) ); + if(diffuseFactor > c_zero) + { + finalColor += qt_Light.diffuse.rgb * + qt_Material.diffuse.rgb * + diffuseFactor * + qt_Material.brightness; + } + + // Add specular component to it + const vec3 blackColor = vec3(c_zero, c_zero, c_zero); + if( !(qt_Material.specular.rgb == blackColor || qt_Light.specular.rgb == blackColor || qt_Material.specularPower == c_zero) ) + { + vec4 viewDir = vec4( normalize(qt_Light.eye), 0.0 ); + vec4 reflectionVec = reflect(lightDir, normal); + float specularFactor = max( c_zero, dot(reflectionVec, -viewDir) ); + if(specularFactor > c_zero) + { + specularFactor = pow( specularFactor, qt_Material.specularPower ); + finalColor += qt_Light.specular.rgb * + qt_Material.specular.rgb * + specularFactor; + } + } + + // All done! + return vec4( finalColor, qt_Material.opacity ); +} + + +float linearizeDepth(float depth) +{ + float z = depth * 2.0 - 1.0; // Back to NDC + return (2.0 * c_zNear * c_ZFar) / (c_ZFar + c_zNear - z * (c_ZFar - c_zNear)); +} + +float evaluateShadow(in vec4 shadowPos) +{ + vec3 shadowCoords = shadowPos.xyz / shadowPos.w; + shadowCoords = shadowCoords * c_half + c_half; + if(shadowCoords.z > c_one) + return c_one; + + float currentDepth = shadowPos.z; + + float shadow = c_zero; + const int sampleRange = 2; + const float nrSamples = (2.0*float(sampleRange) + 1.0)*(2.0*float(sampleRange) + 1.0); + for(int x=-sampleRange; x<=sampleRange; x++) + { + for(int y=-sampleRange; y<=sampleRange; y++) + { + vec2 pcfCoords = shadowCoords.xy + vec2(x,y)*texelSize; + float pcfDepth = linearizeDepth( texture2D(qt_ShadowMap, pcfCoords).r ); + shadow += (currentDepth < pcfDepth) ? c_one : c_half; + } + } + + shadow /= nrSamples; + + return shadow; +} + +void main(void) +{ + vec4 lmColor = evaluateLightMaterialColor(v_Normal); + if(qt_ShadowEnabled == true) + { + float shadow = evaluateShadow(v_ShadowPosition); + gl_FragColor = vec4(lmColor.xyz * shadow, qt_Material.opacity); + } + else + gl_FragColor = lmColor; +} + diff --git a/shaders/scene.vert b/shaders/scene.vert new file mode 100644 index 00000000..7bcdf275 --- /dev/null +++ b/shaders/scene.vert @@ -0,0 +1,23 @@ +#version 110 +/* + * This file follow the Stackoverflow content license: CC BY-SA 4.0, + * since it's based on Prashanth N Udupa's work: https://stackoverflow.com/questions/35134270/how-to-use-qopenglframebufferobject-for-shadow-mapping +*/ +attribute vec4 qt_Vertex; +attribute vec4 qt_Normal; + +uniform mat4 qt_NormalMatrix; +uniform mat4 qt_LightViewProjectionMatrix; +uniform mat4 qt_ModelViewProjectionMatrix; + +varying vec4 v_Normal; +varying vec4 v_ShadowPosition; + +void main(void) +{ + v_Normal = normalize(qt_NormalMatrix * qt_Normal); + v_ShadowPosition = qt_LightViewProjectionMatrix * vec4(qt_Vertex.xyz, 1.0); + + gl_Position = qt_ModelViewProjectionMatrix * qt_Vertex; +} + diff --git a/shaders/shadow.frag b/shaders/shadow.frag new file mode 100644 index 00000000..aab05e8b --- /dev/null +++ b/shaders/shadow.frag @@ -0,0 +1,10 @@ +#version 110 +/* + * This file follow the Stackoverflow content license: CC BY-SA 4.0, + * since it's based on Prashanth N Udupa's work: https://stackoverflow.com/questions/35134270/how-to-use-qopenglframebufferobject-for-shadow-mapping +*/ +void main(void) +{ + gl_FragDepth = gl_FragCoord.z; +} + diff --git a/shaders/shadow.vert b/shaders/shadow.vert new file mode 100644 index 00000000..0a36110b --- /dev/null +++ b/shaders/shadow.vert @@ -0,0 +1,14 @@ +#version 110 +/* + * This file follow the Stackoverflow content license: CC BY-SA 4.0, + * since it's based on Prashanth N Udupa's work: https://stackoverflow.com/questions/35134270/how-to-use-qopenglframebufferobject-for-shadow-mapping +*/ +attribute vec3 qt_Vertex; +uniform mat4 qt_LightViewProjectionMatrix; +const float c_one = 1.0; + +void main(void) +{ + gl_Position = qt_LightViewProjectionMatrix * vec4(qt_Vertex, c_one); +} + diff --git a/src/animalposer.cpp b/src/animalposer.cpp deleted file mode 100644 index a445c120..00000000 --- a/src/animalposer.cpp +++ /dev/null @@ -1,222 +0,0 @@ -#include -#include -#include "animalposer.h" -#include "util.h" - -AnimalPoser::AnimalPoser(const std::vector &bones) : - Poser(bones) -{ -} - -void AnimalPoser::resolveTransform() -{ - std::map> chains; - std::vector boneNames; - for (const auto &item: parameters()) { - boneNames.push_back(item.first); - } - Poser::fetchChains(boneNames, chains); - for (auto &chain: chains) { - resolveChainRotation(chain.second); - } - - float mostBottomYBeforeTransform = std::numeric_limits::max(); - for (const auto &bone: bones()) { - if (bone.tailPosition.y() < mostBottomYBeforeTransform) - mostBottomYBeforeTransform = bone.tailPosition.y(); - } - - auto transformedJointNodeTree = m_jointNodeTree; - transformedJointNodeTree.recalculateTransformMatrices(); - float mostBottomYAfterTransform = std::numeric_limits::max(); - for (int i = 0; i < (int)transformedJointNodeTree.nodes().size(); ++i) { - const auto &bone = bones()[i]; - const auto &jointNode = transformedJointNodeTree.nodes()[i]; - QVector3D newPosition = jointNode.transformMatrix * bone.tailPosition; - if (newPosition.y() < mostBottomYAfterTransform) - mostBottomYAfterTransform = newPosition.y(); - } - float translateY = mostBottomYBeforeTransform - mostBottomYAfterTransform; - - if (!qFuzzyIsNull(translateY)) { - int rootBoneIndex = findBoneIndex(Rigger::rootBoneName); - if (-1 == rootBoneIndex) { - qDebug() << "Find root bone failed:" << Rigger::rootBoneName; - return; - } - m_jointNodeTree.addTranslation(rootBoneIndex, QVector3D(0, translateY * m_yTranslationScale, 0)); - } -} - -std::pair AnimalPoser::findQVector3DFromMap(const std::map &map, const QString &xName, const QString &yName, const QString &zName) -{ - auto findXResult = map.find(xName); - auto findYResult = map.find(yName); - auto findZResult = map.find(zName); - if (findXResult == map.end() && - findYResult == map.end() && - findZResult == map.end()) { - return {false, QVector3D()}; - } - return {true, { - valueOfKeyInMapOrEmpty(map, xName).toFloat(), - valueOfKeyInMapOrEmpty(map, yName).toFloat(), - valueOfKeyInMapOrEmpty(map, zName).toFloat() - }}; -} - -std::pair> AnimalPoser::findBonePositionsFromParameters(const std::map &map) -{ - auto findBoneStartResult = findQVector3DFromMap(map, "fromX", "fromY", "fromZ"); - auto findBoneStopResult = findQVector3DFromMap(map, "toX", "toY", "toZ"); - - if (!findBoneStartResult.first || !findBoneStopResult.first) - return {false, {QVector3D(), QVector3D()}}; - - return {true, {findBoneStartResult.second, findBoneStopResult.second}}; -} - -void AnimalPoser::resolveChainRotation(const std::vector &limbBoneNames) -{ - std::vector rotationsForEndEffector; - size_t endEffectorStart = 0; - - // We match the poses by the distance and rotation plane - if (limbBoneNames.size() >= 2) { - endEffectorStart = 2; - - const auto &beginBoneName = limbBoneNames[0]; - const auto &middleBoneName = limbBoneNames[1]; - - const auto &beginBoneParameters = parameters().find(beginBoneName); - if (beginBoneParameters == parameters().end()) { - qDebug() << beginBoneName << "'s parameters not found"; - return; - } - - auto matchBeginBonePositions = findBonePositionsFromParameters(beginBoneParameters->second); - if (!matchBeginBonePositions.first) { - qDebug() << beginBoneName << "'s positions not found"; - return; - } - - const auto &middleBoneParameters = parameters().find(middleBoneName); - if (middleBoneParameters == parameters().end()) { - qDebug() << middleBoneName << "'s parameters not found"; - return; - } - - auto matchMiddleBonePositions = findBonePositionsFromParameters(middleBoneParameters->second); - if (!matchMiddleBonePositions.first) { - qDebug() << middleBoneName << "'s positions not found"; - return; - } - - float matchBeginBoneLength = (matchBeginBonePositions.second.first - matchBeginBonePositions.second.second).length(); - float matchMiddleBoneLength = (matchMiddleBonePositions.second.first - matchMiddleBonePositions.second.second).length(); - float matchLimbLength = matchBeginBoneLength + matchMiddleBoneLength; - - auto matchDistanceBetweenBeginAndEndBones = (matchBeginBonePositions.second.first - matchMiddleBonePositions.second.second).length(); - auto matchRotatePlaneNormal = QVector3D::crossProduct((matchBeginBonePositions.second.second - matchBeginBonePositions.second.first).normalized(), (matchMiddleBonePositions.second.second - matchBeginBonePositions.second.second).normalized()); - - auto matchDirectionBetweenBeginAndEndPones = (matchMiddleBonePositions.second.second - matchBeginBonePositions.second.first).normalized(); - - int beginBoneIndex = findBoneIndex(beginBoneName); - if (-1 == beginBoneIndex) { - qDebug() << beginBoneName << "not found in rigged bones"; - return; - } - const auto &beginBone = bones()[beginBoneIndex]; - - int middleBoneIndex = findBoneIndex(middleBoneName); - if (-1 == middleBoneIndex) { - qDebug() << middleBoneName << "not found in rigged bones"; - return; - } - const auto &middleBone = bones()[middleBoneIndex]; - - float targetBeginBoneLength = (beginBone.headPosition - beginBone.tailPosition).length(); - float targetMiddleBoneLength = (middleBone.headPosition - middleBone.tailPosition).length(); - float targetLimbLength = targetBeginBoneLength + targetMiddleBoneLength; - - float targetDistanceBetweenBeginAndEndBones = matchDistanceBetweenBeginAndEndBones * (targetLimbLength / matchLimbLength); - QVector3D targetEndBoneStartPosition = beginBone.headPosition + matchDirectionBetweenBeginAndEndPones * targetDistanceBetweenBeginAndEndBones; - - float angleBetweenDistanceAndMiddleBones = 0; - { - const float &a = targetMiddleBoneLength; - const float &b = targetDistanceBetweenBeginAndEndBones; - const float &c = targetBeginBoneLength; - double cosC = (a*a + b*b - c*c) / (2.0*a*b); - angleBetweenDistanceAndMiddleBones = qRadiansToDegrees(acos(cosC)); - if (std::isnan(angleBetweenDistanceAndMiddleBones) || std::isinf(angleBetweenDistanceAndMiddleBones)) - angleBetweenDistanceAndMiddleBones = 0; - } - - QVector3D targetMiddleBoneStartPosition; - { - //qDebug() << beginBoneName << "Angle:" << angleBetweenDistanceAndMiddleBones << "Distance:" << targetDistanceBetweenBeginAndEndBones; - auto rotation = QQuaternion::fromAxisAndAngle(matchRotatePlaneNormal, angleBetweenDistanceAndMiddleBones); - targetMiddleBoneStartPosition = targetEndBoneStartPosition + rotation.rotatedVector(-matchDirectionBetweenBeginAndEndPones).normalized() * targetMiddleBoneLength; - } - - // Now the bones' positions have been resolved, we calculate the rotation - - auto oldBeginBoneDirection = (beginBone.tailPosition - beginBone.headPosition).normalized(); - auto newBeginBoneDirection = (targetMiddleBoneStartPosition - beginBone.headPosition).normalized(); - //qDebug() << beginBoneName << "oldBeginBoneDirection:" << oldBeginBoneDirection << "newBeginBoneDirection:" << newBeginBoneDirection; - auto beginBoneRotation = QQuaternion::rotationTo(oldBeginBoneDirection, newBeginBoneDirection); - m_jointNodeTree.updateRotation(beginBoneIndex, beginBoneRotation); - - auto oldMiddleBoneDirection = (middleBone.tailPosition - middleBone.headPosition).normalized(); - auto newMiddleBoneDirection = (targetEndBoneStartPosition - targetMiddleBoneStartPosition).normalized(); - //qDebug() << beginBoneName << "oldMiddleBoneDirection:" << oldMiddleBoneDirection << "newMiddleBoneDirection:" << newMiddleBoneDirection; - oldMiddleBoneDirection = beginBoneRotation.rotatedVector(oldMiddleBoneDirection); - //qDebug() << beginBoneName << "oldMiddleBoneDirection:" << oldMiddleBoneDirection << "after rotation"; - auto middleBoneRotation = QQuaternion::rotationTo(oldMiddleBoneDirection, newMiddleBoneDirection); - m_jointNodeTree.updateRotation(middleBoneIndex, middleBoneRotation); - - rotationsForEndEffector.push_back(beginBoneRotation); - rotationsForEndEffector.push_back(middleBoneRotation); - } - - // Calculate the end effectors' rotation - if (limbBoneNames.size() > endEffectorStart) { - for (size_t i = endEffectorStart; i < limbBoneNames.size(); ++i) { - const auto &boneName = limbBoneNames[i]; - int boneIndex = findBoneIndex(boneName); - if (-1 == boneIndex) { - qDebug() << "Find bone failed:" << boneName; - continue; - } - const auto &bone = bones()[boneIndex]; - const auto &boneParameters = parameters().find(boneName); - if (boneParameters == parameters().end()) { - qDebug() << "Find bone parameters:" << boneName; - continue; - } - auto matchBonePositions = findBonePositionsFromParameters(boneParameters->second); - if (!matchBonePositions.first) { - qDebug() << "Find bone positions failed:" << boneName; - continue; - } - auto matchBoneDirection = (matchBonePositions.second.second - matchBonePositions.second.first).normalized(); - auto oldBoneDirection = (bone.tailPosition - bone.headPosition).normalized(); - auto newBoneDirection = matchBoneDirection; - for (const auto &rotation: rotationsForEndEffector) { - oldBoneDirection = rotation.rotatedVector(oldBoneDirection); - } - auto boneRotation = QQuaternion::rotationTo(oldBoneDirection, newBoneDirection); - m_jointNodeTree.updateRotation(boneIndex, boneRotation); - rotationsForEndEffector.push_back(boneRotation); - } - } -} - -void AnimalPoser::commit() -{ - resolveTransform(); - - Poser::commit(); -} - diff --git a/src/animalposer.h b/src/animalposer.h deleted file mode 100644 index 45b148cc..00000000 --- a/src/animalposer.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef DUST3D_ANIMAL_POSER_H -#define DUST3D_ANIMAL_POSER_H -#include -#include "poser.h" - -class AnimalPoser : public Poser -{ - Q_OBJECT -public: - AnimalPoser(const std::vector &bones); - void commit() override; - -private: - void resolveTransform(); - void resolveChainRotation(const std::vector &limbBoneNames); - std::pair findQVector3DFromMap(const std::map &map, const QString &xName, const QString &yName, const QString &zName); - std::pair> findBonePositionsFromParameters(const std::map &map); -}; - -#endif diff --git a/src/animationclipplayer.cpp b/src/animationclipplayer.cpp deleted file mode 100644 index 88fb6fdf..00000000 --- a/src/animationclipplayer.cpp +++ /dev/null @@ -1,75 +0,0 @@ -#include "animationclipplayer.h" - -AnimationClipPlayer::~AnimationClipPlayer() -{ - clear(); -} - -void AnimationClipPlayer::setSpeedMode(SpeedMode speedMode) -{ - m_speedMode = speedMode; -} - -void AnimationClipPlayer::updateFrameMeshes(std::vector> &frameMeshes) -{ - clear(); - - m_frameMeshes = frameMeshes; - frameMeshes.clear(); - - m_currentPlayIndex = 0; - m_countForFrame.restart(); - - if (!m_frameMeshes.empty()) - m_timerForFrame.singleShot(0, this, &AnimationClipPlayer::frameReadyToShow); -} - -void AnimationClipPlayer::clear() -{ - freeFrames(); - delete m_lastFrameMesh; - m_lastFrameMesh = nullptr; -} - -void AnimationClipPlayer::freeFrames() -{ - for (auto &it: m_frameMeshes) { - delete it.second; - } - m_frameMeshes.clear(); -} - -int AnimationClipPlayer::getFrameDurationMillis(int frame) -{ - int millis = m_frameMeshes[frame].first * 1000; - if (SpeedMode::Slow == m_speedMode) { - millis *= 2; - } else if (SpeedMode::Fast == m_speedMode) { - millis /= 2; - } - return millis; -} - -Model *AnimationClipPlayer::takeFrameMesh() -{ - if (m_currentPlayIndex >= (int)m_frameMeshes.size()) { - if (nullptr != m_lastFrameMesh) - return new Model(*m_lastFrameMesh); - return nullptr; - } - int millis = getFrameDurationMillis(m_currentPlayIndex) - m_countForFrame.elapsed(); - if (millis > 0) { - m_timerForFrame.singleShot(millis, this, &AnimationClipPlayer::frameReadyToShow); - if (nullptr != m_lastFrameMesh) - return new Model(*m_lastFrameMesh); - return nullptr; - } - m_currentPlayIndex = (m_currentPlayIndex + 1) % m_frameMeshes.size(); - m_countForFrame.restart(); - - Model *mesh = new Model(*m_frameMeshes[m_currentPlayIndex].second); - m_timerForFrame.singleShot(getFrameDurationMillis(m_currentPlayIndex), this, &AnimationClipPlayer::frameReadyToShow); - delete m_lastFrameMesh; - m_lastFrameMesh = new Model(*mesh); - return mesh; -} diff --git a/src/animationclipplayer.h b/src/animationclipplayer.h deleted file mode 100644 index 150d93cc..00000000 --- a/src/animationclipplayer.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef DUST3D_ANIMATION_PLAYER_H -#define DUST3D_ANIMATION_PLAYER_H -#include -#include -#include -#include "model.h" - -class AnimationClipPlayer : public QObject -{ - Q_OBJECT - -signals: - void frameReadyToShow(); - -public: - enum class SpeedMode - { - Slow, - Normal, - Fast - }; - - ~AnimationClipPlayer(); - Model *takeFrameMesh(); - void updateFrameMeshes(std::vector> &frameMeshes); - void clear(); - -public slots: - void setSpeedMode(SpeedMode speedMode); - -private: - void freeFrames(); - int getFrameDurationMillis(int frame); - - Model *m_lastFrameMesh = nullptr; - int m_currentPlayIndex = 0; - std::vector> m_frameMeshes; - QTime m_countForFrame; - QTimer m_timerForFrame; - SpeedMode m_speedMode = SpeedMode::Normal; -}; - -#endif diff --git a/src/blockmesh.cpp b/src/blockmesh.cpp new file mode 100644 index 00000000..02401d65 --- /dev/null +++ b/src/blockmesh.cpp @@ -0,0 +1,86 @@ +#include "blockmesh.h" + +std::vector BlockMesh::buildFace(const QVector3D &origin, + const QVector3D &faceNormal, + const QVector3D &startDirection, + double radius) +{ + std::vector face; + face.push_back(m_resultVertices->size() + 0); + face.push_back(m_resultVertices->size() + 1); + face.push_back(m_resultVertices->size() + 2); + face.push_back(m_resultVertices->size() + 3); + + auto upDirection = QVector3D::crossProduct(startDirection, faceNormal); + + m_resultVertices->push_back(origin + startDirection * radius); + m_resultVertices->push_back(origin - upDirection * radius); + m_resultVertices->push_back(origin - startDirection * radius); + m_resultVertices->push_back(origin + upDirection * radius); + + return face; +} + +QVector3D BlockMesh::calculateStartDirection(const QVector3D &direction) +{ + const std::vector axisList = { + QVector3D {1, 0, 0}, + QVector3D {0, 1, 0}, + QVector3D {0, 0, 1}, + }; + float maxDot = -1; + size_t nearAxisIndex = 0; + bool reversed = false; + for (size_t i = 0; i < axisList.size(); ++i) { + const auto axis = axisList[i]; + auto dot = QVector3D::dotProduct(axis, direction); + auto positiveDot = std::abs(dot); + if (positiveDot >= maxDot) { + reversed = dot < 0; + maxDot = positiveDot; + nearAxisIndex = i; + } + } + const auto& choosenAxis = axisList[(nearAxisIndex + 1) % 3]; + auto startDirection = QVector3D::crossProduct(direction, choosenAxis).normalized(); + return reversed ? -startDirection : startDirection; +} + +void BlockMesh::buildBlock(const Block &block) +{ + QVector3D fromFaceNormal = (block.toPosition - block.fromPosition).normalized(); + QVector3D startDirection = calculateStartDirection(-fromFaceNormal); + std::vector fromFaces = buildFace(block.fromPosition, + -fromFaceNormal, startDirection, block.fromRadius); + std::vector toFaces = buildFace(block.toPosition, + -fromFaceNormal, startDirection, block.toRadius); + + m_resultQuads->push_back(fromFaces); + for (size_t i = 0; i < fromFaces.size(); ++i) { + size_t j = (i + 1) % fromFaces.size(); + m_resultQuads->push_back({fromFaces[j], fromFaces[i], toFaces[i], toFaces[j]}); + } + std::reverse(toFaces.begin(), toFaces.end()); + m_resultQuads->push_back(toFaces); +} + +void BlockMesh::build() +{ + delete m_resultVertices; + m_resultVertices = new std::vector; + + delete m_resultQuads; + m_resultQuads = new std::vector>; + + for (const auto &block: m_blocks) + buildBlock(block); + + delete m_resultFaces; + m_resultFaces = new std::vector>; + m_resultFaces->reserve(m_resultQuads->size() * 2); + for (const auto &quad: *m_resultQuads) { + m_resultFaces->push_back({quad[0], quad[1], quad[2]}); + m_resultFaces->push_back({quad[2], quad[3], quad[0]}); + } +} + diff --git a/src/blockmesh.h b/src/blockmesh.h new file mode 100644 index 00000000..59e16108 --- /dev/null +++ b/src/blockmesh.h @@ -0,0 +1,69 @@ +#ifndef DUST3D_BLOCK_MESH_H +#define DUST3D_BLOCK_MESH_H +#include +#include + +class BlockMesh +{ +public: + struct Block + { + QVector3D fromPosition; + double fromRadius; + QVector3D toPosition; + double toRadius; + }; + + BlockMesh() + { + } + + ~BlockMesh() + { + delete m_resultVertices; + delete m_resultQuads; + delete m_resultFaces; + } + + std::vector *takeResultVertices() + { + std::vector *resultVertices = m_resultVertices; + m_resultVertices = nullptr; + return resultVertices; + } + + std::vector> *takeResultFaces() + { + std::vector> *resultFaces = m_resultFaces; + m_resultFaces = nullptr; + return resultFaces; + } + + void addBlock(const QVector3D &fromPosition, double fromRadius, const QVector3D &toPosition, double toRadius) + { + Block block; + block.fromPosition = fromPosition; + block.fromRadius = fromRadius; + block.toPosition = toPosition; + block.toRadius = toRadius; + + m_blocks.push_back(block); + } + + void build(); + +private: + std::vector *m_resultVertices = nullptr; + std::vector> *m_resultFaces = nullptr; + std::vector> *m_resultQuads = nullptr; + std::vector m_blocks; + + void buildBlock(const Block &block); + std::vector buildFace(const QVector3D &origin, + const QVector3D &faceNormal, + const QVector3D &startDirection, + double radius); + QVector3D calculateStartDirection(const QVector3D &direction); +}; + +#endif diff --git a/src/ccdikresolver.cpp b/src/ccdikresolver.cpp index 3cfa488d..5dced042 100644 --- a/src/ccdikresolver.cpp +++ b/src/ccdikresolver.cpp @@ -2,36 +2,48 @@ #include #include #include +#include #include "ccdikresolver.h" #include "util.h" -CCDIKSolver::CCDIKSolver() : - m_maxRound(4), - m_distanceThreshold2(0.001 * 0.001), - m_distanceCeaseThreshold2(0.001 * 0.001) +CcdIkSolver::CcdIkSolver() { } -void CCDIKSolver::setMaxRound(int maxRound) +void CcdIkSolver::setSolveFrom(int fromNodeIndex) +{ + m_fromNodeIndex = fromNodeIndex; +} + +void CcdIkSolver::setNodeHingeConstraint(int nodeIndex, + const QVector3D &axis, double minLimitDegrees, double maxLimitDegrees) +{ + auto &node = m_nodes[nodeIndex]; + node.axis = axis; + node.minLimitDegrees = minLimitDegrees; + node.maxLimitDegrees = maxLimitDegrees; +} + +void CcdIkSolver::setMaxRound(int maxRound) { m_maxRound = maxRound; } -void CCDIKSolver::setDistanceThreshod(float threshold) +void CcdIkSolver::setDistanceThreshod(float threshold) { m_distanceThreshold2 = threshold * threshold; } -int CCDIKSolver::addNodeInOrder(const QVector3D &position) +int CcdIkSolver::addNodeInOrder(const QVector3D &position) { - CCDIKNode node; + CcdIkNode node; node.position = position; int nodeCount = m_nodes.size(); m_nodes.push_back(node); return nodeCount; } -void CCDIKSolver::solveTo(const QVector3D &position) +void CcdIkSolver::solveTo(const QVector3D &position) { //qDebug() << "solveTo:" << position; m_destination = position; @@ -49,29 +61,61 @@ void CCDIKSolver::solveTo(const QVector3D &position) } } -const QVector3D &CCDIKSolver::getNodeSolvedPosition(int index) +const QVector3D &CcdIkSolver::getNodeSolvedPosition(int index) { Q_ASSERT(index >= 0 && index < (int)m_nodes.size()); return m_nodes[index].position; } -int CCDIKSolver::getNodeCount(void) +int CcdIkSolver::getNodeCount() { - return m_nodes.size(); + return (int)m_nodes.size(); } -void CCDIKSolver::iterate() +void CcdIkSolver::iterate() { - for (int i = m_nodes.size() - 2; i >= 0; i--) { + auto rotateChildren = [&](const QQuaternion &quaternion, int i) { const auto &origin = m_nodes[i]; - const auto &endEffector = m_nodes[m_nodes.size() - 1]; - QVector3D from = (endEffector.position - origin.position).normalized(); - QVector3D to = (m_destination - origin.position).normalized(); - auto quaternion = QQuaternion::rotationTo(from, to); for (size_t j = i + 1; j <= m_nodes.size() - 1; j++) { auto &next = m_nodes[j]; const auto offset = next.position - origin.position; next.position = origin.position + quaternion.rotatedVector(offset); } + }; + + for (int i = m_nodes.size() - 2; i >= m_fromNodeIndex; i--) { + const auto &origin = m_nodes[i]; + const auto &endEffector = m_nodes[m_nodes.size() - 1]; + QVector3D from = (endEffector.position - origin.position).normalized(); + QVector3D to = (m_destination - origin.position).normalized(); + auto quaternion = QQuaternion::rotationTo(from, to); + rotateChildren(quaternion, i); + if (origin.axis.isNull()) + continue; + QVector3D oldAxis = origin.axis; + QVector3D newAxis = quaternion.rotatedVector(oldAxis); + auto hingQuaternion = QQuaternion::rotationTo(newAxis, oldAxis); + rotateChildren(hingQuaternion, i); + // TODO: Support angle limit for other axis + int parentIndex = i - 1; + if (parentIndex < 0) + continue; + int childIndex = i + 1; + if (childIndex >= m_nodes.size()) + continue; + const auto &parent = m_nodes[parentIndex]; + const auto &child = m_nodes[childIndex]; + QVector3D angleFrom = (QVector3D(0.0, parent.position.y(), parent.position.z()) - + QVector3D(0.0, origin.position.y(), origin.position.z())).normalized(); + QVector3D angleTo = (QVector3D(0.0, child.position.y(), child.position.z()) - + QVector3D(0.0, origin.position.y(), origin.position.z())).normalized(); + float degrees = angleInRangle360BetweenTwoVectors(angleFrom, angleTo, QVector3D(1.0, 0.0, 0.0)); + if (degrees < origin.minLimitDegrees) { + auto quaternion = QQuaternion::fromAxisAndAngle(QVector3D(1.0, 0.0, 0.0), origin.minLimitDegrees - degrees); + rotateChildren(quaternion, i); + } else if (degrees > origin.maxLimitDegrees) { + auto quaternion = QQuaternion::fromAxisAndAngle(QVector3D(-1.0, 0.0, 0.0), degrees - origin.maxLimitDegrees); + rotateChildren(quaternion, i); + } } } diff --git a/src/ccdikresolver.h b/src/ccdikresolver.h index e4807248..f6955d0d 100644 --- a/src/ccdikresolver.h +++ b/src/ccdikresolver.h @@ -4,29 +4,36 @@ #include #include -struct CCDIKNode +struct CcdIkNode { QVector3D position; + QVector3D axis; + double minLimitDegrees; + double maxLimitDegrees; }; -class CCDIKSolver +class CcdIkSolver { public: - CCDIKSolver(); + CcdIkSolver(); void setMaxRound(int maxRound); void setDistanceThreshod(float threshold); int addNodeInOrder(const QVector3D &position); void solveTo(const QVector3D &position); const QVector3D &getNodeSolvedPosition(int index); - int getNodeCount(void); + int getNodeCount(); + void setNodeHingeConstraint(int nodeIndex, + const QVector3D &axis, double minLimitDegrees, double maxLimitDegrees); + void setSolveFrom(int fromNodeIndex); private: void iterate(); private: - std::vector m_nodes; + std::vector m_nodes; QVector3D m_destination; - int m_maxRound; - float m_distanceThreshold2; - float m_distanceCeaseThreshold2; + int m_maxRound = 4; + float m_distanceThreshold2 = 0.001 * 0.001; + float m_distanceCeaseThreshold2 = 0.001 * 0.001; + int m_fromNodeIndex = 0; }; #endif diff --git a/src/chainsimulator.cpp b/src/chainsimulator.cpp new file mode 100644 index 00000000..24b65858 --- /dev/null +++ b/src/chainsimulator.cpp @@ -0,0 +1,117 @@ +#include +#include +#include +#include +#include "chainsimulator.h" + +void ChainSimulator::prepareChains() +{ + for (size_t i = 1; i < m_vertices->size(); ++i) { + size_t h = i - 1; + m_chains.push_back({h, i, + ((*m_vertices)[h] - (*m_vertices)[i]).length()}); + } +} + +void ChainSimulator::initializeVertexMotions() +{ + for (size_t i = 0; i < m_vertices->size(); ++i) + m_vertexMotions[i].position = m_vertexMotions[i].lastPosition = (*m_vertices)[i]; +} + +void ChainSimulator::outputChainsForDebug(const char *filename, const std::vector &springs) +{ + FILE *fp = fopen(filename, "wb"); + for (const auto &it: *m_vertices) { + fprintf(fp, "v %f %f %f\n", it[0], it[1], it[2]); + } + for (const auto &it: springs) { + fprintf(fp, "l %zu %zu\n", it.from + 1, it.to + 1); + } + fclose(fp); +} + +void ChainSimulator::start() +{ + initializeVertexMotions(); + prepareChains(); + + outputChainsForDebug("debug-chains.obj", m_chains); +} + +const ChainSimulator::VertexMotion &ChainSimulator::getVertexMotion(size_t vertexIndex) +{ + return m_vertexMotions[vertexIndex]; +} + +void ChainSimulator::updateVertexForces() +{ + for (auto &it: m_vertexMotions) + it.second.force = QVector3D(); + + QVector3D combinedForce = QVector3D(0.0, -9.80665, 0.0) + m_externalForce; + for (auto &it: m_vertexMotions) { + it.second.force += combinedForce; + } +} + +void ChainSimulator::doVerletIntegration(double stepSize) +{ + for (auto &it: m_vertexMotions) { + if (it.second.fixed) + continue; + QVector3D &x = it.second.position; + QVector3D temp = x; + QVector3D &oldX = it.second.lastPosition; + QVector3D a = it.second.force / m_parameters.particleMass; + x += x - oldX + a * stepSize * stepSize; + oldX = temp; + } +} + +void ChainSimulator::applyBoundingConstraints(QVector3D *position) +{ + if (position->y() < m_groundY) + position->setY(m_groundY); +} + +void ChainSimulator::applyConstraints() +{ + for (size_t iteration = 0; iteration < m_parameters.iterations; ++iteration) { + for (auto &it: m_chains) { + auto &from = m_vertexMotions[it.from]; + auto &to = m_vertexMotions[it.to]; + auto delta = from.position - to.position; + auto deltaLength = delta.length(); + if (qFuzzyIsNull(deltaLength)) + continue; + auto diff = (it.restLength - deltaLength) / deltaLength; + auto offset = delta * 0.5 * diff; + if (!from.fixed) { + from.position += offset; + applyBoundingConstraints(&from.position); + } + if (!to.fixed) { + to.position += -offset; + applyBoundingConstraints(&to.position); + } + } + } +} + +void ChainSimulator::updateVertexPosition(size_t vertexIndex, const QVector3D &position) +{ + m_vertexMotions[vertexIndex].position = position; +} + +void ChainSimulator::fixVertexPosition(size_t vertexIndex) +{ + m_vertexMotions[vertexIndex].fixed = true; +} + +void ChainSimulator::simulate(double stepSize) +{ + updateVertexForces(); + doVerletIntegration(stepSize); + applyConstraints(); +} diff --git a/src/chainsimulator.h b/src/chainsimulator.h new file mode 100644 index 00000000..ce0c28a0 --- /dev/null +++ b/src/chainsimulator.h @@ -0,0 +1,70 @@ +#ifndef DUST3D_CHAIN_SIMULATOR_H +#define DUST3D_CHAIN_SIMULATOR_H +#include +#include +#include + +class ChainSimulator +{ +public: + struct Parameters + { + double particleMass = 1; + size_t iterations = 2; + }; + + struct Chain + { + size_t from; + size_t to; + double restLength; + }; + + struct VertexMotion + { + QVector3D position; + QVector3D lastPosition; + QVector3D force; + bool fixed = false; + }; + + ChainSimulator(const std::vector *vertices) : + m_vertices(vertices) + { + } + + void setExternalForce(const QVector3D &externalForce) + { + m_externalForce = externalForce; + } + + void setGroundY(double groundY) + { + m_groundY = groundY; + } + + void start(); + void simulate(double stepSize); + const VertexMotion &getVertexMotion(size_t vertexIndex); + void updateVertexPosition(size_t vertexIndex, const QVector3D &position); + void fixVertexPosition(size_t vertexIndex); + +private: + Parameters m_parameters; + std::vector m_chains; + const std::vector *m_vertices = nullptr; + std::unordered_map m_vertexMotions; + QVector3D m_externalForce; + double m_groundY = 0.0; + + void initializeVertexMotions(); + void prepareChains(); + void updateVertexForces(); + void applyConstraints(); + void doVerletIntegration(double stepSize); + void applyBoundingConstraints(QVector3D *position); + + void outputChainsForDebug(const char *filename, const std::vector &springs); +}; + +#endif diff --git a/src/document.cpp b/src/document.cpp index 0161d42b..6a4963f9 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -67,7 +67,6 @@ Document::Document() : m_resultRigWeights(nullptr), m_isRigObsolete(false), m_riggedOutcome(new Outcome), - m_posePreviewsGenerator(nullptr), m_currentRigSucceed(false), m_materialPreviewsGenerator(nullptr), m_motionsGenerator(nullptr), @@ -470,38 +469,16 @@ QUuid Document::createNode(QUuid nodeId, float x, float y, float z, float radius return node.id; } -void Document::addPose(QUuid poseId, QString name, std::vector, std::map>>> frames, QUuid turnaroundImageId, float yTranslationScale) -{ - QUuid newPoseId = poseId; - auto &pose = poseMap[newPoseId]; - pose.id = newPoseId; - - pose.name = name; - pose.frames = frames; - pose.turnaroundImageId = turnaroundImageId; - pose.yTranslationScale = yTranslationScale; - pose.dirty = true; - - poseIdList.push_back(newPoseId); - - emit posesChanged(); - emit poseAdded(newPoseId); - emit poseListChanged(); - emit optionsChanged(); -} - -void Document::addMotion(QUuid motionId, QString name, std::vector clips) +void Document::addMotion(QUuid motionId, QString name, std::map parameters) { QUuid newMotionId = motionId; auto &motion = motionMap[newMotionId]; motion.id = newMotionId; motion.name = name; - motion.clips = clips; + motion.parameters = parameters; motion.dirty = true; - motionIdList.push_back(newMotionId); - emit motionsChanged(); emit motionAdded(newMotionId); emit motionListChanged(); @@ -515,7 +492,6 @@ void Document::removeMotion(QUuid motionId) qDebug() << "Remove a none exist motion:" << motionId; return; } - motionIdList.erase(std::remove(motionIdList.begin(), motionIdList.end(), motionId), motionIdList.end()); motionMap.erase(findMotionResult); emit motionsChanged(); emit motionListChanged(); @@ -523,17 +499,17 @@ void Document::removeMotion(QUuid motionId) emit optionsChanged(); } -void Document::setMotionClips(QUuid motionId, std::vector clips) +void Document::setMotionParameters(QUuid motionId, std::map parameters) { auto findMotionResult = motionMap.find(motionId); if (findMotionResult == motionMap.end()) { qDebug() << "Find motion failed:" << motionId; return; } - findMotionResult->second.clips = clips; + findMotionResult->second.parameters = parameters; findMotionResult->second.dirty = true; emit motionsChanged(); - emit motionClipsChanged(motionId); + emit motionParametersChanged(motionId); emit optionsChanged(); } @@ -553,92 +529,6 @@ void Document::renameMotion(QUuid motionId, QString name) emit optionsChanged(); } -void Document::removePose(QUuid poseId) -{ - auto findPoseResult = poseMap.find(poseId); - if (findPoseResult == poseMap.end()) { - qDebug() << "Remove a none exist pose:" << poseId; - return; - } - poseIdList.erase(std::remove(poseIdList.begin(), poseIdList.end(), poseId), poseIdList.end()); - poseMap.erase(findPoseResult); - emit posesChanged(); - emit poseListChanged(); - emit poseRemoved(poseId); - emit optionsChanged(); -} - -void Document::setPoseFrames(QUuid poseId, std::vector, std::map>>> frames) -{ - auto findPoseResult = poseMap.find(poseId); - if (findPoseResult == poseMap.end()) { - qDebug() << "Find pose failed:" << poseId; - return; - } - findPoseResult->second.frames = frames; - findPoseResult->second.dirty = true; - bool foundMotion = false; - for (auto &it: motionMap) { - for (const auto &clip: it.second.clips) { - if (poseId == clip.linkToId) { - it.second.dirty = true; - foundMotion = true; - break; - } - } - } - emit posesChanged(); - emit poseFramesChanged(poseId); - emit optionsChanged(); - if (foundMotion) { - emit motionsChanged(); - } -} - -void Document::setPoseTurnaroundImageId(QUuid poseId, QUuid imageId) -{ - auto findPoseResult = poseMap.find(poseId); - if (findPoseResult == poseMap.end()) { - qDebug() << "Find pose failed:" << poseId; - return; - } - if (findPoseResult->second.turnaroundImageId == imageId) - return; - findPoseResult->second.turnaroundImageId = imageId; - findPoseResult->second.dirty = true; - emit poseTurnaroundImageIdChanged(poseId); - emit optionsChanged(); -} - -void Document::setPoseYtranslationScale(QUuid poseId, float scale) -{ - auto findPoseResult = poseMap.find(poseId); - if (findPoseResult == poseMap.end()) { - qDebug() << "Find pose failed:" << poseId; - return; - } - findPoseResult->second.yTranslationScale = scale; - findPoseResult->second.dirty = true; - emit poseYtranslationScaleChanged(poseId); - emit optionsChanged(); -} - -void Document::renamePose(QUuid poseId, QString name) -{ - auto findPoseResult = poseMap.find(poseId); - if (findPoseResult == poseMap.end()) { - qDebug() << "Find pose failed:" << poseId; - return; - } - if (findPoseResult->second.name == name) - return; - - findPoseResult->second.name = name; - emit poseNameChanged(poseId); - emit poseListChanged(); - emit optionsChanged(); -} - bool Document::originSettled() const { return !qFuzzyIsNull(getOriginX()) && !qFuzzyIsNull(getOriginY()) && !qFuzzyIsNull(getOriginZ()); @@ -786,14 +676,6 @@ const Component *Document::findComponent(QUuid componentId) const return &it->second; } -const Pose *Document::findPose(QUuid poseId) const -{ - auto it = poseMap.find(poseId); - if (it == poseMap.end()) - return nullptr; - return &it->second; -} - const Material *Document::findMaterial(QUuid materialId) const { auto it = materialMap.find(materialId); @@ -1143,7 +1025,6 @@ void Document::markAllDirty() void Document::toSnapshot(Snapshot *snapshot, const std::set &limitNodeIds, DocumentToSnapshotFor forWhat, - const std::set &limitPoseIds, const std::set &limitMotionIds, const std::set &limitMaterialIds) const { @@ -1359,52 +1240,16 @@ void Document::toSnapshot(Snapshot *snapshot, const std::set &limitNodeId snapshot->materials.push_back(std::make_pair(material, layers)); } } - if (DocumentToSnapshotFor::Document == forWhat || - DocumentToSnapshotFor::Poses == forWhat) { - for (const auto &poseId: poseIdList) { - if (!limitPoseIds.empty() && limitPoseIds.find(poseId) == limitPoseIds.end()) - continue; - auto findPoseResult = poseMap.find(poseId); - if (findPoseResult == poseMap.end()) { - qDebug() << "Find pose failed:" << poseId; - continue; - } - auto &poseIt = *findPoseResult; - std::map pose; - pose["id"] = poseIt.second.id.toString(); - if (!poseIt.second.name.isEmpty()) - pose["name"] = poseIt.second.name; - if (!poseIt.second.turnaroundImageId.isNull()) - pose["canvasImageId"] = poseIt.second.turnaroundImageId.toString(); - if (poseIt.second.yTranslationScaleAdjusted()) - pose["yTranslationScale"] = QString::number(poseIt.second.yTranslationScale); - snapshot->poses.push_back(std::make_pair(pose, poseIt.second.frames)); - } - } if (DocumentToSnapshotFor::Document == forWhat || DocumentToSnapshotFor::Motions == forWhat) { - for (const auto &motionId: motionIdList) { - if (!limitMotionIds.empty() && limitMotionIds.find(motionId) == limitMotionIds.end()) + for (const auto &motionIt: motionMap) { + if (!limitMotionIds.empty() && limitMotionIds.find(motionIt.first) == limitMotionIds.end()) continue; - auto findMotionResult = motionMap.find(motionId); - if (findMotionResult == motionMap.end()) { - qDebug() << "Find motion failed:" << motionId; - continue; - } - auto &motionIt = *findMotionResult; - std::map motion; + std::map motion = motionIt.second.parameters; motion["id"] = motionIt.second.id.toString(); if (!motionIt.second.name.isEmpty()) motion["name"] = motionIt.second.name; - std::vector> clips; - for (const auto &clip: motionIt.second.clips) { - std::map attributes; - attributes["duration"] = QString::number(clip.duration); - attributes["linkDataType"] = clip.linkDataType(); - attributes["linkData"] = clip.linkData(); - clips.push_back(attributes); - } - snapshot->motions.push_back(std::make_pair(motion, clips)); + snapshot->motions[motion["id"]] = motion; } } if (DocumentToSnapshotFor::Document == forWhat) { @@ -1815,45 +1660,14 @@ void Document::addFromSnapshot(const Snapshot &snapshot, enum SnapshotSource sou componentMap[childComponentId].parentId = componentId; } } - for (const auto &poseIt: snapshot.poses) { - QUuid newPoseId = QUuid::createUuid(); - auto &newPose = poseMap[newPoseId]; - newPose.id = newPoseId; - const auto &poseAttributes = poseIt.first; - newPose.name = valueOfKeyInMapOrEmpty(poseAttributes, "name"); - auto findCanvasImageId = poseAttributes.find("canvasImageId"); - if (findCanvasImageId != poseAttributes.end()) - newPose.turnaroundImageId = QUuid(findCanvasImageId->second); - auto findYtranslationScale = poseAttributes.find("yTranslationScale"); - if (findYtranslationScale != poseAttributes.end()) - newPose.yTranslationScale = findYtranslationScale->second.toFloat(); - newPose.frames = poseIt.second; - oldNewIdMap[QUuid(valueOfKeyInMapOrEmpty(poseAttributes, "id"))] = newPoseId; - poseIdList.push_back(newPoseId); - emit poseAdded(newPoseId); - } - for (const auto &motionIt: snapshot.motions) { + for (const auto &motionKv: snapshot.motions) { + QUuid oldMotionId = QUuid(motionKv.first); QUuid newMotionId = QUuid::createUuid(); - auto &newMotion = motionMap[newMotionId]; - newMotion.id = newMotionId; - const auto &motionAttributes = motionIt.first; - newMotion.name = valueOfKeyInMapOrEmpty(motionAttributes, "name"); - for (const auto &attributes: motionIt.second) { - auto linkData = valueOfKeyInMapOrEmpty(attributes, "linkData"); - QUuid testId = QUuid(linkData); - if (!testId.isNull()) { - auto findInOldNewIdMapResult = oldNewIdMap.find(testId); - if (findInOldNewIdMapResult != oldNewIdMap.end()) { - linkData = findInOldNewIdMapResult->second.toString(); - } - } - MotionClip clip(linkData, - valueOfKeyInMapOrEmpty(attributes, "linkDataType")); - clip.duration = valueOfKeyInMapOrEmpty(attributes, "duration").toFloat(); - newMotion.clips.push_back(clip); - } - oldNewIdMap[QUuid(valueOfKeyInMapOrEmpty(motionAttributes, "id"))] = newMotionId; - motionIdList.push_back(newMotionId); + auto &motion = motionMap[newMotionId]; + motion.id = newMotionId; + oldNewIdMap[oldMotionId] = motion.id; + motion.name = valueOfKeyInMapOrEmpty(motionKv.second, "name"); + motion.parameters = motionKv.second; emit motionAdded(newMotionId); } @@ -1889,8 +1703,6 @@ void Document::addFromSnapshot(const Snapshot &snapshot, enum SnapshotSource sou if (!snapshot.materials.empty()) emit materialListChanged(); - if (!snapshot.poses.empty()) - emit poseListChanged(); if (!snapshot.motions.empty()) emit motionListChanged(); } @@ -1907,10 +1719,7 @@ void Document::silentReset() componentMap.clear(); materialMap.clear(); materialIdList.clear(); - poseMap.clear(); - poseIdList.clear(); motionMap.clear(); - motionIdList.clear(); rootComponent = Component(); removeRigResults(); } @@ -3280,15 +3089,9 @@ void Document::saveSnapshot() QElapsedTimer elapsedTimer; elapsedTimer.start(); toSnapshot(&item.snapshot); - //item.hash = item.snapshot.hash(); - //if (!m_undoItems.empty() && item.hash == m_undoItems[m_undoItems.size() - 1].hash) { - // qDebug() << "Snapshot has the same hash:" << item.hash << "skipped"; - // return; - //} if (m_undoItems.size() + 1 > m_maxSnapshot) m_undoItems.pop_front(); m_undoItems.push_back(item); - qDebug() << "Snapshot saved with hash:" << item.hash << " Time consumed:" << elapsedTimer.elapsed() << "History count:" << m_undoItems.size(); } void Document::undo() @@ -3354,17 +3157,6 @@ bool Document::hasPastableMaterialsInClipboard() const return false; } -bool Document::hasPastablePosesInClipboard() const -{ - const QClipboard *clipboard = QApplication::clipboard(); - const QMimeData *mimeData = clipboard->mimeData(); - if (mimeData->hasText()) { - if (-1 != mimeData->text().indexOf("enableSnapshotMeshes(); bool hasDirtyMotion = false; - for (const auto &pose: poseMap) { - m_motionsGenerator->addPoseToLibrary(pose.first, pose.second.frames, pose.second.yTranslationScale); - } for (auto &motion: motionMap) { if (motion.second.dirty) { hasDirtyMotion = true; motion.second.dirty = false; - m_motionsGenerator->addRequirement(motion.first); + m_motionsGenerator->addMotion(motion.first, motion.second.parameters); } - m_motionsGenerator->addMotionToLibrary(motion.first, motion.second.clips); } if (!hasDirtyMotion) { delete m_motionsGenerator; @@ -3784,8 +3573,8 @@ void Document::motionsReady() for (auto &motionId: m_motionsGenerator->generatedMotionIds()) { auto motion = motionMap.find(motionId); if (motion != motionMap.end()) { - auto resultPreviewMeshs = m_motionsGenerator->takeResultPreviewMeshs(motionId); - motion->second.updatePreviewMeshs(resultPreviewMeshs); + auto resultPreviewMesh = m_motionsGenerator->takeResultSnapshotMesh(motionId); + motion->second.updatePreviewMesh(resultPreviewMesh); motion->second.jointNodeTrees = m_motionsGenerator->takeResultJointNodeTrees(motionId); emit motionPreviewChanged(motionId); emit motionResultChanged(motionId); @@ -3800,70 +3589,6 @@ void Document::motionsReady() generateMotions(); } -void Document::generatePosePreviews() -{ - if (nullptr != m_posePreviewsGenerator) { - return; - } - - const std::vector *rigBones = resultRigBones(); - const std::map *rigWeights = resultRigWeights(); - - if (nullptr == rigBones || nullptr == rigWeights) { - return; - } - - m_posePreviewsGenerator = new PosePreviewsGenerator(rigType, rigBones, - rigWeights, *m_riggedOutcome); - bool hasDirtyPose = false; - for (auto &poseIt: poseMap) { - if (!poseIt.second.dirty) - continue; - if (poseIt.second.frames.empty()) - continue; - int middle = poseIt.second.frames.size() / 2; - if (middle >= (int)poseIt.second.frames.size()) - middle = 0; - m_posePreviewsGenerator->addPose({poseIt.first, middle}, poseIt.second.frames[middle].second); - poseIt.second.dirty = false; - hasDirtyPose = true; - } - if (!hasDirtyPose) { - delete m_posePreviewsGenerator; - m_posePreviewsGenerator = nullptr; - return; - } - - qDebug() << "Pose previews generating.."; - - QThread *thread = new QThread; - m_posePreviewsGenerator->moveToThread(thread); - connect(thread, &QThread::started, m_posePreviewsGenerator, &PosePreviewsGenerator::process); - connect(m_posePreviewsGenerator, &PosePreviewsGenerator::finished, this, &Document::posePreviewsReady); - connect(m_posePreviewsGenerator, &PosePreviewsGenerator::finished, thread, &QThread::quit); - connect(thread, &QThread::finished, thread, &QThread::deleteLater); - thread->start(); -} - -void Document::posePreviewsReady() -{ - for (const auto &poseIdAndFrame: m_posePreviewsGenerator->generatedPreviewPoseIdAndFrames()) { - auto pose = poseMap.find(poseIdAndFrame.first); - if (pose != poseMap.end()) { - Model *resultPartPreviewMesh = m_posePreviewsGenerator->takePreview(poseIdAndFrame); - pose->second.updatePreviewMesh(resultPartPreviewMesh); - emit posePreviewChanged(poseIdAndFrame.first); - } - } - - delete m_posePreviewsGenerator; - m_posePreviewsGenerator = nullptr; - - qDebug() << "Pose previews generation done"; - - generatePosePreviews(); -} - void Document::addMaterial(QUuid materialId, QString name, std::vector layers) { auto findMaterialResult = materialMap.find(materialId); @@ -4198,11 +3923,11 @@ const QString &Document::scriptConsoleLog() const return m_scriptConsoleLog; } -void Document::startPaint(void) +void Document::startPaint() { } -void Document::stopPaint(void) +void Document::stopPaint() { if (m_vertexColorPainter || m_isMouseTargetResultObsolete) { m_saveNextPaintSnapshot = true; diff --git a/src/document.h b/src/document.h index 1808ac9f..73c9166c 100644 --- a/src/document.h +++ b/src/document.h @@ -18,9 +18,7 @@ #include "bonemark.h" #include "riggenerator.h" #include "rigtype.h" -#include "posepreviewsgenerator.h" #include "texturetype.h" -#include "interpolationtype.h" #include "jointnodetree.h" #include "skeletondocument.h" #include "combinemode.h" @@ -42,7 +40,6 @@ class GeneratedCacheContext; class HistoryItem { public: - uint32_t hash; Snapshot snapshot; }; @@ -217,103 +214,6 @@ private: std::set m_childrenIdSet; }; -class Pose -{ -public: - Pose() - { - } - ~Pose() - { - delete m_previewMesh; - } - QUuid id; - QString name; - bool dirty = true; - QUuid turnaroundImageId; - float yTranslationScale = 1.0; - std::vector, std::map>>> frames; // pair - void updatePreviewMesh(Model *previewMesh) - { - delete m_previewMesh; - m_previewMesh = previewMesh; - } - Model *takePreviewMesh() const - { - if (nullptr == m_previewMesh) - return nullptr; - return new Model(*m_previewMesh); - } - bool yTranslationScaleAdjusted() const - { - return fabs(yTranslationScale - 1.0) >= 0.01; - } -private: - Q_DISABLE_COPY(Pose); - Model *m_previewMesh = nullptr; -}; - -enum class MotionClipType -{ - Pose, - Interpolation, - Motion, - ProceduralAnimation -}; - -class MotionClip -{ -public: - MotionClip() - { - } - MotionClip(const QString &linkData, const QString &linkDataType) - { - if ("poseId" == linkDataType) { - clipType = MotionClipType::Pose; - linkToId = QUuid(linkData); - } else if ("InterpolationType" == linkDataType) { - clipType = MotionClipType::Interpolation; - interpolationType = InterpolationTypeFromString(linkData.toUtf8().constData()); - } else if ("ProceduralAnimation" == linkDataType) { - clipType = MotionClipType::ProceduralAnimation; - proceduralAnimation = ProceduralAnimationFromString(linkData.toUtf8().constData()); - } else if ("motionId" == linkDataType) { - clipType = MotionClipType::Motion; - linkToId = QUuid(linkData); - } - } - QString linkDataType() const - { - if (MotionClipType::Pose == clipType) - return "poseId"; - if (MotionClipType::Interpolation == clipType) - return "InterpolationType"; - if (MotionClipType::ProceduralAnimation == clipType) - return "ProceduralAnimation"; - if (MotionClipType::Motion == clipType) - return "motionId"; - return "poseId"; - } - QString linkData() const - { - if (MotionClipType::Pose == clipType) - return linkToId.toString(); - if (MotionClipType::Interpolation == clipType) - return InterpolationTypeToString(interpolationType); - if (MotionClipType::ProceduralAnimation == clipType) - return ProceduralAnimationToString(proceduralAnimation); - if (MotionClipType::Motion == clipType) - return linkToId.toString(); - return linkToId.toString(); - } - float duration = 0.0; - MotionClipType clipType = MotionClipType::Pose; - QUuid linkToId; - InterpolationType interpolationType; - ProceduralAnimation proceduralAnimation; -}; - class Motion { public: @@ -322,36 +222,28 @@ public: } ~Motion() { - releasePreviewMeshs(); + delete m_previewMesh; } QUuid id; QString name; bool dirty = true; - std::vector clips; + std::map parameters; std::vector> jointNodeTrees; - void updatePreviewMeshs(std::vector> &previewMeshs) + void updatePreviewMesh(Model *mesh) { - releasePreviewMeshs(); - m_previewMeshs = previewMeshs; - previewMeshs.clear(); + delete m_previewMesh; + m_previewMesh = mesh; } Model *takePreviewMesh() const { - if (m_previewMeshs.empty()) + if (nullptr == m_previewMesh) return nullptr; - int middle = std::max((int)m_previewMeshs.size() / 2 - 1, (int)0); - return new Model(*m_previewMeshs[middle].second); + + return new Model(*m_previewMesh); } private: Q_DISABLE_COPY(Motion); - void releasePreviewMeshs() - { - for (const auto &item: m_previewMeshs) { - delete item.second; - } - m_previewMeshs.clear(); - } - std::vector> m_previewMeshs; + Model *m_previewMesh = nullptr; }; class MaterialMap @@ -403,7 +295,6 @@ enum class DocumentToSnapshotFor Document = 0, Nodes, Materials, - Poses, Motions }; @@ -495,23 +386,14 @@ signals: void checkEdge(QUuid edgeId); void optionsChanged(); void rigTypeChanged(); - void posesChanged(); void motionsChanged(); - void poseAdded(QUuid poseId); - void poseRemoved(QUuid); - void poseListChanged(); - void poseNameChanged(QUuid poseId); - void poseFramesChanged(QUuid poseId); - void poseTurnaroundImageIdChanged(QUuid poseId); - void poseYtranslationScaleChanged(QUuid poseId); - void posePreviewChanged(QUuid poseId); void motionAdded(QUuid motionId); void motionRemoved(QUuid motionId); - void motionListChanged(); void motionNameChanged(QUuid motionId); - void motionClipsChanged(QUuid motionId); + void motionParametersChanged(QUuid motionId); void motionPreviewChanged(QUuid motionId); void motionResultChanged(QUuid motionId); + void motionListChanged(); void materialAdded(QUuid materialId); void materialRemoved(QUuid materialId); void materialListChanged(); @@ -553,10 +435,7 @@ public: std::map componentMap; std::map materialMap; std::vector materialIdList; - std::map poseMap; - std::vector poseIdList; std::map motionMap; - std::vector motionIdList; Component rootComponent; QImage preview; bool undoable() const override; @@ -568,7 +447,6 @@ public: void copyNodes(std::set nodeIdSet) const override; void toSnapshot(Snapshot *snapshot, const std::set &limitNodeIds=std::set(), DocumentToSnapshotFor forWhat=DocumentToSnapshotFor::Document, - const std::set &limitPoseIds=std::set(), const std::set &limitMotionIds=std::set(), const std::set &limitMaterialIds=std::set()) const; void fromSnapshot(const Snapshot &snapshot); @@ -583,7 +461,6 @@ public: const Component *findComponentParent(QUuid componentId) const; QUuid findComponentParentId(QUuid componentId) const; const Material *findMaterial(QUuid materialId) const; - const Pose *findPose(QUuid poseId) const; const Motion *findMotion(QUuid motionId) const; Model *takeResultMesh(); Model *takePaintedMesh(); @@ -594,7 +471,6 @@ public: const std::map *resultRigWeights() const; void updateTurnaround(const QImage &image); bool hasPastableMaterialsInClipboard() const; - bool hasPastablePosesInClipboard() const; bool hasPastableMotionsInClipboard() const; const Outcome ¤tPostProcessedOutcome() const; bool isExportReady() const; @@ -650,8 +526,6 @@ public slots: void postProcessedMeshResultReady(); void generateRig(); void rigReady(); - void generatePosePreviews(); - void posePreviewsReady(); void generateMaterialPreviews(); void materialPreviewsReady(); void generateMotions(); @@ -739,17 +613,9 @@ public slots: void toggleSmoothNormal(); void enableWeld(bool enabled); void setRigType(RigType toRigType); - void addPose(QUuid poseId, QString name, std::vector, std::map>>> frames, - QUuid turnaroundImageId, - float yTranslationScale); - void removePose(QUuid poseId); - void setPoseFrames(QUuid poseId, std::vector, std::map>>> frames); - void setPoseTurnaroundImageId(QUuid poseId, QUuid imageId); - void setPoseYtranslationScale(QUuid poseId, float scale); - void renamePose(QUuid poseId, QString name); - void addMotion(QUuid motionId, QString name, std::vector clips); + void addMotion(QUuid motionId, QString name, std::map parameters); void removeMotion(QUuid motionId); - void setMotionClips(QUuid motionId, std::vector clips); + void setMotionParameters(QUuid motionId, std::map parameters); void renameMotion(QUuid motionId, QString name); void addMaterial(QUuid materialId, QString name, std::vector); void removeMaterial(QUuid materialId); @@ -764,8 +630,8 @@ public slots: void scriptResultReady(); void updateVariable(const QString &name, const std::map &value); void updateVariableValue(const QString &name, const QString &value); - void startPaint(void); - void stopPaint(void); + void startPaint(); + void stopPaint(); void setMousePickMaskNodeIds(const std::set &nodeIds); private: void splitPartByNode(std::vector> *groups, QUuid nodeId); @@ -812,7 +678,6 @@ private: // need initialize std::map *m_resultRigWeights; bool m_isRigObsolete; Outcome *m_riggedOutcome; - PosePreviewsGenerator *m_posePreviewsGenerator; bool m_currentRigSucceed; MaterialPreviewsGenerator *m_materialPreviewsGenerator; MotionsGenerator *m_motionsGenerator; diff --git a/src/documentsaver.cpp b/src/documentsaver.cpp index 8548932f..4b48adc9 100644 --- a/src/documentsaver.cpp +++ b/src/documentsaver.cpp @@ -79,14 +79,6 @@ void DocumentSaver::collectUsedResourceIds(const Snapshot *snapshot, loadSkeletonFromXmlStream(&fileSnapshot, stream, SNAPSHOT_ITEM_CANVAS | SNAPSHOT_ITEM_COMPONENT); collectUsedResourceIds(&fileSnapshot, imageIds, fileIds); } - - for (auto &pose: snapshot->poses) { - auto findCanvasImageId = pose.first.find("canvasImageId"); - if (findCanvasImageId != pose.first.end()) { - QUuid imageId = QUuid(findCanvasImageId->second); - imageIds.insert(imageId); - } - } } bool DocumentSaver::save(const QString *filename, diff --git a/src/documentwindow.cpp b/src/documentwindow.cpp index a2830131..da44e91c 100644 --- a/src/documentwindow.cpp +++ b/src/documentwindow.cpp @@ -495,19 +495,6 @@ DocumentWindow::DocumentWindow() : updateRigWeightRenderWidget(); }); - QDockWidget *poseDocker = new QDockWidget(tr("Poses"), this); - poseDocker->setAllowedAreas(Qt::RightDockWidgetArea); - PoseManageWidget *poseManageWidget = new PoseManageWidget(m_document, poseDocker); - poseDocker->setWidget(poseManageWidget); - connect(poseManageWidget, &PoseManageWidget::registerDialog, this, &DocumentWindow::registerDialog); - connect(poseManageWidget, &PoseManageWidget::unregisterDialog, this, &DocumentWindow::unregisterDialog); - addDockWidget(Qt::RightDockWidgetArea, poseDocker); - connect(poseDocker, &QDockWidget::topLevelChanged, [=](bool topLevel) { - Q_UNUSED(topLevel); - for (const auto &pose: m_document->poseMap) - emit m_document->posePreviewChanged(pose.first); - }); - QDockWidget *motionDocker = new QDockWidget(tr("Motions"), this); motionDocker->setAllowedAreas(Qt::RightDockWidgetArea); MotionManageWidget *motionManageWidget = new MotionManageWidget(m_document, motionDocker); @@ -524,8 +511,7 @@ DocumentWindow::DocumentWindow() : tabifyDockWidget(partsDocker, materialDocker); tabifyDockWidget(materialDocker, rigDocker); - tabifyDockWidget(rigDocker, poseDocker); - tabifyDockWidget(poseDocker, motionDocker); + tabifyDockWidget(rigDocker, motionDocker); tabifyDockWidget(motionDocker, scriptDocker); partsDocker->raise(); @@ -922,13 +908,6 @@ DocumentWindow::DocumentWindow() : }); m_windowMenu->addAction(m_showRigAction); - m_showPosesAction = new QAction(tr("Poses"), this); - connect(m_showPosesAction, &QAction::triggered, [=]() { - poseDocker->show(); - poseDocker->raise(); - }); - m_windowMenu->addAction(m_showPosesAction); - m_showMotionsAction = new QAction(tr("Motions"), this); connect(m_showMotionsAction, &QAction::triggered, [=]() { motionDocker->show(); @@ -1281,7 +1260,6 @@ DocumentWindow::DocumentWindow() : m_modelRenderWidget->updateMesh(resultMesh); }); - connect(m_document, &Document::posesChanged, m_document, &Document::generateMotions); connect(m_document, &Document::motionsChanged, m_document, &Document::generateMotions); connect(graphicsWidget, &SkeletonGraphicsWidget::cursorChanged, [=]() { @@ -1313,16 +1291,6 @@ DocumentWindow::DocumentWindow() : //connect(m_document, &SkeletonDocument::resultRigChanged, tetrapodPoseEditWidget, &TetrapodPoseEditWidget::updatePreview); - connect(m_document, &Document::poseAdded, this, [=](QUuid poseId) { - Q_UNUSED(poseId); - m_document->generatePosePreviews(); - }); - connect(m_document, &Document::poseFramesChanged, this, [=](QUuid poseId) { - Q_UNUSED(poseId); - m_document->generatePosePreviews(); - }); - connect(m_document, &Document::resultRigChanged, m_document, &Document::generatePosePreviews); - connect(m_document, &Document::resultRigChanged, m_document, &Document::generateMotions); connect(m_document, &Document::materialAdded, this, [=](QUuid materialId) { @@ -1943,11 +1911,8 @@ void DocumentWindow::exportFbxToFilename(const QString &filename) QApplication::setOverrideCursor(Qt::WaitCursor); Outcome skeletonResult = m_document->currentPostProcessedOutcome(); std::vector>>> exportMotions; - for (const auto &motionId: m_document->motionIdList) { - const Motion *motion = m_document->findMotion(motionId); - if (nullptr == motion) - continue; - exportMotions.push_back({motion->name, motion->jointNodeTrees}); + for (const auto &motionIt: m_document->motionMap) { + exportMotions.push_back({motionIt.second.name, motionIt.second.jointNodeTrees}); } FbxFileWriter fbxFileWriter(skeletonResult, m_document->resultRigBones(), m_document->resultRigWeights(), filename, m_document->textureImage, @@ -1980,11 +1945,8 @@ void DocumentWindow::exportGlbToFilename(const QString &filename) QApplication::setOverrideCursor(Qt::WaitCursor); Outcome skeletonResult = m_document->currentPostProcessedOutcome(); std::vector>>> exportMotions; - for (const auto &motionId: m_document->motionIdList) { - const Motion *motion = m_document->findMotion(motionId); - if (nullptr == motion) - continue; - exportMotions.push_back({motion->name, motion->jointNodeTrees}); + for (const auto &motionIt: m_document->motionMap) { + exportMotions.push_back({motionIt.second.name, motionIt.second.jointNodeTrees}); } GlbFileWriter glbFileWriter(skeletonResult, m_document->resultRigBones(), m_document->resultRigWeights(), filename, m_document->textureHasTransparencySettings, diff --git a/src/documentwindow.h b/src/documentwindow.h index 0de5edff..07819769 100644 --- a/src/documentwindow.h +++ b/src/documentwindow.h @@ -15,7 +15,6 @@ #include "exportpreviewwidget.h" #include "rigwidget.h" #include "bonemark.h" -#include "posemanagewidget.h" #include "preferenceswidget.h" #include "graphicscontainerwidget.h" #include "normalanddepthmapsgenerator.h" @@ -202,7 +201,6 @@ private: QAction *m_showDebugDialogAction; QAction *m_showMaterialsAction; QAction *m_showRigAction; - QAction *m_showPosesAction; QAction *m_showMotionsAction; QAction *m_showScriptAction; diff --git a/src/fbxfile.cpp b/src/fbxfile.cpp index 3a54630c..c9322a48 100644 --- a/src/fbxfile.cpp +++ b/src/fbxfile.cpp @@ -2602,8 +2602,8 @@ FbxFileWriter::FbxFileWriter(Outcome &outcome, deformer.addChild(userData); deformer.addPropertyNode("Indexes", bindPerBone[i].first); deformer.addPropertyNode("Weights", bindPerBone[i].second); - deformer.addPropertyNode("Transform", matrixToVector(jointNode.transformMatrix.inverted())); - deformer.addPropertyNode("TransformLink", matrixToVector(jointNode.transformMatrix)); + deformer.addPropertyNode("Transform", matrixToVector(jointNode.inverseBindMatrix)); + deformer.addPropertyNode("TransformLink", matrixToVector(jointNode.bindMatrix)); deformer.addPropertyNode("TransformAssociateModel", m_identityMatrix); deformer.addChild(FBXNode()); } @@ -2774,7 +2774,7 @@ FbxFileWriter::FbxFileWriter(Outcome &outcome, const auto &boneNode = boneNodes[i]; FBXNode poseNode("PoseNode"); poseNode.addPropertyNode("Node", (int64_t)limbNodeIds[1 + i]); - poseNode.addPropertyNode("Matrix", matrixToVector(boneNode.transformMatrix)); + poseNode.addPropertyNode("Matrix", matrixToVector(boneNode.bindMatrix)); poseNode.addChild(FBXNode()); pose.addChild(poseNode); } diff --git a/src/genericspineandpseudophysics.cpp b/src/genericspineandpseudophysics.cpp new file mode 100644 index 00000000..23473713 --- /dev/null +++ b/src/genericspineandpseudophysics.cpp @@ -0,0 +1,87 @@ +#include +#include "genericspineandpseudophysics.h" + +const double GenericSpineAndPseudoPhysics::g = 9.80665; + +void GenericSpineAndPseudoPhysics::calculateFootHeights(double preferredHeight, double stanceTime, double swingTime, + std::vector *heights, std::vector *moveOffsets) +{ + double totalTime = stanceTime + swingTime; + double halfSwingTime = 0.5 * swingTime; + + double pelvisVelocity = g * (halfSwingTime); + double receptionTime = 0.5 * stanceTime; + double propulsionTime = stanceTime - receptionTime; + + double pelvisAcceleration = pelvisVelocity / receptionTime; + double frameTime = 1.0 / 60; + + double deformHeight = 0; + for (double time = 0.0; time < totalTime; time += frameTime) { + double t, v0, a, s; + if (time < stanceTime) { + if (time < receptionTime) { + t = time; + a = -pelvisAcceleration; + v0 = pelvisVelocity; + s = v0 * t + 0.5 * a * std::pow(t, 2); + qDebug() << "Stance[Reception] s:" << s << "time:" << time << "t:" << t << "v0:" << v0 << "a:" << a; + deformHeight = s; + heights->push_back(preferredHeight - s); + if (nullptr != moveOffsets) + moveOffsets->push_back((receptionTime - time) / receptionTime); + } else { + t = time - receptionTime; + a = pelvisAcceleration; + v0 = 0; + s = v0 * t + 0.5 * a * std::pow(t, 2); + qDebug() << "Stance[Propulsion] s:" << s << "time:" << time << "t:" << t << "v0:" << v0 << "a:" << a; + heights->push_back(preferredHeight - (deformHeight - s)); + if (nullptr != moveOffsets) + moveOffsets->push_back(-t / propulsionTime); + } + } else { + if (time - stanceTime < halfSwingTime) { + t = time - stanceTime; + a = -g; + v0 = pelvisVelocity; + s = v0 * t + 0.5 * a * std::pow(t, 2); + qDebug() << "Swing[1/2] s:" << s << "time:" << time << "t:" << t << "v0:" << v0 << "a:" << a; + deformHeight = s; + heights->push_back(preferredHeight + s); + if (nullptr != moveOffsets) + moveOffsets->push_back(-(halfSwingTime - t) / halfSwingTime); + } else { + t = time - stanceTime - halfSwingTime; + a = g; + v0 = 0; + s = v0 * t + 0.5 * a * std::pow(t, 2); + qDebug() << "Swing[2/2] s:" << s << "time:" << time << "t:" << t << "v0:" << v0 << "a:" << a; + heights->push_back(preferredHeight + (deformHeight - s)); + if (nullptr != moveOffsets) + moveOffsets->push_back(t / halfSwingTime); + } + } + } + + double time = 0.0; + for (size_t i = 0; i < heights->size(); ++i) { + QString phase; + if (time <= stanceTime) { + if (time <= receptionTime) { + phase = "Stance[Reception]"; + } else { + phase = "Stance[Propulsion]"; + } + } else { + if (time - stanceTime < halfSwingTime) { + phase = "Swing[1/2]"; + } else { + phase = "Swing[2/2]"; + } + } + qDebug() << phase << "frame[" << i << "]:" << (*heights)[i] << " move:" << (*moveOffsets)[i]; + time += frameTime; + } +} + diff --git a/src/genericspineandpseudophysics.h b/src/genericspineandpseudophysics.h new file mode 100644 index 00000000..db46a55a --- /dev/null +++ b/src/genericspineandpseudophysics.h @@ -0,0 +1,19 @@ +#ifndef DUST3D_GENERIC_SPINE_AND_PSEUDO_PHYSICS_H +#define DUST3D_GENERIC_SPINE_AND_PSEUDO_PHYSICS_H +#include + +class GenericSpineAndPseudoPhysics +{ +public: + GenericSpineAndPseudoPhysics() + { + } + + static void calculateFootHeights(double preferredHeight, double stanceTime, double swingTime, + std::vector *heights, std::vector *moveOffsets=nullptr); + +private: + static const double g; +}; + +#endif diff --git a/src/glbfile.cpp b/src/glbfile.cpp index 9382f5d3..85c3d93b 100644 --- a/src/glbfile.cpp +++ b/src/glbfile.cpp @@ -92,20 +92,22 @@ GlbFileWriter::GlbFileWriter(Outcome &outcome, m_json["nodes"][1]["skin"] = 0; m_json["skins"][0]["joints"] = {}; + const QQuaternion noneRotation; for (size_t i = 0; i < boneNodes.size(); i++) { + const auto &bone = (*resultRigBones)[i]; m_json["skins"][0]["joints"] += skeletonNodeStartIndex + i; m_json["nodes"][skeletonNodeStartIndex + i]["name"] = boneNodes[i].name.toUtf8().constData(); m_json["nodes"][skeletonNodeStartIndex + i]["translation"] = { - boneNodes[i].translation.x(), - boneNodes[i].translation.y(), - boneNodes[i].translation.z() + boneNodes[i].bindTranslation.x(), + boneNodes[i].bindTranslation.y(), + boneNodes[i].bindTranslation.z() }; m_json["nodes"][skeletonNodeStartIndex + i]["rotation"] = { - boneNodes[i].rotation.x(), - boneNodes[i].rotation.y(), - boneNodes[i].rotation.z(), - boneNodes[i].rotation.scalar() + noneRotation.x(), + noneRotation.y(), + noneRotation.z(), + noneRotation.scalar() }; if (!boneNodes[i].children.empty()) { diff --git a/src/hermitecurveinterpolation.cpp b/src/hermitecurveinterpolation.cpp new file mode 100644 index 00000000..9f005295 --- /dev/null +++ b/src/hermitecurveinterpolation.cpp @@ -0,0 +1,54 @@ +#include +#include +#include "hermitecurveinterpolation.h" + +void HermiteCurveInterpolation::update() +{ + std::vector> keyNodes; + for (size_t nodeIndex = 0; nodeIndex < m_nodes.size(); ++nodeIndex) { + auto findPerpendicularDirections = m_perpendicularDirectionsPerNode.find(nodeIndex); + if (findPerpendicularDirections == m_perpendicularDirectionsPerNode.end()) + continue; + QVector2D perpendicularDirection; + for (const auto &it: findPerpendicularDirections->second) + perpendicularDirection += it; + perpendicularDirection.normalize(); + QVector3D direction3 = QVector3D(perpendicularDirection.x(), perpendicularDirection.y(), 0.0); + QVector3D tangent3 = QVector3D::crossProduct(direction3, QVector3D(0, 0, 1.0)); + keyNodes.push_back({nodeIndex, QVector2D(tangent3.x(), tangent3.y())}); + } + + m_updatedPositions = m_nodes; + for (size_t keyIndex = 1; keyIndex < keyNodes.size(); ++keyIndex) { + const auto &firstKey = keyNodes[keyIndex - 1]; + const auto &secondKey = keyNodes[keyIndex]; + double distance = 0; + for (size_t nodeIndex = firstKey.first + 1; nodeIndex <= secondKey.first; ++nodeIndex) { + distance += (m_nodesForDistance[nodeIndex] - m_nodesForDistance[nodeIndex - 1]).length(); + } + double t = 0; + const auto &p1 = m_nodes[firstKey.first]; + const auto &t1 = firstKey.second; + const auto &p2 = m_nodes[secondKey.first]; + const auto &t2 = secondKey.second; + //qDebug() << "======================" << keyIndex << "========================="; + //qDebug() << "P1:" << p1.x() << "," << p1.y(); + //qDebug() << "T1:" << t1.x() << "," << t1.y(); + //qDebug() << "P2:" << p2.x() << "," << p2.y(); + //qDebug() << "T2:" << t2.x() << "," << t2.y(); + for (size_t nodeIndex = firstKey.first + 1; nodeIndex < secondKey.first; ++nodeIndex) { + t += (m_nodesForDistance[nodeIndex] - m_nodesForDistance[nodeIndex - 1]).length(); + double s = t / distance; + double s3 = std::pow(s, 3); + double s2 = std::pow(s, 2); + double h1 = 2 * s3 - 3 * s2 + 1; + double h2 = -2 * s3 + 3 * s2; + double h3 = s3 - 2 * s2 + s; + double h4 = s3 - s2; + //qDebug() << "s:" << s << "t:" << t << "distance:" << distance << "h1:" << h1 << "h2:" << h2 << "h3:" << h3 << "h4:" << h4; + //qDebug() << "HCI original s:" << s << " position:" << m_updatedPositions[nodeIndex].x() << "," << m_updatedPositions[nodeIndex].y(); + m_updatedPositions[nodeIndex] = h1 * p1 + h2 * p2 + h3 * t1 + h4 * t2; + //qDebug() << "HCI Updated s:" << s << " position:" << m_updatedPositions[nodeIndex].x() << "," << m_updatedPositions[nodeIndex].y(); + } + } +} diff --git a/src/hermitecurveinterpolation.h b/src/hermitecurveinterpolation.h new file mode 100644 index 00000000..b5cdd871 --- /dev/null +++ b/src/hermitecurveinterpolation.h @@ -0,0 +1,41 @@ +#ifndef DUST3D_HERMITE_CURVE_INTERPOLATION_H +#define DUST3D_HERMITE_CURVE_INTERPOLATION_H +#include +#include +#include +#include + +class HermiteCurveInterpolation +{ +public: + HermiteCurveInterpolation() + { + } + + size_t addNode(const QVector2D &node, const QVector3D &originalNode) + { + size_t nodeIndex = m_nodes.size(); + m_nodes.push_back(node); + m_nodesForDistance.push_back(originalNode); + return nodeIndex; + } + + void addPerpendicularDirection(size_t nodeIndex, const QVector2D &direction) + { + m_perpendicularDirectionsPerNode[nodeIndex].push_back(direction); + } + + void update(); + + const QVector2D &getUpdatedPosition(size_t nodeIndex) + { + return m_updatedPositions[nodeIndex]; + } +private: + std::vector m_nodes; + std::vector m_nodesForDistance; + std::unordered_map> m_perpendicularDirectionsPerNode; + std::vector m_updatedPositions; +}; + +#endif diff --git a/src/interpolationtype.cpp b/src/interpolationtype.cpp deleted file mode 100644 index 568e2acc..00000000 --- a/src/interpolationtype.cpp +++ /dev/null @@ -1,78 +0,0 @@ -#include -#include -#include "interpolationtype.h" - -IMPL_InterpolationTypeFromString -IMPL_InterpolationTypeToString -IMPL_InterpolationTypeToDispName -IMPL_InterpolationTypeToEasingCurveType - -float calculateInterpolation(InterpolationType type, float knot) -{ - QEasingCurve easing; - easing.setType(InterpolationTypeToEasingCurveType(type)); - return easing.valueForProgress(knot); -} - -bool InterpolationIsLinear(InterpolationType type) -{ - return QEasingCurve::Linear == InterpolationTypeToEasingCurveType(type); -} - -bool InterpolationHasAccelerating(InterpolationType type) -{ - QString name = InterpolationTypeToString(type); - if (-1 != name.indexOf("In")) - return true; - return false; -} - -bool InterpolationHasDecelerating(InterpolationType type) -{ - QString name = InterpolationTypeToString(type); - if (-1 != name.indexOf("Out")) - return true; - return false; -} - -bool InterpolationIsBouncingBegin(InterpolationType type) -{ - QString name = InterpolationTypeToString(type); - if (-1 != name.indexOf("InBack") || -1 != name.indexOf("InOutBack")) - return true; - return false; -} - -bool InterpolationIsBouncingEnd(InterpolationType type) -{ - QString name = InterpolationTypeToString(type); - if (-1 != name.indexOf("OutBack") || -1 != name.indexOf("InOutBack")) - return true; - return false; -} - -InterpolationType InterpolationMakeFromOptions(bool isLinear, - bool hasAccelerating, bool hasDecelerating, - bool boucingBegin, bool bouncingEnd) -{ - if (isLinear) - return InterpolationType::Linear; - if (boucingBegin && bouncingEnd) { - return InterpolationType::EaseInOutBack; - } else if (boucingBegin) { - return InterpolationType::EaseInBack; - } else if (bouncingEnd) { - return InterpolationType::EaseOutBack; - } else { - if (hasAccelerating && hasDecelerating) { - return InterpolationType::EaseInOutCubic; - } else if (hasAccelerating) { - return InterpolationType::EaseInCubic; - } else if (hasDecelerating) { - return InterpolationType::EaseOutCubic; - } else { - return InterpolationType::EaseInOutCubic; - } - } -} - diff --git a/src/interpolationtype.h b/src/interpolationtype.h deleted file mode 100644 index f20074f9..00000000 --- a/src/interpolationtype.h +++ /dev/null @@ -1,229 +0,0 @@ -#ifndef DUST3D_INTERPOLATION_TYPE_H -#define DUST3D_INTERPOLATION_TYPE_H -#include -#include - -enum class InterpolationType -{ - None = 0, - Linear, - EaseInQuad, - EaseOutQuad, - EaseInOutQuad, - EaseOutInQuad, - EaseInCubic, - EaseOutCubic, - EaseInOutCubic, - EaseOutInCubic, - EaseInQuart, - EaseOutQuart, - EaseInOutQuart, - EaseOutInQuart, - EaseInQuint, - EaseOutQuint, - EaseInOutQuint, - EaseOutInQuint, - EaseInSine, - EaseOutSine, - EaseInOutSine, - EaseOutInSine, - EaseInExpo, - EaseOutExpo, - EaseInOutExpo, - EaseOutInExpo, - EaseInCirc, - EaseOutCirc, - EaseInOutCirc, - EaseOutInCirc, - EaseInElastic, - EaseOutElastic, - EaseInOutElastic, - EaseOutInElastic, - EaseInBack, - EaseOutBack, - EaseInOutBack, - EaseOutInBack, - EaseInBounce, - EaseOutBounce, - EaseInOutBounce, - EaseOutInBounce, - Count -}; -InterpolationType InterpolationTypeFromString(const char *typeString); -#define IMPL_InterpolationTypeFromString \ -InterpolationType InterpolationTypeFromString(const char *typeString) \ -{ \ - QString type = typeString; \ - static std::map s_map = { \ - {"None", InterpolationType::None}, \ - {"Linear", InterpolationType::Linear}, \ - {"EaseInQuad", InterpolationType::EaseInQuad}, \ - {"EaseOutQuad", InterpolationType::EaseOutQuad}, \ - {"EaseInOutQuad", InterpolationType::EaseInOutQuad}, \ - {"EaseOutInQuad", InterpolationType::EaseOutInQuad}, \ - {"EaseInCubic", InterpolationType::EaseInCubic}, \ - {"EaseOutCubic", InterpolationType::EaseOutCubic}, \ - {"EaseInOutCubic", InterpolationType::EaseInOutCubic}, \ - {"EaseOutInCubic", InterpolationType::EaseOutInCubic}, \ - {"EaseInQuart", InterpolationType::EaseInQuart}, \ - {"EaseOutQuart", InterpolationType::EaseOutQuart}, \ - {"EaseInOutQuart", InterpolationType::EaseInOutQuart}, \ - {"EaseOutInQuart", InterpolationType::EaseOutInQuart}, \ - {"EaseInQuint", InterpolationType::EaseInQuint}, \ - {"EaseOutQuint", InterpolationType::EaseOutQuint}, \ - {"EaseInOutQuint", InterpolationType::EaseInOutQuint}, \ - {"EaseOutInQuint", InterpolationType::EaseOutInQuint}, \ - {"EaseInSine", InterpolationType::EaseInSine}, \ - {"EaseOutSine", InterpolationType::EaseOutSine}, \ - {"EaseInOutSine", InterpolationType::EaseInOutSine}, \ - {"EaseOutInSine", InterpolationType::EaseOutInSine}, \ - {"EaseInExpo", InterpolationType::EaseInExpo}, \ - {"EaseOutExpo", InterpolationType::EaseOutExpo}, \ - {"EaseInOutExpo", InterpolationType::EaseInOutExpo}, \ - {"EaseOutInExpo", InterpolationType::EaseOutInExpo}, \ - {"EaseInCirc", InterpolationType::EaseInCirc}, \ - {"EaseOutCirc", InterpolationType::EaseOutCirc}, \ - {"EaseInOutCirc", InterpolationType::EaseInOutCirc}, \ - {"EaseOutInCirc", InterpolationType::EaseOutInCirc}, \ - {"EaseInElastic", InterpolationType::EaseInElastic}, \ - {"EaseOutElastic", InterpolationType::EaseOutElastic}, \ - {"EaseInOutElastic", InterpolationType::EaseInOutElastic}, \ - {"EaseOutInElastic", InterpolationType::EaseOutInElastic}, \ - {"EaseInBack", InterpolationType::EaseInBack}, \ - {"EaseOutBack", InterpolationType::EaseOutBack}, \ - {"EaseInOutBack", InterpolationType::EaseInOutBack}, \ - {"EaseOutInBack", InterpolationType::EaseOutInBack}, \ - {"EaseInBounce", InterpolationType::EaseInBounce}, \ - {"EaseOutBounce", InterpolationType::EaseOutBounce}, \ - {"EaseInOutBounce", InterpolationType::EaseInOutBounce}, \ - {"EaseOutInBounce", InterpolationType::EaseOutInBounce} \ - }; \ - auto findResult = s_map.find(type); \ - if (findResult != s_map.end()) \ - return findResult->second; \ - return InterpolationType::None; \ -} -const char *InterpolationTypeToString(InterpolationType type); -#define IMPL_InterpolationTypeToString \ -const char *InterpolationTypeToString(InterpolationType type) \ -{ \ - static const char *s_names[] = { \ - "None", \ - "Linear", \ - "EaseInQuad", \ - "EaseOutQuad", \ - "EaseInOutQuad", \ - "EaseOutInQuad", \ - "EaseInCubic", \ - "EaseOutCubic", \ - "EaseInOutCubic", \ - "EaseOutInCubic", \ - "EaseInQuart", \ - "EaseOutQuart", \ - "EaseInOutQuart", \ - "EaseOutInQuart", \ - "EaseInQuint", \ - "EaseOutQuint", \ - "EaseInOutQuint", \ - "EaseOutInQuint", \ - "EaseInSine", \ - "EaseOutSine", \ - "EaseInOutSine", \ - "EaseOutInSine", \ - "EaseInExpo", \ - "EaseOutExpo", \ - "EaseInOutExpo", \ - "EaseOutInExpo", \ - "EaseInCirc", \ - "EaseOutCirc", \ - "EaseInOutCirc", \ - "EaseOutInCirc", \ - "EaseInElastic", \ - "EaseOutElastic", \ - "EaseInOutElastic", \ - "EaseOutInElastic", \ - "EaseInBack", \ - "EaseOutBack", \ - "EaseInOutBack", \ - "EaseOutInBack", \ - "EaseInBounce", \ - "EaseOutBounce", \ - "EaseInOutBounce", \ - "EaseOutInBounce" \ - }; \ - size_t index = (size_t)type; \ - if (index < sizeof(s_names) / sizeof(s_names[0])) \ - return s_names[index]; \ - return ""; \ -} -QString InterpolationTypeToDispName(InterpolationType type); -#define IMPL_InterpolationTypeToDispName \ -QString InterpolationTypeToDispName(InterpolationType type) \ -{ \ - return InterpolationTypeToString(type); \ -} -QEasingCurve::Type InterpolationTypeToEasingCurveType(InterpolationType type); -#define IMPL_InterpolationTypeToEasingCurveType \ -QEasingCurve::Type InterpolationTypeToEasingCurveType(InterpolationType type)\ -{ \ - static QEasingCurve::Type s_types[] = { \ - QEasingCurve::Linear, \ - QEasingCurve::Linear, \ - QEasingCurve::InQuad, \ - QEasingCurve::OutQuad, \ - QEasingCurve::InOutQuad, \ - QEasingCurve::OutInQuad, \ - QEasingCurve::InCubic, \ - QEasingCurve::OutCubic, \ - QEasingCurve::InOutCubic, \ - QEasingCurve::OutInCubic, \ - QEasingCurve::InQuart, \ - QEasingCurve::OutQuart, \ - QEasingCurve::InOutQuart, \ - QEasingCurve::OutInQuart, \ - QEasingCurve::InQuint, \ - QEasingCurve::OutQuint, \ - QEasingCurve::InOutQuint, \ - QEasingCurve::OutInQuint, \ - QEasingCurve::InSine, \ - QEasingCurve::OutSine, \ - QEasingCurve::InOutSine, \ - QEasingCurve::OutInSine, \ - QEasingCurve::InExpo, \ - QEasingCurve::OutExpo, \ - QEasingCurve::InOutExpo, \ - QEasingCurve::OutInExpo, \ - QEasingCurve::InCirc, \ - QEasingCurve::OutCirc, \ - QEasingCurve::InOutCirc, \ - QEasingCurve::OutInCirc, \ - QEasingCurve::InElastic, \ - QEasingCurve::OutElastic, \ - QEasingCurve::InOutElastic, \ - QEasingCurve::OutInElastic, \ - QEasingCurve::InBack, \ - QEasingCurve::OutBack, \ - QEasingCurve::InOutBack, \ - QEasingCurve::OutInBack, \ - QEasingCurve::InBounce, \ - QEasingCurve::OutBounce, \ - QEasingCurve::InOutBounce, \ - QEasingCurve::OutInBounce \ - }; \ - size_t index = (size_t)type; \ - if (index < sizeof(s_types) / sizeof(s_types[0])) \ - return s_types[index]; \ - return QEasingCurve::Linear; \ -} -bool InterpolationIsLinear(InterpolationType type); -bool InterpolationHasAccelerating(InterpolationType type); -bool InterpolationHasDecelerating(InterpolationType type); -bool InterpolationIsBouncingBegin(InterpolationType type); -bool InterpolationIsBouncingEnd(InterpolationType type); -InterpolationType InterpolationMakeFromOptions(bool isLinear, - bool hasAccelerating, bool hasDecelerating, - bool boucingBegin, bool bouncingEnd); - -float calculateInterpolation(InterpolationType type, float knot); - -#endif diff --git a/src/jointnodetree.cpp b/src/jointnodetree.cpp index 5a9c435f..4a7ba934 100644 --- a/src/jointnodetree.cpp +++ b/src/jointnodetree.cpp @@ -1,3 +1,4 @@ +#include #include "jointnodetree.h" #include "util.h" @@ -6,63 +7,33 @@ const std::vector &JointNodeTree::nodes() const return m_boneNodes; } -void JointNodeTree::updateRotation(int index, QQuaternion rotation) +void JointNodeTree::updateRotation(int index, const QQuaternion &rotation) { m_boneNodes[index].rotation = rotation; } -void JointNodeTree::updateTranslation(int index, QVector3D translation) +void JointNodeTree::updateTranslation(int index, const QVector3D &translation) { m_boneNodes[index].translation = translation; } -void JointNodeTree::addTranslation(int index, QVector3D translation) +void JointNodeTree::updateMatrix(int index, const QMatrix4x4 &matrix) { - m_boneNodes[index].translation += translation; -} - -void JointNodeTree::reset() -{ - for (auto &node: m_boneNodes) { - node.rotation = QQuaternion(); - node.translation = node.bindTranslation; - } -} - -void JointNodeTree::calculateBonePositions(std::vector> *bonePositions, - const JointNodeTree *jointNodeTree, - const std::vector *rigBones) const -{ - if (nullptr == bonePositions || nullptr == jointNodeTree || nullptr == rigBones) - return; + const QMatrix4x4 &localMatrix = matrix; - (*bonePositions).resize(jointNodeTree->nodes().size()); - for (int i = 0; i < (int)jointNodeTree->nodes().size(); i++) { - const auto &node = jointNodeTree->nodes()[i]; - (*bonePositions)[i] = std::make_pair(node.transformMatrix * node.position, - node.transformMatrix * (node.position + ((*rigBones)[i].tailPosition - (*rigBones)[i].headPosition))); - } -} - -void JointNodeTree::recalculateTransformMatrices() -{ - for (decltype(m_boneNodes.size()) i = 0; i < m_boneNodes.size(); i++) { - QMatrix4x4 parentTransformMatrix; - auto &node = m_boneNodes[i]; - if (node.parentIndex != -1) { - const auto &parent = m_boneNodes[node.parentIndex]; - parentTransformMatrix = parent.transformMatrix; - } - QMatrix4x4 translateMatrix; - translateMatrix.translate(node.translation); - QMatrix4x4 rotationMatrix; - rotationMatrix.rotate(node.rotation); - node.transformMatrix = parentTransformMatrix * translateMatrix * rotationMatrix; - } - for (decltype(m_boneNodes.size()) i = 0; i < m_boneNodes.size(); i++) { - auto &node = m_boneNodes[i]; - node.transformMatrix *= node.inverseBindMatrix; - } + updateTranslation(index, + QVector3D(localMatrix(0, 3), localMatrix(1, 3), localMatrix(2, 3))); + + float scalar = std::sqrt(std::max(0.0f, 1.0f + localMatrix(0, 0) + localMatrix(1, 1) + localMatrix(2, 2))) / 2.0f; + float x = std::sqrt(std::max(0.0f, 1.0f + localMatrix(0, 0) - localMatrix(1, 1) - localMatrix(2, 2))) / 2.0f; + float y = std::sqrt(std::max(0.0f, 1.0f - localMatrix(0, 0) + localMatrix(1, 1) - localMatrix(2, 2))) / 2.0f; + float z = std::sqrt(std::max(0.0f, 1.0f - localMatrix(0, 0) - localMatrix(1, 1) + localMatrix(2, 2))) / 2.0f; + x *= x * (localMatrix(2, 1) - localMatrix(1, 2)) > 0 ? 1 : -1; + y *= y * (localMatrix(0, 2) - localMatrix(2, 0)) > 0 ? 1 : -1; + z *= z * (localMatrix(1, 0) - localMatrix(0, 1)) > 0 ? 1 : -1; + float length = std::sqrt(scalar * scalar + x * x + y * y + z * z); + updateRotation(index, + QQuaternion(scalar / length, x / length, y / length, z / length)); } JointNodeTree::JointNodeTree(const std::vector *resultRigBones) @@ -78,38 +49,20 @@ JointNodeTree::JointNodeTree(const std::vector *resultRigBones) auto &node = m_boneNodes[i]; node.name = bone.name; node.position = bone.headPosition; + QMatrix4x4 parentMatrix; + if (-1 == node.parentIndex) { + node.bindTranslation = node.position; + } else { + const auto &parentNode = m_boneNodes[node.parentIndex]; + node.bindTranslation = node.position - parentNode.position; + parentMatrix = parentNode.bindMatrix; + } + QMatrix4x4 translationMatrix; + translationMatrix.translate(node.bindTranslation); + node.bindMatrix = parentMatrix * translationMatrix; + node.inverseBindMatrix = node.bindMatrix.inverted(); node.children = bone.children; for (const auto &childIndex: bone.children) m_boneNodes[childIndex].parentIndex = i; } - - for (decltype(resultRigBones->size()) i = 0; i < resultRigBones->size(); i++) { - QMatrix4x4 parentTransformMatrix; - auto &node = m_boneNodes[i]; - if (node.parentIndex != -1) { - const auto &parent = m_boneNodes[node.parentIndex]; - parentTransformMatrix = parent.transformMatrix; - node.translation = node.position - parent.position; - } else { - node.translation = node.position; - } - node.bindTranslation = node.translation; - QMatrix4x4 translateMatrix; - translateMatrix.translate(node.translation); - node.transformMatrix = parentTransformMatrix * translateMatrix; - node.inverseBindMatrix = node.transformMatrix.inverted(); - } } - -JointNodeTree JointNodeTree::slerp(const JointNodeTree &first, const JointNodeTree &second, float t) -{ - JointNodeTree slerpResult = first; - for (decltype(first.nodes().size()) i = 0; i < first.nodes().size() && i < second.nodes().size(); i++) { - slerpResult.updateRotation(i, - quaternionOvershootSlerp(first.nodes()[i].rotation, second.nodes()[i].rotation, t)); - slerpResult.updateTranslation(i, (first.nodes()[i].translation * (1.0 - t) + second.nodes()[i].translation * t)); - } - slerpResult.recalculateTransformMatrices(); - return slerpResult; -} - diff --git a/src/jointnodetree.h b/src/jointnodetree.h index e172e03e..4b5f1c0a 100644 --- a/src/jointnodetree.h +++ b/src/jointnodetree.h @@ -13,7 +13,7 @@ struct JointNode QVector3D bindTranslation; QVector3D translation; QQuaternion rotation; - QMatrix4x4 transformMatrix; + QMatrix4x4 bindMatrix; QMatrix4x4 inverseBindMatrix; std::vector children; }; @@ -23,15 +23,9 @@ class JointNodeTree public: const std::vector &nodes() const; JointNodeTree(const std::vector *resultRigBones); - void updateRotation(int index, QQuaternion rotation); - void updateTranslation(int index, QVector3D translation); - void addTranslation(int index, QVector3D translation); - void reset(); - void recalculateTransformMatrices(); - void calculateBonePositions(std::vector> *bonePositions, - const JointNodeTree *jointNodeTree, - const std::vector *rigBones) const; - static JointNodeTree slerp(const JointNodeTree &first, const JointNodeTree &second, float t); + void updateRotation(int index, const QQuaternion &rotation); + void updateTranslation(int index, const QVector3D &translation); + void updateMatrix(int index, const QMatrix4x4 &matrix); private: std::vector m_boneNodes; }; diff --git a/src/libdust3d.cpp b/src/libdust3d.cpp index 7248f96d..72428aee 100644 --- a/src/libdust3d.cpp +++ b/src/libdust3d.cpp @@ -116,7 +116,7 @@ DUST3D_DLL void * DUST3D_API dust3dGetUserData(dust3d *ds3) return ds3->userData; } -DUST3D_DLL const char * DUST3D_API dust3dVersion(void) +DUST3D_DLL const char * DUST3D_API dust3dVersion() { return APP_NAME " " APP_HUMAN_VER; } diff --git a/src/logbrowser.cpp b/src/logbrowser.cpp index c86d1fc8..d5e433c1 100644 --- a/src/logbrowser.cpp +++ b/src/logbrowser.cpp @@ -4,7 +4,7 @@ #include "logbrowser.h" #include "logbrowserdialog.h" -bool LogBrowser::m_enableOutputToFile = false; +bool LogBrowser::m_enableOutputToFile = true; LogBrowser::LogBrowser(QObject *parent) : QObject(parent) diff --git a/src/materialeditwidget.cpp b/src/materialeditwidget.cpp index db3390ad..0631fd8f 100644 --- a/src/materialeditwidget.cpp +++ b/src/materialeditwidget.cpp @@ -49,6 +49,7 @@ MaterialEditWidget::MaterialEditWidget(const Document *document, QWidget *parent m_previewWidget->resize(512, 512); m_previewWidget->move(-128, -128); m_previewWidget->enableEnvironmentLight(); + m_previewWidget->setNotGraphics(true); QFont nameFont; nameFont.setWeight(QFont::Light); diff --git a/src/materiallistwidget.cpp b/src/materiallistwidget.cpp index 0462caca..955b89ed 100644 --- a/src/materiallistwidget.cpp +++ b/src/materiallistwidget.cpp @@ -308,7 +308,7 @@ void MaterialListWidget::copy() Snapshot snapshot; m_document->toSnapshot(&snapshot, emptySet, DocumentToSnapshotFor::Materials, - emptySet, emptySet, limitMaterialIds); + emptySet, limitMaterialIds); QString snapshotXml; QXmlStreamWriter xmlStreamWriter(&snapshotXml); saveSkeletonToXmlStream(&snapshot, &xmlStreamWriter); diff --git a/src/modelwidget.cpp b/src/modelwidget.cpp index 6f9f764b..c30a660a 100644 --- a/src/modelwidget.cpp +++ b/src/modelwidget.cpp @@ -18,7 +18,7 @@ float ModelWidget::m_maxZoomRatio = 80.0; int ModelWidget::m_defaultXRotation = 30 * 16; int ModelWidget::m_defaultYRotation = -45 * 16; int ModelWidget::m_defaultZRotation = 0; -QVector3D ModelWidget::m_defaultEyePosition = QVector3D(0, 0, -4.0); +QVector3D ModelWidget::m_defaultEyePosition = QVector3D(0, 0, -2.5); ModelWidget::ModelWidget(QWidget *parent) : QOpenGLWidget(parent), @@ -329,11 +329,11 @@ void ModelWidget::toggleUvCheck() update(); } -bool ModelWidget::inputMousePressEventFromOtherWidget(QMouseEvent *event) +bool ModelWidget::inputMousePressEventFromOtherWidget(QMouseEvent *event, bool notGraphics) { bool shouldStartMove = false; if (event->button() == Qt::LeftButton) { - if (QGuiApplication::queryKeyboardModifiers().testFlag(Qt::AltModifier) && + if ((notGraphics || QGuiApplication::queryKeyboardModifiers().testFlag(Qt::AltModifier)) && !QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ControlModifier)) { shouldStartMove = m_moveEnabled; } @@ -547,7 +547,7 @@ void ModelWidget::setMoveAndZoomByWindow(bool byWindow) void ModelWidget::mousePressEvent(QMouseEvent *event) { - inputMousePressEventFromOtherWidget(event); + inputMousePressEventFromOtherWidget(event, m_notGraphics); } void ModelWidget::mouseMoveEvent(QMouseEvent *event) @@ -565,3 +565,7 @@ void ModelWidget::mouseReleaseEvent(QMouseEvent *event) inputMouseReleaseEventFromOtherWidget(event); } +void ModelWidget::setNotGraphics(bool notGraphics) +{ + m_notGraphics = notGraphics; +} diff --git a/src/modelwidget.h b/src/modelwidget.h index 0cd32aab..cd47e022 100644 --- a/src/modelwidget.h +++ b/src/modelwidget.h @@ -55,7 +55,7 @@ public: void setMoveAndZoomByWindow(bool byWindow); void disableCullFace(); void setMoveToPosition(const QVector3D &moveToPosition); - bool inputMousePressEventFromOtherWidget(QMouseEvent *event); + bool inputMousePressEventFromOtherWidget(QMouseEvent *event, bool notGraphics=false); bool inputMouseMoveEventFromOtherWidget(QMouseEvent *event); bool inputWheelEventFromOtherWidget(QWheelEvent *event); bool inputMouseReleaseEventFromOtherWidget(QMouseEvent *event); @@ -64,6 +64,7 @@ public: void updateToonNormalAndDepthMaps(QImage *normalMap, QImage *depthMap); int widthInPixels(); int heightInPixels(); + void setNotGraphics(bool notGraphics); public slots: void setXRotation(int angle); void setYRotation(int angle); @@ -119,6 +120,7 @@ private: QVector3D m_moveToPosition; bool m_moveAndZoomByWindow = true; bool m_enableCullFace = true; + bool m_notGraphics = false; std::pair screenPositionToMouseRay(const QPoint &screenPosition); void updateProjectionMatrix(); public: diff --git a/src/motionclipwidget.cpp b/src/motionclipwidget.cpp deleted file mode 100644 index 2045869f..00000000 --- a/src/motionclipwidget.cpp +++ /dev/null @@ -1,132 +0,0 @@ -#include -#include -#include -#include -#include "motionclipwidget.h" -#include "posewidget.h" -#include "motionwidget.h" - -MotionClipWidget::MotionClipWidget(const Document *document, QWidget *parent) : - QFrame(parent), - m_document(document) -{ - setObjectName("MotionClipFrame"); -} - -QSize MotionClipWidget::preferredSize() -{ - int preferredWidth = 0; - switch (m_clip.clipType) { - case MotionClipType::Motion: - preferredWidth = Theme::motionPreviewImageSize; - break; - case MotionClipType::Pose: - preferredWidth = Theme::posePreviewImageSize; - break; - case MotionClipType::ProceduralAnimation: - { - QPushButton testButton(ProceduralAnimationToDispName(m_clip.proceduralAnimation)); - preferredWidth = testButton.sizeHint().width(); - } - break; - case MotionClipType::Interpolation: - preferredWidth = Theme::normalButtonSize; - break; - default: - break; - } - return QSize(preferredWidth, maxSize().height()); -} - -QSize MotionClipWidget::maxSize() -{ - auto maxWidth = std::max(Theme::posePreviewImageSize, Theme::motionPreviewImageSize); - auto maxHeight = std::max(PoseWidget::preferredHeight(), MotionWidget::preferredHeight()); - return QSize(maxWidth, maxHeight); -} - -void MotionClipWidget::setClip(MotionClip clip) -{ - m_clip = clip; - reload(); -} - -void MotionClipWidget::reload() -{ - if (nullptr != m_reloadToWidget) - m_reloadToWidget->deleteLater(); - m_reloadToWidget = new QWidget(this); - m_reloadToWidget->setContentsMargins(1, 0, 0, 0); - m_reloadToWidget->setFixedSize(preferredSize()); - m_reloadToWidget->show(); - QVBoxLayout *layout = new QVBoxLayout; - layout->setContentsMargins(0, 0, 0, 0); - layout->setSpacing(0); - layout->setSizeConstraint(QLayout::SetMinimumSize); - layout->addStretch(); - - switch (m_clip.clipType) { - case MotionClipType::Motion: - { - MotionWidget *motionWidget = new MotionWidget(m_document, m_clip.linkToId); - motionWidget->reload(); - layout->addWidget(motionWidget); - } - break; - case MotionClipType::Pose: - { - PoseWidget *poseWidget = new PoseWidget(m_document, m_clip.linkToId); - poseWidget->reload(); - layout->addWidget(poseWidget); - } - break; - case MotionClipType::ProceduralAnimation: - { - QPushButton *proceduralAnimationButton = new QPushButton(ProceduralAnimationToDispName(m_clip.proceduralAnimation)); - proceduralAnimationButton->setFocusPolicy(Qt::NoFocus); - layout->addWidget(proceduralAnimationButton); - } - break; - case MotionClipType::Interpolation: - { - QHBoxLayout *interpolationButtonLayout = new QHBoxLayout; - QPushButton *interpolationButton = new QPushButton(QChar(fa::arrowsh)); - Theme::initAwesomeButton(interpolationButton); - interpolationButtonLayout->setContentsMargins(0, 0, 0, 0); - interpolationButtonLayout->setSpacing(0); - interpolationButtonLayout->addStretch(); - interpolationButtonLayout->addWidget(interpolationButton); - interpolationButtonLayout->addStretch(); - - layout->addLayout(interpolationButtonLayout); - - connect(interpolationButton, &QPushButton::clicked, this, &MotionClipWidget::modifyInterpolation); - - QHBoxLayout *interpolationDurationLayout = new QHBoxLayout; - QLabel *durationLabel = new QLabel; - durationLabel->setText(QString::number(m_clip.duration) + "s"); - interpolationDurationLayout->setContentsMargins(0, 0, 0, 0); - interpolationDurationLayout->setSpacing(0); - interpolationDurationLayout->addStretch(); - interpolationDurationLayout->addWidget(durationLabel); - interpolationDurationLayout->addStretch(); - - layout->addLayout(interpolationDurationLayout); - } - break; - default: - break; - } - - layout->addStretch(); - m_reloadToWidget->setLayout(layout); -} - -void MotionClipWidget::updateCheckedState(bool checked) -{ - if (checked) - setStyleSheet("#MotionClipFrame {border: 1px solid " + Theme::red.name() + ";}"); - else - setStyleSheet("#MotionClipFrame {border: 1px solid transparent;}"); -} - diff --git a/src/motionclipwidget.h b/src/motionclipwidget.h deleted file mode 100644 index 592862a1..00000000 --- a/src/motionclipwidget.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef DUST3D_MOTION_CLIP_WIDGET_H -#define DUST3D_MOTION_CLIP_WIDGET_H -#include -#include "document.h" - -class MotionClipWidget : public QFrame -{ - Q_OBJECT -signals: - void modifyInterpolation(); - -public: - MotionClipWidget(const Document *document, QWidget *parent=nullptr); - QSize preferredSize(); - static QSize maxSize(); - -public slots: - void setClip(MotionClip clip); - void reload(); - void updateCheckedState(bool checked); - -private: - const Document *m_document = nullptr; - MotionClip m_clip; - QWidget *m_reloadToWidget = nullptr; -}; - -#endif diff --git a/src/motioneditwidget.cpp b/src/motioneditwidget.cpp index 776f0a03..7bd597da 100644 --- a/src/motioneditwidget.cpp +++ b/src/motioneditwidget.cpp @@ -1,141 +1,54 @@ +#include +#include #include #include -#include -#include +#include +#include +#include #include -#include -#include +#include #include "motioneditwidget.h" +#include "simpleshaderwidget.h" +#include "simplerendermeshgenerator.h" +#include "motionsgenerator.h" #include "util.h" -#include "poselistwidget.h" -#include "motionlistwidget.h" #include "version.h" -#include "tabwidget.h" -#include "flowlayout.h" -#include "proceduralanimation.h" +#include "vertebratamotionparameterswidget.h" -MotionEditWidget::MotionEditWidget(const Document *document, QWidget *parent) : - QDialog(parent), - m_document(document) +MotionEditWidget::~MotionEditWidget() { - setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); - - m_clipPlayer = new AnimationClipPlayer; + for (auto &it: m_frames) + delete it; + while (!m_renderQueue.empty()) { + delete m_renderQueue.front(); + m_renderQueue.pop(); + } + delete m_bones; + delete m_rigWeights; + delete m_outcome; +} - m_timelineWidget = new MotionTimelineWidget(document, this); +MotionEditWidget::MotionEditWidget() +{ + m_modelRenderWidget = new SimpleShaderWidget; - connect(m_timelineWidget, &MotionTimelineWidget::clipsChanged, this, &MotionEditWidget::setUnsavedState); - connect(m_timelineWidget, &MotionTimelineWidget::clipsChanged, this, &MotionEditWidget::generatePreviews); + m_parametersArea = new QScrollArea; + m_parametersArea->setFrameShape(QFrame::NoFrame); - m_previewWidget = new ModelWidget(this); - m_previewWidget->setFixedSize(384, 384); - m_previewWidget->enableMove(true); - m_previewWidget->enableZoom(false); - m_previewWidget->move(-64, 0); - m_previewWidget->toggleWireframe(); - - connect(m_clipPlayer, &AnimationClipPlayer::frameReadyToShow, this, [=]() { - m_previewWidget->updateMesh(m_clipPlayer->takeFrameMesh()); - }); - - PoseListWidget *poseListWidget = new PoseListWidget(document); - poseListWidget->setCornerButtonVisible(true); - poseListWidget->setHasContextMenu(false); - QWidget *poseListContainerWidget = new QWidget; - QGridLayout *poseListLayoutForContainer = new QGridLayout; - poseListLayoutForContainer->addWidget(poseListWidget); - poseListContainerWidget->setLayout(poseListLayoutForContainer); - - poseListContainerWidget->resize(512, Theme::posePreviewImageSize); - - connect(poseListWidget, &PoseListWidget::cornerButtonClicked, this, [=](QUuid poseId) { - m_timelineWidget->addPose(poseId); - }); - - //FlowLayout *proceduralAnimationListLayout = new FlowLayout; - //for (size_t i = 0; i < (int)ProceduralAnimation::Count - 1; ++i) { - // auto proceduralAnimation = (ProceduralAnimation)(i + 1); - // QString dispName = ProceduralAnimationToDispName(proceduralAnimation); - // QPushButton *addButton = new QPushButton(Theme::awesome()->icon(fa::plus), dispName); - // connect(addButton, &QPushButton::clicked, this, [=]() { - // m_timelineWidget->addProceduralAnimation(proceduralAnimation); - // }); - // proceduralAnimationListLayout->addWidget(addButton); - //} - //QWidget *proceduralAnimationListContainerWidget = new QWidget; - //proceduralAnimationListContainerWidget->setLayout(proceduralAnimationListLayout); - - //proceduralAnimationListContainerWidget->resize(512, Theme::motionPreviewImageSize); - - MotionListWidget *motionListWidget = new MotionListWidget(document); - motionListWidget->setCornerButtonVisible(true); - motionListWidget->setHasContextMenu(false); - QWidget *motionListContainerWidget = new QWidget; - QGridLayout *motionListLayoutForContainer = new QGridLayout; - motionListLayoutForContainer->addWidget(motionListWidget); - motionListContainerWidget->setLayout(motionListLayoutForContainer); - - motionListContainerWidget->resize(512, Theme::motionPreviewImageSize); - - QStackedWidget *stackedWidget = new QStackedWidget; - stackedWidget->addWidget(poseListContainerWidget); - //stackedWidget->addWidget(proceduralAnimationListContainerWidget); - stackedWidget->addWidget(motionListContainerWidget); - - connect(motionListWidget, &MotionListWidget::cornerButtonClicked, this, [=](QUuid motionId) { - m_timelineWidget->addMotion(motionId); - }); - - std::vector tabs = { - tr("Poses"), - //tr("Procedural Animations"), - tr("Motions") - }; - TabWidget *tabWidget = new TabWidget(tabs); - tabWidget->setCurrentIndex(0); - - connect(tabWidget, &TabWidget::currentIndexChanged, stackedWidget, &QStackedWidget::setCurrentIndex); - - QVBoxLayout *motionEditLayout = new QVBoxLayout; - motionEditLayout->addWidget(tabWidget); - motionEditLayout->addWidget(stackedWidget); - motionEditLayout->addStretch(); - motionEditLayout->addWidget(Theme::createHorizontalLineWidget()); - motionEditLayout->addWidget(m_timelineWidget); - - QSlider *speedModeSlider = new QSlider(Qt::Horizontal); - speedModeSlider->setFixedWidth(100); - speedModeSlider->setMaximum(2); - speedModeSlider->setMinimum(0); - speedModeSlider->setValue(1); - - connect(speedModeSlider, &QSlider::valueChanged, this, [=](int value) { - m_clipPlayer->setSpeedMode((AnimationClipPlayer::SpeedMode)value); - }); - - QHBoxLayout *sliderLayout = new QHBoxLayout; - sliderLayout->addStretch(); - sliderLayout->addSpacing(50); - sliderLayout->addWidget(new QLabel(tr("Slow"))); - sliderLayout->addWidget(speedModeSlider); - sliderLayout->addWidget(new QLabel(tr("Fast"))); - sliderLayout->addSpacing(50); - sliderLayout->addStretch(); - - QVBoxLayout *previewLayout = new QVBoxLayout; - previewLayout->addStretch(); - previewLayout->addLayout(sliderLayout); - previewLayout->addSpacing(20); - - QHBoxLayout *topLayout = new QHBoxLayout; - topLayout->addLayout(previewLayout); - topLayout->addWidget(Theme::createVerticalLineWidget()); - topLayout->addLayout(motionEditLayout); - topLayout->setStretch(2, 1); + QHBoxLayout *canvasLayout = new QHBoxLayout; + canvasLayout->setSpacing(0); + canvasLayout->setContentsMargins(0, 0, 0, 0); + canvasLayout->addWidget(m_modelRenderWidget); + canvasLayout->addWidget(m_parametersArea); + canvasLayout->addSpacing(3); + canvasLayout->setStretch(0, 1); m_nameEdit = new QLineEdit; - m_nameEdit->setFixedWidth(200); - connect(m_nameEdit, &QLineEdit::textChanged, this, &MotionEditWidget::setUnsavedState); + connect(m_nameEdit, &QLineEdit::textChanged, this, [=]() { + m_name = m_nameEdit->text(); + m_unsaved = true; + updateTitle(); + }); QPushButton *saveButton = new QPushButton(tr("Save")); connect(saveButton, &QPushButton::clicked, this, &MotionEditWidget::save); saveButton->setDefault(true); @@ -147,32 +60,67 @@ MotionEditWidget::MotionEditWidget(const Document *document, QWidget *parent) : baseInfoLayout->addWidget(saveButton); QVBoxLayout *mainLayout = new QVBoxLayout; - mainLayout->addLayout(topLayout); + mainLayout->addLayout(canvasLayout); mainLayout->addWidget(Theme::createHorizontalLineWidget()); mainLayout->addLayout(baseInfoLayout); - setLayout(mainLayout); + QWidget *centralWidget = new QWidget; + centralWidget->setLayout(mainLayout); + setCentralWidget(centralWidget); - connect(this, &MotionEditWidget::addMotion, m_document, &Document::addMotion); - connect(this, &MotionEditWidget::renameMotion, m_document, &Document::renameMotion); - connect(this, &MotionEditWidget::setMotionClips, m_document, &Document::setMotionClips); + QTimer *timer = new QTimer(this); + timer->setInterval(17); + connect(timer, &QTimer::timeout, [this] { + if (m_renderQueue.size() > 600) { + checkRenderQueue(); + return; + } + if (this->m_frames.empty()) + return; + if (this->m_frameIndex < this->m_frames.size()) { + m_renderQueue.push(new SimpleShaderMesh(*this->m_frames[this->m_frameIndex])); + checkRenderQueue(); + } + this->m_frameIndex = (this->m_frameIndex + 1) % this->m_frames.size(); + }); + timer->start(); + connect(this, &MotionEditWidget::parametersChanged, this, &MotionEditWidget::updateParameters); + + updateParametersArea(); + generatePreview(); updateTitle(); } -MotionEditWidget::~MotionEditWidget() +void MotionEditWidget::updateParametersArea() { - delete m_clipPlayer; + VertebrataMotionParametersWidget *widget = new VertebrataMotionParametersWidget(m_parameters); + connect(widget, &VertebrataMotionParametersWidget::parametersChanged, this, [=]() { + this->m_parameters = widget->getParameters(); + emit parametersChanged(); + }); + m_parametersArea->setWidget(widget); } QSize MotionEditWidget::sizeHint() const { - return QSize(1024, 768); + return QSize(650, 460); } -void MotionEditWidget::reject() +void MotionEditWidget::updateParameters() { - close(); + m_unsaved = true; + generatePreview(); + updateTitle(); +} + +void MotionEditWidget::updateTitle() +{ + if (m_motionId.isNull()) { + setWindowTitle(unifiedWindowTitle(tr("New") + (m_unsaved ? "*" : ""))); + return; + } + setWindowTitle(unifiedWindowTitle(m_name + (m_unsaved ? "*" : ""))); } void MotionEditWidget::closeEvent(QCloseEvent *event) @@ -190,23 +138,18 @@ void MotionEditWidget::closeEvent(QCloseEvent *event) } m_closed = true; hide(); - if (nullptr != m_previewsGenerator) { + if (nullptr != m_previewGenerator) { event->ignore(); return; } event->accept(); } -void MotionEditWidget::save() +void MotionEditWidget::setEditMotionName(const QString &name) { - if (m_motionId.isNull()) { - m_motionId = QUuid::createUuid(); - emit addMotion(m_motionId, m_nameEdit->text(), m_timelineWidget->clips()); - } else if (m_unsaved) { - emit renameMotion(m_motionId, m_nameEdit->text()); - emit setMotionClips(m_motionId, m_timelineWidget->clips()); - } - clearUnsaveState(); + m_name = name; + m_nameEdit->setText(name); + updateTitle(); } void MotionEditWidget::clearUnsaveState() @@ -215,92 +158,115 @@ void MotionEditWidget::clearUnsaveState() updateTitle(); } -void MotionEditWidget::setUnsavedState() -{ - m_unsaved = true; - updateTitle(); -} - -void MotionEditWidget::setEditMotionId(QUuid motionId) +void MotionEditWidget::setEditMotionId(const QUuid &motionId) { if (m_motionId == motionId) return; - + m_motionId = motionId; updateTitle(); } -void MotionEditWidget::setEditMotionName(QString name) +void MotionEditWidget::setEditMotionParameters(const std::map ¶meters) { - m_nameEdit->setText(name); - updateTitle(); + m_parameters = parameters; + updateParametersArea(); + generatePreview(); } -void MotionEditWidget::updateTitle() +void MotionEditWidget::save() { if (m_motionId.isNull()) { - setWindowTitle(unifiedWindowTitle(tr("New") + (m_unsaved ? "*" : ""))); - return; + m_motionId = QUuid::createUuid(); + emit addMotion(m_motionId, m_name, m_parameters); + } else if (m_unsaved) { + emit renameMotion(m_motionId, m_name); + emit setMotionParameters(m_motionId, m_parameters); } - const Motion *motion = m_document->findMotion(m_motionId); - if (nullptr == motion) { - qDebug() << "Find motion failed:" << m_motionId; - return; - } - setWindowTitle(unifiedWindowTitle(motion->name + (m_unsaved ? "*" : ""))); + clearUnsaveState(); } -void MotionEditWidget::setEditMotionClips(std::vector clips) +void MotionEditWidget::updateBones(RigType rigType, + const std::vector *rigBones, + const std::map *rigWeights, + const Outcome *outcome) { - m_timelineWidget->setClips(clips); + m_rigType = rigType; + + delete m_bones; + m_bones = nullptr; + + delete m_rigWeights; + m_rigWeights = nullptr; + + delete m_outcome; + m_outcome = nullptr; + + if (nullptr != rigBones && + nullptr != rigWeights && + nullptr != outcome) { + m_bones = new std::vector(*rigBones); + m_rigWeights = new std::map(*rigWeights); + m_outcome = new Outcome(*outcome); + + generatePreview(); + } } -void MotionEditWidget::generatePreviews() +void MotionEditWidget::generatePreview() { - if (nullptr != m_previewsGenerator) { - m_isPreviewsObsolete = true; + if (nullptr != m_previewGenerator) { + m_isPreviewObsolete = true; return; } - m_isPreviewsObsolete = false; + m_isPreviewObsolete = false; - const std::vector *rigBones = m_document->resultRigBones(); - const std::map *rigWeights = m_document->resultRigWeights(); - - if (nullptr == rigBones || nullptr == rigWeights) { + if (RigType::None == m_rigType || nullptr == m_bones || nullptr == m_rigWeights || nullptr == m_outcome) return; - } - m_previewsGenerator = new MotionsGenerator(m_document->rigType, rigBones, rigWeights, - m_document->currentRiggedOutcome()); - for (const auto &pose: m_document->poseMap) - m_previewsGenerator->addPoseToLibrary(pose.first, pose.second.frames, pose.second.yTranslationScale); - for (const auto &motion: m_document->motionMap) - m_previewsGenerator->addMotionToLibrary(motion.first, motion.second.clips); - m_previewsGenerator->addMotionToLibrary(QUuid(), m_timelineWidget->clips()); - m_previewsGenerator->addRequirement(QUuid()); QThread *thread = new QThread; - m_previewsGenerator->moveToThread(thread); - connect(thread, &QThread::started, m_previewsGenerator, &MotionsGenerator::process); - connect(m_previewsGenerator, &MotionsGenerator::finished, this, &MotionEditWidget::previewsReady); - connect(m_previewsGenerator, &MotionsGenerator::finished, thread, &QThread::quit); + + m_previewGenerator = new MotionsGenerator(m_rigType, *m_bones, *m_rigWeights, *m_outcome); + m_previewGenerator->enablePreviewMeshes(); + m_previewGenerator->addMotion(QUuid(), m_parameters); + m_previewGenerator->moveToThread(thread); + connect(thread, &QThread::started, m_previewGenerator, &MotionsGenerator::process); + connect(m_previewGenerator, &MotionsGenerator::finished, this, &MotionEditWidget::previewReady); + connect(m_previewGenerator, &MotionsGenerator::finished, thread, &QThread::quit); connect(thread, &QThread::finished, thread, &QThread::deleteLater); thread->start(); } -void MotionEditWidget::previewsReady() +void MotionEditWidget::previewReady() { - auto resultPreviewMeshs = m_previewsGenerator->takeResultPreviewMeshs(QUuid()); - m_clipPlayer->updateFrameMeshes(resultPreviewMeshs); - - delete m_previewsGenerator; - m_previewsGenerator = nullptr; + for (auto &it: m_frames) + delete it; + m_frames.clear(); + + std::vector> frames = m_previewGenerator->takeResultPreviewMeshes(QUuid()); + for (const auto &frame: frames) { + m_frames.push_back(frame.second); + } + + delete m_previewGenerator; + m_previewGenerator = nullptr; if (m_closed) { close(); return; } - if (m_isPreviewsObsolete) - generatePreviews(); + if (m_isPreviewObsolete) + generatePreview(); +} + +void MotionEditWidget::checkRenderQueue() +{ + if (m_renderQueue.empty()) + return; + + SimpleShaderMesh *mesh = m_renderQueue.front(); + m_renderQueue.pop(); + m_modelRenderWidget->updateMesh(mesh); } diff --git a/src/motioneditwidget.h b/src/motioneditwidget.h index 30dc6041..9088b84f 100644 --- a/src/motioneditwidget.h +++ b/src/motioneditwidget.h @@ -1,50 +1,68 @@ #ifndef DUST3D_MOTION_EDIT_WIDGET_H #define DUST3D_MOTION_EDIT_WIDGET_H -#include -#include +#include #include -#include "document.h" -#include "motiontimelinewidget.h" -#include "modelwidget.h" -#include "motionsgenerator.h" -#include "animationclipplayer.h" +#include +#include +#include +#include "vertebratamotion.h" +#include "rigger.h" +#include "outcome.h" -class MotionEditWidget : public QDialog +class SimpleShaderWidget; +class MotionsGenerator; +class SimpleShaderMesh; +class QScrollArea; + +class MotionEditWidget : public QMainWindow { Q_OBJECT -signals: - void addMotion(QUuid motionId, QString name, std::vector clips); - void setMotionClips(QUuid motionId, std::vector clips); - void renameMotion(QUuid motionId, QString name); public: - MotionEditWidget(const Document *document, QWidget *parent=nullptr); + MotionEditWidget(); ~MotionEditWidget(); -protected: - void closeEvent(QCloseEvent *event) override; - void reject() override; - QSize sizeHint() const override; +signals: + void parametersChanged(); + void addMotion(const QUuid &motionId, const QString &name, const std::map ¶meters); + void removeMotion(const QUuid &motionId); + void setMotionParameters(const QUuid &motionId, const std::map ¶meters); + void renameMotion(const QUuid &motionId, const QString &name); public slots: + void checkRenderQueue(); + void generatePreview(); + void previewReady(); + void updateBones(RigType rigType, + const std::vector *rigBones, + const std::map *rigWeights, + const Outcome *outcome); + void setEditMotionName(const QString &name); + void setEditMotionId(const QUuid &motionId); + void setEditMotionParameters(const std::map ¶meters); void updateTitle(); void save(); void clearUnsaveState(); - void setEditMotionId(QUuid poseId); - void setEditMotionName(QString name); - void setEditMotionClips(std::vector clips); - void setUnsavedState(); - void generatePreviews(); - void previewsReady(); + void updateParameters(); + void updateParametersArea(); +protected: + QSize sizeHint() const override; + void closeEvent(QCloseEvent *event) override; private: - const Document *m_document = nullptr; - MotionTimelineWidget *m_timelineWidget = nullptr; - ModelWidget *m_previewWidget = nullptr; - QUuid m_motionId; + QString m_name; + std::map m_parameters; + SimpleShaderWidget *m_modelRenderWidget = nullptr; + std::queue m_renderQueue; + MotionsGenerator *m_previewGenerator = nullptr; + bool m_isPreviewObsolete = false; + std::vector m_frames; + size_t m_frameIndex = 0; + RigType m_rigType = RigType::None; + std::vector *m_bones = nullptr; + std::map *m_rigWeights = nullptr; + Outcome *m_outcome = nullptr; QLineEdit *m_nameEdit = nullptr; - std::vector> m_keyframes; bool m_unsaved = false; bool m_closed = false; - bool m_isPreviewsObsolete = false; - MotionsGenerator *m_previewsGenerator = nullptr; - AnimationClipPlayer *m_clipPlayer = nullptr; + QUuid m_motionId; + QScrollArea *m_parametersArea = nullptr; }; #endif diff --git a/src/motionlistwidget.cpp b/src/motionlistwidget.cpp index fffed5dd..2f75811d 100644 --- a/src/motionlistwidget.cpp +++ b/src/motionlistwidget.cpp @@ -112,7 +112,8 @@ void MotionListWidget::mousePressEvent(QMouseEvent *event) bool startAdd = false; bool stopAdd = false; std::vector waitQueue; - for (const auto &childId: m_document->motionIdList) { + for (const auto &motionIt: m_document->motionMap) { + const auto &childId = motionIt.first; if (m_shiftStartMotionId == childId || motionId == childId) { if (startAdd) { stopAdd = true; @@ -169,9 +170,9 @@ void MotionListWidget::showContextMenu(const QPoint &pos) unorderedMotionIds.insert(m_currentSelectedMotionId); std::vector motionIds; - for (const auto &cand: m_document->motionIdList) { - if (unorderedMotionIds.find(cand) != unorderedMotionIds.end()) - motionIds.push_back(cand); + for (const auto &cand: m_document->motionMap) { + if (unorderedMotionIds.find(cand.first) != unorderedMotionIds.end()) + motionIds.push_back(cand.first); } QAction modifyAction(tr("Modify"), this); @@ -240,7 +241,9 @@ void MotionListWidget::reload() for (int i = 0; i < columns; i++) setColumnWidth(i, columnWidth); - std::vector orderedMotionIdList = m_document->motionIdList; + std::vector orderedMotionIdList; + for (const auto &motionIt: m_document->motionMap) + orderedMotionIdList.push_back(motionIt.first); std::sort(orderedMotionIdList.begin(), orderedMotionIdList.end(), [&](const QUuid &firstMotionId, const QUuid &secondMotionId) { const auto *firstMotion = m_document->findMotion(firstMotionId); const auto *secondMotion = m_document->findMotion(secondMotionId); diff --git a/src/motionmanagewidget.cpp b/src/motionmanagewidget.cpp index 63002329..dd0ec1c4 100644 --- a/src/motionmanagewidget.cpp +++ b/src/motionmanagewidget.cpp @@ -2,9 +2,9 @@ #include #include #include "motionmanagewidget.h" -#include "motioneditwidget.h" #include "theme.h" #include "infolabel.h" +#include "motioneditwidget.h" MotionManageWidget::MotionManageWidget(const Document *document, QWidget *parent) : QWidget(parent), @@ -65,21 +65,28 @@ void MotionManageWidget::showAddMotionDialog() void MotionManageWidget::showMotionDialog(QUuid motionId) { - MotionEditWidget *motionEditWidget = new MotionEditWidget(m_document); + MotionEditWidget *motionEditWidget = new MotionEditWidget; motionEditWidget->setAttribute(Qt::WA_DeleteOnClose); + motionEditWidget->updateBones(m_document->rigType, + m_document->resultRigBones(), + m_document->resultRigWeights(), + &m_document->currentRiggedOutcome()); if (!motionId.isNull()) { const Motion *motion = m_document->findMotion(motionId); if (nullptr != motion) { motionEditWidget->setEditMotionId(motionId); motionEditWidget->setEditMotionName(motion->name); - motionEditWidget->setEditMotionClips(motion->clips); + motionEditWidget->setEditMotionParameters(motion->parameters); motionEditWidget->clearUnsaveState(); - motionEditWidget->generatePreviews(); + motionEditWidget->generatePreview(); } } motionEditWidget->show(); - connect(motionEditWidget, &QDialog::destroyed, [=]() { + connect(motionEditWidget, &QMainWindow::destroyed, [=]() { emit unregisterDialog((QWidget *)motionEditWidget); }); + connect(motionEditWidget, &MotionEditWidget::addMotion, m_document, &Document::addMotion); + connect(motionEditWidget, &MotionEditWidget::renameMotion, m_document, &Document::renameMotion); + connect(motionEditWidget, &MotionEditWidget::setMotionParameters, m_document, &Document::setMotionParameters); emit registerDialog((QWidget *)motionEditWidget); } diff --git a/src/motionsgenerator.cpp b/src/motionsgenerator.cpp index 00ba4602..b36704a7 100644 --- a/src/motionsgenerator.cpp +++ b/src/motionsgenerator.cpp @@ -1,59 +1,50 @@ #include #include #include +#include +#include #include "motionsgenerator.h" -#include "posemeshcreator.h" -#include "poserconstruct.h" -#include "posedocument.h" -#include "boundingboxmesh.h" +#include "vertebratamotion.h" +#include "blockmesh.h" +#include "vertebratamotionparameterswidget.h" +#include "util.h" MotionsGenerator::MotionsGenerator(RigType rigType, - const std::vector *rigBones, - const std::map *rigWeights, + const std::vector &bones, + const std::map &rigWeights, const Outcome &outcome) : m_rigType(rigType), - m_rigBones(*rigBones), - m_rigWeights(*rigWeights), + m_bones(bones), + m_rigWeights(rigWeights), m_outcome(outcome) { } MotionsGenerator::~MotionsGenerator() { - for (auto &item: m_resultPreviewMeshs) { + for (auto &it: m_resultSnapshotMeshes) + delete it.second; + + for (auto &item: m_resultPreviewMeshes) { for (auto &subItem: item.second) { delete subItem.second; } } -#if ENABLE_PROCEDURAL_DEBUG - for (const auto &item: m_proceduralDebugPreviews) { - for (const auto &subItem: item.second) { - delete subItem; - } - } -#endif - delete m_poser; } -void MotionsGenerator::addPoseToLibrary(const QUuid &poseId, const std::vector, std::map>>> &frames, float yTranslationScale) +void MotionsGenerator::enablePreviewMeshes() { - m_poses[poseId] = frames; - m_posesYtranslationScales[poseId] = yTranslationScale; + m_previewMeshesEnabled = true; } -void MotionsGenerator::addMotionToLibrary(const QUuid &motionId, const std::vector &clips) +void MotionsGenerator::enableSnapshotMeshes() { - m_motions[motionId] = clips; + m_snapshotMeshesEnabled = true; } -void MotionsGenerator::addRequirement(const QUuid &motionId) +void MotionsGenerator::addMotion(const QUuid &motionId, const std::map ¶meters) { - m_requiredMotionIds.insert(motionId); -} - -const std::set &MotionsGenerator::requiredMotionIds() -{ - return m_requiredMotionIds; + m_motions[motionId] = parameters; } const std::set &MotionsGenerator::generatedMotionIds() @@ -61,249 +52,23 @@ const std::set &MotionsGenerator::generatedMotionIds() return m_generatedMotionIds; } -std::vector *MotionsGenerator::findMotionClips(const QUuid &motionId) +Model *MotionsGenerator::takeResultSnapshotMesh(const QUuid &motionId) { - auto findMotionResult = m_motions.find(motionId); - if (findMotionResult == m_motions.end()) + auto findResult = m_resultSnapshotMeshes.find(motionId); + if (findResult == m_resultSnapshotMeshes.end()) return nullptr; - std::vector &clips = findMotionResult->second; - return &clips; + auto result = findResult->second; + m_resultSnapshotMeshes.erase(findResult); + return result; } -std::vector, std::map>>> *MotionsGenerator::findPoseFrames(const QUuid &poseId) +std::vector> MotionsGenerator::takeResultPreviewMeshes(const QUuid &motionId) { - auto findPoseResult = m_poses.find(poseId); - if (findPoseResult == m_poses.end()) - return nullptr; - std::vector, std::map>>> &frames = findPoseResult->second; - return &frames; -} - -void MotionsGenerator::generatePreviewsForOutcomes(const std::vector> &outcomes, std::vector> &previews) -{ - for (const auto &item: outcomes) { - PoseMeshCreator *poseMeshCreator = new PoseMeshCreator(item.second.nodes(), m_outcome, m_rigWeights); - poseMeshCreator->createMesh(); - previews.push_back({item.first, poseMeshCreator->takeResultMesh()}); - delete poseMeshCreator; - } -} - -float MotionsGenerator::calculatePoseDuration(const QUuid &poseId) -{ - const std::vector, std::map>>> *pose = findPoseFrames(poseId); - if (nullptr == pose) - return 0; - float totalDuration = 0; - if (pose->size() > 1) { - // Pose with only one frame has zero duration - for (const auto &frame: *pose) { - totalDuration += valueOfKeyInMapOrEmpty(frame.first, "duration").toFloat(); - } - } - return totalDuration; -} - -float MotionsGenerator::calculateMotionDuration(const QUuid &motionId, std::set &visited) -{ - const std::vector *motionClips = findMotionClips(motionId); - if (!motionClips || motionClips->empty()) - return 0; - if (visited.find(motionId) != visited.end()) { - qDebug() << "Found recursive motion link"; - return 0; - } - float totalDuration = 0; - visited.insert(motionId); - for (int clipIndex = 0; clipIndex < (int)(*motionClips).size(); ++clipIndex) { - const auto &clip = (*motionClips)[clipIndex]; - if (clip.clipType == MotionClipType::Interpolation) - totalDuration += clip.duration; - else if (clip.clipType == MotionClipType::Pose) - totalDuration += calculatePoseDuration(clip.linkToId); - else if (clip.clipType == MotionClipType::Motion) - totalDuration += calculateMotionDuration(clip.linkToId, visited); - } - return totalDuration; -} - -void MotionsGenerator::generateMotion(const QUuid &motionId, std::set &visited, std::vector> &outcomes, std::vector *previews) -{ - if (visited.find(motionId) != visited.end()) { - qDebug() << "Found recursive motion link"; - return; - } - - visited.insert(motionId); - - std::vector *motionClips = findMotionClips(motionId); - if (!motionClips || motionClips->empty()) - return; - - std::vector timePoints; - float totalDuration = 0; - for (int clipIndex = 0; clipIndex < (int)(*motionClips).size(); ++clipIndex) { - auto &clip = (*motionClips)[clipIndex]; - if (clip.clipType == MotionClipType::Motion) { - std::set subVisited; - clip.duration = calculateMotionDuration(clip.linkToId, subVisited); - } else if (clip.clipType == MotionClipType::Pose) { - clip.duration = calculatePoseDuration(clip.linkToId); - } - timePoints.push_back(totalDuration); - totalDuration += clip.duration; - } - - auto findClipIndexByProgress = [=](float progress) { - for (size_t i = 0; i < timePoints.size(); ++i) { - if (progress >= timePoints[i] && i + 1 < timePoints.size() && progress <= timePoints[i + 1]) - return (int)i; - } - return (int)timePoints.size() - 1; - }; - - float interval = 1.0 / m_fps; - float lastProgress = 0; - if (totalDuration < interval) - totalDuration = interval; - for (float progress = 0; progress < totalDuration; ) { - int clipIndex = findClipIndexByProgress(progress); - if (-1 == clipIndex) { - qDebug() << "findClipIndexByProgress failed, progress:" << progress << "total duration:" << totalDuration << "interval:" << interval; - break; - } - float clipLocalProgress = progress - timePoints[clipIndex]; - const MotionClip &progressClip = (*motionClips)[clipIndex]; - if (MotionClipType::Interpolation == progressClip.clipType) { - if (clipIndex <= 0) { - qDebug() << "Clip type is interpolation, but clip sit at begin"; - break; - } - if (clipIndex >= (int)motionClips->size() - 1) { - qDebug() << "Clip type is interpolation, but clip sit at end"; - break; - } - const JointNodeTree *beginJointNodeTree = findClipEndJointNodeTree((*motionClips)[clipIndex - 1]); - if (nullptr == beginJointNodeTree) { - qDebug() << "findClipEndJointNodeTree failed"; - break; - } - const JointNodeTree *endJointNodeTree = nullptr; - if (MotionClipType::ProceduralAnimation == (*motionClips)[clipIndex + 1].clipType) { - endJointNodeTree = beginJointNodeTree; - } else { - endJointNodeTree = findClipBeginJointNodeTree((*motionClips)[clipIndex + 1]); - if (nullptr == endJointNodeTree) { - qDebug() << "findClipBeginJointNodeTree failed"; - break; - } - } - outcomes.push_back({progress - lastProgress, - generateInterpolation(progressClip.interpolationType, *beginJointNodeTree, *endJointNodeTree, clipLocalProgress / std::max((float)0.0001, progressClip.duration))}); - lastProgress = progress; - progress += interval; - continue; - } else if (MotionClipType::Pose == progressClip.clipType) { - const auto &frames = findPoseFrames(progressClip.linkToId); - float clipDuration = std::max((float)0.0001, progressClip.duration); - int frame = clipLocalProgress * frames->size() / clipDuration; - if (frame >= (int)frames->size()) - frame = frames->size() - 1; - int previousFrame = frame - 1; - if (previousFrame < 0) - previousFrame = frames->size() - 1; - int nextFrame = frame + 1; - if (nextFrame >= (int)frames->size()) - nextFrame = 0; - if (frame >= 0 && frame < (int)frames->size()) { - const JointNodeTree previousJointNodeTree = poseJointNodeTree(progressClip.linkToId, previousFrame); - const JointNodeTree jointNodeTree = poseJointNodeTree(progressClip.linkToId, frame); - const JointNodeTree nextJointNodeTree = poseJointNodeTree(progressClip.linkToId, nextFrame); - const JointNodeTree middleJointNodeTree = generateInterpolation(InterpolationType::Linear, previousJointNodeTree, nextJointNodeTree, 0.5); - outcomes.push_back({progress - lastProgress, - generateInterpolation(InterpolationType::Linear, jointNodeTree, middleJointNodeTree, 0.75)}); - lastProgress = progress; - } - progress += interval; - continue; - } else if (MotionClipType::Motion == progressClip.clipType) { - generateMotion(progressClip.linkToId, visited, outcomes); - progress += progressClip.duration; - continue; - } - progress += interval; - } -} - -JointNodeTree MotionsGenerator::generateInterpolation(InterpolationType interpolationType, const JointNodeTree &first, const JointNodeTree &second, float progress) -{ - return JointNodeTree::slerp(first, second, calculateInterpolation(interpolationType, progress)); -} - -const JointNodeTree &MotionsGenerator::poseJointNodeTree(const QUuid &poseId, int frame) -{ - auto findResult = m_poseJointNodeTreeMap.find({poseId, frame}); - if (findResult != m_poseJointNodeTreeMap.end()) - return findResult->second; - - const auto &frames = m_poses[poseId]; - const auto &posesYtranslationScale = m_posesYtranslationScales[poseId]; - - m_poser->reset(); - if (frame < (int)frames.size()) { - const auto ¶meters = frames[frame].second; - PoseDocument postDocument; - postDocument.fromParameters(&m_rigBones, parameters); - std::map> translatedParameters; - postDocument.toParameters(translatedParameters); - m_poser->parameters() = translatedParameters; - m_poser->setYtranslationScale(posesYtranslationScale); - } - m_poser->commit(); - auto insertResult = m_poseJointNodeTreeMap.insert({{poseId, frame}, m_poser->resultJointNodeTree()}); - return insertResult.first->second; -} - -const JointNodeTree *MotionsGenerator::findClipBeginJointNodeTree(const MotionClip &clip) -{ - if (MotionClipType::Pose == clip.clipType) { - const JointNodeTree &jointNodeTree = poseJointNodeTree(clip.linkToId, 0); - return &jointNodeTree; - } else if (MotionClipType::Motion == clip.clipType) { - const std::vector *motionClips = findMotionClips(clip.linkToId); - if (nullptr != motionClips && !motionClips->empty()) { - return findClipBeginJointNodeTree((*motionClips)[0]); - } - return nullptr; - } - return nullptr; -} - -const JointNodeTree *MotionsGenerator::findClipEndJointNodeTree(const MotionClip &clip) -{ - if (MotionClipType::Pose == clip.clipType) { - const std::vector, std::map>>> *poseFrames = findPoseFrames(clip.linkToId); - if (nullptr != poseFrames && !poseFrames->empty()) { - return &poseJointNodeTree(clip.linkToId, poseFrames->size() - 1); - } - return nullptr; - } else if (MotionClipType::Motion == clip.clipType) { - const std::vector *motionClips = findMotionClips(clip.linkToId); - if (nullptr != motionClips && !motionClips->empty()) { - return findClipEndJointNodeTree((*motionClips)[motionClips->size() - 1]); - } - return nullptr; - } - return nullptr; -} - -std::vector> MotionsGenerator::takeResultPreviewMeshs(const QUuid &motionId) -{ - auto findResult = m_resultPreviewMeshs.find(motionId); - if (findResult == m_resultPreviewMeshs.end()) + auto findResult = m_resultPreviewMeshes.find(motionId); + if (findResult == m_resultPreviewMeshes.end()) return {}; auto result = findResult->second; - m_resultPreviewMeshs.erase(findResult); + m_resultPreviewMeshes.erase(findResult); return result; } @@ -314,41 +79,342 @@ std::vector> MotionsGenerator::takeResultJointNo return {}; return findResult->second; } + +void MotionsGenerator::generateMotion(const QUuid &motionId) +{ + if (m_bones.empty()) + return; + + std::map> chains; + + QRegularExpression reJoints("^([a-zA-Z]+\\d*)_Joint\\d+$"); + QRegularExpression reSpine("^([a-zA-Z]+)\\d*$"); + for (int index = 0; index < (int)m_bones.size(); ++index) { + const auto &bone = m_bones[index]; + const auto &item = bone.name; + QRegularExpressionMatch match = reJoints.match(item); + if (match.hasMatch()) { + QString name = match.captured(1); + chains[name].push_back(index); + } else { + match = reSpine.match(item); + if (match.hasMatch()) { + QString name = match.captured(1); + if (item.startsWith(name + "0")) + chains[name + "0"].push_back(index); + else + chains[name].push_back(index); + } else if (item.startsWith("Virtual_")) { + //qDebug() << "Ignore connector:" << item; + } else { + qDebug() << "Unrecognized bone name:" << item; + } + } + } + + std::vector> spineBones; + auto findSpine = chains.find("Spine"); + if (findSpine != chains.end()) { + for (const auto &it: findSpine->second) { + spineBones.push_back({it, true}); + } + } + auto findNeck = chains.find("Neck"); + if (findNeck != chains.end()) { + for (const auto &it: findNeck->second) { + spineBones.push_back({it, true}); + } + } + std::reverse(spineBones.begin(), spineBones.end()); + auto findSpine0 = chains.find("Spine0"); + if (findSpine0 != chains.end()) { + for (const auto &it: findSpine0->second) { + spineBones.push_back({it, false}); + } + } + auto findTail = chains.find("Tail"); + if (findTail != chains.end()) { + for (const auto &it: findTail->second) { + spineBones.push_back({it, false}); + } + } + + double radiusScale = 0.5; + + std::vector spineNodes; + if (!spineBones.empty()) { + const auto &it = spineBones[0]; + if (it.second) { + spineNodes.push_back({m_bones[it.first].tailPosition, + m_bones[it.first].tailRadius * radiusScale, + it.first, + true}); + } else { + spineNodes.push_back({m_bones[it.first].headPosition, + m_bones[it.first].headRadius * radiusScale, + it.first, + false}); + } + } + std::map spineBoneToNodeMap; + for (size_t i = 0; i < spineBones.size(); ++i) { + const auto &it = spineBones[i]; + if (it.second) { + spineBoneToNodeMap[it.first] = i; + if (m_bones[it.first].name == "Spine1") + spineBoneToNodeMap[0] = spineNodes.size(); + spineNodes.push_back({m_bones[it.first].headPosition, + m_bones[it.first].headRadius * radiusScale, + it.first, + false}); + } else { + spineNodes.push_back({m_bones[it.first].tailPosition, + m_bones[it.first].tailRadius * radiusScale, + it.first, + true}); + } + } + + VertebrataMotion *vertebrataMotion = new VertebrataMotion; + + VertebrataMotion::Parameters parameters = + VertebrataMotionParametersWidget::toVertebrataMotionParameters(m_motions[motionId]); + if ("Vertical" == valueOfKeyInMapOrEmpty(m_bones[0].attributes, "spineDirection")) + parameters.biped = true; + vertebrataMotion->setParameters(parameters); + vertebrataMotion->setSpineNodes(spineNodes); + + double groundY = std::numeric_limits::max(); + for (const auto &it: spineNodes) { + if (it.position.y() - it.radius < groundY) + groundY = it.position.y() - it.radius; + } + + for (const auto &chain: chains) { + std::vector legNodes; + VertebrataMotion::Side side; + if (chain.first.startsWith("LeftLimb")) { + side = VertebrataMotion::Side::Left; + } else if (chain.first.startsWith("RightLimb")) { + side = VertebrataMotion::Side::Right; + } else { + continue; + } + int virtualBoneIndex = m_bones[chain.second[0]].parent; + if (-1 == virtualBoneIndex) + continue; + int spineBoneIndex = m_bones[virtualBoneIndex].parent; + auto findSpine = spineBoneToNodeMap.find(spineBoneIndex); + if (findSpine == spineBoneToNodeMap.end()) + continue; + legNodes.push_back({m_bones[virtualBoneIndex].headPosition, + m_bones[virtualBoneIndex].headRadius * radiusScale, + virtualBoneIndex, + false}); + legNodes.push_back({m_bones[virtualBoneIndex].tailPosition, + m_bones[virtualBoneIndex].tailRadius * radiusScale, + virtualBoneIndex, + true}); + for (const auto &it: chain.second) { + legNodes.push_back({m_bones[it].tailPosition, + m_bones[it].tailRadius * radiusScale, + it, + true}); + } + vertebrataMotion->setLegNodes(findSpine->second, side, legNodes); + for (const auto &it: legNodes) { + if (it.position.y() - it.radius < groundY) + groundY = it.position.y() - it.radius; + } + } + vertebrataMotion->setGroundY(groundY); + vertebrataMotion->generate(); + + std::vector> jointNodeTrees; + std::vector> previewMeshes; + Model *snapshotMesh = nullptr; + + std::vector bindTransforms(m_bones.size()); + for (size_t i = 0; i < m_bones.size(); ++i) { + const auto &bone = m_bones[i]; + QMatrix4x4 parentMatrix; + QMatrix4x4 translationMatrix; + if (-1 != bone.parent) { + const auto &parentBone = m_bones[bone.parent]; + parentMatrix = bindTransforms[bone.parent]; + translationMatrix.translate(bone.headPosition - parentBone.headPosition); + } else { + translationMatrix.translate(bone.headPosition); + } + bindTransforms[i] = parentMatrix * translationMatrix; + } + + const auto &vertebrataMotionFrames = vertebrataMotion->frames(); + for (size_t frameIndex = 0; frameIndex < vertebrataMotionFrames.size(); ++frameIndex) { + const auto &frame = vertebrataMotionFrames[frameIndex]; + std::vector transformedBones = m_bones; + for (const auto &node: frame) { + if (-1 == node.boneIndex) + continue; + if (node.isTail) { + transformedBones[node.boneIndex].tailPosition = node.position; + for (const auto &childIndex: m_bones[node.boneIndex].children) + transformedBones[childIndex].headPosition = node.position; + } else { + transformedBones[node.boneIndex].headPosition = node.position; + auto parentIndex = m_bones[node.boneIndex].parent; + if (-1 != parentIndex) { + transformedBones[parentIndex].tailPosition = node.position; + for (const auto &childIndex: m_bones[parentIndex].children) + transformedBones[childIndex].headPosition = node.position; + } + } + } + + std::vector poseTransforms(transformedBones.size()); + std::vector poseRotations(transformedBones.size()); + for (size_t i = 0; i < transformedBones.size(); ++i) { + const auto &oldBone = m_bones[i]; + const auto &bone = transformedBones[i]; + QMatrix4x4 parentMatrix; + QMatrix4x4 translationMatrix; + QMatrix4x4 rotationMatrix; + QMatrix4x4 parentRotation; + if (-1 != bone.parent) { + const auto &oldParentBone = m_bones[oldBone.parent]; + parentMatrix = poseTransforms[bone.parent]; + parentRotation = poseRotations[bone.parent]; + translationMatrix.translate(oldBone.headPosition - oldParentBone.headPosition); + QQuaternion rotation = QQuaternion::rotationTo((oldBone.tailPosition - oldBone.headPosition).normalized(), + (bone.tailPosition - bone.headPosition).normalized()); + rotationMatrix.rotate(rotation); + } else { + translationMatrix.translate(bone.headPosition + (bone.tailPosition - oldBone.tailPosition)); + } + poseTransforms[i] = parentMatrix * translationMatrix * parentRotation.inverted() * rotationMatrix; + poseRotations[i] = rotationMatrix; + } + + JointNodeTree jointNodeTree(&m_bones); + for (size_t i = 0; i < m_bones.size(); ++i) { + const auto &bone = transformedBones[i]; + if (-1 != bone.parent) { + jointNodeTree.updateMatrix(i, poseTransforms[bone.parent].inverted() * poseTransforms[i]); + } else { + jointNodeTree.updateMatrix(i, poseTransforms[i]); + } + } + + jointNodeTrees.push_back({0.017f, jointNodeTree}); + + const std::vector &jointNodes = jointNodeTree.nodes(); + std::vector jointNodeMatrices(m_bones.size()); + for (size_t i = 0; i < m_bones.size(); ++i) { + const auto &bone = transformedBones[i]; + QMatrix4x4 translationMatrix; + translationMatrix.translate(jointNodes[i].translation); + QMatrix4x4 rotationMatrix; + rotationMatrix.rotate(jointNodes[i].rotation); + if (-1 != bone.parent) { + jointNodeMatrices[i] *= jointNodeMatrices[bone.parent]; + } + jointNodeMatrices[i] *= translationMatrix * rotationMatrix; + } + for (size_t i = 0; i < m_bones.size(); ++i) + jointNodeMatrices[i] = jointNodeMatrices[i] * bindTransforms[i].inverted(); + + std::vector transformedVertices(m_outcome.vertices.size()); + for (size_t i = 0; i < m_outcome.vertices.size(); ++i) { + const auto &weight = m_rigWeights[i]; + for (int x = 0; x < 4; x++) { + float factor = weight.boneWeights[x]; + if (factor > 0) { + transformedVertices[i] += jointNodeMatrices[weight.boneIndices[x]] * m_outcome.vertices[i] * factor; + } + } + } + + std::vector frameVertices = transformedVertices; + std::vector> frameFaces = m_outcome.triangles; + std::vector> frameCornerNormals; + const std::vector> *triangleVertexNormals = m_outcome.triangleVertexNormals(); + if (nullptr == triangleVertexNormals) { + frameCornerNormals.resize(frameFaces.size()); + for (size_t i = 0; i < m_outcome.triangles.size(); ++i) { + const auto &triangle = m_outcome.triangles[i]; + QVector3D triangleNormal = QVector3D::normal( + transformedVertices[triangle[0]], + transformedVertices[triangle[1]], + transformedVertices[triangle[2]] + ); + frameCornerNormals[i] = { + triangleNormal, triangleNormal, triangleNormal + }; + } + } else { + frameCornerNormals = *triangleVertexNormals; + } + + if (m_snapshotMeshesEnabled) { + if (frameIndex == vertebrataMotionFrames.size() / 2) { + delete snapshotMesh; + snapshotMesh = new Model(frameVertices, frameFaces, frameCornerNormals); + } + } + + if (m_previewMeshesEnabled) { + BlockMesh blockMesh; + blockMesh.addBlock( + QVector3D(0.0, groundY + parameters.groundOffset, 0.0), 100.0, + QVector3D(0.0, groundY + parameters.groundOffset - 0.02, 0.0), 100.0); + for (const auto &bone: transformedBones) { + if (0 == bone.index) + continue; + blockMesh.addBlock(bone.headPosition, bone.headRadius * 0.5, + bone.tailPosition, bone.tailRadius * 0.5); + } + blockMesh.build(); + std::vector *resultVertices = blockMesh.takeResultVertices(); + std::vector> *resultFaces = blockMesh.takeResultFaces(); + size_t oldVertexCount = frameVertices.size(); + for (const auto &v: *resultVertices) + frameVertices.push_back(QVector3D(v.x() - 0.5, v.y(), v.z())); + for (const auto &f: *resultFaces) { + std::vector newF = f; + for (auto &v: newF) + v += oldVertexCount; + frameFaces.push_back(newF); + + QVector3D triangleNormal = QVector3D::normal( + (*resultVertices)[f[0]], + (*resultVertices)[f[1]], + (*resultVertices)[f[2]] + ); + frameCornerNormals.push_back({ + triangleNormal, triangleNormal, triangleNormal + }); + } + delete resultFaces; + delete resultVertices; + + previewMeshes.push_back({0.017f, new SimpleShaderMesh( + new std::vector(frameVertices), + new std::vector>(frameFaces), + new std::vector>(frameCornerNormals))}); + } + } + + if (m_previewMeshesEnabled) + m_resultPreviewMeshes[motionId] = previewMeshes; + m_resultJointNodeTrees[motionId] = jointNodeTrees; + m_resultSnapshotMeshes[motionId] = snapshotMesh; +} void MotionsGenerator::generate() { - m_poser = newPoser(m_rigType, m_rigBones); - if (nullptr == m_poser) - return; - - for (const auto &motionId: m_requiredMotionIds) { - std::set visited; -#if ENABLE_PROCEDURAL_DEBUG - std::vector previews; - generateMotion(motionId, visited, m_resultJointNodeTrees[motionId], &previews); -#else - generateMotion(motionId, visited, m_resultJointNodeTrees[motionId]); -#endif - generatePreviewsForOutcomes(m_resultJointNodeTrees[motionId], m_resultPreviewMeshs[motionId]); -#if ENABLE_PROCEDURAL_DEBUG - if (!previews.empty()) { - const auto &tree = m_resultJointNodeTrees[motionId]; - auto &target = m_resultPreviewMeshs[motionId]; - for (size_t i = 0; i < tree.size() && i < previews.size(); ++i) { - int edgeVertexCount = previews[i]->edgeVertexCount(); - if (0 == edgeVertexCount) - continue; - ShaderVertex *source = previews[i]->edgeVertices(); - ShaderVertex *edgeVertices = new ShaderVertex[edgeVertexCount]; - for (int j = 0; j < edgeVertexCount; ++j) { - edgeVertices[j] = source[j]; - } - target[i].second->updateEdges(edgeVertices, edgeVertexCount); - //target[i].second->updateTriangleVertices(nullptr, 0); - } - } -#endif - m_generatedMotionIds.insert(motionId); + for (const auto &it: m_motions) { + generateMotion(it.first); + m_generatedMotionIds.insert(it.first); } } diff --git a/src/motionsgenerator.h b/src/motionsgenerator.h index 75fcd97b..84317ff9 100644 --- a/src/motionsgenerator.h +++ b/src/motionsgenerator.h @@ -5,29 +5,27 @@ #include #include #include "model.h" +#include "simpleshadermesh.h" #include "rigger.h" #include "jointnodetree.h" #include "document.h" -#include "poser.h" - -#define ENABLE_PROCEDURAL_DEBUG 1 class MotionsGenerator : public QObject { Q_OBJECT public: MotionsGenerator(RigType rigType, - const std::vector *rigBones, - const std::map *rigWeights, + const std::vector &bones, + const std::map &rigWeights, const Outcome &outcome); ~MotionsGenerator(); - void addPoseToLibrary(const QUuid &poseId, const std::vector, std::map>>> &frames, float yTranslationScale); - void addMotionToLibrary(const QUuid &motionId, const std::vector &clips); - void addRequirement(const QUuid &motionId); - std::vector> takeResultPreviewMeshs(const QUuid &motionId); + void addMotion(const QUuid &motionId, const std::map ¶meters); + Model *takeResultSnapshotMesh(const QUuid &motionId); + std::vector> takeResultPreviewMeshes(const QUuid &motionId); std::vector> takeResultJointNodeTrees(const QUuid &motionId); - const std::set &requiredMotionIds(); const std::set &generatedMotionIds(); + void enablePreviewMeshes(); + void enableSnapshotMeshes(); void generate(); signals: void finished(); @@ -36,36 +34,19 @@ public slots: void process(); private: - void generateMotion(const QUuid &motionId, std::set &visited, std::vector> &outcomes, - std::vector *previews=nullptr); - const JointNodeTree &poseJointNodeTree(const QUuid &poseId, int frame); - JointNodeTree generateInterpolation(InterpolationType interpolationType, const JointNodeTree &first, const JointNodeTree &second, float progress); - const JointNodeTree *findClipBeginJointNodeTree(const MotionClip &clip); - const JointNodeTree *findClipEndJointNodeTree(const MotionClip &clip); - std::vector *findMotionClips(const QUuid &motionId); - std::vector, std::map>>> *findPoseFrames(const QUuid &poseId); - void generatePreviewsForOutcomes(const std::vector> &outcomes, std::vector> &previews); - float calculateMotionDuration(const QUuid &motionId, std::set &visited); - float calculatePoseDuration(const QUuid &poseId); - RigType m_rigType = RigType::None; - std::vector m_rigBones; + std::vector m_bones; std::map m_rigWeights; - std::map>> m_proceduralAnimations; -#if ENABLE_PROCEDURAL_DEBUG - std::map> m_proceduralDebugPreviews; -#endif Outcome m_outcome; - std::map, std::map>>>> m_poses; - std::map m_posesYtranslationScales; - std::map> m_motions; - std::set m_requiredMotionIds; + std::map> m_motions; std::set m_generatedMotionIds; - std::map>> m_resultPreviewMeshs; + std::map m_resultSnapshotMeshes; + std::map>> m_resultPreviewMeshes; std::map>> m_resultJointNodeTrees; - std::map, JointNodeTree> m_poseJointNodeTreeMap; - Poser *m_poser = nullptr; - int m_fps = 30; + bool m_previewMeshesEnabled = false; + bool m_snapshotMeshesEnabled = false; + + void generateMotion(const QUuid &motionId); }; #endif diff --git a/src/motiontimelinewidget.cpp b/src/motiontimelinewidget.cpp deleted file mode 100644 index 895334af..00000000 --- a/src/motiontimelinewidget.cpp +++ /dev/null @@ -1,411 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "motiontimelinewidget.h" -#include "motionclipwidget.h" -#include "theme.h" -#include "posewidget.h" -#include "motionwidget.h" -#include "tabwidget.h" - -MotionTimelineWidget::MotionTimelineWidget(const Document *document, QWidget *parent) : - QListWidget(parent), - m_document(document) -{ - setSelectionMode(QAbstractItemView::NoSelection); - setFocusPolicy(Qt::NoFocus); - - QPalette palette = this->palette(); - palette.setColor(QPalette::Window, Qt::transparent); - palette.setColor(QPalette::Base, Qt::transparent); - setPalette(palette); - - setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setSpacing(0); - setContentsMargins(0, 0, 0, 0); - setFlow(QListWidget::LeftToRight); - - auto minHeight = MotionClipWidget::maxSize().height(); - setMinimumHeight(minHeight + 4); - setMaximumHeight(minHeight + 4 + 20); -} - -QSize MotionTimelineWidget::sizeHint() const -{ - return QSize(0, MotionClipWidget::maxSize().height() + 4); -} - -const std::vector &MotionTimelineWidget::clips() -{ - return m_clips; -} - -void MotionTimelineWidget::setClips(std::vector clips) -{ - m_clips = clips; - if (m_currentSelectedIndex >= (int)m_clips.size()) - m_currentSelectedIndex = -1; - reload(); -} - -void MotionTimelineWidget::addPose(QUuid poseId) -{ - MotionClip clip; - clip.linkToId = poseId; - clip.clipType = MotionClipType::Pose; - clip.duration = 0; - addClipAfterCurrentIndex(clip); - emit clipsChanged(); - reload(); -} - -void MotionTimelineWidget::addClipAfterCurrentIndex(const MotionClip &clip) -{ - MotionClip interpolationClip; - bool needPrependInterpolationClip = false; - int afterIndex = m_currentSelectedIndex; - if (-1 == afterIndex) - afterIndex = m_clips.size() - 1; - - if (-1 != afterIndex) { - if (m_clips[afterIndex].clipType == MotionClipType::Interpolation) { - --afterIndex; - } - } - - if (clip.clipType == MotionClipType::Interpolation) { - if (m_clips.empty()) - return; - if (m_clips[m_clips.size() - 1].clipType == MotionClipType::Interpolation) - return; - } else { - if (!m_clips.empty() && m_clips[m_clips.size() - 1].clipType != MotionClipType::Interpolation) { - interpolationClip.interpolationType = InterpolationType::EaseInOutCubic; - interpolationClip.clipType = MotionClipType::Interpolation; - interpolationClip.duration = 1.0; - needPrependInterpolationClip = true; - } - } - - if (-1 == afterIndex) { - if (needPrependInterpolationClip) - m_clips.push_back(interpolationClip); - m_clips.push_back(clip); - } else { - if (needPrependInterpolationClip) - m_clips.insert(m_clips.begin() + afterIndex + 1, interpolationClip); - m_clips.insert(m_clips.begin() + afterIndex + 2, clip); - } -} - -void MotionTimelineWidget::addMotion(QUuid motionId) -{ - MotionClip clip; - clip.linkToId = motionId; - clip.clipType = MotionClipType::Motion; - clip.duration = 0; - addClipAfterCurrentIndex(clip); - emit clipsChanged(); - reload(); -} - -void MotionTimelineWidget::addProceduralAnimation(ProceduralAnimation proceduralAnimation) -{ - MotionClip clip; - clip.clipType = MotionClipType::ProceduralAnimation; - clip.duration = 0; - clip.proceduralAnimation = proceduralAnimation; - addClipAfterCurrentIndex(clip); - emit clipsChanged(); - reload(); -} - -void MotionTimelineWidget::setClipInterpolationType(int index, InterpolationType type) -{ - if (index >= (int)m_clips.size()) - return; - - if (m_clips[index].clipType != MotionClipType::Interpolation) - return; - - if (m_clips[index].interpolationType == type) - return; - - m_clips[index].interpolationType = type; - emit clipsChanged(); -} - -void MotionTimelineWidget::setClipDuration(int index, float duration) -{ - if (index >= (int)m_clips.size()) - return; - - if (m_clips[index].clipType == MotionClipType::Motion) - return; - - m_clips[index].duration = duration; - MotionClipWidget *widget = (MotionClipWidget *)itemWidget(item(index)); - widget->setClip(m_clips[index]); - widget->reload(); - emit clipsChanged(); -} - -void MotionTimelineWidget::reload() -{ - clear(); - - for (int row = 0; row < (int)m_clips.size(); ++row) { - MotionClipWidget *widget = new MotionClipWidget(m_document); - widget->setClip(m_clips[row]); - connect(widget, &MotionClipWidget::modifyInterpolation, this, [=]() { - showInterpolationSettingPopup(row, mapFromGlobal(QCursor::pos())); - }); - QListWidgetItem *item = new QListWidgetItem(this); - auto itemSize = widget->preferredSize(); - itemSize.setWidth(itemSize.width() + 2); - itemSize.setHeight(itemSize.height() + 2); - item->setSizeHint(itemSize); - item->setData(Qt::UserRole, QVariant(row)); - item->setBackground(Theme::black); - addItem(item); - setItemWidget(item, widget); - widget->reload(); - if (m_currentSelectedIndex == row) - widget->updateCheckedState(true); - } -} - -void MotionTimelineWidget::showInterpolationSettingPopup(int clipIndex, const QPoint &pos) -{ - QMenu popupMenu; - - QWidget *popup = new QWidget; - - QWidget *linearWidget = new QWidget; - QWidget *cubicWidget = new QWidget; - - QCheckBox *hasAcceleratingBox = new QCheckBox(); - hasAcceleratingBox->setText(tr("Accelerating")); - Theme::initCheckbox(hasAcceleratingBox); - - QCheckBox *hasDeceleratingBox = new QCheckBox(); - hasDeceleratingBox->setText(tr("Decelerating")); - Theme::initCheckbox(hasDeceleratingBox); - - QCheckBox *bouncingBeginBox = new QCheckBox(); - bouncingBeginBox->setText(tr("Bouncing")); - Theme::initCheckbox(bouncingBeginBox); - - QCheckBox *bouncingEndBox = new QCheckBox(); - bouncingEndBox->setText(tr("Bouncing")); - Theme::initCheckbox(bouncingEndBox); - - QStackedWidget *stackedWidget = new QStackedWidget; - stackedWidget->addWidget(linearWidget); - stackedWidget->addWidget(cubicWidget); - - bool currentIsLinear = InterpolationIsLinear(clips()[clipIndex].interpolationType); - - std::vector tabs = { - tr("Linear"), - tr("Cubic") - }; - TabWidget *tabWidget = new TabWidget(tabs); - tabWidget->setCurrentIndex(currentIsLinear ? 0 : 1); - stackedWidget->setCurrentIndex(currentIsLinear ? 0 : 1); - - auto updateBoxes = [=](InterpolationType type) { - hasAcceleratingBox->setChecked(InterpolationHasAccelerating(type)); - hasDeceleratingBox->setChecked(InterpolationHasDecelerating(type)); - bouncingBeginBox->setChecked(InterpolationIsBouncingBegin(type)); - bouncingEndBox->setChecked(InterpolationIsBouncingEnd(type)); - }; - updateBoxes(clips()[clipIndex].interpolationType); - - auto updateInterpolation = [=]() { - bool isLinear = 0 == tabWidget->currentIndex(); - bool bouncingBegin = bouncingBeginBox->isChecked(); - bool bouncingEnd = bouncingEndBox->isChecked(); - bool hasAccelerating = bouncingBegin || hasAcceleratingBox->isChecked(); - bool hasDecelerating = bouncingEnd || hasDeceleratingBox->isChecked(); - InterpolationType newType = InterpolationMakeFromOptions(isLinear, - hasAccelerating, hasDecelerating, - bouncingBegin, bouncingEnd); - setClipInterpolationType(clipIndex, newType); - updateBoxes(newType); - }; - - connect(tabWidget, &TabWidget::currentIndexChanged, this, [=](int index) { - stackedWidget->setCurrentIndex(index); - updateInterpolation(); - }); - - connect(hasAcceleratingBox, &QCheckBox::stateChanged, this, [=]() { - updateInterpolation(); - }); - - connect(hasDeceleratingBox, &QCheckBox::stateChanged, this, [=]() { - updateInterpolation(); - }); - - connect(bouncingBeginBox, &QCheckBox::stateChanged, this, [=]() { - updateInterpolation(); - }); - - connect(bouncingEndBox, &QCheckBox::stateChanged, this, [=]() { - updateInterpolation(); - }); - - updateInterpolation(); - - QDoubleSpinBox *durationEdit = new QDoubleSpinBox(); - durationEdit->setDecimals(2); - durationEdit->setMaximum(60); - durationEdit->setMinimum(0); - durationEdit->setSingleStep(0.1); - durationEdit->setValue(clips()[clipIndex].duration); - - connect(durationEdit, static_cast(&QDoubleSpinBox::valueChanged), this, [=](double value) { - setClipDuration(clipIndex, (float)value); - }); - - QVBoxLayout *mainLayout = new QVBoxLayout; - - QVBoxLayout *cubicLayout = new QVBoxLayout; - - QHBoxLayout *acceleratingLayout = new QHBoxLayout; - acceleratingLayout->addWidget(hasAcceleratingBox); - acceleratingLayout->addWidget(bouncingBeginBox); - cubicLayout->addLayout(acceleratingLayout); - - QHBoxLayout *deceleratingLayout = new QHBoxLayout; - deceleratingLayout->addWidget(hasDeceleratingBox); - deceleratingLayout->addWidget(bouncingEndBox); - cubicLayout->addLayout(deceleratingLayout); - - cubicWidget->setLayout(cubicLayout); - - mainLayout->addWidget(tabWidget); - mainLayout->addWidget(stackedWidget); - - { - QFormLayout *formLayout = new QFormLayout; - formLayout->addRow(tr("Duration:"), durationEdit); - mainLayout->addLayout(formLayout); - } - - popup->setLayout(mainLayout); - - QWidgetAction *action = new QWidgetAction(this); - action->setDefaultWidget(popup); - - popupMenu.addAction(action); - - popupMenu.exec(mapToGlobal(pos)); -} - -void MotionTimelineWidget::mousePressEvent(QMouseEvent *event) -{ - QListWidget::mousePressEvent(event); - if (event->button() == Qt::RightButton) { - showContextMenu(mapFromGlobal(event->globalPos())); - return; - } - QModelIndex itemIndex = indexAt(event->pos()); - if (!itemIndex.isValid()) - return; - if (event->button() == Qt::LeftButton) { - int row = itemIndex.row(); - setCurrentIndex(row); - } -} - -void MotionTimelineWidget::setCurrentIndex(int index) -{ - if (m_currentSelectedIndex == index || index >= (int)m_clips.size()) - return; - - if (-1 != m_currentSelectedIndex) { - MotionClipWidget *widget = (MotionClipWidget *)itemWidget(item(m_currentSelectedIndex)); - widget->updateCheckedState(false); - } - m_currentSelectedIndex = index; - { - MotionClipWidget *widget = (MotionClipWidget *)itemWidget(item(m_currentSelectedIndex)); - widget->updateCheckedState(true); - } -} - -void MotionTimelineWidget::removeClip(int index) -{ - if (index >= (int)m_clips.size()) - return; - - if (index == m_currentSelectedIndex) { - if (index - 2 >= 0) { - setCurrentIndex(index - 2); - } else if (index + 2 < (int)m_clips.size()) { - setCurrentIndex(index + 2); - // We need remove one clip and the interpolation, so here we -2 - m_currentSelectedIndex -= 2; - } else { - m_currentSelectedIndex = -1; - } - } - m_clips.erase(m_clips.begin() + index); - if (index - 2 >= 0) { - // Remove the interpolation before this clip - m_clips.erase(m_clips.begin() + index - 1); - - } else if (index < (int)m_clips.size()) { - // Remove the interpolation after this clip - m_clips.erase(m_clips.begin() + index); - } - emit clipsChanged(); - reload(); -} - -void MotionTimelineWidget::showContextMenu(const QPoint &pos) -{ - QMenu contextMenu(this); - - QAction doubleDurationAction(tr("Double Duration"), this); - if (-1 != m_currentSelectedIndex) { - if (m_clips[m_currentSelectedIndex].clipType == MotionClipType::Interpolation) { - connect(&doubleDurationAction, &QAction::triggered, [=]() { - setClipDuration(m_currentSelectedIndex, m_clips[m_currentSelectedIndex].duration * 2); - }); - contextMenu.addAction(&doubleDurationAction); - } - } - - QAction halveDurationAction(tr("Halve Duration"), this); - if (-1 != m_currentSelectedIndex) { - if (m_clips[m_currentSelectedIndex].clipType == MotionClipType::Interpolation) { - connect(&halveDurationAction, &QAction::triggered, [=]() { - setClipDuration(m_currentSelectedIndex, m_clips[m_currentSelectedIndex].duration / 2); - }); - contextMenu.addAction(&halveDurationAction); - } - } - - QAction deleteAction(tr("Delete"), this); - if (-1 != m_currentSelectedIndex) { - if (m_clips[m_currentSelectedIndex].clipType != MotionClipType::Interpolation) { - connect(&deleteAction, &QAction::triggered, [=]() { - removeClip(m_currentSelectedIndex); - }); - contextMenu.addAction(&deleteAction); - } - } - - contextMenu.exec(mapToGlobal(pos)); -} diff --git a/src/motiontimelinewidget.h b/src/motiontimelinewidget.h deleted file mode 100644 index 43fcdd15..00000000 --- a/src/motiontimelinewidget.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef DUST3D_MOTION_TIMELINE_WIDGET_H -#define DUST3D_MOTION_TIMELINE_WIDGET_H -#include -#include -#include -#include "document.h" -#include "interpolationtype.h" -#include "proceduralanimation.h" - -class MotionTimelineWidget : public QListWidget -{ - Q_OBJECT -signals: - void clipsChanged(); -public: - MotionTimelineWidget(const Document *document, QWidget *parent=nullptr); - const std::vector &clips(); - -public slots: - void setClips(std::vector clips); - void addPose(QUuid poseId); - void addMotion(QUuid motionId); - void addProceduralAnimation(ProceduralAnimation proceduralAnimation); - void reload(); - void setClipInterpolationType(int index, InterpolationType type); - void setClipDuration(int index, float duration); - void showInterpolationSettingPopup(int clipIndex, const QPoint &pos); - void showContextMenu(const QPoint &pos); - void setCurrentIndex(int index); - void removeClip(int index); - -protected: - void mousePressEvent(QMouseEvent *event) override; - QSize sizeHint() const override; - -private: - void addClipAfterCurrentIndex(const MotionClip &clip); - - std::vector m_clips; - const Document *m_document = nullptr; - int m_currentSelectedIndex = -1; -}; - -#endif diff --git a/src/normalanddepthmapsgenerator.cpp b/src/normalanddepthmapsgenerator.cpp index 1938d33a..ec7c9cac 100644 --- a/src/normalanddepthmapsgenerator.cpp +++ b/src/normalanddepthmapsgenerator.cpp @@ -56,8 +56,6 @@ void NormalAndDepthMapsGenerator::generate() void NormalAndDepthMapsGenerator::process() { generate(); - m_normalMapRender->setRenderThread(QGuiApplication::instance()->thread()); - m_depthMapRender->setRenderThread(QGuiApplication::instance()->thread()); emit finished(); } diff --git a/src/planemesh.cpp b/src/planemesh.cpp new file mode 100644 index 00000000..186d672e --- /dev/null +++ b/src/planemesh.cpp @@ -0,0 +1,59 @@ +#include +#include +#include "planemesh.h" + +void PlaneMesh::build() +{ + delete m_resultVertices; + m_resultVertices = new std::vector; + + delete m_resultQuads; + m_resultQuads = new std::vector>; + + std::map, size_t> *columnAndRowToIndexMap = new std::map, size_t>; + + auto addVertex = [=](const std::pair columnAndRow, const QVector3D &position) { + auto insertResult = columnAndRowToIndexMap->insert({columnAndRow, m_resultVertices->size()}); + if (insertResult.second) { + m_resultVertices->push_back(position); + } + return insertResult.first->second; + }; + + QVector3D perpunicularAxis = QVector3D::crossProduct(m_axis, m_normal); + QVector3D stepWidth = m_axis * m_radius; + QVector3D stepHeight = perpunicularAxis * m_radius; + //qDebug() << "stepWidth:" << stepWidth.x() << "," << stepWidth.y() << "," << stepWidth.z(); + //qDebug() << "stepHeight:" << stepHeight.x() << "," << stepHeight.y() << "," << stepHeight.z(); + for (size_t row = 0; row < m_halfRows; ++row) { + for (size_t column = 0; column < m_halfColumns; ++column) { + QVector3D bottomLeft = m_origin + stepHeight * (double)row + stepWidth * (double)column; + std::vector positions = { + bottomLeft, + bottomLeft + stepHeight, + bottomLeft + stepHeight + stepWidth, + bottomLeft + stepWidth + }; + //qDebug() << "column:" << column << "row:" << row; + //for (size_t i = 0; i < 4; ++i) { + // qDebug() << "position[" << i << "]:" << positions[i].x() << "," << positions[i].y() << "," << positions[i].z(); + //} + m_resultQuads->push_back({ + addVertex({column + 0, row + 0}, positions[0]), + addVertex({column + 0, row + 1}, positions[1]), + addVertex({column + 1, row + 1}, positions[2]), + addVertex({column + 1, row + 0}, positions[3]) + }); + } + } + + delete columnAndRowToIndexMap; + + delete m_resultFaces; + m_resultFaces = new std::vector>; + m_resultFaces->reserve(m_resultQuads->size() * 2); + for (const auto &quad: *m_resultQuads) { + m_resultFaces->push_back({quad[0], quad[1], quad[2]}); + m_resultFaces->push_back({quad[2], quad[3], quad[0]}); + } +} diff --git a/src/planemesh.h b/src/planemesh.h new file mode 100644 index 00000000..3937effd --- /dev/null +++ b/src/planemesh.h @@ -0,0 +1,66 @@ +#ifndef DUST3D_PLANE_MESH_H +#define DUST3D_PLANE_MESH_H +#include +#include + +class PlaneMesh +{ +public: + PlaneMesh(const QVector3D &normal, + const QVector3D &axis, + const QVector3D &origin, + double radius, + size_t halfColumns, + size_t halfRows) : + m_normal(normal), + m_axis(axis), + m_origin(origin), + m_radius(radius), + m_halfColumns(halfColumns), + m_halfRows(halfRows) + { + } + + ~PlaneMesh() + { + delete m_resultVertices; + delete m_resultQuads; + delete m_resultFaces; + } + + std::vector *takeResultVertices() + { + std::vector *resultVertices = m_resultVertices; + m_resultVertices = nullptr; + return resultVertices; + } + + std::vector> *takeResultQuads() + { + std::vector> *resultQuads = m_resultQuads; + m_resultQuads = nullptr; + return resultQuads; + } + + std::vector> *takeResultFaces() + { + std::vector> *resultFaces = m_resultFaces; + m_resultFaces = nullptr; + return resultFaces; + } + + void build(); + +private: + std::vector *m_resultVertices = nullptr; + std::vector> *m_resultQuads = nullptr; + std::vector> *m_resultFaces = nullptr; + QVector3D m_normal; + QVector3D m_axis; + QVector3D m_origin; + double m_radius = 0.0; + size_t m_halfColumns = 0; + size_t m_halfRows = 0; +}; + +#endif diff --git a/src/posedocument.cpp b/src/posedocument.cpp deleted file mode 100644 index 7c894d69..00000000 --- a/src/posedocument.cpp +++ /dev/null @@ -1,734 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "posedocument.h" -#include "rigger.h" -#include "util.h" -#include "document.h" -#include "snapshot.h" -#include "snapshotxml.h" - -const float PoseDocument::m_nodeRadius = 0.01; -const float PoseDocument::m_groundPlaneHalfThickness = 0.005 / 4; -const bool PoseDocument::m_hideRootAndVirtual = true; -const float PoseDocument::m_outcomeScaleFactor = 0.5; - -void PoseDocument::setSideVisiableState(SkeletonSide side, bool visible) -{ - bool isSideVisible = m_hiddenSides.find(side) == m_hiddenSides.end(); - if (isSideVisible == visible) - return; - if (visible) - m_hiddenSides.erase(side); - else - m_hiddenSides.insert(side); - emit sideVisibleStateChanged(side); - const QUuid partId = m_partIdMap[side]; - partMap[partId].visible = visible; - emit partVisibleStateChanged(partId); -} - -bool PoseDocument::isSideVisible(SkeletonSide side) -{ - return m_hiddenSides.find(side) == m_hiddenSides.end(); -} - -bool PoseDocument::hasPastableNodesInClipboard() const -{ - const QClipboard *clipboard = QApplication::clipboard(); - const QMimeData *mimeData = clipboard->mimeData(); - if (mimeData->hasText()) { - if (-1 != mimeData->text().indexOf("text().indexOf(" nodeIdSet) const -{ - std::map> parameters; - toParameters(parameters, nodeIdSet); - if (parameters.empty()) - return; - Document document; - QUuid poseId = QUuid::createUuid(); - auto &pose = document.poseMap[poseId]; - pose.id = poseId; - pose.frames.push_back({std::map(), parameters}); - document.poseIdList.push_back(poseId); - - Snapshot snapshot; - std::set limitPoseIds; - document.toSnapshot(&snapshot, limitPoseIds, DocumentToSnapshotFor::Poses); - QString snapshotXml; - QXmlStreamWriter xmlStreamWriter(&snapshotXml); - saveSkeletonToXmlStream(&snapshot, &xmlStreamWriter); - QClipboard *clipboard = QApplication::clipboard(); - clipboard->setText(snapshotXml); -} - -void PoseDocument::saveHistoryItem() -{ - PoseHistoryItem item; - toParameters(item.parameters); - m_undoItems.push_back(item); -} - -bool PoseDocument::undoable() const -{ - return m_undoItems.size() >= 2; -} - -bool PoseDocument::redoable() const -{ - return !m_redoItems.empty(); -} - -void PoseDocument::undo() -{ - if (!undoable()) - return; - m_redoItems.push_back(m_undoItems.back()); - m_undoItems.pop_back(); - const auto &item = m_undoItems.back(); - fromParameters(&m_riggerBones, item.parameters); -} - -void PoseDocument::redo() -{ - if (m_redoItems.empty()) - return; - m_undoItems.push_back(m_redoItems.back()); - const auto &item = m_redoItems.back(); - fromParameters(&m_riggerBones, item.parameters); - m_redoItems.pop_back(); -} - -void PoseDocument::paste() -{ - const QClipboard *clipboard = QApplication::clipboard(); - const QMimeData *mimeData = clipboard->mimeData(); - if (mimeData->hasText()) { - QXmlStreamReader xmlStreamReader(mimeData->text()); - Snapshot snapshot; - loadSkeletonFromXmlStream(&snapshot, xmlStreamReader); - if (snapshot.poses.empty()) - return; - const auto &firstPose = *snapshot.poses.begin(); - if (firstPose.second.empty()) - return; - const auto &firstFrame = *firstPose.second.begin(); - fromParameters(&m_riggerBones, firstFrame.second); - saveHistoryItem(); - } -} - -void PoseDocument::updateTurnaround(const QImage &image) -{ - turnaround = image; - emit turnaroundChanged(); -} - -void PoseDocument::updateOtherFramesParameters(const std::vector>> &otherFramesParameters) -{ - m_otherFramesParameters = otherFramesParameters; -} - -void PoseDocument::resetWithoutNotifingParametersChanged() -{ - nodeMap.clear(); - edgeMap.clear(); - partMap.clear(); - m_otherIds.clear(); - m_boneNameToIdsMap.clear(); - m_partIdMap.clear(); - emit cleanup(); -} - -void PoseDocument::reset() -{ - resetWithoutNotifingParametersChanged(); - emit parametersChanged(); -} - -void PoseDocument::clearHistories() -{ - m_undoItems.clear(); - m_redoItems.clear(); -} - -void PoseDocument::updateBonesFromParameters(std::vector *bones, - const std::map> ¶meters, - float firstSpineBoneLength, - const QVector3D &firstSpineBonePosition, - const QVector3D &neckJoint1BoneDirection) -{ - float firstSpineBoneLengthFromParameters = 0.0; - QVector3D firstSpineBonePositionFromParameters; - firstSpinePositionAndLengthFromParameters(parameters, - &firstSpineBoneLengthFromParameters, - &firstSpineBonePositionFromParameters); - float boneScaleFactor = 1.0; - QVector3D firstSpineBonePositionOffset; - if (firstSpineBoneLengthFromParameters > 0 && firstSpineBoneLength > 0) { - boneScaleFactor = firstSpineBoneLengthFromParameters / firstSpineBoneLength; - firstSpineBonePositionOffset = firstSpineBonePositionFromParameters - firstSpineBonePosition; - } - //QVector3D neckJoint1DirectionInParameters; - //neckJoint1DirectionFromParameters(parameters, &neckJoint1DirectionInParameters); - //QQuaternion neckJoint1Rotation = QQuaternion::rotationTo(neckJoint1DirectionInParameters, neckJoint1BoneDirection); - for (auto &bone: *bones) { - const auto findParameterResult = parameters.find(bone.name); - if (findParameterResult == parameters.end()) { - bone.headPosition *= boneScaleFactor; - bone.tailPosition *= boneScaleFactor; - bone.headPosition += firstSpineBonePositionOffset; - bone.tailPosition += firstSpineBonePositionOffset; - continue; - } - const auto &map = findParameterResult->second; - { - auto findXResult = map.find("fromX"); - auto findYResult = map.find("fromY"); - auto findZResult = map.find("fromZ"); - if (findXResult != map.end() || - findYResult != map.end() || - findZResult != map.end()) { - bone.headPosition = { - valueOfKeyInMapOrEmpty(map, "fromX").toFloat(), - valueOfKeyInMapOrEmpty(map, "fromY").toFloat(), - valueOfKeyInMapOrEmpty(map, "fromZ").toFloat() - }; - } - } - { - auto findXResult = map.find("toX"); - auto findYResult = map.find("toY"); - auto findZResult = map.find("toZ"); - if (findXResult != map.end() || - findYResult != map.end() || - findZResult != map.end()) { - QVector3D toPosition = { - valueOfKeyInMapOrEmpty(map, "toX").toFloat(), - valueOfKeyInMapOrEmpty(map, "toY").toFloat(), - valueOfKeyInMapOrEmpty(map, "toZ").toFloat() - }; - bone.tailPosition = toPosition; - } - } - //if (bone.name.startsWith("Neck_")) { - //bone.tailPosition = bone.headPosition + - // neckJoint1Rotation.rotatedVector(bone.tailPosition - bone.headPosition); - //} - } -} - -void PoseDocument::fromParameters(const std::vector *rigBones, - const std::map> ¶meters) -{ - if (nullptr == rigBones || rigBones->empty()) { - m_riggerBones.clear(); - return; - } - - if (&m_riggerBones != rigBones) - m_riggerBones = *rigBones; - - float firstSpineBoneLength = 0.0; - QVector3D firstSpineBonePosition; - QVector3D neckJoint1BoneDirection = QVector3D(0.0, 1.0, 0.0); - for (const auto &bone: *rigBones) { - if ("Spine1" == bone.name) { - firstSpineBonePosition = bone.headPosition; - firstSpineBoneLength = bone.headPosition.distanceToPoint(bone.tailPosition); - } else if ("Neck_Joint1" == bone.name) { - neckJoint1BoneDirection = (bone.tailPosition - bone.headPosition).normalized(); - } - } - - std::vector bones = *rigBones; - updateBonesFromParameters(&bones, - parameters, - firstSpineBoneLength, - firstSpineBonePosition, - neckJoint1BoneDirection); - - resetWithoutNotifingParametersChanged(); - - for (const auto &otherParameters: m_otherFramesParameters) { - std::vector otherBones = *rigBones; - updateBonesFromParameters(&otherBones, - otherParameters, - firstSpineBoneLength, - firstSpineBonePosition, - neckJoint1BoneDirection); - - std::map> boneNameToIdsMap; - parametersToNodes(&otherBones, - &boneNameToIdsMap, - &m_partIdMap, - true); - } - - parametersToNodes(&bones, - &m_boneNameToIdsMap, - &m_partIdMap, - false); - - emit parametersChanged(); -} - -void PoseDocument::parametersToNodes(const std::vector *rigBones, - std::map> *boneNameToIdsMap, - std::map *m_partIdMap, - bool isOther) -{ - if (nullptr == rigBones || rigBones->empty()) { - return; - } - - std::set newAddedNodeIds; - std::set newAddedEdgeIds; - - auto addPartIdOfSide = [=](SkeletonSide side) { - if (m_partIdMap->find(side) != m_partIdMap->end()) - return; - QUuid partId = QUuid::createUuid(); - auto &bonesPart = this->partMap[partId]; - bonesPart.id = partId; - bonesPart.visible = this->m_hiddenSides.find(side) == this->m_hiddenSides.end(); - (*m_partIdMap)[side] = partId; - }; - addPartIdOfSide(SkeletonSide::Left); - addPartIdOfSide(SkeletonSide::None); - addPartIdOfSide(SkeletonSide::Right); - - //qDebug() << "rigBones size:" << rigBones->size(); - - std::vector> edgePairs; - for (size_t i = m_hideRootAndVirtual ? 1 : 0; i < rigBones->size(); ++i) { - const auto &bone = (*rigBones)[i]; - for (const auto &child: bone.children) { - //qDebug() << "Add pair:" << bone.name << "->" << (*rigBones)[child].name; - edgePairs.push_back({i, child}); - } - } - std::map boneIndexToHeadNodeIdMap; - for (const auto &edgePair: edgePairs) { - QUuid firstNodeId, secondNodeId; - SkeletonSide firstNodeSide = SkeletonSideFromBoneName((*rigBones)[edgePair.first].name); - SkeletonSide secondNodeSide = SkeletonSideFromBoneName((*rigBones)[edgePair.second].name); - auto findFirst = boneIndexToHeadNodeIdMap.find(edgePair.first); - if (findFirst == boneIndexToHeadNodeIdMap.end()) { - const auto &bone = (*rigBones)[edgePair.first]; - if (!bone.name.startsWith("Virtual_") || !m_hideRootAndVirtual) { - SkeletonNode node; - node.partId = (*m_partIdMap)[firstNodeSide]; - node.id = QUuid::createUuid(); - partMap[node.partId].nodeIds.push_back(node.id); - node.setRadius(m_nodeRadius); - node.setX(fromOutcomeX(bone.headPosition.x())); - node.setY(fromOutcomeY(bone.headPosition.y())); - node.setZ(fromOutcomeZ(bone.headPosition.z())); - node.name = bone.name + "Start"; - nodeMap[node.id] = node; - //qDebug() << "Add first node:" << (*rigBones)[edgePair.first].name; - newAddedNodeIds.insert(node.id); - boneIndexToHeadNodeIdMap[edgePair.first] = node.id; - firstNodeId = node.id; - } - } else { - firstNodeId = findFirst->second; - } - auto findSecond = boneIndexToHeadNodeIdMap.find(edgePair.second); - if (findSecond == boneIndexToHeadNodeIdMap.end()) { - const auto &bone = (*rigBones)[edgePair.second]; - if (!bone.name.startsWith("Virtual_") || !m_hideRootAndVirtual) { - SkeletonNode node; - node.partId = (*m_partIdMap)[secondNodeSide]; - node.id = QUuid::createUuid(); - partMap[node.partId].nodeIds.push_back(node.id); - node.setRadius(m_nodeRadius); - node.setX(fromOutcomeX(bone.headPosition.x())); - node.setY(fromOutcomeY(bone.headPosition.y())); - node.setZ(fromOutcomeZ(bone.headPosition.z())); - node.name = bone.name; - nodeMap[node.id] = node; - //qDebug() << "Add second node:" << (*rigBones)[edgePair.second].name; - newAddedNodeIds.insert(node.id); - boneIndexToHeadNodeIdMap[edgePair.second] = node.id; - secondNodeId = node.id; - } - } else { - secondNodeId = findSecond->second; - } - - if (firstNodeId.isNull() || secondNodeId.isNull()) { - continue; - } - - if (firstNodeSide != secondNodeSide) { - qDebug() << "First node side:" << SkeletonSideToDispName(firstNodeSide) << "is different with second node side:" << SkeletonSideToDispName(secondNodeSide); - continue; - } - - SkeletonEdge edge; - edge.partId = (*m_partIdMap)[firstNodeSide]; - edge.id = QUuid::createUuid(); - edge.nodeIds.push_back(firstNodeId); - edge.nodeIds.push_back(secondNodeId); - edgeMap[edge.id] = edge; - newAddedEdgeIds.insert(edge.id); - nodeMap[firstNodeId].edgeIds.push_back(edge.id); - nodeMap[secondNodeId].edgeIds.push_back(edge.id); - } - - for (size_t i = m_hideRootAndVirtual ? 1 : 0; i < rigBones->size(); ++i) { - if (boneIndexToHeadNodeIdMap.find(i) != boneIndexToHeadNodeIdMap.end()) - continue; - const auto &bone = (*rigBones)[i]; - if (!bone.children.empty()) - continue; - if (!bone.name.startsWith("Virtual_") || !m_hideRootAndVirtual) { - SkeletonSide side = SkeletonSideFromBoneName(bone.name); - - SkeletonNode node; - node.partId = (*m_partIdMap)[side]; - node.id = QUuid::createUuid(); - partMap[node.partId].nodeIds.push_back(node.id); - node.setRadius(m_nodeRadius); - node.setX(fromOutcomeX(bone.headPosition.x())); - node.setY(fromOutcomeY(bone.headPosition.y())); - node.setZ(fromOutcomeZ(bone.headPosition.z())); - - nodeMap[node.id] = node; - newAddedNodeIds.insert(node.id); - boneIndexToHeadNodeIdMap[i] = node.id; - } - } - - for (size_t i = m_hideRootAndVirtual ? 1 : 0; i < rigBones->size(); ++i) { - const auto &bone = (*rigBones)[i]; - if (m_hideRootAndVirtual && bone.name.startsWith("Virtual_")) - continue; - if (bone.children.empty()) { - SkeletonSide side = SkeletonSideFromBoneName(bone.name); - - const QUuid &firstNodeId = boneIndexToHeadNodeIdMap[i]; - - SkeletonNode node; - node.partId = (*m_partIdMap)[side]; - node.id = QUuid::createUuid(); - partMap[node.partId].nodeIds.push_back(node.id); - node.setRadius(m_nodeRadius / 2); - node.setX(fromOutcomeX(bone.tailPosition.x())); - node.setY(fromOutcomeY(bone.tailPosition.y())); - node.setZ(fromOutcomeZ(bone.tailPosition.z())); - nodeMap[node.id] = node; - newAddedNodeIds.insert(node.id); - (*boneNameToIdsMap)[bone.name] = {firstNodeId, node.id}; - - SkeletonEdge edge; - edge.partId = (*m_partIdMap)[side]; - edge.id = QUuid::createUuid(); - partMap[node.partId].nodeIds.push_back(node.id); - edge.nodeIds.push_back(firstNodeId); - edge.nodeIds.push_back(node.id); - edgeMap[edge.id] = edge; - newAddedEdgeIds.insert(edge.id); - nodeMap[firstNodeId].edgeIds.push_back(edge.id); - nodeMap[node.id].edgeIds.push_back(edge.id); - - //qDebug() << "Add pair:" << bone.name << "->" << "~"; - continue; - } - if (boneIndexToHeadNodeIdMap.find(i) == boneIndexToHeadNodeIdMap.end()) - continue; - for (const auto &child: bone.children) { - if (boneIndexToHeadNodeIdMap.find(child) == boneIndexToHeadNodeIdMap.end()) - continue; - (*boneNameToIdsMap)[bone.name] = {boneIndexToHeadNodeIdMap[i], boneIndexToHeadNodeIdMap[child]}; - } - } - - auto findRootNodeId = boneIndexToHeadNodeIdMap.find(0); - if (findRootNodeId != boneIndexToHeadNodeIdMap.end()) { - nodeMap[findRootNodeId->second].setRadius(m_nodeRadius * 2); - } - - if (isOther) { - for (const auto &nodeIt: newAddedNodeIds) - m_otherIds.insert(nodeIt); - for (const auto &edgeIt: newAddedEdgeIds) - m_otherIds.insert(edgeIt); - } - - for (const auto &nodeIt: newAddedNodeIds) { - emit nodeAdded(nodeIt); - } - for (const auto &edgeIt: newAddedEdgeIds) { - emit edgeAdded(edgeIt); - } - - for (const auto &it: *m_partIdMap) { - emit partVisibleStateChanged(it.second); - } -} - -void PoseDocument::moveNodeBy(QUuid nodeId, float x, float y, float z) -{ - auto it = nodeMap.find(nodeId); - if (it == nodeMap.end()) { - qDebug() << "Find node failed:" << nodeId; - return; - } - it->second.addX(x); - it->second.addY(y); - it->second.addZ(z); - emit nodeOriginChanged(it->first); - emit parametersChanged(); -} - -void PoseDocument::setNodeOrigin(QUuid nodeId, float x, float y, float z) -{ - auto it = nodeMap.find(nodeId); - if (it == nodeMap.end()) { - qDebug() << "Find node failed:" << nodeId; - return; - } - it->second.setX(x); - it->second.setY(y); - it->second.setZ(z); - auto part = partMap.find(it->second.partId); - if (part != partMap.end()) - part->second.dirty = true; - emit nodeOriginChanged(nodeId); - emit parametersChanged(); -} - -float PoseDocument::findFootBottomY() const -{ - auto maxY = std::numeric_limits::lowest(); - for (const auto &nodeIt: nodeMap) { - auto y = nodeIt.second.getY() + nodeIt.second.radius; - if (y > maxY) - maxY = y; - } - return maxY; -} - -void PoseDocument::toParameters(std::map> ¶meters, const std::set &limitNodeIds) const -{ - for (const auto &item: m_boneNameToIdsMap) { - const auto &boneNodeIdPair = item.second; - auto findFirstNode = nodeMap.find(boneNodeIdPair.first); - if (findFirstNode == nodeMap.end()) { - continue; - } - auto findSecondNode = nodeMap.find(boneNodeIdPair.second); - if (findSecondNode == nodeMap.end()) { - continue; - } - if (limitNodeIds.empty() || limitNodeIds.find(boneNodeIdPair.first) != limitNodeIds.end() || - limitNodeIds.find(boneNodeIdPair.second) != limitNodeIds.end()) { - auto &boneParameter = parameters[item.first]; - boneParameter["fromX"] = QString::number(toOutcomeX(findFirstNode->second.getX())); - boneParameter["fromY"] = QString::number(toOutcomeY(findFirstNode->second.getY())); - boneParameter["fromZ"] = QString::number(toOutcomeZ(findFirstNode->second.getZ())); - boneParameter["toX"] = QString::number(toOutcomeX(findSecondNode->second.getX())); - boneParameter["toY"] = QString::number(toOutcomeY(findSecondNode->second.getY())); - boneParameter["toZ"] = QString::number(toOutcomeZ(findSecondNode->second.getZ())); - } - } -} - -float PoseDocument::fromOutcomeX(float x) -{ - return x * m_outcomeScaleFactor + 0.5; -} - -float PoseDocument::toOutcomeX(float x) -{ - return (x - 0.5) / m_outcomeScaleFactor; -} - -float PoseDocument::fromOutcomeY(float y) -{ - return -y * m_outcomeScaleFactor + 0.5; -} - -float PoseDocument::toOutcomeY(float y) -{ - return (0.5 - y) / m_outcomeScaleFactor; -} - -float PoseDocument::fromOutcomeZ(float z) -{ - return -z * m_outcomeScaleFactor + 1; -} - -float PoseDocument::toOutcomeZ(float z) -{ - return (1.0 - z) / m_outcomeScaleFactor; -} - -QString PoseDocument::findBoneNameByNodeId(const QUuid &nodeId) -{ - for (const auto &item: m_boneNameToIdsMap) { - if (nodeId == item.second.first || nodeId == item.second.second) - return item.first; - } - return QString(); -} - -void PoseDocument::switchChainSide(const std::set nodeIds) -{ - QRegularExpression reJoints("^(Left|Right)([a-zA-Z]+\\d*)_(Joint\\d+)$"); - - std::set baseNames; - for (const auto &nodeId: nodeIds) { - QString boneName = findBoneNameByNodeId(nodeId); - if (boneName.isEmpty()) { - //qDebug() << "Find bone name for node failed:" << nodeId; - continue; - } - - QRegularExpressionMatch match = reJoints.match(boneName); - if (!match.hasMatch()) { - //qDebug() << "Match bone name for side failed:" << boneName; - continue; - } - - QString baseName = match.captured(2); - baseNames.insert(baseName); - } - - auto switchYZ = [=](const QUuid &first, const QUuid &second) { - auto findFirstNode = nodeMap.find(first); - if (findFirstNode == nodeMap.end()) - return; - auto findSecondNode = nodeMap.find(second); - if (findSecondNode == nodeMap.end()) - return; - { - float firstNodeY = findFirstNode->second.getY(); - float secondNodeY = findSecondNode->second.getY(); - findFirstNode->second.setY(secondNodeY); - findSecondNode->second.setY(firstNodeY); - } - //std::swap(findFirstNode->second.y, findSecondNode->second.y); - { - float firstNodeZ = findFirstNode->second.getZ(); - float secondNodeZ = findSecondNode->second.getZ(); - findFirstNode->second.setZ(secondNodeZ); - findSecondNode->second.setZ(firstNodeZ); - } - //std::swap(findFirstNode->second.z, findSecondNode->second.z); - emit nodeOriginChanged(first); - emit nodeOriginChanged(second); - }; - - std::set> switchPairs; - for (const auto &baseName: baseNames) { - for (const auto &item: m_boneNameToIdsMap) { - QRegularExpressionMatch match = reJoints.match(item.first); - if (!match.hasMatch()) - continue; - QString itemSide = match.captured(1); - QString itemBaseName = match.captured(2); - QString itemJointName = match.captured(3); - //qDebug() << "itemSide:" << itemSide << "itemBaseName:" << itemBaseName << "itemJointName:" << itemJointName; - if (itemBaseName == baseName && "Left" == itemSide) { - QString otherSide = "Right"; - QString pairedName = otherSide + itemBaseName + "_" + itemJointName; - const auto findPaired = m_boneNameToIdsMap.find(pairedName); - if (findPaired == m_boneNameToIdsMap.end()) { - qDebug() << "Couldn't find paired name:" << pairedName; - continue; - } - //qDebug() << "Switched:" << pairedName; - switchPairs.insert({item.second.first, findPaired->second.first}); - switchPairs.insert({item.second.second, findPaired->second.second}); - } - } - } - - for (const auto &pair: switchPairs) { - switchYZ(pair.first, pair.second); - } - - //qDebug() << "switchedPairNum:" << switchPairs.size(); - if (!switchPairs.empty()) - emit parametersChanged(); -} - -void PoseDocument::firstSpinePositionAndLengthFromParameters(const std::map> ¶meters, - float *length, QVector3D *position) -{ - *length = 0.0; - *position = QVector3D(0.0, 0.0, 0.0); - - const auto &findFirstSpine = parameters.find("Spine1"); - if (findFirstSpine == parameters.end()) - return; - QVector3D head = QVector3D(valueOfKeyInMapOrEmpty(findFirstSpine->second, "fromX").toFloat(), - valueOfKeyInMapOrEmpty(findFirstSpine->second, "fromY").toFloat(), - valueOfKeyInMapOrEmpty(findFirstSpine->second, "fromZ").toFloat()); - QVector3D tail = QVector3D(valueOfKeyInMapOrEmpty(findFirstSpine->second, "toX").toFloat(), - valueOfKeyInMapOrEmpty(findFirstSpine->second, "toY").toFloat(), - valueOfKeyInMapOrEmpty(findFirstSpine->second, "toZ").toFloat()); - *length = head.distanceToPoint(tail); - *position = head; -} - -void PoseDocument::neckJoint1DirectionFromParameters(const std::map> ¶meters, - QVector3D *direction) -{ - *direction = QVector3D(0.0, 1.0, 0.0); - const auto &findNeckJoint1 = parameters.find("Neck_Joint1"); - if (findNeckJoint1 == parameters.end()) - return; - QVector3D head = QVector3D(valueOfKeyInMapOrEmpty(findNeckJoint1->second, "fromX").toFloat(), - valueOfKeyInMapOrEmpty(findNeckJoint1->second, "fromY").toFloat(), - valueOfKeyInMapOrEmpty(findNeckJoint1->second, "fromZ").toFloat()); - QVector3D tail = QVector3D(valueOfKeyInMapOrEmpty(findNeckJoint1->second, "toX").toFloat(), - valueOfKeyInMapOrEmpty(findNeckJoint1->second, "toY").toFloat(), - valueOfKeyInMapOrEmpty(findNeckJoint1->second, "toZ").toFloat()); - *direction = (tail - head).normalized(); -} diff --git a/src/posedocument.h b/src/posedocument.h deleted file mode 100644 index c10e2103..00000000 --- a/src/posedocument.h +++ /dev/null @@ -1,101 +0,0 @@ -#ifndef DUST3D_POSE_DOCUMENT_H -#define DUST3D_POSE_DOCUMENT_H -#include -#include -#include -#include "skeletondocument.h" -#include "rigger.h" - -struct PoseHistoryItem -{ - std::map> parameters; -}; - -class PoseDocument : public SkeletonDocument -{ - Q_OBJECT -signals: - void turnaroundChanged(); - void cleanup(); - void nodeAdded(QUuid nodeId); - void edgeAdded(QUuid edgeId); - void nodeOriginChanged(QUuid nodeId); - void parametersChanged(); - void sideVisibleStateChanged(SkeletonSide side); - void partVisibleStateChanged(QUuid partId); - -public: - bool undoable() const override; - bool redoable() const override; - bool hasPastableNodesInClipboard() const override; - bool originSettled() const override; - bool isNodeEditable(QUuid nodeId) const override; - bool isEdgeEditable(QUuid edgeId) const override; - bool isNodeDeactivated(QUuid nodeId) const override; - bool isEdgeDeactivated(QUuid edgeId) const override; - void copyNodes(std::set nodeIdSet) const override; - - void updateTurnaround(const QImage &image); - void updateOtherFramesParameters(const std::vector>> &otherFramesParameters); - void resetWithoutNotifingParametersChanged(); - void reset(); - - void toParameters(std::map> ¶meters, const std::set &limitNodeIds=std::set()) const; - void fromParameters(const std::vector *rigBones, - const std::map> ¶meters); - - bool isSideVisible(SkeletonSide side); - -public slots: - void saveHistoryItem(); - void clearHistories(); - void undo() override; - void redo() override; - void paste() override; - - void moveNodeBy(QUuid nodeId, float x, float y, float z); - void setNodeOrigin(QUuid nodeId, float x, float y, float z); - void switchChainSide(const std::set nodeIds); - void setSideVisiableState(SkeletonSide side, bool visible); - -public: - static const float m_nodeRadius; - static const float m_groundPlaneHalfThickness; - static const bool m_hideRootAndVirtual; - static const float m_outcomeScaleFactor; - -private: - QString findBoneNameByNodeId(const QUuid &nodeId); - float findFootBottomY() const; - void parametersToNodes(const std::vector *rigBones, - std::map> *boneNameToIdsMap, - std::map *m_partIdMap, - bool isOther=false); - void updateBonesFromParameters(std::vector *bones, - const std::map> ¶meters, - float firstSpineBoneLength, - const QVector3D &firstSpineBonePosition, - const QVector3D &neckJoint1BoneDirection); - - std::map> m_boneNameToIdsMap; - std::map m_partIdMap; - std::deque m_undoItems; - std::deque m_redoItems; - std::vector m_riggerBones; - std::vector>> m_otherFramesParameters; - std::set m_otherIds; - std::set m_hiddenSides; - - static float fromOutcomeX(float x); - static float toOutcomeX(float x); - static float fromOutcomeY(float y); - static float toOutcomeY(float y); - static float fromOutcomeZ(float z); - static float toOutcomeZ(float z); - static void firstSpinePositionAndLengthFromParameters(const std::map> ¶meters, - float *length, QVector3D *position); - static void neckJoint1DirectionFromParameters(const std::map> ¶meters, - QVector3D *direction); -}; - -#endif diff --git a/src/poseeditwidget.cpp b/src/poseeditwidget.cpp deleted file mode 100644 index f872bbb9..00000000 --- a/src/poseeditwidget.cpp +++ /dev/null @@ -1,668 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "theme.h" -#include "poseeditwidget.h" -#include "floatnumberwidget.h" -#include "version.h" -#include "poserconstruct.h" -#include "graphicscontainerwidget.h" -#include "documentwindow.h" -#include "shortcuts.h" -#include "imageforever.h" - -float PoseEditWidget::m_defaultBlur = 0.5; - -PoseEditWidget::PoseEditWidget(const Document *document, QWidget *parent) : - QDialog(parent), - m_document(document), - m_poseDocument(new PoseDocument) -{ - setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); - - m_posePreviewManager = new PosePreviewManager(); - connect(m_posePreviewManager, &PosePreviewManager::renderDone, [=]() { - if (m_closed) { - close(); - return; - } - if (m_isPreviewDirty) - updatePreview(); - }); - connect(m_posePreviewManager, &PosePreviewManager::resultPreviewMeshChanged, [=]() { - m_previewWidget->updateMesh(m_posePreviewManager->takeResultPreviewMesh()); - }); - - SkeletonGraphicsWidget *graphicsWidget = new SkeletonGraphicsWidget(m_poseDocument); - graphicsWidget->setNodePositionModifyOnly(true); - graphicsWidget->setBackgroundBlur(m_defaultBlur); - m_poseGraphicsWidget = graphicsWidget; - - initShortCuts(this, graphicsWidget); - - GraphicsContainerWidget *containerWidget = new GraphicsContainerWidget; - containerWidget->setGraphicsWidget(graphicsWidget); - QGridLayout *containerLayout = new QGridLayout; - containerLayout->setSpacing(0); - containerLayout->setContentsMargins(1, 0, 0, 0); - containerLayout->addWidget(graphicsWidget); - containerWidget->setLayout(containerLayout); - containerWidget->setMinimumSize(400, 400); - - m_previewWidget = new ModelWidget(this); - m_previewWidget->setFixedSize(384, 384); - m_previewWidget->enableMove(true); - m_previewWidget->enableZoom(false); - m_previewWidget->move(-64, 0); - - m_poseGraphicsWidget->setModelWidget(m_previewWidget); - containerWidget->setModelWidget(m_previewWidget); - - connect(containerWidget, &GraphicsContainerWidget::containerSizeChanged, - graphicsWidget, &SkeletonGraphicsWidget::canvasResized); - - connect(graphicsWidget, &SkeletonGraphicsWidget::moveNodeBy, m_poseDocument, &PoseDocument::moveNodeBy); - connect(graphicsWidget, &SkeletonGraphicsWidget::setNodeOrigin, m_poseDocument, &PoseDocument::setNodeOrigin); - connect(graphicsWidget, &SkeletonGraphicsWidget::groupOperationAdded, m_poseDocument, &PoseDocument::saveHistoryItem); - connect(graphicsWidget, &SkeletonGraphicsWidget::undo, m_poseDocument, &PoseDocument::undo); - connect(graphicsWidget, &SkeletonGraphicsWidget::redo, m_poseDocument, &PoseDocument::redo); - connect(graphicsWidget, &SkeletonGraphicsWidget::paste, m_poseDocument, &PoseDocument::paste); - connect(graphicsWidget, &SkeletonGraphicsWidget::switchChainSide, m_poseDocument, &PoseDocument::switchChainSide); - - connect(m_poseDocument, &PoseDocument::cleanup, graphicsWidget, &SkeletonGraphicsWidget::removeAllContent); - - connect(m_poseDocument, &PoseDocument::nodeAdded, graphicsWidget, &SkeletonGraphicsWidget::nodeAdded); - connect(m_poseDocument, &PoseDocument::edgeAdded, graphicsWidget, &SkeletonGraphicsWidget::edgeAdded); - connect(m_poseDocument, &PoseDocument::nodeOriginChanged, graphicsWidget, &SkeletonGraphicsWidget::nodeOriginChanged); - connect(m_poseDocument, &PoseDocument::partVisibleStateChanged, graphicsWidget, &SkeletonGraphicsWidget::partVisibleStateChanged); - - connect(m_poseDocument, &PoseDocument::parametersChanged, this, [&]() { - m_currentParameters.clear(); - m_poseDocument->toParameters(m_currentParameters); - syncFrameFromCurrent(); - emit parametersAdjusted(); - }); - - QSlider *opacitySlider = new QSlider(Qt::Horizontal); - opacitySlider->setFixedWidth(100); - opacitySlider->setMaximum(10); - opacitySlider->setMinimum(0); - opacitySlider->setValue(m_defaultBlur * 10); - - connect(opacitySlider, &QSlider::valueChanged, this, [=](int value) { - graphicsWidget->setBackgroundBlur((float)value / 10); - }); - - auto updateSideVisibleButtonState = [=](QPushButton *button, SkeletonSide side) { - this->updateSideButtonState(button, m_poseDocument->isSideVisible(side)); - }; - - QPushButton *leftSideVisibleButton = new QPushButton(QChar('L')); - leftSideVisibleButton->setToolTip(tr("Toggle Left Side Visibility")); - initSideButton(leftSideVisibleButton); - updateSideVisibleButtonState(leftSideVisibleButton, SkeletonSide::Left); - connect(leftSideVisibleButton, &QPushButton::clicked, this, [=]() { - m_poseDocument->setSideVisiableState(SkeletonSide::Left, !m_poseDocument->isSideVisible(SkeletonSide::Left)); - }); - - QPushButton *middleSideVisibleButton = new QPushButton(QChar('M')); - middleSideVisibleButton->setToolTip(tr("Toggle Middle Side Visibility")); - initSideButton(middleSideVisibleButton); - updateSideVisibleButtonState(middleSideVisibleButton, SkeletonSide::None); - connect(middleSideVisibleButton, &QPushButton::clicked, this, [=]() { - m_poseDocument->setSideVisiableState(SkeletonSide::None, !m_poseDocument->isSideVisible(SkeletonSide::None)); - }); - - QPushButton *rightSideVisibleButton = new QPushButton(QChar('R')); - rightSideVisibleButton->setToolTip(tr("Toggle Right Side Visibility")); - initSideButton(rightSideVisibleButton); - updateSideVisibleButtonState(rightSideVisibleButton, SkeletonSide::Right); - connect(rightSideVisibleButton, &QPushButton::clicked, this, [=]() { - m_poseDocument->setSideVisiableState(SkeletonSide::Right, !m_poseDocument->isSideVisible(SkeletonSide::Right)); - }); - - connect(m_poseDocument, &PoseDocument::sideVisibleStateChanged, this, [=](SkeletonSide side) { - switch (side) { - case SkeletonSide::Left: - updateSideVisibleButtonState(leftSideVisibleButton, side); - break; - case SkeletonSide::None: - updateSideVisibleButtonState(middleSideVisibleButton, side); - break; - case SkeletonSide::Right: - updateSideVisibleButtonState(rightSideVisibleButton, side); - break; - } - }); - - QHBoxLayout *sideButtonLayout = new QHBoxLayout; - sideButtonLayout->setSpacing(0); - sideButtonLayout->addStretch(); - sideButtonLayout->addWidget(rightSideVisibleButton); - sideButtonLayout->addWidget(middleSideVisibleButton); - sideButtonLayout->addWidget(leftSideVisibleButton); - sideButtonLayout->addStretch(); - - QHBoxLayout *sliderLayout = new QHBoxLayout; - sliderLayout->addStretch(); - sliderLayout->addSpacing(50); - sliderLayout->addWidget(new QLabel(tr("Dark"))); - sliderLayout->addWidget(opacitySlider); - sliderLayout->addWidget(new QLabel(tr("Bright"))); - sliderLayout->addSpacing(50); - sliderLayout->addStretch(); - - QVBoxLayout *previewLayout = new QVBoxLayout; - previewLayout->addStretch(); - previewLayout->addLayout(sideButtonLayout); - previewLayout->addLayout(sliderLayout); - previewLayout->addSpacing(20); - - QHBoxLayout *paramtersLayout = new QHBoxLayout; - paramtersLayout->addWidget(containerWidget); - - QHBoxLayout *topLayout = new QHBoxLayout; - topLayout->addLayout(previewLayout); - topLayout->addWidget(Theme::createVerticalLineWidget()); - topLayout->addLayout(paramtersLayout); - topLayout->setStretch(2, 1); - - m_nameEdit = new QLineEdit; - m_nameEdit->setFixedWidth(200); - connect(m_nameEdit, &QLineEdit::textChanged, this, [=]() { - setUnsaveState(); - }); - - m_durationEdit = new QDoubleSpinBox(); - m_durationEdit->setDecimals(2); - m_durationEdit->setMaximum(60); - m_durationEdit->setMinimum(0); - m_durationEdit->setSingleStep(0.1); - m_durationEdit->setValue(m_duration); - - connect(m_durationEdit, static_cast(&QDoubleSpinBox::valueChanged), this, [=](double value) { - setDuration((float)value); - }); - - QPushButton *saveButton = new QPushButton(tr("Save")); - connect(saveButton, &QPushButton::clicked, this, &PoseEditWidget::save); - saveButton->setDefault(true); - - QPushButton *setPoseSettingButton = new QPushButton(Theme::awesome()->icon(fa::gear), tr("")); - connect(setPoseSettingButton, &QPushButton::clicked, this, [=]() { - showPoseSettingPopup(mapFromGlobal(QCursor::pos())); - }); - - QPushButton *changeReferenceSheet = new QPushButton(tr("Change Reference Sheet...")); - connect(changeReferenceSheet, &QPushButton::clicked, this, &PoseEditWidget::changeTurnaround); - connect(m_poseDocument, &PoseDocument::turnaroundChanged, - graphicsWidget, &SkeletonGraphicsWidget::turnaroundChanged); - - m_framesSettingButton = new QPushButton(); - connect(m_framesSettingButton, &QPushButton::clicked, this, [=]() { - showFramesSettingPopup(mapFromGlobal(QCursor::pos())); - }); - - m_currentFrameSlider = new QSlider(Qt::Horizontal); - m_currentFrameSlider->setRange(0, m_frames.size() - 1); - m_currentFrameSlider->setValue(m_currentFrame); - //m_currentFrameSlider->hide(); - connect(m_currentFrameSlider, static_cast(&QSlider::valueChanged), this, [=](int value) { - setCurrentFrame(value); - }); - - connect(m_document, &Document::resultRigChanged, this, &PoseEditWidget::updatePoseDocument); - - QPushButton *moveToFirstFrameButton = new QPushButton(Theme::awesome()->icon(fa::angledoubleleft), ""); - connect(moveToFirstFrameButton, &QPushButton::clicked, this, [=]() { - setCurrentFrame(0); - }); - - QPushButton *moveToPreviousFrameButton = new QPushButton(Theme::awesome()->icon(fa::angleleft), ""); - connect(moveToPreviousFrameButton, &QPushButton::clicked, this, [=]() { - if (m_currentFrame > 0) - setCurrentFrame(m_currentFrame - 1); - }); - - QPushButton *moveToNextFrameButton = new QPushButton(Theme::awesome()->icon(fa::angleright), ""); - connect(moveToNextFrameButton, &QPushButton::clicked, this, [=]() { - if (m_currentFrame + 1 < (int)m_frames.size()) - setCurrentFrame(m_currentFrame + 1); - }); - - QPushButton *moveToLastFrameButton = new QPushButton(Theme::awesome()->icon(fa::angledoubleright), ""); - connect(moveToLastFrameButton, &QPushButton::clicked, this, [=]() { - if (!m_frames.empty()) - setCurrentFrame(m_frames.size() - 1); - }); - - QPushButton *insertAfterFrameButton = new QPushButton(Theme::awesome()->icon(fa::plus), ""); - connect(insertAfterFrameButton, &QPushButton::clicked, this, &PoseEditWidget::insertFrameAfterCurrentFrame); - - QPushButton *deleteFrameButton = new QPushButton(Theme::awesome()->icon(fa::trash), ""); - connect(deleteFrameButton, &QPushButton::clicked, this, &PoseEditWidget::removeCurrentFrame); - - QHBoxLayout *timelineLayout = new QHBoxLayout; - timelineLayout->addWidget(insertAfterFrameButton); - timelineLayout->addWidget(moveToFirstFrameButton); - timelineLayout->addWidget(moveToPreviousFrameButton); - timelineLayout->addWidget(moveToNextFrameButton); - timelineLayout->addWidget(moveToLastFrameButton); - timelineLayout->addWidget(m_framesSettingButton); - timelineLayout->addWidget(m_currentFrameSlider); - timelineLayout->addWidget(deleteFrameButton); - timelineLayout->setStretch(6, 1); - - QHBoxLayout *baseInfoLayout = new QHBoxLayout; - baseInfoLayout->addWidget(new QLabel(tr("Name"))); - baseInfoLayout->addWidget(m_nameEdit); - baseInfoLayout->addSpacing(10); - baseInfoLayout->addWidget(new QLabel(tr("Duration"))); - baseInfoLayout->addWidget(m_durationEdit); - baseInfoLayout->addStretch(); - baseInfoLayout->addWidget(setPoseSettingButton); - baseInfoLayout->addWidget(changeReferenceSheet); - baseInfoLayout->addWidget(saveButton); - - QVBoxLayout *mainLayout = new QVBoxLayout; - mainLayout->addLayout(topLayout); - mainLayout->addWidget(Theme::createHorizontalLineWidget()); - mainLayout->addLayout(timelineLayout); - mainLayout->addLayout(baseInfoLayout); - - setLayout(mainLayout); - - connect(this, &PoseEditWidget::parametersAdjusted, this, &PoseEditWidget::updatePreview); - connect(this, &PoseEditWidget::parametersAdjusted, [=]() { - setUnsaveState(); - }); - connect(this, &PoseEditWidget::addPose, m_document, &Document::addPose); - connect(this, &PoseEditWidget::renamePose, m_document, &Document::renamePose); - connect(this, &PoseEditWidget::setPoseFrames, m_document, &Document::setPoseFrames); - connect(this, &PoseEditWidget::setPoseTurnaroundImageId, m_document, &Document::setPoseTurnaroundImageId); - connect(this, &PoseEditWidget::setPoseYtranslationScale, m_document, &Document::setPoseYtranslationScale); - - updatePoseDocument(); - updateTitle(); - updateFramesSettingButton(); - m_poseDocument->saveHistoryItem(); -} - -void PoseEditWidget::initSideButton(QPushButton *button) -{ - QFont font; - font.setWeight(QFont::Light); - font.setPixelSize(Theme::toolIconFontSize); - font.setBold(false); - - button->setFont(font); - button->setFixedSize(Theme::toolIconSize, Theme::toolIconSize); - button->setStyleSheet("QPushButton {color: " + Theme::white.name() + "}"); - button->setFocusPolicy(Qt::NoFocus); -} - -void PoseEditWidget::updateSideButtonState(QPushButton *button, bool visible) -{ - if (visible) - button->setStyleSheet("QPushButton {color: " + Theme::white.name() + "}"); - else - button->setStyleSheet("QPushButton {color: " + Theme::black.name() + "}"); -} - -void PoseEditWidget::showPoseSettingPopup(const QPoint &pos) -{ - QMenu popupMenu; - - QWidget *popup = new QWidget; - - FloatNumberWidget *yTranslationScaleWidget = new FloatNumberWidget; - yTranslationScaleWidget->setItemName(tr("Height Adjustment Scale")); - yTranslationScaleWidget->setRange(0, 1); - yTranslationScaleWidget->setValue(m_yTranslationScale); - - connect(yTranslationScaleWidget, &FloatNumberWidget::valueChanged, [&](float value) { - m_yTranslationScale = value; - setUnsaveState(); - }); - - QPushButton *yTranslationScaleEraser = new QPushButton(QChar(fa::eraser)); - Theme::initAwesomeToolButton(yTranslationScaleEraser); - - connect(yTranslationScaleEraser, &QPushButton::clicked, [=]() { - yTranslationScaleWidget->setValue(1.0); - }); - - QHBoxLayout *yTranslationScaleLayout = new QHBoxLayout; - yTranslationScaleLayout->addWidget(yTranslationScaleEraser); - yTranslationScaleLayout->addWidget(yTranslationScaleWidget); - - popup->setLayout(yTranslationScaleLayout); - - QWidgetAction *action = new QWidgetAction(this); - action->setDefaultWidget(popup); - - popupMenu.addAction(action); - - popupMenu.exec(mapToGlobal(pos)); -} - -void PoseEditWidget::showFramesSettingPopup(const QPoint &pos) -{ - QMenu popupMenu; - - QWidget *popup = new QWidget; - - QSpinBox *framesEdit = new QSpinBox(); - framesEdit->setMaximum(m_frames.size()); - framesEdit->setMinimum(1); - framesEdit->setSingleStep(1); - framesEdit->setValue(m_frames.size()); - - connect(framesEdit, static_cast(&QSpinBox::valueChanged), this, [=](int value) { - setCurrentFrame(value); - }); - - QFormLayout *formLayout = new QFormLayout; - formLayout->addRow(tr("Frames:"), framesEdit); - - popup->setLayout(formLayout); - - QWidgetAction *action = new QWidgetAction(this); - action->setDefaultWidget(popup); - - popupMenu.addAction(action); - - popupMenu.exec(mapToGlobal(pos)); -} - -void PoseEditWidget::updateFramesSettingButton() -{ - m_currentFrameSlider->setRange(0, m_frames.size() - 1); - if (m_currentFrame != m_currentFrameSlider->value()) - m_currentFrameSlider->setValue(m_currentFrame); - m_framesSettingButton->setText(tr("Frame: %1 / %2").arg(QString::number(m_currentFrame + 1).rightJustified(2, ' ')).arg(QString::number(m_frames.size()).leftJustified(2, ' '))); -} - -void PoseEditWidget::ensureEnoughFrames() -{ - if (m_currentFrame >= (int)m_frames.size()) { - m_frames.resize(m_currentFrame + 1); - setUnsaveState(); - updateFramesSettingButton(); - } -} - -void PoseEditWidget::syncFrameFromCurrent() -{ - ensureEnoughFrames(); - m_frames[m_currentFrame] = {m_currentAttributes, m_currentParameters}; - updateFramesDurations(); -} - -void PoseEditWidget::updateFramesDurations() -{ - if (m_frames.empty()) - return; - - float frameDuration = m_duration / m_frames.size(); - for (auto &frame: m_frames) - frame.first["duration"] = QString::number(frameDuration); -} - -void PoseEditWidget::setDuration(float duration) -{ - if (qFuzzyCompare(duration, m_duration)) - return; - - m_duration = duration; - setUnsaveState(); - updateFramesDurations(); -} - -void PoseEditWidget::setCurrentFrame(int frame) -{ - if (m_currentFrame == frame) - return; - m_currentFrame = frame; - ensureEnoughFrames(); - updateFramesSettingButton(); - m_currentAttributes = m_frames[m_currentFrame].first; - m_currentParameters = m_frames[m_currentFrame].second; - updatePoseDocument(); -} - -void PoseEditWidget::insertFrameAfterCurrentFrame() -{ - int currentFrame = m_currentFrame; - m_frames.resize(m_frames.size() + 1); - updateFramesDurations(); - if (-1 != currentFrame) { - for (int index = m_frames.size() - 1; index > currentFrame; --index) { - m_frames[index] = m_frames[index - 1]; - } - } - setUnsaveState(); - setCurrentFrame(currentFrame + 1); -} - -void PoseEditWidget::removeCurrentFrame() -{ - if (m_frames.size() <= 1) - return; - - int currentFrame = m_currentFrame; - if (-1 != currentFrame) { - for (int index = currentFrame + 1; index < (int)m_frames.size(); ++index) { - m_frames[index - 1] = m_frames[index]; - } - m_frames.resize(m_frames.size() - 1); - } - updateFramesDurations(); - setUnsaveState(); - if (currentFrame - 1 >= 0) - setCurrentFrame(currentFrame - 1); - else if (currentFrame < (int)m_frames.size()) { - m_currentFrame = -1; - setCurrentFrame(currentFrame); - } else - setCurrentFrame(0); -} - -void PoseEditWidget::changeTurnaround() -{ - QString fileName = QFileDialog::getOpenFileName(this, QString(), QString(), - tr("Image Files (*.png *.jpg *.bmp)")).trimmed(); - if (fileName.isEmpty()) - return; - QImage image; - if (!image.load(fileName)) - return; - auto newImageId = ImageForever::add(&image); - if (m_imageId == newImageId) - return; - setUnsaveState(); - m_imageId = newImageId; - m_poseDocument->updateTurnaround(image); -} - -void PoseEditWidget::updatePoseDocument() -{ - m_otherFramesParameters.clear(); - for (int i = 0; i < (int)m_frames.size(); ++i) { - if (m_currentFrame == i) - continue; - m_otherFramesParameters.push_back(m_frames[i].second); - } - m_poseDocument->updateOtherFramesParameters(m_otherFramesParameters); - m_poseDocument->fromParameters(m_document->resultRigBones(), m_currentParameters); - m_poseDocument->clearHistories(); - m_poseDocument->saveHistoryItem(); - updatePreview(); -} - -void PoseEditWidget::reject() -{ - close(); -} - -void PoseEditWidget::closeEvent(QCloseEvent *event) -{ - if (m_unsaved && !m_closed) { - QMessageBox::StandardButton answer = QMessageBox::question(this, - APP_NAME, - tr("Do you really want to close while there are unsaved changes?"), - QMessageBox::Yes | QMessageBox::No, - QMessageBox::No); - if (answer != QMessageBox::Yes) { - event->ignore(); - return; - } - } - m_closed = true; - hide(); - if (m_posePreviewManager->isRendering()) { - event->ignore(); - return; - } - event->accept(); -} - -QSize PoseEditWidget::sizeHint() const -{ - return QSize(1024, 768); -} - -PoseEditWidget::~PoseEditWidget() -{ - delete m_posePreviewManager; - delete m_poseDocument; -} - -void PoseEditWidget::updatePreview() -{ - if (m_closed) - return; - - if (m_posePreviewManager->isRendering()) { - m_isPreviewDirty = true; - return; - } - - const std::vector *rigBones = m_document->resultRigBones(); - const std::map *rigWeights = m_document->resultRigWeights(); - - m_isPreviewDirty = false; - - if (nullptr == rigBones || nullptr == rigWeights) { - return; - } - - Poser *poser = newPoser(m_document->rigType, *rigBones); - if (nullptr == poser) - return; - - poser->parameters() = m_currentParameters; - poser->commit(); - m_posePreviewManager->postUpdate(*poser, m_document->currentRiggedOutcome(), *rigWeights); - delete poser; -} - -void PoseEditWidget::setEditPoseId(QUuid poseId) -{ - if (m_poseId == poseId) - return; - - m_poseId = poseId; - updateTitle(); -} - -void PoseEditWidget::updateTitle() -{ - if (m_poseId.isNull()) { - setWindowTitle(unifiedWindowTitle(tr("New") + (m_unsaved ? "*" : ""))); - return; - } - const Pose *pose = m_document->findPose(m_poseId); - if (nullptr == pose) { - qDebug() << "Find pose failed:" << m_poseId; - return; - } - setWindowTitle(unifiedWindowTitle(pose->name + (m_unsaved ? "*" : ""))); -} - -void PoseEditWidget::setEditPoseName(QString name) -{ - m_nameEdit->setText(name); - updateTitle(); -} - -void PoseEditWidget::setEditPoseFrames(std::vector, std::map>>> frames) -{ - m_frames = frames; - if (!m_frames.empty()) { - m_currentFrame = 0; - const auto &frame = m_frames[m_currentFrame]; - m_currentAttributes = frame.first; - m_currentParameters = frame.second; - } - float totalDuration = 0; - for (const auto &frame: m_frames) { - float frameDuration = valueOfKeyInMapOrEmpty(frame.first, "duration").toFloat(); - totalDuration += frameDuration; - } - if (qFuzzyIsNull(totalDuration)) - totalDuration = 1.0; - m_durationEdit->setValue(totalDuration); - updatePoseDocument(); - updatePreview(); - updateFramesSettingButton(); - m_poseDocument->saveHistoryItem(); -} - -void PoseEditWidget::setEditPoseTurnaroundImageId(QUuid imageId) -{ - m_imageId = imageId; - const auto &image = ImageForever::get(m_imageId); - if (nullptr == image) - return; - m_poseDocument->updateTurnaround(*image); -} - -void PoseEditWidget::setEditPoseYtranslationScale(float yTranslationScale) -{ - m_yTranslationScale = yTranslationScale; -} - -void PoseEditWidget::clearUnsaveState() -{ - m_unsaved = false; - updateTitle(); -} - -void PoseEditWidget::setUnsaveState() -{ - m_unsaved = true; - updateTitle(); -} - -void PoseEditWidget::save() -{ - if (m_poseId.isNull()) { - m_poseId = QUuid::createUuid(); - emit addPose(m_poseId, m_nameEdit->text(), m_frames, m_imageId, m_yTranslationScale); - } else if (m_unsaved) { - emit renamePose(m_poseId, m_nameEdit->text()); - emit setPoseFrames(m_poseId, m_frames); - emit setPoseTurnaroundImageId(m_poseId, m_imageId); - emit setPoseYtranslationScale(m_poseId, m_yTranslationScale); - } - clearUnsaveState(); -} diff --git a/src/poseeditwidget.h b/src/poseeditwidget.h deleted file mode 100644 index 3a436b62..00000000 --- a/src/poseeditwidget.h +++ /dev/null @@ -1,88 +0,0 @@ -#ifndef DUST3D_POSE_EDIT_WIDGET_H -#define DUST3D_POSE_EDIT_WIDGET_H -#include -#include -#include -#include -#include -#include -#include "posepreviewmanager.h" -#include "document.h" -#include "modelwidget.h" -#include "rigger.h" -#include "skeletongraphicswidget.h" -#include "posedocument.h" -#include "floatnumberwidget.h" -#include "skeletonside.h" - -class PoseEditWidget : public QDialog -{ - Q_OBJECT -signals: - void addPose(QUuid poseId, QString name, std::vector, std::map>>> frames, QUuid turnaroundImageId, float yTranslationScale); - void removePose(QUuid poseId); - void setPoseFrames(QUuid poseId, std::vector, std::map>>> frames); - void setPoseTurnaroundImageId(QUuid poseId, QUuid imageId); - void setPoseYtranslationScale(QUuid poseId, float scale); - void renamePose(QUuid poseId, QString name); - void parametersAdjusted(); -public: - PoseEditWidget(const Document *document, QWidget *parent=nullptr); - ~PoseEditWidget(); - - float m_duration = 1.0; -public slots: - void updatePoseDocument(); - void updatePreview(); - void syncFrameFromCurrent(); - void setEditPoseId(QUuid poseId); - void setEditPoseName(QString name); - void setEditPoseFrames(std::vector, std::map>>> frames); - void setEditPoseTurnaroundImageId(QUuid imageId); - void setEditPoseYtranslationScale(float yTranslationScale); - void setCurrentFrame(int frame); - void insertFrameAfterCurrentFrame(); - void removeCurrentFrame(); - void setDuration(float duration); - void updateTitle(); - void save(); - void clearUnsaveState(); - void setUnsaveState(); - void changeTurnaround(); -private slots: - void updateFramesSettingButton(); - void showFramesSettingPopup(const QPoint &pos); - void showPoseSettingPopup(const QPoint &pos); - void updateFramesDurations(); -protected: - QSize sizeHint() const override; - void closeEvent(QCloseEvent *event) override; - void reject() override; -private: - void ensureEnoughFrames(); - const Document *m_document = nullptr; - PosePreviewManager *m_posePreviewManager = nullptr; - ModelWidget *m_previewWidget = nullptr; - bool m_isPreviewDirty = false; - bool m_closed = false; - std::vector, std::map>>> m_frames; - std::map m_currentAttributes; - std::map> m_currentParameters; - std::vector>> m_otherFramesParameters; - int m_currentFrame = 0; - QUuid m_poseId; - bool m_unsaved = false; - QUuid m_imageId; - float m_yTranslationScale = 1.0; - QLineEdit *m_nameEdit = nullptr; - QDoubleSpinBox *m_durationEdit = nullptr; - PoseDocument *m_poseDocument = nullptr; - SkeletonGraphicsWidget *m_poseGraphicsWidget = nullptr; - QPushButton *m_framesSettingButton = nullptr; - QSlider *m_currentFrameSlider = nullptr; - static float m_defaultBlur; - void initSideButton(QPushButton *button); - void updateSideButtonState(QPushButton *button, bool visible); -}; - -#endif diff --git a/src/poselistwidget.cpp b/src/poselistwidget.cpp deleted file mode 100644 index e96d4eb4..00000000 --- a/src/poselistwidget.cpp +++ /dev/null @@ -1,307 +0,0 @@ -#include -#include -#include -#include -#include -#include "snapshotxml.h" -#include "poselistwidget.h" - -PoseListWidget::PoseListWidget(const Document *document, QWidget *parent) : - QTreeWidget(parent), - m_document(document) -{ - setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); - setFocusPolicy(Qt::NoFocus); - setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - - setAutoScroll(false); - - setHeaderHidden(true); - - QPalette palette = this->palette(); - palette.setColor(QPalette::Window, Qt::transparent); - palette.setColor(QPalette::Base, Qt::transparent); - setPalette(palette); - - setStyleSheet("QTreeView {qproperty-indentation: 0;}"); - - setContentsMargins(0, 0, 0, 0); - - connect(document, &Document::poseListChanged, this, &PoseListWidget::reload); - connect(document, &Document::cleanup, this, &PoseListWidget::removeAllContent); - - connect(this, &PoseListWidget::removePose, document, &Document::removePose); - - setContextMenuPolicy(Qt::CustomContextMenu); - connect(this, &QTreeWidget::customContextMenuRequested, this, &PoseListWidget::showContextMenu); - - reload(); -} - -void PoseListWidget::poseRemoved(QUuid poseId) -{ - if (m_currentSelectedPoseId == poseId) - m_currentSelectedPoseId = QUuid(); - m_selectedPoseIds.erase(poseId); - m_itemMap.erase(poseId); -} - -void PoseListWidget::updatePoseSelectState(QUuid poseId, bool selected) -{ - auto findItemResult = m_itemMap.find(poseId); - if (findItemResult == m_itemMap.end()) { - qDebug() << "Find pose item failed:" << poseId; - return; - } - PoseWidget *poseWidget = (PoseWidget *)itemWidget(findItemResult->second.first, findItemResult->second.second); - poseWidget->updateCheckedState(selected); - if (m_cornerButtonVisible) { - poseWidget->setCornerButtonVisible(selected); - } -} - -void PoseListWidget::selectPose(QUuid poseId, bool multiple) -{ - if (multiple) { - if (!m_currentSelectedPoseId.isNull()) { - m_selectedPoseIds.insert(m_currentSelectedPoseId); - m_currentSelectedPoseId = QUuid(); - } - if (m_selectedPoseIds.find(poseId) != m_selectedPoseIds.end()) { - updatePoseSelectState(poseId, false); - m_selectedPoseIds.erase(poseId); - } else { - updatePoseSelectState(poseId, true); - m_selectedPoseIds.insert(poseId); - } - if (m_selectedPoseIds.size() > 1) { - return; - } - if (m_selectedPoseIds.size() == 1) - poseId = *m_selectedPoseIds.begin(); - else - poseId = QUuid(); - } - if (!m_selectedPoseIds.empty()) { - for (const auto &id: m_selectedPoseIds) { - updatePoseSelectState(id, false); - } - m_selectedPoseIds.clear(); - } - if (m_currentSelectedPoseId != poseId) { - if (!m_currentSelectedPoseId.isNull()) { - updatePoseSelectState(m_currentSelectedPoseId, false); - } - m_currentSelectedPoseId = poseId; - if (!m_currentSelectedPoseId.isNull()) { - updatePoseSelectState(m_currentSelectedPoseId, true); - } - } -} - -void PoseListWidget::mousePressEvent(QMouseEvent *event) -{ - QModelIndex itemIndex = indexAt(event->pos()); - QTreeView::mousePressEvent(event); - if (event->button() == Qt::LeftButton) { - bool multiple = QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ControlModifier); - if (itemIndex.isValid()) { - QTreeWidgetItem *item = itemFromIndex(itemIndex); - auto poseId = QUuid(item->data(itemIndex.column(), Qt::UserRole).toString()); - if (QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier)) { - bool startAdd = false; - bool stopAdd = false; - std::vector waitQueue; - for (const auto &childId: m_document->poseIdList) { - if (m_shiftStartPoseId == childId || poseId == childId) { - if (startAdd) { - stopAdd = true; - } else { - startAdd = true; - } - } - if (startAdd) - waitQueue.push_back(childId); - if (stopAdd) - break; - } - if (stopAdd && !waitQueue.empty()) { - if (!m_selectedPoseIds.empty()) { - for (const auto &id: m_selectedPoseIds) { - updatePoseSelectState(id, false); - } - m_selectedPoseIds.clear(); - } - if (!m_currentSelectedPoseId.isNull()) { - m_currentSelectedPoseId = QUuid(); - } - for (const auto &waitId: waitQueue) { - selectPose(waitId, true); - } - } - return; - } else { - m_shiftStartPoseId = poseId; - } - selectPose(poseId, multiple); - return; - } - if (!multiple) - selectPose(QUuid()); - } -} - -bool PoseListWidget::isPoseSelected(QUuid poseId) -{ - return (m_currentSelectedPoseId == poseId || - m_selectedPoseIds.find(poseId) != m_selectedPoseIds.end()); -} - -void PoseListWidget::showContextMenu(const QPoint &pos) -{ - if (!m_hasContextMenu) - return; - - QMenu contextMenu(this); - - std::set unorderedPoseIds = m_selectedPoseIds; - if (!m_currentSelectedPoseId.isNull()) - unorderedPoseIds.insert(m_currentSelectedPoseId); - - std::vector poseIds; - for (const auto &cand: m_document->poseIdList) { - if (unorderedPoseIds.find(cand) != unorderedPoseIds.end()) - poseIds.push_back(cand); - } - - QAction modifyAction(tr("Modify"), this); - if (poseIds.size() == 1) { - connect(&modifyAction, &QAction::triggered, this, [=]() { - emit modifyPose(*poseIds.begin()); - }); - contextMenu.addAction(&modifyAction); - } - - QAction copyAction(tr("Copy"), this); - if (!poseIds.empty()) { - connect(©Action, &QAction::triggered, this, &PoseListWidget::copy); - contextMenu.addAction(©Action); - } - - QAction pasteAction(tr("Paste"), this); - if (m_document->hasPastablePosesInClipboard()) { - connect(&pasteAction, &QAction::triggered, m_document, &Document::paste); - contextMenu.addAction(&pasteAction); - } - - QAction deleteAction(tr("Delete"), this); - if (!poseIds.empty()) { - connect(&deleteAction, &QAction::triggered, [=]() { - for (const auto &poseId: poseIds) - emit removePose(poseId); - }); - contextMenu.addAction(&deleteAction); - } - - contextMenu.exec(mapToGlobal(pos)); -} - -void PoseListWidget::resizeEvent(QResizeEvent *event) -{ - QTreeWidget::resizeEvent(event); - if (calculateColumnCount() != columnCount()) - reload(); -} - -int PoseListWidget::calculateColumnCount() -{ - if (nullptr == parentWidget()) - return 0; - - int columns = parentWidget()->width() / Theme::posePreviewImageSize; - if (0 == columns) - columns = 1; - return columns; -} - -void PoseListWidget::reload() -{ - removeAllContent(); - - int columns = calculateColumnCount(); - if (0 == columns) - return; - - int columnWidth = parentWidget()->width() / columns; - - //qDebug() << "parentWidth:" << parentWidget()->width() << "columnWidth:" << columnWidth << "columns:" << columns; - - setColumnCount(columns); - for (int i = 0; i < columns; i++) - setColumnWidth(i, columnWidth); - - std::vector orderedPoseIdList = m_document->poseIdList; - std::sort(orderedPoseIdList.begin(), orderedPoseIdList.end(), [&](const QUuid &firstPoseId, const QUuid &secondPoseId) { - const auto *firstPose = m_document->findPose(firstPoseId); - const auto *secondPose = m_document->findPose(secondPoseId); - if (nullptr == firstPose || nullptr == secondPose) - return false; - return QString::compare(firstPose->name, secondPose->name, Qt::CaseInsensitive) < 0; - }); - - decltype(orderedPoseIdList.size()) poseIndex = 0; - while (poseIndex < orderedPoseIdList.size()) { - QTreeWidgetItem *item = new QTreeWidgetItem(this); - item->setFlags((item->flags() | Qt::ItemIsEnabled) & ~(Qt::ItemIsSelectable) & ~(Qt::ItemIsEditable)); - for (int col = 0; col < columns && poseIndex < orderedPoseIdList.size(); col++, poseIndex++) { - const auto &poseId = orderedPoseIdList[poseIndex]; - item->setSizeHint(col, QSize(columnWidth, PoseWidget::preferredHeight() + 2)); - item->setData(col, Qt::UserRole, poseId.toString()); - PoseWidget *widget = new PoseWidget(m_document, poseId); - connect(widget, &PoseWidget::modifyPose, this, &PoseListWidget::modifyPose); - connect(widget, &PoseWidget::cornerButtonClicked, this, &PoseListWidget::cornerButtonClicked); - setItemWidget(item, col, widget); - widget->reload(); - widget->updateCheckedState(isPoseSelected(poseId)); - m_itemMap[poseId] = std::make_pair(item, col); - } - invisibleRootItem()->addChild(item); - } -} - -void PoseListWidget::setCornerButtonVisible(bool visible) -{ - m_cornerButtonVisible = visible; -} - -void PoseListWidget::setHasContextMenu(bool hasContextMenu) -{ - m_hasContextMenu = hasContextMenu; -} - -void PoseListWidget::removeAllContent() -{ - m_itemMap.clear(); - clear(); -} - -void PoseListWidget::copy() -{ - if (m_selectedPoseIds.empty() && m_currentSelectedPoseId.isNull()) - return; - - std::set limitPoseIds = m_selectedPoseIds; - if (!m_currentSelectedPoseId.isNull()) - limitPoseIds.insert(m_currentSelectedPoseId); - - std::set emptySet; - - Snapshot snapshot; - m_document->toSnapshot(&snapshot, emptySet, DocumentToSnapshotFor::Poses, - limitPoseIds); - QString snapshotXml; - QXmlStreamWriter xmlStreamWriter(&snapshotXml); - saveSkeletonToXmlStream(&snapshot, &xmlStreamWriter); - QClipboard *clipboard = QApplication::clipboard(); - clipboard->setText(snapshotXml); -} diff --git a/src/poselistwidget.h b/src/poselistwidget.h deleted file mode 100644 index d32d2504..00000000 --- a/src/poselistwidget.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef DUST3D_POSE_LIST_WIDGET_H -#define DUST3D_POSE_LIST_WIDGET_H -#include -#include -#include -#include "document.h" -#include "posewidget.h" - -class PoseListWidget : public QTreeWidget -{ - Q_OBJECT -signals: - void removePose(QUuid poseId); - void modifyPose(QUuid poseId); - void cornerButtonClicked(QUuid poseId); -public: - PoseListWidget(const Document *document, QWidget *parent=nullptr); - bool isPoseSelected(QUuid poseId); -public slots: - void reload(); - void removeAllContent(); - void poseRemoved(QUuid poseId); - void showContextMenu(const QPoint &pos); - void selectPose(QUuid poseId, bool multiple=false); - void copy(); - void setCornerButtonVisible(bool visible); - void setHasContextMenu(bool hasContextMenu); -protected: - void resizeEvent(QResizeEvent *event) override; - void mousePressEvent(QMouseEvent *event) override; -private: - int calculateColumnCount(); - void updatePoseSelectState(QUuid poseId, bool selected); - const Document *m_document = nullptr; - std::map> m_itemMap; - std::set m_selectedPoseIds; - QUuid m_currentSelectedPoseId; - QUuid m_shiftStartPoseId; - bool m_cornerButtonVisible = false; - bool m_hasContextMenu = true; -}; - -#endif diff --git a/src/posemanagewidget.cpp b/src/posemanagewidget.cpp deleted file mode 100644 index 92f85288..00000000 --- a/src/posemanagewidget.cpp +++ /dev/null @@ -1,90 +0,0 @@ -#include -#include -#include -#include "posemanagewidget.h" -#include "theme.h" -#include "poseeditwidget.h" -#include "infolabel.h" - -PoseManageWidget::PoseManageWidget(const Document *document, QWidget *parent) : - QWidget(parent), - m_document(document) -{ - QPushButton *addPoseButton = new QPushButton(Theme::awesome()->icon(fa::plus), tr("Add Pose...")); - addPoseButton->hide(); - connect(addPoseButton, &QPushButton::clicked, this, &PoseManageWidget::showAddPoseDialog); - - QHBoxLayout *toolsLayout = new QHBoxLayout; - toolsLayout->addWidget(addPoseButton); - - m_poseListWidget = new PoseListWidget(document); - connect(m_poseListWidget, &PoseListWidget::modifyPose, this, &PoseManageWidget::showPoseDialog); - - InfoLabel *infoLabel = new InfoLabel; - infoLabel->hide(); - - auto refreshInfoLabel = [=]() { - if (m_document->currentRigSucceed()) { - if (m_document->rigType == RigType::Animal) { - infoLabel->setText(""); - infoLabel->hide(); - addPoseButton->show(); - } else { - infoLabel->setText(tr("Pose editor doesn't support this rig type yet: ") + RigTypeToDispName(m_document->rigType)); - infoLabel->show(); - addPoseButton->hide(); - } - } else { - infoLabel->setText(tr("Missing Rig")); - infoLabel->show(); - addPoseButton->hide(); - } - }; - - connect(m_document, &Document::resultRigChanged, this, refreshInfoLabel); - connect(m_document, &Document::cleanup, this, refreshInfoLabel); - - QVBoxLayout *mainLayout = new QVBoxLayout; - mainLayout->addWidget(infoLabel); - mainLayout->addLayout(toolsLayout); - mainLayout->addWidget(m_poseListWidget); - - setLayout(mainLayout); -} - -PoseListWidget *PoseManageWidget::poseListWidget() -{ - return m_poseListWidget; -} - -QSize PoseManageWidget::sizeHint() const -{ - return QSize(Theme::sidebarPreferredWidth, 0); -} - -void PoseManageWidget::showAddPoseDialog() -{ - showPoseDialog(QUuid()); -} - -void PoseManageWidget::showPoseDialog(QUuid poseId) -{ - PoseEditWidget *poseEditWidget = new PoseEditWidget(m_document); - poseEditWidget->setAttribute(Qt::WA_DeleteOnClose); - if (!poseId.isNull()) { - const Pose *pose = m_document->findPose(poseId); - if (nullptr != pose) { - poseEditWidget->setEditPoseId(poseId); - poseEditWidget->setEditPoseName(pose->name); - poseEditWidget->setEditPoseFrames(pose->frames); - poseEditWidget->setEditPoseTurnaroundImageId(pose->turnaroundImageId); - poseEditWidget->setEditPoseYtranslationScale(pose->yTranslationScale); - poseEditWidget->clearUnsaveState(); - } - } - poseEditWidget->show(); - connect(poseEditWidget, &QDialog::destroyed, [=]() { - emit unregisterDialog((QWidget *)poseEditWidget); - }); - emit registerDialog((QWidget *)poseEditWidget); -} diff --git a/src/posemanagewidget.h b/src/posemanagewidget.h deleted file mode 100644 index 43246800..00000000 --- a/src/posemanagewidget.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef DUST3D_POSE_MANAGE_WIDGET_H -#define DUST3D_POSE_MANAGE_WIDGET_H -#include -#include "document.h" -#include "poselistwidget.h" - -class PoseManageWidget : public QWidget -{ - Q_OBJECT -signals: - void registerDialog(QWidget *widget); - void unregisterDialog(QWidget *widget); -public: - PoseManageWidget(const Document *document, QWidget *parent=nullptr); - PoseListWidget *poseListWidget(); -protected: - virtual QSize sizeHint() const; -public slots: - void showAddPoseDialog(); - void showPoseDialog(QUuid poseId); -private: - const Document *m_document = nullptr; - PoseListWidget *m_poseListWidget = nullptr; -}; - -#endif diff --git a/src/posemeshcreator.cpp b/src/posemeshcreator.cpp deleted file mode 100644 index 30ad0f68..00000000 --- a/src/posemeshcreator.cpp +++ /dev/null @@ -1,46 +0,0 @@ -#include -#include "posemeshcreator.h" -#include "skinnedmeshcreator.h" - -PoseMeshCreator::PoseMeshCreator(const std::vector &resultNodes, - const Outcome &outcome, - const std::map &resultWeights) : - m_resultNodes(resultNodes), - m_outcome(outcome), - m_resultWeights(resultWeights) -{ -} - -PoseMeshCreator::~PoseMeshCreator() -{ - delete m_resultMesh; -} - -Model *PoseMeshCreator::takeResultMesh() -{ - Model *resultMesh = m_resultMesh; - m_resultMesh = nullptr; - return resultMesh; -} - -void PoseMeshCreator::createMesh() -{ - SkinnedMeshCreator skinnedMeshCreator(m_outcome, m_resultWeights); - - std::vector matricies; - matricies.resize(m_resultNodes.size()); - for (decltype(m_resultNodes.size()) i = 0; i < m_resultNodes.size(); i++) { - const auto &node = m_resultNodes[i]; - matricies[i] = node.transformMatrix; - } - - delete m_resultMesh; - m_resultMesh = skinnedMeshCreator.createMeshFromTransform(matricies); -} - -void PoseMeshCreator::process() -{ - createMesh(); - - emit finished(); -} diff --git a/src/posemeshcreator.h b/src/posemeshcreator.h deleted file mode 100644 index b1d0ecad..00000000 --- a/src/posemeshcreator.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef DUST3D_POSE_MESH_CREATOR_H -#define DUST3D_POSE_MESH_CREATOR_H -#include -#include "model.h" -#include "jointnodetree.h" -#include "outcome.h" - -class PoseMeshCreator : public QObject -{ - Q_OBJECT -signals: - void finished(); -public: - PoseMeshCreator(const std::vector &resultNodes, - const Outcome &outcome, - const std::map &resultWeights); - ~PoseMeshCreator(); - void createMesh(); - Model *takeResultMesh(); -public slots: - void process(); -private: - std::vector m_resultNodes; - Outcome m_outcome; - std::map m_resultWeights; - Model *m_resultMesh = nullptr; -}; - -#endif diff --git a/src/posepreviewmanager.cpp b/src/posepreviewmanager.cpp deleted file mode 100644 index bdb4db54..00000000 --- a/src/posepreviewmanager.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include -#include "posepreviewmanager.h" - -PosePreviewManager::PosePreviewManager() -{ -} - -PosePreviewManager::~PosePreviewManager() -{ - delete m_previewMesh; -} - -bool PosePreviewManager::isRendering() -{ - return nullptr != m_poseMeshCreator; -} - -bool PosePreviewManager::postUpdate(const Poser &poser, - const Outcome &outcome, - const std::map &resultWeights) -{ - if (nullptr != m_poseMeshCreator) - return false; - - qDebug() << "Pose mesh generating.."; - - QThread *thread = new QThread; - m_poseMeshCreator = new PoseMeshCreator(poser.resultNodes(), outcome, resultWeights); - m_poseMeshCreator->moveToThread(thread); - connect(thread, &QThread::started, m_poseMeshCreator, &PoseMeshCreator::process); - connect(m_poseMeshCreator, &PoseMeshCreator::finished, this, &PosePreviewManager::poseMeshReady); - connect(m_poseMeshCreator, &PoseMeshCreator::finished, thread, &QThread::quit); - connect(thread, &QThread::finished, thread, &QThread::deleteLater); - thread->start(); - - return true; -} - -Model *PosePreviewManager::takeResultPreviewMesh() -{ - if (nullptr == m_previewMesh) - return nullptr; - return new Model(*m_previewMesh); -} - -void PosePreviewManager::poseMeshReady() -{ - delete m_previewMesh; - m_previewMesh = m_poseMeshCreator->takeResultMesh(); - - qDebug() << "Pose mesh generation done"; - - delete m_poseMeshCreator; - m_poseMeshCreator = nullptr; - - emit resultPreviewMeshChanged(); - emit renderDone(); -} diff --git a/src/posepreviewmanager.h b/src/posepreviewmanager.h deleted file mode 100644 index dac30ca3..00000000 --- a/src/posepreviewmanager.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef DUST3D_POSE_PREVIEW_MANAGER_H -#define DUST3D_POSE_PREVIEW_MANAGER_H -#include -#include "document.h" -#include "poser.h" -#include "posemeshcreator.h" -#include "model.h" - -class PosePreviewManager : public QObject -{ - Q_OBJECT -public: - PosePreviewManager(); - ~PosePreviewManager(); - bool isRendering(); - bool postUpdate(const Poser &poser, - const Outcome &outcome, - const std::map &resultWeights); - Model *takeResultPreviewMesh(); -private slots: - void poseMeshReady(); -signals: - void resultPreviewMeshChanged(); - void renderDone(); -private: - PoseMeshCreator *m_poseMeshCreator = nullptr; - Model *m_previewMesh = nullptr; -}; - -#endif diff --git a/src/posepreviewsgenerator.cpp b/src/posepreviewsgenerator.cpp deleted file mode 100644 index 272d3100..00000000 --- a/src/posepreviewsgenerator.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#include -#include -#include "posepreviewsgenerator.h" -#include "posemeshcreator.h" -#include "poserconstruct.h" -#include "posedocument.h" - -PosePreviewsGenerator::PosePreviewsGenerator(RigType rigType, - const std::vector *rigBones, - const std::map *rigWeights, - const Outcome &outcome) : - m_rigType(rigType), - m_rigBones(*rigBones), - m_rigWeights(*rigWeights), - m_outcome(new Outcome(outcome)) -{ -} - -PosePreviewsGenerator::~PosePreviewsGenerator() -{ - for (auto &item: m_previews) { - delete item.second; - } - delete m_outcome; -} - -void PosePreviewsGenerator::addPose(std::pair idAndFrame, const std::map> &pose) -{ - m_poses.push_back(std::make_pair(idAndFrame, pose)); -} - -const std::set> &PosePreviewsGenerator::generatedPreviewPoseIdAndFrames() -{ - return m_generatedPoseIdAndFrames; -} - -Model *PosePreviewsGenerator::takePreview(std::pair idAndFrame) -{ - Model *resultMesh = m_previews[idAndFrame]; - m_previews[idAndFrame] = nullptr; - return resultMesh; -} - -void PosePreviewsGenerator::process() -{ - QElapsedTimer countTimeConsumed; - countTimeConsumed.start(); - - Poser *poser = newPoser(m_rigType, m_rigBones); - for (const auto &pose: m_poses) { - PoseDocument poseDocument; - poseDocument.fromParameters(&m_rigBones, pose.second); - std::map> translatedParameters; - poseDocument.toParameters(translatedParameters); - poser->parameters() = translatedParameters; - poser->commit(); - - PoseMeshCreator *poseMeshCreator = new PoseMeshCreator(poser->resultNodes(), *m_outcome, m_rigWeights); - poseMeshCreator->createMesh(); - m_previews[pose.first] = poseMeshCreator->takeResultMesh(); - delete poseMeshCreator; - - poser->reset(); - - m_generatedPoseIdAndFrames.insert(pose.first); - } - delete poser; - - qDebug() << "The pose previews generation took" << countTimeConsumed.elapsed() << "milliseconds"; - - emit finished(); -} diff --git a/src/posepreviewsgenerator.h b/src/posepreviewsgenerator.h deleted file mode 100644 index b00d2c5f..00000000 --- a/src/posepreviewsgenerator.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef DUST3D_POSE_PREVIEWS_GENERATOR_H -#define DUST3D_POSE_PREVIEWS_GENERATOR_H -#include -#include -#include -#include -#include "model.h" -#include "rigger.h" -#include "outcome.h" -#include "rigtype.h" - -class PosePreviewsGenerator : public QObject -{ - Q_OBJECT -public: - PosePreviewsGenerator(RigType rigType, - const std::vector *rigBones, - const std::map *rigWeights, - const Outcome &outcome); - ~PosePreviewsGenerator(); - void addPose(std::pair idAndFrame, const std::map> &pose); - const std::set> &generatedPreviewPoseIdAndFrames(); - Model *takePreview(std::pair idAndFrame); -signals: - void finished(); -public slots: - void process(); -private: - RigType m_rigType = RigType::None; - std::vector m_rigBones; - std::map m_rigWeights; - Outcome *m_outcome = nullptr; - std::vector, std::map>>> m_poses; - std::map, Model *> m_previews; - std::set> m_generatedPoseIdAndFrames; -}; - -#endif diff --git a/src/poser.cpp b/src/poser.cpp deleted file mode 100644 index 7ebcf073..00000000 --- a/src/poser.cpp +++ /dev/null @@ -1,98 +0,0 @@ -#include -#include -#include "poser.h" - -Poser::Poser(const std::vector &bones) : - m_bones(bones), - m_jointNodeTree(&bones) -{ - for (decltype(m_bones.size()) i = 0; i < m_bones.size(); i++) { - m_boneNameToIndexMap[m_bones[i].name] = i; - } -} - -Poser::~Poser() -{ -} - -void Poser::setYtranslationScale(float scale) -{ - m_yTranslationScale = scale; -} - -int Poser::findBoneIndex(const QString &name) -{ - auto findResult = m_boneNameToIndexMap.find(name); - if (findResult == m_boneNameToIndexMap.end()) - return -1; - return findResult->second; -} - -const RiggerBone *Poser::findBone(const QString &name) -{ - auto findResult = m_boneNameToIndexMap.find(name); - if (findResult == m_boneNameToIndexMap.end()) - return nullptr; - return &m_bones[findResult->second]; -} - -const std::vector &Poser::bones() const -{ - return m_bones; -} - -const std::vector &Poser::resultNodes() const -{ - return m_jointNodeTree.nodes(); -} - -const JointNodeTree &Poser::resultJointNodeTree() const -{ - return m_jointNodeTree; -} - -void Poser::commit() -{ - m_jointNodeTree.recalculateTransformMatrices(); -} - -void Poser::reset() -{ - m_jointNodeTree.reset(); -} - -std::map> &Poser::parameters() -{ - return m_parameters; -} - -void Poser::fetchChains(const std::vector &boneNames, std::map> &chains) -{ - QRegularExpression reJoints("^([a-zA-Z]+\\d*)_Joint\\d+$"); - QRegularExpression reSpine("^([a-zA-Z]+)\\d*$"); - for (const auto &item: boneNames) { - QRegularExpressionMatch match = reJoints.match(item); - if (match.hasMatch()) { - QString name = match.captured(1); - chains[name].push_back(item); - } else { - match = reSpine.match(item); - if (match.hasMatch()) { - QString name = match.captured(1); - if (item.startsWith(name + "0")) - chains[name + "0"].push_back(item); - else - chains[name].push_back(item); - } else if (item.startsWith("Virtual_")) { - //qDebug() << "Ignore connector:" << item; - } else { - qDebug() << "Unrecognized bone name:" << item; - } - } - } - for (auto &chain: chains) { - std::sort(chain.second.begin(), chain.second.end(), [](const QString &first, const QString &second) { - return first < second; - }); - } -} diff --git a/src/poser.h b/src/poser.h deleted file mode 100644 index 9a8fc360..00000000 --- a/src/poser.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef DUST3D_POSER_H -#define DUST3D_POSER_H -#include -#include "rigger.h" -#include "jointnodetree.h" -#include "util.h" - -class Poser : public QObject -{ - Q_OBJECT -public: - Poser(const std::vector &bones); - ~Poser(); - const RiggerBone *findBone(const QString &name); - int findBoneIndex(const QString &name); - const std::vector &bones() const; - const std::vector &resultNodes() const; - const JointNodeTree &resultJointNodeTree() const; - std::map> ¶meters(); - void setYtranslationScale(float scale); - virtual void commit(); - void reset(); - static void fetchChains(const std::vector &boneNames, std::map> &chains); -protected: - std::vector m_bones; - std::map m_boneNameToIndexMap; - JointNodeTree m_jointNodeTree; - std::map> m_parameters; - float m_yTranslationScale = 1.0; -}; - -#endif diff --git a/src/poserconstruct.cpp b/src/poserconstruct.cpp deleted file mode 100644 index 502de74e..00000000 --- a/src/poserconstruct.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "poserconstruct.h" -#include "animalposer.h" - -Poser *newPoser(RigType rigType, const std::vector &bones) -{ - if (rigType == RigType::Animal) - return new AnimalPoser(bones); - return nullptr; -} diff --git a/src/poserconstruct.h b/src/poserconstruct.h deleted file mode 100644 index d8671b34..00000000 --- a/src/poserconstruct.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef DUST3D_POSER_CONSTRUCT_H -#define DUST3D_POSER_CONSTRUCT_H -#include "rigtype.h" -#include "poser.h" -#include "rigger.h" - -Poser *newPoser(RigType rigType, const std::vector &bones); - -#endif diff --git a/src/posewidget.cpp b/src/posewidget.cpp deleted file mode 100644 index fdc93c58..00000000 --- a/src/posewidget.cpp +++ /dev/null @@ -1,116 +0,0 @@ -#include -#include "posewidget.h" - -PoseWidget::PoseWidget(const Document *document, QUuid poseId) : - m_poseId(poseId), - m_document(document) -{ - setObjectName("PoseFrame"); - - m_previewWidget = new ModelWidget(this); - m_previewWidget->setAttribute(Qt::WA_TransparentForMouseEvents); - m_previewWidget->setFixedSize(Theme::posePreviewImageSize, Theme::posePreviewImageSize); - m_previewWidget->enableMove(false); - m_previewWidget->enableZoom(false); - - m_nameLabel = new QLabel; - m_nameLabel->setAlignment(Qt::AlignCenter); - m_nameLabel->setStyleSheet("background: qlineargradient(x1:0.5 y1:-15.5, x2:0.5 y2:1, stop:0 " + Theme::white.name() + ", stop:1 #252525);"); - - QFont nameFont; - nameFont.setWeight(QFont::Light); - //nameFont.setPixelSize(9); - nameFont.setBold(false); - m_nameLabel->setFont(nameFont); - - QVBoxLayout *mainLayout = new QVBoxLayout; - mainLayout->setContentsMargins(0, 0, 0, 0); - mainLayout->addStretch(); - mainLayout->addWidget(m_nameLabel); - - setLayout(mainLayout); - - setFixedSize(Theme::posePreviewImageSize, PoseWidget::preferredHeight()); - - connect(document, &Document::poseNameChanged, this, [=](QUuid poseId) { - if (poseId != m_poseId) - return; - updateName(); - }); - connect(document, &Document::posePreviewChanged, this, [=](QUuid poseId) { - if (poseId != m_poseId) - return; - updatePreview(); - }); -} - -void PoseWidget::setCornerButtonVisible(bool visible) -{ - if (nullptr == m_cornerButton) { - m_cornerButton = new QPushButton(this); - m_cornerButton->move(Theme::posePreviewImageSize - Theme::miniIconSize - 2, 2); - Theme::initAwesomeMiniButton(m_cornerButton); - m_cornerButton->setText(QChar(fa::plussquare)); - connect(m_cornerButton, &QPushButton::clicked, this, [=]() { - emit cornerButtonClicked(m_poseId); - }); - } - m_cornerButton->setVisible(visible); -} - -void PoseWidget::resizeEvent(QResizeEvent *event) -{ - QWidget::resizeEvent(event); - m_previewWidget->move((width() - Theme::posePreviewImageSize) / 2, 0); -} - -int PoseWidget::preferredHeight() -{ - return Theme::posePreviewImageSize; -} - -void PoseWidget::reload() -{ - updatePreview(); - updateName(); -} - -void PoseWidget::updatePreview() -{ - const Pose *pose = m_document->findPose(m_poseId); - if (!pose) { - qDebug() << "Pose not found:" << m_poseId; - return; - } - Model *previewMesh = pose->takePreviewMesh(); - m_previewWidget->updateMesh(previewMesh); -} - -void PoseWidget::updateName() -{ - const Pose *pose = m_document->findPose(m_poseId); - if (!pose) { - qDebug() << "Pose not found:" << m_poseId; - return; - } - m_nameLabel->setText(pose->name); -} - -void PoseWidget::updateCheckedState(bool checked) -{ - if (checked) - setStyleSheet("#PoseFrame {border: 1px solid " + Theme::red.name() + ";}"); - else - setStyleSheet("#PoseFrame {border: 1px solid transparent;}"); -} - -ModelWidget *PoseWidget::previewWidget() -{ - return m_previewWidget; -} - -void PoseWidget::mouseDoubleClickEvent(QMouseEvent *event) -{ - QFrame::mouseDoubleClickEvent(event); - emit modifyPose(m_poseId); -} diff --git a/src/posewidget.h b/src/posewidget.h deleted file mode 100644 index 1299746a..00000000 --- a/src/posewidget.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef DUST3D_POSE_WIDGET_H -#define DUST3D_POSE_WIDGET_H -#include -#include -#include -#include "document.h" -#include "modelwidget.h" - -class PoseWidget : public QFrame -{ - Q_OBJECT -signals: - void modifyPose(QUuid poseId); - void cornerButtonClicked(QUuid poseId); -public: - PoseWidget(const Document *document, QUuid poseId); - static int preferredHeight(); - ModelWidget *previewWidget(); -protected: - void mouseDoubleClickEvent(QMouseEvent *event) override; - void resizeEvent(QResizeEvent *event) override; -public slots: - void reload(); - void updatePreview(); - void updateName(); - void updateCheckedState(bool checked); - void setCornerButtonVisible(bool visible); -private: - QUuid m_poseId; - const Document *m_document = nullptr; - ModelWidget *m_previewWidget = nullptr; - QLabel *m_nameLabel = nullptr; - QPushButton *m_cornerButton = nullptr; -}; - -#endif diff --git a/src/riggenerator.cpp b/src/riggenerator.cpp index 0ca5ccad..a59860c5 100644 --- a/src/riggenerator.cpp +++ b/src/riggenerator.cpp @@ -273,21 +273,6 @@ void RigGenerator::buildBoneNodeChain() const auto &chain = m_boneNodeChain[i]; const auto &node = m_outcome->bodyNodes[chain.fromNodeIndex]; const auto &isSpine = chain.isSpine; - //printf("Chain[%lu] %s %s", i, BoneMarkToString(node.boneMark), isSpine ? "SPINE " : ""); - //printf("|"); - //for (size_t j = 0; j < chain.nodeChain.size(); ++j) { - // printf("%lu%s ", chain.nodeChain[j], chain.nodeIsJointFlags[j] ? "(JOINT)" : ""); - //} - //printf("\r\n"); - //for (size_t j = 0; j < chain.nodeChain.size(); ++j) { - // const auto &node = m_outcome->bodyNodes[chain.nodeChain[j]]; - // printf(" >>%lu part:%s node:%s (%f,%f,%f)%s\r\n", - // chain.nodeChain[j], - // node.partId.toString().toUtf8().constData(), - // node.nodeId.toString().toUtf8().constData(), - // node.origin.x(), node.origin.y(), node.origin.z(), - // chain.nodeIsJointFlags[j] ? "(JOINT)" : ""); - //} if (isSpine) { m_spineChains.push_back(i); continue; @@ -364,6 +349,14 @@ void RigGenerator::attachLimbsToSpine() } } +int RigGenerator::attachedBoneIndex(size_t spineJointIndex) +{ + if (spineJointIndex == m_rootSpineJointIndex) { + return m_boneNameToIndexMap[QString("Body")]; + } + return m_boneNameToIndexMap[QString("Spine") + QString::number(spineJointIndex - m_rootSpineJointIndex)]; +} + void RigGenerator::buildSkeleton() { bool addMarkHelpInfo = false; @@ -388,6 +381,7 @@ void RigGenerator::buildSkeleton() return; calculateSpineDirection(&m_isSpineVertical); + qDebug() << "Spine:" << (m_isSpineVertical ? "Vertical" : "Horizontal"); auto sortLimbChains = [&](std::vector &chains) { std::sort(chains.begin(), chains.end(), [&](const size_t &first, @@ -407,14 +401,14 @@ void RigGenerator::buildSkeleton() extractSpineJoints(); extractBranchJoints(); - size_t rootSpineJointIndex = m_attachLimbsToSpineJointIndices[0]; - size_t lastSpineJointIndex = m_spineJoints.size() - 1; + m_rootSpineJointIndex = m_attachLimbsToSpineJointIndices[0]; + m_lastSpineJointIndex = m_spineJoints.size() - 1; m_resultBones = new std::vector; m_resultWeights = new std::map; { - const auto &firstSpineNode = m_outcome->bodyNodes[m_spineJoints[rootSpineJointIndex]]; + const auto &firstSpineNode = m_outcome->bodyNodes[m_spineJoints[m_rootSpineJointIndex]]; RiggerBone bone; bone.headPosition = QVector3D(0.0, 0.0, 0.0); bone.tailPosition = firstSpineNode.origin; @@ -422,20 +416,14 @@ void RigGenerator::buildSkeleton() bone.tailRadius = firstSpineNode.radius; bone.color = Theme::white; bone.name = QString("Body"); + bone.attributes["spineDirection"] = m_isSpineVertical ? "Vertical" : "Horizontal"; bone.index = m_resultBones->size(); bone.parent = -1; m_boneNameToIndexMap.insert({bone.name, (int)bone.index}); m_resultBones->push_back(bone); } - - auto attachedBoneIndex = [&](size_t spineJointIndex) { - if (spineJointIndex == rootSpineJointIndex) { - return m_boneNameToIndexMap[QString("Body")]; - } - return m_boneNameToIndexMap[QString("Spine") + QString::number(spineJointIndex - rootSpineJointIndex)]; - }; - - for (size_t spineJointIndex = rootSpineJointIndex; + + for (size_t spineJointIndex = m_rootSpineJointIndex; spineJointIndex + 1 < m_spineJoints.size(); ++spineJointIndex) { const auto ¤tNode = m_outcome->bodyNodes[m_spineJoints[spineJointIndex]]; @@ -445,8 +433,8 @@ void RigGenerator::buildSkeleton() bone.tailPosition = nextNode.origin; bone.headRadius = currentNode.radius; bone.tailRadius = nextNode.radius; - bone.color = 0 == (spineJointIndex - rootSpineJointIndex) % 2 ? Theme::white : BoneMarkToColor(BoneMark::Joint); - bone.name = QString("Spine") + QString::number(spineJointIndex + 1 - rootSpineJointIndex); + bone.color = 0 == (spineJointIndex - m_rootSpineJointIndex) % 2 ? Theme::red : Qt::blue; //BoneMarkToColor(BoneMark::Joint); + bone.name = QString("Spine") + QString::number(spineJointIndex + 1 - m_rootSpineJointIndex); bone.index = m_resultBones->size(); bone.parent = attachedBoneIndex(spineJointIndex); m_boneNameToIndexMap.insert({bone.name, (int)bone.index}); @@ -467,7 +455,7 @@ void RigGenerator::buildSkeleton() bone.tailPosition = limbFirstNode.origin; bone.headRadius = spineNode.radius; bone.tailRadius = limbFirstNode.radius; - bone.color = Theme::white; + bone.color = chainPrefix.startsWith("Left") ? BoneMarkToColor(BoneMark::Tail) : BoneMarkToColor(BoneMark::Neck); bone.name = QString("Virtual_") + (*m_resultBones)[parentIndex].name + QString("_") + chainName; bone.index = m_resultBones->size(); bone.parent = parentIndex; @@ -536,7 +524,7 @@ void RigGenerator::buildSkeleton() auto parentName = QString("Neck_Joint") + QString::number(neckJointIndex); bone.parent = m_boneNameToIndexMap[parentName]; } else { - auto parentName = QString("Spine") + QString::number(lastSpineJointIndex - rootSpineJointIndex); + auto parentName = QString("Spine") + QString::number(m_lastSpineJointIndex - m_rootSpineJointIndex); bone.parent = m_boneNameToIndexMap[parentName]; } m_boneNameToIndexMap.insert({bone.name, (int)bone.index}); @@ -547,7 +535,7 @@ void RigGenerator::buildSkeleton() if (!m_tailJoints.empty()) { QString nearestSpine = "Body"; - for (int spineJointIndex = rootSpineJointIndex; + for (int spineJointIndex = m_rootSpineJointIndex; spineJointIndex >= 0; --spineJointIndex) { if (m_spineJoints[spineJointIndex] == m_tailJoints[0]) @@ -561,14 +549,14 @@ void RigGenerator::buildSkeleton() bone.tailPosition = nextNode.origin; bone.headRadius = currentNode.radius; bone.tailRadius = nextNode.radius; - bone.color = 0 == (rootSpineJointIndex - spineJointIndex) % 2 ? BoneMarkToColor(BoneMark::Joint) : Theme::white; - bone.name = QString("Spine0") + QString::number(rootSpineJointIndex - spineJointIndex + 1); + bone.color = 0 == (m_rootSpineJointIndex - spineJointIndex) % 2 ? BoneMarkToColor(BoneMark::Joint) : Theme::white; + bone.name = QString("Spine0") + QString::number(m_rootSpineJointIndex - spineJointIndex + 1); bone.index = m_resultBones->size(); - if ((int)rootSpineJointIndex == spineJointIndex) { + if ((int)m_rootSpineJointIndex == spineJointIndex) { auto parentName = QString("Body"); bone.parent = m_boneNameToIndexMap[parentName]; } else { - auto parentName = QString("Spine0") + QString::number(rootSpineJointIndex - spineJointIndex); + auto parentName = QString("Spine0") + QString::number(m_rootSpineJointIndex - spineJointIndex); bone.parent = m_boneNameToIndexMap[parentName]; } m_boneNameToIndexMap.insert({bone.name, (int)bone.index}); @@ -605,14 +593,12 @@ void RigGenerator::buildSkeleton() m_isSuccessful = true; - //for (size_t i = 0; i < m_resultBones->size(); ++i) { - // const auto &bone = (*m_resultBones)[i]; - // std::cout << "bone:" << bone.name.toUtf8().constData() << " " << " headRadius:" << bone.headRadius << " tailRadius:" << bone.tailRadius << std::endl; - // for (const auto &childIndex: bone.children) { - // const auto &child = (*m_resultBones)[childIndex]; - // std::cout << " child:" << child.name.toUtf8().constData() << " " << std::endl; - // } - //} + if (nullptr != m_resultBones) { + for (size_t i = 0; i < m_resultBones->size(); ++i) { + const auto &bone = (*m_resultBones)[i]; + qDebug() << "Bone[" << i << "]: name:" << bone.name << "parent:" << (-1 == bone.parent ? "(null)" : (*m_resultBones)[bone.parent].name); + } + } } void RigGenerator::computeSkinWeights() @@ -746,6 +732,8 @@ void RigGenerator::computeSkinWeights() QString("Spine"), backSpineVertices); } + fixVirtualBoneSkinWeights(); + for (auto &it: *m_resultWeights) it.second.finalizeWeights(); @@ -753,23 +741,183 @@ void RigGenerator::computeSkinWeights() // auto findWeights = m_resultWeights->find(i); // if (findWeights == m_resultWeights->end()) { // const auto &sourceNode = m_outcome->vertexSourceNodes[i]; - // printf("NoWeight vertex index:%lu Source:%s %s\r\n", - // i, - // sourceNode.first.toString().toUtf8().constData(), - // sourceNode.second.toString().toUtf8().constData()); + // qDebug() << "NoWeight vertex index:" << i << sourceNode.first << sourceNode.second; // } //} } +void RigGenerator::fixVirtualBoneSkinWeights() +{ + auto calculateSide = [](float x) { + if (x < 0) + return -1; + else if (x > 0) + return 1; + return 0; + }; + + struct VirtualBone + { + int index; + int side; + int parentIndex; + int parentNextIndex; + }; + + std::vector virtualBones; + for (size_t limbIndex = 0; + limbIndex < m_attachLimbsToSpineJointIndices.size(); + ++limbIndex) { + QString limbChainName = QString("Limb") + QString::number(limbIndex + 1); + const auto &spineJointIndex = m_attachLimbsToSpineJointIndices[limbIndex]; + const auto &parentIndex = attachedBoneIndex(spineJointIndex); + if (0 == parentIndex) + continue; + int parentNextIndex = -1; + for (const auto &childIndex: (*m_resultBones)[parentIndex].children) { + const auto &child = (*m_resultBones)[childIndex]; + if (child.name.startsWith("Spine")) { + parentNextIndex = childIndex; + break; + } + } + if (-1 == parentNextIndex) + continue; + QString prefixName = QString("Virtual_") + (*m_resultBones)[parentIndex].name; + QString leftBoneName = prefixName + QString("_Left") + limbChainName; + QString rightBoneName = prefixName + QString("_Right") + limbChainName; + auto findLeftIndex = m_boneNameToIndexMap.find(leftBoneName); + if (findLeftIndex != m_boneNameToIndexMap.end()) { + virtualBones.push_back({findLeftIndex->second, + calculateSide((*m_resultBones)[findLeftIndex->second].tailPosition.x()), + parentIndex, + parentNextIndex}); + //const auto &leftBone = (*m_resultBones)[findLeftIndex->second]; + //qDebug() << "leftBone:" << leftBone.name << "headRadius:" << leftBone.headRadius << "tailRadius:" << leftBone.tailRadius; + } + auto findRightIndex = m_boneNameToIndexMap.find(rightBoneName); + if (findRightIndex != m_boneNameToIndexMap.end()) { + virtualBones.push_back({findRightIndex->second, + calculateSide((*m_resultBones)[findRightIndex->second].tailPosition.x()), + parentIndex, + parentNextIndex}); + //const auto &rightBone = (*m_resultBones)[findRightIndex->second]; + //qDebug() << "rightBone:" << rightBone.name << "headRadius:" << rightBone.headRadius << "tailRadius:" << rightBone.tailRadius; + } + } + + std::unordered_map> boneVerticesMap; + for (auto &it: *m_resultWeights) { + for (const auto &weight: it.second.boneRawWeights()) { + const auto &boneIndex = weight.first; + if (0 == boneIndex) + continue; + boneVerticesMap[boneIndex].push_back(it.first); + } + } + + for (const auto &it: virtualBones) { + const auto &bone = (*m_resultBones)[it.index]; + + double boneLength = (bone.tailPosition - bone.headPosition).length() * 0.75; + + QVector3D boundaryLineTailForParentOnZ; + QVector3D boundaryLineHeadForParentOnZ; + QVector3D boundaryLineTailForParentNextOnZ; + QVector3D boundaryLineHeadForParentNextOnZ; + + QVector3D boundaryLineTailForParentOnX; + QVector3D boundaryLineHeadForParentOnX; + QVector3D boundaryLineTailForParentNextOnX; + QVector3D boundaryLineHeadForParentNextOnX; + + if (m_isSpineVertical) { + boundaryLineTailForParentOnX = QVector3D(bone.tailPosition.x(), + bone.tailPosition.y() - bone.tailRadius, + bone.tailPosition.z()); + boundaryLineHeadForParentOnX = QVector3D(bone.headPosition.x(), + bone.headPosition.y() - bone.headRadius, + bone.headPosition.z()); + + boundaryLineTailForParentNextOnX = QVector3D(bone.tailPosition.x(), + bone.tailPosition.y() + bone.tailRadius, + bone.tailPosition.z()); + boundaryLineHeadForParentNextOnX = QVector3D(bone.headPosition.x(), + bone.headPosition.y() + bone.headRadius, + bone.headPosition.z()); + } else { + boundaryLineTailForParentOnZ = QVector3D(bone.tailPosition.x(), + bone.tailPosition.y(), + bone.tailPosition.z() - bone.tailRadius); + boundaryLineHeadForParentOnZ = QVector3D(bone.headPosition.x(), + bone.headPosition.y(), + bone.headPosition.z() - bone.headRadius); + + boundaryLineTailForParentNextOnZ = QVector3D(bone.tailPosition.x(), + bone.tailPosition.y(), + bone.tailPosition.z() + bone.tailRadius); + boundaryLineHeadForParentNextOnZ = QVector3D(bone.headPosition.x(), + bone.headPosition.y(), + bone.headPosition.z() + bone.headRadius); + } + + float angleInRangle360BetweenTwoVectors(QVector3D a, QVector3D b, QVector3D planeNormal); + for (const auto &vertexIndex: boneVerticesMap[it.parentIndex]) { + if (it.side != calculateSide(m_outcome->vertices[vertexIndex].x())) + continue; + QVector3D projectedPosition = projectPointOnLine(m_outcome->vertices[vertexIndex], bone.tailPosition, bone.headPosition); + if ((projectedPosition - bone.tailPosition).length() > boneLength) + continue; + if (m_isSpineVertical) { + double angle = angleInRangle360BetweenTwoVectors((boundaryLineHeadForParentOnX - boundaryLineTailForParentOnX).normalized(), + (m_outcome->vertices[vertexIndex] - boundaryLineTailForParentOnX).normalized(), + QVector3D(0.0, 0.0, -it.side)); + if (angle > 180) + continue; + } else { + double angle = angleInRangle360BetweenTwoVectors((boundaryLineHeadForParentOnZ - boundaryLineTailForParentOnZ).normalized(), + (m_outcome->vertices[vertexIndex] - boundaryLineTailForParentOnZ).normalized(), + QVector3D(1.0, 0.0, 0.0)); + if (angle > 180) + continue; + } + (*m_resultWeights)[vertexIndex].addBone(it.index, 1.0); + } + for (const auto &vertexIndex: boneVerticesMap[it.parentNextIndex]) { + if (it.side != calculateSide(m_outcome->vertices[vertexIndex].x())) + continue; + QVector3D projectedPosition = projectPointOnLine(m_outcome->vertices[vertexIndex], bone.tailPosition, bone.headPosition); + if ((projectedPosition - bone.tailPosition).length() > boneLength) + continue; + if (m_isSpineVertical) { + double angle = angleInRangle360BetweenTwoVectors((m_outcome->vertices[vertexIndex] - boundaryLineTailForParentNextOnX).normalized(), + (boundaryLineHeadForParentNextOnX - boundaryLineTailForParentNextOnX).normalized(), + QVector3D(0.0, 0.0, -it.side)); + if (angle > 180) + continue; + } else { + double angle = angleInRangle360BetweenTwoVectors((m_outcome->vertices[vertexIndex] - boundaryLineTailForParentNextOnZ).normalized(), + (boundaryLineHeadForParentNextOnZ - boundaryLineTailForParentNextOnZ).normalized(), + QVector3D(1.0, 0.0, 0.0)); + if (angle > 180) + continue; + } + (*m_resultWeights)[vertexIndex].addBone(it.index, 1.0); + } + } +} + void RigGenerator::computeBranchSkinWeights(size_t fromBoneIndex, const QString &boneNamePrefix, const std::vector &vertexIndices, std::vector *discardedVertexIndices) { + //qDebug() << "computeBranchSkinWeights boneNamePrefix:" << boneNamePrefix; std::vector remainVertexIndices = vertexIndices; size_t currentBoneIndex = fromBoneIndex; while (true) { const auto ¤tBone = (*m_resultBones)[currentBoneIndex]; + //qDebug() << " bone:" << currentBone.name; std::vector newRemainVertexIndices; const auto &parentBone = (*m_resultBones)[currentBone.parent]; auto currentDirection = (currentBone.tailPosition - currentBone.headPosition).normalized(); @@ -780,7 +928,7 @@ void RigGenerator::computeBranchSkinWeights(size_t fromBoneIndex, auto beginGradientLength = parentBone.headRadius * 0.5f; auto endGradientLength = parentBone.tailRadius * 0.5f; auto parentLength = (parentBone.tailPosition - parentBone.headPosition).length(); - auto previousBoneIndex = currentBone.name.startsWith("Virtual") ? parentBone.parent : currentBone.parent; + auto previousBoneIndex = /*currentBone.name.startsWith("Virtual") ? parentBone.parent : */currentBone.parent; for (const auto &vertexIndex: remainVertexIndices) { const auto &position = m_outcome->vertices[vertexIndex]; auto direction = (position - currentBone.headPosition).normalized(); @@ -790,7 +938,7 @@ void RigGenerator::computeBranchSkinWeights(size_t fromBoneIndex, if (projectedLength < 0) projectedLength = 0; if (projectedLength <= endGradientLength) { - auto factor = 0.5 * (1.0 - projectedLength / endGradientLength); + auto factor = 0.1 + 0.4 * (1.0 - projectedLength / endGradientLength); (*m_resultWeights)[vertexIndex].addBone(previousBoneIndex, factor); } newRemainVertexIndices.push_back(vertexIndex); @@ -821,7 +969,7 @@ void RigGenerator::computeBranchSkinWeights(size_t fromBoneIndex, (*m_resultWeights)[vertexIndex].addBone(previousBoneIndex, factor); continue; } - auto factor = 0.5 * (1.0 - (projectedLength - parentLength) / beginGradientLength); + auto factor = 0.1 + 0.4 * (1.0 - (projectedLength - parentLength) / beginGradientLength); (*m_resultWeights)[vertexIndex].addBone(previousBoneIndex, factor); continue; } @@ -1105,7 +1253,7 @@ void RigGenerator::buildDemoMesh() const auto &resultBones = *m_resultBones; std::vector> boxes; for (const auto &bone: resultBones) { - if (bone.name.startsWith("Virtual") || bone.name.startsWith("Body")) + if (/*bone.name.startsWith("Virtual") || */bone.name.startsWith("Body")) continue; boxes.push_back(std::make_tuple(bone.headPosition, bone.tailPosition, bone.headRadius, bone.tailRadius, bone.color)); diff --git a/src/riggenerator.h b/src/riggenerator.h index 1da0e3c6..adafec68 100644 --- a/src/riggenerator.h +++ b/src/riggenerator.h @@ -62,6 +62,9 @@ private: int m_debugEdgeVerticesNum = 0; bool m_isSpineVertical = false; bool m_isSuccessful = false; + size_t m_rootSpineJointIndex = 0; + size_t m_lastSpineJointIndex = 0; + void buildNeighborMap(); void buildBoneNodeChain(); void buildSkeleton(); @@ -96,6 +99,8 @@ private: std::unordered_set *visited); void removeBranchsFromNodes(const std::vector> *boneNodeIndices, std::vector *resultNodes); + void fixVirtualBoneSkinWeights(); + int attachedBoneIndex(size_t spineJointIndex); }; #endif diff --git a/src/rigger.h b/src/rigger.h index 5911a523..10b26f65 100644 --- a/src/rigger.h +++ b/src/rigger.h @@ -27,6 +27,7 @@ public: float headRadius = 0.0; float tailRadius = 0.0; QColor color; + std::map attributes; std::vector children; }; @@ -64,6 +65,10 @@ public: } } } + const std::vector> &boneRawWeights() const + { + return m_boneRawWeights; + } private: std::vector> m_boneRawWeights; }; diff --git a/src/rigwidget.cpp b/src/rigwidget.cpp index 0c113e54..06e52d85 100644 --- a/src/rigwidget.cpp +++ b/src/rigwidget.cpp @@ -38,6 +38,7 @@ RigWidget::RigWidget(const Document *document, QWidget *parent) : m_rigWeightRenderWidget->setZRotation(0); m_rigWeightRenderWidget->setEyePosition(QVector3D(0.0, 0.0, -2.0)); m_rigWeightRenderWidget->toggleWireframe(); + m_rigWeightRenderWidget->setNotGraphics(true); m_infoLabel = new InfoLabel; m_infoLabel->hide(); diff --git a/src/simplerendermeshgenerator.cpp b/src/simplerendermeshgenerator.cpp new file mode 100644 index 00000000..c08fc1e7 --- /dev/null +++ b/src/simplerendermeshgenerator.cpp @@ -0,0 +1,34 @@ +#include +#include "simplerendermeshgenerator.h" + +void SimpleRenderMeshGenerator::process() +{ + generate(); + + emit finished(); +} + +void SimpleRenderMeshGenerator::generate() +{ + if (nullptr == m_triangleCornerNormals || + m_triangleCornerNormals->empty()) { + delete m_triangleCornerNormals; + m_triangleCornerNormals = new std::vector>(m_triangles->size()); + for (size_t i = 0; i < m_triangles->size(); ++i) { + const auto &triangle = (*m_triangles)[i]; + QVector3D triangleNormal = QVector3D::normal( + (*m_vertices)[triangle[0]], + (*m_vertices)[triangle[1]], + (*m_vertices)[triangle[2]] + ); + (*m_triangleCornerNormals)[i] = {triangleNormal, + triangleNormal, triangleNormal + }; + } + } + delete m_renderMesh; + m_renderMesh = new SimpleShaderMesh(m_vertices, m_triangles, m_triangleCornerNormals); + m_vertices = nullptr; + m_triangles = nullptr; + m_triangleCornerNormals = nullptr; +} diff --git a/src/simplerendermeshgenerator.h b/src/simplerendermeshgenerator.h new file mode 100644 index 00000000..fbd3d185 --- /dev/null +++ b/src/simplerendermeshgenerator.h @@ -0,0 +1,51 @@ +#ifndef DUST3D_RENDER_MESH_GENERATOR_H +#define DUST3D_RENDER_MESH_GENERATOR_H +#include +#include +#include "simpleshadermesh.h" + +class SimpleRenderMeshGenerator: public QObject +{ + Q_OBJECT +public: + SimpleRenderMeshGenerator(const std::vector &vertices, + const std::vector> &triangles, + const std::vector> *triangleCornerNormals=nullptr) : + m_vertices(new std::vector(vertices)), + m_triangles(new std::vector>(triangles)), + m_triangleCornerNormals(nullptr != triangleCornerNormals ? + new std::vector>(*triangleCornerNormals) : + nullptr) + { + } + + ~SimpleRenderMeshGenerator() + { + delete m_vertices; + delete m_triangles; + delete m_renderMesh; + delete m_triangleCornerNormals; + } + + SimpleShaderMesh *takeRenderMesh() + { + SimpleShaderMesh *renderMesh = m_renderMesh; + m_renderMesh = nullptr; + return renderMesh; + } + + void generate(); + +signals: + void finished(); +public slots: + void process(); + +private: + std::vector *m_vertices = nullptr; + std::vector> *m_triangles = nullptr; + SimpleShaderMesh *m_renderMesh = nullptr; + std::vector> *m_triangleCornerNormals = nullptr; +}; + +#endif diff --git a/src/simpleshadermesh.cpp b/src/simpleshadermesh.cpp new file mode 100644 index 00000000..0f9ecf27 --- /dev/null +++ b/src/simpleshadermesh.cpp @@ -0,0 +1,2 @@ +#include "simpleshadermesh.h" + diff --git a/src/simpleshadermesh.h b/src/simpleshadermesh.h new file mode 100644 index 00000000..f3b1e358 --- /dev/null +++ b/src/simpleshadermesh.h @@ -0,0 +1,56 @@ +#ifndef DUST3D_SIMPLE_SHADER_MESH_H +#define DUST3D_SIMPLE_SHADER_MESH_H +#include +#include + +class SimpleShaderMesh +{ +public: + SimpleShaderMesh(std::vector *vertices, + std::vector> *triangles, + std::vector> *triangleCornerNormals) : + m_vertices(vertices), + m_triangles(triangles), + m_triangleCornerNormals(triangleCornerNormals) + { + } + + SimpleShaderMesh(const SimpleShaderMesh &mesh) + { + if (nullptr != mesh.m_vertices) + m_vertices = new std::vector(*mesh.m_vertices); + if (nullptr != mesh.m_triangles) + m_triangles = new std::vector>(*mesh.m_triangles); + if (nullptr != mesh.m_triangleCornerNormals) + m_triangleCornerNormals = new std::vector>(*mesh.m_triangleCornerNormals); + } + + ~SimpleShaderMesh() + { + delete m_vertices; + delete m_triangles; + delete m_triangleCornerNormals; + } + + const std::vector *vertices() + { + return m_vertices; + } + + const std::vector> *triangles() + { + return m_triangles; + } + + const std::vector> *triangleCornerNormals() + { + return m_triangleCornerNormals; + } + +private: + std::vector *m_vertices = nullptr; + std::vector> *m_triangles = nullptr; + std::vector> *m_triangleCornerNormals = nullptr; +}; + +#endif diff --git a/src/simpleshadermeshbinder.cpp b/src/simpleshadermeshbinder.cpp new file mode 100644 index 00000000..e96b087d --- /dev/null +++ b/src/simpleshadermeshbinder.cpp @@ -0,0 +1,220 @@ +// This file follow the Stackoverflow content license: CC BY-SA 4.0, +// since it's based on Prashanth N Udupa's work: https://stackoverflow.com/questions/35134270/how-to-use-qopenglframebufferobject-for-shadow-mapping +#include +#include +#include +#include "simpleshadermeshbinder.h" + +void SimpleShaderMeshBinder::updateMesh(SimpleShaderMesh *mesh) +{ + QMutexLocker lock(&m_newMeshMutex); + if (mesh != m_mesh) { + delete m_newMesh; + m_newMesh = mesh; + m_newMeshComing = true; + } +} + +void SimpleShaderMeshBinder::checkNewMesh() +{ + SimpleShaderMesh *newMesh = nullptr; + if (m_newMeshComing) { + QMutexLocker lock(&m_newMeshMutex); + if (m_newMeshComing) { + newMesh = m_newMesh; + m_newMesh = nullptr; + m_newMeshComing = false; + } + } + + if (nullptr != newMesh) { + QVector vertices; + QVector indexes; + + const auto &meshVertices = *newMesh->vertices(); + const auto &meshTriangles = *newMesh->triangles(); + const auto &meshNormals = *newMesh->triangleCornerNormals(); + int i = 0; + for (size_t triangleIndex = 0; triangleIndex < meshTriangles.size(); ++triangleIndex) { + const auto &triangle = meshTriangles[triangleIndex]; + const auto &v0 = meshVertices[triangle[0]]; + const auto &v1 = meshVertices[triangle[1]]; + const auto &v2 = meshVertices[triangle[2]]; + vertices.push_back(QVector3D(v0[0], v0[1], v0[2])); + vertices.push_back(QVector3D(v1[0], v1[1], v1[2])); + vertices.push_back(QVector3D(v2[0], v2[1], v2[2])); + indexes << i << i + 1 << i + 2; + i += 3; + } + m_vertexCount = vertices.size(); + m_normalOffset = vertices.size() * int(sizeof(QVector3D)); + for (size_t triangleIndex = 0; triangleIndex < meshTriangles.size(); ++triangleIndex) { + const auto &normals = meshNormals[triangleIndex]; + const auto &n0 = normals[0]; + const auto &n1 = normals[1]; + const auto &n2 = normals[2]; + vertices.push_back(QVector3D(n0[0], n0[1], n0[2])); + vertices.push_back(QVector3D(n1[0], n1[1], n1[2])); + vertices.push_back(QVector3D(n2[0], n2[1], n2[2])); + } + + delete m_vertexBuffer; + m_vertexBuffer = new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer); + m_vertexBuffer->create(); + m_vertexBuffer->bind(); + m_vertexBuffer->allocate( + static_cast(vertices.constData()), + vertices.size() * int(sizeof(QVector3D)) + ); + m_vertexBuffer->release(); + + delete m_indexBuffer; + m_indexBuffer = new QOpenGLBuffer(QOpenGLBuffer::IndexBuffer); + m_indexBuffer->create(); + m_indexBuffer->bind(); + m_indexBuffer->allocate( + static_cast(indexes.constData()), + indexes.size() * int(sizeof(int)) + ); + m_indexBuffer->release(); + + delete newMesh; + } +} + +void SimpleShaderMeshBinder::renderShadow(const QMatrix4x4 &projectionMatrix, const QMatrix4x4 &viewMatrix) +{ + if (nullptr == m_shadowProgram) { + if (!m_openglFunctionsInitialized) { + QOpenGLFunctions::initializeOpenGLFunctions(); + m_openglFunctionsInitialized = true; + } + + m_shadowProgram = new QOpenGLShaderProgram; + m_shadowProgram->addShaderFromSourceFile(QOpenGLShader::Vertex, ":/shaders/shadow.vert"); + m_shadowProgram->addShaderFromSourceFile(QOpenGLShader::Fragment, ":/shaders/shadow.frag"); + m_shadowProgram->link(); + } + + checkNewMesh(); + + if (nullptr == m_indexBuffer) { + return; + } + + m_shadowProgram->bind(); + m_vertexBuffer->bind(); + m_indexBuffer->bind(); + + const QMatrix4x4 modelMatrix = m_sceneMatrix * m_matrix; + const QMatrix4x4 lightViewProjectionMatrix = projectionMatrix * viewMatrix * modelMatrix; + + m_shadowProgram->enableAttributeArray("qt_Vertex"); + m_shadowProgram->setAttributeBuffer("qt_Vertex", GL_FLOAT, 0, 3, 0); + + m_shadowProgram->setUniformValue("qt_LightViewProjectionMatrix", lightViewProjectionMatrix); + + glDrawElements(GL_TRIANGLES, m_vertexCount, GL_UNSIGNED_INT, nullptr); + + m_indexBuffer->release(); + m_vertexBuffer->release(); + m_shadowProgram->release(); +} + +void SimpleShaderMeshBinder::renderScene(const QVector3D &eyePosition, const QVector3D &lightDirection, + const QMatrix4x4 &projectionMatrix, const QMatrix4x4 &viewMatrix, + const QMatrix4x4 &lightViewMatrix) +{ + if (nullptr == m_sceneProgram) { + if (!m_openglFunctionsInitialized) { + QOpenGLFunctions::initializeOpenGLFunctions(); + m_openglFunctionsInitialized = true; + } + + m_sceneProgram = new QOpenGLShaderProgram; + m_sceneProgram->addShaderFromSourceFile(QOpenGLShader::Vertex, ":/shaders/scene.vert"); + m_sceneProgram->addShaderFromSourceFile(QOpenGLShader::Fragment, ":/shaders/scene.frag"); + m_sceneProgram->link(); + } + + checkNewMesh(); + + if (nullptr == m_indexBuffer || 0 == m_shadowMapTextureId) { + return; + } + + m_sceneProgram->bind(); + m_vertexBuffer->bind(); + m_indexBuffer->bind(); + + const QMatrix4x4 modelMatrix = m_sceneMatrix * m_matrix; + const QMatrix4x4 modelViewMatrix = (viewMatrix * modelMatrix); + const QMatrix4x4 modelViewProjectionMatrix = projectionMatrix * modelViewMatrix; + const QMatrix4x4 normalMatrix = modelMatrix.inverted().transposed(); + + m_sceneProgram->enableAttributeArray("qt_Vertex"); + m_sceneProgram->setAttributeBuffer("qt_Vertex", GL_FLOAT, 0, 3, 0); + + m_sceneProgram->enableAttributeArray("qt_Normal"); + m_sceneProgram->setAttributeBuffer("qt_Normal", GL_FLOAT, m_normalOffset, 3, 0); + + m_sceneProgram->setUniformValue("qt_ViewMatrix", viewMatrix); + m_sceneProgram->setUniformValue("qt_NormalMatrix", normalMatrix); + m_sceneProgram->setUniformValue("qt_ModelMatrix", modelMatrix); + m_sceneProgram->setUniformValue("qt_ModelViewMatrix", modelViewMatrix); + m_sceneProgram->setUniformValue("qt_ProjectionMatrix", projectionMatrix); + m_sceneProgram->setUniformValue("qt_ModelViewProjectionMatrix", modelViewProjectionMatrix); + + m_sceneProgram->setUniformValue("qt_LightMatrix", lightViewMatrix); + m_sceneProgram->setUniformValue("qt_LightViewMatrix", lightViewMatrix * modelMatrix); + m_sceneProgram->setUniformValue("qt_LightViewProjectionMatrix", projectionMatrix * lightViewMatrix * modelMatrix); + + if (m_shadowMapTextureId > 0) { + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, m_shadowMapTextureId); + m_sceneProgram->setUniformValue("qt_ShadowMap", 0); + m_sceneProgram->setUniformValue("qt_ShadowEnabled", true); + } else { + m_sceneProgram->setUniformValue("qt_ShadowEnabled", false); + } + + m_sceneProgram->setUniformValue("qt_Light.ambient", QColor(255, 255, 255)); + m_sceneProgram->setUniformValue("qt_Light.diffuse", QColor(Qt::white)); + m_sceneProgram->setUniformValue("qt_Light.specular", QColor(Qt::white)); + m_sceneProgram->setUniformValue("qt_Light.direction", lightDirection); + m_sceneProgram->setUniformValue("qt_Light.eye", eyePosition); + + QColor ambient = Qt::white; + ambient.setRgbF( + ambient.redF() * qreal(0.1f), + ambient.greenF() * qreal(0.1f), + ambient.blueF() * qreal(0.1f) + ); + + QColor diffuse = Qt::white; + diffuse.setRgbF( + diffuse.redF() * qreal(1.0f), + diffuse.greenF() * qreal(1.0f), + diffuse.blueF() * qreal(1.0f) + ); + + QColor specular = Qt::white; + + m_sceneProgram->setUniformValue("qt_Material.ambient", ambient); + m_sceneProgram->setUniformValue("qt_Material.diffuse", diffuse); + m_sceneProgram->setUniformValue("qt_Material.specular", specular); + m_sceneProgram->setUniformValue("qt_Material.specularPower", 0.0f); + m_sceneProgram->setUniformValue("qt_Material.brightness", 1.0f); + m_sceneProgram->setUniformValue("qt_Material.opacity", 1.0f); + + glDrawElements(GL_TRIANGLES, m_vertexCount, GL_UNSIGNED_INT, nullptr); + + if (m_shadowMapTextureId > 0) { + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, 0); + } + + m_indexBuffer->release(); + m_vertexBuffer->release(); + m_sceneProgram->release(); +} diff --git a/src/simpleshadermeshbinder.h b/src/simpleshadermeshbinder.h new file mode 100644 index 00000000..3a9d50c6 --- /dev/null +++ b/src/simpleshadermeshbinder.h @@ -0,0 +1,62 @@ +// This file follow the Stackoverflow content license: CC BY-SA 4.0, +// since it's based on Prashanth N Udupa's work: https://stackoverflow.com/questions/35134270/how-to-use-qopenglframebufferobject-for-shadow-mapping +#ifndef DUST3D_SIMPLE_SHADER_MESH_BINDER_H +#define DUST3D_SIMPLE_SHADER_MESH_BINDER_H +#include +#include +#include +#include +#include +#include +#include "simpleshadermesh.h" + +class SimpleShaderMeshBinder : public QOpenGLFunctions +{ +public: + ~SimpleShaderMeshBinder() + { + delete m_shadowProgram; + delete m_sceneProgram; + delete m_vertexBuffer; + delete m_indexBuffer; + delete m_mesh; + delete m_newMesh; + } + + void updateMesh(SimpleShaderMesh *mesh); + + void setShadowMapTextureId(const uint &val) + { + m_shadowMapTextureId = val; + } + + void setSceneMatrix(const QMatrix4x4 &matrix) + { + m_sceneMatrix = matrix; + } + + void renderShadow(const QMatrix4x4 &projectionMatrix, const QMatrix4x4 &viewMatrix); + void renderScene(const QVector3D &eyePosition, const QVector3D &lightDirection, + const QMatrix4x4 &projectionMatrix, const QMatrix4x4 &viewMatrix, + const QMatrix4x4 &lightViewMatrix); + +private: + QMatrix4x4 m_sceneMatrix; + QMatrix4x4 m_matrix; + QOpenGLShaderProgram *m_shadowProgram = nullptr; + QOpenGLShaderProgram *m_sceneProgram = nullptr; + bool m_openglFunctionsInitialized = false; + QOpenGLBuffer *m_vertexBuffer = nullptr; + QOpenGLBuffer *m_indexBuffer = nullptr; + uint m_shadowMapTextureId = 0; + int m_vertexCount = 0; + int m_normalOffset = 0; + SimpleShaderMesh *m_mesh = nullptr; + bool m_newMeshComing = false; + SimpleShaderMesh *m_newMesh = nullptr; + QMutex m_newMeshMutex; + + void checkNewMesh(); +}; + +#endif diff --git a/src/simpleshaderwidget.cpp b/src/simpleshaderwidget.cpp new file mode 100644 index 00000000..39cec360 --- /dev/null +++ b/src/simpleshaderwidget.cpp @@ -0,0 +1,247 @@ +// This file follow the Stackoverflow content license: CC BY-SA 4.0, +// since it's based on Prashanth N Udupa's work: https://stackoverflow.com/questions/35134270/how-to-use-qopenglframebufferobject-for-shadow-mapping +#include +#include +#include +#include "simpleshaderwidget.h" + +static const int SHADOW_WIDTH = 2048; +static const int SHADOW_HEIGHT = 2048; + +SimpleShaderWidget::SimpleShaderWidget(QWidget *parent) : + QOpenGLWidget(parent) +{ + QSurfaceFormat format = QSurfaceFormat::defaultFormat(); + format.setProfile(QSurfaceFormat::OpenGLContextProfile::CompatibilityProfile); + format.setVersion(1, 1); + setFormat(format); +} + +SimpleShaderWidget::~SimpleShaderWidget() +{ +} + +void SimpleShaderWidget::updateMesh(SimpleShaderMesh *mesh) +{ + if (nullptr == m_meshBinder) { + delete mesh; + return; + } + m_meshBinder->updateMesh(mesh); + update(); +} + +void SimpleShaderWidget::resizeEvent(QResizeEvent *event) +{ + QOpenGLWidget::resizeEvent(event); +} + +void SimpleShaderWidget::resizeGL(int w, int h) +{ + m_cameraPositionMatrix.setToIdentity(); + m_cameraPositionMatrix.rotate(20, 0, 1, 0); + m_cameraPositionMatrix.rotate(-25, 1, 0, 0); + + m_lightPositionMatrix = m_cameraPositionMatrix; + m_lightPositionMatrix.rotate(45, 0, 1, 0); + + m_lightPositionMatrix.translate(0, 0, 50.0f); + + m_projectionMatrix.setToIdentity(); + m_projectionMatrix.perspective(45.0, float(w)/float(h), 0.1f, 1000.0f); +} + +void SimpleShaderWidget::cleanup() +{ + makeCurrent(); + if (m_shadowMapInitialized) { + glDeleteTextures(1, &m_shadowMapTextureId); + glDeleteFramebuffers(1, &m_shadowMapFrameBufferId); + } + delete m_meshBinder; + m_meshBinder = nullptr; + doneCurrent(); +} + +void SimpleShaderWidget::initializeGL() +{ + connect(context(), &QOpenGLContext::aboutToBeDestroyed, this, &SimpleShaderWidget::cleanup); + + QOpenGLFunctions::initializeOpenGLFunctions(); + + constexpr float color = (float)0x25 / 255; + glClearColor(color, color, color, 1.0f); + + glEnable(GL_DEPTH_TEST); + + glDepthFunc(GL_LEQUAL); + glEnable(GL_POLYGON_OFFSET_LINE); + glPolygonOffset(-0.03125f, -0.03125f); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +} + +void SimpleShaderWidget::paintGL() +{ + if (nullptr == m_meshBinder) + m_meshBinder = new SimpleShaderMeshBinder; + renderToShadowMap(); + renderToScreen(); +} + +void SimpleShaderWidget::renderToShadowMap() +{ + // Refer http://learnopengl.com/#!Advanced-Lighting/Shadows/Shadow-Mapping + if (!m_shadowMapInitialized) { + // Create a texture for storing the depth map + glGenTextures(1, &m_shadowMapTextureId); + glBindTexture(GL_TEXTURE_2D, m_shadowMapTextureId); + glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, + SHADOW_WIDTH, SHADOW_HEIGHT, 0, GL_DEPTH_COMPONENT, GL_FLOAT, nullptr); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); + GLfloat borderColor[] = { 1.0, 1.0, 1.0, 1.0 }; + glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor); + + // Create a frame-buffer and associate the texture with it. + glGenFramebuffers(1, &m_shadowMapFrameBufferId); + glBindFramebuffer(GL_FRAMEBUFFER, m_shadowMapFrameBufferId); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_shadowMapTextureId, 0); + + // Let OpenGL know that we are not interested in colors for this buffer + glDrawBuffer(GL_NONE); + glReadBuffer(GL_NONE); + + // Cleanup for now. + glBindFramebuffer(GL_FRAMEBUFFER, 0); + glBindTexture(GL_TEXTURE_2D, 0); + + m_shadowMapInitialized = true; + } + + // Render into the depth framebuffer + glBindFramebuffer(GL_FRAMEBUFFER, m_shadowMapFrameBufferId); + glViewport(0, 0, SHADOW_WIDTH, SHADOW_HEIGHT); + glClear(GL_DEPTH_BUFFER_BIT); + + glEnable(GL_CULL_FACE); + glCullFace(GL_FRONT); + + m_lightViewMatrix.setToIdentity(); + m_lightViewMatrix.lookAt(m_lightPositionMatrix.map(QVector3D(0, 0, 0)), + QVector3D(), + m_lightPositionMatrix.map(QVector3D(0, 1, 0)).normalized()); + + m_meshBinder->setShadowMapTextureId(0); + m_meshBinder->renderShadow(m_projectionMatrix, m_lightViewMatrix); + + glBindFramebuffer(GL_FRAMEBUFFER, 0); +} + +void SimpleShaderWidget::renderToScreen() +{ + const int pixelRatio = devicePixelRatio(); + const int w = width() * pixelRatio; + const int h = height() * pixelRatio; + + glViewport(0, 0, w, h); + glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); + + glEnable(GL_CULL_FACE); + glCullFace(GL_BACK); + + const QVector3D center = QVector3D(); + const QVector3D eye(0, 0, 1.0); + const QVector3D lightDirection = m_lightPositionMatrix.map(QVector3D(0, 0, -1)).normalized(); + + m_sceneMatrix.setToIdentity(); + m_sceneMatrix.rotate(m_rotationX / 16.0f, 1, 0, 0); + m_sceneMatrix.rotate(m_rotationY / 16.0f, 0, 1, 0); + + auto zoomedMatrix = m_cameraPositionMatrix; + zoomedMatrix.translate(0, 0, m_zoom); + + m_viewMatrix.setToIdentity(); + m_viewMatrix.lookAt(zoomedMatrix.map(QVector3D(0, 0, 0)), + QVector3D(), zoomedMatrix.map(QVector3D(0, 1, 0)).normalized()); + + m_meshBinder->setShadowMapTextureId(m_shadowMapTextureId); + m_meshBinder->setSceneMatrix(m_sceneMatrix); + m_meshBinder->renderScene(eye, lightDirection, m_projectionMatrix, m_viewMatrix, m_lightViewMatrix); +} + +void SimpleShaderWidget::mousePressEvent(QMouseEvent *event) +{ + if ((event->button() == Qt::LeftButton/* && QGuiApplication::queryKeyboardModifiers().testFlag(Qt::AltModifier)*/) || + event->button() == Qt::MidButton) { + m_lastPos = mapFromGlobal(event->globalPos()); + if (!m_moveStarted) { + m_moveStarted = true; + } + } +} + +void SimpleShaderWidget::setRotationX(int angle) +{ + normalizeAngle(angle); + if (angle != m_rotationX) { + m_rotationX = angle; + update(); + } +} + +void SimpleShaderWidget::setRotationY(int angle) +{ + normalizeAngle(angle); + if (angle != m_rotationY) { + m_rotationY = angle; + update(); + } +} + +void SimpleShaderWidget::normalizeAngle(int &angle) +{ + while (angle < 0) + angle += 360 * 16; + while (angle > 360 * 16) + angle -= 360 * 16; +} + +void SimpleShaderWidget::mouseMoveEvent(QMouseEvent *event) +{ + QPoint pos = mapFromGlobal(event->globalPos()); + + if (m_moveStarted) { + int dx = pos.x() - m_lastPos.x(); + int dy = pos.y() - m_lastPos.y(); + + setRotationX(m_rotationX + 8 * dy); + setRotationY(m_rotationY + 8 * dx); + } + + m_lastPos = pos; +} + +void SimpleShaderWidget::wheelEvent(QWheelEvent *event) +{ + qreal delta = geometry().height() * 0.1f; + if (event->delta() < 0) + delta = -delta; + zoom(delta); +} + +void SimpleShaderWidget::mouseReleaseEvent(QMouseEvent *event) +{ + if (m_moveStarted) + m_moveStarted = false; +} + +void SimpleShaderWidget::zoom(float delta) +{ + m_zoom += m_zoom * (delta > 0 ? -0.1 : 0.1); + update(); +} + diff --git a/src/simpleshaderwidget.h b/src/simpleshaderwidget.h new file mode 100644 index 00000000..e7cd58dc --- /dev/null +++ b/src/simpleshaderwidget.h @@ -0,0 +1,63 @@ +// This file follow the Stackoverflow content license: CC BY-SA 4.0, +// since it's based on Prashanth N Udupa's work: https://stackoverflow.com/questions/35134270/how-to-use-qopenglframebufferobject-for-shadow-mapping +#ifndef DUST3D_SIMPLE_SHADER_WIDGET_H +#define DUST3D_SIMPLE_SHADER_WIDGET_H +#include +#include +#include +#include +#include +#include +#include +#include +#include "simpleshadermesh.h" +#include "simpleshadermeshbinder.h" + +class SimpleShaderWidget: public QOpenGLWidget, public QOpenGLFunctions +{ +public: + SimpleShaderWidget(QWidget *parent=nullptr); + ~SimpleShaderWidget(); + + void updateMesh(SimpleShaderMesh *mesh); + void zoom(float delta); + +protected: + void resizeEvent(QResizeEvent *event) override; + void resizeGL(int w, int h) override; + void initializeGL() override; + void paintGL() override; + void mousePressEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + void wheelEvent(QWheelEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; + +public slots: + void cleanup(); + +private: + uint m_shadowMapFrameBufferId = 0; + uint m_shadowMapTextureId = 0; + bool m_shadowMapInitialized = false; + QMatrix4x4 m_sceneMatrix; + QMatrix4x4 m_projectionMatrix; + QMatrix4x4 m_viewMatrix; + QMatrix4x4 m_cameraPositionMatrix; + QMatrix4x4 m_lightPositionMatrix; + QMatrix4x4 m_lightViewMatrix; + SimpleShaderMeshBinder *m_meshBinder = nullptr; + QPoint m_lastPos; + bool m_moveStarted = false; + int m_rotationX = 0; + int m_rotationY = 0; + float m_zoom = 2.5f; + QVector3D m_eyePosition = QVector3D(0.0, 0.0, 1.0); + + void setRotationX(int angle); + void setRotationY(int angle); + void renderToShadowMap(); + void renderToScreen(); + void normalizeAngle(int &angle); +}; + +#endif diff --git a/src/skeletondocument.h b/src/skeletondocument.h index f2887ffd..acdb6c5f 100644 --- a/src/skeletondocument.h +++ b/src/skeletondocument.h @@ -32,8 +32,8 @@ public: } void setRadius(float toRadius) { - if (toRadius < 0.005) - toRadius = 0.005; + if (toRadius < 0.005f) + toRadius = 0.005f; else if (toRadius > 1) toRadius = 1; radius = toRadius; diff --git a/src/skeletongraphicswidget.cpp b/src/skeletongraphicswidget.cpp index b5b73908..d9bcccb6 100644 --- a/src/skeletongraphicswidget.cpp +++ b/src/skeletongraphicswidget.cpp @@ -835,7 +835,7 @@ void SkeletonGraphicsWidget::mouseMoveEvent(QMouseEvent *event) mouseMove(event); } -bool SkeletonGraphicsWidget::rotated(void) +bool SkeletonGraphicsWidget::rotated() { return m_rotated; } diff --git a/src/skeletongraphicswidget.h b/src/skeletongraphicswidget.h index 0c16a4d1..ae8b24d1 100644 --- a/src/skeletongraphicswidget.h +++ b/src/skeletongraphicswidget.h @@ -546,7 +546,7 @@ public: void setNodePositionModifyOnly(bool nodePositionModifyOnly); void setMainProfileOnly(bool mainProfileOnly); bool inputWheelEventFromOtherWidget(QWheelEvent *event); - bool rotated(void); + bool rotated(); protected: void mouseMoveEvent(QMouseEvent *event) override; void wheelEvent(QWheelEvent *event) override; diff --git a/src/skeletonikmover.cpp b/src/skeletonikmover.cpp index 9c828ee5..cdcd62b6 100644 --- a/src/skeletonikmover.cpp +++ b/src/skeletonikmover.cpp @@ -48,7 +48,7 @@ void SkeletonIkMover::process() void SkeletonIkMover::resolve() { - CCDIKSolver solver; + CcdIkSolver solver; for (auto i = 0u; i < m_ikNodes.size(); i++) { solver.addNodeInOrder(m_ikNodes[i].position); } diff --git a/src/snapshot.h b/src/snapshot.h index c9aca986..5ae9135f 100644 --- a/src/snapshot.h +++ b/src/snapshot.h @@ -18,105 +18,8 @@ public: std::map> parts; std::map> components; std::map rootComponent; - std::vector, std::vector, std::map>>>>> poses; // std::pair frame: std::pair - std::vector, std::vector>>> motions; // std::pair + std::map> motions; std::vector, std::vector, std::vector>>>>> materials; // std::pair layer: std::pair - - uint64_t hash() const - { - std::vector buffer; - auto addQStringToBuffer = [&buffer](const QString &str) { - auto byteArray = str.toUtf8(); - for (const auto &byte: byteArray) - buffer.push_back(byte); - }; - for (const auto &item: canvas) { - addQStringToBuffer(item.first); - addQStringToBuffer(item.second); - } - for (const auto &item: nodes) { - addQStringToBuffer(item.first); - for (const auto &subItem: item.second) { - addQStringToBuffer(subItem.first); - addQStringToBuffer(subItem.second); - } - } - for (const auto &item: edges) { - addQStringToBuffer(item.first); - for (const auto &subItem: item.second) { - addQStringToBuffer(subItem.first); - addQStringToBuffer(subItem.second); - } - } - for (const auto &item: parts) { - addQStringToBuffer(item.first); - for (const auto &subItem: item.second) { - addQStringToBuffer(subItem.first); - addQStringToBuffer(subItem.second); - } - } - for (const auto &item: components) { - addQStringToBuffer(item.first); - for (const auto &subItem: item.second) { - addQStringToBuffer(subItem.first); - addQStringToBuffer(subItem.second); - } - } - for (const auto &item: rootComponent) { - addQStringToBuffer(item.first); - addQStringToBuffer(item.second); - } - for (const auto &item: poses) { - for (const auto &subItem: item.first) { - addQStringToBuffer(subItem.first); - addQStringToBuffer(subItem.second); - } - for (const auto &subItem: item.second) { - for (const auto &subSubItem: subItem.first) { - addQStringToBuffer(subSubItem.first); - addQStringToBuffer(subSubItem.second); - } - for (const auto &subSubItem: subItem.second) { - addQStringToBuffer(subSubItem.first); - for (const auto &subSubSubItem: subSubItem.second) { - addQStringToBuffer(subSubSubItem.first); - addQStringToBuffer(subSubSubItem.second); - } - } - } - } - for (const auto &item: motions) { - for (const auto &subItem: item.first) { - addQStringToBuffer(subItem.first); - addQStringToBuffer(subItem.second); - } - for (const auto &subItem: item.second) { - for (const auto &subSubItem: subItem) { - addQStringToBuffer(subSubItem.first); - addQStringToBuffer(subSubItem.second); - } - } - } - for (const auto &item: materials) { - for (const auto &subItem: item.first) { - addQStringToBuffer(subItem.first); - addQStringToBuffer(subItem.second); - } - for (const auto &subItem: item.second) { - for (const auto &subSubItem: subItem.first) { - addQStringToBuffer(subSubItem.first); - addQStringToBuffer(subSubItem.second); - } - for (const auto &subSubItem: subItem.second) { - for (const auto &subSubSubItem: subSubItem) { - addQStringToBuffer(subSubSubItem.first); - addQStringToBuffer(subSubSubItem.second); - } - } - } - } - return crc64(0, buffer.data(), buffer.size()); - } void resolveBoundingBox(QRectF *mainProfile, QRectF *sideProfile, const QString &partId=QString()) const; }; diff --git a/src/snapshotxml.cpp b/src/snapshotxml.cpp index 8069d090..97c6861c 100644 --- a/src/snapshotxml.cpp +++ b/src/snapshotxml.cpp @@ -126,65 +126,14 @@ void saveSkeletonToXmlStream(Snapshot *snapshot, QXmlStreamWriter *writer) } writer->writeEndElement(); - writer->writeStartElement("poses"); - //std::vector, std::map>>>::iterator poseIterator; - std::vector, std::vector, std::map>>>>>::iterator poseIterator; - for (poseIterator = snapshot->poses.begin(); poseIterator != snapshot->poses.end(); poseIterator++) { - std::map::iterator poseAttributeIterator; - writer->writeStartElement("pose"); - for (poseAttributeIterator = poseIterator->first.begin(); poseAttributeIterator != poseIterator->first.end(); poseAttributeIterator++) { - writer->writeAttribute(poseAttributeIterator->first, poseAttributeIterator->second); - } - writer->writeStartElement("frames"); - std::vector, std::map>>>::iterator frameIterator; - for (frameIterator = poseIterator->second.begin(); frameIterator != poseIterator->second.end(); frameIterator++) { - std::map::iterator frameAttributeIterator; - writer->writeStartElement("frame"); - for (frameAttributeIterator = frameIterator->first.begin(); frameAttributeIterator != frameIterator->first.end(); frameAttributeIterator++) { - writer->writeAttribute(frameAttributeIterator->first, frameAttributeIterator->second); - } - writer->writeStartElement("parameters"); - std::map>::iterator itemsIterator; - for (itemsIterator = frameIterator->second.begin(); itemsIterator != frameIterator->second.end(); itemsIterator++) { - std::map::iterator parametersIterator; - writer->writeStartElement("parameter"); - writer->writeAttribute("for", itemsIterator->first); - for (parametersIterator = itemsIterator->second.begin(); parametersIterator != itemsIterator->second.end(); - parametersIterator++) { - writer->writeAttribute(parametersIterator->first, parametersIterator->second); - } - writer->writeEndElement(); - } - writer->writeEndElement(); - writer->writeEndElement(); - } - writer->writeEndElement(); - writer->writeEndElement(); - } - writer->writeEndElement(); - writer->writeStartElement("motions"); - std::vector, std::vector>>>::iterator motionIterator; + std::map>::iterator motionIterator; for (motionIterator = snapshot->motions.begin(); motionIterator != snapshot->motions.end(); motionIterator++) { std::map::iterator motionAttributeIterator; writer->writeStartElement("motion"); - for (motionAttributeIterator = std::get<0>(*motionIterator).begin(); motionAttributeIterator != std::get<0>(*motionIterator).end(); motionAttributeIterator++) { - writer->writeAttribute(motionAttributeIterator->first, motionAttributeIterator->second); - } - writer->writeStartElement("clips"); - { - std::vector>::iterator itemsIterator; - for (itemsIterator = std::get<1>(*motionIterator).begin(); itemsIterator != std::get<1>(*motionIterator).end(); itemsIterator++) { - std::map::iterator attributesIterator; - writer->writeStartElement("clip"); - for (attributesIterator = itemsIterator->begin(); attributesIterator != itemsIterator->end(); - attributesIterator++) { - writer->writeAttribute(attributesIterator->first, attributesIterator->second); - } - writer->writeEndElement(); - } - } - writer->writeEndElement(); + for (motionAttributeIterator = motionIterator->second.begin(); motionAttributeIterator != motionIterator->second.end(); motionAttributeIterator++) { + writer->writeAttribute(motionAttributeIterator->first, motionAttributeIterator->second); + } writer->writeEndElement(); } writer->writeEndElement(); @@ -200,9 +149,6 @@ void loadSkeletonFromXmlStream(Snapshot *snapshot, QXmlStreamReader &reader, qui std::vector elementNameStack; std::pair, std::vector>> currentMaterialLayer; std::pair, std::vector, std::vector>>>> currentMaterial; - std::pair, std::vector, std::map>>>> currentPose; - std::pair, std::map>> currentPoseFrame; - std::pair, std::vector>> currentMotion; while (!reader.atEnd()) { reader.readNext(); if (!reader.isStartElement() && !reader.isEndElement()) { @@ -310,41 +256,16 @@ void loadSkeletonFromXmlStream(Snapshot *snapshot, QXmlStreamReader &reader, qui foreach(const QXmlStreamAttribute &attr, reader.attributes()) { currentMaterial.first[attr.name().toString()] = attr.value().toString(); } - } else if (fullName == "canvas.poses.pose") { - QString poseId = reader.attributes().value("id").toString(); - if (poseId.isEmpty()) - continue; - currentPose = decltype(currentPose)(); - foreach(const QXmlStreamAttribute &attr, reader.attributes()) { - currentPose.first[attr.name().toString()] = attr.value().toString(); - } - } else if (fullName == "canvas.poses.pose.frames.frame") { - foreach(const QXmlStreamAttribute &attr, reader.attributes()) { - currentPoseFrame.first[attr.name().toString()] = attr.value().toString(); - } - } else if (fullName == "canvas.poses.pose.frames.frame.parameters.parameter") { - QString forWhat = reader.attributes().value("for").toString(); - if (forWhat.isEmpty()) - continue; - foreach(const QXmlStreamAttribute &attr, reader.attributes()) { - if ("for" == attr.name().toString()) - continue; - currentPoseFrame.second[forWhat][attr.name().toString()] = attr.value().toString(); - } } else if (fullName == "canvas.motions.motion") { - QString motionId = reader.attributes().value("id").toString(); - if (motionId.isEmpty()) - continue; - currentMotion = decltype(currentMotion)(); - foreach(const QXmlStreamAttribute &attr, reader.attributes()) { - currentMotion.first[attr.name().toString()] = attr.value().toString(); - } - } else if (fullName == "canvas.motions.motion.clips.clip") { - std::map attributes; - foreach(const QXmlStreamAttribute &attr, reader.attributes()) { - attributes[attr.name().toString()] = attr.value().toString(); + QString motionId = reader.attributes().value("id").toString(); + if (motionId.isEmpty()) + continue; + if (flags & SNAPSHOT_ITEM_MOTION) { + std::map *motionMap = &snapshot->motions[motionId]; + foreach(const QXmlStreamAttribute &attr, reader.attributes()) { + (*motionMap)[attr.name().toString()] = attr.value().toString(); + } } - currentMotion.second.push_back(attributes); } } else if (reader.isEndElement()) { if (fullName.startsWith("canvas.components.component")) { @@ -355,16 +276,6 @@ void loadSkeletonFromXmlStream(Snapshot *snapshot, QXmlStreamReader &reader, qui if (flags & SNAPSHOT_ITEM_MATERIAL) { snapshot->materials.push_back(currentMaterial); } - } else if (fullName == "canvas.poses.pose.frames.frame") { - currentPose.second.push_back(currentPoseFrame); - } else if (fullName == "canvas.poses.pose") { - if (flags & SNAPSHOT_ITEM_POSE) { - snapshot->poses.push_back(currentPose); - } - } else if (fullName == "canvas.motions.motion") { - if (flags & SNAPSHOT_ITEM_MOTION) { - snapshot->motions.push_back(currentMotion); - } } } } diff --git a/src/snapshotxml.h b/src/snapshotxml.h index 3eb7c085..afb4ed7f 100644 --- a/src/snapshotxml.h +++ b/src/snapshotxml.h @@ -6,13 +6,11 @@ #define SNAPSHOT_ITEM_CANVAS 0x00000001 #define SNAPSHOT_ITEM_COMPONENT 0x00000002 #define SNAPSHOT_ITEM_MATERIAL 0x00000004 -#define SNAPSHOT_ITEM_POSE 0x00000008 -#define SNAPSHOT_ITEM_MOTION 0x00000010 +#define SNAPSHOT_ITEM_MOTION 0x00000008 #define SNAPSHOT_ITEM_ALL ( \ SNAPSHOT_ITEM_CANVAS | \ SNAPSHOT_ITEM_COMPONENT | \ SNAPSHOT_ITEM_MATERIAL | \ - SNAPSHOT_ITEM_POSE | \ SNAPSHOT_ITEM_MOTION \ ) diff --git a/src/vertebratamotion.cpp b/src/vertebratamotion.cpp new file mode 100644 index 00000000..6b97e6b4 --- /dev/null +++ b/src/vertebratamotion.cpp @@ -0,0 +1,296 @@ +#include "vertebratamotion.h" +#include "genericspineandpseudophysics.h" +#include "hermitecurveinterpolation.h" +#include "chainsimulator.h" +#include "ccdikresolver.h" +#include + +void VertebrataMotion::prepareLegHeights() +{ + GenericSpineAndPseudoPhysics physics; + physics.calculateFootHeights(m_parameters.hipHeight, + m_parameters.stanceTime, m_parameters.swingTime, &m_legHeights, &m_legMoveOffsets); +} + +void VertebrataMotion::prepareLegs() +{ + m_legs.clear(); + for (size_t spineNodeIndex = 0; + spineNodeIndex < m_spineNodes.size(); ++spineNodeIndex) { + std::vector> nodesBySide = { + std::vector(), + std::vector(), + std::vector() + }; + bool foundLeg = false; + for (int side = 0; side < 3; ++side) { + auto findLegNodes = m_legNodes.find({spineNodeIndex, (Side)side}); + if (findLegNodes == m_legNodes.end()) + continue; + nodesBySide[side] = findLegNodes->second; + foundLeg = true; + } + if (!foundLeg) + continue; + + Leg leg; + leg.nodes = leg.updatedNodes = nodesBySide; + leg.spineNodeIndex = spineNodeIndex; + m_legs.push_back(leg); + } +} + +void VertebrataMotion::prepareLegHeightIndices() +{ + int balancedStart = 0; + for (int side = 0; side < 3; ++side) { + bool foundSide = false; + int heightIndex = balancedStart; + for (size_t legIndex = 0; legIndex < m_legs.size(); ++legIndex) { + auto &leg = m_legs[legIndex]; + if (leg.nodes[side].empty()) + continue; + foundSide = true; + leg.heightIndices[side] = heightIndex; + heightIndex += m_parameters.legSideIntval * m_legHeights.size(); + } + if (!foundSide) + continue; + balancedStart += m_parameters.legBalanceIntval * m_legHeights.size(); + } +} + +void VertebrataMotion::calculateSpineJoints() +{ + HermiteCurveInterpolation spineInterpolation; + + if (m_spineNodes.size() >= 2) { + spineInterpolation.addPerpendicularDirection(0, QVector2D(0.0, -1.0)); + spineInterpolation.addPerpendicularDirection(m_spineNodes.size() - 1, QVector2D(0.0, -1.0)); + } + + for (size_t legIndex = 0; legIndex < m_legs.size(); ++legIndex) { + auto &leg = m_legs[legIndex]; + for (int side = 0; side < 3; ++side) { + if (leg.nodes[side].empty()) + continue; + auto &nodes = leg.updatedNodes[side]; + QVector3D legDirection = nodes[nodes.size() - 1].position - nodes[0].position; + if (m_parameters.biped && legIndex != m_legs.size() - 1) { + legDirection = QVector3D(1.0, 0.0, 0.0); + } else { + legDirection = legDirection.normalized() * (1.0 - m_parameters.spineStability) + + QVector3D(0.0, -1.0, 0.0) * m_parameters.spineStability; + } + QVector2D legDirection2 = QVector2D(legDirection.z(), legDirection.y()); + spineInterpolation.addPerpendicularDirection(leg.spineNodeIndex, legDirection2.normalized()); + } + if (0 == legIndex && 0 != leg.spineNodeIndex) { + m_updatedSpineNodes[0].position.setY(m_updatedSpineNodes[0].position.y() + + leg.top - m_updatedSpineNodes[leg.spineNodeIndex].position.y()); + } + if (m_legs.size() - 1 == legIndex && m_updatedSpineNodes.size() - 1 != leg.spineNodeIndex) { + m_updatedSpineNodes[m_updatedSpineNodes.size() - 1].position.setY(m_updatedSpineNodes[m_updatedSpineNodes.size() - 1].position.y() + + leg.top - m_updatedSpineNodes[leg.spineNodeIndex].position.y()); + } + m_updatedSpineNodes[leg.spineNodeIndex].position.setY(leg.top); + } + + for (size_t nodeIndex = 0; nodeIndex < m_spineNodes.size(); ++nodeIndex) { + const auto &node = m_updatedSpineNodes[nodeIndex]; + const auto &originalNode = m_spineNodes[nodeIndex]; + spineInterpolation.addNode(QVector2D(node.position.z(), node.position.y()), originalNode.position); + } + + spineInterpolation.update(); + + for (size_t spineNodexIndex = 0; spineNodexIndex < m_spineNodes.size(); ++spineNodexIndex) { + auto &node = m_updatedSpineNodes[spineNodexIndex]; + const auto &updatedPosition2 = spineInterpolation.getUpdatedPosition(spineNodexIndex); + node.position.setZ(updatedPosition2.x()); + node.position.setY(updatedPosition2.y()); + } +} + +void VertebrataMotion::calculateLegMoves(size_t heightIndex) +{ + auto calculateLegTargetTop = [&](size_t legIndex) { + double sumTop = 0.0; + size_t countForAverageTop = 0; + auto &leg = m_legs[legIndex]; + for (int side = 0; side < 3; ++side) { + if (leg.nodes[side].empty()) + continue; + sumTop += m_legHeights[(heightIndex + leg.heightIndices[side]) % m_legHeights.size()]; + ++countForAverageTop; + } + if (0 == countForAverageTop) + return 0.0; + return sumTop / countForAverageTop; + }; + + auto calculateLegCurrentTop = [&](size_t legIndex) { + double sumTop = 0.0; + size_t countForAverageTop = 0; + auto &leg = m_legs[legIndex]; + for (int side = 0; side < 3; ++side) { + if (leg.nodes[side].empty()) + continue; + sumTop += leg.nodes[side][0].position.y(); + ++countForAverageTop; + } + if (0 == countForAverageTop) + return 0.0; + return sumTop / countForAverageTop; + }; + + m_updatedSpineNodes = m_spineNodes; + + double hipOffset = 0; + + if (m_parameters.biped && m_legs.size() > 1) { + size_t legIndex = m_legs.size() - 1; + double targetTop = calculateLegTargetTop(legIndex); + double currentTop = calculateLegCurrentTop(legIndex); + hipOffset = targetTop - currentTop; + } + + for (size_t legIndex = 0; legIndex < m_legs.size(); ++legIndex) { + auto &leg = m_legs[legIndex]; + if (m_parameters.biped && legIndex != m_legs.size() - 1) { + leg.top = calculateLegCurrentTop(legIndex) + hipOffset; + } else { + leg.top = calculateLegTargetTop(legIndex); + } + for (int side = 0; side < 3; ++side) { + if (leg.nodes[side].empty()) + continue; + double offset = leg.top - leg.nodes[side][0].position.y(); + leg.updatedNodes[side] = leg.nodes[side]; + auto &nodes = leg.updatedNodes[side]; + for (auto &node: nodes) + node.position.setY(node.position.y() + offset); + + if (nodes.size() < 2) + continue; + + double bottom = 0.0; + if (m_parameters.biped && legIndex != m_legs.size() - 1) { + bottom = std::max(leg.top - m_parameters.armLength, m_groundY); + } else { + bottom = std::max(leg.top - m_parameters.hipHeight, m_groundY); + } + + leg.move[side] = m_legMoveOffsets[(heightIndex + leg.heightIndices[side]) % m_legHeights.size()]; + double legLength = (nodes[0].position - nodes[nodes.size() - 1].position).length(); + auto moveOffset = leg.move[side] * 0.5 * legLength; + + CcdIkSolver ccdIkSolver; + if (m_parameters.biped && legIndex != m_legs.size() - 1) { + nodes[1].position.setZ(nodes[1].position.z() + moveOffset * 0.15); + nodes[1].position.setY(nodes[1].position.y() + moveOffset * 0.05); + ccdIkSolver.setSolveFrom(1); + } + for (const auto &node: nodes) { + int nodeIndex = ccdIkSolver.addNodeInOrder(node.position); + if (0 == nodeIndex) + continue; + if (Side::Left != (Side)side && Side::Right != (Side)side) + continue; + if (m_parameters.biped && legIndex != m_legs.size() - 1) { + if (nodeIndex == nodes.size() - 2) { + ccdIkSolver.setNodeHingeConstraint(nodeIndex, QVector3D(1.0, 0.0, 0.0), 180 - 60, 180 - 30); + continue; + } + //if (nodeIndex == nodes.size() - 3) { + // ccdIkSolver.setNodeHingeConstraint(nodeIndex, QVector3D(1.0, 0.0, 0.0), 180 - 15, 180 + 15); + // continue; + //} + } else { + if (nodeIndex == nodes.size() - 2) { + ccdIkSolver.setNodeHingeConstraint(nodeIndex, QVector3D(1.0, 0.0, 0.0), 90 - 15, 90 + 15); + continue; + } + if (m_parameters.biped) { + if (nodeIndex == nodes.size() - 3) { + ccdIkSolver.setNodeHingeConstraint(nodeIndex, QVector3D(1.0, 0.0, 0.0), 240 - 15, 240 + 15); + continue; + } + } else { + if (nodeIndex == nodes.size() - 3) { + ccdIkSolver.setNodeHingeConstraint(nodeIndex, QVector3D(1.0, 0.0, 0.0), 270 - 15, 270 + 15); + continue; + } + } + } + ccdIkSolver.setNodeHingeConstraint(nodeIndex, QVector3D(1.0, 0.0, 0.0), 0, 360); + } + const auto &topNodePosition = nodes[0].position; + const auto &shoulderNodePosition = nodes[1].position; + const auto &bottomNodePosition = nodes[nodes.size() - 1].position; + if (m_parameters.biped && legIndex != m_legs.size() - 1) { + ccdIkSolver.solveTo(QVector3D(shoulderNodePosition.x(), bottom, topNodePosition.z() + moveOffset)); + } else { + ccdIkSolver.solveTo(QVector3D(bottomNodePosition.x(), bottom, topNodePosition.z() + moveOffset)); + } + for (size_t i = 0; i < nodes.size(); ++i) { + nodes[i].position = ccdIkSolver.getNodeSolvedPosition(i); + } + } + } +} + +void VertebrataMotion::generate() +{ + prepareLegHeights(); + prepareLegs(); + prepareLegHeightIndices(); + + ChainSimulator *tailSimulator = nullptr; + + int tailNodeIndex = -1; + + if (!m_legs.empty()) + tailNodeIndex = m_legs[m_legs.size() - 1].spineNodeIndex; + QVector3D tailSpineOffset; + + for (size_t cycle = 0; cycle < m_parameters.cycles; ++cycle) { + for (size_t heightIndex = 0; heightIndex < m_legHeights.size(); ++heightIndex) { + calculateLegMoves(heightIndex); + calculateSpineJoints(); + + if (nullptr == tailSimulator && -1 != tailNodeIndex) { + std::vector ropeVertices(m_spineNodes.size() - tailNodeIndex); + for (size_t nodeIndex = tailNodeIndex; nodeIndex < m_spineNodes.size(); ++nodeIndex) { + ropeVertices[nodeIndex - tailNodeIndex] = m_spineNodes[nodeIndex].position; + } + tailSimulator = new ChainSimulator(&ropeVertices); + tailSimulator->setExternalForce(QVector3D(0.0, 9.80665 * m_parameters.tailLiftForce, -9.80665 * m_parameters.tailDragForce)); + tailSimulator->fixVertexPosition(0); + tailSimulator->setGroundY(m_groundY); + tailSimulator->start(); + + tailSpineOffset = m_updatedSpineNodes[tailNodeIndex].position - m_spineNodes[tailNodeIndex].position; + } + + if (nullptr != tailSimulator) { + tailSimulator->updateVertexPosition(0, m_updatedSpineNodes[tailNodeIndex].position - tailSpineOffset); + tailSimulator->simulate(1.0 / 60); + for (size_t nodeIndex = tailNodeIndex; nodeIndex < m_spineNodes.size(); ++nodeIndex) { + m_updatedSpineNodes[nodeIndex].position = tailSimulator->getVertexMotion(nodeIndex - tailNodeIndex).position + tailSpineOffset; + } + } + + auto frame = m_updatedSpineNodes; + for (const auto &it: m_legs) { + for (const auto &nodes: it.updatedNodes) + for (const auto &node: nodes) + frame.push_back(node); + } + + m_frames.push_back(frame); + } + } + + delete tailSimulator; +} diff --git a/src/vertebratamotion.h b/src/vertebratamotion.h new file mode 100644 index 00000000..2005c337 --- /dev/null +++ b/src/vertebratamotion.h @@ -0,0 +1,100 @@ +#ifndef DUST3D_VERTEBRATA_MOTION_H +#define DUST3D_VERTEBRATA_MOTION_H +#include +#include +#include +#include + +class VertebrataMotion +{ +public: + struct Parameters + { + double stanceTime = 0.35; + double swingTime = 0.23; + double hipHeight = 0.39; + double armLength = 0.29; + double legSideIntval = 0.5; + double legBalanceIntval = 0.5; + double spineStability = 0.5; + size_t cycles = 5; + double groundOffset = 0.4; + double tailLiftForce = 2.0; + double tailDragForce = 4.0; + bool biped = false; + }; + + struct Node + { + QVector3D position; + double radius; + int boneIndex = -1; + bool isTail = false; + }; + + enum class Side + { + Middle = 0, + Left, + Right, + }; + + struct Leg + { + std::vector> nodes; + std::vector> updatedNodes; + size_t heightIndices[3] = {0, 0, 0}; + size_t spineNodeIndex = 0; + double top = 0.0; + double move[3] = {0, 0, 0}; + }; + + VertebrataMotion() + { + } + + void setSpineNodes(const std::vector &nodes) + { + m_spineNodes = nodes; + } + + void setLegNodes(size_t spineNodeIndex, Side side, const std::vector &nodes) + { + m_legNodes[{spineNodeIndex, side}] = nodes; + } + + const std::vector> &frames() + { + return m_frames; + } + + void setParameters(const Parameters ¶meters) + { + m_parameters = parameters; + } + + void setGroundY(double groundY) + { + m_groundY = groundY; + } + + void generate(); +private: + std::vector> m_frames; + Parameters m_parameters; + std::vector m_spineNodes; + std::vector m_updatedSpineNodes; + std::map, std::vector> m_legNodes; + std::vector m_legHeights; + std::vector m_legMoveOffsets; + std::vector m_legs; + double m_groundY = 0.0; + + void prepareLegHeights(); + void prepareLegs(); + void prepareLegHeightIndices(); + void calculateLegMoves(size_t heightIndex); + void calculateSpineJoints(); +}; + +#endif diff --git a/src/vertebratamotionparameterswidget.cpp b/src/vertebratamotionparameterswidget.cpp new file mode 100644 index 00000000..cac16747 --- /dev/null +++ b/src/vertebratamotionparameterswidget.cpp @@ -0,0 +1,170 @@ +#include +#include +#include +#include "vertebratamotionparameterswidget.h" +#include "util.h" + +std::map VertebrataMotionParametersWidget::fromVertebrataMotionParameters(const VertebrataMotion::Parameters &from) +{ + std::map parameters; + + parameters["stanceTime"] = QString::number(from.stanceTime); + parameters["swingTime"] = QString::number(from.swingTime); + parameters["hipHeight"] = QString::number(from.hipHeight); + parameters["armLength"] = QString::number(from.armLength); + parameters["legSideIntval"] = QString::number(from.legSideIntval); + parameters["legBalanceIntval"] = QString::number(from.legBalanceIntval); + parameters["spineStability"] = QString::number(from.spineStability); + parameters["cycles"] = QString::number(from.cycles); + parameters["groundOffset"] = QString::number(from.groundOffset); + parameters["tailLiftForce"] = QString::number(from.tailLiftForce); + parameters["tailDragForce"] = QString::number(from.tailDragForce); + + return parameters; +} + +VertebrataMotion::Parameters VertebrataMotionParametersWidget::toVertebrataMotionParameters(const std::map ¶meters) +{ + VertebrataMotion::Parameters vertebrataMotionParameters; + + if (parameters.end() != parameters.find("stanceTime")) + vertebrataMotionParameters.stanceTime = valueOfKeyInMapOrEmpty(parameters, "stanceTime").toDouble(); + if (parameters.end() != parameters.find("swingTime")) + vertebrataMotionParameters.swingTime = valueOfKeyInMapOrEmpty(parameters, "swingTime").toDouble(); + if (parameters.end() != parameters.find("hipHeight")) + vertebrataMotionParameters.hipHeight = valueOfKeyInMapOrEmpty(parameters, "hipHeight").toDouble(); + if (parameters.end() != parameters.find("armLength")) + vertebrataMotionParameters.armLength = valueOfKeyInMapOrEmpty(parameters, "armLength").toDouble(); + if (parameters.end() != parameters.find("legSideIntval")) + vertebrataMotionParameters.legSideIntval = valueOfKeyInMapOrEmpty(parameters, "legSideIntval").toDouble(); + if (parameters.end() != parameters.find("legBalanceIntval")) + vertebrataMotionParameters.legBalanceIntval = valueOfKeyInMapOrEmpty(parameters, "legBalanceIntval").toDouble(); + if (parameters.end() != parameters.find("spineStability")) + vertebrataMotionParameters.spineStability = valueOfKeyInMapOrEmpty(parameters, "spineStability").toDouble(); + if (parameters.end() != parameters.find("cycles")) + vertebrataMotionParameters.cycles = valueOfKeyInMapOrEmpty(parameters, "cycles").toInt(); + if (parameters.end() != parameters.find("groundOffset")) + vertebrataMotionParameters.groundOffset = valueOfKeyInMapOrEmpty(parameters, "groundOffset").toDouble(); + if (parameters.end() != parameters.find("tailLiftForce")) + vertebrataMotionParameters.tailLiftForce = valueOfKeyInMapOrEmpty(parameters, "tailLiftForce").toDouble(); + if (parameters.end() != parameters.find("tailDragForce")) + vertebrataMotionParameters.tailDragForce = valueOfKeyInMapOrEmpty(parameters, "tailDragForce").toDouble(); + + return vertebrataMotionParameters; +} + +VertebrataMotionParametersWidget::VertebrataMotionParametersWidget(const std::map ¶meters) : + m_parameters(parameters) +{ + m_vertebrataMotionParameters = toVertebrataMotionParameters(m_parameters); + + QFormLayout *parametersLayout = new QFormLayout; + parametersLayout->setSpacing(0); + + QDoubleSpinBox *stanceTimeBox = new QDoubleSpinBox; + stanceTimeBox->setValue(m_vertebrataMotionParameters.stanceTime); + stanceTimeBox->setSuffix(" s"); + parametersLayout->addRow(tr("Stance time: "), stanceTimeBox); + connect(stanceTimeBox, QOverload::of(&QDoubleSpinBox::valueChanged), [&](double value){ + m_vertebrataMotionParameters.stanceTime = value; + m_parameters = fromVertebrataMotionParameters(m_vertebrataMotionParameters); + emit parametersChanged(); + }); + + QDoubleSpinBox *swingTimeBox = new QDoubleSpinBox; + swingTimeBox->setValue(m_vertebrataMotionParameters.swingTime); + swingTimeBox->setSuffix(" s"); + parametersLayout->addRow(tr("Swing time: "), swingTimeBox); + connect(swingTimeBox, QOverload::of(&QDoubleSpinBox::valueChanged), [&](double value){ + m_vertebrataMotionParameters.swingTime = value; + m_parameters = fromVertebrataMotionParameters(m_vertebrataMotionParameters); + emit parametersChanged(); + }); + + QDoubleSpinBox *hipHeightBox = new QDoubleSpinBox; + hipHeightBox->setValue(m_vertebrataMotionParameters.hipHeight); + parametersLayout->addRow(tr("Hip height: "), hipHeightBox); + connect(hipHeightBox, QOverload::of(&QDoubleSpinBox::valueChanged), [&](double value){ + m_vertebrataMotionParameters.hipHeight = value; + m_parameters = fromVertebrataMotionParameters(m_vertebrataMotionParameters); + emit parametersChanged(); + }); + + QDoubleSpinBox *armLengthBox = new QDoubleSpinBox; + armLengthBox->setValue(m_vertebrataMotionParameters.armLength); + parametersLayout->addRow(tr("Arm length: "), armLengthBox); + connect(armLengthBox, QOverload::of(&QDoubleSpinBox::valueChanged), [&](double value){ + m_vertebrataMotionParameters.armLength = value; + m_parameters = fromVertebrataMotionParameters(m_vertebrataMotionParameters); + emit parametersChanged(); + }); + + QDoubleSpinBox *legSideIntvalBox = new QDoubleSpinBox; + legSideIntvalBox->setValue(m_vertebrataMotionParameters.legSideIntval); + parametersLayout->addRow(tr("Leg side intval: "), legSideIntvalBox); + connect(legSideIntvalBox, QOverload::of(&QDoubleSpinBox::valueChanged), [&](double value){ + m_vertebrataMotionParameters.legSideIntval = value; + m_parameters = fromVertebrataMotionParameters(m_vertebrataMotionParameters); + emit parametersChanged(); + }); + + QDoubleSpinBox *legBalanceIntvalBox = new QDoubleSpinBox; + legBalanceIntvalBox->setValue(m_vertebrataMotionParameters.legBalanceIntval); + parametersLayout->addRow(tr("Leg balance intval: "), legBalanceIntvalBox); + connect(legBalanceIntvalBox, QOverload::of(&QDoubleSpinBox::valueChanged), [&](double value){ + m_vertebrataMotionParameters.legBalanceIntval = value; + m_parameters = fromVertebrataMotionParameters(m_vertebrataMotionParameters); + emit parametersChanged(); + }); + + QDoubleSpinBox *spineStabilityBox = new QDoubleSpinBox; + spineStabilityBox->setValue(m_vertebrataMotionParameters.spineStability); + parametersLayout->addRow(tr("Spine stability: "), spineStabilityBox); + connect(spineStabilityBox, QOverload::of(&QDoubleSpinBox::valueChanged), [&](double value){ + m_vertebrataMotionParameters.spineStability = value; + m_parameters = fromVertebrataMotionParameters(m_vertebrataMotionParameters); + emit parametersChanged(); + }); + + QSpinBox *cyclesBox = new QSpinBox; + cyclesBox->setValue(m_vertebrataMotionParameters.cycles); + parametersLayout->addRow(tr("Cycles: "), cyclesBox); + connect(cyclesBox, QOverload::of(&QSpinBox::valueChanged), [&](int value){ + m_vertebrataMotionParameters.cycles = value; + m_parameters = fromVertebrataMotionParameters(m_vertebrataMotionParameters); + emit parametersChanged(); + }); + + QDoubleSpinBox *groundOffsetBox = new QDoubleSpinBox; + groundOffsetBox->setRange(-2.0, 2.0); + groundOffsetBox->setValue(m_vertebrataMotionParameters.groundOffset); + parametersLayout->addRow(tr("Ground offset: "), groundOffsetBox); + connect(groundOffsetBox, QOverload::of(&QDoubleSpinBox::valueChanged), [&](double value){ + m_vertebrataMotionParameters.groundOffset = value; + m_parameters = fromVertebrataMotionParameters(m_vertebrataMotionParameters); + emit parametersChanged(); + }); + + QDoubleSpinBox *tailLiftForceBox = new QDoubleSpinBox; + tailLiftForceBox->setRange(-10.0, 10.0); + tailLiftForceBox->setValue(m_vertebrataMotionParameters.tailLiftForce); + tailLiftForceBox->setSuffix(" g"); + parametersLayout->addRow(tr("Tail lift force: "), tailLiftForceBox); + connect(tailLiftForceBox, QOverload::of(&QDoubleSpinBox::valueChanged), [&](double value){ + m_vertebrataMotionParameters.tailLiftForce = value; + m_parameters = fromVertebrataMotionParameters(m_vertebrataMotionParameters); + emit parametersChanged(); + }); + + QDoubleSpinBox *tailDragForceBox = new QDoubleSpinBox; + tailDragForceBox->setValue(m_vertebrataMotionParameters.tailDragForce); + tailDragForceBox->setSuffix(" g"); + parametersLayout->addRow(tr("Tail drag force: "), tailDragForceBox); + connect(tailDragForceBox, QOverload::of(&QDoubleSpinBox::valueChanged), [&](double value){ + m_vertebrataMotionParameters.tailDragForce = value; + m_parameters = fromVertebrataMotionParameters(m_vertebrataMotionParameters); + emit parametersChanged(); + }); + + setLayout(parametersLayout); +} diff --git a/src/vertebratamotionparameterswidget.h b/src/vertebratamotionparameterswidget.h new file mode 100644 index 00000000..11a376d6 --- /dev/null +++ b/src/vertebratamotionparameterswidget.h @@ -0,0 +1,28 @@ +#ifndef DUST3D_VERTEBRATA_MOTION_PARAMETERS_WIDGET_H +#define DUST3D_VERTEBRATA_MOTION_PARAMETERS_WIDGET_H +#include +#include +#include +#include "vertebratamotion.h" + +class VertebrataMotionParametersWidget : public QWidget +{ + Q_OBJECT +signals: + void parametersChanged(); +public: + VertebrataMotionParametersWidget(const std::map ¶meters=std::map()); + + const std::map &getParameters() const + { + return m_parameters; + } + + static std::map fromVertebrataMotionParameters(const VertebrataMotion::Parameters &from); + static VertebrataMotion::Parameters toVertebrataMotionParameters(const std::map ¶meters); +private: + std::map m_parameters; + VertebrataMotion::Parameters m_vertebrataMotionParameters; +}; + +#endif